当前位置: 代码迷 >> 综合 >> Zedboard:PL端点亮LED灯(Verilog)
  详细解决方案

Zedboard:PL端点亮LED灯(Verilog)

热度:104   发布时间:2023-11-22 18:42:52.0

转载原文

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个开关。
原理图1
原理图2

  • 输入: 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]

本实验中,添加时钟和未添加时钟的效果一样的。未添加时钟的工程,相当于输出时刻等于输入;添加时钟的工程,相当于只有当时钟上升沿到达时,刷新输出等于输入。