您的位置:首页 > 其它

Design Compiler基础知识整理

2017-11-18 16:21 579 查看

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

set_app_var与set的区别是前者检查语法错误,然后设置一个自定义变量,后者不检查语法错误,直接定义一个变量;

set_app_var link_library “* $target_libs”通过link_library解决引用问题:先在DC内存中匹配design name,再在变量中匹配library cell name。

set_app_var search_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 ->默认的search_path ->额外的search_path

“layout“ vs “abstract”:后者只包含P&R所需要的的最小数据

Technology File(.tf文件):描述金属和via层的参数

check_library:逻辑库和物理库的一致性检查

check_tlu_plus_file:检查TLUPlus和.tf的一致性
ad14

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脚本命令:dcprocheck example.tcl

启动dc_shell后运行脚本:dc_shell> source example.tcl

在dc_shell>下查手册或者信息:man+command或者info+command

target_library:synthesis的map阶段需要的实际工艺库

link_library:链接库,用于连接模块,“*”表示内存中所有的库

link:读取完所要综合的模块之后,将读到的DCmemory中的模块连接起来(出现unresolved design reference的警告,需要重新读取模块)

logic optimization和mapping 均在compile时完成,可以使用特殊的优化方法:structural和flatten

set_dont_touch:在当前设计和库单元上设置单元格、网格、引用和设计的dont_touch属性,以防止在优化期间修改和替换这些对象

all_fanout:返回指定源扇出中的一组引脚、端口或者单元

set_wire_load_mode:连线负载模式,模块之间的。有三种情况:enclosed、top和segmented。设置线载模型用于计算电容

set_wire_load_model:模块内部连线模型

compile_seqmap_propagate_constants:默认值为true。控制编译命令是否尝试识别和删除常量寄存器,并且在整个过程中传播常量值。

hdlin_preserve_sequential:在设计中控制复杂的和读取的命令是否保留了卸载的顺序单元

sh_continue_on_error:允许脚本出错时继续执行命令

sh_source_emits_line_number:指示发出信息的错误消息严重级别,列出该消息发生时的脚本名和行号:E代表只报error;W代表报error和warning

set_load:指定端口或者网络上设置的load属性

load_of:返回指定端口cell的pin电容

set_fix_multiple_port_nets:在当前的设计或设计列表设置固定多路网属性到指定的值

report_timing -slack_lesser_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}

设置面积约束:set_max_area 100 单位面积在不同的工艺库下所指的的一样:以二输入与非门的面积为单位面积、以单个管子所占面积为单位面积、以实际面积1um2为单位面积。在不知道的情况下可以综合一个二输入与非门来看数值,来确定具体所指。

定义时钟:create_clock -period 10 [get_ports clk]

set_dont_touch_network [get_clocks clk]

设置输入输出约束:set_input_delay -max 4 -clock clk [get_ports A]

set_output_delay -max 4 -clock clk [get_ports B]

检查约束:report_port -verbose 报告当前设计中定义的I/O端口属性和施加的约束

report_clock:报告当前设计中定义的时钟及其属性情况

reset_design:删除当前设计中所有的属性值和约束(该句命令一般位于脚本第一句)。移除设计remove_design -design

list_libs:列出内存中所有可用的库

check_timing:检查是否有路径没有加入约束

check_design:检查设计中是否具有悬空的管脚或者输出短接的情况

write_script:将施加的约束和属性写出到一个文件内

列出命令的开关选项:help -v set_input_delay

集合中删除元素:set all_except_clk [remove_from_collection \

[all_inputs] [get_ports clk] ]

引入时钟偏差:set_clock_uncertainty 0.5 [get_clocks clk]

时钟源延时:set_clock_latency -source

网络时钟延时:set_clock_latency

布局后综合:set_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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: