从零构建数字钟:Quartus II与74系列芯片实战指南

数字钟作为电子工程入门的经典项目,不仅能巩固数字电路基础知识,还能掌握EDA工具的使用技巧。本文将带你从零开始,使用Quartus II软件和74系列芯片搭建一个完整的数字钟系统,特别针对74190计数器的配置与调试提供详细解决方案。

1. 项目准备与环境搭建

在开始设计前,我们需要准备好软硬件环境。Quartus II作为Altera(现Intel PSG)推出的FPGA开发工具,同样适用于传统数字电路的仿真与验证。最新版本的Quartus Prime Lite Edition即可满足我们的需求,它完全免费且支持大多数基础功能。

硬件方面,除了FPGA开发板,我们还需要准备:

  • 74系列芯片:74190(十进制可逆计数器)x4、7447(BCD-7段译码器)x4、7408(与门)x2
  • 共阳极数码管x4
  • 1Hz时钟信号源(可使用555定时器或晶振分频电路)
  • 面包板及连接线若干

提示:初学者建议先使用Proteus等仿真软件验证电路设计,再实际搭建硬件电路,可节省大量调试时间。

安装Quartus II时,注意勾选以下组件:

□ Quartus Prime Programmer
□ ModelSim-Altera Starter Edition
□ Devices → Cyclone IV E (根据实际FPGA型号选择)

2. 核心电路设计与74190配置技巧

2.1 时钟分频模块设计

数字钟的核心是精确的1Hz时钟信号。假设我们使用50MHz的FPGA板载晶振,需要通过分频电路得到秒脉冲:

module clock_divider(
    input clk_50M,
    output reg clk_1Hz
);
    reg [25:0] counter;
    always @(posedge clk_50M) begin
        if(counter == 50_000_000 - 1) begin
            counter <= 0;
            clk_1Hz <= ~clk_1Hz;
        end else begin
            counter <= counter + 1;
        end
    end
endmodule

若使用74系列芯片实现,可采用74LS90分频器级联方案:

50MHz → 74LS90(÷10) → 74LS90(÷10) → 74LS90(÷10) → 74LS90(÷5) → 1Hz

2.2 74190计数器电路设计

74190是可预置的十进制同步可逆计数器,其引脚功能如下:

引脚名称功能描述
1A预置数据输入位0
2B预置数据输入位1
3C预置数据输入位2
4D预置数据输入位3
5/LOAD异步并行加载控制(低有效)
6/CTEN计数使能(低有效)
7D/U加减计数控制(高为减)
9CLK时钟输入
10QD计数输出位3
11QC计数输出位2
12QB计数输出位1
13QA计数输出位0
14/MAX/MIN极值输出(低有效)

分钟计数单元连接示例:

         +-----+
1Hz ----| CLK  |----- QA→7447→数码管
        |      |
GND ----| D/U  |----- QB→7447→数码管
        | 74190|
GND ----| /CTEN|----- QC→7447→数码管
        |      |
VCC ----| /LOAD|----- QD→7447→数码管
         +-----+

3. Quartus II原理图设计实战

3.1 创建新项目

  1. 启动Quartus II,选择"File"→"New Project Wizard"
  2. 设置项目路径和名称(如Digital_Clock)
  3. 选择目标设备型号(根据实际FPGA型号)
  4. 添加新的原理图文件(.bdf)

3.2 绘制数字钟原理图

在原理图编辑器中,按照模块化思路设计:

  1. 时钟模块:放置分频器或直接引入外部时钟
  2. 计数模块:
    • 秒计数器(60进制):2片74190级联
    • 分计数器(60进制):同上
    • 时计数器(24进制):特殊设计
  3. 显示模块:7447译码器驱动数码管

24进制小时计数器的特殊连接方式:

74190(十位)的QD和74190(个位)的QC通过7408与门连接到两片的/LOAD
预置值:十位=0010(2),个位=0100(4)

3.3 功能仿真验证

创建波形仿真文件(.vwf),设置测试信号:

时钟周期:20ns(对应50MHz)
复位信号:初始100ns低电平
观察信号:所有计数器输出、数码管驱动信号

常见仿真问题排查:

  • 计数器不工作:检查/CTEN是否接低电平
  • 显示乱码:验证7447与数码管类型(共阳/共阴)是否匹配
  • 进位异常:检查级联连接和反馈复位逻辑

4. 硬件实现与调试技巧

4.1 FPGA引脚分配

使用Pin Planner工具进行约束:

信号名称FPGA引脚对应硬件
clk_50MPIN_G1板载晶振
seg[6:0]PIN_xx~PIN_xx数码管段选
dig[3:0]PIN_xx~PIN_xx数码管位选

4.2 常见硬件问题解决

  1. 数码管显示暗淡:

    • 检查限流电阻(通常220Ω)
    • 确认扫描频率(建议100Hz以上)
  2. 计数器不递增:

    # 使用SignalTap II逻辑分析仪抓取信号
    $ quartus_stp -t debug_stp.stp
    
  3. 显示闪烁或错位:

    • 确保位选信号扫描间隔均匀
    • 检查电源滤波电容(推荐0.1μF陶瓷电容并联10μF电解电容)

4.3 高级功能扩展

基础功能稳定后,可考虑添加:

  • 闹钟功能:增加数值比较器(7485)
  • 调整时间:使用消抖开关控制74190的/LOAD和CLK
  • 整点报时:利用计数器状态触发555音频电路

实际项目中,我曾遇到一个棘手问题:24小时制切换时计数器无法正确归零。最终发现是反馈逻辑中的门电路延迟导致,通过在74190的/LOAD端添加一个小电容(10pF)解决了竞争冒险问题。这种实战经验在教科书上很少提及,却对项目成功至关重要。

更多推荐