为什么要写这本书
记得上中学时,每周五下午是作文课,老师通常会要求大家在两节课内完成一篇命题作文。写作文最难的是不知如何开头,无论写什么题目,感觉不以“弹指一挥间,匆匆近十年”开头就引不出后面的内容。
弹指一挥间,匆匆近十年。从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设计等综合设计打下坚实的基础。