本文已参与「新人创作礼」活动,一起开启掘金创作之路。
写在前面
本篇通过一个完整的工程详细的介绍了FPGA的完整设计流程; 本篇完成已经进三千字,希望能给读者介绍的更详尽,带领大家走近FPGA; 笔者才疏学浅,本篇一定有疏漏之处,希望读者能够批评指教。
笔者起初编写的初心是为大家带来高质量内容,由于文字图片形式远不如视频介绍带来的直观,并且文字介绍又是一个极大地工程,拖慢了笔者的学习进程。笔者就在思考这种介绍的意义又在那里,本篇可能会停更一段时间,笔者会持续学习,在掘金其它专栏发光发热,希望读者理解
工程文件存放位置的设置
如下图,建立一个文件夹存放本工程的文件,笔者此处在FPGA文件夹中建立了一个名为led的文件夹存放点亮你的LED灯工程文件
在led文件夹中建立四个子文件夹
- doc文件夹主要存放数据手册、绘制的波形图、自己编写的文档或者项目日志等等;
- quartus_prj文件夹存放由Quartus创建的工程文件;
- rtl文件夹主要放置可综合的代码即最后生成硬件电路的代码;
- sim文件夹主要放置对可综合代码的仿真文件。
电路原理图描述
按下按键,LED灯点亮;松开按键,LED灯熄灭。
按键信号(key_in)和LED灯信号(led_out)相同。
波形图的绘制
在doc文件夹中新建名称为led的Visio的文件
Visio软件需要自行安装,本篇不对安装流程进行介绍。
双击打开,进行波形图的绘制
绘制的波形如下图所示
rtl代码的编写
什么是RTL
RTL(Register Transfer Level),直译为寄存器转换级,也就是在这个级别下,要描述各级寄存器(时序逻辑中的寄存器),以及寄存器之间的信号是如何转换的(时序逻辑中的组合逻辑)。
通俗来讲,RTL代码不是在“写代码”,是在画电路结构。RTL代码需要“画”出输入输出端口,各级寄存器,寄存器之间的组合逻辑和前三者之间的连接。对于组合逻辑,只需要软件级描述,将其功能包装在“黑匣子”中即可,无需考虑其门级结构。
编写rtl代码
在rtl子文件夹中,新建一个led的类型为v的文件
双击led.v文件打开,编写代码
module led
(
input wire key_in,
output wire led_out
);
assign led_out = key_in;
endmodule
rtl视图
按照下图进行点击打开rtl视图界面
本工程rtl视图如下图所示,按键和led利用一根导线连接起来了**
Quartus工程的创建和代码的编译
Quartus工程的创建
双击打开Quartus软件,进入下图页面
点击File,然后点击图示标志,进入创建工程向导
首先进入工程介绍页面,直接点击Next进入下一步
接着给工程文件选择文件存放位置,为事先创建好的quartus_prj文件夹
在第二个框中给工程文件进行命名,保持第三个框和第二个框一致,点击Next进入下一步
此处工程命名为led
然后此选择框不做任何操作,点击Next进入下一步
此处选择自己板载的FPGA芯片,点击Next进入下一步
对仿真进行选择,点击Next进入下一步
最后对创建的工程的参数进行检查,没有错误点击Finish完成创建
创建后的对话框如下图所示
代码的添加
点击下方Files,鼠标右击上方Files点击进入(如第二张图所示点击)
点击图示标志,准备添加编写的led.v文件
选择图示文件夹中的rtl文件,选择打卡
依次点击Add,Apply和OK完成文件的添加
此时如下图中就出现了led.v文件标志
代码的编译
点击下图所示图标,进行代码的编译
下图中显示的为编译完成后的界面,中间箭头指示的为编译后的提示;左方箭头指示的为编译的进程;右方箭头知识的为编译后出现错误和警告的提示
工程的仿真
仿真代码的编写
在文件夹sim中新建一个tb_led.v的文件,以tb开头表示仿真代码
双击打开后,进行代码的编写,完整仿真代码如下图所示
`timescale 1ns/1ns
module tb_led();
reg key_in ;
wire led_out;
initial key_in <= 1'b0;
always #10 key_in <= {$random} % 2;
led led_inst
(
.key_in (key_in ),
.led_out(led_out)
);
endmodule
仿真代码的添加与编译
参照上面代码添加及编译的过程,进行仿真代码的操作
Quartus联合Modelsim仿真
点击下图所示图标,创建TextBench,进行仿真
TextBench即测试文件
点击下图所示Simulation图标
依次选择下图所指示的图标,进入第二张交互页面
点击New,进入创建TextBench页面
将下图框中内容进行设置,一般与sim子文件夹中的.v文件一致
点击下图所示图标,添加sim子文件夹的.v文件
**选择好文件后,点击Add进行添加,
一路点OK完成创建
点击下图所示图标,与ModelSim进行联合仿真
启动Modelsim运行一定时间后,进入下图所示页面
依据另一专栏所讲的,对所示波形进行调整
下图所示波形与绘制的波形图一致,仿真通过
上板验证_下载与固化
管脚的绑定
点击下图所示标志,进入管脚绑定界面,自行绑定管脚
笔者绑定好的管脚如下图所示
再次进行编译,再次进行编译,锁定管脚**
点击下图所示标志,进入下载界面
程序的下载
点击Start进行下载,下载成功为第二张图所示
程序的固化
防止掉电后程序丢失
依次点击图示File、Convert Progtamming Files...进入下载文件生成页面
选择生成.jic文件,下方根据自己的板卡进行选择,笔者根据板卡选择的是EPCS4
依次点击左边框内标志和右边框内标志,进入第二张图片进行选择(根据自己板卡进行选择)
依次点击左边框内标志和右边框内标志,选择.sof文件添加
如下图所示添加成功
创建.jic文件,第二张图片显示创建成功
进入文件下载界面,如图所示删除原先.sof文件
如下图所示,添加.jic文件
选择文件夹中的.jic文件
勾选下图所指示标志
点击Start进行下载
下载成功,程序固化完成