第五章 综合的约束与优化(6)
对于超过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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [基础教育]2016-2022年中国钢芯铝绞线市场现状调
- [基础教育]语文部编版初一语文下册练习题 句式变
- [基础教育]南京继续教育参考答案--深入学习贯彻习
- [基础教育]国旗下讲话稿——珍惜时间好读书
- [基础教育]北师大版六年级数学下册圆锥的体积教学
- [基础教育]人教版-音乐-四年级下册-四年级下册音
- [基础教育]乔布斯2019年斯坦福大学毕业典礼致辞.d
- [基础教育]2015年加油站安全知识竞赛试题及答案
- [基础教育]2020年教师年度考核个人工作总结
- [基础教育]2019年中考历史试题-2019年大庆市初中
- [基础教育]初三仁爱英语第一轮总复习教案
- [基础教育]SG-A094电气配管安装工程隐蔽验收记录
- [基础教育]冀教版小学数学三年级下册第六单元教材
- [基础教育]青岛版(五制)小学科学二年级下册16《制
- [基础教育]2018-2019年初中科学初一中考真卷测试
- [基础教育]幼儿园大班期末简短评语精选
- [基础教育]2018云南临沧公务员考试申论技巧:这样
- [基础教育]学校食堂经营管理方案
- [基础教育]新中国砥砺奋进的七十年原文
- [基础教育]真空泵的选型及常用计算公式
- 高职田径课程教学现状与对策
- 全髋关节置换术在老年股骨颈骨折患者中
- 青人社厅函〔2016〕576号(附件)工资
- cp101-07砂子检验作业指导书 - secret
- 微观经济学 第八章 博弈论 习题
- 2014高考真题(词语运用)汇编及答案
- 2018年人教版七年级语文下册《第三单元
- 苏教版数学四年级上册第一单元试题 - M
- 四川大学新闻与传播考研2000-2010年真
- 浙江万里学院英语专业四年制本科教学计
- 最新2018马年事业祝福语-范文word版(2
- 最全模具行业术语英文翻译
- 皮亚杰的发展心理学理论
- 64篇高考情景式默写 练习题及答案
- 仿写(学生稿)
- 《SQL Server数据库技术》试卷A
- 第七章作业答案
- 江苏省赣榆县海头高级中学高中语文必修
- 浙江省2001年10月自考正常人体解剖学答
- 2012英语重点短语




