STA | 5. SDC是如何炼成的?时钟定义篇 - 附create_generated_clock花式定义方法!

STA学习记录-generated clock STA学习记录 阅读详情
AI摘要

本文深入探讨了STA(静态时序分析)中时钟的定义与生成过程,包括create_clock与create_generated_clock命令的详细解析。文章通过实例展示了不同场景下的时钟定义策略,如分频、相位调整及多时钟共存的处理方法,为读者提供了全面的时钟管理指南。

前面几篇文章分别介绍了,Cell Delay,Net Delay,以及Path Delay。从《STA | 3. 如何做一条合格的Path》一文中可以看出,对于同步数字电路,只要在时序单元的clock pin定义好了时钟,STA工具或引擎就会默认去检查setup/hold time,否则工具不知道如何进行STA分析。由此可见,定义时钟是STA的第一步,也是写SDC的第一步。

定义时钟

从最早的芯片规格定义分解出系统所需要的时钟和频率,以及各个模块需要的时钟和频率。SoC的时钟一般是由PLL产生,然后经过时钟生成电路和分配网络,最终给具体的功能模块使用。一般地,第三方IP供应商都会提供比较成熟的SDC,SoC集成时需稍作修改。对于自研的IP和SoC顶层,设计人员在提供RTL的同时,也需提供一份时钟结构图,一方面是方便撰写SDC,另一方面对后端PnR有针对性的进行CTS也非常有帮助。

时钟结构图分不同的层次,或抽象或具体,看具体的需要了,下面是一颗MCU全局时钟分布的结构图,大家有个认识就可以:

基于详细的时钟结构图,定义时钟的命令有两个:create_clock和create_generated_clock

其中,create_clock命令比较简单易懂,格式如下:

create_clock [-name clock_name] \
    -period period_value \
    [-waveform edge_list] \
    [-add] \
    [source_objects]

create_generated_clock命令解析

create_generated_clock命令格式如下,主要是定义generated clock和master clock的关系:

create_generated_clock [-name clock_name] \
    -source master_pin \
    [-master_clock clock] \
    [-edge edge_list] \
    [-edge_shift shift_list] \
    [-divide_by factor] \
    [-multiply_by factor] \
    [-duty_cycle percent] \
    [-combinational]
    [-invert] \
    [-add] \
    source_objects

create_generated_clock 需要指定源时钟(master clock)的master_pin,在CTS时,默认会去balance这两个时钟(即generated clock 和 master clock),让skew尽可能小。而且在计算generated clock的clock latency时,会把从master clock pin 到generated clock pin之间的delay也考虑在内。在工具中report_timing的时候,通过选项-path_type full_clock_expanded可以将master clock的部分也展开。

report_timing -path_type full_clock
report_timing -path_type full_clock_expanded

需要注意:在使用create_generated_clock时,需要保证电路结构和命令的效果是一致的,否则工具在report_timing时会报错,比如下面的错误(UITE-461),这时就要仔细检查分频电路结构了。

Error: Generated clock 'CLKdiv2 with source pin Udiv/Q' 'rise_edge' is not satisfiable; zero
source latency will be used. (UITE-461)


Error: Generated clock 'CLKdiv2 with source pin Udiv/Q' 'fall_edge' is not satisfiable; zero
source latency will be used. (UITE-461)

简单2分频

先看一个简单的2分频的实际的例子,命令和效果图如下:

create_clock -name SYSCLK \
    -period 2 \
    [get_ports SYSCLK]
 
create_generated_clock -name DIVIDE \
    -source [get_ports SYSCLK] \
    -divide_by 2 \
    [get_pins FF1/Q]

考虑了edge/edge_shift的3分频实例

下面是3分频的实例,-edge选项中{3 5 9}分别表示SYSCLK的第3、5、9个时钟沿(clock edge),也分别对应DIV3B的一个完整时钟周期(上升、下降、上升)的时钟沿时间点。而-edge_shift选项{2.2 2.2 2.2}表示将DIV3B每个时钟沿都往后延迟2.2ns,命令和效果图如下:

create_clock -name SYSCLK \
    -period 2.2 \
    [get_ports SYSCLK]


create_generated_clock -name DIV3B \
    -source [get_ports SYSCLK]  \
    -edges { 3 5 9 } \
    [get_pins U3/Q]


create_generated_clock -name DIV3C \
    -source [get_ports SYSCLK]  \
    -edges { 3 5 9 } \
    -edge_shift {2.2 2.2 2.2} \
    [get_pins U4/QN]

考虑invert/preinvert的实例

create_generated_clock使用-invert/-preinvert选项都表明generated clock与master clock相位相反,但这两个选项的区别是:

  • preinvert : Creates a generated clock based on the inverted sense of the master clock.

  • invert : Creates an inverted generated clock based on the non-inverted sense of the master clock.

命令和效果图如下:

create_generated_clock -name gclk_pos \
-source [get_pins FF1/CLK]  \
-divide_by 2 \
[get_pins FF1/Q]


create_generated_clock -name gclk_neg \
-source [get_pins FF1/CLK] \
-divide_by 2 \
-preinvert \
[get_pins FF1/Q]


create_generated_clock -name glk_inv \
-source [get_pins FF1/CLK] \
-divide_by 2 \
-invert \
[get_pins FF1/Q]

同一点定义多个generated clock

在实际电路中比较常见的情况是,不同的场景下使用不同频率的时钟来驱动电路,如下图所示,同一个时钟,与经过二分频,四分频后的时钟经过MUX输出给电路使用。

这种情况下,需要在UMUX输出点定义三个时钟CLKbypass/CLKdiv2/CLKdiv4,而且这三个时钟在物理上是不能共存的(physically_exclusive),可以考虑使用以下命令来定义时钟:

create_clock -period 10 CLK


create_generated_clock -name CLKbypass \
    -source [get_ports CLK] \
    -master CLK \
    -divide_by 1 \
    -combinational \
    -add \
    UMUX/Y


create_generated_clock -name CLKdiv2 \
    -source FFdiv2/CK \
    -master CLK \
    -divide_by 2 \
    -add \
    UMUX/Y


create_generated_clock -name CLKdiv4 \
    -source FFdiv4/CK \
    -master CLK \
    -divide_by 4 \
    -add \
    UMUX/Y


set_clock_groups -physically_exclusive \
    -group {CLKbypass} \
    -group {CLKdiv2} \
    -group {CLKdiv4}

注意,这种方式定义时钟看似合理,但是容易造成问题,因为在CLK和UMUX/Y之间有三条不同的路径,延迟大小不同,所以在计算timing时,在launch path和capture path上选择的路径会不同,带来悲观的影响,如下图所示,也有可能在计算min_pulse_width时造成假的违例。

在Solvnet上给出了更恰当的处理方式,具体命令如下:

# create parent clock
create_clock -period 10 CLK


# create divide-by-2, divide-by-4 generated clocks
create_generated_clock -name CLKdiv2 -divide_by 2 FFdiv2/Q -source FFdiv2/CK
create_generated_clock -name CLKdiv4 -divide_by 4 FFdiv4/Q -source FFdiv4/CK


# create "MUXed" versions of all clocks arriving at MUX
create_generated_clock -name CLK_mux -combinational UMUX/A -source UMUX/A
create_generated_clock -name CLKdiv2_mux -combinational UMUX/B -source UMUX/B
create_generated_clock -name CLKdiv4_mux -combinational UMUX/C -source UMUX/C


# create divide-by-3 versions of all clocks arriving at FFdiv3
create_generated_clock -name CLK_mux_div3 \
    -divide_by 3 FFdiv3/Q -source FFdiv3/CK -master CLK_mux -add
create_generated_clock -name CLKdiv2_mux_div3 \
    -divide_by 3 FFdiv3/Q -source FFdiv3/CK -master CLKdiv2_mux -add
create_generated_clock -name CLKdiv4_mux_div3 \
    -divide_by 3 FFdiv3/Q -source FFdiv3/CK -master CLKdiv4_mux -add


# apply physical exclusivity to all clock families (generated clocks included)
# which are exclusive due to statically switched MUX
set_clock_groups -physically_exclusive \
    -group {CLK_mux     CLK_mux_div3} \
    -group {CLKdiv2_mux CLKdiv2_mux_div3} \
    -group {CLKdiv4_mux CLKdiv4_mux_div3}
静态时序分析Static Timing Analysis1——STA概述、标准工艺库、时钟、IO约束的建立 简要介绍STA和标准工艺库内容,对时钟,IO等进行约束的指令介绍,PVT 阅读详情

相关推荐

Create_generated_clock

generated clock

zhenhuagege的博客 1万+

SDC-时钟约束

芯片设计中的时钟约束

laugogo的博客 3735

create_generated_clock invert preinvert shift_edge是否符合设计真实状态很重要【示例1】

preinvert , edges , sdc,二分频

zt5169的博客 1172

STA | 8. SDC是如何炼成的?验收篇 - 如履薄冰

STA是由SDC驱动的,所以SDC的完整性、正确性和一致性直接决定着综合、布局布线以及STA的有效性。在STA系列开篇文章《STA | 0. 静态时序分析概述》就提到了其局限性,通过后仿...

graymount的博客 7083

【IC前端虚拟项目】SDC文件编写与DC综合环境组织

最后是io.sdc的设置,mvu的接口实际上是比较简单的所以直接通过get_ports的方式把接口区分输入和输出拉出来就可以,注意要把时钟去除掉,一般我们也会把复位单独处理不过因为mvu面积不大一拍内复位信号抵达所有的寄存器也没有什么压力,所以保留在里面也没关系。这个文件中我们定义了后面要使用的众多变量,注意clk_period决定了时钟频率此处设置为1单位默认为ns,因此默认的综合频率是1Ghz,并且将uncertainty设置为1/200,latency设置为1/5,这里可以根据实际情况设置经验值。

moon9999的博客 1834

vivado中出现ERROR: [Labtools 27-2220]检测不出开发板

这个错误可能是由于 Vivado 工具中的 cs_server.exe 文件没有正确安装或者文件路径不正确导致的。你可以尝试以下步骤来。时间: 2023-08-16 12:05:50 浏览: 767。希望以上方法能够帮助你。

qq_40510975的博客 2389

synopsys-SDC第六章——生成时钟

synopsys-SDC第六章——生成时钟时钟派生方式create_generated_clockedge divide multiplyedge_shift多同源时钟使能组合路径其他注意事项 之前准备了一段时间的秋招,好久没有学SDC,现在准备SDC和秋招同时准备,更新。 一个复杂的设计都需要多个时钟信号来共同完成功能,设计中异步时钟不能共享确定相位关系的时钟信号,也不必过于关心其时钟源,但是同步信号往往产生于同一个时钟源(如时钟分频器、时钟乘法器、时钟门控) 不同模块运行在不同时钟下,如果不考虑

sz_woshishazi的博客 1万+

深入STM32 USB OTG FS:从官方MSC例程到实战双存储设备移植全记录

本文详细解析了STM32 USB OTG FS在双存储设备开发中的实战应用,从协议栈底层机制到SD卡/SPI Flash同步挂载的实现。通过优化SDIO接口和SPI Flash驱动,结合USB MSC类的关键实现,提供了完整的解决方案和性能优化策略,适合嵌入式开发者参考。

weixin_28366475的博客 371

STA学习笔记

一、时序路径 在一个时序逻辑和组合逻辑组成的电路中对于时序路径一共有4种 1.输入input →D触发器的D端 2.输入input →到输出output 3.clk → 到D触发器的D端 4.clk → 到输出output 二、STA中的三种PVT类型 1.fast 2. slow 3. typ 其中对应ss表示最坏延迟即:Vmin + Tmax 状态 此时检查 Tsetup是否能够满足。 而对于ff表示速度最快即延迟最小:Vmax + Tmin 状态 此时检查 Thold 是否能够满足时序要

qq_43823838的博客 3810

Dify学习-19-EXCEL数据如何建立知识库+知识库的学习ING

Args:"""定义类,继承自类文档字符串说明这个类用于加载Excel文件这个类提供了从Excel文件(.xls和.xlsx)中提取数据并转换为文档列表的功能。处理两种Excel格式保留超链接信息跳过空行将每行数据转换为键值对格式的文档在元数据中保留源文件信息对于.xlsx文件使用openpyxl处理,可以获取更多单元格信息(如超链接);对于.xls文件则使用pandas的xlrd引擎处理。

Claire的博客 3436

ArcGIS图解建模工具与DEM提取山脊、山谷线(水文分析、表面分析)

参考汤国安、杨昕等编著的《地理信息系统空间分析实验教程第二版》 利用水文分析(流量)和表面分析(坡向变率)得到山脊和山谷线 文章目录1、基本概念1.1 正地形1.2 负地形正负地形的影响2、水文分析方法2.1 基本思想原理2.2 技术路线2.3 操作步骤2.3.1 正负地形的提取2.3.2 利用水文分析思想和工具提取研究区域的山脊线2.3.3 利用水文分析思想和工具提取研究区域的山谷线2.3.4 利用水文分析提取山脊线和山谷线结果3、表面分析方法3.1 基本思想原理3.2 技术路线3.3 操作步骤4、图.

fungis 1万+

静态时序分析:无法满足的生成时钟(TIM-204或TIM-255警告以及UITE-461或PTE-075错误)

本文详解静态时序分析中create_generated_clock命令的使用,重点探讨-source选项对生成时钟极性及路径传播的影响。当主时钟(master clock)无法有效传播至源引脚时,DesignCompiler与PrimeTime会分别报出TIM-204/TIM-255或PTE-075/UITE-461错误。尤其在存在反相器导致极性翻转时,必须正确选择-source引脚以匹配触发器边沿类型(上升/下降沿),否则将引发时序分析失败。

保持终身学习的能力,温故而知新 2902

LED灯闪烁实验:代码集成

LED灯闪烁实验已经全部完成,在该实验中使用了较多的工具链,涉及底层软件、建模、软件编译等。首先,通过STM32CubeMX工具进行STM32底层软件配置,可以大大减少手写代码的工作量。另外由于做了可视化,也降低了STM32的上手难度,提升效率。利用Simulink建模,可以在PC环境下验证应用层算法的正确性而不依赖于具体控制器,实现应用层算法和底层软件、控制器硬件的解耦。另外,图形化的建模方式也更加有利于开发者思考与分析,大量的封装库文件也可以降低开发的工作量。

u013288925的博客 370

STA-6. SDC是如何炼成的?IO约束篇 - 附Top和Block实战经验以及DDR接口时序

一般地,SDC主要分为三个部分:时钟定义,IO约束,Exception。相应地,我们也分上中下三篇进行讲解,最后还会有最重要的《验收篇》。IO约束在顶层和模块级的主要命令都是以下几个,但...

graymount的博客 4128

Nmap源码分析(端口扫描)

端口扫描是Nmap的核心功能,用于确定目标机的端口状态(开放、关闭、过滤等),也为Nmap的服务与版本扫描、OS扫描、脚本扫描提供基本的指引信息。所以,深入理解端口扫描的实现对分析其他的扫描方式很有帮助。 1简单回顾   首先简要回顾一下端口扫描的原理以及命令行选项。 1.1扫描原理   Nmap提供的10多种类型的端口扫描方法,如TCP SYN/ACK/FIN/Xmas/NULL/ Windows/Connect,FTP Bounce, Idle scan, UDP port u...

墨痕诉清风的博客 1598

LeRobot 入门教程(二)强化学习训练及 SmolVLA 模型微调

本文介绍了LeRobot框架中基于人类在环的样本高效强化学习(HIL-SERL)工作流,包含真实机器人训练和模拟环境训练两大模块。在真实机器人部分,详细说明了从配置设置、工作空间边界确定、演示数据收集、奖励分类器训练到演员-学习者架构部署的全流程,并强调了人类干预的关键作用。同时介绍了适用于模拟训练的gym_hil环境及其配置使用方法。最后,文章提供了微调SmolVLA基础模型的指南,包括数据集收集、微调步骤和模型评估方法。该工作流实现了人机协作的高效强化学习,适用于各类机器人操作任务。

2506_90492529的博客 3897

create_generated_clock加-combinational

指定这种类型的generated_clock的source latency只包括主时钟通过组合逻辑传播的路径。,而不会包含任何经过时序元件(如触发器或锁存器)或其他派生时钟的路径。

hzmscut的博客 2111

读懂 ABAP CDS 注解的直接、继承与派生

本文系统梳理了ABAP CDS注解的评估逻辑,重点解析直接注解(Direct)、继承注解(Inherited)和派生注解(Derived)的差异及其在CL_DD_DDL_ANNOTATION_SERVICE中的处理方式。通过视图注解@Metadata.ignorePropagatedAnnotations可调控注解传播行为,避免下游语义影响上层视图。文章还提供了基于标准表的完整示例(包含底层视图、消费视图和ABAP报告程序),帮助开发者在实际系统中验证三层注解的叠加效果与阻断机制。关键点包括:派生注解的数据

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 245

【芯片前端】为什么在设置sdc时引入和使用虚拟时钟

刚开始接触sdc配置文件时,我一直有一个事情想不明白,明明在定义时钟时已经明确的定义了模块的时钟,为什么还要再引入一个和clk完全等价的v_clk呢?做了些相关工作项又看了看书之后,终于觉得自己这个事情理得差不多了。 看的书就是这一本,没这么厚但是还算是挺有用的: 构造一个场景把,我们有一个模块用来模拟ram的行为,其代码如下: module dual_port_RAM #(parameter DEPTH = 16, ...

moon9999的博客 4640

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

STA(静态时序分析)总结

STA(Static Timing Analysis,即静态时序分析)在实际FPGA设计过程中的重要性是不言而喻的,其作用是: 1、帮助分析和验证一个FPGA设计的时序是否符合要求; 2、指导fitter(布线综合器)布局布线出符合要求的结果; 简单地说,静态时序分析(STA)告诉我们电路的实际表现如何,而提供约束(SDC文件,即上面的要求)来告诉分析工具我们希望电路的表现应该是怎样。Quartus II自带的STA工具TimeQuest TA在整个FPGA设计过程中的使用流程如下图所示: 简

weixin_44348260的博客 3686

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SDC命令详解:使用create_generated_clock命令进行约束(下)

本文详细介绍了SDC命令中生成时钟(create_generated_clock)的各种参数设置方法。主要内容包括:通过-duty_cycle选项设置生成时钟的占空比;使用-edge_shift控制时钟沿偏移实现任意波形生成;处理多个主时钟源时的-master_clock指定方法;组合电路生成时钟的-combinational选项应用;以及-invert和-preinvert选项实现时钟反相操作。

保持终身学习的能力,温故而知新 7176

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

synopsys-SDC第三章——时序分析与约束

synopsys-SDC第二章——综合的基础知识前言一、静态时序分析(STA)二、约束在STA中的作用1.作为声明2.作为断言3.作为指令4.作为异常5.约束的变化三、STA常见问题1.无功能检查2.无声明检查3.要求正确4.常见错误四、延迟计算与STA五、时序路径1.起点与终点2.打断路径3.功能路径和时序路径、时序路径 前言 约束常和时序分析紧密相关,所以在学习约束前,先了解一下时序分析的知识 一、静态时序分析(STA) STA不依赖输入向量,分析电路拓扑并计算不同信号到达个点的时间窗口,并和要求

sz_woshishazi的博客 3798

2020-11-11

report_timing 时候需要 报出经过特定单元的path 在clock tree 上{例如 PLL,},由于lanuch clock path 所经过的点可能 create 了很多clock ,此时 如果 直接用 report_timing -from a -to b -unc -path_typ full_clock , 这样是报不不来 tree 的。此时 需要 删除掉所有 case 点 和 clock ,这样就可以报出所有你想的点。 reset_case_analysis [get_...

qq_34110120的博客 280

如何创建SDC文件(初学者)

用来描述设计人员对于时序设计的要求,比如时钟频率,输入输出的延时等。设计者需要告诉 EDA 工具,设计中所使用的时钟的频率是多少,然后工具才能按照所要求的时钟频率去优化布局布线,使设计能够在要求的时钟频率下正常工作。一般只用对输入时钟做约束。

m0_58427556的博客 3581

SDC时序约束(1)- create_clock

扩展:http://wenku.baidu.com/link?url=akY_aflyoIkbmsuXXcIOs99iPGX1KvMhJaQy7lW1HNudc-0tInCosJVuc-R_iB8y9Y2M2E4uC503RiXlPS5rDoddK27AlnqYCYSBCA96d1S STA : http://wenku.baidu.com/view/966cd84ffe4733687e21

limanjihe的专栏 3万+

STA series --- 7.Configuring the STA SDC(PATR-I clock define)

手机发布的时候,一般会有cpu频率多快,design里面如何去检查可以跑多块的时钟呢?这时候就需要在约束中定义时钟,定义时钟的频率,在这个频率的基础上进行check ,如果meet,那么说明这个design至少可以跑这么快,否则就需要eco 或者降频。.........

sinat_27691203的博客 965
上一篇: STA教程分享
下一篇: 白山头讲PV: 用calibre进行layout之间的比对
白山头
博客等级 码龄7年 1115粉丝 104原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值