当前位置:首页 > EDA > 电子设计自动化
[导读]在雷达、5G Massive MIMO、电力质量分析等场景中,多通道数据采集的同步精度直接决定系统性能。传统方案采用外部时钟分发网络,通道间skew可达数百皮秒。利用FPGA的硬件并行特性,配合源同步接口与AXI4-Stream流式架构,可实现通道间时差小于10ps的同步采集。本文给出一套可落地的低延迟架构。


在雷达、5G Massive MIMO、电力质量分析等场景中,多通道数据采集的同步精度直接决定系统性能。传统方案采用外部时钟分发网络,通道间skew可达数百皮秒。利用FPGA的硬件并行特性,配合源同步接口与AXI4-Stream流式架构,可实现通道间时差小于10ps的同步采集。本文给出一套可落地的低延迟架构。

一、同步的本质:同源时钟+并行触发

真正的同步采样必须解决三个问题:时钟分发、触发一致性、数据对齐。

时钟网络:采用"全局参考时钟+本地DLL"的混合架构。SI5324等时钟芯片生成差分时钟,经FPGA时钟树(BUFG/BUFR)分发到各ADC;每个ADC接口模块使用IDELAYE2实现亚皮秒级相位调整:

IDELAYE2 #( .IDELAY_TYPE("VARIABLE"), .DELAY_SRC("IDATAIN") )

idelay_inst ( .IDATAIN(ref_clk), .CNTVALUEIN(phase_adj),

             .DATAOUT(clk_delayed) );

BUFR #(.BUFR_DIVIDE("1")) bufr_inst ( .I(clk_delayed), .O(aligned_clk) );

并行触发:所有ADC的CONVST(转换启动)引脚直接并联,由FPGA同一个IO在单一时钟沿同时拉高。这样所有ADC在同一物理时刻启动转换,从根本上消除触发抖动。

二、数据捕获:源同步+IDDR

ADC返回的并行数据通常伴随随路时钟(源同步接口)。FPGA内部用IDDR原语在随路时钟的双沿采样,最大化数据吞吐:

// 每个数据位例化一个IDDR

IDDR #( .DDR_CLK_EDGE("SAME_EDGE_MASTER") )

iddr_inst ( .D(adc_data[i]), .C(adc_clk),

           .Q1(data_pos[i]), .Q2(data_neg[i]) );

三、跨时钟域:异步FIFO阵列解耦

多片ADC的采样时钟彼此异步,不能直接拼接多位数据——走线延迟差异会导致"位偏移"乱码。正确做法是为每个通道实例化独立异步FIFO:

写端:各ADC随路时钟域,持续写入

读端:统一挂载到AXI-Stream时钟域

深度:同源时钟用64级即可;独立晶振需128-256级以吸收PPM漂移

四、数据对齐:三段式状态机消除相位差

上电初期各ADC启动时间不同,FIFO中会积压错位数据。必须引入Flush-Align-Run状态机:

typedef enum {FLUSH, ALIGN, RUN} state_t;

state_t state = FLUSH;

always @(posedge axis_clk) begin

 case(state)

   FLUSH: begin

     if (all_fifo_empty) state <= ALIGN;

     else discard_read_all();

   end

   ALIGN: begin

     if (all_fifo_non_empty) begin

       read_first_sample();

       state <= RUN;

     end

   end

   RUN: begin

     if (all_fifo_non_empty && !tvalid)

       push_to_axis();  // 拼接为多通道数据帧

   end

 endcase

end

五、低延迟输出:AXI4-Stream直传

对齐后的数据直接推送AXI4-Stream,配合DMA搬运到DDR或上行。关键点:

TVALID恒1+TLAST由计数器驱动:适合示波器式连续流

背压处理:AXI4-Stream的tready可能因DMA配置或DDR刷新而拉低,必须在"FIFO非空 且 上一拍tvalid已清"时才发起读使能,避免数据错位

DMA传输长度:越大则启动开销占比越小,连续流更平稳

assign tvalid = (state==RUN) && all_fifo_non_empty && !prev_tvalid;

assign tdata  = {ch0_data, ch1_data, ..., chN_data};

六、时序约束:建立/保持双约束

Vivado对源同步输入接口的约束必须同时指定-max和-min:

set_input_delay -clock adc_clk -max 2.5 [get_ports adc_data*]

set_input_delay -clock adc_clk -min 0.5 [get_ports adc_data*]

-max用于建立时间分析,-min用于保持时间分析。约束仅用于时序分析,真实的PCB走线偏移需用IDELAYE2原语调节。数据线之间长度偏差可能达数百ps,务必在PCB设计阶段做等长布线。

写在最后

多通道ADC同步采集的低延迟架构,本质是用FPGA的并行性对冲"时序抖动"和"数据拥堵"两大难题:同源时钟+并行CONVST解决采样同步;异步FIFO阵列解耦跨时钟域;三段式状态机消除初始相位差;AXI4-Stream握手隔离背压。实测表明,基于Xilinx Kintex-7 + 4通道2.5GSPS ADC的系统中,通道间时差可控制在10ps以内,时间戳精度达500ps。当你的应用要求"多通道数据必须严格对齐"时,这套架构是从实验室走向量产的正确路径。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭