数字电路EDA综合设计.ppt_第1页
数字电路EDA综合设计.ppt_第2页
数字电路EDA综合设计.ppt_第3页
数字电路EDA综合设计.ppt_第4页
数字电路EDA综合设计.ppt_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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语句进行分支操作!,4,9.1常用组合电路模块的设计,modulegate1(F,A,B,C,D);outputF;inputA,B,C,D;nand(F1,A,B);and(F2,B,C,D);or(F,F1,F2);endmodule,常用有3种描述方法:,(1)调用门原语必须明确电路内部逻辑关系,(2)用assign连续赋值语句描述写出逻辑表达式,modulegate2(F,A,B,C,D);outputF;inputA,B,C,D;assignF=(Aendmodule,5,9.1常用组合电路模块的设计,(3)用过程赋值语句描述在always块内写出逻辑表达式,modulegate3(F,A,B,C,D);outputF;inputA,B,C,D;always(AorBorCorD)beginF=(Aendendmodule,6,9.1常用组合电路模块的设计,二、译码器与编码器1.译码器decoder译码器:将输入的二进制代码翻译成相应的输出信号,以表示编码时所赋予原意的电路。多条件译码电路大多用case语句实现只需知道真值表。,例9.23-8译码器对3位输入信号进行译码,当输入信号表示数字几时,8位输出线的相应位为0,其余位均为1。,7,9.1常用组合电路模块的设计,moduledecoder_38(out,in);output7:0out;input2:0in;reg7:0out;always(in)begincase(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;endcaseendendmodule,8,9.1常用组合电路模块的设计,2.编码器encoder编码器:将一个输入信号编码成一组二进制代码输出。优先编码器:如有两个或两个以上的输入有效时,“优先”按其中输入编号最大的输入进行编码,输出为对应输入编号或其反码。利用if_else语句的分支具有先后顺序的特点,用if_else语句可方便地实现优先编码器。,例9.38-3优先编码器输入为a、b、c、d、e、f、g、h,高电平有效,h的优先级最高。当输入中某些位为1时,只对优先级最高的那位编码,使输出等于其对应的编号(ah对应编号为07)。,9,9.1常用组合电路模块的设计,moduleencoder8_3(non_on,outcode,a,b,c,d,e,f,g,h);outputnon_on;output2:0outcode;inputa,b,c,d,e,f,g,h;reg3:0outtemp;assignnon_on,outcode=outtemp;always(aorborcordoreorforgorh)beginif(h)outtemp=4b0111;elseif(g)outtemp=4b0110;elseif(f)outtemp=4b0101;elseif(e)outtemp=4b0100;elseif(d)outtemp=4b0011;elseif(c)outtemp=4b0010;elseif(b)outtemp=4b0001;elseif(a)outtemp=4b0000;elseouttemp=4b1000;endendmodule,为1时表示没有一个输入信号有效,若ag均为0,则none_on=1,outcode=000,10,9.1常用组合电路模块的设计,三、数据选择器(MUX)逻辑功能根据控制信号的取值,从多路平行输入数据中,选择一路作为输出信号。又叫多路开关(Multiplexer),或多路器。常用有3种方法来实现:(1)用assign语句设计2选1MUX使用条件运算符,例9.4用assign语句设计的2选1MUXmodulemux2_1(out,a,b,sel);outputout;inputa,b,sel;assignout=sel?a:b;/条件运算符endmodule,11,9.1常用组合电路模块的设计,(2)用if_else语句设计4选1MUX当控制信号取不同的值时,输出信号与不同的输入信号值相对应例9.9用if_else语句描述的4选1MUX,modulemux4_1(out,in0,in1,in2,in3,sel);output7:0out;input7:0in0,in1,in2,in3;input1:0sel;reg7:0out;always(in0orin1orin2orin3orsel)beginif(sel=2b00)out=in0;elseif(sel=2b01)out=in1;elseif(sel=2b10)out=in2;elseout=in3;endendmodule,12,9.1常用组合电路模块的设计,(3)用case语句设计4选1MUX适于多分支情况,比用if_else语句更简洁!例9.6用case语句描述的4选1MUX,modulemux4_1(out,in0,in1,in2,in3,sel);output7:0out;input7:0in0,in1,in2,in3;input1:0sel;reg7:0out;always(in0orin1orin2orin3orsel)begincase(sel)2b00:out=in0;2b01:out=in1;2b10:out=in2;default:out=in3;endcaseendendmodule,13,9.1常用组合电路模块的设计,四、奇偶校验产生器逻辑功能:对并行输入的8位数据进行奇偶校验,并产生奇校验位odd_bit和偶校验位even_bit。用assign语句实现对输入按位异或,产生奇校验位odd_bit,若为“1”,表示输入数据中有奇数个1;若偶校验位even_bit为“1”,表示输入数据中有偶数个1。,例9.7奇偶校验产生器moduleparity(even_bit,odd_bit,input_bus);outputeven_bit,odd_bit;input7:0input_bus;assignodd_bit=input_bus;/对输入按位异或,产生奇校验位assigneven_bit=odd_bit;/产生偶校验位endmodule,14,9.2常用时序电路模块的设计,一、D触发器二、数据锁存器三、数据寄存器四、移位寄存器五、任意模加法/减法计数器六、ROM/RAM模块,内容概要,15,9.2常用时序电路模块的设计,时序逻辑电路:任一时刻的输出信号不仅取决于该时刻的输入信号,而且还取决于电路原来的状态,即还与以前的输入有关。时序逻辑通常用always块语句实现!并常用if_else语句进行分支操作。,(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触发器moduleDFF(Q,D,CLK);outputQ;inputD,CLK;regQ;always(posedgeCLK)beginQ=D;endendmodule,17,9.2常用时序电路模块的设计,(2)带异步清0、异步置1端的D触发器(有多个沿触发信号)例9.9带异步清0、异步置1端的D触发器,moduleDFF1(q,qn,d,clk,set,reset);outputq,qn;inputd,clk,set,reset;regq,qn;always(posedgeclkornegedgesetornegedgereset)beginif(!reset)beginq=0;/异步清零,低电平有效qn=1;endelseif(!set)beginq=1;/异步置1,低电平有效qn=0;endelsebeginq=d;qn=d;endendendmodule,reset、set为脉冲信号,18,9.2常用时序电路模块的设计,(3)带同步清0、同步置1端的D触发器(只有一个沿触发信号)例9.10带同步清0、同步置1端的D触发器,moduleDFF2(q,qn,d,clk,set,reset);outputq,qn;inputd,clk,set,reset;regq,qn;always(posedgeclk)beginif(reset)beginq=0;/同步清零,高电平有效qn=1;endelseif(set)beginq=1;/同步置1,高电平有效qn=0;endelsebeginq=d;qn=d;endendendmodule,reset、set为电平信号,19,9.2常用时序电路模块的设计,二、数据锁存器数据锁存器由多位触发器组成的用于保存一组二进制代码的寄存单元。功能:当输入控制信号(如时钟)为高电平时,门是打开的,输出信号等于输入信号;当输入控制信号为低电平时,门是关闭的,输出端保持刚才输入的数据,即为锁存状态,而不管此时输入信号是否变化。通常由电平信号来控制,属于电平敏感型,适于数据有效滞后于控制信号有效的场合。实现方法:用assign语句使用条件运算符,简便!用always块语句实现,20,9.2常用时序电路模块的设计,例9.11电平敏感型的1位数据锁存器modulelatch_1(q,d,clk);outputq;inputd,clk;assignq=clk?d:q;/*当时钟信号为高电平时,将输入端信号打入锁存器;当时钟信号为低电平时,锁存原来已打入的数据。endmodule,数据有效滞后于控制信号有效,当clk为低电平时,锁存数据。,21,9.2常用时序电路模块的设计,例9.12带置位和复位端的电平敏感型的1位数据锁存器modulelatch_2(q,d,clk,set,reset);outputq;inputd,clk,set,reset;assignq=reset?0:(set?1:(clk?d:q);endmodule,复位,置位,打入数据,锁存数据,22,9.2常用时序电路模块的设计,例9.13用always块语句描述的电平敏感型8位数据锁存器modulelatch_8bit(qout,data,clk);output7:0qout;input7:0data;inputclk;reg7:0qout;always(clkordata)/电平敏感beginif(clk)qout=data;endendmodule,23,9.2常用时序电路模块的设计,三、数据寄存器数据寄存器当时钟信号的上升沿或下降沿到来时,将输入端数据打入寄存器,即此时输出信号等于输入信号;在clk的其它时刻,输出端保持刚才输入的数据,即为寄存状态,而不管此时输入信号是否变化。数据锁存器和数据寄存器的区别:数据锁存器一般由电平信号来控制,属于电平敏感型,适于数据有效滞后于控制信号有效的场合。数据寄存器通常由同步时钟信号来控制,属于脉冲敏感型,适于数据有效提前于控制信号有效、并要求同步操作的场合。,24,9.2常用时序电路模块的设计,例9.14用always块语句描述的8位数据寄存器modulereg_8bit(qout,data,clk,clr);output7:0qout;input7:0data;inputclk,clr;reg7:0qout;always(posedgeclkorposedgeclr)/沿触发beginif(clr)qout=0;/异步清零elseqout=data;endendmodule,25,9.2常用时序电路模块的设计,在时钟信号的上升沿,将输入端数据打入寄存器。,在clk的其它时刻,寄存数据。,数据有效提前于控制信号有效,26,9.2常用时序电路模块的设计,四、移位寄存器信号串行输入,8位并行输出,每个时钟周期内输出信号左移一位,同时将串行输入信号补充到输出信号的最低位。用always块语句实现。,例9.19用always块语句描述的8位移位寄存器moduleshifter_8bit(dout,din,clk,clr);output7:0dout;inputdin,clk,clr;reg7:0dout;always(posedgeclk)/沿触发beginif(clr)dout=0;/同步清零,高电平有效elsebegindout=doutSettings”命令,打开“Settings”对话框,在“Category”栏中单击“UserLibraries”,打开“UserLibraries”标签页,将子模块所在目录添加到“Libraries”中(见下页);3将顶层模块文件设为Top-LevelEntity;4对顶层模块文件进行全编译;9进行时序仿真。,在综合acc_top_lib.v时,软件会自动调用add8.*和reg8.*等文件!,42,9.3复杂数字系统的设计,(1),(2),(3),(4)在“UserLibraries”标签页中单击“OK”,43,9.3复杂数字系统的设计,acc_top_lib.vwf,仿真结果同前两种方式!,44,9.4提高数字系统性能的方法,一、提高系统工作速度二、减小器件耗用资源,内容概要,45,9.4提高数字系统性能的方法,一、提高系统工作速度,直接修改电路;采用流水线技术;合理使用器件资源;修改软件配置。,4种方法,方法一:直接修改电路系统工作速度受电路节点之间延迟的制约,因此首先应仔细审查电路,修改冗余部分,缩短节点间延迟。,46,9.4提高数字系统性能的方法,例9.228级8开关门电路设计要求:当控制开关SW1、SW2SW8闭合时,输出信号等于输入信号,其他情况为低电平。,假设每级门的延迟为9ns,经过8级与门,输入端到输出端的延迟为89=40ns,系统速度为29MHz,47,9.4提高数字系统性能的方法,改进,将电路稍做变形,则输入端到输出端的延迟变为49=20ns,系统速度提高到90MHz,48,9.4提高数字系统性能的方法,方法二:采用流水线技术系统的关键路径(最大延迟)是从寄存器的输出到它馈给其它寄存器输入之间的最大延迟。如果某些通过复杂逻辑的延时路径比较长,就很难维持系统时钟的工作速度。为此可在组合逻辑之间插入触发器,使复杂的组合逻辑块形成流水线,降低寄存器间的传播延迟,从而维持高的系统时钟速度。FPGA中触发器数量比CPLD要多得多,在FPGA的设计中采用流水线技术可以大大提高系统的速度!,例9.23非流水线方式8位全加器由于低位产生进位需要花费时间,所以输入到加法器的高位数据与进位输入不是同时到达的,完成8位数据的加法运算受各位进位输出信号的制约。若各进位延迟的和超过系统时钟周期,则在一个时钟周期内无法完成一次加法运算,从而影响系统的工作速度。,49,9.3复杂数字系统的设计,unpipeline.v,若采用EP1S10F780C6,则时钟周期为2.777ns,fmax=360.10MHz,50,9.3复杂数字系统的设计,pipeline.v,改进:采用4级流水线方式实现,例9.244级流水线方式8位全加器,51,9.3复杂数字系统的设计,续前页,52,9.3复杂数字系统的设计,pipeline.vwf的功能仿真结果,在第9个时钟周期到来时,得到第1对数的相加结果,53,9.3复杂数字系统的设计,这里采用EP1S10F780C6,时钟周期为2.369ns,fmax=422.12MHz当采用非流水线方式时,时钟周期为2.777ns,fmax=360.10MHz,进行时序分析的结果:,54,9.4提高数字系统性能的方法,在上例中将8位全加器采用9级锁存、4级两位全加器实现。由于对高位数据进行锁存,能保证高位数据与低位产生的进位输出信号同时出现在高位加法器的输入上,整个加法器只受两位全加器工作速度的限制,平均完成一次加法运算只需一个时钟周期的时间。采用流水线技术,在同一个时钟周期内,4个两位全加器并行计算,完成多对数据的2位数据相加,节约了大量的时间,从而大大提高了系统的工作速度。,结论,55,9.3复杂数字系统的设计,非流水线方式8位全加器与流水线方式8位全加器时序分析结果的比较(采用器件EP2C39):,流水线设计大大提高了系统的工作速度!,56,9.4提高数字系统性能的方法,方法三:合理使用器件资源1)采用DSP块实现流水线乘法器来提高系统速度充分利用Stratix器件中的DSP块,实现大计算量应用所需的大数据吞吐量,可以实现FPGA中的如乘法器、乘法-加法器、乘法-累加器等功能。,57,9.4提高数字系统性能的方法,pipemult.bdf,例9.29比较88流水线乘法器采用DSP块和不采用DSP块时对系统性能的影响。,58,9.4提高数字系统性能的方法,采用DSP块步骤:1在图形文件中,右击“mult”符号,在弹出的快捷菜单中选择“LocateinAssignmentEditor”命令,打开“AssignmentEditor”;2右击mult所对应的“AssignmentName”中的空白单元,在弹出的快捷菜单中选择“EditCell”命令,在下拉菜单中选择“DSPBlockBalancing”;,59,9.4提高数字系统性能的方法,3在“Value”栏中右击空白单元,在弹出的快捷菜单中选择“EditCell”命令,在下拉菜单中选择“DSPblocks”;4单击保存按钮,保存AssignmentEditor设置;9单击全编译按钮,进行全编译;6执行“ToolsTimingAnalyzerTool”命令,进行时序分析。,采用EP1S10F780C6,时钟周期为3.986ns,fmax=278.86MHz,60,9.4提高数字系统性能的方法,采用DSP块的编译报告,使用了1个DSP块,61,9.4提高数字系统性能的方法,对于具有大量乘法器的设计,当对系统速度要求不是很高时,可以不采用DSP块,而是采用逻辑单元,来节约器件DSP资源的耗用。,在AssignmentEditor中指定DSPBlockBalancing的值为“LogicElements”;保存AssignmentEditor设置;单击全编译按钮,进行全编译;执行“ToolsTimingAnalyzerTool”命令,进行时序分析。,步骤,而采用DSP块时,Tclk=3.986ns,fmax=278.86MHz,62,9.4提高数字系统性能的方法,不采用DSP块的编译报告,而采用DSP块时,只使用了9个LE,这里没采用DSP块,63,9.3复杂数字系统的设计,结论:采用DSP块大大提高了系统的工作速度!且占用LE很少;但当不采用DSP块时,系统工作频率降低,尽管节省了DSP块,但却占用了大量的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中,使用操作数作为地址访问存储器,可以快速得到乘法运算的结果。该乘法器的速度等于所使用的存储器的速度。但当操作数位数很多时,查询表变得非常庞大。比如无符号44乘法器可用288位的查询表实现,而无符号88乘法器需要21616位的查询表实现。因此此技术特别适于小型乘法器。,65,9.4提高数字系统性能的方法,注:查找表深度指ROM区有多少个存储单元;数据宽度指每个存储单元的宽度。,地址锁存控制,查找表文件,查找表深度,输出数据锁存控制,数据宽度,地址宽度,lpmrom_mult.bdf,66,9.4提高数字系统性能的方法,2.创建存储器初始化文件利用存储器编辑器(MemoryEditor)建立Altera存储器初始化格式(.mif)文件。,(1)新建一个存储器初始化格式(.mif)文件执行“FileNew”菜单命令,在New对话框中选择“OtherFiles”标签,选择“MemoryInitializationFile”,单击“OK”,在弹出的对话框中输入字数(296)和字长(8),单击“OK”,则打开存储器编辑窗口。(2)设置存储单元地址和字的显示格式选择“ViewAddressRadixHexadecimal”菜单命令,使地址的显示格式为十六进制,选择“ViewMemoryRadixUnsignedDecimal”菜单命令,使字的显示格式为无符号十进制。,67,9.4提高数字系统性能的方法,(3)编辑存储器内容根据乘积关系编辑该文件,存储单元的地址高位表示被乘数,低位表示乘数,该存储单元的内容即为相乘结果;选择要编辑的字,直接输入内容。,(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.选择不同速度等级的器件(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提高数字系统性能的方法,8x8mult2.bdf,74,9.4提高数字系统性能的方法,仍选用EP2C39器件;将8x8mult2.bdf设为顶层实体;编译;进行时序分析。,结果为:Tclk=2.989ns,fmax=339.01MHz,采用流水线方式,速度比采用非流水线方式的8x8mult1.bdf得到进一步提升!,75,9.4提高数字系统性能的方法,二、减小器件耗用资源,1.采用耗用硬件资源小的描述方法相同的逻辑功能可以用不同的方法描述,从而生成不同的电路,则耗用的器件资源也不同。例如加法器比数据选择器耗用硬件资源更大,则可以选用适当的描述方式,尽量节省加法器,就会降低硬件代价。,例9.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.采用耗用硬件资源小的抽象级别尽管硬件描述语言可以从系统级、算法级、寄存器级、门级到开关级等不同的抽象级别对所设计的系统加以描述,但具体采用何种抽象模型,将影响到设计是否能成功地被综合、系统的工作速度快慢以及耗用器件资源的多少。采用的描述级别越高,设计越容易;但对于特定的综合器而言,有可能无法将某些抽象级别高的描述转换为电路,或者即使转换成功,但耗用器件资源也会很大。,如果逻辑关系比较清晰,可以采用算法级抽象级别,即用逻辑表达式来描述系统,而不用if-else或case语句,这样将降低器件资源耗用!,79,9.4提高数字系统性能的方法,3.人工优化代码的技巧虽然EDA软件在综合过程中会自动对VerilogHDL程序进行优化,但由于人工智能、综合算法以及计算机能力的制约,要达到最优的效果仍需要进行代码的人工优化。(1)避免综合生成不必要的锁存器最常见的使电路复杂化的原因之一便是,在使用条件语句时没有列出所有的条件分支。这样在逻辑综合后将会出现不必要的锁存器。从而使电路变得更复杂,引起不必要的开销;而且也会降低系统的速度。因此if和else应成对出现,而每个case语句也应该有default项(除非分支语句能包括所有可能)。,80,9.4提高数字系统性能的方法,(2)if语句与case语句的合理使用If语句和case语句这两种表述方式所使用的资源完全不同。case语句各分支之间的关系是平行关系,在大多数综合器中都被综合成多路选择器结构,所以综合效率高,硬件结构简单,但各选项间没有优先关系。If语句则是被综合成多路选择器链结构,它是带优先级的选择,越靠上层的条件优先级越高,这些条件表达式中的信号在综合时也越靠近输出端。建立优先级结构会消耗大量的组合逻辑,因此它的综合效率比ca

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论