天天看点

数字设计中的小数处理——在加法与乘法运算中

先提两个问题:

【1】 数字设计中小数的处理

【2】 加法器、乘法器中输出数据的位宽问题

1、有符号数和无符号数的定义,最高位表示符号位,其他位为数据位。无符号数则没有符号位;

2、有符号数和无符号数转化为10进制表示的时候唯一的区别就是最高位的权重不同,这里的负数的表示与3中的表示不相同,这里的每一个位都具有权值,只不过最高位(即符号位)也是参与到权值贡献中,且其表示的为负值;

举例:如4bit二进制若表示有符号数,则表示范围为:

-8 ~7

,即

1000 ~0111

,若表示为无符号数,则表示范围为:

0~15

,即

0000 ~ 1111

3、计算机中负数的表示方法:采用补码。即负数表示时,除去符号位之外,将数据位先进行取反码操作(按位取反),再作补码操作(反码基础上加1);

NOTE:2、3两种表示有符号数的方式不同。

4、数的位扩展——符号位扩展

基于2中的数据表示方法,为了确保数据大小不变,对数据进行位扩展时,应该对符号位进行扩展;

2019.10.10

实际上,方式2中的方式就是以补码的方式操作的,这时,若要计算出该补码对应的十进制数,

有两种方式:

一,权值法,最高位权值为负;

二、返回原码进行判断(原码至反码的逆操作,同样是先按位取反,然后再加一)。序号 2中采用符号位带负权值的方法,只是有助于人为去计算该code表达的十进制数值是多少。

5、定义:

 1、mQn是一个有符号数,最高位为符号位;

 2、mQn数据的总位宽为m;

 3、mQn数据的小数位宽为n;

则:

M位宽整数表示范围:位宽为m的无符号整数的数据范围为

0~2^(m)-1

位宽为m的有符号整数的数据范围为

-2^(m-1)~2^(m-1)-1。

有符号小数表示范围:mQn格式数据的数据范围为

-2^(m-n-1)~ 2^(m-n-1)-1/2^n

6、两个有符号数的和

两个有符号数相加,为了保证和不溢出,首先应该把两个数据进行扩展使小数点对齐,然后把扩展后的数据继续进行一位的符号位扩展,这样相加的结果才能保证不溢出。

  举例:现在要把5Q2的数据5’b100.01和4Q3的数据4’b1.011相加。

Step1、由于5Q2的数据小数位只有2位,而4Q3的数据小数点有3位,所以先把5Q2的数据5’b100.01扩位为6Q3的数据6’b100.010,使它和4Q3数据的小数点对齐

Step2、小数点对齐以后,然后把4Q3的数据4’b1.011进行符号位扩展成6Q3的数据6’b111.011

Step3、两个6Q3的数据相加,为了保证和不溢出,和应该用7Q3的数据来存储。所以需要先把两个6Q3的数据进行符号位扩展成7Q3的数据,然后相加,这样才能保证计算结果是完全正确的。

7、两个有符号数的积

  两个有符号数相乘,为了保证积不溢出,积的总数据位宽为两个有符号数的总位宽之和,积的小数数据位宽为两个有符号数的小数位宽之和。简单来说,两个4Q2数据相乘,要想保证积不溢出,积应该用8Q4格式来存。这是因为4Q2格式数据的范围为:

-2~(2-1/2^2)

,那么两个4Q2数据相乘积的范围为:

(-4+1/2)~4

,而8Q4格式的数据范围为:

-8~(8-1/2^4)

,一定能准确的存放两个4Q2格式数据的积。

  结论: mQn和aQb数据相乘,积应该用(m+a)Q(n+b)格式的数据进行存储。

继续阅读