微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于流水线有符号乘法器,求教

关于流水线有符号乘法器,求教

时间:10-02 整理:3721RD 点击:
今天闲的无聊,用几个加法器写了个三级流水线的无符号乘法器,后来想输入增加一位符号位搞成有符号乘法器,数学太渣,苦于没有捷径,就写了个有符号乘法器的顶层,总的思想是先求两个有符号数的输入数据的补码,输入我的无符号数乘法器,得到的结果,再取补码,得到补码结果,前面再扩展一个单独异或计算的符号位,就得到了最终结果。是不是很蛋疼我没怎么写过底层运算,求各位大神给点比较通用,又比较简单的流水线有符号乘法器写法。

个人理解,这是正、负数的底层表示问题。正数不变,负数则将正数按比特取反并加1得到,之后的运算就无有符号数和无符号数之分了。至于最后的输出,无论是编译器或仿真器都会正确的显示出来,前提是格式化语句得写对了。
对于你的问题,你只需将无符号乘法器的两个乘数的bit位扩展一位,仍按照无符号数来就行了,正负数的转化及显示实际上软件都已经帮你做好了。

先说你的乘法器吧,底层的设计上你不用关心正负数,你只需关心位宽,比如你要设计16位的有符号的乘法器,那你的输入位宽得设计成17位,拷贝最高位(符号位),乘法操作就是加法的叠加,基本的方法就是用乘数的每一位去和被乘数进行与逻辑,再把得到的部分积相加,这样需要做的加法的次数就是你乘数的位宽,然后你在进行流水的划分,这是最基本的,其实你可以采用编码技术,对乘数编码后,可以减少做加法的次数,还可以采用WALLCE树压缩,最后只需做一次加法,超前进位加法器就不用说了。
    再说你的正负数问题,你只需开始进行一个判断处理就行,正数不用管。负数的话取补码再进入乘法器运算,补码的方式就是取反加一,取反好办,但加一操作可能会影响你的流水线,也不不希望这样的预处理,一种方式你可以把加一操作累加到后续处理,你自己可以想象怎么累加,还有一种方式你可以在最低位后补一个1,这样一加就相当于在原数的最低位加了一个1了,其他的你再自己好好想想,可以设计个性能更高位宽更大的!


小编 请问有哪些提高乘法器精度的办法 我只有一个时钟就要出结果



   全组合逻辑,1拍就出结果,但是跑快了不行。

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

网站地图

Top