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传递,避免多位同步导致的亚稳态和位偏斜。
五、工程实现中的关键参数与检查点
将上述机制落地时,建议按以下参数表进行配置和检查。表中数值为示例,实际应根据器件手册和系统需求调整。
| 环节 | 关键参数 | 示例值 | 检查依据 |
|---|---|---|---|
| 采样时钟 | 频率 / 抖动 | 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,用递增计数器检查数据连续性。四个环节全部通过后,再接入融合算法,可显著降低联调难度。