在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2523|回复: 4

[求助] 请教一个关于乘法的FPGA实现问题

[复制链接]
发表于 2017-3-25 21:07:04 | 显示全部楼层 |阅读模式
200资产
代码如下:module multiplier(
   input clk,

input [5:0] din,

output reg [11:0] dout
    );

reg [7:0] din_reg;



always @ (posedge clk) begin
   din_reg <= din;
end

always @ (posedge clk) begin

dout <= din_reg*36;
//
dout <= din_reg<<5+din_reg<<2;
end

endmodule


问题是:
   有大神说当一个不确定数和一个确定数相乘时,应采用分解法,这样可以有效
节省设计资源,提高设计频率;
   然而,通过综合我发现,用分解法综合后占用的LUT比不用更多,系统最大频率比不用更低。

请大神指教:是不是我上面的试验设计的有问题,还是有其他原因?

最佳答案

查看完整内容

你分解法的表达式有问题。 因为,运算符“+”优先级比“
发表于 2017-3-25 21:07:05 | 显示全部楼层
你分解法的表达式有问题。
因为,运算符“+”优先级比“<<”高,你的表达式相当于:
dout <= (din_reg <<(5+din_reg)) << 2;
应该写成:
dout <= (din_reg<<5) + (din_reg<<2);
这样写和 dout <= din_reg*36 比; 综合出来应该一样吧。
发表于 2017-3-27 09:02:09 | 显示全部楼层
乘法器默认调用了DSP单元吧?
发表于 2017-3-27 10:08:27 | 显示全部楼层
*36这种简单的乘法未必会调DSP,除非你特别指定了用DSP.
dout <= din_reg<<5+din_reg<<2;
这个写法可能有点问题,
写成
reg [5:0] din_reg;
dout <= {din_reg, 5'b00000}+{din_reg,2'b00};
编译结果应该是一样的,常数如果比较复杂,FPGA实现时还是用DSP,除非DSP资源很紧张。FPGA和ASIC不一样,资源是在那里的,不用也是浪费。
 楼主| 发表于 2017-3-29 13:41:43 | 显示全部楼层
回复 4# 加油99
多谢指教 指出错误
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 09:59 , Processed in 0.017327 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表