创建工程
创建文件夹
首先我们先创建一个文件夹作为工程。
文件夹最好直接叫工程名字
我们这边举例叫led
然后再工程文件夹里面依次再创建4个文件夹

1 | project_name/ |
doc:该文件夹主要放置一些文档资料,如数据手册,使用Visio画的波形图、自己写的文档等都可以存放到这个文件夹里面。
par:该文件夹主要放置的是工程文件,使用Quartus II新建的工程就保存到这里。Quartus/Vivado 工程文件、时序约束.sdc/.sdf、管脚分配、综合报告、编译输出 bit 流 /sof 下载文件
rtl:该文件夹主要放置可综合的代码,就是最后可以生成硬件电路的代码,因为这部分代码主要是寄存器描述的寄存器传输级的代码所以文件夹取名为rtl(register transport level),因为也是我们的设计文件,所以也可以取名为design。
sim::该文件夹放置对可综合代码的仿真文件,即不可综合的代码,也叫testbench,所以也可以将文件夹取名为testbench或者tb都可以。
主要的文件夹就是这四个,后期的一些项目有可能还会用到Matlab、IP核,届时可以再新建一个单独管理Matlab文件和IP核文件的文件夹,文件数量可以根据自己的需求进行分类管理。
QuartusII创建工程
我们打开QuartusII
点击File -> New Project Wizard...


点next
第一个选择刚刚创建的文件夹里面的par文件夹
第二个和第三个填工程名字

在“File name”栏选择添加已经写好的.v文件,如果有多个文件可以一次性全部添加进工程,因为我们还没有写好的.v文件,所以我们不进行添加,直接点击“Next”

下面这里是选择芯片。
我手头的芯片是:
系列:Cyclone IV E(第四代低成本 FPGA)
型号:EP4CE6F17C8N
这4个选项设置好以后就得到了框的筛选结果,我们使用的芯片具体型号——EP4CE10F17C8。全部选择好后,点击“Next”

这里是选择一些三方的开发工具,我们暂时先不用管,直接点击“Next”

最后生成整个新工程向导的一个总结,可以验证下是否和自己最初的选择有出入,如果没有问题点击“Finish”

出现这个代表创建完成

文件夹情况,后续双击led.qpf就可以打开了

然后,如果后续要修改芯片,我们双击这里,也可以重新选择芯片

添加verilog代码文件
创建.v文件

1 | module led |
我们粘贴代码
点保存,保存到rtl的文件夹里面
注意:module XXX,XXX一定要和你工程名字一样。我这边叫led所以是led,不然后面会报错。

我们可以看到文件已经添加进来了

我们可以这样移除文件

然后双击重新添加进来

点击add,再点apply,点ok就可以添加进来了

进行代码的分析和综合,该步骤的目的是首先检查语法是否有错,其次是综合器将代码解释为电路的形式。

红色框里面是绿色说明没报错,蓝色框里面是编译的信息

绑定管脚
打开管脚绑定界面

Node Name:RTL代码中定义的端口名字。
Direction:管脚的输入输出方向。
Location:管脚绑定的位置。
I/O Bank:用于支持对应不同的电平标准,即VCCIO。每个Bank只能有一种电压标准,一般情况下选择默认值就好。一种颜色下的I/O口代表一组Bank。当管脚的Location约束完成以后,I/O Bank会自动进行填充。
VREF Group:Bank内部的细分区域,非修改属性,会自动填充。
(6) I/O Standard:对管脚内部的I/O进行不同的电平约束。FPGA I/O的电压由I/O Bank上的VCC引入,一个Bank上如果引入了3.3V的 TTL电平,那么此时整个Bank上输出3.3V的TTL电平。设置好以后工具可以结合Current Strength一起计算功率。如果没有特殊要求默认即可。
Reserved:这个是对管脚内部的I/O逻辑进行约束的,这个约束的是FPGA在I/O端的输入输出区域的逻辑。无特殊要求可以为空。
Current Strength:是驱动电流强度,一般选择默认值。如果需要驱动大功率的电路,可以在FPGA外围加驱动电路。
Slew Rate:是电压转换速率,表示单位时间内电压升高的幅值,跟信号跳变时间有关,一般选择默认值。
Differential Pair:差分管脚。
Filter:通过过滤选项显示指定种类的管脚
双击输入管脚

所有管脚配置完成后就可以关闭当前界面了。
全编译和分析综合的不同是全编译需要进行布局布线,管脚绑定后就可以对全局进行布局布线了

然后红色框内的绿色说明编译没问题,蓝色是编译情况
警告的话我们下一期管脚约束里面会讲,我们先忽略

烧录芯片
我们打开Programmer,选择烧录器


添加要烧录的文件

点击Start,开始烧录。看到右上角百分百说明烧录成功

固化程序
我们可以留意到,我们烧录的文件是led.sof
sof这个文件,他断电后就没了。那我们要固化文件咋办。
点击“File”下的“Convert Programming Files…”

“Programming file type:”栏是选择输出文件的类型,我们选择“JTAG Indirect ConfIguration File(.jic)”

Configuration device:”栏是flash的型号,我们选择“EPCS16

“File name:”栏是选择输出.jic文件的位置,“ledquartus_prjoutput_files”,并重命名为“led.jic”

点击“Input files to convert”框中的“Flash Loader”后会发现“Add Device…”从不能被选择的情况下可以被选择,然后点击“Add Device…”

选择我们使用的FPGA芯片所属的型号,在“Device family”框中将“Cyclone IV E”前的括号勾选上,在“Device name”框中将“EP4CE10”前的括号勾选上,然后点击“OK”。添加后如图

点击“Input files to convert”框中的“Sof Data”后会发现“Add File…”可以被选择,然后点击“Add File…”

因为“led.jic”文件的生成需要“led.sof”文件的参与,所以选择路径“ledquaruts_prjoutput_files”下的“led.sof”文件后点击“Open”

选择“led.sof”文件后如图 9‑117所示,然后点击“Generate”生成“led.jic”文件

烧录固化程序
我们重新打开烧录工具
把之前那个固件先删掉

然后重新添加jrc文件

先将“Program/Configure”下的方框打上钩,然后点击“Start”执行程序的固化。

下载的进度较之前明显慢很多,所以我们在平时调试的时候可以不固化程序,等待所有的工作都完成后,最后的再把完成的程序固化到开发板中。

最后,要给主板重新上电。
固化的话是烧录到flash里面的,要重新上电,才能看到效果。
如果只是sof,他是直接烧录到芯片,所以可以直接看效果。