Zedboard:PL端点亮LED灯(Verilog)

转载原文

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]

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


  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的Verilog代码示例,用于在FPGA上通过串口控制LED点亮和熄灭。 ``` module uart_led( input clk, input rstn, input [7:0] uart_rx_data, input uart_rx_ready, output reg [7:0] uart_tx_data, output reg uart_tx_valid, output reg led ); reg [7:0] data_reg; reg valid_reg; reg [3:0] cnt; assign led = data_reg[0]; always @(posedge clk or negedge rstn) begin if (~rstn) begin data_reg <= 8'h00; valid_reg <= 1'b0; cnt <= 4'h0; end else begin if (uart_rx_ready) begin data_reg <= uart_rx_data; valid_reg <= 1'b1; end if (cnt == 4'hF) begin uart_tx_valid <= valid_reg; uart_tx_data <= data_reg; cnt <= 4'h0; end else begin uart_tx_valid <= 1'b0; cnt <= cnt + 1; end end end endmodule ``` 在上面的代码中,输入时钟信号 `clk` 和复位信号 `rstn` 用于控制模块的行为。输入信号 `uart_rx_data` 和 `uart_rx_ready` 分别表示串口接收到的数据和接收数据是否准备好。输出信号 `uart_tx_data` 和 `uart_tx_valid` 分别表示要发送的数据和是否准备好发送数据。最后,输出信号 `led` 控制LED的状态。 在代码的主体部分中,`always` 块使用时钟信号来控制代码的行为。如果复位信号处于低电平状态,所有寄存器都将被重置为初始状态。如果接收到新的数据,则将其存储在 `data_reg` 寄存器中,并将 `valid_reg` 设置为有效。然后,使用计数器 `cnt` 来控制发送数据的时机。如果 `cnt` 达到 15,则表示已经发送了一组数据,将 `uart_tx_valid` 和 `uart_tx_data` 设置为相应的值,否则 `uart_tx_valid` 将保持为零,`cnt` 将增加1。最后,将 `data_reg` 的最低位用于控制LED的状态。 请注意,此代码仅用于演示目的,可能需要根据具体的FPGA板和串口模块进行修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值