本来以为算术右移">>>"一定会保留符号位的,但今天用modelsim仿真时遇到一个很奇怪的问题。
算术右移有时会保留符号位,但有时却补零,具体何时会出现哪种情况没仔细研究过。
解决办法:当用到算术右移时,将操作数定义为有符号数。对于使用其他操作符运算时,同样如此。
在看了Verilog标准后发现:
有两种移位操作,逻辑移位(>> and <<)和算术移位(>>> and <<<)
对于左移操作,<< and <<<,空位均补零。
对于右移操作,<<补零,当<<<左边操作数为unsigned时补零,为signed时补符号位。
Verilog中reg和wire默认为无符号数,integer默认为有符号数。