FPGA 开发流程
1、需求分析:分析需要实现什么功能
2、系统设计:对系统进行设计,需要哪些模块,实现什么功能,数据流怎么走,带宽、工作频率怎么样
3、硬件选项:根据功能、性能需求选择合适的FPGA芯片
4、绘制系统框图:确定系统内各个子模块的结构层次,梳理对外的输入输出信号和字模块之间的交互信号
5、绘制波形图:工具模块功能结合芯片数据手册,确定模块信号的时序关系,使用绘图软件绘制各个模块的波形图
6、编写RTL代码:严格按照编写各个模块的代码
7、软件仿真:调试RTL代码,出现和绘制相同的仿真波形
8、新建工程:新建FPGA工程,并且添加RTL代码
9、分析和综合:查看报告,进行修改
10、约束输入:在FPAG开发平台对工程引脚进行约束实现
11、设计实现:工程布局和布线,下载文件,上板验证
12、上板验证:上板实际验证调试
FPGA 工程管理
FPGA 工程内部文件主要分为以下四类:
1、辅助文件目录doc:波形图文件等
2、工程及产生的文件目录prj:
3、代码文件目录rtl:RTL代码文件
4、sim目录:仿真文件
点亮 LED 灯
功能分析
使用启明星开发板底板上的 PL_KEY0 按键来控制底板上的 PL_LED0 灯亮灭。
按键没有被按下时,PL_LED0灯保持常灭;
当按键 PL_KEY0被按下时,PL_LED0灯被点亮;
当按键PL_KEY0被松开时,PL_LED0 灯被被熄灭。
硬件介绍
实物连接
电路原理图
当 ZYNQ PL 端的 IO 输出高电平 1 时,点亮 LED 灯;
当 ZYNQ PL 端的 IO 输出低电平 0 时,LED 灯熄灭。
PL_KEY0 按键未被按下时为高电平,被按下时为低电平。
系统设计
需要一个按键输入和一个 LED 灯输出,所以一个模块就可以实现“点亮 LED”的功能
模块设计
模块设计主要是想通过图形更加直观的展示出输入与输出之间的关系。
使用 Visio 工具新建一个“点亮 LED 灯.vsdx”文件保存下led/doc目录下
“点亮 LED”实验的模块框图:
绘制波形图
使用按键控制 LED 灯的亮灭
按键默认是高电平,
按键被按下是低电平;LED 灯是高电平点亮,低电平熄灭
真值表:
波形图的信号大致分为三大类,即输入信号,输出信号与中间变量信号。在波形图中我们将输入信号的颜色定义为绿色,输出的信号定义为红色,中间变量信号定义为蓝色。
编写 RTL 代码
led\rtl目录下,Notepad++工具新建文件
module led( input key , //定义了一个一位按键输入信号 keyoutput led //定义了一个一位的输出信号 led
);assign led = ~key; //通过 assign 赋值语句将输入信号 key 的值取反后赋值给输出信号 ledendmodule
Modelsim 手动仿真
编写实验对应的仿真文件(TestBench)
1、 向被测功能模块的输入接口添加激励;
2、 对被测功能模块的顶层接口进行信号例化;
3、 判断被测功能模块的输出是否满足设计预期。
在 led\sim 中新建一个 tb 文件夹,使用Notepad++在 tb 文件夹下面新建一个“tb_led.v”文件
在 modelsim 中建立 project,选择 File->New->Project
编译出现错误
查看文件后,发现文件内容有错误,修改后,重新编译,没有错误
编译完成后,在 ModelSim 菜单栏中找到【Simulate】→【Start Simulation…】菜单并点击
用的最多的是 Design、Libraries 和 SDF 这三个标签
Design 标签: 可以选择仿真需要的库,被选中的全部文件名都会出现在 Design Unit(s)区域,Resolution 选项可以选择仿真的时间精度,一般都是设置在默认状态,这时 Modelsim 依照仿真设计文件中指定的最小时间刻度来进行仿真,如果设计文件中没有指定,则按 1ns 来进行仿真。
Libraries 标签:可以设置搜索库。Search Libraries 和 Search Libraries First 的功能基本一致,唯一不
同的是 Search Libraries First 中指定的库会在指定的用户库之前被搜索
SDF 标签:是 Standard Delay Format(标准延迟格式)的缩写,内部包含了各种延迟信息,也是用于时序仿真
的重要文件。SDF Files 区域用来添加 SDF 文件,可以选择 Add 按钮进行添加,选择 Modify 按钮进行修改,
选择 Delete 按钮删除添加的文件。
Options 区域设置 SDF 文件的 warning 和 error 信息。第一个“Disable SDF warning”是禁用 SDF 警
告,第二个“Reduce SDF errors to warnings”是把所有的 SDF 错误信息变成警告信息。区域 Multi-Source
delay 中可以控制多个目标对同一端口的驱动,如果有多个控制信号同时控制同一个端口或互连,且每个信
号的延迟值不同,可以使用此选项统一延迟。下拉列表中可供选择的有三个选项:latest、min 和 max。latest
选项选择最后的延迟作为统一值
在 Design 标签页面中选择 work 库中的 tb_led 模块,在
Optimization 一栏中勾选“Enable optimization”
鼠标右键单击“u_led”,选择“Add Wave”选项
Restart:复位仿真
Run Length:设置仿真时间
Run:运行仿真
ContinueRun:继续仿真
Run -All:一直仿真
Break:中断当前编译或者仿真
Stop:在下一步或者下一时间之前停止仿真。
点击Run -All得到下面波形
新建工程
打开 Vivado 软件,新建一个工程,通过新建工程向导的方式来创建工程,再新建一个 Verilog 顶层文件,将设计的代码输入到新建的Verilog 顶层文件中,HDL 源代码输入完毕之后,就是对设计文件进行分析与综合了。
在 FPGA 设计中,综合(Synthesis)就是将 RTL 设计转变为由 FPGA 器件中的查找表(LUT)、触发器(FF)等各种底层电路单元所组成的网表,在这个过程中综合器也会对设计进行优化,例如删除多余的逻辑等等。
开始使用 Vivado 软件新建点亮 LED 实验的 FPGA 工程
点击“Create Project 来创建一个新的工程”。
项目名称命名为“led”,工程路径是led/prj 文件夹
设计输入
每次保存后,Vivado 都会对源文件进行部分语法的检查,如果有语法的错误,Vivado 会给出提示。
分析与综合
点击“Flow Navigator”窗口中的
“Open Elaborated Design”按钮
点击“Open Elaborated Design”按钮弹出的提示框直接点击“OK”
进行 I/O 引脚分配,在右上角的窗口布局(Layout)选择器中选择“I/O Planing”,
IO 分配的配置选项
启明星开发板的底板的原理图“PL_KEY0”与“PL_LED0”
使用快捷键“Ctrl+S”进行保存设置
创建一个新的约束文件
开发板连接完成并打开电源开关后,点击“Hardware”子窗口中的“Auto Connect”按钮
Vivado 就已经和下载器连接成功
点击Program Device,点击“Program”按钮下载程序
程序下载完成后,看到位于底板上的 PL_LED0 灯是常灭状态,此时按下 PL_KEY0 按键,PL_LED0 灯会被点亮,松开按键,LED 灯被熄灭。
下载完比特流后,如果开发板断电,程序会丢失。如果想要程序断电不丢失的话,需
要将程序固化至开发板中,这个需要在嵌入式 Vitis 软件中完成,ZYNQ 芯片无法单独固化比特流文件
(PL 的配置文件)
学习记录,侵权联系删除
来源:正点原子