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