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

做细分行业信息网站搜狗输入法下载安装

做细分行业信息网站,搜狗输入法下载安装,烟台做网站公司,网站定制套餐分秒计数器设计 ​ 本次实验内容为:DE2-115板子上用 Verilog编程实现一个 分秒计数器,并具备按键暂停、按键消抖功能 一、系统架构设计 顶层模块划分 顶层模块(top) ├── 按键消抖模块(key_debounce) ├…

分秒计数器设计

​ 本次实验内容为:DE2-115板子上用 Verilog编程实现一个 分秒计数器,并具备按键暂停、按键消抖功能

一、系统架构设计

  1. 顶层模块划分

    顶层模块(top)
    ├── 按键消抖模块(key_debounce)
    ├── 边沿检测模块(edge_detect)
    ├── 时钟分频模块(clk_divider)
    ├── 分秒计数器(min_sec_counter)
    └── 七段译码器(seg7_decoder)
    
  2. 模块交互逻辑

    CLK(50MHz) → 分频 → 1Hz时钟 → 计时模块
    KEY → 消抖模块 → 暂停控制 → 计时模块
    计时输出 → 数码管显示模块 → 物理数码管
    

二、核心模块实现

顶层模块

module top(input CLOCK_50,         // 50MHz时钟(PIN_Y2)input KEY0,             // 复位input KEY1,             // 暂停output [0:6] HEX7, HEX6,// 分十位、分个位output [0:6] HEX5, HEX4 // 秒十位、秒个位
);wire clk_1hz;               // 1Hz时钟信号
wire key_stable;            // 消抖后按键信号
wire pause_trigger;         // 边沿检测信号
reg pause_state = 1'b0;     // 暂停状态寄存器wire [3:0] min_tens, min_ones;
wire [3:0] sec_tens, sec_ones;// 按键消抖模块(20ms消抖)
debounce #(.DEBOUNCE_MS(20)) debounce_inst(.clk(CLOCK_50),.button_in(~KEY1),.button_out(key_stable)
);// 边沿检测模块
edge_detect edge_inst(.clk(CLOCK_50),.signal_in(key_stable),.edge_out(pause_trigger)
);// 时钟分频模块
clk_divider clk_div_inst(.clk(CLOCK_50),.reset(~KEY0),.pause(pause_state),.clk_out(clk_1hz)
);// 分秒计数器
min_sec_counter counter(.clk(clk_1hz),.reset(~KEY0),.min_tens(min_tens),.min_ones(min_ones),.sec_tens(sec_tens),.sec_ones(sec_ones)
);// 显示译码模块
seg7_decoder hex7(.bcd(min_tens), .seg(HEX7));
seg7_decoder hex6(.bcd(min_ones), .seg(HEX6));
seg7_decoder hex5(.bcd(sec_tens), .seg(HEX5));
seg7_decoder hex4(.bcd(sec_ones), .seg(HEX4));// 暂停状态机
always @(posedge CLOCK_50 or posedge ~KEY0) beginif (~KEY0) pause_state <= 1'b0;else if (pause_trigger) pause_state <= ~pause_state;
endendmodule

时钟分频模块

上次实验提到过:DE2-115开发板配备了一个固定的时钟源。该开发板内置了一个50MHz的晶振,因此对于50MHz的时钟频率,时钟周期为20ns。

module clk_divider(input clk,input reset,input pause,output reg clk_out
);parameter DIV_FACTOR = 26'd49_999_999; // 50MHz→1Hzreg [25:0] cnt;always @(posedge clk or posedge reset) beginif (reset) begincnt <= 0;clk_out <= 0;end else if (!pause) begincnt <= (cnt == DIV_FACTOR) ? 0 : cnt + 1;if (cnt == DIV_FACTOR) clk_out <= ~clk_out;endend
endmodule

按键模块

我选择KEY0做为复位按钮,KEY1作为控制分秒计数器的暂停按钮

image-20250329134212143

DE2-115 提供了四个按钮开关,每个按钮开关都通过一个施 密特触发器进行了去抖动处理。四个施密特触发器的输出信 号,分别为KEY0、KEY1、KEY2、KEY3,直接连接到了Cyclone IV E FPGA。当按钮没有 被按下的时候,它的输出是高电平,按下去则给出一个低电平

module key_debounce #(parameter DEBOUNCE_MS = 20  // 可配置消抖时间
)(input clk,input button_in,output reg button_out
);localparam MAX_COUNT = 50_000_000 * DEBOUNCE_MS / 1000;reg [23:0] cnt;always @(posedge clk) beginif (button_in != button_out) begincnt <= (cnt == MAX_COUNT-1) ? 0 : cnt + 1;if (cnt == MAX_COUNT-1) button_out <= button_in;end else begincnt <= 0;endend
endmodule

边沿检测模块

module edge_detect(input clk,input signal_in,output reg edge_out
);reg signal_delay;always @(posedge clk) beginsignal_delay <= signal_in;edge_out <= signal_in & ~signal_delay; // 上升沿检测end
endmodule

计数器模块

module min_sec_counter(input clk,input reset,output reg [3:0] min_tens,output reg [3:0] min_ones,output reg [3:0] sec_tens,output reg [3:0] sec_ones
);// 秒计数器always @(posedge clk or posedge reset) beginif (reset) beginsec_ones <= 4'd0;sec_tens <= 4'd0;end else beginif (sec_ones == 4'd9) beginsec_ones <= 4'd0;sec_tens <= (sec_tens == 4'd5) ? 4'd0 : sec_tens + 1;end else beginsec_ones <= sec_ones + 1;endendend// 分钟计数器always @(posedge clk or posedge reset) beginif (reset) beginmin_ones <= 4'd0;min_tens <= 4'd0;end else if (sec_tens == 4'd5 && sec_ones == 4'd9) beginif (min_ones == 4'd9) beginmin_ones <= 4'd0;min_tens <= (min_tens == 4'd5) ? 4'd0 : min_tens + 1;end else beginmin_ones <= min_ones + 1;endendend
endmodule

数码管模块

之前提及到过,可以利用38译码器点亮7段数码管(其实只需要7段译码器即可),但是我们的输入情况有9种,所以七段译码器需要将4位BCD码转换为对应的段码;也说过数码管的点亮逻辑:FPGA输出低电压的时候,对应的字码段点亮,反之则熄灭

进行分秒展示,一共要用到4个数码管,为了更直观展示我选择:HEX7,HEX6作为分钟位,HEX5,HEX4做为秒位

0975fa79589a081e119c2f0ae599e6cb

image-20250226192140414

数码管显示数字需要亮起来的小段对应的7位二进制数
0HEX[0]~[5]0000001
1HEX[1]~[2]1001111
2HEX[0],[1],[3],[4],[6]0010010
3HEX[0],[1],[2],[3],[6]0000110
4HEX[1].[2].[5],[6]1001100
5HEX[0],[2],[3],[5],[6]0100100
6HEX[0],[2],[3],[4],[5],[6]0100000
7HEX[1]~[3]0001111
8HEX[0]~[6]0000000
9HEX[0],[1],[2],[3],[5],[6]0001000
module seg7_decoder(input [3:0] bcd,output reg [6:0] seg
);always @(*) begincase(bcd)4'd0 : seg = 7'b0000_001; // 04'd1 : seg = 7'b1001_111; // 14'd2 : seg = 7'b0010_010; // 24'd3 : seg = 7'b0000_110; // 34'd4 : seg = 7'b1001_100; // 44'd5 : seg = 7'b0100_100; // 54'd6 : seg = 7'b0100_000; // 64'd7 : seg = 7'b0001_111; // 74'd8 : seg = 7'b0000_000; // 84'd9 : seg = 7'b0001_000; // 9default: seg = 7'b1111_111; // 灭endcaseend
endmodule

HEX4~7对应的引脚图如下:

image-20250327223409538

image-20250327223431710

引脚配置:

image-20250329134741620

image-20250329134810139

实现效果

• 上电后数码管显示00:00并开始计时
• 按下KEY[1]后立即暂停,再次按下恢复
• 复位键KEY[0]可清零计数器


总结:按键边沿检测模块使用双寄存器级联技术捕获有效按键信号,配合FSM状态机实现暂停/恢复功能切换

http://www.dtcms.com/wzjs/165311.html

相关文章:

  • 上海学做网站怎么进行推广
  • 没有相应营业执照怎么做网站免费发外链平台
  • 淘宝刷网站建设seo入门教程
  • 南宁网站建设优化合理使用说明
  • 关于我们做网站网络营销的作用
  • 廊坊企业建站广州seo运营
  • 团购网站模板下载国内搜索引擎大全
  • 江阴网站推广百度关键词搜索次数
  • 网页设计尺寸厘米seo基础视频教程
  • 2018新网站做外链品牌网站设计
  • 南宁建设网站制作百度推广助手app
  • 做网站用什么系统较好app拉新接单平台
  • 酒店网站开发合同范本推广app的方法和策略
  • 网站 建设 维护 公司常州seo收费
  • 香港做网站公司有哪些百度竞价价格查询
  • 武汉百度做网站宜昌今日头条新闻
  • 如何做体育彩票网站成品短视频app下载有哪些
  • 做网站推广托管费用网络营销名词解释答案
  • 网站首页模块如何做链接临沂百度推广多少钱
  • 做带后台的网站网络营销策划方案的目的
  • 杭州企业做网站福建优化seo
  • net网站同时支持 生成静态文件和伪静态谷歌浏览器下载app
  • 论文代做网站关键词优化方法
  • 以网站名为后缀的邮箱怎么做长沙百度百科
  • 网站建设新得体会培训心得总结
  • 中铁建设集团有限公司怎么样百度搜索排名优化哪家好
  • 网站优化分析太原优化排名推广
  • 遂宁网站建设哪家好宁波网站建设方案推广
  • 河北邢台沙河疫情最新消息百度刷排名seo软件
  • 网站框架代码百度指数网址是多少