如何使用1G/10G/25GSwitching以太网IP切换速率

作者:Gary Pan,AMD赛灵思工程师

Xilinx提供了一个1G/10G/25G Switching以太网IP,该IP可以动态切换为1G以太网或者10G/25G以太网,它们共享同一个GT/SERDES端口。其对应文档为PG292:https://www.xilinx.com/products/intellectual-property/1g-10g-25ge.html

这个IP目前仅支持比较新的器件,如UltraScale/UltraScale+,Versal;如果需要使用7系列器件,可以到Xilinx主页搜索参考设计XAPP1243;又或者,如果想有更大的设计修改余地,而不想用IP,那UltraScale/UltraScale+也有参考设计XAPP1307

1G/10G/25G Switching以太网IP的结构:

以太网IP的结构.png

实际上,这个Switching IP内部,直接调用了,另外两个Xilinx以太网IP core,分别是10G/25G Ethernet Subsystem IP和1G/2.5G Ethernet PCS/PMA or SGMII IP,然后共享了用户侧数据接口,和物理层GT端口。当需要切换速率的时候,IP只需要用选择器选择,走的是10G/25G IP还是1G IP,同时通过GT的DRP端口,动态切换GT的线速。

也正因为是这样的结构设计,对于一些更细致具体的信息,如1588功能或者寄存器定义,可以在10G/25G IP文档PG210,以及1G IP文档PG138或PG047里面找到。

如何手动切换IP的速率:

手动模式下,Switching IP通过信号“ctl_core_speed_sel”来配置你所期望的速率,通过信号“stat_core_speed”来观察当前IP的速率。
实际上,产生一个Switching IP的例子工程,例子提供了手动切换速率的示例,直接跑功能仿真就能看到。例子工程手动切换速率的流程为:

1. 首先拉高代码里的“mode_change”信号,开始切换

2. 接着例子代码就会写IP的寄存器,修改“ctl_core_speed_sel”为需要的速率

3. 并且自动通过GT的DRP接口,修改GT的参数,动态切换端口线速率

4. 最后等待以太网IP的link up

对应例子工程代码如下:

对应例子工程代码.png

对应仿真截屏:

对应仿真截屏:.png

如何使用以太网的自协商功能,自动切换IP的速率:

首先,需要使能IP的自协商功能,以10G/25G以太网IP为例,拉高信号“ctl_autoneg_enable”,拉低信号“ctl_autoneg_bypass”,并且两端的以太网要设置不同的AN Nonce Seed的值,这样10G的自协商就可以自动成功完成。

要注意的是,无论是10G/25G还是1G的以太网协议,都要求两端同时打开自协商,或者同时关闭自协商,两端才能link up;一端开一端关的话,自协商是无法成功的。

接下来,如果10G/25G的自协商失败了,例如对端其实是一个1G的以太网器件,那么自协商状态机会走到Parallel Detection状态,Switching IP就会自动切换速率到1G,再进行下一步操作。PG292对自协商速率的流程有如下描述:

A block diagram of the 1G/10G/25G Ethernet Subsystem with Auto-Negotiation (AN) with Parallel Detection (PD) is shown in the following figure. The Parallel Detection is done inside the AN RTL, which is encrypted. As a result of PD, only the AN is resolved to 1G speed.

这里提到的Parallel Detection就是源自IEEE802.3协议关于10G以太网自协商定义的那部分,状态机跳转里的一个状态;当10G自协商不能成功,状态机就会跳到这个PD状态。有兴趣的可以打开IEEE802.3的Clause 73章节了解进一步的详情。

整个流程,从仿真里看,如下截屏:

整个流程.png

由于以太网自协商的过程中,里头的状态都有计数器时间定义需要等待,所以在仿真里需要很长很长时间才能完成,因此并不建议自协商做功能仿真。

以上就是1G/10G/25G Switching以太网IP的手动和自动两种切换速率的原理和方法。

最新文章