时序分析基本概念介绍——时钟(create_clock/create_generated_clock/set_clock_uncertainty/set_clock_groups)


前言

任何sdc首先定义的都是时钟。Clock主要包含Waveform、Uncertainty和Clock group的定义。我们把它们称为时钟的三要素,当然创建任何时钟都要检查一下这三者有没有定义正确。


一、clock的属性

clock period

时钟周期为时钟频率的倒数,又称为振荡周期。
在这里插入图片描述

clock duty cycle

clock duty cycle指时钟高电平信号在一个周期内所占的时间比率,大部分时钟占空比为50%,即高/低电平各占0.5个周期。
在create_clock的-waveform中,第一个变量是上升沿出现的时刻,第二个变量是下降沿出现的时刻,如果上升沿出现在0ns,下降沿出现在5ns,周期为20的clock对应的波形图如下。
在这里插入图片描述

clock latency

Clock latency通俗意义上是指clock定义点到clock sink点(时序器件的clock pin)之间的这段delay。其分为两类,source latency和network latency。
source latency也称作insertion delay,通常是指clock source端到clock定义点之间的这段时间延迟。通常有两种情况,其一:clock 直接来自于芯片外部,如crystal clock,此时,source latency指的是芯片外部crystal出口到芯片PAD(假如clock定义在此处)之间的时间延迟;其二:clock 来自于芯片内部的PLL,此时,source latency指的是芯片内部PLL输出点到芯片内部某个第一个clock定义点之间的这段时间。
network latency 指的是clock定义点到clock sink点之间的这段delay。
在这里插入图片描述
这两种latency是每一个clock的固有属性,当CTS完成之后,每一个clock如果是在propagation状态下,其source latency和network latency都是确定的。当然,在前期(PR之前或者CTS之前),通常情况下clock都处于ideal状态,为了能够模拟真实的情况,我们可以通过指令set_clock_latency去指定每个clock的source latency或者network latency。

clock slew

时钟转换时间clock transition time ,也称为clock slew。通常是指电压从10%VDD上升到90%VDD所需要的时间,或者是从90%VDD下降到10%VDD所需要的时间,上升和下降时间过长意味着电路的速度很慢。如下图所示。
在这里插入图片描述
在sdc中,可以用set_max_transition 0.1 -clock_path[all_clocks]命令来限制clock slew大小。

clock skew

在CTS中,由于时钟到每个寄存器的路径延迟不一样,造成信号到达 clock pin 的时间也不一样,寄存器也不会同时翻转。时钟偏差(skew) 的定义就是最长路径延迟减去最短路径延迟的值。一直以来,Skew都是衡量时钟树性能的重要参数,CTS的目的就是为了减小skew。
在这里插入图片描述

clock jitter

所谓抖动(jitter)指的是在某一个给定的点上时钟周期发生短暂性的变化,使得时钟周期在不同的周期上可能加长或缩短。这是在时钟发生器内部产生的,和晶振或者PLL内部电路有关,布线对其没有影响。在这里插入图片描述

二、create_clock

SoC的时钟一般是由PLL产生,然后经过时钟生成电路和分配网络,最终给具体的功能模块使用。一般地,第三方IP供应商都会提供比较成熟的SDC,SoC集成时只需稍作修改。对于自研的IP和SoC顶层,设计人员在提供RTL的同时,也需提供一份时钟结构图,一方面是方便撰写SDC,另一方面对后端P&R有针对性的进行CTS也非常有帮助。

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

create_clock [-name clock_name
<think>好的,我现在需要回答用户关于create_clockcreate_generated_clock在数字设计或FPGA综合工具中的区别及用法的问题。首先,我得回忆一下这两个命令的基本概念和作用。 create_clock是用于定义设计中的主时钟,通常是外部输入的时钟信号,比如晶振或者时钟发生器提供的时钟。用户需要指定时钟的端口、周期、占空比等参数。这个命令告诉综合工具如何处理这些主时钟,是时序分析的基础。 接下来是create_generated_clock,它用于生成派生时钟。派生时钟通常是由主时钟通过分频、倍频或者门控等方式产生的。例如,通过一个PLL模块生成的时钟,或者通过计数器分频得到的时钟。这个命令需要指定源时钟,以及生成时钟的方式,比如分频系数。 然后要比较两者的区别。主时钟是外部提供的,而生成时钟是内部产生的。在SDC约束文件中,create_clock通常是必须的,而create_generated_clock则根据设计需求选择使用。生成时钟时序分析依赖于主时钟,所以正确设置它们的源关系很重要。 接下来是用法。用户需要在使用create_clock时明确指定时钟的源端口和参数。而create_generated_clock则需要指定源时钟、生成方式以及目标端口。例如,使用分频器将主时钟分频后生成新时钟,这时需要用create_generated_clock来约束这个新时钟。 还需要注意常见错误。比如,错误地将生成时钟当作主时钟来约束,或者没有正确指定源时钟,这可能导致时序分析错误。另外,生成时钟的路径需要正确约束,否则工具可能无法正确分析时序,导致设计不稳定。 最后,生成相关问题,帮助用户深入理解。比如,如何确定主时钟频率,生成时钟如何影响时序收敛,或者如何处理多个生成时钟的情况。 总结一下,回答的结构应该先解释两者的定义和作用,然后比较区别,再给出具体用法和示例,最后提醒注意事项和相关问题。确保使用正确的中文术语,并按照用户要求使用LaTeX格式的数学表达式,如果有的话。同时,要引用相关资源,比如综合工具文档或时序分析书籍,以增强可信度。</think>### create_clock vs create_generated_clock 的区别及用法 #### 1. **定义与作用** - **`create_clock`** 用于定义设计中**主时钟**的物理特性(周期、占空比、波形相位等)。主时钟通常来自芯片外部(如晶振)或内部硬核模块(如PLL的输入)。例如: ```tcl create_clock -period 10 [get_ports clk_in] # 定义周期10ns的主时钟 ``` - **`create_generated_clock`** 用于定义**派生时钟**,即通过逻辑电路(如分频器、计数器、PLL输出等)从主时钟生成的时钟信号。例如: ```tcl create_generated_clock -source [get_ports clk_in] -divide_by 2 [get_pins clk_divider/q] ``` #### 2. **核心区别** | 特性 | create_clock | create_generated_clock | |---------------------|-------------------------------|-------------------------------| | **时钟源** | 外部物理信号 | 来自主时钟的逻辑派生 | | **时序分析依赖** | 起点为物理端口 | 起点为主时钟的源节点 | | **常见场景** | 顶层输入时钟、PLL输入 | 分频器输出、门控时钟、PLL输出 | | **约束必要性** | 必须显式定义 | 可选,但需覆盖所有派生时钟 | #### 3. **用法示例** - **主时钟约束** 假设FPGA输入引脚`clk_in`连接50MHz晶振: ```tcl create_clock -name sys_clk -period 20 [get_ports clk_in] # 周期=20ns(对应50MHz) ``` - **生成时钟约束** 若通过计数器分频生成低频时钟`clk_slow`: ```tcl create_generated_clock -name clk_slow -source [get_pins clk_divider/clk] \ -divide_by 4 [get_pins clk_divider/q] ``` #### 4. **关键注意事项** 1. **避免组合逻辑生成时钟** 若生成时钟经过组合逻辑(如与门),需额外约束时序例外(`set_clock_groups`)[^1]。 2. **PLL输出的处理** 部分工具(如Vivado)会自动推断PLL生成时钟,但仍建议显式约束以提高可读性。 3. **跨时钟域检查** 主时钟与生成时钟之间可能产生跨时钟域路径,需通过`set_clock_groups`或`set_false_path`声明。 #### 5. **工具行为差异** - **Vivado**:对未约束的生成时钟可能发出警告(`CRITICAL WARNING: [Timing 38-282]`)[^2]。 - **Quartus**:需要手动约束所有生成时钟,否则时序分析可能不完整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值