(EDA技术及应用)VerilogHDL设计应用实例课件.ppt

上传人(卖家):晟晟文业 文档编号:4484846 上传时间:2022-12-13 格式:PPT 页数:224 大小:1.89MB
下载 相关 举报
(EDA技术及应用)VerilogHDL设计应用实例课件.ppt_第1页
第1页 / 共224页
(EDA技术及应用)VerilogHDL设计应用实例课件.ppt_第2页
第2页 / 共224页
(EDA技术及应用)VerilogHDL设计应用实例课件.ppt_第3页
第3页 / 共224页
(EDA技术及应用)VerilogHDL设计应用实例课件.ppt_第4页
第4页 / 共224页
(EDA技术及应用)VerilogHDL设计应用实例课件.ppt_第5页
第5页 / 共224页
点击查看更多>>
资源描述

1、第第6 6章章 Verilog HDL设计应用实例设计应用实例第第6章章 Verilog HDL设计应用实例设计应用实例在掌握了在掌握了EDA技术的基础知识和基本操作后,学习技术的基础知识和基本操作后,学习EDA技术最有效地方法就是进行技术最有效地方法就是进行EDA技术的综合应用设计。本章技术的综合应用设计。本章阐述了阐述了12个非常实用的个非常实用的Verilog HDL综合应用设计实例的系综合应用设计实例的系统设计思路,主要统设计思路,主要Verilog HDL源程序,部分时序仿真和逻源程序,部分时序仿真和逻辑综合结果及分析,以及硬件的逻辑验证方法。这些综合应辑综合结果及分析,以及硬件的逻

2、辑验证方法。这些综合应用设计实例包括用设计实例包括8位加法器、位加法器、8位乘法器、位乘法器、8位除法器等基本位除法器等基本运算电路,数字频率计、数字秒表、交通灯信号控制器、可运算电路,数字频率计、数字秒表、交通灯信号控制器、可调信号发生电路、闹钟系统等常用应用电路,调信号发生电路、闹钟系统等常用应用电路,PWM信号发信号发生器、高速生器、高速PID控制器,控制器,FIR滤波器,滤波器,CORDIC算法的应用算法的应用等电机控制、数字信号处理、模糊控制、神经网络中经常用等电机控制、数字信号处理、模糊控制、神经网络中经常用到的基本电路。到的基本电路。第第6 6章章 Verilog HDL设计应用

3、实例设计应用实例6.1 8位加法器的设计6.2 8位乘法器的设计6.3 8位除法器的设计6.4 可调信号发生器的设计6.5 PWM信号发生器的设计6.6 数字频率计的设计6.7 数字秒表的设计6.8 交通灯信号控制器的设计6.9 高速PID控制器的设计6.10 FIR滤波器的设计6.11 CORDIC算法的应用设计6.12 闹钟系统的设计目录目录第第6 6章章 Verilog HDL设计应用实例设计应用实例6.1 8位加法器的设计位加法器的设计 1系统设计思路系统设计思路 加法器是数字系统中的基本逻辑器件,减法器和硬件乘法器加法器是数字系统中的基本逻辑器件,减法器和硬件乘法器都可由加法器来构成

4、。多位加法器的构成有两种方式:并行进位和都可由加法器来构成。多位加法器的构成有两种方式:并行进位和串行进位。并行进位加法器设有进位产生逻辑,运算速度较快;串串行进位。并行进位加法器设有进位产生逻辑,运算速度较快;串行进位方式是将全加器级联构成多位加法器。并行进位加法器通常行进位方式是将全加器级联构成多位加法器。并行进位加法器通常比串行级联加法器占用更多的资源。随着位数的增加,相同位数的比串行级联加法器占用更多的资源。随着位数的增加,相同位数的并行加法器与串行加法器的资源占用差距也越来越大。因此,在工并行加法器与串行加法器的资源占用差距也越来越大。因此,在工程中使用加法器时,要在速度和容量之间寻

5、找平衡点。程中使用加法器时,要在速度和容量之间寻找平衡点。实践证明,实践证明,4位二进制并行加法器和串行级联加法器占用几乎相位二进制并行加法器和串行级联加法器占用几乎相同的资源。这样,多位加法器由同的资源。这样,多位加法器由4位二进制并行加法器级联构成是位二进制并行加法器级联构成是较好的折中选择。本设计中的较好的折中选择。本设计中的8位二进制并行加法器即是由两个位二进制并行加法器即是由两个4位位二进制并行加法器级联而成的,其电路原理图如下图。二进制并行加法器级联而成的,其电路原理图如下图。第第6 6章章 Verilog HDL设计应用实例设计应用实例图图6.1 8位加法器电路原理图位加法器电路

6、原理图第第6 6章章 Verilog HDL设计应用实例设计应用实例2Verilog HDL源程序源程序14位二进制并行加法器的源程序位二进制并行加法器的源程序/4位二进制并行加法器位二进制并行加法器module adder4b(a4,b4,c4,s4,co4);input 3:0 a4,b4;input c4;output 3:0 s4;output co4;assign co4,s4=a4+b4+c4;endmodule第第6 6章章 Verilog HDL设计应用实例设计应用实例28位二进制加法器的源程序位二进制加法器的源程序/8位二进制并行加法器位二进制并行加法器module adde

7、r8b(a8,b8,c8,s8,co8);input 7:0 a8,b8;input c8;output 7:0 s8;output co8;wire sc;adder4b u1(.a4(a83:0),.b4(b83:0),.c4(c8),.s4(s83:0),.co4(sc);adder4b u2(.a4(a87:4),.b4(b87:4),.c4(sc),.s4(s87:4),.co4(co8);endmodule第第6 6章章 Verilog HDL设计应用实例设计应用实例 3仿真结果验证仿真结果验证 在程序调试和仿真时,我们要使用自底向上的方法进行,也就在程序调试和仿真时,我们要使用自

8、底向上的方法进行,也就是对于含有多个模块的设计,我们要先从底层模块进行调试和仿真,是对于含有多个模块的设计,我们要先从底层模块进行调试和仿真,再进行更高层次模块的调试和仿真,最后进行顶层模块的调试与仿再进行更高层次模块的调试和仿真,最后进行顶层模块的调试与仿真。图和图分别是使用对真。图和图分别是使用对adder4b和和adder8b进行时序仿真的结果。进行时序仿真的结果。从仿真结果可以看出,从输入到输出,有一个时延,时间大概在几从仿真结果可以看出,从输入到输出,有一个时延,时间大概在几个纳秒。同时输出要经过一个大概几个纳秒的不稳定状态或过渡过个纳秒。同时输出要经过一个大概几个纳秒的不稳定状态或

9、过渡过程,系统才达到一个稳定而正确的结果。并且经过对各组输入与输程,系统才达到一个稳定而正确的结果。并且经过对各组输入与输出数据的分析,仿真结果是正确的。出数据的分析,仿真结果是正确的。4逻辑综合分析逻辑综合分析 图是使用进行逻辑综合后图是使用进行逻辑综合后adder8b的的RTL视图,图是对视图,图是对adder8b的的RTL视图中的视图中的adder4b进行展开后的视图。图是使用对进行展开后的视图。图是使用对 adder8b进行逻辑综合后的资源使用情况。进行逻辑综合后的资源使用情况。第第6 6章章 Verilog HDL设计应用实例设计应用实例图图6.2 adder4b的时序仿真结果的时序

10、仿真结果图图6.3 adder8b的时序仿真结果的时序仿真结果第第6 6章章 Verilog HDL设计应用实例设计应用实例图图6.4 adder8b综合后的综合后的RTL视图视图图图6.5 adder8b综合后的综合后的RTL视图中将视图中将adder4b展开后的视图展开后的视图第第6 6章章 Verilog HDL设计应用实例设计应用实例图图6.6 adder8b逻辑综合后的资源使用情况逻辑综合后的资源使用情况第第6 6章章 Verilog HDL设计应用实例设计应用实例 5硬件逻辑验证硬件逻辑验证 假设使用假设使用GW48-CK EDA实验开发系统进行硬件逻辑验实验开发系统进行硬件逻辑验

11、证,可选择实验电路结构图,由的实验电路结构图和图确定证,可选择实验电路结构图,由的实验电路结构图和图确定引脚的锁定。如可取实验电路结构图的引脚的锁定。如可取实验电路结构图的PIO3PIO0接接a83:0,PIO7PIO4接接a87:4,PIO11PIO8接接b83:0,PIO15PIO12接接b87:4,PIO49接接c8。此加法器的被加数。此加法器的被加数a8和加数和加数b8分别由键分别由键2与键与键1、键、键4与键与键3输入,加法器的最低位进位输入,加法器的最低位进位c8由由键键8输入,计算结果将分别通过输入,计算结果将分别通过PIO23PIO20,PIO19PIO16输出并显示于数码管输

12、出并显示于数码管6(高高4位位)和数码管和数码管5(低低4位位),溢出,溢出进位由进位由PIO39输出,当有进位时,结果显示于发光管输出,当有进位时,结果显示于发光管D8。第第6 6章章 Verilog HDL设计应用实例设计应用实例6.2 8位乘法器的设计位乘法器的设计 1系统设计思路系统设计思路 一般乘法器各种不同的设计技巧,综合后的电路亦有不一般乘法器各种不同的设计技巧,综合后的电路亦有不同的执行效能。本节将介绍移位乘法器、定点乘法器及布斯同的执行效能。本节将介绍移位乘法器、定点乘法器及布斯booth乘法器的设计。乘法器的设计。1)8位移位乘法器位移位乘法器 不带符号的不带符号的8位乘法

13、器假设以连加方式,那么最差情况需位乘法器假设以连加方式,那么最差情况需要要28-1次方能完成计算;而以移位式那么最多仅需要次方能完成计算;而以移位式那么最多仅需要8次即可次即可完成乘法计算。移位式完成乘法计算。移位式8位乘法器计算流程如下:位乘法器计算流程如下:第第6 6章章 Verilog HDL设计应用实例设计应用实例 1输入输入8位被乘数位被乘数a及乘数及乘数b时,程序会先判断输入值:时,程序会先判断输入值:*假设乘数及被乘数有一个为假设乘数及被乘数有一个为0,那么输出乘积为,那么输出乘积为0;*假设被乘数与乘数中有一数为假设被乘数与乘数中有一数为1,那么输出乘积为被乘数或乘,那么输出乘

14、积为被乘数或乘数;数;*假设被乘数或乘数皆非假设被乘数或乘数皆非0或或1,那么利用算法求得乘积;,那么利用算法求得乘积;先预设乘积先预设乘积p为为0,位,位n=0,0 位位n8。算法求乘积的方法是:利用判断乘数中的第算法求乘积的方法是:利用判断乘数中的第n位是否为位是否为1的方法的方法进行计算。假设为进行计算。假设为1,那么乘积缓存器等于被乘数左移,那么乘积缓存器等于被乘数左移n位,积位,积数等于乘积缓存器加积数;假设为数等于乘积缓存器加积数;假设为0,那么,那么n位位=n位位+1。如此判。如此判断断8次即可获得乘积。次即可获得乘积。2当乘数和被乘数均为当乘数和被乘数均为8位时,以位时,以fo

15、r循环执行循环执行8次即可完次即可完成乘法计算。成乘法计算。第第6 6章章 Verilog HDL设计应用实例设计应用实例 2)8位定点乘法器位定点乘法器 一般作乘法运算时,均以乘数的每一位数乘以被乘数后,一般作乘法运算时,均以乘数的每一位数乘以被乘数后,所得部分乘积再依乘数每一位数的位置对齐后相加。经过对所得部分乘积再依乘数每一位数的位置对齐后相加。经过对二进制乘法运算规律的总结,定点乘法运算中进行相加的运二进制乘法运算规律的总结,定点乘法运算中进行相加的运算规那么为:算规那么为:1当乘数的位数字为当乘数的位数字为1时,可将被乘数的值放置适当的时,可将被乘数的值放置适当的位置作为部分乘积;位

16、置作为部分乘积;2当乘数的位数字为当乘数的位数字为0时,可将时,可将0放置适当的位置作为放置适当的位置作为部分乘积;部分乘积;3在硬件中可当在硬件中可当and门做判断,例如:门做判断,例如:1010*1,乘数,乘数1和每一个被乘数的位都作和每一个被乘数的位都作and运算,其结果为运算,其结果为1010,只须用,只须用and门就可得到部分乘积;门就可得到部分乘积;(4)当部分乘积都求得后,再用加法器将上述部分乘积相当部分乘积都求得后,再用加法器将上述部分乘积相加完成乘积运算。加完成乘积运算。第第6 6章章 Verilog HDL设计应用实例设计应用实例 3)8位布斯乘法器位布斯乘法器 布斯布斯b

17、ooth乘法算法,先将被乘数的最低位加设一乘法算法,先将被乘数的最低位加设一虚拟位,开始虚拟位设为虚拟位,开始虚拟位设为0并存放于被乘数中,由最低位与并存放于被乘数中,由最低位与虚拟位,一次判定两位,两位判定可能情况会有如下虚拟位,一次判定两位,两位判定可能情况会有如下4种:种:100:不执行运算,乘积缓存器直接右移一位;:不执行运算,乘积缓存器直接右移一位;201:将乘积加上被乘数后右移一位;:将乘积加上被乘数后右移一位;310:将乘积减去被乘数后右移一位;:将乘积减去被乘数后右移一位;411:不执行运算,乘积缓存器直接右移一位。:不执行运算,乘积缓存器直接右移一位。第第6 6章章 Veri

18、log HDL设计应用实例设计应用实例 2.Verilog HDL源程序源程序 1)8位移位乘法器位移位乘法器/8位移位乘法器位移位乘法器module mult8s(p,a,b);input 7:0 a,b;/a:被乘数被乘数,b:乘数乘数 output 15:0 p;/16位乘积位乘积 reg 15:0 rp,temp;reg 7:0 ra,rb;reg 3:0 rbn;always(a or b)beginra=a;rb=b;if(a=0|b=0)/当当a=0或或b=0时时p=0 rp=16b0;第第6 6章章 Verilog HDL设计应用实例设计应用实例else if(a=1)/当当a

19、=1时时p=b rp=rb;else if(b=1)/当当b=1时时p=a rp=ra;else begin rp=15b0;for(rbn=0;rbn8;rbn=rbn+1)if (rbrbn=1b1)begin temp=ra rbn;/左移左移bitn位位 rp=rp+temp;endend end assign p=rp;endmodule第第6 6章章 Verilog HDL设计应用实例设计应用实例 2)8位定点乘法器位定点乘法器/8位定点乘法器位定点乘法器module mult8_fp(p,a,b);parameter width=8;/设定数据宽度为设定数据宽度为8位位 inpu

20、t width-1:0 a;/被乘数被乘数 input width-1:0 b;/乘数乘数 output width+width-1:0 p;/乘积乘积 reg width-1:0 pp;/设定乘积的暂存器设定乘积的暂存器 reg width-1:0 ps;/设定和的暂存器设定和的暂存器 reg width-1:0 pc;/设定进位的暂存器设定进位的暂存器 reg width-1:0 ps1,pc1;reg width-1:0 ppram width-1:0;/设定乘积的暂存器设定乘积的暂存器 reg width-1:0 psram width:0;/设定和的暂存器设定和的暂存器 reg wi

21、dth-1:0 pcram width:0;/设定进位的暂存器设定进位的暂存器 reg width+width-1:0 temp;/设定乘积的暂存器设定乘积的暂存器 integer j,k;第第6 6章章 Verilog HDL设计应用实例设计应用实例 always(a or b)/读取乘数与被乘数读取乘数与被乘数begin for(j=0;jwidth;j=j+1)begin for(k=0;kwidth;k=k+1)ppk=ak&bj;/利用利用and完成部分乘积完成部分乘积ppramj=ppwidth-1:0;/存入乘积缓存器中存入乘积缓存器中pcj=0;/将进位将进位pc设定为设定为0

22、 end pcram0=pcwidth-1:0;psram0=ppram0;/将将ppram的列设定给的列设定给pp pp=ppram0;temp0=pp0;for(j=1;jwidth;j=j+1)begin 第第6 6章章 Verilog HDL设计应用实例设计应用实例pp=ppramj;/将将ppram的列设定给的列设定给ppps=psramj-1;pc=pcramj-1;for(k=0;kwidth-1;k=k+1)begin ps1k=ppk pck psk+1;/全加器之和与进位运算全加器之和与进位运算 pc1k=ppk&pck|ppk&psk+1|pck&psk+1;/endps

23、1width-1=ppwidth-1;/将将pp乘积指定给乘积指定给ps1pc1width-1=0;/设定每列的最后一个进位都为设定每列的最后一个进位都为0tempj=ps10;/将每个将每个ps1(0)设定给乘积设定给乘积psramj=ps1width-1:0;/将将ps1存到存到psram数组中数组中pcramj=pc1width-1:0;end第第6 6章章 Verilog HDL设计应用实例设计应用实例ps=psramwidth-1;pc=pcramwidth-1;pc10=0;ps10=0;for(k=1;kwidth;k=k+1)beginps1k=pc1k-1pck-1psk;/

24、全加器之和与进位运算全加器之和与进位运算pc1k=pc1k-1&pck-1|pc1k-1&psk|pck-1&psk;endtempwidth+width-1=pc1width-1;/将将ps1的值设定给乘积结果的值设定给乘积结果tempwidth+width-2:width=ps1width-1:1;end assign p=tempwidth+width-1:0;/乘积结果的输出乘积结果的输出endmodule第第6 6章章 Verilog HDL设计应用实例设计应用实例 3)8位布斯乘法器位布斯乘法器/8位布斯乘法器位布斯乘法器 module booth(a,b,p);parameter

25、 width=8;/设定为设定为8位位 input width-1:0 a,b;/a:被乘数被乘数,b:乘数乘数 output width+width-1:0 p;/乘积结果乘积结果 reg width+width-1:0 p;integer cnt;/右移次数右移次数 reg width+width:0 pa,right;/暂存乘数暂存乘数 always (a or b)beginpawidth+width:0=16b0,a,1b0;/p,a,1b0for(cnt=0;cnt width;cnt=cnt+1)begin case(pa1:0)/pa最后两位最后两位pa1:0用于用于case选

26、择函数选择函数第第6 6章章 Verilog HDL设计应用实例设计应用实例2b10:begin /pa=pa-b pawidth+width:width+1=pawidth+width:width+1-bwidth-1:0;rshift(pa,right);/执行算术右移执行算术右移task子程序子程序 end2b01:begin /pa=pa+b pawidth+width:width+1=pawidth+width:width+1+bwidth-1:0;rshift(pa,right);/执行算术右移执行算术右移task子程序子程序 enddefault:rshift(pa,right)

27、;/直接执行算术右移直接执行算术右移task子程序子程序 endcase第第6 6章章 Verilog HDL设计应用实例设计应用实例 pa=right;end pwidth+width-1:0=pawidth+width:1;/将乘积指定给输出端将乘积指定给输出端 end /右移右移task子程序子程序 task rshift;input width+width:0 pa;/输入为输入为paoutput width+width:0 right;/输出为输出为rightcase(pawidth+width)/最高位为最高位为0的算术右移的算术右移 1b0:rightwidth+width:0=

28、1b0,pawidth+width:1;/最高位为最高位为1的算术右移的算术右移 1b1:rightwidth+width:0=1b1,pawidth+width:1;endcase endtaskendmodule第第6 6章章 Verilog HDL设计应用实例设计应用实例3仿真结果验证图是使用对移位乘法器图是使用对移位乘法器mult8s进行时序仿真的结果。如当输入进行时序仿真的结果。如当输入a=36,b=12,乘积输出,乘积输出p应为应为36 12=432,而实际仿真输出为,而实际仿真输出为432,因此仿真结果是正确的。同理可验证其余的仿真结果也,因此仿真结果是正确的。同理可验证其余的仿

29、真结果也是正确的。定点乘法器是正确的。定点乘法器mult8_fp和布斯乘法器和布斯乘法器booth的时序仿真的时序仿真和结果分析,请读者自己完成。和结果分析,请读者自己完成。图图6.7 移位乘法器移位乘法器mult8s的时序仿真结果的时序仿真结果第第6 6章章 Verilog HDL设计应用实例设计应用实例4逻辑综合分析根据第节所述的方法,请读者自己进行逻辑综合,查看并分析有关综合结果。5硬件逻辑验证假设使用GW48-CK EDA实验开发系统进行硬件逻辑验证,可选择实验电路结构图,由节的实验电路结构图和对应程序的输入输出端口定义确定引脚的锁定。被乘数a7:0接PIO15PIO8(由键4,键3输

30、入8位二进制数),乘数b7:0接PIO7PIO0(由键2,键1输入8位二进制数),乘积输出p15:0接PIO31PIO16。进行硬件验证时方法如下:键4和键3分别输入被乘数的高4位和低4位(输入值显示于数码4和数码3),键2和键1分别输入乘数的高4位和低4位(输入值显示于数码2和数码1);乘积显示于数码管85,高位在左。第第6 6章章 Verilog HDL设计应用实例设计应用实例6.3 8位除法器的设计位除法器的设计1系统设计思路1)8位移位除法器1输入被除数a及除数b时,程序会先判断输入值:*假设除数及被除数均为0,那么此表达式无意义,商数输出记为0,余数输出记为0,因为溢位输出为1,所以

31、商数无意义;*假设除数为0且被除数大于0,那么此表达式溢位输出,商数输出为0,余数输出为0,溢位输出为1;*假设被除数及除数相等,那么输出商数为1,余数输出为0,溢位输出为0;*假设被除数小于除数,那么输出商数为0,余位输出为被除数,溢位输出为0;*假设除数为1,那么输出商数为被除数,余数输出为0,溢位输出为0;第第6 6章章 Verilog HDL设计应用实例设计应用实例*假设被除数大于除数,那么利用以下算法求出商数;假设被除数大于除数,那么利用以下算法求出商数;预设商数预设商数q为为0,余数,余数r为为0,位,位cn=8为为8位除法器;位除法器;此算法先判断位此算法先判断位cn是否大于是否

32、大于0,假设大于,假设大于0,那么余数左移一,那么余数左移一位,余数那么等于余数加上被除数第位,余数那么等于余数加上被除数第cn-1位的值,商数左移位的值,商数左移一位。再判断余数是否大于或等于除数,假设大于或等于除一位。再判断余数是否大于或等于除数,假设大于或等于除数,商数那么等于商数加数,商数那么等于商数加1,余数等于余数减除数;假设小于,余数等于余数减除数;假设小于除数,那么除数,那么cn=cn-1。再判断。再判断cn是否大于是否大于0,如此来回判断,如此来回判断8次,次,即可获得商数、余数。即可获得商数、余数。此算法的优点是此算法的优点是n位除法器仅需判断位除法器仅需判断n次即可获得商

33、数、余次即可获得商数、余数,无需进行庞大的运算。数,无需进行庞大的运算。第第6 6章章 Verilog HDL设计应用实例设计应用实例2)8位重存除法器位重存除法器被除数被除数a、除数、除数b,那么商数,那么商数q及余数及余数r与与a、b的关系定义为:的关系定义为:a=q*b+r。在进行除法运算时,商数。在进行除法运算时,商数q中的每一位均可由执行一连中的每一位均可由执行一连串的减法串的减法2ri-b决定。对于重存除法,在每一步骤中均执行决定。对于重存除法,在每一步骤中均执行ri+1=2ri-b。当相减结果为负时,必须执行重存加法算法,即。当相减结果为负时,必须执行重存加法算法,即ri+1=2

34、ri+b。换言之,假设对应商数。换言之,假设对应商数qi为为0,那么部分的余数将由,那么部分的余数将由修正值重新存回。其执行步骤为:修正值重新存回。其执行步骤为:将被除数存入缓存器将被除数存入缓存器a亦为商数中,除数放在缓存器亦为商数中,除数放在缓存器b中,中,接着将余数缓存器接着将余数缓存器r清除为清除为0,然后开始作,然后开始作n次除法步骤次除法步骤n是商数是商数的位长度;的位长度;将将r,a所组成的缓存器向左移一位;所组成的缓存器向左移一位;余数缓存器余数缓存器r减掉除数缓存器减掉除数缓存器b,并把差值再存回余数缓存器,并把差值再存回余数缓存器r;如果差值是负的,那么被除数缓存器如果差值

35、是负的,那么被除数缓存器a最低位设为最低位设为0,否那么,否那么为为1;差值是负值确定之后,把差值是负值确定之后,把r加回加回b以回复旧的以回复旧的r值。值。第第6 6章章 Verilog HDL设计应用实例设计应用实例3)8位非重存除法器位非重存除法器被除数被除数a、除数、除数b,那么商数,那么商数q及余数及余数r与与a、b的关系定义为:的关系定义为:a=q*b+r。在进行除法运算时,商数。在进行除法运算时,商数q中的每一位均可由执行一连串中的每一位均可由执行一连串的减法的减法2ri-b决定。非重存除法算法,是由重存除法算法演变而来。决定。非重存除法算法,是由重存除法算法演变而来。对于非重存

36、除法,在每一步骤中均执行对于非重存除法,在每一步骤中均执行ri+1=2ri-b。当相减结果为。当相减结果为负时对应商数负时对应商数qi为为0,不做重存操作,而是继续左移一位,如次,不做重存操作,而是继续左移一位,如次可节省重存除法中的加法器。非重存除法的执行步骤为:可节省重存除法中的加法器。非重存除法的执行步骤为:1将被除数存入缓存器将被除数存入缓存器a亦为商数中,除数放在缓存器亦为商数中,除数放在缓存器b中,中,接着将余数缓存器接着将余数缓存器r清除为清除为0,然后开始作,然后开始作n次除法步骤次除法步骤n是商数的是商数的位长度;位长度;2将将r,a所组成的缓存器向左移一位;所组成的缓存器向

37、左移一位;3检查余数缓存器检查余数缓存器r:假设是负数,那么将除数缓存器假设是负数,那么将除数缓存器b加入余数加入余数缓存器缓存器r;假设是正值,那么由余数缓存器;假设是正值,那么由余数缓存器r减去除数缓存器减去除数缓存器b;4如果余数缓存器如果余数缓存器r是负值,那么设是负值,那么设a的最低位为的最低位为0,反之设为,反之设为1;5假设最后一次的余数为负,那么须将除数假设最后一次的余数为负,那么须将除数b重新加回余数重新加回余数r。第第6 6章章 Verilog HDL设计应用实例设计应用实例2Verilog HDL源程序1)8位移位除法器位移位除法器/8位移位式除法器位移位式除法器modu

38、le div8s(q,r,o,a,b);parameter bitl=8;/数据位长数据位长 input bitl-1:0 a,b;/a:被除数被除数,b:除数除数 output bitl-1:0 q,r;/q:商商,r:余数余数 output o;/溢出标志溢出标志 reg bitl-1:0 rq,rr;reg over;reg bitl-1:0 ra,rb;reg bitl-1:0 cnt;/位计数器位计数器 always(a or b)begin第第6 6章章 Verilog HDL设计应用实例设计应用实例over=0;ra=a;rb=b;if(rb=0)/当当rb=0时使时使rq=0,

39、rr=0 begin rq=0;rr=0;if(ra=0)/当当ra=0时使时使over=1 over=1;elsebeginrq=-1;rr=-1;over=1;end endelse if(ra=rb)/当当ra=rb时使时使rq=1,rr=0 begin rq=1;rr=0;end第第6 6章章 Verilog HDL设计应用实例设计应用实例else if(ra rb)/当当rab时使时使rq=0,rr=0 begin rq=0;rr=0;/初始化初始化rq和和rr for(cnt=bitl-1;cnt 0;cnt=cnt-1)begin第第6 6章章 Verilog HDL设计应用实例

40、设计应用实例 rr=rrbitl-2:0,racnt-1;rq=rq=rb)/当当rr=rb时使时使rq=rq+1,rr=rr-rb begin rq=rq+1;rr=rr-rb;endend end end assign q=rq;assign r=rr;assign o=over;endmodule第第6 6章章 Verilog HDL设计应用实例设计应用实例2)8位重存除法器位重存除法器/8位重存除法位重存除法module divrd8(q,r,o,a,b);parameter width=8;/设定设定8位位 output width-1:0 q;/商商 output width-1:

41、0 r;/余数余数 output o;/溢出标志溢出标志 input width-1:0 a;/被除数被除数 input width-1:0 b;/除数除数 reg width:0 p;reg width-1:0 q,div,r;integer i;always(a or b)begin q=a;div=b;p=8h00,1b0;第第6 6章章 Verilog HDL设计应用实例设计应用实例for(i=0;iwidth;i=i+1)begin p=pwidth-1:0,qwidth-1;q=qwidth-2:0,1b0;p=p+1b0,div+1b1;case(pwidth)1b0:q0=1b

42、1;/正的余数正的余数 1b1:begin /负的余数负的余数 p=p+div;/恢复加法恢复加法 q0=1b0;end endcase end r=pwidth-1:0;end assign o=(b=8h00)?1b1:1b0;/溢出检测溢出检测endmodule第第6 6章章 Verilog HDL设计应用实例设计应用实例3)8位非重存除法器位非重存除法器/8位非恢复除法位非恢复除法module divnrd8(a,b,q,r,o);parameter width=8;/设定设定8位位 input width-1:0 a,b;/a:被除数被除数,b:除数除数 output width-1

43、:0 q,r;/q:商商,r:余数余数 output o;/溢出标志溢出标志 reg width:0 p;reg width-1:0 q,div,r;reg sign;/余数符号位余数符号位 integer i;always(a or b)begin第第6 6章章 Verilog HDL设计应用实例设计应用实例 sign=1b0;q=a;div=b;p=8h00,1b0;for(i=0;i=127)addr=0;else beginif(i=0|i=1)addr=addr+1;else begin k=127/i;m=i*k;addr=m)addr=0;end end end第第6 6章章 V

44、erilog HDL设计应用实例设计应用实例 1:begin /产生锯齿波产生锯齿波 if(addr=255)addr=128;else beginif(i=0|i=1)addr=addr+1;else begin k=127/i;m=i*k;addr=(m+128)addr=128;end end end 第第6 6章章 Verilog HDL设计应用实例设计应用实例2:begin/产生方波产生方波 if(addr=383)addr=256;elsebeginif(i=0|i=1)addr=addr+1;else begin k=127/i;m=i*k;addr=(m+256)addr=25

45、6;end end end 第第6 6章章 Verilog HDL设计应用实例设计应用实例3:begin/产生三角波产生三角波 if(addr=511)addr=384;else begin if(i=0|i=1)addr=addr+1;else begin k=127/i;m=i*k;addr=(m+384)addr=384;end end end endcase end endmodule第第6 6章章 Verilog HDL设计应用实例设计应用实例 2底层底层datarom模块的设计模块的设计 1建立建立ROM初始化文件初始化文件 ROM的初始化文件用来完成对数据的初始化文件用来完成对数

46、据ROM初始化,即将所有将初始化,即将所有将要显示的波形数据存放到要显示的波形数据存放到ROM里。下面是常用的两种初始化设计里。下面是常用的两种初始化设计方法方法:建立建立.mf格式文件。首先选择格式文件。首先选择ROM数据文件编辑窗口,即数据文件编辑窗口,即File菜单中选择菜单中选择New,并在,并在New对话框中选择对话框中选择0ther files标签,选择标签,选择Memory Initization file,单击,单击OK按钮后产生按钮后产生ROM数据文件大小选数据文件大小选择对话框。这里采用择对话框。这里采用512点点8位数据的情况,可选位数据的情况,可选ROM的数据数的数据数

47、(Numer)为为512,数据宽,数据宽(Word size)取取8位。单击位。单击0K按钮,将出现空按钮,将出现空的的mif数据表格,表格中的数据为十进制表达方式,任一数据对应数据表格,表格中的数据为十进制表达方式,任一数据对应的地址为左列与顶行数之和。将波形数据填入表中,完成后在的地址为左列与顶行数之和。将波形数据填入表中,完成后在file菜菜单中单击单中单击save as,保存此数据。,保存此数据。建立建立hex格式文件。建立格式文件。建立.hex格式文件的方法有两种:第一种方格式文件的方法有两种:第一种方法与建立法与建立.mif格式文件的方法相同,只是在格式文件的方法相同,只是在New

48、对话框中选择对话框中选择other files标签,然后选择标签,然后选择H,最后为,最后为hexadecima(Intel Format)File格式文格式文件件;第二种方法是用第二种方法是用C语言或者使用语言或者使用MATLAB等工具生成等工具生成.hex格式的格式的波形数据。波形数据。第第6 6章章 Verilog HDL设计应用实例设计应用实例datarom的数据如下:的数据如下:第第6 6章章 Verilog HDL设计应用实例设计应用实例第第6 6章章 Verilog HDL设计应用实例设计应用实例 2利用利用MegaWizard piug-In Manger定制正弦信号数据定制正

49、弦信号数据datarom 在在Tools菜单中选择菜单中选择MegaWizard Plug-In Mallager,弹出,弹出对话框。选择对话框。选择Create a new custom megafuntion variation,即,即定制一个新的模块。单击该对话框的定制一个新的模块。单击该对话框的next按钮后,新出现的操按钮后,新出现的操作对话框如下图,选择作对话框如下图,选择Merory Complier项下的项下的ROM:1-PORT,再选目标器件,再选目标器件Cyelone 器件和器件和Verilog HDL语言方式,语言方式,最后键入最后键入ROM文件存放的路径和文件名。文件存

50、放的路径和文件名。根据依次弹出的操作设置对话框,依次选择设置根据依次弹出的操作设置对话框,依次选择设置ROM控控制线、地址、数据线,选择设置输出端口,选择设置制线、地址、数据线,选择设置输出端口,选择设置ROM初初始文件,声明元器件库,直至完成始文件,声明元器件库,直至完成datarom的定制。其中的定制。其中dataromde1初始文件设置如下图。初始文件设置如下图。第第6 6章章 Verilog HDL设计应用实例设计应用实例图图6.9 定制模块选择及输出文件的选择与设置选择定制模块选择及输出文件的选择与设置选择第第6 6章章 Verilog HDL设计应用实例设计应用实例图图6.10 选

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文((EDA技术及应用)VerilogHDL设计应用实例课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|