流水线技术在高速数字电路设计中的应用
来源:电子开发网 作者:肖良军  时间:2007-09-04 发布人:谭欣

  摘要:流水线技术是设计高速数字电路的一种最佳选择之一,对其实现原理作了较形象的阐述。针对加法器在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.

流水线技术在高速数字电路设计中的应用相关推荐

  1. 电脑网络信号传输频率_高速数字电路设计中信号完整性

    信号完整性是许多设计人员在高速数字电路设计中涉及的主要主题之一.信号完整性涉及数字信号波形的质量下降和时序误差,因为信号从发射器传输到接收器会通过封装结构.PCB走线.通孔.柔性电缆和连接器等互连路径 ...

  2. 交流信号叠加直流偏置_高速数字电路设计通关五部曲(二):接口信号匹配与对接...

    昨天分享了高速数字电路设计的基本概念和常见高速电路及特点(若需回顾,请戳下方链接).今天来看看高速数字电路的接口信号匹配与对接. 这是一个连接:  高速数字电路设计通关五部曲(一) 基本概念+常见高速 ...

  3. 数字电路设计中亚稳态与MTBF

    FPGA的亚稳态跟MTBF FPGA设计中的亚稳态及其缓解措施 原文 深入理解FPGA中的亚稳态概念 注意,亚稳态不一定会引发故障,而MTBF指的是无故障时间,所以二者不能画等号,也就是为什么,亚稳态 ...

  4. 高速数字PCB板设计中的信号完整性分析

    随着集成电路输出开关速度提高以及PCB板密度增加,信号完整性(Signal Integrity) 已经成为高速数字PCB设计必须关心的问题之一,元器件和PCB板的参数.元器件在PCB板上的布局.高速信 ...

  5. 软考中级【数据库系统工程师】第1章:计算机系统知识,自学软考笔记,备考2022年5月份软考,计算机硬件系统CPU组成指令寄存器组总线输入输出的程序控制方式计算机体系结构与存储系统加密技术流水线技术

    前情提要:笔记只整理与考试相关的重点知识,也就是历年真题出现过的考点我都会记录笔记,一些不重要的内容我就不记录了,大家可以自行查看教材. 1.1计算机硬件基础知识 考点1:计算机硬件系统的组成 考点2 ...

  6. 《高速数字设计》(Howard Johnson)黑魔书修炼笔记(一)——基本概念

    <高速数字设计>(Howard Johnson)黑魔书修炼笔记(一)--基本概念 一.写在前面 1.1 写作动机 1.2 内容简介 二.基本概念 2.1 频率和时间 2.2 时间与距离 2 ...

  7. 数字芯片设计中的时钟分频电路,你了解多少?

    时钟分频电路在数字芯片设计中非常常见,而且也非常重要,正确的符合要求的数字分频电路对功能的正确与否至关重要.现在数字电路设计中的时钟分频主要包括以下几种方法: 1.寄存器分频 寄存器分频就是利用寄存器 ...

  8. 高速PCB 设计中终端匹配电阻的放置

    摘要:本文简要的总结了在高速数字设计中串联终端匹配和并联终端匹配的优缺点,并对这两种匹配方式的终端匹配电阻处于不同位置时的匹配效果做了相应的仿真和深入的分析,得出了串联终端匹配电阻对位置的要求没有终端 ...

  9. 《FPGA入门教程》看书随笔——数字电路设计入门

    1.数字电路设计的核心是逻辑设计.数字电路的逻辑值只有'1'和'0',表征的是模拟 电压或电流的离散值,一般'1'代表高电平,'0'代表低电平. 2.当前的数字电路的电平标准常见的有:TTL.CMOS ...

最新文章

  1. LayoutInflater中四种类型inflate方法的介绍
  2. Python ndarray.strides用法
  3. 漂洋过海来看你 可惜Uber不便宜
  4. JavaScript实现combine With Repetitions结合重复算法(附完整源码)
  5. SpringCloud导学
  6. 干货 | 阿里巴巴HBase高可用8年抗战回忆录
  7. C/C++中的段错误(Segmentation fault)[转]
  8. typedef让p去除了普通变量的C++身份
  9. 出身寒门的程序员,如何改变命运?
  10. .NET动态调用WebService
  11. 5个必考的大厂SQL面试题
  12. LoadRunner教程(28)-LoadRunner连接mysql
  13. mysql 2008安装_关于SQL 2008安装时已经有实例名称。
  14. VSCode如何搭建Vue项目?详细步骤
  15. 怎样在Excel中添加水印?学会这个方法可以轻松搞定
  16. mac Android studio 使用 阿里 maven 报错
  17. 企业内部网络的多出口相互冗余备份与负载均衡
  18. board crt_【大强哥-k8s从入门到放弃02】Kubernetes1.17部署Dashboard2.0
  19. 实时搜索引擎Elasticsearch(4)——Aggregations (聚合)API的使用
  20. python 线程通信的几种方式_Python 线程、线程通信、多线程

热门文章

  1. 新发现一款监控Linux集群sinfo
  2. net.sf.fmj.media.cdp.civil.CaptureDevicePlugger addCaptureDevices解决方法
  3. Python实现局域网(Socket)通信
  4. CSS 居中方法集锦
  5. python 进度条_六种酷炫Python运行进度条
  6. 塞班自带浏览器下载路径问题
  7. pandas中如何选取某几列_【python】pandas中 loc amp; iloc用法及区别
  8. linux go语言环境配置文件,linux下安装配置go语言环境
  9. java 的“mwq”_java的对象模型 - osc_mwqvsfzo的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. Shovels and Swords CodeForces - 1366A(二分)