AX7020------xc7z020clg400-2
“ -2 ”表示速率等级,数字越大,性能越好,速率高的芯片向下兼容速率低的芯片
通过一个 LED 例程来熟悉 PL( FPGA )的开发流程,熟悉 Vivado 软件的基本操作,这个开发流程和不带 ARM 的 FPGA 芯片完全一致
在本例程中,我们要做的是 LED 灯控制实验,每秒钟控制开发板上的 LED 灯翻转一次,实现亮、灭、亮、灭的控制

创建Vivado工程(这里和FPGA开发流程一致,简单描述)
1.Create New Project
2.Next
3.在弹出的对话框中输入工程名和工程存放的目录,我们这里取一个 led 的工程名。需要注意工程路径“Project location ”不能有中文、空格,路径名称也不能太长
4.在工程类型中选择“ RTL Project ”
5.目标语言“ Target language ”选择“ Verilog ”,虽然选择 Verilog ,但 VHDL 也可以使用,支持
多语言混合编程。
6.点击“ Next ”,不添加任何文件
7.在“Default Part”选项中,器件家族“Family”选择“Zynq-7000”,封装类型“Package”选择“clg400”,减少我们选择范围。 AC7010 在下拉列表中选择“ xc7z010clg400-1 ”,AC7020在下拉列表中选择“ xc7z020clg400-2 ”( 知道芯片型号直接在Search框搜索即可 )
8.点击“Finish ”就可以完成以后名为“ led ”工程的创建。
Verilog代码
点击 Project Manager 下的 Add Sources 图标(或者使用快捷键 Alt+A )
选择添加或创建设计源文件“ Add or create design sources ” , 点击“ Next ”
选择创建文件“Create File
文件名“ File name ”设置为“ led ”,点击“ OK
点击“ Finish ” , 完成“ led.v ”文件添加
在弹出的模块定义“ Define Module ” , 中可以指定“ led.v ”文件的模块名称“ Module name ” , 这里默认不变为“led ”,还可以指定一些端口,这里暂时不指定,点击“ OK ”。
在弹出的对话框中选择“ Yes ”
双击“ led.v ”可以打开文件,然后编辑
编写“ led.v ” , 这里定义了一个 32 位的寄存器 timer, 用于循环计数 0~49999999(1 秒钟 ), 计数到 49999999(1 秒 ) 的时候 , 寄存器 timer 变为 0 ,并翻转四个 LED 。这样原来 LED 是灭的话,就会点亮,如果原来 LED 为亮的话,就会熄灭。编写好后的代码如下:
led.v
'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
编写好代码后保存 , 点击菜单“ File -> Save All Files"(直接点保存按钮)
添加管脚约束
Vivado 使用的约束文件格式为 xdc 文件, xdc 文件里主要是完成管脚的约束 , 时钟的约束 , 以
及组的约束。这里我们需要对 led.v 程序中的输入输出端口分配到 FPGA 的真实管脚上。
直接添加xdc文件
led.xdc
set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]
set_property PACKAGE_PIN U18 [get_ports sys_clk]
set_property IOSTANDARD LVCMOS33 [get_ports led]
set_property PACKAGE_PIN R19 [get_ports led]
按照引导添加
点击“ Open Elaborated Design ”

在弹出的窗口中点击“ OK ”按钮

在菜单中选择“ Window -> I/O Ports ”

在弹出的 I/O Ports 中可以看到管脚分配情况

给 LED 和时钟分配管脚、电平标准,完成后点击保存图标
弹出窗口,要求保存约束文件,文件名我们填写“ led ”,文件类型默认“ XDC ”,点击“ OK ”

打开刚才生成的“ 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 设计除了管脚分配以外,还有一个重要的约束,那就是时序约束,这里通过向导方式演示如果进行一个时序约束
点击“ Run Synthesis ”开始综合

弹出对话框点击“ OK ”

综合完成以后点击“ Cancel ”

点击“ Constraints Wizard

在弹出的窗口中点击“ Next ”

时序约束向导分析出设计中的时钟,这里把“ sys_clk ”频率设置为 50Mhz ,然后点击“ Skip to Finish”结束时序约束向导。

弹出的窗口中点击“ OK ”

点击“ Finish ”
这个时候 led.xdc 文件已经更新,重新加载文件即可
生成bit文件
编译的过程可以细分为综合、布局布线、生成 bit 文件等,这里我们直接点击“ Generate
Bitstream ” , 直接生成 bit 文件

在弹出的对话框中可以选择任务数量,这里和 CPU 核心数有关,一般数字越大,编译越快,
点击“ OK ”

这个时候开始编译,可以看到右上角有个状态信息,在编译过程中可能会被杀毒软件、电
脑管家拦截运行,导致无法编译或很长时间没有编译成功。

编译中没有任何错误,编译完成,弹出一个对话框让我们选择后续操作,这里选项“ Open
Hardware Manger ”,点击“ OK ”,当然,也可以选择“ Cancel ”,然后在左边导航栏选择“ Open
Hardware Manger

下载调试
连接好开发板的 JTAG 接口,给开发板上电
在“ HARDWARE MANAGER ”界面点击“ Auto Connect ”,自动连接设备

可以看到 JTAG 扫描到 arm 和 FPGA 内核(图中为 xc7z015 , AC7010 开发板实际为 xc7z010_1 , AC7020 开发板实际为 xc7z020_1 ),还有一个 XADC ,可以检测系统电压、温度

选择 xc7z010_1 或 xc7z020_1 ,右键“ Program Device... ”

在弹出窗口中点击“ Program ”

等待下载

如果把程序烧录到 Flash ,需要 PS 系统的配合才能完成,只有 PL的工程不能直接烧写 Flash