系列文章目录
文章目录
- 系列文章目录
- Verilog负数
- 负数运算原理
Verilog负数
reg寄存器是最常用的寄存器类型,这种寄存器中只能存放无符号数。如果给reg中存入一个负数,通常会被视为正数。
reg [8:0] a; //9位b
声明是有符号数要加signed,做加法或乘法时,对操作数扩位处理时高位补符号位;即负数补1,正数补0;
reg signed [8:0] a;a = -8'd1;a = 8'd1;
负数运算原理
正数5:0 0101
负数5:1 0101
那么如何进行加减乘除呢
计算中1-2会转化为1+(-2),减法转加法,乘法转加法和位移,除法转乘法再转换
我们看到如果直接用0 0101+ 1 0101 = 1 1010 (-10)
这样结果不是0
所以出现了反码:正数的反码不变,负数的反码是符号位不变,其他取反
这样 1 0101的反码是 1 1010
再计算 0 0101+ 1 1010 =1 1111,这样的话就需要用 1111111表示0.,不方便
于是出现了补码,正数的补码不变,负数的补码加1
1 0101的补码:1 1010+1 = 1 1011
0 0101+ 1 1011= 00000 (0),于是就可以用全0表示0了。
这样用补码计算出如果最高位是0,直接转正数就行
如果最高位是1,就是负数,要倒转回去(即+1,取反)