前言
为什么要写这本书
时光如水,流逝悄无声息,从初次接触FPGA开始,不知不觉已二十余年。十余年前,我开始写FPGA方面的著作,第一本《FPGA/VHDL设计入门与进阶》本是希望为菜鸟写本入门书籍,现在翻看当时的文字,感觉自己当时也不过是有些自以为是的超级菜鸟而已。后来写通信技术FPGA设计方面的书籍,本意不过是将自己在设计过程中颇有心得的设计经验公之于众,为在通信技术FPGA设计领域的工程师提供有益的参考,所幸确实帮助到不少工程师和同学,与读者交流的邮件让我备感欣慰。
自2011年开始编写《数字滤波器的MATLAB与FPGA实现》(“数字通信技术的FPGA实现系列”图书的第一本)后,我先后完成《数字滤波器的MATLAB与FPGA实现》《数字通信同步技术的MATLAB与FPGA实现》《数字调制解调技术的MATLAB与FPGA实现》三本图书的编写。这三本图书(简称Xilinx/VHDL版)是基于AMD公司的FPGA器件和VHDL语言编写的,后来又基于Intel公司的FPGA和Verilog HDL语言改写了上面三本图书(简称Altera/Verilog版)。由于载波锁相环技术难度大且应用较为广泛,我又专门针对这个专题编写了《锁相环技术原理及FPGA实现》一书。由于“数字通信技术的FPGA实现系列”图书专业性较强,要同时理解一大堆繁杂的公式和FPGA设计知识,无疑是一件极具挑战的事。为此,我又先后出版关于数字信号处理技术更为基础的著作《Xilinx FPGA数字信号处理设计——基础版》《Intel FPGA数字信号处理设计——基础版》。
数字信号处理技术理论性强,FPGA技术入门难,要将两者有机结合完成FPGA数字信号处理设计,对工程师的要求很高。在收到的读者交流邮件中,有很大一部分读者其实在咨询FPGA设计的基础知识。九层之台,起于累土,学习不可操之过急。先打好基础,掌握FPGA的基本设计方法,熟悉FPGA设计流程,透彻理解FPGA设计所需的硬件思想,再加上数字信号处理的专业知识,才可以自由地完成数字信号处理的FPGA设计。
虽然市面上关于FPGA入门的书籍多如繁星,但具有原创性和鲜明特性的书籍还比较少。
何必又要写入门级别的书籍?无它,只是想将自己对FPGA设计的一些独特的理解和心得公之于众,为读者提供有益参考。既然是心得,那么书中的实例和书中对FPGA设计方法的理解都有很强的原创性,读者不用担心会看到过多与其他图书明显雷同的内容。
所谓集腋成裘,聚沙成塔。任何技能或技术都不是一蹴而就的,掌握它都需要读者长期的练习和思考,如江湖油翁,神箭穿杨。
如果有一本好书,能够讲解透彻、思路清晰、语言流畅,作者刚好又是讲授相关课程的老师,且是在行业混迹多年的工程师,相信会加快初学者成裘成塔的速度。
本书的内容安排
本书分为基础篇、初识篇、入门篇和提高篇,共16章。
基础篇包括必备的数字逻辑电路知识、可编程逻辑器件基础及开发环境的安装方法,主要对FPGA设计所需要了解的数字电路、模拟电路知识进行简单介绍,读者不用再翻阅《数字电路技术》《模拟电路技术》等书籍。
初识篇正式开启FPGA程序设计的学习之旅。首先详细介绍经典的“流水灯”实例,手把手讲解FPGA的全设计流程。接着从组合逻辑电路讲起,感受Verilog HDL“绘制”电路的设计思想。正如所有纷繁复杂的数字产品本质上都是由“0”和“1”组成的数字游戏,掌握FPGA的灵魂和精华,就打开了绚烂至极的FPGA设计技术之门。D触发器就是FPGA的灵魂,计数器就是FPGA的精华。几乎所有的FPGA语法结构都可以套用描述D触发器的语法结构,几乎所有的FPGA时序电路都可以分解为功能单一的计数器。D触发器虽然简单,计数器仅需三五行代码即可描述,但FPGA工程师的价值正是利用这些简单的基本部件,融合设计者的思想,形成满足用户需求的功能电路。理解硬件编程的思想,需要从透彻理解D触发器和计数器开始。在初识篇里,除了理解D触发器和计数器,还需要掌握Verilog HDL“并行语句”的概念,从而悟透Verilog HDL与C语言的本质区别。
入门篇包括对秒表电路、密码锁电路、电子琴电路、串口通信电路及状态机的讨论。这些电路模块看似功能简单,如何能够采用简洁、规范、高效的Verilog HDL语言完成电路的设计,需要设计者熟知FPGA的设计规则。从网络上找到类似功能电路的Verilog HDL代码很容易。由于这些电路一般不需要用到IP核,全是用Verilog HDL实现的,很容易实现代码移植,只需约束相应的引脚,了解电路顶层接口的信号功能,即可将编译后的代码下载到开发板上验证。能够在开发板上成功验证功能电路,实现正确的秒表、密码锁、电子琴、串口通信功能无疑会让人感到非常高兴。但对于FPGA初学者来讲,验证电路功能并不是最重要的,重要的是理解代码的设计思想。要在不参考任何代码的情况下,从头开始,在头脑中形成具体的电路模型,指间随心流淌Verilog HDL代码,最终完成正确的功能电路设计却需要艰苦卓绝的努力。唯有经过如此的练习,才能真正理解这些功能电路的设计方法。如果能够达到这样的状态,说明你已跨进FPGA设计的大门了。状态机一直是数字电路技术课程中的重要内容之一,虽然状态机也是一种比较常用的FPGA设计方式,但是作者仍然不推荐采用状态机的方式描述电路。第12章阐述了状态机的设计方法,并对状态机描述电路的利弊进行了分析。
提高篇包括时序约束、IP核设计、在线逻辑分析仪调试和常用的FPGA设计技巧等内容。当FPGA电路系统工作频率较高时,时序约束的重要性就凸显出来,设计出满足时序要求的Verilog HDL程序,首先要深刻理解FPGA程序运行速度的极限。IP核是经过验证的成熟设计模块,是一种提高设计效率的极佳设计方式,何况FPGA开发环境提供了很多免费的IP核。要解决FPGA工程师和硬件制版工程师之间的争端,弄清到底是FPGA程序的问题还是硬件电路板的问题,通常需要对FPGA程序进行在线调试。将FPGA程序下载到目标器件上观察电路的运行情况,在线逻辑分析仪提供了很好的调试手段。本书最后介绍了一些常用的FPGA设计技巧,如默认引脚状态设置、复位信号处理方法、时钟使能信号使用方法等,并以浮点乘法器为例讨论了FPGA电路的设计技巧,希望给读者更多有益的参考。
关于FPGA开发平台的说明
众所周知,目前AMD公司(2022年收购了Xilinx公司)和Intel公司(2015年收购了Altera公司)的FPGA产品占据全球90%以上的FPGA市场。可以说,在一定程度上正是由于两家公司的相互竞争,才有力地推动了FPGA技术的不断发展。
但是,近年来国际上的芯片产业呈现出异乎寻常的竞争发展态势,尤其国际上FPGA主要生产厂商的芯片在国内的售价持续上涨,且供货渠道不畅,很大程度上影响了本书对开发平台的选择。本书定位于FPGA初学者,在选用开发平台时主要考虑开发板的成本及开发软件的易用性。近年来,国产FPGA的发展势头十分迅猛,综合考虑后,本书选用了高云FPGA作为本书的开发平台。
虽然硬件描述语言(HDL)的编译及综合环境可以采用第三方公司开发的产品,如ModelSim、Synplify等,但FPGA的物理实现必须采用各自公司开发的软件平台,无法通用。例如,AMD公司的FPGA使用Vivado和ISE系列开发工具,Intel公司的FPGA使用Quartus系列开发工具,高云公司的FPGA使用云源软件。与FPGA的开发工具类似,HDL也存在两种难以取舍的选择:VHDL和Verilog HDL。
学习FPGA开发技术的难点之一在于开发工具的使用,AMD公司、Intel公司,以及各家国产FPGA公司,为了适应不断更新的开发需求,主要是适应不断推出的新型FPGA器件,开发工具的版本更新速度很快。开发工具的更新除了对开发环境本身进行完善,还需要不断加强对新上市的FPGA器件的支持。本书所有实例均采用云源软件进行编写。相对于Quartus、ISE、Vivado而言,云源软件的功能和界面都更为简洁,更适于初学者学习。
应当如何选择HDL呢?其实,对于有志于从事FPGA开发的技术人员,选择哪种HDL并不重要,因为两种HDL具有很多相似之处,精通一种HDL后,再学习另一种HDL也不是一件困难的事。通常来讲,可以根据周围同事、朋友、同学或公司的使用情况来选择HDL,这样在学习过程中,可以很方便地找到能够给你指点迷津的专业人士,从而加快学习进度。
本书采用高云公司的FPGA作为开发平台,采用Gowin_v1.9.8.07作为开发工具,采用Verilog HDL作为设计语言,使用ModelSim进行仿真测试。由于Verilog HDL并不依赖于具体的FPGA器件,因此本书中的Verilog HDL程序可以很方便地移植到AMD或Intel公司的FPGA上。如果Verilog HDL程序中使用了IP核,由于不同公司的IP核不能通用,因此需要根据IP核的参数,在另外一个平台上重新生成IP核,或重新编写Verilog HDL程序。
有人曾经说过,技术只是一个工具,关键在于思想。将这句话套用过来,对于本书来讲,具体的开发平台和HDL只是实现技术的工具,关键在于设计的思路和方法。读者完全没有必要过于在意开发平台的差别,只要掌握了设计思路和方法,加上读者已经具备的FPGA开发经验,采用任何一种FPGA都可以很快地设计出满足用户需求的产品。
如何使用本书
本书是专为FPGA初学者编写的入门级图书。一般来讲,FPGA设计者同时需要熟悉Verilog HDL语法,熟悉FPGA开发环境(如Quartus II、ISE、Vivado、云源软件),熟悉数字电路基础知识。由于FPGA需要综合应用这些知识,加之Verilog HDL与C语言(工科学生一般首先接触到C语言,先入为主地形成了顺序编程思维)又存在本质的区别,因此初学者总是感觉FPGA设计入门比较难。本书的基础篇对FPGA设计所需的基础知识进行了简要介绍,后面介绍FPGA设计时,采用实例设计的方法,将云源软件和Verilog HDL语法融合在一起进行讨论,并在实例过程中,详细、深刻、反复、多角度地讨论一些较难理解的FPGA设计概念,读者要细心体会这些简单的实例,理解FPGA设计的本质是设计电路,理解FPGA并行语句的概念,理解硬件编程思想。
为便于读者学习,本书的绝大多数实例均可以在CGD100开发板上进行验证。由于本书的实例并不复杂,大多数实例没有用到IP核,因此读者可以很容易地将本书的实例移植到其他开发板上进行验证,只需修改FPGA工程的目标FPGA型号,修改顶层文件信号端口对应的引脚约束即可。
致谢
有人说,每个人都有他存在的使命,如果迷失了使命,就失去了存在的价值。不只是每个人,每件物品也都有其存在的使命。对于一本图书来讲,其存在的使命就是被阅读,并给读者带来收获。如果本书能对读者的工作和学习有所帮助,将给作者莫大的欣慰。
在本书的编写过程中,作者得到了高云半导体公司的大力支持和帮助,在此表示衷心的感谢。该书配套的FPGA教学开发板由武汉易思达科技有限公司和米恩工作室联合研制,在此一并表示感谢。作者查阅了大量的资料,在此对资料的作者及提供者表示衷心的感谢。
FPGA技术博大精深,本书远没有讨论完FPGA设计的全部内容,仅针对FPGA初学者需要掌握的知识展开了详细的讨论。学习的过程充满艰辛、彷徨、痛苦和快乐,深入理解基本概念,透彻理解硬件设计思想,不急不躁,一定可以体会到FPGA设计的美妙。
由于作者水平有限,书中难免会存在不足和疏漏之处,敬请广大读者批评指正。欢迎读者就相关技术问题与作者进行交流,或对本书提出改进意见及建议。本书的配套资源包含完整的Verilog HDL实例工程代码。读者可以关注作者的公众号“杜勇FPGA”免费下载程序资料及开发环境,关注B站UP主“杜勇FPGA”免费观看配套教学视频。如果需要本书配套的CGD100开发板,请到官方网店购买:https://shop574143230.taobao.com/。
杜勇
2022年11月