第六章 dc_shell综合脚本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六章dc_shell命令解释程序
第一节设计目标
6-1-1背景介绍
dc_shell 是Synopsys Design Compiler的shell(命令解释程序),与unix的shell 类似。Unix的C shell 和Bourne-shell作为命令解释程序,在用户和unix 核之间实现了功能极强的接口程序。相同地,Dc_shell最为Synopsys Design Compiler的功能极强的命令解释程序。象unix shell 提供程序设计语言在unix 文件系统中操作一样,dc_shell 提供script(脚本)语言在Design Compiler 的设计中操作,且仿造unix shell 的相同的结构。
用dc_shell 脚本综合设计有许多优点:首先,脚本执行速度比象design analyzer 交互式的界面快得多,脚本也用来证明综合设计的过程。更重要的是,脚本提供一个重复编译的机制,这不仅对设计的再利用重要,而且对于当要求一项函数改变时,再次产生设计文件的所要求的时间最小化也很重要。
所有的这些优点源于使用脚本自动走完综合流程。但是,dc_shell 脚本能够做的远不只这些,它能扩展Design Analyzer和Design Compiler的功能。一些Design compiler命令的顺序由脚本得出。大多数经验丰富的Synopsys的用户将脚本和Design analyzer结合使用来分析和优化设计。
6-1-2 目标程序类型的审阅
dc_shell脚本生成设计目标程序和编译属性来引导综合流程。当编写dc_shell脚本时,考虑正在运行的目标程序/信息的类型是很重要的。这一节从“Design Compiler Family Reference Manual”的章节中总结了“design compiler”的概念。
6-1-2-1 实例、网络、端口
原理图由三个基础的构件组成:实例、网点、端口。实例是代表逻辑子程序或层次的符号,网络是代表在实例之间有电气连续性的导线,端口是用来代表层次连续性的线路终结器。这些都是标准的术语。使设计者感到新颖的是reference 的概念。
6-1-2-2 单元、引用、设计
如果一实例代表一逻辑子程序,则它能代表什么类型的子程序呢?一实例能代表一库元件或一设计。用许多术语描述设计是必须的因为一设计可能包含同一库元件(或子设计)的多重实例。
举例说,一典型设计包含与非门,设计中的每一门实例都被赋予唯一的单元名用来在非唯一的实例中彼此区分。同样的,一设计可能包含多个加法器,与与非门不同,加法器一般来说不是库元件,加法器是一个可逐步分解成库元件和网络且相互连接后执行加法器功能的完全设计。与库元件相同,每一子设计的实例都被赋予唯一的单元名。
库元件是无形的设计子程序且在设计中常被做为节点单元引用。设计是逻辑块,它们可作为独立的设计或作为更大设计的子设计。作为其它设计中连接上下关系的子模块,设计中每一个唯一的实例被作为一个分层次的单元引用。在一个单独设计的上下关系中,每一个实例具有唯一的单元名,这些单元引用库元件或设计。设计者可以对每个单元单独地进行优化,也可以通过布置属性或约束(在以下定义)对每个库元件或设计进行优化。但是,属性被直接加至库元件或设计中,这可能影响包含引用这些库元件或设计的每一个设计。
图6.1 单元、引用、设计之间的关系
假设你想要影响一个单独设计中的每一个与非门的优化而没有影响其它设计中的与非门则将会如何呢?引用的概念使这成为可能,设计中的每一个单元不仅是库元件中或设计中唯一命名的实例,而且是引用库元件或设计的一系列单元中的一员。
参考以下图6.2的设计:
图6.2脉动计数器:count_16
这个分层次设计的顶层是一个16位的计数器,顶层设计由与非门、或非门、8位计数器组成。在这层次设计的关系
中,有6个单元、3个引用、2个设计。这些单元是u1、u2、u3、u4、u5、u6,引用是一个三输入与非门、一个三输入或非门和一个count8的设计。设计包含count6和count8的设计。
第二节收集和控制信息
一些dc_shell的构件是用来收集和控制信息。变量和属性是特殊方法、指定设计信息的主要知识宝库。别名提供创建自定义的命令或改变一个命令的行为的技巧。如find、filter、list命令对提取变量或设计目标程序中的信息有相当大的作用。
6-2-1 变量:储存信息
变量在dc_shell的章节中用来存储信息。一些变量被事先定义了,它们对于desing compiler 有特殊的意义。比如search_path这一变量,告诉design compiler 到哪里去找Unix文件系统下的用户的设计文件及库。事先定义的变量分为11组。
组是组织变量履行相似功能的便捷方法。比如说,系统组的变量包含design compiler 用来和Unix交互的信息。由于变量可被任意分配给哪个组,所以可用group_variable命令创建或改变组。
表6.1列出11个事先定义好的组以及组包含的变量举例。
的单词一个值时,变量则自动产生了。选择一个没有保存过的名字代表呢想要保存的值,然后使它与值相等,创建变量的句法与改变变量值的句法相同,给variable_name=value。
6-2-1-1变量介绍
所有的dc_shell变量都是全局的dc_shell变量。变量不和设计数据库一起保存,一旦一段dc_shell结束了,所有在这段赋值的变量都不存在了。所有的变量都是全局变量,没有局部变量(对当前脚本或当前设计使关系独立的)。
变量是严格分类的,也就是说,当一个变量创建后,它将保存某一类型的值。变量能保存字符串、数字(整型或浮点型)、设计目标程序或列表。设计目标程序包括设计、库、端口、总线、管脚、单元、引用、网络、时钟、根目录(也称为DB文件)。
列表是一组字符串、数字,设计目标程序可能在列表中被混淆。一旦变量被创建后用来保存某一类型的值时,它只能被赋予那种类型的值。
如果两个脚本用相同的变量名来引用不同类型的信息,那么两个脚本是不相容的。在这种情况下脚本是不相容的,而且在相同的dc_shell端不能共存。
当脚本赋予一个已存在的变量一个错误类型的值,将会报错且脚本会退出。然而这种情况是容易避免和改正的。首先,选择有代表性的要保存的值的类型以及要保存的值的含义来创建变量。比如说,如果你想要保存当前驻留在内存中的设计列表时,你会键入:active_design_list=find(design,”*”),这命令搜寻所有驻留在内存中的设计并保存列表到active_design_list变量中(此例中的find命令将在以后做详细解释)。其次,若你想用存储错误类型的变量,则删除此变量,然后保存需要的类型。Remove_variable variable_name;variable_name=value.变量能维持设计具有唯一的性能。如果在变量中存储的设计从内存中被删除了,那么也将从变量中被删除。无论变量维持一设计还是包括设计的列表,这都是正确的。以下的例子帮助阐明这种特性的原因。启动dc_shell(或从design analyzer的命令窗口启动),读入设计,键入以上命令来初始化active_design_list变量。List新变量查看它的内容,即list active_design_list。active_design_list变量保存内存中所有变量的列表。要从内存中删除一个设计,利用你刚才创建的变量来删除内存中所有的设计,即remove_design active_design_list。发出以下的命令来验证当一个设计从内存中删除时,它们将从所有的变量中删除:
find design“*”
list active_design_list
为什么会发生这种情况?当设计从内存中删除时design compiler 删除了所有的引用,这保证未来的命令对不存在的设计目标程序不产生操作(一项实践操作可能对当前的dc_shell产生致命的牵连)。
6-2-1-2 事先定义的变量
这节描述一些重要的事先定义的变量。
1、dc_shell_status
每次dc_shell命令执行时,一个值返回到命令窗口(在命令提示之前立即返回)。对于大多数命令来说,这值是整型的。如果命令成功地完成了,则返回1,否则返回0。返回值不只返回到命令窗口,它也赋予变量dc_shell_status。这使调节后来命令的执行结果与前面命令执行结果一致成为可能。这种特性的流程控制含意详细地描述如下。
不是所有地命令都返回一个整型值,举例说,find命令返回一个值地列表。为了适应象这样的命令,dc_shell_status变量没有严格分类。这种特性非常功能非常强大,但它要求设计者在利用dc_shell_status写脚本时清楚要返回dc_shell_status变量的类型。
2、current_design