现场可编程门阵列(Field Programmable Gate Array,FPGA)越来越多地应用在新技术中,如物联网、云计算和人工智能等。在这些应用中,FPGA主要用来对数据进行加速处理。为了应对这些应用,降低软件工程师应用FPGA的难度,Intel公司不断推出新的设计工具,如高级综合工具(High Level Synthesis,HLS),以降低使用FPGA实现复杂应用的难度。但是,很多软件工程师仍然觉得FPGA入门较难,这是因为他们普遍认为Verilog HDL比较抽象难懂,以及FPGA内部结构过于复杂。其实,最根本的原因是软件设计工程师常常以传统软件的思维来看待FPGA,他们普遍认为FPGA是硬件,与软件没有太多的交集,在FPGA上实现传统上由软件实现的算法模型难度较大。根据作者长期教学和科研的经验,数字逻辑和数字电路基础知识是他们入门FPGA的绊脚石和拦路虎。为了帮助广大读者,尤其是FPGA的初学者,甚至是那些从事传统软件开发工作的工程师能真正进入FPGA设计领域,作者编写了此书。该书是作者多年从事FPGA教学和科研工作的体会与总结,期望对广大初学者系统掌握FPGA的设计方法提供很好的帮助。
数字逻辑和数字电路的基本理论知识是学习FPGA的基础,不管FPGA技术今后如何发展,其始终离不开数字逻辑的基本理论知识,系统深入地掌握这些知识是读者进入FPGA设计世界的基石,特别重要。所以,在编写本书时特意增加了数字逻辑基础和数字电路两章内容。在编写这两章内容时,参考了大量国外设计资料,以期待通过这两章内容的讲解来帮助广大读者准确把握数字世界的本质,并且通过Multisim内集成的SPICE仿真工具对这些知识难点进行了直观演示与验证。根据作者多年的教学经验,认为这些知识难点是入门FPGA的最大障碍,因此通过SPICE仿真工具给出的分析结果帮助读者扫清这些学习障碍。
Verilog HDL是本书最重要的内容之一,用于对复杂数字系统(尤其是FPGA)进行行为级和寄存器传输级建模。本书严格按照IEEE Std 1364—2005规范介绍Verilog HDL的词法和句法。在讲解这部分内容时,将Verilog HDL与复杂数字系统(尤其是FPGA)模型之间的对应关系进行系统讲解,使读者理解Verilog HDL的词法和句法在复杂数字系统行为级与寄存器传输级描述中的使用方法。
本书的一大特色就是将Verilog HDL和Quartus Prime集成开发环境进行系统化深度融合,从不同角度深度解读Verilog HDL语言的实现本质。针对Verilog HDL中的一些语法难点,书中通过Quartus Prime集成开发环境提供的功能进行演示与说明。在此要特别指出,Quartus Prime集成开发工具是学习Verilog HDL最好的助手,这是因为在初学者遇到Verilog HDL中不理解的地方时,可以很容易地通过Quartus Prime集成开发工具给出的电路结构和仿真结果进行直观的说明。为了帮助读者提高灵活运用Verilog HDL构建复杂数字系统模型的能力,书中给出大量基本逻辑单元的寄存器传输级描述,以及一个复杂数字系统设计实例和数模混合系统设计实例。
众所周知,中央处理器(CPU)的前端设计是在FPGA平台上实现的。通过与英特尔FPGA大学计划的合作,将英特尔FPGA大学计划提供的处理器设计教学资源引入本书。通过由易到难的进阶设计方法,系统地介绍了一个处理器系统(包括处理器核、总线、存储器、控制寄存器和状态寄存器)的实现过程,使得读者可以理解并掌握机器指令和处理器系统不同功能部件之间的有机联系。
本书的另一大特色是引入Arm公司开源的Cortex-M0处理器软核。通过使用Verilog HDL构建嵌入式硬件平台,以及使用汇编语言/C语言编写硬件驱动和实现软件应用,在现场可编程门阵列内实现了真正意义上的片上可编程嵌入式系统,这里的可编程是指使用Verilog HDL定制嵌入式系统的硬件,然后使用C语言为这个定制的嵌入式硬件平台编写软件驱动和应用,这个设计过程充分体现出在FPGA上构建嵌入式系统的灵活性和高效性,同时对广大读者系统学习Arm嵌入式的硬件和软件知识提供了很好的帮助。通过对片上嵌入式系统设计流程的详细解读,读者可进一步掌握C语言串行执行和Verilog HDL并行处理的本质特点。通过在嵌入式系统设计中合理划分软件和硬件的边界,最终实现低成本、高性能的片上嵌入式系统设计。当然,对片上嵌入式系统设计过程的系统讲解也是为了帮助读者理解软件处理的灵活性和硬件处理的高效性,进而使读者进一步理解在新技术中越来越多地使用硬件(FPGA)来实现更复杂算法的原因。
由于FPGA在图像采集和图像处理中有着广泛的应用,因此本书专门介绍了基于Intel FPGA的捕获摄像头视频图像并显示视频图像的实现方法。通过一个具体的设计实例,帮助读者掌握通过Intel FPGA捕获实时图像和实现图像显示的方法。
在本书的最后一章,介绍了FPGA在数模混合系统中的应用。通过信号采集和信号产生的设计实例,详细说明了数模混合系统中所涉及的关键知识点,以及在FPGA平台上实现数模混合系统的方法。
为了便于读者自学,本书提供了所有设计实例的完整设计文件和教学资源,这些资源可以通过书中学习说明给出的链接地址获取。
在编写本书的过程中,全程得到英特尔FPGA大学计划经理袁亚东先生的鼎力支持和李晓嬿女士的帮助,他们为作者提供了正版授权的Quartus Prime Standard集成开发环境和DE10-Lite硬件开发平台,北京海云捷迅科技有限公司和英特尔FPGA中国创新中心为本书的编写也提供了大量的支持和帮助,在此特别向他们表示衷心的感谢。在编写本书的过程中,许中璞老师负责本书第10~第12章内容的编写和设计实例的验证,韩琛晔老师负责本书第8~第9章内容的编写,在此也向他们表示感谢。在本书出版的过程中,也得到了电子工业出版社编辑的帮助和指导,在此也表示深深的谢意。
由于编者水平有限,编写时间仓促,书中难免有疏漏之处,敬请读者批评指正。
作 者
2020年4月于北京