首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一种动态调整RGMII接口时序的方法

一种动态调整RGMII接口时序的方法

作者头像
网络交换FPGA
发布于 2019-10-29 09:58:23
发布于 2019-10-29 09:58:23
3.8K0
举报
文章被收录于专栏:网络交换FPGA网络交换FPGA

掌握FPGA技能,从点滴做起。在调试FPGA板子的过程中,常遇到的BUG分为两类,一类是功能性的,仿真一下就能查到原因,并且这类问题往往是确定性的,也容易重现和解决;另一类就是时序问题,时序问题是由于电路设计的不合理导致(比如用软件的思想去写电路),这类BUG每次重现的现象往往都不一样,比如没有进行跨时钟域处理等问题,而接口上的时序问题往往最为常见。本文以Xilinx开发板上常见的FMC扩展接口为例说明一种时序问题的处理方法。

背景

在调试的FPGA板子的过程中,常遇到的BUG分为两类,功能性BUG和时序BUG。

第一种是功能性的,仿真一下就能查到原因,并且这类问题往往是确定性的,也容易重现和解决,比如本公众号之前介绍的搭建仿真环境的一些方法:Modelsim的安装与使用用Modelsim独立仿真带Vivado IP核的仿真工程如何用ModelSim 独立仿真ISE的仿真工程。这类问题中稍微有难度的就是仿真环境不容易重现的,或者需要跑很长时间仿真才能重现的,这一类问题本公众号之前介绍过一种解决方案,详见:Vivado进行FPGA调试“犯罪现场”,在仿真环境中重现方法

另一种就是时序问题,时序问题是由于电路结构设计的不合理导致(比如用软件的思想去写电路,这就必须养成良好的硬件语言代码规范习惯,详见:干货!Verilog HDL初设计注意事项Verilog HDL描述的组合逻辑环在FPGA实现时到底有什么问题?),这类BUG每次出现的现象往往都不一样,比如跨时钟域引起的不稳定等问题(解决办法参见:跨时钟域信号的处理方法)。

时序问题中往往以接口上的时序问题最为常见。而接口上的时序问题也经常分为两种,一种是驱动能力问题,另一种是时延问题。

驱动能力的问题也经常遇见,比如做AFDX或者TTE等双冗余可靠的网络是,常常需要一个对RGMII的网口进行冗余备份。这是如果直接采用连线的方式把一个网口的信号同时又连到另外一个网口上,这是常见的问题是一个网口可以稳定的收发数据,另一个网口则会出现不稳定的状态,比如无法正常收发数据或者丢帧等。这个问题就是典型的驱动不足的问题。Xilinx FPGA在解决驱动能力不足导致的问题时采用的是添加BUFIO的方法,对输入管脚进来信号都让其经过一级IDDR后再进来,对要输出的信号则让其经过一级ODDR后再输出。如下面两图所示。

另一种时序问题则是最常见的问题,一般是通过TCL脚本的约束文件来处理,但有时候脚本的控制能力有限,此时就需要通过添加Xilinx的IODELAY核来调整时序,本文以Xilinx开发板上常见的FMC扩展接口为例进行说明时序问题的处理。

VC709本身并不具有以太网接口,需要通过FMC扩展板转接获得以太网接口,VC709如图1所示(图1中红框为FMC接口),MeshSR四端口以太网扩展板如图2所示。

MeshSR四端口以太网扩展板板载一片四端口博通以太网PHY芯片,型号为BCM5464SR,通过扩展板FMC接口与VC709连接,并提供4个RGMII接口。

图1 VC709评估板

图2 MeshSR四端口以太网扩展板

问题及分析

搭建VC709+MeshSR扩展板硬件平台,并加载MAC核自回环程序,使用TestCenter打流(每个帧完全一样且速率恒定),TestCenter显示无正确数据帧接收,观察现象,发现如下结果:

(1) 观察TestCenter结果界面,发现收到的错误数据帧的数量与发送数据帧数量一致,说明没有丢包,但是数据包全都错了;

(2) 使用Wireshark加载TestCenter数据包缓存中的数据包(接收到的数据包),发现接收到的错包都是一样的(与发送的数据帧一样相对应),说明错误产生是很规律的;

(3) 使用嵌入式逻辑分析仪抓取FPGA内部接收和发送的数据帧信号,发现FPGA接收到的数据帧(其实也是FPGA发送的数据帧)与TestCenter接收到的数据帧完全一样,说明RGMII接口发送没有问题;

(4) 对比TestCenter发出的帧与收到的帧,发现存在信号错位现象。

综合上面四点,猜测是扩展板提供给VC709的RGMII接口,接收部分存在时序问题,导致被采样信号无法对齐,进而导致FPGA内部抓取的信号全都是错的。

以图3举例说明。Data是一条四位的数据总线,在时钟上升沿处(红色箭头处),其值应该为4‘b1111,但是由于PCB走线的原因,Data[1]延迟比其他三条内部连接线大,导致时钟上升沿处的采样结果为4’b1101,发生采样错误。

但是需要注意到,图3中蓝线位置四条连接线的值都是对的,如果给Data 总线人为地加入一些延迟,使时钟上升沿与蓝线位置对齐,那么采样得到的值就是对的。这就是下面的解决办法。

图3 采样错乱问题示例

解决思路

在上一节我们说道,可以人为地给Data总线添加一个固定且微小的延迟,使得时钟采样时(之所以说微小,是因为该延迟小于一个时钟,往往在几百皮秒到几纳秒之间),采到Data总线正确的位置,那么采样错乱的问题就可以解决。

加入延迟需要使用一个原语,即IODELAYE1,如图4所示,其各个端口的功能如图5所示。

图4 IODELAYE1原语

图5 IODELAYE1 接口信号

其中,信号C为该原语参考时钟,为延迟提供参考基准(一个标准延迟叫做一个tap),tap与参考时钟频率之间的关系是

,其中f为参考时钟频率从;CNTVALUEIN为5位信号,取值在0到31之间,该信号表示加入几个标准延迟。

举个例子,如果参考时钟频率为200MHz,则tap=78ps;300MHz,tap=52ps;400MHz,tap=39ps;125MHz,125ps;72.5MHz,216ps;如果CNTVALUEIN为0,则不加入延迟,如果该值为31,则加入31个tap大小的延迟。

上图中IODELAY的时延值采用VIO的方法可以在线调整,VIO的方法详见文章:使用VIVADO中VIO模拟CPU接口进行在线寄存器读写调试(附源代码),这样对于任何接口都可以用该方法很好的控制输入时延值了。等在线调整好时延值以后,就可以固定下来了。

RGMII接口时序处理

再总结一遍RGMII接口的时延调试方法:

1、时钟处理

上图中PHY芯片给过来的时钟信号rgmii_rx分成两路,一路需要经过一级BUFIO,产生信号rgmii_rx_clk_bufio,该rgmii_rx_clk_bufio信号只是在接口处使用,用于后续添加IODELAY时使用;另一路信号经过一级BUFR,产生rx_clk_int时钟信号,该时钟信号就可以作为全局时钟使用,可以驱动2-3个BANK范围内的信号。

2、添加IODELAY

上一节中通过VIO的方式确定下来一个比较好的时延值以后,就可以把该值固定下来固化使用了。不同的板子上使用的PHY芯片不同,都需要调试该时延值。代码中该时延值添加的代码如下:

上图中IDELAY_TYPE已经由上一节中的“VAR_LOADABLE”变为固定的“FIXED”,该FIXED值可以在XDC约束文件中配置使用。

验证及结果

在将参考时钟设置为125Mhz(一个tap125ps),CNTVALUEIN设置为16时,采样到正确的波形,使用TestCenter测试,千兆线速无丢包。

对于Altera(现在叫Intel)的FPGA,也可以采用SignalTAP里面的探针来动态的配置接口时延,来实现动态的调整RGMII接口数据与时钟相差四分之一相位的目的。不过,根据本人的经验,Xilinx的FPGA实现RGMII接口时序调整要比Altera的FPGA容易太多了。。。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络交换FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
10G 以太网接口的FPGA实现,你需要的都在这里了
本设计中使用了Xilinx公司提供的10GEthernet PCS/PMA IP核充当连接10GMAC的PHY芯片,然后将该IP核约束到光模块上构建完整的物理层。需要说明的是本设计主要是完成以太网二层逻辑设计,不涉及PHY层的逻辑设计,如:bit同步、字节同步、字同步、64b/66b编解码等。
网络交换FPGA
2019/10/29
7.3K5
10G 以太网接口的FPGA实现,你需要的都在这里了
SDN先驱Nick教授以及netFPGA无法完美实现6802时间同步
Nick McKeown,斯坦福大学教授、博士生导师,美国国家工程院院士,美国艺术与科学学院、英国皇家工程院院士、开放网络实验室(Open Networking Lab)创始人之一,Clean Slate项目主任,曾获得英国计算机学会Lovelace Medal奖,IEEE Kobayashi计算机与通讯奖,ACM Sigcomm终身成就奖和IEEE Rice通讯理论奖,同时还有ETH荣誉博士学位。一大长串各种在学术界和研究界的头衔,令人目不暇接。
网络交换FPGA
2019/10/29
1K0
SDN先驱Nick教授以及netFPGA无法完美实现6802时间同步
RGMII接口调试使用VIO读取PHY寄存器值
测试方法:使用TestCenter向被测板子上的千兆以太网口打流,在FPGA内部通过自回环从源端口返回给TestCenter,通过看TestCenter控制界面上显示结果判断自回环是否正确。
网络交换FPGA
2019/10/29
5.1K0
RGMII接口调试使用VIO读取PHY寄存器值
10G以太网光口与Aurora接口回环实验
为实现大容量交换机与高速率通信设备之间的高效数据传输,高速接口的理解与使用愈发显现出其重要地位。本实验设计中计划使用四个GTH高速串行接口,分别采用了10G以太网接口协议以及Aurora64b66b接口协议,实现交换板到测试设备的连接并通过光纤实现高速数据片外回环,以达到快速理解接口协议并能够熟练使用该两种高速接口实现数据收发的目的。
网络交换FPGA
2019/12/05
9.1K2
【实测】网络中可以传小于64字节的数据包吗?
电磁波在双绞线上传输的速度为0.7倍光速,在1km电缆的传播时延约为5us。传统的网络信道比较差,需要有重传机制保障可靠性。于是,在节点A向节点B发送数据进行通信的时候,要保证以太网的重传,必须保证A收到碰撞信号的时候,数据包没有传完,要实现这一要求,A和B之间的距离很关键,也就是说信号在A和B之间传输的来回时间必须控制在一定范围之内。IEEE定义了这个标准,一个碰撞域内,最远的两台机器之间的round-trip time 要小于512bit 时间。(来回时间小于512位时,所谓位时就是传输一个比特需要的时间)。因此,传统以太网有如下特点:
网络交换FPGA
2020/04/21
3.9K0
【实测】网络中可以传小于64字节的数据包吗?
SGMII接口前导码小于7个字节55的情况
SGMII接口(开启自协商)调试分为三个步骤,先测试SGMII最基本功能仿真、再测试SGMII最基本功能自回环上板、最后直接测试开启自协商功能后上板
网络交换FPGA
2019/12/05
2.2K0
基于原语的千兆以太网RGMII接口设计
RGMII是GMII的简化版本,发送端信号:TXD[3:0]、 TX_CLK、TX_EN,接收端信号:RX_DV、RXD[3:0]、RX_CLK,当Clock=125MHz,数据位宽4bit(一个时钟周期里,上升沿取TX\RX的0-3bit,下降沿取TX\RX的4-7bit,所以实际还是在一个时钟周期里传输8bit数据),1000Mbps=125 MHz *8bit、100Mbps=25 MHz *8bit、10Mbps=2.5MHz *8bit。
碎碎思
2020/06/30
6.1K0
详谈TSN产业生态:主要厂商及产品分析(下)
作者简介:李庆,紫金山实验室未来网络研究中心研究员,主要研究方向为时间敏感网络(TSN)、软件定义网络(SDN)等。 详谈TSN产业生态:主要厂商及产品分析(上)对部分厂商及其产品进行了总结,本节继续对TSN相关的厂商及产品进行分析总结。排名不分先后。 华为 华为TSN交换机 AR 550E单端口最大带宽1 Gbps,具有八个10M/100M/1000M自适应电口,可通过自协商与对端设备协商端口速率及双工模式,单跳时延小于10 us,抖动小于500 ns,时间同步精度20 ns,样机集成了8个千兆(GE)T
SDNLAB
2022/07/07
5K0
详谈TSN产业生态:主要厂商及产品分析(下)
FPGA远程更新/远程调试的一种简单方法
之前介绍过一种远程(无线)更新的方式,详见《起飞!通过无线WIFI下载调试FPGA》,这种方式缺点有两个:一是速度较慢;二是我们的设备中需要增加一个无线设备,增加成本的同时增加了暴露的风险。这两点即无法在调试的时候使用也没办法在实际设备中使用。今天我们再介绍另一种简单方式。
碎碎思
2023/08/30
8241
FPGA远程更新/远程调试的一种简单方法
以太网知识-GMII / RGMII接口
今天和海翎光电的小编一起分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时小编也对RJ-45接口进行了总结,分析了在10/100模式下和1000M模式下的连接方法。
利又德智能感知
2022/11/08
6.2K0
以太网知识-GMII / RGMII接口
100G以太网光口的FPGA测试实例
软件环境为VIVADO2019.1,不建议采用VIVADO 2018.2,原因在于2018.2中的该IP核没有AXI总线,只有LBUS总线,LBUS总线使用起来需要进行总线的聚合与分拆(数据总线分为4路,每路位宽为128bit),较为繁琐,所以建议使用2019.1中的AXI总线的IP核。
网络交换FPGA
2019/12/05
3.7K0
详解Xilinx的10G PCS PMA IP
如果要在Xilinx的FPGA上使用万兆以太网通信,大致有三种方法构建协议栈。第一种使用GTX等Serdes作为底层的PHY,上层通过HDL实现构建MAC和IP层,这种方式难度会比较大,底层需要完成PHY层的设计,最终我想通过这种方式实现万兆以太网的搭建。
FPGA技术江湖
2025/04/18
3460
详解Xilinx的10G PCS PMA IP
基于时间触发以太网的AS6802时间同步协议的设计与实现
随着分布式系统的发展,系统中设备之间数据交互的实时性、可靠性以及高安全性需求更加迫切,使得以太网技术无法适用于相应的业务领域。时间触发以太网将时间触发技术的实时性、确定性与传统以太网的优势相结合,有效地解决了传统以太网无法满足高实时性、可靠性需求的弊端,被广泛应用于航天航空、工业控制等具有高实时性、高安全性需求的领域。由于时间触发以太网的实时性和确定性是以高精度的全局同步时钟为基础的,因此精确时间同步是时间触发以太网技术研究的基础,具有重要的研究价值和广阔的应用前景。
网络交换FPGA
2019/10/29
4.2K0
基于时间触发以太网的AS6802时间同步协议的设计与实现
System Generator从入门到放弃(二)-Digital Filter
System Generator是Xilinx公司进行数字信号处理开发的一种设计工具,它通过将Xilinx开发的一些模块嵌入到Simulink的库中,可以在Simulink中进行定点仿真,可以设置定点信号的类型,这样就可以比较定点仿真与浮点仿真的区别。并且可以生成HDL文件,或者网表,可以在ISE中进行调用。或者直接生成比特流下载文件。能够加快DSP系统的开发进度。
碎碎思
2020/06/30
2.3K0
System Generator从入门到放弃(二)-Digital Filter
基于以太网MAC IP核的IEEE1588协议的设计与实现
为了满足网络设备对时间同步精度越来越高的要求,通过对IEEE 1588协议标准和当前以太网时间同步方案的研究,提出了一种采用FPGA硬件来实现时钟同步的方法。基于FPGA与ARM开发平台,自主设计实现了支持IEEE 1588标准的主从时钟同步系统,该系统具有成本低廉,移植性强的特点。通过在该平台上对千兆以太网环境中的时间精度进行测试,标记精度优于50ns。
网络交换FPGA
2019/10/29
4.3K0
基于以太网MAC IP核的IEEE1588协议的设计与实现
【经验分享】一文了解解决大位宽效率问题的分段总线的前世今生
随着不断提升的以太网带宽对总线吞吐率要求的提升,需要在芯片内部采用更高的主频、更大的总线位宽,但受制程及功耗影响,总线频率不能持续提升,这就需要在总线数据位宽方面加大提升力度。下图为Achronix公司在介绍400G以太网FPGA实现时给出的结论,对于400G以太网的数据处理,意味着数据总线位宽超过1024bit,时钟频率超过724MHz,传统的FPGA在实现时很难做到时序收敛。
网络交换FPGA
2022/11/23
1.4K0
【经验分享】一文了解解决大位宽效率问题的分段总线的前世今生
FPGA时钟设计方案
在复杂的FPGA设计中,设计时钟方案是一项具有挑战性的任务。设计者需要很好地掌握目标器件所能提供的时钟资源及它们的限制,需要了解不同设计技术之间的权衡,并且需要很好地掌握一系列设计实践知识。不正确的设计或次优的时钟方案可能会导致在最好情况下较差的设计性能,或者在最坏情况下的随机和难以查找的错误。
碎碎思
2024/01/22
3050
FPGA时钟设计方案
FPGA零基础学习:在FPGA中,同步信号、异步信号和亚稳态的理解
叁芯智能科技-郝旭帅团队打造“FPGA 设计与研发”学习系列, 可以让设计者从“小白”到“入门”再到“精通”。本系列从基础的数字电路为起点,避免学习者“腾空造楼”;中间讲解各类基础外设驱动,保证设计能力逐步加深;后期讲解 FPGA 设计理论和复杂外设、协议驱动实现,确保与现实企业研发对接。
FPGA技术江湖
2021/03/15
9690
FPGA零基础学习:在FPGA中,同步信号、异步信号和亚稳态的理解
业界第一个真正意义上开源100 Gbps NIC Corundum介绍
来源:内容由「网络交换FPGA」编译自「FCCM2020」,谢谢。FCCM2020在5月4日开始线上举行,对外免费。我们有幸聆听了其中一个有关100G开源NIC的介绍,我们对该文章进行了翻译,并对其中的开源代码进行了分析并恢复出基于VCU118的工程,通过实际测试感受到了第一款真正意义上的100G开源NIC的强大(很多100G的开源都是基于HLS等非HDL语言,尽管可以转化成HDL,但电路架构参考意义已经不大)。开源Verilog代码中每个.v文件都是所有的组合和时序分别用一个always模块描述,代码中高位宽分段处理方式,多级流水的架构等很多地方都是非常值得借鉴和学习的地方。我们认为,github是一个宝库。我觉得现在的研究生培养质量的评价其实就可以看开源项目的参与程度,这完全能反应出一个学生的自学能力和独立研究的能力。而一个科研工作者,尤其是搞工程或应用基础研究的,如果没有做出来一两个星数100以上的开源项目,就不算成功。欢迎感兴趣的同学一起交流讨论。以下先附上本次会议的视频
网络交换FPGA
2020/05/22
6.6K0
业界第一个真正意义上开源100 Gbps NIC Corundum介绍
简谈基于FPGA的千兆以太网设计
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
FPGA技术江湖
2020/12/29
1.9K0
简谈基于FPGA的千兆以太网设计
推荐阅读
相关推荐
10G 以太网接口的FPGA实现,你需要的都在这里了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档