分频流水灯

news/2024/7/9 7:51:25

在开发板中,有一个内置的时钟周期,为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://lihuaxi.xjx100.cn/news/1698404.html

相关文章

WuThreat身份安全云-TVD每日漏洞情报-2023-10-13

漏洞名称:libcue <2.2.1 越权访问漏洞 漏洞级别:高危 漏洞编号:CVE-2023-43641,CNNVD-202310-579 相关涉及:系统-alpine_edge-libcue-*-Up to-(excluding)-2.2.1-r0- 漏洞状态:未定义 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-25092 漏洞名称:科大…

1024程序员节日快乐

在这个1024程序员节日&#xff0c;我想和大家分享一个故事&#xff0c;同时展示一些有趣的技术。 曾经有一个年轻的程序员&#xff0c;名叫小明。他热爱编程&#xff0c;对技术充满了好奇心和激情。一天&#xff0c;他遇到了一个挑战&#xff1a;创建一个智能家居系统&#xf…

k8s基础 随笔

写个笔记&#xff0c;后面再完善 部署第一个应用 为什么先实战水平扩缩&#xff1f;因为这个最简单&#xff0c;首先来部署一个喜闻乐见的nginx kubectl create deployment web --imagenginx:1.14 --dry-run -o yaml > web.yaml --dry-run表示试运行&#xff0c;试一下看…

论文阅读 | RAFT: Recurrent All-Pairs Field Transforms for Optical Flow

RAFT: Recurrent All-Pairs Field Transforms for Optical Flow ECCV2020光流任务best paper 论文地址&#xff1a;【here】 代码地址&#xff1a;【here】 介绍 光流是对两张相邻图像中的逐像素运动的一种估计。目前碰到的一些困难包括&#xff1a;物体的快速运动&#xff…

vue 插槽 作用域插槽

vue 插槽 作用域插槽 **创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day05\准备代码\10-插槽-作用域插槽 vue --version vue crea…

算法---拥有最多糖果的孩子

题目 给你一个数组 candies 和一个整数 extraCandies &#xff0c;其中 candies[i] 代表第 i 个孩子拥有的糖果数目。 对每一个孩子&#xff0c;检查是否存在一种方案&#xff0c;将额外的 extraCandies 个糖果分配给孩子们之后&#xff0c;此孩子有 最多 的糖果。注意&#…

Django实现音乐网站 (21)

使用Python Django框架做一个音乐网站&#xff0c; 本篇音乐播放器功能完善及原有功能修改。 目录 播放列表修改 视图修改 删除、清空播放器 设置路由 视图处理 修改加载播放器脚本 模板修改 脚本设置 清空功能实现 删除列表音乐 播放列表无数据处理 视图修改 播放…

AtCoder abc 133

C - Remainder Minimization 2019 如果LR相差在2019内&#xff0c;那么遍历LR 否则可以视作为1…2019的遍历 D - Rain Flows into Dams 设解为 M 1 , M 2 . . . M n M_1,M_2...M_n M1​,M2​...Mn​ ∵ M 1 M 2 2 A 1 \because M_1M_22A_1 ∵M1​M2​2A1​ M 2 M 3 2 A …