《第7章Verilog设计的优化课件.ppt》由会员分享,可在线阅读,更多相关《第7章Verilog设计的优化课件.ppt(36页珍藏版)》请在三一办公上搜索。
1、第7章 Verilog设计的优化,第7章Verilog设计的优化,1,第7章 Verilog设计的优化,主要内容,7.1 设计的可综合性7.2 流水线设计(Pipeline Design)技术7.3 资源共享(Resource Sharing)7.4 过程7.5 阻塞赋值与非阻塞赋值7.6 FPGA设计中毛刺的消除,第7章Verilog设计的优化,2,7.1 设计的可综合性,用FPGA/CPLD器件实现的设计中,综合就是将Verilog或VHDL语言描述的行为级或功能级电路模型转化为RTL级功能块或门级电路网表的过程.,综合过程,第7章Verilog设计的优化,3,可综合的设计中应注意,不使用
2、初始化语句;不使用带有延时的描述;不使用循环次数不确定的循环语句,如forever,while等。应尽量采用同步方式设计电路。除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。用always过程块描述组合逻辑,应在敏感信号列表中列出块中出现的所有输入信号。,第7章Verilog设计的优化,4,可综合的设计中应注意,所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位,用器件的全局时钟端作为系统外部时钟输入端。在Verilog模块中,任务(task)通常被综合成组合逻辑的形式;每个函数(function)在
3、调用时通常也被综合为一个独立的组合电路模块。,第7章Verilog设计的优化,5,7.2 流水线设计技术,流水线设计是经常用于提高所设计系统运行速度的一种有效的方法。为了保障数据的快速传输,必须使系统运行在尽可能高的频率上,但如果某些复杂逻辑功能的完成需要较长的延时,就会使系统难以运行在高的频率上,在这种情况下,可使用流水线技术,即在长延时的逻辑功能块中插入触发器,使复杂的逻辑操作分步完成,减小每个部分的延时,从而使系统的运行频率得以提高。流水线设计的代价是增加了寄存器逻辑,增加了芯片资源的耗用。,第7章Verilog设计的优化,6,流水线操作的概念,如某个复杂逻辑功能的实现需较长的延时,可将
4、其分解为几个(如3个)步骤来实现,每一步的延时变小,在各步间加入寄存器,以暂存中间结果,这样可大大提高整个系统的最高工作频率。,流水线操作的概念示意图,第7章Verilog设计的优化,7,非流水线方式8位全加器,module adder8(cout,sum,ina,inb,cin,clk);input7:0 ina,inb;input cin,clk;output7:0 sum;output cout;reg7:0 tempa,tempb,sum;reg cout,tempc;always(posedge clk)begin tempa=ina;tempb=inb;tempc=cin;end/
5、输入数据锁存always(posedge clk)begin cout,sum=tempa+tempb+tempc;endendmodule,第7章Verilog设计的优化,8,两级流水实现的8位加法器,module adder_pipe2(cout,sum,ina,inb,cin,clk);input7:0 ina,inb;input cin,clk;output reg7:0 sum;output reg cout;reg3:0 tempa,tempb,firsts;reg firstc;always(posedge clk)begin firstc,firsts=ina3:0+inb3:
6、0+cin;tempa=ina7:4;tempb=inb7:4;endalways(posedge clk)begin cout,sum7:4=tempa+tempb+firstc;sum3:0=firsts;endendmodule,将8位数每四位分2次相加,形成两级流水线运算过程。,第7章Verilog设计的优化,9,四级流水线实现的8位加法器,module pipeline(cout,sum,ina,inb,cin,clk);output7:0 sum;output cout;input7:0 ina,inb;input cin,clk;reg7:0 tempa,tempb,sum;re
7、g tempci,firstco,secondco,thirdco,cout;reg1:0 firsts,thirda,thirdb;reg3:0 seconda,secondb,seconds;reg5:0 firsta,firstb,thirds;always(posedge clk)begin tempa=ina;tempb=inb;tempci=cin;end/输入数据缓存always(posedge clk)begin firstco,firsts=tempa1:0+tempb1:0+tempci;/第一级加(低2位)firsta=tempa7:2;firstb=tempb7:2;/
8、未参加计算的数据缓存endalways(posedge clk)begin secondco,seconds=firsta1:0+firstb1:0+firstco,firsts;seconda=firsta5:2;secondb=firstb5:2;/数据缓存endalways(posedge clk)begin thirdco,thirds=seconda1:0+secondb1:0+secondco,seconds;thirda=seconda3:2;thirdb=secondb3:2;/数据缓存endalways(posedge clk)begin cout,sum=thirda1:0
9、+thirdb1:0+thirdco,thirds;/第四级加(高两位相加)end endmodule,将8位数每两位分4次相加,形成四级流水线运算过程。,第7章Verilog设计的优化,10,设计综合到不同器件的最高工作频率,第7章Verilog设计的优化,11,2个加法器和1个选择器的实现方式,module resource1(sum,a,b,c,d,sel);parameter SIZE=4;input sel;inputSIZE-1:0 a,b,c,d;output regSIZE:0 sum;always(*)/使用通配符begin if(sel)sum=a+b;else sum=c
10、+d;end endmodule,7.3 资源共享(Resource Sharing),资源共享可用来减少系统所耗用的器件资源,尤其是将一些耗用资源较多的模块进行共享,能有效降低整个系统耗用的资源。,第7章Verilog设计的优化,12,2个选择器和1个加法器的实现方式,module resource2(sum,a,b,c,d,sel);parameter SIZE=4;input sel;inputSIZE-1:0 a,b,c,d;output regSIZE:0 sum;regSIZE-1:0 atemp,btemp;always(*)/使用通配符begin if(sel)begin at
11、emp=a;btemp=b;endelse begin atemp=c;btemp=d;endsum=atemp+btemp;endendmodule,资源共享(Resource Sharing),第7章Verilog设计的优化,13,器件资源的消耗对比,资源共享(Resource Sharing),第7章Verilog设计的优化,14,方式一需要2个加法器,而方式二通过增加一个MUX,共享一个加法器,由于加法器耗用的资源比MUX更多,因此方式二更节省资源。所以在电路设计中,应尽可能使硬件代价高的功能模块资源共享,从而降低整个系统的成本。计算位数越多,耗用的资源差别越大。,资源共享(Resou
12、rce Sharing),结 论,第7章Verilog设计的优化,15,7.4 过程,在Verilog语言中,过程语句包括always和initial。always过程反复执行其中的块语句,而initial过程中的语句块只执行一次。always过程可综合,initial语句只能用于仿真。always过程语句与VHDL语言的进程语句Process非常相像,它既可以用来描述时序电路,也可以用来描述组合电路。一个Verilog模块中的不同always过程语句是并行运行的。assign赋值语句、实例元件的调用也都是并行运行的,我们可以这样理解:这些语句最终都综合或翻译成为具体的电路结构,而这些电路结构
13、是同时在运行或动作的。,第7章Verilog设计的优化,16,在进行数字系统设计的时候应注意,将组合逻辑实现的电路和用时序逻辑实现的电路应尽量分配到不同的always过程中。一个always过程中只允许描述对应于一个时钟信号的同步时序逻辑。always过程必须由敏感信号的变化来启动,因此应精心选择进程敏感表达式中的敏感变量。多个always过程间可通过信号线进行通信和协调。,第7章Verilog设计的优化,17,7.5 阻塞赋值与非阻塞赋值,在可综合的硬件设计中,使用阻塞和非阻塞赋值语句时,应注意以下原则(1)当用“always”块来描述组合逻辑时,既可以用阻塞赋值,也可以采用非阻塞赋值,应尽
14、量使用阻塞赋值。(2)对时序逻辑描述和建模,使用非阻塞赋值方式。(3)为锁存器(Latch)建模,应使用非阻塞赋值。(4)若在同一个“always”过程块中既为组合逻辑建模,又为时序逻辑建模,最好使用非阻塞赋值方式。,第7章Verilog设计的优化,18,7.5 阻塞赋值与非阻塞赋值,在可综合的硬件设计中,使用阻塞和非阻塞赋值语句时,应注意以下原则(5)在一个“always”过程块中,最好不要混合使用阻塞赋值和非阻塞赋值,虽然同时使用这两种赋值方式在综合时并不一定会出错,但对同一个变量不能既进行阻塞赋值,又进行非阻塞赋值,这样在综合时会报错。(6)不能在两个个或两个以上的“always”过程块
15、中对同一个变量赋值,这样会引发冲突,在综合时会报错。(7)仿真时使用$strobe显示非阻塞赋值的变量。,第7章Verilog设计的优化,19,时序逻辑建模应尽量使用非阻塞赋值方式,【例7.9】阻塞赋值方式描述的移位寄存器1module block1(q0,q1,q2,q3,din,clk);input clk,din;output reg q0,q1,q2,q3;always(posedge clk)begin q3=q2;/注意赋值语句的顺序 q2=q1;q1=q0;q0=din;end endmodule,/实现相当右移寄存器功能。,第7章Verilog设计的优化,20,例7.9的RTL
16、综合结果,第7章Verilog设计的优化,21,【例7.10】阻塞赋值方式描述的移位寄存器2。module block2(q0,q1,q2,q3,din,clk);input clk,din;output reg q0,q1,q2,q3;always(posedge clk)begin q3=q2;q1=q0;/该句与下句的顺序与例10.9颠倒 q2=q1;q0=din;end endmodule,/实现的不是移位寄存器功能。所以阻塞语句不能随意改变顺序,否则将产生不同逻辑功能电路。,第7章Verilog设计的优化,22,例7.10的RTL综合结果,第7章Verilog设计的优化,23,【例7
17、.11】阻塞赋值方式描述的移位寄存器3。module block3(q0,q1,q2,q3,din,clk);input clk,din;output reg q0,q1,q2,q3;always(posedge clk)begin q0=din;/4条赋值语句的顺序与例10.9中完全颠倒 q1=q0;q2=q1;q3=q2;end endmodule,实现的不是移位寄存器功能。,第7章Verilog设计的优化,24,例7.11的RTL综合结果,第7章Verilog设计的优化,25,【例7.12】非阻塞赋值方式描述的移位寄存器。module block4(q0,q1,q2,q3,din,clk
18、);input clk,din;output reg q0,q1,q2,q3;always(posedge clk)begin q3=q2;q1=q0;q2=q1;q0=din;end endmodule,实现的不是移位寄存器功能。,第7章Verilog设计的优化,26,结 论,对于阻塞赋值来说,赋值语句的顺序对最后的综合结果有着直接的影响。而如果采用非阻塞赋值方式来描述的话,则可以不考虑赋值语句的排列顺序,只需将其连接关系描述清楚即可。,第7章Verilog设计的优化,27,第7章Verilog设计的优化,28,7.6 FPGA设计中毛刺的消除,信号在FPGA器件内部通过连线连接逻辑门时,都
19、有一定的延时。因此多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,往往会出现一些不正确的“毛刺”(Glitch),称为“冒险”(Hazard)现象。这些毛刺在电路板的设计中由于PCB走线时,存在分布电感和分布电容,所以许多毛刺能够被自然滤除,而在PLD内部没有分布电感和电容,这些毛刺将被完整地保留并向下一级传递,所以在FPGA设计中,如何消除毛刺就变得很重要。,第7章Verilog设计的优化,29,可通过改变设计,破坏毛刺产生的条件,来减少毛刺的发生。例如,在数字电路设计中,常常采用格雷码计数器取代普通的二进制计数器。还可根据D触发器的D输入端对毛刺不敏感的特点而消除毛
20、刺,举例说明,7.6 FPGA设计中毛刺的消除,第7章Verilog设计的优化,30,【例7.23】长帧同步时钟的产生module longframe1(clk,strb);parameter DELAY=8;input clk;output reg strb;reg7:0 counter;always(posedge clk)begin if(counter=255)counter=0;else counter=counter+1;endalways(counter)begin if(counter=(DELAY-1)strb=1;else strb=0;endendmodule,第7章Ve
21、rilog设计的优化,31,毛刺,时序仿真输出波形,第7章Verilog设计的优化,32,引入了D触发器的长帧同步时钟的产生module longframe2(clk,strb);parameter DELAY=8;input clk;output strb;reg7:0 counter;reg temp,strb;always(posedge clk)begin if(counter=255)counter=0;else counter=counter+1;endalways(posedge clk)begin strb=temp;end/引入触发器strbalways(counter)be
22、gin if(counter=(DELAY-1)temp=1;else temp=0;endendmodule/由于temp不直接输出,避免毛刺出现。,第7章Verilog设计的优化,33,消除毛刺后的时序仿真输出波形,第7章Verilog设计的优化,34,7.1 阻塞赋值与非阻塞赋值有什么本质的区别,在使用中应注意哪些方面,结合自己的设计实践进行总结。7.2 流水线设计技术为什么能提高数字系统的工作频率?7.3 设计一个加法器,实现sum=a0+a1+a2+a3,a0、a1、a2、a3宽度都是8位。如用下面两种方法实现,哪种方法更好一些。(1)sum=(a0+a1)+a2)+a3(2)sum=(a0+a1)+(a2+a3)7.4 用流水线技术对上题中的sum=(a0+a1)+a2)+a3的实现方式进行优化,对比最高工作频率。7.5 在FPGA设计开发中,还有哪些方法可提高设计性能?,习 题 7,第7章Verilog设计的优化,35,第7章Verilog设计的优化,36,