2014年11月22日 星期六

P11-10 傳統乘法器的改進 P = A * B



乘法中“負值正值的關係”就是“互斥或的關係”。

          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次的累加次數
相比,可以減少不少時鐘的消耗。




沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...