dc_shell備忘録

用語説明

  • ddc : SYNOPSYS DC database format (???)
  • sdc : SYNOPSYS Design Constraints format
  • sdf : Standard Delay Format

バッチファイルを作りdc_shellにてバッチ処理を行う. GUIは,回路図の確認や試しの合成用と考える. 合成は,間違いなく実行するため,標準スクリプトを各種用意する.

標準スクリプト例

exec date
set design_name  "hogehoge"
set file_names   { "hogehoge.v", "fugafuga.v" }
set clock_name   "clock_name"
set clock_period 100

set LIB_DIR "/home/vdec/lib/rohm0.18/synopsys"
set search_path [concat  $LIB_DIR $search_path]
define_design_lib WORK -path "./work"

set LIB_MAX_FILE {ri18it182_max.db}
set LIB_TYP_FILE {ri18it182_typ.db}
set LIB_MIN_FILE {ri18it182_min.db}
set LIB_FILE      $LIB_MAX_FILE

set link_library   [concat * $LIB_FILE dw_foundation.sldb]
set target_library [concat $LIB_MAX_FILE $LIB_TYP_FILE $LIB_MIN_FILE]
set symbol_library [concat $LIB_MAX_FILE $LIB_TYP_FILE $LIB_MIN_FILE]

foreach file_name $file_names {
	read_verilog $file_name
	analyze -format verilog $file_name -work WORK
}

elaborate $design_name -work WORK

if {[check_error -v] == 1} {
                exit 1
}

current_design $design_name
link
check_design

set hdlin_check_no_latch                   true
set hdlin_use_cin                          true
set hdlin_enable_vpp                       true
set edifout_netlist_only                   true
set hlo_transform_constant_multiplication  true
set compile_new_boolean_structure          true

set_min_library ri18it182_max.db -min_version ri18it182_min.db
set_operating_conditions -max WCCOM -max_library ri18it182_max.db:ri18it182  -min BCCOM -min_library ri18it182_min.db:ri18it182
set_wire_load_mode segmented

create_clock -name clock -period $clock_period -waveform [array get clock_wave] [find port $clock_name]
derive_clocks

set_input_delay  5 -clock clock [remove_from_collection [all_inputs] $clock_name]
set_output_delay 5 -clock clock [all_outputs]

set_driving_cell -lib_cell it18_inv_0 -library ri18it182_max.db:ri18it182 [remove_from_collection [all_inputs] $clock_name]
set_load [expr 5 * [load_of ri18it182/it18_and2_0/A1]] [all_outputs]

set_max_fanout 10 [current_design]
set_max_area    0
set_structure -boolean true -boolean_effort high

compile
ungroup -all -flatten
compile -incremental -map_effort high

if {[check_error -v] == 1} {
                exit 1
}

redirect $rpt_name {
                report_area
                report_timing -delay max
                report_timing -delay min
                report_timing -max_paths 3
}

write -format verilog -hier -output $net_name

exit
read_verilog もしくは read_file -f verilog

verilogHDLのファイルを読み込む.

current_design

複数のデザインの中から,処理対象のデザイン名を選ぶ.

analyze, elaborate

parameterを利用している場合は,こちらを利用してデザインを読み込む.

create_clock -p 周期 -w { 立ち上がり 立ち下がり } [ -name クロック名 ] クロックポート or セルの出力端子名

クロックを生成する.

compile

論理合成を行う.

scripts/read_src.tcl

define_design_lib

デザインライブラリをUNIXディレクトリにマップさせる(直訳)

read_ddc

DDCファイルを読み込む.

read_verilog

Verilog-HDLファイルを読み込む.

do_elaborate変数について

User Guideによると,Verilog-HDLのファイルを読み込むには3つの方法がある.

  1. analyze & elaborateコマンドを利用する.

Follow these steps:

1. Analyze the top-level design and all subdesigns in bottom-up order (to satisfy any dependencies).
2. Elaborate the top-level design and any subdesigns that require parameters to be assigned or overwritten.
For example, enter
 dc_shell-xg-t> analyze -format vhdl -lib -work RISCTYPES.vhd
 dc_shell-xg-t> analyze -format vhdl -lib -work {ALU.vhd STACK_TOP.vhd STACK_MEM.vhd...}
 dc_shell-xg-t> elaborate RISC_CORE -arch STRUCT -lib WORK -update
  1. read_fileコマンドを利用する.
    dc_shell-xg-t> read_file -format verilog RISC_CORE.v
  1. read_verilog もしくは read_vhdlコマンドを利用する.
    dc_shell-xg-t> read_file -format verilog RISC_CORE.v

ただ,SMAスクリプトではdo_elaborateはfalseなので,どうもread_verilogコマンドが利用されている.

link

デザインを完成させるには,全てのライブラリコンポーネントを接続する必要がある. これをリンクと呼ぶ.この処理はデザインのリンクもしくは参照の解決とよばれる.

    dc_shell-xg-t> link

xxx_con.tcl

set_false_path

特定のパスからタイミング制約を除去する(直訳)

simple_compile.tcl

簡単なコンパイルスクリプトが入っている. do_compile_twice変数がtrueになっていないと動かない.

set_dont_touch

The set_dont_touch command preserves a subdesign during optimization. It places the dont_touch attribute on cells, nets, references, and designs in the current design to prevent these objects from being modified or replaced during optimization. うーむ,つまりは最適化などによりデザインに変更がなされることを防ぐためのコマンドらしい.たとえば,あるsubdesignが複数個インスタンス化されるときなどに利用されるらしいが…

set_structure

つまりは構造化したままコンパイルするかどうかを決定する. 参照しているtclでは,do_structureをtrueとして構造化したままコンパイルしている.

compile_ultra

現在のデザインよりもより良い品質を得るために,より効果的なコンパイルフローを適応 するためのコマンド.

constraint.tcl

制約を行うためのtcl?

create_clock

クロックを作成し周期を決定する.

 > create_clock -name CLK_OBJ -period $clk_period
set_input_delay
set_output_delay

入力,出力の遅延を決定する.

 > set_input_delay  $input_delay  -clock CLK_OBJ [all_inputs ] <= これなに?
 > set_output_delay $output_delay -clock CLK_OBJ [all_outputs]
set_driving_cell

Sets attributes on input or inout ports, specifying that a library cell or library pin drives the ports. This command associates a library pin with an input port so that delay calculators can accurately model the drive capability of an external driver. ん?よく意味が分からん.

set_clock_latency
set_propagated_clock
set_clock_uncertainty

クロック遅延を定義するらしい.

set_ideal_network

command propagates in both the forward and backward directions. CTSが終わった後に,クロックネットワークの形を維持する.この際,全てのクロックの 階層にこの属性を設定するのがset_ideal_networkである.

set_clock_transition

良く分からないけど,レイアウト前に設定してレイアウト後にremov_clock_transitionで取り除くらしい.なんのこっちゃ.

set_isolate_ports

do_isolate_portsをtrueにすると動き出す.だけどほとんどの場合falseなんですけど… set_isolate_portsコマンドはしていされた入出力ポートにisolationロジックを挿入する. 入力と出力ポートを浮かせることによってタイミングモデルの精度を向上させることができる.

次のような場合にこの入力ピンのコマンドを利用する.

  • 1つのセル内の複数の入力ピンをドライブしなければならないとき(???)
  • 異なるセルに属する複数のピンをドライブしなければならないとき(???)

次のような場合にこの出力ピンのコマンドを利用する.

  • 出力ポートをドライブするセル画デザイン内部のロジックをドライブしていないことを保証させるとき
  • 入力ポートとして特定のドライバセルを指定するとき
set_load

入力出力ポートの負荷を指定する 通常は,デザインコンパイラは入力と出力ポートの負荷容量を0であると仮定する. set_loadコマンドはデザインの入出力ポートの負荷を設定するものである. この情報はDesign Compilerが出力パッドの駆動能力に応じて適切なセルを選択するのに使われる.

ちなみにSMAのtclではset_vars.tclにおいてload_cell_portsによって容量が定義されているようだが, これはライブラリによって指定されたものを利用しているようだ.

set_max_fanout

最大のファンアウト数をしていする.ちなみに,SMAのtclでは10となっている.

set_max_area 0

これは無制限という意味だろう.

その後,個々の制約を追加する項が存在するが,基本的にSMAでは何もしていない.

compile.tcl

コンパイルする.

最初に,common.tclをロードする.ここでは,各種変数,オプションのロードをするようである.

check_design

整合性を保持するために現在のデザインの内部表現をチェックし,該当する問題や警告を出力する.

 > check_design
set_dont_touch

上記

uniquify

同一デザイン内の複数のセル参照を解決する.uniquifyはそれぞれ個々のインスタンスに対しユニークなコピーを作成する.

 > uniquify
set_clock_gating_style

clock-gatingスタイルを設定する.なんか良く意味分からんけど.

 > set_clock_gating_style
insert_clock_gating

適切に準備されたGTECHネットリストに対してクロックゲーティングを適用する.

 > insert_clock_gating
set_flatten

コンパイル中に特定のデザインに対しフラット化(階層構造を取り除く?)を行う.もしくは取り除く処理を許可/禁止するような属性を取り付ける.

 > set_flatten true -effort high -phase true

これはフラット化してもよいという意味であろう.

set_structure

コンパイル中に階層構造を作るか,どのようにして作るかを指定する.

remove_unconnected_ports

接続されていないポートを取り除く.

ungroup

階層のレベルを取り除く.

set_fix_multiple_ports_nets

Sets the fix_multiple_port_nets attribute to a specified value on the current design or a list of designs.(???)

compile -incremental_mapping

インクリメンタルコンパイルは複数のアプローチを適応することによりデザインを向上させるコンパイル方法である.インクリメンタルコンパイルはゲートレベル最適化においてのみ作用し,論理レベル最適化では作用しない.結果のデザインの性能はオリジナルのデザインと同じもしくは向上している.

compile -top

おそらくトップモジュールでのみ作用させるべきオプション

compile_ultra

上記.

remove_unconnected_ports

上記.

check_design

上記.

clean_buffer_tree

マップされたデザインの指定されたバッファツリーの特定ドライバを取り除く. SMAのtclではdo_clean_buffer_treeがtrueでないと作用しない.ただこのオプションは全部false

fileout.tcl

レポートしまくる.

write -format ddc

ddc形式で書く.

write -format verilog

verilog形式で書く.

write_sdc

SDCファイルを書く.

write_sdf

SDFファイルを書く.

write_parasitics

遅延計算ツールのために,SPEFファイルを書く.

#### default_vars.tcl ####
library_type                ライブラリタイプ

######## DESIGN SETTINGS #######################################
design_name    デザイン名
rtl_files      RTLファイルリスト
ddc_files      DDCファイルリスト
clk_name       クロック名
clk_b_name     位相反転クロック名
rst_name       リセット信号名


######## COMPILE OPTION ########################################
is_prelayout_synthesis       レイアウト前の論理合成か.そうであればset_clock_transitionを実行
is_top_module                トップモジュールか否か
is_combinational_circuit     組み合わせ回路かどうか.そうであれば遅延の制約を指定.そうでなければクロックにより制約を指定
do_elaborate                 elaborateするか否か.普通はしない
do_use_clk_b                 位相反転のクロックを利用するときにtrueにする.
	これにより,set_vars.tclにて意相反転用のクロックの設定がなされる.
	constraint.tclにて反転位相のクロックの設定が行われる.
do_clk_gating                clock gatingを指定する.
	その場合,compile.tclにてクロックゲーティングの方法を指定し,挿入する
do_low_power_clk_gating      
	その場合,power_driven_clock_gatingをtrueにする.
do_compile_twice             
	その場合,compile_simple.tclにて1度目のコンパイル,compile.tclにて2度目のコンパイルを行う.
do_flatten
	set_flaten true -effort -high -phase ... をtrueに設定する.
do_ungroup_first             
do_ungroup                   
do_uniquify                  
do_structure                 
do_remove_unconnected_ports  
do_clean_buffer_tree         
do_set_fix_hold              
do_isolate_ports             
compile_mode                 
# set compile_mode           
dont_touch_design            
dont_touch_cells             
ungroup_targets              
do_upcase                    
do_output_hier               


######## CONSTRAINTS ###########################################
set clk_period               
set clk_rise_edge            
set clk_b_period             
set clk_b_rise_edge          
set max_clk_latency          
set min_clk_latency          
set clk_uncertainty          
set input_delay              
set output_delay             
set max_fanout               

#### SMA.tcl ####

set library_type                
set design_name                 
set rtl_files                   
set ddc_files                   
set dont_touch_cells            
set is_combinational_circuit    
set do_compile_twice            
set do_flatten                  
set do_ungroup_first            
set do_ungroup                  
set do_uniquify                 
set do_structure                
set do_isolate_ports            
set compile_mode                
set do_remove_unconnected_ports 
set dont_touch_design           
set clk_period                  
set input_delay                 
set output_delay                
 
tapeout_enter/design_compiler_memo.txt · 最終更新: 2013/07/05 08:38 (外部編集)
 
特に明示されていない限り、本Wikiの内容は次のライセンスに従います:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki