当前位置:   article > 正文

verilog移位、取绝对值_verilog取绝对值

verilog取绝对值

问题:负数右移之后符号位还是最高位吗?-128右移7位

解答:

(1)逻辑右移(>>)时,不考虑符号位,每右移一位,左边补一个零(设计时可人为标记符号位的位置);

(2)算数右移(>>>)时,考虑符号位,每右移一位,左边补一次符号位。

所以,a = 9’d-128  //1_1000_0000

reg [8:0] b; //设计时,知道b的实际有效位数为2,也可直接reg[1:0]b,此时逻辑右移后符号位也正确

b = a >> 7 结果为3;   //0_0000_0011

b = a >>> 7 结果为-1。  //1_1111_1111

续:之后再取绝对值,方法一致吗?

取绝对值操作:

reg [7:0] d_a;

always@(*)

begin

    if(a[8])  //符号位,无论是>>还是>>>,只要设计者找到正确的符号位作为条件,即可带入该代码得到正确的绝对值;移位之后正确的符号位是b[1]

        d_a = 1+(~a[7:0]);

    else

        d_a = a[7:0];

end

文章仅作为个人思路整理,如有不足欢迎批评指正

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/453961
推荐阅读
相关标签
  

闽ICP备14008679号