关于定点数的乘法和加法问题

2019-03-25 10:42发布

学习Verilog 有一段时间了,有个问题一个在困扰着我,我知道Verilog中只能处理0,1的数据,可是,我总是想在脑子里想把他们转化为10进制数,这就涉及到定点数的计算,比如我设计了一个滤波器模块输入的是有符号的定点数,比如a(15,12),15代表a的整个字长,12是表示小数的比特数,则用了15-12-1=2比特表示了整数,若 b也为(15,12),则c=a+b,在不考虑溢出的情况下,c的位宽至少要16个比特吧,则c(16,12)是后面12个比特表示小数么??如果c=a*b? 则c至少要15+15-1=29比特吧?那么c(29,24)?是后面的24比特表示小数么?,如果我要把c截断成(23,18),也就是取原来29比特的高23位吧?另外一种情况
若a,b位宽不一样,比如a(10,7),b(15:10),则计算a+b时,是不是要把a的尾部部3个零,以使小数点对齐?此时相当于a(13:10),b为(15:10),若此时计算a+b,则至少要16位,是吧?如果 a(10,7),b(15:10),做c=a*b 则不需要小数点对齐了吧?但是保存c,至少要10+15-1=24位吧?减1的原因是因为a,b都是有符号数,总共符号位有两位,所以要减少一位,但此时的小数点位置在哪里呢?是(24,17)是17位么?
我查看了很多Verilog教材,没有一个教材比较详细的讲了这些,不知道我说的对不对?请大侠看一下,谢谢了 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。