FPGA学习(二)——实现LED流水灯
FPGA学习(二)——实现LED流水灯
目录
- FPGA学习(二)——实现LED流水灯
- 一、DE2-115时钟源
- 二、控制6个LED灯实现流水灯
- 1、核心逻辑
- 2、代码实现
- 3、引脚配置
- 4、实现效果
- 三、模块化代码
- 1、分频模块
- 2、复位暂停模块
- 3、顶层模块
- 四、总结
一、DE2-115时钟源
DE2-115板子包含一个50MHz的石英晶体振荡器,通过一个时钟缓冲器产生3路抖动低的50MHz时钟信号送到FPGA的时钟输入引脚,如下图所示:

因此可以计算出,时钟信号的周期T=1/(50*10^6)=20ns,1s=10^9ns,则1秒所需的时钟周期数为N=10^9/20=50000000
所以cnt计数器从0计数到50000000-1时,表示1秒。
二、控制6个LED灯实现流水灯
1、核心逻辑
-
时钟和复位信号的处理
- 代码通过
always块监听时钟信号clk的上升沿、复位信号rst_n的下降沿以及停止信号stop_n的下降沿。 - 当复位信号
rst_n为低电平时,计数器cnt被重置为0,并且LED灯的状态被设置为6'b000001,即第一个LED亮起
- 代码通过
-
按键停止信号的处理
- 当按键停止信号
stop_n为低电平时,计数器cnt和LED灯的状态led保持不变,即停止计数和LED状态的变化。
- 当按键停止信号
-
计数器的计数逻辑
- 如果复位信号和停止信号都无效(即
rst_n和stop_n都为高电平),计数器cnt开始计数。 - 当计数器
cnt达到50_000_000 - 1时(即1秒的时钟周期,时钟频率为50MHz),计数器cnt被重置为0,并且LED灯的状态led进行循环右移一位,实现流水灯效果。
- 如果复位信号和停止信号都无效(即
2、代码实现
module LedBlink(input wire clk, // 50MHz时钟输入input wire rst_n, // 复位信号,低电平有效input wire stop_n, //停止信号output reg [5:0] led // 6个LED灯输出
);reg [25:0] cnt; // 26位计数器,用于计数1秒周期// 计数器模块always @(posedge clk or negedge rst_n or negedge stop_n) begin // posedge是指clk的上升沿 negedge是指rst_n的下降沿if (!rst_n) begincnt <= 26'd0; // 复位时,计数器从0开始计数led <= 6'b000001; // 复位时,第一个LED亮endelse if (!stop_n) begincnt <= cnt;led <= led;end else if (cnt == 50_000_000 - 1) begin // 计数到50,000,000 - 1cnt <= 26'd0; // 重置计数器led <= {led[4:0], led[5]}; // 循环右移一位,保持流水灯效果end else begincnt <= cnt + 1; // 增加计数器endend
endmodule
3、引脚配置

4、实现效果
FPGA流水灯
三、模块化代码
1、分频模块
module clock(input wire clk, // 50MHz时钟输入input wire rst_n, // 复位信号,低电平有效output reg clk_1Hz // 1Hz分频时钟输出
);reg [25:0] cnt; // 26位计数器,用于计数1秒周期always @(posedge clk or negedge rst_n) beginif (!rst_n) begincnt <= 26'd0; // 复位时,计数器清零clk_1Hz <= 1'b0; // 复位时,1Hz时钟信号置低endelse if (cnt == 50_000_000 - 1) begin // 计数到50,000,000 - 1cnt <= 26'd0; // 重置计数器clk_1Hz <= ~clk_1Hz; // 翻转1Hz时钟信号endelse begincnt <= cnt + 1; // 计数器递增endend
endmodule
2、复位暂停模块
module control(input wire clk_1Hz, // 1Hz时钟输入input wire rst_n, // 复位信号,低电平有效input wire stop_n, // 停止信号,低电平有效output reg [5:0] led // 6个LED灯输出
);always @(posedge clk_1Hz or negedge rst_n or negedge stop_n) beginif (!rst_n) beginled <= 6'b000001; // 复位时,第一个LED亮endelse if (!stop_n) beginled <= led; // 停止时,LED状态保持不变endelse beginled <= {led[4:0], led[5]}; // 循环右移一位,实现流水灯效果endend
endmodule
3、顶层模块
module led(input wire clk, // 50MHz时钟输入input wire rst_n, // 复位信号,低电平有效input wire stop_n, // 停止信号,低电平有效output wire [5:0] led // 6个LED灯输出
);wire clk_1Hz; // 1Hz时钟信号// 实例化时钟模块clock u_clock(.clk(clk),.rst_n(rst_n),.clk_1Hz(clk_1Hz));// 实例化控制模块control u_control(.clk_1Hz(clk_1Hz),.rst_n(rst_n),.stop_n(stop_n),.led(led));
endmodule
四、总结
本次实验的核心目的在于通过实践操作,熟悉FPGA的开发流程,并通过编写Verilog代码来实现FPGA的流水灯效果,以此来练习和巩固Verilog编程的相关知识。实验关键点在于时钟和复位信号的处理: 理解时钟信号在数字设计中的重要性,以及如何使用复位信号来初始化和同步系统状态。计数器的设计: 学习如何利用计数器产生定时信号,以实现LED灯的顺序点亮。
,并通过编写Verilog代码来实现FPGA的流水灯效果,以此来练习和巩固Verilog编程的相关知识。实验关键点在于时钟和复位信号的处理: 理解时钟信号在数字设计中的重要性,以及如何使用复位信号来初始化和同步系统状态。计数器的设计: 学习如何利用计数器产生定时信号,以实现LED灯的顺序点亮。
相关文章:
FPGA学习(二)——实现LED流水灯
FPGA学习(二)——实现LED流水灯 目录 FPGA学习(二)——实现LED流水灯一、DE2-115时钟源二、控制6个LED灯实现流水灯1、核心逻辑2、代码实现3、引脚配置4、实现效果 三、模块化代码1、分频模块2、复位暂停模块3、顶层模块 四、总结 一、DE2-115时钟源 DE2-115板子包含一个50MHz…...
E1-最远距离(stl使用)
题目描述 给定一个数组,请你找出数组中相同元素之间的最远距离。若数组中不存在相同元素,则输出 null。 输入描述 输入一个数组,数组长度不超过 10000。格式请见用例。 输出描述 输出数组中相同元素的最远距离。 用例 输入 [3, 2, 3,…...
Linux如何在设备树中表示和引用设备信息
DTS基本知识 dts 硬件的相应信息都会写在.dts为后缀的文件中,每一款硬件可以单独写一份xxxx.dts,一般在Linux源码中存在大量的dts文件,对于arm架构可以在arch/arm/boot/dts找到相应的dts,一个dts文件对应一个ARM的machie。 dtsi 值…...
Matlab 汽车振动多自由度非线性悬挂系统和参数研究
1、内容简介 略 Matlab 169-汽车振动多自由度非线性悬挂系统和参数研究 可以交流、咨询、答疑 2、内容说明 略 第二章 汽车模型建立 2.1 汽车悬架系统概述 2.1.1 悬架系统的结构和功能 2.1.2 悬架分类 2.2 四分之一车辆模型 对于车辆动力学,一般都是研究其悬…...
Maven核心包:maven-resolver-api
在阅读 nexus-pubic 开源项目过程中,使用了大量的核心组件进行轻量化集成。它的这种构建方式,在阅读过程中不得不感概,节省成本从构建项目的方式上就遥遥领先了。但是 maven核心包,依然使用前几年的aether-spi,却没有更…...
生活中的可靠性小案例11:窗户把手断裂
窗户把手又断了,之前也断过一次,使用次数并没有特别多。上方的图是正常的把手状态,断的形状如下方图所示。 这种悬臂梁结构,没有一个良好的圆角过渡,导致应力集中。窗户的开关,对应的是把手的推拉ÿ…...
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
074_ai辅助编程_水果程序_fruits_加法 回忆上次内容 上次直接从模块中导入变量、函数 from my_file import pi 导入my_file.pi 并作为 pi 使用 from my_file import pi as my_pi 导入变量 并 重命名 添加图片注释,不超过 140 字(可选) …...
【图论】并查集的学习和使用
目录 并查集是什么? 举个例子 组成 父亲数组: find函数: union函数: 代码实现: fa[] 初始化code: find code: 递归实现: 非递归实现: union code : 画图模拟: 路径压缩:…...
欢乐力扣:反转链表
文章目录 1、题目描述2、思路 1、题目描述 反转链表。 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 2、思路 借助cur指针和pre双指针来调整链表的前后指向。 # Definition for singly-linked list. # class ListNode: # def __i…...
1.8PageTable
页表的作用 虚拟地址空间映射:页表记录了进程的虚拟页号到物理页号的映射关系。每个进程都有自己的页表,操作系统为每个进程维护一个独立的页表。内存管理:页表用于实现虚拟内存管理,支持进程的虚拟地址空间和物理地址空间之间的…...
什么是大带宽服务器
什么是大带宽服务器? 在深入探讨大带宽之前,让我们先明确带宽的概念。带宽与我们日常所说的宽带有所不同,宽带是运营商为满足家庭或商业上网需求所提供的服务,而带宽则特指数据的传输速度,尤其是上行速度。大带宽服务…...
【TCP】三次挥手,四次挥手详解--UDP和TCP协议详解
活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!…...
Compose 实践与探索十二 —— 附带效应
1、SideEffect Google 官方文档对 side effect 有两种翻译,简体中文翻译为附带效应,繁体中文翻译为副作用。这两个翻译我们用哪个都行,关键是如何理解它的含义。 1.1 什么是副作用 我们在日常生活中听到的副作用大多是医学领域中的&#x…...
Kubernetes 控制平面详解 —— 探秘 API Server、Controller Manager、Scheduler 与 etcd
文章目录 Kubernetes 控制平面详解 —— 探秘 API Server、Controller Manager、Scheduler 与 etcd控制平面概述API Server角色与职责工作原理 etcd角色与职责工作原理 Scheduler角色与职责工作原理 Controller Manager角色与职责工作原理 总结 Kubernetes 控制平面详解 —— 探…...
SSM基础专项复习4——Maven项目管理工具(1)
系列文章 1、SSM基础专项复习1——SSM项目整合-CSDN博客 2、SSM基础专项复习2——Spring 框架(1)-CSDN博客 3、SSM基础专项复习3——Spring框架(2)-CSDN博客 文章目录 系列文章 1. Maven 的概念 1.1. 什么是 Maven 1.2. 什…...
使用c#进行串口通信
一、串口通信协议 1.串口通信协议简介 串口通信(serial communication)是一种设备间非常常用的串行通信方式,大部分电子设备都支持,电子工程师再调试设备时也经常使用该通信方式输出调试信息。讲到某一种通信协议,离…...
Web开发-PHP应用鉴别修复AI算法流量检测PHP.INI通用过滤内置函数
知识点: 1、安全开发-原生PHP-PHP.INI安全 2、安全开发-原生PHP-全局文件&单函数 3、安全开发-原生PHP-流量检测&AI算法 一、演示案例-WEB开发-修复方案-PHP.INI配置 文章参考: https://www.yisu.com/ask/28100386.html https://blog.csdn.net/…...
蓝桥模拟+真题讲解
今天谁一篇文章哈 ! 由于本篇文章有些的题目只有图片,因此还望各位见谅。 目录 第一题 题目解析 代码原理 代码编写 填空技巧---巧用python 第二题 题目解析 编辑 填空技巧---巧用python 第三题 题目链接 题目解析 必备知识 解题技巧 …...
C语言【数据结构】:时间复杂度和空间复杂度.详解
引言 详细介绍什么是时间复杂度和空间复杂度。 前言:为什么要学习时间复杂度和空间复杂度 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时…...
大模型的参数数量与学习的知识数量之间
大模型的参数数量与学习的知识数量之间 大模型的参数数量与学习的知识数量之间呈现非线性、条件依赖的复杂关系,其本质是**「表达能力」与「知识编码效率」的动态博弈**。以下从五个维度拆解核心逻辑: 一、参数是知识的「载体容量」,但非唯一决定因素 理论上限:参数数量决…...
基于Python的selenium入门超详细教程(第2章)--单元测试框架unittest
学习路线 自动化测试介绍及学习路线-CSDN博客 自动化测试之Web自动化(基于pythonselenium)-CSDN博客 基于Python的selenium入门超详细教程(第1章)--WebDriver API篇-CSDN博客 目录 前言: 一、单元测试 1. 单元测试的定义 2. 单元测…...
日志、类加载器、XML(配置文件)
目录 一、日志1.日志技术的概述2.日志技术的体系a. Logback 3.日志的级别 二、类加载器1.概述2.类加载时机3.类加载过程3.类加载器的分类4.常用方法 三、XML(配置文件)1.概述2.XML的基本语法3.XML的文档约束a.DTD约束b.schema约束 4.XML文档解析a.Dom4jb…...
Flutter中的const和final的区别
目录 一、核心区别对比表 二、初始化机制深度解析 1. const 的编译期特性 2. final 的运行时特性 三、内存管理差异 1. const 的内存优化 2. final 的独立内存 四、集合类型的本质区别 1. const 集合的完全不可变性 2. final 集合的引用不可变性 五、在 Flutter 中的…...
DAY34 贪心算法Ⅲ
134. 加油站 - 力扣(LeetCode) 这种环路问题要记一下。 class Solution { public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int curSum0;int totalSum0;int start0;for(int i0;i<gas.size();i){curSumga…...
AI大白话(一):5分钟了解AI到底是什么?
🌟引言: 在这个信息爆炸的时代,“人工智能”、“AI”、“机器学习”、"深度学习"等词汇频繁出现在我们的生活中。 从手机里的语音助手,到网购平台的个性化推荐,再到最近大火的AI绘画和ChatGPT,人…...
(七)Spring Boot学习——Redis使用
有部分内容是常用的,为了避免每次都查询数据库,将部分数据存入Redis。 一、 下载并安装 Redis Windows 版的 Redis 官方已不再维护,你可以使用 微软提供的 Redis for Windows 版本 或者 使用 WSL(Windows Subsystem for Linux&a…...
蓝桥与力扣刷题(蓝桥 字符统计)
题目:给定一个只包含大写字母的字符出 S, 请你输出其中出现次数最多的字符。如果有多个字母均出现了最多次, 按字母表顺序依次输出所有这些字母。 输入格式 一个只包含大写字母的字等串 S. 输出格式 若干个大写字母,代表答案。 样例输入 BABBACAC样…...
AtCoder Beginner Contest 397(ABCDE)
目录 A - Thermometer 翻译: 思路: 实现: B - Ticket Gate Log 翻译: 思路: 实现: C - Variety Split Easy 翻译: 思路: 实现: D - Cubes 翻译:…...
Profinet转Profinet以创新网关模块为核心搭建西门子和欧姆龙PLC稳定通讯架构案例
你是否有听过PROFINET主站与PROFINET主站之间需要做数据通讯有需求? 例如西门子1500与霍尼韦尔DCS系统两个主站之间的通讯。应用于PROFINET为主站设备还有欧姆龙、基恩士、罗克韦尔、施耐德、GE、ABB等品牌的PLC或DCS、FCS等平台。在生产或智能领域有通讯需求。两头…...
计算机视觉|Swin Transformer:视觉 Transformer 的新方向
一、引言 在计算机视觉领域的发展历程中,卷积神经网络(CNN) 长期占据主导地位。从早期的 LeNet 到后来的 AlexNet、VGGNet、ResNet 等,CNN 在图像分类、目标检测、语义分割等任务中取得了显著成果。然而,CNN 在捕捉全…...
