前言
为什么要写这本书
弹指一挥间,匆匆近十年。从2011年我开始编写《数字滤波器的MATLAB与FPGA实现》(“数字通信技术的FPGA实现系列”图书的第一册),至今已有十余年!
在这十余年间,我先后完成《数字滤波器的MATLAB与FPGA实现》《数字通信同步技术的MATLAB与FPGA实现》《数字调制解调技术的MATLAB与FPGA实现》三本图书的编写。这三本图书都是基于Xilinx公司的FPGA和VHDL(简称Xilinx/VHDL版)编写的,后来又都基于Altera公司的FPGA和Verilog HDL(简称Altera/Verilog版)进行了改写。
“数字通信技术的FPGA实现系列”图书出版后,得到了广大读者的支持与厚爱,为了与读者进行更加有效的交流,我在CSDN开设了个人博客,并开设了个人微信公众号“杜勇FPGA”,用于发布与图书相关的信息,同时与读者就书中的技术问题进行探讨。在编写“数字通信技术的FPGA实现系列”图书时,我是从工程应用的角度来阐述数字信号处理、数字通信技术的MATLAB与FPGA实现的,主要面向高年级本科生、研究生,以及工程技术人员,对初学者,尤其是自学者来说,图书内容有一定的难度。不少读者感觉该系列图书的起点较高,内容比较专业和复杂,需要有较好的理论基础和FPGA设计基础,因此希望我编写基于FPGA的数字信号处理设计的入门图书,以便初学者和自学者学习,使其在掌握数字信号处理FPGA实现的基础知识之后,再深入学习多速率滤波、自适应滤波、通信同步、数字调制解调等知识,就会容易得多。
为此,经过一年多的准备,我于2020年完成了《Xilinx FPGA数字信号处理设计——基础版》,因事务繁多,又经过一年才得以完成《Intel FPGA数字信号处理设计——基础版》。本书书名中原打算使用“Altera FPGA”,考虑到Altera公司已被Intel公司收购,且在其官方网站上也早已更名为“Intel FPGA”,因此将书名定为“Intel FPGA数字信号处理设计——基础版”。同时,为了便于读者对书中的实例进行板载测试,本书与“数字通信技术的FPGA实现系列”图书(Altera/Verilog版)中的实例一样,都采用CRD500进行板载测试。
本书的内容安排
本书内容共9章,分为上、下两篇。上篇为第1~4章,包括FPGA概述、设计语言及开发环境、FPGA设计流程、常用接口程序的设计等内容。通过上篇的学习,读者可以初步建立FPGA设计的概念和基本方法,了解数字信号处理FPGA设计的常用知识。下篇为第5~9章,包括FPGA中的数字运算、典型IP核的应用、FIR滤波器设计、IIR滤波器设计、快速傅里叶变换(FFT)的设计等内容。数字信号处理设计的基石是滤波器设计和频谱分析,掌握数字信号处理的原理是完成FPGA设计的基础。本书在编写过程中对数字信号处理的原理进行了大幅简化,着重从概念和基本运算规则入手,以简单的实例逐步讲解数字信号处理FPGA设计的原理、方法、步骤及仿真测试过程。通过下篇的学习,读者可以掌握数字信号处理FPGA设计的核心基础知识,从而为学习数字信号处理的综合设计打下坚实的基础。
第1章主要介绍FPGA技术的基本概念及特点。常用的数字信号处理平台有FPGA、ARM、DSP、ASIC等,每个平台都有各自的特点,只有详细了解FPGA的结构特点,才能明白FPGA在数字信号处理中的独特优势;只有通过对比,才能对各平台有更精准的把握和理解。
第2章主要介绍VHDL及QuartusⅡ。工欲善其事,必先利其器。只有全面了解FPGA设计环境,熟悉要利用的工具,加上独特的思想,才能实现完美的FPGA设计。
第3章通过一个完整的流水灯FPGA设计实例,详细地讲解设计准备、设计输入、设计综合、功能仿真、设计实现、布局布线后仿真和程序下载等一系列既复杂又充满挑战和乐趣的FPGA设计流程。
第4章详细讨论常用接口程序的设计。FPGA产品不是一个“孤岛”,是要与外界实现无缝对接的。接口是与外界对接的窗口,只有掌握了串口、A/D接口、D/A接口等,才有机会展示设计的美妙之处。
第5章讨论FPGA中的数字运算。数字运算主要包括加、减、乘、除等运算。FPGA只能对二进制数进行运算,虽然在日常生活中我们习惯用十进制数进行运算,但运算的本质和规律是相同的。只有彻底掌握FPGA中的有符号数、小数、数据位扩展等设计方法,才能实现复杂的数字信号处理算法。
第6章主要介绍典型IP(Intellectual Property)核的应用。IP核,就是知识产权核,是指功能完备、性能优良、使用简单的功能模块。我们所要做的主要工作是理解IP核的用法,在设计中直接使用IP核。
第7章详细讨论有限脉冲响应(Finite Impulse Response, FIR)滤波器设计。滤波器设计和频谱分析是数字信号处理中最基础的专业设计。所谓专业,是因它们涉及信号处理的专业知识;所谓基础,是指它们的应用非常广泛。FIR滤波器由于具有结构简单、有严格的线性相位特性等优势,已成为信号处理中的必备电路之一。
第8章详细讨论无限脉冲响应(Infinite Impulse Response, IIR)滤波器设计。“无限”两个字听起来有点高深,其实IIR滤波器与FIR滤波器的结构没有太大的差别。虽然IIR滤波器的应用没有FIR滤波器广泛,但有其自身的特点,具有FIR滤波器无法比拟的优势。IIR滤波器具有反馈结构,使得其中的数字运算更具有挑战性,也更有趣味性。只有掌握了FIR滤波器和IIR滤波器的设计,才能对经典滤波器的设计有比较全面的了解。
第9章讨论快速傅里叶变换(FFT)的设计。频谱分析和滤波器设计是数字信号处理的两大基石。离散傅里叶变换(Discrete Fourier Transform, DFT)的理论很早就非常成熟了,后期出现的快速傅里叶变换(Fast Fourier Transform, FFT)算法才使得DFT理论在工程中得以应用。虽然FFT算法及其FPGA实现的结构相当复杂,但幸运的是可以使用现成的IP核,设计者在理解信号频谱分析原理的基础上,调用FFT核即可完成FFT的FPGA实现。
关于FPGA开发工具的说明
众所周知,目前Xilinx公司和Intel公司的FPGA产品占据全球90%以上的FPGA市场。可以说,在一定程度上正是由于两家公司的竞争,才有力地推动了FPGA技术的不断发展。虽然硬件描述语言(HDL)的编译及综合环境可以采用第三方公司开发的产品,如ModelSim、Synplify等,但FPGA的物理实现必须采用相应公司开发的软件平台,无法通用。例如,Xilinx公司的FPGA使用Vivado和ISE系列开发工具,Intel公司的FPGA使用Quartus系列开发工具。与FPGA的开发工具类似,HDL也存在两个难以取舍的选择:VHDL和Verilog HDL。
学习FPGA开发技术的难点之一在于开发工具的使用,无论Xilinx公司还是Intel公司,为了适应不断更新的开发需求,主要是适应不断推出的新型FPGA,其开发工具的版本更新速度都很快。Intel FPGA公司目前最新的开发工具版本为Quartus Prime v21.2。开发工具的更新除对开发环境本身进行完善外,还需要不断提高对新上市FPGA器件的支持能力。QuartusⅡ13.1是Intel公司最后一个同时支持32位及64位操作系统的FPGA开发环境,且运行稳定,界面友好,深受广大FPGA工程师的青睐。同时,考虑到更好地兼顾“数字通信技术的FPGA实现系列”图书(Altera/Verilog版)的参考程序,使得开发平台保持一致,便于读者学习,本书所有实例均采用QuartusⅡ13.1进行编写。
应当如何选择HDL呢?其实,对于有志于从事FPGA开发的技术人员,选择哪种HDL并不重要,因为两种HDL具有很多相似之处,精通一种HDL后再学习另一种HDL也不是一件困难的事。通常可以根据周围同事、朋友、同学或公司的使用情况来选择HDL,这样在学习过程中,就可以很方便地找到能够给你指点迷津的专业人士,从而加快学习进度。
本书采用Intel公司的FPGA作为开发平台,采用QuartusⅡ13.1作为开发工具,采用VHDL作为实现语言,使用ModelSim进行仿真测试。由于VHDL并不依赖于具体的FPGA器件,因此本书中的VHDL程序可以很方便地移植到Xilinx公司的FPGA上。如果VHDL程序中使用了IP核,那么由于两家公司的IP核不能通用,因此需要根据IP核的参数,在另一个平台上重新生成IP核,或者重新编写VHDL程序。
为了给读者更多的参考,本书还采用Verilog HDL语言对所有FPGA程序进行了编写,读者可在我的微信公众号“杜勇FPGA”中免费下载。
有人曾经说过,技术只是一个工具,关键在于思想。将这句话套用过来,对于本书来讲,具体的开发平台和HDL只是技术实现的工具,关键在于设计的思路和方法。读者完全没有必要过于在意开发平台的差别,只要掌握了设计思路和方法,加上已经具备的FPGA开发经验,采用任何一种FPGA都可以很快地设计出满足用户需求的产品。
本书的目标
数字信号处理FPGA设计知识的学习难度较大,读者不仅需要具备较扎实的理论知识,还要具备一定的FPGA设计经验。本书的目的正是架起理论知识与工程实践之间的桥梁,通过具体的实例,详细讲解工程实现的方法、步骤和过程,使读者尽快掌握采用FPGA平台实现数字信号处理技术的基本方法,以提高学习效率,为后续学习数字信号处理、数字通信技术的FPGA设计等综合设计打下坚实的基础。
电子通信行业的技术人员在从业之初通常都会遇到类似的困惑:如何将教材中的理论知识与工程实践结合起来呢?如何将教材中的理论转换成实际的工程项目呢?绝大多数电子信息类教材对原理的讲解都十分透彻,但理论知识与工程实践之间显然需要一座可以顺利通过的桥梁。一个常用的方法是通过MATLAB等工具进行软件仿真来加深读者对理论知识的理解,但更好的方法是直接参与工程的设计与实现。
然而,工科院校的学生极少有机会参与实际的工程设计与实现,因此在工作中往往会感到所学的理论知识很难与实际的工程实践联系起来。教材讲解的大多是原理性内容,读者即使可以很好地解答教材中的思考题与练习题,或者能够熟练地推导教材中的公式,在进行工程设计与实现时,如何将这些理论知识和公式用具体的电路或硬件平台实现,也是一个巨大难关。尤其是数字信号处理专业领域,由于涉及的理论知识比较复杂,在真正进行工程设计与实现时会发现无从下手。采用MATLAB、ModelSim等软件进行仿真,虽然可以直观地验证算法的正确性,并查看仿真结果,但毕竟只停留在算法或模型的仿真上,与真正的工程设计与实现是完全不同的两个概念。FPGA很好地解决了这一问题。FPGA本来就是基于工程应用的平台,其仿真技术可以很好地仿真实际的工作情况,尤其是时序仿真技术,在计算机上通过了时序仿真的程序,几乎不需要修改就可以直接应用到工程实践中。这种设计、验证、仿真的一体化方式可以极好地将理论知识与工程实践结合起来,从而提高读者学习的兴趣。
目前,市场上已有很多介绍ISE、Vivado、Quartus等FPGA开发工具,以及VHDL、Verilog HDL等的图书。如果仅使用FPGA来实现一些数字逻辑电路或理论性不强的控制电路,那么掌握FPGA开发工具及VHDL的语法就可以开始工作了。数字信号处理的理论性要强得多,采用FPGA实现数字信号技术的前提条件是对理论知识有深刻的理解,关键是在理解理论知识的基础上,结合FPGA的特点,找到合适的算法实现结构,厘清工程实现的思路,并采用VHDL进行正确的实现。
本书在编写过程中,兼顾了数字信号处理的理论知识,以及工程设计的完整性,重点突出了FPGA设计的方法、结构、实现细节,以及仿真测试方法。在讲解理论知识时,重点突出工程实践,主要介绍工程实践中必须掌握和理解的内容,并且结合FPGA的特点进行讨论,以便读者能尽快找到理论知识与工程实践的结合点。在讲解实例的FPGA实现时,为绝大多数实例提供了完整的VHDL程序代码,并对代码的思路和结构进行了详细的分析和说明。根据我的工作经验,本书对一些似是而非的概念,结合实例的仿真测试加以阐述,希望能为读者提供更多有用的参考。相信读者按照书中讲解的步骤完成一个个实例后,会逐步体会理论知识与工程实践的完美结合。读者随着掌握的工程实践技能的提高,对数字信号处理理论知识的理解也必将越来越深刻。
如何使用本书
在学习数字信号处理FPGA设计之前,读者需要具备一定的FPGA设计知识和数字信号处理的理论知识。为了便于读者快速掌握FPGA设计知识,本书上篇对VHDL、QuartusⅡ13.1等内容进行了精心编排,并通过一个完整的流水灯设计实例详细介绍了FPGA的设计流程,以便为读者学习下篇打下基础。
与普通的逻辑电路不同,数字信号处理的专业性较强,掌握理论知识是完成FPGA设计的前提。MATLAB是完成数字信号处理FPGA设计的不可或缺的工具,MATLAB的易用性和强大的功能,使其在工程设计中得到了广泛的应用。为了准确理解数字信号处理的相关理论知识,本书中的部分实例采用MATLAB完成理论仿真,并对代码进行了注释和说明,读者即使完全没有MATLAB的编程基础,也可以很容易地理解MATLAB程序的设计思路。
完整的数字信号处理FPGA设计过程是:首先采用MATLAB对需要设计的工程进行仿真,一方面可以仿真算法过程及结果,另一方面可以生成FPGA仿真所需的测试数据;然后在Quartus Ⅱ13.1中编写VHDL程序,对实例进行设计实现;接着编写测试激励文件,采用ModelSim软件对VHDL程序进行仿真,查看ModelSim仿真波形,验证程序功能的正确性;最后完成FPGA程序综合及布线,将程序下载到开发板上,以验证FPGA设计的正确性。
验证工程实例程序是否正确的最直观的方法是:用示波器测试开发板(如CRD500)的A/D接口和D/A接口中的信号,观察信号处理前后波形的变化是否满足要求。例如,在验证低通FIR滤波器时,用示波器通道2测试低通FIR滤波器前端信号的波形,用示波器通道1测试低通FIR滤波器处理后信号的波形,对比分析滤波前后信号的波形就可以验证低通FIR滤波器功能是否正常。
如果没有示波器验证,而ModelSim仿真正确,但这毕竟不是真实的电路工作波形,那么应如何验证FPGA设计的正确性呢?QuartusⅡ13.1提供了功能强大的在线逻辑分析软件工具Signal Tap。将FPGA程序下载到开发板之后,使用Signal Tap可以实时读取FPGA内部的信号,以及指定引脚的信号波形。也就是说,采用Signal Tap观察到的波形是实际的工作波形,而不是仿真波形。因此,读者可以采用Signal Tap来验证FPGA设计的实际工作情况。本书第4章在介绍A/D接口和D/A接口的设计时,详细讨论了Signal Tap的使用方法和步骤,读者掌握之后,就可以在板载测试程序中使用SignalTap对实际工作波形进行在线测试了。
致谢
有人说,每个人都有他存在的使命,如果迷失了使命,就失去了存在的价值。不只是每个人,每件物品也都有其存在的使命。对于一本图书来讲,其存在的使命就是被阅读,并给读者带来收获。如果本书能对读者的工作和学习有所帮助,我将感到莫大的欣慰。
在本书的编写过程中,我查阅了大量的资料,在此对相关作者及提供者表示衷心的感谢。
时间过得很快,在编写本书时,我的大女儿刚刚进入高中学习,而当本书与读者见面时,她已经开启了高中关键阶段的学习和生活;小女儿已经学会了简单的语言,每天都在以她独特的语言和行为与这个世界进行友好的交流。祝愿她们快乐成长!
FPGA技术博大精深,数字信号处理技术理论难度较大,虽然本书尽可能详细地讨论了数字信号处理FPGA设计的相关内容,但我仍感觉难以详尽叙述工程实现中的所有细节。相信读者在实际工程中经过不断的实践、思考及总结,一定可以快速掌握数字信号处理FPGA设计的方法,提高使用FPGA进行工程设计的能力。
由于本人水平有限,书中难免会存在不足和疏漏之处,敬请广大读者批评指正。欢迎读者就相关技术问题与我进行交流,或者对本书提出改进意见及建议。建议读者关注我的微信公众号“杜勇FPGA”,以获得与本书相关的资料和信息。
杜勇
2022年2月