当前位置: 首页 > news >正文

第八章 时序检查(下)

文章目录

    • 8.9 案例(Examples)
      • 半周期路径(Half-cycle Path)
      • 快速时钟域到慢速时钟域(Fast to Slow Clock Domain)
      • 慢速时钟域到快速时钟域(Slow to Fast Clock Domain)
    • 8.10 多时钟(Multiple Clocks)
      • 8.10.1 整数倍(Integer Multiples)
      • 8.10.2 非整数倍(Non-Integer Multiples)
      • 8.10.3 移相(Phase Shifted)
    • 知乎翻译圣经



8.9 案例(Examples)

在该部分中,将描述不同场景下的发起时钟和捕获时钟且展示建立时间检查和保持时间检查是如何进行的。图8-28展示了该案例的具体情况。


半周期路径(Half-cycle Path)

案例1(case 1)

在此示例中,两个时钟具有相同的周期,但相位相反。以下是时钟定义,其波形如图8-29所示。

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

建立时间检查是从发起沿( 0 n s 0ns 0ns)到下一个捕获沿( 10 n s 10ns 10ns)的。半个时钟周期的裕量可用于保持时间检查,以验证在 20 n s 20ns 20ns处发起的数据是否在 10 n s 10ns 10ns处未被捕获沿所捕获。以下是建立时间检查的路径报告:

以下是保持时间检查路径时序报告:

案例2(case 2)

此示例与上一案例类似,不过发起时钟和捕获时钟的相位相反。以下是时钟定义,其波形如图8-30所示。

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

建立时间检查从 5 n s 5ns 5ns的发起时钟沿到 10 n s 10ns 10ns的下一个捕获时钟沿。保持时间检查从 5 n s 5ns 5ns的发起时钟沿到 0 n s 0ns 0ns的捕获时钟沿。以下是建立时间检查的路径报告:

以下是保持时间检查路径时序报告:


快速时钟域到慢速时钟域(Fast to Slow Clock Domain)

在此示例中,捕获时钟是发起时钟的二分频。以下是时钟定义:

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

波形如图8-31所示。建立时间检查是从 10 n s 10ns 10ns的发起沿到 20 n s 20ns 20ns的捕获沿,保持时间检查是从 0 n s 0ns 0ns的发起沿到 0 n s 0ns 0ns的捕获沿。以下是建立时间检查的路径报告:

以下是保持时间检查路径时序报告:


慢速时钟域到快速时钟域(Slow to Fast Clock Domain)

在此示例中,捕获时钟速度是发起时钟速度的 2 2 2倍。图8-32中为建立时间和保持时间检查对应的时钟沿:从发起沿 0 n s 0ns 0ns到下一个捕获沿 5 n s 5ns 5ns进行建立时间检查,保持时间检查是在建立时间捕获沿前一个周期的捕获沿进行的,也就是说,发起沿和捕获沿都为 0 n s 0ns 0ns

以下是建立时间检查的路径报告:

以下是保持时间检查的路径报告:



8.10 多时钟(Multiple Clocks)


8.10.1 整数倍(Integer Multiples)

在设计中通常会定义多个时钟,这些时钟的频率是彼此的整数倍。在这种情况下,会通过计算所有相关时钟(related clocks)之间的公共基本周期来执行 S T A STA STA(如果两个时钟域之间具有数据路径,则两个时钟相关)。建立公共基本周期的目的是以便所有时钟都同步。

以下是三个相关时钟的示例:

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

分析 C L K P CLKP CLKP C L K M CLKM CLKM时钟域之间的路径时,将使用 20 n s 20ns 20ns的公共基本周期,如图8-33所示。

Expanding clock 'CLKP' to base period of 20.00 (old period was
5.00, added 6 edges).
Expanding clock 'CLKQ' to base period of 20.00 (old period was
10.00, added 2 edges).

以下是建立时间检查的路径报告,用于从较快时钟 C L K P CLKP CLKP到较慢时钟 C L K M CLKM CLKM的路径。

相应保持时间检查的路径报告如下:


8.10.2 非整数倍(Non-Integer Multiples)

考虑当两个频率不是彼此整数倍的时钟域之间存在数据路径的的情况。例如,发起时钟是公共时钟的 8 8 8分频,而捕获时钟是公共时钟的 5 5 5分频,如图8-34所示。本节将介绍在这种情况下如何执行建立时间和保持时间检查。

以下是时钟定义(波形图如图8-35所示)。

create_clock -name CLKM \
	-period 8 -waveform {0 4} [get_ports CLKM]
create_clock -name CLKQ -period 10 -waveform {0 5}
create_clock -name CLKP \
	-period 5 -waveform {0 2.5} [get_ports CLKP]

时序分析会先计算相关时钟的公共周期,然后再将时钟扩展到该公共周期。请注意,仅针对相关时钟(即在它们之间具有时序路径的时钟)去计算公共周期。 C L K Q CLKQ CLKQ C L K P CLKP CLKP之间数据路径的公共周期仅扩展为 10 n s 10ns 10ns的公共周期, C L K M CLKM CLKM C L K Q CLKQ CLKQ之间数据路径的公共周期为 40 n s 40ns 40ns,而 C L K M CLKM CLKM C L K P CLKP CLKP之间数据路径的公共周期也为 40 n s 40ns 40ns

让我们考虑一条从 C L K M CLKM CLKM时钟域到 C L K P CLKP CLKP时钟域的数据路径,这种情况下时序分析的公共基本周期为 40 n s 40ns 40ns

建立时间检查在时钟发起沿和捕获沿之间的最短时间内进行。在我们从 C L K M CLKM CLKM C L K P CLKP CLKP的示例路径中,这就是 24 n s 24ns 24ns处的时钟 C L K M CLKM CLKM发起沿以及 25 n s 25ns 25ns处的时钟 C L K P CLKP CLKP捕获沿。

以下是保持时间检查的路径报告,最严格的保持时间检查是从 0 n s 0ns 0ns处的 C L K M CLKM CLKM发起沿到 0 n s 0ns 0ns处的 C L K P CLKP CLKP捕获沿。

现在,我们对从 C L K P CLKP CLKP时钟域到 C L K M CLKM CLKM时钟域的路径的建立时间进行检查。在这种情况下,最严格的建立时间检查是从 15 n s 15ns 15ns处的时钟 C L K P CLKP CLKP发起沿到 16 n s 16ns 16ns处的时钟 C L K M CLKM CLKM捕获沿。

!

以下是保持时间检查的路径报告,同样,最严格的还是0ns处的检查。


8.10.3 移相(Phase Shifted)

在以下示例中,两个时钟有 90 ° 90° 90°的相移(phase shift):

create_clock -period 2.0 -waveform {0 1.0} [get_ports CKM]
create_clock -period 2.0 -waveform {0.5 1.5} \
	[get_ports CKM90]

图8-36给出了使用这两个时钟的示例。建立时间检查的路径报告如下:

0.5 n s 0.5ns 0.5ns处的 C K M 90 CKM90 CKM90第一个上升沿是捕获沿,保持时间检查是在建立时间捕获沿之前一个周期的时钟沿处。对于 2 n s 2ns 2ns的发起沿,建立时间捕获沿为 2.5 n s 2.5ns 2.5ns,因此保持时间检查沿就在 0.5 n s 0.5ns 0.5ns处的前一个捕获沿。保持时间检查的路径报告如下:

在第10章中还会介绍其它时序检查,例如数据到数据(data to data)检查和时钟门控(clock gating)检查。



知乎翻译圣经

静态时序分析圣经翻译计划——第八章:时序检查 (下)

相关文章:

  • Android 10 低内存应用白名单和应用保活
  • 攻防演练中攻击队需要的安全技能第二篇
  • C#的File 类使用说明
  • 零基础能学大数据技术吗?学完能找到工作吗?
  • 实时即未来,车联网项目之远程诊断实时故障分析【七】
  • 《SpringBoot篇》10.JPQL超详细介绍与JPA命名规则
  • 【Android-实战】1、Room 使用 Flow 和 collect() 监听数据库的变化、动态更新页面
  • python字符串应用
  • asp.net高校网上评教信息系统VS开发sqlserver数据库web结构c#编程计算机网页项目
  • 暂退法dropout----详解与分析(多层感知机)
  • Android Tablayout样式修改
  • 朋友圈那位隐藏大佬的单片机学习心得
  • Android系统启动流程全解析--你知道Android系统启动都干了啥吗
  • openGl绘制五星红旗
  • 【数据结构】二叉树
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • C++类的相互关联
  • exif信息对照
  • javascript 总结(常用工具类的封装)
  • Javascript弹出层-初探
  • Laravel 实践之路: 数据库迁移与数据填充
  • markdown编辑器简评
  • npx命令介绍
  • PAT A1092
  • Rancher如何对接Ceph-RBD块存储
  • Redis 懒删除(lazy free)简史
  • sessionStorage和localStorage
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Vultr 教程目录
  • 从重复到重用
  • 对JS继承的一点思考
  • 近期前端发展计划
  • 力扣(LeetCode)22
  • 前端性能优化--懒加载和预加载
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 算法之不定期更新(一)(2018-04-12)
  • 通过几道题目学习二叉搜索树
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​queue --- 一个同步的队列类​
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • ###STL(标准模板库)
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (+4)2.2UML建模图
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (过滤器)Filter和(监听器)listener
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)http协议
  • .libPaths()设置包加载目录
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core 成都线下面基会拉开序幕
  • .NET CORE使用Redis分布式锁续命(续期)问题