本工程面向 TEC-8 + EPM7128SLC84-15,显示格式为 HH:MM:SS。
本版按照 PPT 平台约束修正为稳定同步结构:CP2 用于内部同步、按键采样和扬声器音调,CP3 作为外部秒脉冲输入并提供闹钟滴声节奏和整点报时触发,避免 PULSE/QD 被综合成异步控制后在板上乱跳。扬声器蜂鸣复用 CP2,不再占用 CP1 时钟。
- 当前功能:24 小时计时、运行/暂停、暂停调时、完整
HH:MM:SS闹钟、闹钟消音、K4整点报时开关、K5翻转复位、调时位闪烁。 - 当前验证:
iverilog/vvp仿真通过,quartus_sh --flow compile clock编译通过。 - 当前资源:
120 / 128 macrocells,42 / 68 pins。只剩 8 个宏单元余量,后续新增 RTL 功能必须先考虑资源交换。 - 当前约束:不要直接叠加“反向调时、多组闹钟、倒计时、长按连发”等功能;这些都容易超过
EPM7128SLC84-15的容量,需要先做资源优化或删减现有功能。
K5:每次高低电平变化被CP2采样到后复位到00:00:00QD:正常状态下运行/暂停切换;闹钟响起后按下可消音PULSE:暂停状态下单步设置K0=1:PULSE加 1 小时;若K0/K1同时为 1,按小时优先处理K0=0且K1=1:PULSE加 1 分钟K0=0且K1=0:PULSE加 1 秒K2=1:查看/设置闹钟时间K3=1:闹钟使能,K3=0:闹钟关闭K4=1:整点报时开启,K4=0:整点报时关闭
普通分钟校时时只调整分钟,保留当前秒显示;需要校秒时在暂停状态下直接按 PULSE。闹钟设置显示并保存完整 HH:MM:SS。
K2=1 时只响应 K0/K1/PULSE 的闹钟设置操作,QD 不会切换运行/暂停或消音,避免设置闹钟时误退出暂停走时。
CP1:本版不使用,可不接入CP2:同步采样和扬声器音调复用时钟,接 PPT 中的1KHz/100Hz引脚;推荐选择1KHzCP3:运行计时基准、闹钟滴声间隔和调时闪烁节奏,接 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,这样闹钟滴声间隔约为1sPIN_52是LG1-D7//Speaker复用脚,听声音时要确认板上接的是扬声器通道,而不是只观察数码管小数点/段线- 若
K3=1且CP2=1KHz仍不响,优先确认下载的是最新clock.pof,再检查PIN_52连接和扬声器硬件
LG1:秒个位,采用共阴极 7 段直译码LG2:秒十位,BCDLG3:分个位,BCDLG4:分十位,BCDLG5:时个位,BCDLG6:时十位,BCD
EPM7128SLC84-15容量很紧,当前设计已使用 94% 宏单元。新增功能建议以124 / 128 macrocells以内为目标,给布线和小修补保留余量。LG1-D7与Speaker复用PIN_52,本工程把它作为扬声器输出使用,因此不要再把该脚当作普通小数点/段线。CP2是唯一主要同步域;CP3只作为同步后的外部秒脉冲。不要重新把PULSE、QD或CP3直接放进多个异步时钟边沿。CP1当前未使用。若确实需要新增低频逻辑,优先复用CP2/CP3的现有结构,而不是增加一个新时钟域。K0..K5已占用当前交互入口,新增开关前要同时核对clock.qsf引脚、README 操作说明和仿真覆盖。
对照 rules.txt 的 Verilog 工程应用规范,当前 RTL 的结论是“基本满足,但仍有工程取舍”:
- RTL 综合语句:
src/clock.v未使用initial、#延时、fork/join、force/release、循环、除法或取模;这些仿真专用写法只出现在sim/tb_clock.v中。 - 时序结构:核心寄存器统一在
CP2域更新,CP3/QD/PULSE通过同步寄存器和上升沿检测进入主时钟域。 - 组合逻辑:BCD 递增和七段译码函数有完整分支或默认输出,避免无意锁存器。
- 防呆取舍:
K4已采样到CP2域后再控制整点报时;K0/K1同时为 1 时按小时优先,显示闪烁也提示小时字段。 - 未完全实现项:
K0..K3仍为轻量采样,不是完整两级同步;K5复位采用当前输入与CP2采样前值比较的低资源变化检测,非异步立即复位、非两级同步消抖;未加入 20ms 计数式按键消抖;非法 BCD 状态依赖合法递增路径避免,不做全局自恢复。
适合当前硬件限制的优先级如下:
- 先做资源优化:把 BCD 加一逻辑改成更显式的小状态转移,观察 Quartus 是否减少
lpm_add_sub推断;合并普通时间和闹钟设置中的重复进位路径;评估将短响计数从125个CP2周期缩短到63个周期以节省 1 个计数位。目标是先释放 6-10 个宏单元。 - 低成本稳定性增强:
K4已采样进CP2域,K5已用低资源变化检测实现复位;后续若资源允许,可再评估K0..K3两级同步或轻量消抖。 - 可考虑的小功能:在资源优化后再加入反向调时,但
K5已用于复位,需要另选输入或重新分配功能;实现前先设定“编译必须小于等于124 / 128 macrocells”的验收线。 - 暂不建议的功能:多组闹钟、倒计时模式、长按自动连发、复杂蜂鸣旋律、独立 LED 状态显示。这些要么需要较多寄存器和比较器,要么会占用与数码管共享的管脚,更适合换更大 CPLD 后再做。
- 零资源改进:继续完善测试台场景、上板接线检查清单、故障排查记录和实验报告截图。这些不会消耗宏单元,却能明显降低调试成本。
- 顶层 RTL:src/clock.v
- 测试台:sim/tb_clock.v
- 设计说明:docs/superpowers/specs/2026-04-22-tec8-clock-design.md
- 工程流程图:docs/project-flow.md
iverilog -g2001 -o sim/tb_clock.vvp src/clock.v sim/tb_clock.v
vvp sim/tb_clock.vvp
quartus_sh --flow compile clockQuartus输出编程文件:clock.pof- 资源占用:
120 / 128 macrocells - 引脚占用:
42 / 68 pins CP2内部时序报告约为26.32 MHz,远高于推荐的1KHz输入;当前主要限制是容量,不是速度