时序分析深入必学的时序模型详细讲解

目录

一、前言

二、时序建模

2.1 反相器

2.2 线性时序模型

2.3 非线性时序模型

三、时序模块

3.1 组合单元

3.2 时序单元

3.3 同步检查:setup和hold

3.4 异步检查:recovery和removal

3.5  脉冲宽度检查Pulse width check

3.6 传输时延

3.7 状态独立模块

3.8 黑盒模块的接口时序模块

3.9 线传输时延模型

四、参考资料


一、前言

    时序分析工具能够进行时序分析主要是依据时序模型,时序模型主要是通过单元库描述文件中的时序信息来实现,而时序信息是来自详细的实际电路仿真获取。单元库中的单元可以是独立的单元,IO缓冲器或者是复杂的IP核。

二、时序建模

2.1 反相器

    单元时序模块可以为例化的单元在指定的环境中提供精确的时序信息,提供单元的每个时序弧信息。以下图的反相器为例。

 

  反相器的功能是输出与输入相反,输入A为上升沿时,输出Z为下降沿,Tr为输出上升沿时延值,Tf为输出Z的下降沿输出时延值。因为上升沿和下降沿都是非理想的瞬变状态,因此需要一个阈值点作为下降沿和上升沿作为生效点,此处阈值点为高电平Vcc的50%处。

 

      对于反相器,从输入达到阈值,到输出达到阈值处时,总的延时取决于两个因素:输出负载(输出引脚的负载电容)与输入端口位置处转换时间

    负载电容值会直接影响时延,负载电容值越大,时延越大(也即时序线路中fanout越大,延时越大);时延与输入引脚的转换时间也是成正比关系。输出的偏斜skew也是主要取决于输出负载(输出电容),输出电平转换时间也会随输出负载增加,输出端口的负载也可以影响输入端口的偏斜,如下图

 

2.2 线性时序模型

    线性延时模型是最简单的时序模型,模型的输出转换时间是输入转换时间与输出负载电容的线性函数,输出延时D表达式如下:

                                                                D=D0+D1*S+D2*C

D0,D1,D2为常数,S是输入转换时间,C是输出负载电容。线性模型因为不够精确,通常用于预估,更多的模型是复杂的非线性模型。

2.3 非线性时序模型

    大多数的单元库有一张包含了延时值和单元不同时序弧的时序检查表,有一些高级时序模型如CCS,ESCM会提供电流信息。非线性延时模型NLDM的模型表有延时值,输出偏斜以及时序检查信息。

    以反相器的输出端口out到相关联的引脚INP1模型表为例,表格是一个二维数据表,维度包括输入切换时间和输出负载电容,表格的值为延时值。

 

    表格中包含了从引脚INP1到OUT中时序弧在单元上升沿和下降沿两张延时表格,最大切换时间max_transition为1ns,延时值表为3*3的表格,index_1表示输入切换时间,单位ns,index_2为输出电容,单位pf,通过index_1和index_2可以查询对应组合下的时延值。

三、时序模块

3.1 组合单元

    以一个二输入的与门AND为例,时序弧都是正极性,存在4种时延,因此,也存在4个时延表,AND时序模型也属于非线性时延模型。

A->Z:输出上升沿

A->Z:输出下降沿

B->Z:输出上升沿

B->Z:输出下降沿

 

    下面以一个3输入的与非门为例,时序模型为其中的输入引脚INP1到输出引脚OUT的时延表,包含了2个单元时延表cell_rise,cell_fall和2个转换表rise_transition,fall_transition。同时,时钟极性为negative_unate,说明Cell_rise的延时表是对应于输入引脚为下降沿时的转换时间。

 

 

3.2 时序单元

    以下面时序单元的时序弧为例,对于同步输入引脚,如D,SI,SE,将存在setup检查弧(上升沿和下降沿),hold检查弧(上升沿和下降沿);对于异步输入引脚,如CDN,则存在recovery检查弧和removal检查弧。对于触发器输出引脚,则存在时钟CK引脚到输出Q或QN的传输延时弧(上升沿和下降沿)。

 

    所有的同步时序弧是和时钟的激活边沿相关,在时钟的激活边沿中时序单元进行捕获数据。另外,时钟引脚和异步引脚如清零引脚,将会有一个脉冲宽度时序检查,要求时钟的脉冲宽度不能太小。

3.3 同步检查:setup和hold

    数据如果需要在时序单元上传输通过,setup和hold检查是必须的,检查通过说明时钟有效沿到达时数据输入状态是稳定的,并且被有效捕获到。在时钟有效沿到达前数据输入需保持的最小稳定时间即为setup时间,这个时间值为最新的数据输入信号达到阈值(通常为高电平信号电压值的50%)到有效时钟边沿达到阈值(通常也是高电平电压值的50%)的时间间隔。同理,hold时间为时钟有效沿到达后数据输入必须保持稳定的最小时间,hold值为有效时钟边沿达到阈值到最早的数据信号穿过阈值的时间间隔关于setup/hold的详细计算可查看之前的文章“FPGA设计时序分析二、建立/恢复时间”,链接:https://blog.csdn.net/zyp626/article/details/131747290

    以一个触发器的数据引脚D和时钟引脚CK的时序模型如下,对于setup、hold有对应rise,fall的延时表,延时表从数据D转换时间和时钟CK转换时间两个角度进行。如对于D口下降沿,setup约束将会使用setup表中的fall_constraint数据。

 

 

    在一些场景下,hold值可能是负值,如在上述时序模型中的hold_rising中,这主要发生在从触发器到内部数据锁存点的时延大于时钟路径时延就会出现。因此,负的hold值表示触发器的数据引脚先于时钟引脚变化并且仍然满足hold检查,同理,setup为负值表示触发器的数据输入引脚在时钟引脚之后发生改变但仍能满足setup检查。但setup和hold不能都为负值,因为setup值和hold值之和必须是正数。下图中hold为负值,因为setup一定是先于hold出现,图中数据D中空白区域的宽度是数据信号必须稳定的时间,数据D在时钟维持一段时间稳定后在时钟到达前进行了变化。

 

    hold值为负从时钟偏斜的角度看是更加灵活,可以减少对于修复hold违例所需要的缓冲器插入。

3.4 异步检查:recovery和removal

    异步引脚如在同步单元中的异步清零和异步置位,当异步引脚处于活跃状态时,异步引脚控制输出,而不是时钟锁存的输入数据控制输出。recovery时间是在下一个有效时钟沿到达前,一个异步输入引脚控制信号无效后到下一个时钟有效沿到达之前间必须维持稳定的最小时间;removal时间是在有效时钟沿到达后,异步输入引脚中的异步控制信号必须维持稳定的最小时间。

    下图为输入引脚CDN到关联的时钟引脚CK的recovery检查时间表。

 

3.5  脉冲宽度检查Pulse width check

    除了同步和异步时序检查,还有一种检查:输入引脚信号的脉冲宽度检查,检查的主要是时钟信号。如果时钟信号的脉冲宽度小于指定的最小值,由于时序单元本身有建立时间和保持时间,因此,时钟信号必须也保持有一定的宽度,再是如果脉宽太小,在组合逻辑路径传播过程中会不断被削弱从而导致失真。

    脉冲宽度检查可以指定是对于同步还是异步引脚,同时也可以指定对于高脉冲或低脉冲。下图中指定了引脚CDN中脉冲宽度检查,为低脉冲检查。

 

3.6 传输时延

    时序单元的传输时延是从时钟的有效沿开始到输出的上升沿或下降沿之间的时间。以一个下降沿有效的触发器的时钟引脚CKN到输出引脚Q为例。因为时序感知是non_unate,所以时钟有效沿可以导致输出Q为上升沿或下降沿。

 

 

3.7 状态独立模块

    在很多组合块单元中,输入和输出之间的时序弧取决于块单元中其他输入引脚的状态。这些时序弧可能是单边正极性(positive unate)的,单边负极性(negative unate)的,或者是极性不定的状态。如XOR门的输出可以是单边正极性或单边负极性,输出状态依赖其他输入引脚的状态,对应的时序模块也称为状态独立模块。

    以两输入的异或门XOR为例,在输入A2为逻辑值0时,输入A1到输出Z的时序路径是正极性的。A2为逻辑值1时,输入A1到Z的时序路径负极性的。两个时序模型用状态独立模块表示。

    A2为逻辑值0时,时序模块值如下,function描述了逻辑功能异或,sdf_conf中设定了A2=0,此时时序感知为正极性

 

延时表中index_1为输入偏斜,index_2为输出负载

 

A2为逻辑值0时,时序模块值如下,sdf_conf中设定了A2=1,时序感知为负极性negative_unate

3.8 黑盒模块的接口时序模块

    黑盒接口模块可以有组合时序弧也可以有时序单元的时序弧,通常,这些时序弧都是状态独立的,以下图的设计为例。

 

    输入时序弧用于表示触发器数据输入端口D上的setup或hold时序,通常,在连接到触发器的输入端口D前会存在一个组合逻辑,对DIN端口和时钟端口ACLK进行setup检查。

    异步输入时序弧和recovery/removal时序约束到触发器的异步输入端口相同,如设计中的ARST于时钟ACLK端口的时序检查。

    输出时序弧和时钟到输出端口时延检查类似,通常,在触发器输出端口到输出模块间存在一个组合逻辑块,如设计中的时钟BCLK到输出端口DOUT间的路径。接口时序模块主要不是为了捕获黑盒内部的时序,主要是为了对接口进行时序分析。

    总结:在一个黑盒模块中存在以下几种时序弧

1)输入端口到输出端口间的组合逻辑路径

2)同步输入端口和相关联的时钟间的setup、hold时序弧

3)异步输入与相关联的时钟间的recovery、removal时序弧

4)从时钟引脚到输出引脚间的输出传输时延

3.9 线传输时延模型

    除了上面介绍的单元内部传输时延和切换时延,单元间的连线传输也存在时延。芯片内部的连线大致分为3类:短线,中长线,长线

    短线用于逻辑门之间或对速度要求不高的连接,通常短线长度小于信号波长,并且短线的时延主要受寄生电容和耦合电容的影响。中长线为模块间互连线,速度要求比短线高,但容易产生电容耦合效应,噪声更大。长线主要是全局的连线,对设计的时延影响较大,因此长线都是使用低电阻率减少信号线的电阻损耗。

    在Vivado的device中,通过colors设置可以让不同的线型不同颜色显示,如下图,长线为绿色,本地先为蓝色。

 

    线负载模型可以用于估算电容,电阻和由于交叉的面积消耗,一个单元块的平均线长和块的大小有密切关系。如下图,不同大小的块不同的线负载模型,同时有不同大小的寄生电容,通常,更小的块电容更小。

 

以上图wlm_conservative为例,线负载模型如下

 

    Resistance是每单位互连线长度的电阻值,capacitance是每单位互连线长度的电容,area是每单位互连线长度的面积消耗,slope是没有在fanout length中指定的fanout数据点的外延斜率。

    线负载模型中fanout与线长length的关系如下图,其他fanout,电容,电阻和平均面积消耗都可通过斜率slope=0.5来推算,在线负载模型中指定了对应的比值,以fanout=8为例。

Length=4.1+(8-5)*0.5=5.6 units

Capacitance=Length*capacitance(1.1)=6.16 units

Resistance=Length*resistance(5.0)=28units

Area=Length*area(0.5)=0.28 area units

 

四、参考资料

书籍《Static Timing Analysis for Nanometer Designs》

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

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

相关文章

微信小程序配置文件

目录 小程序配置文件 1. 配置文件介绍 2. 全局配置 2.1 pages 2.2 window 2.3 tabBar 3. 页面配置 4. 项目配置文件 5. 支持使用 sass/less 6. sitemap.json 小程序配置文件 1. 配置文件介绍 JSON是一种轻量级的数据格式,常用于前后端数据的交互&#xf…

LDRA Testbed软件静态分析_软件质量度量

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建 LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果 LDRA Testb…

typescript映射类型

ts映射类型简介 TypeScript中的映射类型(Mapped Type)是一种高级类型,它允许我们基于现有类型创建新的类型,同时对新类型的每个属性应用一个转换函数。通过使用映射类型,我们可以方便地对对象的属性进行批量操作&…

typescript 索引签名类型

ts索引类型简介 在TypeScript中,索引签名类型(Index Signature Type)是一种特殊的类型,它定义了对象中键的类型以及相应的值的类型。通过使用索引签名类型,我们可以表示一个对象,该对象的键可以是任意类型…

python3 flask 实现对config.yaml文件的内容的增删改查,并重启服务

config.yaml配置文件内容 功能就是userpass下的用户名和密码做增删改查,并重启hy2服务 auth:type: userpassuserpass:csdn: csdnlisten: :443 masquerade:proxy:rewriteHost: trueurl: https://www.bing.com/type: proxy tls:cert: /root/hyst*****马赛克******er…

【算法2-1】前缀和、差分与离散化

一、【P3406】海底高铁(差分贪心)​​​​​​ 由于本题涉及到线路问题,需要统计Uim途径每条线路的次数,而且Uim每次的轨迹都是很长一段路径,所以需要使用一个合理的数据结构来维护区间的变化,首先想到线段…

正交匹配追踪算法(Orthogonal Matching Pursuit)实现过程及Python模拟

正交匹配追踪(Orthogonal Matching Pursuit,OMP)是一种用于寻找稀疏信号的贪婪算法,用于求解压缩感知问题中的稀疏近似问题。在压缩感知的背景下,通常我们有一个欠定的线性系统Ax y,其中A是一个已知的测量…

信奥一本通:2022:【例4.7】最小n值

这个题目的难点在于他让你输入1 2 3&#xff0c;不等的数&#xff0c;意思就是你不知道循环要执行几次&#xff0c;用户输入几次就是几次&#xff0c;那就只有这样写 while (cin >> num) #include <iostream> # include <iomanip> using namespace std;…

第三百五十九回

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 013pickers2.gif 我们在上一章回中介绍了"如何实现Numberpicker"相关的内容&#xff0c;本章回中将介绍wheelChoose组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念…

学习鸿蒙基础(4)

1.条件渲染 ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态&#xff0c;使用if、else和else if渲染对应状态下的UI内容。 当if、else if后跟随的状态判断中使用的状态变量值变化时&#xff0c;条件渲染语句会进行更新。。 Entry Component struct PageIfElse {Stat…

【C++杂货铺】模板

&#x1f308;前言&#x1f308; 欢迎观看本期【C杂货铺】&#xff0c;本期内容将讲解模板的初阶&#xff0c;即了解模板&#xff0c;熟练掌握模板的使用方法&#xff0c;了解模板的工作原理等内容。 &#x1f4c1; 函数模板 &#x1f4c2; 概念 函数模板代表了一个函数家族&am…

如何在Windows系统中检测和结束运行中的程序(任务管理器显示运行程序可能有bug)

如何在Windows系统中检测和结束运行中的程序 在Windows系统的日常使用和管理过程中&#xff0c;我们经常需要检测某个程序是否正在运行&#xff0c;并在必要时结束它。本文将详细介绍如何在Windows系统中检测运行中的程序&#xff0c;并提供多种方法来结束这些程序。 检测运行…

通俗易懂的双亲委派机制

当你超过别人一点点&#xff0c;别人会嫉妒你&#xff1b;当你超过别人一大截&#xff0c;别人就会羡慕你 据说给我点关注的都成了大佬&#xff0c;点关注的我都会私发一份好东西 ​​​​你得先知道 在介绍双亲委派机制的时候&#xff0c;不得不提ClassLoader&#xff08;类…

Java字符串转整数的超简单方法!

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 问题描述 当你把一个字符串值和一个整数加在一起而不进行任何形式的转换时会发生什么呢&#…

聚合支付,聚合系统,聚合程序或将成为主流

支付市场的变化对用户、代理商和运营商产生了重大影响。 随着政策监管的日益严格&#xff0c;支付行业逐渐朝着标准化和合理化的方向发展&#xff0c;日益增强其安全性。在这个背景下&#xff0c;聚合平台已经成为未来支付行业发展的重要趋势。特别是在“一机一码”政策实施后&…

前端进度条组件NProgress

nprogress 安装 npm install --save nprogress使用 import NProgress from nprogress // 引入nprogress插件 import nprogress/nprogress.css // 这个nprogress样式必须引入// axios请求拦截器 axios.interceptors.request.use(config > {NProgress.start() // 设置加载进…

【学习心得】编程小白该如何学好C语言(✨新手推荐阅读)

前言 对于刚刚踏入编程领域的小白来说&#xff0c;C语言可能是一个既神秘又充满挑战的领域。但只要你掌握了正确的学习方法&#xff0c;C语言的学习之旅也可以是充满乐趣和成就感的。 一、明确学习目标 对于初学者来说&#xff0c;明确学习目标是学好C语言的第一步。一个清晰…

BIG DATA —— 大数据时代

大数据时代 [英] 维克托 迈尔 — 舍恩伯格 肯尼斯 库克耶 ◎ 著 盛杨燕 周涛◎译 《大数据时代》是国外大数据研究的先河之作&#xff0c;本书作者维克托迈尔舍恩伯格被誉为“大数据商业应用第一人”&#xff0c;他在书中前瞻性地指出&#xff0c;大数据带来的信息…

扩散模型+轨迹预测

目录 1. 基础知识2. 轨迹预测相关2.1 Leapfrog Diffusion Model2.2 MID2.3 中科院2.4 DICE2.5 MotionDiffuser2.6 DiffTraj 3. 练手时可参考4. 扩展&#xff1a;扩散模型RL 1. 基础知识 Stable diffusion扩散模型相关 Diffusion相关二 Diffusers是hugging face发起的用于专门…

Vue3引用第三方模块报错Could not find a declaration file for module ***.

在引用第三方的组件时候报错如下 原因是&#xff1a;该组件可能不是.ts文件而是.js文件 解决方案&#xff1a; 1.在Src的目录下面新建一个文件为shims-vue.d.ts的文件 2.文件内容为 declare module xxx&#xff0c;xxx就是你报错的模块 例如我这样 declare module vue3-pu…