1)实验平台:正点原子领航者ZYNQ开发板
2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-301505-1-1.html
4)对正点原子FPGA感兴趣的同学可以加群讨论:994244016
5)关注正点原子公众号,获取最新资料更新

第八章LED灯闪烁实验

LED灯闪烁作为一个经典的入门实验,其地位堪比编程界的“Hello,World!”。对于很多电子工程师来说,LED灯闪烁都是他们在硬件上观察到的第一个实验现象。本章我们同样通过LED灯闪烁实验,带你进入ZYNQ的精彩世界。
本章包括以下几个部分:
1.1 LED灯简介
1.2 实验任务
1.3 硬件设计
1.4 程序设计
1.5 下载验证

1.1 LED灯简介
LED,又名发光二极管。LED灯工作电流很小(有的仅零点几毫安即可发光),抗冲击和抗震性能好,可靠性高,寿命长。由于这些优点,LED灯被广泛用在仪器仪表中作指示灯、液晶屏背光源等诸多领域。
不同材料的发光二极管可以发出红、橙、黄、绿、青、蓝、紫、白这八种颜色的光。图 7.5.13.1是可以发出黄、红、蓝三种颜色的直插型二极管实物图,这种二极管长的一端是阳极,短的一端是阴极。图 7.5.13.2是开发板上用的贴片二极管实物图。贴片二极管的正面一般都有颜色标记,有标记的那端就是阴极。

图 7.5.13.1 发光二极管实物图

图 7.5.13.2 贴片发光二极管实物图
发光二极管与普通二极管一样具有单向导电性。给它加上阳极正向电压后,通过5mA左右的电流就可以使二极管发光。通过二极管的电流越大,发出的光亮度越强。不过我们一般将电流限定在3~20mA之间,否则电流过大就会烧坏二极管。
1.2 实验任务
本节实验任务是使领航者底板上的PL LED0和PL LED1以固定的频率交替闪烁。
1.3 硬件设计
底板上LED的原理图如下图所示:

图 7.5.13.1 LED灯硬件原理图
在图 7.5.13.1中,PL_LED0和PL_LED1连接到ZYNQ的PL端,PS_LED0和PS_LED1连接到ZYNQ的PS端。在《领航者ZYNQ之FPGA开发指南》中,我们只使用PL端的外设。
PL_LED0和PL_LED1的阴极通过 470 欧姆的电阻连到地(GND)上,阳极由ZYNQ PL的IO管脚控制,LED与地之间的电阻起到限流作用。
本实验中,系统时钟、按键复位以及两个LED端口的管脚分配如下表所示,其中复位按键和两个LED位于底板上,时钟位于核心板上:
表 8.3.1 LED闪烁实验管脚分配
信号名 方向 管脚 端口说明 电平标准
sys_clk input U18 系统时钟,50MHz LVCMOS33
sys_rst_n input N16 系统复位按键,低电平有效 LVCMOS33
led[0] output H15 PL_LED0(底板) LVCMOS33
led[1] output L15 PL_LED1(底板) LVCMOS33
对应的XDC约束语句如下所示:

set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk]
set_property -dict {PACKAGE_PIN N16 IOSTANDARD LVCMOS33} [get_ports sys_rst_n]
set_property -dict {PACKAGE_PIN H15 IOSTANDARD LVCMOS33} [get_ports {led[0]}]
set_property -dict {PACKAGE_PIN L15 IOSTANDARD LVCMOS33} [get_ports {led[1]}]

1.4 程序设计
由于发光二极管的阳极与ZYNQ的管脚相连,只需要改变与LED灯相连的ZYNQ管脚的电平,LED灯的亮灭状态就会发生变化。当ZYNQ管脚为高电平时,LED灯点亮;为低电平时,LED灯熄灭。
本次设计的模块端口及信号连接如下图所示:

图 7.5.13.1 LED灯模块原理图
其中,计数器对50MHz时钟进行计数,从而达到计时的目的。计数器在每次计时到1秒之后清零,然后重新开始计数,计数的值用于控制LED的显示状态。当计数器的值小于0.5s时,就把LED0点亮并把LED1熄灭;每当计数器的值大于0.5s时,就把LED0熄灭并把LED1点亮,以此实现两个LED的交替闪烁。
LED闪烁模块的代码如下:

1   module  led_twinkle(
2       input          sys_clk  ,  //系统时钟
3       input          sys_rst_n,  //系统复位,低电平有效
4
5       output  [1:0]  led         //LED灯
6   );
7
8   //reg define
9   reg  [25:0]  cnt ;
10
11  //*****************************************************
12  //**                    main code
13  //*****************************************************
14
15  //对计数器的值进行判断,以输出LED的状态
16  assign led = (cnt < 26'd2500_0000) ? 2'b01 : 2'b10 ;
17
18  //计数器在0~5000_000之间进行计数
19  always @ (posedge sys_clk or negedge sys_rst_n) begin
20      if(!sys_rst_n)
21          cnt <= 26'd0;
22      else if(cnt < 26'd5000_0000)
23          cnt <= cnt + 1'b1;
24      else
25          cnt <= 26'd0;
26  end
27
28  endmodule

本程序中输入时钟为50MHz,所以一个时钟周期为20ns(1/50MHz)。因此计数器cnt通过对50MHz系统时钟计数,计时到1s,需要累加1s/20ns=5000_0000次。在代码第23行,每当计时到1s计数器清零一次。
同时,在代码的第16行,对根据计数器的计数值来赋值两个LED的状态。当计数值小于26’d2500_000即计时到1s中的前500ms时,LED0点亮LED1熄灭;当计数值大于等于26’d2500_000,即计时到1s中的后500ms时,LED0熄灭LED1点亮。当计数到1s时,计数器又会回0,重复此过程。以此实现两个LED的交替闪烁。
为了验证我们的程序,我们在Vivado内对代码进行仿真。为了更容易地看到仿真现象,我们将源代码中的计数器的最大计数值修改为5,然后再仿真,如下图所示:

图 7.5.13.2 仅用于仿真的代码
Testbench模块代码如下:

1   `timescale 1ns / 1ps
2
3   module tb_led_twinkle();
4
5   //输入
6   reg           sys_clk;
7   reg           sys_rst_n;
8
9   //输出
10  wire  [1:0]   led;
11
12  //信号初始化
13  initial begin
14      sys_clk = 1'b0;
15      sys_rst_n = 1'b0;
16      #200
17      sys_rst_n = 1'b1;
18  end
19
20  //生成时钟
21  always #10 sys_clk = ~sys_clk;
22
23  //例化待测设计
24  led_twinkle  u_led_twinkle(
25      .sys_clk         (sys_clk),
26      .sys_rst_n       (sys_rst_n),
27      .led             (led)
28      );
29
30  endmodule

仿真得到的波形图如下图所示:

图 7.5.13.3 仿真波形图
从图 7.5.13.3中可以看到,计数器cnt的值在0到10之间循环计数。当cnt的值小于5时,led0为高电平;大于5时led0为高电平。两个LED的状态随着计数器的计数循环翻转,实现LED闪烁的效果。
1.5 下载验证
编译工程并生成比特流.bit文件后,点击Vivado左侧“Flow Navigator”窗口最下面的“Open Hardware Manager”按钮如下图所示。

图 7.5.13.1 Hardware Manager界面
此时将Xilinx下载器一端连接电脑,另一端与开发板上的JTAG下载口连接,开发板连接电源线,如下图所示:

图 7.5.13.2 领航者开发板连接实物图
注意!一定要先把下载器的一端连接到了电脑、另一端连接了JTAG接口之后,再给开发板上电!否则,对开发板的JTAG接口进行带电热插拔,有一定概率会损坏JTAG接口!
开发板连接好电源线和下载器后,打开开发板电源开关,点击“Hardware”窗口中的“Auto Connect”图标,如下图所示:

图 7.5.13.3 “Auto Connect”图标
在“Hardware”子窗口中出现如下界面就表示Vivado就已经和下载器连接成功了,如下图所示:

图 7.5.13.4 与下载器连接成功
我们点击上图中的“Program Device”,弹出的界面如下图所示:

图 7.5.13.5 下载比特流界面
此时Bitstream File一栏会自动识别到工程的比特流文件,我们直接点击“Program”按钮下载程序,程序下载完成后,PL配置完成灯会点亮(LED3),此时我们可以看到位于底板上的两个LED灯在不断地闪烁,如下图所示:

图 7.5.13.6 两个PL LED灯交替闪烁

【正点原子FPGA连载】第八章LED灯闪烁实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0相关推荐

  1. 【正点原子FPGA连载】 第八章 LED灯闪烁实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

  2. 【正点原子FPGA连载】 第十七章 RS485串口通信实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  3. 【正点原子FPGA连载】第四章 Vivado软件的安装和使用 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  4. 【正点原子FPGA连载】第七章 Verilog HDL语 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  5. 【正点原子FPGA连载】第二章 实验平台简介 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  6. hls fifo_【正点原子FPGA连载】第一章HLS简介--领航者ZYNQ之HLS 开发指南

    1)摘自[正点原子]领航者ZYNQ之HLS 开发指南 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手 ...

  7. input自适应_【正点原子FPGA连载】第十一章基于OV5640的自适应二值化实验-领航者ZYNQ之HLS 开发指南...

    1)摘自[正点原子]领航者ZYNQ之HLS 开发指南 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手 ...

  8. cups源码下载 linux_【正点原子FPGA连载】第九章Linux显示设备的使用-领航者ZYNQ之linux开发指南...

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  9. Zigbee之旅(二):第一个CC2430程序——LED灯闪烁实验

    Zigbee之旅(二):第一个CC2430程序--LED灯闪烁实验 一.承上启下 在上一篇文章<Zigbee之旅(一):开天辟地>中,我们简要的介绍了Zigbee,以及其开发环境的搭建.O ...

最新文章

  1. 使用SQLite删除Mac OS X 中launchpad里的快捷方式
  2. redis php异步队列,基于workerman的redis-queue实现异步邮件队列
  3. 前后端分离实践(试探篇)
  4. Flask部署| gunicorn、nginx部署flask项目,并用supervisor来管理进程
  5. ML.NET Cookbook:(16)什么是规范化?为什么我需要关心?
  6. Linux监控CPU关闭服务器,监控Linux服务器CPU和内存
  7. linux下tomcat ssl证书,Tomcat部署ssl证书(Linux)
  8. oracle列转行wm_concat,Oracle列转行函数wm_concat版本不兼容解决方案
  9. DevExpress WinForms v21.1 - 富文本编辑器、PDF Viewer全新升级
  10. Hexo 好看的主题推荐
  11. Windows7 445端口漏洞
  12. 判断日期数组是否连续
  13. 计算机桌面图标右上角出现双箭头符号,电脑桌面图标有箭头,如何消除小小障碍小编有绝招...
  14. 电视盒机顶盒搭建FTP功能,外接硬盘U盘,电脑或手机端访问
  15. js使用eval解析json(js中使用json)
  16. 稀疏自动编码(Sparse Autoencoder)
  17. 奥斯汀分校 计算机教授 liu,顾海军(吉林大学通信工程学院通信工程系副教授)_百度百科...
  18. 由2022的数学奥林匹克竞赛(IMO)说起
  19. micro的介绍、安装与使用
  20. 2011~至今 百度指数采集方法与工具、支持百度指数、资讯指数、媒体指数

热门文章

  1. vostro3070装win7_戴尔Vostro 3671装win7系统图文教程(USB完美可用)
  2. 物联网设备接入——阿里云
  3. codeforce 590d
  4. Cesium--让椎体模型旋转
  5. 刚离职的同事分享了他常用的19个私活平台!有技术,就是干!
  6. 高仿砍柴网自媒体新闻资讯网站源码(织梦DEDE内核+手机WAP版)
  7. PMAC应用八-SDK的使用2
  8. 怎样在excel中拉出递增的一列数
  9. 推荐5个强大的Java分布式缓存框架
  10. 怎么样用ssh远程登录阿里云ecs服务器不成功解决方案