この手順では、System Generator で個別のコンポーネントを使用してデザインを作成し、効率的なハードウェア デザインを達成する方法を示します。
- コマンド プロンプトに「
open Lab1_3.slx
」と入力します。次の図に示すような Simulink デザインが表示されます。このデザインは、手順 1 および 2 のデザインと似ていますが、フィルターが個別のコンポーネントを使用して作成されており、完成していません。この手順では、このデザインを完成させることにより、個別のコンポーネントを追加して設定する方法を学びます。
このフィルターは、次のように動作します。
- サンプルは In ポートから、シフト レジスタ (ASR インスタンス) に保存された遅延後に入力されます。
- フィルター係数の保存に ROM が必要です。
- 計算に使用するデータおよび係数サンプルを選択するため、カウンターが必要です。
- 計算を実行するために積和ユニットが必要です。
- 最後のダウン サンプル ユニットにより、出力が nth サイクルごとに選択されます。
まず、デザインに個別のコンポーネントを追加します。
-
Simulink ツールバーの [Library Browse] ボタン をクリックし、Simulink Library Browser を開きます。
- [Xilinx Blockset] を展開します。
-
Control Logic を選択し、Counter を右クリックして [Add block to model Lab1_3] をクリックし、このコンポーネントをデザインに追加します。
- Memory を選択し、ROM をデザインに追加します。
- DSP を選択し、DSP48 Macro 1.0 をデザインに追加します。
- 新しい 3 つのインスタンスを、次の図に示すようにデザインの残りの部分に接続します。
次に、これらのインスタンスを設定してデータが正しくフィルター処理されるようにします。
-
FDATool インスタンスをダブルクリックし、[Filter Coefficients] ツールバー ボタン
をクリックしてフィルターの仕様を確認します。
これは、前の手順の仕様と同じで、11 個の係数があります。Gateway In の入力をダブルクリックして、入力のサンプル レートが 20 MHz (サンプル周期 1/20e6) であることも確認できます。次に、この情報を使用して個別のコンポーネントを設定します。
- FDATool のプロパティ エディターを閉じます。
-
Counter インスタンスをダブルクリックし、プロパティ エディターを開きます。
- [Counter type] で Count limited をオンにし、Count to value に「
length(xlfda_numerator('FDATool'))-1
」と入力します。これにより、カウンターが 0 から 10 までカウントするようになります (11 個の係数とデータ アドレス)。
- [Output type] をデフォルトの [Unsigned] のままにし、[Number of Bits] に 4 と入力します。11 までカウントするのに必要な 2 進アドレスは 4 ビットです。
- [Explicit Sample Period] に 1/(11*20e6)
と入力し、サンプル周期が入力データ レートの 11 倍になるようにします。各入力サンプルに対して、フィルターで計算を 11 回実行する必要があります。
- OK をクリックしてプロパティ エディターを閉じます。
- [Counter type] で Count limited をオンにし、Count to value に「
-
ROM インスタンスをダブルクリックし、プロパティ エディターを開きます。
- [Depth] に「
length(xlfda_numerator('FDATool'))
」と入力します。これにより、ROM の要素数が 11 になります。 - [Initial value vector] に「
xlfda_numerator('FDATool')
」と入力します。係数値は FDATool インスタンスにより供給されます。
- OK をクリックしてプロパティ エディターを閉じます。
- [Depth] に「
-
DSP48 Macro
1.0 インスタンスをダブルクリックし、プロパティ エディターを開きます。
- [Instructions] タブで、既存の命令を
A*B+P
に変更し、A*B
を追加します。sel
入力が偽の場合、DSP は積和を実行します。sel
入力が真の場合、DSP は乗算を実行します。
- [Pipeline Options] タブで、[Pipeline Options] ドロップダウン リストから By_Tier を選択します。
-
Tier 3 および Tier 5 をオンにします。これにより、レジスタが A と B への入力および乗算と累算の間に使用されるようになります。
- OK をクリックしてプロパティ エディターを閉じます。
- [Instructions] タブで、既存の命令を
- Save をクリックしてデザインを保存します。
- [Run simulation] ボタンをクリックしてデザインをシミュレーションし、結果を確認します。
最後に、デザインをハードウェア記述にコンパイルして合成します。
- System Generator トークンをダブルクリックし、プロパティ エディターを開きます。
- [Compilation] タブで、[Compilation] に [IP Catalog] が選択されていることを確認します。
- [Clocking] タブで、[Perform analysis] に Post Synthesis を選択し、[Analyzer type] に Resource を選択します。このオプションを選択すると、完了後にリソース使用率の詳細が表示されます。
-
Generate をクリックし、デザインをハードウェア記述にコンパイルします。生成が完了すると、[Resource Analyzer] ウィンドウにリソース使用量が表示されます。
Digital FIR Filter マクロを使用して作成したデザインと比較して、FPGA ハードウェア リソース数が少なくなっていることがわかります。
- OK をクリックして [Resource Analyzer] ウィンドウを閉じます。
- OK をクリックして [Compilation status] ダイアログ ボックスを閉じます。
- OK をクリックして System Generator トークンを閉じます。
- Lab1_3.slx ワークシートを閉じます。