Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
1 © 2013 The MathWorks, Inc.
ついに出た、 SimulinkによるプログラマブルSoCデバイスへの実装ワークフロー
MathWorks Japan
アプリケーションエンジニアリング部
松本 充史
2
アイデアをいち早く実現するには?
3
アイデア~シミュレーション~実装~検証
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)
5
アジェンダ
プログラマブル SoCとは?
従来の手作業によるワークフローの課題
Simulinkモデルのセマンティックス
– ソフトウェア/ハードウェア実装
– Simulinkブロック
デモビデオ ~モータ制御モデルからZynq実装~
プログラマブル SoC実装フロー詳細
– HDL CoderによるIPコア生成
– Embedded CoderによるCコード生成~検証
補足:ハードウェアサポートパッケージのインストール
6
アジェンダ
プログラマブル SoCとは?
従来の手作業によるワークフローの課題
Simulinkモデルのセマンティックス
– ソフトウェア/ハードウェア実装
– Simulinkブロック
デモビデオ ~モータ制御モデルからZynq実装~
プログラマブル SoC実装フロー詳細
– HDL CoderによるIPコア生成
– Embedded CoderによるCコード生成~検証
補足:ハードウェアサポートパッケージのインストール
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
8
プログラマブル SoCを使うメリットは?
CPUユーザにとってのメリット
– 演算能力をFPGAで拡大
FPGAユーザにとってのメリット
– ソフトコアCPUより高性能
– 汎用プロセッサの利用による移植の
容易性、設計資産活用
両者にとってのメリット
– CPU-FPGA間通信の高速化
– インターコネクト設計の簡素化
– 基板の小面積化
Perip
hera
ls
Perip
hera
ls
CPU
FPGA
CPU
+
FPGA
9
アジェンダ
プログラマブル SoCとは?
従来の手作業によるワークフローの課題
Simulinkモデルのセマンティックス
– ソフトウェア/ハードウェア実装
– Simulinkブロック
デモビデオ ~モータ制御モデルからZynq実装~
プログラマブル SoC実装フロー詳細
– HDL CoderによるIPコア生成
– Embedded CoderによるCコード生成
補足:ハードウェアサポートパッケージのインストール
10
従来の手作業によるワークフローの課題
ソフトウェア開発者にとっての課題
– FPGAってどうやって設計するの?
– どの処理をFPGAにやらせればいいか?
ARM
Processor C Code
Software
11
従来の手作業によるワークフローの課題
ハードウェア開発者にとっての課題
– ARMプロセッサってどうやってプログラミング
するの?
– どの処理をプロセッサにやらせればいいか?
FPGA HDL Code
Hardware
12
従来の手作業によるワークフローの課題
システム設計者にとっての課題
– インターフェースの設計は?
– CHDL間での処理の移植
– 統合テストは実機で行うしか方法がない?
– SW/HW設計者の知識共有手段は?
Interface FPGA
HDL Code
Hardware
ARM
Processor C Code
Software
13
統合プラットフォームSimulink
統合シミュレーション~実装~実機検証が可能
ARM/FPGA実装用コントローラ 制御対象物理モデル
ARM FPGA
14
アジェンダ
プログラマブル SoCとは?
従来の手作業によるワークフローの課題
Simulinkモデルのセマンティックス
– ソフトウェア/ハードウェア実装
– Simulinkブロック
デモビデオ ~モータ制御モデルからZynq実装~
プログラマブル SoC実装フロー詳細
– HDL CoderによるIPコア生成
– Embedded CoderによるCコード生成~検証
補足:ハードウェアサポートパッケージのインストール
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サンプル時間の遅延
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サンプル時間の遅延
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サンプル時間の遅延
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サンプル時間の遅延
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サンプル時間の遅延
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サンプル時間の遅延
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サンプル時間の遅延
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コード
元モデル
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コード
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コード
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コード
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コード
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コード
28
Simulink:ハードウェア実装時のセマンティックス
元モデル 論理合成後の回路図
≒
論理合成
Simulink基本ブロックで構成された
元モデルと合成後の回路構成は近似
Simulinkではベクタ信号や高抽象度
ブロックによりさらに構造を簡素化可能
Simulinkは抽象度の高い回路図イメージ
29
補足:Simulinkモデリングテクニック例
Enabled Subsystemを使うことで実行周期をコントロール
⇒ハードウェアとソフトウェアの処理を等価にすることが可能
30
設計対象用Simulinkブロック
低抽象度~高抽象度ブロック
アプリケーション別オプション
– 信号処理、制御、通信、画像など
コード生成対応
– ほぼ全てCコード生成対応
– 一部がHDLコード生成対応
31
テストベンチ、制御対象用Simulinkブロック
可視化・解析用ブロック
信号生成、任意波形生成
HWデバイス信号
– ビデオ、通信、オーディオ
物理モデル
– モータ、アナログ回路、電源
– バッテリー、メカ
32
Simulinkの特長まとめ
コードに比べて可読性が良好
ソフトウェア/ハードウェアの処理記述、低~高抽象度
実装だけでなく優れた検証環境
– 設計対象・制御対象に対応したブロック
– 信号生成・ハードウェアデバイス・可視化・解析用ブロック
実行可能な仕様書
33
アジェンダ
プログラマブル SoCとは?
従来の手作業によるワークフローの課題
Simulinkモデルのセマンティックス
– ソフトウェア/ハードウェア実装
– Simulinkブロック
デモビデオ ~モータ制御モデルからZynq実装~
プログラマブル SoC実装フロー詳細
– HDL CoderによるIPコア生成
– Embedded CoderによるCコード生成~検証
補足:ハードウェアサポートパッケージのインストール
34
プログラマブルSoC実装フロー概要
ユーザがサブシステムを分割
コードとインターフェース
を生成
Xilinxツールと連携して
コンパイルとダウンロード
実装
統合
設計
リアルタイムパラメータチューニング
& 検証
アルゴリズム 要求仕様
Cコード HDLコード
HDL Coder™ Embedded
Coder®
システムモデル
ソフトウェア
モデル
ハードウェア
モデル
Zynq テンプレート
Xilinx Embedded System Integration 実機の機能検証
35
Demo Video: Zynqプロセッサによるモータ制御
ダウンロード
ftp://ftp.mathworks.com/outgoing/amatsumo/EXPO13ZynqMotor.wmv
36
アジェンダ
プログラマブル SoCとは?
従来の手作業によるワークフローの課題
Simulinkモデルのセマンティックス
– ソフトウェア/ハードウェア実装
– Simulinkブロック
デモビデオ ~モータ制御モデルからZynq実装~
プログラマブル SoC実装フロー詳細
– HDL CoderによるIPコア生成
– Embedded CoderによるCコード生成
補足:ハードウェアサポートパッケージのインストール
37
コントローラ
(実装対象)
モータ制御モデルのシミュレーション
MATLAB/Simulink アルゴリズム開発とシステム設計
プラント
(制御対象)
38
コントローラ
(実装対象)
モータ制御モデルのシミュレーション
MATLAB/Simulink アルゴリズム開発とシステム設計
FPGA
AXI
AXI
ARM
CPU CLK = 667MHz
Fs = 5kHz
FPGA
Fs = 50MHz
Ext Ext
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
40
HDLワークフローアドバイザの機能
デバイス設定、FPGAプロジェクト生成(QuartusII, ISE)
インターフェース設定
(AXIバス、外部ピン)
HDLチェック・生成・検証
論理合成・配置配線・FPGAプログラム(QuartusII, ISEと連携)
統合ツール(XPS)へエクスポート
クリティカルパスの表示
HDL IPコア生成
HDL Coder
MATLAB/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 アルゴリズム開発とシステム設計
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
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信号
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
コンフィギュレーション
45
HDLコード生成レポート
HDL IPコア生成
HDL Coder
MATLAB/Simulink アルゴリズム開発とシステム設計
組込システム統合
プログラマブル SoC
コンフィギュレーション
HDL Coderが生成した
HDLコード生成レポート
46
HDLコード生成レポート
ターゲットモデルのHDL
– リソース情報
– ブロック-HDLの対応一覧
– 最適化結果(リソース共有、パイプライン挿入)
– HDLソース
IPコア情報
– インターフェース(外部ピン、AXI4)
– AXI4-Liteレジスタアドレスマップ
– AXI4インターフェースHDLコード
– XPS(Xilinx Platform Studio)用
IPコア定義ファイル
HDL IPコア生成
HDL Coder
MATLAB/Simulink アルゴリズム開発とシステム設計
組込システム統合
プログラマブル SoC
コンフィギュレーション
HDLコード生成レポートの内容
47
SWインターフェースモデルを自動生成
HDL IPコア生成
HDL Coder
MATLAB/Simulink アルゴリズム開発とシステム設計
組込システム統合
プログラマブル SoC
コンフィギュレーション
SW インターフェース
モデル生成
FPGA
ARM
Simulinkモデル
AXI AXI AXI AXI
ARM
SWインターフェース
モデル
FPGA
I/Oドライバ
ブロック
Write
Read
48
SWインターフェースモデルを自動生成
HDL IPコア生成
HDL Coder
MATLAB/Simulink アルゴリズム開発とシステム設計
組込システム統合
プログラマブル SoC
コンフィギュレーション
SW インターフェース
モデル生成 HDL CoderがAXIデバイスドライバブロックを含んだ
モデルを自動生成
FPGA
ARM
Simulinkモデル
AXI AXI AXI AXI
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
50
Embedded CoderによるCコード生成
HDL IPコア生成
HDL Coder
MATLAB/Simulink アルゴリズム開発とシステム設計
組込システム統合
プログラマブル SoC
コンフィギュレーション
SW インターフェース
モデル生成
SW インターフェース
モデル生成
Cコード生成/ビルド Embedded Coder
メインルーチンはタイマーによる周期タスク(Ts = 5kHz)
モデルから生成された
処理コード
Embedded Coderが生成した
Cコード生成レポート
51
プロトタイプ検証に役立つ実行モード
External Mode
– SimulinkとARMがEthernet通信
– リアルタイム実行
– パラメータチューニング
波形モニター
エクスターナル
モード
HDL IPコア生成
HDL Coder
MATLAB/Simulink アルゴリズム開発とシステム設計
組込システム統合
プログラマブル SoC
コンフィギュレーション
SW インターフェース
モデル生成
SW インターフェース
モデル生成
Cコード生成/ビルド Embedded Coder
Ethernet通信
52
プロトタイプ検証に役立つ実行モード
スタンドアローン実行
– 独立して動作
– Signal Builderブロックのテストベクタの使用が可能
– 動作状況ロギング~ファイル
保存~PCにアップロード
HDL IPコア生成
HDL Coder
MATLAB/Simulink アルゴリズム開発とシステム設計
組込システム統合
プログラマブル SoC
コンフィギュレーション
SW インターフェース
モデル生成
SW インターフェース
モデル生成
Cコード生成/ビルド Embedded Coder
53
アジェンダ
プログラマブル SoCとは?
従来の手作業によるワークフローの課題
Simulinkモデルのセマンティックス
– ソフトウェア/ハードウェア実装
– Simulinkブロック
デモビデオ ~モータ制御モデルからZynq実装~
プログラマブル SoC実装フロー詳細
– HDL CoderによるIPコア生成
– Embedded CoderによるCコード生成~検証
補足:ハードウェアサポートパッケージのインストール
54
補足:ハードウェアサポートパッケージのインストール
必要ライセンス
Embedded Coder + HDL Coder
1. アドオンメニューから「ハードウェアサポートパッケージの入手」を選択
2. 所有ライセンスに対応した
パッケージ一覧からZynq-
7000を選択
3. Embedded Coderと
HDL Coderのパッケージをインストール
55
補足:製品付属デモとGetting Started
1. ヘルプの左下にあるリンク
「補足ソフトウェア」を選択
2. 補助ソフトウェア用ヘルプウィンドウにZynqボードセットアップ手順が記載
56
まとめ
プログラマブルSoC実装ワークフローをご紹介
– HDL CoderによるHDL IPコア生成
– Embedded CoderによるCコード生成
– システム統合
FPGAベンダツールとSimulinkの連携によりシームレスな実装フローを実現
SW/HWに依存しないモデルからの実装
Simulinkは優れたテスト環境
制御対象モデリング、可視化、解析機能
リアルタイムパラメータチューニング、ファイルにロギング
プログラマブルSoC対応機能は今後更なる発展