Skip to content

K1llery/clock

Repository files navigation

TEC-8 电子钟

本工程面向 TEC-8 + EPM7128SLC84-15,显示格式为 HH:MM:SS

本版按照 PPT 平台约束修正为稳定同步结构:CP2 用于内部同步、按键采样和扬声器音调,CP3 作为外部秒脉冲输入并提供闹钟滴声节奏和整点报时触发,避免 PULSE/QD 被综合成异步控制后在板上乱跳。扬声器蜂鸣复用 CP2,不再占用 CP1 时钟。

当前 main 状态

  • 当前功能:24 小时计时、运行/暂停、暂停调时、完整 HH:MM:SS 闹钟、闹钟消音、K4 整点报时开关、K5 翻转复位、调时位闪烁。
  • 当前验证:iverilog / vvp 仿真通过,quartus_sh --flow compile clock 编译通过。
  • 当前资源:120 / 128 macrocells42 / 68 pins。只剩 8 个宏单元余量,后续新增 RTL 功能必须先考虑资源交换。
  • 当前约束:不要直接叠加“反向调时、多组闹钟、倒计时、长按连发”等功能;这些都容易超过 EPM7128SLC84-15 的容量,需要先做资源优化或删减现有功能。

控制方式

  • K5:每次高低电平变化被 CP2 采样到后复位到 00:00:00
  • QD:正常状态下运行/暂停切换;闹钟响起后按下可消音
  • PULSE:暂停状态下单步设置
  • K0=1PULSE 加 1 小时;若 K0/K1 同时为 1,按小时优先处理
  • K0=0K1=1PULSE 加 1 分钟
  • K0=0K1=0PULSE 加 1 秒
  • K2=1:查看/设置闹钟时间
  • K3=1:闹钟使能,K3=0:闹钟关闭
  • K4=1:整点报时开启,K4=0:整点报时关闭

普通分钟校时时只调整分钟,保留当前秒显示;需要校秒时在暂停状态下直接按 PULSE。闹钟设置显示并保存完整 HH:MM:SSK2=1 时只响应 K0/K1/PULSE 的闹钟设置操作,QD 不会切换运行/暂停或消音,避免设置闹钟时误退出暂停走时。

时钟说明

  • CP1:本版不使用,可不接入
  • CP2:同步采样和扬声器音调复用时钟,接 PPT 中的 1KHz/100Hz 引脚;推荐选择 1KHz
  • CP3:运行计时基准、闹钟滴声间隔和调时闪烁节奏,接 PPT 中的 10Hz/1Hz 引脚

结合 实验五+六-预习.pdf 的引脚说明,上板时建议:

  • DZ8 短接到 1Hz,让 CP3 提供每秒一次计时脉冲
  • CP2 选择为 1KHz,用于同步 QD/PULSE/K0/K1/K2/K3/K4/K5,同时给扬声器提供约 500Hz 的音调;闹钟和整点报时的每次短响约 125ms
  • CP1 不再作为输入使用

这样既符合 PPT 的接法,也能避免按键/脉冲直接进异步控制后导致显示乱跳。

闹钟功能

  • 只有一组闹钟,保存 时:分:秒
  • K2=1 且暂停时,可用 K0/K1 + PULSE 设置闹钟时分,或直接按 PULSE 设置闹钟秒
  • 到达闹钟时间 HH:MM:SS 时,扬声器每隔约 1s 短响一次,音调由 CP2 翻转得到
  • 响铃期间电子钟继续正常走时
  • 响铃时按 QD 消音
  • K3 拉低会关闭闹钟并立即停止响铃,但不会影响电子钟本身运行
  • K2 处于闹钟查看/设置时,QD 被屏蔽;需要先退出 K2 再用 QD 控制走停或消音
  • 扬声器复用 PIN_52,也就是平台资料中的 LG1-D7//Speaker

整点报时

  • 电子钟运行到任意 HH:00:00 时,扬声器短响一次
  • 整点报时复用和闹钟相同的 CP2 音调与短响窗口
  • K4 控制整点报时开关,K3 只控制闹钟使能,两者独立
  • 暂停状态下用 PULSE 手动调到 HH:00:00 不会报时,只有运行计时跨过整点时才触发

闹钟不响排查

  • 设置闹钟后必须保持 K3=1,否则到达闹钟时间也不会置位响铃状态
  • CP2 必须有有效时钟输入,推荐选择 1KHz;如果 CP2 选择为 100Hz,音调会变成较低的约 50Hz,短响时间也会变长
  • CP3 建议选择 1Hz,这样闹钟滴声间隔约为 1s
  • PIN_52LG1-D7//Speaker 复用脚,听声音时要确认板上接的是扬声器通道,而不是只观察数码管小数点/段线
  • K3=1CP2=1KHz 仍不响,优先确认下载的是最新 clock.pof,再检查 PIN_52 连接和扬声器硬件

显示分配

  • LG1:秒个位,采用共阴极 7 段直译码
  • LG2:秒十位,BCD
  • LG3:分个位,BCD
  • LG4:分十位,BCD
  • LG5:时个位,BCD
  • LG6:时十位,BCD

硬件约束与取舍

  • EPM7128SLC84-15 容量很紧,当前设计已使用 94% 宏单元。新增功能建议以 124 / 128 macrocells 以内为目标,给布线和小修补保留余量。
  • LG1-D7Speaker 复用 PIN_52,本工程把它作为扬声器输出使用,因此不要再把该脚当作普通小数点/段线。
  • CP2 是唯一主要同步域;CP3 只作为同步后的外部秒脉冲。不要重新把 PULSEQDCP3 直接放进多个异步时钟边沿。
  • CP1 当前未使用。若确实需要新增低频逻辑,优先复用 CP2/CP3 的现有结构,而不是增加一个新时钟域。
  • K0..K5 已占用当前交互入口,新增开关前要同时核对 clock.qsf 引脚、README 操作说明和仿真覆盖。

rules.txt 规范符合性

对照 rules.txt 的 Verilog 工程应用规范,当前 RTL 的结论是“基本满足,但仍有工程取舍”:

  • RTL 综合语句:src/clock.v 未使用 initial# 延时、fork/joinforce/release、循环、除法或取模;这些仿真专用写法只出现在 sim/tb_clock.v 中。
  • 时序结构:核心寄存器统一在 CP2 域更新,CP3/QD/PULSE 通过同步寄存器和上升沿检测进入主时钟域。
  • 组合逻辑:BCD 递增和七段译码函数有完整分支或默认输出,避免无意锁存器。
  • 防呆取舍:K4 已采样到 CP2 域后再控制整点报时;K0/K1 同时为 1 时按小时优先,显示闪烁也提示小时字段。
  • 未完全实现项:K0..K3 仍为轻量采样,不是完整两级同步;K5 复位采用当前输入与 CP2 采样前值比较的低资源变化检测,非异步立即复位、非两级同步消抖;未加入 20ms 计数式按键消抖;非法 BCD 状态依赖合法递增路径避免,不做全局自恢复。

进一步工作建议

适合当前硬件限制的优先级如下:

  1. 先做资源优化:把 BCD 加一逻辑改成更显式的小状态转移,观察 Quartus 是否减少 lpm_add_sub 推断;合并普通时间和闹钟设置中的重复进位路径;评估将短响计数从 125CP2 周期缩短到 63 个周期以节省 1 个计数位。目标是先释放 6-10 个宏单元。
  2. 低成本稳定性增强K4 已采样进 CP2 域,K5 已用低资源变化检测实现复位;后续若资源允许,可再评估 K0..K3 两级同步或轻量消抖。
  3. 可考虑的小功能:在资源优化后再加入反向调时,但 K5 已用于复位,需要另选输入或重新分配功能;实现前先设定“编译必须小于等于 124 / 128 macrocells”的验收线。
  4. 暂不建议的功能:多组闹钟、倒计时模式、长按自动连发、复杂蜂鸣旋律、独立 LED 状态显示。这些要么需要较多寄存器和比较器,要么会占用与数码管共享的管脚,更适合换更大 CPLD 后再做。
  5. 零资源改进:继续完善测试台场景、上板接线检查清单、故障排查记录和实验报告截图。这些不会消耗宏单元,却能明显降低调试成本。

工程文件

验证命令

iverilog -g2001 -o sim/tb_clock.vvp src/clock.v sim/tb_clock.v
vvp sim/tb_clock.vvp
quartus_sh --flow compile clock

编译结果

  • Quartus 输出编程文件:clock.pof
  • 资源占用:120 / 128 macrocells
  • 引脚占用:42 / 68 pins
  • CP2 内部时序报告约为 26.32 MHz,远高于推荐的 1KHz 输入;当前主要限制是容量,不是速度

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors