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

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

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos