STA series --- 8.Timing Verification (PARTI)

2023-11-15

本篇内容,基于阅读J. Bhasker • Rakesh Chadha著作《Static Timing Analysis for Nanometer Designs》后进行的总结以及自己的观点和感想,如有不正确的地方,还请指点。读者有微电子基础将更好理解内容。(图片内容绝大部分直接引用书中)

本章节介绍STA check中各种timing相关的check。

前面有做过介绍,timing path一共分为4类,i2reg, reg2reg, reg2o,i2o,其中大量的检查应该是reg2reg。对于reg2reg的timing检查项又分为很多种,其中setup/hold check最为常见。

1. setup/hold timing check

关于setup/hold timing 的check,有专门拎出来一个文章介绍Timing Check – hold/setup check原理介绍。此处不再赘述,这个部分讨论一些我觉得可能比较重要或者比较疑惑的问题。

1.1 端口约束的min/max值

其实前面也有介绍端口约束的内容,set_input_delay/set_output_delay这样的命令
其实前面也有介绍端口约束的内容,set_input_delay/set_output_delay这样的命令。
以set_input_delay举例:
如果check setup,set_input_delay 2 –max –clocks CLK [get_ports PORT1]
如果check hold, set_input_delay 0 –min –clocks CLK [get_ports PORT1]

可以发现。Setup/hold 的端口处的约束有所不同,第一点是max/min的约束,针对setup/hold不同的check,第二点就是约束值了。通常情况下,对于setup check,这个max的值都是大于0的值,往往是一个比较大的值,这是为了把该design做的足够短,这样到了上一层,之间的path往往更容易满足。而对于hold check,这个min的值一般都是小于或者等于0的,这个也是取决于hold的检查方式,期望本层design的端口处hold timing足够,那么到了外层也更容易满足hold检查。

1.2 关于端口约束的时钟

关于virtual clock的内容,为什么要有这个虚拟时钟呢?其实很多比较标准的公司,design设计中对于block的port口,都有相应的clock的端口约束的描述。那对于没有描述的端口,或者没有描述的端口非常多的情况,其实可以拿一个virtual clock去做一个统一的约束,这样比较粗糙,但是节省时间和效率。

2. Multicycle Paths

2.1 Multicycle path 概念理解

所谓的multicycle,其实就是指多个cycle 的check,通常的STA check,reg2reg,上一个时钟沿发数,下一个时钟沿收数,在一个时钟周期内保证数据能从一个reg传递到另外一个reg。但是在有的时候design会有特殊的需求,比如我不需要一个时钟周期就采到数,我可能每三个时钟周期才会去采前一个reg的数。
在这里插入图片描述

如下图所示,正常情况下①会作为我们的setup的capture时钟沿进行check,②作为默认的hold 沿进行check。 而当我们进行multicycle path的设定时候

set_multicycle_path 3 -setup -from [get_pins UFF0/CK] -to [get_pins UFF1/D]
set_multicycle_path 2 -hold -from [get_pins UFF0/CK] -to [get_pins UFF1/D]

此时的seutp check就是对应第③个时钟沿,而hold check对应第②个时钟沿。如果没有对于hold 的multicycle 设定,那么hold check 对应④这个沿,这个时候会有capture path多处来两个时钟周期,hold将会非常难以满足,报出很大的vio,这并不是我们原本期待的。
在这里插入图片描述

从命令里面可以看到,当setup的multicycle设置为3个时候,hold 相应设置为2个,这个怎么理解。其实从下图中依然可以看出来,一般情况下,setup check为下一个有效时钟沿,而hold check为当前有效时钟沿。因此hold check的时钟沿要比setup提前一个。而在STA工具中,会默认把hold的沿设置为setup的capture clock的前一个沿。所以当setup的时钟沿为第三个时候,那么hold设置一个2,再加上工具默认的提前一个沿,那么hold check还是在②。所以说我们在设置setup 的multicycle check时候,需要相应的设置hold 的multicycle check。
另外还有需要注意的,对于不同频率的两个clock之间path设置multicycle时候,在命令中需要指定-start/-end,start指的是相对与launch clock移动的时钟周期,end指的是相对与capture时钟移动的时钟周期。

2.1 different clock frequency cross

上个小节讲解了对于同一个clock 频率之间的timing check,如何设置multicycle以及check结果,那么对于不同频率之间的是稍微有些不同的。

2.1.1 慢到快时钟的检查
2.1.1.1 无特殊multicycle 设置

如下所示为低频到高频之间的path,当两个时钟属于同一个时钟分组,就会存在timing check。

create_clock -name CLKM -period 20 -waveform {0 10} [get_ports CLKM] 
create_clock -name CLKP -period 5 -waveform {0 2.5} [get_ports CLKP]

在这里插入图片描述

如果我们不对这两个时钟进行multicycle定义,那么STA工具会自动对两个时钟最相近的有效时钟沿进行check,如下图8-23所示,launch clock时钟沿为0,setup capture时钟沿为5ns ,STA会依然最严格的规则进行timing检查。Hold还按照capture的样子超前提一个周期,保持正常。
在这里插入图片描述

Setup timing report如下所示,从这个报告中可以看出来,timing 是meet的,但是在实际的电路中,如果clock skew相差很大,或者data path很长( 如下图绿色框所示),那么极易造成timing violation。
在这里插入图片描述

因为hold没有问题,还是同沿check,就不贴相应的path了。

2.1.1.2 只设置setup multicycle check

如果我们只对其进行setup 的multicycle path 设定,如下命令,-end指代的是launch clock沿不变,capture clock沿按照第四个沿进行检查。那么这个时候,setup timing path中的clock CLKP (rise edge)将会变成20,如上图红色红红所示,而slack也会变成4.44+15=19.44.因为path变化不大,就不贴图了。

set_multicycle_path 4 -setup -from [get_clocks CLKM] -to [get_clocks CLKP] –end

在这里插入图片描述

但是此时的hold ,因为没有设置multicycle path ,所以检查的沿就如上图中的箭头所示,此时hold的capture clock 沿要比launch clock沿晚上3个CLKP的时钟周期,如下图中的红色框框所示,这个会导致很严重的timing vio,如下图所示:
在这里插入图片描述

2.1.1.3 只设置同时设置setup和hold的 multicycle check

这样的timing vio不是我们所期望的。因为实际上期望的hold check是launch clock沿与capture clock沿保持一致有效的时候。因此,还需要对hold进行multicycle 设定。看如下命令所示,依然是-end,这个是指hold参考launch时钟沿,在setup check的第四个时钟沿基础上超前挪三个。加上工具自动挪的一个,这样hold检查的launch和capture沿就对齐了。如下图所示。设置完成下面命令以后,timing path相比较于上图,红框内的15就会变未0,slack就会变成-14.84+15=0.16。此处不再贴timing path 图。

set_multicycle_path 4 -setup -from [get_clocks CLKM] -to [get_clocks CLKP] –end
set_multicycle_path 3 -hold -from [get_clocks CLKM] -to [get_clocks CLKP] –end

在这里插入图片描述

2.1.2快到慢时钟的检查

上面讲解了慢到快时钟的timing check以及multicycle设定。其实快到慢是类似的。这个小节不会再详细展开。只会介绍一些不同点。

在这里插入图片描述

create_clock -name CLKM -period 20 -waveform {0 10} [get_ports CLKM]
create_clock -name CLKP -period 5 -waveform {0 2.5} [get_ports CLKP]
2.1.2.1. 如果不设置multicycle

这个时候,setup报告如图中所示,会找最紧的两个launch和capture沿进行check,即setup4这个检查。这个时候launch的其实时间是15,capture的起始时钟是20,依然是setup 检查需要满足5ns内完成。而此时的hold check是没有问题的,因为hold 检查沿相比较setup超前挪动了一个沿,此时的launch和capture是对齐的。

2.1.2.2. 只设置setup multicycle

如果只设置了setup multicycle 如下所示

set_multicycle_path 2 -setup -from [get_clocks CLKP] -to [get_clocks CLKM] –start

此时setup check的报告中,launch的起始点将会变成10,capture依然是20,这个时候setup检查需要在10ns内完成。
而如果没有设置hold,那么hold被工具自动相对与setup的captureclock移动一个start clock的周期,也就是在15ns处,这个时候hold check的launch clock沿为10ns,hold check的capture沿为15ns,存在5ns的差距,会导致vio出现。

2.1.2.3. 同时设置setup/hold multicycle
set_multicycle_path 2 -setup -from [get_clocks CLKP] -to [get_clocks CLKM] –start
set_multicycle_path 1 -hold -from [get_clocks CLKP] -to [get_clocks CLKM] –start

同时设置了,setup满足10个周期内检查没有问题。
对于hold,相对于setup的capture clock,向前移动一个start clock周期到了15ns,工具又自动移动一个start clock的周期到了10ns,这个时候hold check的launch和capture clock都是10ns,沿对齐了,这样timing check才不会有大问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STA series --- 8.Timing Verification (PARTI) 的相关文章

  • 我在日本小帅哥那学习了GCN

    事件起源 最近在研究GNN 看了些许GNN的东西 心想着光看不练门外汉啊 这可不行 于是我开始自己动手实现一个GCN识别 一想到整一个模型demo 那必少不了MINIST数据集 反正就移花接木大法 MINIST可能会想 我这么忙 真的屑屑你

随机推荐

  • 京东金融上线人工智能解决方案“京东超脑”,重庆市建立国际大数据产业学院

    京东金融上线人工智能解决方案 京东超脑 高德地图与德尔福就大数据 智能驾驶能达成战略合作 专注为中小企业提供贷款服务 金融科技公司Lendingkart获2500万美元融资 以下为您奉上更多大数据热点事件 编辑 Abby 官网 www da
  • 【Python脚本】Python自动大麦网抢票,准点原价秒杀演唱会门票,拒绝黄牛交易!从我做起!!!1

    文章目录 前言 一 分析购票过程 二 Selenium 模拟浏览器操作 三 逆向工程 抢票接口 总结 前言 你是否错过了周杰伦的票 最近又没抢到五月天的票 不要太难过 今晚有张学友的票 后天还有张杰的票 加油哦 Python配套案例源码 资
  • HTML中各类空格占位符

    符号 表示 32 普通的英文半角空格 160 nbsp xA0 普通的英文半角空格但不换行 12288 中文全角空格 一个中文宽度 8194 ensp 半角 en 空格 半个中文宽度 不受字体影响 8195 emsp 全角 em 空格 一个
  • 金九银十,你需要这份Android大厂高频面试题解析

    一年已经过大半 金九银十将来临 在寻找下一份工作之前 我们需要先问自己几个问题 首先 我们的基础知识是否扎实 有没有学习新技术 其次 有没有尝试过不依赖百度来解决问题 第三 我们的技术栈是否已经老化 有没有接触过工作之外的技术栈 随着技术的
  • CSS中常用的属性.htm

  • 企业微信刚上线被曝存安全漏洞

    4月18日 腾讯正式在iOS Android Windows Mac四个平台同时推出了企业微信1 0版本 这个江湖传闻已久的第一代企业微信1 0版本也是腾讯用来投石问路的产品 用户可注册并免费使用 这款定位为一款办公沟通工具 想让我们的工作
  • 软件测试之删除功能点用例梳理

    共计22点 一 UI界面测试 删除按钮 UI显示正常 布局合理 删除后 结果展示 布局合理 删除后 页面的分页 布局合理 二 用户体验测试 不选择任何信息 直接点击删除按钮 是否有提示 删除某条或多条信息时 应该有确认提示 三 功能测试 删
  • docker mysql5.7.16 中文乱码

    有部分同学会遇到 在centos上docker mysql没乱码 但是在fedora系统上的docker mysql会有乱码问题 这兴许是docker mysql的问题 这里的bug我们不去追究 这里主要讲解决方案 首先系统要安装有dock
  • 工业质检如何以“智”取胜?15分钟上手工业零部件检测全流程方案

    工信部联合国家发展改革委 教育部 科技部等部门发布了十四五智能制造发展规划 规划中提出 到2025年70 规模以上的制造业企业基本要实现数字化网络化 建成500个以上引领行业发展的智能制造示范工厂 制造业离不开质检质检需要AI智能化赋能 制
  • 问题:your cpu does not support kvm extensions

    问题 我的BIOS开启了CPU虚拟化 但是虚拟机仍然显示your cpu does not support kvm extensions 解决 1 关闭虚拟机 2 虚拟机上单击右键 设置 3 选择下图选项 4 重启虚拟机 问题解决
  • JAVA 中的 -> 是什么意思?

    在 JAVA核心编程 中 有一段这样的代码 import javax swing import java awt import java io File public class ImageViewer public static void
  • 我的创作纪念日2023.8.5

    机缘 在CSDN的创作开始于去年 创作的初衷是希望对自己的学习经历进行记录 同时也把自己的经验和收获传递给更多需要的小伙伴 创作博客的过程是一个将输入的知识进行再生产的过程 在此期间 知识获得了沉淀和提纯 思路和想法也愈发通畅 收获 1 在
  • sql根据入职日期查询工龄

    员工表 查询入职满5年的员工 员工表 查询入职满5年的员工在这里插入图片描述 部门表 在这里插入图片描述 SELECT FROM COM WHERE entry lt DATE SUB SYSDATE INTERVAL 5 YEAR 原文链
  • 苹果开发者账号Apple ID如何进行资料修改?

    我们在申请了开发者账号后 有时候需要对账号进行资料修改 只要你有了Apple ID 也就是邮箱 和苹果的密保 密码 那这个Apple ID就唯一属于你的了 下面会截图说明如何进行修改 首先登陆Apple ID管理网站 https apple
  • Leetcode466.统计重复个数——掐头去尾寻找循环点

    文章目录 引入 本题题解 引入 每日一题出现了这么一道题 466 统计重复个数 题目在此就不做展示了 直接说思路 刚拿到这道题的时候 首先会找 多少个s1才能够拼成一个s2 比如 abba 和 ab 那么一个 abba 里面就包含了 abb
  • 蓝桥杯真题:乘积尾零(2018 年省赛)

    如下的 1010 行数据 每行有 1010 个整数 请你求出它们的乘积的末尾有多少个零 5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6113 5659 5245 7432
  • c结构体中char[0]的作用-实现数组扩展

    struct Data int len char data 0 原来的data中没有元素 不分配内存 结构体Data的大小为4 假如现在分配15字节的内存 并且将指向这块内存的指针强制转换为 Data Data pData Data mal
  • 用于多模态图像配准的弱监督卷积神经网络

    Weakly Supervised Convolutional Neural Networks for Multimodal Image Registration 摘要 在多模态图像配准的监督学习中 最基本的挑战之一是体素级空间对应的基值的
  • lua学习笔记之详解lua堆栈

    原文连接 http blog csdn net musicvs article details 8440707 1 Lua的堆栈和全局表 我们来简单解释一下Lua的堆栈和全局表 堆栈大家应该会比较熟悉 它主要是用来让C 和Lua通信的 是的
  • STA series --- 8.Timing Verification (PARTI)

    本篇内容 基于阅读J Bhasker Rakesh Chadha著作 Static Timing Analysis for Nanometer Designs 后进行的总结以及自己的观点和感想 如有不正确的地方 还请指点 读者有微电子基础将