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

河南省教育类网站前置审批网站推广的目的是什么

河南省教育类网站前置审批,网站推广的目的是什么,自己的网站怎么做跳转,制作app开发制作目录 一、项目需求分析 二、硬件平台介绍 消抖方法 三、核心代码解释 3.1.在vscode中按照以下框架创建文件夹并书写代码: 3.2.顶层设计: 3.3.模块交互: 3.4.各模块代码: 顶层模块top: 时钟分频模块clk_divid…

目录

一、项目需求分析

二、硬件平台介绍 

消抖方法

三、核心代码解释

3.1.在vscode中按照以下框架创建文件夹并书写代码:

3.2.顶层设计:

3.3.模块交互:

3.4.各模块代码:

顶层模块top:

时钟分频模块clk_divider

按键模块 key_debounce

边沿检测模块edge_detect

计数器模块min_sec_counter

三、操作及步骤设计步骤:

四、结果展示:

五、总结


引言:

一、项目需求分析

我们要实现的分秒计数器需要具备以下功能:

  • 基本计时功能:显示 00:00 到 59:59 的分秒计时
  • 暂停控制:通过按键实现计时的启动与暂停
  • 按键消抖:处理机械按键的抖动问题,确保输入稳定
  • 显示输出:通过开发板的七段数码管显示计时结果

二、硬件平台介绍 

  • 硬件平台介绍
  • DE2-115 开发板是 Altera(现 Intel)推出的一款高性能 FPGA 开发平台,其核心为 Cyclone IV EP4CE115F29C7N FPGA 芯片,板载资源丰富,包括:

  • 10 个独立按键(KEY0-KEY9)
  • 8 个七段数码管(HEX0-HEX7)
  • 50MHz 系统时钟

 按键消抖原理与实现

在设计计数器之前,我们需要先解决按键消抖问题。机械按键在按下和释放时会产生电信号抖动,持续时间通常为 5-20ms,如果不处理会导致一次按键被误识别为多次输入。

消抖方法

常用的按键消抖方法有:

  • 硬件消抖:通过 RC 滤波电路或专用消抖芯片实现
  • 软件消抖:通过 FPGA 内部逻辑延时判断实现

本项目采用软件消抖方案,其原理是:当检测到按键状态变化时,启动一个计数器,当计数器计满规定时间(如 20ms)后再次检测按键状态,如果状态与初始检测一致,则认为是有效按键。

三、核心代码解释

3.1.在vscode中按照以下框架创建文件夹并书写代码:

3.2.顶层设计:

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

3.3.模块交互:

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

3.4.各模块代码:

顶层模块top:
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消抖)
key_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
时钟分频模块clk_divider

上次实验提到过: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
按键模块 key_debounce

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

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
边沿检测模块edge_detect
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
计数器模块min_sec_counter
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

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

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

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

三、操作及步骤设计步骤:

1.在vscode中按照以下框架创建文件夹并书写代码:

创建项目,选择芯片:

EP4CE115F29C7

由于有多个文件,需要把top文件设置为顶层文件:

引脚配置:

四、结果展示:

视频演示:

FPGA分秒计时器

五、总结

学习了分模块设计,实现了分秒计数器,FPGA渐入佳境。如文章有不妥之处,还望各位海涵。

参考文献:

[FGPA基础学习]分秒计数器的制作-CSDN博客

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

相关文章:

  • h5个人网站模板seo承诺排名的公司
  • 网站浏览路径怎么做搜索大全引擎入口
  • 郑州富士康官网seo网页推广
  • html指什么推广关键词优化
  • 为什么一个人做网站有难度优化网站关键词的技巧
  • 免费申请企业网站网站搜索引擎优化方法
  • 动态网站加速器百度大搜数据多少钱一条
  • 网站建设公司取名推广软件平台
  • 昌平区住房和建设委员会官方网站app推广项目从哪接一手
  • 云购网站做的起来吗初学seo网站推广需要怎么做
  • 江都区城乡建设局网站如何制作网页最简单的方法
  • 网站多大需要服务器软文代写接单平台
  • 医院网站建设价格安卓aso优化工具
  • 余杭门户网站网站设计的基本原则
  • 如何做网站刷题安全又舒适的避孕方法有哪些
  • 南澳网站建设怎么创建网页链接
  • 建立一个网站怎么做百度新闻发布
  • 什么可以用手机做网站运营推广怎么做
  • 欢迎访问中国建设银行网站个人客户微信朋友圈广告投放代理
  • 建视频网站的费用国际新闻最新消息
  • 代做效果图网站免费拓客软件哪个好用
  • 企业网站建设需了解什么网络营销的10个特点
  • 商业网站建设常识厦门seo搜索引擎优化
  • 白云区网络推广重庆seo技术博客
  • 网站建设的基本要素求职seo
  • 百度做网站推广多少钱品牌推广策划书范文案例
  • 广东省高水平建设专业网站品牌推广策划方案
  • 可以做长图的网站站长推广工具
  • 怎么给网站做推广seo网站关键词排名提升
  • 免费网站最新域名百度推广一年多少钱