手順 2: 非同期チャネルの作成 - 2020.2 日本語

Vivado Design Suite チュートリアル: System Generator を使用したモデル ベースの DSP デザイン (UG948)

Document ID
UG948
Release Date
2020-12-11
Version
2020.2 日本語
この手順では、FIFO を使用してサブシステム間に非同期チャネルをインプリメントします。FIFO のデータは入力された順に処理され、制御信号により有効なデータがある場合にのみデータが読み出され、スペースがある場合にのみデータが書き込まれるよう制御されます。FIFO が空またはフルになると、制御信号がシステムを停止します。このデザインでは、入力は常に書き込み可能であり、FIFO がフルの場合の要件を考慮する必要はありません。
このデザインには、FIFO が必要なデータパスが 2 つあります。
  • CTRL から Gain Control へのデータ。
  • DDC から Gain Control へのデータ。
  1. キャンバスのどこかを右クリックし、Xilinx BlockAdd をクリックします。
  2. [Add Block] ダイアログ ボックスに「FIFO」と入力します。
  3. FIFO を選択してデザインに追加します。
  4. データパスを FIFO インスタンスを介して接続します。既存の接続を解除してから実行します。
    1. CTRL/Out1FIFO/din に接続します。
    2. FIFO/doutGain Control/In1 に接続します。
  5. FIFO インスタンスのコピーを作成します (Ctrl + C および Ctrl + V キーを使用)。
  6. データパスを FIFO1 インスタンスを介して接続します。既存の接続を解除してから実行します。
    1. DDC/Out2FIFO1/din に接続します。
    2. FIFO1/doutGain Control/In3 に接続します。

    異なるドメイン間のデータが接続され、デザインが次の図に示すようになります。



    次に、制御ロジック信号を接続してデータがドメイン間で安全に転送されるようにします。

    • CTRL ブロックからライト イネーブルが必要です。この信号は存在していないので、作成する必要があります。
    • DDC ブロックからライト イネーブルが必要です。これには、最終 FIR 段からの data_tvalid を使用できます。
    • Gain Control で両方の FIFO のリード イネーブルを生成する必要があります。FIFO の Empty 信号を使用し、これを反転します。データがある場合は、このブロックが読み出します。
  7. CTRL ブロックをダブルクリックし、サブシステムを開きます。
  8. キャンバスを右クリックし、Xilinx BlockAdd をクリックして次のブロックを追加します。
    1. Delay (ザイリンクス)
    2. Relational
  9. Out1 インスタンスのコピーを作成します (Ctrl + C および Ctrl + V キーを使用)。
  10. Relational ブロックをダブルクリックし、プロパティ エディターを開きます。
  11. [Comparison] ドロップダウン リストから a!=b を選択し、OK をクリックします。
  12. ブロックを次の図に示すように接続します。

    Out2 に出力ストローブが作成されます。出力ストローブは、入力が変化したときに 1 サイクル間アクティブになり、CTRL から Gain Control (最上位の FIFO ブロック) へのライト イネーブルとして使用されます。

  13. Up to Parent ツールバー ボタン をクリックし、最上位に戻ります。
  14. Gain Control インスタンスをダブルクリックし、サブシステムを開きます。
  15. キャンバスを右クリックし、Xilinx BlockAdd をクリックして次のブロックを追加します。
    1. Inverter
    2. Inverter (合計 2 個のインバーター)
    3. Delay (ザイリンクス)
  16. Out1 インスタンスのコピー Out3 を作成します (Ctrl + C および Ctrl + V キーを使用)。
    • Out3 を DDC_Read という名前に変更します。
  17. Out1 インスタンスのコピー Out3 を作成します (Ctrl + C および Ctrl + V キーを使用)。
    • Out3 を CTRL_Read という名前に変更します。
  18. In1 インスタンスのコピー In4 を作成します (Ctrl + C および Ctrl + V キーを使用)。
    • In4 を CTRL_Empty という名前に変更します。
  19. ブロックを次の図に示すように接続します。

    • Gain Control FIFO (FIFO) ブロックからの FIFO Empty 信号は、最上位 DDC FIFO (FIFO1) のリード イネーブルを作成するのに使用した Inverter ブロックです。FIFO が空でなければ、データが読み出されます。
    • 同様に、最上位 DDC FIFO (FIFO1) からの FIFO Empty 信号が反転され、FIFO のリード イネーブルが作成されています。
    • この同じ信号は、新しい data_tvalid (以前は In2) として使用されます。ただし、FIFO のレイテンシは 1 なので、この信号を遅延させて制御信号が FIFO により 1 遅延されたデータと正しく揃うようにします。
  20. Up to Parent ツールバー ボタン をクリックして最上位に戻ります。

    最上位に制御信号が含まれています。



    接続を完成させます。

  21. 制御パスを FIFO インスタンスを介して接続します。既存の接続を解除してから実行します。
    1. CTRL/Out2FIFO/we に接続します。
    2. FIFO/emptyGain Control/CTRL_Empty に接続します。
    3. Gain Control/CTRL_ReadFIFO/re に接続します。
  22. 制御パスを FIFO1 インスタンスを介して接続します。既存の接続を解除してから実行します。
    1. DDC/Out1FIFO1/we に接続します。
    2. FIFO1/emptyGain Control/In2 に接続します。
    3. Gain Control/DDC_ReadFIFO1/re に接続します。


  23. [Run simulation] ボタンをクリックしてデザインをシミュレーションし、正しく動作することを確認します。手順 1 ~ 4 の結果と同じになります。
次の手順では、各階層に個別のクロック ドメインを指定する方法を学びます。