全频阻塞干扰 发表于 2013-4-4 18:10:24

关于signed的小数和unsigned的小数进行乘法运算,我有点糊涂


我一直对于verilog中各种signed unsigned 的运算不是很明白,带上小数后更是如此。

我想请教一下大家verilog中 signed小数 和 unsigned小数 进行乘法运算的问题

比如我有一个signed类型的数据A=-1.7,一个unsigned类型的数据B=+0.3。
A的整数部分用2-bit表示,小数部分用4-bit表示,那么A的二进制为6’b11_1011
B的整数部分用2-bit表示,小数部分用3-bit表示,那么B的二进制为5’b00_010

我想直接调用Quartus II 里面的乘法器来完成A*B运算,但是IP里面并不能单独指定数据输入端口是signed还是unsigned的,只能选择这个这个乘法器是signed还是unsigned,那这个IP的意思是它只能进行 signed × signed或者 unsigned × unsigned 的运算。

这种情况下我是在unsigned类型的数据B的最高位之前再补充一个0,让它从unsigned的5’b00_010变成signed的6’b000_010数据。然后再送入乘法器IP中进行运算,这时输出为12-bit的signed数据C。

以下为modelsim仿真截图,红圈部分即为(-1.7)*( +0.3)


最终结果为12’b111111110110。因为A的整数部分用了2-bit,B的整数部分扩展后用了3-bit,那么我把乘积结果的高5-bit截取作为整数部分,11111相当于-1
低7-bit作为小数部分, 1110110相当于0.921875。

那么最终结果为(-1.7)*( +0.3)= -1.921875。

这个误差也太大了吧,是我中间什么地方出问题了吗?
请教下大家。
页: [1]
查看完整版本: 关于signed的小数和unsigned的小数进行乘法运算,我有点糊涂