当前位置:网站首页>ZYNQ之FPGA LED 灯闪烁实验
ZYNQ之FPGA LED 灯闪烁实验
2022-08-04 05:32:00 【久违de约定】
一、LED 灯简介
LED灯,又名发光二极管。LED灯工作电流很小(有的仅零点几毫安即可发光),抗冲击和抗震性能好,可靠性高,寿命长。由于这些优点,LED灯被广泛用在仪器仪表中作指示灯、液晶屏背光源等诸多领域。
不同材料的发光二极管可以发出红、橙、黄、绿、青、蓝、紫、白这八种颜色的光。图1.1是可以发 出黄、红、蓝三种颜色的直插型二极管实物图,这种二极管长的一端是阳极,短的一端是阴极。图1.2是 开发板上用的贴片二极管实物图。贴片二极管的正面一般都有颜色标记,有标记的那端就是阴极。
图1.1 发光二极管实物图
图1.2 贴片发光二极管实物图
发光二极管与普通二极管一样具有单向导电性。给它加上阳极正向电压后,通过 5mA 左右的电流就可 以使二极管发光。通过二极管的电流越大,发出的光亮度越强。不 过我们一般将电流限定在 3~20mA 之间, 否则电流过大就会烧坏二极管。
二、实验任务
本节实验任务是使领航者底板上的 PL LED0 和 PL LED1 以固定的频率交替闪烁。
三、硬件设计
底板上 LED 的原理图如下图所示:
图3.1 LED 灯硬件原理图
在图 3.1 中,PL_LED0 和 PL_LED1 连接到 ZYNQ 的 PL 端,PS_LED0 和 PS_LED1 连接到 ZYNQ 的 PS 端。我们只使用 PL 端的外设。PL_LED0 和 PL_LED1 的阴极通过 470 欧姆的电阻连到地(GND)上,阳极由 ZYNQ PL 的 IO 管脚控 制,LED 与地之间的电阻起到限流作用。本实验中,系统时钟、按键复位以及两个 LED 端口的管脚分配如下表所示,其中复位按键和两个 LED 位于底板上,时钟位于核心板上:
信号名 | 方向 | 管脚 | 端口说明 | 电平标准 |
---|---|---|---|---|
sys_clk | input | U18 | 系统时钟,50MHZ | LVCMOS33 |
sys_rst_n | input | J15 | 系统复位按键,低电平有效 | LVCMOS33 |
led[0] | output | J18 | PL_LED0(底板 | LVCMOS33 |
led[1] | output | H18 | PL_LED1(底板) | LVCMOS3 |
对应的 XDC 约束语句如下所示:
set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk]
set_property -dict {PACKAGE_PIN J15 IOSTANDARD LVCMOS33} [get_ports sys_rst_n]
set_property -dict {PACKAGE_PIN J18 IOSTANDARD LVCMOS33} [get_ports {led[0]}]
set_property -dict {PACKAGE_PIN H18 IOSTANDARD LVCMOS33} [get_ports {led[1]}]
四、程序设计
由于发光二极管的阳极与 ZYNQ 的管脚相连,只需要改变与 LED 灯相连的 ZYNQ 管脚的电平,LED 灯的亮灭状态就会发生变化。当 ZYNQ 管脚为高电平时,LED 灯点亮;为低电平时,LED 灯熄灭。
本次设计的模块端口及信号连接如下图所示:
图4.1 LED灯模块原理图
其中,计数器对 50MHz 时钟进行计数,从而达到计时的目的。计数器在每次计时到 1 秒之后清零,然后重新开始计数,计数的值用于控制 LED 的显示状态。当计数器的值小于 0.5s 时,就把 LED0 点亮并把 LED1 熄灭;每当计数器的值大于 0.5s 时,就把 LED0 熄灭并把 LED1 点亮,以此实现两个 LED 的交替闪烁。
LED 闪烁模块的代码如下:
module led_twinkle(
input sys_clk, //系统时钟
input sys_rst_n; //系统复位,低电平有效
output [1:0] led; //LED灯
);
//reg define
reg [25:0] cnt;
//*****************************************************
//** main code
//*****************************************************
//对计数器的值进行判断,以输出 LED的状态
assign led = (cnt < 26'd2500_0000) ? 2'b01 : 2'b10 ;
//计数器在 0~5000_000之间进行计数
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
cnt <= 26'd0;
else if(cnt < 26'd5000_0000)
cnt <= cnt + 1'b1;
else
cnt <= 26'd0;
end
endmodule
本程序中输入时钟为 50MHz,所以一个时钟周期为 20ns(1/50MHz)。因此计数器 cnt 通过对 50MHz 系统时钟计数,计时到 1s,需要累加 1s/20ns=5000_0000 次。在代码第 23 行,每 当计时到 1s 计数器清零一 次。
五、下载验证
不让我传视频
边栏推荐
- jdbc:mysql://localhost:3306/student?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8时报错
- ideal life
- LeetCode_Nov_2nd_Week
- 【HIT-SC-LAB1】哈工大2022软件构造 实验1
- [Daily Office][Miscellaneous][vscode]tab space
- 文件权限管理 ugo
- IDEA中创建web项目实现步骤
- 理想的生活
- clssloader与双亲委派
- Deep learning, "grain and grass" first--On the way to obtain data sets
猜你喜欢
Cut the hit pro subtitles export of essays
【HIT-SC-LAB1】哈工大2022软件构造 实验1
C语言结构体(必须掌握版)
【HIT-SC-MEMO5】哈工大2022软件构造 复习笔记5
基于Webrtc和Janus的多人视频会议系统开发6 - 从Janus服务器订阅媒体流
Fabric v1.1 environment construction
动态内存管理-C语言
基于语音识别的QT设计的csgo互动类视频游戏
Copy Siege Lion's Annual "Battle" | Review 2020
【HIT-SC-MEMO1】哈工大2022软件构造 复习笔记1
随机推荐
虚幻引擎 5 完整指南[2022六月最新课程学习内容]
Cut the hit pro subtitles export of essays
基于Webrtc和Janus的多人视频会议系统开发7 - publish和subscribe声音设备冲突导致对方听不到声音
文件编辑器
C语言静态变量static的分析
结构体内存对齐-C语言
[English learning][sentence] good sentence
tmux概念和使用
MVC custom configuration
【HIT-SC-MEMO7】哈工大2022软件构造 复习笔记7
Rules.make-适合在编辑模式下看
JUC并发容器——ConcurrentLinkedQueue
[Daily office][shell] Common code snippets
IEEE802.X协议族
抽象类、内部类和接口
LeetCode_22_Apr_2nd_Week
[Development Miscellaneous][Editor][Code Reading]ctags & vim
【HIT-SC-MEMO2】哈工大2022软件构造 复习笔记2
通过socks5代理下载webrtc源码错误:curl: (7) Can't complete SOCKS5 connection xx.xx.xx.xx
Unity Day03