分频流水灯

news2024/11/6 15:41:06

在开发板中,有一个内置的时钟周期,为100MHZ,我们需要使用这样一个时钟信号来设计一个1HZ的流水灯(使用8个led灯),也就是一秒钟有一个灯是亮起的,依次从左到右。
另外还有一个低有效的复位使能端、一个同步保持使能(有效时流水灯亮起状况不变)

首先,1HZ和100MHZ的时钟周期需要进行转换,然后利用新的时钟信号进行led灯信号变更即可。

思路是这样的,既然是100MHZ,也就是时钟周期,那么我们就需要进行计数,当计数到10^8时,才是一个新的时钟信号的一个周期;但是我们知道时钟信号是会有一个高低电平翻转的,也就是说当计数到10^8的一半时,需要有一个信号翻转

分频就是将原来高频率的周期转变为低频率的周期,通过计数的方式

一个周期包含一次翻转,即在一个周期中,时钟信号有一半时间是1,一半时间是0,才能有上升沿与下降沿检测出来

`timescale 1ns / 1ps
module divider(
    input rst_n_i,					//一个低有效的复位使能
    input clk_i,
    output reg clk_o
    );
    reg [28:0]cnt = 'b0;
always@(posedge clk_i or negedge rst_n_i) begin
    if(rst_n_i == 1'b0)				//复位使能有效
        cnt <= 'b0;
    else if(cnt == 9999_9999)		//一个周期
        cnt <= 'b000;
    else 							//计数器递增
        cnt <= cnt + 1'b1;
    
    if(cnt <= 4999_9999 && rst_n_i)	//翻转
        clk_o <= 1'b1;
    else 
        clk_o <= 1'b0;
end
endmodule

 当数到1e8,即0~9999 9999时,分频后的周期过去了一个,就是说在相同的时间内,小周期进行了1e8次,大周期才进一次,每次周期都包含0和1的部分,都是1在周期前半部分,0在周期后半部分.

cnt的位数与被记录的数字(分频大小)有关,分频越大,cnt位数越多

即cnt连接新旧周期,cnt的值确定大周期此时的值,cnt所记录到的最大值决定分频的倍数

cnt与其所能达到的最大值之间的比值,表示大周期此时进行到的百分比

在一半之前,表示大周期还没到一半,大周期此时值为1

此时clk_o信号就是1HZ信号

`timescale 1ns / 1ps

module flowLED(
    input clk_i,
    input rst_n_i,					//低有效
    input en_i,						//高有效
    output reg [7:0]led
    );
    reg [2:0]middle='b000; 			//中间变量计数器
    always@(posedge clk_i or negedge rst_n_i) begin
        if(rst_n_i == 1'b0)			//复位使能
        begin
            middle <= 3'b000;
            led <=8'b0000_0000;
        end
        else if(en_i == 1'b0)		//保持使能
            led <= led;
        else if(middle >= 'b111)
            middle <= 1'b0;
        else 
            middle <= middle +1'b1;        
        case(middle)  
            3'b000: led = 8'b0000_0001;
            3'b001: led = 8'b0000_0010;
            3'b010: led = 8'b0000_0100;
            3'b011: led = 8'b0000_1000;
            3'b100: led = 8'b0001_0000;
            3'b101: led = 8'b0010_0000;
            3'b110: led = 8'b0100_0000;
            3'b111: led = 8'b1000_0000;
        endcase
    end
    
endmodule

利用新的时钟信号,设置一个计数器来控制led灯中亮起的部分(其实属于一个38译码器) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1115238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(原创)实现左侧TextView宽度自适应并且可以显示右侧TextView的布局

效果展示 先来看看上面的效果 左侧的文字宽度是自适应的&#xff0c;但是右侧又有一个TextView 左侧的文字被限制不能把右侧的挤出屏幕外面 所以如果左侧文字超过指定宽度后多余部分就用省略号表示 实际开发中这种情况在一些列表的item中用的比较多 但实际实现的时候会发现 左侧…

RabbitMQ运行机制和通讯过程介绍

文章目录 1.RabbitMQ 环境搭建2.RabbitMQ简介3.RabbitMQ的优势&#xff1a;4. rabbitmq服务介绍4.1 rabbitmq关键词说明4.2 消息队列运行机制4.3 exchange类型 5.wireshark抓包查看RabbitMQ通讯过程 1.RabbitMQ 环境搭建 参考我的另一篇&#xff1a;RabbitMQ安装及使用教程&am…

2023备考软考中级-软件设计师资料

2023备考软考中级-软件设计师资料 一、资源目录介绍 1. 资源目录 2. 2004-2023年真题及答案解析 3. 03-第五版教材、大纲、笔记、精讲精练等 二、资源下载 2023备考软考中级-软件设计师 https://www.aliyundrive.com/s/7MPqUUuaY4K 点击链接保存&#xff0c;或者复制本段内容…

Java每日笔试题错题分析(7)

Java每日笔试题错题分析&#xff08;7&#xff09; 一、错题知识点前瞻第1题第2题第3题第4题第5题 二、错题展示及其解析第1题第2题第3题第4题第5题 一、错题知识点前瞻 第1题 非静态变量不能被静态方法引用 第2题 start()方法与run()方法 start()方法是启动一个线程&#xff…

KMP 算法 + 运用前后缀信息 + 案例分析 + 实战力扣题

一、理解KMP算法如何运用后缀和前缀的信息 文本串text:abcxabcdabxabcdabcdabcy模式串pattern:abcdabcy 当发现不匹配的点&#xff0c;我们的目标不是在这个串中进行回溯操作。因此我们要检查的是 d 的前面的子串&#xff08;abc&#xff09;&#xff0c;在这个子串&#xff08…

2000-2021年全国30省市水土流失治理面积、水库数量、水库总容量、除涝面积数据

2000-2021年全国30省市水土流失治理面积、水库数量、水库总容量、除涝面积数据 1、时间&#xff1a;1995-2020年 2、指标&#xff1a;水土流失治理面积、水库数量、水库总容量、除涝面积 3、范围:30省市不含上海 4、来源&#xff1a;国家统计J、各省NJ 5、指标解释&#x…

优秀数据库模式迁移工具的发展历程

数据库模式迁移可能是应用程序开发中风险最大的领域——因为这是一个困难的、有风险的和痛苦的过程。数据库模式迁移工具的存在是为了减轻这种痛苦&#xff0c;并且已经取得了长足的进步&#xff1a;从基本的CLI工具到GUI工具&#xff0c;从简单的SQL GUI客户端到一体化协作数据…

[牛客]计算机网络习题笔记_1020

1、物理层&#xff1a;以太网 调制解调器 电力线通信(PLC) SONET/SDH G.709 光导纤维 同轴电缆 双绞线等。 2、数据链路层&#xff08;网络接口层包括物理层和数据链路层&#xff09;&#xff1a;Wi-Fi(IEEE 802.11) WiMAX(IEEE 802.16) ATM DTM 令牌环 以太网 FDD…

在JavaScript中,如何创建一个数组或对象?

在JavaScript中,可以使用以下方式创建数组和对象: 一:创建数组(Array): 1:使用数组字面量(Array Literal)语法,使用方括号 [] 包裹元素,并用逗号分隔: let array1 = []; // 空数组 let array2 = [1, 2, 3]; // 包含三个数字的数组 let array3 = [apple, banana,…

HypeX Labs:充分释放加密资产的潜力

加密货币通常被视为是资产类别或投资工具&#xff0c;不过其代表了一种全新的意识形态&#xff0c;且与传统资产有着完全不同的底层价值逻辑&#xff0c;所以它们不仅可以被视为一种资产类别或投资工具&#xff0c;在大多数情况下可以被视为一种基于技术的实现。因此我们可以认…

C++练习:人员信息管理程序计算不同职员的每月工资。

要求编写一个简单的人员信息管理程序&#xff0c;具体要求如下&#xff1a; 程序涉及到五个类&#xff0c;分别是employee&#xff0c;technician&#xff0c;salesman&#xff0c;manager&#xff0c;salsemanager。 这五个类的关系为&#xff1a;employee是顶层父类&#xf…

AUTOSAR AP 硬核知识点梳理(3)AUTOSAR AP 方法论和开发流程的最佳实践

一 Adaptive AUTOSAR 方法论 AUTOSAR AP开发方法论包括三个主要阶段,分别是: 1、架构和设计阶段: 在这个阶段,您需要确定系统的需求、功能和服务,并将它们分配到合适的Machine上。 根据个人习惯使用一些建模工具,例如[Simulink]、[ProVision]或[RTA-VRTE SDK]自带的DS…

我们不一样①

我们不一样① 从hello world开始 别人的hello world​​ 我们的hello world 代码展示 #include <stdio.h> int main(){printf("\033[31mhello world\033[0m"); getchar();return 0; } 此处用了 ANSI转义序列 ANSI转义序列是一种带内信号的转义序列标准&am…

代码随想录算法训练营第23期day27|93.复原IP地址、78.子集、90.子集II

目录 一、&#xff08;leetcode 93&#xff09;复原IP地址 二、&#xff08;leetcode 78&#xff09;子集 三、&#xff08;leetcode 90&#xff09;子集II 一、&#xff08;leetcode 93&#xff09;复原IP地址 力扣题目链接 状态&#xff1a;没有写出来&#xff0c;待回顾…

Python —— 验证码的处理执行JavaScript语句

1、验证码的处理 1、概述&绕过验证码的方案 很多的网站都在登录页面加入了识别文字&#xff0c;识别图片&#xff0c;拖动拼图的验证码方式来防止爬虫、恶意注册 等&#xff0c;如果是做自动化&#xff0c;需要绕过验证码才能进入下一步操作&#xff0c;那么有4种方案可以…

深入探讨 Golang 中的追加操作

通过实际示例探索 Golang 中的追加操作 简介 在 Golang 编程领域&#xff0c;append 操作是一种多才多艺的工具&#xff0c;使开发人员能够动态扩展切片、数组、文件和字符串。在这篇正式的博客文章中&#xff0c;我们将踏上一段旅程&#xff0c;深入探讨在 Golang 中进行追加…

基于跳蛛优化的BP神经网络(分类应用) - 附代码

基于跳蛛优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于跳蛛优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.跳蛛优化BP神经网络3.1 BP神经网络参数设置3.2 跳蛛算法应用 4.测试结果&#xff1a;5.M…

eltable el-tooltip__popper 换行、字体、颜色等调整

show-overflow-tooltip属性 element-ui表格 默认情况下若内容过多会折行显示&#xff0c;若需要单行显示可以使用show-overflow-tooltip属性&#xff0c;它接受一个Boolean&#xff0c;为true时多余的内容会在 hover 时以 tooltip 的形式显示出来。 默认情况 element-ui表格 sh…

【练习题】二.栈和队列

1.蒋编号为0和[的两个栈存放于一个数组空间 V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶播针 top[0]等F-1 时该戍为空:当第1号栈的栈顶指针 top[I]等于 m 时,该栈为空两个栈均从两端向中间增长 (见图 3.2)。试编写双栈初始化,判渐栈空、栈满、进栈和出栈等算法的两数。…

5年经验之谈 —— 总结自动化测试与性能测试的区别!

很多刚刚接触自动化测试和性能测试的同学感觉性能测试和自动化测试是没什么区别的&#xff0c;就像小编刚刚接触自动化测试和性能测试的时候一样&#xff0c;区别就是&#xff1a;自动化测试是一个用户在测试&#xff0c;而性能测试需要并发&#xff0c;需要设计各种场景。测试…