社区导航

 

搜索
查看: 669|回复: 4

[资源共享] FPGA实践(二)8个LED灯 亮灭变化与流水灯

[复制链接]

395

TA的帖子

7

TA的资源

版主

Rank: 6Rank: 6

发表于 2019-4-12 20:24 | 显示全部楼层 |阅读模式
本帖最后由 bqgup 于 2019-4-12 21:24 编辑
   我使用的板子的外部时钟是50MHz的,时钟引脚为PIN_23。灯的亮灭状态不过就是我们眼睛分辨而来的,加入灯的状态变化很快,可能10ms的时间就变化了一次,但是由于人眼分辨的极限,我们无法察觉这个极限,所以只有时间超过我们视觉的极限之后我们才能看到灯的状态的变化。因为我们的时钟是50MHz,频率非常高,为了我们能够分辨灯的状态变化,我们就需要让灯维持的时间变长,也就是我们通常所说的“延时”。延时是我们在单片机开发中经常用到的,但是在FPGA中我们就不能称为延时,因为我们的单片机是顺序执行的,每执行的一处指令都要等一定的周期,而我们的FPGA是并行运行的,所以也就相比我们的单片机来说运行速度较快。那么FPGA不叫延时叫什么呢?FPGA可以进行分频和倍频,通过分频和倍频我们可以把频率变的很低或很高,频率变化了也就意味着时间发生变化了,所以FPGA的“延时”叫做分频。下面我们先来看看亮灭变化,因为我们的外部时钟频率是50M,所以变化一下就需要1/50M=0.02us,加入我们要“延时”1000ms时,就要变化50_000_000下,我们根据这个原理来实现灯的亮灭。

  1. module LED_Flash(
  2. input ext_clk_50M,

  3. output reg D1
  4. );

  5. reg[31:0] cnt;

  6. always [url=home.php?mod=space&uid=775551]@[/url] (posedge ext_clk_50M)

  7. if(cnt < 32'd100_000_000) cnt <= cnt + 1'b1;//周期
  8. else cnt <= 32'd0;

  9. always @ (posedge ext_clk_50M )
  10. if(cnt > 32'd50_000_000) D1 <= 1'b1;        //ON,占空比
  11. else D1 <= 1'b0;        //OFF,占空比

  12. endmodule
复制代码


下载后效果如下: 1.mp4 (1.11 MB, 下载次数: 14)


回复

使用道具 举报

395

TA的帖子

7

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2019-4-12 21:27 | 显示全部楼层
流水灯的速度方向都可以改变,


回复

使用道具 举报

173

TA的帖子

0

TA的资源

宇宙尘埃

发表于 2019-4-13 09:14 | 显示全部楼层
谢谢分享!


回复

使用道具 举报

1347

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

发表于 2019-4-13 22:23 | 显示全部楼层
棒棒的,楼主继续加油!

点评

谢谢  详情 回复 发表于 2019-4-14 21:41
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void


回复

使用道具 举报

395

TA的帖子

7

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2019-4-14 21:41 | 显示全部楼层
懒猫爱飞 发表于 2019-4-13 22:23
棒棒的,楼主继续加油!

谢谢


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /1 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-7-16 05:53 , Processed in 0.168358 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表