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

上传人:小飞机 文档编号:4025860 上传时间:2023-04-01 格式: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页
点击查看更多>>
资源描述

《(EDA技术及应用)VerilogHDL设计应用实例课件.ppt》由会员分享,可在线阅读,更多相关《(EDA技术及应用)VerilogHDL设计应用实例课件.ppt(224页珍藏版)》请在三一办公上搜索。

1、,第6章 Verilog HDL设计应用实例,在掌握了EDA技术的基础知识和基本操作后,学习EDA技术最有效地方法就是进行EDA技术的综合应用设计。本章阐述了12个非常实用的Verilog HDL综合应用设计实例的系统设计思路,主要Verilog HDL源程序,部分时序仿真和逻辑综合结果及分析,以及硬件的逻辑验证方法。这些综合应用设计实例包括8位加法器、8位乘法器、8位除法器等基本运算电路,数字频率计、数字秒表、交通灯信号控制器、可调信号发生电路、闹钟系统等常用应用电路,PWM信号发生器、高速PID控制器,FIR滤波器,CORDIC算法的应用等电机控制、数字信号处理、模糊控制、神经网络中经常用

2、到的基本电路。,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.1 8位加法器的设计,1系统设计思路 加法器是数字系统中的基本逻辑器件,减法器和硬件乘法器都可由加法器来构成。多位加法器的构成有两种方式:并行进位和串行进位。并行进位加法器设有进位产生逻辑,运算速度较快;串行进位方式是将全加器级联构成多位加法器。并

3、行进位加法器通常比串行级联加法器占用更多的资源。随着位数的增加,相同位数的并行加法器与串行加法器的资源占用差距也越来越大。因此,在工程中使用加法器时,要在速度和容量之间寻找平衡点。实践证明,4位二进制并行加法器和串行级联加法器占用几乎相同的资源。这样,多位加法器由4位二进制并行加法器级联构成是较好的折中选择。本设计中的8位二进制并行加法器即是由两个4位二进制并行加法器级联而成的,其电路原理图如下图。,图6.1 8位加法器电路原理图,2Verilog HDL源程序14位二进制并行加法器的源程序/4位二进制并行加法器module adder4b(a4,b4,c4,s4,co4);input 3:0

4、 a4,b4;input c4;output 3:0 s4;output co4;assign co4,s4=a4+b4+c4;endmodule,28位二进制加法器的源程序/8位二进制并行加法器module 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)

5、,.co4(co8);endmodule,3仿真结果验证 在程序调试和仿真时,我们要使用自底向上的方法进行,也就是对于含有多个模块的设计,我们要先从底层模块进行调试和仿真,再进行更高层次模块的调试和仿真,最后进行顶层模块的调试与仿真。图和图分别是使用对adder4b和adder8b进行时序仿真的结果。从仿真结果可以看出,从输入到输出,有一个时延,时间大概在几个纳秒。同时输出要经过一个大概几个纳秒的不稳定状态或过渡过程,系统才达到一个稳定而正确的结果。并且经过对各组输入与输出数据的分析,仿真结果是正确的。4逻辑综合分析 图是使用进行逻辑综合后adder8b的RTL视图,图是对adder8b的RT

6、L视图中的adder4b进行展开后的视图。图是使用对 adder8b进行逻辑综合后的资源使用情况。,图6.2 adder4b的时序仿真结果,图6.3 adder8b的时序仿真结果,图6.4 adder8b综合后的RTL视图,图6.5 adder8b综合后的RTL视图中将adder4b展开后的视图,图6.6 adder8b逻辑综合后的资源使用情况,5硬件逻辑验证 假设使用GW48-CK EDA实验开发系统进行硬件逻辑验证,可选择实验电路结构图,由的实验电路结构图和图确定引脚的锁定。如可取实验电路结构图的PIO3PIO0接a83:0,PIO7PIO4接a87:4,PIO11PIO8接b83:0,P

7、IO15PIO12接b87:4,PIO49接c8。此加法器的被加数a8和加数b8分别由键2与键1、键4与键3输入,加法器的最低位进位c8由键8输入,计算结果将分别通过PIO23PIO20,PIO19PIO16输出并显示于数码管6(高4位)和数码管5(低4位),溢出进位由PIO39输出,当有进位时,结果显示于发光管D8。,6.2 8位乘法器的设计,1系统设计思路 一般乘法器各种不同的设计技巧,综合后的电路亦有不同的执行效能。本节将介绍移位乘法器、定点乘法器及布斯booth乘法器的设计。1)8位移位乘法器 不带符号的8位乘法器假设以连加方式,那么最差情况需要28-1次方能完成计算;而以移位式那么最

8、多仅需要8次即可完成乘法计算。移位式8位乘法器计算流程如下:,1输入8位被乘数a及乘数b时,程序会先判断输入值:*假设乘数及被乘数有一个为0,那么输出乘积为0;*假设被乘数与乘数中有一数为1,那么输出乘积为被乘数或乘数;*假设被乘数或乘数皆非0或1,那么利用算法求得乘积;先预设乘积p为0,位n=0,0 位n8。算法求乘积的方法是:利用判断乘数中的第n位是否为1的方法进行计算。假设为1,那么乘积缓存器等于被乘数左移n位,积数等于乘积缓存器加积数;假设为0,那么n位=n位+1。如此判断8次即可获得乘积。2当乘数和被乘数均为8位时,以for循环执行8次即可完成乘法计算。,2)8位定点乘法器 一般作乘

9、法运算时,均以乘数的每一位数乘以被乘数后,所得部分乘积再依乘数每一位数的位置对齐后相加。经过对二进制乘法运算规律的总结,定点乘法运算中进行相加的运算规那么为:1当乘数的位数字为1时,可将被乘数的值放置适当的位置作为部分乘积;2当乘数的位数字为0时,可将0放置适当的位置作为部分乘积;3在硬件中可当and门做判断,例如:1010*1,乘数1和每一个被乘数的位都作and运算,其结果为1010,只须用and门就可得到部分乘积;(4)当部分乘积都求得后,再用加法器将上述部分乘积相加完成乘积运算。,3)8位布斯乘法器 布斯booth乘法算法,先将被乘数的最低位加设一虚拟位,开始虚拟位设为0并存放于被乘数中

10、,由最低位与虚拟位,一次判定两位,两位判定可能情况会有如下4种:100:不执行运算,乘积缓存器直接右移一位;201:将乘积加上被乘数后右移一位;310:将乘积减去被乘数后右移一位;411:不执行运算,乘积缓存器直接右移一位。,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)/当

11、a=0或b=0时p=0 rp=16b0;,else if(a=1)/当a=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,2)8位定点乘法器/8位定点乘法器module mult8_fp(p,a,b);parameter width=8;/设定数据宽度为8位 input width-1:0 a;/被乘数 inp

12、ut 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 width-1:0 pcram width:0;/设定进位的暂存器 reg width+width-1:0 temp;/设定乘积的暂存器

13、integer j,k;,always(a or b)/读取乘数与被乘数begin for(j=0;jwidth;j=j+1)begin for(k=0;kwidth;k=k+1)ppk=ak j=j+1)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 end,ps=psramwidth-1;pc=pcramwidth-1;pc10=0;ps10=0;for(k=1;kwidth;k=k+1)beg

14、inps1k=pc1k-1pck-1psk;/全加器之和与进位运算pc1k=pc1k-1/乘积结果的输出endmodule,3)8位布斯乘法器/8位布斯乘法器 module 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)beginpawidth+width:0=16b0

15、,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子程序 end2b01:begin/pa=pa+b pawidth+width:width+1=pawidth+width:width+1+bwidth-1:0;rshift(pa,right);/执行算术右移task子程序

16、enddefault:rshift(pa,right);/直接执行算术右移task子程序 endcase,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=1b0,pawidth+width:1;/最高位为1的算术右移 1b1:rightwidt

17、h+width:0=1b1,pawidth+width:1;endcase endtaskendmodule,3仿真结果验证图是使用对移位乘法器mult8s进行时序仿真的结果。如当输入a=36,b=12,乘积输出p应为36 12=432,而实际仿真输出为432,因此仿真结果是正确的。同理可验证其余的仿真结果也是正确的。定点乘法器mult8_fp和布斯乘法器booth的时序仿真和结果分析,请读者自己完成。,图6.7 移位乘法器mult8s的时序仿真结果,4逻辑综合分析根据第节所述的方法,请读者自己进行逻辑综合,查看并分析有关综合结果。5硬件逻辑验证假设使用GW48-CK EDA实验开发系统进行硬

18、件逻辑验证,可选择实验电路结构图,由节的实验电路结构图和对应程序的输入输出端口定义确定引脚的锁定。被乘数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);乘积显示于数码管85,高位在左。,6.3 8位除法器的设计,1系统设计思路1)8位移位除法器1输入被除数a及除数b时,程序会先判断输入值:*假设除数及被除数均为0

19、,那么此表达式无意义,商数输出记为0,余数输出记为0,因为溢位输出为1,所以商数无意义;*假设除数为0且被除数大于0,那么此表达式溢位输出,商数输出为0,余数输出为0,溢位输出为1;*假设被除数及除数相等,那么输出商数为1,余数输出为0,溢位输出为0;*假设被除数小于除数,那么输出商数为0,余位输出为被除数,溢位输出为0;*假设除数为1,那么输出商数为被除数,余数输出为0,溢位输出为0;,*假设被除数大于除数,那么利用以下算法求出商数;预设商数q为0,余数r为0,位cn=8为8位除法器;此算法先判断位cn是否大于0,假设大于0,那么余数左移一位,余数那么等于余数加上被除数第cn-1位的值,商数

20、左移一位。再判断余数是否大于或等于除数,假设大于或等于除数,商数那么等于商数加1,余数等于余数减除数;假设小于除数,那么cn=cn-1。再判断cn是否大于0,如此来回判断8次,即可获得商数、余数。此算法的优点是n位除法器仅需判断n次即可获得商数、余数,无需进行庞大的运算。,2)8位重存除法器被除数a、除数b,那么商数q及余数r与a、b的关系定义为:a=q*b+r。在进行除法运算时,商数q中的每一位均可由执行一连串的减法2ri-b决定。对于重存除法,在每一步骤中均执行ri+1=2ri-b。当相减结果为负时,必须执行重存加法算法,即ri+1=2ri+b。换言之,假设对应商数qi为0,那么部分的余数

21、将由修正值重新存回。其执行步骤为:将被除数存入缓存器a亦为商数中,除数放在缓存器b中,接着将余数缓存器r清除为0,然后开始作n次除法步骤n是商数的位长度;将r,a所组成的缓存器向左移一位;余数缓存器r减掉除数缓存器b,并把差值再存回余数缓存器r;如果差值是负的,那么被除数缓存器a最低位设为0,否那么为1;差值是负值确定之后,把r加回b以回复旧的r值。,3)8位非重存除法器被除数a、除数b,那么商数q及余数r与a、b的关系定义为:a=q*b+r。在进行除法运算时,商数q中的每一位均可由执行一连串的减法2ri-b决定。非重存除法算法,是由重存除法算法演变而来。对于非重存除法,在每一步骤中均执行ri

22、+1=2ri-b。当相减结果为负时对应商数qi为0,不做重存操作,而是继续左移一位,如次可节省重存除法中的加法器。非重存除法的执行步骤为:1将被除数存入缓存器a亦为商数中,除数放在缓存器b中,接着将余数缓存器r清除为0,然后开始作n次除法步骤n是商数的位长度;2将r,a所组成的缓存器向左移一位;3检查余数缓存器r:假设是负数,那么将除数缓存器b加入余数缓存器r;假设是正值,那么由余数缓存器r减去除数缓存器b;4如果余数缓存器r是负值,那么设a的最低位为0,反之设为1;5假设最后一次的余数为负,那么须将除数b重新加回余数r。,2Verilog HDL源程序1)8位移位除法器/8位移位式除法器mo

23、dule 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,over=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;

24、elsebeginrq=-1;rr=-1;over=1;end endelse if(ra=rb)/当ra=rb时使rq=1,rr=0 begin rq=1;rr=0;end,else if(ra b时使rq=0,rr=0 begin rq=0;rr=0;/初始化rq和rr for(cnt=bitl-1;cnt 0;cnt=cnt-1)begin,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

25、 o=over;endmodule,2)8位重存除法器/8位重存除法module 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;integer i;always(a or b)begin q=a;div=b;p=8h00,1b0;,for(i=0;iwidth;i=i+1)beg

26、in p=pwidth-1:0,qwidth-1;q=qwidth-2:0,1b0;p=p+1b0,div+1b1;case(pwidth)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,3)8位非重存除法器/8位非恢复除法module divnrd8(a,b,q,r,o);parameter width=8;/设定8位 input width-1:0 a,b;/a:被除数,b:除数 out

27、put width-1: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,sign=1b0;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;if(sign=1b1)p=p+1b0,div;else p=p+1b0,div+1b1;case(pwidth)1b0:begin sign=1b0;q0=

28、1b1;end 1b1:begin sign=1b1;q0=1b0;end endcase end,/假设余数为负数,那么修正余数 if(pwidth=1b1)begin p=p+1b0,div;r=pwidth-1:0;/余数输出 end else r=pwidth-1:0;end assign o=(b=8h00)?1b1:1b0;/溢出检测 endmodule,3仿真结果验证图是使用对移位除法器div8s进行时序仿真的结果。如当被除数a=112,除数b=20,商q应为122/20=6,余数r=2,溢出标志o=0,而实际仿真输出与此完全相同,同理可验证其余值运算的仿真结果也是正确的。8位重

29、存除法器divrd8s和非重存除法器divnrd8s的时序仿真和结果分析,请读者自己完成。,图6.8 8位移位除法器div8s的时序仿真结果,4逻辑综合分析 根据第节所述的方法,请读者自己进行逻辑综合,查看并分析有关综合结果。5硬件逻辑验证假设使用GW48-CK EDA实验开发系统进行硬件逻辑验证,可选择实验电路结构图,由节的实验电路结构图和对应程序的输入输出端口定义确定引脚的锁定。如被除数a 7:0接PIO15PIO8(由键4,键3输入8位二进制数),除数b 7:0接PIO7PIO0(由键2,键1输入6位二进制数),商输出q 7:0接PIO31PIO24,余数输出r 7:0接PIO23PIO

30、16,溢出信号o接PIO32。进行硬件验证时方法如下:键4和键3分别输入被除数的高4位和低4位(输入值显示于数码4和数码3),键2和键1分别输入除数的高2位和低4位(输入值显示于数码2和数码1);商显示于数码管87,余数显示于数码管65,高位在左,溢出信号显示于D1。,6.4 可调信号发生器的设计,1系统设计思路 设计一个可调信号发生器,可产生正弦波、方波、三角波和锯齿波四种信号,能够实现信号的转换并具有频率可调的功能。可调信号发生器由三部分构成:地址指针、数据ROM和D/A。地址指针用来产生地址,数据R0M中存放波形数据,包括正弦波、方波、三角波和锯齿波,D/A用来将波形数据转换为模拟波形。

31、,2.Verilog HDL源程序1顶层模块signalgen的设计/顶层模块signalgen.v module signalgen(clk,control,i,q_out);input clk;input 1:0 control;input 3:0 i;/读取数据间隔,调整频率 output 7:0 q_out;/输出数据 reg 8:0 addr;reg 7:0 q_out,m,k;datarom u1(.address(addr),.clock(clk),.q(q_out);always(posedge clk)begin,case(control)/根据control的不同控制产生正

32、弦波、锯齿波、方波和三角波0:begin/产生正弦波 if(addr=127)addr=m)addr=0;end end end,1:begin/产生锯齿波 if(addr=255)addr=(m+128)addr=128;end end end,2:begin/产生方波 if(addr=383)addr=(m+256)addr=256;end end end,3:begin/产生三角波 if(addr=511)addr=(m+384)addr=384;end end end endcase end endmodule,2底层datarom模块的设计 1建立ROM初始化文件 ROM的初始化文件

33、用来完成对数据ROM初始化,即将所有将要显示的波形数据存放到ROM里。下面是常用的两种初始化设计方法:建立.mf格式文件。首先选择ROM数据文件编辑窗口,即File菜单中选择New,并在New对话框中选择0ther files标签,选择Memory Initization file,单击OK按钮后产生ROM数据文件大小选择对话框。这里采用512点8位数据的情况,可选ROM的数据数(Numer)为512,数据宽(Word size)取8位。单击0K按钮,将出现空的mif数据表格,表格中的数据为十进制表达方式,任一数据对应的地址为左列与顶行数之和。将波形数据填入表中,完成后在file菜单中单击sa

34、ve as,保存此数据。建立hex格式文件。建立.hex格式文件的方法有两种:第一种方法与建立.mif格式文件的方法相同,只是在New对话框中选择other files标签,然后选择H,最后为hexadecima(Intel Format)File格式文件;第二种方法是用C语言或者使用MATLAB等工具生成.hex格式的波形数据。,datarom的数据如下:,2利用MegaWizard piug-In Manger定制正弦信号数据datarom 在Tools菜单中选择MegaWizard Plug-In Mallager,弹出对话框。选择Create a new custom megafunt

35、ion variation,即定制一个新的模块。单击该对话框的next按钮后,新出现的操作对话框如下图,选择Merory Complier项下的ROM:1-PORT,再选目标器件Cyelone 器件和Verilog HDL语言方式,最后键入ROM文件存放的路径和文件名。根据依次弹出的操作设置对话框,依次选择设置ROM控制线、地址、数据线,选择设置输出端口,选择设置ROM初始文件,声明元器件库,直至完成datarom的定制。其中dataromde1初始文件设置如下图。,图6.9 定制模块选择及输出文件的选择与设置选择,图6.10 选择设置ROM初始文件datarom.mf,3仿真结果验证 这里使

36、用SignalTap 嵌入式逻辑分析仪进行实时测试。SignalTap 嵌入式逻辑分析仪,集成到Quartus 设计软件中,能够捕获和显示可编程片上系统SOPC设计中实时信号的状态,还可以实时测试FPGA中的信号波形。目前SignalTap 嵌入式逻辑分析仪支持的器件系列包括APEXTAPEX20KEAPEX20KCAPEX20KCYCLONEEXCALIBURMERCURYSTRATIX GXSTRATIX等。使用SignalTap 的一般流程是:设计人员在完成设计并编译工程后,建立SignalTap(.stp)文件并加入工程配置STP文件编译并下载设计到FPGA在Quartus 中显示被测

37、信号的波形测试完毕后将该逻辑分析仪从项目中删除。本设计中使用SignalTap 进行波形的实时测试步骤如下:,1选择菜单Files中的New,在New对话框中选择0ther Files标签中的SignalTap Logic Analyzer File,单击OK按钮,即出现如下图的SignalTap 编辑器。2调入待测信号及保存文件。首先单击上排的Instance栏内的auto-signaltap_0根据自己的意愿将其改名,这是其中一组待测信号。为了调入待测信号,在下栏的空白处双击,即弹出Node Finder对话框,单击list即在左栏出现此工程相关的所有信号,包括内部信号。此例中要将cont

38、ro1、i、q_out信号调入,如下图。不能将工程的主频时钟信号调人信号观察窗。如果有总线信号,只需调入总线信号即可,而慢速信号可不调入;调信号的数量应根据实际需要来决定,不可随意调入过多的没有实际意义的信号,这会导致SignalTap 无谓地占用芯片内过多的资源,最后,保存SignalTap 文件。,选择菜单Fi1e中的Save As命令,键人此SignalTap 文件的文件名,扩展名是默认的“stp。单击保存按钮后将出现一个提示:“Do you want to enable SignalTap,应该 单击Yes按钮,表示同意再次编译时将此SignalTap 文件(核)与工程(sindt)捆

39、绑在一起综合/适配,以便一同被下载进FPGA芯片中去。如果单击No按钮,那么必须自己去设置,方法是,选择菜单Assignments中的settings命令,在Category栏中选择SignalTap Logic Analyzer。在SignalTap File栏选择已保存的Signa1Tap 文件名,并选择Eable Signa1Tap Logic Analyzer,单击0K按钮即可。但应该特别注意,当利用SignalTap 将芯片中的信号全部测试结束后,如在构成产品前,不要忘了将 SignalTap 从芯片中除去,方法是在此窗口中关闭Eable Signa1Tap Logic Analyz

40、er,再编译一次即可。,图6.11 signaltap编辑器,图6.12 调入待测信号,3SignalTap 的参数设置。单击最大化按钮和窗口左下角的setup,即出现如下图的全屏编辑窗口。首先选择输入逻辑分析仪的工作时钟信号Clock,单击Clock栏左侧的“按钮,选择工程的主频时钟信号。接着在Data框的Samp1e栏选择此组信号的采样深度(sample depth)为 1kbit。注意,这个深度一旦确定,那么信号组的每一位信号都将获得同样的采样深度。然后是对观察信号的要求,在Buffer acquisition mode框的Circu1ate栏设置在既定的采样深度中起始触发的位置,比如选

41、择中点触发(Center trigger position)。最后是触发信号和触发方式,这可以根据具体需求来选置。在Trigger框的Trigger level栏选择1;选择Trigger ln复选框,并在source栏选择触发信号,在这里此选择sin工程的内部计数器最高位输出信号address6作为触发信号,在Pattern栏选择上升沿触发方式(Rising Edges),即当address6为上升沿时,Signal Tap 在CLK的驱动下对信号组的信号进行连续或单次采样根据设置决定。设置完毕后保存。,图6.13 signaltap编辑器设置,4编译下载。首先选择Processing菜单的

42、Start Compilation项,启动全程编译。编译结束后,signa1Tap 的观察窗口通常会自动打开,但假设没有打开,可选择菜单Too1s中的SignalTap Analyzer,打开signa1Tap。通过右上角的Setup按钮选择硬件通信模式;然后单击下方Device栏的scan Chain按钮,对实验板进行扫描。如果在栏中出现板上FPGA的型号名,表示系统JTAG通信情况正常,可以进行下载。最后是在Files栏选择下载文件,单击下载标号,观察左下角下载信息。,5启动 signalTap 进行测试与分析。单击Intance,再单击Autorun Ana1ysis,启动signalT

43、ap,然后单击左下角的Data和全屏控制钮,这时就能在SignalTap 数据窗口通过JTAG接口观察到来自实验板上的FPGA内部实时信号。数据窗口的上沿坐标是采样深度的二进制位数,全程是1K bit。如果单击总线名(如q_out)左侧的“+号,可以展开此总线信号,同时可用左右键控制数据的展开。如果要观察相应的模拟波形,右键单击q_out左侧的端口标号,在弹出的下拉栏中选择Bus Display Format的Unsigned Line Chart,于是得到如图、图、图、图所示波形。6各种波形可以通过i设置频率的大小。,图6.14 正弦波,图6.15 锯齿波,图6.16 方波,图6.17 三角

44、波,4逻辑综合分析 使用对signalgen进行逻辑综合后可查看的RTL视图。图a和b分别是选用EPF10K10TC144-3和选用EP2C8T144C6芯片、使用对signalgen进行逻辑综合后的资源使用情况。图是signalgen的时钟性能分析结果,从结果可以看出,假设选用选用EPF10K10TC144-3芯片,该系统的最高频率可达到;假设选用选用EP2C8T144C6芯片,该系统的最高频率可达到。从这里可以看出,对于相同的一个Verilog HDL设计,假设采用不同的芯片,该系统的最高频率是不相同的。,a 选用EPF10K10TC144-3的资源使用情况 b 选用EP2C8T144C6

45、的资源使用情况,图逻辑综合后的资源使用情况,a 选用EPF10K10TC144-3的时钟性能 b 选用EP2C8T144C6的时钟性能,图6.19 signalgen的时钟性能分析结果,5硬件逻辑验证请读者根据前述方法自行完成硬件逻辑验证工作。,6.5 PWM信号发生器的设计,1系统设计思路PWM即脉冲宽度调制,就是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。PWM从处理器到被控系统信号都是数字式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小,因此广泛应用在从测量、通信到功率控制与变换的许多领域中。采用FPGA产生PWM波形的方法很多,常用的有计数器法、存储

46、查表法等。其中计数器法设计的基本原理就是:根据PWM输出周期计数值和PWM输出占空比控制计数值,通过控制对应的计数段的高、低电平输出,来产生一个周期可调、占空比可调的PWM信号。现欲设计一个有关控制计数值为32位的PWM信号发生器,采用计数器法进行设计,主要包括六个处理过程块:写pwm输出周期的时钟数寄存器、写pwm周期占空比寄存器、写控制寄存器、读寄存器、pwm信号产生计数控制和pwm信号输出控制等过程块。,2Verilog HDL源程序/PWM信号发生器module pwmgen(clk,rst,ce,addr,write,wrdata,read,bytesel,rddata,pwm);i

47、nput 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;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_re

48、g_sel=0;duty_cycle_reg_sel=0;control_reg_sel=0;case(addr)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,/写pwm输出周期的时钟数寄存器 always(posedge clk or negedge rst)begin if(rst=1b0)clk_div_reg=0;el

49、se begin if(write end end end,/写pwm周期占空比寄存器 always(posedge clk or negedge rst)begin if(rst=1b0)duty_cycle_reg=0;else begin if(write end end end,/写控制寄存器 always(posedge clk or negedge rst)begin if(rst=1b0)control_reg=0;else begin if(write end end end,/读寄存器 always(addr or read or clk_div_reg or duty_cy

50、cle_reg or control_reg or ce)begin if(read endcase end,/pwm输出使能的赋值 assign pwm_en=control_reg;/pwm信号产生计数控制电路 always(posedge clk or negedge rst)begin if(rst=1b0)pwm_cnt=0;else begin if(pwm_en)begin if(pwm_cnt=clk_div_reg)pwm_cnt=0;else pwm_cnt=pwm_cnt+1;end else pwm_cnt=0;end end,/pwm信号输出控制电路 always(p

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号