メインコンテンツ

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

hdlverifier.FILSimulation

MATLAB による FIL シミュレーション

説明

FILSimulation System object™ は FPGA 実行を MATLAB® テストベンチに接続します。これは、FPGA 上で実行されている HDL モデルに入力信号を適用し、そこから出力信号を読み取ることによって行われます。このオブジェクトを使用して、入力ポートまたは出力ポートのみでオブジェクトを構成することにより、ソース デバイスまたはシンク デバイスをモデル化できます。

FPGA 実行と通信する MATLAB テストベンチで構成されるシミュレーションを実行するには:

  1. FPGA-in-the-Loop Wizard を使用して hdlverifier.FILSimulation オブジェクトをカスタマイズします。

  2. デザイン内にオブジェクトを作成し、そのプロパティを設定します。

  3. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の動作の詳細については、「システム オブジェクトとは?」を参照してください。

作成

hdlverifier.FILSimulation System object を作成するには、FPGA-in-the-Loop Wizard を使用して FILSimulation System object をカスタマイズします。FILWizard の出力は toplevel_fil というファイルです。ここで、toplevel は最上位 HDL モジュールの名前です。次に、ローカル変数に割り当てることで System object を作成できます。

filobj = toplevel_fil は、FPGA インザループウィザードによってカスタマイズされた System object を作成します。toplevel は、HDL コード内の最上位モジュールの名前です。

System object を作成し、そのプロパティを設定できます。

filobj = toplevel_fil('InputSignals', {'/top/in1','/top/in2'}, ...
                           'OutputSignals', {'/top/out1','/top/out2'}, ...
                           'OutputDataTypes', {'double','fixedpoint'}, ...
                           'OutputSigned', [true,false]);
System object を作成した後で書き込み可能なプロパティを調整することもできます。
filobj = toplevel_fil;
filobj.OutputDataTypes = char('fixedpoint', 'integer', 'fixedpoint');
filObj.OutputSigned = [false, true, true];

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトを呼び出した後にプロパティ値を変更することはできません。オブジェクトは呼び出し時にロックされ、関数 release でロック解除されます。

プロパティが "調整可能" な場合は、いつでも値を変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

この プロパティ は読み取り専用です。

FPGA ボードとの接続のパラメータ。文字ベクトルまたは文字列スカラーとして指定されます。ベクトルは 3 つの部分で構成されます。

  • 接続タイプ

  • ボード IP アドレス

  • ボードのMACアドレス(オプション)

例: char('UDP','192.168.0.2','00-0A-35-02-21-8A') は、IP アドレス 192.168.0.2 への UDP 接続を指定します。ここで、ボードの MAC アドレスは 00-0A-35-02-21-8A です。

この プロパティ は読み取り専用です。

テスト対象設計 (DUT) の最上位名。文字ベクトルまたは文字列スカラーとして指定されます。

例: 'inverter_top'

この プロパティ は読み取り専用です。

FPGA ボード名。文字ベクトルまたは文字列スカラーとして指定されます。

文字ベクトルまたは文字列スカラーとして指定された FPGA プログラミング ファイルへのパス。

例: 'c:\work\filename'

この プロパティ は読み取り専用です。

FPGA チップ ベンダーの名前。'Xilinx''Microsemi'、または 'Altera' として指定されます。

例: 'Altera'

この プロパティ は読み取り専用です。

整数または整数のベクトルとして指定されるビット単位の入力幅。このプロパティが整数の場合、すべての入力のビット幅は同じになります。このプロパティが整数のベクトルである場合、ベクトルは入力の数と同じサイズである必要があり、各値は異なる入力幅を指定します。

例: 10 – すべての入力は 10 ビット幅です。

例: [12,6,1] – 設計には 3 つの入力があります。1 つは 12 ビット幅、1 つは 6 ビット幅、そして 1 つは 1 ビット幅です。

この プロパティ は読み取り専用です。

HDL コード内の入力パス。文字ベクトル、文字ベクトルのセル配列、文字列スカラー、または文字列配列として指定されます。

例: '/top/in1'

例: char('in1','in2')

この プロパティ は読み取り専用です。

出力幅(ビット単位)。整数または整数のベクトルとして指定されます。

スカラーを指定すると、出力はそれぞれ同じビット幅になります。ベクトルを指定する場合、ベクトルは出力の数と同じサイズである必要があります。

例: 10 – すべての出力は 10 ビット幅です。

例: [12,6,1] – この設計には 3 つの出力があります。1 つは 12 ビット幅、1 つは 6 ビット幅、もう 1 つは 1 ビット幅です。

出力データ型。文字ベクトル、文字ベクトルのセル配列、文字列スカラー、または文字列配列として指定されます。

データ型を 1 つだけ指定すると、すべての出力は同じ型になります。それ以外の場合は、出力数と同じサイズのセル配列を指定します。

例: 'integer'

例: char('integer','fixedpoint','integer')

出力のダウンサンプリング係数と位相。2 つの整数のベクトルとして指定されます。最初の整数はダウンサンプリング係数を指定し、正の値になります。2 番目の整数は位相を指定し、ゼロまたは正の値ですが、ダウンサンプリング係数より小さくなります。

例: [3,1]

整数または整数のベクトルとして指定された出力小数部の長さ。

スカラーのみを指定すると、各出力の小数部の長さは同じになります。それ以外の場合は、出力数と同じサイズのベクトルを指定します。

例: 10 — すべての出力小数部の長さは 10 ビットです。

例: [16,8] — 出力の 1 つの小数部の長さは 16 ビットで、もう 1 つの小数部の長さは 8 ビットです。

この プロパティ は読み取り専用です。

HDL トップレベル モジュールの出力ポート名。文字ベクトル、文字ベクトルのセル配列、文字列スカラー、または文字列配列として指定されます。

例: 'out1',

例: char('out1','out2')

出力の符号。false (符号なし)、true (符号付き)、または論理ベクトルとして指定されます。

スカラーのみを指定すると、各出力は同じ符号になります。それ以外の場合は、出力の数と同じサイズのベクトルを提供する必要があります。

例: true

例: [true, true, false] — 符号付き値、符号なし値、符号付き値で構成される 3 つの出力。

ハードウェア オーバークロック係数。整数として指定します。

例: 3

この プロパティ は読み取り専用です。

JTAG スキャン チェーン内の FPGA の位置。正の整数として指定されます。

例: 1

ソースのフレーム サイズ (整数として指定)。このプロパティは、HDL ソース ブロック、つまり入力のない HDL ブロックにのみ関連します。

例: 1

使用法

説明

[hdloutputs] = filobj([hdlinputs]) は FPGA に接続し、hdlinputs を FPGA に書き込み、hdloutputs を FPGA から読み取ります。

入力引数

すべて展開する

FPGA 上で実行する入力。値の配列として指定されます。配列のサイズは、FPGA で実行されるモジュールの入力数と一致する必要があります。

例: [RealFft, ImagFft] = fft_obj(3,12); 値 3 と 12 が FPGA に入力されます。

データ型: int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | Fixed-point

出力引数

すべて展開する

FPGA から返される出力。値の配列として指定されます。配列のサイズは、FPGA 上で実行されるモジュールの出力数と一致します。

例: [RealFft, ImagFft] = fft_obj(real_in,imaginary_in); は、RealFftImagFft の 2 つの値を持つ複素数を FPGA から返します。

データ型: int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | Fixed-point

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、以下の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

この例では、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 インザループ シミュレーション」の例は終了です。

バージョン履歴

R2012b で導入