一、创建 Vivado 工程
1、启动 Vivado
2、在 Vivado 开发环境里点击“Create New Project”,创建一个新的工程
3、弹出一个建立新工程的向导,点击“Next”
4、在弹出的对话框中输入工程名和工程存放的目录。需要注意工程路径“Project location”不能有中文、空格,路径名称也不能太长。此处工程名取为project_1led。
5、在工程类型中选择“RTL Project”
6、目标语言“Target language”选择“Verilog”,虽然选择 Verilog,但 VHDL 也可以使用,支持多语言混合编程。
7、点击“Next”,不添加任何文件
8、在“Default Part”选项中,器件家族“Family”选择“Zynq-7000”,封装类型“Package”选择“clg400”,减少我们选择范围。AC7010 在下拉列表中选择“xc7z010clg400-1”,AC7020在下拉列表中选择“xc7z020clg400-2”,“-2”表示速率等级,数字越大,性能越好,速率高的芯片向下兼容速率低的芯片。
9、点击“Finish”就可以完成以后名为“led”工程的创建。
二、创建Verilog HDL 文件点亮 LED
1、点击 Project Manager 下的 Add Sources 图标(快捷键 Alt+A)
2、选择添加或创建设计源文件“Add or create design sources”,点击“Next”
3、选择创建文件“Create File”
4、文件名“File name”设置为“led”,点击“OK”
5、点击“Finish”,完成“led.v”文件添加
6、在弹出的模块定义“Define Module”,中可以指定“led.v”文件的模块名称“Module name”,这里默认不变为“led”,还可以指定一些端口,此处暂时不指定,点击“OK”。
7、在弹出的对话框中选择“Yes”
8、双击“led.v”可以打开文件,然后编辑
9、编写“led.v”,这里定义了一个 32 位的寄存器 timer, 用于循环计数 0~49999999(1 秒钟), 计数到 49999999(1 秒)的时候, 寄存器 timer 变为 0,并翻转四个 LED。这样原来 LED 是灭的话,就会点亮,如果原来 LED 为亮的话,就会熄灭。代码如下:
`timescale 1ns / 1ps
module led(
input sys_clk, output reg led
);
reg[31:0] timer_cnt;
always@(posedge sys_clk)
begin
if(timer_cnt >= 32'd49_999_999)
begin
led <= ~led;
timer_cnt <= 32'd0;
end
else
begin
led <= led;
timer_cnt <= timer_cnt + 32'd1;
end
end
endmodule
10、编写好代码后保存,点击菜单“File -> Save All Files”
三、添加约束管脚
Vivado 使用的约束文件格式为 xdc 文件,xdc 文件里主要是完成管脚的约束,时钟的约束, 以及组的约束。这里我们需要对 led.v 程序中的输入输出端口分配到 FPGA 的真实管脚上。
1、点击“Open Elaborated Design”
2、点击OK
3、在菜单中选择“Window -> I/O Ports”
4、给 LED 和时钟分配管脚、电平标准,完成后点击保存图标
5、弹出窗口,要求保存约束文件,文件名我们填写“led”,文件类型默认“XDC”,点击“OK”
6、打开刚才生成的“led.xdc”文件,我们可以看到是一个 TCL 脚本,如果我们了解这些语法,完全可以通过自己编写 led.xdc 文件的方式来约束管脚
最基本的 XDC 编写的语法,普通 IO 口只需约束引脚号和电压,管脚约束如下:
set_property PACKAGE_PIN “引脚编号” [get_ports “端口名称”]
电平信号的约束如下:
set_property IOSTANDARD “电平标准” [get_ports “端口名称”]
这里需要注意文字的大小写,端口名称是数组的话用{ }刮起来,端口名称必须和源代码中的名字一致,且端口名字不能和关键字一样。
电平标准中“LVCMOS33”后面的数字指 FPGA 的 BANK 电压,LED 所在 BANK 电压为 3.3 伏,所以电平标准为“LVCMOS33”。Vivado 默认要求为所有 IO 分配正确的电平标准和管脚编号。
四、添加时序约束
一个 FPGA 设计除了管脚分配以外,还有一个重要的约束,那就是时序约束,这里通过向导方式演示如果进行一个时序约束。
1、点击“Run Synthesis”开始综合
2、弹出对话框点击“OK”
3、综合完成以后点击“Cancel”
4、点击“Constraints Wizard”
5、在弹出的窗口中点击“Next”
6、时序约束向导分析出设计中的时钟,这里把“sys_clk”频率设置为 50Mhz,然后点击“Skipto Finish”结束时序约束向导。
7、弹出的窗口中点击“OK”
8、点击“Finish”,这个时候 led.xdc 文件已经更新,重新加载文件即可。
五、生成 BIT 文件
1、编译的过程可以细分为综合、布局布线、生成 bit 文件等,这里我们直接点击“Generate Bitstream”,直接生成 bit 文件。
2、在弹出的对话框中可以选择任务数量,这里和 CPU 核心数有关,一般数字越大,编译越快,点击OK
3、这个时候开始编译,可以看到右上角有个状态信息,在编译过程中可能会被杀毒软件、电脑管家拦截运行,导致无法编译或很长时间没有编译成功。
4、编译中没有任何错误,编译完成,弹出一个对话框让我们选择后续操作,这里选项“Open Hardware Manger”,点击“OK”,当然,也可以选择“Cancel”,然后在左边导航栏选择“Open Hardware Manger”
六、下载调试
1、连接好开发板的 JTAG 接口,给开发板上电
2、在“HARDWARE MANAGER”界面点击“Auto Connect”,自动连接设备
3、可以看到 JTAG 扫描到 arm 和 FPGA 内核(图中为 xc7z015,AC7010 开发板实际为 xc7z010_1,AC7020 开发板实际为 xc7z020_1),还有一个 XADC,可以检测系统电压、温度
4、选择 xc7z010_1 或 xc7z020_1,右键“Program Device…”
5、点击program,等待下载
6、下载完成以后,我们可以看到 4 颗 LED 开始每秒变化一次。到此为止 Vivado 简单流程体验完成。后面的章节会介绍如果把程序烧录到 Flash,需要 PS 系统的配合才能完成,只有 PL的工程不能直接烧写 Flash。