このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
Vivado FFT IP コアを Simulink でコシミュレーションする
HDL Verifier™ を使用すると、Simulink® と Xilinx® Vivado® シミュレータの IP コア間のコシミュレーションを設定できます。このセットアップにより、システムに Xilinx IP 実装を含めるように Simulink アルゴリズムを設計し、Simulink をテストベンチとして使用することができます。IP コアを検証するには、Simulink の特殊な刺激および視覚化スコープを使用できます。
この例では、Cosimulation Wizard を使用して、Simulink 環境の Vivado シミュレータから高速フーリエ変換 (FFT) IP コアの動作をシミュレートおよび検証します。FFT は、時間領域の信号を周波数領域の表現に変換するアルゴリズムです。
Xilinx IP コアを表す Simulink ブロックを生成するには、IP コアの HDL ラッパー ファイルと Xilinx コア インスタンス (XCI) ファイルを Cosimulation Wizard に提供します。ブロックが生成されると、Simulink でそれを使用して IP コアの動作をシミュレートできます。
この例では、Xilinx の Vivado シミュレータと、Simulink、HDL Verifier、Fixed-Point Designer™、Signal Processing Toolbox™、および DSP Systems Toolbox™ が必要です。Xilinx Vivado は MATLAB システム パス上に存在する必要があります。
手順 1: IPコアファイルの生成
Xilinx IP コアは、XCI ファイルを使用して参照できます。このコシミュレーションの最初のステップは、FFT IP コアをカスタマイズし、対応する XCI ファイルを生成することです。提供されている Tcl スクリプト gen_ip.tcl
を使用するか、Vivado で対話的に作業して XCI ファイルを生成することができます。
gen_ip.tcl
ファイルを使用して XCI ファイルを生成するには、Vivado を開き、ツールストリップで [ツール] > [Tcl スクリプトの実行] に移動します。開いたウィンドウでgen_ip.tcl
を選択します。このステップではスクリプトが実行され、ip_prj というプロジェクトが作成され、次の場所に xfft_0.xci
という名前の XCI ファイルが生成されます。
"project_folder\ip_prj.srcs\sources_1\ip\xfft_0\"
ここで、「project_folder」は、Vivado プロジェクト ip_prj が保存されているフォルダーです。その後、ステップ 2 に進みます。IP コア のラッパー HDL を作成します。
XCI ファイルをインタラクティブに作成するには、まず新しい Vivado プロジェクトを作成します。新しいプロジェクトの Project Manager の Flow Navigator で、IP Catalog をクリックします。フロー ナビゲーター は通常、Vivado ワークスペースの左側にあります。
IP カタログ タブが開き、利用可能な Vivado Xilinx IP コアが一覧表示されます。検索バーで「FFT
」を検索し、「Fast Fourier Transform
」というラベルの付いたエントリを選択すると、「IP のカスタマイズ」ウィンドウが開きます。
[IP のカスタマイズ] ウィンドウで、コンポーネント名 が xfft_0
であることを確認します。次に、構成 タブで次の操作を行います。
変換の長さを512に変更します。
ターゲット クロック周波数 (MHz) を
100
に変更します。アーキテクチャの選択を
Pipelined, Streaming I/O
に変更します。
実装 タブ:
スケーリング オプション を
Unscaled
に変更します。
変更を承認し、生成 をクリックします。Vivado は、xfft_0.xci
ファイルとそれに対応するターゲット ファイルを生成します。これらのファイルは、次の場所にあります。
"project_folder\project_name.srcs\sources_1\ip\xfft_0\"
ここで、「project_folder」は、「project_name」という名前の新しい Vivado プロジェクトが保存されるフォルダーです。
手順 2: IP コアのラッパー HDL を作成する
コシミュレーション ウィザードでは、Simulink ブロックを生成するためにラッパー HDL ファイルが必要です。Xilinx IP コアを HDL ファイルでラップします。このファイルは、Cosimulation ウィザードと IP コアの間の仲介役として機能します。
この例では、my_fft.v
という名前のラッパー ファイルを提供します。ラッパー ファイルは、ブロック ポートを定義し、IP をインスタンス化し、データの前処理と信号ルーティングを実行して、ブロックを使いやすくします。
ラッパー ファイルを作成するには、Simulink で使用する信号をファイルの最上位レベルの宣言に追加します。コシミュレーション ウィザードは、このトップレベル宣言内の信号を使用して、ブロックのポートを定義します。この画像の最上位ポートは、ブロックで使用可能なポートです。
次に、ラッパー ファイル内で IP コアをテスト対象デバイス (DUT) としてインスタンス化します。次に、DUT のポートをラッパー ファイル内のポートとワイヤに割り当てます。これらの割り当ては、IP コアと生成された Simulink ブロック間のデータ ストリームをリンクします。
ラッパー ファイルは、IP コアを DUT としてインスタンス化し、DUT とトップレベル ポートの間に 1 対 1 のマッピングを作成するだけの簡単なものになります。ただし、IP コアのどのポートがシミュレーションに不要であるかがわかっている場合は、ラッパー ファイルを活用して Simulink での実装を簡素化することもできます。
構成データやイベント データなどのこの IP コアのコンポーネントは未使用または変更されていないため、これらのポートは Simulink で使用可能である必要はありません。代わりに、ラッパー ファイルは IP コア構成に定数を提供し、最上位レベルの宣言からデータ ポートを省略することで未使用の出力を非表示にします。
この FFT IP コアは、実数部と虚数部のコンポーネントを別々に使用する代わりに、データ パディングと連結の特定の方法を使用して複雑な信号を表します。したがって、入力データ ストリームと出力データ ストリームは 1 つだけです。
Simulink 環境で提供されるデータを簡素化するために、ラッパー ファイルを使用してこの連結とデータの埋め込みを実行できます。この配置により、生成されたブロックは実数部と虚数部のコンポーネントを別々に使用できるようになり、IP コアの複雑なビット操作が抽象化され、モデルが簡素化されます。
手順 3: Simulink ブロックを生成する
これで、コシミュレーション ウィザードを使用して、コシミュレーション用の Simulink ブロックを生成できます。ウィザードを開くには、MATLAB コマンド ラインに次のコマンドを入力します。
cosimWizard
あるいは、テストベンチ モデル XilinxIPCosim.slx
から Cosimulation Wizard を開くこともできます。Simulink ツールストリップで、アプリ タブを選択し、HDL Verifier をクリックします。このアクションにより、HDL Verifier タブが Simulink ツールストリップに追加されます。次に、モードセクションで、HDL コシミュレーションを選択します。最後に、コシミュレーション ウィザードを開くには、コシミュレーション ブロックの生成 セクションで HDL ファイルのインポート をクリックします。
コシミュレーション ウィザードの コシミュレーション タイプ ページで、HDL シミュレータ を Vivado Simulator
に変更してから、次の手順 HDL ファイル に進みます。
ドロップダウン リストから HDL ファイルの種類を選択し、ラッパー HDL ファイル my_fft.v
を追加します。次に、ファイル タイプ ドロップダウン リストで XCI ファイル タイプを選択し、コア ソース ファイル xfft_0.xci
を追加します。
HDL コンパイル、シミュレーション オプション、および 入力/出力ポート ページでデフォルト設定を使用できます。
出力ポートの詳細セクションで、すべての出力ポートのデータ型をFixedpoint
に設定します。さらに、s_axis_data_tready
と m_axis_data_tvalid
の 符号 を Unsigned
に設定します。次に、ポート m_axis_data_tdata_re
と m_axis_data_tdata_im
の Fraction Length を 15 に設定します。これらの設定は、Simulink ブロックの出力タイプを IP コア構成のデータ型と一致させます。
「クロック/リセットの詳細」 ページと 「開始時刻の調整」 ページの既定の設定を受け入れます。ただし、ブロック生成ページで、オプションAutomatically determine timescale at start of simulation
をクリアし、HDLシミュレータでSimulinkの1秒= 10nsとなるように設定します。この設定により、Simulink の 1 秒が IP コア実装の 1 クロック サイクルと等しくなるようにブロックが同期されます。
コシミュレーション ウィザードは、IP コアの Simulink ブロック表現と DLL を再生成するメソッドの 2 つの項目を含む無題の Simulink モデルを生成します。コシミュレーション ウィザードは、現在の作業フォルダーに xsim.dir
というフォルダーも生成し、IP コアとの Simulink コシミュレーションに必要なすべてのファイルを保存します。
手順 4: 協調シミュレーションを実行する
必要なファイルを生成し、コシミュレーション ブロックを作成したので、独自のテスト ベンチを作成するか、提供されている Simulink テスト ベンチ モデル XilinxIPCosim.slx
を使用してコシミュレーションを実行し、結果を表示することができます。
IP は制御インターフェースとして AXI4-Stream を使用します。この例では、完全な AXI4-Stream インターフェイスとプロトコルはシミュレートされていません。代わりに、XilinxIPCosim.slx
では、テスト ベンチは AXI4-Stream Manager インターフェイスが常に新しいデータの準備ができていると想定します。AXI4-Stream 従属インターフェイスがデータの準備ができている限り、モデルは提供されるすべてのデータが有効であると想定します。ラッパー ファイルは、関連するポートに定数を供給することで IP コア構成データを処理します。
モデルは、FFT によって処理される 48 フレームの FFT データに対して実行されるように設定されています。IP コア ブロックに入力されるデータは離散正弦波であり、その周波数は 10 kHz 刻みで 100 kHz から 170 kHz まで変化します。10 kHz の周波数変更は 16 フレームにわたって発生し、100 kHz から 170 kHz へのシフトは 16 フレームごとに繰り返されるように設定されます。
IP コアの出力を表示するために、テスト ベンチは FFT 出力でスペクトル アナライザーを使用します。テストベンチを実行すると、中心周波数からゆっくりと離れていく 1 組のピークの変化に気付くでしょう。このゆっくりとした動きは、ピークが初めて中心に戻った後、2 回繰り返されます。この動作は、正弦波データ入力に発生する周波数の変化を反映しています。
概要
この例では、Xilinx FFT IP コアと Simulink の間でコシミュレーションを実行する方法を示します。適切な XCI ファイルを生成し、HDL ラッパー ファイルを作成している限り、Simulink は Xilinx IP コアとのコシミュレーションを実行できます。この機能により、Xilinx IP コア機能を Simulink デザインに含めることができ、IP コアのテストと視覚化のための Simulink 環境全体が提供されます。
この例からもわかるように、AXI-Stream 信号を Simulink およびラッパー ファイル内の定数に簡略化することで、完全な AXI4-Stream 制御インターフェイスのシミュレーションを回避できます。
ただし、設計に完全な AXI4 信号機能が必要な場合は、すべての信号を実装し、Simulink 環境で駆動することができます。あるいは、AXI BFM を備えた内部トランザクション インターフェイスを設計に組み込むことで、完全な AXI4 信号機能を追加しながら、それを Simulink 環境から非表示にすることができます。
著作権 2022 The MathWorks, Inc.