问题描述
在vivado中使用复数乘法器IP核时,使用modelsim仿真看计算结果,发现了如下的情况:
图中,clk是IP核的工作时钟,result是乘法的计算结果,×代表计算结果不对,√表示计算结果正确,valid是IP核产生的输出结果有效信号(高有效)。
在一个时钟内,输出的结果先是算不对,然后又算对了。而我期望的波形如下:
问题分析
- 如果是输入的两个乘数没有按照自己想要的顺序对齐,即使算错,也应该是以时钟为单位错,不能是在一个时钟内先错后对。
通过更改代码,使得两个乘数串位,发现上述问题依旧存在,故排除该问题。 - 怀疑是乘法器配置的问题,有可能影响的只有signed usigned选项。
排列组合输入数据的signed usigned选项,上述问题依旧存在,排除该问题。 - 怀疑是输入数据的问题,目前输入的两个乘数,一个是1-48的递增,一个是5位数的负数,把两个乘数都换成1-48的递增,上述问题解决了,但是没懂,为啥负数就会导致计算错误。
- 把乘法器使用的资源从dsp48改为lut,计算结果正确。
反复确认操作4,发现,使用lut时,计算结果就正确,使用dsp48时,计算结果就会先错再对。