FPGA 入门实战:Quartus II 环境配置与 LED 点亮
1. 工程准备
首先建立一个名为 led 的工程文件夹,文件夹下包含 doc、quartus_prj、rtl、sim 四个子文件夹:
[图片]
各文件夹功能如下:
- doc:主要包含文档资料、数据手册、Visio 波形等,相当于档案库;
- quartus_prj:主要包括使用 Quartus II 软件新建的工程,相当于操作台;
- rtl:主要放置生成硬件电路的代码,相当于原材料;
- sim:放置对生成硬件电路代码的仿真文件,相当于质检室。
这四个文件夹各自完成不同的分工,它们之间通过路径关联和文件引用,形成 FPGA 开发闭环。quartus_prj 作为工程中枢,向上访问 doc 读取说明,向下访问 rtl 获取硬件代码,向外访问 sim 获取仿真脚本;sim 向上访问 rtl 在逻辑上验证硬件代码的正确性。
2. 设计过程
无论使用 FPGA 做什么类型的项目,都要参照具体的流程。这里介绍通用的开发流程:
- 看手册和原理图:搞清楚需要实现什么功能,就像做饭时需要看食谱。
- 选芯片与建工程:对应选择食材和调料,新建工程并选择对应的开发芯片。本文使用野火的 Altera EP4CE10 征途 Mini 开发板。
- 编写代码:运用 Verilog 代码实现电路功能,即'炒菜'。
- 编译与仿真:写完代码后,编译代码、写仿真软件测试是否有逻辑错误,即'品尝'。
- 引脚分配:测试仿真完成后,分配硬件引脚,使工程能正常跑出来,即'装盘'。
有了具体流程后,按此思路实现 LED 点亮工程。
3. 工程实现
(1)看食谱(原理图分析)
打开开发板的原理图,找到'按键'和'LED'模块,选取 KEY1 与 LED1:
[图片]
[图片]
分析原理图实现 LED 点亮的逻辑:
- 当 SW2 按键松开时,1、2 与 3、4 不导通,KEY1 被拉低到 GND 低电平,发出低电平信号 key_in 为 0。FPGA 输入引脚接收 0 信号,给 LED 电路发送 0 信号,led_out 为 0,LED1 不亮。
- 当 SW2 按键按下时,1、2 与 3、4 导通,KEY1 被拉高到 3V3 高电平,发出高电平信号 key_in 为 1。FPGA 输入引脚接收 1 信号,给 LED 电路发送 1 信号,led_out 为 1,LED1 亮。
接着在 Visio 中绘制 LED 功能框图和波形图,此处不再赘述,理解上述电路解析后容易理解:
[图片]
[图片]
记得做完后保存到 doc 文件夹中。至此,工程前提工作就绪,接下来新建工程,开始备菜。
(2)备菜(新建工程)
在 Quartus 中新建工程,工程放到 quartus_prj 文件夹中:
[图片]
对于以下页面,官方文档说明较简略,补充解释:将写好的代码文件和新建工程绑定在一起,Quartus 只有在列表里看到该文件,才会读取它生成对应的电路。目前尚未开始写代码,暂时不用添加代码文件。
[图片]
接下来是器件选择,补充解释:
- Family:器件族,即使用的哪类芯片,在 FPGA 板芯片上有介绍。本文使用的是 Cyclone IV E 系列芯片。
- Package:封装类型。本文选的是 Any QFP 封装。
- 板载 CPU 型号为 EP4CE10E22C8N,拆解如下:
- a) EP4CE:产品系列,即 Family 中选择的 Cyclone IV 系列 E 型。
- b) 10:10k 个逻辑单元。
- c) E:EQFP 类型封装,归类在 QFP 大类下,故 Package 选择 Any QFP。
- d) 22:Pin count 中的引脚数量,即 144 个。
- e) C:工作温度,0-85°。
- f) 8:速度等级(Speed grade)。
- g) N:工艺标识,无铅工艺。
看完上述内容,应懂得如何读取 FPGA 芯片型号,同时工程配置已完成。Available devices 不做详细解说。在新建工程中的配置一定要和芯片严格对应,否则影响后续编译结果。
[图片]
[图片]
(3)炒菜(编写代码)
看完食谱备好食材后,开始写代码。在 Notepad++ 中,于 rtl 文件夹下新建一个名为 led.v 的文本文件:
[图片]
回想第一步中对 quartus_prj 文件夹的介绍:'quartus_prj 作为工程中枢.....向下访问 rtl 获取硬件代码'。编写完代码后,需让 quartus_prj 访问提取使用。回到 Quartus 软件,将编写的代码(led.v 文本文件)添加到工程中,这样 quartus_prj 就可以访问 rtl 获取硬件代码了。具体步骤参考官方文档。至此,炒菜部分完成。
(4)品尝(编译与仿真)
菜炒好以后,要对代码进行编译和仿真。任务栏(Task)功能如下:
- Start Project:工程初始化,包含新建工程、选择芯片型号、添加源文件等。
- Create Design:设计输入与文件管理的核心入口,可新建或打开代码文件。
- Assign Constraints:导入约束文件、进行引脚分配等。
- Compile Design:负责代码语法检查、布局布线、生成下载文件、时序分析等。
- Verify Design:工程收尾操作,负责打包整个工程,归档并导出工程数据库。
[图片]
查看 RTL 视图,即将代码转换成硬件电路:
[图片]
可以看出,RTL 视图与 Visio 软件中设计的 LED 电路一致,且代码编译没有问题。之后进行仿真测试。RTL 视图将代码综合成硬件电路,但无法知道电路输入输出的状态,因此需要跑仿真证明代码逻辑在实际运行中正确。
输出网表的概念:把代码翻译成 FPGA 能读懂的硬件电路。'输出网表的语言格式'是 Verilog,'输出网表的时间单位'是仿真时的时间单位。
[图片]
得到仿真波形后,对比 Visio 中绘制的波形图,完全一致。RTL 视图和 Modelsim 的仿真,无论是硬件电路还是输入输出波形都与初始设计高度吻合,'品尝'这一步已完成。
(5)装盘(引脚分配)
仿真无误后,分配引脚,即具体看按键 SW1 和 LED1 在电路板上的哪些引脚。因为 EP4CE10E22C8N 型芯片是把 key_in 和 led_out 分配到 IOBANK_3 里面,因此引脚配置如下:
- key_in @ IOBANK_3
- led_out @ IOBANK_3
[图片]
最后提醒,分配引脚时一定参考手册或者原理图,不然轻则工程无法实现,重则芯片烧毁。至此,已装盘,后续步骤参考官方文档。

