FPGA时序分析与约束(8)——时序引擎

news2024/11/26 8:42:58

一、概述

        要想进行时序分析和约束,我们需要理解时序引擎究竟是如何进行时序分析的,包括时序引擎如何进行建立分析(setup),保持分析(hold),恢复时间分析(recovery)和移除时间分析(removal)。

二、时序引擎进行建立时间分析

1、确定建立时间要求(建立时间的捕获沿-建立时间的发起沿)

        发起沿(launch edge,源时钟产生数据的有效时钟沿),捕获沿(capture edge,目的时钟捕获数据的有效时钟沿)。

        时序引擎会找出发起时钟和捕获时钟的最小公共周期,然后在最小公共周期内找到所有发起时钟沿和捕获时钟沿的所有可能的情况,并在所有可能的情况中挑选出最小的建立时间需求(大于0),从而确定了Launch edge和Capture edge。

 2、计算数据的需求时间

         数据的建立要求时间 = 捕获沿 + 目的时钟路径延迟 - 时钟不确定性 - 建立时间

3、计算数据的到达时间

        数据到达时间 = 产生沿 + 源时钟路径延迟 + 数据路径延迟 

4、计算Setup的裕度(Slack)

        建立时间裕度 = 数据建立要求 - 最后一个到达的信号 

5、建立裕度的影响因素 

  • Setup Slack = (Capture edge – Launch edge)+ (destination clk delay – source clk delay)- Setup time - clk uncertainty – datapath delay  
  • Setup Slack =  Setup Requirement(一定大于0) + clk skew – Tsu – Tclk uncertainty – Tlogic – Tnet - Tco 

        会导致Setup Slack为负数的影响因素如下:

 5.1 Setup Requirement 与实际情况不符

        建立时间需求过小,这种情况通常会在同步跨时钟域路径中出现,在同步跨时钟域路径中的源时钟频率与目的时钟频率的相位关系虽然是已知的,但是时序引擎默认选择的捕获沿通常都是错误的,需要用户通过多周期路径约束的方式手动修正建立时间需求。比如下图中,两个同频不同相的同步时钟,时序引擎默认选择的捕获沿是目的时钟第二个上升沿,导致建立时间需求非常小,最终肯定会导致时序违例。 

5.2 clk skew为负值,且很大

        通常情况下,同一个时钟下的时钟歪斜不应该超过300ps,同步跨时钟域路径的时钟歪斜不应该超过500ps,异步跨时钟域路径的时钟歪斜一般比较大,因为它们的时钟源不同。

        当出现时钟歪斜大的情况时:

  1. 检查源时钟路径和目的时钟路径上是否干净,时钟路径上是否引入了组合逻辑,时钟路径是否使用了过多的BUFGCE,时钟路径上是否级联了多个BUFGCE导致时钟延时变大。
  2. 检查源时钟路径和目的时钟路径所经过的模块是否相同,比如源时钟路径上经过全局缓冲,PMMCM,但是目的时钟路径上只经过了全局缓冲。如下图所示,第一条路径的源时钟路径上有BUFGCE/MMCM/BUFGCE,而目的时钟路径上只有BUFGCE,所以源时钟路径和目的时钟路径的延时不同,导致时钟歪斜较大,应该尽量避免此类路径。第二条路径的源时钟和目的时钟都是来源于MMCM的不同的时钟,所以时钟歪斜较小。

5.3 Tsu/Tco大 

        当设计中使用Block(DSP/Block RAM等)时,应该要注意以下问题。对于以这些Block为时序路径的起点或终点的时序路径,这些BlockTsu/Th/Tco都比普通的寄存器大,而且这些Block的布线延时和时钟歪斜比较大。

        所以当使用这些Block作为时序路径的终点时,它的起点一定要是触发器,比如说一个Block RAM的写数据信号,输入进 Block 前最好打一拍。当使用这些 Block 作为时序路径的起点时,应该使用 Block 内部的输出寄存器,比如使用由 Block RAM 组成的FIFO时,尽量不要使用首字置出的,而使用打一拍后输出的,使用后者可以显著降低Tco。当时序路径为从一个 Block 到另一个Block 时,中间需要进行打拍操作。当使用这些Block的控制端口时,应该保证这些控制信号的低扇出,如使用由Block RAM组成的FIFO时,应该尽量降低读/写能信/地址信号的扇出。

5.4 Tlogic大

        一般情况下,逻辑延时与时序路径的逻辑层级数息息相关,逻辑层级是指时序路径的起点和终点之间组合逻辑单元(LUT)的个数,而逻辑层级多一级意味着多1LUT的延时加1条连接LUT的网线延时。通常一级逻辑层级的延时标准是1LUT1根网线的总延迟为0.5ns,如果某条路径的逻辑级数大于时钟周期/0.5ns,那么这条路径就被称为长路径。常用的处理长路径的方案有两种:第一种,修改rtl代码,在长路径的逻辑中插入流水线,将长路径打破分为多条短路径;第二种,使用综合工具的retiming优化方式,retiming实际上是寄存器重定向,原理是当某条长路径的相邻路径的建立时间裕量较大,那么它可以调整中间寄存器的位置,来调整布线延迟,通过适当增加相邻路径的布线延迟而减少长路径的布线延迟,使得那些时序违例较小的长路径通过这种微调实现时序收敛。需要强调的是,这种方式优化的力度非常有限,它只适合时序违例较小的长路径,对于一些延时特别大的长路径而言,也是无力回天。

5.5 Tnet大 

        一般情况下,布线延迟与设计整体或局部模块的资源利用率以及拥塞程度息息相关。

        在正常情况下,一条网线的延时小于1ns,在发生拥塞的区域,网线的延时可能达到若干ns,导致布线延时显著增加。为了解决布线延迟大,需要从降低资源利用率和降低拥塞程度下手,比如某个模块使用了大量的寄存器堆,占用了大量的资源,此时应该考虑使用Block RAM代替这些寄存器堆;某个模块使用了大量的数据选择器,此时应该考虑如何优化这些数据选择器;某个模块的控制信号扇出比较大,与其他模块的互联很重,此时应该考虑如何降低这些信号的扇出;某条时序路径的起点或终点是Block,由于Block的位置比较固定,所以Block的布线延迟会大一些。最后需要强调的是,一定要额外关注高扇出的网线也会对布线延时产生影响。

三、时序引擎进行保持时间分析

 1、确定保持时间要求(保持时间的捕获沿-保持时间的发起沿)

        保持时间要求是以建立时间要求为基础的

        保持时间要求有两种:

  • 当前建立时间的发起沿产生的数据不能被当前建立时间的捕获沿的前一个有效沿捕
  • 当前建立时间发起沿的下一个有效沿产生的数据不能被当前建立时间的捕获沿捕获

        根据所有的建立时间需求找到所有的保持时间需求,并从保持时间需求(可正可负)中找到最大的保持时间需求。

2、计算数据的需求时间 

        数据的保持要求时间 = 捕获沿 + 目的时钟路径延迟 + 时钟不确定性 + 保持时间

3、计算数据的到达时间

         数据到达时间 = 源时钟捕获沿 + 源时钟路径 + 数据通道延时

4、计算hold的裕度(Slack)

         保持裕度 = 最早达到的信号 - 数据稳定要求

5、保持裕度的影响因素

Holdup Slack = (lauch edge - capture edge + TclkaTclkb + Tco + Tdata(Tlogic+Tnet) -Th

Holdup Slack =  Tco + Tdata(Tlogic+Tnet) -Th - Holdup Requirement - clk skew

        Hold up Slack为负的情况比较少见,当Setup Slack有较大裕量时,通常工具会自动插入延时来增加Hold up Slack

①保持时间需求大于0(通常由时序引擎选择错误的捕获沿导致)

②时钟歪斜大于300ps(通常由时钟路径上的组合逻辑导致)

③Th过大(通常由时序路径终点为Block导致)

四、Recovery检查

五、Removal检查

 

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

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

相关文章

2024王道考研计算机组成原理——输入输出系统

7.1.1 输入输出系统和几种IO控制方式 输入设备:把数据从主机外部输入主机内部 输出设备:把数据从主机内部输出到主机外部 现在的IO接口(芯片)通常被集成在南桥芯片的内部 DMA接口其实也是IO接口(芯片)的一种,磁盘准备的数据先一个字一个字…

VS2022将编码方式设置为UTF-8的一种方法

一、首先在VS2022的菜单栏中找到Tools/Customize。 二、在弹出的对话框中选择Commands标签,Menu bar中选择File,点击Add Command按钮。 三、在弹出的Add Command对话框中选择左侧Categories栏中选择File,在Commands栏中选择Advanced Save Opt…

吴恩达《机器学习》2-5->2-7:梯度下降算法与理解

一、梯度下降算法 梯度下降算法的目标是通过反复迭代来更新模型参数,以便最小化代价函数。代价函数通常用于衡量模型的性能,我们希望找到使代价函数最小的参数值。这个过程通常分为以下几个步骤: 初始化参数: 随机或设定初始参数…

帆软report JS实现填报控件只能填写一次

效果 方法: 代码: if(this.getValue()!"")//判断这个控件框是否有值,这里是不为空{this.setEnable(false)}//不为空,则不能再修改else{this.setEnable(true)}//为空,可以编辑

vue2【Options 选项API、mixin混入】,vue3【Composition 合成API、hooks】

目录 逻辑组合/复用机制 mixin混入状态复用【官方不推荐使用】 生命周期合并 同名覆盖 难溯源 hooks钩子【只能在setup生命周期中用】 ref ()、reactive()useState computed()useMemo 自定义: useXxx 示例 Vue2 :Options API选项类型&#x…

代码审计-锐捷NBR路由器 EWEB网管系统 远程命令执行

那天下着很大的雨,母亲从城里走回来的时候,浑身就是一个泥人,那一刻我就知道我没有别的选择了 出现漏洞的文件在 /guest_auth/guestIsUp.php 审查源码我们发现通过命令拼接的方式构造命令执行 构造payload: /guest_auth/guestI…

基于闪电搜索算法的无人机航迹规划-附代码

基于闪电搜索算法的无人机航迹规划 文章目录 基于闪电搜索算法的无人机航迹规划1.闪电搜索搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用闪电搜索算法来优化无人机航迹规划。 …

基于入侵杂草算法的无人机航迹规划-附代码

基于入侵杂草算法的无人机航迹规划 文章目录 基于入侵杂草算法的无人机航迹规划1.入侵杂草搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用入侵杂草算法来优化无人机航迹规划。 …

windows8080端口占用

查看端口占用 netstat -ano | findstr “8080”查看占用进程 tasklist | findstr “4664”关闭占用进程 taskkill /f /t /im httpd.exe

关于git推送代码到github远程仓库中文乱码问题,visual studio保存文件默认编码格式问题

中文乱码问题本质上的原因是:二者的编码格式不同。当你用GB2313格式保存一个文件,用utf-8的格式打开,它必然就显示乱码。 据我所知,github上面是utf-8,而visual studio默认保存为GB2312,把代码推送到gith…

ChineseChess.2023.10.29.02

中国象棋残局模拟器 中国象棋残局模拟器ChineseChess.2023.10.29.02_桌游棋牌热门视频

Mac docker+vscode

mac 使用docker vs code 通过vscode 可以使用docker容器的环境。 可以在容器安装gdb, 直接调试代码。 创建容易时候可以指定目录和容易目录可以共享文件。

音画欣赏|《诗和远方》

《诗和远方》 8050cm 陈可之2020年绘 面朝大海,春暖花开 [海子] 从明天起,做一个幸福的人 喂马、劈柴,周游世界 从明天起,关心粮食和蔬菜 我有一所房子,面朝大海,春暖花开 从明天起,和每一…

超市便利店小程序商城该是怎样的

超市便利店的数量非常多,在人流聚集处和小区周边,线下店主要以周边客户为主,一般来说不会缺生意,但也不会有大的增长,线上电商冲击下,尤其是中大型超市或连锁,需要商家线上发展获得生意。 而除…

基于群居蜘蛛算法的无人机航迹规划

基于群居蜘蛛算法的无人机航迹规划 文章目录 基于群居蜘蛛算法的无人机航迹规划1.群居蜘蛛搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用群居蜘蛛算法来优化无人机航迹规划。 …

拉扎维模拟CMOS集成电路设计西交张鸿老师课程P6~9视频学习记录

目录 p6 p7 CG放大器 输入阻抗的计算方法; 输出阻抗的计算​编辑​编辑 p8p9 为什么需要差动放大器 噪声 什么是差分信号 基础差动放大器 利用叠加法求解增益; 共模响应 CMRR 带其他类似负载的差动对 ------------------------------------…

Nacos的安装和实操

前言 最近在学SpringCloud,写下遇到的问题方便自己方便他人,主要描述Nacos的安装与会遇到的一些问题+代码实操 文章目录 前言Nacos基本介绍Nacos基本使用Nacos的安装部署Nacos配置MySQL数据源管理界面鉴权设置 简单的操作Demo Nacos基本介绍…

window11 更改 vscode 插件目录,释放C盘内存

由于经常使用vscode开发会安装一些代码提示插件,然后C盘内容会逐渐缩小,最终排查定位到vscode。这个吃内存不眨眼的家伙。 建议:不要把插件目录和vscode安装目录放在同一个位置,不然这样vscode更新后,插件也会消失。 v…

【Docker 内核详解】cgroups 资源限制(二):组织结构与基本规则、子系统简介

cgroups 资源限制(二):组织结构与基本规则、子系统简介 1.组织结构与基本规则2.子系统简介 1.组织结构与基本规则 在之前的博客已经介绍过,传统的 Unix 任务管理,实际上是先启动 init 任务作为根节点,再由…

java项目之宠物医院信息管理系统(ssm框架)

项目简介 宠物医院信息管理系统实现了以下功能: 管理员:个人中心、用户管理、医生管理、医学知识管理、科室信息管理、医生信息管理、预约挂号管理、医嘱信息管理、药品信息管理、订单信息管理、留言板管理、系统管理。用户:个人中心、预约…