最近项目中采用FPGA+AD9250实现数据采集功能,记录一下调试的过程。
1.硬件架构
AD9250与FPGA数据通路采用jesd204B协议,基于SerDes接口,硬件方案如下图所示。FPGA采用xilinx ku3p.
1个AD9250有2个lane,我们的系统用了2个AD9250接在FPGA的1个收发器Quad(4个lane)上。
注:两个jesd204bip核共用一个收发器的quad必须使用CPLL,如果使用QPLL会报错,因为QPLL是4个channel公用的,而4个channel各自有一个CPLL。当一个quad不同channel独立工作的时候就必须使用CPLL。
2.时钟方案
根据xilinx jesd204b ip核手册的时钟章节可以看到有一种简化的时钟方案(下图),用收发器的参考时钟作为jesd204b ip核的核心时钟。前提是两者的频率相等,核心时钟由线速率得到(ad9250线速率5G/40=125M),我们将收发器的参考时钟配置为125M即可共用。
通过这两个原语何以实现上图中clocking mudule的时钟方案
//IBUFDS_GTE4IBUFDS_GTE4 ibufds_refclk0(.O (refclk_i),.ODIV2 (refclk_copy),.CEB (tied_to_ground_i),.I (refclk_pad_p),.IB (refclk_pad_n));BUFG_GT refclk_bufg_gt_i(.I (refclk_copy),.CE (gt_powergood),.CEMASK (1'b1),.CLR (1'b0),.CLRMASK (1'b1),.DIV (3'b000),.O (coreclk_i));
时钟芯片生成sysref信号、收发器的参考时钟、ADC采样时钟,其中ADC采样时钟设置为250M
注:sysref信号是jesd204b的class 1 用来实现确定性延时的信号,sysref必须是多帧时钟的周期的整数倍,由于jesd204b的F(每个多帧的帧数)默认设置了32,所以这里sysref的频率设置为采样频率的32分之1。
注:如果收发器的参考时钟是固定的没法修改,比如156.25M,与核心时钟不一致,那么就不能用上述的时钟方案,只能用通用方案,即单独一路时钟作为核心时钟,如果下图所示:
3.FPGA配置
FPGA侧需要两个ip核,jesd204和jesd204phy。ip核配置的参数由所选adc确定。包括SerDes的lane数量,sysref模式(连续还是单次),K(每帧的字节数),F(每个多帧的帧数),线速率,phy的参考时钟频率。这些要与adc设置一致。
ad9250的sysref默认是连续模式,采样的位宽是14bit,一帧数据会填充2bit达到16bit,也就是两个字节,所以K配置为2,F默认是32,所以ip核配置为32。线速率手册上是5Gbps,我们也可以自己算出来:
采样频率250Mx位宽14bit=3.5Gbps,算上每个采样数据补充的2bit以及链路层8b10b编码,最终的线速率为:
3.5Gx16/14x10/8=5Gbps
ip核配置
勾选示例工程包含共享逻辑,可以参考示例工程的时钟方案,特别是多个adc同步场景。
根据adc的设置,sysref打开
204bphy配置
4.启动流程
- 复位FPGA的204Bip核
- 配置时钟芯片,产生各个时钟源
- 使能时钟buffer,将时钟源分配给各个ADC和FPGA
- 根据ADC手册上的配置流程,配置204b相关参数,最后使能adc以及204b接口
- 将FPGA的204Bip核解除复位状态,开始和ADC完成204b的同步工作
- 获取采集数据
5.注意事项
jesd204b ip核的axi-lite接口用来动态配置ip核,不管是否使用都需要给时钟驱动(下面图片的信号),否则ip核一直处于复位状态无法工作。