微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请问DC综对“*”综合出的乘法器可以是补码乘法器吗?

请问DC综对“*”综合出的乘法器可以是补码乘法器吗?

时间:10-02 整理:3721RD 点击:
请问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左右,不知道还有没有更好的方法

学习了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top