3rk1301-0fb00-0aa2
可以看到,每相鄰三位進行編碼,其中的位mi-1 其實表示來自前面的進位。故當其為 001時,得到的編碼為 +1(表示4),011時位1表示進位,故編碼為1+1=+2。
從中可以得出,對于8位二進制數0101_0101,經過比特對編碼后,得到的是 +1 +1 +1 +1,其表示的數為:
4^3 + 4^2 + 4^1 + 4^0 =
64+16+4+1=85
此時只需要進行3次加法運算,不會存在booth編碼所存在的問題。
同時發現對于數據位寬非偶數的數,我們需要將其在位補填一位符號位,再進行比特對編碼。
比特對編碼(對乘數進行編碼)乘法器,需要進行的加法次數為乘數位寬的一半。
比特對編碼乘法器設計
設計思想概敘:定義位寬為DW_A+DW_B+2的product寄存器(DW_A為被乘數a的位寬,DW_B為乘數b的位寬)。當in_valid與in_ready同時為高時,將乘數b(位寬為b)加載到product的低DW_B位。然后在計算狀態下(executing),將每次加法器的輸出放到product的高位,并每個時鐘周期將product右移2位。每個時鐘周期,通過對
m={product[1:0],prd_r[1]}
(其中prd_r[1]為上一個時鐘product的第二位)進行編碼,得出本次操作是加1、加2,減1,減2,還是不用做加減法(編碼為0)(代碼中上述五種操作對應的標志信號分別為add_1,add_2,sub_1,sub_2,noneed_add)。并將加法結果每次存到product寄存器的高位。