0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解基于FPGA的数字电路对流水灯的实验

电子森林 来源:哔哩哔哩 作者:硬禾学堂 2021-03-19 16:36 次阅读

继年前介绍的时序逻辑电路之时钟分频后,今天我们来介绍第7讲:流水灯。

流水灯,有时候也叫跑马灯,是一个简单、有趣又经典的实验,基本所有单片机的玩家们在初期学习的阶段都做过。本次我们也来介绍一下如何通过小脚丫FPGA实现一个流水灯。

流水灯就是让一连串的灯在一定时间内先后点亮并循环往复,所以其中的关键要领就在于控制每两个相邻LED亮灭的时间差,以及所有LED灯完成一组亮灭动作后的循环。很久都没有用过小脚丫的朋友可以再回顾一下,这上面有8个LED灯,且低电平点亮。

实现流水灯的方法绝不止一种,在这里我们采用模块化的设计思路,因为模块化设计对于之后构建大型电路系统非常有帮助,并且我们还可以借机温习一下以前学过的内容。

现在我们的目标是每过1秒后点亮下一个LED灯并且熄灭当前灯,且在第8个灯熄灭之后循环整个流程,该如何设计整个模块?我们先上图后解释。

毫无疑问,第一步需要做的就是通过分频来生成一个周期为1秒的时钟信号,不了解时钟分频童鞋可以读一下本系列的第6篇内容。

有了一个1秒钟嘀嗒一次的时钟后,我们还要考虑到循环问题,因为在第8个LED灯熄灭之后还需要再返回到第1个。那么这个时候我们就需要一个计数器,它的作用就是数羊,一只,两只…。..数到第八只后重头再来。数8只羊需要一个3位宽的变量(23=8)。

最后,由于我们是要依次点亮,也就是说8位的输出中每次只有1位是低电平,其余均为高电平(小脚丫LED灯为低电平点亮)。这个特性正好对应了我们之前学过的3-8译码器。

现在我们再来捋一遍。首先,通过分频在小脚丫上生成一个周期为1秒的慢速时钟信号,这个时钟信号传送到计数器之中;这个计数器是3位宽的,因此最多可以计八次慢速时钟的嘀嗒,并且计数每增加1时,都对应着3-8译码器的下一种输出,也就对应着流水灯的下一个状态。

现在我们上代码:

module runningled (clk,led); input clk,rst; output[7:0] led; reg [2:0] cnt ; //定义了一个3位的计数器,输出可以作为3-8译码器的输入 wire clk1hz; //定义一个中间变量,表示分频得到的时钟,用作计数器的触发 //例化分频模块,产生一个1Hz时钟信号 divide #(.WIDTH(24),.N(12000000)) u2 ( //除数为12,000,000,因此频率为1Hz .clk(clk), .rst_n(rst), .clkout(clk1hz) ); //生成计数器,上沿触发并循环计数 always@(posedge clk1hz) cnt 《=《 span=“”》 cnt +1; // 达到位宽上限后可自动溢出清零 //例化3-8译码器模块 decode38 u1 ( .X(cnt), //例化的输入端口连接到cnt,输出端口连接到led .D(led) );endmodule

在第四篇讲译码器的文章里,我们介绍过,如果需要调用/例化子模块时,需要将各子模块与大模块放入同一个工程文件下进行编译。最后我们再来对小脚丫进行管脚配置并烧录就可以了。

对应变量小脚丫管脚FPGA管脚

clkClockJ5

led [0]LED1N15

led [1]LED2N14

led [2]LED3M14

led [3]LED4M12

led [4]LED5L12

led [5]LED6K12

led [6]LED7L11

led [7]LED8K11

如果大家成功地在小脚丫上实现了流水灯的程序,还可以自己玩一个有意思的实验:比如,你可以通过修改程序来提高流水灯的刷新频率,然后看看LED灯的刷新率为多少时你的肉眼无法分别。同时再打开手机的摄像头,也以同样的方法试验一番。结合到你观察的现象,可以自己琢磨并思考一下,说不定能挖掘出更多的知识。

备注一些大伙都知道的常识:我国交流电工频为50Hz,电脑常用显示器的刷新率有60,75和144赫兹。华为Mate30刷新频率为90赫兹,苹果6-12的刷新频率为60赫兹。
编辑:lyn

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21664

    浏览量

    601696
  • 单片机
    +关注

    关注

    6032

    文章

    44513

    浏览量

    632764
  • 代码
    +关注

    关注

    30

    文章

    4742

    浏览量

    68329

原文标题:基于FPGA的数字电路实验7:流水灯的实现

文章出处:【微信号:xiaojiaoyafpga,微信公众号:电子森林】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    数字电路是对什么信号进行传输的

    数字电路是一种电子系统,它使用数字信号进行信息传输和处理。数字信号是由离散的电压水平或电流水平表示的信号,通常用二进制代码表示。与模拟电路
    的头像 发表于 08-11 11:00 646次阅读

    FPGA 实验一:流水灯模块

    实验一:流水灯模块 对于发展商而言,动土仪式无疑是最重要的任务。为此,流水灯实验作为低级建模II的动土仪式再适合不过了。废话少说,我们还是开始实验
    发表于 06-10 09:38

    【紫光同创盘古PGX-Nano教程】——(盘古PGX-Nano开发板/PG2L50H_MBG324第三章)键控流水灯实验例程

    灯、按键、拨码开关等。 二:实验目的 由PB0(即开发板S0位置)按键输入,切换LED0~LED7的输出效果。 三:实验原理 实现框架如下: (1)顶层实现按键切换LED的流水灯状态
    发表于 04-29 16:06

    数字电路和模拟电路的区别与联系

    数字电路和模拟电路是电子电路的两个主要分支,它们在电子技术中具有不同的应用和工作原理。本文将详细讨论数字电路和模拟电路的区别与联系。 首先,
    的头像 发表于 04-21 10:29 2695次阅读

    数字电路仿真元件符号是什么

    数字电路仿真元件通常用符号来表示。这些符号是通过简洁和易于理解的图形来表示元件的特性和功能。符号是数字电路设计和仿真过程中非常重要的一部分,帮助工程师和设计者有效地沟通和理解电路的功能。在本文
    的头像 发表于 04-21 09:20 1840次阅读

    【紫光同创盘古PGX-MINI-4K教程】——(盘古PGX-MINI-4K开发板/PGC4KD-6ILPG144第二章)LED 流水灯实验例程

    载 jtag 调试接口, 预留两组 20PIN 扩展 IO、数码管、按键、led 灯等硬件资源,为用户提供基本的 开发环境。 二:实验目的掌握流水灯原理并实现流水灯 三:实验要求
    发表于 03-26 16:24

    【紫光同创盘古PGX-Lite 7K教程】——(盘古PGX-Lite 7K开发板/PGC7KD-6IMBG256第二章)​LED 流水灯实验例程

    ; 在 C 语言中做流水灯实验需要用到一个中间变量(代码如下左侧,数据位的搬移如下右图):在 FPGA 的开发中是基于硬件,语言也是硬件描述语言,verilog 的处理单位就是 1bit;8bit 的位
    发表于 03-20 15:07

    数字电路与逻辑设计

    电子发烧友网站提供《数字电路与逻辑设计.ppt》资料免费下载
    发表于 03-11 09:21 4次下载

    51单片机流水灯制作

    流水灯是学习51单片机的一个基本项目,是我们对单片机IO口输出认识的基本项目。当然学会了花样流水灯也很好玩。 下面就分享一种51单片机流水灯制作的方法。 一、流水灯原理图 二、相关知
    的头像 发表于 02-26 10:06 1488次阅读
    51单片机<b class='flag-5'>流水灯</b>制作

    【紫光同创国产FPGA教程】——(PGL22G第二章)键控流水灯实验例程

    ~ USER_LED8 的输出效果。 三:实验原理 实现框架如下: (1)顶层实现按键切换 LED 的流水灯状态; (2)需要设计一个输入控制模块及一个输出控制模块; 这个实验带大家将多个模块整合
    发表于 01-05 11:22

    PLC控制8盏流水灯电路原理图和实际接线图详解

    PLC控制8盏流水灯电路原理图和实际接线图
    的头像 发表于 12-27 11:47 6082次阅读
    PLC控制8盏<b class='flag-5'>流水灯</b><b class='flag-5'>电路</b>原理图和实际接线图<b class='flag-5'>详解</b>

    【每周一练】盘古1K开发板 练习一:LED流水灯实验

    查看附件中的快速使用手册。 LED流水灯实验 本次实验实现LED流水灯,使用的到的硬件为LED灯,在【每周一练】小眼睛FPGA1K开发板硬件
    发表于 12-21 00:20

    【每周一练】盘古1K开发板 练习一:LED流水灯实验学习

    实验目的 熟悉PDS开发流程,掌握流水灯原理并实现流水灯 实验要求 设计8个LED以0.5s间隔接替点亮 实现代码 `define UD #1 module led_ligh
    发表于 12-09 14:20

    利用SCR步进指令实现流水灯循环点亮

    在以往介绍西门子smart文章中,提到过流水灯的写法,有用循环位移字[ROL(R)_B]节来实现,有利用定时器(TON)来实现。今天我们利用SCR步进指令来实现流水灯循环点亮,在作这个实验前提必须满足如下几个软硬件条件:
    的头像 发表于 12-04 09:15 2110次阅读
    利用SCR步进指令实现<b class='flag-5'>流水灯</b>循环点亮

    使用74HC595驱动LED流水灯实验

    本次实验的simulink模型如图5.2所示,实验现象可以通过改变控制PC6引脚的“constant2”变量实现LED流水灯效果,如图5.1所示,本次实验
    的头像 发表于 11-29 16:20 1878次阅读
    使用74HC595驱动LED<b class='flag-5'>流水灯</b><b class='flag-5'>实验</b>