Synopsys设计约束

1. 设计约束

上一节描述了设计环境的约束:

https://mp.weixin.qq.com/s?__biz=Mzg4OTIwNzE4Mg==&mid=2247483754&idx=1&sn=cf8dc9f5649ecdf7a769d576a1339be5&chksm=cfee218bf899a89d6c7442adbf16c7d7093517d4dc7c0ff7913119ea3b7aca82741dd9e1fb86&token=1433471869&lang=zh_CN#rd?mp.weixin.qq.com

而设计约束描述了设计目标,它们可包括时序或面积约束。不实际的规范会导致面积增大、功耗增加和/或时序恶化,所以设计人员必须指定实际的约束。

create_clock命令用于定义有特定周期和波形的时钟对象。-period选项定义时钟周期,而-waveform选项控制时钟的占空比和起始边沿。这个命令用于引脚或端口对象类型。

下例指定端口CLK为“时钟”类型,其周期为40ns,占空比为50%。时钟正边沿开始于0ms,下降边沿发生在20ns。通过改变下降沿值,可改变时钟占空比。

create_clock -period 40 -waveform [list 0 20] CLK

create_generated_clock命令用于设计内部生成的时钟,可以描述作为主时钟函数的分频/倍频时钟。

create_generated_clock -name <clock name>

-source <clock source>

-divide_by <factor> | multiply_by <factor>

set_dont_touch_network是一个非常有用的命令,通常用于时钟网络的复位。这个命令用于在时钟引脚或端口上设置dont_touch属性。注意设置这一属性也会阻止DC为满足DRC而缓冲连线。此外,任何与被设置为“dont_touch”的连线相接触的门也将继承dont_touch属性。

set_dont_touch用于在current_design、单元、引用或连线上设置dont_touch属性。这一命令经常用于??榈牟愦位嘁牍讨?,它也能用于阻止DC推断工艺库中的某种类型单元。

例:

set_dont_touch current_design

set_dont_touch [get_cells subs]

set_dont_touch [get_nets gated_rst]

set_dont_use命令通常设置在.synopsys_dc.setup环境文件中,这一命令有助于从工艺库中剔除用户不愿DC推断的某类单元。

set_input_delay指定相对于时钟的信号输入到达时间。它用于输入端口,指定在时钟沿后数据稳定所需的时间。设计的时序规范通常包括这样的信息,如输入信号的建立/保持时间要求。如果给定设计的顶层时序规范,也可通过用自顶向下的编译方法或设计预算方法提取出子模块的这些信息。

dc_shell > set_input_delay -max 23.0 -clock CLK {data_in}

dc_shell > set_input_delay -min 0.0 -clock CLK {data_in}

在下图中,相对于占空比为50%,周期为30ns的时钟信号CLK,为信号data_in指定了23ns的最大输入延时约束和0ns的最小输入延时约束?;谎灾淙胄藕興ata_in的建立时间要求为7ns,而保持时间要求为0ns。

set_output_delay命令用于在输出端口定义在时钟边沿到来之前数据有效所需时间。

dc_shell > set_output_delay -max 19.0 -clock CLK {data_out}

set_clock_latency命令用于定义在综合时估计的时钟插入延迟,这主要用于布图前综合和时序分析。所估计的延迟值是时钟树网络插入(在布图阶段)产生的延迟的近似值。

dc_shell > set_clock_latency 3.0 [get_clocks CLK]

set_clock_uncertainty命令让用户定义时钟扭曲(clock skew)信息。

dc_shell > set_clock_uncertainty -setup 0.5 -hold 0.23 [get_clocks CLK]

set_clock_transition命令用于进行布图前综合和时序分析。这个命令使DC对时钟端口或引脚使用指定的转换值。

set_propagated_clock用于当设计已完成时钟树网络插入的布图后阶段。在这种情况下,将使用传统的延迟计算方法求出延时。

2. 高级约束

以上和之前的一节主要介绍的是常用约束。下面介绍的是额外的一些设计约束,包括指定虚假路径、多周期路径、最大和最小延迟等。此外,还讨论了为额外优化而组合时序关键路径的过程。

set_false_path用于指示DC忽视某一路径的时序或优化。确定设计中的虚假路径是关键,否则会迫使DC优化所有路径,关键时序路径可能受到不利的影响。

用于这一命令的有效起点和终点分别是输入端口或时序元件的时钟引脚和输出端口或时序元件的数据引脚。另外可使用-through进一步明确某一路径。

dc_shell > set_false_path -from in1 -through U1/Z -to out1

set_multicycle_path用于告知DC通过某一路径到达其终点所需的时钟周期数。DC自动假定所有路径都是单周期路径,同时不必为了获取时序而试图优化多周期段。

set_max_delay定义某一路径按照时间单位所需的最大延迟。通常它用于只包含组合逻辑的???。然而,它也用于约束多个具有不同频率时钟驱动的??椤?/p>

虽然Synopsys建议每个??橹欢ㄒ逡桓鍪敝?,而在某些情况下一个??榭砂喔鍪敝?,每个时钟具有不同的频率。为了约束这种???,通??捎胏reate_clock和set_dont_touch_network命令来定义模块中的所有时钟。然而信号相对于每个时钟的输入延时赋值会变得很冗长。为避免这一情况,另一种方法就是用通用的方法定义第一个时钟,而通过set_max_delay命令约束其他时钟:

dc_shell > set_max_delay 0 -from CLK2 -to [all_registers -clock_pins]

set_min_delay是与set_max_delay相对的命令,它用于定义某一路径按照时间单位所需的最小延迟。

dc_shell > set_min_delay 3 -from [all_inputs] -to [all_outputs]

group_path命令用于将设计中的时序关键路径绑定到一起以进行代价函数计算。组合能使组合路径优先于其他路径。这一命令有不同的选项,包括关键范围和权重的规范。

dc_shell > group_path -to [list out1 out2] -name group1

——添加太多组合对编译时间有显著的影响,因此只作为最后的手段使用;

——这一命令有可能增加设计中最差违例路径的延迟,这是由于DC使设计中的组合路径优先于其他路径。为改善整个代价函数,DC将尽力优化组合路径,然而可能恶化另一组的最差违例的时序。

参考文献:

https://book.douban.com/subject/2150040/

?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容

  • 以下三个是最经常被问到的,基本上属于介绍性的题目,无所谓正确答案,在我看来,这些不算真正的问题。 Discuss ...
    蜀湘情缘阅读 6,139评论 0 8
  • Verilog基本电路设计之一:单bit跨时钟域同步 (帖子链接:bbs.eetop.cn/thread-6054...
  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 4,686评论 0 3
  • 来源:FPGA 时钟设计 1 —— 时钟资源总结 关于一款芯片,最权威、最新的资料当然是厂家的官方文件。很多大牛都...
    暗夜望月阅读 3,502评论 0 2
  • 来源:系统时序基础理论 对于系统设计工程师来说,时序问题在设计中是至关重要的,尤其是随着时钟频率的提高,留给数据传...
    暗夜望月阅读 2,673评论 0 2