有符號二進位制數128位booth乘法器

2021-10-08 14:02:39 字數 2260 閱讀 5225

目錄簡介

基4booth編碼器

4-2壓縮器

超前進製加法器

**結果:

總結:

因為在這學期低功耗課程中老師布置的期末作業是做乙個128乘法器,但想省事兒只選擇了**調研。覺得挺可惜的,就趁著暑期時間完成這個任務。

本乘法器採用基4booth編碼,輸入為兩個128位有符號數,輸出為256位有符號數。基4的booth編碼將兩個128位有符號數計算成64個部分積。

64個部分積經過一層4-2壓縮器得到32個部分積……在經過幾層4-2壓縮器,最終得到兩個部分積,兩個部分積進過乙個超前進製加法器(cla)得到最終結果。

結構框圖如下:

對於被乘數b_i進行編碼,booth 基-4 編碼是根據相鄰 3 位為一組,前後相鄰分組重疊一位元位,從低位到高位逐次進行,在乘數的最右邊另增加一位輔助位 0,作為分組的最低位。booth 4-基編碼的優點是可以減少 booth  2-基產生部分積的一半,booth  基-4 除了具有高速特性還具有低功耗的特點。

對應case:

4-2 壓縮器的原理圖所示,把 4 個相同權值的二進位制數兩個權值高一級的二進位制數和,它有 5 個輸入埠:包括 4 個待壓縮資料 a1、a2、a3、a4 和乙個初始進製或低權值 4-2 壓縮傳遞的進製值 ci;3 個輸出埠:包括一位元位溢位進製值 co,進製資料 c,偽和 s。

下面**得到的結果out1的權值高一位,下一層部分積計算時需要將out1的結果左移一位(out1<<1);

功能**:

assign w1 = in1 ^ in2 ^ in3 ^ in4;

assign w2 = (in1 & in2) | (in3 & in4);

assign w3 = (in1 | in2) & (in3 | in4);

assign out2 = ^ ;

assign cout = w3[length*2-1];

assign out1 = ( & ) | (( ~) & );

因為大數字的超前進製加法器線路複雜設計麻煩,這裡的256位的超前進製加法器採用64個4位超前進製加法器級聯構成

4位超前進製**:

//carry generator

assign c[0] = cin;

assign c[1] = g[0] + ( c[0] & p[0] );

assign c[2] = g[1] + ( (g[0] + ( c[0] & p[0]) ) & p[1] );

assign c[3] = g[2] + ( (g[1] + ( (g[0] + (c[0] & p[0]) ) & p[1])) & p[2] );

assign c[4] = g[3] + ( (g[2] + ( (g[1] + ( (g[0] + (c[0] & p[0]) ) & p[1])) & p[2] )) & p[3]);

assign cout = c[width];

本文設計的128乘法器是全組合電路的結構,電路複雜會產生比較大的路徑延遲,因此老師建議採用pipeline結構。

而且本電路僅支援有符號數的乘法,因此最高位為符號位。

在tsmc的90nm工藝下

total cell area:      1208136.101364

最多跑到220mhz,第一級booth編碼器和4-2壓縮器之間可做進一步的時序優化

二進位制128位整數運算

gcc提供了兩種128位整數型別,分別是 int128 t和 uint128 t,分別用於宣告有符號整數變數和無符號整數變數。有關gcc的文件參見 using the gnu compiler collection gcc 這裡給出了樣例程式,是有關型別 int128 t和 uint128 t的。從...

有符號二進位制數的乘法

最近在閱讀 深入理解計算機系統 講到補碼乘法,書上給了乙個例子是三位無符號和補碼的乘法表。其中兩個負數的例子 3位二進位制乘法結果一般需要6為二進位制表達 帶符號數 x 101 3 和y 011 3相乘 結果為110111 9 如果直接算出來十進位制是 9然後轉換為6為二進位制我也能理解,但是我很好...

有符號二進位制數的減法

本人的簡單學習過程。題目 十進位制6 12 6,利用有符號位二進位制寫出來過程。解題思路 第一步 把減12變為加負12,利用有符號二進位制表示出來 6 12 6 12 00000110 00001100 00000110 10001100 第二步 將第一步結果分別轉化成補碼 見最下補充 000001...