DCデジタルロジック合成スクリプトの例と説明

Design Compilerのため#script
#言語:TCLの
#使用方法:
#1)は、現在のディレクトリの中に必ずLIB作る
あなたはファイルする.synopsys_dc.setup、持っている場合)#2
1 synopsys_dc_setup_file#セット、
#そうでない場合は、セットsynopsys_dc_setup_file 0
#3 )変更ステップ3:あなたが欲しいものを変数
#特に:トップモジュール名、クロック名、
#リセット名、すべてのファイル名、および期間
#4)タイピングdc_shell-T -f run_72.tcl | ティー-i run.log
# 
#========================================== ==============

セットsynopsys_dc_setup_file 0
#---------------------------------------------- -------
#ステップ1:
はパスとライブラリの設定:
#あなたはファイルする.synopsys_dc.setupを編集した場合は、この手順をスキップすることができます
#を------------ -----------------------------------------
なら{$ synopsys_dc_setup_file == 0} {
セットのsearch_path [リスト/ホーム/ chanshi / DC /ライブラリ/ SMIC /ホーム/ chanshi / DC / RFID /ソース/ホーム/ chanshi / DC /スクリプト]
セットtarget_library {typical.db}
の#set target_library {CSM35OS142_typ.db}。
typical.dbへ#あなたが使用したい場合は、一般的なライブラリ、変更
の#set link_library [リスト{*} ram_interp_typical_syn.db ram_458_typical_syn.db typical.db]
セットlink_library [リスト{*} $ target_library]
}
#set SYMBOL_LIBRARY {csm18ic.sdbのcsm18io.sdb}
の#set synthetic_library {dw_foundation.sldb}。
#デザインウェア
セットcommand_log_file「のcommand.log」

#------------------------------------------------- ----
#ステップ2:
コンパイルSwithesの#
#-------------------------------------- ---------------
の#set verilogout_no_tri trueに、
INOUTを使用した場合#は、トライネットが使用される
ネット(ワイヤ)にトライステート(トリ)論理ステートメントによって保証するために、#ネットリストいくつかのルーティングツールがトライ、トランソース言語、ポートの「INOUT」タイプ、DCを生成し、トライのためにTRANトライワイヤ原言語文、ネットリストASSIGN文を含むので、読みにくいトライステート・ロジック、に表示されません。また、割り当て文生成
セットtest_default_scan_styleがmultiplexed_flip_flop
またスタイルset_scan_configurationのによって提供されてもよい、#スキャンチェーンを提供タイプ
CASE_INSENSITIVE link_force_caseセット
#セットリンクコマンドは大文字と小文字が区別され、デフォルトはcheck_referenceで、モジュールのサイズは、生成された基準のフォーマットに応じているかどうかを決定することですそれはVHDL形式であれば、敏感書くあなたがのverilogに敏感な場合、小文字は区別されません
define_name_rules VLSI_NET -allowed "-ZA-Z0-9_" "0-9_"ネット-max_lengthを-type 256 -first_restricted
VLSI_CELLが-allowed define_name_rules "を-ZA-Z0-9_は" "0-9_"型電池を-first_restricted - MAX_LENGTH 256
VLSI_PORTは"-ZA-Z0-9_は" 256 -max_length "0-9_"型ポート-first_restricted -allowed define_name_rules
TAN_RULEは"-ZA-Z0-9_を" -allowed define_name_rulesは「0-9を-first_restricted _ \ [] "-max_length 256 -map {{{" *細胞*」、 "mycell"}、{ "* -return"、 "myreturn"}}}。
セットhdlin_check_no_latch "真"
#设置如果推断出锁存器、是否报警告、默认是偽、即不报。
セットhdlin_merge_nested_conditional_statements "真"
#名前が示すように、巣であれば融合するかどうか、デフォルト値は(またはcase文があれば)セレクタに推定されるネストされた各条件文であれば、ケースのために、あること、虚偽である、このアプローチは、Aを助長していますこれら決意条件は(遅い信号到着)後半信号が(それによって遅延を低減するのを助ける)セレクタからの出力に最も近い配置され、trueに設定されている場合、これらのセレクタは、その結果、すべて、大セレクタに融合され選択信号に距離の出力は同じです

#------------------------------------------------- ----
#ステップ3:
変数を定義
#-------------------------------------- ---------------
SETのactive_design "whole_modules";
トップのModule1名
ソースfiles.tcl;
すべてのSOURCE_FILES RTL(Verilogの)
SETのclock_name "CLK";
時計の名前
のSET reset_name」 RESET「;
リセットの名前
セットCLK_PERIOD 70.0
こうして小数点、または数字で計算された値が1以上0として表示される小数点と注目#セットクロックサイクル、
#所望のクロック期間= 1000 /度数
セットclk_uncertainty_setup [式exprのCLK_PERIOD / 200]; 
は、事前設定時間clk_uncertainty_setupをチェックするために立ち上がりクロックclk_uncertainty_setupのエッジ(クロックスキューおよびクロックジッタと)来、DCを進める可能性があるだけ時間の確立のための相対的不確かさを設定するために、クロックの不確実性を設定します満たしている 
クロックの不確実性を# 
セットclk_latency [exprclk_period / 200]; #設定されたクロックの不確実性、ジャストインタイムの確立のための相対的な不確実性を設定するためには、おそらくクロックclk_uncertainty_setup(クロックスキューおよびクロックジッタと)来る、DC進行の立ち上がりエッジを進めることです[exprclk_period / 10]クロック誤差のセットアップ時間が設定clk_latency位を満たすチェックclk_uncertainty_setup;
セットのクロック遅延を、クロックはクロックで定義された設計の実際の送信時点を原点からのクロック信号である
ネットワーク・クロックの#待ち時間
REG1 + combo1考え# -------- combo2_input + REG2 combo2_output ----------- combo3 + REG3 にモデルinput_delay +及びoutput_delayを説明するために、中間combo2_input + REG2 + combo2_output集積モジュール
セットinput_delay [ CLK_PERIODはexpr / 4]; 

遅延設定入力、外部入力が提供される(組合せ論理Combo1)(すなわち、データによって経験される遅延到来へのクロック入力の立ち上がりエッジから)、DCの計算は、どのくらいの時間合わせ内部に残っているどのくらいの時間
ロジックcombo2_inputは、例えば、クロック周期は10nsの、input_delayでは4nsであり、そこである(6-TSU)残されます 内部組み合わせ論理
combo2_input 
入力クロックのすべての#ディレイポートを除くINPUT 
output_delayセット[exprclk_period / 4]; #遅延設定入力、外部入力が設けられている(組み合わせ論理Combo1)どのくらいの時間(すなわち、データによって経験される遅延到来へのクロック入力の立ち上がりエッジから)、DCの算出は、左内部どのくらいの時間であります組合せ論理combo2_inputは、例えば、クロック周期は10nsであり、input_delayでは4nsであり、そこである(6-TSU)入力#すべての内部組合せ論理遅延を残しポートを除くクロックセット入力output_delay [exprclk_period / 4] combo2_input;
は、出力遅延を設定し、外部出力(組合せ論理combo3)が設けられ、DCが内部組合せ論理combo2_outputを左どのくらいの時間が計算されるどのくらいの時間(すなわち、外部の組み合わせ論理遅延)、例えば、クロック周期は10nsであり、は4nsとしてoutput_delay、次いで、(あります6-内部組み合わせ論理combo2_outputの残しTclk2Q)
出力はすべて、遅延出力のポート
セットが0 area_desired;
set_max_areaのための期待#の設置面積
セットwire_load_model「smic18_wl20」、
正確に負荷ラインに配置されたモデルを計算するために、#は、(DCには、3つのモードがサポートされています。
 
クロスボーダーのレベルを選択する方法を決定するために、set_wire_load_modelのための遅延タイミングパス計算のためのラインの負荷ラインモデル)
イントラ・ザ・モデル#のNET
SETは、「典型的な/ NAND2BX1 / AN」output_loadを。
集積化DCは、負荷があると思います場合#正確に回路の出力時間を計算するために、すべての出力ポートに、ロードポート(入力または出力負荷外部コンデンサ)を設ける必要があるが、負荷が指定され、(避ける統合)ここで、コンデンサを追加することを強制するときDCがデバイスを統合する場合、例えば、出力ポートはインバータを、インバータの出力負荷がこのロード入力に設定されている駆動されることが知られていると仮定し、この負荷を満たすように選択されます大きなDCは、すべてユニットが駆動される満たすためにデバイスの機能を駆動するように、当然のことながら、大きな配置することができることができます。この効果は、コマンド情報バックアノテーションButuhoutiコンデンサモジュールは、図フロント布の統合プロセスに提供され、容量性負荷、デバイスの出力負荷として選択された負荷を接続する出力ポートで撮影されるピン、到達するの直流出力ポートを考慮した全てこのピン駆動することができる
のoutput_loadモデルに#を
SETのsynthesis_reports {/ホーム/ chanshi / DC /レポート};
指定された包括的なレポート出力ディレクトリ
レポートディレクトリの#NAMEを
SHのは、mkdir synthesisreports; settimingreport "synthesisreports; settimingreport" synthesis_reports / activedesign_timing.rpt "settimingmax20report" activedesign_timing.rpt "settimingmax20report" synthesis_reports / activedesign_timingmax20.rpt "setareareport" activedesign_timingmax20.rpt "setareareport" synthesis_reports / activedesign_area.rpt "setreferencesreport" activedesign_area.rpt」 setreferencesreport "synthesis_reports / activedesign_references.rpt" setcellreport "activedesign_references.rpt" setcellreport "synthesis_reports / activedesign_cell.rpt" setpowerreport」 "activedesign_constraint.rpt" setconstraintreport "synthesis_reports / activedesign_constraint.rpt" setpowerreport "activedesign_cell.rpt" setconstraintreportsynthesis_reports / activedesign_power.rpt "setchecksyntaxreport" activedesign_power.rpt "setchecksyntaxreport" synthesis_reports / active_design \ _check_design.rpt」 
{synthesis_netlistのSET /ホーム/ chanshi / DC /結果}; 
指定したネットリストとSDF / SDC / DBディレクトリファイル出力、現在の世代は、DB、DCのファイルをサポートされていない 
ディレクトリOUTFILE #NAMEに 
SH mkdiractive_design \ _check_design.rpt「SETのsynthesis_netlist {/ホーム/ chanshi / DC /結果} ;#は、 ネットリストとSDF / SDC /デシベル出力ディレクトリのファイルを指定し、このファイルデシベルdcは#NAMEにOUTFILEディレクトリSHのmkdirsynthesis_netlistの生成をサポートしていません;
#は、ディレクトリ作成
セットout_netlist「synthesisnetlist / synthesisnetlist / active_designを 。 V ";
out_db SET"、 "synthesisnetlist / synthesisnetlist / active_design.db
synthesisnetlist / synthesisnetlist / active_design.sdf out_sdf SET" ";
out_sdc SET" synthesisnetlist / synthesisnetlist / active_design.sdc「。

#------------------------------------------------- ----
#ステップ4:
#DCメモリ読み出しデザインに
#----------------------------------- ------------------
foreachのactive_filesはread_verilog $ active_files} {ファイル 
、#のforeach文、ファイル{read_verilog $ active_files} #foreach文をファイルリストをファイルの一覧read_verilog機能active_filesを行い、その後、ターンactive_files内の各ファイルに割り当てられ、read_verilog同等の機能は、ファイルごとに順番に行わ
#exit
current_design $ active_design
#現在のデザイン設定
リンク
ユニットのリンクを#現在の設計に設計基準電流をインスタンス化します(すなわち、現在の設計にlink_library指定されたライブラリを読み取る)
uniquify
(モジュールへの複数の参照場合)単一ユニットの名前の各インスタンスを開始#

#check_design> check_syntax_report 
の#if {[check_design] == 0} { 
 #エコー"デザインのエラーをチェックしてください!"。 
 # 出口; 
 #} 
#----------------------------------------------- ------ 
#ステップ5: 
拘束 
#------------------------------------- ---------------- 
#-----ネット負荷------ 
set_wire_load_model -namecheck_syntax_reportの#if {[check_design] == 0} {#「がチェックデザインエラーをエコー! "; # 出口; #}#----------------------------------------------- ------#ステップ5:#拘束#------------------------------------- ----------------#-----ネット負荷------ set_wire_load_model -namewire_load_model
#设置线载模型
set_wire_load_modeトップ
#セット線負荷モード(トップ:最大トップレベルの回路のサイズ、最も悲観的に運ぶように最大接続遅延線モデルので、すべてのレベルで、すべての接続では、同じラインモデルを担持する上部モジュールを継承します。囲まは:接続が配置されている選択トップ層よりも小さいサブキャリアラインモデルモジュール、サブモジュールの回路規模、接続遅延が小さく、セグメント化:使用していない、へのクロスレベル配線境界)
#----- ------クロック
create_clock clockname周期-name [exprclockname期間[exprclk_period] [get_ports clock_name] 
セットクロック 
set_clock_uncertainty -setupclock_name]#セットクロック-setupclk_uncertainty_setup set_clock_uncertainty [get_clocks clock_name] 
セットクロック不確実性 
set_clock_latencyclock_name]#セットクロック不確実性set_clock_latencyclk_latency [get_clocks clock_name] 
セットクロック遅延 
set_dont_touch_network [get_clocksclock_name]#セットクロック遅延set_dont_touch_network [get_clocksclock_name]
クロック・ネットワークの最適化プロセスで#は変更されないし、交換の理由:により大きな負荷クロックポートには、DCは、その駆動能力を高めるためにバッファを使用します。しかし、一般的にこの仕事を達成するために使用するレイアウトツールを設計者、それはクロック・ネットワークを変更しないDCを示すために必要である、あなたは「ネットワークに手を触れないでください」のセット上の画像を選択することができます。
set_dont_touch_network [get_ports reset_name】 
リセット信号の#が最適化プロセスで変更及び置換されていない 
最適化中set_ideal_network [get_portsreset_name】リセット信号の#が変更さset_ideal_networkを置換されていない[get_portsreset_name]
リセット#をリセットするので、ネットの上に配置されましたファンアウトがあまりにも、ワイヤーウェブ前者の一般的なレイアウト上に配置され、具体的な理由を検討するドライブ------ -----#
#set_driving_cell -lib_cell xr02d2 -pin -library CSM35OS142_typ A1 [all_inputs]
set_driving_cell -lib_cell Y NAND2BX1 [all_inputs] -pin
すべての入力ポートに対して位に配置されたドライブモデル、ドライブ強度(クロック及びリセットを除去するために)、それによって変換時間を指定
set_drive 0 [get_ports clock_name] 
へのクロックの駆動能力#は無限大に設定されている、すなわち、その抵抗0 
set_drive 0 [get_portsclock_name]#クロック駆動能力が無限大に設定され、そのインピーダンス0 set_drive 0 [get_portsreset_name]を設定しようとしています
上記#
#----- INPUT /出力遅延------
SET allin_except_CLK [remove_from_collection [all_inputs] [get_ports CLK]]
set_input_delay [exprのinputdelay] -clockinputdelay] -clockclock_name allin_except_CLK 
#設定入力遅延 
set_output_delayを[exprallin_except_CLK#セット入力遅延set_output_delayを[exproutput_delay] -clock clock_name [all_outputs] 
出力遅延セット 
#------ -----出力負荷 
set_load [load_ofclock_name [all_outputs] ##セットの出力遅延-----負荷は------出力set_load [load_ofoutput_load] [all_outputs]
すべての出力ポート#セット負荷
#------ -----エリア
#set_max_areaがarea_desired 
#----- INSERT ASSIGNは、バッファを交換します- ---- 
set_fix_multiple_port_nets -all -buffer_constants 
#ワイヤメッシュ場合(「特に参照ネットリストassign文に表示され、これは間違いであり、マルチポート接続を排除するために、このようなエラーを回避するために、バッファを挿入することによって解消することができる複数のポートに接続されていますASICデザインの実用的なチュートリアル「P146) 
#---------------------------------------- ------------- 
#ステップ6: 
コンパイル 
#はまたcompile_ultra使用することができます 
#を------------------------- ---------------------------- 
ミディアム-boundary_optimization -map_effortコンパイル 
#compile -map_effortミディアム 
#-boundary_optimization -area_effortハイ 
#compile -incremental_mapping 
# -------------------------------------------------- --- 
#ステップ7: 
レポート(タイミング、面積...) 
#-------------------------------- --------------------- 
remove_unconnected_ports [get_cells -hier {*}] 
change_names -hierarchy -rules TAN_RULE 
-delay最大-max_pathsをreport_timing 1> area_desired#-----挿入バッファ割り当て置き換える------ set_fix_multiple_port_nets -all -buffer_constants#回線網に接続された複数のポートは、ネットワークが割り当てる場合ステートメントテーブルこれは、間違いであるマルチポート接続を排除するために、このようなエラーを回避するために、バッファを挿入することにより除去することができる(特に「特定集積回路設計の実用的なチュートリアル」P146を参照)#---------- -------------------------------------------#ステップ6:#コンパイル#またcompile_ultra#を使用することができます--------------------------------------------- -------- -map_effort媒体が-boundary_optimization #compile -map_effortメディア#-boundary_optimization -area_effort高#compile -incremental_mapping#コンパイル-------------------- ---------------------------------#ステップ7:#レポート(タイミング、面積...)# - -------------------------------------------------- - remove_unconnected_ports [get_cells -hier {*}] change_names -hierarchy -rules TAN_RULE report_timing -delay最大-max_paths 1>timing_report
80> timingmax20reportreportarea> timingmax20reportreportarea> area_report -max_path -delay最大-pathの終わりをreport_timing
report_reference> referencesreportreportcell [getcells-のhier *]> referencesreportreportcell [getcells-のhier *]> cell_report
report_constraint -all_violators -verbose> constraintreportreportpower-analysisefforthigh-冗長> constraintreportreportpower-analysisefforthigh -verbose> power_report
check_design> check_syntax_report 
#------------------------------------------ ----------- 
#ステップ8: 
書き込みファイル(ネットリストアウト) 
#--------------------------- -------------------------- 
change_names -ruleのverilog -hier 
書き込み-format verilogの-hierarchy -outputcheck_syntax_report#----------------------------------------- ------------#ステップ8:#書き込みファイル(ネットリストアウト)#-------------------------- --------------------------- change_names -ruleのverilog -hier書き込み-format verilogの-hierarchy -outputout_netlist
書き込み-formatデシベル-hierarchy -output outdbwritesdfoutdbwritesdfout_sdf
write_sdc $ out_sdc
終了
#----------------------終了-------------------

 

------------

再現

リリース1012元の記事 ウォンの賞賛520 ビュー1270万+

おすすめ

転載: blog.csdn.net/Augusdi/article/details/104931177
おすすめ