分频流水灯

2023-10-20 18:45
文章标签 流水 分频

本文主要是介绍分频流水灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在开发板中,有一个内置的时钟周期,为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) beginif(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 / 1psmodule 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) beginif(rst_n_i == 1'b0)			//复位使能beginmiddle <= 3'b000;led <=8'b0000_0000;endelse 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;endcaseendendmodule

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

这篇关于分频流水灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/249009

相关文章

物联网之流水LED灯、正常流水灯、反复流水灯、移动流水灯

MENU 硬件电路设计软件程序设计正常流水LED灯反复流水LED灯移动流水LED灯 硬件电路设计 材料名称数量直插式LED1kΩ电阻杜邦线(跳线)若干面包板1 每一个LED的正极与开发板一个GPIO引脚相连,并串联一个电阻,负极接GND。 当然也可以选择只使用一个电阻。 软件程序设计 正常流水LED灯 因为要用到多个GPIO引脚,所以最好把所有的GPI

批量生成编号(A~Z+3位流水编号)

/*** 批量生成编号* @param num* @param warehouseId* @return*/public synchronized List<String> generatCodeList(int num,long warehouseId){MesRack rack = this.getCurrentRack(warehouseId);String oldRackCode;Lis

git 学习的流水log

git命令联系 配置以及修改全局user信息 git config --global user.name 'you_name' git config --global user.email 'you_email@qq.com' 现有设备中的所有配置 git config --list 现有设备中的所有配置 git config --list --local/--global/--syste

流水灯 附 超炫20模式带拖尾LED流水灯码

1.0 基础系列 1.1函数 #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int void delay (uint x) { uint i; for(i=x;i>0;i--); } void main () { int i=0xfe; while(1) {

Ascend C算子性能优化实用技巧01——流水优化

Ascend C是CANN针对算子开发场景推出的编程语言,原生支持C和C++标准规范,兼具开发效率和运行性能。使用Ascend C,开发者可以基于昇腾AI硬件,高效的实现自定义的创新算法。 目前已经有越来越多的开发者使用Ascend C,我们将通过几期“Ascend C算子性能优化”专题分享,围绕开发者最为关心的算子性能优化环节,介绍Ascend C算子常用的优化技巧,帮助开发者自主构建出更优

8周流水6700美元Dropshipping运营全流程曝光丨出海笔记

(之前删掉补发系列) 之前分享了一个案例《净赚4000多美元!个人卖家Dropshipping卖30天太阳镜,究竟如何做到的》,不少小伙伴觉得实操性很强,纷纷反馈意犹未尽,所以船长继续去找之前的Dropshipping案例,终于让我整理到一篇最详细的教科书级别的Dropshipping实操案例,分享给大家。 (还是那句话:很多人吐槽说dropshipping现在没法玩了,这个主要还

基于HAL库的流水灯设计实验

实验报告原件(包括实验结果视频)在资源可选择性下载 一、实验目的: 1.了解STM32固件库; 2.掌握STM32固件库关键子目录及固件库关键文件; 3.能够新建一个基于标准固件库的工程模板并完成编译; 4.通过LED的闪烁实验掌握库函数的调用方法、端口的配置方法、程序执行流程,并体验到程序控制的实际效果。 二、实验器材: 安装有keli和STM32软件的笔记本或电脑。 三、实验内

01:【江科大stm32】:LED闪烁/LED流水灯/蜂鸣器

1、LED闪烁程序 /*LED灯闪烁,LED正极连接电源,负极连接PA0引脚,所以输出0点亮,输出1熄灭*/#include "stm32f10x.h" #include "Delay.h"int main(void){//1. 使能挂载在APB2总线上面的片上外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,E

【TB作品】普中V2,数字时钟万年历显示,音乐闹钟,流水灯,Proteus仿真

文章目录 功能硬件原理图LCD1602独立按键LED灯ds1302蜂鸣器 引脚汇总按键功能code 功能 带闹钟和花样流水灯的LCD数显实时时钟设计(运用DS1302时钟模块,LCD显示,带万年历,时间到响音乐显示花样流水灯) 万年历显示 按键设置时间、闹钟 闹钟到了后音乐响、流水灯亮,维持10秒后自动关闭 硬件原理图 LCD1602 独立按键 LED灯

stm32学习笔记---GPIO输出(代码部分)LED闪烁/流水灯/蜂鸣器

目录 面包板的使用方法 第一个演示代码:LED闪烁 最后一次快速新建工程演示 点击新建工程 选择芯片 在工程文件夹中创建Start、Library、User Start文件夹的必备文件复制操作 Library文件夹的必备文件复制操作 User文件夹的必备文件复制操作 在keil中创建Start、Library、User分组并添加文件 添加Start、Library、User文