1. 老古董芯片的Verilog重生记
第一次在示波器上看到74LS160的仿真波形时,那整齐的BCD码跳变比心电图还让人兴奋。这个上世纪70年代诞生的TTL芯片,用Verilog在FPGA上复刻竟有如此多细节讲究。今天我们就来拆解这个同步十进制计数器的实现过程,从分频电路设计到状态机编码,最后用仿真波形验证每个功能点。
注意:本文所有代码均基于Xilinx Vivado 2022.1验证,适用于Artix-7系列FPGA开发板。使用其他平台时需注意时钟约束差异。
2. 系统架构设计
2.1 自顶向下的设计策略
整个工程采用典型的层次化设计:
- 顶层模块(top):整合分频器与计数器
- 分频模块(FrequencyDiv):100MHz→1Hz时钟转换
- 计数器模块(Counter74LS160):精确复刻74LS160行为
verilog复制module top(
input clk,
input nCR,
input nLOAD,
input [3:0] D,
input ENT,
input ENP,
output [3:0] Q,
output RCO
);
wire clk_1Hz;
FrequencyDiv U1(.clk_100MHz(clk), .clk_1Hz(clk_1Hz));
Counter74LS160 U2(
.clk(clk_1Hz),
.nCR(nCR),
.nLOAD(nLOAD),
.D(D),
.ENT(ENT),
.ENP(ENP),
.Q(Q),
.RCO(RCO)
);
endmodule
2.2 关键参数计算
分频模块需要将100MHz时钟转换为1Hz,涉及两个核心计算:
- 计数周期 = 100MHz / 1Hz = 100,000,000次
- 计数器位宽选择:2^27=134,217,728 > 100,000,000 → 选择27位寄存器
3. 模块实现细节
3.1 分频器设计陷阱
ver复制
