4. 数据采集与同步

在任务载荷FPGA实时数据处理链路中,数据采集与同步是整条信号链的入口环节。多路传感器(如可见光探测器、红外焦平面、激光测距、IMU等)往往工作在不同采样率、不同接口时序、不同时钟域下,若采集阶段没有完成通道对齐、时间戳标记和触发同步,后续的融合、检测与跟踪算法将建立在错位的数据基础上,误差会被逐级放大。本节围绕四个相互耦合的问题展开:多通道采样如何对齐、时间戳如何标记、触发机制如何设计、跨时钟域数据如何安全交接。

一、多通道采样对齐:从物理层到数据层的三级对齐

多通道对齐不能只在数据层做,需要分三级处理。第一级是物理层对齐,即各通道的采样时钟同源或具有确定相位关系。工程上常用一个低抖动参考时钟经时钟芯片(如LMK04828、AD9528)扇出多路同频或分频时钟,保证通道间固定偏斜(skew)在百皮秒量级。第二级是采样时刻对齐,对于并行ADC接口,需保证各通道的帧同步信号(FSYNC)与数据位(D[11:0])满足建立/保持时间;对于串行LVDS接口,则需通过IDELAY/ISERDES做位对齐和字对齐。第三级是数据层对齐,即用FIFO或移位寄存器补偿通道间固定延迟,使同一采样时刻的数据在同一拍输出。

以四通道、每通道100 MSPS、12 bit的采集系统为例:参考时钟100 MHz经时钟芯片产生4路100 MHz采样时钟和1路200 MHz系统时钟。各通道ADC输出DDR数据,FPGA用IDDR原语在时钟双沿采样,得到每通道12 bit@100 MSPS。若通道2相对通道1存在约2个采样周期的固定延迟,可在通道2数据路径上插入深度为2的移位寄存器,使四通道在同一valid信号下对齐输出。判断对齐是否成功的依据是:向各通道注入同一测试脉冲(如由FPGA产生的同步阶跃信号),观察对齐后四通道数据是否在同一采样点同时跳变,偏差应不超过1个采样周期。

二、时间戳标记:让每个采样点可追溯

时间戳的作用是给每个采样点或每个数据块赋予统一时间基准,便于后续多源融合和事后分析。时间戳标记有两种粒度:逐点时间戳和块时间戳。逐点时间戳精度高但开销大,适合低速高精度通道;块时间戳在数据块头部记录起始时刻和块长度,适合高速连续采集。

实现上,通常用一个自由运行的64位计数器作为时间基准,计数时钟为系统时钟(如200 MHz,分辨率5 ns)。当采集触发到来时,锁存当前计数值作为该块数据的起始时间戳,同时记录块内采样点数N。则第k个采样点的时间可表示为:t_k = t_start + k / f_s,其中f_s为采样率。若系统需要与外部UTC时间对齐,可在每秒脉冲(1PPS)到来时对计数器进行校准,将计数器值修正为UTC秒对应的计数值,并记录校准残差。

时间戳标记的关键是“锁存时刻”与“数据有效时刻”一致。若触发信号与数据有效信号存在跨时钟域关系,必须先用同步器将触发信号同步到采集时钟域,再锁存计数器,否则会引入1~2个时钟周期的随机偏差。对于要求优于10 ns的时间戳,建议直接用采集时钟驱动计数器,避免二次同步。

三、触发机制:内触发、外触发与软件触发

触发机制决定“何时开始采集”和“采集哪一段数据”。常见触发方式有三类:外触发、内触发和软件触发。外触发由外部设备提供电平或脉冲信号,经FPGA的IO引脚输入,经去抖和同步后启动采集;内触发由FPGA内部逻辑根据数据特征产生,例如当某通道信号超过阈值时触发;软件触发由上位机通过寄存器写入触发命令,适合调试和手动采集。

工程中常采用“预触发+后触发”结构:预触发深度为M个采样点,后触发深度为N个采样点。触发到来前,数据持续写入环形缓冲区;触发到来后,继续采集N个点,然后将触发点前M个点和后N个点一起读出。这样可保留触发事件前后的完整波形。以M=1024、N=4096、采样率100 MSPS为例,单次触发采集时长为(1024+4096)/100M = 51.2 μs,环形缓冲区深度至少为5120点。

触发信号本身也需要同步。若外触发信号来自与FPGA采集时钟异步的域,必须用两级触发器同步,并注意触发脉冲宽度应大于2个采集时钟周期,否则可能漏采。对于多通道系统,触发信号应同时送达所有通道的采集控制逻辑,保证各通道在同一触发沿启动,避免通道间启动偏差。

四、跨时钟域数据交接:从采集域到处理域

采集域时钟(如100 MHz)与处理域时钟(如200 MHz)通常不同源,数据从采集域传到处理域必须做跨时钟域(CDC)处理。对于连续数据流,最稳妥的方式是异步FIFO。异步FIFO的写端口用采集时钟,读端口用处理时钟,深度需满足:深度 ≥ 突发长度 × (1 - f_read/f_write) + 余量。例如采集域100 MHz、处理域200 MHz,突发长度256,则深度至少为256×(1-0.5)+8=136,取256深度可留足余量。

异步FIFO设计要点:读写指针用格雷码跨域,空满标志用同步后的指针比较产生;写使能需在采集域内单周期有效,读使能在处理域内单周期有效;FIFO输出数据需在读出后打一拍再使用,避免组合逻辑毛刺。对于控制类信号(如触发标志、时间戳),若位宽较小,可用双触发器同步;若位宽较大(如64位时间戳),建议用握手协议或异步FIFO传递,避免多位同步导致的亚稳态和位偏斜。

跨时钟域交接的验证方法:在采集域写入递增计数器,处理域读出后检查是否连续、无重复、无跳变;同时用逻辑分析仪观察FIFO空满标志,确认无溢出或读空。
多通道采集与同步链路结构 采集时钟域(100 MHz) 通道1 ADC 100 MSPS / 12 bit 通道2 ADC 100 MSPS / 12 bit 通道3 ADC 100 MSPS / 12 bit 通道4 ADC 100 MSPS / 12 bit 通道对齐 IDELAY / ISERDES 位对齐 + 字对齐 移位寄存器补偿 固定延迟(0~3拍) 四通道同拍输出 valid 对齐 偏差 ≤ 1 采样周期 触发与时间戳 外触发 / 内触发 / 软件触发 64位计数器锁存 · 预触发1024 + 后触发4096 环形缓冲区 深度 5120 点 · 触发前后数据保留 异步 FIFO 写端口:100 MHz 读端口:200 MHz 格雷码指针跨域 深度 256 空/满标志同步 数据打拍输出 数据流 处理时钟域(200 MHz) 数据预处理 去噪 / 校正 / 格式转换 多源融合 时间戳对齐 · 空间配准 检测与跟踪 实时算法流水线 输出接口 SRIO / 万兆网 / PCIe 读数据 时间戳传递 握手协议 / 异步FIFO 采集域完成对齐、触发与时间戳锁存;异步FIFO完成跨时钟域交接;处理域按统一时间基准融合

五、工程实现中的关键参数与检查点

将上述机制落地时,建议按以下参数表进行配置和检查。表中数值为示例,实际应根据器件手册和系统需求调整。

环节 关键参数 示例值 检查依据
采样时钟 频率 / 抖动 100 MHz / <1 ps RMS 示波器测相位噪声
通道对齐 固定延迟补偿 0~3 采样周期 同步阶跃测试,偏差≤1拍
时间戳 计数器位宽 / 分辨率 64 bit / 5 ns 1PPS校准残差<10 ns
触发 预触发 / 后触发深度 1024 / 4096 点 环形缓冲深度≥5120
异步FIFO 深度 / 读写时钟 256 / 100→200 MHz 无溢出、无读空
CDC验证 递增计数器连续性 无跳变、无重复 逻辑分析仪抓取

实际调试时,建议先单独验证每个通道的采集通路,确认数据位对齐和字对齐正确;再注入同一测试信号验证通道间对齐;然后验证触发路径,确认预触发和后触发数据完整;最后验证跨时钟域FIFO,用递增计数器检查数据连续性。四个环节全部通过后,再接入融合算法,可显著降低联调难度。

注意:跨时钟域信号若未做同步处理,可能引入亚稳态,导致偶发数据错误。此类错误在实验室短时间测试中可能不出现,但在长时间运行或温度变化时概率上升,必须从设计上消除。