直接補碼陣列乘法器手工運算

2021-10-02 00:10:45 字數 979 閱讀 8089

module mul(a,b,z);

parameter d_width=8;

input [d_width-1:0] a,b;

output [d_width*2-1:0] z;

wire [d_width-1:0] ab0=b[0]?a:8'b0;

wire [d_width-1:0] ab1=b[1]?a:8'b0;

wire [d_width-1:0] ab2=b[2]?a:8'b0;

wire [d_width-1:0] ab3=b[3]?a:8'b0;

wire [d_width-1:0] ab4=b[4]?a:8'b0;

wire [d_width-1:0] ab5=b[5]?a:8'b0;

wire [d_width-1:0] ab6=b[6]?a:8'b0;

wire [d_width-1:0] ab7=b[7]?a:8'b0;

assign z=((+

)+(+

)+(+

)+(+

));endmodule

設十進位制數x=-15,y=-13,用直接補碼陣列乘法器求x*y=?

[x]補=1 0001,[y]補=1 0011

手工計算方法為:對於所有行 圖上黑色顯示的數字即是所乘之數,紅色即是所乘之數取反 藍色即額外新增的1

對應圖也就是說

第一行(1)黑色即數值位乘數值位,紅色即數值位乘符號位取反,最左邊添1

中間幾行(234)黑色即數值位乘數值位,紅色即數值位乘符號位取反

最後一行(5)是用符號位去乘,紅色即符號位乘數值位取反,黑色即符號位乘符號位,最左邊添1

最後結果0011000011最左邊的兩個00判斷溢位

最終的結果即為[x*y]補=011000011

原碼 反碼 補碼 數學公式分析

0 正數 1 負數 對於n 1位的二進位制數 包括符號位 對於定點整數 當x 0時,原碼表示為x,這個很好理解 當x 0時,x的原碼是在 x 即 x 的二進位製碼的符號位 即首位 將0改為1,所以數值上是相當於在 x 的大小上加上乙個2 n,圖示中x為負數,所以減去乙個負數等於加上該數的絕對值,2 ...

booth演算法計算補碼乘法

一般而言,設y y0,yly2 yn為被乘數,x為乘數,yi是a中的第i位 當前位 根據yj與yi 1的值,booth演算法表示如下表所示,其操作流程如下圖所示。在booth演算法中,操作的方式取決於表示式 yi 1 yi 的值,這個表示式的值所代表的操作為 0 無操作 1 加x 1 減x boot...

C安全編碼 陣列

建議 規則 void clear int array void dowork void clear 使用sizeof array sizeof array 0 這種用法確定這個陣列的元素數量,但由於array是乙個形參,因此它是指標型別,sizeof array sizeof int 4 32位os...