1、在verilog中有時(shí)會(huì)用signed修飾符來(lái)修飾定義的數(shù)據(jù),運(yùn)算的時(shí)候也會(huì)用$signed()任務(wù)來(lái)強(qiáng)制轉(zhuǎn)換數(shù)據(jù),那么signed的修飾是為什么呢,是為了區(qū)分有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的加法和乘法嗎?其實(shí)不是的,因?yàn)橛蟹?hào)數(shù)和無(wú)符號(hào)數(shù)據(jù)的加法強(qiáng)結(jié)果和乘法器結(jié)構(gòu)是一樣的,signed的真正作用是決定如何對(duì)操作數(shù)擴(kuò)位的問(wèn)題。
2、verilog中的加法和乘法操作前,會(huì)先對(duì)操作數(shù)據(jù)擴(kuò)位成結(jié)果相同的位寬,然后進(jìn)行加法或者乘法處理。比如a/b都為4位數(shù)據(jù),c為5位數(shù)據(jù),c = a + b,這個(gè)運(yùn)算的時(shí)候會(huì)先把a(bǔ)和b擴(kuò)位成5位,然后按照無(wú)符號(hào)加法進(jìn)行相加。a/b沒(méi)有被signed修飾的時(shí)候會(huì)按照無(wú)符號(hào)數(shù)的擴(kuò)位方式進(jìn)行擴(kuò)位,即高位補(bǔ)0,加法的結(jié)果當(dāng)然也是a、b為無(wú)符號(hào)數(shù)相加的結(jié)果。
3、如果想把a(bǔ)、b作為有符號(hào)數(shù)來(lái)相加,那么就得在a/b數(shù)據(jù)定義的時(shí)候用signed修改,或者在計(jì)算的時(shí)候用$signed()來(lái)修飾,這樣在c = a + b,這個(gè)運(yùn)算開始的擴(kuò)位就會(huì)按照有符號(hào)數(shù)的方式進(jìn)行擴(kuò)位,在高位補(bǔ)符號(hào)位,加法得出的結(jié)果就是a、b視為有符號(hào)數(shù)的結(jié)果。當(dāng)然c要視為有符號(hào)數(shù)據(jù)。
$signed()函數(shù)
返回有符號(hào)的值,值得注意的是verilog中的負(fù)數(shù)其實(shí)是{1’b1,pos_num},而并非高級(jí)語(yǔ)言中的補(bǔ)碼。使用中最好通過(guò)增加$signed{1’b符號(hào),正數(shù)}來(lái)實(shí)現(xiàn)轉(zhuǎn)換以避免錯(cuò)誤。
此外在對(duì)signed wire 或signed reg 賦值時(shí),右側(cè)的所有變量最好全部加上$signed函數(shù)轉(zhuǎn)換,以防止遺漏,造成數(shù)據(jù)錯(cuò)誤
signed變量移位操作時(shí)最好使用<<<和>>>,防止對(duì)符號(hào)位進(jìn)行操作,導(dǎo)致數(shù)據(jù)出錯(cuò)
-
Verilog
+關(guān)注
關(guān)注
30文章
1368瀏覽量
113709
原文標(biāo)題:Verilog 中signed和$signed()的用法
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
rt-thread studio怎么設(shè)置才能讓char變量是真正的有符號(hào)類型?
用TXT編輯器打開十六進(jìn)制文件,如何知道校驗(yàn)和值?
SVA斷言的用法教程

淺談Verilog和VHDL的區(qū)別

ADS7883的GND不連接能讀出數(shù)據(jù),連接后讀取的數(shù)據(jù)全為0,為什么?
Verilog 電路仿真常見(jiàn)問(wèn)題 Verilog 在芯片設(shè)計(jì)中的應(yīng)用
Verilog 與 ASIC 設(shè)計(jì)的關(guān)系 Verilog 代碼優(yōu)化技巧
Verilog 測(cè)試平臺(tái)設(shè)計(jì)方法 Verilog FPGA開發(fā)指南
Verilog與VHDL的比較 Verilog HDL編程技巧
Verilog硬件描述語(yǔ)言參考手冊(cè)
system verilog語(yǔ)言簡(jiǎn)介
Verilog HDL的基礎(chǔ)知識(shí)

Linux lsof命令的基本用法

評(píng)論