FPGA CARRY4 抽头延迟链 TDC 延时仿真
概述
在 FPGA 高精度时间测量领域,基于 Xilinx CARRY4 进位单元的抽头延迟线(Tapped Delay Line)是主流方案之一。其核心思路是利用 FPGA 内部专用进位链的固定、低抖动级联延迟构建延迟线,通过锁存信号传播位置实现亚纳秒级的时间分辨率。单级进位延迟通常在 10–30 ps 之间,配合粗计数器拓展动态范围后,可覆盖更宽的时间量程。
相比传统数字逻辑方法,这种利用硬件原语的设计能显著降低抖动并提升精度。虽然实际应用中需要校准来消除工艺电压温度(PVT)带来的偏差,但其高性能与数字集成的便利性使其成为高精度时间测量的首选。
CARRY4 单元结构与原理
硬件架构
以 Xilinx 7 系列或 UltraScale 为例,每个 CARRY4 单元包含 4 个 MUXCY 进位选择器和 4 个 XORCY 异或门,形成 4 级进位链。关键引脚包括进位输入 CIN、级联输出 COUT,以及 CO0–CO3 四个抽头输出。这些抽头可以直接引出每级进位节点信号,连接到 D 触发器进行采样。
在实际设计中,上一级 CARRY4 的 COUT 需连接至下一级 CIN,从而形成连续的延迟链。停止信号(Stop)或全局时钟同步触发所有抽头处的 D 触发器,锁存当前时刻的传播状态。
工作流程
整个 TDC 的工作过程可以概括为三个步骤:
- 注入起始信号:Start 信号从延迟链首端的 CIN 注入,沿着 CARRY4 级联路径以固定的物理延迟逐级传播。
- 锁存状态:当 Stop 信号到来时,触发所有抽头位置的 D 触发器,记录此时信号传播到了哪一级,形成类似'温度计码'的波形。
- 编码输出:将温度计码经编码器转换为二进制细时间值 T_fine,再结合系统时钟计数的粗时间值 T_coarse,最终得到总时间 T_total = T_coarse + T_fine。
行为模型仿真
为了验证逻辑并观察延迟特性,我们可以使用 Verilog 构建一个行为级模型。这里需要注意,实际 FPGA 中的 CARRY4 是硬连线资源,而仿真模型主要用于逻辑验证和时序估算。
内部结构示意
CYINIT → MUXCY0 → CO[0] → MUXCY1 → CO[1] → MUXCY2 → CO[2] → MUXCY3 → CO[3]
DI[0] S[0] DI[1] S[1] DI[2] S[2] DI[3] S[3]
Verilog 行为模型
下面的代码模拟了 CARRY4 的逻辑行为。注意,#10 仅用于仿真演示,不代表真实物理延迟,实际设计应依赖综合后的时序报告。
`timescale 1ps/1ps
module CARRY4(
output [3:0] CO,
output [3:0] O,
input CI,
input CYINIT,
input [3:0] DI,
input [3:0] S
);
// 内部进位寄存器
reg [3:0] co_int;
always @* begin
// 模拟进位传播延迟,每个 CARRY4 约 10ps
#10;
// CARRY4 逻辑实现
co_int[0] = (CYINIT & S[0]) | (CI & S[0]) | DI[0];
co_int[1] = (co_int[0] & S[1]) | DI[1];
co_int[2] = (co_int[1] & S[2]) | DI[2];
co_int[3] = (co_int[2] & S[3]) | DI[3];
end
assign CO = co_int;
assign O = co_int;
endmodule


