プラットフォームのアドオン

カーネル割り込みサポートの追加

AXI 割り込みコントローラーをベースのハードウェア デザインに追加して、割り込みコントローラーの出力をプロセッサ ブロック割り込みの入力に接続すると、カーネル割り込みサポートを提供できます。AXI 割り込みコントローラーの割り込み入力は、グランドに接続すると、ディアサートされたステートに初期化されます。v++ リンカーがアクセラレーション カーネルをベースのハードウェア デザインに追加したら、dynamic_postlink.tcl スクリプトが使用され、カーネルの割り込み出力が AXI 割り込みコントローラーに接続されます。

dynamic_postlink.tcl を取得して使用する手順は、次のとおりです。カーネル割り込みを追加するには、XSA を書き出す前に次の IP を IP インテグレーター ブロック図に追加します。dynamic_postlink.tcl スクリプトを使用するには、ブロック図内の階層、IP 名、ネット名がスクリプトと同じになっている必要があります。

  1. Zynq UltraScale+ MPSoC IP ブロックを再カスタマイズし、M_AXI_HPM0_LPD インターフェイスをイネーブルにしてベースのハードウェア デザインで使用できるようにします。
    1. ブロック図で Zynq UltraScale+ MPSoC ブロックをダブルクリックします。
    2. PS-PL Configuration > PS-PL interfaces > Master interface をクリックします。
    3. AXI HPM0 LPD チェック ボックスをオンにします。

    M_AXI_HPM0_LPD および maxihpm0_lpd_aclk ポートが追加されます。

  2. maxihpm0_lpd_aclk/clk_wiz_0/clk_out3 に接続します。
  3. プロセッサに接続された既存の xlconcat ブロックを削除して、IP インスタンス名が dynamic_postlink.tcl スクリプトと同じになるようにします。
  4. Cocat IP を追加します。
    1. IP ブロック図を右クリックして Add IP をクリックします。
    2. concat を検索します。
    3. Concat を選択して Enter キーを押します。
  5. Cocat IP を再カスタマイズします。
    1. Concat ブロックをダブルクリックして [Re-Customize IP] ダイアログ ボックスを開きます。
    2. ポート数を 32 に設定します。
    3. OK をクリックします。
  6. Constant IP ブロックを追加します。
    1. IP ブロック図を右クリックして Add IP をクリックします。
    2. constant を検索します。
    3. Constant を選択して Enter キーを押します。
  7. Costant IP を再カスタマイズします。
    1. Constant ブロックをダブルクリックして [Re-Customize IP] ダイアログ ボックスを開きます。
    2. [Const Width] を 1 に設定します。
    3. [Const Val] を 0 に設定します。
    4. OK をクリックします。
  8. xlconstant_0 dout[0:0] 出力を xlconcat_0 の 32 個の入力すべてに接続します。
    1. Ctrl を押しながら各 xlconcat_0 入力ピンをクリックしていって選択します。
    2. 選択した xlconcat_0 入力ピンの 1 つを右クリックして、Make Connection をクリックします。
    3. [Make Connection] ダイアログ ボックスでスクロールして xlconstant_0 dout ピンを選択します。
    4. OK をクリックします。
  9. xlconstant_0 および xlconcat_0 IP インスタンス名を dynamic_postlink.tcl スクリプトと同じになるように変更します。
    1. xconstant_0 IP ブロックを選択します。
    2. [Block Properties] ダイアログ ボックスの [General] で名前を xlconstant_gnd に変更します。
    3. xlconcat_0 IP ブロックを選択します。
    4. [Block Properties] ダイアログ ボックスの [General] で名前を xlconcat_interrupt_0 に変更します。
  10. xlconstant_gnd および xlconcat_interrupt_0 ブロックから階層のサブブロックを作成します。xlconstant_gnd および xlconcat_interrupt_0 ブロックを接続するネットは、dynamic_postlink.tcl スクリプトと同じになるように xlconstant_gnd_dout という名前にします。
    1. xlconstant_gnd および xcloncat_interrupt_0 ブロックを選択します。
    2. 右クリックして Create Hierarchy をクリックします。
    3. [Create Hierarchy] ダイアログ ボックスでセル名を interrupt_concat に設定します。
    4. OK をクリックします。
  11. + をクリックして interrupt_concat ブロックを展開し、dout 信号バスからポートを作成します。
    1. xlconcat_interrupt_0 ブロックの dout[31:0] ピンを選択します。
    2. 右クリックして Create Port をクリックします。
    3. デフォルト設定のままにして OK をクリックします。
    4. 最上位の IP の図から外部ポート接続のワイヤとポート名を削除します。
  12. AXI Interrupt Controller IP ブロックを追加します。
    1. IP block diagram を右クリックして Add IP をクリックします。
    2. intc を検索し、AXI Interrupt Controller を選択して Enter キーを押します。
  13. AXI Interrupt Controller IP ブロックを再カスタマイズします。
    1. AXI Interrupt Control ブロックをダブルクリックして [Re-Customize IP] ダイアログ ボックスを開きます。
    2. ボタンを [Manual] に変更して 0x0 をテキスト フィールドに入力し、[Interrupts type] を [Level] に設定します。
    3. ボタンを [Manual] に変更して 0xFFFFFFFF を入力し、[Level type] を High に設定します。
    4. [Interrupt Output Connection] を Single に設定します。
    5. OK をクリックします。
  14. [Run Connection Automation] を使用して、AXI Interrupt Controller の s_axi バスを Zynq UltraScale+ MPSoC M_AXI_HPM0_LPD ポートに接続します。
    1. マスター インターフェイスと Bridge IP の値はデフォルトのままにします。
      • マスター インターフェイスのデフォルトは /zynq_ultra_ps_e_0/M_AXI_HPM0_LPD です。
      • Bridge IP のデフォルトは [New AXI interconnect] です。
    2. Bridge IP を駆動するクロック ソースには、/clk_wiz_0/clk_out3 を選択します。これは、デフォルトのアクセラレーション カーネル クロックです。
    3. スレーブ インターフェイスのクロック ソースには、/clk_wiz_0/clk_out3 を選択します。
    4. マスター インターフェイスのクロック ソースのデフォルトは、前に PS ブロックに接続したので、/clk_wiz_0/clk_out3 です。
    5. OK をクリックします。
  15. iinterrupt_concat/dout[31:0]axi_intc_0/intr[0:0] 入力に接続して、AXI Interrupt Controller 割り込み入力を接続します。
  16. axi_intc_0/irq 出力を Zynq UltraScale+ MPSoCpl_ps_irq0[0:0] 入力を接続して、AXI Interrupt Controller 割り込み出力を接続します。

    次のブロック図は、この割り込みコントローラーに接続されるシステム全体を示しています。

  17. プラットフォーム デザインのプロパティを設定します。これらのプロパティはクエリすることもできます。
    set_property platform.design_intent.embedded true [current_project]
    set_property platform.design_intent.server_managed false [current_project]
    set_property platform.design_intent.external_host false [current_project]
    set_property platform.design_intent.datacenter false [current_project]
    
    get_property platform.design_intent.embedded [current_project]
    get_property platform.design_intent.server_managed [current_project]
    get_property platform.design_intent.external_host [current_project]
    get_property platform.design_intent.datacenter [current_project]
    
  18. プラットフォームのデフォルトの出力タイプ プロパティを設定します。
    
    set_property platform.default_output_type "sd_card" [current_project]
    
    get_property platform.default_output_type [current_project]
    
  19. ザイリンクス ランタイム (XRT) リポジトリから dynamic_postlink.tcl スクリプトを取得します。
    1. ウェブ ブラウザーで https://github.com/Xilinx/XRT/tree/master/src/platform/zcu102_base を表示します。
    2. Vivado プロジェクトが含まれるディレクトリに dynamic_postlink.tcl ファイルを保存します。
  20. Vivado プロジェクト内に保存した dynamic_postlink.tcl スクリプトを編集し、スクリプトとプロセッサ IP の名前が同じになるようにします。これには、ps_* の 2 つのインスタンスを zynq_ultra_ps_* に変更します。
  21. v++ リンク中に dynamic_postlink.tcl を使用するプラットフォーム プロパティを追加します。
    set_property platform.post_sys_link_tcl_hook ./dynamic_postlink.tcl [current_project]
  22. M_AXI_HPM0_LPD はベースのハードウェア デザインで使用されるので、ディスエーブルにして v++ リンカーで使用されるようにします。
    1. [Window] → [Platform Interfaces] ビューで M_AXI_HPM0_LPD を選択します。
    2. 右クリックして Disable をクリックします。
  23. 右クリックして Validate Design on IP integrator diagram をクリックします。
  24. Zynq UltraScale+ MPSoC IP ブロックを選択して [Block Properties] ビューで SELECTED_SIM_MODELtlm に設定します。
  25. ブロック デザインを保存します。
  26. [Block Design] の [Sources] ウィンドウで design_1.bd を右クリックし、Generate Output Products をクリックします。
  27. HDL ラッパーを作成します。
    1. [Block Design] の [Sources] ウィンドウで design_1.bd を右クリックし、Create HDL Wrapper をクリックします。
    2. Let Vivado manage wrapper and auto-update をクリックします。
    3. OK をクリックします。
  28. Flow Navigator からビットストリームを生成します。
    1. Program and Debug > Generate Bitstream をクリックします。
    2. Yes をクリックして合成およびインプリメンテーションを開始します。
    3. [Launch Runs] ダイアログ ボックスをデフォルトのままにして、OK をクリックします。
  29. XSA を作成します。
    write_hw_platform -include_bit -force zcu102_min.xsa 
  30. XSA を検証します。
    validate_hw_platform ./zcu102_min.xsa