====== 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つの方法がある.
- 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
- read_fileコマンドを利用する.
dc_shell-xg-t> read_file -format verilog RISC_CORE.v
- 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