Main Content

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

MATLAB から HDL へのワークフローにおけるコシミュレーションと FPGA インザループ

この例では、MATLAB® から HDL への HDL コード生成ワークフローのステップとして、HDL コシミュレーションと FPGA インザループを使用して、生成された HDL コードを検証する方法を示します。

要件と前提条件

この例に必要な製品:

  • MATLAB

  • Fixed-Point Designer™

  • HDL Verifier™

  • FPGA 設計ソフトウェア (Xilinx® ISE® または Vivado® 設計スイート、または Intel® Quartus® II 設計ソフトウェア)

  • サポートされている FPGA 開発ボードの 1 つ。サポートされているハードウェアについては、FPGA検証でサポートされるFPGAデバイス を参照してください。

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

  • JTAGを使用した接続の場合:Intel FPGA ボード用の USB Blaster I または II ケーブルとドライバー。Xilinx FPGA ボード用の Digilent® JTAG ケーブルとドライバー。

前提条件:

MATLAB および FPGA 設計ソフトウェアは、コンピューターにローカルにインストールすることも、ネットワークにアクセス可能なデバイスにインストールすることもできます。ネットワークからソフトウェアを使用する場合は、FPGA 開発ボードにプライベート ネットワークを提供するために、コンピューターに 2 番目のネットワーク アダプターをインストールする必要があります。ネットワーク アダプターのインストール方法については、コンピューターのハードウェアおよびネットワーク ガイドを参照してください。

MATLAB 設計

この例で使用されている MATLAB コードは、単純な対称 FIR フィルターを実装し、dsp.Delay System object を使用して状態をモデル化します。この例では、このフィルターを使用する MATLAB テスト ベンチも示します。

この MATLAB 設計を見てみましょう。

type('mlhdlc_sysobj_ex.m');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MATLAB design: Symmetric FIR Filter
% 
% Design pattern covered in this example: 
%  Filter states modeled using DSP System object (dsp.Delay)
%  Filter coefficients passed in as parameters to the design
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%   Copyright 2011-2015 The MathWorks, Inc.

%#codegen
function [y_out, delayed_xout] = mlhdlc_sysobj_ex(x_in, h_in1, h_in2, h_in3, h_in4)
% Symmetric FIR Filter

persistent h1 h2 h3 h4 h5 h6 h7 h8;
if isempty(h1)
    h1 = dsp.Delay;
    h2 = dsp.Delay;
    h3 = dsp.Delay;
    h4 = dsp.Delay;
    h5 = dsp.Delay;
    h6 = dsp.Delay;
    h7 = dsp.Delay;
    h8 = dsp.Delay;
end

h1p = step(h1, x_in);
h2p = step(h2, h1p);
h3p = step(h3, h2p);
h4p = step(h4, h3p);
h5p = step(h5, h4p);
h6p = step(h6, h5p);
h7p = step(h7, h6p);
h8p = step(h8, h7p);

a1 = h1p + h8p;
a2 = h2p + h7p;
a3 = h3p + h6p;
a4 = h4p + h5p;

m1 = h_in1 * a1;
m2 = h_in2 * a2;
m3 = h_in3 * a3;
m4 = h_in4 * a4;

a5 = m1 + m2;
a6 = m3 + m4;

% filtered output
y_out = a5 + a6;
% delayout input signal
delayed_xout = h8p;

end
type('mlhdlc_sysobj_ex_tb.m');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MATLAB test bench for the FIR filter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%   Copyright 2011-2015 The MathWorks, Inc.

clear mlhdlc_sysobj_ex;
 
x_in = cos(2.*pi.*(0:0.001:2).*(1+(0:0.001:2).*75)).';


h1 = -0.1339;
h2 = -0.0838;
h3 = 0.2026;
h4 = 0.4064;

len = length(x_in);
y_out_sysobj = zeros(1,len);
x_out_sysobj = zeros(1,len);
a = 10;

for ii=1:len
    data = x_in(ii);
    % call to the design 'sfir' that is targeted for hardware
    [y_out_sysobj(ii), x_out_sysobj(ii)] = mlhdlc_sysobj_ex(data, h1, h2, h3, h4);    
end


figure('Name', [mfilename, '_plot']);
subplot(2,1,1); 
plot(1:len,x_in); title('Input signal with noise');
subplot(2,1,2);
plot(1:len,y_out_sysobj); title('Filtered output signal');

設計のシミュレーション

コードの生成前にテスト ベンチを使用して設計をシミュレートし、実行時エラーがないことを確認します。MATLAB でこのコマンドを実行します。

mlhdlc_sysobj_ex_tb

HDL Coder™ プロジェクトの新規作成

新しいプロジェクトを作成するには、次のコマンドを入力します。

coder -hdlcoder -new mlhdlv_cosimFIL_prj

次に、ファイル「mlhdlc_sysobj_ex.m」を MATLAB 関数としてプロジェクトに追加し、ファイル「mlhdlc_sysobj_ex_tb.m」を MATLAB Test ベンチとしてプロジェクトに追加します。

MATLAB HDL Coder プロジェクトの作成と設定に関するより完全なチュートリアルについては、MATLAB から HDL へのワークフロー入門 (HDL Coder) チュートリアルを参照してください。

入力データ型の定義

この浮動小数点 MATLAB System object の場合、すべての入力は Double Scalar です。MATLAB 関数に用意されているドロップダウン メニューを使用して、そのように指定します。

固定小数点変換と HDL コード生成の実行

ワークフロー アドバイザーを起動します。ワークフロー アドバイザーで、「HDL コード生成」ステップを右クリックします。[選択したタスクまで実行] オプションを選択して、最初から HDL コード生成までのすべての手順を実行します。

ワークフロー アドバイザーのログ パネル内のリンクをクリックして、生成された HDL コードを調べます。

コシミュレーションテストベンチを生成し、HDLコシミュレーションを実行する

「コシミュレーションによる検証」ステップを選択します。

「コシミュレーション テスト ベンチを生成する」というチェックボックスを選択します。このアクションにより、ダイアログ内の他の選択肢が有効になり、比較のために出力をログに記録したり、優先する HDL シミュレーターを選択したり、生成されたコシミュレーション テスト ベンチをシミュレートしたりできるようになります。残りのチェックボックスを両方ともオンにして、希望する HDL シミュレータを選択します。

HDL シミュレータの実行モードとして「GUI」を選択します。

「実行」をクリックし、コシミュレーションの出力と固定点 System object の出力を比較するプロットを観察します。また、HDL シミュレータの波形ビューアでの信号遷移にも注意してください。

FPGA開発ボードのセットアップ

FPGA ボードとコンピューターを FPGA インザループ シミュレーション用に通信するように設定する方法については、手順 1.FPGA開発ボードのセットアップ を参照してください。

FPGA インザループ (FIL) テストベンチを生成し、FIL シミュレーションを実行する

ワークフロー アドバイザーの左側のパネルで、「FPGA インザループによる検証」ステップを選択します。

3 つのチェックボックスをすべて選択します (FPGA インザループ テストベンチの生成、出力ログ、生成された FIL テストベンチのシミュレーション)。

ご希望の FPGA 開発ボードを選択してください。

「実行」をクリックし、FPGA の出力と固定小数点 System object の出力を比較するプロットを観察します。

生成されたファイルをクリーンアップする

次のコマンドを実行して、一時プロジェクト フォルダーをクリーンアップします。

clear mex;
cd (hdlverif_demo_dir);
rmdir(mlhdlv_temp_dir, 's');