FPGA时序逻辑延后一个周期怎么解决

2019-07-15 21:25发布

大神求救!我现在想要用FPGA实现一个数与一个数组(宽度为64)数相乘,累加,再取平均,用的是时序逻辑加上非阻塞赋值的方法实现,即从数组0开始相乘,一直到数组63,当乘完63时,将累加的数取平均输出,但问题是,最后数组63相乘这一步就是没有实现,我看网上说是时序逻辑会延后一个时钟周期导致最后一步没有加上,我试着将程序中timer==7‘d63改为timer==7‘d64,最后一个就加上了,但这样的话,新的问题又来了,我希望64个周期算完的,却要65个周期,这要什么方法解决这个问题?
程序.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
chenwei6991627
1楼-- · 2019-07-15 21:56
 精彩回答 2  元偷偷看……
reallmy
2楼-- · 2019-07-15 23:25
M0<= U_M0/64这句话用 assign M0 = U_M0[25:6]; 这样M0就会提前一拍了。。
fpga中基本不用除法,你这个除以64可以用截位来代替。fpga中没有数组的说法,你这个是c语言的思路了!
行修者
3楼-- · 2019-07-16 04:23
chenwei6991627 发表于 2017-9-13 13:13
怎么没有看到timer的初值啊

这是不完整的程序,我只截取了其中一部分,timer的计数我用另一个always过程块完成了
行修者
4楼-- · 2019-07-16 05:46
reallmy 发表于 2017-9-14 11:38
M0

你好,如果除数是有符号数且是负的,那直接用移位得到的结果就是错的,这时候如果不用除法的话,是不是的用IP核了,还是还有什么方法代替除法操作?
zhq420923
5楼-- · 2019-07-16 09:27
将AD_SIN和U_M0用assign语句输出;带符号数也可以用移位的,左移<<< ;右移 >>>
sdulele
6楼-- · 2019-07-16 15:12
用assign语句输出,可提前一周期。不建议直接除法,除法可以用截位来实现

一周热门 更多>