一、模块设计

如若不清楚怎么模块化,请看https://blog.csdn.net/szyugly/article/details/146379170?spm=1001.2014.3001.5501

1.1顶层模块

module top_counter(input  wire       CLOCK_50,    // 50MHz时钟input  wire       KEY0,        // 暂停/继续按键output wire [6:0] HEX3, HEX2, HEX1, HEX0,  // 4位七段数码管output wire [3:0] DIGIT_EN     // 数码管位选
);wire clk_1hz;        // 1Hz时钟
wire clk_scan;       // 扫描时钟(1kHz)
wire pause_pulse;    // 消抖后的暂停信号// 模块实例化
clk_div u_clk_div(.clk_50m(CLOCK_50),.clk_1hz(clk_1hz),.clk_1k(clk_scan)
);debounce u_debounce(.clk(CLOCK_50),.key_in(KEY0),.key_out(pause_pulse)
);time_counter u_time_counter(.clk(clk_1hz),.pause(pause_pulse),.min_ten(min_ten),.min_unit(min_unit),.sec_ten(sec_ten),.sec_unit(sec_unit)
);display u_display(.clk(clk_scan),.min_ten(min_ten),.min_unit(min_unit),.sec_ten(sec_ten),.sec_unit(sec_unit),.seg_data({HEX3, HEX2, HEX1, HEX0}),.digit_en(DIGIT_EN)
);endmodule

1.2计数器模块

module time_counter(input  wire clk,      // 1Hz时钟input  wire pause,    // 暂停信号output reg [3:0] min_ten,  // 分钟十位output reg [3:0] min_unit, // 分钟个位output reg [3:0] sec_ten,  // 秒钟十位output reg [3:0] sec_unit  // 秒钟个位
);reg pause_state;  // 暂停状态寄存器always @(posedge clk) beginif(pause) pause_state <= ~pause_state; // 切换暂停状态
endalways @(posedge clk) beginif(!pause_state) begin  // 非暂停状态// 秒个位计数if(sec_unit == 4'd9) beginsec_unit <= 0;// 秒十位计数if(sec_ten == 4'd5) beginsec_ten <= 0;// 分钟个位计数if(min_unit == 4'd9) beginmin_unit <= 0;// 分钟十位计数if(min_ten == 4'd5) beginmin_ten <= 0;end else beginmin_ten <= min_ten + 1;endend else beginmin_unit <= min_unit + 1;endend else beginsec_ten <= sec_ten + 1;endend else beginsec_unit <= sec_unit + 1;endend
endendmodule

1.3按键消抖模块

module debounce(input  wire clk,      // 50MHz时钟input  wire key_in,   // 原始按键输入output reg  key_out   // 消抖后输出
);reg [19:0] counter;      // 20ms计数器 (50MHz * 0.02s = 1,000,000)
reg key_reg;always @(posedge clk) beginkey_reg <= key_in;    // 同步输入if(key_reg != key_out) begin       // 状态变化counter <= 20'd0;end else if(counter < 20'd1_000_000) begincounter <= counter + 1;end else beginkey_out <= key_reg;           // 稳定后更新输出end
endendmodule

1.4显示驱动模块

module display(input  wire clk,          // 扫描时钟(1kHz)input  wire [3:0] min_ten,input  wire [3:0] min_unit,input  wire [3:0] sec_ten,input  wire [3:0] sec_unit,output reg  [6:0] seg_data,  // 段选信号output reg  [3:0] digit_en    // 位选使能
);reg [1:0] scan_cnt;        // 扫描计数器
reg [3:0] data_temp;       // 当前显示数据// 七段译码表(共阳极)
parameter [6:0] SEG_BCD [0:9] = {7'b1000000, // 07'b1111001, // 17'b0100100, // 27'b0110000, // 37'b0011001, // 47'b0010010, // 57'b0000010, // 67'b1111000, // 77'b0000000, // 87'b0010000  // 9
};always @(posedge clk) beginscan_cnt <= scan_cnt + 1;case(scan_cnt)2'b00: begindigit_en <= 4'b1110;  // 最低位data_temp <= sec_unit;end2'b01: begindigit_en <= 4'b1101;data_temp <= sec_ten;end2'b10: begindigit_en <= 4'b1011;data_temp <= min_unit;end2'b11: begindigit_en <= 4'b0111;  // 最高位data_temp <= min_ten;endendcaseseg_data <= SEG_BCD[data_temp]; // 查表输出
endendmodule

1.5分频模块

module clk_div(input  wire clk_50m,  // 50MHz输入output reg  clk_1hz,  // 1Hz输出output reg  clk_1k    // 1kHz扫描时钟
);// 1Hz分频计数器 (50,000,000分频)
reg [25:0] cnt_1hz;
always @(posedge clk_50m) beginif(cnt_1hz == 26'd49_999_999) begincnt_1hz <= 0;clk_1hz <= ~clk_1hz;end else begincnt_1hz <= cnt_1hz + 1;end
end// 1kHz分频计数器 (50,000分频)
reg [15:0] cnt_1k;
always @(posedge clk_50m) beginif(cnt_1k == 16'd49_999) begincnt_1k <= 0;clk_1k <= ~clk_1k;end else begincnt_1k <= cnt_1k + 1;end
endendmodule

二、效果展示

计数器

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

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

相关文章

ubuntu git cola gui

直接的方法&#xff0c; samba&#xff0c; win 里用 tortoiseSVN 需要先在命令行&#xff0c;运行 git 命令&#xff0c;看到操作提示&#xff0c; 按照提示做 然后右键看 git diff 其它的方法 linux下可视化git工具git-cola安装与使用&#xff08;HTTP方式&#xff09;_git…

每日一题(小白)回溯篇4

深度优先搜索题&#xff1a;找到最长的路径&#xff0c;计算这样的路径有多少条&#xff08;使用回溯&#xff09; 分析题意可以得知&#xff0c;每次向前后左右走一步&#xff0c;直至走完16步就算一条走通路径。要求条件是不能超出4*4的范围&#xff0c;不能重复之前的路径。…

【数据分享】2000—2020年我国250m精度灌溉农田栅格数据(免费获取)

灌溉农田是指通过水利灌溉为农作物提供必要水分&#xff0c;以维持其生长需求的农田类型。灌溉农田占全球农田的20%&#xff0c;占全球粮食产量的40%。但其消耗了60%-70%的淡水和80%-90%的消耗性用水量。中国是世界上灌溉面积最大的农业大国&#xff0c;但中国仅占世界上8%的农…

MySQL-SQL-DML语句、INSER添加数据、UPDATE更新数据、DELETE删除数据

一. DML 1. DML的英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增、删、改操作。 2. 添加数据(INSERT)&#xff1b;修改数据(UPDATE)&#xff1b;删除数据(DELETE) 二. DML-INSER添加数据 -- DML insert -- 指定字段添加数…

使用SymPy求解矩阵微分方程

引言 在数学、物理、工程等领域,微分方程常常被用来描述系统的变化和动态过程。对于多变量系统或者多方程系统,矩阵微分方程是非常常见的,它可以用来描述如电路、控制系统、振动系统等复杂的动态行为。今天,我们将通过Python 中的 SymPy 库来求解矩阵微分方程,帮助大家轻…

Sentinel实战(五)、系统保护规则、限流后统一处理及sentinel持久化配置

Spring Cloud Alibaba-Sentinel实战(五)、系统保护规则、限流后统一处理及sentinel持久化配置 一、系统保护规则一)、系统规则支持的模式二)、新增系统规则界面三)、demo测试二、限流后统一处理实操demo三、sentinel持久化配一、系统保护规则 系统保护规则是从应用级别的…

【百日精通JAVA | SQL篇 | 第四篇】约束

SQL这一块没什么难度&#xff0c;主要是一个熟练度&#xff0c;稍微上点难度的地方&#xff0c;其实在于查&#xff0c;比较复杂&#xff0c;涉及到很多问题。 指定列插入 使用指定列插入的时候&#xff0c;未被指定的列使用默认值进行存储&#xff0c;默认值为空。 默认值设置…

http协议版本的区别 -- 2和3

目录 http2和http3的区别 传输层协议 QUIC协议 介绍 连接建立与握手 建立安全连接的过程 RTT 建连为什么需要两个过程 原因 解决 QUIC协议的1-RTT 建连 必要性 连接过程 第一次握手(Client Hello) 版本号 key_share 其他 第二次握手 介绍 Server Hello 身…

21 天 Python 计划:MySQL 库相关操作

文章目录 前言一、系统数据库1. information_schema2. performance_schema3. mysql4. test 二、创建数据库1. 语法2. 数据库命名规则 三、数据库相关操作1. 查看数据库2. 选择数据库3. 删除数据库4. 修改数据库 总结 前言 Python是一种强大且易于学习的编程语言。通过这个21天的…

手撕LLM(二):从源码出发,探索LoRA加载、推理全流程

接上回接着说&#xff0c;前面我们通过分析源码&#xff0c;了解了大模型推理的详细流程&#xff0c;包括提示词从输入&#xff0c;到对话模版包装&#xff0c;到tokenID转换&#xff0c;到Embedding词向量转换&#xff1b;通过大模型推理&#xff0c;再将大模型输出进行最后一…

WPS宏开发手册——常见问题

目录 系列文章6、常见问题 系列文章 使用、工程、模块介绍 JSA语法 JSA语法练习题 Excel常用Api Excel实战 常见问题 附录 6、常见问题 6.1、编辑完宏后会自动保存&#xff0c;下次打开文件会提醒是否启用宏&#xff0c;点击启用会自动加载上次编辑的…

【Android安卓移动计算】实现项目一[模拟器启动项目]

文章目录 新建项目项目结构介绍说明程序自动生成&#xff1a;图片和样式文件夹&#xff1a;Training1\app\src\main\res\drawable布局文件文件夹&#xff1a;Training1\app\src\main\res\layoutJava文件夹&#xff1a;Training1\app\src\main\java\com\example\training1Androi…

快 速 幂

暴力肯定会超时 3^10 9^5 9*9^4 9*81^2 9*18^2^1 先对b判断奇偶 偶数&#xff1a;对b/2,对a平方 奇数&#xff1a;先*a,再对a平方&#xff0c;b/2 取余注意&#xff1a;(3^10)%k( 9 * 18^2^1)%k(( 9%k )%k * (18^2^1)%k)%k

网络钓鱼攻击的威胁和执法部门的作用(第二部分)

执法部门在打击网络钓鱼中的作用 虽然网络钓鱼可能始于一封欺骗性的电子邮件或短信&#xff0c;但其后果可能远远超出个人收件箱的范围&#xff0c;影响企业、经济甚至国家安全。随着网络钓鱼攻击的规模和复杂性不断增加&#xff0c;执法机构站在前线&#xff0c;努力预防、调…

Data_Socket和UDP_Socket

Data_Socket 和 UDP_Socket 是两种不同类型的网络套接字&#xff0c;它们用于不同的协议和应用场景。以下是它们的主要区别&#xff1a; 协议类型&#xff1a; UDP_Socket&#xff1a;使用的是 UDP&#xff08;User Datagram Protocol&#xff09; 协议&#xff0c;这是一种无连…

2025高频面试算法总结篇【排序】

文章目录 直接刷题链接直达把数组排成最小的数删除有序数组中的重复项求两个排序数组的中位数求一个循环递增数组的最小值数组中的逆序对如何找到一个无序数组的中位数链表排序从一大段文本中找出TOP K 的高频词汇 直接刷题链接直达 把一个数组排成最大的数 剑指 Offer 45. 把…

模型压缩技术从零到一

模型压缩是深度学习中的重要技术&#xff0c;旨在减小模型尺寸和计算需求&#xff0c;特别适合在移动设备或嵌入式系统上部署。 要点 模型压缩技术可以显著减小模型尺寸和计算需求&#xff0c;适合资源受限设备。主要技术包括剪枝、量化、知识蒸馏、低秩分解和轻量级模型设计…

浮点数精度问题

目录 ieee754标准解决方法 和c语言一样&#xff0c;所有以ieee754标准的语言都有浮点数精度问题&#xff0c;js也有浮点数精度问题&#xff0c;并且因为是弱类型语言这个问题更严重&#xff0c;js的Number类型的数据都被视为浮点数 ieee754标准 js的数字类型就相当于c语言doub…

超大规模数据场景(思路)——面试高频算法题目

目录 用4KB内存寻找重复元素 从40个亿中产生不存在的整数【位】 如果只让用10MB空间存储&#xff1f; 初次遍历 二次遍历 用2GB内存在20亿个整数中查找出现次数最多的数【分块】 从亿万个URL中查找问题【分块 堆】 40亿个非负整数中找出现两次的数【位 不过多个位哈】 …

开源身份和访问管理方案之keycloak(三)keycloak健康检查(k8s)

文章目录 开源身份和访问管理方案之keycloak&#xff08;三&#xff09;keycloak健康检查启用运行状况检查 健康检查使用Kubernetes下健康检查Dockerfile 中 HEALTHCHECK 指令 健康检查Docker HEALTHCHECK 和 Kubernetes 探针 开源身份和访问管理方案之keycloak&#xff08;三&…