ZYNQ 实现IEEE1588方法

关注、星标公众号,直达精彩内容

来源:https://blog.csdn.net/yaojiawan/article/details/12442778

IEEE1588/PTP 协议是实时工业软件的一个重要的协议,本博文讨论该协议在Xilinx Zynq 系统·上如何实现IEEE1588 协议。

ZYNQ 系统的以太网

Zynq 系统中有两类Ethernet 接口,一种是PS 端的硬件千兆以太网,另一种是PL 实现的以太网接口。

bf2abd2979c86981a9a22d8140bce4be.png

PS 端以太网

zynq 中带有两个硬核千兆以太网MAC,ENET0,ENET1。与普通SOC 芯片不同,zynq PS 断地外设可以通过MIO连接到芯片的引脚上,也可以通过EMIO 接口连接到PL 端。连接到PL端后,带来了灵活性,可以转换成各种接口。比如设计一个交换机。定义端其它的引脚。

PS 端MIO 引出的以太网接口是RGMII接口,可以连接具有RGMII 的Phy 芯片。

7bc38706f0dd9839b87d026ebbff870e.png

PS 端的Ethernet 透过EMIO 连接各种接口(通过1000BASE-X/SGMII PCS/PMA IP)

8113f8906f25141ad20e7c4eb28a405e.png

PL 端以太网

PL 端的以太网是通过IP核实现的。vivado 中有下列几种以太网IP。

  • tri mode Ethernet MAC

  • AXI 1G/2.5G Ethernet Subsystem

  • 100M/1G TSN Subsystem

其中

   AXI 1G/2.5G Ethernet Subsystem 支持IEEE1588 ,但是只有在使用SGMII和SFP(small form factor pluggable)接口。并且带有GTX 功能的Zynq 芯片才支持IEEE1588。如此看来只能在光纤接口,或者SGMII接口上实现。网络上资料也不多。

*小贴士*

*-----------------------------------------------------------------*

*GTX*

   GTX是一种就是G级速率以上的SERDES串行/解串器。Xilinx芯片里内嵌的串行/解串器GTX,GTH,GTP等模块。

   7系列中,按支持的最高线速排序,GTP<GTX<GTH<GTZ。GTP被用于A7系列,GTZ被用于少数V7系列。从K7到V7,最常见的是GTX和GTH,GTH的最高线速比GTX稍微高一点点。

   100M/1G TSN Subsystem 也支持IEEE1588 但是看上去也是比较复杂的样子。

SGMII

SGMII协议是CISCO公司提出来的,可以减少芯片间互联的管脚。传统的GMII前面说了是8bits数据线,此外还需要时钟,和一些控制线,双向加起来要20根线左右。而SGMII接口是1根数据线加1根时钟线,双向共4根。如果去掉时钟线(采用CDR),那么2根线就可以实现互联了。

   SGMII本质上并没有对以太网协议的分层做改动,还是MAC层,PCS层和PMA层。原来GMII模式下,MAC层一般做在SOC侧,PHY层包括PCS+PMA做在另一个单独的芯片上。而SGMII的实施是将PCS层也同时放在了原来的MAC侧。这样SOC芯片和PHY芯片各有一个PCS层。

   对于SOC发送来说,数据包有MAC层过来,经过tx 的pcs,从SGMII接口发送出去。在PHY芯片上,有一个rx的pcs先将SGMII的信号解出GMII信号,然后再经过传统的PHY层处理发送到介质上。对于SOC接收来说,则反过来。

-----------------------------------------------------------------

tri mode Ethernet MAC在100Mbps 时可以使用MAC 接口,可以通过一个MAC to RMII 的IP 转换成为RMII 接口。

IEEE1588/PTP实现方案

IEEE1588 的硬件实现的方法有两种:

  • 在MAC控制器中实现

  • 在Phy 芯片中实现,比较常见的有TI 公司的DP83640 芯片

ZYNQ 中实现IEEE1588 协议的方式

   笔者做了一些厂商,在PL 端使用现成的IP 支持1588 似乎只有1g/2.5g ethernet subsystem 这一种。但是它只有在带有GT 传输的zynq 中使用,而且并没有多少成功的参考。

  基于本人的经验,使用带有IEEE1588 /PTP 功能的PHY 芯片实现,比较简单。

  • 使用DP83640

使用DP83640 实现IEEE1588 协议相对比较简单。主要的问题是要通过RMII接口与DP83640 相连接。

d598d3fc34f410760a5ab4f78d622fd3.png

使用rtl8211fs-vs-cg

   realtek 公司的rtl8211fs-vs-cg 支持IEEE1588.注意:一定要带有vs 后缀的才支持IEEE1588/PTP.

d9451803acc30d9193360984448553ce.png

使用高通atheros AR8031 芯片

ffdb2522b043963f5efdca87d5fe89e1.png

  • Linux 下访问mdio 的方法

测试程序

d288c3f0a26bfa34618b8d78dba4c8d5.png

我是在Z7 nano开发板的pynq 操作系统下调试通过的。

使用AXI 1G/2.5G Ethernet Subsystem

只有在使用SGMII和FDP接口。并且带有GTX 功能的Zynq 芯片才支持IEEE1588。

结束语

笔者更倾向使用带有IEEE1588/PTP 的PHY 芯片实现zynq 的IEEE1588

‧  END  

5418f9cd5a90cf74862fdd5b71b338e8.gif 你的每个在看,都是对作者最大的支持~  fc0db1a9b24fc30acf5119e1246ea2af.gif 

Zynq7000 AP SoC 是一款由赛灵思(Xilinx)公司生产的可编程逻辑器件,集成了一个双核ARM Cortex-A9处理器和FPGA(现场可编程门阵列)芯片。IEEE 1588 PTP(精确时间协议)是一种网络通讯协议,主要用于将网络中的设备同步到全局的统一时间。 在 Zynq7000 AP SoC 上设计和实现 IEEE 1588 PTP 功能可以提供高精度和高稳定性的时间同步。这样的设计可以在工业自动化、电力系统、通信设备等领域中得到广泛的应用。 首先,需要在 Zynq7000 AP SoC 上配置和调试 PTP协议堆栈。这可以通过在芯片内嵌入适当的协议软件来实现。然后,需要配置网络接口以支持 IEEE 1588 PTP 协议的数据传输。这可以通过使用以太网接口,并调整其参数来实现。 随后,我们需要将 PTP 时钟模块与芯片的时钟系统集成在一起。PTP时钟模块是实现 IEEE 1588 PTP 功能的关键组件,它可以提供高精度的时钟信号。我们需要将该模块与芯片的时钟源相连,以确保时间同步的准确性。 最后,还需要进行软件编程以实现 IEEE 1588 PTP 的相关功能,例如时间戳的生成和比较、同步精度控制等。这可以通过编写适当的驱动程序和应用软件来实现。 总结来说,将 IEEE 1588 PTP 设计集成到 Zynq7000 AP SoC 中需要配置和调试协议堆栈、网络接口以及时钟模块,并进行软件编程以实现相关功能。这样的设计可以为各种应用场景提供高精度和可靠的时间同步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值