推荐答案
测试一下
题目
假设输入信号X位宽为12bit,InA位宽为6bit,InB位宽为17bit,实现Y=X*InA+InB功能,并要求不损失精度,那么输出信号Y位宽应不小于(所有数据均为有符号数)
A. 12bit
B. 17bit
C. 19bit
D.18bit
参考答案与知识点
参考答案
我们分析题目:X位宽12bit有符号,InA位宽6bit有符号,InB位宽17bit有符号。实现Y = X * InA + InB,要求不损失精度,求输出Y最小位宽。
首先,X和InA都是补码有符号数。12bit有符号范围:-2048~2047;6bit有符号:-32~31。乘积最大绝对值:|X|max * |InA|max = 2048 * 32 = 65536。但注意有符号乘积位宽:12+6=18bit,但需包含符号位。12bit有符号乘6bit有符号,乘积位宽为12+6=18bit(考虑溢出时需19bit?)。实际上,有符号乘法结果位宽为被乘数位宽+乘数位宽,但有两个符号位,所以乘积位宽为12+6=18bit,且符号位保留一个即可。但最大值:-2048 * -32 = 65536(正数),需要17位表示(2^16=65536,范围0~65535,但符号需要?65536是2^16,17位有符号最大正数2^16-1=65535,所以不能表示65536,会溢出)。实际上,2048 * 31 = 63488,也在2^16内,但-2048 * -32 = 65536刚好超出16位无符号范围,但17位有符号可表示-65536~65535,所以乘积需要17位有符号?不对,有符号乘法结果位宽通常取两操作数位宽之和,即18位,足以表示所有可能值(因为最大绝对值小于2^(n+m-1)?证明:两个n位和m位有符号数乘积绝对值 ≤ (2^(n-1)-1)*(2^(m-1)-1) 近似2^(n+m-2),所以n+m-1位即可。但严格:最小负数乘最小负数得最大正数:-2^(n-1) * -2^(m-1) = 2^(n+m-2) ,这需要n+m-1位才能表示(因为2^(n+m-2) < 2^(n+m-1)),所以乘积位宽为n+m-1即可,但通常为了简化,直接取n+m位,会多一个符号位。很多资料说两个有符号数相乘,结果位宽为两数位宽之和,且符号位有一个即可,即结果位宽 = a宽 + b宽 - 1?实际上,综合工具如Vivado中,有符号乘法结果位宽默认为a宽+b宽。但严格数学上,最大范围:两个n位有符号数范围[-2^(n-1), 2^(n-1)-1],乘积范围:最小负数:(-2^(n-1))*(2^(n-1)-1) = -2^(2n-2)+2^(n-1);最大正数:(-2^(n-1))*(-2^(n-1)) = 2^(2n-2)。所以绝对值最大为2^(2n-2),需要2n-1位有符号表示(因为2^(2n-2)刚好是2^(2n-1)的一半,所以2n-1位有符号可表示的最大正数为2^(2n-2)-1,所以需要2n-1位才能表示2^(2n-2)?实际上2n-1位有符号数能表示的最大正数是2^(2n-2)-1,小于2^(2n-2)。所以需要2n位才能表示2^(2n-2)(因为2n位有符号最大正数2^(2n-1)-1 > 2^(2n-2))。所以乘积需要n+m位?但注意-2^(n-1) * -2^(n-1) = 2^(2n-2),若n=2, -2 * -2 =4,2n-1=3位有符号最大3,4无法表示,所以需要4位。所以乘积位宽应为n+m。考虑我们的n=12,m=6,乘积位宽18位。所以X*InA需要18bit有符号。
然后加上InB,InB是17bit有符号。加法时,需扩展符号位至相同位宽。18bit+17bit,结果最大位宽为max(18,17)+1=19bit(因为加法可能进位)。具体:两个有符号数相加,结果位宽为max(位宽1,位宽2)+1。所以最终Y位宽至少19bit。选项有12,17,19,18,所以选C.19bit。
注意:题目要求不损失精度,即需要能表示所有可能的结果。因此考虑最坏情况:乘积最大正数65536,加上InB最大正数2^16-1=65535,和为131071,需要17位有符号?2^16=65536,2^17=131072,所以131071刚好小于2^17,需要17位无符号,但有符号需要18位?因为17位有符号最大正数是2^16-1=65535,不能表示131071。所以需要18位有符号?但是要考虑符号位。实际上,Y = X*InA + InB,最小值可能:负的乘积加上负的InB,比如乘积最小-2048*31=-63488?但实际最小乘积为(-2048)*31=-63488或2048*(-32)=-65536,加上InB最小-65536,和最小-131072。所以范围[-131072, 131071]。这个范围需要18位有符号?18位有符号范围[-131072, 131071](因为-2^17=-131072, 2^17-1=131071)。刚好!但注意18位有符号能表示的最小是-131072,最大131071,所以刚好能表示。那为什么前面说加法需要max+1即18+1=19?因为18位加法进位到19位?如果乘积是18位,加数是17位,扩展后都是18位,加法结果可能产生进位到第19位(符号位变化)。比如乘积最大正数65536(18位有符号表示为0_10000000000000000?18位有符号表示65536:因为17位无符号最大65535,所以655
涉及知识点
- 综合