不同高速协议接口之间共享时钟

2024-06-17 01:44

本文主要是介绍不同高速协议接口之间共享时钟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 1、万兆网给8B10B PHY共享
  • 2、8B10B PHY给万兆网共享
  • 3、综合实现
  • 4、总结
    • 4.1、上板验证
      • 4.1.1、第一路数据:万兆网
      • 4.1.2、第二路数据:8B10B PHY

前言

一个GT BANK有四个GT channel,他们之间是可以共享同一个QPLL输出参考时钟,之前的实验当中,我都是同样的工程例化多个channel进行时钟共享,这次在做一个BANK上同时存在万兆王、8B10B、64B66B的时候出现了问题。

本次设计当中在同一个BANK当中输入了俩路高速接口数据,一路是之前自己设计的万兆以太网接口数据,一路是之前的8B10B PHY数据,俩者各自在拓展自己多路输入输出的时候,都直接共享时钟即可,但是按照一样的办法,会出现以下问题:

1、万兆网给8B10B PHY共享

我用万兆网的ten_gig_eth_pcs_pma_0_gt_common模块去给8B10B PHY共享的时候,ten_gig_eth_pcs_pma_0_gt_common模块是没有QPLLREFCLKLOST_OUT信号输出的,进入到common原语内部去将该信号引出来后发现这个信号一直为高,导致8B10B PHY这路是没有时钟信号的,而万兆网这一路数据是一切正常的,万兆网多channel共享逻辑的时候不需要QPLLREFCLKLOST_OUT信号。

2、8B10B PHY给万兆网共享

使用8B10B PHY的gtwizard_0_common模块给万兆网进行GT参考时钟共享的时候,万兆以太网倒是有时钟信号,并且8B10B PHY这路数据一切正常,至于万兆网尽管有数据,但CRC全部出错了,观察波形发现是接收端数据是乱的。。。。
观察俩者共享逻辑代码,发现俩者的QPLL_FBDIV_TOP参数不一样
万兆网ten_gig_eth_pcs_pma_0_gt_common

localparam QPLL_FBDIV_TOP =  66;

8B10B PHY的gtwizard_0_common模块:

localparam QPLL_FBDIV_TOP =  64;

这个信号会影响QPLL的分频系数:
在这里插入图片描述
但是俩路IP核设置参考时钟是完全一样的,唯一区别就是编码方式了,万兆网是64b66b,在example当中,万兆网这个参数是66,对照上图可以理解,但不知道为啥8b10b是64,因为我参考时钟给的依旧是156.25Mhz。

通过测试进一步发现,对于万兆网而言,这个参数必须是66,否则数据是错的,对于8b10b而言,俩个倒是都可以,至少都有时钟产生,但是参数改为66之后,gtwizard_0_common模块的复位输入,必须是8b10b当中IP和的o_qpllreset信号,否则也不行,具体原因尚未查明。。。

3、综合实现

综合实现的时候
gtwizard_0_common模块的参考时钟必须只能输入一个,仿真的时候倒是无所谓,但是实现的时候如果GTREFCLK0_INGTREFCLK1_IN都有信号输入,哪怕你QPLLREFCLKSEL_IN只选择了其中之一,布局布线还是会失败。所以不需要的哪路一定要直接接0。如下:

gtwizard_0_common #
(.WRAPPER_SIM_GTRESET_SPEEDUP(),.SIM_QPLLREFCLK_SEL         (3'b010)
)
common0_i
(.QPLLREFCLKSEL_IN           (3'b010             ),//1:参考时钟0;2:参考时钟1 3:北时钟 4:南时钟.GTREFCLK0_IN               (0                  ),.GTREFCLK1_IN               (  w_gt_refclk       ),.QPLLLOCK_OUT               (w_qplllock         ),.QPLLLOCKDETCLK_IN          (w_sys_clk           ),.QPLLOUTCLK_OUT             (w_qplloutclk       ),.QPLLOUTREFCLK_OUT          (w_qplloutrefclk    ),.QPLLREFCLKLOST_OUT         (w_qpllrefclklost   ),    .QPLLRESET_IN               (w_qpllreset_gt_phy        ) 
);

4、总结

最终完整可用的方法就是:
共享逻辑代码当中:
参数QPLL_FBDIV_TOP为66,保证万兆网数据正确:

localparam QPLL_FBDIV_TOP =  66;

QPLLRESET_IN :QPLL复位信号要接8B10B模块输出的复位,以保证8B10B这路数据正常工作

4.1、上板验证

4.1.1、第一路数据:万兆网

在这里插入图片描述

4.1.2、第二路数据:8B10B PHY

在这里插入图片描述

这篇关于不同高速协议接口之间共享时钟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1068143

相关文章

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

redis中session会话共享的三种方案

《redis中session会话共享的三种方案》本文探讨了分布式系统中Session共享的三种解决方案,包括粘性会话、Session复制以及基于Redis的集中存储,具有一定的参考价值,感兴趣的可以了... 目录三种解决方案粘性会话(Sticky Sessions)Session复制Redis统一存储Spr

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R