您当前的位置: 首页 >  fpga开发

正点原子

暂无认证

  • 4浏览

    0关注

    382博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【正点原子FPGA连载】第八章LED灯流水实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

正点原子 发布时间:2021-10-22 10:29:03 ,浏览量:4

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

在这里插入图片描述

第八章LED灯流水实验

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

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

图 8.1.1 发光二极管实物图 在这里插入图片描述

图 8.1.2 贴片发光二极管实物图 发光二极管与普通二极管一样具有单向导电性。给它加上阳极正向电压后,通过5mA左右的电流就可以使二极管发光。通过二极管的电流越大,发出的光亮度越强。不过我们一般将电流限定在3~20mA之间,否则电流过大就会烧坏二极管。 8.2实验任务 本节实验任务是使新起点开发板上的4个LED灯顺序点亮并熄灭,循环往复产生流水的现象。 8.3硬件设计 发光二极管的原理图如图 8.3.1所示, LED0到LED3这4个发光二极管的阴极都连到地( GND)上, 阳极分别与FPGA相应的管脚相连。原理图中LED与地之间的电阻起到限流作用。 在这里插入图片描述

图 8.3.1 LED灯硬件原理图 本实验中,系统时钟、按键复位以及LED端口的管脚分配如下表 8.3.1所示: 表 8.3.1 LED灯实验管脚分配 信号名 方向 管脚 端口说明 在这里插入图片描述

对应的TCL约束语句如下: set_location_assignment PIN_M2 -to sys_clk set_location_assignment PIN_M1 -to sys_rst_n set_location_assignment PIN_D11 -to led[0] set_location_assignment PIN_C11 -to led[1] set_location_assignment PIN_E10 -to led[2] set_location_assignment PIN_F9 -to led[3] 8.4程序设计 由于发光二极管的阳极与FPGA的管脚相连,只需要改变与LED灯相连的FPGA管脚的电平,LED灯的亮灭状态就会发生变化。当FPGA管脚为高电平时,LED灯点亮;为低电平时,LED灯熄灭。 本次设计的模块端口及信号连接如下图所示: 在这里插入图片描述

图 8.4.1 LED灯模块原理图 由于人眼的视觉暂留效应,流水灯状态变换间隔时间最好不要低于0.1s,否则就不能清晰地观察到流水效果。这里我们让流水灯每间隔0.2s变化一次。在程序中需要用一个计数器累加计数来计时,计时达0.2s后计数器清零并重新开始计数,这样就得到了固定的时间间隔。每当计数器计数满0.2s就让led灯发光状态变化一次。 流水灯模块的代码如下:

1   module flow_led(
2       input               sys_clk  ,  //系统时钟
3       input               sys_rst_n,  //系统复位,低电平有效
4       
5       output  reg  [3:0]  led         //4个LED灯
6       );
7   
8   //reg define
9   reg [23:0] counter;
10  
11  //*****************************************************
12  //**                    main code
13  //***************************************************** 
14                                                                                                                                                                                                                          
15  //计数器对系统时钟计数,计时0.2秒
16  always @(posedge sys_clk or negedge sys_rst_n) begin
17      if (!sys_rst_n)
18          counter             
关注
打赏
1665308814
查看更多评论
0.8467s