目錄
一、陣列乘法器
二、Verilog設計
一、陣列乘法器
将上文中的AB兩數相乘的例子:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9ElW1YFWlVnRXRGNWNjYvB3MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLyYTN2ITMwIjM4IzMwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
4比特的AB兩數相乘的豎式計算表示成如下,為了區分,友善在陣列格式中看出差異,圖中标記了不同的顔色,每組顔色表示一組部分和:
豎式計算圖例
其中ai,bi表示A和B的某個比特,aibi表示ai與bi相與,使用與門電路生成,aibi的值隻有0和1。S表示AB相乘的結果。
每一列将使用半加器或者全加器兩兩相加,其結果表示為Si,如S0 = a0b0,S1 = ( a1b0+a0b1 )mod 2,……,每一列每兩個數産生的進位将傳遞至相鄰高的一列參與計算。
是以,将其結構表示為如下結構,即陣列乘法器(Array Multiplier)。
RCA陣列乘法器
其中HA表示半加器,FA表示全加器,虛線箭頭表示進位傳播的路線。使用行波進位加法器RCA搭建如上的陣列乘法器即RCA陣列乘法器。
對于m*n的RCA陣列乘法器,将消耗資源如下:
(1)m*n個與門
(2)n個半加器
(3)mn - m – n個加法器
根據進位傳播鍊,可以看出RCA陣列乘法器的關鍵路徑如下:
RCA陣列乘法器關鍵路徑
上圖中紅線和紫線是該陣列乘法器中由于累加造成的進位鍊的最長路徑。另外,通過使用不同結構的加法器可縮短該進位鍊的傳播延時,如使用進位保留加法器(Carry Save Adder, CSA)。
CSA陣列乘法器與其關鍵路徑
将RCA陣列乘法器的進位連接配接至斜下角的加法器,變成上圖結構即CSA陣列乘法器,CSA結構的陣列乘法器将進位與和分别計算,不必計算該層的進位,省去了行波進位加法器進位鍊的依賴,隻在最後一級通過RCA結構(上圖綠色虛框)傳遞進位合并最後的結果。
将兩種結構的陣列乘法器面積與關鍵路徑對比如下:
RCA結構乘法器使用了8個FA,4個HA,關鍵路徑經過5個FA,2個HA。
CSA結構乘法器使用了8個FA,4個HA,關鍵路徑經過3個FA,3個HA。
CSA結構使用相同的資源卻有更優的性能。
以上即是陣列乘法器的基本原理,其中半加器,全加器,行波進位加法器(RCA),進位保留加法器(CSA),參考閱讀:
https://zhuanlan.zhihu.com/p/101014066
https://zhuanlan.zhihu.com/p/102387648
二、Verilog設計
根據以上例子設計4*4無符号RCA陣列乘法器,主要要點如下:
(1)與門結構,将輸入Ai和Bi相與;
(2)半加器和全加器,用于求解陣列乘法器的部分和,對于4*4陣列乘法器,該部分和個數3個。如果擴充成任意位寬的乘法器,可以使用generate…endgenerate生成每個層級的信号;
(3)陣列結構拓撲結構,因為每一部分是行波進位加法器結構,是以,将每個部分和看出N比特的行波進位加法器,即RCA。
與門結構
部分和計算
輸出結果
陣列乘法器,源碼公衆号回複00d。
歡迎批評指正,更多閱讀,關注“紙上談芯”,不定期更新,共同學習: