乘法器 硬體設計

2021-10-12 08:39:28 字數 2198 閱讀 2218

人們日常習慣的乘法是十進位制,但計算機實現起來不方便。首先,需要記錄9x9乘法表,每次相乘去表中找結果;其次,將豎式相加也不方便。

但二進位制卻十分方便,馮·諾伊曼在《關於endvac的報告草案》中說「二進位制可以極大簡化乘法和除法運算。尤其是對於乘法,不再需要十進位制乘法表,也不需要兩輪的加法」。

二進位制乘法運算過程

觀察這個式子,可以發現我們並不需要乘法表,如果乘數字為0,就在中間過程中全補零,如果乘數字為1,就在中間過程補被乘數。

運算過程的進一步調整

按照上面那種計算的話,需要大量的空間來儲存中間結果,還要用乙個空間儲存積。其實,不難發現,每個中間結果最後都加在乘積上,我們可以將中間結果儲存在乘積中,每次用中間結果更新乘積,運算結束時,乘積裡面放的就是正確的乘積。

上面說直接對乘積加上被乘數是不準確的,為了滿足對齊要求,只需將被乘數左移。

這樣,我們得到了乙個適合硬體實現的乘法運算過程。

乘法的實現

實現結構

以4-bit數為例,(1000)2 + (1001)2 = (1001000)2

具體流程

初始化,將multiplier = 1001,將multiplicand的低4為設為1000,高4位補零,product = 0.

檢查乘數暫存器的最低位,如果為1,將被乘數暫存器加到乘積暫存器中,此時控制訊號會給加法器乙個訊號,給乘積暫存器寫訊號,等到下乙個上公升沿到來時,會將運算的結果存到乘積暫存器中。如果為0,不管。同時給被乘數暫存器左移訊號,給乘數暫存器右移訊號,也是在下乙個時鐘上公升沿起作用。

檢測是否經歷4次迴圈

最終的結果如下:

4位的過程對n位同樣有效。

n位的流程圖

乘法的優化1

觀察上面n位乘法器的流程圖,由於每次訊號要等到乙個時鐘上公升沿才起作用,所以1a、2、3過程各用乙個週期。其實這三個過程可以並列執行,就降為乙個週期了。

乘法的優化2(面積優化)

面積優化就是指減少不必要的硬體資源。對於cpu這樣的積體電路來說,它的**的乙個重要因素就是集體管的數量,或者說晶元的面積。因此,在設計各個功能部件的時候,如何減少晶元的面積也是乙個重要的方向。

觀察上面這個圖,我們可以發現如下可以優化的地方:

「被乘數暫存器」有8位寬,但其中有效位始終只有4位

「乘數暫存器」是4位寬,但其中有效數字每週期減少1位

「乘積暫存器」是8位寬,但初始時有效位只有4位且每週期增加1位

「加法器」是8位寬,但參與運算的實際有效位置只有4位

我們只需逐一改進這些地方,注意,每個部件某個功能去掉,在另乙個部件應加上該功能。比如」被乘數暫存器「取消了左移功能,」乘積暫存器「就相應的新增了右移功能。

「被乘數暫存器」縮減為4位,且取消左移功能

取消「乘數暫存器」,乘數初始置於」乘積暫存器「低4位

」乘積暫存器「增加右移功能,乘積初始置於其中高4位,隨著運算過程不斷右移(最高位補0)

」加法器「縮減為4位,」乘積暫存器「只有高4位參與運算

優化後的圖如下:

注:乘法暫存器實際應該是9位,以儲存加法器的進製,但這裡保持8位,以突出使用優化後的演變。

n位乘法器優化同理

Booth乘法器設計

1.乘法器原理 在計算兩個補碼相乘時,可以通過booth演算法來實現定點補碼一位乘的功能。布斯 booth 演算法採用相加和相減的操作計算補碼資料的乘積,booth演算法對乘數從低位開始判斷,根據後兩個資料位的情況決定進行加法 減法還是僅僅進行移位操作。討論當相乘的兩個數中有乙個或二個為負數的情況,...

FPGA 乘法器的設計

乘法算是基本運算之一,廣泛應用在數字訊號處理中,濾波器中乘法運算必不可少,實現乘法器的方法很多,各有各的優缺點,常見的有移位相加法,加法樹法,查表法,混合法 在我們用語言設計電路時,初學時在實現乘法運算時通常很簡單的用 號操作,但是這種方法談不上設計乘法器,其最終的硬體實現要根據綜合器綜合的結果,好...

fpga乘法器設計要點

fpga乘法器設計 fpga乘法器相通過左移實現,位數最好定義為引數,可在上層模組中對其進行重定義防止引腳浪費,通過觸發器的設計使面積功耗不會因為位數增加有太大影響。演算法實現 當輸入確認鍵按下時,所有暫存器全部清零,計數器cnt賦值size 1,新一輪計算開始,cnt賦值0,當cnt小於size時...