乘法中“負值正值的關係”就是“互斥或的關係”。
A值 B值 結果
正 (0) 正 (0) 正 (0)
正 (0) 負 (1) 負 (1)
負 (1) 正 (0) 負 (1)
負 (1) 負 (1) 正 (0)
AxB=C;
3x4=12;
-3x4=-12;
3x-4=-12;
-3x-4 =12;
從上面的內容看來,無論A值和B值是什麼樣的“正值和負值的關係,結果C都是一
樣。
傳統的乘法器
該乘法器的大致操作如下:
(一)在初始化之際,取乘數和被乘數的正負關係,然後取被乘數和乘數的正值。
(二)每一次累加操作,遞減一次乘數。直到乘數的值為零,表示操作結束。
(三)輸出結果根據正負關係取得。
傳統乘法器的改進
VerilogHDL 語言所描述的乘法器是以“消耗時鐘”作為時間單位。反之組合邏輯所建
立的乘法器是以“廣播時間”作為時間單位。說簡單點就是,VerilogHDL 語言所描述
的乘法器“快不快”是根據“時鐘消耗”作為評估。
假設 A=10,B=20,
AxB ,那麼時鐘的消耗至少需要20個,因為 A值需要累加20
次才能得到結果。到底有沒有什麼辦法可以改進這個缺點呢?有學過乘法的朋友都知道
A ( B) 等價於 B (A )。如果以實驗一的乘法器作為基礎,那麼 A(B ) 和 B(A ) 所消
耗的時間就不一樣了。結果我們可以這樣改進:
如果被乘數小於乘數,那麼被乘數和乘數互換。
{Multiplier,Multiplicand}=Multiplicand<Multiplier?{Multiplicand
,Multiplier}:
{Multiplier ,Multiplicand};
舉個例子:Multiplicand
=2 ,Multiplicand
=10;
在更換之前, 被乘數2 需要10次的累加才能得到結果,亦即需要消耗至少10個時鐘
才能求得結果。 更換之後,
被乘數為10 乘數為2,亦即被乘數10只要累加2次就能
得到結果,所以時鐘的消耗是2個以上。如此一來,10次的累加次數和2次的累加次數
相比,可以減少不少時鐘的消耗。
沒有留言:
張貼留言