Aurora 8b/10b AXI4-ST回环测试

        Aurora 8b/10b,官方提供了demo工程,但是数据生成模块、Aurora IP核、数据校验模块之间并不是直接使用AXI4-ST总线通信,本文会将demo工程进行相关优化修改,并将优化修改后的demo工程进行仿真、分析、说明:

1 IP核设置

        例化Aurora 8b10b IP核,lane的数据位宽选2字节,速率选1.25Gbps,GT参考时钟125MHz,INIT时钟和DRP时钟均选50MHz。

        这里我们的开发板上有两个光口,仅使用1个光口(1条Lane)进行内部自环测试、以及两块A7开发板的回环测试;如果使用同一块开发板上的2个光口做回环测试,首先要确认使用光模块连接后的两个光口的TX和RX是如何对接的,另外还需要考虑通信数据的高字节与低字节顺序问题。

        这里我们不搞这么复杂,直接用1个光口做内部自环测试、两块A7开发板的光口回环测试。

        设置的是用1条Lane(Lane0和Lane1),单条Lane的数据位宽是2Bytes,通信数据位宽1*2Bytes = 16bits。

        这里计算一下Aurora提供的USER_CLK,线速率 * 8b10b / lane的位宽 = 1.25Gbps线速率 * (8/10) / 16 = 62.5MHz

Aurora 8b/10b AXI4-ST回环测试_第1张图片

        

        做仿真测试使用了1条Lane,例如选择了X0Y0这1条Lane:

Aurora 8b/10b AXI4-ST回环测试_第2张图片

        Transceiver quad PLL、differential refclk buffer、clocking和reset逻辑包含在IP core中,我们用开发板上的50MHz单端晶振时钟给INIT CLK用,所以这里INIT CLK设置为单端:

Aurora 8b/10b AXI4-ST回环测试_第3张图片

2 IP核接口设置

2.1 Framing接口

        IP核设置中选择的是Framing接口

Aurora 8b/10b AXI4-ST回环测试_第4张图片

 2.2 Streaming接口

Aurora 8b/10b AXI4-ST回环测试_第5张图片

2.3 AXI4-Stream数据大小端

        Aurora IP核默认按照MSB大端模式传输数据:

Aurora 8b/10b AXI4-ST回环测试_第6张图片

         可以在IP核中设置小端模式:

Aurora 8b/10b AXI4-ST回环测试_第7张图片

3 官方demo工程分析及优化

3.1 demo仿真工程结构

Aurora 8b/10b AXI4-ST回环测试_第8张图片

        demo工程中主要包含如下几个模块:

(1) aurora_8b10b_0_exdes.v

        demo工程的顶层

(2)aurora_8b10b_0_frame_gen

        数据帧生成模块,对外使用ll接口

(3)aurora_8b10b_0_ll_to_axi_exdes

        ll接口 —> aurora_8b10b IP核1 axi4-st tx

(4)aurora_8b10b_0.xci

        Aurora 8b10b IP核,demo工程中例化了2个Aurora IP核,IP核1的axi4-st tx —> IP核1的tx —> IP核2的rx —> IP核2的axi4-st rx

(5)aurora_8b10b_0_axi_to_ll_exdes

        aurora_8b10b IP核2 axi4-st —> ll接口

(6)aurora_8b10b_0_frame_check

        数据帧校验模块,对外使用ll接口

(7)tb

        TB中例化了双份demo工程:

Aurora 8b/10b AXI4-ST回环测试_第9张图片

Aurora 8b/10b AXI4-ST回环测试_第10张图片

         例化的两个demo做了回环配置,每个demo都是1条Lane。

3.2 demo仿真工程优化

        由于demo工程中多的两个总线转换模块(aurora_8b10b_0_ll_to_axi_exdes和aurora_8b10b_0_axi_to_ll_exdes),分析起来有些冗余,我们对demo工程进行优化测试,这里省去这两个总线转换模块。将原先的数据流:aurora_8b10b_0_frame_gen —> aurora_8b10b_0_ll_to_axi_exdes —> aurora_8b10b_0.xci —> aurora_8b10b_0_axi_to_ll_exdes —> aurora_8b10b_0_frame_check,改为:aurora_8b10b_0_frame_gen —> aurora_8b10b_0.xci —> aurora_8b10b_0_frame_check。数据流直接采用AXI4-ST进,AXI4-ST出。测试结果:

Aurora 8b/10b AXI4-ST回环测试_第11张图片

        进Aurora的数据,与出Aurora的数据进行对比校验,无误。

        这里我们重点分析改写后的aurora_8b10b_0_frame_gen模块和aurora_8b10b_0_frame_check模块。

3.2.1 aurora_8b10b_0_frame_gen

(1)我们通过状态机控制Framing接口的s端:

Aurora 8b/10b AXI4-ST回环测试_第12张图片

 (2)帧长从8'h01累加至8'hff,第8'h01帧包含1个16bit数据。。。第8'hff帧包含8'hff个16bit数据:

Aurora 8b/10b AXI4-ST回环测试_第13张图片

 (3)使用种子值16'hABCD,按照下图中的计算公式产生测试用的伪随机数16位的data_lfsr_r:

 (4)将16位的伪随机数赋给16位的AXI4-ST数据:

Aurora 8b/10b AXI4-ST回环测试_第14张图片

Aurora 8b/10b AXI4-ST回环测试_第15张图片

         Aurora IP初始化完成产生CHANNEL_UP信号后,使用USER_CLK做了5'h1f * USER_CLK的复位延时。

3.2.2 aurora_8b10b_0_frame_check

(1)我们通过状态机控制Framing接口的m端:

Aurora 8b/10b AXI4-ST回环测试_第16张图片

 (2)将接收到的AXI4-ST数据,与计算的伪随机数w_random_data进行对比,检验二者是否一致。

Aurora 8b/10b AXI4-ST回环测试_第17张图片

Aurora 8b/10b AXI4-ST回环测试_第18张图片

Aurora 8b/10b AXI4-ST回环测试_第19张图片

        注意:Aurora 8b/10b的初始化时间无法修改,每次仿真需要等到初始化完成(CHANNEL_UP拉高)之后才能正常通信,这个耗时相对较长,仿真一次差不多15min左右;如果例化的是2条Lane,那么仿真的时间会相应的增加。

3 上板调试

3.1 单板自环测试

(1)Near-End PMA

Aurora 8b/10b AXI4-ST回环测试_第20张图片

Aurora 8b/10b AXI4-ST回环测试_第21张图片

Aurora 8b/10b AXI4-ST回环测试_第22张图片

Aurora 8b/10b AXI4-ST回环测试_第23张图片

 (2)Near-End PCS

Aurora 8b/10b AXI4-ST回环测试_第24张图片

Aurora 8b/10b AXI4-ST回环测试_第25张图片

Aurora 8b/10b AXI4-ST回环测试_第26张图片

3.2 两块板卡回环测试

        将两块板卡的光口用光模块进行互联,设置loopback为非自环模式,在线调试结果校验无误。

(1)板卡1

Aurora 8b/10b AXI4-ST回环测试_第27张图片

 Aurora 8b/10b AXI4-ST回环测试_第28张图片

 Aurora 8b/10b AXI4-ST回环测试_第29张图片

 (2)板卡2

Aurora 8b/10b AXI4-ST回环测试_第30张图片

 Aurora 8b/10b AXI4-ST回环测试_第31张图片

 Aurora 8b/10b AXI4-ST回环测试_第32张图片

3.3 调试小结

        frame_gen S端的AXI4-ST总线信号中,valid、ready、last右边沿需要保证对齐,否则会导致frame_check M端接收到的AXI4-ST数据与生成的伪随机数校验错误。

你可能感兴趣的:(高速接口,fpga开发)