三、DC综合起始步骤,预综合过程

整个过程大致可以分为下面几个部分——

  1. 预综合过程(Pre-synthesis Processes)
  2. 施加设计约束(Contrainting the Design)
  3. 设计综合(Synthesizing the Design)
  4. 后综合过程(Post-synthesis Process)

预综合过程是指在综合过程之前的一些为综合作准备的步骤,包括 DesignCompiler 的 启动、设置各种库文件、创建启动脚本文件、读入设计文件、DC 中的设计对象、各种模块 的划分以及 Verilog 的编码等等。

企鹅号 3270516346

3.1 Design Compiler 的启动

对于 2000. 11 版的Design Compiler ,用户可以通过四种方式启动 Design Compiler ,他们 是——dc_shell 命令行方式、dc_shell-t 命令行方式、design_analyzer 图形方式和 design_vision 图形方式。其中后面两种图形方式是分别建立在前面两种命令行方式的基础上的。
在这里插入图片描述

  1. dc_shell 命令行方式
    该方式以文本界面运行Design Compiler 。在 shell 提示符下直接输入”dc_shell”就可 以进入这种方式。也可以在启动 dc_shell 的时候直接调用 dcsh 的脚本来执行(dc_shell –f script) 。 目前这种方式用的已经不是很普遍。
  2. dc_shell-t 命令行方式
    该方式是以 TCL (Tool Command Language 后面章节将有介绍)为基础的,在该脚 本语言上扩展了实现Design Compiler 的命令。用户可以在 shell 提示符下输入”dc_shell-t” 来运行该方式。该方式的运行环境也是文本界面。也可以在启动 dc_shell-t 的时候直接 调用 tcl 的脚本来执行(dc_shell-t –f script)。 TCL 命令行方式是现在推荐使用的命令行 方式,她相对 shell 方式功能更强大,并且在 Synopsys 的其他工具中也得到普遍使用。
  3. design_analyzer 图形界面方式
    Design Analyzer 使用图形界面,如菜单、对话框等来实现 Design Compiler 的功能, 并提供图形方式的显示电路。用户可以在 shell 提示符下打“design_analyzer”来运行该 方式。Design_analyzer 图形方式是今后要经常用到的图形界面方式。 由于它所对应的是 dc_shell 的命令行方式,所以我们不能在 design_analyzer 里运行 tcl 命令。另外需要注意 的是:Design analyzer 的工作模式不是用于编辑电路图的,它只能用于显示 HDL 语言描 述电路的电路图。
  4. design_vision 图形界面方式
    Design_vision 是与 tcl 对应的图形方式,用户可以在 shell 提示符下打”design_vision” 来运行该方式。由于它是在 Windows NT 下开发的,在工作站环境下不太普及,今后的 课程中将不会用到。

不论 dcsh 模式还是 tcl 模式都提供了类似于 unix 的 shell 脚本的功能,包括变量赋值、 控制流命令、条件判断等等,但是 dcsh 模式的语法规则不同于 tcl 的语法规则,因此,使用 dcsh 书写的脚本不能直接用于 TCL 工作模式;使用 TCL 书写的脚本也不能直接用于 dcsh工作模式。

Design Analyzer 在启动时自动在启动目录下面创建两个日志文件:command.log 和 view_command.log ,用于记录用户在使用 Design Compiler 时所执行的命令以及设置的参数, 在运行过程中同时还产生 filenames.log 的文件,用于记录 design compiler 访问过的目录,包 括库、源文件等,filenames.log 文件在退出 design compiler 时会被自动删除。启动 dc_shell 时则只产生 command.log 的日志文件。

3.2 库文件的设置

在 Design Compiler 的运行过程中需要用到几种库文件,他们是工艺库、链接库、符号 库以及综合库,下面对他们一一说明。

  1. 工艺库(target_library)
    工艺库是综合后电路网表要最终映射到的库,读入的 HDL 代码首先由 synopsys 自带的GTECH 库转换成 Design Compiler 内部交换的格式,然后经过映射到工艺库和优化生成门级网表。工艺库他是由 Foundary 提供的,一般是.db 的格式。这种格式是 DC 认识的一种内部文件格式,不能由文本方式打开。.db 格式可以由文本格式的.lib 转化过来,他们包含的信息是一致的。下面是一个.lib 的工艺库例子——
    在这里插入图片描述
    从图中可以看出,工艺库中包含了各个门级单元的行为、引脚、面积以及时序信息(有 的工艺库还有功耗方面的参数),DC 在综合时就是根据 target_library 中给出的单元电路的 延迟信息来计算路径的延迟。并根据各个单元延时、面积和驱动能力的不同选择合适的单元 来优化电路。

在 tcl 模式下,我们可以根据下面的命令指定工艺库——
在这里插入图片描述
2. 链接库(link_library)
link_library 设置模块或者单元电路的引用,对于所有 DC 可能用到的库,我们都需 要在 link_library 中指定,其中也包括要用到的 IP。
值得注意的一点是:在 link_library 的设置中必须包含’ * ’, 表示 DC 在引用实例化模 块或者单元电路时首先搜索已经调进 DC memory 的模块和单元电路,如果在 link library 中不包含’*’ ,DC 就不会使用 DC memory 中已有的模块,因此,会出现无法匹配的模块 或单元电路的警告信息(unresolveddesignreference)。
另外,设置 link_library 的时候要注意设置 search_path ,请看下面这个例子——
在这里插入图片描述
图中设置了 link_library,但是DC 在 link 的时候却报错,找不到 TOP 中引用的DECODE 模块,这说明 link_library 默认是在运行 DC 的目录下寻找相关引用。 要使上例的 DECODE 能被找到,需要设置 search_path ,如下图所示——
在这里插入图片描述
3. 符号库 (symbol_library)
symbol_library 是 定 义 了 单 元 电 路 显示 的 Schematic 的 库 。 用 户 如 果 想 启动 design_analyzer 或 design_vision 来查看、分析电路时需要设置 symbol_library 。符号库的 后缀是.sdb ,加入没有设置,DC 会用默认的符号库取代。
设置符号库的命令是:set symbol_library

  1. 综合库(synthetic_library)
    在初始化 DC 的时候,不需要设置标准的 DesignWare 库 standard.sldb 用于实现 Verilog 描述的运算符,对于扩展的 DesignWare ,需要在 synthetic_library 中设置,同时 需要在 link_library 中设置相应的库以使得在链接的时候DC 可以搜索到相应运算符的实现。

3.1.3 设置启动文件.synopsys_ dc.setup

在这里插入图片描述
启动文件顾名思义,就是 DC 在启动的时候首先读入的文件,DC 在启动的时候,会自 动在三个目录下搜索该文件(如上图所示),对 DC 的工作环境进行初始化:

  1. $SYNOPSYS/admin/setup 目录下,DC 安装的标准初始化文件。
  2. 当前用户的$HOME 目录下,一般用于设置一些用户本人使用的变量以及一些个性 化设置。
  3. DC 启动所在的目录下,一般用于与所在设计相关的设置。

其中后面的 setup 文件可以覆盖前面文件中的设置。该文件主要包括库的设置、工作路 径的设置以及一些常用命令别名的设置等等。

由于 dcshell 的启动脚本和 tcl 的脚本语法不一致,所以如果只有一种方式的启动脚本, 那么运行另一种方式的时候会报错。因此,DC 的启动脚本有一种兼容两种方式的格式。下 面是这种脚本的举例——
在这里插入图片描述
它区别与其他启动脚本的特征是第一行有一个”#” ,说明它是 dcshell 的一个子集,同时兼容两种方式。文件的第一段设置工艺库和链接库,第二段设置符号库和搜索路径,第三段 设置 DC 命令的别名,这一点与 Shell 相似。

3.4 读入设计文件

在这里插入图片描述
Design Compiler 支持多种硬件描述的格式,.db 、.v 、.vhd 、等等,对于 dcsh 工作模式 来说,读取不同的文件格式只需要带上不同的参数,对于 TCL 的工作模式来说,读取不同的 文件格式需要使用不同的命令。两种工作模式的读取命令的基本格式如下:

read –format verilog[db 、vhdl etc.] file//dcsh 的工作模式
read db file.db //TCL 工作模式读取 DB 格式
read_verilog file.v //TCL 工作模式读取 verilog 格式
read_vhdl file.vhd //TCL 工作模式读取 VHDL 格式

Design Compiler 可以读取设计流程中任何一种数据格式,如行为级的描述、RTL 级的描述、门级网表等等,不过由于不同的数据格式使得 Design Compiler 综合的起点不同,即 使实现相同的功能,也可能会产生不同的结果。

读取源程序的另外一种方式是配合使用 analyze 命令和 elaborate 命令:analyze 是分析 HDL 的源程序并将分析产生的中间文件存于 work(用户也可以自己指定)的目录下;elaborate 则在产生的中间文件中生成 verilog 的模块或者 VHDL 的实体,缺省情况下,elaborate 读取 的是 work 目录中的文件。
当读取完所要综合的模块之后,需要使用 link 命令将读到 Design Compiler 存储区中的 模块或实体连接起来,如果在使用 link 命令之后,出现 unresolved design reference 的警告信 息,需要重新读取该模块,或者在.synopsys_dc.setup 文件中添加 link_library ,告诉 DC 到库 中去找这些模块,同时还要注意 search_path 中的路径是否指向该模块或单元电路所在的目 录。

3.5 设计对象

在这里插入图片描述
上图是一个 Verilog 描述的设计实例,里面包含了我们所要讨论的几种设计对象。这些 对象也是今后 DC 命令的操作对象。Verilog 描述的各个模块可以称之为设计(Design) ,里面元件称为引用(Reference) ,引用的实例称为单元(Cell) ,引用单元的内部端口是管脚。

如果各个设计对象互相重名怎么办?
在这里插入图片描述
在上图中,一个设计的端口,连线以及内部一个管脚都有一个相同的名字,假如要对名 叫”CLK”的线网设置一个为 5 的负载,那应该怎样表示呢?这里,我们需要借助 DCTCL 的 一个特殊的数据类型集合(collection)。
在这里插入图片描述
其中的方括号里面表示在所有的线网中搜索名叫CLK 的线网,将它的负载值设置为 5。 get 命令返回对象的集合,如果这个对象没有找到,则返回为空集合。
集合是 DCTCL 的特殊数据类型,它不同于 TCL 语言中的一种标准数据类型列表(list)。 列表类似与 C 语言中的字符串。我们可以通过下面的方式定义一个列表——
在这里插入图片描述
集合相当于 C 语言的指针,这个指针指向一个数据结构。例如上面指向的是一个名为 CLK 的线网数据类型,这个数据类型中除了包含负载这个属性之外,还有电阻值、扇出(fanout)等 属性,而这些是在列表中不存在的。
除了前面的 get_nets 外,还有下面的一些命令可以搜索设计对象,这里列出了 TCL 和 dcshell 两种语法,便于对比——
在这里插入图片描述

3.6 设计划分

把一个复杂的设计分割成几个相对简单的部分,称为设计划分(Design Partition) 。这种 方法,也可以称为“分而治之”(Divide and conquer)的方法,在平常的电路设计中这是一种 普遍使用的方法,一般我们在编写 HDL 代码之前都需要对所要描述的系统作一个系统划分, 根据功能或者其他的原则将一个系统层次化的分成若干个子模块,这些子模块下面再进一步 细分。这是一种设计划分,模块(module)就是一个划分的单位。在运用 DC 作综合的过程中, 默认的情况下各个模块的层次关系是保留着的,保留着的层次关系会对 DC 综合造成一定的 影响,比如在优化的过程中,各个子模块的管脚必须保留,这势必影响到子模块边界的优化 效果。下面我们将详细介绍在作设计划分的过程中要注意的几点原则,并根据每个原则举一个 实例说明。

  1. 原则一. 不要让一个组合电路穿越过多的模块
    在这里插入图片描述
    上图中的组合逻辑电路存在于寄存器 A 与寄存器 C 之间,它同时穿过了模块 A 、 模块B 以及模块 C 。前面提到了,如果直接将这样的划分交给 DC 综合,那么综合后的 电路将仍旧保持上面的层次关系,即端口定义不会改变。这样的话,DC 在作组合电路 的优化的时候就会分别针对 A 、B 、C 三块电路进行,这样势必会影响到 DC 的优化能 力,不必要的增加了这条路径的延时和面积。因此,可以考虑将三块分散的组合逻辑划 分到一个模块中,如下图所示——
    在这里插入图片描述
    这张图说明了组合电路划分到一个模块之后的电路情况,这样 DC 就可以充分的施 展它的的优化技巧,综合出比较满意的电路来。为什么说它只是一个较好的划分呢?因 为它只是考虑到组合电路的最优划分而没有想到时序电路部分。先看下面一张图——
    在这里插入图片描述
    在这张图里,组合逻辑被划到了 C 模块中,它不仅能保证组合的最佳优化还能保证 时序的最佳优化,因为里面的寄存器在优化的过程中可以吸收前面的组合逻辑,从而形 成其他形式的时序元件,如由原先的 D 触发器变成 JK 触发器、T 触发器、带时钟使能 端的触发器等等。这样工艺库中的大量的时序单元都可以得到充分的利用了。
  2. 原则二. 寄存模块的输出
    在这里插入图片描述

通过前面的讨论,可以知道:在编写代码或者综合的过程中,我们可以把模块尽量 写成如上图那样的逻辑结构:将所有的输出寄存起来。其实这样不但是最佳的优化结 构,也可以简化时序约束(使得所有模块的输入延时相等)。

就算遵循了输出寄存的原则,我们还是可能范下面的错误——
在这里插入图片描述
图中可以看到,一个与非门连接了 A 、B 、C 三个模块,同样的不难看出来,它也 会影响到 C 的组合逻辑的优化。一般这种情况只会在至下而上的综合策略中才出现① 。 可以通过把与非门吸收到 C 中的组合逻辑的方法消除粘滞逻辑(如下图),从而使得电 路的顶层模块仅仅是将子模块拼接在一起,而没有独立的电路结构,这样的一个另一个 好处是可以使得在至下而上的设计策略中不需要编译顶层模块。
在这里插入图片描述
3. 原则三. 根据综合时间长短控制模块大小

综合时间主要受到硬件条件(主频、 内存)的制约,对于早期的工作站而言,硬件水 平不高,跑一个大型的设计可能会一次花上几天时间才会有结果,这样对调试和缩短工 期是不利的,所以需要根据工作站的能力选择合适的模块大小。请看下面一个例子——
在这里插入图片描述
这个例子的模块大小从 500 门到 37 万门不等,假设工作站的硬件条件限制最多只 能跑 30 万门的设计,那么上面的这种划分就有一些弊病。首先,TEENY 模块太小,不 适合优化出最好的结果,可以考虑将它合并到其他模块中。其次,另一个组合模块逻辑 太大,这势必使得综合的时间变得不能承受。因此,改进的划分可以如下图所示——
在这里插入图片描述
可以看到,虽然各个模块也是大小不一,但却可以取得较前面的划分更好的结果。 值得注意的是——Design Compiler 软件本身没有模块大小的限制,它完全根据工作站的 环境决定,在具体作设计的时候,我们可以在硬件条件允许的条件下编译较大的模块,假如硬件条件的确有限,只能选择小的模块来综合了。
4. 原则四. 将同步逻辑部分与其他部分分离
在这里插入图片描述
上图是一个芯片的顶层设计,可以看到它被分层了三个层次——最外边是芯片的 Pad,Pad 是综合工具中没有的,也不是工具能生成的,它由 Foundry 提供,并由设计者 根据芯片外围的环境手工选择;中间一层被分成四个部分,其中最里面那个称为Core,也 就是DC 可以综合的全同步逻辑电路,另外的三个部分 DC 不能综合,需要其他的办法来 解决:ASYNCH 是异步时序部分,不属于 DC 的范畴;CLOCK GEN 是时钟产生模块
( 可能用到 PLL),尽管有一部分同步电路,但也不符合综合的条件;JTAG 是边界扫描 的产生电路,这一部分可以由 Synopsys 的另外一个工具 BSD Compiler 自动生成。
上面我们介绍了四个划分的原则,当然这些原则并不是我们在编写 HDL 代码的时候就 必须遵守的,它只是说明什么样的设计划分对于 DC 来说是最理想的,能得到最优化的结果。事 实上除了通过 HDL 中的模块体现划分,我们还可以运用 DC 的两个命令(Group 及 Ungroup)来调整设计划分。

先看一个例子,调整”原则一”里提到的那个划分不好的模块——
在这里插入图片描述
第一步是使用 group 命令,创建一个新的模块 NEW_DES(设计名) ,单元名为 U23 ,包含U2 和 U3 ,这个命令很直观,很容易看懂。
第二步则是使用 ungroup 命令,将 U23 中的U2 和 U3 的边界去掉,使之称为一个整体, 如下图所示——
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DC综合用户指南是关于使用直流(DC综合系统的详细说明。DC综合系统是一个集成了多个组件的系统,用于直流能源的生成、存储和分配。该用户指南提供了对系统的全面介绍和操作说明。 用户指南的第一部分是关于DC综合系统的概述。它详细解释了该系统所能实现的功能和优势,包括可靠性、高效能源利用和简化的安装过程。此外,该部分还介绍了系统的组件,例如太阳能光伏板、风力发电机和电池存储系统。 接下来的部分涵盖了DC综合系统的安装和配置。用户将了解如何选择并安装适合自己需求的组件。该指南还提供了关于连接方法、电路维护和保护的详细信息。以及对系统设置的调整和优化的说明。 用户指南的下一节是关于DC综合系统的操作。它详细解释了如何启动和关闭系统,以及如何监测和管理系统的性能。此外,该部分还包括故障排除和常见问题解答,以帮助用户解决可能出现的问题。 最后,用户指南提供了关于DC综合系统的维护和保养的建议。用户将学习如何定期检查系统组件的工作状态,以确保其正常运行。此外,用户还将了解如何处理废旧组件和进行系统升级。 总之,DC综合用户指南是一本详细介绍DC综合系统的操作手册。通过阅读和遵循该指南,用户将能够使用和维护他们的DC综合系统,以满足他们的能源需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chy_wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值