新浪博客

42.dc常用命令总结

2020-03-19 17:14阅读:
https://www.bbsmax.com/A/RnJW611vzq/

TclDesign Compiler (十三)——Design Compliler中常用到的命令(示例)总结


http://www.cnblogs.com/IClearner/ ,作者:IC_learner
本文将描述在Design Compliler中常用到的命令,这些命令按照流程的顺序进行嵌套讲解,主要是列举例子;大概的讲解布局如下所示:
                       
大概有11个部分,下面我们逐个部分进行(简单的)介绍的举例。
1tcl的命令和结构
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 Ishistory !l !7 Ireport
  sh :加上sh后,可以执行在linux中执行的命令,如sh gvim xxx.v & (&是后台运行)
  printenv
  get_linux_variable
-->dc_shell中寻求帮助:
  下面的这些manprintvar命令都只能在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
3tcl语法的检查
当在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}
  Grepdont_为开头的单元属性文件:
  # 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)

我的更多文章

下载客户端阅读体验更佳

APP专享