PWM呼吸灯+流水灯设计

完成任务: 在流水灯基础上加入pwm呼吸灯设计,关于pwm呼吸灯设计可以看博主上一篇博客PWM呼吸灯设计 ,开发板上灯每两秒进行一次切换,每一个的亮灭间隔为一秒。

代码参考:

module pwm_led_change(input   wire        clk     ,input   wire        rst_n   ,output  reg [3:0]   led
);parameter TIME_US = 6'd49;//50*20ns 1us
parameter TIME_MS = 10'd999;//1000ns*1000 1ms
parameter TIME_S = 10'd999;//1000ms*1000 1sreg [5:0] cnt_us;
reg [9:0] cnt_ms;
reg [9:0] cnt_s;
reg [1:0] cnt_2s;
reg [1:0]  state;//保存led灯状态
reg flag;//闪烁标志wire add_cnt_us;//us计数器开始计数标志
wire end_cnt_us;//us计数器结束计数标志wire add_cnt_ms;//ms计数器开始计数标志
wire end_cnt_ms;//ms计数器结束计数标志wire add_cnt_s;
wire end_cnt_s;wire end_cnt_2s;//1us计时器
always @(posedge clk or negedge rst_n) beginif(!rst_n) begincnt_us <= 6'd0;endelse if(add_cnt_us) beginif(end_cnt_us) begincnt_us <= 6'd0;endelse begincnt_us <= cnt_us +1'd1;endendelse begincnt_us <= cnt_us;end
endassign add_cnt_us = 1'b1;
assign end_cnt_us = add_cnt_us && (cnt_us == TIME_US);//1ms计时器
always @(posedge clk or negedge rst_n) beginif(!rst_n) begincnt_ms <= 10'd0;endelse if(add_cnt_ms) beginif(end_cnt_ms) begincnt_ms <= 10'd0;endelse begincnt_ms <= cnt_ms + 1'd1;endendelse begincnt_ms <= cnt_ms;end
endassign add_cnt_ms = end_cnt_us;
assign end_cnt_ms = add_cnt_ms && (cnt_ms == TIME_MS);//1s计时器
always @(posedge clk or negedge rst_n) beginif(!rst_n) begincnt_s <= 10'd0;endelse if(add_cnt_s) beginif(end_cnt_s) begincnt_s <= 10'd0;endelse begincnt_s <= cnt_s + 1'd1;endendelse begincnt_s <= cnt_s;end
endassign add_cnt_s = end_cnt_ms;
assign end_cnt_s = add_cnt_s && (cnt_s == TIME_S);//2s计时
always @(posedge clk or negedge rst_n) beginif(!rst_n) begincnt_2s <= 2'd0;endelse if(end_cnt_s)begincnt_2s <= cnt_2s + 1'd1;endelse if(cnt_2s == 2'd2) begincnt_2s <= 2'd0;endelse begincnt_2s <= cnt_2s;end
endassign end_cnt_2s = (cnt_2s == 2'd2);//state状态
always @(posedge clk or negedge rst_n) beginif(!rst_n) beginstate <= 2'd0;endelse if(end_cnt_2s) beginstate <= state + 1'd1;endelse beginstate <= state;end
end//flag值判断
always @(posedge clk or negedge rst_n) beginif(!rst_n) beginflag <= 1'b0;endelse if(end_cnt_s) beginflag <= ~flag ;endelse beginflag <= flag;end
end//led变化
always @(posedge clk or negedge rst_n) beginif(!rst_n) beginled = 4'b0000;endelse begincase(state)2'd0 : beginif(flag == 1'b1) begin//电亮if(cnt_s > cnt_ms) beginled[0] <= 1'b1;led[3:1] <= 3'b000;endelse beginled[0] <= 1'b0;led[3:1] <= 3'b000;endendelse begin//熄灭if(cnt_s > cnt_ms) beginled[0] <= 1'b1;led[3:1] <= 3'b000;endelse beginled[0] <= 1'b1;led[3:1] <= 3'b000;endendend 2'd1 : beginif(flag == 1'b1) begin//电亮if(cnt_s > cnt_ms) beginled[1] <= 1'b1;led[3:2] <= 2'b00;led[0] <= 1'b0;endelse beginled[1] <= 1'b0;led[3:2] <= 2'b00;led[0] <= 1'b0;endendelse begin//熄灭if(cnt_s > cnt_ms) beginled[1] <= 1'b0;led[3:2] <= 2'b00;led[0] <= 1'b0;endelse beginled[1] <= 1'b1;led[3:2] <= 2'b00;led[0] <= 1'b0;endendend2'd2 : beginif(flag == 1'b1) begin//电亮if(cnt_s > cnt_ms) beginled[2] <= 1'b1;led[3] <= 1'b0;led[1:0] <= 2'b0;endelse beginled[2] <= 1'b0;led[3] <= 1'b0;led[1:0] <= 2'b0;endendelse begin//熄灭if(cnt_s > cnt_ms) beginled[2] <= 1'b0;led[3] <= 1'b0;led[1:0] <= 2'b0;endelse beginled[2] <= 1'b1;led[3] <= 1'b0;led[1:0] <= 2'b0;endendend2'd3 : beginif(flag == 1'b1) begin//电亮if(cnt_s > cnt_ms) beginled[3] <= 1'b1;led[2:0] <= 3'b000;endelse beginled[3] <= 1'b0;led[2:0] <= 3'b000;endendelse begin//熄灭if(cnt_s > cnt_ms) beginled[3] <= 1'b0;led[2:0] <= 3'b000;endelse beginled[3] <= 1'b1;led[2:0] <= 3'b000;endendenddefault :led <= 4'b0000;endcaseend
endendmodule

测试文件:

`timescale 1ns/1ns
module pwm_led_change_tb();reg clk;reg rst_n;wire [3:0] led;parameter CYCLE = 20;parameter TIME_US = 5;parameter TIME_MS = 10;parameter TIME_S = 10;always #(CYCLE/2) clk = ~clk;initial beginclk = 1'b0;rst_n = 1'b0;#(CYCLE);rst_n = 1'b1;#((TIME_US + 1)*(TIME_MS + 1)*(TIME_S + 1)*CYCLE*2*4);$stop;endpwm_led_change #(.TIME_US    (TIME_US),.TIME_MS    (TIME_MS),.TIME_S     (TIME_S))u_pwm_led_change(.clk    (clk),.rst_n  (rst_n),.led    (led));endmodule 

我们通过modelsim仿真结果如下:
在这里插入图片描述
结果展示:
在这里插入图片描述

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

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

相关文章

数据结构初阶--排序2

目录 前言快速排序思路hoare版本代码实现挖坑法代码实现前后指针法代码实现 快排优化三项取中法代码实现三指针代码实现 快排非递归代码实现 归并排序思路代码实现归并非递归代码实现 计数排序思路代码实现 前言 本篇文章将继续介绍快排&#xff0c;归并等排序算法以及其变式。…

antd-React Table 中文转化

1.首先需要进行中文包导入 2.引入标签对Table进行包裹即可 import zh_CN from antd/lib/locale-provider/zh_CN;import {ConfigProvider} from antd;<ConfigProvider locale{zh_CN}><Tablecolumns{columns}rowKey{record > record.id}dataSource{data}pagination{p…

【ArcGIS】shp导入报错ORA-00911无效字符

这个当个问题记录以下&#xff0c;就是shp文件名或者字段名有非正常字符&#xff0c;修改下名称重新导入即可&#xff1b; 直接改shp没法修改字段&#xff0c;会报错&#xff0c;需要先转化为gdb文件&#xff0c;然后在修改

el-table组件插槽“slot-scope”

目录 一、代码展示 二、返回的数组对象不含value或者ispass&#xff0c;不会报错 三、插槽里面放的是要手动输入的值时 一、代码展示 <el-table v-loading"loading" :data"checklistList" selection-change"handleSelectionChange"><…

OV7670摄像头模块的使用

OV7670摄像头模块介绍 OV7670 CAMERACHIPTM 图像传感器&#xff0c;体积小、 工作电压低&#xff0c;提供单片 VGA 摄像头和影像处理器的所有功能。通过 SCCB 总线控制&#xff0c;可以输出整帧、子采样、取窗口等方式的各种分辨率 8 位影响数据。该产 品 VGA 图像最高达到 30…

【Linux】内存使用相关

free 命令 查看内存大小 free -g :G单位 free -h : 可读性较高较理解 free -m : MB单位 total: 总内存used: 正在运行的进程使用的内存(used total – free – buff/cache)free: 未使用的内存 (free total – used – buff/cache)shared: 多个进程共享的内存buffers: 内存保留…

面试题更新之-伪元素和伪类

文章目录 伪元素和伪类是什么&#xff1f;伪元素&#xff08;Pseudo-elements&#xff09;:伪类&#xff08;Pseudo-classes&#xff09;: css伪元素和伪类的区别使用css伪元素的好处使用css伪类的好处 伪元素和伪类是什么&#xff1f; 在CSS中&#xff0c;伪元素&#xff08;…

xpath下载安装——Python爬虫xpath插件下载安装(2023.7亲测可用!!)

目录 1.免费下载插件链接&#xff08;若失效评论区留言发送最新链接&#xff09;&#xff08;2023.7亲测可用&#xff09; 2.安装插件 &#xff08;1&#xff09;打开chrome浏览器页面&#xff0c;点击&#xff1a;右上角三个点 > 扩展程序 > 管理拓展程序 &#xff…

gitbash2.41安装教程——2023.07

文章目录 1、下载安装包2、安装 1、下载安装包 进入官网下载&#xff0c;官网链接 上面有多种系统可以选择&#xff0c;我是windows&#xff0c;点击windows进行下载 这里可以直接下载最新版本的git 2.41.0 64位。 下载可能有点慢&#xff0c;耐心等待。 2、安装 下载完…

JVM——类加载和垃圾回收

目录 前言 JVM简介 JVM内存区域划分 JVM的类加载机制 1.加载 双亲委派模型 2.验证 验证选项 3.准备 4.解析 5.初始化 触发类加载 JVM的垃圾回收策略 GC 一&#xff1a;找 谁是垃圾 1.引用计数 2.可达性分析 &#xff08;这个方案是Java采取的方案&#x…

基于单片机智能台灯坐姿矫正器视力保护器的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;LCD1602液晶显示当前当前光线强度、台灯灯光强度、当前时间、坐姿距离等&#xff1b;按键设置当前时间&#xff0c;闹钟、提醒时间、坐姿最小距离&#xff1b;通过超声波检测坐姿&#xff0c;当坐姿不正容易对眼睛和身体腰部等造成…

MySQL索引详解

索引 在MySQL中&#xff0c;查询方式可以根据访问表数据的方式分为两种&#xff1a;全表扫描和使用索引。 全表扫描&#xff08;Full Table Scan&#xff09;&#xff1a; 全表扫描是指在查询过程中&#xff0c;MySQL会遍历整个表的每一行来检查满足查询条件的数据。当查询条件…

Ubuntu下安装、配置及重装CUDA教程

安装CUDA 前往Nvidia CUDA Tools官网选择对应的架构和版本下载CUDA 以如下架构和版本为例&#xff1a; 查看显卡驱动 nvidia-smi如果显卡驱动已经装了&#xff0c;那么在CUDA安装过程中不用再勾选安装driver 下载并安装CUDA wget https://developer.download.nvidia.co…

Spring AOP

目录 AOP 理解AOP AOP组成 AOP的优点 Spring AOP 使用Spring AOP 定义切面和切点 定义通知 动态代理 织入 AOP 理解AOP AOP即面向切面编程&#xff0c;简单来说&#xff0c;就是把一部分通用的功能集中的放在一个地方处理的思想。假如某一段代码很多地方要用到&…

创建型模式 - 建造者模式

概述 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于&#xff1a;某个对象的构建过程复杂的情况。 由于实现了构建和装配的解耦。…

pytest 参数化进阶

目录 前言&#xff1a; 语法 参数化误区 实践 简要回顾 前言&#xff1a; pytest是一个功能强大的Python测试框架&#xff0c;它提供了参数化功能&#xff0c;可以帮助简化测试用例的编写和管理。 语法 本文就赶紧聊一聊 pytest 的参数化是怎么玩的。 pytest.mark.par…

openGauss学习笔记-13 openGauss 简单数据管理-DELETE语句

文章目录 openGauss学习笔记-13 openGauss 简单数据管理-DELETE语句13.1 语法格式13.2 参数说明13.3 示例 openGauss学习笔记-13 openGauss 简单数据管理-DELETE语句 DELETE语句可以从指定的表里删除满足WHERE子句的行。如果WHERE子句不存在&#xff0c;将删除表中所有行&…

css 禁止多次点击导致的选中了目标div的文字

像下面这样的情况&#xff0c;就可以用这种方法避免掉 禁止多次点击&#xff0c;导致的&#xff0c;选中了目标div的文字 或者 禁止多次点击&#xff0c;导致&#xff0c;html结构被选中显示出来 .targetDiv {-webkit-user-select: none;-moz-user-select: none;-ms-user-sel…

【云原生】Docker的初步认识,安装与基本操作

一、Docker的相关知识 Docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具&#xff0c;是一种轻量级的“虚拟机”。 Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的…

SpringCloud整合Sentinel

文章目录 1、Sentinel介绍2、安装Sentinel控制台3、微服务整合Sentinel 1、Sentinel介绍 阿里开源的流量控制组件官网&#xff1a;https://sentinelguard.io/zh-cn/index.html承接了阿里双十一大促流量的核心场景&#xff0c;如秒杀、消息削峰填谷、集群流量控制、实时熔断下游…