购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 超前进位加法器的实现

从全加器的RTL代码可以看出, k r 是先被运算出来的,而 w 是基于 k r 才能够算出结果,并且高位 w i 依赖低位 w i -1 ,因此数据位宽越宽, w 作为一个整体被完全算出的速度就越慢,整个加法运算的延迟就越大。这种高位运算依赖并等待低位运算的求和方式,除了被称为全加器,也被称为行波进位加法器。

为了提高计算多位加法的速度,需要进一步破除这种依赖关系,这里主要指破除 w 中高位对低位的顺序依赖,使得计算时间不会因位宽的增加而不断变慢。这就需要将硬件全部展开,使得 w 的高位和低位一起算出,而不是先后算出,这种做法被称为超前进位加法器,即原本出现较慢的高位进位和出现较快的低位进位在本方法中是同时出现的,相当于高位进位超前,代价是展开后的硬件逻辑门数多、面积大、成本高。

以下给出一个使用Verilog实现超前进位加法器的RTL实例(配套参考代码cla.v)。为了方便读者与行波进位全加器进行对照,被加数和加数的位宽仍然被定为7位。

细心的读者会发现,上述RTL与全加器的RTL相比,原理上基本相同,而且越是高位宽的w,逻辑越复杂。比如,w[7]的逻辑就比w[6]更复杂,以此类推,更高位的加法运算,其进位w会更加复杂。而且仔细观察该算法,会发现要想实现快速计算,需要多次复制一些近乎相同的逻辑。比如,r[0] & k[1]参与w[2]的运算,而r[0] & k[1] & k[2]又参与了w[3]的运算。原本,节省资源的做法是先计算r[0] & k[1],然后将其结果再和k[2]联合计算,这就是全加器的做法。现在,为了让w[2]和w[3]同时得到结果,必须让r[0] & k[1]和r[0] & k[1] & k[2]同时计算,一个用两输入与门,另一个用三输入与门。发展到w[7]处,与r[0]相关的逻辑已经包含6次与操作。可见,超前进位的资源代价是较高的。 I6EyO3jPddXQWNxebMdb8VGBBRR6PpdhgIZgV8J8M6eGTWeYrK+U73kaZkEtjuZW

点击中间区域
呼出菜单
上一章
目录
下一章
×