参考学习《数字信号处理的FPGA实现》
思想如图:
在下半部分可以看到:是将N阶的数B bit,一位一位的移入LUT然后经过累加器。其中N个数需要2.^N次方长度的LUT,B bit表示需要B个时钟完成一个数据的所有的位。但是有个疑问,为什么在累加的时候寄存器Y要往右移一位(?????)。
在实际的程序中直接累加:(代码如下)
在此程序中:N = 4, B = 4;还有需要说明的是:在上述代码中,完成bit的时钟需要2个时钟,我将其分解。当然也可以合并为一个时钟周期。
如下图:
注:在代码2的截图中可以看出counter-2, 而代码1中counter-1, 原因是在代码1中,由y_r->y_m,之后等了一个时钟周期,即sum的值落后counter一个周期。
而在代码2中,y_r->y_m, y_m->sum的输出,即中间有二级触发器,即落后2个时钟周期。在仿真图中也可以看出。
已知的系数:x_0 = 3 , x_1=4 , x_2 = 6, x_3 =1
代码1仿真如下图:
验证:8*3 + 7 * 4 + 6 * 6 + 5 * 1 = 93
代码2仿真如下图: