请问DC综对“*”综合出的乘法器可以是补码乘法器吗?
静待高手指点!
求助啊啊啊啊
就没人知道吗?依然静待高手出现!
表示期待结果。
$signed(a)*$signed(b)
综合结果就是有符号数
请问一下,这里的a,b是什么类型的数据呢,综合出来是补码乘法器吗,还是别的,看这个表达式不像,这个表达式跟先对ab求原码,再乘法,再求补码是不是一样的效果呢?
不是都是补码表示的吗
a,b就是补码形式的有符号数。
6#所说的公式里面a和b可以是reg wire 甚至是port。verilog2001里面这些东西都可以声明是有符号的。例如 reg signed [7:0] a. 这样a就被认为是一个有符号的如果a和b都被声明为有符号的则 c=a+b。这个加法计算就被认为是有符号计算,也就是补码计算。如果a或b其中一个声明时没有加signed标记,即默认为无符号的,则a+b就按照无符号加法来算。此时如果要进行有符号加法就需要在计算中强制声明,像6楼那样。
6#所说的公式里面a和b可以是reg wire 甚至是port。verilog2001里面这些东西都可以声明是有符号的。例如 reg signed [7:0] a. 这样a就被认为是一个有符号的如果a和b都被声明为有符号的则 c=a+b。这个加法计算就被认为是有符号计算,也就是补码计算。如果a或b其中一个声明时没有加signed标记,即默认为无符号的,则a+b就按照无符号加法来算。此时如果要进行有符号加法就需要在计算中强制声明,像6楼那样。
奥,原来verilog还能这么用,谢谢。
还有一个疑问,也是关键的问题。如果是乘法呢,我用signed定义的两个数a和b,如果a*b的话综合出来是补码乘法器吗,望指教,谢谢啊。
一样的。只要操作数都是有符号的这个操作就被认为是有符号运算,乘法和加法一样 都是运算嘛。像是复杂运算类似于a+b*c。如果要这个运算是有符号运算的话就要保证abc都是有符号的,如果有其中哪个是无符号的就要声明一下。 比如 如果a本来没有声明为有符号则 $signed(a)+b*c
非常感谢,我去试一下,但愿这里的补码乘法器不是先对补码求原码,然后经过乘法器,然后结果再求补码。
补码是人为的理解,你可以认为是2补码,也可以认为不是。要想出来的结果是2补码,输入也应该是2补,就酱紫
普通的乘法器,就算输入的是2补码,可是它不知道是2 补码,只会把它当做普通的数据来运算,所以就算输入是2补,输出的数据也应该是不正确的,现在流行的乘法器设计方法一般是booth-wallance树型乘法器,这种一般都是补码乘法器,进行符号位扩展之后无符号数也可以利用这种乘法器。
可现在的问题是这种乘法器设计比较麻烦,浪费时间,不知道DC有没有这样的内核什么的,或者说经过什么设置之后会将*综合成为补码乘法器呢?
前面有人说用signed定义数据之后,然后再用*,便可以综合成为补码乘法器,对此有点小怀疑,先试试再说,这个仅仅经过仿真,应该就可以验证对错了。
谢谢小编回复。
designware有个DW02_mult,试试看就知道了
不好意思啊小编,这个模块在design vision的什么位置,如何找呢?
DW乘法器IP当输入端TC=1的时候就是有符号数的输入。
补充一下,只有verilog2001才支持有符号数。
谢谢啊,再请教几个问题。
DW里的乘法器是补码乘法器吗,输入是补码,输出也是补码?
还有DW是不是需要买啊,不是有DC就会有DW吧?
我用的是design vision,不知道这个DW如何找啊?
小编试过了没?结果怎么样?
要综合成补码的话,就直接把相乘的两个数都定义成signed
我试过了,,综合后的仿真通过,从面积和速度上都比我以前求补码乘法的结果优,而且这种写法超简单,延时在20ns左右,不知道还有没有更好的方法
学习了
