时光飞逝,十多年时间似乎只在一瞬间,从2012年首次出版《数字滤波器的MATLAB与FPGA实现》一书至今,已过去12年了。
十余年来,本书陆续出版了多个版本,每个版本的基本情况如下。
2012年3月:出版《数字滤波器的MATLAB与FPGA实现》,采用ISE14.7/VHDL/MATLAB环境编写,没有配套开发板测试内容。
2014年8月:出版《数字滤波器的MATLAB与FPGA实现(第2版)》,采用ISE14.7/VHDL/MATLAB环境编写,修改了第1版中的文字错误,增加了自适应陷波器内容,补充了配套程序文件,没有配套开发板测试内容。
2015年3月:出版《数字滤波器的MATLAB与FPGA实现——Altera/Verilog版》,采用Quartus II 13.1/Verilog HDL/MATLAB环境编写,没有配套开发板测试内容。
2017年9月:出版《数字滤波器的MATLAB与FPGA实现——Xilinx/VHDL版》,采用ISE14.7/VHDL/MATLAB环境编写,增加了配套开发板CXD301的板载测试内容。
2019年6月:出版《数字滤波器的MATLAB与FPGA实现——Altera/Verilog版(第2版)》,采用Quartus II 13.1/Verilog HDL/MATLAB环境编写,增加了配套开发板CRD500的板载测试内容。
Xilinx公司目前的主流器件为7系列器件,主流开发工具为Vivado环境,Verilog HDL语言在国内FPGA设计领域应用广泛,本书在《数字滤波器的MATLAB与FPGA实现(第2版)》的基础上进行编写,采用Vivado/Verilog/MATLAB开发环境,研发了基于Artix-7系列FPGA芯片的配套开发板CXD720,并在此平台上进行重新编写。此次改版主要涉及以下几个方面。
(1)采用Vivado/Verilog/MATLAB环境进行编写。
(2)对书中大部分实例增加了基于CXD720开发板的板载测试内容。
(3)调整了章节内容,由9章调整为12章。
(4)采用单独章节详细描述了FIR滤波器IP核的设计方法。
(5)简化了各种滤波器实例的仿真测试方法,更利于学习理解。
(6)修改了原版中的文字错误。
通常来讲,一名电子通信专业的技术人员,在从业之初都会遇到类似的困惑:如何将教材中的理论知识与实际中的工程设计结合起来?如何将教材中的理论知识转换成实际的电路?绝大多数的数字通信类教材对通信原理的讲解都十分透彻,但理论知识与工程实践之间显然需要一些可以顺利通过的桥梁。一种常用的方法是通过采用MATLAB等工具进行软件仿真来加深对理论知识的理解,但更好的方法是直接参与工程的设计与实现。
然而,刚毕业的工科院校学生极少有机会参与实际工程设计,工作中往往感到学校所学的理论知识很难与工程实践联系起来。数字通信类教材中多是讲解通信原理性的内容,即使可以很好地解答教材后面的习题,或者说能够熟练地推导书中的基本公式,在实际进行产品设计时,如何将这些理论知识用具体的电路或硬件平台实现出来,仍然是摆在广大工程师面前的一个巨大难题。尤其对于数字通信专业来讲,由于涉及的理论知识比较复杂,真正进行工程设计时才发现根本无从下手。采用MATLAB、System View等软件对通信理论进行仿真,虽然可以直观地验证算法的正确性,并查看仿真结果,但这类软件的仿真毕竟只停留在算法或模型的仿真上,与真正的工程设计及实现完全是两个不同的概念。FPGA技术很好地解决了这一问题。FPGA技术本来就是基于工程应用的技术,其仿真技术可以很好地仿真产品实际的工作情况,在计算机上通过了时序仿真的程序设计,几乎不再需要修改就可以直接应用到工程中。这种设计、验证、仿真的一体化方式可以极好地将理论知识与工程实践结合起来,从而提高读者的学习兴趣。
FPGA技术因其快速的并行运算能力,以及独特的组成结构,在电子通信领域已成为必不可少的实现平台之一。本书的目的正是架起一座数字通信技术理论知识与工程实践之间的桥梁,通过具体的设计实例,详细讲解从理论知识到工程实践的方法、步骤和过程,以便读者尽快掌握利用FPGA平台实现数字通信技术的方法。
目前,市场上已有很多介绍Vivado、QuartusⅡ等FPGA开发环境,以及Verilog HDL等硬件编程语言的书籍。如果我们仅仅使用FPGA来实现一些数字逻辑电路,或者理论性不强的控制电路设计,那么掌握FPGA开发工具及Verilog HDL语法就可以开始工作了。数字通信技术的理论性非常强,采用FPGA平台实现数字通信技术的前提条件是要对理论知识有深刻的理解。在深刻理解理论知识的基础上,关键的问题是如何利用FPGA的特点,找到合适的算法实现结构,厘清工程实现的思路,并采用Verilog HDL等硬件编程语言进行正确的实现。因此,想要顺利地读懂本书,掌握用FPGA实现数字通信技术的知识和技能,读者还需要对FPGA的开发环境和设计语言有一定的了解。
编著者在写作本书的过程中,兼顾数字滤波器的理论,以及工程设计过程的完整性,重点突出FPGA设计方法、结构、实现细节,以及仿真测试方法;在讲解理论知识的时候,重点从工程应用的角度进行介绍,主要介绍工程设计时必须掌握和理解的知识点,并且结合FPGA的特点进行讨论,便于读者尽快找到理论知识与工程实践之间的结合点;在讲解实例的FPGA实现时,不仅对所有实例给出了完整的Verilog HDL程序代码,而且从思路和结构上对每段代码均进行了详细的分析和说明。根据编著者的理解,本书针对一些似是而非的概念,结合工程实例的仿真测试加以阐述,希望能够为读者提供更多有用的参考。相信读者按照书中讲解的步骤完成一个个工程实例时,会逐步感觉到理论知识与工程实践之间完美结合的畅快。随着读者掌握的工程实践技能的提高,对数字滤波器理论知识的理解必将越来越深刻,重新阅读以前学过的滤波器原理时,就更容易在头脑里构建起理论知识与工程实践之间的桥梁。
第1章首先介绍了滤波器的基本概念、FPGA的基本知识,以及Xilinx公司的主要器件。该章在介绍了FPGA的发展历程后,对FPGA的基本工作原理及内部结构进行了简要说明。目前最大的FPGA厂家主要有Xilinx公司(2022年被AMD公司收购)及Altera公司(2015年被Intel公司收购)。两家公司有许多性能相近的产品,但所使用的开发工具无法通用。Xilinx公司作为FPGA的发明者及FPGA行业的领导者,通过不断应用尖端技术来长久保持其行业领袖地位。由于不同器件的结构不同,因此各有其合理的应用领域,为了提高设计性能并节约产品成本,了解器件基本特性,合理选择最终的目标器件显得尤为重要。该章最后对基于Artix-7系列FPGA芯片XC7A100T的配套开发板CXD720进行了简要介绍。为便于读者快速掌握数字滤波器FPGA设计方法,本书中的绝大多数FPGA实例均可直接在配套开发板上进行验证。
第2章首先介绍了硬件描述语言的基本概念及优势,并对Verilog HDL语言进行了简要介绍;然后对本书使用到的Vivado软件及MATLAB软件进行了简要介绍,重点阐述了常用MATLAB函数的使用方法。数字滤波器的FPGA设计与实现是一项将理论知识与工程实践紧密结合的技术,要求设计者不仅要十分清楚数字滤波器及数字信号处理的基本原理,还要掌握MATLAB软件的使用方法、Verilog HDL编程及FPGA实现技术。
数字信号在FPGA等硬件系统中实现时,由于受寄存器长度的限制,不可避免地会产生有限字长效应。工程师必须了解有限字长效应可能对数字系统带来的影响,并在实际设计中通过仿真来确定最终的量化位数、寄存器长度等内容。第3章在详细分析了字长效应在FPGA设计中的影响后,阐述了FPGA中常用的数的运算方法,并通过实例仿真分析说明运算过程中的有效数据位等基本概念。特别需要说明的是,从读者反馈的信息来看,虽然大多数问题是针对其他章节的实例提出的,但问题的本质不少都与数据有限字长效应有关。因此,建议读者详细阅读该章内容,并且深入理解FPGA中数的运算,以及有限字长效应对信号处理的影响。
从第4章开始,本书正式讨论各种数字滤波器的FPGA实现。FIR滤波器是数字滤波器中最常见、使用最广泛的一种。为便于读者深入了解FIR滤波器的设计原理及方法,该章首先简要讲述了与数字滤波器设计相关的基础理论知识,然后对常用的MATLAB函数设计方法进行了介绍,采用MATLAB软件设计出符合要求的滤波器系数后,还应采用Verilog HDL等硬件编程语言进行设计实现。根据FPGA的结构特点,具体实现FIR滤波器时有几种不同的设计方法,最后该章详细阐述了几种常用结构的设计方法。
Vivado提供了功能强大的FIR滤波器IP核,在了解FIR滤波器原理的基础上,利用IP核可以轻松设计出性能优良的FIR滤波器。第5章详细介绍了FIR滤波器IP核的设计方法,阐述了实现通带内增益为1的滤波器系数量化方法,通过实例讲解了系数可重载FIR滤波器的实现步骤。
第6章讨论了IIR滤波器的FPGA实现。IIR滤波器因其较高的滤波效率,适合在不需要严格线性相位特性的系统中使用。该章在介绍IIR滤波器的基本原理时,重点对IIR滤波器与FIR滤波器进行了比较,并对常用的5种IIR滤波器设计函数进行了介绍,比较了这几种设计函数的滤波性能。IIR滤波器的FPGA实现相对于FIR滤波器的FPGA实现来讲要复杂一些,主要原因在于其反馈结构,并且目前的FPGA设计软件并没有提供通用的IP核。该章详细阐述了IIR滤波器的FPGA实现过程,以及实现过程中需要注意的系数量化方法、计算输出数据位宽、MATLAB仿真等关键问题。
第7章主要介绍了多速率信号处理原理及CIC滤波器设计。抽取与内插是多速率信号处理的基础,读者需要从原理上了解抽取与内插的具体过程,及其对信号在时域及频域上的影响。抽取与内插操作本身十分简单,多速率信号处理的关键问题是如何有效地设计滤波器。CIC滤波器结构简单,没有乘法器,只有加法器、积分器和寄存器,适合在高抽样频率条件下工作。该章详细讨论了单级及多级CIC滤波器的Verilog HDL设计过程。
半带滤波器可以使2倍抽取的每秒乘法次数比一般线性相位的FIR滤波器减少近1/2,因此特别适合应用于转换率为2的整数次幂的系统。多级半带滤波器的设计关键在于合理确定各级滤波器的通带及阻带的频率及纹波系数。第8章讨论了半带滤波器的Verilog HDL设计方法,并详细讨论了多级半带滤波器的设计、仿真及板载测试过程。
第9章首先对自适应滤波器的概念、应用及一般原理进行了简单介绍,而后针对应用广泛的LMS算法原理、实现结构进行了阐述,并采用MATLAB软件对LMS算法进行了仿真验证。该章以LMS算法为基础,以通道失配校正系统为具体实例,详细阐述了通过FPGA实现自适应滤波器的步骤、方法及过程。
第10章继续讨论基于LMS算法的自适应滤波器设计,详细讨论了自适应天线阵、自适应陷波器的工作原理及Verilog HDL设计方法,给读者提供了更多的设计参考。在讨论上述不同自适应滤波器的FPGA实现过程中,该章分别对常规LMS算法、符号LMS算法进行讨论。自适应滤波器相对于经典滤波器来讲,在FPGA实现过程中,关键在于清楚掌握实现过程中各数据变量的变化范围,并以此确定各中间变量的数据字长及小数点位置,同时需要根据各运算步骤所需的运算量,合理分配各时钟周期内的运算量,提高系统的整体运算速度。
相对时域滤波器而言,变换域滤波器给出了一个全新的滤波器设计思路。一些在时域无法滤除的干扰信号,在变换域可十分容易地滤除。具体选择哪种滤波器,要根据输入信号的统计特征、滤波器实现的复杂度、运算速度等因素综合考虑。第11章首先对变换域滤波器的基本概念、快速傅里叶变换(FFT)、Vivado提供的FFT核等内容进行了简单介绍,这些知识都是进行变换域滤波器设计的基础。然后重点对变换域滤波器实现抗窄带干扰的FPGA设计与实现进行了详细讨论。采用变换域滤波技术实现窄带干扰滤除的原理并不复杂,在FPGA设计与实现过程中,难点在于准确把握各模块之间、各运算步骤之间,以及各信号接口之间的时序关系,并在设计中严格按照这些时序关系进行程序的编写。从该章的实例中读者可以进一步体会时序在FPGA设计中的重要性。
为了使读者对数字通信技术的FPGA实现有更完整的认识,第12章以一个较为完整的DPSK解调系统为实例,在简单介绍数字接收机、DPSK调制解调原理的基础上,详细讨论了整个工程设计的全过程,尤其对解调环路中的数字滤波器设计、载波环路的参数设计、FPGA实现细节进行了详尽的分析,并给出了具有指导意义的几个设计原则。可以看到,在整个工程设计过程中,滤波器仍然是解调系统的重要组成部分,其性能的优劣直接影响整个系统的性能。通过详细分析讨论,并动手设计整个DPSK解调系统,相信读者会对数字通信技术的FPGA实现方法、手段、过程有较为深刻的理解。
目前,世界两大FPGA厂商Xilinx和Altera的产品占据了全球90%左右的FPGA市场份额。可以说,在一定程度上正是由于这两家FPGA公司的相互竞争态势,才有力地推动了FPGA技术的不断发展。虽然HDL(硬件描述语言)的编译及综合可以采用第三方公司所开发的产品,如ModelSim、Synplify等,但FPGA器件的物理实现必须采用各自公司开发的软件平台,无法通用。Xilinx公司目前的主流开发环境是Vivado(Vivado只能开发7系列器件,7系列以前的器件只能采用ISE环境开发,读者可参考《数字滤波器的MATLAB与FPGA实现——Xilinx/VHDL版》了解ISE的开发方法),Altera公司目前的主流开发环境是Quartus系列套件。与FPGA开发环境类似,HDL也存在两种难以取舍的选择:VHDL和Verilog HDL。
如何选择HDL呢?其实,对于有志于从事FPGA技术开发的技术人员来讲,选择哪种HDL并不重要,因为两种HDL具有很多相似的地方,精通一种HDL后,再学习另一种HDL也不是一件困难的事。通常来讲,可以根据周围同事、朋友、同学,或者公司的主要使用情况进行选择,这样在学习过程中,可以很方便地找到能够给你指点迷津的专业人士,从而加快学习进度。由于Verilog HDL在国内应用更为广泛,本书采用Verilog HDL进行讲解,读者可参考本书的前两个版本了解VHDL的设计方法。
本书采用的是Xilinx公司的Vivado开发环境,采用Verilog HDL作为实现手段。由于Verilog HDL并不依赖于某家公司的FPGA产品,因此本书的Verilog HDL程序文件可以很方便地移植到Altera公司或国内各大FPGA厂商的FPGA产品上。当程序中应用了IP核资源时,由于各家公司的IP核是不能通用的,因此需要根据IP核的功能和参数,在另外一个开发环境上重新生成IP核,或者编写Verilog HDL代码来实现。
有人说过这样一句话:“技术只是一个工具,关键在于思想。”将这句话套用过来,对于本书来讲,具体的开发环境及HDL只是实现数字通信技术的工具,关键在于设计的思路和方法。因此,读者完全不必过于在意开发环境的差别,相信只要掌握了本书所讲述的设计思路和方法,加上读者已经具备的FPGA开发经验,那么采用任何一种FPGA开发环境都可以很快地设计出满足用户需求的产品。
本书讨论的是数字滤波器的MATLAB与FPGA实现。相信大部分工科院校的学生对MATLAB软件都至少有一个基本的了解。凭借其易用性及强大的功能,MATLAB软件已经成为数学分析、信号仿真、数字信号处理必不可少的工具。MATLAB软件具有专门针对数字信号处理的常用函数,如滤波器函数、傅里叶分析函数等。在进行数字滤波器设计时,采用MATLAB软件常常会起到事半功倍的效果。因此,在具体讲解某个实例时,通常会采用MATLAB软件作为仿真验证工具。在采用MATLAB软件对设计的电路进行原理性验证后,才开始使用Verilog HDL完成FPGA程序设计。
本书的大部分实例都给出了基于CXD720开发板的板载测试例程,这些例程可以直接下载到CXD720开发板上进行验证。为了更加直观地感受FPGA完成滤波器设计的效果,本书中大多数实例均采用示波器对滤波前后的信号进行测试验证。如果读者没有示波器进行波形测试,也可以采用Vivado提供的“在线逻辑分析仪”工具实时抓取CXD720开发板中的接口信号,验证滤波器的性能。虽然学习FPGA滤波器设计知识时,开发板不是必备的,可以通过仿真工具验证电路的功能,但还是建议大家配合CXD720开发板进行学习,以加深对滤波器设计的理解,提高设计效率。
限于篇幅,本书中部分实例的MATLAB或Verilog HDL程序代码没有全部列出,本书的配套程序资料上收录了本书所有实例的源程序及工程设计资源。读者可关注编著者的微信公众号“杜勇FPGA”免费下载配套程序资料。程序代码及工程文件按章节序号置于根目录下,读者可以将其直接复制到本地硬盘中运行。需要说明的是,在部分工程实例中,需要由MATLAB软件产生FPGA测试所需的文本数据文件,或者由MATLAB软件读取外部文件进行数据分析,同时FPGA仿真的测试激励文件需要从指定的路径下读取外部文件数据,或者将仿真结果输出到指定的路径下。文本文件的路径均在程序中指定为绝对路径,如fid=fopen('D:\FilterVivado\MultHalfBand\Int_Sin.txt','w')。因此,读者将FPGA工程文件或MATLAB程序复制到本地硬盘后,请修改程序中的绝对路径,确保程序能在正确的路径下读取文件。
有人说,每个人都有他存在的使命,如果迷失他的使命,就失去了他存在的价值。不只是每个人,每件物品也都有其存在的使命。对于一本书来讲,其存在的使命就是被阅读,并给读者带来收获。数字通信FPGA设计的系列图书,如果能够对读者的工作及学习有所帮助,就是编著者莫大的欣慰。
编著者在写作本书的过程中查阅了大量的资料,在此对资料的作者及提供者表示衷心的感谢。由于写作本书,因此编著者重新阅读了一些经典的数字通信理论书籍,再次深刻感受到了前辈们严谨的治学态度和细致的写作作风。
感谢电子工业出版社的大力支持,本书的出版使得我有机会在采纳广大读者反馈意见的基础上,修正以前版本中的不足之处,尽力使本书变得更加完善。
FPGA技术博大精深,数字通信技术种类繁多且实现难度大。本书虽尽量详细地讨论了FPGA实现数字滤波器技术的相关内容,但仍感觉到难以详尽叙述工程实现所有细节。相信读者在实际工程应用中经过不断地实践、思考及总结,一定可以快速掌握数字滤波器技术的工程设计方法,提高应用FPGA进行工程设计的能力。
由于编著者水平有限,书中难免存在疏漏之处,敬请广大读者批评指正。欢迎读者就相关技术问题与编著者进行交流,或者对本书提出改进意见及建议。建议读者关注编著者的微信公众号“杜勇FPGA”获取本书配套资料和相关信息;关注B站UP主“杜勇FPGA”观看编著者发布的FPGA数字信号处理设计相关教学视频。如需本书配套CXD720开发板,可到淘宝米恩工作室选购。
编著者
2024年6月