Xilinx Ten Giga Sub System IP 使用

IP核描述

10 Giga Ethernet Sub System , 参考文档PG157:

https://www.xilinx.com/support/documentation/ip_documentation/axi_10g_et...

IP核提供一个MAC模块和一个PCS/PMA模块,PCS/PMA模块支持10GBASE-R/10GBASE-KR。客户端接口协议为AXI4 Stream,有32bits和64bits两种位宽,对于10GBASE-R,32bits位宽接口有着低延迟和低资源消耗的优势。AXI4-lite为可选接口,用于配置IP核内部寄存器。IP核支持DIC机制,支持Vlan和jumbo帧,支持客户定制Preamble。支持BASE-R上的1588时钟机制(onestep & two step)。

IP核总体框架如下图所示:

IP核生成

按如下步骤生成IP核:






在生成IP核过程中有如下几个注意点:

1. MAC option模块中去除了AXI4-lite选项。此接口是连接至CPU接口的配置接口,这里去除是因为不知道CPU配置接口支持什么协议,在去除了这组接口后,IP核会将配置寄存器全部作为一组vector呈现在IP核端口上。

2. KCU105模块两个XG口的Transeiver绑定的x0y9和x0y10,所以选择其中之一即可(根据板子的具体情况去选择)。

3. Shared Logic在Core和example中的区别就是GTHCHANNLE3在Core外面还是Core里边。如果不是做级联只用1个Core,那么就放在core里。

IP核仿真

这个IP核的仿真网表文件(axi_10g_ethernet_0_sim_netlist.v)是坏的,不能用来进行仿真,仿真现象是Core接口上很多输出是高阻。如果要仿真,则必须使用如下文件:

Sync目录下的axi_10g_ethernet_0.v;

bd_0文件夹中的内容。

Example设计中提供了一套验证环境,验证顶层文件为: axi_10g_ethernet_0_demo_tb.v。

这里需要注意的是:

时间单位是1ps,精度也是1ps,serdes上是按66bits块串行打码流,那么比特周期就是6400/66,由于除不尽,就用了98这个整数,那么ref_clk就不能是6400了,所以这里的ref_clk是66*98.。如果不按这种处理,IP核在仿真时就不能link上,从RxGMII接口上看就是一直有link fault,码流是坏的。

仿真平台框图如下图所示:

Bench支持两种模式:

1. DEMO模式,这种模式下必须开启address swap功能,激励是从rx串行端口灌进去的,在PktGen模块中通过Axi4-Stream环回。

2. BIST模式,激励从Xgmii TX端口灌进去,在串行端口环回。

接口解析

以64bits位宽为例

1. client Tx Interface

1.1. TX Normal

信号在tready为高时才能传输,当tready为低时数据必须保持到tready为高时发出,DA的第一个字节必须在数据通道0上,tlast表示传输的最后一片,有效字节靠tkeep来标识。

1.2.TX In band FCS padding

Core可以配置成in-band FCSpassing,意思是在包的尾部跟CRC,32个比特。当Core没有配置成这个模式时,如果client发了小于46Byte的payload,Core能自动padding,将包长度padding成符合以太网最小包长的包。如果配置了in-band FCS padding,则client需要保证最小包长,如果没有提供符合要求长度的包,则core在FCS后padding,并表示这是个无效包。

1.3. TX Abording Transmissio

假如要终止一次传输该怎么做?

在client interface处终止一个包的传输操作称为underrun,这种情况发生时由于在整包传输完成前发送端口处FIFO空了,有两种情况:

a. 在txvalid有效的情况下将tx_tuser置起。断包必须要有DA,SA,L/T域。

b. 包尾处tx_tlast没有置起。


1.4. Back to Back

1.5. 自定义Preamble

就是在DA前将8字节Preamble加上。根据IEEE802.3规定,Strat必须在第0条数据通路上。分不连续传输和连续传输两种,分别如下图所示。


1.6. Vlan Tag Frame

提供Vlan Tag传输功能,客户端需提供8100tag标志。传输时序如图所示。

Vlan Tagged

Q in Q Vlan Tagged

1.7.Jumbo 帧传输

设计默认disable此功能,在此功能被关闭时若client传输超长帧,超长帧将被truncated,error code被插入显示此帧错误。

1.8. IPG 更改

你可以通过配置选择各种长度的IPG。通过ifg_delay_value来延迟XGMII column,Core产生反压来延迟下一帧的传送。

1.9. DIC机制

发送端支持DIC机制,有FCS和无FCS两种情况下均支持。Tx_valid必须持续为高保持数据传输最大效率化。

1.10. Link Fault

Core收到local/remotefault或者link interrupt时,在寄存器FaultInhibit被关闭的情况下,Core不会发送任何帧,Core中的RS层会被使能,当RS层收到LocalFault或者link interrupt ordered set,Core将发送Remote Ordered Sets.当收到Remote Fault 序列时,Core将发送IDLE。

2. RX Client Interface

2.1.Normal Reception

rx_axis_tvalid为高表明接收数据有效,keep指示8条通路中有效的通路,这里要注意的是data是从最低为开始assign数据的,所以,最后一片数据的keep[0]一定为高。tx_usr为高持续一个时钟周期,表明收到的数据帧有效。

2.2. good frame or bad frame

传输的最后一片数据至少得有一个Byte有效,keep不能为0;

传输的实际帧帧长比length域显示的大,则在FCS –PASS功能没有打开的情况下,多出来的会被当做padding而被移除;

Lenth域小于46,收到实际报文不满64,如果lengthcheck没有关闭的情况下,这个帧被标记为坏帧.

2.3. Frame reception with errors

接收错误报文(runt或者不正确crc)

错误帧产生因素:

1. FCS ERROR

2. 小于64Byte 的帧

3. 在jumbo帧功能没有使能的情况下收到jumbo帧

4. 设置了MTU,收到的帧比设置的MTU大并且jumbo帧功能没有使能

5. 长度/类型字段是长度,其中长度值小于46。在这种情况下,需要padding。如果没有padding,这时这个帧就是错误帧。

6. 长度/类型字段是长度,其中长度值是46或更大,但是真实的接收帧的长度不匹配或超过长度/类型字段中的值

7. 在没有禁用控制帧长度检查功能时,收到的控制帧长度小于最小帧长度;

8. XGMII code中有ERROR

9. 有效pause帧,因为其已经被MAC逻辑使用;

2.4. Reception with FCS passing

如果FCS check failed ,则last为高时user信号为低;

2.5. Reception with Preamble

就是preamble出现在stream接口上,同TX

2.6. 带Vlan Tag

Vlan Tag使能,接收端会出现Vlan域,最大包长变成1522B

2.7. 超长帧传输

设置MTU(Max TransmitUnit)的值必须大于1518,jumbo 帧功能需要打开;

文章来源:蜀黍设计验证

推荐阅读