Main Content

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

MATLAB システム オブジェクトを使用した FPGA インザループ シミュレーション

この例では、MATLAB® System Object™ と FPGA を使用して、Verilog で記述されたサイズ 8 の高速フーリエ変換 (FFT) のレジスタ転送レベル (RTL) 設計を検証します。FFT は、信号の周波数分布を生成するためにデジタル信号処理でよく使用されます。

この FFT の正確さを検証するために、MATLAB System object テストベンチが提供されています。このテストベンチは、テスト対象の HDL 設計 (DUT) に周期的な正弦波入力を生成し、複素平面にフーリエ係数をプロットします。

FPGA設計ソフトウェア環境の設定

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

FilWizardを起動する

FFT サンプル情報が事前に入力された FIL ウィザードを起動します。最初のステップで FPGA ボード情報を入力し、ウィザードの各ステップに従って FPGA プログラミング ファイルと FIL System object を生成します。

filWizard('fft_hdlsrc/fft8_sysobj_fil.mat');

FPGAをプログラムする

生成されたプログラミング ファイルを使用して FPGA をプログラムします。続行する前に、FIL ウィザードが FPGA プログラミング ファイルの生成を完了していることを確認してください。また、FPGA ボードがオンになっていて、正しく接続されていることを確認してください。

run('fft8_fil/fft8_programFPGA');

SineWave システム オブジェクトのインスタンスを作成する

次のコードは、正弦波ジェネレーター (F = 100Hz、サンプリング = 1000Hz、複素固定小数点出力) を表すシステム オブジェクトをインスタンス化します。

SinGenerator = dsp.SineWave('Frequency ', 100, ...
                          'Amplitude', 1, ...
                          'Method', 'Table lookup', ...
                          'SampleRate', 1000, ...
                          'OutputDataType', 'Custom', ...
                          'CustomOutputDataType', numerictype([], 10, 9), ...
                          'ComplexOutput',true);

FPGA インザループ システムオブジェクトのインスタンス化

fft8_fil はカスタマイズされた FILSimulation System object であり、このシミュレーション システムの FPGA 上で実行される FFT の HDL 実装を表します。

Fft = fft8_fil;

シミュレーションの実行

この例では、FPGA インザループ System object を介して正弦波ジェネレーターと FFT HDL 実装をシミュレートします。このコードのセクションでは、処理ループを呼び出して、データをサンプルごとに処理します。

for ii=1:1000
    % Read 1 sample from the sine wave generator
    ComplexSinus = step(SinGenerator);
    % Send/receive 1 sample to/from the HDL FFT on the FPGA
    [RealFft, ImagFft] = step(Fft,real(ComplexSinus),imag(ComplexSinus));
    % Store the FFT sample in a vector
    ComplexFft(ii) = RealFft + ImagFft*1i;
end

フーリエ係数を表示する

複素平面にフーリエ係数をプロットします。

% Discard the first 12 samples (initialization of the HDL FFT)
ComplexFft(1:12)=[];
% Display the FFT
plot(ComplexFft,'ro');
title('Fourier Coefficients in the Complex Plane');
xlabel('Real Axis');
ylabel('Imaginary Axis');

これで、「MATLAB システム オブジェクトを使用した FPGA インザループ シミュレーション」の例は終了です。