时序约束(二): input delay约束和output delay约束

一、input delay约束

在千兆以太网数据收发项目中,RGMII的数据输入方式为DDR,源同步输入方式,可以用之前提到的分析模型进行约束。 

在时序约束原理中我们提到,input delay约束的就是发射沿lunch到数据有效的延时,根据时序图得到:

         LrMax = Tco max + Td_bd max -(Tc_d + Tc_bd) ------分析建立时间时序

         LrMin   = Tco min + Td_bd min -(Tc_d + Tc_bd)  ------分析保持时间时序

一般在input delay分析中,我们默认Td_bd ==Tc_bd,并不考虑Tc_d。因此LrMax和LrMin就指的是上游器件输出数据和输出时钟的延时。

PHY芯片datasheet中时序图如下,图中的TskewR==2ns是时钟信号相对于数据信号的延时。数据线之间的SKEW未知,我们假设为0.2ns。

可以得到:

                                 LrMax = 2 + skew/2 = 2.1

                                 LrMin = 2 - skew/2 = 1.9

接下来就可以在工具中进行约束。首先,打开Open Implementation----->Edit Timing constraints。

然后选择Set Input delay,点击加号“+”添加约束信息。

设置参数。

        Clock:时钟,选择rx_clk。

        Objects:约束目标,选择RGMII输入信号。

        Delay value:延时时间。

        Delay value is relative to clock edge:边沿选择。

        Delay value specifies:最大最小选择。

Delay value is relative to clock edge选择rise,Delay value specifies选择max,在Delay value处设置上升沿的最大、最小延时;Delay value is relative to clock edge选择full,Delay value specifies选择max,在Delay value处设置上升沿的最大延时;Delay value is relative to clock edge选择rise,Delay value specifies选择min,在Delay value处设置上升沿的最小延时。下降沿的延时最大、最小延时设置同理。

这样就完成了input delay的约束,点击保存,可以看到input delay约束信息已经更新到了.xdc文件中。

 重新综合、布局布线,点击Report Timing。

 设置要打印的时序报告的参数。设置要打印的信号。

 在option 中的设置观察时序路径条数和每个路径打印多少条信息, 点击 OK 。

 这样就生成了时序报告。可以看到建立时间和保持时间没有发生时序违例。

二、indelay control方式input delay约束 

         以上的input delay约束方式是通过PLL调整时钟相位以达到时序要求,indelay control方式是通过对数据进行延时以满足时序要求。

        通过IDELAY2源语实现这个功能,例化该源语在ODDR模块中,模块输入数据信号tx_dat[7:0]和使能信号tx_en首先进入该源语进行数据延时,源语输出再进行ODDR转换。

DELAYE2 #(
.CINVCTRL_SEL("FALSE"), // Enable dynamic clock inversion (FALSE, TRUE)
.DELAY_SRC("IDATAIN"), // Delay input (IDATAIN, DATAIN)
.HIGH_PERFORMANCE_MODE("FALSE"), // Reduced jitter ("TRUE"), Reduced power ("FALSE")
.IDELAY_TYPE("FIXED"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE
.IDELAY_VALUE(0), // Input delay tap setting (0-31)
.PIPE_SEL("FALSE"), // Select pipelined mode, FALSE, TRUE
 .REFCLK_FREQUENCY(200.0), // IDELAYCTRL clock input frequency in MHz (190.0-210.0, 290.0-
.0).
 .SIGNAL_PATTERN("DATA") // DATA, CLOCK input signal
 )
 IDELAYE2_inst_dv (
 .CNTVALUEOUT(), // 5-bit output: Counter value output
 .DATAOUT(rx_ctrl_t), // 1-bit output: Delayed data output
 .C(1'b0), // 1-bit input: Clock input
 .CE(1'b0), // 1-bit input: Active high enable increment/decrement input
 .CINVCTRL(1'b0), // 1-bit input: Dynamic clock inversion input
 .CNTVALUEIN(5'd0), // 5-bit input: Counter value input
 .DATAIN(1'b0), // 1-bit input: Internal delay data input
 .IDATAIN(rx_ctrl), // 1-bit input: Data input from the I/O
 .INC(1'b0), // 1-bit input: Increment / Decrement tap delay input
 .LD(1'b0), // 1-bit input: Load IDELAY_VALUE input
 .LDPIPEEN(1'b0), // 1-bit input: Enable PIPELINE register to load data input
 .REGRST(1'b0) // 1-bit input: Active-high reset tap-delay input
 );

IDDR #(
 .DDR_CLK_EDGE("SAME_EDGE_PIPELINED"), // "OPPOSITE_EDGE", "SAME_EDGE"
 // or "SAME_EDGE_PIPELINED"
 .INIT_Q1(1'b0), // Initial value of Q1: 1'b0 or 1'b1
 .INIT_Q2(1'b0), // Initial value of Q2: 1'b0 or 1'b1
 .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC"
 ) IDDR_rxctrl_inst (
 .Q1(rxdv), // 1-bit output for positive edge of clock
 .Q2(rxerr), // 1-bit output for negative edge of clock
 .C(rx_clk_90), // 1-bit clock input
 .CE(1'b1), // 1-bit clock enable input
 .D(rx_ctrl_t), // 1-bit DDR data input
 .R(1'b0), // 1-bit reset
 .S(1'b0) // 1-bit set
 );

其中IDELAY_VALUE表示设置延时大小,可以填写的值为0~31,具体分辨率是多少每个器件并不相同,需要查看手册。

此外,这个源语还要配合IDELAYCTRL使用:

IDELAYCTRL IDELAYCTRL_inst (
 .RDY(RDY), // 1-bit output: Ready output
 .REFCLK(sysclk), // 1-bit input: Reference clock input
 .RST(~locked) // 1-bit input: Active high reset input

通过调整IDELAY_VALUE的值,就可以调整数据和时钟之间的延时,消除时序违例。当IDELAY_VALUE增大时延时增大,建立时间裕量减小,保持时间裕量增大。

三、output delay约束 

同样使用千兆以太网数据收发中的RGMII输出端作为约束对象。在不知道目标端的建立时间和保持时间时,可以利用数据的skew进行output delay约束。

 根据时序图可得:

                                                dMax = Tcycle - askew

                                                dMin = bskew

设置SKEW 的目的是让综合工具知道输出的时钟采样沿不能落在 SKEW 的区域 。我们可以通过调整skew的值使时钟沿落在数据的中心位置。这里设置askew=bskew=1.5ns,则dMax = 2.5,dMin = 1.5。

这样就可以在工具中进行约束了。首先要创建生成时钟,告诉综合工具tx_clk是时钟信号。打开Open Implementation----->Edit Timing constraints,选中Creat Generated Clock,点击加号“+”,这里设置时钟源为PLL输出时钟,目标时钟为tx_clk。

 然后选择set Output Delay,点击加号“+”添加约束信息。

设置参数。

        Clock:时钟,选择tx_clk。

        Objects:约束目标,选择RGMII输出信号。

        Delay value:延时时间。

        Delay value is relative to clock edge:边沿选择。

        Delay value specifies:最大最小选择。

Delay value is relative to clock edge选择rise,Delay value specifies选择max,在Delay value处设置上升沿的最大、最小延时;Delay value is relative to clock edge选择full,Delay value specifies选择max,在Delay value处设置上升沿的最大延时;Delay value is relative to clock edge选择rise,Delay value specifies选择min,在Delay value处设置上升沿的最小延时。下降沿的延时最大、最小延时设置同理。

这样就完成了output delay的约束,点击保存,可以看到output delay约束信息已经更新到了.xdc文件中。

  接下来我们重新综合、布局布线,Open Implemented Design,点击Report Timing。

设置时序报告打印参数。这里在End Points处添加。

 这样就生成了时序报告。可以看到建立时间和保持时间没有发生时序违例。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

comfyui定制

🌟 comfyui定制AI人工智能公司— 触站AI,绘制智能图像新纪元 🎨 🚀AI绘画,触站AI引领创新潮流 🚀深圳,这座创新之城,迎来了触站AI,一家专注于企业AI图像领域的技术解决方…

无法下载 https://mirrors./ubuntu/dists/bionic/main/binary-arm64/Packages

ubuntu系统执行sudo apt update命令的时候,遇到如下问题: 忽略:82 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-backports/universe arm64 Packages 错误:81 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-backports/main arm64 Packa…

comfyui定制外包

🌈 最强AI绘画comfyui模型训练、定制服务公司出炉 —— 触站AI,引领设计智能新潮流 🚀 🎨 触站AI,以AI绘画模型训练重塑设计边界 🎨在AI技术的浪潮中,触站AI以其前沿的AI绘画模型训练技术&…

已解决java.awt.geom.NoninvertibleTransformException:在Java2D中无法逆转的转换的正确解决方法,亲测有效!!!

已解决java.awt.geom.NoninvertibleTransformException:在Java2D中无法逆转的转换的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 1. 检查缩放因子 修改后的缩放变换 …

申请一张含100个域名的证书-免费SSL证书

挑战一下,申请一张包含100个域名的证书 首先,我们访问来此加密网站,进入登录页面,输入我的账号密码。 登录后,咱们就可以开始申请证书,首先说一下,咱账号是SVIP哦,只有SVIP才可以申…

【如何使用RSA签名验签】python语言

文章目录 签名方法异步同步通知数据验签生活号响应数据验签同步响应数据验签 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 🌸愿您在此停留的…

通过MATLAB控制TI毫米波雷达的工作状态

前言 前一章博主介绍了MATLAB上位机软件“设计视图”的制作流程,这一章节博主将介绍如何基于这些组件结合MATLAB代码来发送CFG指令控制毫米波雷达的工作状态 串口配置 首先,在我们选择的端口号输入框和端口波特率设置框内是可以手动填入数值(字符)的,也可以在点击运行后…

Python的matplotlib简单操作及图像闪屏问题

1.显示一个sinx的图像 import matplotlib.pyplot as plt import numpy as np xnp.linspace(0,10,100)#生成0到10 之间 分成100份等间隔 ynp.sin(x) # # plt.plot(x,y)#放入x与y plt.title("ysin(x)")#给图像命名 plt.xlabel("x")#设置x位置的名字 plt.yl…

【CT】LeetCode手撕—19. 删除链表的倒数第 N 个结点

题目 原题连接:19. 删除链表的倒数第 N 个结点 1- 思路 模式识别:删除倒数第 n 个结点 ——> 定义 dummyHead 并用双指针实现删除逻辑 2- 实现 ⭐19. 删除链表的倒数第 N 个结点——题解思路 class Solution {public ListNode removeNthFromEnd(Li…

FormMaking表单设计器V3.8发布,数据表格上线,支持多选、多级表头、列模板自定义、操作列、分页等设置

介绍 FormMaking 是基于Vue的可视化表单设计器,赋能企业实现可视化低代码开发模式;帮助开发者从传统枯燥的表单代码中解放出来,更多关注业务,快速提高效率,节省研发成本。 目前已经在OA系统、考试系统、报表系统、流程…

python本学期所有代码!

第一单元 ----------------------------------------------------------------------- #圆面积的计算 radius 25 area 3.1415 * radius * radius print(area) print("{:.2f}".format(area)) --------------------------------------------------------------------…

【C语言】分支(选择)和循环语句

目录 简述选择语句简述if语句单if结构语法格式 if-else结构语法结构 语法结构 循环结构break和continuewhile循环语法结构 for循环语法结构 do while循环语法结构 简述 在c语言中分支和循环语句是极其重要的,就像生活中你难免要做一些判断和循环往复做一些事。 选…

ESP8266[ 关于-巴发云MQTT/TCP:arduino 设置回调函数 ] 日志2024/6/29

ESP8266 [ 关于-巴发云MQTT/TCP:arduino 设置回调函数 ] 日志2024/6/29 arduino库:#include <PubSubClient.h> 回调函数 是其库设置好的 可以改名字 这里只写上关键代码 设置客户端为 A 关键代码: A.setCallback(回调名) //MQTT 回调处理mqttmsgg(自定义…

el-scrollbar组件使用踩坑记录

一、el-scrollbar和浏览器原生滚动条一起出现 问题描述 el-scrollbar组件主要用于替换浏览器原生导航条。如下图所示&#xff0c;使用el-scrollbar组件后&#xff0c;发现未能成功替换掉浏览器原生导航条&#xff0c;二者同时出现。 引发原因 el-scrollbar的height属性如果…

idea常用问题记录

文章目录 1.ant构建报错编译错误1.1 解决办法 1.ant构建报错编译错误 Compile failed;xxx 1.1 解决办法

如何通过指纹浏览器使用代理IP?

1.指纹浏览器定义 指纹浏览器是 一种浏览器技术&#xff0c;它根据用户设备的硬件、软件和配置等特征生成唯一标识符&#xff08;称为“指纹”&#xff09;。此指纹用于识别和追踪用户身份&#xff0c;即使用户更改其 IP 地址或清除浏览器数据&#xff08;如缓存和 Cookie&…

仓库管理系统带万字文档基于spingboot vue的前后端分离仓库管理系统java项目java课程设计java毕业设计

文章目录 仓库管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 仓库管理系统 一、项目演示 仓库管理系统 二、项目介绍 基于spingboot和vue的前后端分离仓库管…

【工具】VS Code使用global插件实现代码跳转

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;善假于物&#…

Android SQLite 数据库存学习与总结

Android 系统内置了一个名为 SQLite 数据库。那么 SQLite 是一种什么样的数据库&#xff0c;它有那些特点&#xff0c;应该怎么操作它&#xff1f;下面&#xff0c;让我们就来认识一下它吧。 1、概念&#xff1a; SQLite 是一种轻量级的关系型数据库&#xff0c;它不仅支持标准…

C++ (第二天下午---面向对象之类与对象)

一、面向过程与面向对象 1、面向过程 面向过程是一种以事件为中心的编程思想&#xff0c;编程的时候把解决问题的步骤分析出来&#xff0c;然后用函数把这些步骤实现&#xff0c;在一步一步的具体步骤中再按顺序调用函数。 举个例子&#xff0c;下五子棋&#xff0c;面向过程…