本文将从头新建一个Vivado 2018.2工程,使用正点原子的ZYNQ-7020实现LED闪烁的最基本功能。
1 创建工程
1、点击Create Project
,再点击Next
。
2、创建工程文件夹
修改Project name,然后点击Next
。
3、选择工程类型:
点击RTL Project
,然后点击Next
。
4、添加设计文件和约束文件:
设计文件包括HDL、网表、块设计和IP核,一开始可以先不添加,在创建完工程后再添加,这里直接点击Next
。
5、选择芯片型号。
zynq-7020是xc7z020clg400-2。Package为clg400,Family为ZYNQ-7000,Speed为-2。
6、创建工程:
点击Finish
完成创建。
2 编写程序
1、在Design Sources
中添加新文件,顶层文件名必须与工程名相同,这里取名为000_test_project.v
。
2、在000_test_project.v
中添加代码并保存:
module名称不可以用数字开头,但可以与.v文件名不同,这里设置为test_project
。
// 000_test_project.v
module test_project(
input sys_clk,
input sys_rst_n,
output [1:0] led
);
// reg define
reg [25:0] cnt;
assign led = (cnt <= 26'd2500_0000) ? 2'b01 : 2'b10;
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
cnt <= 26'd0;
else if(cnt < 26'd5000_0000)
cnt <= cnt + 1'b1;
else
cnt <= 26'd0;
end
endmodule
3 RTL分析
1、点击RTL Analysis
下的Open Elaborated Design
,然后点击弹窗的OK
。
2、点击Schematic
打开逻辑图,可以结合Netlist
网表图查看电路结构。
3、管脚约束:右上角点击I/O Planning
,设置引脚的输入输出。
需要联系电路板原理图进行设置。
设置LED输出引脚和时钟、复位输入引脚。
按下Ctrl+S
保存,设置约束文件名称为000_test_project.xdc
。
点击OK
后,关闭RTL Analysis
。点击Sources
就可以看到约束文件已经创建。
文件内引脚约束信息如下:
set_property PACKAGE_PIN U18 [get_ports sys_clk]
set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]
set_property IOSTANDARD LVCMOS33 [get_ports sys_rst_n]
set_property PACKAGE_PIN N16 [get_ports sys_rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property PACKAGE_PIN L15 [get_ports {led[1]}]
set_property PACKAGE_PIN H15 [get_ports {led[0]}]
4 综合 Synthesis
点击左侧菜单栏的Run Synthesis
。可以选择运行综合时使用的CPU核心数量。
等待片刻可以看到Project Summary
中显示综合已经完成的信息。
点击Open Synthesized Design
,即可看到芯片内使用的相关资源。
5 实现 Implementation
点击Run Implementation
。
实现完成后,可以看到Project Summary
中显示实现已经完成的信息。
点击Open Implemented Design
即可得到相关设计结果。
6 生成比特流文件
点击Generate Bitstream
7 调试程序
首先将FPGA电路板插上电源和烧录工具,连接到电脑。
然后点击Open Hardware Manager
的Open Target
,然后点击Auto Connect
自动连接。
点击Program Device
来将程序写入芯片,不过只是暂时的,芯片掉电重启后,程序就丢失了。
在Program Device窗口中点击Program
。
实验结果:
可以发现FPGA底板上的两个LED灯交替闪烁。
8 程序固化
这是由于 ZYNQ 非易失性存储器的引脚(如 SD 卡、QSPI Flash)是 ZYNQ PS 部分的专用引脚,这些非易失性存储器由 PS 的 ARM 处理器进行驱动,需要将 bit 流文件和 elf 文件(软件程序的下载文件)合成一个 BOOT.BIN,才能进行固化,因此需要学习 ZYNQ 嵌入式 SDK 的开发流程。
要把程序存储在非易失性存储器中,在上电或者复位时让程序自动运行,这个过程需要启动引导程序(Boot Loader)的参与。Boot Loader 会加载 FPGA 配置文件,以及运行在 ARM 中的软件应用。(具体操作方法略)