0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解Xilinx的10G PCS PMA IP

FPGA技术江湖 ? 来源:数字站 ? 2025-04-18 15:16 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

来源:数字站

设计的灵魂是算法,而FPGA的终点是时序,首先还是帮韩老师推荐一下他将要发布关于FPGA时序约束的书籍。易灵思FPGA在资源利用达到百分之八十左右能跑到500MHz,实力怎么就不需要过多赘述了。

如果要在Xilinx的FPGA上使用万兆以太网通信,大致有三种方法构建协议栈。第一种使用GTX等Serdes作为底层的PHY,上层通过HDL实现构建MAC和IP层,这种方式难度会比较大,底层需要完成PHY层的设计,最终我想通过这种方式实现万兆以太网的搭建。

第二种是通过Xilinx提供的10G PCS PMA作为底层的PHY,用户通过HDL实现MAC层和IP层的设计。难度相比第一种会低一点,能够清晰的学习到MAC层、IP层、ARP协议、ICMP协议、UDP协议内容。

第三种是使用Xilinx提供带有MAC层的IP,这种方式用户只需要阅读手册,给IP提供收发的数据即可,没有什么难度,对于学习没啥作用。

目前先通过10G PCS PMA作为PHY层,熟悉MAC层以及之上的设计,整个协议跑通之后,在把底层的PHY用GTX取代,从而实现第一种设计。

01概括10GBASE-R/KR

下图是10G PCS PMA的使用原理,上层通过XGMII接口与用户逻辑的MAC层交互数据(MAC层可以用户自己设计,也可以使用官方的MAC层IP),接收的用户数据经过内部PCS PMA处理后,通过Serdes接口输出到光纤,与接收端的设备进行通信。pYYBAGORftaABrbPAAAAjgjvZ2U927.jpg

wKgZO2gB_HOAKRUrAAC4SZC401Q831.png

图1 使用XGMII接口连接到MAC内核的内核

10G PCS PMA可以通过参数设置该PHY层工作在10GBASE-R还是10GBASE-KR的模式下。

下图是10GBASE-R的内部框图,10G以太网使用64B66B进行编码,10GBASE-R内核其实就是在Serdes的基础上封装得到的。如果看过前文GTX自定义64B66B的PHY层协议设计的同学,关于下面的设计应该会比较熟悉。

同样都包含加扰、解扰、接收端字对齐、变速器等等,这里的64B66B编码和解码模块应该是将XGMII接口协议转换为Serdes 64B66B的接口协议。

wKgZO2gB_HOAfpRBAAE3pK1PdoQ209.png

图2 10GBASE-R内核框图

在接收端有一个弹性缓冲器(Elastic Buffer),深度为32个字(1个字包含64位数据和8位控制字符),起到时钟纠正的作用。

允许在缓冲区溢出(和字被丢弃)之前最多存储64个时钟校正(CC)序列,缓冲器通常填充到一半,然后当超过一半时删除CC序列,当低于一半时插入CC序列。

因此,在半满状态下,可以(保守地)接受额外的360 KB数据(以+200 ppm的速率接收),而不会丢失任何数据。

10GBASE-KR内核框图如下所示,相比10GBASE-R内核增加了链路训练模块以及可选的自动协商(AN)和前向纠错(FEC)功能,以支持背板上的10 Gb/s数据流。pYYBAGORftaABrbPAAAAjgjvZ2U927.jpg

wKgZPGgB_HOAWnoZAADUj7XtbQ0405.png

图3 10GBASE-KR内核框图

02XGMII接口时序

在前文讲解过XGMII接口并不适用于芯片之间的高速通信,但是在FPGA内部是一个比较好用的接口,因为FPGA内部数据位宽大一点是没有太大关系的。

前文讲解的芯片间的XGMII接口如下所示,接收端和发送端采用32位双沿传输的数据线通信。pYYBAGORftaABrbPAAAAjgjvZ2U927.jpg

wKgZO2gB_HOAEStYAACBV5VwYkw656.png

图4 芯片间的XGMII接口

但是FPGA内部逻辑只支持单沿传输,因此10G PCS PMA给用户提供的XGMII接口是单沿传输数据的。为了保证带宽不变,收发数据位宽有64位和32位两种可选,其中10GBASE-KR只支持64位数据位宽。

2.164位数据位宽

下表是64位数据位宽的XGMII端口信号,8位控制位。控制位的高电平表示数据信号对应字节为控制位,低电平表示数据信号对应字节为数据位。

表1 64位的MAC端接口端口

信号名 I/O 含义
xgmii_txd[63:0] I 发送端接口数据信号。
xgmii_txc[7:0] I 发送端的控制信号,高电平指示控制位,低电平指示数据位。
xgmii_rxd[63:0] O 接收端接口数据信号。
xgmii_rxc[7:0] O 接收端的控制信号,高电平指示控制位,低电平指示数据位。

下图是通过64位接口发送数据帧的时序,数据帧的开始由起始字符(下图中通道4的/S/)表示,后面5、6和7字节发送数据字符。

万兆以太网规定起始位/S/可以位于第一字节,也可以位于第四字节。

图中的I是空闲字符,注意在xgmii_txd对应字节为控制字符时,xgmii_txc对应的控制位为高电平。在xgmii_txd对应字节为数据字符时,xgmii_txc对应的控制位为低电平。

由下图可知,XGMII接口先传输低字节数据,后传输高字节数据。因此起始字符所在数据的低5字节为控制字符,发送起始字节/S/后,开始传输数据,高三字节为数据,对应的xgmii_txc的值为8’h1f。

wKgZPGgB_JaACISjAAHtk3fYZuM984.png

图5 64位xgmii发送数据接口时序

因为以太网可以传输任意字节包长的数据,停止位可以出现在任意字节的位置,上图中的/T/字符表示停止位。

在数据传输过程中,还可以发送/E/表示该字段是错误数据,如下图所示,这种情况一般不会使用。

wKgZO2gB_JaAZuzVAAI-IyC3RS4899.png

图6 64位xgmii发送数据接口时序

接收数据端口时序如下图所示,下图中是起始位处于第0字节的情况。

wKgZPGgB_JaAKL1XAAIpkm-1ibE408.png

图7 64位xgmii接收数据接口时序

下表将上述字符对应的取值列出,其中起始位S的值为8’hfb,停止位T的值为8’hfd,空闲字符I的取值为8’h07,且都是控制字符。

表2 XGMII字符的部分列表

名称(缩写) 取值(Hex) 控制字符取值
数据位(D) [8’h00,8’hff] 0
空闲位(I) 8’h07 1
起始位(S) 8’hfb 1
停止位(T) 8’hfd 1
错误位(E) 8’hfe 1

手册中给出了发送通道的延时(数据从输入xgmii_txd[63:0]传输到gt_txd[31:0]消耗的时间,不包括高速收发器内部的延时)。7系列FPGA的延迟为20个txoutclk周期,使能FEC功能后延时增加到26个txoutclk周期。

接收方向的延迟(数据从gt_rxd[31:0]传输到xgmii_rxd[63:0]上的时间)主要取决于弹性缓冲器的填充水平。延迟标称值为27.75个coreclk周期,当弹性缓冲达到最大时,延时为41.26个coreclk周期,延时这部分了解即可。

2.232位数据位宽

下表是32位数据位宽的XGMII接口信号,4位控制位,高电平表示数据信号对应字节为控制位,低电平表示数据信号对应字节为数据位。

表2 32位的MAC端接口端口

信号名 I/O 含义
xgmii_txd[31:0] I 发送端接口数据信号。
xgmii_txc[3:0] I 发送端的控制信号,高电平指示控制位,低电平指示数据位。
xgmii_rxd[31:0] O 接收端接口数据信号。
xgmii_rxc[3:0] O 接收端的控制信号,高电平指示控制位,低电平指示数据位。

下图是32位XGMII接口传输数据帧的时序,开始字符/S/只能出现在第1字节,后面的3字节为传输数据。数据传输完成后,发送停止位/T/,其余时间使用空闲字符填充。

wKgZO2gB_LyAB1fkAAGb-HPXBBg590.png

图8 通过32位XGMII接口的正常帧传输

接收端口的时序如下所示,与发送端口的时序基本一致,不过多赘述。

wKgZO2gB_LyAFerbAAGDRCZcnUw199.png

图9 通过32位XGMII接口接收帧

7系列器件发送通道上XGMII接口的延迟(数据从输入xgmii_txd[31:0]传输到gt_txd[31:0]消耗的时间)为14个txoutclk周期。

而接收通道的延时范围在44.6~72个coreclk周期,具体取值取决于接收端弹性缓冲器当前的填充数据个数。

64位的数据端口的时钟频率为156.25MHz,而32位数据位宽的时钟频率为312.5MHz。FPGA内部常用大位宽数据接口,降低时钟频率,获得更好的时序,因此接口数据位宽选择64位会比较好。

03内核时钟分析

只要使用高速IP,就绕不开时钟,并且绕不开GTX的时钟,这也是前面在讲解GTX的时候,深度分析其时钟的原因。只要熟悉GTX内部各个时钟的关系,其余上层IP的时钟架构都很简单。

如果XGMII的数据接口选择64位,则7系列的FPGA必须给高速收发器提供156.25MHz的差分参考时钟(refclk_p/refclk_n端口)。如果是32位数据接口,则必须提供312.5 MHz的差分参考时钟。

下图是该IP的内核时钟结构,其中红框部分可以放置在示例工程中。内核时钟作为用户接口的时钟信号,就是输入的差分参考时钟信号。

wKgZPGgB_LyAdOFNAAFb4iREGr4013.png

图10 内核时钟架构

为什么上图中TXOUTCLK为322.26MHz?通过这个时钟生成uxrclk和usrclk2?

首先万兆以太网的是指在进行64B66B编码前的数据传输速率为10Gbps,经过64B66B编码之后,速率变为10Gbps / (64 / 66) = 10.3125Gbps,即万兆以太网的线速率为10.3125Gbps。

在前面讲解GTX的64B66B编码时,如下图所示,高速收发器的PCS内部并行数据传输的位宽为32位,即可算出usrclk的频率应该为10.3125Gbps / 32 = 322.265625 M Hz ≈ 322.26 MHz。

wKgZPGgB_LyAFKrIAAEjw6bT6Ag905.png

图11 GTX内部传输数据位宽

此处的TXOUTCLK通过BUFG之后直接作为txusrclk和txusrclk2,没有经过MMCM分频处理,还可以推测出高速收发器接收和发送的数据位宽同为32位。

为什么有上述推导,原因在讲GTX的时候都详解过,10G PCS PMA也不过是在GTX上封装而来,底层的时钟关系是不会变的,吃透GTX时钟关系即可以吃透所有上层高速IP的时钟关系。

现在已经讲解过Aurora、SRIO、10G PCS PMA的时钟架构都遵循GTX的时钟架构规则,后续的JESD204B依旧如此。

04其余接口

10G PCS PMA作为一个PHY层设计,内部也有很多的寄存器,用户可以通过MDIO设置内部寄存器的数值。但是一般保持默认即可,因此该接口的时序不做讲解,在讲解千兆网接口时,详解过MDIO接口时序,可以参考。

另外该IP可以通过DRP接口动态配置参数,如果不需要使用DRP接口,则将drp接口的所有信号与core_to_gt_drp接口对应信号相连,并将drp_req连接到drp_gnt,允许内核在需要时访问DRP,如下图所示。pYYBAGORftaABrbPAAAAjgjvZ2U927.jpg

wKgZO2gB_LyAc5N1AACk06Pi13U531.png

图12 DRP接口连接(无需访问)

05IP的功能信号与调试信号

下图是一个光纤接口的原理图,其中tx_fault、MODDEF0、LOS(信号丢失)都上拉到VCC,且没有连接到FPGA的管脚。

而10G PCS PMA建议将signal_detect(MODDEF0或非LOS)信号连接到VCC,tx_fault信号连接到GND。因此在调用IP时,直接把signal_detect赋值为1,tx_fault赋值为0,不与引脚相连。

同时10G PCS PMA提供了一个tx_disable信号,可以直接连接到光口。pYYBAGORftaABrbPAAAAjgjvZ2U927.jpg

wKgZO2gB_LyAFbsMAAF-ks3gQk8020.png

图13 光口原理图

该IP的发送端和接收端都有复位完成指示信号,reset_counter_done表示配置完成后已经过了500 ns。

另外还有一些10GBASE-R的控制信号和状态信号,如下表所示。特别注意仿真加速信号,在仿真开始时,必须给该信号提供一个上升沿(先拉低至少100ns后拉高),才能加速仿真,否则可能仿真半个小时也跑不出结果。

表3 控制端口信号

信号 I/O 含义
core_status[7:0] O [0]:PCS同步完成,[7:1]保留。
sim_speedup_control I 上升沿加速仿真。
pma_pmd_type[2:0] I 定义PMA/PMD类型,3’b111(10g base-SR),3’b110(10g base-LR),3’b101(10g base-ER)。

该IP还有一些控制信号configuration_vector[535:0]和状态信号status_vector[447:0]。这两个寄存器的每一位都有其特定含义,但用户只需要关注一些常用的数据位即可,其余的寄存器在使用时可以通过手册查看。

表4 部分状态及控制信号

信号 I/O 含义
configuration_vector[0] I 使能PMA回环模式。
configuration_vector[512] I 设置PMA链接状态。
configuration_vector[516] I 设置PCS链接状态。
status_vector[18] O 接收端的PMA连接状态。
status_vector[226] O 接收端的PCS连接状态。

关于10G PCS PMA的讲解到此结束了,通过以上介绍,足够简单使用该IP,后文将通过该IP构建万兆以太网的PHY层。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1646

    文章

    22074

    浏览量

    619764
  • 以太网
    +关注

    关注

    41

    文章

    5706

    浏览量

    176486
  • 接口
    +关注

    关注

    33

    文章

    9032

    浏览量

    153991
  • 光纤
    +关注

    关注

    20

    文章

    4163

    浏览量

    75497
  • Xilinx
    +关注

    关注

    73

    文章

    2185

    浏览量

    125738

原文标题:详解Xilinx的10G PCS PMA IP

文章出处:【微信号:HXSLH1010101010,微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Xilinx Ten Giga Sub System IP生成详细步骤

    /ip_documentation/axi_10g_et... IP核提供一个MAC模块和一个PCS/PMA模块,
    的头像 发表于 12-30 12:56 ?4474次阅读
    <b class='flag-5'>Xilinx</b> Ten Giga Sub System <b class='flag-5'>IP</b>生成详细步骤

    10G光模块知识:全面介绍10G光模块类型、参数

    `在互联数据和光网络高速发展的时代,100G光模块、200G光模块甚至400G光模块都在不断涌现。但是,高速有着高速的好处,低速也有着低速的优点。在高速光模块主流的年代,10G光模块以
    发表于 01-29 15:04

    10G光模块百科:详解10G光模块分类和应用

    `10G光模块作为一种低速光模块,在现在速率达到400G的光模块市场上已经很少人关注。但是400G有400G的应用,10G也有着
    发表于 05-29 14:52

    ISE 14.7中的IP核许可证警告

    处所附)。它还在位文件生成期间给出了一些警告消息。我在这里附加了完整的编译日志和xinfo。我在设计中使用的是10G MAC内核和10GBASE-R PCS / PMA内核。谢谢,维杰
    发表于 11-28 15:16

    ten_gig_eth_pcs_pma没有许可证,IP合成失败

    /10g/project_1.srcs/sources_1/ip/ten_gig_eth_pcs_pma_0/ten_gig_eth_pcs_pma
    发表于 11-28 15:21

    为什么连接到PCS PMA核心的10-GMAC核心不起作用?

    我按照给定的示例连接10千兆以太网MAC和10千兆以太网PCS / PMA,并使用光缆将其连接到10G网卡。问题是MDC信号不存在,链接没有
    发表于 03-15 14:53

    以太网100Base-X PCS/PMA如何实现

    我正在尝试实现以太网100Base-X PCS / PMA并下载xilinx的许可证,但这是针对“Virtex-5”而我需要一个“Spartan3E”并且我想知道如何正确实现它,可以帮助我请尽快
    发表于 05-10 14:29

    如何在主板上使用EMAC + PCS / PMA的设计?

    ://www.xilinx.com/products/boards-and-kits/EK-V7-VC709-CES-G.htm)上有一个附有图表的特色设计。环顾四周但找不到下载它的位置。有人可以从哪里下载?非常感谢任何在此主板上使用EMAC +
    发表于 09-19 06:26

    使用10G以太网MAC IP

    您好,如果我想使用10G以太网MAC IP核,那么可用的10G支持板。问候维诺德库马尔
    发表于 04-02 10:08

    使用VC 707开发板创建了一个10G基础PCS PMA内核如何检查回路?

    嗨,大家好,我正在使用VC 707开发板,我创建了一个10G基础PCS PMA内核,现在我想检查回路。但是在ug885_VC 707(用户手动)中共有5个时钟源页面没有281>
    发表于 07-28 08:59

    基于FPGA的光口通信开发案例|基于FPGA Kintex-7 SFP+光口的10G UDP网络通信开发案例

    Ethernet PCS/PMA IP核本案例使用10G Ethernet PCS/PMA
    发表于 01-21 19:24

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

    打开你的Vivado工具,选择你所需要的器件类型,在IPCatalog里产生一个10G/25GEthernet Subsystem IP core,勾上BASE-KR和IncludeAN/LT Logic以涵盖IP自协商功能
    的头像 发表于 09-03 09:57 ?1w次阅读
    如何调试<b class='flag-5'>10G</b>/25<b class='flag-5'>G</b>以太网<b class='flag-5'>IP</b>自协商/Link Training

    两个网络相关的开源项目详解

    堆栈的组件。包括用于1G10G/25G 的 MAC 模块、一个 10G/25G PCS/
    的头像 发表于 10-27 09:20 ?3245次阅读
    两个网络相关的开源项目<b class='flag-5'>详解</b>

    处理以太网帧以及IP,UDP和ARP的模块

    顶层千兆和10G MAC模块是eth_mac_ *,具有各种接口,并且带有/不带有FIFO。顶层10G PCS/PMA PHY模块为eth_phy_
    的头像 发表于 06-30 09:51 ?1376次阅读

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

    本文介绍1G/10G/25G Switching以太网IP的手动和自动两种切换速率的原理和方法
    的头像 发表于 07-10 16:29 ?2068次阅读
    如何使用1<b class='flag-5'>G</b>/<b class='flag-5'>10G</b>/25GSwitching以太网<b class='flag-5'>IP</b>切换速率