说明:
由于网易已停止博客服务,读者无法查阅我的网易博客日志,近期将逐步将网易博客中的典型问题交流情况在CSDN博客中发布出来,敬请关注!
杜老师您好,我买了《数字滤波器的MATLAB与FPGA实现 Altera/Verilog版》一书,一些问题恳请杜老师解答一下。
在第七章第三节 自适应均衡器的FPGA实现这一部分中:
1、在7.4.3节 1.确定运算字长及数据截位方法中
由e3(n)到W3(n),为什么中间变量小数点关系没有变化,不是需要乘步长因子u吗?
2、同样在该节 2.计算时钟频率并分配各步骤所需的时钟周期中
为什么要进行时钟周期分配, 并且如何在Verilog程序中实现出的
3、在自适应均衡器的设计中,杜老师有分模块化的程序吗? 只有一个Equalizer.v文件看着有些吃力,程序中截位也没有看懂,似乎和前面分析的不太一样。
回复:
1) 符号LMS算法有两种形式,见书中式(7-14)\(7-15),两种形式都能够正常工作;
2) 式(7-23)中表示校正算法用的符号算法,与FPGA程序实现时的算法没有对应起来,这是书中的失误,在新版中将进行更正为以实例实现为准;
3) 图7-19中的e3(n)到w3(n)没有变化,是指在计算e3(n)时没有计算u的乘法运算,在计算w3(n)时才计算u的算法;
4) p251是,Error=E_out[20:5]只是取高16比特,符号算法只取其符号,实际上只与最高位(符号位)相关;后续计算DW时采取对Xin_Reg右移7位的方法,实现乘以1/128的运算。由于Xin_Reg的符号位在bit15与bit14之间,DW的符号位在bit14与bit13之间,因此将Xin_Reg赋值给DW时本身需要右移1位。这样,相当于对赋值后的Xin_Reg再右移6位。由于式(7-23)中,计算dw时是乘以2u,因此程序中的u值实际上是1/128。
5) 为什么要进行时钟周期分配,因为lms算法决定要求在一个数据采样周期内完成权值更新。Verilog中的触发器串联级数就是运算周期数,请参考verilog语法方面的教程。
6) 在改版中,我会考虑将这个文件用多个模块来写,便于理解。
7) 请先理解算法原理,理解书中第3章关于数字运算处理的内容,便于理解算法的实现。
8)感谢您的问题,让我发现书中几处勘误。
祝愉快