Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

FPGA ターンキー ワークフロー入門

この例では、FPGA ターンキー ワークフローを使用して MATLAB 設計でスタンドアロン FPGA をプログラムする方法を示します。

この例のターゲット デバイスは Xilinx® Virtex-5 ML506 開発ボードです。

はじめに

この例では、関数 'mlhdlc_ip_core_led_blinking' は、FPGA ボード上の LED を点滅させるカウンターをモデル化します。

2 つの入力端子 Blink_frequency および Blink_direction は LED の点滅頻度および方向を決定する制御端子です。

ハードウェアの入力値は、Xilinx® Virtex-5 ML506 開発ボードのプッシュボタンで調整できます。設計関数 'LED' の出力端子は、LED ハードウェアに接続します。

design_name = 'mlhdlc_turnkey_led_blinking';
testbench_name = 'mlhdlc_turnkey_led_blinking_tb';

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

type(design_name);
function [LED, Read_back] = mlhdlc_turnkey_led_blinking(Blink_frequency, Blink_direction)
%

%   Copyright 2013-2015 The MathWorks, Inc.

persistent freqCounter LEDCounter

if isempty(freqCounter)
    freqCounter = 0;
    LEDCounter = 255;
end

if Blink_frequency <= 0
    Blink_frequency = 0;
elseif Blink_frequency >= 15
    Blink_frequency = 15;
end

blinkFrequencyOut = LookupTable(Blink_frequency);
if blinkFrequencyOut == freqCounter
    freqMatch = 1;
else
    freqMatch = 0;
end

freqCounter = freqCounter + 1;

if freqMatch
    freqCounter = 0;
end

if Blink_direction
    LED = 255 - LEDCounter;
else
    LED = LEDCounter;
end

if LEDCounter == 255
    LEDCounter = 0;
elseif freqMatch
    LEDCounter = LEDCounter + 1;
end

Read_back = LED;
end


function y = LookupTable(idx)
s =  2.^(26:-1:11)';

y = s(idx+1);
end
type(testbench_name);

%

%   Copyright 2013-2015 The MathWorks, Inc.

for i=1:16
    [yout, ~] = mlhdlc_turnkey_led_blinking(i-1, 0);
    [yout2, ~] = mlhdlc_turnkey_led_blinking(i-1, 1);
end

新規フォルダーの作成と関連ファイルのコピー

次のコードを実行して、必要なサンプル ファイルを一時フォルダーにコピーします。

mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos');
mlhdlc_temp_dir = [tempdir 'mlhdlc_turnkey_led_blinking'];

% Create a temporary folder and copy the MATLAB files.
cd(tempdir);
[~, ~, ~] = rmdir(mlhdlc_temp_dir, 's');
mkdir(mlhdlc_temp_dir);
cd(mlhdlc_temp_dir);

copyfile(fullfile(mlhdlc_demo_dir, [design_name,'.m*']), mlhdlc_temp_dir);
copyfile(fullfile(mlhdlc_demo_dir, [testbench_name,'.m*']), mlhdlc_temp_dir);

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

coder -hdlcoder -new mlhdlc_turnkey_led_blinking_prj

次に、'mlhdlc_turnkey_led_blinking.m' ファイルを [MATLAB 関数] としてプロジェクトに追加し、'mlhdlc_turnkey_led_blinking_tb.m' を [MATLAB テスト ベンチ] として追加します。

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

設計を固定小数点に変換

1.[入力の型を定義] タスクを右クリックして [このタスクを実行] を選択します。

2. [固定小数点の変換] タスクで [詳細設定] をクリックし、[シミュレーションの最小/最大値に対する安全余裕 (%)] を 0 に設定します。

3. 変数 freqCounter の [推奨された型] 列に「numerictype(0, 27, 0)」と入力することで、その推奨された型を符号なし 27 ビット整数に設定します。

4.左側の [固定小数点の変換] タスクを右クリックして [このタスクを実行] を選択します。

設計端子をターゲット インターフェイスにマッピング

[コード生成ターゲットを選択] タスクで、次のように [FPGA ターンキー] ワークフローと [Xilinx Virtex-5 ML506 development board] を選択します。

1.[ワークフロー][FPGA ターンキー] を選択します。

2. [プラットフォーム][Xilinx Virtex-5 ML506 development board] を選択します。ターゲット デバイスがリストにない場合は、[さらに取得] を選択してサポート パッケージをダウンロードします。[チップ ファミリ][デバイス][パッケージ] および [速度] は、プラットフォームの選択に応じて自動的に設定されます。

3. FPGA クロック周波数については、[入力][システム] の両方に「100」と入力します。

4.[ターゲット インターフェイスを設定] タスクで、[ターゲット プラットフォーム インターフェイス] 列のフィールドを次のように設定して、設計の入力端子と出力端子をターゲット デバイスのインターフェイスにマッピングします。

  1. Blink_frequency_1 を [User Push Buttons N-E-S-W-C [0:4]]

  1. Blink_direction を [User Push Buttons N-E-S-W-C [0:4]]

  1. LED を [LEDs General Purpose [0:7]]

'Read_back' 端子はマッピングしないままでかまいません。

プログラミング ファイルを生成してハードウェアにダウンロード

既定の設定を使用してコードを生成し、合成と解析を実行して設計をターゲット ハードウェアにダウンロードできます。

1.[合成と解析] タスク グループで、[この手順をスキップ] オプションをオフにします。

2. [ターゲットにダウンロード] タスク グループで、[この手順をスキップ] オプションをオフにします。

3. [ターゲットにダウンロード]、[プログラミング ファイルを生成] を右クリックして [選択したタスクまで実行] を選択します。

4.ターゲット ハードウェアが接続されていてプログラムする準備ができている場合は、[ターゲット デバイスをプログラム] サブタスクを選択して [実行] をクリックします。

生成ファイルのクリーンアップ

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

mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos');
mlhdlc_temp_dir = [tempdir 'mlhdlc_turnkey_led_blinking'];
clear mex;
cd (mlhdlc_demo_dir);
rmdir(mlhdlc_temp_dir, 's');