点亮你的LED灯

131 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

写在前面

本篇通过一个完整的工程详细的介绍了FPGA的完整设计流程; 本篇完成已经进三千字,希望能给读者介绍的更详尽,带领大家走近FPGA; 笔者才疏学浅,本篇一定有疏漏之处,希望读者能够批评指教。

笔者起初编写的初心是为大家带来高质量内容,由于文字图片形式远不如视频介绍带来的直观,并且文字介绍又是一个极大地工程,拖慢了笔者的学习进程。笔者就在思考这种介绍的意义又在那里,本篇可能会停更一段时间,笔者会持续学习,在掘金其它专栏发光发热,希望读者理解

工程文件存放位置的设置

如下图,建立一个文件夹存放本工程的文件,笔者此处在FPGA文件夹中建立了一个名为led的文件夹存放点亮你的LED灯工程文件

20220503071454.png

在led文件夹中建立四个子文件夹

  • doc文件夹主要存放数据手册、绘制的波形图、自己编写的文档或者项目日志等等;
  • quartus_prj文件夹存放由Quartus创建的工程文件;
  • rtl文件夹主要放置可综合的代码即最后生成硬件电路的代码;
  • sim文件夹主要放置对可综合代码的仿真文件。

20220503073022.png

电路原理图描述

image.png

按下按键,LED灯点亮;松开按键,LED灯熄灭。

按键信号(key_in)和LED灯信号(led_out)相同。

波形图的绘制

在doc文件夹中新建名称为led的Visio的文件

Visio软件需要自行安装,本篇不对安装流程进行介绍。

20220503074754.png

双击打开,进行波形图的绘制

image.png

绘制的波形如下图所示

image.png

rtl代码的编写

什么是RTL

RTL(Register Transfer Level),直译为寄存器转换级,也就是在这个级别下,要描述各级寄存器(时序逻辑中的寄存器),以及寄存器之间的信号是如何转换的(时序逻辑中的组合逻辑)。

通俗来讲,RTL代码不是在“写代码”,是在画电路结构。RTL代码需要“画”出输入输出端口,各级寄存器,寄存器之间的组合逻辑和前三者之间的连接。对于组合逻辑,只需要软件级描述,将其功能包装在“黑匣子”中即可,无需考虑其门级结构。

编写rtl代码

在rtl子文件夹中,新建一个led的类型为v的文件

QQ截图20220504163503.png

双击led.v文件打开,编写代码

QQ截图20220504165609.png


module  led
(
    input   wire        key_in,
    output  wire        led_out
);

assign  led_out = key_in;

endmodule

rtl视图

按照下图进行点击打开rtl视图界面

image.png

本工程rtl视图如下图所示,按键和led利用一根导线连接起来了**

QQ截图20220506141019.png

Quartus工程的创建和代码的编译

Quartus工程的创建

双击打开Quartus软件,进入下图页面

image.png

点击File,然后点击图示标志,进入创建工程向导

QQ截图20220505195125.png

首先进入工程介绍页面,直接点击Next进入下一步

QQ截图20220505200354.png

接着给工程文件选择文件存放位置,为事先创建好的quartus_prj文件夹

QQ截图20220505200645.png

QQ截图20220505220717.png

在第二个框中给工程文件进行命名,保持第三个框和第二个框一致,点击Next进入下一步

此处工程命名为led

QQ截图20220505200723.png

然后此选择框不做任何操作,点击Next进入下一步

QQ截图20220505221426.png

此处选择自己板载的FPGA芯片,点击Next进入下一步

QQ截图20220505221826.png

对仿真进行选择,点击Next进入下一步

QQ截图20220505222010.png

最后对创建的工程的参数进行检查,没有错误点击Finish完成创建

QQ截图20220505222103.png

创建后的对话框如下图所示

QQ截图20220505222237.png

代码的添加

点击下方Files,鼠标右击上方Files点击进入(如第二张图所示点击)

QQ截图20220505222346.png

image.png

点击图示标志,准备添加编写的led.v文件

QQ截图20220505222648.png

选择图示文件夹中的rtl文件,选择打卡

QQ截图20220505222749.png

依次点击Add,Apply和OK完成文件的添加

QQ截图20220505222824.png

此时如下图中就出现了led.v文件标志

QQ截图20220505222850.png

代码的编译

点击下图所示图标,进行代码的编译

QQ截图20220506063002.png

下图中显示的为编译完成后的界面,中间箭头指示的为编译后的提示;左方箭头指示的为编译的进程;右方箭头知识的为编译后出现错误和警告的提示

QQ截图20220506063127.png

工程的仿真

仿真代码的编写

在文件夹sim中新建一个tb_led.v的文件,以tb开头表示仿真代码

QQ截图20220506064432.png

双击打开后,进行代码的编写,完整仿真代码如下图所示

QQ截图20220506070154.png

`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

仿真代码的添加与编译

参照上面代码添加及编译的过程,进行仿真代码的操作

QQ截图20220506070923.png

Quartus联合Modelsim仿真

点击下图所示图标,创建TextBench,进行仿真

TextBench即测试文件

image.png

点击下图所示Simulation图标

QQ截图20220506092241.png

依次选择下图所指示的图标,进入第二张交互页面

QQ截图20220506092505.png

QQ截图20220506092747.png

点击New,进入创建TextBench页面

QQ截图20220506092845.png

将下图框中内容进行设置,一般与sim子文件夹中的.v文件一致

QQ截图20220506093023.png

点击下图所示图标,添加sim子文件夹的.v文件

QQ截图20220506093219.png

**选择好文件后,点击Add进行添加,

QQ截图20220506093543.png

一路点OK完成创建

QQ截图20220506093857.png

点击下图所示图标,与ModelSim进行联合仿真

QQ截图20220506071157.png

启动Modelsim运行一定时间后,进入下图所示页面

QQ截图20220506094511.png

依据另一专栏所讲的,对所示波形进行调整

下图所示波形与绘制的波形图一致,仿真通过 QQ截图20220506094708.png

上板验证_下载与固化

管脚的绑定

点击下图所示标志,进入管脚绑定界面,自行绑定管脚

QQ截图20220506095056.png

笔者绑定好的管脚如下图所示

再次进行编译,再次进行编译,锁定管脚**

QQ截图20220506095136.png

点击下图所示标志,进入下载界面

QQ截图20220506100204.png

程序的下载

点击Start进行下载,下载成功为第二张图所示

QQ截图20220506100259.png

QQ截图20220506100309.png

程序的固化

防止掉电后程序丢失

依次点击图示File、Convert Progtamming Files...进入下载文件生成页面

image.png

选择生成.jic文件,下方根据自己的板卡进行选择,笔者根据板卡选择的是EPCS4

QQ截图20220506132720.png

依次点击左边框内标志和右边框内标志,进入第二张图片进行选择(根据自己板卡进行选择)

QQ截图20220506133231.png

QQ截图20220506133353.png

依次点击左边框内标志和右边框内标志,选择.sof文件添加

QQ截图20220506133701.png

QQ截图20220506133859.png

如下图所示添加成功

QQ截图20220506133906.png

创建.jic文件,第二张图片显示创建成功

QQ截图20220506134453.png

QQ截图20220506134545.png

进入文件下载界面,如图所示删除原先.sof文件

QQ截图20220506134721.png

如下图所示,添加.jic文件

QQ截图20220506134735.png

选择文件夹中的.jic文件

QQ截图20220506134748.png

勾选下图所指示标志

QQ截图20220506134808.png

点击Start进行下载

QQ截图20220506134823.png

下载成功,程序固化完成

QQ截图20220506134835.png