野火征途Pro开发板FPGA数字时钟(秒表)设计学习心得(1)

本文记录了作者自学FPGA的过程,通过野火征途Pro开发板实现数码管动态显示的秒表设计。面对74HC595驱动的数码管,作者参考了其他教程并成功设计出时分秒时钟。文章强调了FPGA学习中的实践操作、模块调用、仿真与调试的重要性,认为不断试错是快速进步的关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hc595_ctl
shizhong

第一次写csdn,自学FPGA有一段时间了,七月中旬买的开发板,到现在一个多月终于稍微学懂点FPGA了。

这个分享的是野火FPGA开发指南数码管动态显示拓展训练的试题。

 一开始一头雾水,野火教程只讲到动态扫描,自己在网上找秒表的教程,很少,并且野火的板子是使用74hc595驱动数码管,这点跟其他平台的板子不太一样。参考了明德扬一个教程里面的设计方法。

实验目标是生成一个时分秒时钟,设计思路是分别对时分秒的个位,十位进行设计,正好对应6段数码管。计时设计完成之后,直接用顶层模块调用shizhong模块和74hc595驱动模块,74hc595驱动原理野火有详细教程,话不多说直接上代码。

 时钟设计

module  shizhong
(
input   sys_clk,//50MHz
input   sys_rst_n,//复位信号
output  wire[7:0]   seg,//数码管段选信号,
output  wire[5:0]   sel//位选信号
);
parameter   CNT_MAX = 50_000;//动态扫描计时最大值
parameter   CNT_MAX_1S = 50_000_000;//1s计数器计时最大值
reg[15:0]   cnt_1ms;//动态扫描
reg[2:0]    cnt_6;//对动态扫描计时6次,方便位选
reg[5:0]    sel_reg;//位选信号中间变量
reg[25:0]   cnt_1s;//1s计数器
reg[3:0]    m_g;//秒个位
reg[2:0]    m_s;
reg[3:0]    f_g;
reg[3:0]    f_s;
reg[3:0]    s_g;
reg[3:0]    s_s;
reg[7:0]    seg_reg;//段选信号中间变量
reg[3:0]    x;//对时个位变量法计数最大值,因为时个位的跳转可能为9(9,19),也可能为3(23)
reg[3:0]    data;//很重要,将时分秒各数据赋值到数码管的中间变量



//设置动态扫描时间为1ms的计时器cnt_1ms
always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n==0)
        cnt_1ms <= 0;
    else if(cnt_1ms==CNT_MAX-1)
        cnt_1ms <= 0;
    else  
        cnt_1ms <= cnt_1ms + 1;

always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n==0)
        cnt_6 <= 0;
    else if((cnt_1ms==CNT_MAX-1)&&(cnt_6 > 3'd4))  
        cnt_6 <= 0;
    else if(cnt_1ms==CNT_MAX-1)
        cnt_6 <= cnt_6 + 1;    
    else
        cnt_6 <= cnt_6;
//位选信号sel_reg 赋值
always@(posedge sys_clk or negedge sys
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值