一款32位嵌入式CPU的定点加法器设
扫描二维码
随时随地手机看文章
从cpu的指令执行频率上看,算术逻辑单元、程序计数器、协处理器是cpu中使用频率最多的模块,而加法器正是这些模块的核心部件,几乎所有的关键路径都与之有关,因而设计一种通用于这些模块的加法器是整个cpu设计中关键的一步。为此,笔者根据32位cpu的400mhz主频的要求,结合cpu流水线结构,借鉴各种算法成熟的加法器,提出一种电路设计简单、速度快、功耗低、版图面积小的32位改进定点加法器的设计方案。
1 设计思想
对于高性能cpu中使用的加法器,速度显然是第一位的,所以考虑采用并行计算的方法,并且在电路的设计上采用少量的器件来获得速度上的巨大提升。从面积有度出发,链式进位加法器(ripple-carry adder)的器件最少,面积最小,版图工作量也最小,可是由于加法器的高位进位要等待低位的运算结束后才能得到,所以没有办法在速度上达到要求。鉴于此,采用类似于链式加法器的 结构。 省先从进位选择加法器(carry-select adder)得到提示,将32位加法器一分为二,分为低16位加法器和高16位加法器,再将低16位加法器的进位输出作为选择信号,用于选择高16位加法器的和及第27位的进位输出(这个进位输出要在溢出逻辑判断中使用,而普通的加法器则不用产生进位)。通过这样的处理,将一个32位的加法器简化就成了两上16位的加法器,如图1所示。
另外,从超前进位加法器(carry-look-ahead adder)获得提示,在超前进位加法器中引入中间变量g和p用于加速进位链的速度。而g和p在逻辑表达式上与前一级的进位无关,只与每一级的操作数输入有关,而且它们又是构成本级进位的必要部分。在微处理器的数据通道上,数据传输是并行进行的,即两个32位操作数几乎同一时间到达时加法器。所以,g和p不论是加法器的最低位还是加法器的最高位,几乎都可以在相同的时间内得到,因而进位链上就可以借鉴这个特点加速进位的传递。以一个四位加法器为例,有如下的逻辑推导过程:
c4=c3p4+g4=(c2p3+g3)·p4=g4=c2p3p4+g3p4+g4=(c1p2+g2) ·p3·p4+g3p4+g4=c1p2p3p4+g2p3p4+g3p4=(c0p1+g1) ·(p2p3p4)+(g2p3p4+g3p4+g4)=c0·(p1p2p3p4)+(g1p2p3p4+g2p3p4+g3p4+g4)
令上式中p1p2p3p4为pgroup,g1p2p3p4+g2p3p4+g3p4+g4为ggroup,如果将32位加法器划分为若干的小块,则每一个小块都可以有自己相对应的ggroup和pgroup。由此可知对于整个加法器的时延来说,关键路径的时延总值可以由三部分组成:①产生ggroup和pgroup的时延;②进位传递逻辑上的器件时延;③加法器进位链上的导线时延。对于这三类时延,时延①与时延(②+③)存在重叠的部分,于是使这两类时延合理衔接,可以使得进位链上的逻辑级数最小,从而使得电路上的传输时延达到最小上。
2 具体实现
2.1 4位加法器模块的实现
在具体的电路设计中,先将32位数据通道划分成了高低两部分,然后以4位为单位划分成更小的模块。这些模块在结构上是基本一致的,但在功能上要完成本模块四组操作数(a[k:k+3]和b[k:k+3])与进位ck的加法运算,并要产生模块的中间变量ggroup和pgroup的运算。
对于单一的每一位,定义它的g和p分别为:gi=aibi,pi=ai+bi,加法器的和sumi=ai+bi+ci-1=pi+ci-1,考虑到器件的实际驱动能力,结合加法器的另一个功能——减法运算,设计出如图2所示的带减法功能的一位加法器电路。
点击看原图设计的4位加法器进位链如图3所示,除c0外,输入(pi和gi)都是由图2的一位加法器产生的,所有4位进位链ci都按超前进位加法器连接方式直接接入相应位置。由此可以看出,进位信号到达各位的逻辑级数是相当的,只要在进位信号到达之间使所有的中间信号gi和pi都能及时产生,就能及时得到每一位的和(sum)。
点击看原图
图4是产