本帖最后由 look_w 于 2017-9-22 21:36 编辑
流水线技术在高速数字电路设计中的应用
摘要:流水线技术是设计高速数字电路的一种最佳选择之一,对其实现原理作了较形象的阐述。针对加法器在DSP中的重要作用,对流水线加法器中流水线技术的应用作了较深入的说明。同时,对流水线技术中引入寄存器事项也作了较全面的阐述。
1 前言
数字信号处理技术(DSP)在许多领域都得到广泛的应用,在数字电路设计时,设计者都希望设计出具有理想速度的电路系统。目前,并行技术、流水线技术等都是很好的备选方案。对于组合逻辑电路占主要成分的电路中,流水线技术是首先考虑的技术。
现在,现场可编程门阵列FPGA的集成度已达到很高的程度,且设计灵活,可在实验室里进行,并具有丰富的寄存器,适合设计人员使用流水线技术来进行设计以提高数字电路的整体运行速度。
2 流水线技术的作用原理
流水线技术就是把在一个时钟周期内执行的操作分成几步较小的操作,并在多个较高速的时钟内完成。如图1、2所示,对图1中的两个寄存器间的数据通路,在图2中将其分成了3级,并在其间插入了两个寄存器,这就是流水线技术的使用。
图1常规的数据通路
图2采用流水线技术数据通路 对图1中的数据通路,设tpd≈x,则该电路(不考虑寄存器的影响)从输入到输出的最高时钟频率就为1/x。而在图z中,假设在理想情况下所分成的3级,每级的tpd≈x/3,则该电路从输入到输出的最高频率可提高到原来的3倍,采用流水线技术有效地提高了系统的时钟频率,因而在多个时钟周期连续工作情况下,就提高了整个系统的数据处理量。当然,这不包括电路中所加入的寄存器时延,因此每级的实际延迟应比x/3稍大。但在多个时钟周期连续工作情况下,可忽略不计,所以流水线技术能提高系统的数据流量。
3 流水线技术的设计应用
加法运算是最基本的数字信号处理(DSP)运算,减法、乘法、除法或FFT运算都可分解为加法运算。因此进行加法运算的加法器就成为实现DSP的最基本器件,因而研究如何提高其运行速度很有必要。
流水线技术在提高系统整体运行速率方面绩效显著,因而采用流水线技术的流水线加法器就成为继串联加法器、并行加法器之后在选择加法器时的首选。当然并行加法器也可使用流水线技术(即并行流水线加法器)来进一步提高加法器的运算速度。
下面就以一个4位流水线加法器的实现为例来说明流水线技术的应用,并以此说明流水线技术在高位加法器的应用。
3.1应用示例
在没有采用流水线技术时由二位加法器串联组成的4位加法器原理图,如图3所示(这是在没有加入寄存器情况下的二进制并行进位4位加法器构成原理图)。采用流水线技术时由二位加法器组成的4位加法器原理图如图4所示。图4是在图3中加入了一级流水线,将低位和(运算结果)用一个2位寄存器暂存,为了保证低位的进位与高4位同步进入高位加法器,因而将高4位用一个4位的寄存器暂存。这就实现了一个4位并行流水线加法器。对于8位并行流水线加法器同样可在低位加法器输出时采用寄存器暂存,并将高位输入加数用寄存器暂存。如果8位加法器是由4位加法器所构成,则至少可加入两级流水线,而更高位的流水线加法器的实现与这类同,并且其他数字电路在实现流水线技术也基本如此,可作类似推广。
图3由2位加法器构成的4位加法器
图4由2位加法器构成的4位流水线并行加法器 3.2用VHDL实现
没有加入流水线的4位加法器或8位以至更高位的加法器,在用VHDL作硬件语言描述时,在任何一本有关VHDL的书中都有实例,特别是4位加法器。而如前所述,流水线技术其实质就是在适当的地方加入寄存器,将前面的运算结果或输入数据暂存,并在下一个时钟到来时将寄存值作为后一级运算的输入,因此在用VHDL描述时只需将书上描述加法器的代码作适当改写,施加必要的设计约束,就可达到目的。一般就是加入Wait语句或IF-THEN语句来测试敏感信号边沿,实现寄存器或锁存器。如对Wait语句,常用的描述形式为:wait until clk'event and clk='1'(上升沿触发)或wait until clk'event and clk='0'(下降沿触发)。对IF-THEN语句的常用描述方式为:IF(clk'event and clk='1')THEN…或IF(clk'event and clk='0') THEN…。
另外就是一般是在进程中使用,来达到实现寄存器或锁存器,可描述为
process
begin
wait until clk'event and clk='1';
reg<=X;
end process;
其中的X是指输入所加流水线寄存器REG中的数据。 IF-THEN语句与之类似。
3.3 FPGA中的实现
FPGA中一般有较丰富的寄存器资源,因此可用于实现流水线技术。FPGA的主要厂家有Altera、Xilinx等,这两家都各自针对自己的产品开发了相应的开发工具,Altera的MAX+PLUS II易学,易用,并易获得,且是一个全集成化的可编程设计环境,因而对FPGA初学者是最适宜的开发工具。因此就运用Altera的开发工具MAX+PLUS II实现流水线技术的问题作一说明。
(1)如果设计是用原理图输入,则应充分利用凡带有LPM_PIPELINE的LPM(Library of Parameterized Module)。当使用了带有LPM_PIPELINE的LPM函数,MAX+PLUS II编译器会给出LPM_PIPELINE的最佳数值(即最佳流水线级数),从而可以由此设定LPM_PIPELINE的最佳值。在MAX+PLUS II 10.1中,一共所提供了41种LPM函数,其中LPM_COMPARE、LPM_DIVIDE、LPM_ADD_SUB、LPM_DECODE、LPM_MULT、LPM_MUX和LPM_PARALLEL_ADD共7种都带有LPM_PIPELINe设定项,包括并行加法器宏函数LPM_PARALLEI_ADD,可根据提示的最佳值来设定。
(2)如果设计是用VHDL作设计输入,那么在程序的适当地方添加寄存器或锁存器描述语句,则在综合时就能够实现流水线技术。另外,在用VHDL作设计输入时也可以利用Altera所提供的LPM函数,但必须在设计实体前使用LPM库语句及相应的USE语句,即在一般库使用语句最前面加入:LABRARY lpm;USE lpm.lpm_components.ALL。
4 应用要点
下面主要针对用VHDL编程,在引入寄存器或锁存器实现流水线技术的注意事项:
(1)一个进程中只能引入一个寄存器。
(2)用于产生寄存器的赋值语句绝不能放在ELSE条件分支语句上。因为没有这样的硬件电路与之对应。
(3)如果一个变量已在IF边沿检测语句中被赋了值,那么它的值就不能再赋给别的变量了。
如:IF(clk'event and clk='1')THEN edge_var:=x; a_val:=edge_var;END IF;
(4)边沿表达式不能当作操作数。
如:IF NOT(clk'event and clk='1') THEN…
(5)条件语句中,由于条件涵盖的不完整,综合器将引入多余的锁存器。因此一定要考虑到条件所涵盖的整个范围。一般的处理办法是加上ELSE语句来补全条件。
(6)在子程序中引入的变量不可能引出寄存器。因为在子程序中,变量具有局部性。每当子程序被调用时,其中的变量都要被初始化,其值不能保持到下一个时钟到来时。因此不能考虑从子程序中引出寄存器。
(7)寄存器不是引入的越多越好,要综合考虑所实现的器件的速度与所耗硬件资源量。如果硬件资源足够且速度又是主要考虑的因素,则可适当多引入寄存器,从而提高时钟速率达到提高数据处理量。
5 结束语
本文介绍流水线技术的原理和特点,并通过流水线加法器的实现来说明流水线技术在高速数字电路设计中的应用。最后对用寄存器实现流水线技术的应用要点作了较全面的说明。
参考文献:
[1]潘松,王国栋.VHDL实用教程[M].成都:电子科技大学出版社,2000.
[2]朱明程.XILINX数字系统现场集成技术[M].南京:东南大学出版社,2001.
[3]赵雅兴.FPGA原理、设计与应用[M].天津:天津大学出版社,1999.
[4]周政海,邓先灿.流水线技术在实现高速DSP运算中的应用[J].杭州电子工业学院学报,2002,23(4):5-8.
[5]谢锘.FPGA在数字信号处理中的应用[J].无线通信技术,2001,27(5):56—57.
[6]尹廷辉.借助EDA逻辑综合工具实现16位快速加法器[J].军事通信技术,2002,23(2):48—50。
[7]宋万杰,罗 丰,吴顺君.CPLD技术及其应用[M].西安:西安电子科技大学出版社,2000.
[8]戴泰初,阙沛文.基于FPGA的数字逻辑器件开发及优化设计[J].微电子学,2002,23(5):397—400.
|