转载原文
Zedboard实验一点亮一盏LED
目的
- 熟悉Vivado开发环境
- 熟悉ZYNQ开发流程
创建Vivado工程
开发环境:Vivado2015.4
1. 新建工程
主菜单选择File->New Project后,弹出的窗口点击next,出现下图:选择工程目录,编辑工程名这里命名为Tutorial1。
弹出窗口,选择RTL Project
接下来一路next,直到如下图窗口:选中Zedboard板子。点击Finish,完成工程创建。
2. 添加源文件
在Project Manager窗口空白处用鼠标右键,选择Add Sources弹出下图窗口,选择所需创建的源文件。
下图为弹出的的窗口中选择Create File
点击Create File后,编辑文件类型和文件名,这里文件类型选择默认Verilog文件,文件名为top。
添加约束文件同理如上。
Verilog
创建Vivado工程,添加Verilog文件。工程设计为一位输入作为开关和一个输出作为LED显示。
编辑Verilog文件如下:
module top(input switch,output led
);assign led = switch;
endmodule
将该模块命名为top
约束
只有.v文件是不够的,编译器在不能运行Verilog代码,还需要约束信息。确定那个管脚是输出的led,哪个管脚是输入switch。
创建XDC文件,命名为.xdc。根据Zedboard原理图分配管脚。Zedboard上由8个LED和8个开关。
- 输入: Switch 0对应原理图上的网络标号”SW0”,与FPGA F22管脚相连。该管脚属于bank35,电压为VADJ(通过跳帽选择2.5V或1.8V)。假设跳帽将VADJ与2.5V短接,就意味着2.5V电平输入。
- 输出: LED 0对应原理图上网络标号”LD0”,与FPGA管脚T22相连。该管脚属于bank33 供电电压3.3V
编辑.xdc文件
set_property IOSTANDARD LVCMOS33 [get_ports led]
set_property IOSTANDARD LVCMOS25 [get_ports switch]
set_property PACKAGE_PIN T22 [get_ports led]
set_property PACKAGE_PIN F22 [get_ports switch]
现在编译工程,生成比特流文件,给板子编程。
在Vivado界面右侧Flow Navigator -> Program and Debug -> Hardware Manager
点击Open Taget检测到硬件xc7z020,在Hardware窗口下点击Program device
添加更多的输入输出
修改原有的.v文件,将源文件的输入输出修改为八位宽的总线:
module top (input [7:0] switch,output [7:0] led
);assign led = switch;
endmodule
参照原理图,添加约束:
set_property IOSTANDARD LVCMOS33 [get_ports led]
set_property IOSTANDARD LVCMOS25 [get_ports switch]
set_property PACKAGE_PIN T22 [get_ports {
led[0]}]
set_property PACKAGE_PIN T21 [get_ports {
led[1]}]
set_property PACKAGE_PIN U22 [get_ports {
led[2]}]
set_property PACKAGE_PIN U21 [get_ports {
led[3]}]
set_property PACKAGE_PIN V22 [get_ports {
led[4]}]
set_property PACKAGE_PIN W22 [get_ports {
led[5]}]
set_property PACKAGE_PIN U19 [get_ports {
led[6]}]
set_property PACKAGE_PIN U14 [get_ports {
led[7]}]
set_property PACKAGE_PIN F22 [get_ports {
switch[0]}]
set_property PACKAGE_PIN G22 [get_ports {
switch[1]}]
set_property PACKAGE_PIN H22 [get_ports {
switch[2]}]
set_property PACKAGE_PIN F21 [get_ports {
switch[3]}]
set_property PACKAGE_PIN H19 [get_ports {
switch[4]}]
set_property PACKAGE_PIN H18 [get_ports {
switch[5]}]
set_property PACKAGE_PIN H17 [get_ports {
switch[6]}]
set_property PACKAGE_PIN M15 [get_ports {
switch[7]}]
添加一个时钟
时钟对于FPGA设计很重要,可以使FPGA随着时间改变不同的状态。使Verilog代码的编写有了更多的变化。
这里要注意的是,添加输出声明关键字reg。在Verilog2005中有两种网络类型:1. wire 网线型;2. reg 寄存器型
module top (input clk,input [7:0] switch,output reg [7:0] led
);always @(posedge clk)led = switch;
endmodule
添加约束
高速编译器,那个管脚连接时钟。
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property PACKAGE_PIN Y9 [get_ports clk]
create_clock -period 10 [get_ports clk]
本实验中,添加时钟和未添加时钟的效果一样的。未添加时钟的工程,相当于输出时刻等于输入;添加时钟的工程,相当于只有当时钟上升沿到达时,刷新输出等于输入。