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.rhkb.cn/news/312783.html

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

相关文章

Windows 部署ChatGLM3大语言模型

一、环境要求 硬件 内存&#xff1a;> 16GB 显存: > 13GB&#xff08;4080 16GB&#xff09; 硬盘&#xff1a;60G 软件 python 版本推荐3.10 - 3.11 transformers 库版本推荐为 4.36.2 torch 推荐使用 2.0 及以上的版本&#xff0c;以获得最佳的推理性能 二、部…

3D Gaussian Splatting for Real-Time Radiance Field Rendering 在AutoDl上部署

目录 一. 租用AutoDl服务器二. Xtfp与服务器链接三. 本地训练准备数据3.1准备数据3.2 代码和模块下载 四. autodl环境配置4.1准备4.2 配置4.3 训练 五. 总结Reference 一. 租用AutoDl服务器 1.1 进入官网进行注册 1.2 点击算力市场租服务器&#xff0c;&#xff08;下图4090是…

论文笔记:Does Writing with Language Models Reduce Content Diversity?

iclr 2024 reviewer评分 566 1 intro 大模型正在迅速改变人们创造内容的方式 虽然基于LLM的写作助手有可能提高写作质量并增加作者的生产力&#xff0c;但它们也引入了算法单一文化——>论文旨在评估与LLM一起写作是否无意中降低了内容的多样性论文设计了一个控制实验&…

Boost电感的作用

Boost电感在Boost升压电路中起着关键的作用。Boost电路是一种DC-DC电源转换器&#xff0c;其主要功能是将低电压直流&#xff08;DC&#xff09;信号转换为高电压直流&#xff08;DC&#xff09;信号。Boost电感在这个过程中起着平滑电流、储存能量和提高电路效率的作用。 具体…

深入理解JVM中的G1垃圾收集器原理、过程和参数配置

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;垃圾收集&#xff08;GC&#xff09;是一个自动管理内存的过程&#xff…

Matlab|【免费】基于SOE算法的多时段随机配电网重构方法

目录 1 主要内容 2 部分程序 3 部分模型级文献结果 4 下载链接 1 主要内容 该程序是完全复现《Switch Opening and Exchange Method for Stochastic Distribution Network Reconfiguration》&#xff0c;也是一个开源代码&#xff0c;网上有些人卖的还挺贵&#xff0c;本次…

Web前端 Javascript笔记1

为什么学习 JavaScript? JavaScript 是 web 开发人员必须学习的 3 门语言中的一门&#xff1a; HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 JavaScript 是可插入 HTML 页面的编程代码。 JavaScript 插入 HTML 页面后&#xff0c;可由所有的现代浏…

野生动物保护视频AI智能监管方案,撑起智能保护伞,守护野生动物

一、背景 在当今世界&#xff0c;野生动物保护已经成为全球性的重要议题。然而&#xff0c;由于野生动物生存环境的不断恶化以及非法狩猎等活动的盛行&#xff0c;保护野生动物变得尤为迫切。为了更有效地保护野生动物&#xff0c;利用视频智能监管技术成为一种可行的方案。 …

服务器数据恢复—ext3文件系统下raid5数据恢复案例

服务器数据恢复环境&故障情况&#xff1a; 某企业光纤存储上有一组由16块硬盘组建的raid5阵列。管理员发现该光纤存储上的卷无法挂载&#xff0c;经过检查发现raid5阵列中有2块硬盘离线&#xff0c;于是联系我们数据恢复中心要求数据恢复工程师到现场恢复服务器存储上的数据…

Vue3从入门到实战:深度掌握组件通信(下部曲)

5.组件通信方式5-$attrs $attrs的概念&#xff1a; 在Vue中&#xff0c;$attrs 是一个特殊的属性&#xff0c;用于访问父组件向子组件传递的非特定属性。它可以让子组件轻松地获取父组件传递的属性&#xff0c;而无需在子组件中显式声明这些属性。 想象一下你有一个父组件和…

pycharm debug 的时候 waiting for process detach

当你使用pycharm debug或者run的时候&#xff0c;突然出现了点不动&#xff0c;然后一直显示&#xff1a;waiting for process detach 可能是以下问题&#xff1a; 1、需要设置Gevent compatible pycharm一直没显示运行步骤&#xff0c;只是出现waiting for process detach-C…

算法练习第18天|111.二叉树的最小深度

111.二叉树的最小深度 111. 二叉树的最小深度 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 题目描述&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最…

RocketMQ 10 面试题FAQ

RocketMQ 面试FAQ 说说你们公司线上生产环境用的是什么消息中间件? 为什么要使用MQ&#xff1f; 因为项目比较大&#xff0c;做了分布式系统&#xff0c;所有远程服务调用请求都是同步执行经常出问题&#xff0c;所以引入了mq 解耦 系统耦合度降低&#xff0c;没有强依赖…

基于Copula函数的风光功率联合场景生成_任意修改生成的场景数目(附带Matlab代码)

基于Copula函数的风光功率联合场景生成 削减为6个场景 部分展示削减为5个场景 部分展示 风光等可再生能源出力的不确定性和相关性给系统的设计带来了极大的复杂性&#xff0c;若忽略这些因素&#xff0c;势必会在系统规划阶段引入次优决策风险。因此&#xff0c;在确定系统最佳…

c语言,单链表的实现----------有全代码!!!!

1.单链表的定义和结构 单链表是一种链式的数据结构&#xff0c;它用一组不连续的储存单元存反线性表中的数据元素。链表中的数据是以节点的形式来表示的&#xff0c;节点和节点之间相互连接 一般来说节点有两部分组成 1.数据域 &#xff1a;数据域用来存储各种类型的数据&…

Node Version Manager(nvm):轻松管理 Node.js 版本的利器

文章目录 前言一、名词解释1、node.js是什么&#xff1f;2、nvm是什么&#xff1f; 二、安装1.在 Linux/macOS 上安装2.在 Windows 上安装 二、使用1.查看可安装的node版本2.安装node3. 查看已安装node4.切换node版本5.其它 总结 前言 Node.js 是现代 Web 开发中不可或缺的一部…

不说成为Linux高级工程师,但成为合格的软件开发人员还是够了,一文深入浅出的精炼总结Linux核心知识点,掌握Linux的使用与高阶技巧

不说成为Linux高级工程师&#xff0c;但成为合格的软件开发人员还是够了&#xff0c;一文深入浅出的精炼总结Linux核心知识点&#xff0c;掌握Linux的使用与高阶技巧。 Linux 的学习对于一个程序员的重要性是不言而喻的。前端开发相比后端开发&#xff0c;接触 Linux 机会相对…

MyBatis-Plus详解(2.5W字+)

说明&#xff1a;该文档是鄙人学习记录的笔记&#xff0c;用于日常翻阅、复习、以及和朋友们讨论学习&#xff0c;如果广大读者朋友发现文章的纰漏、错误&#xff0c;请在评论区或私信提出&#xff0c;本人将积极探讨纠正&#xff01;&#xff01;&#xff01; 一、MyBatis-Plu…

Git回滚版本并push到远端master

1、查看日志 git log 2、还原最近的版本 () --git reset --hard commit-id 如&#xff1a;git reset --hard d84da14bf2743683eca7a015f56114faaa344f42 3、覆盖分支版本 git push -f origin dev 回滚本地master完成后&#xff0c;将回滚后的代码push到远端master&#xf…

Redis(Windows版本下载安装和使用)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…