SRIO系列-时钟逻辑与复位逻辑

一、前言

上一篇讲述了SRIO协议的基本概念,传输的HELLO帧格式、事务类型等,本篇说一下SRIO IP核的时钟关系。

基本的IP设置可以参考此篇文章:【高速接口-RapidIO】Xilinx SRIO IP 核详解-CSDN博客

二、时钟关系

 PHY可以在两个时钟域上运行: phy_clk,这是主核心时钟,和gt_pcs_clk,这是用于串行收发器接口。gt_clk不由PHY使用,但由串行收发器接口使用。gt_pcs_clk是gt_clk速率的一半。作为一般规则,phy_clk等于(gt_clk *操作链路宽度)/4。所以对于一个2x的核,phy_clk的频率是gt_clk的一半。如果核心列车下降到1x模式,phy_clk必须切换到gt_clk速率的四分之一。串行收发器还需要一个使用收发器的的参考时钟(refclk)。当生成核心时,参考时钟频率被选择(可用选项取决于体系结构和线路速率。

时钟频率关系
phy_clkphy_clk = (gt_clk * link width)/4主要的核时钟
gt_pcs_clkgt_pcs_clk = 1/2 * gt_clk主要终于Serial Transceiver interface
refclk见下表用于Serial Transceiver interface
log_clklog_clk >=phy_clk
cfg_clkcfg_clk = log_clk配置寄存器接口时钟

 不同lane下的时钟关系:

 对于7系列FPGAs,使用MMCM从串行收发器(GT)参考时钟生成时钟。时钟方案的方框图如下:

在SRIO的例子工程中,时钟主要有共享逻辑中的时钟模块提供,在这个模块中通过MMCM得到满足上述时钟关系的各时钟域时钟。

   srio_gen2_0_srio_clksrio_clk_inst (.sys_clkp                (sys_clkp        ),// input to the clock module.sys_clkn                (sys_clkn        ),// input to the clock module.sys_rst                 (sys_rst         ),// input to the clock module.mode_1x                 (mode_1x         ),// input to the clock module.log_clk                 (log_clk_out     ),// output from clock module.phy_clk                 (phy_clk_out     ),// output from clock module.gt_clk                  (gt_clk_out      ),// output from clock module.gt_pcs_clk              (gt_pcs_clk_out  ),// output from clock module.refclk                  (refclk_out      ),// output from clock module.drpclk                  (drpclk_out),      // output from clock module.clk_lock                (clk_lock_out_int) // output from clock module);

二、复位逻辑

SRIO每个时钟域都有一个指定的复位,复位应该声明各自时钟域的至少四个时钟周期,并同步取消复位。

在例子工程的复位模块中,会有一个异步的复位输入,在这个模块中,会将这个复位同步到各个时钟域,并且需要把复位的脉冲扩展到最小的复位时钟周期请求。

当重置SRIO端点设备时必须要将链路两端的设备一起复位,去保证AckID的对齐,从而减少数据包和控制字符的丢失。实现这一过程的方式是对核的复位进行握手。从接收端接收到的复位信号会通过phy_rcvd_link_reset给到用户设计。在接收到链路重置时应该置位sys_rst信号,还可以向用户应用程序响应phy_rcvd_link_reset的断言。

向对端发送重置请求,请求置位phy_rcvd_link-reset信号,直到端口初始化输出变低。

在例子工程中,srio_rst对复位进行同步,在这个模块中会有一个状态机执行上述的操作。

module srio_gen2_0_srio_rst(input            cfg_clk,                 // CFG interface clockinput            log_clk,                 // LOG interface clockinput            phy_clk,                 // PHY interface clockinput            gt_pcs_clk,              // GT Fabric interface clockinput            sys_rst,                 // Global reset signalinput            port_initialized,        // Port is intializedinput            phy_rcvd_link_reset,     // Received 4 consecutive reset symbolsinput            force_reinit,            // Force reinitializationinput            clk_lock,                // Indicates the MMCM has achieved a stable clockoutput reg       controlled_force_reinit, // Force reinitializationoutput           cfg_rst,                 // CFG dedicated resetoutput           log_rst,                 // LOG dedicated resetoutput           buf_rst,                 // BUF dedicated resetoutput           phy_rst,                 // PHY dedicated resetoutput           gt_pcs_rst               // GT dedicated reset);// {{{ Parameter declarations -----------// Reset State Machinelocalparam  IDLE       = 4'b0001;localparam  LINKRESET  = 4'b0010;localparam  PHY_RESET1 = 4'b0100;localparam  PHY_RESET2 = 4'b1000;// }}} End Parameter declarations -------wire sys_rst_buffered;// {{{ wire declarations ----------------reg   [0:3]   reset_state      = IDLE;reg   [0:3]   reset_next_state = IDLE;(* ASYNC_REG = "TRUE" *)reg  [3:0]        cfg_rst_srl;(* ASYNC_REG = "TRUE" *)reg  [3:0]        log_rst_srl;(* ASYNC_REG = "TRUE" *)reg  [3:0]        phy_rst_srl;(* ASYNC_REG = "TRUE" *)reg  [3:0]        gt_pcs_rst_srl;reg               sys_rst_int;wire              reset_condition = sys_rst || phy_rcvd_link_reset || sys_rst_int;// }}} End wire declarations ------------assign cfg_rst = cfg_rst_srl[3];always @(posedge cfg_clk or posedge reset_condition) beginif (reset_condition) begincfg_rst_srl <= 4'b1111;end else if (clk_lock) begincfg_rst_srl <= {cfg_rst_srl[2:0], 1'b0};endendassign log_rst = log_rst_srl[3];always @(posedge log_clk or posedge reset_condition) beginif (reset_condition) beginlog_rst_srl <= 4'b1111;end else if (clk_lock) beginlog_rst_srl <= {log_rst_srl[2:0], 1'b0};endend// The Buffer actively manages the reset due to the// nature of the domain crossing being done in the buffer.assign buf_rst = reset_condition;assign phy_rst = phy_rst_srl[3];always @(posedge phy_clk or posedge reset_condition) beginif (reset_condition) beginphy_rst_srl <= 4'b1111;end else if (clk_lock) beginphy_rst_srl <= {phy_rst_srl[2:0], 1'b0};endendassign gt_pcs_rst = gt_pcs_rst_srl[3];always @(posedge gt_pcs_clk or posedge reset_condition) beginif (reset_condition) begingt_pcs_rst_srl <= 4'b1111;end else if (clk_lock) begingt_pcs_rst_srl <= {gt_pcs_rst_srl[2:0], 1'b0};endend// This controller is used to properly send link reset requests that were// made by the user.always@(posedge log_clk) beginreset_state <= reset_next_state;endalways @* begincasex (reset_state)IDLE: begin// Current State Outputssys_rst_int             = 1'b0;controlled_force_reinit = 1'b0;// Next State Outputsif (force_reinit)reset_next_state = LINKRESET;elsereset_next_state = IDLE;endLINKRESET: begin// Current State Outputssys_rst_int             = 1'b0;controlled_force_reinit = 1'b1;// Next State Outputsif (~port_initialized)reset_next_state = PHY_RESET1;elsereset_next_state = LINKRESET;endPHY_RESET1: begin// Current State Outputssys_rst_int             = 1'b1;controlled_force_reinit = 1'b0;// Next State Outputsreset_next_state = PHY_RESET2;endPHY_RESET2: begin// Current State Outputssys_rst_int             = 1'b1;controlled_force_reinit = 1'b0;// Next State Outputsif (force_reinit)reset_next_state = PHY_RESET2;elsereset_next_state = IDLE;enddefault: begin// Current State Outputssys_rst_int             = 1'b0;controlled_force_reinit = 1'b0;// Next State Outputsreset_next_state = IDLE;endendcaseend
endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/824417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动驾驶(八十四)---------中间件对比分析

很久没有写博客了&#xff0c;CSDN无故非法删了我第82篇&#xff0c;让我很恼火&#xff0c;一直提不起兴趣重新写一遍第82篇。但回初心&#xff0c;知识需要用自己的语言输出&#xff0c;所以今天对比分析自动驾驶中间件&#xff1a; 1. 中间件介绍 在自动驾驶架构中&#xf…

SAP打印输出设置

SAP打印输入有很多方式&#xff0c;适合不同的应用场景。 一.打印输出总体概览图 二.前台打印 这个是比较常见的&#xff0c;前端打印的出现减轻了管理员的工作量&#xff0c;用户可以选择自己电脑上的打印机输出&#xff0c;不需要所有打印机都在SAP平台中进行配置&#xff0…

【Next】动态路由、加载 UI 和流式传输

动态路由 动态段作为 params 属性传递给 layout、page、route 和 generateMetadata 函数。 /app/blog/[slug]/page.tsx export default function Page({params}: {params:{slug:string}}) {return <h1>Slug Page -- {params.slug}</h1> };/app/shop/[...slug]/pa…

(vue)el-select选择框加全选/清空/反选

(vue)el-select选择框加全选/清空/反选 <el-form-item label"批次"><el-selectv-model"formInline.processBatch"multiplecollapse-tagsfilterableplaceholder"请选择"style"width: 250px"no-data-text"请先选择企业、日…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU+外部etcd使用containerd部署K8S 1.26.15容器版集群(一主多从)》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本&#xff0c;出现了一个问题&#xff0c;就是在pod中访问百度网站&#xff0c;大…

UTS iOS插件

1、UTS插件无法出现 再uniapp x中使用时&#xff0c;必须给这个插件高度和宽度&#xff0c;否则出不来&#xff01; <uts-hello-view buttonText"点击按钮内容" style"width:375px;height: 375px;background-color: aqua;"></uts-hello-view>…

python后端相关知识点汇总(十二)

python知识点汇总十二 1、什么是 C/S 和 B/S 架构2、count(1)、count(*)、count(列名)有啥区别&#xff1f;3、如何使用线程池3.1、为什么使用线程池&#xff1f; 4、MySQL 数据库备份命令5、supervisor和Gunicorn6、python项目部署6.1、entrypoint.sh制作6.2、Dockerfile制作6…

OpenCV基本图像处理操作(十)——图像特征harris角点

角点 角点是图像中的一个特征点&#xff0c;指的是两条边缘交叉的点&#xff0c;这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中&#xff0c;角点是重要的特征&#xff0c;因为它们通常是图像中信息丰富的区域&#xff0c;可以用于图像分析、对象识别、3D…

DDoS攻击愈演愈烈,谈如何做好DDoS防御

DDoS攻击是目前最常见的网络攻击方式之一&#xff0c;各种规模的企业包括组织机构都在受其影响。对于未受保护的企业来讲&#xff0c;每次DDoS攻击的平均成本为20万美元。可见&#xff0c;我们显然需要开展更多的DDoS防御工作。除考虑如何规避已发生的攻击外&#xff0c;更重要…

【机器学习300问】72、神经网络的隐藏层数量和各层神经元节点数如何影响模型的表现?

评估深度学习的模型的性能依旧可以用偏差和方差来衡量。它们反映了模型在预测过程中与理想情况的偏离程度&#xff0c;以及模型对数据扰动的敏感性。我们简单回顾一下什么是模型的偏差和方差&#xff1f; 一、深度学习模型的偏差和方差 偏差&#xff1a;衡量模型预测结果的期望…

K8s的亲和、反亲和、污点、容忍

1 亲和与反亲和 亲和性的原理其实很简单&#xff0c;主要利用label标签结合nodeSelector选择器来实现 1.1 Pod和Node 从pod出发&#xff0c;可以分成亲和性和反亲和性&#xff0c;分别对应podAffinity和podAntiAffinity。从node出发&#xff0c;也可以分成亲和性和反亲和性&…

Hbase的shell命令(详细)

一、help 1.help 显示命名的分组情况 2.help 命令名称 查看命令的具体使用&#xff0c;包括命令的作用和用法。 举例&#xff1a;help list 二、general 组&#xff08;普通命令组&#xff09; 命令 描述 …

Codeforces Round 814 (Div. 2) D2. Burenka and Traditions (hard version)

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; // #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5;…

实验室信息系统源码 saas模式java+.Net Core版开发的云LIS系统全套源码可二次开发有演示

实验室信息系统源码 saas模式java.Net Core版开发的云LIS系统全套源码可二次开发有演示 一、技术框架 技术架构&#xff1a;Asp.NET CORE 3.1 MVC SQLserver Redis等 开发语言&#xff1a;C# 6.0、JavaScript 前端框架&#xff1a;JQuery、EasyUI、Bootstrap 后端框架&am…

如何配置Postgres的自动扩展功能以应对数据增长

文章目录 解决方案1. 表空间管理2. 分区表3. 自动扩展配置4. 监控和告警5. 使用外部工具和服务 示例代码示例1&#xff1a;创建表空间示例2&#xff1a;创建分区表示例3&#xff1a;调整配置参数示例4&#xff1a;使用监控和告警工具 总结 在PostgreSQL中&#xff0c;随着数据的…

type-cDP输入转双type-cDP输出,加type-c接口充电管理同时接两台显示器或者VR投屏,龙迅LT8712SX方案,龙迅桥接芯片方案

type-c的应用在各种设备上更加广泛&#xff0c;包括手机&#xff0c;电脑&#xff0c;游戏掌机&#xff0c; 因为type-c的功能非常强大&#xff0c;可以做到PD快充&#xff0c;DP信号输出&#xff0c;USB信号输出&#xff0c;所以很多设备为了做得更简洁都开始把其他的如HDMI接…

Go诊断工具

Go 提供了一些出色的诊断工具,可帮助我们深入了解应用程序的执行情况。 1. 分析工具 分析工具可观测应用程序执行的各种指标。它使我们能够解决性能问题、检测争用、定位内存泄漏等。这些指标可以通过以下几个配置文件收集: CPU--确定应用程序将时间花在了哪里Goroutine--报…

【.Net动态Web API】背景与实现原理

&#x1f680;前言 本文是《.Net Core进阶编程课程》教程专栏的导航站&#xff08;点击链接&#xff0c;跳转到专栏主页&#xff0c;欢迎订阅&#xff0c;持续更新…&#xff09; 专栏介绍&#xff1a;通过源码实例来讲解Asp.Net Core进阶知识点&#xff0c;让大家完全掌握每一…

Text2sql的一些技巧

最近看到了一篇关于text2sql的文章&#xff0c;以及一些论文。对使用模型做text2sql给了一些不错的建议。 参考文章&#xff1a;24年大模型潜力方向&#xff1a;大浪淘沙后的Text-to-SQL和Agent - 知乎 论文&#xff1a;https://arxiv.org/pdf/2403.09732.pdf 关于模型的建议 …

Stm32-hal库串口教程

工程是在上一节的LED的基础上修改的。 串口原理图 串口配置 led参考 CubelMX点灯-CSDN博客https://blog.csdn.net/anlog/article/details/137830323生成工程 编写包含文件 编写重定向代码 编写发送 编译下载 串口没有收到数据 查找原因 少配置了下图 再编译下载 收到数据…