如何在FPGA中将AD输出的无符号数据转换为有符号数据

☞☞☞原文链接,点击打开

     AD模块没有配置成补码输出,而是将输入的有正有负的模拟信号加上偏置变成全正信号,使12位AD输出为无符号12位整数(范围[0,4095]),而AD后面接的数字下变频芯片GC2012B则要求12位补码(two's complement,范围[-2048,2047])输入!

 

    系统中几乎所有的重要组件都与FPGA相连,所有重要数据连线都通过FPGA,只要在FPGA里动点手脚就行。


       既然输入系统的有正有负的模拟信号加上了偏置变成全正信号才输入AD的,那就把AD的输出减去一个正数,并以补码形式传给GC2012B不就行了吗?我想,就减去2048吧,这样就把AD输出的范围从[0,4095]转换到了[-2048,2047],只要在FPGA里做一个以补码形式输出的减法器就可以了。但是想了想,发现根本不需要什么减法器,用一个极其简单的电路即可完成这项功能,电路的代码如下:

module   uint2sint(
        input   [width-1:0]  ui,
        output   [width-1:0]  si
);

        parameter   width=12;
       
        assign   si[width-1]=~ui[width-1];
        assign   si[width-2:0]=ui[width-2:0];

endmodule


    其实就是将最高位取反,其余不变。为什么这样就能实现减2048的效果呢?假设把输入信号左边添个0变成13位数值,而-2048的十三位补码为1 1000 0000 0000,将这个数与输入数值相加,自然就等效于ui[11]取反了。



有符号数转变为无符号数的方法:

                

8BIT:  有符号 -128~~~128

        +128

      无符号  0~~~~256


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值