<深入浅出玩转FPGA>实例5 MUX16乘法器实验问题

2019-07-16 01:41发布

本帖最后由 xiaopinglove 于 2013-4-28 12:07 编辑

//------------------------------------------------
//专用寄存器进行移位累加运算
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
   areg <= 16'h0000;
   breg <= 16'h0000;
   yout_r <= 32'h00000000;
  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[30:15]+breg,yout_r[14:1]}; //累加并移位
     else yout_r <= yout_r>>1; //移位不累加
    end
   else if(i == 5'd16 && areg[15]) yout_r[31:16] <= yout_r[31:16]+breg; //累加不移位
  end
end


最近学习视频的时候在做这个实验的时候,虽然有视频讲解,但是还是没能明白这个乘法器所实现的关键操作,关键就是这一部分
   else if(i > 5'd0 && i < 5'd16) begin
     if(areg[i-1]) yout_r = {1'b0,yout[30:15]+breg,yout_r[14:1]}; //累加并移位 //为什么把数都累加到中间的17位呢?
     else yout_r <= yout_r>>1; //移位不累加   //为何又是右移呢?
    end
   else if(i == 5'd16 && areg[15]) yout_r[31:16] <= yout_r[31:16]+breg; //累加不移位

还是没有理解到,能不能麻烦特权大哥空闲的时候能够给予解惑啊!?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
清霜一梦
2019-07-16 17:12
这个地方我也是看了好久没有看懂,后来灵光一闪,还是特权聪明 啊。
这个地方是这个意思
1,你想i ==1 的时候第一次加法,那个加数最后一位后面是不是有14 个0呢?这个很容易看懂吧。当i==2的时候呢,第一次加进去的那个数最后一位后面是不是只剩下了13个0呢?。。。。。。。。。。。到了i==15的时候第一次加进去的那个数最后一位是不是抵达了最后一个bit。呵呵,所以特权说了他是先加再移位,我们只是想着先移位再加。所以理解不了。
2,最后一个bit不能再移位了,i==15的时候第一个加数到了最后一个bit 了。这i==16的时候就是我们蠢人能看懂的思维方式加进去的。

一周热门 更多>