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

SDC命令详解:使用set_propagated_clock命令进行约束

相关阅读

SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm=1001.2014.3001.5482


目录

        指定端口列表/集合

        简单使用

        注意事项


        传播时钟是在进行了时钟树综合后,使用set_propagated_clock命令可以将一个理想时钟转换为传播时钟(注意,虚拟时钟即无时钟源对象的时钟无法被转换为传播时钟)(设置对象的propagated_clock属性为true),此时的时钟延迟由源延迟和真实网络延迟组成,这里的网络延迟是根据时钟路径上的线延迟和单元延迟真实计算出来的,而不再使用set_clock_latency命令设置网络延时。有关理想时钟和传播时钟的更详细内容,可以参考下面的博客。如果想要移除传播时钟,使用remove_propagated_clock命令。

静态时序分析:ideal_clock、propagated_clock以及generated_clock的关系及其延迟计算规则(一)https://blog.csdn.net/weixin_45791458/article/details/139998035?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522e4f4bf160af3c2b2f079b3291ac96a32%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=e4f4bf160af3c2b2f079b3291ac96a32&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-139998035-null-null.nonecase&utm_term=%E4%BC%A0%E6%92%AD%E6%97%B6%E9%92%9F&spm=1018.2226.3001.4450        本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。set_fanout_load命令的BNF范式(有关BNF范式,可以参考以往文章)为:

set_propagated_clockobject_list

指定端口列表/集合

        指定一个列表/集合,包含时钟对象、端口对象或引脚对象,对于列表而言,如果有多于一个对象,需要使用引号或大括号包围(对使用集合无效),关于列表和集合的区别,可以参考下面的博客。

SDC命令详解:使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数https://chenzhang.blog.csdn.net/article/details/147144571

简单使用

        下面用一个简单的例子进行说明,图1是两个D触发器的简单级联,可以看出此时的时钟路径上人为插入了一些缓冲器。 

图1 一个简单的例子

        下面使用create_clock命令,在clk端口创建了一个理想时钟,周期为10。

dc_shell> create_clock -period 10 [get_ports clk]

        对于理想时钟而言,它的延迟包括两部分:源延迟(source)和网络延迟(network delay),它们都是使用set_clock_latency命令进行设置的,关于该命令的使用,可以参考之前的文章SDC命令详解:使用set_clock_latency命令进行约束。 注意:理想时钟的网络延迟值是直接设置的,而不会从时钟路径上的线延迟(net delay)和单元延迟(cell delay)中推断出来。

        下面的命令设置了时钟clk的源延迟为2ns,网络延迟为0.5ns。

dc_shell> set_clock_latency -source 2 [get_clocks clk]
dc_shell> set_clock_latency 0.5 [get_clocks clk]

        图2所示的建立时间时序报告显示,时钟的总延迟为2.5ns(注意这里的network delay其实指的是总延迟,而不只是网络延迟),括号中的ideal提示了这是一个理想时钟。

图2 建立时间时序报告

        下面使用set_propagated_clock命令将理想时钟clk转换成传播时钟,此时会给出警告。

dc_shell> set_propagated_clock [get_clocks clk]
Warning: Converting ideal clock at 'clk' to propagated clock.  (UID-477)

        图3是此时的时钟报告,可以看出此时的时钟clk已经拥有propagated_clock属性了,即是一个传播时钟了。 

图3 时钟报告(传播时钟)

        此时的时钟延迟由源延迟和真实网络延迟组成,这里的网络延迟是根据时钟路径上的线延迟和单元延迟真实计算出来的,如图4所示(此时添加了-path full_clock选项以显示出完整的时钟路径)。

图4 展开时钟路径的建立时间报告

注意事项

        有些时候,会设置端口对象或引脚对象的传播时钟属性,此时经过这些端口对象或引脚对象的时钟对象将被视为传播时钟(注意,该时钟本身可以是理想时钟)。

        下面依旧以图1为例说明这种情况,使用set_propagated_clock命令设置输入端口clk的传播时钟属性。

​dc_shell> set_propagated_clock [get_clocks clk]

        此时时钟对象依旧是理想时钟,如图5所示。

图5 时钟报告(理想时钟)

        下面使用set_input_delay命令设置输入端口d的输入延迟。

dc_shell> set_input_delay 0.5 -clock [get_clocks clk] [get_ports d]

        此时经过输入端口d的建立时间时序报告如图6所示(此时添加了-path full_clock选项以显示出完整的时钟路径)。

图6 展开时钟路径的建立时间报告

        可以看出,即使是同一个时钟对象clk,对于发射路径其被视为理想时钟(使用设置网络延迟), 对于捕获路径其被视为传播时钟(使用真实网络延迟)。

        如果将时钟本身设置为传播时钟,发射路径将只包含源延迟,而不含网络延迟(在不使用-reference_pin选项的情况下)。

http://www.lqws.cn/news/212077.html

相关文章:

  • 路过美国Intel公司
  • 【AI论文】反思、重试、奖励:通过强化学习实现大型语言模型的自我提升
  • 计算机组成原理-存储器的概述
  • 关于datetime获取时间的问题
  • stm32内存踩踏一例
  • Doris 与 Elasticsearch:谁更适合你的数据分析需求?
  • 实战:子组件获取父组件订单信息
  • 快速上手shell脚本运行流程控制
  • 行为设计模式之Command (命令)
  • 嵌入式知识篇---Zigbee串口
  • 基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
  • 大话软工笔记—需求分解
  • RT-Thread内核组成——内核移植
  • SpringBoot 配置加载顺序?
  • 如何彻底删除windows10自带的美式键盘
  • 鸿蒙仓颉语言开发实战教程:商城应用个人中心页面
  • 2025年06月07日Github流行趋势
  • xctf-weak_auth(弱口令)
  • B站Miachael_ee——蓝牙教程笔记
  • 接口不是json的内容能用Jsonpath获取吗,如果不能,我们选用什么方法处理呢?
  • 基于投影寻踪博弈论-云模型的综合评价
  • Shell 编程中的流程控制:从基础到实践
  • EPPLUS——CAD c#读写EXCEL的第三方库
  • 僵尸进程是什么?怎么回收?孤儿进程?
  • 【Elasticsearch】映射:Join 类型、Flattened 类型、多表关联设计
  • IDEA中的debug使用技巧
  • 代码注释类型
  • 0基础破解Typora,使用正版已激活Typora
  • 柯尼卡美能达Konica Minolta bizhub 205i打印机信息
  • 【20250607接单】Spark + Scala + IntelliJ 项目的开发环境配置从零教学