Main Content

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

MATLAB System object を使用した FPGA インザループ シミュレーション

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

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

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

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

フィルウィザードを起動する

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 System オブジェクトのインスタンス化

次のコードは、正弦波ジェネレーター (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 System Object を使用した FPGA インザループ シミュレーション」の例は終了です。