教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 基础教育 >

第五章 综合的约束与优化(6)

来源:网络收集 时间:2026-04-29
导读: 对于超过100K门的设计,自顶向下的编译策略要求更多的内存并可能导致更长的运行实现一个自顶向下的编译,执行下列步骤: 时间。 ? 读入整个设计 ? 分解任何一个设计基准的多重实例 ? 将属性和约束应用于顶层 ? 编译

对于超过100K门的设计,自顶向下的编译策略要求更多的内存并可能导致更长的运行实现一个自顶向下的编译,执行下列步骤:

时间。

? 读入整个设计

? 分解任何一个设计基准的多重实例 ? 将属性和约束应用于顶层 ? 编译设计

下面是对设计TOP进行自顶向下编译的脚本。这个脚本包括确定每一个步 骤的注释。

/* read in the entire design */ read -f verilog E.v read -f verilog D.v read -f verilog C.v read -f verilog B.v read -f verilog A.v read -f verilog TOP.v current_design TOP link

/* resolve multiple references */ uniquify

/* apply constraints and attributes */ include defaults.con /* compile the design */ compile

5-4-2-2 从下到上编译

从下到上编译策略有如下优点:

? 利用divide-and-conquer方法编译大的设计 ? 比自顶向下编译,内存的要求更小 ? 允许时间预算 ? 重复直到接口稳定 ? 人为的修改控制

从下到上编译策略单独地编译子设计,然后在顶层设计中合并。应用顶层约束,检测设计是否有错误。即使有可能没有错误展现,这也是靠不住的,因为子设计之间设置的接口通常在开始不是那么准确。

为改进内在模块约束的准确性,你读入顶层设计和所有的子设计,然后对子设计的单

168

一的单元实例应用characterize命令。在编译过的子设计提供的更多的接近现实的信息的基础上,characterize捕获每一个单元实例的环境和时序信息,然后用新值替代现存的属性和约束。

采用改进过的约束,重新编译子设计,并再次检测顶层设计。你应该了解改进过的结从下到上编译策略要求下列步骤:

果,但你可能要几次反复整个过程来移走所有重要的错误。

1.发展一个默认的约束文件和一个子设计明确的约束文件。默认的约束文件包括全局的约束,诸如时钟信息、驱动和负载预计。子设计明确的约束文件则反映了分配给子模块的时序预算。

2.独立地编译子设计

3.读入顶层设计和已经编译过的但不在内存中的子设计 4.设置顶层设计为当前设计,链接设计,应用顶层约束

如果设计满足约束,结束;否则,继续下列步骤。 5.对最差情况的单元实例应用characterize命令 6.用write_script来保存单元的特性信息

当你重新编译子设计时,应用该脚本来重新产生新的属性值。

7.用remove_design -all来移走内存中的所有设计 8.读入先前特性化过的单元的RTL级设计

重新编译RTL设计,而不是单元映射后的设计,可能导致更好的优化结果。 9.设置特性化的单元的子设计为当前设计,利用保存的特性数据的脚本重新编译。 10.读入所有其他编译过的子设计 11.链接当前设计

12.选择其他子设计,重复步骤3到步骤9,直到你利用它们真实的情况来重新编译过所有的子设计

在应用从下到上的编译策略时,注意下列情况:

? 命令read_file可以更为快捷地读入.db格式。如果在首次读入RTL级代码

后,你不愿意修改它,保存这个未映射的设计为一个.db文件。在你重新读入这个设计时将节省不少时间。

? compile命令影响当前设计的所有子设计。如果你只想优化当前设计,你 可以在你的数据库中移走或不包括它的子设计,或者对子设计设置dont_touch属性。

下面是对设计TOP执行从下到上的编译的脚本文件:

all_blocks = {E,D,C,B,A}

/* compile each subblock independently */ foreach (block, all_blocks) { /* read in block */

block_source = block + \

169

read_file -format verilog block_source current_design block link uniquify

/* apply global attributes and constraints */ include defaults.con

/* apply block attributes and constraints */ block_script = block + \include block_script /* compile the block */ compile }

/* read in entire compiled design */ read_file -format verilog TOP.v current_design TOP link

write -hierarchy -output first_pass.db /* apply top-level constraints */ include defaults.con include top_level.con /* check for violations */ report_constraint

/* characterize all instances in the design */ all_instances = {U1,U2,U2/U3,U2/U4,U2/U5} characterize -constraint all_instances /* save characterize information */ foreach (block, all_blocks) { current_design block

char_block_script = block + \write_script > char_block_script }

/* recompile each block */ foreach (block, all_blocks) { /* clear memory */ remove_design -all

/* read in previously characterized subblock */

170

block_source = block + \read -format verilog block_source /* recompile subblock */ current_design block link uniquify

/* apply global attributes and constraints */ include defaults.con

/* apply characterization constraints */ char_block_script = block + \include char_block_script

/* apply block attributes and constraints */ block_script = block + \include block_script /* recompile the block */ compile }

5-4-2-3 混合编译策略

你可以同时采用两种策略来获得两种策略的优点:

? 对层次较少的模块应用自顶向下的编译策略

? 应用从下到上的编译策略将层次较少的和更大的模块结合

图5.9显示了一个混合编译策略的例子。

图5.9 混合编译策略

5-4-3 分解一个设计基准的多重实例

171

在一个层次化设计中,子设计常常被多于一个的实例所引用。图5.10所示的设计top,

其中设计C被引用了两次(U2/U3 and U2/U4)。

图5.10 Multiple Instances of a Design Reference

你必须在运行compiler命令前分解这些多重实例。你可以使用如下的方法: ? uniquify

? compile-once-don’t-touch ? ungroup 5-4-3-1 uniquify

如果被多次引用设计的实例的周围环境很不一致,采用uniquify来分解多重实例。这

个方法包括使用uniquify命令来复制和重新命名被多重引用的设计,以致每一个实例引用一个唯一的设计。然后Design Compiler才能根据它的单元实例的唯一的环境对每一个设计副本进行最优化。

默认情况下,uniquify命令将贯穿整个当前设计对所有的多重实例(除了那些赋予dont_touch属性的)创建唯一的设计副本。你也可以用-reference选项来创建指定引用的唯一的副本;或者用-cells选项指定特殊的单元。Design Compiler对那些带有-reference或-cells选项的指定的单元制造唯一的副本,即使它们被赋予了dont_touch属性。

Design Compiler用uniquify_naming_style变量中指定的命名习惯来产生子设计每一个副本的名字。默认的命名习惯是: %s_%d

%s:子设计的原始名称(或-base_name选项指定的名称) %d:形成唯一子设计名称的最小的整数值

你可以用uniquify命令仅仅分解多重设计引用,或者对分解后的当前设计重新进行编译。

比如,下面的命令序列分解了 …… 此处隐藏:2373字,全部文档内容请下载后查看。喜欢就下载吧 ……

第五章 综合的约束与优化(6).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/565731.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)