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

定制网站开发平台简易动漫网站模板

定制网站开发平台,简易动漫网站模板,徐州专业制作网站,建网站添加付款方式【FPGA实战】基于DE2-115实现数字秒表 一、项目概述二、层次化设计架构三、核心模块实现原理1. 时钟分频模块(clock_divider.v)2. 按键处理模块2.1 消抖(debounce .v)2.2 边沿检测(edge_detector .v) 3. 时间计数模块(time_counter .v)4. 显示驱动模块(seven_seg_display.v)5.顶…

【FPGA实战】基于DE2-115实现数字秒表

  • 一、项目概述
  • 二、层次化设计架构
  • 三、核心模块实现原理
      • 1. 时钟分频模块(clock_divider.v)
      • 2. 按键处理模块
        • 2.1 消抖(debounce .v)
        • 2.2 边沿检测(edge_detector .v)
      • 3. 时间计数模块(time_counter .v)
      • 4. 显示驱动模块(seven_seg_display.v)
      • 5.顶层模块(minute_second_counter_top.v)
  • 三、引脚配置
  • 四、实验效果
  • 五、总结与扩展

一、项目概述

本设计实现了一个基于FPGA的数字秒表系统,主要功能包括:

  • 精确到秒的计时功能(最大59:59)
  • 按键控制启动/暂停(切换模式)
  • 四位数码管显示(带分钟小数点)
  • 50MHz时钟分频处理
  • 按键消抖处理

二、层次化设计架构

采用自顶向下的设计方法,分为五个核心模块:

  1. 顶层模块:minute_second_counter_top
  2. 时钟分频模块:clock_divider
  3. 按键处理模块:debounce + edge_detector
  4. 时间计数模块:time_counter
  5. 显示驱动模块:seven_seg_display

三、核心模块实现原理

1. 时钟分频模块(clock_divider.v)

我们需要的是一个能够计数到60s然后进位1min的分秒计数器,所以秒计数器是0-59,分计数器也是0-59。
那么要实现这个分秒计数器的话,我们需要分频将系统时钟分频成1Hz的信号,作为计数器的基准时钟。
其次就是需要一个计数器控制模块,当秒计数器在使能信号有效时,每个时钟周期+1,达到59时归零,分计数器+1。当暂停按键被按下时使能信号被关闭,计数器停止。

module clock_divider (input clk,input reset_n,output reg one_sec_enable
);reg [25:0] counter;always @(posedge clk or negedge reset_n) beginif (!reset_n) begincounter <= 0;one_sec_enable <= 0;end else beginif (counter == 26'd49_999_999) begincounter <= 0;one_sec_enable <= 1;end else begincounter <= counter + 1;one_sec_enable <= 0;endend
endendmodule

2. 按键处理模块

由于按键按下时,信号会抖动,所欲我们需要在检测到按键变化后再延迟一段时间,再次进行检测以判断按键状态是否稳定。当然,这个延迟时间不要太长大概20ms。
如果稳定,则输出有效的按键信号,我们可以用计数器来实现案件后延时时间的计数。

2.1 消抖(debounce .v)
module debounce (input clk,input reset_n,input key_in,output reg key_out
);reg [19:0] counter;
reg key_in_sync;always @(posedge clk or negedge reset_n) beginif (!reset_n) beginkey_in_sync <= 1;counter <= 0;key_out <= 1;end else beginkey_in_sync <= key_in;if (key_in_sync != key_out) beginif (counter == 20'd999_999) beginkey_out <= key_in_sync;counter <= 0;end else begincounter <= counter + 1;endend else begincounter <= 0;endend
endendmodule
2.2 边沿检测(edge_detector .v)
module edge_detector (input clk,input reset_n,input signal_in,output rising_edge
);reg signal_delay;always @(posedge clk or negedge reset_n) beginif (!reset_n) beginsignal_delay <= 1'b0;end else beginsignal_delay <= signal_in;end
endassign rising_edge = signal_in & ~signal_delay;endmodule

检测按键释放的上升沿
确保每次按键只触发一次动作

3. 时间计数模块(time_counter .v)

采用四级BCD计数器级联:

module time_counter (input clk,input reset_n,input one_sec_enable,input start_pause_rise,output reg [3:0] min_tens,output reg [3:0] min_ones,output reg [3:0] sec_tens,output reg [3:0] sec_ones
);reg pause_state;always @(posedge clk or negedge reset_n) beginif (!reset_n) beginpause_state <= 1'b0;{sec_ones, sec_tens, min_ones, min_tens} <= 16'd0;end else begin// 暂停状态切换if (start_pause_rise) beginpause_state <= ~pause_state;end// 时间计数if (!pause_state && one_sec_enable) beginif (sec_ones == 9) beginsec_ones <= 0;if (sec_tens == 5) beginsec_tens <= 0;if (min_ones == 9) beginmin_ones <= 0;min_tens <= (min_tens == 5) ? 0 : min_tens + 1;end else beginmin_ones <= min_ones + 1;endend else beginsec_tens <= sec_tens + 1;endend else beginsec_ones <= sec_ones + 1;endendend
endendmodule

4. 显示驱动模块(seven_seg_display.v)

要将分秒计数器的值通过七段数码管显示,我们就要将计数值(二进制)转化16进制。

module seven_seg_display (input clk,input reset_n,input [3:0] min_tens,input [3:0] min_ones,input [3:0] sec_tens,input [3:0] sec_ones,output reg [7:0] hex3,output reg [7:0] hex2,output reg [7:0] hex1,output reg [7:0] hex0,output reg [3:0] dig
);reg [16:0] scan_counter;
reg [1:0] scan_sel;// 扫描计数器
always @(posedge clk or negedge reset_n) beginif (!reset_n) beginscan_counter <= 0;scan_sel <= 0;end else beginif (scan_counter == 17'd49_999) beginscan_counter <= 0;scan_sel <= scan_sel + 1;end else beginscan_counter <= scan_counter + 1;endend
end// 位选信号
always @(*) begincase (scan_sel)2'b00: dig = 4'b1110;2'b01: dig = 4'b1101;2'b10: dig = 4'b1011;2'b11: dig = 4'b0111;default: dig = 4'b1111;endcase
end// 七段译码
always @(posedge clk) begincase (scan_sel)2'b00: beginhex0 <= seg7(sec_ones, 1'b0);{hex3, hex2, hex1} <= {8'hFF, 8'hFF, 8'hFF};end2'b01: beginhex1 <= seg7(sec_tens, 1'b0);{hex3, hex2, hex0} <= {8'hFF, 8'hFF, 8'hFF};end2'b10: beginhex2 <= seg7(min_ones, 1'b1); // 分钟个位带小数点{hex3, hex1, hex0} <= {8'hFF, 8'hFF, 8'hFF};end2'b11: beginhex3 <= seg7(min_tens, 1'b0);{hex2, hex1, hex0} <= {8'hFF, 8'hFF, 8'hFF};endendcase
end// 七段译码函数
function [7:0] seg7;input [3:0] bcd;input dp;begincase (bcd)4'd0: seg7 = {dp, 7'b1000000};4'd1: seg7 = {dp, 7'b1111001};4'd2: seg7 = {dp, 7'b0100100};4'd3: seg7 = {dp, 7'b0110000};4'd4: seg7 = {dp, 7'b0011001};4'd5: seg7 = {dp, 7'b0010010};4'd6: seg7 = {dp, 7'b0000010};4'd7: seg7 = {dp, 7'b1111000};4'd8: seg7 = {dp, 7'b0000000};4'd9: seg7 = {dp, 7'b0010000};default: seg7 = 8'b11111111;endcaseend
endfunctionendmodule

5.顶层模块(minute_second_counter_top.v)

module minute_second_counter_top (input clk,           // 50MHz时钟input reset_n,       // 复位信号input start_pause,   // 启动/暂停按键output [7:0] hex3,   // 分钟十位output [7:0] hex2,   // 分钟个位(带小数点)output [7:0] hex1,   // 秒十位output [7:0] hex0,   // 秒个位output [3:0] dig     // 数码管位选
);// 内部信号定义
wire start_pause_debounced;
wire start_pause_rise;
wire one_sec_enable;
wire [3:0] min_tens, min_ones, sec_tens, sec_ones;// 模块实例化
clock_divider u_clock_divider (.clk(clk),.reset_n(reset_n),.one_sec_enable(one_sec_enable)
);debounce u_debounce (.clk(clk),.reset_n(reset_n),.key_in(start_pause),.key_out(start_pause_debounced)
);edge_detector u_edge_detector (.clk(clk),.reset_n(reset_n),.signal_in(start_pause_debounced),.rising_edge(start_pause_rise)
);time_counter u_time_counter (.clk(clk),.reset_n(reset_n),.one_sec_enable(one_sec_enable),.start_pause_rise(start_pause_rise),.min_tens(min_tens),.min_ones(min_ones),.sec_tens(sec_tens),.sec_ones(sec_ones)
);seven_seg_display u_seven_seg_display (.clk(clk),.reset_n(reset_n),.min_tens(min_tens),.min_ones(min_ones),.sec_tens(sec_tens),.sec_ones(sec_ones),.hex3(hex3),.hex2(hex2),.hex1(hex1),.hex0(hex0),.dig(dig)
);endmodule

三、引脚配置

引脚配置如下图所示:
在这里插入图片描述
在这里插入图片描述

四、实验效果

[Verilog]DE2-115分秒计时器演示视频

五、总结与扩展

本设计实现了完整的秒表计时功能和按键交互。
在实现过程中出现了许多问题,建议先构思实现代码再进行层次化设计,这样会省很多麻烦。

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

相关文章:

  • 大连做网站的企业网站项目策划书实例
  • 农林牧渔行业网站建设html5做的网站
  • 长沙网站设计报价中国建筑企业排名
  • 增城网站怎么做seo深建市住房和城乡建设局网站
  • 能自己做生物实验的网站公司网站建设工作
  • 住房和城乡建设部注册中心网站网站开发汇报
  • 网站开发的在线支付功能西地那非最佳起效时间
  • 建设一个蛋糕网站的背景与目的装修之家网
  • 网站空间数据库上传天眼在线查企业查询
  • 电商类网站设计模板佛山微网站推广
  • 外贸网站推广运营网站 seo 优化建议
  • 网站开发流程包括哪几个步骤?南宁网站建设推广优化
  • 天津电商网站制作asp网站版权
  • 群晖nas怎样做网站wordpress关于本站
  • pv3d 优秀网站多语言网站seo
  • 网站排名优化需要多久wordpress删除前缀
  • 网站营销案例展示小手工
  • 网站建设网络营销文章网站seo谷歌
  • 网站建设公司网址大全建筑方案设计收费标准
  • 上海网站设计公司网领导高度重视网站建设
  • 如何查询网站点击量小游戏秒玩入口
  • 网站建站侵权怎么办外贸网络推广的公司
  • 招聘网站开发计划百度竞价排名服务
  • 涪陵建设工程信息网站dz网站标题
  • 网站竞争对手分析有限责任公司破产法人承担的责任
  • 宁波网站建设排名手机怎么制作网页
  • 建筑公司网站内容网站维护步骤
  • 做实验学编程的网站湘潭学校网站建设 磐石网络专注
  • 网站项目计划书模板范文网上商店网站设计
  • 阿里巴巴网站是怎么做的怎么搜索整个网站内容