FPGA学习笔记(十三)负数运算

系列文章目录


文章目录

  • 系列文章目录
  • 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,取反)

你可能感兴趣的:(FPGA学习,fpga开发,学习,笔记)