前言
一、编写目的
随着社会的发展和科技的进步,普通电子技术和微电子领域的景象也日新月异,FPGA(Field Programmable Gate Array,现场可编程门阵列)越来越被人们所熟知,生产生活中人们对FPGA的需求不断增加。近年来,FPGA在人工智能、机器学习的浪潮中又火了一把。得益于IC(集成电路)技术和生产工艺的进步,更大规模集成度的FPGA得以实现,一枚小小的FPGA在融合了可编程逻辑单元、ARM硬核、MPU等异构多核处理单元后,功能越来越强大。
基于此,很多人纷纷加入学习FPGA的行列。当前许多高校在电子领域相关专业都会开设EDA相关课程,这无疑为大家学习FPGA拓宽了道路,但是又有多少同学真正学会了该工具的使用方法呢?
我们不禁要问:导致这一状况的原因是什么?首先,学校的课程安排在时间上是有限制的,学生没有足够的时间去思考、练习,这样就很难巩固知识、提高水平;其次,课本中大多是关于理论知识的讲解,很难培养学生的学习兴趣,没有兴趣爱好作为动力和支撑,在学习FPGA的道路上很难坚持下去;再次,学校的教学内容和最新的工程应用存在差距,学生所学的代码往往也不是按照最新的工程应用标准规范来编写的,而是沿袭了旧的甚至是错误的方法。笔者见过很多FPGA工程和代码,但在这些工程和代码中,有的要么是使用传统原理图的设计方法,要么是直接嫁接、搬移各种思想,要么是两者的任意结合,这无疑是一件十分悲哀的事情。
上述诸多因素导致了一种严重的情况,那就是学生学习课程后,不会使用FPGA这个强大的工具来解决诸多实际问题。虽然很多高校极力推进教学模式的改革,但想要改变这种局面,还是有很长的路要走。
面对这一现状,不少圈内人却早已发现了商机,林林总总的FPGA培训班和各种视频、教程层出不穷。培训班的出现的确解决了一部分高校教育和社会工程应用脱节的问题,但也耗费了学生大量的时间和金钱。
特别是近年来,随着FPGA的崛起,市面上关于FPGA的资料越来越多,但这些资料大多存在着各种各样的问题,比如内容不系统、重点不突出、方法不详细,没有详细介绍编写代码的思想方法,或者作者并没有站在学习者的角度上来编写,使学习者无法真正地掌握各种方法。我们见过不少学了很久FPGA的同学依然停留在只会移植、修改别人代码的入门阶段,甚至连一个串口回环都无法独立完成,这并不是我们想要的结果。
所以我们要做的就是尽最大努力,站在初学者的角度上,从最基础的内容开始逐步深入地讲解FPGA,并希望把FPGA最核心的东西——设计方法和思想传递给学习者,使学习者可以独立编写优秀、规范的Verilog代码。
二、本书内容体系
本书共32章,包含硬件说明篇、软件安装篇、基础入门篇和学习强化篇,按照先易后难、由浅入深的顺序进行讲解。从最基础的软件安装和软件操作开始,手把手教学。考虑到大多数学习者为FPGA初学者,所以书中对操作中的每个步骤都尽可能详细地进行了描述,并附上大量的截图以供学习者参考,具体内容介绍如下。
硬件说明篇:包括第1~2章。第1章主要介绍FPGA的相关知识,包括FPGA简介、FPGA的技术优势及应用方向等内容;第2章主要对本书各实验中所用的开发板“征途Pro”的硬件资源做了系统性介绍,并以“征途Pro”开发板主控芯片为例,对FPGA的内部结构和资源做了简介。
软件安装篇:包括第3~6章,主要是对FPGA开发软件Quartus II、ModelSim、Notepad++、Visio的安装,以及Quartus软件与ModelSim、Notepad++的关联方法做了详细介绍。
基础入门篇:包括第7~20章,在这一部分我们才真正开始学习FPGA。第7章对FPGA编程语言Verilog HDL做了系统性的讲解;第8章通过“点亮LED灯”的实验工程,详细说明了FPGA的完整的、正确的设计流程;第9章和第12章使用若干实例对FPGA中的常用组合逻辑、时序逻辑做了介绍;在第10、11、13章中,我们介绍了层次化设计的设计思想,说明了避免Latch产生的具体方法,并对阻塞赋值和非阻塞赋值的概念做了详细讲解;在第14~19章中,我们由浅入深地引入了若干个开发例程,帮助读者掌握计数器、分频器、状态机等的使用,并实现了开发板部分外设的驱动控制;在第20章中,我们介绍了FPGA快速开发的法宝——IP核,并通过实例对常用的PLL、FIFO、RAM、ROM这4种IP核的调用及参数配置做了解释说明。
学习强化篇:包括第21~32章,在这一部分我们引入了诸多工程实例供读者学习。第22章介绍了如何使用SignalTap II嵌入式逻辑分析仪对实验工程进行在线调试;第23章介绍等精度频率计的设计思想和实现方法;学习完第24章和第25章,读者在掌握DDS信号发生器和电压表设计思想和方法的同时,对AD/DA的相关知识也会有全面的了解;第26~28章通过诸多实例对VGA、HDMI、TFT-LCD的相关知识做了系统性的讲解;第29章和第30章讲解并实现了基于Sobel算法的边缘检测;此部分最重要的是第21、31和32章,在这3章中,我们从多个实例入手,对RS-232、SPI以及I2C通信协议做了非常系统的讲解。
希望初学者能够按照本书的编写顺序,循序渐进地进行FPGA的学习,切莫好高骛远、眼高手低。学完本书后,希望你能掌握正确、规范的设计方法,为之后的FPGA进阶提升和实际应用打下坚实的基础。
三、编写风格
本书沿袭了野火STM32系列丛书的编写风格,在此基础上致力于FPGA设计方法的教学,希望能够用最简洁、最清晰的语言把晦涩难懂的FPGA知识讲解得清晰、透彻,能够让初学者真正掌握FPGA设计方法的精髓。
本书适合FPGA初学者和没有掌握FPGA设计方法的学习者阅读。书中对FPGA芯片内部构成和原理以及高级应用不做详细的讲解,若读者想了解相关知识,可查阅有关书籍。
本书着重讲解常用工程实例以及相关外设的驱动与应用,力争全面分析每个工程的设计思想与实现方法。一个实例工程或外设对应一个或多个章节,每章的主要内容大致分为三部分:
第一部分为理论学习,这一部分会将本章涉及的相关理论知识做一个系统性的全方位解读,力求简洁明了、通俗易懂。
第二部分为实战演练,这一部分会结合理论学习部分的内容,带领读者设计并实现一个实验工程,通过模块框图设计、波形图绘制、代码编写、仿真验证、上板验证等一系列FPGA设计流程,从无到有地实现切实可行的实验工程,使读者掌握实验工程的设计思想与具体实现方法,加深读者对理论知识的理解与掌握。
第三部分为章末总结,这一部分主要是对本章所学的内容做一个全面的总结,加深读者对相关知识的认识和理解,帮助读者尽快掌握相关设计思想与方法。
四、开发平台
本书所选择的硬件开发平台为野火Altera-EP4CE10-FPGA开发板-征途Pro开发平台,简称“征途Pro”。初学者在进行学习时,如果配套使用该硬件平台进行实际操作,可避免工程移植时出现各种问题,减少学习时间,提高学习效率,达到事半功倍的效果。
征途Pro FPGA开发平台延续野火一如既往的设计风格,资源丰富,充分展现了FPGA的强悍性能。征途Pro具有以下优势:
采用Intel(Altera)公司Cyclone IV系列芯片作为主芯片,型号为EP4CE10F17C8N,内部逻辑资源丰富且具有高性价比;板卡上的有源晶振为主芯片提供质高稳定的时钟信号,频率为50MHz;板载容量为16Mbit的Flash芯片作为外部存储芯片,负责FPGA程序的存储,保证FPGA掉电后程序不丢失,同时可用于学习SPI通信协议;板载容量为256Mbit的SDRAM存储芯片,可用于实现图像、音频以及大容量数据缓存;支持用SD卡进行数据存储。
征途Pro开发板上还具备EEPROM存储芯片(64Kbit)、RS-232接口、RS-485接口,可满足I2C通信协议、UART串口通信协议的学习要求;具有温度传感器DS18B20、温湿度传感器DHT11、环境光传感器AP3216C、红外接收器4种传感器,全方位满足用户对温度、湿度、光照、红外等模拟信号的采集需求,掌握传感器的驱动控制;摄像头接口支持OV5640、OV7725摄像头,可实现多分辨率图像数据采集;VGA接口、HDMI接口、RGB TFT-LCD接口支持多种分辨率图像的显示;高性能音频编解码芯片WM8978可实现音频信号的采集和再现。
板载PHY芯片LAN8720,使用RMII通信接口,支持百兆传输,可实现基于以太网的数据环回,图像、音频传输;PCF8563芯片,结合六位八段数码管可实现RTC实时时钟显示;具有4个独立机械按键、2个电容触摸按键,可作为触发信号输入;有4个LED灯、1个无源蜂鸣器,可作为状态指示装置;诸多扩展I/O口,方便外载板卡或传感器的使用;在供电方面,板卡使用可以稳定输入12V直流电的电源适配器,并加入过流保护。
此处只是对“征途Pro”FPGA开发板的简单介绍,详细说明可参见第2章。
五、配套资料获取
由于篇幅限制,本书在出版时做了适当删减。为方便各位读者学习,此处提供了完整资料与配套工程的下载链接。获取资料的方式如下:
配套资料GitHub地址:https://github.com/Embedfire-altera
配套资料Gitee地址:https://gitee.com/Embedfire-altera
在线文档查阅地址:http://doc.embedfire.com/fpga/altera/ep4ce10_mini
http://doc.embedfire.com/fpga/altera/ep4ce10_pro
六、野火技术论坛
读者如果在学习过程中遇到问题,可以到论坛www.firebbs.cn发帖交流,开源共享,共同进步。
鉴于笔者水平有限,书中难免存在错漏之处,读者若发现不足之处,望及时反馈至邮箱firege@embedfire.com,以便我们进行优化。祝你学习愉快!FPGA的世界,野火与你同行!
注意:本书所涉及的软件仅供教学使用,不得用于商业用途。个人或公司因将其商业用途所导致的责任,后果自负。