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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5511|回复: 5

[求助] 关于乘法器的累加移位实现

[复制链接]
发表于 2013-9-26 14:41:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近在学习Verilog,看的是特权同学的《深入浅出玩转FPGA》, 书中有个例程,关于乘法器设计的,一直没看明白,有没有高手帮忙分析一下。代码如下:
`timescale 1ns/1ps
module mult(clk,rst_n,start,ain,bin,yout,done);
input clk;
input rst_n;
input start;
input[15:0] ain,bin;
output[31:0] yout;
output done;

reg[15:0] areg,breg;
reg[31:0] yout_r;
reg done_r;
reg[4:0] i;

always @(posedge clk or negedge rst_n)

if(!rst_n) i <= 5'd0;

else if(start && i<5'd17) i <= i +1'b1;

else  i <= 5'd0;

always @(posedge clk or negedge rst_n)

if(!rst_n) done_r <= 1'b0;

else if(i == 5'd16) done_r <= 1'b1;

else if(i == 5'd17) done_r <= 1'b0;

assign done = done_r;

always @(posedge clk or negedge rst_n)

if(!rst_n) begin

yout_r <= 32'h00000000;

areg   <= 16'h0000;

breg   <= 16'h0000;

end

else if(start) begin
                if(i == 5'd0) begin

areg <= ain;


breg <= bin;


end


else if(i>5'd0 && i<5'd16) begin


if(areg[i-1]) yout_r <= {1'b0,yout_r[30:15]+breg,yout_r[14:1]};


else yout_r <= yout_r>>1;


end


else if(i == 5'd16&&areg[15]) yout_r <= yout_r[31:16]+breg;


end
assign yout = yout_r;
endmodul


我对这个乘法器的移位实现没看明白,如红色部分。有看懂的帮忙分析一下啊。
特别是语句yout_r <= {1'b0,yout_r[30:15]+breg,yout_r[14:1]}; 等式右边的长度只有31位,左边是32位,为什么仿真的结果没问题呢?
发表于 2013-9-26 16:21:25 | 显示全部楼层
代码我没仔细看啊,但是两边肯定都是32位的,因为yout_r[30:15]是16位的,breg是16位的加起来是17位了有一位是进位位
 楼主| 发表于 2013-9-26 16:33:23 | 显示全部楼层



verilog里会自动扩展进位吗?如果一个4bit数和一个5bit数相加结果是多少位呢?求教啊
发表于 2013-9-26 16:54:30 | 显示全部楼层
那只是一种算法,,你自己在纸上计算一下两个二进制的数相乘,认真琢磨下那运算过程,就可以理解那段代码了,,
verilog里会自动扩展进位,,一个4bit数和一个5bit数相加结果是6位,,但前提是你把结果赋值给一个大于6位位宽(包括6位)的变量,否则高数会不见。
 楼主| 发表于 2013-9-26 17:04:50 | 显示全部楼层
回复 4# gongwen


   多谢解答,学习了.
发表于 2013-10-5 21:08:35 | 显示全部楼层
这个问题问的太空泛了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-26 14:46 , Processed in 0.020986 second(s), 9 queries , Gzip On, Redis On.

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