您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > VHDL硬件描述语言与数字逻辑电路设计第10章报告
1第10章数字系统的实际设计技巧10.1数字系统优化的基本方法10.2数字系统设计中的工程实际问题2在数字系统设计初期,人们根据系统功能总会画出一些满足系统要求的电路框图,在这些电路框图中往往存在一些不合理或冗余的部分需要进行进一步优化,以提高系统的整体性能。这种冗余的部分在生成门级电路以后是很难去除的。因此,必须在电路框图阶段进行优化。10.1数字系统优化的基本方法310.1.1相同电路的处理在系统设计的前期,设计人员不一定预先知道有多处存在着相同的运算电路,只有在画出电路框图后才会发现它们的存在。例如在图10-1(a)中,2个状态都需进行B+1运算,要正确实现其功能需要3个B+1的运算电路。但是,进行优化以后实际上只要用1个B+1的运算电路就可以实现正确的逻辑功能,如图10-1(b)所示。4图10-1多个相同运算电路优化实例(a)有多个相同运算的电路;(b)优化后采用一个运算电路5如图10-1(a)所示,未优化的VHDL语言程序清单如下:ARCHITECTURErtloftestISSIGNALaReg,bReg,cReg:INTEGERRANGE0TO1023;BEGINPROCESS(clk)ISBEGINIF(clk'EVENTANDclk='1')THENCASEstateRegIS…6WHENSO=aReg=bReg+1;bReg=bReg+1;cReg=aReg;stateReg=S1;WHENS1=aReg=aReg;bReg=cReg;cReg=bReg+1;stateReg=S0;7ENDCASE;ENDIF;ENDPROCESS;ENDARCHITECTURErtl如图10-1(b)所示,优化后的VHDL语言程序清单如下:ARCHITECTURErtlOFtestISSIGNALnode:INTEGERRANGE0TO1023;BEGINnode=bReg+1;……8PROCESS(clk)ISBEGINIF(clk'EVENTANDclk='1')THENCASEstateRegISWHENS0=aReg=node;bReg=node;cReg=aReg;stateReg=S1;WHENaReg=aReg;bReg=cReg;9cReg=node;stateReg=S0;ENDCASE;ENDIF;ENDPROCESS;ENDARCHITECTURErtl;1010.1.2运算顺序的改变在设计电路时适当地改变运算顺序就可以达到优化电路的目的。如图10-2(a)所示,为了进行node(b×a)+(b×c)的运算,按常规的运算顺序画出的数据流图如图10-2(a)中的左图所示。为实现该运算,需要2个乘法器和1个加法器。现在用因式分解的方法来改变原式的运算顺序,即先作加法后再进行乘法运算,即nodeb×(a+c),其数据流图如图10-2(a)中的右图所示。修改运算顺序后,实现该运算只需1个乘法器和1个加法器。显然,这样就减少了电路的规模。11图10-2(b)示出了另一种改变计算顺序的方法。原式node(((a+b)+c)+d)经改变后变为node((a+b)+(c+d)),这样做可使运算电路的级数减少,(a+b)和(c+d)可以进行并行运算,从而提高了电路的运算速度。在用VHDL语言编程时,可以在源程序中加括号来改变运算顺序,也可以将中间运算结果视为节点来控制运算顺序。这样做可使源程序在编译或综合时就能达到优化电路的目的。12图10-2改变运算顺序优化电路(a)缩小了电路规模;(b)提高了运算速度1310.1.3常数运算的运用在前面已经提到,计算机工作时状态有Fetch、Decode等,在形成门级电路时通常将这些状态名赋以常数值,如Fetch赋以0,Decode赋以1等。在运算式中使用布尔代数性质对常数进行操作可简化运算电路。例如:xAND'1'='x'xAND'0'='0'xOR'1'='1'xOR'0'='x'这种情况下,EDA软件在编译时都能进行自动化处理,其原因也就在于此。1410.1.4相同运算电路的使用在设计电路时,即使参与运算的数据不同,只要不是进行同时运算,两个不同的运算就可以由一个运算电路来实现。例如,图10-3(a)是一个未经优化的数据流图,图中需要使用2个乘法电路。考虑到A×B在S0状态下进行运算,C×D在S1状态下进行运算,这2个乘法器运算操作是在不同时间内进行的,因此该电路可以同用一个乘法器,优化后的数据流图如图10-3(b)所示。在图10-3(b)中利用S0和S1进行选择,在S0时乘法器输入为A和B,在S1时乘法器输入为C和D;其输出也同样由S0和S1进行选择,送到不同的选择器,以实现正确的算术运算。在进行这样的优化以后,该电路只要一个乘法器即可。15图10-3相同的运算电路实例(a)优化前的数据流图;(b)优化后的数据流图16如图10-3(a)所示,优化前的程序清单如下:PROCESS(clk)ISBEGINIF(clk'EVENTANDclk='1')THENCASEstateRegISWHENS0=aReg=aReg*bReg;bReg=bReg;cReg=cReg;stateReg=S1;WHENS1=17aReg=aReg;bReg=cReg*dReg;cReg=cReg;stateReg=S0;ENDCASE;ENDIF;ENDPROCESS;如图10-3(b)所示,优化后的VHDL语言程序清单如下:SIGNALmultin1:INTEGERRANGE0TO1023;SIGNALmultin2:INTEGERRANGE0TO1023;18SIGNALmultiout:INTEGERRANGE0TO1023;multin1=aRegWHENstateReg=S0ELSEcReg;multin2=bRegWHENstateReg=S0ELSEdReg;multout=multin1*multin2;PROCESS(clk)ISBEGINIF(clk'EVENTANDclk='1')THENCASEstateRegISWHENS0=…19aReg=multout;bReg=bReg;cReg=cReg;dReg=dReg;stateReg=S1;WHENS1=aReg=aReg;bReg=multout;cReg=cReg;dReg=dReg;20stateReg=S0;ENDCASE;ENDIF;ENDPROCESS;上面讨论的是多个运算相同的操作采用同一个运算电路的情况。其实,有时候不同的运算操作也可以用一个运算电路来实现。图10-4(a)中有一个加法器和一个减法器,如果减法操作用A+(-1×B)来代替,那么就可以将减法器变为加法器,不过操作数B在加法前应先乘以-1。当然,这样做的前提是:如图10-4(b)所示,增加的选择器和乘以-1所需要的电路其规模应比加法器小才合理。21图10-4不同运算操作用同一个运算电路的实例(a)优化前的数据流图;(b)优化后的数据流图22如图10-4(a)所示,优化前的VHDL语言程序清单如下:SIGNALaReg:INTEGERRANGE-512TO511;SIGNALbReg:INTEGERRANGE-512TO511;PROCESS(clk)ISBEGINIF(clk'EVENTANDclk='1')THENCASEstateRegISWHENS0=…23aReg=aReg+bReg;bReg=bReg;stateReg=S1;WHENaReg=aReg;bReg=aReg-bReg;stateReg=S0;ENDCASE;ENDIF;ENDPROCESS;24如图10-4(b)所示,优化后的VHDL程序清单如下:SIGNALaddin1:INTEGERRANGE-512TO511;SIGNALaddin2:INTEGERRANGE-512TO511;SIGNALaddin3:INTEGERRANGE-512TO511;addin1=aReg;addin2=bRegWHENstateReg=S0ELSE-(bReg;)addout=addin1+addin2;PROCESS(clk)ISBEGIN25IF(clk‘EVENTANDclk=’1‘)THENCASEstateRegISWHENS0=aReg=addout;bReg=bReg;stateReg=S1;WHENS1=aReg=aReg;bReg=addout;26stateReg=S0;ENDCASE;ENDIF;ENDPROCESS;2710.1.5优化的必要性及其工程实际意义10.1.1~10.1.4节中所述的4种优化方法可以剔除设计中的冗余电路,虽然其方法简单,但在实际设计中却有较好的实用价值。当前随着半导体及集成电路技术的发展,几十万至几百万门的单片电路已非常普遍,那么设计人员是否还有必要像以前那样关注电路的冗余问题呢?答案是肯定的。首先,尽管ASIC和FPGA芯片的价格不只由门的数目来确定,但是门数多了必定会增加芯片的价格。另外,冗余的电路会使电源消耗增加,电路工作速度降低,同样也会增加布线困难。其次,无论使用什么样的EDA软件工具,总希望综合得到性能良好的电路。不同的EDA软件综合所得到的电路会有一些差别。28但是,只要使用上述方法进行优化,去除整体部分的冗余电路,最后得到的优化结果就不会相差太远。最后,根据实践表明,电路规模愈大,其存在的冗余也会愈大。例如,在对数据进行处理时,要对几十至几百行的C语言程序进行硬化,这对于程序来说可能是小规模的,但是对于硬件来说其规模就不小了。假设该程序有几十个数组,含有100个32位的整数变量。这些变量用硬件寄存器来实现,那么需要的门数量为32位 × 100 × 6门/位 = 19200门这里,每位寄存器用6个门进行计算。29如果每个寄存器都需要配备选择器,现假设所有选择器都是2输入选择器,每位选择器用3个门进行计算:32位 × 100 × 3门/位 = 9600门则总数需要近30000个门电路,如果再加上加法和乘法电路,则其总数就会接近10万门。在对位数长的数据进行运算时,去除少量的冗余就会节约大量的门电路。另外,在设计时用多个运算电路进行并发运算是允许的,但是如果其个数达到了几十个,那么就应该考虑冗余问题。因为此时存在的冗余可能会对电路性能产生不利影响。30剔除冗余是设计人员为提高电路性能所必需要做的事情,一般应尽可能在电路或系统的框图设计阶段去除冗余,这样可以达到事半功倍的效果,而门级的电路化简或优化可以留给EDA软件去实现。3110.2.1提高系统工作速度的方法本节介绍如何在RTL级别上改进设计,以提高系统工作速度。10.2数字系统设计中的工程实际问题32图10-5门电路之间的延时时间331.影响系统工作速度的主要因素所谓系统的工作速度,是指系统以何种时钟频率工作。系统的处理时间可以表示为处理时间 = 时钟周期 × 处理所需的时钟周期数显然,时钟周期愈短(时钟频率愈高),处理时间也会愈短。当然,处理时间还和处理所需的时钟周期数有关。减少处理的时钟周期数,同样也可以减少处理时间,这里仅从如何减小时钟周期以提高处理速度方面来进行考虑。341)临界路径长度在数字系统中,临界路径长度(CriticalPath)决定了系统的工作速度。所谓临界路径,是指从系统输入到系统输出的各条路径中信号通过时间最长的那一条路径。该路径长度将决定系统的最高工作速度。某一系统的VHDL语言程序描述如例10-1所示。35【例10-1】系统临界路径确定实例。SIGNALaReg:INTEGERRANGE0TO(2**31-1);SIGNALbReg:INTEGERRANGE0TO(2**31-1);SIGNALcReg:INTEGERRANGE0TO(2**31-1);TYPESTATENAMEIS(S0、S1
本文标题:VHDL硬件描述语言与数字逻辑电路设计第10章报告
链接地址:https://www.777doc.com/doc-3132408 .html