news 2026/7/4 3:11:43

set_data_check用法解析(一) lib库中的data check解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
set_data_check用法解析(一) lib库中的data check解析

1. data check简介

建立时间和保持时间检查也可以在任意两个数据引脚之间进行。一个引脚为约束引脚(constrained pin),其作用类似于触发器的数据引脚,而另一个引脚为相关引脚(related pin),其作用类似于触发器的时钟引脚。这种时序检查就是我们通常所说的data check,它可以用来约束两个信号到达时间的差值。

对于两个信号之间关系的约束需求有两种方式实现:

  1. lib库中自带的timing要求
  2. 通过约束方式实现,也就是set_data_check语法实现。

2. lib库中data check举例

先来看第1种方式,lib库中存在如下几种data check类型的timing_arc:

  • non_seq_setup_rising:constrained pin要比related pin的上升沿早到一定时间,类似于时钟上升沿的setup检查
  • non_seq_setup_falling:constrained pin要比related pin的下降沿早到一定时间,类似于时钟下降沿的setup检查
  • non_seq_hold_rising:constrained pin要比related pin的上升沿晚到一定时间,类似于时钟上升沿的hold检查
  • non_seq_hold_falling:constrained pin要比related pin的下降沿晚到一定时间,类似于时钟下降沿的hold检查
    比如说,lib库中描述EFUSE hard IP的PGMEN信号必须早到于AEN信号100ns。也就是PGMEN相对于AEN信号的setup time=100ns。

timing报告如下:

Point Incr Path ---------------------------------------------------------------------- clock sclk (rise edge) 0.000 0.000 clock network delay (propagated) 19.118 19.118 u_efuse_ctrl/pgmen_reg/CK (DRNQV1_7TV50) 0.000 19.118 r u_efuse_ctrl/pgmen_reg/Q (DRNQV1_7TV50) 5.234 & 24.353 r IP_CDM_DIODE_u_efuse_PGMEN/Z (BUFV2_7TV50) 1.990 & 26.342 r u_efuse/PGMEN (S018BCDAEFUSE_PIP064B4M_AG1) -0.043 & 26.299 r data arrival time 26.299 clock sclk (rise edge) 0.000 0.000 clock network delay (propagated) 17.753 17.753 clock reconvergence pessimism 1.365 19.118 clock uncertainty -0.200 18.918 u_efuse_ctrl/aen_reg/CK (DRNQV1_7TV50) 0.000 18.918 r u_efuse_ctrl/aen_reg/Q (DRNQV1_7TV50) 4.691 & 23.609 r IP_CDM_DIODE_u_efuse_AEN/Z (BUFV2_7TV50) 1.551 & 25.160 r u_efuse/AEN (S018BCDAEFUSE_PIP064B4M_AG1) -0.057 & 25.102 r data check setup time -100.000 -74.898 data required time -74.898 ---------------------------------------------------------------------- data required time -74.898 data arrival time -26.299 ---------------------------------------------------------------------- slack (VIOLATED) -101.197

上述情况中,这种情况无需我们去额外设置约束,lib库都做好了。

3. data check和setup/hold check的区别

数据到数据的建立时间检查(setup data check)是在与发起沿相同的沿上执行的(不同于触发器的常规建立时间检查,其中捕获时钟边沿通常会距离发起时钟沿一个周期)。保持时间的check(hold data check)是在发起沿的上一个沿进行的。因此,数据到数据的建立时间检查(setup data check)也称为零周期检查(zero-cycle checks)或同周期检查(same-cycle checks)。如下图所示:


对于data check类型的timing报告,注意:

  1. 这里所说的setup和hold的检查沿,表示的是related data和constrained data launch的相对时间沿。
  2. data to data的check,通常在timing报告中,launch的path和capture的path都是data path,path中都可能出现CK->Q的现象。
  3. 想要通过report_timing定向报datacheck类型的path,可以
report_timing-to<constrained_port>


4. Timing lib中规定的non_seq_hold_rising或者non_seq_hold_falling,PT工具会默认capture沿是上一个时钟有效沿,如下图所示:

该检查可能不符合检查意图(过于放松),因此需要根据设计的检查意图决定是否要设置Multicycle将检查沿移动至同沿,如下图所示:

移动方法为:

set_multicycle_path1-setup-to<constrained pin>

5.当lib库中的data check比较紧张,实际分析了发现可以放松时,也可以通过设置max delay或者min_delay来对data check进行timing放松,设置方法为:

set_min_delay<min_delay_value>-to<constrained pin>set_max_delay<max_delay_value>-to<constrained pin>

4. QA

  • Q1:在进行datacheck分析时,对于related pin,有的是non_seq_setup_rising,有的是non_seq_setup_falling,工具在timing分析时,如何判断当前信号变化是rising还是falling?

  • A1:同一个信号,不同的极性穿过同一个cell时,其延时是不同的。其PT工具会对输入输出的信号边沿进行穷举推导,选择最差的一条报出来。比如说普通的DFF,其CK->Q端的timing arc,有rise_edge也有fall_edge,其延时是不一样的。以rise_edge分析的path为例,如下所示:

Startpoint: launch_reg/Q (rising edge-triggered flip-flop clocked by clk) Endpoint: capture_reg/D (rising edge-triggered flip-flop clocked by clk) Path Group: clk Path Type: max (Setup Check) Point Incr Path ----------------------------------------------------------- clock clk (rise edge) 0.000 0.000 clock network delay (propagated) 0.080 0.080 launch_reg/CK 0.000 0.080 r launch_reg/Q 0.120 0.200 r # CK->Q rise delay net u_launch_to_buf 0.045 0.245 r buf0/Y 0.072 0.317 r # BUF rise delay net u_buf_to_cap 0.033 0.350 r capture_reg/D 0.000 0.350 r ----------------------------------------------------------- Data Arrival Time 0.350 clock clk (rise edge) 2.000 2.000 clock network delay (propagated) 0.080 2.080 capture_reg/CK 0.000 2.080 r library setup time 0.050 2.130 ----------------------------------------------------------- Data Required Time 2.130 Slack (MET): 1.780

以fall_edge分析的path为例,如下所示:

Startpoint: launch_reg/Q (rising edge-triggered flip-flop clocked by clk) Endpoint: capture_reg/D (rising edge-triggered flip-flop clocked by clk) Path Group: clk Path Type: max (Setup Check) Point Incr Path ----------------------------------------------------------- clock clk (rise edge) 0.000 0.000 clock network delay (propagated) 0.080 0.080 launch_reg/CK 0.000 0.080 r launch_reg/Q 0.135 0.215 f # CK->Q fall delay更大 net u_launch_to_buf 0.042 0.257 f buf0/Y 0.068 0.325 f # BUF fall delay net u_buf_to_cap 0.031 0.356 f capture_reg/D 0.000 0.356 f ----------------------------------------------------------- Data Arrival Time 0.356 clock clk (rise edge) 2.000 2.000 clock network delay (propagated) 0.080 2.080 capture_reg/CK 0.000 2.080 r library setup time 0.050 2.130 ----------------------------------------------------------- Data Required Time 2.130 Slack (MET): 1.774

综上,对于non_seq_setup_rising,就以related data的rising edge到达时间计算,对于non_seq_setup_falling,就以related data的falling edge到达时间计算。

  1. Q2:有没有可能出现某个related pin又有non_seq_setup_rising检查又有non_seq_hold_rising检查需求的?

  2. A2:存在。这种乍一看感觉很奇怪,constrained又要比related pin晚到,又要比related pin早到,设计怎么实现呢?
    这里提一句,其实cell的timing lib库并不关心designer的设计意图,它只关心单元cell需要满足预设的timing需求才能保证不出错。也就是timing lib的本意是对于related pin的rising edge对constrained pin规定一段不可跳变的窗口,constrained pin只有在这个窗口之外跳变,才能保证其function的正确性。将constrained pin的到达时间约束在一个合理范围内就可以同时满足non_seq_setup_rising和non_seq_hold_rising的需求。Cell timing lib描述的timing intent如下所示:

    其实这种检查可以类比setup和hold的检查,唯一的区别在前文提到过,data check的时候setup同沿check,hold上一个launch有效沿check。
    乍一看,这样就万事大吉了。但是实际上,PT工具默认的分析方法需要具体问题具体看待。对于constrained pin而言,存在两种情况
    情况1:designer的设计意图是,constrained pin到达时间要早于同拍的related pin,但是不能太早,又要晚于上一个周期的related pin。

    情况2:designer的设计意图是,constrained pin到达时间要晚于同拍拍出的related pin,但是不能太晚,又要早于下一个周期的related pin。

    上述两种情况都满足timing lib中data check的需求。具体需要designer来根据自己的设计意图来自行判断的。若是情况1,则不需要任何特殊exception处理,PT工具天然的分析过程即为如此。若是情况2,则需要设置mcp=1,将setup的检查沿往后挪一拍,hold的沿自动变成当拍检查。

  • Q3:若timing lib中只描述了non_seq_hold_rising或non_seq_hold_falling,检查也是按照发起沿的上一个沿进行检查吗?
  • A3:是的,不管有没有定义non_seq_setup类型的检查,hold的检查都是按照上一个发起沿进行的。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 3:10:46

如何一键实现8个平台同步直播:OBS多RTMP插件完全指南

如何一键实现8个平台同步直播&#xff1a;OBS多RTMP插件完全指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 对于内容创作者来说&#xff0c;同时将直播推送到多个平台是扩大观众覆…

作者头像 李华
网站建设 2026/7/4 3:10:35

Xposed钉钉助手终极指南:5步实现高效位置模拟与智能打卡

Xposed钉钉助手终极指南&#xff1a;5步实现高效位置模拟与智能打卡 【免费下载链接】XposedRimetHelper Xposed 钉钉辅助模块&#xff0c;暂时实现模拟位置。 项目地址: https://gitcode.com/gh_mirrors/xp/XposedRimetHelper Xposed钉钉助手是一款基于Xposed框架开发的…

作者头像 李华
网站建设 2026/7/4 3:08:10

计算机毕业设计之基于大数据的网络招聘信息分析系统设计与实现

本文主要介绍了基于大数据的网络招聘信息分析系统设计与实现。随着互联网的普及&#xff0c;前途无忧招聘网站成为了企业和求职者的重要交流平台。然而&#xff0c;大量的招聘信息给用户带来了信息过载的问题。为了解决这一问题&#xff0c;本文提出了一种基于大数据的网络招聘…

作者头像 李华
网站建设 2026/7/4 3:07:30

华为MetaERP Oracle EBS 各模块业务场景及会计分录汇总表文件信息: 共 11个模块 | 300条业务场景 | 编制日期:2026年7月模块目录表格序号 模块名称 业务场景数 主

Oracle EBS 各模块业务场景及会计分录汇总表模块目录序号模块名称业务场景数主要内容1PO采购模块20条采购订单、接收、发票匹配、预付款、寄售、价格差异等2INV库存模块21条库存收发、盘点、转移、报废、杂项收发、重估等3COST成本模块20条标准成本更新、PPV/IPV/ERV差异、间接…

作者头像 李华
网站建设 2026/7/4 3:03:50

OpenCV Python 金字塔 Lucas-Kanade 稀疏光流跟踪(逐行超详细解析)

目录 一、前置知识&#xff1a;什么是光流 & 金字塔 LK 算法 1. 光流基础概念 2. Lucas-Kanade&#xff08;LK&#xff09;算法约束条件 3. 整体实现流程 二、完整可运行源码&#xff08;带原注释 补充修复&#xff09; 三、分模块逐行深度解析 模块 1&#xff1a;视…

作者头像 李华
网站建设 2026/7/4 3:02:44

92.从底层原理、编程规范、模块化设计到调试避坑!PLC ST 语言工控项目全流程实战

摘要 可编程逻辑控制器(PLC)是工业自动化系统的核心控制单元。本文从工程实践角度出发,系统讲解PLC的硬件架构、扫描周期原理、IEC 61131-3标准编程语言,并以结构化文本(ST)语言为核心,提供从基础逻辑到高级应用的完整代码示例。文章涵盖梯形图与ST语言的转换技巧、常见…

作者头像 李华