Quartus® II Tcl 例: 自動スクリプト・エグゼキューション

author-image

投稿者:

Quartus® II ソフトウェアのバージョン 4.0 から、コンパイル中にさまざまなポイントで自動実行するようにスクリプトを構成できます。このケイパビリティーを利用して、カスタムレポートを実行し、特定の割り当てを行い、その他多数のタスクを実行するスクリプトを自動実行できます。

スクリプトの自動実行を制御するグローバル割り当てが 3 つあります。これらと、それぞれがスクリプト実行を起こすタイミングが一覧にあります。

•	PRE_FLOW_SCRIPT_FILE - before a flow starts
•	POST_MODULE_SCRIPT_FILE - after a module finishes
•	POST_FLOW_SCRIPT_FILE - after a flow finishes

POST_FLOW_SCRIPT_FILE および POST_MODULE_SCRIPT_FILE アサインメントはバージョン4.0以降でサポートされ、 PRE_FLOW_SCRIPT_FILE アサインメントはバージョン4.1以降でサポートされています。

1 つのモジュールは、Quartus® II 実行ファイルで、フロー中の 1 ステップを実行します。例えば、2 つのモジュールは、分析および合成 (quartus_map) とタイミング分析 (quartus_tan) です。

フローとは、Quartus® II ソフトウェアが定義済みオプションで実行する一連のモジュールです。例えば、デザインのコンパイルは、一般に次のステップ(指示されたモジュールによって実行)で構成されるフローです。

  1. 解析および合成(quartus_map)
  2. フィッター(quartus_fit)
  3. アセンブラー(quartus_asm)
  4. タイミング・アナライザー(quartus_tan)

その他のフローについては、execute_flow Tcl コマンドのヘルプで説明しています。また、Quartus® II GUI の [スタート] (プロセシング・メニュー) にあるコマンドの大部分は、フローに対応しています。

割り当ての作成

スクリプトを自動実行するよう割り当てを作成するには、以下のフォームで割り当てを作成します。

set_global_assignment -name <assignment name> <executable>:<script name>

アサインメント名は次のうちのいずれかです。

•	PRE_FLOW_SCRIPT_FILE
•	POST_MODULE_SCRIPT_FILE
•	POST_FLOW_SCRIPT_FILE

executable は、Tcl インタープリターを含む Quartus® II コマンドライン実行ファイルの名前です。

•	quartus_cdb
•	quartus_sh
•	quartus_sim
•	quartus_stp
•	quartus_tan

このスクリプト名は使用しているTclスクリプトの名前です。

スクリプトの実行

Quartus® II ソフトウェアは、以下に示すスクリプトを実行します。

<executable> -t <script name> <flow or module name> <project name> <revision name>

quartus (args) 変数に引き渡される第 1 引数は、使用する割り当てに応じて、実行中のフローまたはモジュールの名前になります。第 2 引数はプロジェクト名、第 3 引数はリビジョン名です。

POST_MODULE_SCRIPT_FILE アサインメントを使用する場合、指定したスクリプトは、フロー内にあるすべての実行ファイルの後に自動実行されます。モジュール名 (スクリプトに引き渡された第 1 引数) との文字列比較を使用して、スクリプト処理を特定のモジュールに分離することができます。

実行例

この例では、完全なフローで自動スクリプト・エグゼキューションがどのように動作するかを示しています。仮に top と呼ぶプロジェクトがあり、現在のリビジョンを rev_1 と呼び、プロジェクト用の Quartus® II 設定ファイル (QSF) に次の割り当てがあるとします。

set_global_assignment -name PRE_FLOW_SCRIPT_FILE quartus_sh:first.tcl
set_global_assignment -name POST_MODULE_SCRIPT_FILE quartus_sh:next.tcl
set_global_assignment -name POST_FLOW_SCRIPT_FILE quartus_sh:last.tcl

プロジェクトをコンパイルするとき、PRE_FLOW_SCRIPT_FILE 割り当てにより、次のコマンドがコンパイル開始前に実行されます。

quartus_sh -t first.tcl compile top rev_1

次に、Quartus® II ソフトウェアはコンパイルを開始し、quartus_map 実行ファイルが解析および合成を実行します。解析および合成が終了すると、POST_MODULE_SCRIPT_FILE 割り当てにより、次のコマンドが実行されます。

quartus_sh -t next.tcl quartus_map top rev_1

Quartus® II ソフトウェアはコンパイルを継続し、quartus_fit 実行ファイルによりフィッターが実行されます。フィッターが完了すると、POST_MODULE_SCRIPT_FILE 割り当てにより、次のコマンドが実行されます。

quartus_sh -t next.tcl quartus_fit top rev_1

対応するコマンドは、コンパイルにおけるその他ステージの後に実行されます。最後に、コンピレーション完了後、POST_FLOW_SCRIPT_FILE 割り当てにより、次のコマンドが実行されます。

quartus_sh -t last.tcl compile top rev_1

処理の制御

POST_MODULE_SCRIPT_FILE 割り当てにより、すべてのモジュールに続いてスクリプトが実行されます。すべてのモジュールに続いて実行される同じスクリプトなので、特定のモジュールに対するプロセシングを制限する条件付きステートメントを、スクリプト内に含める必要があるかもしれません。

例えば、タイミング解析の実行後にのみ実行したいスクリプトがある場合、次の例にあるような条件テストを含める必要があります。これは、第 1 引数としてスクリプトに引き渡されたフロー名またはモジュール名をチェックし、モジュールが quartus_tan である場合にコードを実行します。

set module [lindex $quartus(args) 0]

if [string match "quartus_tan" $module] {

    # Include commands here that are run
    # after timing analysis
    post_message "Running after timing analysis"
}

メッセージの表示

Quartus® II ソフトウェアは、スクリプトを自動実行するので、メッセージをディスプレイするのに、post_message コマンドを puts コマンドの代わりに使用する必要があります。この要件は、このページ上部に一覧表示されている、3 つの割り当てにより実行するスクリプトのみに適用されます。