首页 理论教育DesignCompiler 综合流程优化方案

DesignCompiler 综合流程优化方案

【摘要】:在配置好初始环境并且启动Design Compiler后,就开始了DC综合的流程。例6.13为了避免人为因素导致的错误,建议用户在使用完read_file命令后用current_design命令显示指定顶层进行设计。例6.14中用current_design命令显示指定MY_TOP为顶层设计。check_design命令能够检查当前设计的内部表达的一致性,能发现一些问题并报出warning和error。读者可在DC的终端下输入man compile_ultra来获得命令帮助信息。report_timing返回的是设计的时序报告,report_con-straint返回的是设计规则和时序违反约束,report_area返回的是面积报告等。

在配置好初始环境并且启动Design Compiler(DC)后,就开始了DC综合的流程。图6.8展示了DC综合几个基本的步骤,下面就这几个步骤进行介绍。

978-7-111-55094-5-Chapter06-33.jpg

图6.8 DC综合的基本步骤

1.读入设计文件

DC综合工具的输入是RTL代码,所以在综合的第一步是将已经写好的RTL设计文件读入到DC的memory中。在读入层次化结构的设计中,综合工具需要知道哪一个文件是顶层文件,所以用户需要指定顶层文件。有两种方式完成这一步骤,一种是read_file的方式,另一种是analyze+elaborate的方式。

命令read_verilog和read_vhdl分别等价于命令read_file-format verilog和read_file-format vhdl,分别用于读取Verilog和VHDL写成的RTL设计代码(还有read_ddc,read_sverilog等)。

如例6.12中,先后用3个read_verilog命令读取了A.v、B.v和C.v 3个设计文件,DC会认为最后一个读取的文件C.v中的设计为顶层设计,A.v和B.v是它的子模块。

例6.12

978-7-111-55094-5-Chapter06-34.jpg

如例6.13中,用一个read_verilog命令加花括号{}读取了A.v、B.v和C.v 3个设计文件,DC会认为花括号列表中第一个读取的文件A.v中的设计为顶层设计,B.v和C.v是它的子模块。

例6.13

978-7-111-55094-5-Chapter06-35.jpg

为了避免人为因素导致的错误,建议用户在使用完read_file命令后用current_design命令显示指定顶层进行设计。例6.14中用current_design命令显示指定MY_TOP为顶层设计。

例6.14

978-7-111-55094-5-Chapter06-36.jpg

将RTL代码读取到memory中并指定设计顶层后,DC会调用自己的GTECH库,将RTL转化为GTECH网表存在memory中。这个网表中的器件没有时序和负载的特性,它仅仅是DC用来表示器件的一个符号,只有DC能识别它。

另一种方式是analyze+elaborate。analyze命令首先会把Verilog或VHDL源文件读进DC的memory中,并检查语法规范,报出warning和error。然后会将RTL源代码转换成二进制格式的中间文件,存放在CWD中。elaborate命令会将analyze产生的二进制中间文件转换为GTECH网表,并且指定顶层设计。在命令中加选项-parameters能设置设计中的参数,这是在读文件过程中唯一能改变设计参数的方法。elaborate命令还自动地执行了link命令(read_file不会执行link,后文还会详细介绍这个命令),完成了链接操作。elaborate命令对于VHDL代码允许选择不同的结构体。如例6.15,设计顶层为MY_TOP,并且用户指定的参数设置会代替源代码中的默认参数。

例6.15

978-7-111-55094-5-Chapter06-37.jpg

表6.2是两种读入文件方式的比较

表6.2 两种读入文件方式的比较

978-7-111-55094-5-Chapter06-38.jpg

2.链接设计

对于一个完整的设计,它的每个单元必须都关联到库中的元器件,并且描述它的每一个引用,这个过程就叫作链接。链接可以用link命令执行,这个命令会用到link_library和search_path两个系统变量去解释设计中的各种应用。如上文所述,e-laborate命令中包含了link命令的操作,而如果用read_file读入文件,则必须用link命令链接。

在link命令后加上check_design命令是一个好习惯。check_design命令能够检查当前设计的内部表达的一致性,能发现一些问题并报出warning和error。比如一些未连接pin和一些递归的层次结构都可以发现并报错,如例6.16所示。

例6.16

978-7-111-55094-5-Chapter06-39.jpg

3.添加设计约束

我们为了让电路实现预期的期望,达到设计的目标,会添加关于时序、面积和功耗等方面的约束,DC会根据这些约束对设计进行有效的优化。为了增强脚本的可读性,这里建议用户可单独建立一个约束的Tcl文件,然后在运行DC的脚本中用source命令执行该约束脚本。这样不容易出错,而且脚本思路清晰,可读性好。关于怎样添加约束,下一节会详细介绍。

在执行完约束脚本后,建议用户执行check_timing命令。这个命令可以报告出当前设计的时序属性,未施加约束的节点,以及一些潜在错误和警告,供设计者参考,再进一步完善约束脚本,如例6.17所示。

例6.17

978-7-111-55094-5-Chapter06-40.jpg

978-7-111-55094-5-Chapter06-41.jpg

4.编译综合

添加设计约束后,就要命令DC根据约束的要求将GTECH网表中的逻辑器件映射到变量978-7-111-55094-5-Chapter06-42.jpgtarget_library中指定库中的实际电气器件。这里需要用到compile命令,这个命令可以综合和优化当前设计中从逻辑层到门级网表层的部分。它的优化过程是根据用户施加的约束驱动的。

compile_ultra命令除了具有和compile一样的功能外,还提供了更强大的优化功能。它能提供对时序、面积、功耗等方面的并发优化手段来优化高性能设计,例如它能打破模块之间的边界,进行边界优化。它也能在算法层面优化,并且提供高级的时序分析以及关键路径的重编译,如例6.18所示。

例6.18

978-7-111-55094-5-Chapter06-43.jpg

978-7-111-55094-5-Chapter06-44.jpg

compile_ultra命令还可以添加各种选项,使其具有更加符合设计者需求的优化功能。读者可在DC的终端下输入man compile_ultra来获得命令帮助信息。DC的其他命令及内置变量都用man命令来获得命令的用法及选项。

5.报告分析

编译综合完后,就得到了对应目标库的门级网表。但这个网表是否完全满足约束,我们并不知道。我们可以用report_*命令来产生各种报告,通过这些报告,可以了解到设计的一些信息。report_timing返回的是设计的时序报告,report_con-straint返回的是设计规则和时序违反约束,report_area返回的是面积报告等。例6.19是命令report_timing返回的报告,最后一行的(VIOLATED)表示设计违例。设计工程师需要修改约束或者RTL代码来消除违例。

例6.19

978-7-111-55094-5-Chapter06-45.jpg

978-7-111-55094-5-Chapter06-46.jpg

6.保存网表

通过以上步骤我们得到了所需要的门级网表,可以用write命令将生成的网表文件保存在磁盘上,可以通过-format选项选择保存文件的格式。如例6.20所示,可以是.v格式、.vhd格式和.ddc格式。其中.ddc格式是SYNOPSYS内置的内部数据库文件格式,.ddc文件不仅有网表中的器件连接信息,还包含网表的时序信息。它是二进制格式文件,SYNOPSYS工具读取它速度很快,是前端设计人员交付后端设计的最佳选择。

例6.20

978-7-111-55094-5-Chapter06-47.jpg

例6.21为结合以上步骤编写的DC运行脚本。在DC终端用source命令执行该脚本就可自动完成以上综合的每个步骤。有利于简化综合操作流程以及完成交互式的任务。

例6.21

978-7-111-55094-5-Chapter06-48.jpg

以上就是使用DC进行逻辑综合的基本流程。经过这6个步骤以后,我们将得到一个较为满意的门级网表,前端设计工程师就可以把它交付给后端部门进行下一步的设计了。