W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
本節(jié)主要對有符號數(shù)的十進制與二進制表示以及一些數(shù)值變換進行簡單的總結。
定義一個寬度為 DW 的二進制補碼格式的數(shù)據(jù) dbin ,其表示的有符號十進制數(shù)字為 ddec 。
reg [DW-1:0] dbin ;
正數(shù)的補碼為原碼。
假如十進制數(shù) ddec 為負數(shù),則計算其對應的二進制補碼的方法主要有 2 種:
將ddec 最高位符號位改寫為 1,剩余數(shù)值部分取反加一
例如,4bit 數(shù)字 -6 的數(shù)值部分為 4'b0110,取反加一后為 4'b0010,高位改寫后為 4'b1010。
dbin = {1'b1, ~3'b110 + 3'b1} ; //4'b1010
將負數(shù) ddec 直接與其代表的最大數(shù)值范圍數(shù)相加(有人稱之為模數(shù))
例如,4bit 數(shù)字 -6 與 16(2 的 4 次冪)的和為 10, 即對應 4'b1010。
dbin = ddec + (1<<4) ; //4'b1010
當 dbin 最高位為 0 時,其數(shù)值大小即為其表示的十進制正數(shù)。
當 dbin 最高位為 1 時,計算其表示的十進制有符號數(shù)方法主要有 2 種:
將 dbin 取反加一,并增加符號位
例如,4bit 數(shù)字 -6 的補碼為 4'b1010,取反加一后為 4'b0110,增加符號位后為 -6。
ddec = -(~4'b1010 + 1'b1) ; //-6
將 dbin 代表的無符號數(shù)值與其代表的最大數(shù)值范圍數(shù)直接相減
例如,4bit 數(shù)字 -6 的補碼為 4'b1010,即無符號數(shù)值為 10,10 減 16 便可得到 -6 。
ddec = dbin - (1<<4) ; //-6
求 dbin 的絕對值邏輯如下:
dbin_abs = (dbin[DW-1]? ~dbin : dbin) + 1'b1 ;
例如,4bit 數(shù)字 -6 的補碼為 4'b1010,取反加 1 后的值為 4'b0110(6),即為 -6 的絕對值。
但如果 dbin 為正數(shù),加 1 后的值比其真正的絕對值要大 1,此步操作只是為了讓正數(shù)部分的絕對值數(shù)量與負數(shù)部分一致。因為一定位寬下,由于 0 值的存在,有符號數(shù)表示的負數(shù)數(shù)量會比正數(shù)多 1 個。
將有符號數(shù)擴展成為無符號數(shù)的邏輯如下:
dbin_unsigned = {!dbin[DW-1], dbin[DW-2:0]) ;
例如:
4'b1010 (-6) -> 4'b0010 (2),4'b0010 (2) -> 4'b1010 (10)
其實轉(zhuǎn)換原則是將數(shù)據(jù)代表的數(shù)值范圍移動到 0 以上,有符號數(shù)轉(zhuǎn)換成無符號數(shù)之后,數(shù)據(jù)相對間的差并沒有改變。
計算時有時會根據(jù)需要對有符號數(shù)位寬進行擴展。假設位寬增量為 W,擴展邏輯如下:
dbin_extend = {{(W){dbin[DW-1]}}, dbin} ;
擴展原則就是將信號代表符號位的最高位,填充至擴展的高位數(shù)據(jù)位中。
例如 4'b1010 (-6) 擴展到 8bit 為 8'b11111010,計算其對應的負數(shù)仍然是 -6。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: