verilog signed to unsigned offset binary

背景

有符号数据的最高bit 是 符号位,通常有符号数据都用补码来表示。补码就是该数绝对值的原码取反 再加1 得到,取补码的原因是为了把减法操作变成加法操作,便于电路实现。

但是在HDL语言中处理有符号数据比较麻烦,HDL更习惯于无符号数据,无符号数据的补码就是其原码,不需要任何转换。因此在需要做有符号数计算的时候,通常会把有符号数转换到无符号数,计算完成之后再转换到有符号数据。这样就可以避免对补码进行操作。

转换方法

原理

比如对8bit 数据来说,有符号数据的范围是-128 - 127,无符号数据的表示范围为0-255,实际上就是多了128的偏移,因此可以将有符号数整体偏移后 参与后续处理,其数据范围并没有改变。在后续DSP处理完成之后再转换到有符号数据即可。

有符号数转无符号数 offset binary

下面是8bit数据的转换,整体加上8‘h80 即可实现转换。比如8’h80 + 8’h80 = 8’h00,其中产生的进位由于位数原因会自动丢弃。

assign id_unsigned = id_signed + 8'h80;//二进制补码转换到 offset binary convert

十进制补码转换后
-1288’h808’h00
-1278’h818’h01
-1268’h828’h02
08’h008’h80
1268’h7e8’hfe
1278’h7f8’hff

offset binary 无符号数转有符号数

与上述转换相反,整体减去8‘h80 即可实现转换。为了避免减法的出现,我们可以做如下操作

assign id_signed = id_unsigned<8'h80 ?(id_unsigned + 8'h80) : id_unsigned[7:0] ;//offset binary convert to 二进制补码

进行上述操作后,符号位就被轻松做了化解,这在ADC/DAC等数据处理应用中十分有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值