采用HDL代碼描述加法運(yùn)算只需要用操作符“+”即可,這看似很簡(jiǎn)單,這里我們以兩個(gè)4-bit數(shù)相加為例,對(duì)輸入/輸出數(shù)據(jù)均寄存,從而形成如下圖所示電路。
此電路對(duì)應(yīng)的HDL代碼如下圖所示。這里采用了SystemVerilog語言。有兩點(diǎn)值得注意:一是兩個(gè)N位數(shù)相加,無論是有符號(hào)數(shù)還是無符號(hào)數(shù),其結(jié)果都有可能是N+1位,故輸出比輸入位寬多1位,這樣才能保證不會(huì)發(fā)生溢出(Overflow)。二是默認(rèn)情況下,代碼中的logic表示的都是無符號(hào)數(shù),但是對(duì)于下面這段代碼,無符號(hào)數(shù)和有符號(hào)數(shù)均適用,這是因?yàn)橛蟹?hào)數(shù)是以二進(jìn)制補(bǔ)碼表示的。
為了進(jìn)一步說明,我們看如下例子。數(shù)據(jù)a二進(jìn)制形式位1001,既可以看作無符號(hào)數(shù)9(十進(jìn)制),也可以看作有符號(hào)數(shù)-7(十進(jìn)制);數(shù)據(jù)b二進(jìn)制形式為1010,既可以看作無符號(hào)數(shù)10(十進(jìn)制),也可以看作有符號(hào)數(shù)-6(十進(jìn)制)。最終結(jié)果的二進(jìn)制形式為10011,既可以看作無符號(hào)數(shù)19(十進(jìn)制),也可以看作有符號(hào)數(shù)-13(十進(jìn)制)。
這里兩個(gè)4-bit數(shù)相加和設(shè)置為5-bit,如果和設(shè)置為6-bit,有符號(hào)數(shù)和無符號(hào)數(shù)的結(jié)果是否一致呢?對(duì)于無符號(hào)數(shù),sum[5]補(bǔ)0,如圖中紅色方框所示。
對(duì)于有符號(hào)數(shù),sum[5]則是sum[4]的復(fù)制版本,實(shí)質(zhì)上是符號(hào)位擴(kuò)展。
本質(zhì)上,在賦值時(shí),如果把一個(gè)N位數(shù)據(jù)a賦值給一個(gè)位寬M的數(shù)據(jù)b(這里M>N),且兩個(gè)數(shù)據(jù)均為同一類型(都是有符號(hào)或無符號(hào)),此時(shí)是將N位數(shù)據(jù)做符號(hào)位擴(kuò)展為M位再賦值給b。因此,對(duì)于兩個(gè)N位數(shù)據(jù)相加,如果輸出位寬選擇大于N+1,那么上述代碼只適合于無符號(hào)數(shù),對(duì)于有符號(hào)數(shù)需要在logic后加關(guān)鍵字signed,如下圖所示。
如果兩個(gè)位寬不等的數(shù)相加,同樣需要指明是有符號(hào)數(shù)還是無符號(hào)數(shù)。例如,一個(gè)4-bit數(shù)和一個(gè)3-bit數(shù)相加,如下圖所示。如果a二進(jìn)制為1001,對(duì)應(yīng)無符號(hào)數(shù)9(十進(jìn)制),b二進(jìn)制形式為101,對(duì)應(yīng)無符號(hào)數(shù)5(十進(jìn)制),兩個(gè)無符號(hào)數(shù)相加,先將b高位補(bǔ)0,最終和為01110;如果將a和b看作有符號(hào)數(shù),則要將b符號(hào)位擴(kuò)展為1101,最終和為10110。符號(hào)位擴(kuò)展是工具完成的,無需人工干預(yù)。
總體而言,在描述加法運(yùn)算時(shí),如果兩個(gè)數(shù)據(jù)均為N位,那么和要設(shè)置為N+1位,此時(shí)無符號(hào)數(shù)的描述方式也適合于有符號(hào)數(shù)。如果兩個(gè)數(shù)一個(gè)是N位,一個(gè)是M位,且M>N,那么和要設(shè)置為M+1位,此時(shí)要明確指出是有符號(hào)數(shù)還是無符號(hào)數(shù)。
原文標(biāo)題:加法運(yùn)算很簡(jiǎn)單?
文章出處:【微信公眾號(hào):Lauren的FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
電路圖
+關(guān)注
關(guān)注
10344文章
10721瀏覽量
530689 -
HDL
+關(guān)注
關(guān)注
8文章
327瀏覽量
47392 -
代碼
+關(guān)注
關(guān)注
30文章
4788瀏覽量
68625
原文標(biāo)題:加法運(yùn)算很簡(jiǎn)單?
文章出處:【微信號(hào):Lauren_FPGA,微信公眾號(hào):FPGA技術(shù)驛站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論