原创 流水线技术——面积与速度的矛盾

2007-1-31 20:56 5059 3 3 分类: FPGA/CPLD
电路设计当中,面积与速度永远是一对矛盾的共生体。在节省面积的前提下,电路的速度就不会做的很高;而为了提高速度,就必须牺牲一定的面积。下面以流水线设计技术为例来介绍为什么面积与速度是一对矛盾的共生体,以及流水线技术是怎样用面积来换取速度的。

1、流水线设计的概念:


  流水线设计是把规模较大、层次较多的组合逻辑电路分为几个级,在每一级插入寄存器组并暂存中间数据。K级的流水线就是从组合逻辑的输入到输出有K级寄存器组,上一级的输出是下一级的输入而又无反馈电路。


  下图表示了如何把组合逻辑设计转换为相同组合逻辑功能的流水线设计。


点击看大图


  图左边的组合逻辑包括两级:第一级的延迟是逻辑A的延迟tA和逻辑B的延迟tB中的最大值;第二级的延迟为逻辑C的延迟tC。电路的逻辑输入要经过这个组合逻辑而得到稳定的计算结果输出,需要等待的传播延迟为[max(tA+tB)+tC]。


  在从输入到输出的每一级插入寄存器后,如图右所示,第一级寄存器所具有的总延迟为tA与tB中的最大值加上寄存器的触发时间tCO。同样,第二级寄存器延迟为tC加上tCO。这样从逻辑输入到取得稳定的计算结果输出,需要等待的传播延迟为[(max(tA,tB)+tCO),(tC+tCO)]。由于器件中逻辑门的延迟相对于触发器的触发时间要长的多,因此采用流水线设计要比同功能的组合逻辑设计具有更快的速度。


  需要注意的是,上面的流水线设计需要两个时钟周期才能取得第一个计算结果,但是随后的计算结果只需要一个时钟周期即可得到。开始时用来获得第一个计算结果的两个时钟周期被称为流水线设计的首次延迟。


2、流水线设计的作用:


  流水线设计的作用在于它能提高电路的工作速度。仍以上面的例子为例,若逻辑A、B、C的延迟均为tPD,对于组合逻辑而言,一次计算的总延迟为2×tPD;对于流水线设计而言,一次计算所需的时间为(tPD+tCO),称为吞吐延迟。前面讲的首次延迟是对从输入到输出之间最长路径的初始化所需的时间。在组合逻辑设计中,首次延迟和吞吐延迟均为2×tPD;而在流水线设计中,首次延迟为2×(tPD+tCO),而吞吐延迟为(tPD+tCO)。而tCO<tPD,因此采用流水线设计,吞吐延迟要比组合逻辑的小得多,提高了电路的工作速度。


3、流水线设计的不足:


  流水线设计虽然能够提高电路的速度,但它需要在组合逻辑的每一级插入相应的寄存器。这对于简单的组合逻辑来说,可能只要很少的寄存器就能实现速度的提高;但对于复杂的组合逻辑,所需的寄存器的数量就会成倍的增加。因此,流水线设计在速度上的提高是以消耗较多的寄存器资源为代价的,这是面积和速度之间的矛盾的必然结果。


以一个4×4加法器树乘法器为例。对它的计算过程分别采用组合逻辑设计和流水线设计两种方法编写,比较两者的面积和速度的差别,验证流水线设计是以牺牲面积来换取速度的。


  下面对4×4加法器树乘法器作一介绍:


  对于二进制乘法,以1011×0110为例,它的计算过程为:


Multiply.JPG


  4×4加法器树乘法器的任务就是要模拟上面的计算过程。乘数1100的每一位与被乘数0110相乘的结果,称为部分积,可以用开关电路实现,即如果乘数的这一位为0,则部分积为0000,如果乘数的这一位为1,则部分积为被乘数。将得到的部分积分成两组,一组包含低两位的部分积(0000,1011),另一组包含高两位的(1011,0000)。每组中的部分积相加,但这里的相加不是简单的相加,而是要考虑到位权,即第一组的1011左移一位后和0000相加,第二组的0000左移一位后和1011相加,这样得到了第一级的部分和(10110,01011)。将这两个部分和再次带位权相加,即01011左移两位后和10110相加,得到的就是乘法器的最终结果1000010。以上就是4×4加法器树乘法器的工作过程。


  它的结构图如下所示:


点击看大图


  中间一级用的是6位加法器的原因是,由四个4位×1位乘法器得到的部分积M3、M2和M1、M0之间要作带位权的加法,即M3左移一位和M2相加,M1左移一位和M0相加,这样得到的和是5位,再加上进位1位,所以需要用6位加法器来实现。
  最后一级用的是8位加法器的原因是,由两个6位加法器得到的部分和N1和N0之间要作带位权的加法,即N1左移两位和N0相加,得到的和是8位,这里没有用进位的原因是M3、M2、M1、M0的最大值为1111,得到N1、N2的最大值为101101,得到a×b的最大值为11100001,因此不会有进位。


  下面是两种乘法器的具体说明:


1、组合逻辑设计的4×4加法器树乘法器


点击看大图


  如图,电路分成三个部分:
  (1)输入部分:用两个4位寄存器将数据同步进来。
  (2)运算部分:由组合逻辑构成。
  (3)输出部分:将运算结果以寄存器型输出,减少输出的毛刺。


2、流水线设计的4×4加法器树乘法器


点击看大图


  电路在上一个乘法器的基础上,将运算部分中每一步的结果用寄存器锁存起来,因此运算部分用了两级流水线。其他部分与上一个乘法器相同。


1、仿真波形


  (1)组合逻辑设计的乘法器仿真波形:


点击看大图


  (2)流水线设计的乘法器仿真波形:


点击看大图


  可见两个乘法器得到的结果是一致的。不过在仿真开始阶段,输出数据的延时是不同的。原因是流水线设计的乘法器采用了两级流水线,因此数据在输出时要延时两拍。


2、逻辑资源占用


  (1)组合逻辑设计的乘法器资源占用情况:


点击看大图


  (2)流水线设计的乘法器资源占用情况:


点击看大图


  可见流水线设计的乘法器比组合逻辑设计的乘法器多用了6个逻辑资源,从两个乘法器的结构图可知,这6个逻辑资源应该用在了两级流水线的寄存器组上。


3、时序分析


  (1)组合逻辑设计的乘法器最高时钟:


点击看大图


  (2)流水线设计的乘法器最高时钟:


点击看大图


  可见,流水线设计的乘法器最高工作频率要比组合逻辑设计的乘法器最高工作频率快得多。这是由于流水线设计将延时较大的组合逻辑分摊在多个时钟内,提高了电路的工作速度。


4、综合后的电路结构


  (1)组合逻辑设计的乘法器电路


点击看大图


  (2)流水线设计的乘法器电路


点击看大图


  可见,两种乘法器与《流水线技术——面积与速度的矛盾(之二)》中的两种乘法器的电路结构是一致的。


总结:


  流水线设计是用一级一级的寄存器组将大的组合逻辑切割成小的组合逻辑,以牺牲电路的面积来换取速度的。
  通过这三节介绍,希望可以帮助大家对流水线,以及面积与速度的矛盾这些感念在感性上有一个更好的认识。由于我也是新手,在上面的介绍中可能也会有不准确或者错误的理解和认识,如果大家发现了,希望能够指出,我们共同努力,共同进步。


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条