Main Content

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

FPGA インザループを使用したデジタル アップコンバータの検証

この例では、FPGA インザループ シミュレーションを使用して、 Filter Design HDL Coder™で生成されたデジタル アップコンバーター デザインを検証する方法を示します。

要件

この例に必要なツール:

  • FPGA設計ソフトウェア

  • サポートされている FPGA 開発ボードおよびアクセサリの 1 つ (この例では、ML403 ボードはサポートされていません)。サポートされているハードウェアの詳細については、 「 FPGA検証用にサポートされているFPGAデバイス 」を参照してください。

  • イーサネットを使用した接続の場合:ホスト コンピュータにインストールされたギガビット イーサネット アダプタ、ギガビット イーサネット クロスオーバー ケーブル

  • JTAGを使用した接続の場合:USB Blaster I または II、USB Blaster ドライバーを備えた JTAG ケーブル

  • PCI Express®を使用した接続の場合:FPGA ボードはホスト コンピューターの PCI Express スロットに取り付けられます。

DUC 用のカスケード フィルターの作成

デジタル アップコンバータ (DUC) は、デジタル ベースバンド信号をパスバンド信号に変換するデジタル回路です。DUC は 3 つのフィルタリング ステージで構成されます。各ステージは、ローパス補間フィルターで入力信号をフィルターし、その後サンプル レートを変更します。この例では、HDL デジタル アップコンバータ (DUC) の例で説明したように、DUC は 2 つの FIR 補間フィルターと 1 つの CIC 補間フィルターのカスケードです。

1. 2 つの FIR フィルターと CIC フィルターを作成します。

pfir = [0.0007    0.0021   -0.0002   -0.0025   -0.0027    0.0013    0.0049    0.0032 ...
     -0.0034   -0.0074   -0.0031    0.0060    0.0099    0.0029   -0.0089   -0.0129 ...
     -0.0032    0.0124    0.0177    0.0040   -0.0182   -0.0255   -0.0047    0.0287 ...
      0.0390    0.0049   -0.0509   -0.0699   -0.0046    0.1349    0.2776    0.3378 ...
      0.2776    0.1349   -0.0046   -0.0699   -0.0509    0.0049    0.0390    0.0287 ...
     -0.0047   -0.0255   -0.0182    0.0040    0.0177    0.0124   -0.0032   -0.0129 ...
     -0.0089    0.0029    0.0099    0.0060   -0.0031   -0.0074   -0.0034    0.0032 ...
      0.0049    0.0013   -0.0027   -0.0025   -0.0002    0.0021    0.0007 ];
hpfir = dsp.FIRInterpolator(2, pfir);
hpfir.FullPrecisionOverride = false;
hpfir.CoefficientsDataType = 'Custom';
hpfir.CustomCoefficientsDataType = numerictype([],16);
hpfir.ProductDataType = 'Custom';
hpfir.CustomProductDataType = numerictype([],31,31);
hpfir.AccumulatorDataType = 'Custom';
hpfir.CustomAccumulatorDataType = numerictype([],16,15);
hpfir.OutputDataType = 'Custom';
hpfir.CustomOutputDataType = numerictype([],16,15);
hpfir.RoundingMethod = 'Nearest';
cfir = [-0.0007   -0.0009    0.0039    0.0120    0.0063   -0.0267   -0.0592   -0.0237 ...
       0.1147    0.2895    0.3701    0.2895    0.1147   -0.0237   -0.0592   -0.0267 ...
       0.0063    0.0120    0.0039   -0.0009   -0.0007];
hcfir = dsp.FIRInterpolator(2, cfir);
hcfir.FullPrecisionOverride = false;
hcfir.CoefficientsDataType = 'Custom';
hcfir.CustomCoefficientsDataType = numerictype([],16);
hcfir.ProductDataType = 'Custom';
hcfir.CustomProductDataType = numerictype([],31,31);
hcfir.AccumulatorDataType = 'Custom';
hcfir.CustomAccumulatorDataType = numerictype([],16,15);
hcfir.OutputDataType = 'Custom';
hcfir.CustomOutputDataType = numerictype([],16,15);
hcfir.RoundingMethod = 'Nearest';
hcic = dsp.CICInterpolator(32, 1, 5);
hcic.FixedPointDataType = 'Minimum section word lengths';
hcic.OutputWordLength = 20;

2.これらのフィルターを使用してカスケード フィルターを作成します。

hduc = dsp.FilterCascade(hpfir, hcfir, hcic);

カスケード フィルターの周波数応答を次の図に示します。

fvtool(hduc,'Arithmetic','fixed');

HDL コードの生成

カスケード フィルターの準備ができたら、Filter Design HDL Coder関数generatehdlを使用し、プロパティ 'AddPipelineRegisters' を 'on' に設定して DUC の HDL コードを生成します。

generatehdl(hduc, 'Name', 'hdlduc', 'AddPipelineRegisters', 'on', 'InputDataType', numerictype(1,16,15));

このオプションは、フィルター ステージ間にパイプライン レジスタを挿入し、生成されたフィルターをより高いクロック周波数で合成できるようにします。

Filter Design HDL Coderがない場合は、現在のディレクトリにある事前に生成された HDL ファイルを使用できます。

FPGA設計ソフトウェアのセットアップ

FPGA インザループを使用する前に、FPGA 設計ソフトウェアにアクセスできるようにシステム環境が適切に設定されていることを確認してください。関数hdlsetuptoolpathを使用して、現在のMATLABセッションのシステムパスにFPGA設計ソフトウェアを追加できます。

FPGA-in-the-Loopの構成と構築

FIL ウィザードは、FPGA インザループの構築に必要な設定の構成をガイドします。次のコマンドを使用してウィザードを起動します。

filWizard

1. [ハードウェア オプション] で、ホスト コンピューターに接続されている FPGA 開発ボードを選択します。必要に応じて、[詳細オプション] でボード IP と MAC アドレスをカスタマイズすることもできます。[*次へ] をクリックして続行します。

2.[ソース ファイル] で、参照 を使用して、DUC 用に生成された次の HDL ファイルをソース ファイル テーブルに追加します。

hdlduc.vhd
hdlduc_stage1.vhd
hdlduc_stage2.vhd
hdlduc_stage3.vhd

hdlduc.vhdの横にある最上位のチェックボックスを選択します。[*次へ] をクリックして続行します。

3.DUT I/O ポートでは、ポート名、方向、幅、ポート タイプなどの入出力ポート情報が HDL ファイルから自動的に生成されます。クロックやデータなどのポート タイプは、ポート名に基づいて生成されます。必要に応じて選択を変更できます。この例では、生成されたポート タイプは正しいため、次へ をクリックできます。

4.[ビルド オプション] で、FIL 出力ファイルのフォルダーを指定します。この例ではデフォルト値を使用できます。「ビルド」をクリックします。「Build」をクリックすると、FIL ウィザードが FPGA-in-the-Loop シミュレーションに必要なすべてのファイルを生成し、次のアクションを実行します。

  • 新しいSimulink®モデルで FIL ブロックを生成します

  • コマンドライン ウィンドウを開き、FPGA プロジェクトをコンパイルし、FPGA プログラミング ファイルを生成します。

FPGA プロジェクトのコンパイル プロセスには数分かかります。プロセスが完了すると、コマンド ライン ウィンドウを閉じるように求められます。このウィンドウを今すぐ閉じてください。

FIL ブロックの構成

FPGA インザループ シミュレーションの準備をするには、以下の手順に従って FIL ブロックを構成します。

1. 「モデルを開く」ボタンをクリックしてテストベンチ モデルを開き、生成された FIL ブロックをモデルにコピーします。

2.FIL ブロックをダブルクリックしてブロック マスクを開きます。「ロード」をクリックして、生成されたプログラミング ファイルを使用して FPGA をプログラムします。

3.「実行時オプション」で、「オーバークロック係数」を 128 に変更します。これは、入力値が値を変更する前に、FPGA クロックによって入力値が 128 回サンプリングされることを指定します。

4.FIL ブロック マスクで、[信号属性] タブをクリックします。動作フィルター ブロックのデータ型と一致するように、filter_out のデータ型をfixdt(1,20,-1)に変更します。

5.「OK」をクリックしてブロックマスクを閉じます。

生成されたフィルターの検証

この例では、FPGA 上で実行される生成されたフィルターが動作フィルター ブロックと比較されます。生成されたフィルターの HDL 遅延と一致するように、動作フィルターの出力に遅延が追加されます。

シミュレーションを実行します。動作フィルター ブロック、FIL ブロックからの出力波形、および誤差マージンを観察します。動作フィルター ブロックにはパイプライン レジスタがないため、動作フィルター ブロックの出力と FIL ブロックの出力には小さな違いがあります。これらの誤差は誤差範囲内です。

これで例は終わりです。