基于ZYNQ ECO开发板的跑马灯实验
1.理论学习
如果大家之前玩过单片机肯定知道,跑马灯实验绝对是一个经典的例程,其效果是让排成一排的led灯依次闪亮,像“流水”一样循环不止,
看上去很舒服,其原理就是依次控制每个连接到led灯的I/O电平的高低,我们本次的实验是让led灯依次闪亮的间隔为1s,也就是让led灯
每次只亮一个,每次亮的时间为1s ,本文档我们还会涉及到让led灯依次闪亮的新语法。
2.实战演练
2.1 实验目标
依次点亮板载的4个LED灯,实现跑马灯的效果,两灯之间点亮间隔为1s,LED灯一次点亮持续时间1s。2.2 程序设计
2.2.1模块框图
我们给模块取名为water_led,因为我们要让led灯亮的时间为1s,肯定少不了计数器,既然用到计数器,那时钟和复位信号也是必须有的, 所以输入为时钟和复位信号。我们只需要控制led灯亮的时间和哪一个led灯亮,流水的过程会无限循环下去,所以不需要额外的其他输入 信号,而输出为4bit的led_out,用于控制板子上的4个小灯,使它们依次闪亮产生流水的效果。 设计框图如下图所示2.2.2实现步骤
2.2.2.1Vivado使用
创建项目以及芯片选型:添加源文件 :
`timescale 1ns / 1ps
module water_led(
input clk, //系统时钟50MHz
input rst_n, //全局复位
output [3:0] led //输出控制led灯
);
parameter clk_1s=32'd50_000_000;
reg [31:0] cnt;
//------1s计时模块------
always@(posedge clk)
if(!rst_n)
cnt<=0;
else if(cnt==clk_1s-1)
cnt<=0;
else
cnt<=cnt+1;
//------跑马灯实现模块------
reg[3:0]led_out;
always@(posedge clk)
if(!rst_n)
led_out<=4'b0001;
else if(cnt==clk_1s-1)
led_out<={led_out[2:0],led_out[3]} ;
else
led_out<=led_out;
assign led=led_out;
endmodule
[/rihide] 可将此代码复制粘贴过去保存文档后,按下面步骤操作进行综合,并进行管脚约束
管脚约束:
[rihide]上板验证之前先要进行管脚约束。工程中各输入输出信号与开发板管脚对应关系如表格所示。
进行管脚分配:

















每个端口的电压都要选择为LVCMOS33






