数字IC知识点总结(8)-带符号整数的运算

小数运算。

首先定点数就是用整数来表示小数。因为小数点是确定的,所以可以把小数点忽略不存储。对于无符号定点小数的加法和减法运算时,直接按照整数计算即可,小数实际上只存在在设计者心中。而乘法需要左移一个小数位的宽度,除法也可以不会管小数,毕竟小数点后面的尾数相同,就都等于成了一个十的负(小数位数)次方。放一个图大家就很好理解了

其实定点数真的很简单,所以我们来聊一聊浮点数。IEEE754中规定了多种浮点数精确格式,包括单精度双精度和扩展双精度。一般来说,单精度符号位1bit,阶码8bits,尾数23bits。高标准规定基数为2,阶码用移码表示,尾数用原码表示。数值的最高位默认是1,所以位数的表示范围比实际存储要多一位。如果阶码为0并且尾数也是0,那么这个数的真值为  。如果阶码是255并且尾数是0,马me这个数的真值为  。如果阶码是255并且尾数不是零,那么这不是一个数(NaN)如果觉得这段话云山雾罩(最近看相声看多了,老想这个词)的话,我就要请出第二幅图了

说完了IEEE754,就要好好说一说浮点数加减法操作

相较于定点数的加减直接做,浮点数的加减法不不能是简简单单的把尾数加一起就得了,要考虑阶码。浮点数加减法法的实现方法就是以绝对值大的数字为基准(为什么?因为在后面运算时要进行移位操作,较小数右移实际上就是在舍弃低位。要是让较大数左移不就舍弃高位了吗?),移动绝对值小的数字,然后做加减。所以我们设计的模块要比较大小,要选择减数和被减数,要选择符号,要选择阶码和符号还要移位尾数相加。设计如图:

这里,书中特别提醒了一下,由于上述加法是移位后再加,这里会有人这样写

assign y = x >> v ; 

这种写法是不可综合的,因为一般的assign语句中x和y都是可变的,但是v是不可以的!我们可以使用case语句来实现:

case v: 6'h00 : y <= x ; 6'h01 : y <= x >>1 ; …… 6'h31 : y <= x >> 8 ; default : y <= 31'h0 ; 

其实代码中default里面的内容,就是位置给到了0.这是因为阶数相差过大了,较小数不能影响较大数的运算了。

但是这种设计的工作时钟频率不会太高,所以我们进行优化,上流水,再进行优化。

说完加减说乘除,乘法其实很简单,尾数进行乘法运算,阶数进行加法运算。这里注意两件事:1.银行的首位“1”必须要加上。2.尾数是定点数的分数,需要注意结果的小数点的位置。浮点数乘法的主要结构是

#数字芯片设计#
全部评论
谢谢分享!
点赞 回复 分享
发布于 2022-03-28 21:25

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
评论
点赞
2
分享
牛客网
牛客企业服务