DE2-115分秒计数器

news2025/4/6 17:05:04

一、模块设计

如若不清楚怎么模块化,请看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) begin
    if(pause) pause_state <= ~pause_state; // 切换暂停状态
end

always @(posedge clk) begin
    if(!pause_state) begin  // 非暂停状态
        // 秒个位计数
        if(sec_unit == 4'd9) begin
            sec_unit <= 0;
            // 秒十位计数
            if(sec_ten == 4'd5) begin
                sec_ten <= 0;
                // 分钟个位计数
                if(min_unit == 4'd9) begin
                    min_unit <= 0;
                    // 分钟十位计数
                    if(min_ten == 4'd5) begin
                        min_ten <= 0;
                    end else begin
                        min_ten <= min_ten + 1;
                    end
                end else begin
                    min_unit <= min_unit + 1;
                end
            end else begin
                sec_ten <= sec_ten + 1;
            end
        end else begin
            sec_unit <= sec_unit + 1;
        end
    end
end

endmodule

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) begin
    key_reg <= key_in;    // 同步输入
    
    if(key_reg != key_out) begin       // 状态变化
        counter <= 20'd0;
    end else if(counter < 20'd1_000_000) begin
        counter <= counter + 1;
    end else begin
        key_out <= key_reg;           // 稳定后更新输出
    end
end

endmodule

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, // 0
    7'b1111001, // 1
    7'b0100100, // 2
    7'b0110000, // 3
    7'b0011001, // 4
    7'b0010010, // 5
    7'b0000010, // 6
    7'b1111000, // 7
    7'b0000000, // 8
    7'b0010000  // 9
};

always @(posedge clk) begin
    scan_cnt <= scan_cnt + 1;
    case(scan_cnt)
        2'b00: begin
            digit_en <= 4'b1110;  // 最低位
            data_temp <= sec_unit;
        end
        2'b01: begin
            digit_en <= 4'b1101;
            data_temp <= sec_ten;
        end
        2'b10: begin
            digit_en <= 4'b1011;
            data_temp <= min_unit;
        end
        2'b11: begin
            digit_en <= 4'b0111;  // 最高位
            data_temp <= min_ten;
        end
    endcase
    
    seg_data <= SEG_BCD[data_temp]; // 查表输出
end

endmodule

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) begin
    if(cnt_1hz == 26'd49_999_999) begin
        cnt_1hz <= 0;
        clk_1hz <= ~clk_1hz;
    end else begin
        cnt_1hz <= cnt_1hz + 1;
    end
end

// 1kHz分频计数器 (50,000分频)
reg [15:0] cnt_1k;
always @(posedge clk_50m) begin
    if(cnt_1k == 16'd49_999) begin
        cnt_1k <= 0;
        clk_1k <= ~clk_1k;
    end else begin
        cnt_1k <= cnt_1k + 1;
    end
end

endmodule

二、效果展示

计数器

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

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

相关文章

MoE Align Sort在医院AI医疗领域的前景分析(代码版)

MoE Align & Sort技术通过优化混合专家模型(MoE)的路由与计算流程,在医疗数据处理、模型推理效率及多模态任务协同中展现出显著优势,其技术价值与应用意义从以下三方面展开分析: 一、方向分析 1、提升医疗数据处理效率 在医疗场景中,多模态数据(如医学影像、文本…

【已解决】Webstorm 每次使用 git pull/push 都要输入令牌/密码登录

解决办法&#xff1a;勾上【使用凭据帮助程序】&#xff08;英文&#xff1a;Use credential helper&#xff09;

软路由安装指南

1.openwrt下载 : 选择合适的安装包,我用的软路由CPU主板是j3160,属于X86_64架构,所以筛选的时候使用X86_64的安装镜像 openwrt的官方地址可能国内打不开,需要科学上网 openwrt安装镜像下载地址 我准备用U盘引导小主机开机,进而安装openwrt操作系统,所以下载 .img.gz 文…

3500 阶乘求和

3500 阶乘求和 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;2023、思维、省赛 &#x1f4d6; &#x1f4da; import java.util.Scanner;public class Main {public static void main(String[] args) {long sum 0;for(int i1;i<50;i) { // 之后取模都相等su…

软件工程(应试版)图形工具总结(二)

遇到的问题&#xff0c;都有解决方案&#xff0c;希望我的博客能为你提供一点帮助。 教材参考《软件工程导论&#xff08;第六版&#xff09;》 七、 层次图&#xff08;H图&#xff09;与HIPO图 1、概述 1.1、层次图&#xff08;Hierarchy Chart / H图&#xff09; ​核心…

思维链、思维树、思维图与思维森林在医疗AI编程中的应用蓝图

在医疗AI编程中,思维链(Chain of Thought, CoT)、思维树(Tree of Thoughts, ToT)、思维图(可能指知识图谱或逻辑图)以及思维森林(Forest-of-Thought, FoT)等技术框架通过模拟人类认知和推理过程,显著提升了AI在复杂医疗场景中的决策能力和可解释性: 1. 思维链(CoT)…

1.Qt信号与槽

本篇主要介绍信号和槽&#xff0c;如何关联信号和槽以及用QPixmap在窗口中自适应显示图片 本文部分ppt、视频截图原链接&#xff1a;[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频] 1. 信号 一般不需要主动发送信号&#xff0c;只有自定义的一些控件才需要做信号的…

MySQL 基础入门

写在前面 关于MySQL的下载安装和其图形化软件Navicat的下载安装,网上已经有了很多的教程,这里就不再赘述了,本文主要是介绍了关于MySQL数据库的基础知识。 MySQL数据库 MySQL数据库基础 MySQL数据库概念 MySQL 数据库&#xff1a; 是一个关系型数据库管理系统 。 支持SQL语…

数据分析与知识发现 论文阅读【信息抽取】

文章目录 基于知识蒸馏的半监督古籍实体抽取数据集模型实验结果 基于大语言模型的专利命名实体识别方法研究数据集评估公式实验 基于数据增强和多任务学习的突发公共卫生事件谣言识别研究数据集实验结果 参考 基于知识蒸馏的半监督古籍实体抽取 数据集 本文在有监督数据集的基…

Compose组件转换XML布局

文章目录 学习JetPack Compose资源前言&#xff1a;预览界面的实现Compose组件的布局管理一、Row和Colum组件&#xff08;LinearLayout&#xff09;LinearLayout&#xff08;垂直方向 → Column&#xff09;LinearLayout&#xff08;水平方向 → Row&#xff09; 二、相对布局 …

Linux开发工具——vim

&#x1f4dd;前言&#xff1a; 上篇文章我们讲了Linux开发工具——apt&#xff0c;这篇文章我们来讲讲Linux开发工具——vim &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&a…

Vue3学习二

认识组件的嵌套 还可以将Main中内容再划分 scoped防止组件与组件之间的样式相互污染 组件的通信 父子组件之间通信的方式 父组件传递给子组件 给传过来的内容做限制 type为传的内容的属性类型&#xff0c;required为true表示该内容是必须传的&#xff0c;default为&#xff0c…

[ deepseek 指令篇章 ]300个领域和赛道喂饭级deepseek指令

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

2024第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

记录刷题的过程、感悟、题解。 希望能帮到&#xff0c;那些与我一同前行的&#xff0c;来自远方的朋友&#x1f609; 大纲&#xff1a; 1、握手问题-&#xff08;解析&#xff09;-简单组合问题&#xff08;别人叫她 鸽巢定理&#xff09;&#x1f607;&#xff0c;感觉叫高级了…

C++ | C++11知识点

前言&#xff1a; 本篇内容讲述了C11中比较重要的内容为&#xff1a;右值引用、可变参数模板、lambda表达式和包装器。 ps&#xff1a;包装器博主在另一篇文章讲述的&#xff0c;本篇文章包装器板块为原文链接。 C11知识点目录 花括号初始化自定义类型的花括号初始化内…

LeetCode 1123.最深叶节点的最近公共祖先 题解

昨天写了三题&#xff0c;今天目前为止写了一题&#xff0c;玩了会游戏稍微休息了下 先来理解一下今天的题目&#xff0c;今天的题目类型是递归遍历找最深位置&#xff0c;先通过几个样例了解一下 输入&#xff1a;root [3,5,1,6,2,0,8,null,null,7,4] 输出&#xff1a;[2,7,…

工具介绍 | SafeLLMDeploy教程来了 保护本地LLM安全部署

SafeLLMDeploy&#xff1a;保护本地大语言模型安全部署的“守护者” 在AI技术飞速发展的今天&#xff0c;大语言模型&#xff08;LLM&#xff09;如GPT、DeepSeek等正以前所未有的方式改变着我们的工作和生活。然而&#xff0c;本地部署这些强大的AI系统在带来便利的同时&…

机器学习-04-分类算法-03KNN算法案例

实验名称 K近邻算法实现葡萄酒分类 实验目的 通过未知品种的拥有13种成分的葡萄酒&#xff0c;应用KNN分类算法&#xff0c;完成葡萄酒分类&#xff1b; 熟悉K近邻算法应用的一般过程&#xff1b; 通过合理选择K值从而提高分类得到正确率&#xff1b; 实验背景 本例实验…

Java 搭建 MC 1.18.2 Forge 开发环境

推荐使用 IDEA 插件 Minecraft Development 进行创建项目 创建完成后即可进行 MOD 开发。 但是关于 1.18.2 的开发教程太少&#xff0c;因此自己研究了一套写法&#xff0c;写法并非是最优的但是是探索开发MOD中的一次笔记和记录 GITHUB: https://github.com/zimoyin/zhenfa…

计算机网络知识点汇总与复习——(三)数据链路层

Preface 计算机网络是考研408基础综合中的一门课程&#xff0c;它的重要性不言而喻。然而&#xff0c;计算机网络的知识体系庞大且复杂&#xff0c;各类概念、协议和技术相互关联&#xff0c;让人在学习时容易迷失方向。在进行复习时&#xff0c;面对庞杂的的知识点&#xff0c…