DesignCompiler基础知识整理
DC的四种⼯作模式:
⼯具模式:wire load mode和 topographical mode
⾮⼯具模式:Multimode和UPF模式(Unified Power Format)
⾮⼯具模式只能⽤在topographical mode下,wire load mode是默认模式,启动dc时必须选择⼯具模式的⼀种。Multimode允许在多个操作条件和多种模式下操作⼯具(⽐如:测试模式和备⽤模式)。UPF模式允许指定先进的低功耗⽅法。
不同模式下的编译命令
Wire load mode下的编译命令为:compile和compile_ultra。compile命令运⾏DC Expert,DC Expert综合你的HDL描述到优化的、技术相关的门级设计中。它⽀持⼴泛的平⾯和分层设计风格,可以优化⾯积,时序和功耗的组合和时序设计。
compile_ultra运⾏DC Ultra(⽆topo模式的特点),DC Ultra提供了同步优化时间,区域,功率,并测试⾼性能设计。它还提供了⾼级的延迟算术优化,⾼级的定时分析,⾃动漏电能⼒优化和寄存器重定时。
Topographical mode:使⽤物理约束时必须在该模式下。在综合时精确预测布线后的时序、⾯积、功耗,时序的估算⽆需基于线载模型。综合命令:compile_ultra和compile_ultra -spg
⼀些杂乱的知识点
在dc_shell下也可以使⽤unix命令诸如: pwd、 cd 、ls、history、alias等。
重复最后⼀条命令dc_shell> !!
执⾏第七条命令dc_shell> !7
执⾏最后⼀条report命令dc_shell> !rep
执⾏任何shell命令dc_shell> sh < UNIX_command >
得到unix变量值dc_shell> get_unix_variable
t_app_var与t的区别是前者检查语法错误,然后设置⼀个⾃定义变量,后者不检查语法错误,直接定义⼀个变量;
t_app_var link_library “* $target_libs”通过link_library解决引⽤问题:先在DC内存中匹配design na
me,再在变量中匹配library cell name。
t_app_var arch_path “./mapped ./rtl ./libs”会从左往右依次寻找;
⾏注释⽤ “#” ,⾏间注释⽤“ ;# ”;
可以在没有原先设计⽂件下,迁移旧库综合的netlist到新库的netlist
读⽂件read_verilog / read_vhdl / read_sverilog:多条命令分别读多个⽂件(module分在各个⽂件),最后⼀个读到的model是当前设计;⼀次性读多个⽂件(module分在各个⽂件),第⼀个module是当前设计,⼀次读⼀个⽂件(多个module在⼀个⽂件),第⼀个module是当前设计。
好的习惯是link之前指定current_design,在link之后check_design,可以使⽤link和check_design的返回值来让脚本继续执⾏还是终⽌;
check_design -html chech_design.html & sh firefox check_design.html
elaborate是在读源⽂件时唯⼀修改module参数的⽅式:
analyze 分析HDL源程序并将⼀些中间⽂件保存在WORK
elaborate $my_top -parameters “A_WIDTH=8,B_WIDTH=16”怎么设置群头衔
将产⽣的中间⽂件⽣成verilog模块或VHDL的实体(缺省情况下elaborate读取WORK下的⽂件)
在解决模块调⽤IP时,将IP/Macro-cell library 加⼊link_library即可。target_library⼀般只包含⼀个库⽂件。
ddc⽂件通过write -format ddc -output file_name.ddc⽣成,ddc⽂件可以通过read_ddc {decode.ddc encode.ddc}读取,对⼤⼩写敏感,在写ddc时,可以指定-hier来保存整个设计的hierarchy,没有该项,只写出部分(如果没有指定输出对应设计的ddc⽂件,那么默认输出当前设计的ddc)
ddc⽂件是translate 的到的:rtl -> unmapped ddc。在compile之前保存ddc⽂件,以备下次使⽤,⽽不需要重新translate,当然rtl修改后需要重新translate。注意:在约束前产⽣的ddc和约束后产⽣的ddc不⼀样
在compile后,根据需要也可以输出map之后的ddc⽂件,该⽂件包含netlist、constraints和attributes,该ddc⽂件可以⾼效的被dc 重新读取或者被icc读取。
link查找顺序:DC memory ->link_library -> CWD ->默认的arch_path ->额外的arch_path
“layout“ vs “abstract”:后者只包含P&R所需要的的最⼩数据
Technology File(.tf⽂件):描述⾦属和via层的参数
易错字check_library:逻辑库和物理库的⼀致性检查
check_tlu_plus_file:检查TLUPlus和.tf的⼀致性
get_*命令返回current_design,DC memory,libraries中的对象,对象可以使⽤通配符,返回⼀个集合,或者返回空集合
all_*命令:all_inputs、all_outputs、all_clocks、all_registers、all_ideal_nets、all_fanin、all_fanout、all_connected、
all_dont_touch、all_high_fanout返回对应集合。
add_to_collection # Add object(s) to a collection. Result is new collection
append_to_collection # Add object(s) to a collection. Modifies variable
compare_collections # Return 0 if two collections contain the same objects
copy_collection # Make a copy of a collection. Result is new collection
filter_collection # Filter a collection, resulting in new collection
foreach_in_collection # Iterate over a collection
index_collection # Extract object from collection. Result is new collection
remove_from_collection # Remove object(s) from a collection. Result is new collection
sizeof_collection # Get the number of objects in collection
sort_collection # Create a sorted copy of the collection
=~ Matches pattern
!~ Does not match pattern
list和collection是两个感念:
list可以理解为字符串,⽤foreach来遍历,echo、llength
collection可以理解为指针,⽤foreach_in_collection 来遍历,sizeof_collection、query_objects
检查DC脚本命令:l
启动dc_shell后运⾏脚本:dc_shell> l
在dc_shell>下查⼿册或者信息:man+command或者info+command
棉花堡
target_library:synthesis的map阶段需要的实际⼯艺库
target_library:synthesis的map阶段需要的实际⼯艺库
link_library:链接库,⽤于连接模块,“*”表⽰内存中所有的库
link:读取完所要综合的模块之后,将读到的DCmemory中的模块连接起来(出现unresolved design reference的警告,需要重新读取模块)
logic optimization和mapping 均在compile时完成,可以使⽤特殊的优化⽅法:structural和flatten
t_dont_touch:在当前设计和库单元上设置单元格、⽹格、引⽤和设计的dont_touch属性,以防⽌在优化期间修改和替换这些对象
all_fanout:返回指定源扇出中的⼀组引脚、端⼝或者单元
t_wire_load_mode:连线负载模式,模块之间的。有三种情况:enclod、top和gmented。设置线载模型⽤于计算电容
t_wire_load_model:模块内部连线模型
compile_qmap_propagate_constants:默认值为true。控制编译命令是否尝试识别和删除常量寄存器,并且在整个过程中传播常量值。
hdlin_prerve_quential:在设计中控制复杂的和读取的命令是否保留了卸载的顺序单元
sh_continue_on_error:允许脚本出错时继续执⾏命令
sh_source_emits_line_number:指⽰发出信息的错误消息严重级别,列出该消息发⽣时的脚本名和⾏号:E代表只报error;W代表报error和warning再造卓越
t_load:指定端⼝或者⽹络上设置的load属性
load_of:返回指定端⼝cell的pin电容
t_fix_multiple_port_nets:在当前的设计或设计列表设置固定多路⽹属性到指定的值
report_timing -slack_lesr_than 1 报告⼩于1ns的时序路径
max_path 指定每个路径组报告的路径数
海参汤
nworst 指定每个端点报告的最⼤路径数,默认为1,只会报告给定端点结束的最坏路径。
-delay max min 报告路径组中的建⽴时间和保持时间的关键路径,max为建⽴时间
uniquify :为设计中的每⼀个模块产⽣⼀个名字唯⼀的拷贝,可根据每个模块本⾝特有的环境做优化和映射。
麻将胡⽤group创建层次,ungroup解除层次关系:
dc_shell>group -design_name NEW_DES -cell_name u23 {u2 u3}
dc_shell>current_design NEW_DES
贝斯几根弦dc_shell>ungroup {u2 u3}
设置⾯积约束:t_max_area 100 单位⾯积在不同的⼯艺库下所指的的⼀样:以⼆输⼊与⾮门的⾯积为单位⾯积、以单个管⼦所占⾯积为单位⾯积、以实际⾯积1um2为单位⾯积。在不知道的情况下可
以综合⼀个⼆输⼊与⾮门来看数值,来确定具体所指。
定义时钟:create_clock -period 10 [get_ports clk]
t_dont_touch_network [get_clocks clk]
设置输⼊输出约束:t_input_delay -max 4 -clock clk [get_ports A]
t_output_delay -max 4 -clock clk [get_ports B]
检查约束:report_port -verbo 报告当前设计中定义的I/O端⼝属性和施加的约束
report_clock:报告当前设计中定义的时钟及其属性情况
ret_design:删除当前设计中所有的属性值和约束(该句命令⼀般位于脚本第⼀句)。移除设计remove_design -design
list_libs:列出内存中所有可⽤的库
check_timing:检查是否有路径没有加⼊约束
check_design:检查设计中是否具有悬空的管脚或者输出短接的情况
write_script:将施加的约束和属性写出到⼀个⽂件内
列出命令的开关选项:help -v t_input_delay
渡轮集合中删除元素:t all_except_clk [remove_from_collection \
[all_inputs] [get_ports clk] ]
引⼊时钟偏差:t_clock_uncertainty 0.5 [get_clocks clk]
时钟源延时:t_clock_latency -source
⽹络时钟延时:t_clock_latency
布局后综合:t_propagated_clock
同步多时钟:虚拟时钟 creat_clock -period 20 -name CLKA 红⾊部分必须指定,没有端⼝或者管脚过滤器:
filter_collection [get_cells *] “ref_name == AN2”
filter_collection [get_cells *] “is_mapped == true”
get_cells -filter “@dont_touch == true”
中断编译:ctrl+D
file操作:
rootname:返回“.”之前的字符串,⽆点则直接返回整个字符串
extension:返回最后⼀个“.”之后(包括点)的字符串,没有点,那么返回空字串
isdirectory: ⽂件是⽬录则返回1,否则返回0
isfile:是⽂件本⾝,返回1,否则返回0
为了保证结构的完整性,需要添加⼯作路劲:define_design_lib WORK -path ./work