====== 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