当前位置: 首页 > news >正文

商城网站建设公司排行在线代理网页浏览

商城网站建设公司排行,在线代理网页浏览,学校教育网站模板,网易企业邮箱官网入口在DE2-115板子上用 Verilog编程实现一个 分秒计数器,并具备按键暂停、按键消抖功能 功能描述 1.分秒计数器功能 计数器需要显示分钟和秒。每秒钟秒计数器递增一次。每60秒分钟计数器递增一次。分钟和秒的计数范围分别为0到59。 实现思路 使用一个1Hz的时钟信号…

在DE2-115板子上用 Verilog编程实现一个 分秒计数器,并具备按键暂停、按键消抖功能

功能描述

1.分秒计数器功能
  • 计数器需要显示分钟和秒。
  • 每秒钟秒计数器递增一次。
  • 每60秒分钟计数器递增一次。
  • 分钟和秒的计数范围分别为0到59。
实现思路
  • 使用一个1Hz的时钟信号来驱动计数器。
  • 每次1Hz时钟信号上升沿到来时,秒计数器递增。
  • 当秒计数器达到59时,清零秒计数器,并递增分钟计数器。
  • 当分钟计数器达到59时,清零分钟计数器。
2.按键暂停功能
  • 使用一个按键来控制计数器的启动和暂停。
  • 按键按下时,计数器暂停;再次按下时,计数器继续运行。
实现思路
  • 使用一个寄存器来记录计数器的状态(运行或暂停)。
  • 每次按键信号上升沿到来时,切换计数器的状态。
3.按键消抖功能
  • 按键信号通常带有噪声,需要通过消抖模块来稳定按键信号。
实现思路
  • 使用一个计数器来检测按键信号的稳定性。
  • 如果按键信号在一段时间内保持不变,则认为按键信号稳定。
  • 这段时间称为消抖时间,通常设置为20ms左右。
4.七段显示功能
  • 使用七段显示器显示分钟和秒的值。
实现思路
  • 将分钟和秒的值分别转换为四位二进制数。
  • 使用七段显示器的驱动模块将四位二进制数转换为七段显示器的控制信号。

模块划分

1.顶层模块(TopModule.v)
  • 负责连接各个子模块,实现整体功能。
  • 接收输入时钟、复位信号和按键信号,输出七段显示器的控制信号。

module TopModule (input  wire clk,              // 输入时钟信号input  wire rst_n,            // 复位信号(低电平有效)input  wire button,           // 按键信号output wire [6:0] segment1,   // 第一个七段显示器output wire [6:0] segment2,   // 第二个七段显示器output wire [6:0] segment3,   // 第三个七段显示器output wire [6:0] segment4    // 第四个七段显示器
);wire clk_1Hz;                 // 分频后的1Hz时钟信号wire button_debounced;        // 消抖后的按键信号reg [5:0] minutes;            // 分钟计数reg [5:0] seconds;            // 秒计数// 分频模块ClockDivider u_ClockDivider (.clk_in(clk),.rst_n(rst_n),.clk_out(clk_1Hz));// 按键消抖模块Debouncer u_Debouncer (.clk(clk),.rst_n(rst_n),.button_in(button),.button_out(button_debounced));// 计数器模块Counter u_Counter (.clk(clk_1Hz),.rst_n(rst_n),.pause(button_debounced),.minutes(minutes),.seconds(seconds));// 七段显示模块SevenSegmentDisplay u_Segment1 (.digit(minutes[3:0]),.segment(segment1));SevenSegmentDisplay u_Segment2 (.digit(minutes[5:4]),.segment(segment2));SevenSegmentDisplay u_Segment3 (.digit(seconds[3:0]),.segment(segment3));SevenSegmentDisplay u
2.分频模块(ClockDivider.v)
  • 将输入的50MHz时钟分频为1Hz时钟。
  • 提供秒计数器所需的时钟信号。
module ClockDivider #(parameter DIVIDE = 50_000_000  // 分频系数
)(input  wire clk_in,           // 输入时钟信号input  wire rst_n,            // 复位信号(低电平有效)output reg  clk_out           // 输出分频后的时钟信号
);reg [31:0] counter;           // 计数器,用于分频always @(posedge clk_in or negedge rst_n) beginif (!rst_n) begincounter <= 0;clk_out <= 0;endelse if (counter == DIVIDE - 1) begincounter <= 0;clk_out <= ~clk_out;  // 切换输出时钟状态endelse begincounter <= counter + 1;endend
endmodule
3.按键消抖模块(Debouncer.v)
  • 消除按键信号的抖动。
  • 提供稳定的按键信号给暂停控制逻辑。
module Debouncer #(parameter DEBOUNCE_TIME = 20'd10000  // 消抖时间(20ms)
)(input  wire clk,                   // 输入时钟信号input  wire rst_n,                 // 复位信号(低电平有效)input  wire button_in,             // 输入按键信号output reg  button_out             // 输出稳定的按键信号
);reg [19:0] debounce_counter;       // 消抖计数器reg button_sync;                   // 同步寄存器always @(posedge clk or negedge rst_n) beginif (!rst_n) begindebounce_counter <= 0;button_sync <= 0;button_out <= 0;endelse beginbutton_sync <= button_in;  // 同步按键信号if (button_sync == button_out) begindebounce_counter <= 0;  // 如果信号稳定,计数器清零endelse if (debounce_counter < DEBOUNCE_TIME) begindebounce_counter <= debounce_counter + 1;  // 计数器递增endelse beginbutton_out <= button_sync;  // 更新稳定的按键信号debounce_counter <= 0;endendend
endmodule
4.计数器模块
  • 实现分秒计数逻辑。
  • 根据1Hz时钟信号递增秒计数器和分钟计数器。
  • 根据按键信号控制计数器的运行和暂停。
module Counter #(parameter MAX_MINUTES = 60  // 最大分钟数
)(input  wire clk,            // 输入时钟信号input  wire rst_n,          // 复位信号(低电平有效)input  wire pause,          // 暂停信号output reg [5:0] minutes,   // 分钟计数output reg [5:0] seconds    // 秒计数
);reg [5:0] second_counter;   // 秒计数器always @(posedge clk or negedge rst_n) beginif (!rst_n) beginminutes <= 0;seconds <= 0;second_counter <= 0;endelse if (!pause) beginif (second_counter == 59) beginsecond_counter <= 0;seconds <= seconds + 1;if (seconds == 59) beginseconds <= 0;minutes <= minutes + 1;if (minutes == MAX_MINUTES - 1) beginminutes <= 0;endendendelse beginsecond_counter <= second_counter + 1;endendend
endmodule
5.七段显示模块(SevenSegmentDisplay.v)
  • 将分钟和秒的值转换为七段显示器的控制信号。
  • 显示分钟和秒的值。
module SevenSegmentDisplay #(parameter SEGMENT_COUNT = 4  // 显示段数
)(input  wire [3:0] digit,     // 输入数字output reg [6:0] segment     // 七段显示信号
);always @(*) begincase (digit)4'd0: segment = 7'b1000000;  // 04'd1: segment = 7'b1111001;  // 14'd2: segment = 7'b0100100;  // 24'd3: segment = 7'b0110000;  // 34'd4: segment = 7'b0011001;  // 44'd5: segment = 7'b0010010;  // 54'd6: segment = 7'b0000010;  // 64'd7: segment = 7'b1111000;  // 74'd8: segment = 7'b0000000;  // 84'd9: segment = 7'b0010000;  // 9default: segment = 7'b1111111;  // 空白endcaseend
endmodule

实验结果

视频在后续帖子中发布

心得

再次学习了verilog的编写方法,学习了如何使用vscode编写verilog并且编译运行。对de2-115开发板更加熟悉了,学习到了更多有关于它的知识。

http://www.dtcms.com/a/536506.html

相关文章:

  • 【Linux】多线程同步与互斥机制详解:从互斥锁到条件变量与信号量
  • iOS混淆实战用多工具组合把IPA加固做成可复用的工程能力(iOS混淆 IPA加固 无源码混淆
  • RTPENGINE ISSUE 1818(silent-timeout有关)
  • LeetCode:231. 2 的幂/136. 只出现一次的数字
  • Flutter fedaora42 64位安装 避坑指南
  • Docker自动化部署与配置详解③
  • istio业务返回503问题
  • 建设服装网站的意义国内免费空间可以做什么网站
  • 餐饮商城网站制作多少钱动漫设计一年学费多少
  • Web 前端工具全流程指南 从开发到调试的完整生态体系
  • 清理谷歌浏览器垃圾文件 Chrome “User Data”
  • 科技创新的重要前沿是新网站前期seo怎么做
  • [论文笔记•(多智能体)]LLMs Can Simulate Standardized Patients via Agent Coevolution
  • CAS:2055198-03-1,PC-Biotin-PEG4-NHS carbonate在分子标记与生物分析中的应用潜力
  • 人工智能时代医疗大健康微服务编程:架构与实践(代码部分)
  • 【论文阅读】AAAI 2025 | 面向精确分割式联邦学习的多模型聚合与知识重放
  • 网站建设对工厂意义外贸网站建设智能建站
  • 小企业网站建设公司哪家好深圳做网站服务
  • 《地理信息系统》第四章空间数据结构学习笔记
  • docker网络代理
  • 域名买了之后如何建设网站公司形象墙
  • RabbitMQ延迟队列详解
  • Vue 项目集成声网SDK
  • 云南网站设计多少钱零件加工网上接订单
  • 【裸眼3D原理浅析】使用AI生成平面裸眼3D图像——“科幻战士破框而出”的裸眼3D图背后的原理与技巧
  • 最新的软件测试学习内容以及途径(2025年)
  • 抓包工具:proxyman的使用方法
  • Python爬虫实战:上证 100指数数据爬取、存储、分析与可视化研究
  • 司法局网站开发方案做网站服务器怎么用
  • 景区网站策划书互联网投诉中心官网入口