SDC文件详解

2023-11-09 13:20
文章标签 详解 sdc

本文主要是介绍SDC文件详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SDC是Synopsys设计约束“Synopsys Design Constraint”的缩写,是一种常用的约束设计的格式。SDC对电路的时序、功耗、面积等进行约束,从而使芯片满足设计要求的规范。SDC文件语法基于TCL格式,所有命令都遵循TCL语法。

下图显示了一些重要的值得关注的约束

01、SDC Version

它表明了sdc当前的版本,目前有2.1,2.0,1.9或者更老的版本。

set sdc_version 2.1

02、Units

我们可以用set_unit命令去指定各种变量的单位,如:time、resistance、capacitance、voltage、current、power等。我们也可以单个set_unit命令去设置倍数单位。

set_unit -time ns -resistance kohm -capacitance of -voltage V -current mA

03、Set driving cells

规定了由Tech库中的cell驱动的输入输出端口的drive特性。这些命令将库引脚与输入端口相关联,以便可以准确地建模计算delay。

语法:

set_driving_load [-lib_cell lib_cell_name] [-library lib_name] [-rise] [-fall] [-min] [-max] [-pin pin_name] [-from_pin from_pin_name] [-dont_scale] [-no_design_rule] [-input_transition_rise rtrans] [-input_transition_fall ftrans] [-multiply_by_facrtor] [-clock clock_name] [-clock_fall] port_list

例:

set_driving_cell -lib_cell IV {I1}

set_driving_cell -lib_cell AND2 -pin Z -from_pin B {I2}

04、Set_load

设置当前设计中指定的port和net的load属性。load值的单位是本文件中定义的电容单位。

语法:set_load value objects [-subtract_pin_load] [-min] [-max] [[-pin_load] [-wire_load]]

例:set_load -pin_load 0.001 [get_ports {port[10]}]

05、Set maximum fanout

为特定的输入端口和/或设计设置最大扇出。

如:set_max_fanout 5 [get_ports {port[10]}]

06、Set maximum transition

设置最大转换时间。

如:set_max_transition 2.5 [get_ports IN]

07、Create clock

在当前设计中创建一个时钟对象,将指定的source_objects定义为时钟源。

语法:create_clock [-name clock_name] [clock_sources] [-period value] [-waveform edge_list] [-add] [-comment]

例:

create_clock “u13/z” -name “CLK” -period 30 -waveform {12.0 27.0}

create_clock -name “PH12” -period 10 -waveform {0.0 5.0}

08、Create generated clock

创建一个generated clock,可以为generated clock对象指定pin或port。generated clock跟随master clock变化而自动变化。生成的时钟可以创建为分频时钟、倍频时钟、边缘分频时钟或反相时钟。

例:

create_generated_clock -multiplied_by 3 -source CLK [get_pins div3/Q]

上面的例子将生成一个时钟,该时钟是从名为CLK的原始时钟导出的。生成的时钟的频率将是原始时钟的3倍,时间周期将为原始时钟的三分之一(15ns –> 5ns)。

09、Group path

设置一组path或endpoints为group,有针对性地进行优化。指定endpoint后,所有通向这些endpoint的路径都在这组group里。

group_path -name “group1” -weight 2.0 -to {CLK1A CLK1B}group_path -name GROUP1 -from [get_ports ABC/in3] -to [get-ports FF1/D]

10、Clock uncertainty

在定义了时钟后,要注意在时钟网络中设置时钟的不确定性。时钟不确定性为设计留出了一定的margin,用来cover时钟网络和时钟源本身的非理想性导致的变化。它将不确定性的值设置为endpoint或时钟域之间预期的最差偏差。

语法:set_clock_uncertainity [object_list | -from from_clock | -rise_from rise_from_clock | -fall_from fall_from_clock -to to_clock | -rise_to rise_to_clock | -fall_to fall_to_clock] [rise] [-fall] [-setup] [-hold] uncertainty

例:

set_clock_uncertainty -setup 0.5 [get_clocks clk1]

set_clock_uncertainty -hold 0.2 [get_clocks clk1]

时钟的rise和fall time也可以设置clock uncertainty,如下所示,

set_clock_uncertainty -max_rise 0.12 [get_clocks clk1]

set_clock_uncertainty -max_fall 0.12 [get_clocks clk1]

set_clock_uncertainty -min_rise 0.12 [get_clocks clk1]

set_clock_uncertainty -min_fall 0.12 [get_clocks clk1]

11、Clock latency

时钟延迟指定从时钟源引脚到达时序元件的时钟引脚的时钟信号的latency。clock latency有两种类型,一种是net latency(默认),另一种是source latency(使用-source选项)

语法:set_clock_latency [-rise] [-fall] [-min] [-max] [-source] [-early] [-late] [-dynamic jitter] [-clock clock_list] delay object_list

例:set_clock_latency 2.35 [get_pins ABC/XYZ/CP]

12、Input delay

输入延迟定义了input port相对于时钟边缘的时序要求。如果未指定,则假定input port具有零输入延迟。delay值是起始点和设置set_input_delay的对象之间相对于时钟边缘的延迟决定的。

例:set_input_delay -max 1.35 -clock clk1 {ain bin}

13、Output delay

set_output_delay设置output 端口上相对于时钟边缘的输出延迟要求。如果未指定,则假定输出端口具有零输出延迟。

例:set_output_delay 1.7 -clock [get_clocks CLK1] [all_outputs]

14、Multicycle paths

多周期路径是不能满足单周期时序要求路径的例外。在多周期路径中,信号需要一个以上的单个时钟周期才能从路径的起点传播到终点。此命令指定了data path必须进行setup或hold检查的周期数。以下命令设置了从A到B的两个周期的约束。

set_multicycle_path 2 -from A -to B

15、False paths

false path是指不能传播信号的路径。时序分析时应排除false path。SDC命令set_false_path用于定义false path。

set_false_path -from U1/G -to U1/D

SUMMARY

以上描述了SDC中非常重要的常用的15个约束命令,实际上在一个复杂的design中还有很多重要的约束需要用到,这里不再提及。以下是15个约束的总结:

1. SDC Version

2. Units

System Interface

3. Set driving cells

4. Set load

Design rule constraints

5. Set maximum fanout

6. Set maximum Transition

Timing constraints

7. Create Clock

8. Create Generated Clock

9. Group Path

10. Clock Uncertainty

11. Clock Latency

12. Input Delay

13. Output Delay

Timing Exception

14. Multicycle Path

15. False Path

想查看更多后端知识和文章,请关注微信公众号:houduanxinjihui。

这篇关于SDC文件详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/376355

相关文章

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编