关于硬件表达中的补码运算
2013-03-06 15:50
260 查看
parameter MAXVAL_c = 2**(10 -1);//2^9 parameter OFFSET_c = 2**(10); //2^10
$fdisplay(fft_rf, "%d", (fft_real_out_int < MAXVAL_c) ? fft_real_out_int : fft_real_out_int - OFFSET_c); $fdisplay(fft_if, "%d", (fft_imag_out_int < MAXVAL_c) ? fft_imag_out_int : fft_imag_out_int - OFFSET_c); //负数用补码表示
在这段代码中,我遇到了一个困惑,但是在随后的补码运算中,我明白了他的意思:
fft_real_out_int 是10 bits无符号数,在程序中规定最大值MAXVAL_c为2^9,
当 fft_real_out_int < MAXVAL_c 为真时,则按原来数据输出
当fft_imag_out_int < MAXVAL_c为假时,第十bit则出现了1,则按原数的补码输出
补码的计算是原码求反后加一,因为是无符号数,所以最高bit也求了反
例如:当数据为9bit无符号数时,该数的最大值为 1,1111,1111 =2^9 -1;
但是,一旦数据变成了:1,XXXX,XXXX这样的数据后,若要显示为asic码,因为最高位为1,数据由原本正数变成了负数,
所以需要以负数补码的形式来表示:补码= 反码 +1。这个运算可以在硬件上用2^9,即10,0000,0000减去1,XXXX,XXXX
这样便获得了补码
可以这么计算:数据1,1101,0010大于01111,1111,要求数据的补码
可得:0,0010,1101+1=0,0010,1110
当用10,0000,0000减去1,1101,0010有
10,0000,0000
-01,1101,0010
--------------------
00,0010,1110
效果是一样的。
相关文章推荐
- 关于补码运算原理
- 关于补码以及基本的补码运算
- 关于该死的原码和补码的关系 以及为什么计算机中使用补码作为运算的码种
- Pharmaceutical的同学们都看过来,关于补码运算的复习相关内容
- Java 中关于原码,反码,补码的问题及常用的逻辑运算
- 从二进制补码到十进制补码及其内的运算——关于补码的一点学习
- 关于位运算
- Java Notes: 关于时间、日期表达的类
- 关于原码,反码,补码和左右移位的若干思考
- 关于BigDecimal类型在jsp页面中进行除法运算问题
- 整数编码及运算-补码的探究等
- 为什么计算机中使用补码来表示与运算
- 关于补码(转)
- 关于配置SmartConfig导致ESP8266频繁硬件复位的问题
- 位运算详解(原码<-->反码<-->补码)
- 关于补码,原码,反码的思考--嘟嘟胖
- 关于补码的概念
- 关于负数的补码
- 关于2的补码(转载)
- 二进制数的补码及运算(1)