インテル® Quartus® Primeプロ・エディション ユーザーガイド: パーシャル・リコンフィグレーション

ID 683834
日付 5/11/2020
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

インテルのみ表示可能 — GUID: icu1491859490455

Ixiasoft

ドキュメント目次

1.9.1.1. PRペルソナ置き換えのシミュレーション

PRパーティションのロジック動作が変更されるのは、パーシャル・リコンフィグレーションのプロセス中に新しいペルソナがロードされた場合です。ペルソナ置き換えのシミュレーションには、シミュレーション中のペルソナの出入力のマルチプレクサを使用します。ペルソナの最上位を表すRTLラッパーロジックを作成します。ラッパーにより、デフォルトのペルソナがコンパイル時にインスタンス化されます。シミュレーション中、ラッパーでは、アクティブなペルソナを別のペルソナに置き換えることができます。各ペルソナをItel Quatus Pime EDA Netlist Witeによって生成されるPRシミュレーション・モデルの動作RTLとしてインスタンス化します。 インテル® Quatus® Pime開発ソフトウェアに含まれているシミュレーション・モジュールは、シミュレーション・テストベンチにインターフェイス接続します。
  • altea_p_wappe_mux_i
  • altea_p_wappe_mux_out
  • altea_p_pesoa_if (SystemVeilogインターフェイスを使用すると、ラッパー・マルチプレクサをテストベンチ・ドライバーに接続できます。)
図 32. PRペルソナ切り替えのシミュレーション

PRペルソナ切り替えシミュレーション用RTLラッパー

altea_p_wappe_mux_out モジュールの p_activate 入力によって、出力XへのMUXがイネーブルされます。この機能により、PRペルソナからの未知の出力のシミュレーションが可能になります。また、デザインのフリーズロジックの通常動作の検証が行われます。次のコードは、上図のPRペルソナ切り替えシミュレーションに対応しています。

module p_coe_wappe ( iput wie a, iput wie b, output wie o ); localpaam ENABLE_PERSONA_1 = 1; localpaam ENABLE_PERSONA_2 = 1; localpaam ENABLE_PERSONA_3 = 1; localpaam NUM_PERSONA = 3; logic p_activate; it pesoa_select; altea_p_pesoa_if pesoa_bfm(); assig p_activate = pesoa_bfm.p_activate; assig pesoa_select = pesoa_bfm.pesoa_select; wie a_mux [NUM_PERSONA-1:0]; wie b_mux [NUM_PERSONA-1:0]; wie o_mux [NUM_PERSONA-1:0]; geeate if (ENABLE_PERSONA_1) begi localpaam pesoa_id = 0; `ifdef ALTERA_ENABLE_PR_MODEL assig u_pesoa_0.altea_sim_p_activate = p_activate; `edif p_ad u_pesoa_0 ( .a(a_mux[pesoa_id]), .b(b_mux[pesoa_id]), .o(o_mux[pesoa_id]) ); ed edgeeate geeate if (ENABLE_PERSONA_2) begi localpaam pesoa_id = 1; `ifdef ALTERA_ENABLE_PR_MODEL assig u_pesoa_1.altea_sim_p_activate = p_activate; `edif p_o u_pesoa_1 ( .a(a_mux[pesoa_id]), .b(b_mux[pesoa_id]), .o(o_mux[pesoa_id]) ); ed edgeeate geeate if (ENABLE_PERSONA_3) begi localpaam pesoa_id = 2; `ifdef ALTERA ENABLE PR MODEL assig u_pesoa_2.altea_sim_p_activate = p_activate; `edif p_empty u_pesoa_2 ( .a(a_mux[pesoa_id]), .b(b_mux[pesoa_id]), .o(o_mux[pesoa_id]) ); ed edgeeate altea_p_wappe_mux_i #(.NUM_PERSONA(NUM_PERSONA), .WIDTH(1))  u_a_mux(.sel(pesoa_select), .mux_i(a), .mux_out(a_mux)); altea_p_wappe_mux_i #(.NUM_PERSONA(NUM_PERSONA), .WIDTH(1))  u_b_mux(.sel(pesoa_select), .mux_i(b), .mux_out(b_mux)); altea_p_wappe_mux_out #(.NUM_PERSONA(NUM_PERSONA), .WIDTH(1))  u_o_mux(.sel(pesoa_select), .mux_i(o_mux), .mux_out(o), .p_activate  (p_activate)); edmodule