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

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

weixin_41678956的博客 8658

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

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

sz_woshishazi的博客 1万+

行列式详解:从定义到应用

本文系统介绍了行列式的核心概念和应用。首先从二阶、三阶行列式入手,逐步扩展到n阶行列式的定义,讲解了余子式和代数余子式的概念。其次,详细阐述了行列式的重要性质,包括转置不变性、行列交换变号等基本性质以及乘积性质等推论。在计算方法方面,介绍了按行展开法、化上三角矩阵法等实用技巧,并列举了特殊行列式的计算案例。最后重点讨论了行列式在克拉默法则、矩阵可逆性判断、几何体积计算及线性相关性判断等领域的应用。文章强调理解行列式的几何意义和灵活运用性质的重要性,并给出了学习建议和常见误区提示。行列式作为连接代数与几何的桥

aichitang2024的博客 3036

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

基于Hadoop生态的大数据异常检测平台搭建

批处理:用Spark MLlib的LOF(局部异常因子,适合高密度数据)、(单类支持向量机,适合高维数据);流处理:用Flink ML的(实时聚类,检测离群点)、ADWIN(自适应滑动窗口,处理概念漂移)。数据层:用Flume/Kafka采集数据,HDFS存储,Hive管理元数据;计算层:用Spark处理离线批数据,Flink处理实时流数据;算法层:用孤立森林(批)、3σ原则(流)检测异常;可视化层:用Grafana做仪表盘,Prometheus+Alertmanager报警。这个平台能处理。

软件工程实践的博客 934

Cadence安装

选择刚刚解压的E盘DVD驱动中的setup.exe文件,安装路径推荐D盘,此处会自己给你新建文件夹,我们无需手动建文件夹。但是,新产品有一些BUG(影响使用流畅性),所以我们要对17.4打补丁,补丁包同样去吴川斌的博客下载。下载阿狸狗破戒大师 我这边下载的是版本V3.2.6,同样在吴川斌的博客下载安装包,链接同上。记录一下安装过程,方便以后安装使用Cadence。破解完成后,建议将这两个软件创建快捷方式到桌面。到这里,我们已经可以正常的使用Cadence了。对光盘映像文件解压后双击,可以在我的电脑看到。

电子那些事儿 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

CoppeliaSim+matlab+simulink七轴机械臂仿真

七轴机械臂vrep+matlab+simulink 仿真

a1233219的博客 3554

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

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

graymount的博客 4128

UFSV3.1-RPMB实现与测试

UFS RPMB功能验证与测试指南 本文介绍了UFS(通用闪存存储)中RPMB(重放保护内存块)的功能验证与测试方法。主要内容包括: RPMB基础配置: 在Linux系统中查看RPMB设备节点 读取RPMB单元描述符获取配置信息 配置RPMB区域大小(16MB)和使能状态 RPMB特性验证: 获取单次写最大请求(16KB) 测试未编程认证密钥时的读写操作 验证认证密钥编程过程 测试用例: 包含4个测试用例,验证RPMB在不同状态下的行为 提供了详细的命令行操作和预期结果 本文可作为UFS RPMB功能验证。

小码哥的博客 1255

基于BQ25895RTWR的锂电池充电管理硬件设计

BQ25895 是一款适用于单节锂离子电池和锂聚合物电池的高度集成型 5A 开关模式电池充电管理和系统电源路径管理器件。此类器件支持高输入电压快速充电。低阻抗电源路径对开关模式运行效率进行了优化、缩短了电池充电时间并延长了放电阶段的电池使用寿命。• 移动电源、移动 Wi-Fi 热点。• 便携式互联网器件。

corlin6688的博客 1088

create_generated_clock加-combinational

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

hzmscut的博客 2111

HTML粉色爱心(完整代码)

HTML语言实现粉色爱心的完整代码。

AIGC 1118

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

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

moon9999的博客 4640

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

STA(静态时序分析)总结

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

weixin_44348260的博客 3686

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

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

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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、付费专栏及课程。

余额充值