ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … ·...

56
1 © 2013 The MathWorks, Inc. ついに出た、 SimulinkによるプログラマブルSoCデバイスへの 実装ワークフロー MathWorks Japan アプリケーションエンジニアリング部 松本 充史

Transcript of ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … ·...

Page 1: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

1 © 2013 The MathWorks, Inc.

ついに出た、 SimulinkによるプログラマブルSoCデバイスへの実装ワークフロー

MathWorks Japan

アプリケーションエンジニアリング部

松本 充史

Page 2: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

2

アイデアをいち早く実現するには?

Page 3: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

3

アイデア~シミュレーション~実装~検証

Page 4: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

4

C/HDLコード生成関連製品の歴史

1994 2000 2010 2006 2013

半年ごとのバージョンアップ毎に新機能を追加

2005 1995

2006 Simulink HDL Coder

2013 Programmable SoC Support

(Embedded Coder+HDL Coder)

2002 RTW Embedded Coder

R2013bからプログラマブルSoCサポート開始

1994 Real-Time Workshop(RTW)

Page 5: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

5

アジェンダ

プログラマブル SoCとは?

従来の手作業によるワークフローの課題

Simulinkモデルのセマンティックス

– ソフトウェア/ハードウェア実装

– Simulinkブロック

デモビデオ ~モータ制御モデルからZynq実装~

プログラマブル SoC実装フロー詳細

– HDL CoderによるIPコア生成

– Embedded CoderによるCコード生成~検証

補足:ハードウェアサポートパッケージのインストール

Page 6: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

6

アジェンダ

プログラマブル SoCとは?

従来の手作業によるワークフローの課題

Simulinkモデルのセマンティックス

– ソフトウェア/ハードウェア実装

– Simulinkブロック

デモビデオ ~モータ制御モデルからZynq実装~

プログラマブル SoC実装フロー詳細

– HDL CoderによるIPコア生成

– Embedded CoderによるCコード生成~検証

補足:ハードウェアサポートパッケージのインストール

Page 7: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

7

プログラマブル SoCとは?

ソフトウェア/ハードウェア両方をプログラム可能なデバイス

ARM Cortex-A9 メディア

プロセッサとプログラマブル

ロジック(FPGA)を搭載

ARMとFPGA間はAXIバスのインターコネクト

I/Oとペリフェラル:メモリコントローラ、トランシーバ、UART、CANなど

Altera SoC, Xilinx Zynq

FPGA

ARM

Cortex-A9

ARM

Cortex-A9

I/O &

Perp

hera

ls

Page 8: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

8

プログラマブル SoCを使うメリットは?

CPUユーザにとってのメリット

– 演算能力をFPGAで拡大

FPGAユーザにとってのメリット

– ソフトコアCPUより高性能

– 汎用プロセッサの利用による移植の

容易性、設計資産活用

両者にとってのメリット

– CPU-FPGA間通信の高速化

– インターコネクト設計の簡素化

– 基板の小面積化

Perip

hera

ls

Perip

hera

ls

CPU

FPGA

CPU

+

FPGA

Page 9: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

9

アジェンダ

プログラマブル SoCとは?

従来の手作業によるワークフローの課題

Simulinkモデルのセマンティックス

– ソフトウェア/ハードウェア実装

– Simulinkブロック

デモビデオ ~モータ制御モデルからZynq実装~

プログラマブル SoC実装フロー詳細

– HDL CoderによるIPコア生成

– Embedded CoderによるCコード生成

補足:ハードウェアサポートパッケージのインストール

Page 10: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

10

従来の手作業によるワークフローの課題

ソフトウェア開発者にとっての課題

– FPGAってどうやって設計するの?

– どの処理をFPGAにやらせればいいか?

ARM

Processor C Code

Software

Page 11: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

11

従来の手作業によるワークフローの課題

ハードウェア開発者にとっての課題

– ARMプロセッサってどうやってプログラミング

するの?

– どの処理をプロセッサにやらせればいいか?

FPGA HDL Code

Hardware

Page 12: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

12

従来の手作業によるワークフローの課題

システム設計者にとっての課題

– インターフェースの設計は?

– CHDL間での処理の移植

– 統合テストは実機で行うしか方法がない?

– SW/HW設計者の知識共有手段は?

Interface FPGA

HDL Code

Hardware

ARM

Processor C Code

Software

Page 13: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

13

統合プラットフォームSimulink

統合シミュレーション~実装~実機検証が可能

ARM/FPGA実装用コントローラ 制御対象物理モデル

ARM FPGA

Page 14: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

14

アジェンダ

プログラマブル SoCとは?

従来の手作業によるワークフローの課題

Simulinkモデルのセマンティックス

– ソフトウェア/ハードウェア実装

– Simulinkブロック

デモビデオ ~モータ制御モデルからZynq実装~

プログラマブル SoC実装フロー詳細

– HDL CoderによるIPコア生成

– Embedded CoderによるCコード生成~検証

補足:ハードウェアサポートパッケージのインストール

Page 15: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

15

Simulink:ソフトウェア実装時のセマンティックス

void DUT_SW_step(void)

{

int16_T rtb_Add1;

rtb_Add1 = (int16_T)((3 * DUT_SW_U.In1 +

5 * DUT_SW_U.In2) -

DUT_SW_DW.Delay_DSTATE);

/* Outport: '<Root>/Out1' */

DUT_SW_Y.Out1 = rtb_Add1;

/* Update for Delay: '<S1>/Delay' */

DUT_SW_DW.Delay_DSTATE = rtb_Add1;

}

生成されたCコード

元モデル

プロセッサ上では逐次処理

サンプル時間(タスク呼び出しサイクル)ごとに一連の処理が実行

遅延(Delay)は1サンプル時間の遅延

Page 16: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

16

Simulink:ソフトウェア実装時のセマンティックス

void DUT_SW_step(void)

{

int16_T rtb_Add1;

rtb_Add1 = (int16_T)((3 * DUT_SW_U.In1 +

5 * DUT_SW_U.In2) -

DUT_SW_DW.Delay_DSTATE);

/* Outport: '<Root>/Out1' */

DUT_SW_Y.Out1 = rtb_Add1;

/* Update for Delay: '<S1>/Delay' */

DUT_SW_DW.Delay_DSTATE = rtb_Add1;

}

生成されたCコード

元モデル

プロセッサ上では逐次処理

サンプル時間(タスク呼び出しサイクル)ごとに一連の処理が実行

遅延(Delay)は1サンプル時間の遅延

Page 17: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

17

void DUT_SW_step(void)

{

int16_T rtb_Add1;

rtb_Add1 = (int16_T)((3 * DUT_SW_U.In1 +

5 * DUT_SW_U.In2) -

DUT_SW_DW.Delay_DSTATE);

/* Outport: '<Root>/Out1' */

DUT_SW_Y.Out1 = rtb_Add1;

/* Update for Delay: '<S1>/Delay' */

DUT_SW_DW.Delay_DSTATE = rtb_Add1;

}

生成されたCコード

元モデル

Simulink:ソフトウェア実装時のセマンティックス

プロセッサ上では逐次処理

サンプル時間(タスク呼び出しサイクル)ごとに一連の処理が実行

遅延(Delay)は1サンプル時間の遅延

Page 18: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

18

void DUT_SW_step(void)

{

int16_T rtb_Add1;

rtb_Add1 = (int16_T)((3 * DUT_SW_U.In1 +

5 * DUT_SW_U.In2) -

DUT_SW_DW.Delay_DSTATE);

/* Outport: '<Root>/Out1' */

DUT_SW_Y.Out1 = rtb_Add1;

/* Update for Delay: '<S1>/Delay' */

DUT_SW_DW.Delay_DSTATE = rtb_Add1;

}

生成されたCコード

元モデル

Simulink:ソフトウェア実装時のセマンティックス

プロセッサ上では逐次処理

サンプル時間(タスク呼び出しサイクル)ごとに一連の処理が実行

遅延(Delay)は1サンプル時間の遅延

Page 19: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

19

void DUT_SW_step(void)

{

int16_T rtb_Add1;

rtb_Add1 = (int16_T)((3 * DUT_SW_U.In1 +

5 * DUT_SW_U.In2) -

DUT_SW_DW.Delay_DSTATE);

/* Outport: '<Root>/Out1' */

DUT_SW_Y.Out1 = rtb_Add1;

/* Update for Delay: '<S1>/Delay' */

DUT_SW_DW.Delay_DSTATE = rtb_Add1;

}

生成されたCコード

元モデル

Simulink:ソフトウェア実装時のセマンティックス

プロセッサ上では逐次処理

サンプル時間(タスク呼び出しサイクル)ごとに一連の処理が実行

遅延(Delay)は1サンプル時間の遅延

Page 20: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

20

void DUT_SW_step(void)

{

int16_T rtb_Add1;

rtb_Add1 = (int16_T)((3 * DUT_SW_U.In1 +

5 * DUT_SW_U.In2) -

DUT_SW_DW.Delay_DSTATE);

/* Outport: '<Root>/Out1' */

DUT_SW_Y.Out1 = rtb_Add1;

/* Update for Delay: '<S1>/Delay' */

DUT_SW_DW.Delay_DSTATE = rtb_Add1;

}

生成されたCコード

元モデル

Simulink:ソフトウェア実装時のセマンティックス

プロセッサ上では逐次処理

サンプル時間(タスク呼び出しサイクル)ごとに一連の処理が実行

遅延(Delay)は1サンプル時間の遅延

Page 21: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

21

void DUT_SW_step(void)

{

int16_T rtb_Add1;

rtb_Add1 = (int16_T)((3 * DUT_SW_U.In1 +

5 * DUT_SW_U.In2) -

DUT_SW_DW.Delay_DSTATE);

/* Outport: '<Root>/Out1' */

DUT_SW_Y.Out1 = rtb_Add1;

/* Update for Delay: '<S1>/Delay' */

DUT_SW_DW.Delay_DSTATE = rtb_Add1;

}

生成されたCコード

元モデル

Simulink:ソフトウェア実装時のセマンティックス

プロセッサ上では逐次処理

サンプル時間(タスク呼び出しサイクル)ごとに一連の処理が実行

遅延(Delay)は1サンプル時間の遅延

Page 22: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

22

Simulink:ハードウェア実装時のセマンティックス

always @(posedge clk or posedge reset)

begin : FF0_process

if (reset == 1'b1) begin

FF0_out1 <= 8'sb00000000;

end

else begin

FF0_out1 <= In1;

end

end

assign Gain0_out1 = 3 * FF0_out1;

always @(posedge clk or posedge reset)

begin : FF1_process

. . . .

end

assign Gain1_out1 = 5 * FF1_out1;

assign Add_out1 = Gain_out1 + Gain1_out1;

CLKサイクルで並列動作

並列/逐次処理を表現可

Delayブロック(FF)は暗黙的なCLKで動作

遅延(Delay)はCLK周期の遅延(≠ サンプル時間)

そのままではソフトウェア用モデルと動作が異なる

生成されたHDLコード

元モデル

Page 23: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

23

Simulink:ハードウェア実装時のセマンティックス

always @(posedge clk or posedge reset)

begin : FF0_process

if (reset == 1'b1) begin

FF0_out1 <= 8'sb00000000;

end

else begin

FF0_out1 <= In1;

end

end

assign Gain0_out1 = 3 * FF0_out1;

always @(posedge clk or posedge reset)

begin : FF1_process

. . . .

end

assign Gain1_out1 = 5 * FF1_out1;

assign Add_out1 = Gain_out1 + Gain1_out1;

CLKサイクルで並列動作

並列/逐次処理を表現可

Delayブロック(FF)は暗黙的なCLKで動作

遅延(Delay)はCLK周期の遅延(≠ サンプル時間)

そのままではソフトウェア用モデルと動作が異なる

CLK = 50MHzの場合、入力は20ns後にFFで更新されて出力

元モデル

生成されたHDLコード

Page 24: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

24

Simulink:ハードウェア実装時のセマンティックス

always @(posedge clk or posedge reset)

begin : FF0_process

if (reset == 1'b1) begin

FF0_out1 <= 8'sb00000000;

end

else begin

FF0_out1 <= In1;

end

end

assign Gain0_out1 = 3 * FF0_out1;

always @(posedge clk or posedge reset)

begin : FF1_process

. . . .

end

assign Gain1_out1 = 5 * FF1_out1;

assign Add_out1 = Gain_out1 + Gain1_out1;

CLKサイクルで並列動作

並列/逐次処理を表現可

Delayブロック(FF)は暗黙的なCLKで動作

遅延(Delay)はCLK周期の遅延(≠ サンプル時間)

そのままではソフトウェア用モデルと動作が異なる

元モデル

生成されたHDLコード

Page 25: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

25

Simulink:ハードウェア実装時のセマンティックス

always @(posedge clk or posedge reset)

begin : FF0_process

if (reset == 1'b1) begin

FF0_out1 <= 8'sb00000000;

end

else begin

FF0_out1 <= In1;

end

end

assign Gain0_out1 = 3 * FF0_out1;

always @(posedge clk or posedge reset)

begin : FF1_process

. . . .

end

assign Gain1_out1 = 5 * FF1_out1;

assign Add_out1 = Gain_out1 + Gain1_out1;

元モデル

CLKサイクルで並列動作

並列/逐次処理を表現可

Delayブロック(FF)は暗黙的なCLKで動作

遅延(Delay)はCLK周期の遅延(≠ サンプル時間)

そのままではソフトウェア用モデルと動作が異なる

生成されたHDLコード

Page 26: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

26

Simulink:ハードウェア実装時のセマンティックス

always @(posedge clk or posedge reset)

begin : FF0_process

if (reset == 1'b1) begin

FF0_out1 <= 8'sb00000000;

end

else begin

FF0_out1 <= In1;

end

end

assign Gain0_out1 = 3 * FF0_out1;

always @(posedge clk or posedge reset)

begin : FF1_process

. . . .

end

assign Gain1_out1 = 5 * FF1_out1;

assign Add_out1 = Gain_out1 + Gain1_out1;

元モデル

CLKサイクルで並列動作

並列/逐次処理を表現可

Delayブロック(FF)は暗黙的なCLKで動作

遅延(Delay)はCLK周期の遅延(≠ サンプル時間)

そのままではソフトウェア用モデルと動作が異なる

生成されたHDLコード

Page 27: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

27

Simulink:ハードウェア実装時のセマンティックス

always @(posedge clk or posedge reset)

begin : Dly_process

if (reset == 1'b1) begin

Dly_out1 <= 13'sb0000000000000;

end

else begin

Dly_out1 <= Add1_out1;

end

end

assign Add1_out1 = Add_out1 - Dly_out1;

元モデル

CLKサイクルで並列動作

並列/逐次処理を表現可

Delayブロック(FF)は暗黙的なCLKで動作

遅延(Delay)はCLK周期の遅延(≠ サンプル時間)

そのままではソフトウェア用モデルと動作が異なる

生成されたHDLコード

Page 28: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

28

Simulink:ハードウェア実装時のセマンティックス

元モデル 論理合成後の回路図

論理合成

Simulink基本ブロックで構成された

元モデルと合成後の回路構成は近似

Simulinkではベクタ信号や高抽象度

ブロックによりさらに構造を簡素化可能

Simulinkは抽象度の高い回路図イメージ

Page 29: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

29

補足:Simulinkモデリングテクニック例

Enabled Subsystemを使うことで実行周期をコントロール

⇒ハードウェアとソフトウェアの処理を等価にすることが可能

Page 30: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

30

設計対象用Simulinkブロック

低抽象度~高抽象度ブロック

アプリケーション別オプション

– 信号処理、制御、通信、画像など

コード生成対応

– ほぼ全てCコード生成対応

– 一部がHDLコード生成対応

Page 31: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

31

テストベンチ、制御対象用Simulinkブロック

可視化・解析用ブロック

信号生成、任意波形生成

HWデバイス信号

– ビデオ、通信、オーディオ

物理モデル

– モータ、アナログ回路、電源

– バッテリー、メカ

Page 32: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

32

Simulinkの特長まとめ

コードに比べて可読性が良好

ソフトウェア/ハードウェアの処理記述、低~高抽象度

実装だけでなく優れた検証環境

– 設計対象・制御対象に対応したブロック

– 信号生成・ハードウェアデバイス・可視化・解析用ブロック

実行可能な仕様書

Page 33: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

33

アジェンダ

プログラマブル SoCとは?

従来の手作業によるワークフローの課題

Simulinkモデルのセマンティックス

– ソフトウェア/ハードウェア実装

– Simulinkブロック

デモビデオ ~モータ制御モデルからZynq実装~

プログラマブル SoC実装フロー詳細

– HDL CoderによるIPコア生成

– Embedded CoderによるCコード生成~検証

補足:ハードウェアサポートパッケージのインストール

Page 34: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

34

プログラマブルSoC実装フロー概要

ユーザがサブシステムを分割

コードとインターフェース

を生成

Xilinxツールと連携して

コンパイルとダウンロード

実装

統合

設計

リアルタイムパラメータチューニング

& 検証

アルゴリズム 要求仕様

Cコード HDLコード

HDL Coder™ Embedded

Coder®

システムモデル

ソフトウェア

モデル

ハードウェア

モデル

Zynq テンプレート

Xilinx Embedded System Integration 実機の機能検証

Page 36: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

36

アジェンダ

プログラマブル SoCとは?

従来の手作業によるワークフローの課題

Simulinkモデルのセマンティックス

– ソフトウェア/ハードウェア実装

– Simulinkブロック

デモビデオ ~モータ制御モデルからZynq実装~

プログラマブル SoC実装フロー詳細

– HDL CoderによるIPコア生成

– Embedded CoderによるCコード生成

補足:ハードウェアサポートパッケージのインストール

Page 37: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

37

コントローラ

(実装対象)

モータ制御モデルのシミュレーション

MATLAB/Simulink アルゴリズム開発とシステム設計

プラント

(制御対象)

Page 38: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

38

コントローラ

(実装対象)

モータ制御モデルのシミュレーション

MATLAB/Simulink アルゴリズム開発とシステム設計

FPGA

AXI

AXI

ARM

CPU CLK = 667MHz

Fs = 5kHz

FPGA

Fs = 50MHz

Ext Ext

Page 39: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

39

FPGA

ARM

Simulinkモデル

AXIインターフェースを持ったIPコア生成 HDL Coder

Programmable Logic IP Core

Algorithm

from

MATLAB/

Simulink

AXI Lite

Accessible

Registers

AXI4-Stream Video In

AXI4-Stream Video Out

External

Ports

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

AXI AXI

Ext Ext

Page 40: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

40

HDLワークフローアドバイザの機能

デバイス設定、FPGAプロジェクト生成(QuartusII, ISE)

インターフェース設定

(AXIバス、外部ピン)

HDLチェック・生成・検証

論理合成・配置配線・FPGAプログラム(QuartusII, ISEと連携)

統合ツール(XPS)へエクスポート

クリティカルパスの表示

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

Page 41: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

41

HDLワークフローアドバイザが提供するワークフロー

IP Core Generation(プログラマブルSoC用)

– AXIバスインターフェースと定義ファイル生成

Generic FPGA

– HDL生成、コンパイル、クリティカルパス表示

FPGA-in-the-Loop

– SimulinkテストベンチによるFPGA検証用モデルの生成

FPGA Turnkey

– 外部ピン設定をしてスタンドアローン実装

xPC Target FPGA I/O

– xPC専用FPGA I/Oボードのカスタマイズ

Customization for an SDR Platform

– ソフトウェア無線プラットフォーム(ML605+ADI RF,

USRP)FPGAのカスタマイズ

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

Page 42: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

42

IPコア生成で対応するAXIバス

Programmable Logic IP Core

Algorithm

from

MATLAB/

Simulink

AXI Lite

Accessible

Registers

AXI4-Stream Video In

AXI4-Stream Video Out

External

Ports

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

AXI4インターフェースタイプ

– AXI4-Lite

単一トランザクションのメモリマップ、低速

使用例

パラメータチューニング

制御ロジック

コントローラ

(実装対象)

FPGA

AXI

AXI

ARM

Ext Ext

Page 43: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

43

HDL CoderによるIPコア生成

Programmable Logic IP Core

Algorithm

from

MATLAB/

Simulink

AXI Lite

Accessible

Registers

AXI4-Stream Video In

AXI4-Stream Video Out

External

Ports

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

AXI4インターフェースタイプ

– AXI4-Lite

単一トランザクションのメモリマップ、低速

使用例

パラメータチューニング、制御ロジック

– AXI4-Stream

(R2013bではXilinx対応のみ)

使用例

通信など1D信号

– AXI-VDMA

(カスタムで対応)

高速転送インターフェース

使用例

映像など2D信号

Page 44: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

44

Programmable Logic IP Core

Algorithm

from

MATLAB/

Simulink

AXI Lite

Accessible

Registers

AXI4-Stream Video In

AXI4-Stream Video Out

External

Ports

HDL IPコアの組込システム統合

Xilinx Embedded System Project

A X

I 4 - L

i t e

Processing

System

Programmable Logic IP Core

Algorithm

from

MATLAB /

Simulink

AXI Lite

Accessible

Registers

AXI

Video

DMA

AXI 4 - Stream Video In

AXI 4 - Stream Video Out

External

Ports

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

組込システム統合

プログラマブル SoC

コンフィギュレーション

Page 45: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

45

HDLコード生成レポート

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

組込システム統合

プログラマブル SoC

コンフィギュレーション

HDL Coderが生成した

HDLコード生成レポート

Page 46: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

46

HDLコード生成レポート

ターゲットモデルのHDL

– リソース情報

– ブロック-HDLの対応一覧

– 最適化結果(リソース共有、パイプライン挿入)

– HDLソース

IPコア情報

– インターフェース(外部ピン、AXI4)

– AXI4-Liteレジスタアドレスマップ

– AXI4インターフェースHDLコード

– XPS(Xilinx Platform Studio)用

IPコア定義ファイル

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

組込システム統合

プログラマブル SoC

コンフィギュレーション

HDLコード生成レポートの内容

Page 47: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

47

SWインターフェースモデルを自動生成

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

組込システム統合

プログラマブル SoC

コンフィギュレーション

SW インターフェース

モデル生成

FPGA

ARM

Simulinkモデル

AXI AXI AXI AXI

ARM

SWインターフェース

モデル

FPGA

I/Oドライバ

ブロック

Write

Read

Page 48: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

48

SWインターフェースモデルを自動生成

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

組込システム統合

プログラマブル SoC

コンフィギュレーション

SW インターフェース

モデル生成 HDL CoderがAXIデバイスドライバブロックを含んだ

モデルを自動生成

FPGA

ARM

Simulinkモデル

AXI AXI AXI AXI

Page 49: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

49

Embedded CoderによるCコード生成

1. AXI4デバイスドライバブロックを含んだモデルからCコード生成

2. 生成したCコードをFPGAベンダ提供のクロスコンパイラでビルド

3. 実行ファイルをARMのLinux OS上にダウンロード、実行

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

組込システム統合

プログラマブル SoC

コンフィギュレーション

SW インターフェース

モデル生成

SW インターフェース

モデル生成

Cコード生成/ビルド Embedded Coder

ARM

SWインターフェース

モデル

FPGA

Write

Read

Page 50: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

50

Embedded CoderによるCコード生成

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

組込システム統合

プログラマブル SoC

コンフィギュレーション

SW インターフェース

モデル生成

SW インターフェース

モデル生成

Cコード生成/ビルド Embedded Coder

メインルーチンはタイマーによる周期タスク(Ts = 5kHz)

モデルから生成された

処理コード

Embedded Coderが生成した

Cコード生成レポート

Page 51: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

51

プロトタイプ検証に役立つ実行モード

External Mode

– SimulinkとARMがEthernet通信

– リアルタイム実行

– パラメータチューニング

波形モニター

エクスターナル

モード

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

組込システム統合

プログラマブル SoC

コンフィギュレーション

SW インターフェース

モデル生成

SW インターフェース

モデル生成

Cコード生成/ビルド Embedded Coder

Ethernet通信

Page 52: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

52

プロトタイプ検証に役立つ実行モード

スタンドアローン実行

– 独立して動作

– Signal Builderブロックのテストベクタの使用が可能

– 動作状況ロギング~ファイル

保存~PCにアップロード

HDL IPコア生成

HDL Coder

MATLAB/Simulink アルゴリズム開発とシステム設計

組込システム統合

プログラマブル SoC

コンフィギュレーション

SW インターフェース

モデル生成

SW インターフェース

モデル生成

Cコード生成/ビルド Embedded Coder

Page 53: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

53

アジェンダ

プログラマブル SoCとは?

従来の手作業によるワークフローの課題

Simulinkモデルのセマンティックス

– ソフトウェア/ハードウェア実装

– Simulinkブロック

デモビデオ ~モータ制御モデルからZynq実装~

プログラマブル SoC実装フロー詳細

– HDL CoderによるIPコア生成

– Embedded CoderによるCコード生成~検証

補足:ハードウェアサポートパッケージのインストール

Page 54: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

54

補足:ハードウェアサポートパッケージのインストール

必要ライセンス

Embedded Coder + HDL Coder

1. アドオンメニューから「ハードウェアサポートパッケージの入手」を選択

2. 所有ライセンスに対応した

パッケージ一覧からZynq-

7000を選択

3. Embedded Coderと

HDL Coderのパッケージをインストール

Page 55: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

55

補足:製品付属デモとGetting Started

1. ヘルプの左下にあるリンク

「補足ソフトウェア」を選択

2. 補助ソフトウェア用ヘルプウィンドウにZynqボードセットアップ手順が記載

Page 56: ついに出た! SimulinkによるプログラマブルSoCデバイス への実 … · Simulink:ソフトウェア実装時のセマンティックス プロセッサ上では逐次処理

56

まとめ

プログラマブルSoC実装ワークフローをご紹介

– HDL CoderによるHDL IPコア生成

– Embedded CoderによるCコード生成

– システム統合

FPGAベンダツールとSimulinkの連携によりシームレスな実装フローを実現

SW/HWに依存しないモデルからの実装

Simulinkは優れたテスト環境

制御対象モデリング、可視化、解析機能

リアルタイムパラメータチューニング、ファイルにロギング

プログラマブルSoC対応機能は今後更なる発展