取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

如何调试10G/25G以太网IP自协商/Link Training

yolanda
Moderator
Moderator
0 0 640

BY Gary Pan

注意:本论坛博客所有内容皆来源于Xilinx工程师,如需转载,请写明出处作者及赛灵思论坛链接并发邮件至cncrc@xilinx.com,未经Xilinx及著作权人许可,禁止用作商业用途 


  • 此调试过程亦适用于10G,25G,40G,50G,100G以太网IP核,每个IP可能会有些细节上的不同,但整个自协商和Link Training过程是类似的,可以作为参考。
  • 如果是40G/50G,100G以太网,选的是多通道的IP,务必保证两端的通道0是正确对接上的,因为在做自协商的时候,以太网只使用通道0,其它通道需在自协商完成后再加入工作。

 

一.产生一个例子工程仿真

打开你的Vivado工具,选择你所需要的器件类型,在IP Catalog里产生一个10G/25G Ethernet Subsystem IP core,勾上BASE-KR和Include AN/LT Logic以涵盖IP自协商功能

(这里为方便起见,选择了Control and Status Vectors接口,这样IP的配置可以通过在代码中直接用逻辑赋值IP的input输入来完成;如果你需要选用AXI接口进行寄存器配置,请参考例子工程的各项配置,自己相应地写好对应寄存器值)

右键IP的.xci,Open IP Example Design

1.png

例子工程产生出来之后,我们需要做一些简单的修改,因为原始的例子工程仿真里面,没有做自协商的演示。

1.       修改顶层代码“xxv_ethernet_0_exdes.v”,使能自协商功能,并且将AN的seed信号引到输入port上,方便之后修改,如下图

2.png

2.       修改tb文件,原来tb只调用了一个IP自己做环回,我们需要再复制一个,改成两个IP互联,将两者的串行数据txp/txn和rxp/rxn对接起来;新加的IP,输入可以跟原来那个共享保持不变,输出可以悬空;最后将之前拉出来的AN的seed值任意设置为两个不同的值即可(这是IEEE协议的要求,PG210中有相关描述)

3.png

3.       在开始仿真前,请取消“Use Precompiled IP simulation libraries”的勾,并加上“-d SIM_SPEED_UP”的vlog选项,以加速完成你的仿真,便于查看仿真结果。

然后,点击Run Behavior Simulation

4.png5.png

 

二.自协商与Link Training的调试过程

*以下整个调试过程同时适用于仿真与上板,上板时可以用ILA抓出相同的信号来进行调试

6.png

a.       随着tx_disable拉高一个脉冲,标志着以太网的自协商状态机正式开始运行;上电,复位IP或两端任一端复位AN,都会导致这一行为的发生。

b.       自协商的工作完全由IP自动完成的,所以只要配置没问题,你只需要耐心等待就可以看到自协商的完成,以an_good_check为标志,并且进入下一步link training

c.       在LT的过程中,首先你要等到IP能够锁定LT帧,即frame_lock拉高,然后你就可以进行你自己的LT算法了,与AN不同LT是由客户手动完成的。

不过由于Xilinx的Serial Transceiver能够提供非常好的信号质量,因此我们建议用户如果两端用的都是Xilinx的器件,可以直接跳过此步骤,将输入信号rx_trained拉高。

d.       无论你是做完了自己的LT测试,还是直接跳过了此步骤,当两端都拉高了自己的rx_trained之后,就可以等待LT的完成标志signal_detect拉高

e.       最后autoneg_complete拉高代表了整个自协商和Link Training的流程都成功完成了,此时IP恢复到与BASE-R模式完全相同的工作模式

f.        等待block_lock, stat_rx_status等信号拉高,以太网IP最终完成了link up

*具体AN/LT的步骤(包括状态机)可以同时参考IEEE协议的定义。

*以上这些IP标志信号的命名,与以太网协议定义的AN/LT状态机中状态信号命名基本保持一致,方便客户在协议中找到对应的涵义。

 

三.调试建议

当你在实际应用中,无法完成自协商时,可以分步来做调试;首先关闭两端的AN/LT,以太网是否能完成link up,并且传输数据无误码;然后分别打开AN关闭LT,或者打开LT关闭AN,是否都能link up,哪个失败就具体调试哪个部分;最后全部使能,检查link结果。