数字集成电路布图前准备

综合工具和布局布线(Place&Route)工具(布图工具)之间存在明确定义的接口,Synopsys称这个接口为Links to Layout或LTL。几乎所有的设计都需要LTL接口实施布图后优化(PLO),此外,为了成功地完成布图,还需要考虑时钟树综合的问题。

假设用户已经综合和优化了一个设计,且该设计满足所有的时序和面积要求。现在问题产生了,“用于布图前优化的估计线载模型有多么接近从版图实际提取的数据?”,如果布图前的设计使用ZWL(zero wire load),这个问题就更加值得注意。寻求这些信息的唯一方式是进行布图规划并对这个设计布线。

随着几何尺寸的缩小,与连线的电容相比,其电阻增加。这导致互连线延迟占总延迟(单元延迟+互连延迟)的大部分。为了减少这个影响,设计人员需要花费大量时间对芯片进行布图规划。

使用LTL,能在DC和布图工具之间交换相关数据(如时序约束和布局信息),这有助于DC改善布局后优化,也减少了综合与布图间的迭代。

为布图生成网表

大多数布图工具只接受Verilog或EDIF网表格式作为输入。许多用VHDL编码设计的用户,通过DC为布图生成EDIF格式的网表,这种格式可读性较差,在后面进行ECO时,修改网表会很麻烦,因此建议使用由DC生成的Verilog格式的网表作为布图工具的输入。

在将网表(整个设计或单个模块)交个布图前,建议对网表进行如下的步骤,以利于设计从DC到布图工具平滑的转移。

——唯一化网表

——通过更改设计中的连线名称简化网表

——从整个设计中移去未连接的端口

——确定叶单元的所有引脚名可见

——检查assign和tran语句

——检查无意的门控时钟或复位

——检查未解析的引用

以下介绍几个常见的情况:

1  移除未连接的端口

许多设计都遭受模块端口未连接,可能是有意或是由于遗留的原因。虽然这实际上对DC生成功能正确的网表没有任何影响,但是一些设计人员更愿在综合时移除这些端口。这通常是一个好习惯,这是因为,如果未连接,DC将给出关于未连接端口的警告信息。因为一个设计可能包含许多这样的未连接端口,真正的警告可能在众多的未连接端口警告中被忽略掉。因此,在生成网表之前,移除未连接端口并检查设计是可取得。这可由如下命令完成:

dc_shell > remove_unconnected_ports [find -hierarchy cell "*"]

dc_shell > check_design

详细用法可以通过man remove_unconnected_ports查看。

2  无意的时钟或复位门控

将网表提交给布局布线之前,反复检查设计中的时钟总是一个好的想法。如果无意地缓冲了时钟(可能忘记应用set_dont_touch属性),将会影响时钟的延迟和扭曲,导致用户不能满足设定的时序目标。

通常,不认为复位同时钟一样重要。然而,由于set_dont_touch_network属性也被应用于复位,因此检查它们的缓冲是明智的。

用户可用如下命令检查无意识的时钟门控:

dc_shell > report_transitive_fanout -clock_tree

可在上面命令中使用-from选项检查无意识的其他信号(如复位信号)的无意识的门控。例如:

dc_shell > report_transitive_fanout -from reset

显然,时钟应在使用-clock_tree选型之前被定义,或者也可将-from选项用于时钟,它不要求时钟先被定义。注意不能同时使用-from与-clock_tree选项。

3. 未解析的引用

设计人员应小心并时常检查任何未解析的引用。对于含有模块的实例二没有对应的定义的设计,DC将给出一个警告。例如,模块A是例化子模块B的顶层模块。如果你为模块A写出网表时,却不能在DC中读到模块B的定义,DC将给出一个警告,说模块A含有未解析地引用。在实例化单元和其定义间发生端口不匹配的情况下,也给出这个消息。

你可能感兴趣的:(数字集成电路布图前准备)