完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 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个回答
|
|
在什么地方累加,加到什么位置,都是可以自己定义的。关键你要明白累加的原理。
|
|
|
|
谢谢提供好东西
|
|
|
|
|
|
|
|
好东西,一定学习一下
|
|
|
|
这个地方我也是看了好久没有看懂,后来灵光一闪,还是特权聪明 啊。
这个地方是这个意思 1,你想i ==1 的时候第一次加法,那个加数最后一位后面是不是有14 个0呢?这个很容易看懂吧。当i==2的时候呢,第一次加进去的那个数最后一位后面是不是只剩下了13个0呢?。。。。。。。。。。。到了i==15的时候第一次加进去的那个数最后一位是不是抵达了最后一个bit。呵呵,所以特权说了他是先加再移位,我们只是想着先移位再加。所以理解不了。 2,最后一个bit不能再移位了,i==15的时候第一个加数到了最后一个bit 了。这i==16的时候就是我们蠢人能看懂的思维方式加进去的。 |
|
|
|
请问 15位加15位 为什么是17位? |
|
|
|
好资料 ,谢谢无私分享!
|
|
|
|
谢谢分享,继续努力
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求FPGA 驱动控制ltc2271 或者 ltc2180 或者 ltc2190或者 ltc2202 的代码
1320 浏览 0 评论
417 浏览 0 评论
求助:遇见诡异问题,FPGA模块A输出端口连接模块B输入后,模块A不能正常工作的
1473 浏览 1 评论
475 浏览 0 评论
1431 浏览 1 评论
4293 浏览 95 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-17 03:33 , Processed in 1.514813 second(s), Total 87, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191