《数字电路EDA综合设计.ppt》由会员分享,可在线阅读,更多相关《数字电路EDA综合设计.ppt(83页珍藏版)》请在三一办公上搜索。
1、1,9.1 常用组合电路模块的设计9.2 常用时序电路模块的设计9.3 复杂数字系统的设计9.4 提高数字系统性能的方法,共2学时,第9章 数字电路EDA综合设计,2,9.1 常用组合电路模块的设计,一、简单门电路二、译码器与编码器三、数据选择器四、奇偶校验产生器,内容概要,3,9.1 常用组合电路模块的设计,一、简单门电路例9.1 基本门电路的几种描述方法,组合逻辑电路:任一时刻的输出信号仅取决于该时刻的输入信号,而与信号作用前电路原来所处的状态无关。简单组合逻辑通常用门原语或assign语句实现;复杂组合逻辑则常用always块语句实现,并常用case语句或if_else语句进行分支操作!
2、,4,9.1 常用组合电路模块的设计,module gate1(F,A,B,C,D);output F;input A,B,C,D;nand(F1,A,B);and(F2,B,C,D);or(F,F1,F2);endmodule,常用有3种描述方法:,(1)调用门原语 必须明确电路内部逻辑关系,(2)用assign连续赋值语句描述 写出逻辑表达式,module gate2(F,A,B,C,D);output F;input A,B,C,D;assign F=(Aendmodule,5,9.1 常用组合电路模块的设计,(3)用过程赋值语句描述 在always块内写出逻辑表达式,module ga
3、te3(F,A,B,C,D);output F;input A,B,C,D;always(A or B or C or D)begin F=(A endendmodule,6,9.1 常用组合电路模块的设计,二、译码器与编码器 1.译码器decoder译码器:将输入的二进制代码翻译成相应的输出信号,以表示编码时所赋予原意的电路。多条件译码电路大多用case语句实现只需知道真值表。,例9.2 3-8译码器 对3位输入信号进行译码,当输入信号表示数字几时,8位输出线的相应位为0,其余位均为1。,7,9.1 常用组合电路模块的设计,module decoder_38(out,in);output7:
4、0 out;input2:0 in;reg7:0 out;always(in)begin case(in)3d0:out=8b11111110;3d1:out=8b11111101;3d2:out=8b11111011;3d3:out=8b11110111;3d4:out=8b11101111;3d9:out=8b11011111;3d6:out=8b10111111;3d7:out=8b01111111;endcase endendmodule,8,9.1 常用组合电路模块的设计,2.编码器encoder编码器:将一个输入信号编码成一组二进制代码输出。优先编码器:如有两个或两个以上的输入有效
5、时,“优先”按其中输入编号最大的输入进行编码,输出为对应输入编号或其反码。利用if_else语句的分支具有先后顺序的特点,用if_else语句可方便地实现优先编码器。,例9.3 8-3优先编码器 输入为a、b、c、d、e、f、g、h,高电平有效,h的优先级最高。当输入中某些位为1时,只对优先级最高的那位编码,使输出等于其对应的编号(ah对应编号为07)。,9,9.1 常用组合电路模块的设计,module encoder8_3(non_on,outcode,a,b,c,d,e,f,g,h);output non_on;output 2:0 outcode;input a,b,c,d,e,f,g,
6、h;reg3:0 outtemp;assign non_on,outcode=outtemp;always(a or b or c or d or e or f or g or h)begin if(h)outtemp=4b0111;else if(g)outtemp=4b0110;else if(f)outtemp=4b0101;else if(e)outtemp=4b0100;else if(d)outtemp=4b0011;else if(c)outtemp=4b0010;else if(b)outtemp=4b0001;else if(a)outtemp=4b0000;else out
7、temp=4b1000;endendmodule,为1时表示没有一个输入信号有效,若ag均为0,则none_on=1,outcode=000,10,9.1 常用组合电路模块的设计,三、数据选择器(MUX)逻辑功能根据控制信号的取值,从多路平行输入数据中,选择一路作为输出信号。又叫多路开关(Multiplexer),或多路器。常用有3种方法来实现:(1)用assign语句设计2选1 MUX 使用条件运算符,例9.4 用assign语句设计的2选1 MUXmodule mux2_1(out,a,b,sel);output out;input a,b,sel;assign out=sel?a:b;/
8、条件运算符endmodule,11,9.1 常用组合电路模块的设计,(2)用if_else语句设计4选1MUX 当控制信号取不同的值时,输出信号与不同的输入信号值相对应例9.9 用if_else语句描述的4选1 MUX,module mux4_1(out,in0,in1,in2,in3,sel);output7:0 out;input 7:0 in0,in1,in2,in3;input 1:0 sel;reg7:0 out;always(in0 or in1 or in2 or in3 or sel)begin if(sel=2b00)out=in0;else if(sel=2b01)out=
9、in1;else if(sel=2b10)out=in2;else out=in3;endendmodule,12,9.1 常用组合电路模块的设计,(3)用case语句设计4选1 MUX 适于多分支情况,比用if_else语句更简洁!例9.6 用case语句描述的4选1 MUX,module mux4_1(out,in0,in1,in2,in3,sel);output7:0 out;input 7:0 in0,in1,in2,in3;input1:0 sel;reg7:0 out;always(in0 or in1 or in2 or in3 or sel)begin case(sel)2b0
10、0:out=in0;2b01:out=in1;2b10:out=in2;default:out=in3;endcase endendmodule,13,9.1 常用组合电路模块的设计,四、奇偶校验产生器逻辑功能:对并行输入的8位数据进行奇偶校验,并产生奇校验位odd_bit和偶校验位even_bit。用assign语句实现对输入按位异或,产生奇校验位odd_bit,若为“1”,表示输入数据中有奇数个1;若偶校验位even_bit为“1”,表示输入数据中有偶数个1。,例9.7 奇偶校验产生器module parity(even_bit,odd_bit,input_bus);output even
11、_bit,odd_bit;input 7:0 input_bus;assign odd_bit=input_bus;/对输入按位异或,产生奇校验位 assign even_bit=odd_bit;/产生偶校验位endmodule,14,9.2 常用时序电路模块的设计,一、D触发器二、数据锁存器三、数据寄存器四、移位寄存器五、任意模加法/减法计数器六、ROM/RAM模块,内容概要,15,9.2 常用时序电路模块的设计,时序逻辑电路:任一时刻的输出信号不仅取决于该时刻的输入信号,而且还取决于电路原来的状态,即还与以前的输入有关。时序逻辑通常用always块语句实现!并常用if_else语句进行分支
12、操作。,(1)J-K触发器,(2)D触发器,Qn+1=D,双稳态触发器是组成时序电路中存储部分的基本单元。具有两个稳定的输出状态(0和1),是最简单的时序逻辑电路,用于存储一位二进制数。常用的双稳态触发器:RS、J-K、D、T触发器,16,9.2 常用时序电路模块的设计,一、D触发器通常有3种D触发器,用always块语句实现:(1)最简单的D触发器(只有一个沿触发信号),例9.8 基本D触发器module DFF(Q,D,CLK);output Q;input D,CLK;reg Q;always(posedge CLK)begin Q=D;endendmodule,17,9.2 常用时序电
13、路模块的设计,(2)带异步清0、异步置1端的D触发器(有多个沿触发信号)例9.9 带异步清0、异步置1端的D触发器,module DFF1(q,qn,d,clk,set,reset);output q,qn;input d,clk,set,reset;reg q,qn;always(posedge clk or negedge set or negedge reset)begin if(!reset)begin q=0;/异步清零,低电平有效 qn=1;end else if(!set)begin q=1;/异步置1,低电平有效 qn=0;end else begin q=d;qn=d;end
14、 endendmodule,reset、set为脉冲信号,18,9.2 常用时序电路模块的设计,(3)带同步清0、同步置1端的D触发器(只有一个沿触发信号)例9.10 带同步清0、同步置1端的D触发器,module DFF2(q,qn,d,clk,set,reset);output q,qn;input d,clk,set,reset;reg q,qn;always(posedge clk)begin if(reset)begin q=0;/同步清零,高电平有效 qn=1;end else if(set)begin q=1;/同步置1,高电平有效 qn=0;end else begin q=d
15、;qn=d;end endendmodule,reset、set为电平信号,19,9.2 常用时序电路模块的设计,二、数据锁存器数据锁存器由多位触发器组成的用于保存一组二进制代码的寄存单元。功能:当输入控制信号(如时钟)为高电平时,门是打开的,输出信号等于输入信号;当输入控制信号为低电平时,门是关闭的,输出端保持刚才输入的数据,即为锁存状态,而不管此时输入信号是否变化。通常由电平信号来控制,属于电平敏感型,适于数据有效滞后于控制信号有效的场合。实现方法:用assign语句使用条件运算符,简便!用always块语句实现,20,9.2 常用时序电路模块的设计,例9.11 电平敏感型的1位数据锁存器
16、module latch_1(q,d,clk);output q;input d,clk;assign q=clk?d:q;/*当时钟信号为高电平时,将输入端信号打入锁存器;当时钟信号为低电平时,锁存原来已打入的数据。endmodule,数据有效滞后于控制信号有效,当clk为低电平时,锁存数据。,21,9.2 常用时序电路模块的设计,例9.12 带置位和复位端的电平敏感型的1位数据锁存器module latch_2(q,d,clk,set,reset);output q;input d,clk,set,reset;assign q=reset?0:(set?1:(clk?d:q);endmod
17、ule,复位,置位,打入数据,锁存数据,22,9.2 常用时序电路模块的设计,例9.13 用always块语句描述的电平敏感型8位数据锁存器module latch_8bit(qout,data,clk);output7:0 qout;input 7:0 data;input clk;reg 7:0 qout;always(clk or data)/电平敏感 begin if(clk)qout=data;end endmodule,23,9.2 常用时序电路模块的设计,三、数据寄存器数据寄存器当时钟信号的上升沿或下降沿到来时,将输入端数据打入寄存器,即此时输出信号等于输入信号;在clk的其它时
18、刻,输出端保持刚才输入的数据,即为寄存状态,而不管此时输入信号是否变化。数据锁存器和数据寄存器的区别:数据锁存器一般由电平信号来控制,属于电平敏感型,适于数据有效滞后于控制信号有效的场合。数据寄存器通常由同步时钟信号来控制,属于脉冲敏感型,适于数据有效提前于控制信号有效、并要求同步操作的场合。,24,9.2 常用时序电路模块的设计,例9.14 用always块语句描述的8位数据寄存器module reg_8bit(qout,data,clk,clr);output7:0 qout;input 7:0 data;input clk,clr;reg 7:0 qout;always(posedge
19、clk or posedge clr)/沿触发 begin if(clr)qout=0;/异步清零 else qout=data;end endmodule,25,9.2 常用时序电路模块的设计,在时钟信号的上升沿,将输入端数据打入寄存器。,在clk的其它时刻,寄存数据。,数据有效提前于控制信号有效,26,9.2 常用时序电路模块的设计,四、移位寄存器信号串行输入,8位并行输出,每个时钟周期内输出信号左移一位,同时将串行输入信号补充到输出信号的最低位。用always块语句实现。,例9.19 用always块语句描述的8位移位寄存器module shifter_8bit(dout,din,clk
20、,clr);output7:0 dout;input din,clk,clr;reg 7:0 dout;always(posedge clk)/沿触发 begin if(clr)dout=0;/同步清零,高电平有效 else begin dout=dout1;/输出信号左移一位 dout0=din;/输入信号补充到输出信号的最低位 end end endmodule,27,9.2 常用时序电路模块的设计,五、任意模加法/减法计数器用always块语句实现,例9.16 可变模加法/减法计数器module updown_count(qd,d,clk,clear,load,up_down);outp
21、ut7:0 qd;input clk,clear,load,up_down;input7:0 d;reg 7:0 cnt;/用reg型变量实现同步加/减法计数器 assign qd=cnt;always(posedge clk)/沿触发 begin if(!clear)cnt=0;/同步清零,低电平有效 else if(load)cnt=d;/同步预置,高电平有效 else if(up_down)cnt=cnt+1;/up_down为1时加法计数 else cnt=cnt-1;/up_down为0时减法计数 end endmodule,28,9.2 常用时序电路模块的设计,六、ROM/RAM模
22、块模块元件例化引用Quartus 的LPM宏单元库(storage)中参数化的RAM模块lpm_ram_dq,如何知道它的端口定义和参数呢?,29,例9.17 296x8 RAM块 module ram296x8(data,address,we,inclock,outclock,q);input 7:0data;input 7:0address;input we,inclock,outclock;output 7:0q;lpm_ram_dq myram(.q(q),.data(data),.address(address),.we(we),.inclock(inclock),.outclock
23、(outclock);defparam myram.lpm_width=8;/定义数据总线的宽度 defparam myram.lpm_widthad=8;/定义地址总线的宽度endmodule,9.2 常用时序电路模块的设计,注意参数的传递!,被引用的模块名,例化的元件名,元件端口,实例的端口,30,9.3 复杂数字系统的设计,一、图形与文本混合设计二、纯文本描述,内容概要,31,9.3 复杂数字系统的设计,一、图形与文本混合设计,复杂数字电路或系统通常采用“自顶向下”的方法进行设计!,将整个电路划分为几个子模块;各子模块分别用文本或图形方式设计,编译、仿真通过后生成逻辑符号;将各逻辑符号放
24、在一顶层图形文件中,进行连接,放置输入、输出引脚,形成完整的电路;编译、仿真。,方法,例9.18 用图形与文本混合设计方法设计8位累加器,建议采用此方法!,32,9.3 复杂数字系统的设计,8位全加器add8.v,8位寄存器reg8.v,(1)子模块设计文件:,33,9.3 复杂数字系统的设计,acc_8bit_1.bdf,(2)8位累加器的顶层图形文件:,图形与文本混合设计的优点:层次清晰,便于调试;便于对每个子模块进行仿真;便于子模块在其他设计中的复用。,返回acc_top_copy.v,34,9.3 复杂数字系统的设计,二、纯文本描述,方法,将整个电路划分为几个子模块;各子模块分别用文本
25、设计,编译、仿真;顶层电路的连接关系也用文本描述,在其中采用模块元件例化的方法调用各子模块;编译、仿真。,35,9.3 复杂数字系统的设计,方法一:文件复制方式 将各子模块的代码复制到顶层模块的后面,保存时文件名与顶层模块名同名!优点:所有代码都在一个文件中,直观!缺点:不便于对每个子模块仿真,不便于子模块在其他设计中的的复用。例9.19 采用文件复制方式描述设计8位累加器,关键:如何让综合器知道在顶层描述中所调用的模块是已编写好的模块?,有3种方法,36,9.3 复杂数字系统的设计,acc_top_copy.v,参见acc_8bit_1.bdf,37,9.3 复杂数字系统的设计,acc_to
26、p_copy.vwf,accout=accout+cin+accin,38,9.3 复杂数字系统的设计,方法二:使用include语句各子模块的文件与顶层模块文件是独立的源程序,用include语句将各子模块的文件包含到顶层模块文件中,保存时文件名与顶层模块名同名!优点:代码简洁;便于对每个子模块仿真;便于子模块在其他设计中的的复用。缺点:Quartus II不支持,必须先用其它综合软件(如Synplify软件)对顶层模块文件进行综合,再用Quartus II软件进行布局布线。,但Quartus II不支持!,39,9.3 复杂数字系统的设计,acc_top.v,例9.20 采用include
27、描述的8位累加器,40,9.3 复杂数字系统的设计,方法三:库管理方式Quartus II具有库管理功能:只要由用户指明所调用的低层文件所在目录,软件在综合时会自动调用这些低层文件。优点:简便!既无需将子模块代码复制到顶层模块文件中,又无需使用include语句!例9.21 采用库管理方式的8位累加器,acc_top_lib.v,子模块文件不必一定要和顶层模块文件位于同一文件夹下!,建议采用此方法!,41,9.3 复杂数字系统的设计,步骤:1 在Quartus II中,执行“ProjectAdd/Remove Files in Project”命令,将顶层模块文件添加到工程中;2 执行“Ass
28、ignmentsSettings”命令,打开“Settings”对话框,在“Category”栏中单击“User Libraries”,打开“User Libraries”标签页,将子模块所在目录添加到“Libraries”中(见下页);3 将顶层模块文件设为Top-Level Entity;4 对顶层模块文件进行全编译;9 进行时序仿真。,在综合acc_top_lib.v时,软件会自动调用add8.*和reg8.*等文件!,42,9.3 复杂数字系统的设计,(1),(2),(3),(4)在“User Libraries”标签页中单击“OK”,43,9.3 复杂数字系统的设计,acc_top_
29、lib.vwf,仿真结果同前两种方式!,44,9.4 提高数字系统性能的方法,一、提高系统工作速度二、减小器件耗用资源,内容概要,45,9.4 提高数字系统性能的方法,一、提高系统工作速度,直接修改电路;采用流水线技术;合理使用器件资源;修改软件配置。,4种方法,方法一:直接修改电路系统工作速度受电路节点之间延迟的制约,因此首先应仔细审查电路,修改冗余部分,缩短节点间延迟。,46,9.4 提高数字系统性能的方法,例9.22 8级8开关门电路设计要求:当控制开关SW1、SW2SW8闭合时,输出信号等于输入信号,其他情况为低电平。,假设每级门的延迟为9ns,经过8级与门,输入端到输出端的延迟为89
30、=40ns,系统速度为29MHz,47,9.4 提高数字系统性能的方法,改进,将电路稍做变形,则输入端到输出端的延迟变为49=20ns,系统速度提高到90MHz,48,9.4 提高数字系统性能的方法,方法二:采用流水线技术系统的关键路径(最大延迟)是从寄存器的输出到它馈给其它寄存器输入之间的最大延迟。如果某些通过复杂逻辑的延时路径比较长,就很难维持系统时钟的工作速度。为此可在组合逻辑之间插入触发器,使复杂的组合逻辑块形成流水线,降低寄存器间的传播延迟,从而维持高的系统时钟速度。FPGA中触发器数量比CPLD要多得多,在FPGA的设计中采用流水线技术可以大大提高系统的速度!,例9.23 非流水线
31、方式8位全加器由于低位产生进位需要花费时间,所以输入到加法器的高位数据与进位输入不是同时到达的,完成8位数据的加法运算受各位进位输出信号的制约。若各进位延迟的和超过系统时钟周期,则在一个时钟周期内无法完成一次加法运算,从而影响系统的工作速度。,49,9.3 复杂数字系统的设计,unpipeline.v,若采用EP1S10F780C6,则时钟周期为2.777ns,fmax=360.10MHz,50,9.3 复杂数字系统的设计,pipeline.v,改进:采用4级流水线方式实现,例9.24 4级流水线方式8位全加器,51,9.3 复杂数字系统的设计,续前页,52,9.3 复杂数字系统的设计,pip
32、eline.vwf的功能仿真结果,在第9个时钟周期到来时,得到第1对数的相加结果,53,9.3 复杂数字系统的设计,这里采用EP1S10F780C6,时钟周期为2.369ns,fmax=422.12MHz当采用非流水线方式时,时钟周期为2.777ns,fmax=360.10MHz,进行时序分析的结果:,54,9.4 提高数字系统性能的方法,在上例中将8位全加器采用9级锁存、4级两位全加器实现。由于对高位数据进行锁存,能保证高位数据与低位产生的进位输出信号同时出现在高位加法器的输入上,整个加法器只受两位全加器工作速度的限制,平均完成一次加法运算只需一个时钟周期的时间。采用流水线技术,在同一个时钟
33、周期内,4个两位全加器并行计算,完成多对数据的2位数据相加,节约了大量的时间,从而大大提高了系统的工作速度。,结论,55,9.3 复杂数字系统的设计,非流水线方式8位全加器与流水线方式8位全加器时序分析结果的比较(采用器件EP2C39):,流水线设计大大提高了系统的工作速度!,56,9.4 提高数字系统性能的方法,方法三:合理使用器件资源1)采用DSP块实现流水线乘法器来提高系统速度充分利用Stratix器件中的DSP块,实现大计算量应用所需的大数据吞吐量,可以实现FPGA中的如乘法器、乘法-加法器、乘法-累加器等功能。,57,9.4 提高数字系统性能的方法,pipemult.bdf,例9.2
34、9 比较88流水线乘法器采用DSP块和不采用DSP块时对系统性能的影响。,58,9.4 提高数字系统性能的方法,采用DSP块步骤:1 在图形文件中,右击“mult”符号,在弹出的快捷菜单中选择“Locate in Assignment Editor”命令,打开“Assignment Editor”;2 右击mult所对应的“Assignment Name”中的空白单元,在弹出的快捷菜单中选择“Edit Cell”命令,在下拉菜单中选择“DSP Block Balancing”;,59,9.4 提高数字系统性能的方法,3 在“Value”栏中右击空白单元,在弹出的快捷菜单中选择“Edit Cel
35、l”命令,在下拉菜单中选择“DSP blocks”;4 单击保存按钮,保存Assignment Editor设置;9 单击全编译按钮,进行全编译;6 执行“ToolsTiming Analyzer Tool”命令,进行时序分析。,采用EP1S10F780C6,时钟周期为3.986ns,fmax=278.86MHz,60,9.4 提高数字系统性能的方法,采用DSP块的编译报告,使用了1个DSP块,61,9.4 提高数字系统性能的方法,对于具有大量乘法器的设计,当对系统速度要求不是很高时,可以不采用DSP块,而是采用逻辑单元,来节约器件DSP资源的耗用。,在Assignment Editor中指定
36、DSP Block Balancing的值为“Logic Elements”;保存Assignment Editor设置;单击全编译按钮,进行全编译;执行“ToolsTiming Analyzer Tool”命令,进行时序分析。,步骤,而采用DSP块时,Tclk=3.986ns,fmax=278.86MHz,62,9.4 提高数字系统性能的方法,不采用DSP块的编译报告,而采用DSP块时,只使用了9个LE,这里没采用DSP块,63,9.3 复杂数字系统的设计,结论:采用DSP块大大提高了系统的工作速度!且占用LE很少;但当不采用DSP块时,系统工作频率降低,尽管节省了DSP块,但却占用了大量的
37、LE。,88流水线乘法器采用DSP块与不采用DSP块时时序分析结果的比较(均采用器件EP2C39):,64,9.4 提高数字系统性能的方法,例9.26 利用Mega_lpm中的lpm_rom宏模块设计44乘法器查询表方式,1.创建图形设计文件新建lpmrom_mult.bdf,调用libraries/megafunctions/storage下的lpm_rom存储器模块,参数设置如图所示。,2)采用存储器lpm_rom实现小型乘法器来提高系统速度把乘积放在存储器lpm_rom中,使用操作数作为地址访问存储器,可以快速得到乘法运算的结果。该乘法器的速度等于所使用的存储器的速度。但当操作数位数很多
38、时,查询表变得非常庞大。比如无符号44乘法器可用288位的查询表实现,而无符号88乘法器需要21616位的查询表实现。因此此技术特别适于小型乘法器。,65,9.4 提高数字系统性能的方法,注:查找表深度指ROM区有多少个存储单元;数据宽度指每个存储单元的宽度。,地址锁存控制,查找表文件,查找表深度,输出数据锁存控制,数据宽度,地址宽度,lpmrom_mult.bdf,66,9.4 提高数字系统性能的方法,2.创建存储器初始化文件利用存储器编辑器(Memory Editor)建立Altera存储器初始化格式(.mif)文件。,(1)新建一个存储器初始化格式(.mif)文件 执行“FileNew”
39、菜单命令,在New对话框中选择“Other Files”标签,选择“Memory Initialization File”,单击“OK”,在弹出的对话框中输入字数(296)和字长(8),单击“OK”,则打开存储器编辑窗口。(2)设置存储单元地址和字的显示格式 选择“ViewAddress RadixHexadecimal”菜单命令,使地址的显示格式为十六进制,选择“ViewMemory RadixUnsigned Decimal”菜单命令,使字的显示格式为无符号十进制。,67,9.4 提高数字系统性能的方法,(3)编辑存储器内容根据乘积关系编辑该文件,存储单元的地址高位表示被乘数,低位表示乘数
40、,该存储单元的内容即为相乘结果;选择要编辑的字,直接输入内容。,(4)保存文件 文件后缀为.mif。,地址,字,68,9.4 提高数字系统性能的方法,69,9.4 提高数字系统性能的方法,3.对设计文件进行编译编译源文件lpmrom_mult.bdf;即得到一个高速44乘法器。4.仿真,13=3,70,9.4 提高数字系统性能的方法,方法四:修改软件配置1.选择不同速度等级的器件(Assign/Device命令)2.流水线设置(即pipeline参数设置),例9.27利用Mega_lpm中的lpm_mult宏模块设计88乘法器,71,9.4 提高数字系统性能的方法,1.选择不同速度等级的器件(
41、Assign/Device命令),选用EP1S10F780C6,T=3.979ns,f=279.72MHz;选用EP1S10F780C9,T=3.247ns,f=307.98MHz,8x8mult1.bdf,非流水线方式,器件名最后的数字越小,速度等级越高,器件速度越快!,72,9.4 提高数字系统性能的方法,2.流水线设置将8x8mult1.bdf另存为8x8mult2.bdf;双击宏单元lpm_mult的参数修改框,弹出对话框,将clock设置为“used”,pipeline参数修改为3;,在8x8mult2.bdf中将系统时钟clk与LPM_MULT的clock端口相连;,73,9.4
42、提高数字系统性能的方法,8x8mult2.bdf,74,9.4 提高数字系统性能的方法,仍选用EP2C39 器件;将8x8mult2.bdf设为顶层实体;编译;进行时序分析。,结果为:Tclk=2.989ns,fmax=339.01MHz,采用流水线方式,速度比采用非流水线方式的8x8mult1.bdf得到进一步提升!,75,9.4 提高数字系统性能的方法,二、减小器件耗用资源,1.采用耗用硬件资源小的描述方法相同的逻辑功能可以用不同的方法描述,从而生成不同的电路,则耗用的器件资源也不同。例如加法器比数据选择器耗用硬件资源更大,则可以选用适当的描述方式,尽量节省加法器,就会降低硬件代价。,例9
43、.28设计电路,实现以下功能:当sel=0时,sum=a+b;当sel=1时,sum=c+d。a、b、c、d的宽度可变。,76,9.4 提高数字系统性能的方法,(1)采用先加后选 需要2个加法器,1个数据选择器,硬件代价较高,resource1.v的report,77,9.4 提高数字系统性能的方法,(2)采用先选后加需要2个数据选择器,1个加法器。可节省一个加法器,因此硬件代价降低。,resource2.v的report,比前一种方式节约了2个LE!,78,9.4 提高数字系统性能的方法,2.采用耗用硬件资源小的抽象级别尽管硬件描述语言可以从系统级、算法级、寄存器级、门级到开关级等不同的抽象
44、级别对所设计的系统加以描述,但具体采用何种抽象模型,将影响到设计是否能成功地被综合、系统的工作速度快慢以及耗用器件资源的多少。采用的描述级别越高,设计越容易;但对于特定的综合器而言,有可能无法将某些抽象级别高的描述转换为电路,或者即使转换成功,但耗用器件资源也会很大。,如果逻辑关系比较清晰,可以采用算法级抽象级别,即用逻辑表达式来描述系统,而不用if-else或case语句,这样将降低器件资源耗用!,79,9.4 提高数字系统性能的方法,3.人工优化代码的技巧虽然EDA软件在综合过程中会自动对Verilog HDL程序进行优化,但由于人工智能、综合算法以及计算机能力的制约,要达到最优的效果仍需
45、要进行代码的人工优化。(1)避免综合生成不必要的锁存器 最常见的使电路复杂化的原因之一便是,在使用条件语句时没有列出所有的条件分支。这样在逻辑综合后将会出现不必要的锁存器。从而使电路变得更复杂,引起不必要的开销;而且也会降低系统的速度。因此if和else应成对出现,而每个case语句也应该有default项(除非分支语句能包括所有可能)。,80,9.4 提高数字系统性能的方法,(2)if语句与case语句的合理使用If语句和case语句这两种表述方式所使用的资源完全不同。case语句各分支之间的关系是平行关系,在大多数综合器中都被综合成多路选择器结构,所以综合效率高,硬件结构简单,但各选项间没
46、有优先关系。If语句则是被综合成多路选择器链结构,它是带优先级的选择,越靠上层的条件优先级越高,这些条件表达式中的信号在综合时也越靠近输出端。建立优先级结构会消耗大量的组合逻辑,因此它的综合效率比case语句低。因此在能够使用case语句的地方尽量使用case语句来代替If语句。,81,9.4 提高数字系统性能的方法,(3)用移位操作代替乘法操作在一个变量和一个常数作乘法操作时,应尽量用移位操作和加减操作代替乘法操作。,module mult(clk,in1,out);input clk;input3:0 in1;output out;reg9:0 out;always(posedge clk
47、)begin out=in1*99;end endmodule,module shift(clk,in1,out);input clk;input3:0 in1;output out;reg9:0 out;always(posedge clk)begin out=in16-in12-in1;end endmodule,但在实现两个变量的乘法操作时,如果用移位操作和加减操作代替乘法操作,并不能减少硬件逻辑资源的耗用,反而使程序复杂化了。,82,9.4 提高数字系统性能的方法,(4)硬件资源的共享 括号的运用适当地利用圆括号对运算进行重新组合,可以实现资源的共享。如下面两段代码,后一段代码输入信号
48、in1和in2即可实现加法器的共享。,module non_bracket(in0,in1,in2,in3,out1,out2);output out1,out2;input in0,in1,in2,in3;assign out1=in0+in1+in2;assign out2=in1+in2+in3;endmodule,module bracket(in0,in1,in2,in3,out1,out2);output out1,out2;input in0,in1,in2,in3;assign out1=in0+(in1+in2);assign out2=(in1+in2)+in3;endmo
49、dule,non_bracket.v要使用4个1位加法器,bracket.v运用圆括号后,只需3个1位加法器。,83,9.4 提高数字系统性能的方法,相同部分外置在使用条件语句的时候,如if.else语句,应把if与else里相同的部分写到条件语句外面,以实现资源的共享。,module example1(clk,a,b,c,d,out);input clk,d;input1:0 a,b,c;output3:0 out;reg3:0 out;always(posedge clk)begin if(d=1)out=c+a+b;else out=a+b;end endmodule,module example2(clk,a,b,c,d,out);input clk,d;input1:0 a,b,c;output3:0 out;reg3:0 out;reg2:0 temp;always(posedge clk)begin temp=a+b;if(d=1)out=c+temp;else out=temp;end endmodule,
链接地址:https://www.31ppt.com/p-6577018.html