相关阅读
Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm=1001.2014.3001.5482
简介
重定时是DC Ultra引入的一种时序优化技术,可以将时序单元(触发器和锁存器)穿越组合逻辑前后移动,以优化设计的时序和面积,为提升电路时序性能提供了一个重要手段。
根据使用场景的不同,重定时可分为两类:自适应重定时(Adaptive Retiming)和流水线重定时(Pipelined-Logic Retiming),本文关注的重点是自适应重定时。
使用方法
不管是线负载模式还是拓扑模式,只需要在使用compile_ultra命令综合时添加-retime选项(不能同时指定-top或-only_design_rule选项,否则-retime选项被忽略)即可自动在优化过程中执行自适应重定时,如下所示。
dc_shell> compile_ultra -retime
需要注意的是如果时序单元拥有dont_touch、size_only或dont_retime属性,则该时序单元不会被重定时。
在自适应重定时过程中被移动的时序单元将会被重新命名,使用前缀R和编号后缀(例如R_123),因此这些时序单元无法再与原始名(使用信号名前缀和reg后缀)对应。这通常不会给等价性检查带来问题,因为这些重命名都会被记录在SVF文件中,有关SVF文件的更详细介绍,参考下面的博客。
Design Compiler:set_svf命令以及svf文件简介https://blog.csdn.net/weixin_45791458/article/details/144069207?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522836664eccdd944f4e1a9cd4d2f2c8123%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=836664eccdd944f4e1a9cd4d2f2c8123&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-144069207-null-null.nonecase&utm_term=svf&spm=1018.2226.3001.4450
可以使用set_dont_retime命令指定某些单元不参与重定时(包括自适应重定时与流水线重定时)。
自适应重定时与流水线重定时的区别
自适应重定时一般用于整体通用设计,而不是那些显式使用流水线的逻辑,通过移动时序单元,以优化时序组(Path Group)中的关键路径(Worst Negative Slack, WNS)的延迟;对于那些显式使用流水线的数据通路,仍建议使用流水线重定时。可以同时使用自适应重定时和流水线重定时,它们并不冲突。
自适应重定时示例
在综合前手动确定最佳的时序单元位置,并进行RTL编码通常是一项耗时且困难的工作。自适应重定时可以自动调整设计中时序单元的位置,以尽可能平衡时序单元间的延迟。当设计中的某些时序路径超过时序目标而其他时序路径又未充分利用时序裕量时,这项技术尤为有用。如果设计中所有时序路径都已满足时序目标,自适应重定时也可用于减少时序单元数量(如可能),以优化面积或功耗。在重定时过程中,时序单元会穿越组合逻辑向前或向后移动,如图1所示。
图1 自适应重定时
图1的上半部分展示了向后移动时序单元,为了保证端到端功能正确,增加了一个时序单元,看起来就像是时序单元复制,但需要注意的是,这与为了分摊负载而进行的复制(Register Replication)是不一样的;图1的下半部分展示了向前移动时序单元,为了保证功能正确,减少了一个时序单元,看起来就像是时序单元合并,但需要注意的是,这与为了减少面积而进行的合并(Register Merging)是不一样的,但具有类似的功能。
复位的重要性
上一小节说明了为了保证功能正确性,自适应重定时会增加或减少时序单元的数量,但是如果时序单元拥有异步复位/置位端,还需要更多操作才能保证功能正确性。
图2 复位值限制
以图2为例,假设最初的时序单元是一个带异步复位的触发器(在图中用红色的0标注),再发生了向后重定时后,由于需要保证最后一个门的相关输入在复位时为0,除了需要增加一个触发器,还需要将带异步复位的触发器变更为带异步置位的触发器(在图中用红色的1标注)。
除了图2所示的简单情况,自适应重定时还可以处理可能出现的复位/置位冲突情况,如图3所示。
图3 出现冲突的自适应重定时
假设网表1是最初的设计,其中有些触发器使用异步复位,也有些触发器使用异步置位(在图中用0或1标注),它们的复位/置位信号是共用的。假设发生了向后重定时,就和图2类似,触发器R4依旧保持原来的异步复位,而触发器R7则从异步复位变成异步置位。
为了保证异或门C5的输出在复位/置位时为1,触发器R5和R6则存在两种情况,一种如网表2所示,一种如网表3所示。区别在于网表3可以合并触发器R4和R5并允许进一步向后自适应重定时,而网表2则无法合并,自然也无法进一步向后自适应重定时。
时序例外下的限制
如果存在时序例外,Design Compiler仅在所有被移动的时序单元具有相同的时序例外设置时,才允许它们一起进行重定时移动(还需要将compile_retime_exception_registers变量设置为true),支持的例外类型包括:
set_max_delay
set_min_delay
set_multicycle_path
set_false_path
group_path
例如,以下命令中的两个触发器具有相同的时序例外。
set_max_delay 10 -to [get_pins r0/D r1/D]
写成两条命令也可以,但需要保证值的设置一致。
set_max_delay 10 -to [get_pins r0/D]
set_max_delay 10 -to [get_pins r1/D]