EDA技术及应用—Verilog-HDL版第6章解读课件

上传人:20****08 文档编号:241293669 上传时间:2024-06-15 格式:PPT 页数:335 大小:3.01MB
返回 下载 相关 举报
EDA技术及应用—Verilog-HDL版第6章解读课件_第1页
第1页 / 共335页
EDA技术及应用—Verilog-HDL版第6章解读课件_第2页
第2页 / 共335页
EDA技术及应用—Verilog-HDL版第6章解读课件_第3页
第3页 / 共335页
点击查看更多>>
资源描述
第6章 Verilog HDL设计应用实例 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章章 Verilog HDL设计应用实例设计应用实例 6.1 8位加法器的设计 6.2 8位乘法器的设计 第6章 Verilog HDL设计应用实例 1系统设计思路系统设计思路加法器是数字系统中的基本逻辑器件,减法器和硬件乘法器都可由加法器来构成。多位加法器的构成有两种方式:并行进位和串行进位。并行进位方式设有进位产生逻辑,运算速度较快;串行进位方式是将全加器级联构成多位加法器。6.1 8位加法器的设计位加法器的设计1系统设计思路加法器是数字系统中的基本逻辑器件,第6章 Verilog HDL设计应用实例 并行进位加法器通常比串行级联加法器占用更多的资源。随着位数的增加,相同位数的并行加法器与串行加法器的资源占用差距也越来越大。因此,在工程中使用加法器时,要在速度和容量之间寻找平衡点。实践证明,4位二进制并行加法器和串行级联加法器占用几乎相同的资源。这样,多位加法器由4位二进制并行加法器级联构成是较好的折中选择。本设计中的8位二进制并行加法器即是由两个4位二进制并行加法器级联而成的,其电路原理图如图6.1所示。并行进位加法器通常比串行级联加法器占用更多的资源。随着位第6章 Verilog HDL设计应用实例 图6.1 8位加法器电路原理图图6.1 8位加法器电路原理图第6章 Verilog HDL设计应用实例 2Verilog HDL源程序源程序1)4位二进制并行加法器的源程序adder4b.v/4位二进制并行加法器adder4b.vmodule 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;endmodule2Verilog HDL源程序1)4位二进制并行加法第6章 Verilog HDL设计应用实例 2)8位二进制加法器的源程序adder8b.v/8位二进制并行加法器adder8b.vmodule adder8b(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);endmodule2)8位二进制加法器的源程序adder8b.v/8位第6章 Verilog HDL设计应用实例 3仿真结果验证仿真结果验证 在程序调试和仿真时,要使用自底向上的方法进行,也就是对于含有多个模块的设计,要先从底层模块进行调试和仿真,再进行更高层次模块的调试和仿真,最后进行顶层模块的调试与仿真。图6.2和图6.3分别是使用Quartus 8.0对adder4b和adder8b进行时序仿真的结果。从仿真结果可以看出,从输入到输出有一个时延,时间大概为几个纳秒。同时要经过一个大概几个纳秒的不稳定状态或过渡过程,系统才达到一个稳定而正确的结果。经过对各组输入与输出数据的分析,确认仿真结果是正确的。3仿真结果验证 在程序调试和仿真时,要使用自第6章 Verilog HDL设计应用实例 图6.2 adder4b的时序仿真结果图6.2 adder4b的时序仿真结果第6章 Verilog HDL设计应用实例 图6.3 adder8b的时序仿真结果图6.3 adder8b的时序仿真结果第6章 Verilog HDL设计应用实例 4逻辑综合分析逻辑综合分析图6.4是使用Quartus 8.0进行逻辑综合后adder8b的RTL视图,图6.5是对adder8b的RTL视图中的adder4b进行展开后的视图。图6.6是使用Quartus 8.0对adder8b进行逻辑综合后的资源使用情况。4逻辑综合分析图6.4是使用Quartus 第6章 Verilog HDL设计应用实例 图6.4 adder8b综合后的RTL视图图6.4 adder8b综合后的RTL视图第6章 Verilog HDL设计应用实例 图6.5 adder8b的RTL视图中的adder4b展开后的视图图6.5 adder8b的RTL视图中的adder4b展第6章 Verilog HDL设计应用实例 图6.6 adder8b逻辑综合后的资源使用情况图6.6 adder8b逻辑综合后的资源使用情况第6章 Verilog HDL设计应用实例 5硬件逻辑验证硬件逻辑验证若使用GW48-CK EDA实验开发系统进行硬件逻辑验证,可选择实验电路结构图NO.1,由5.2节的实验电路结构图NO.1和图6.1确定引脚的锁定。如可取实验电路结构图的PIO3PIO0接a83:0、PIO7PIO4接a87:4、PIO11PIO8接b83:0、PIO15PIO12接b87:4、PIO49接c8。此加法器的被加数a8和加数b8分别由键2与键1、键4与键3输入,加法器的最低位进位c8由键8输入,计算结果将分别通过PIO23PIO20、PIO19PIO16输出,并显示于数码管6(高4位)和数码管5(低4位),溢出进位由PIO39输出,当有进位时,结果显示于发光管D8。5硬件逻辑验证若使用GW48-CK EDA实验开第6章 Verilog HDL设计应用实例 1系统设计思路系统设计思路一般乘法器采用各种不同的设计技巧,综合后的电路亦有不同的执行效能。本节将介绍移位乘法器、定点乘法器及布斯(booth)乘法器的设计。6.2 8位乘法器的设计位乘法器的设计1系统设计思路一般乘法器采用各种不同的设计技巧,第6章 Verilog HDL设计应用实例 1)8位移位乘法器不带符号的8位乘法器若采用连加方式,则最差情况需要28-1次方能完成计算;而采用移位式则最多仅需要8次即可完成乘法计算。移位式8位乘法器计算流程如下:(1)输入8位被乘数a及乘数b时,程序会先判断输入值:若乘数及被乘数有一个为0,则输出乘积为0;若被乘数与乘数中有一个为1,则输出乘积为被乘数或乘数;若被乘数或乘数皆非0或1,则利用算法求得乘积。1)8位移位乘法器不带符号的8位乘法器若采用连第6章 Verilog HDL设计应用实例 先预设乘积p为0,位n=0,0位n8。算法求乘积的方法是:利用判断乘数中的第n位是否为1的方法进行计算。若为1,则乘积缓存器等于被乘数左移n位,积数等于乘积缓存器加积数;若为0,则位n=位n+1。如此判断8次即可获得乘积。(2)当乘数和被乘数均为8位时,以for循环执行8次即可完成乘法计算。先预设乘积p为0,位n=0,0位n8。算法第6章 Verilog HDL设计应用实例 2)8位定点乘法器一般作乘法运算时,均以乘数的每一位数乘以被乘数后,所得部分乘积再与乘数每一位数的位置对齐后相加。经过对二进制乘法运算规律的总结,定点乘法运算中进行相加的运算规则为:(1)当乘数的位数字为1时,可将被乘数的值放置适当的位置作为部分乘积。2)8位定点乘法器一般作乘法运算时,均以乘数的第6章 Verilog HDL设计应用实例(2)当乘数的位数字为0时,可将0放置适当的位置作为部分乘积。(3)在硬件中可利用and门做判断,如10101,乘数1和每一个被乘数的位都作and运算,其结果为1010,只需用and门就可得到部分乘积。(4)当部分乘积都求得后,再用加法器将上述部分乘积相加完成乘积运算。(2)当乘数的位数字为0时,可将0放置适当的位置作为部第6章 Verilog HDL设计应用实例 3)8位布斯乘法器布斯(booth)乘法算法,是先将被乘数的最低位加设一虚拟位,开始时虚拟位设为0,并存放于被乘数中。根据最低位与虚拟位构成的布斯编码的不同,分别执行如下四种运算:(1)00:不执行运算,乘积缓存器直接右移1位。(2)01:将乘积加上被乘数后右移1位。(3)10:将乘积减去被乘数后右移1位。(4)11:不执行运算,乘积缓存器直接右移1位。3)8位布斯乘法器布斯(booth)乘法算法,第6章 Verilog HDL设计应用实例 2.Verilog HDL源程序源程序1)8位移位乘法器/8位移位乘法器mult8s.vmodule 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)2.Verilog HDL源程序1)8位移位乘法器第6章 Verilog HDL设计应用实例 beginra=a;rb=b;if(a=0|b=0)/当a=0或b=0时,rp=0 rp=16b0;else if(a=1)/当a=1时,rp=rb rp=rb;else if(b=1)/当b=1时,rp=ra rp=ra;else begin rp=15b0;for(rbn=0;rbn8;rbn=rbn+1)if (rbrbn=1b1)beginra=a;rb=b;第6章 Verilog HDL设计应用实例 begin temp=ra rbn;/左移rbn位 rp=rp+temp;endend end assign p=rp;endmodule begin 第6章 Verilog HDL设计应用实例 2)8位定点乘法器/8位定点乘法器mult8_fp.vmodule mult8_fp(p,a,b);parameter width=8;/设定数据宽度为8位 input 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;/设定进位的暂存器2)8位定点乘法器/8位定点乘法器mult8_fp.第6章 Verilog HDL设计应用实例 reg width-1:0 ps1,pc1;reg width-1:0 ppram width-1:0;/设定乘积的暂存器 reg width-1:0 psram width:0;/设定和的暂存器 reg width-1:0 pcram width:0;/设定进位的暂存器 reg width+width-1:0 temp;/设定乘积的暂存器 integer j,k;always(a or b)/读取乘数与被乘数begin for(j=0;jwidth;j=j+1)reg width-1:0 ps1,pc1;第6章 Verilog HDL设计应用实例 begin for(k=0;kwidth;k=k+1)ppk=ak&bj;/利用and完成部分乘积ppramj=ppwidth-1:0;/存入乘积缓存器中pcj=0;/将进位pc设定为0 end pcram0=pcwidth-1:0;psram0=ppram0;/将ppram的列设定给pp pp=ppram0;temp0=pp0;for(j=1;jwidth;j=j+1)begin for(k=0;kwidt第6章 Verilog HDL设计应用实例 begin 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;/endps1width-1=ppwidth-1;/将pp乘积指定给ps1 begin pp=第6章 Verilog HDL设计应用实例 pc1width-1=0;/设定每列的最后一个进位都为0tempj=ps10;/将每个ps1(0)设定给乘积psramj=ps1width-1:0;/将ps1存到psram数组中pcramj=pc1width-1:0;end ps=psramwidth-1;pc=pcramwidth-1;pc10=0;ps10=0;for(k=1;kwidth;k=k+1)beginpc1width-1=0;/设定每列的最后第6章 Verilog HDL设计应用实例 ps1k=pc1k-1pck-1psk;/全加器之和与进位运算pc1k=pc1k-1&pck-1|pc1k-1&psk|pck-1&psk;end tempwidth+width-1=pc1width-1;/将ps1的值设定给乘积结果 tempwidth+width-2:width=ps1width-1:1;endassign p=tempwidth+width-1:0;/乘积结果的输出endmoduleps1k=pc1k-1pck-1ps第6章 Verilog HDL设计应用实例 3)8位布斯乘法器/8位布斯乘法器 booth.vmodule booth(a,b,p);parameter 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)3)8位布斯乘法器/8位布斯乘法器 booth.v第6章 Verilog HDL设计应用实例 beginpawidth+width:0=16b0,a,1b0;/p,a,1b0for(cnt=0;cnt width;cnt=cnt+1)begin case(pa1:0)/pa最后两位pa1:0用于case选择函数2b10:begin /pa=pa-b pawidth+width:width+1=pawidth+width:width+1-bwidth-1:0;rshift(pa,right);/执行算术右移task子程序 endbeginpawidth+width:0=16第6章 Verilog HDL设计应用实例 2b01:begin /pa=pa+b pawidth+width:width+1=pawidth+width:width+1+bwidth-1:0;rshift(pa,right);/执行算术右移task子程序 enddefault:rshift(pa,right);/直接执行算术右移task子程序 endcase pa=right;end2b01:begin /pa=pa第6章 Verilog HDL设计应用实例 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=1b0,pawidth+width:1;/最高位为1的算术右移 1b1:rightwidth+width:0=1b1,pawidth+width:1;endcase endtaskendmodule pwidth+width-1:0=pawidt第6章 Verilog HDL设计应用实例 3仿真结果验证仿真结果验证图6.7是使用Quartus 8.0对移位乘法器mult8s进行时序仿真的结果。当输入a=36、b=12时,乘积输出p应为3612=432,实际仿真输出为432,因此仿真结果是正确的。同理可验证其余的仿真结果也是正确的。定点乘法器mult8_fp和布斯乘法器booth的时序仿真和结果分析,请读者自己完成。3仿真结果验证图6.7是使用Quartus 第6章 Verilog HDL设计应用实例 图6.7 移位乘法器mult8s的时序仿真结果图6.7 移位乘法器mult8s的时序仿真结果第6章 Verilog HDL设计应用实例 4逻辑综合分析逻辑综合分析根据第6.1节所述的方法,请读者自己进行逻辑综合,查看并分析有关综合结果。4逻辑综合分析根据第6.1节所述的方法,请读者自第6章 Verilog HDL设计应用实例 5硬件逻辑验证硬件逻辑验证若使用GW48-CK EDA实验开发系统进行硬件逻辑验证,可选择实验电路结构图NO.1,由5.2节的实验电路结构图NO.1和对应程序的输入输出端口定义确定引脚的锁定。被乘数a7:0接PIO15PIO8(由键4、键3输入8位二进制数),乘数b7:0接PIO7PIO0(由键2、键1输入8位二进制数),乘积输出p15:0接PIO31PIO16。进行硬件验证的方法为:键4和键3分别输入被乘数的高4位和低4位(输入值显示于数码4和数码3),键2和键1分别输入乘数的高4位和低4位(输入值显示于数码2和数码1);乘积显示于数码管8数码管5,高位在左。5硬件逻辑验证若使用GW48-CK EDA实验开第6章 Verilog HDL设计应用实例 1系统设计思路系统设计思路1)8位移位除法器(1)输入被除数a及除数b时,程序会先判断输入值:若除数及被除数均为0,则此表达式无意义,商数输出记为0,余数输出记为0,因为溢位输出为1,所以商数无意义;若除数为0且被除数大于0,则此表达式溢位输出,商数输出为0,余数输出为0,溢位输出为1;6.3 8位除法器的设计位除法器的设计1系统设计思路1)8位移位除法器(1)第6章 Verilog HDL设计应用实例 若被除数及除数相等,则输出商数为1,余数输出为0,溢位输出为0;若被除数小于除数,则输出商数为0,余位输出为被除数,溢位输出为0;若除数为1,则输出商数为被除数,余数输出为0,溢位输出为0;若被除数大于除数,则利用下列算法求出商数。预设商数q为0,余数r为0,位cn=8(为8位除法器)。若被除数及除数相等,则输出商数为1,余数输出为0,溢第6章 Verilog HDL设计应用实例 此算法先判断位cn是否大于0,若大于0,则余数左移一位,余数则等于余数加上被除数第cn1位的值,商数左移一位。再判断余数是否大于或等于除数,若大于或等于除数,商数则等于商数加1,余数等于余数减除数;若小于除数,则cn=cn1。再判断cn是否大于0,如此来回判断8次,即可获得商数、余数。(2)此算法的优点是n位除法器仅需判断n次即可获得商数、余数,无需进行庞大的运算。此算法先判断位cn是否大于0,若大于0,则余数左移一位,第6章 Verilog HDL设计应用实例 2)8位重存除法器已知被除数a、除数b,则商数q及余数r与a、b的关系定义为:a=q*b+r。在进行除法运算时,商数q中的每一位均可通过执行一连串的减法2rib确定。对于重存除法,在每一步骤中均执行ri+1=2rib。当相减结果为负时,必须执行重存加法算法,即ri+1=2ri+b。换言之,若对应商数qi为0,则部分的余数将由修正值重新存回。其执行步骤为:(1)将被除数存入缓存器a(亦为商数)中,除数放在缓存器b中,接着将余数缓存器r清除为0,然后开始作n次除法步骤(n是商数的位长度)。2)8位重存除法器已知被除数a、除数b,则商数第6章 Verilog HDL设计应用实例(2)将r,a所组成的缓存器向左移一位。(3)余数缓存器r减掉除数缓存器b,并把差值再存回余数缓存器r。(4)如果差值是负的,则被除数缓存器a最低位设为0,否则为1。(5)差值是负值确定之后,把r加回b以恢复旧的r值。(2)将r,a所组成的缓存器向左移一位。(3第6章 Verilog HDL设计应用实例 3)8位非重存除法器已知被除数a、除数b,则商数q及余数r与a、b的关系定义为:a=q*b+r。在进行除法运算时,商数q中的每一位均可通过执行一连串的减法2rib确定。非重存除法算法,是由重存除法算法演变而来的。对于非重存除法,在每一步骤中均执行ri+1=2rib。当相减结果为负时(对应商数qi为0),不做重存操作,而是继续左移一位,如此可节省重存除法中的加法器。非重存除法的执行步骤为:(1)将被除数存入缓存器a(亦为商数)中,除数放在缓存器b中,接着将余数缓存器r清除为0,然后开始作n次除法步骤(n是商数的位长度)。3)8位非重存除法器已知被除数a、除数b,则商第6章 Verilog HDL设计应用实例(2)将r,a所组成的缓存器向左移一位。(3)检查余数缓存器r,若为负数,则将除数缓存器b加入余数缓存器r;若为正值,则由余数缓存器r减去除数缓存器b。(4)如果余数缓存器r为负值,则设a的最低位为0,反之设为1。(5)若最后一次的余数为负,则须将除数b重新加回余数r。(2)将r,a所组成的缓存器向左移一位。(3第6章 Verilog HDL设计应用实例 2Verilog HDL源程序源程序1)8位移位除法器/8位移位式除法器div8s.vmodule 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;2Verilog HDL源程序1)8位移位除法器/第6章 Verilog HDL设计应用实例 reg bitl-1:0 ra,rb;reg bitl-1:0 cnt;/位计数器 always(a or b)beginover=0;ra=a;rb=b;if(rb=0)/当rb=0时,使rq=0,rr=0 begin rq=0;rr=0;if(ra=0)/当ra=0时,使over=1 over=1;reg bitl-1:0 ra,rb;reg第6章 Verilog HDL设计应用实例 elsebeginrq=-1;rr=-1;over=1;end endelse if(ra=rb)/当ra=rb时,使rq=1,rr=0 begin rq=1;rr=0;endelse if(ra rb)/当rab时,使rq=0,rr=0 begin rq=0;rr=0;/初始化rq和rr for(cnt=bitl-1;cnt 0;cnt=cnt-1)beginrr=rrbitl-2:0,racnt-1;rq=rq=rb)/当rrrb时,使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;endmoduleif(rr=rb)/当rrrb时,使rq 第6章 Verilog HDL设计应用实例 2)8位重存除法器/8位重存除法器divrd8.vmodule divrd8(q,r,o,a,b);parameter width=8;/设定8位 output width-1:0 q;/商 output width-1: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;2)8位重存除法器/8位重存除法器divrd8.v第6章 Verilog HDL设计应用实例 integer i;always(a or b)begin q=a;div=b;p=8h00,1b0;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)integer i;always(a or b)第6章 Verilog HDL设计应用实例 1b0:q0=1b1;/正的余数 1b1:begin /负的余数 p=p+div;/恢复加法 q0=1b0;end endcase end r=pwidth-1:0;end assign o=(b=8h00)?1b1:1b0;/溢出检测endmodule 1b0:q0=1b1;第6章 Verilog HDL设计应用实例 3)8位非重存除法器/8位非重存除法器divnrd8.vmodule divnrd8(a,b,q,r,o);parameter width=8;/设定8位 input width-1:0 a,b;/a为被除数,b为除数 output width-1:0 q,r;/q为商,r为余数 output o;/溢出标志 reg width:0 p;reg width-1:0 q,div,r;reg sign;/余数符号位 integer i;3)8位非重存除法器/8位非重存除法器divnrd第6章 Verilog HDL设计应用实例 always(a or b)begin 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;begin case(control)/根据c第6章 Verilog HDL设计应用实例 end end end 1:begin /产生锯齿波 if(addr=255)addr=128;else beginif(i=0|i=1)addr=addr+1;else begin end end end 1:b第6章 Verilog HDL设计应用实例 k=127/i;m=1*k;addr=(m+128)addr=128;end end end 2:begin/产生方波 if(addr=383)addr=256;elsebeginif(i=0|i=1)addr=addr+1;k=127/i;m=1*k;addr=a第6章 Verilog HDL设计应用实例 else begin k=127/i;m=i*k;addr=(m+256)addr=256;end end end 3:begin /产生三角波 if(addr=383)addr=256;else begin if(i=0|i=1)else begin k=12第6章 Verilog HDL设计应用实例 addr=addr+1;else begin k=127/i;m=i*k;addr=(m+384)addr=384;end end end endcase end endmodule addr=addr+1;else 第6章 Verilog HDL设计应用实例 2)底层datarom模块的设计(1)建立ROM初始化文件。ROM的初始化文件用来完成对数据的初始化,即将所有将要显示的波形数据存放到ROM里。下面是常用的两种初始化设计方法:2)底层datarom模块的设计(1)建立RO第6章 Verilog HDL设计应用实例 建立.mf格式文件。首先选择ROM数据文件编辑窗口,即在【File】菜单中选择【New】,并在【New】对话框中选择【Other files】标签,选择【Memory Initization file】,单击【OK】按钮后产生ROM数据文件大小选择对话框。这里采用512点8位数据的情况,可选ROM的数据数(Numer)为512,数据宽(Word size)为8位。单击【OK】按钮,将出现空的mif数据表格,表格中的数据为十进制表达方式,任一数据对应的地址为左列与顶行数之和。将波形数据填入表中,完成后在【file】菜单中单击【Save as】,保存此数据。建立.mf格式文件。首先选择ROM数据文件编辑窗口,第6章 Verilog HDL设计应用实例 建立hex格式文件。建立.hex格式文件的方法有两种:第一种方法与建立.mif格式文件的方法相同,只是在【New】对话框中选择【Other files】标签,然后选择H,最后生成hex格式文件;第二种方法是用C语言或者使用MATLAB等工具生成.hex格式的波形数据。建立hex格式文件。建立.hex格式文件的方法有两第6章 Verilog HDL设计应用实例 datarom的数据如下:128 134 140 146 152 159 165 171 176 182 188 193 199 204 209 213218 222 226 230 234 237 240 243 246 248 250 252 253 254 255 255255 255 255 254 253 252 250 248 246 243 240 237 234 230 226 222218 213 209 204 199 193 188 182 176 171 165 159 152 146 140 134128 122 116 110 104 97 91 85 80 74 68 63 57 52 47 43 38 34 3026 22 19 16 13 10 10 8 6 4 3 2 1 1 1 1 1 2 3 4 6 8 10 13 16 19 22 26 30 34 38 43 47 52 57 63 68 74 80 85 91 97 104 110datarom的数据如下:128 134 140 146 第6章 Verilog HDL设计应用实例 116 122 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1920 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 3940 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 5960 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 7980 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115116 117 118 119 120 121 122 123 124 125 126 127 255 255 255 255255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255116 122 0 1 2 3 4 5 6 7 8 9 10第6章 Verilog HDL设计应用实例 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 3638 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 7678 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112114 116 118 120 122 124 126 126 124 122 120 118 116 114 112 110108 106 104 102 100 98 96 94 92 90 88 86 84 82 80 78 76 74 7270 68 66 64 62 60 58 56 54 52 50 48 46 44 42 40 38 36 34 3230 28 26 24 22 20 18 16 14 12 10 8 6 4 2 0255 255 255 255 255 255 255 25第6章 Verilog HDL设计应用实例(2)利用MegaWizard Plug-In Manager定制正弦信号数据datarom。在【Tools】菜单中选择【MegaWizard Plug-In Manager】,弹出对话框。选择【Create a new custom megafunction variation】,即定制一个新的模块。单击该对话框的【Next】按钮后,新出现的操作对话框如图6.9所示,选择【Memory Compiler】项下的【ROM:1-PORT】,再选目标器件为Cyclone 器件和Verilog HDL语言方式,最后键入ROM文件存放的路径和文件名。(2)利用MegaWizard Plug-In Man第6章 Verilog HDL设计应用实例 图6.9 定制模块选择及输出文件的选择与设置选择图6.9 定制模块选择及输出文件的选择与设置选择第6章 Verilog HDL设计应用实例 根据依次弹出的操作设置对话框,依次选择设置ROM控制线、地址、数据线,选择设置输出端口,选择设置ROM初始文件,声明元器件库,直至完成datarom的定制。其中,dataromde1初始文件设置如图6.10所示。根据依次弹出的操作设置对话框,依次选择设置ROM控制线、第6章 Verilog HDL设计应用实例 图6.10 选择设置ROM初始文件datarom.mf图6.10 选择设置ROM初始文件datarom.mf第6章 Verilog HDL设计应用实例 3仿真结果验证仿真结果验证这里使用SignalTap 嵌入式逻辑分析仪进行实时测试。SignalTap 嵌入式逻辑分析仪集成在Quartus 设计软件中,能够捕获和显示可编程片上系统(SOPC)设计中实时信号的状态,还可以实时测试FPGA中的信号波形。目前,SignalTap 嵌入式逻辑分析仪支持的器件系列包括APEXTAPEX20KEAPEX20KCAPEX20KCYCLONEEXCALIBURMERCURYSTRATIX GXSTRATIX等。3仿真结果验证这里使用SignalTap 嵌入第6章 Verilog HDL设计应用实例 使用SignalTap 的一般流程是:设计人员在完成设计并编译工程后,建立SignalTap(.stp)文件并加入工程配置STP文件编译并下载设计到FPGA在Quartus 中显示被测信号的波形测试完毕后将该逻辑分析仪从项目中删除。本设计中使用SignalTap 进行波形实时测试的步骤如下:(1)选择【File】菜单中的【New】,在【New】对话框中选择【Other Files】标签中的【SignalTap Logic Analyzer File】,单击【OK】按钮,即出现如图6.11所示的SignalTap 编辑器。使用SignalTap 的一般流程是:设计人员在完成设第6章 Verilog HDL设计应用实例 图6.11 signaltap编辑器图6.11 signaltap编辑器第6章 Verilog HDL设计应用实例(2)调入待测信号及保存文件。首先单击上排的【Instance】栏内的【auto-signaltap_0】,根据自己的意愿将其改名,这是其中一组待测信号。为了调入待测信号,在下栏的空白处双击,即弹出【Node Finder】对话框,单击【List】即在左栏出现与此工程相关的所有信号,包括内部信号。此例中要将control、i、q_out信号调入,如图6.12所示。(2)调入待测信号及保存文件。首先单击上排的【Inst第6章 Verilog HDL设计应用实例 图6.12 调入待测信号图6.12 调入待测信号第6章 Verilog HDL设计应用实例 不能将工程的主频时钟信号调入信号观察窗。如果有总线信号,只需调入总线信号即可,而慢速信号可不调入。调入信号的数量应根据实际需要来决定,不可随意调入过多的没有实际意义的信号,这会导致SignalTap 无谓地占用芯片内过多的资源。最后,保存SignalTap 文件。不能将工程的主频时钟信号调入信号观察窗。如果有总线信号,第6章 Verilog HDL设计应用实例 选择【File】菜单中的【Save As】命令,键入此SignalTap 文件的文件名,扩展名是默认的“stp”。单击保存按钮后将出现一个提示:“Do you want to enable SignalTap”,应该单击【Yes】按钮,表示同意再次编译时将此SignalTap 文件(核)与工程(sindt)捆绑在一起综合/适配,以便一同被下载进FPGA芯片中去。如果单击【No】按钮,则必须自己去设置,方法是,选择菜单【Assignments】中的【Settings】命令,在【Category】栏中选择【SignalTap Logic Analyzer】。选择【File】菜单中的【Save As】命令,键入此S第6章 Verilog HDL设计应用实例 在【SignalTap File】栏选择已保存的SignalTap 文件名,并选择【Enable SignalTap Logic Analyzer】,单击【OK】按钮即可。但应该特别注意,当利用SignalTap 将芯片中的信号全部测试结束后,如在构成产品前,不要忘了将SignalTap 从芯片中除去。方法是在此窗口中关闭【Enable SignalTap Logic Analyzer】,再编译一次即可。在【SignalTap File】栏选择已保存的Sig第6章 Verilog HDL设计应用实例(3)SignalTap 的参数设置。单击最大化按钮和窗口左下角的【Setup】,即出现如图6.13所示的全屏编辑窗口。首先选择输入逻辑分析仪的工作时钟信号Clock,单击Clock栏左侧的“”按钮,选择工程的主频时钟信号。接着在【Data】框的【Sample】栏选择此组信号的采样深度(sample depth)为1kbit。注意,这个深度一旦确定,信号组的每一位信号就将获得同样的采样深度。然后设置观察信号的要求,在【Buffer acquisition mode】框的【Circulate】栏设置既定的采样深度中起始触发的位置,比如选择中点触发(Center trigger position)。(3)SignalTap 的参数设置。单击最大化按第6章 Verilog HDL设计应用实例 最后设置触发信号和触发方式,这可以根据具体需求来选置。在【Trigger】框的【Trigger level】栏选择1;选择【Trigger In】复选框,并在【Source】栏选择触发信号。在这里选择sin工程的内部计数器最高位输出信号address6作为触发信号,在【Pattern】栏选择上升沿触发方式(Rising Edges),即当address6为上升沿时,Signal Tap 在CLK的驱动下对信号组的信号进行连续或单次采样(根据设置决定)。设置完毕后保存。最后设置触发信号和触发方式,这可以根据具体需求来选置。在第6章 Verilog HDL设计应用实例 图6.13 Signaltap编辑器设置图6.13 Signaltap编辑器设置第6章 Verilog HDL设计应用实例(4)编译下载。首先选择【Processing】菜单的【Start Compilation】项,启动全程编译。编译结束后,SignalTap 的观察窗口通常会自动打开,若没有打开,可选择【Tools】菜单中的【SignalTap Analyzer】,以打开SignalTap。通过右上角的【Setup】按钮选择硬件通信模式;然后单击下方【Device】栏的【scan Chain】按钮,对实验板进行扫描。如果在栏中出现板上FPGA的型号名,表示系统JTAG通信情况正常,可以进行下载。最后在【File】栏选择下载文件,单击下载标号,观察左下角下载信息。(4)编译下载。首先选择【Processing】菜单的第6章 Verilog HDL设计应用实例(5)启动SignalTap 进行测试与分析。单击【Intance】,再单击【Autorun Analysis】,启动SignalTap,然后单击左下角的【Data】和全屏控制钮,这时就能在SignalTap 数据窗口通过JTAG接口观察到来自实验板上的FPGA内部实时信号。数据窗口的上沿坐标是采样深度的二进制位数,全程是1kbit。如果单击总线名(如q_out)左侧的“+”号,可以展开此总线信号,同时可用左、右键控制数据的展开。如果要观察相应的模拟波形,右键单击q_out左侧的端口标号,在弹出的下拉栏中选择【Bus Display Format】的【Unsigned Line Chart】,即可得到如图6.14图6.17所示波形。(6)对于各种波形,通过i设置频率的大小。(5)启动SignalTap 进行测试与分析。单击【第6章 Verilog HDL设计应用实例 图6.14 正弦波图6.14 正弦波第6章 Verilog HDL设计应用实例 图6.15 锯齿波图6.15 锯齿波第6章 Verilog HDL设计应用实例 图6.16 方波图6.16 方波第6章 Verilog HDL设计应用实例 图6.17 三角波图6.17 三角波第6章 Verilog HDL设计应用实例 4逻辑综合分析逻辑综合分析使用Quartus 8.0对signalgen进行逻辑综合后可查看RTL视图。图6.18(a)和(b)分别是选用EPF10K10TC144-3和选用EP2C8T144C6芯片、使用Quartus 8.0对signalgen进行逻辑综合后的资源使用情况。图6.19是signalgen的时钟性能分析结果,从结果可以看出,若选用EPF10K10TC144-3芯片,该系统的最高频率可达到35.34MHz;若选用EP2C8T144C6芯片,该系统的最高频率可达到170.88MHz。从这里可以看出,对于相同的一个Verilog HDL设计,若采用不同的芯片,该系统的最高频率是不相同的。4逻辑综合分析使用Quartus 8.0对s第6章 Verilog HDL设计应用实例 图6.18 signalgen.v逻辑综合后的资源使用情况图6.18 signalgen.v逻辑综合后的资源使用情况第6章 Verilog HDL设计应用实例 图6.19 signalgen的时钟性能分析结果图6.19 signalgen的时钟性能分析结果第6章 Verilog HDL设计应用实例 5硬件逻辑验证硬件逻辑验证请读者根据前述方法自行完成硬件逻辑验证工作。5硬件逻辑验证请读者根据前述方法自行完成硬件逻辑第6章 Verilog HDL设计应用实例 1系统设计思路系统设计思路PWM即脉冲宽度调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。PWM从处理器到被控系统信号都是数字式的,无需进行数/模转换。让信号保持为数字形式可将噪声影响降到最小,因此广泛应用在从测量、通信到功率控制与变换的许多领域中。6.5 PWM信号发生器的设计信号发生器的设计1系统设计思路PWM即脉冲宽度调制,是利用微处理第6章 Verilog HDL设计应用实例 采用FPGA产生PWM波形的方法很多,常用的有计数器法、存储查表法等。其中,计数器法设计的基本原理是:根据PWM输出周期计数值和PWM输出占空比控制计数值,通过控制对应的计数段的高、低电平输出,来产生一个周期可调、占空比可调的PWM信号。现欲设计一个控制计数值为32位的PWM信号发生器,采用计数器法进行设计,主要包括六个处理过程块:写PWM输出周期的时钟数寄存器、写PWM周期占空比寄存器、写控制寄存器、读寄存器、PWM信号产生计数控制和PWM信号输出控制等过程块。采用FPGA产生PWM波形的方法很多,常用的有计数器法、第6章 Verilog HDL设计应用实例 2Verilog HDL源程序源程序/PWM信号发生器pwmgen.vmodule pwmgen(clk,rst,ce,addr,write,wrdata,read,bytesel,rddata,pwm);input clk,rst,ce;input 1:0addr;input write,read;input 31:0 wrdata;output 31:0 rddata;input 3:0 bytesel;output pwm;reg 31:0 clk_div_reg,duty_cycle_reg;2Verilog HDL源程序/PWM信号发生器pwm第6章 Verilog HDL设计应用实例 reg control_reg;reg clk_div_reg_sel,duty_cycle_reg_sel,control_reg_sel;reg 31:0 pwm_cnt,rddata;reg pwm;wire pwm_ena;/地址译码 always (addr)begin clk_div_reg_sel=0;duty_cycle_reg_sel=0;control_reg_sel=0;case(addr)reg control_reg;reg clk_di第6章 Verilog HDL设计应用实例 2b00:clk_div_reg_sel=1;2b01:duty_cycle_reg_sel=1;2b10:control_reg_sel=1;default:begin clk_div_reg_sel=0;duty_cycle_reg_sel=0;control_reg_sel=0;end endcase end 2b00:clk_div_reg_sel=1;第6章 Verilog HDL设计应用实例 /写PWM输出周期的时钟数寄存器 always (posedge clk or negedge rst)begin if(rst=1b0)clk_div_reg=0;else begin if(write&ce&clk_div_reg_sel)begin if(bytesel0)clk_div_reg7:0=wrdata7:0;/写PWM输出周期的时钟数寄存器 always 第6章 Verilog HDL设计应用实例 if(bytesel1)clk_div_reg 15:8=wrdata15:8;if(bytesel2)clk_div_reg 23:16=wrdata23:16;if(bytesel3)clk_div_reg 31:24=wrdata31:24;end end end /写PWM周期占空比寄存器 always (posedge clk or negedge rst)begin if(bytesel1)第6章 Verilog HDL设计应用实例 if(rst=1b0)duty_cycle_reg=0;else begin if(write&ce&duty_cycle_reg_sel)begin if
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!