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

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input