1. 程式人生 > >verilog中signed的使用

verilog中signed的使用

src 問題 數據 就會 sign 相同 9.png a + b 是的

1、在verilog中有時會用signed修飾符來修飾定義的數據,運算的時候也會用$signed()任務來強制轉換數據,那麽signed的修飾是為什麽呢,是為了區分有符號數和無符號數的加法和乘法嗎?其實不是的,因為有符號數和無符號數據的加法強結果和乘法器結構是一樣的,signed的真正作用是決定如何對操作數擴位的問題。

2、verilog中的加法和乘法操作前,會先對操作數據擴位成結果相同的位寬,然後進行加法或者乘法處理。比如a/b都為4位數據,c為5位數據,c = a + b,這個運算的時候會先把a和b擴位成5位,然後按照無符號加法進行相加。a/b沒有被signed修飾的時候會按照無符號數的擴位方式進行擴位,即高位補0,加法的結果當然也是a、b為無符號數相加的結果。

3、如果想把a、b作為有符號數來相加,那麽就得在a/b數據定義的時候用signed修改,或者在計算的時候用$signed()來修飾,這樣在c = a + b,這個運算開始的擴位就會按照有符號數的方式進行擴位,在高位補符號位,加法得出的結果就是a、b視為有符號數的結果。當然c要視為有符號數據。技術分享圖片技術分享圖片

技術分享圖片

verilog中signed的使用