<深入浅出玩转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; //累加不移位

还是没有理解到,能不能麻烦特权大哥空闲的时候能够给予解惑啊!?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。