算術右移


https://blog.csdn.net/qq_41634276/article/details/80414488

一般認為“>>>”在Verilog里是算術右移指令,但實操中發現它有時會在右移時仍然補零,即使符號位為1。
這是因為“>>>”會先判斷這個操作數是否有符號數。如果是無符號數,則補零,是有符號數,才會補符號位。
而一般使用的reg operand; 這種變量定義法默認所定義的變量為無符號數,因此只補零。

Result = operandB >>> operandA; //錯誤示范, 無符號數算術右移也是補0
解決辦法是利用Verilog的內置函數$signed(),將被移位的操作數轉為有符號數類型。
Result = ($signed(operandB)) >>> operandA; //更正后

總結

1、如果對無符號數據進行移位,算數右移>>>和邏輯右移>>右移效果是等同的,就是把二進制數據向右移位,最高位補零;

2、如果想對有符號數據算術右移時,就直接使用>>>操作符。

3、對於操作a = b << c; 或 a = b <<< c; 如果a的位數大於b,會先對b進行有符號擴展,為了不搞混,建議a,b位數最好一樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM