42.dc常用命令总结
2020-03-19 17:14阅读:
https://www.bbsmax.com/A/RnJW611vzq/
Tcl与Design Compiler
(十三)——Design
Compliler中常用到的命令(示例)总结
http://www.cnblogs.com/IClearner/
,作者:IC_learner
本文将描述在Design
Compliler中常用到的命令,这些命令按照流程的顺序进行嵌套讲解,主要是列举例子;大概的讲解布局如下所示:
大概有11个部分,下面我们逐个部分进行(简单的)介绍的举例。
1、tcl的命令和结构
tcl的命令和结构请参照第二节的内容:
http://www.cnblogs.com/IClearner/p/6617207.html
,下面是简单的常用举例。
--> 设置变量命令: set PER
2.0
显示变量命令: echo $PER # Result:
2.0
--> 表达式操作:
set MARG 0.95
expr $PER *
$MARG
# expr: *, /, +, >, <, =, <=,
>=
set PCI_PORTS [get_ports
A]
set PCLPORTS [get_ports “Y??M
Z*”]
-->命令嵌套,显示命令中嵌套表达式命令:
echo “Effctv P = [expr $PERIOD *
$MARGIN]”
# Result with soft quotes: “Effctv P =
1.9”
等价于:
echo {Effctv P = [expr $PERIOD *
$MARGIN]}
# Result with hard quotes:
# “Effctv P = [expr $PERIOD *
$MARGIN]”
-->tcl的注释行:# Tcl Comment
line
set COMMENT injine ; # Tel inline
comment
-->设置tcl中的列表变量:
set MY_DESIGNS “A.v B.v
Top.v”
查看列表变量:
foreach DESIGN $MY_DESIGNS
{
read_verilog $DESIGN
}
-->for循环:
for { set i 1} { $i <
10 } { incr i} {
read_verilog BLOCK_$i.v
}
2、获取帮助
-->在dc_shell
中能用的命令:
pwd 、 cd
、
Is、history、
!l 、 !7 、
Ireport 、
sh
:加上sh后,可以执行在linux中执行的命令,如sh
gvim xxx.v &
(&是后台运行)、
printenv、
get_linux_variable
-->在dc_shell中寻求帮助:
下面的这些man、printvar命令都只能在dc_shell中运行:
help -verbose *clock
:列出与*clock有关的选项
create_clock -help
:查看create_clock这个命令的简单用法
man create_clock
:查看create_clock这个命令的详细信息
printvar Mibrary
:查看 Mibrary这个变量的内容
man target_library
:查看target_library这个命令的详细信息
-->linux关联DC中的帮助,获取更多的帮助
为了能够在linux中使用dc_shell中的man命令,或者说能在linux中查看某些dc的命令,可以使用关联(alias):
$
alias dcman “/usr/bin/man -M
$SYNOPSYS/doc/syn/man”
然后我们就可以使用dcman来参看dc中的命令了,例如:
$dcman
targetjibrary
3、tcl语法的检查
当在DC可以执行tcl文件,在运行之前,我们要检查这个tcl文件是否有语法错误,可以使用下面的命令:
$dcprocheck
xxx.tcl
4、设计对象的操作
关于设计对象的内容(比如上面是设计对象等),请查看前面的章节,这里我们只进行说对设计对象操作的一些命令(这些命令可以在dc_shell
中执行,或者写在tcl文件中)。
-->获取设计对象
get_ports
、get_pins
、get_designs
、get_cells
、get_nets
、get_clocks
、get_nets
-of_objects [get_pins FF1_reg/Q]
、get_libs
、get_lib_cells
、get_lib_pins
-->设计对象(的集合):
设计对象的物集,总之就是多个设计对象(组成一个集合)
all_inputs
、all_outputs
、all_clocks
、all_registers
、all_connected
、all_fanin
、all_fanout
、all_ideal_nets
-->对设计对象的操作:
获取设计对象(get_ports
pci_*)后赋予给变量PCI__PORTS:
set
PCI__PORTS [get_ports
pci_*]
echo $PCI__PORTS #
- _sel184
查询设计对象:
query_objects
$PCI__PORTS # -> {pci_1 pci_2
...}
获取设计对象的名字:
get_object_name $PCIMPORTS #
-> pci_1 pci_2 ...
获取设计对象物集的大小:
sizeof_collection $PCI_PORTS
# -> 37
往设计对象物集里面增加设计对象:
set PCI_PORTS [add_to_collection
$PCI_PORTS [get_ports CTRL*]]
从设计对象物集里面减少设计对象:
set ALL_INP_EXC_CLK
[remove_from_collection [alljnputs] [get_ports
CLK]]
比较设计对象:
compare_collections
设计对象的索引:
index_collection
分类设计对象:
sort_collection
循环查看(进行遍历)设计对象物集的内容:
foreach_in_collection
my_cells [get_cells -hier *
-filter “is_hierarchical == true”] {
echo “Instance
[get_object_name $cell] is hierarchical”
}
过滤运算符:
# Filtering operators: ==, !=, >, <,
>=, <=, =~, h
filter_collection [get_cells *]
“ref_name AN*”
get_cells * -filter
“dontjouch == true”
get_clocks *
-filter “period < 10”
列出所有单元属性并将输出重定向到文件:
# List all cell attributes and redirect output
to a file
redirect
-file cell_attr {list_attributes -application -class
cell}
Grep以dont_为开头的单元属性文件:
# Grep the file for cell attributes starting
with dont_
$grep dont_ cell__attr |
more
列出属性为dont_touch的单元名字:
# List the value of the attribute
dont_touch
get_attribute
dont_touch
识别当前设计集中的胶合单元(GLUE_CELLS):