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

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

3天内不再提示

FPGA SGMII接口前导码小于7个字节55的解决方案

454398 来源:网络交换FPGA 作者:网络交换FPGA 2020-11-19 16:17 次阅读

在使用Xilinx FPGA芯片中SGMII IP核进行千兆以太网调试时,经常会遇到以太网接口收到的前导码长度不足7个字节55的情况,但这种情况确实正常现象。这就要求在设计代码处理前导码时不能将55的个数作为判据,而是只要有55转换为D5,就应该认为前导码接收成功了。不了解前导码的同学可以参看文章《你见过物理层的以太网帧长什么样子吗?》

SGMII接口基本功能测试

SGMII接口(开启自协商)调试分为三个步骤,先测试SGMII最基本功能仿真、再测试SGMII最基本功能自回环上板、最后直接测试开启自协商功能后上板

1、测试SGMII基本功能仿真:

(1) 打开sgmii IP,将接口选择为sgmii接口,关闭MDIO接口,其它选项默认,生成IP核;

(2) 根据IP核生成example design,将speed_is_10_100、speed_is_100设置为0(1000Mbps模式),将configuration_vector设置为5‘b00010(关闭SGMII自协商,开启PMA回环,具体参考手册63页table2-39),将userclk2作为跟GMII接口同步的时钟(用来驱动MAC GMII接口侧,也可以用来驱动其它模块);

(3) 开启仿真,测试自回环(也可以通过修改参数测试外环或2个SGMII互通),一般PMA回环要3.1ms左右才能通,外环或互通要3.5ms左右;

(4) 仿真时会发现gmii_rxd信号每隔一帧数据会少一个时钟的前导码如图1,这个不用担心,为正常现象,1G MAC仍然能正常接收数据,产生这个的具体原因不详(手册有介绍,不过内容偏向于底层编码原因,具体不太了解,手册只是简单说明了一下表面原因,手册221页说明此问题),同时有的数据帧gmii_rx_dv信号拉低后gmii_rx_er信号会拉高一个时钟(对应的gmii_rxd数据为8‘h0f),如图2,这个也不用担心,手册224页对其有说明(具体说是为帧扩展),由于gmii_rx_er拉高处gmii_rx_dv拉低,所以不是帧错误(此处需要适当修改原版1G MAC的代码,使1G MAC中gmii_rxd、gmii_rx_dv、gmii_rx_er同步打拍,原设计中没有同步打拍)。

图1

图2

注意:SGMII开启自协商后要仿真非常长时间才能互通(8.1ms),因此推荐直接上板。

2、测试SGMII基本功能上板:

(1)SGMII接口的independent_clock默认是200MHZ,可以用PLL生成,也可以查阅手册修改IP内部参数来设置为其它频率,具体修改参考手册36页描述(修改后如何操作IP参考RapidIO调试手册),只需修改一个参数就可以(修改时钟频率会影响仿真通过时间),如图3;

(2)上板主要是测试PMA回环版(自带激励源),设置好约束文件,抓取关键信号,直接生成bit文件,上板测试,如果没有通,看status_vector信号,查阅手册65页table2-41,查找原因。

图3

3、测试SGMII自协商功能上板:

(1)将configuration_vector参数设置为5‘b100x0(开启自协商功能,x表示可以测PMA回环,也可指直接接PHY进行测试),自协商参数使能信号an_restart_config设置为0(该信号上升沿代表自协商参数an_adv_config_vector有效,an_restart_config为0表示使用默认参数,如果想手动配置自协商参数,可以查阅手册64页table2-40);

(2)生成bit文件并上板测试,并观察状态信号status_vector。

RGMII或SGMII调试中正常的“异常”问题

1、参考资料

《pg047-gig-eth-pcs-pma》
《88e1512 data》
《AR8033d》

2、以太网接口使用场景介绍

《88e1512data》PHY芯片手册中,标准的RGMII、SGMII接口的使用场景如下两图所示:


实际上,此处的10/100/1000Mbps Ethernet MAC代指的是标准的SGMII接口的MAC核和标准的RGMII接口的MAC核。而实验室所用的MAC核为GMII接口形式的MAC核,因此实际上我们的应用场景变成了如下的两图:


此处的IDDR/ODDR原语、SGMII核主要功能是为实验室MAC核提供标准的千兆GMII接口形式的数据源。在实验的接口调试中,由于PHY芯片的各个功能模式设置、XILINX官方的SGMII核和IDDR/ODDR原语的特性不同,可能会出现一些问题。

3、PHY芯片功能模式设置

正常情况下,我们常用的PHY芯片功能模式有以下:
• 全双工/半双工模式
• 千兆/百兆/十兆模式
• 自协商速率/固定速率
• RGMII/SGMII模式
• 交叉线/直连线模式

交换机出现无法连接网口(连接指示灯熄灭)、数据收发错误等问题时,可以通过VIO、MDIO来读取PHY芯片相应功能的寄存器的值,来确定功能模式配置是否出现问题。

4、RGMII千兆模式常见问题

此问题详细描述见文章:RGMII接口调试使用VIO读取PHY寄存器值

标准的RGMII千兆接口,时钟周期为125MHz,但是数据位宽为4位,采用在时钟的上下边沿采样的方式,得到1Gbps带宽,正常工作状态的发送时序图如下所示:


为了确保数据采样的正确,时钟的边沿必须在数据的中间进行跳变。为了实现这种发送模式,在数据发送时,控制发送时钟,使其偏移90度(即延后2ns)。

但是有的PHY芯片中,可以选择不同的工作模式,使得控制时钟偏移2ns或者不偏移2ns(《88e1512》P252)。如果PHY芯片的工作模式是偏移了2ns,那我们就不用作偏移了,否则可能正好导致时钟边沿和数据跳边沿对齐,出现错误;如果PHY芯片的工作模式是不偏移,则我们需要手动控制时钟的偏移。RGMII数据的读取同理,具体情况需要阅读相应的PHY芯片手册。

5、SGMII千兆模式下常见的“异常”问题

参见《pg047-gig-eth-pcs-pma》P219,Xilinx官方的SGMII的IP核转换出的GMII格式数据可能会出现两种问题:
• 以太网数据帧帧头部分丢失一个前导码;
• 以太网数据帧FCS域结束后,tx_er信号拉高。

丢失前导码情况,如下图所示:


在这种情况下,前导码由7个55,1个D5,变成了6个55,1个D5。某些MAC核是根据55跳变到D5这种情况下作操作的,所以数据直接进MAC核,不会出现问题。但是,在TTE交换机中,分流模块、TT平面,可能是根据gmii_tx_en信号的上升沿开始作计数,从而提出TT_ID、TYPE/LENGTH域等数据,这就可能导致错误。并且,以太网帧发送时,需要发送7个55,1个D5格式的前导码。因此,我们接收到这种数据帧时,需要将前导码补齐,再将数据帧送入后续模块进行处理。

FCS域结束后,tx_er信号拉高,如下图所示:


由于可能的设计缺陷,某些MAC核,会将这种数据帧当作错误帧丢弃。解决办法是,在数据帧的接收部分,对tx_er信号进行处理,当rx_dv信号为高时,tx_er仍然保持原值,当rx_dv信号为低时,tx_er信号直接置零。

编辑:hfy


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

    关注

    1627

    文章

    21679

    浏览量

    602172
  • 以太网
    +关注

    关注

    40

    文章

    5389

    浏览量

    171212
收藏 人收藏

    评论

    相关推荐

    CC1125前导码设置导致无法正常通信?

    CC1125 我想通过信号源测试我的接收灵敏度,由于信号源只能发送0101码,因此我必须把前导码和同步字全部设置成0xAA或者0x55,但是我一旦全部设成0xAA或者0x55就无法正常通信,能不能告诉我这是什么问题,是不是还别的
    发表于 03-10 10:02

    CC1125前导码设置问题导致无法正常通信?

    CC1125前导码设置问题导致无法正常通信?CC1125 我想通过信号源测试我的接收灵敏度,由于信号源只能发送0101码,因此我必须把前导码和同步字全部设置成0xAA或者0x55,但是我一旦全部设成0xAA或者0x
    发表于 03-10 10:05

    CC1310的前导码是否支持设置成其他形式?

    如题道CC1310的前导码是否支持设置成其他形式,例如00100010...CC1310的前导码,在参考手册中发现可以设置成01010101... 或者10101010...。
    发表于 03-24 15:07

    关于CC1310前导码设置

    你好: 关于CC1310的前导码,在参考手册中发现可以设置成01010101... 或者10101010...。 我想知道CC1310的前导码是否支持设置成其他形式,例如00100010... 谢谢!
    发表于 05-14 01:14

    CC1125,发射模块的前导码设置成0xAA、0x55、0x33、0xCC中的一种,那接收模块的前导码也要设置相同才能正常通信吗?

    您好,我开发cc1125,SmartRF Studio 7软件内有关于前导码的设置,PREAMBLE_CFG1 (0x000D)0x14PREAMBLE_WORD0x00R/WPreamble
    发表于 05-15 13:20

    请问sx1278 lora模块前导码在程序中怎么设置

    我在研究lora模块,遇到一问题解决不了,就是前导码在程序中怎么设置。无限感激
    发表于 01-17 06:35

    I2C前导码问题

    如果我想发送字节地址而不是字地址,那么如果我将SDK代码更改为下面的代码,那么下面的示例代码的更改是否有效?SDK中的示例代码,前同步码。长度=4;前导码。缓冲器〔0〕=DeDADDR;前导码
    发表于 04-25 15:09

    CC1120前导码长度怎么降低平均电流?

    平均电流,希望控制在40uA一下,怎么实现?前导码长度30个字节已经达到最大长度了,已经没法通过增长前导码来降低平均功耗了,还有什么其他方法来降低功耗?
    发表于 03-30 10:54

    UART 发送数据丢失最后一个字节

    STM32 UART 发送数据丢失最后一个字节
    发表于 12-04 15:10 0次下载

    基于前导码挖掘的未知协议帧切分算法

    针对未知协议帧切分技术存在的效率较低的问题,提出基于前导码挖掘的未知协议帧切分技术。首先介绍前导码作为标识链路帧起始位置的原理,分析候选序列选取问题是现有频繁序列挖掘方法无法对长度较长的前导码进行
    发表于 12-06 16:53 0次下载
    基于<b class='flag-5'>前导码</b>挖掘的未知协议帧切分算法

    关于UART发送数据丢失最后一个字节问题的详细解析-pdf

    STM32 UART_发送数据丢失最后一个字节
    发表于 04-10 11:23 3次下载

    Zynq-7000 SoC和7系列FPGA设备内存接口解决方案资料说明

    Xilinx Zynq-7000 SOC和7系列FPGA内存接口解决方案核心提供了到DDR3和DDR2 SDRAM、QDR II+SRAM、RLDRAM II/RLDRAM 3和LPD
    发表于 02-25 17:24 18次下载
    Zynq-7000 SoC和<b class='flag-5'>7</b>系列<b class='flag-5'>FPGA</b>设备内存<b class='flag-5'>接口</b><b class='flag-5'>解决方案</b>资料说明

    浅谈STM32串口通信(一)基本介绍和一个字节传输的实现

    文章目录0 传输引脚1 传输一个字节1.1 发送一个字节1.2 接收一个字节2 代码2.1 配置2.2 发送一个字节2.3 接收一个字节0
    发表于 12-24 18:51 14次下载
    浅谈STM32串口通信(一)基本介绍和一<b class='flag-5'>个字节</b>传输的实现

    认识以太网帧的整个结构

    当你需要使用千兆网发送数据的时候,你需要先传输8字节前导码,也就是7个字节的0xAA和1个字节的0xAB
    的头像 发表于 06-19 14:59 1566次阅读
    认识以太网帧的整个结构

    UART发送数据丢失最后一个字节

    电子发烧友网站提供《UART发送数据丢失最后一个字节.pdf》资料免费下载
    发表于 08-01 17:57 1次下载
    UART发送数据丢失最后一<b class='flag-5'>个字节</b>