• 検索結果がありません。

Impulse Accelerated Technologies 社 ' Impulse 社は設立 3 年の新興ベンチャー米国ワシントン州シアトル郊外カークランド市社長 /CTO:David Pellerin ' FPGA 開発においても 時代が高度な抽象度の設計と協調設計手法を要求しているとの確信

N/A
N/A
Protected

Academic year: 2021

シェア "Impulse Accelerated Technologies 社 ' Impulse 社は設立 3 年の新興ベンチャー米国ワシントン州シアトル郊外カークランド市社長 /CTO:David Pellerin ' FPGA 開発においても 時代が高度な抽象度の設計と協調設計手法を要求しているとの確信"

Copied!
74
0
0

読み込み中.... (全文を見る)

全文

(1)

hwモジュール生成 

+ 組み込みCPUコアとのhw/sw協調設計

ツール

Impulse C

Ver2.1 InterLink InterLink InterLink InterLink 有限会社 インターリンクインターリンクインターリンクインターリンク

(2)

Impulse Accelerated Technologies 社

' Impulse 社は設立3年の新興ベンチャー

米国ワシントン州シアトル郊外 カークランド市 

社長/CTO:David Pellerin

' FPGA開発においても、時代が高度な抽象度の

設計と協調設計手法を要求しているとの確信

から会社設立して Impulse C を開発 

' Impulse C :Streams-C

(米国ロスアラモス国立研究所)

の商用化 =>

実績のあるStreams-C 合成コアを大改造 +  

シミュレーション機能拡張 + より使いやすく

(3)

内容

0. Impulse C とは ~何ができるか?

1. Impulse C 仕様

2. Impulse Cでの動作合成

3. CoDeveloperの構成

4. Impulse C ケース・スタディ

(4)

0. Impulse C とは

何ができるか?)

(5)

Impulse C で何ができるか?

' ANSI-C記述からHDLモジュール生成

' FPGA組み込みプロセッサMicroBlaze、PowerPC を使う

協調アプリケーションの効率的な開発環境を提供

 0.ANSI-C to RTL-HDL(VHDL/Verilog) モジュール合成

 1.既存ANSI-C開発環境( GNU 、VC++、….)を

  hw/sw協調設計開発環境に

 2.Xilinxの開発ツールEDK(XPS)との一体化

 3.設計IPとXilinxの組み込みIP( hw/sw )を自由に

  組み合わせてシステムアップ可能

(6)

Impulse Cモジュール と Xilinxツール

1. EDKだけでの使用(裏側でISEも)

' プラットフォームでの設計のみ

' CPU+ペリフェラル

2. EDK+ISE組合せ使用

' プラットフォーム+追加HDLロジック

3. ISE だけでの使用

' Generic HDL 出力の

(7)

Impulse C で何ができるか?

Impulse C + Xilinx EDK(

Xilinx Platform Studio)

=>

Xilinx FPGA設計に

「ANSI-C言語での協調設計」

による

SoC

設計 を 

(8)

Impulse C で何ができるか?

高い抽象度の設計

' hwは高い抽象度の設計

      => 

  「マイグレーション」が容易で「陳腐化」が防げる

  

hw<->sw 間のマイグレーションさえ可能

' ソフトウエア設計者のハード設計への参加

(9)

Impulse C 適応分野の例

S 高速での繰り返し計算を要求するシステム

S データフロー指向での高度な並行動作

S パイプライン・アルゴリズム(e.g. デジタル・フィルタ)

S データ・ストリームのリアルタイム処理

S 画像処理

S 通信

S 専用DSP(Digital Signal Processing)

~DSPチップのFPGAへの置き換え

(10)

Impulse C とは

ANSI-C記述でのhw/sw協調設計を

可能にするライブラリ仕様

=> 

Impulse C

設計入力とシミュレーションに

安価なGNU、Microsoftなどのツールが

使用できる

(11)

Impulse C とは

Impulse C仕様での

システム開発をサポートする

動作合成を含むツール

=>

CoDeveloper

Impulse C と CoDeveloper は

仕様とツールのペア

(12)

Impulse C 

 SystemC

の対比

現在LSI設計が主

主にFPGA組み込み

ターゲット

各種

CoDeveloper

開発システム

C++上で新しい

クラスライブラリ定義

ANSI-C上で新しい

データ型と

組込み関数定義

ハードウェアサポート

のための拡張方法

ISO C++

ANSI-C

言語

SystemC

Impulse C

両者とも新しい言語の導入ではなく

なく

なく

なくソフト開発標準言語上での実装

(13)

Impulse C 

 SystemC

の対比

(相違点)

言語:

ANSI-C

Ù

C++

追加仕様:

単純

Ù

複雑

表現能力:

単一のモデル(UTF) 

Ù 多岐に渡るモデル

* UTF= Untimed Functional Model

(14)

Impulse C/ CoDeveloper と Xilinx

Generic VHDL/Verilog

(Xilinx PSP サポート)

'Generic OPB

'MicroBlaze OPB

'MicroBlaze FSL

'Virtex II PRO PLB(PPC)

'MicroBlaze FSL uClinux

..….

CoDeveloper

ANSI-C

(15)

Xilinx のツール、リソース と CoDeveloper は

良い相性

 

Impulse C

(16)

Impulse C/ CoDeveloper と Xilinx

設計入力(ANSI-C)

シミュレーション

動作合成+IF生成

EDKプロジェクト

Xilinx

Xilinx

Xilinx

(17)

アプリケーションの記述

Design Assistant

Design Assistant

Design Assistant

Design Assistantダイアログ

ダイアログ

ダイアログ

ダイアログ

→記述支援

記述支援

記述支援

記述支援

(18)

デスクトップ・シミュレーション

シミュレーション

シミュレーション

シミュレーション

シミュレーション

実行

実行

実行

実行ファイル

ファイル

ファイルを

ファイル

を走行

走行

走行

走行

シミュレーション

シミュレーション

シミュレーション

シミュレーション

が実行

実行

実行される

実行

される

される

される

(19)

デスクトップ・シミュレーション

CoDeveloper

Application Monitor

プロセス

プロセス

プロセス

プロセス内

内の

の動作

動作

動作

動作を

を観測

観測

観測

観測

できるようにしている

できるようにしている

できるようにしている

できるようにしている

(20)

実装へのファイル生成

動作合成

動作合成

動作合成

動作合成を

を実行

実行

実行

実行

指定

指定

指定

指定ディレクトリ

ディレクトリ

ディレクトリ下

ディレクトリ

下に

'ハードウェア

ハードウェア

ハードウェア(

ハードウェア

(HDL

HDL

HDL)

HDL

'ソフトウェア

ソフトウェア

ソフトウェア(

ソフトウェア

(C

CC

C)

'ハード

ハード

ハード/

ハード

/ソフトインタフェース

ソフトインタフェース

ソフトインタフェース

ソフトインタフェース

ファイル

ファイル

ファイル

ファイルが

が生成

生成

生成

生成される

される

される

される

(21)

組み込みプロセッサとして  MicroBlaze/ PowerPC

をサポート

S/W

process

H/W

process

H/W

process

S/W

process

H/W

process

H/W

process

H/W process H/W process H/W process H/W process S/W process S/W process

MicroBlaze

又は

PowerPC

組み込みプ

ロセッサ

FPGA

ハードウェア

リソース

OPB、FSL、PLB インタフェース

VirtexⅡ / VirtexⅡPro / Spartan

Impulse C

アプリケーション

(22)

プロジェクトを作成

CoDeveloper→Xilinx Platform Studio

CoDeveloper

CoDeveloper

CoDeveloper

CoDeveloperの

のファイル

ファイル

ファイル

ファイル

をXPS

XPS(

XPS

XPS

(EDK

EDK

EDK)

EDK

)側

側で

で認識

認識

認識

認識

できる

できる

できる

できるディレクトリ

ディレクトリ

ディレクトリ

ディレクトリ構

成にて

にて

にて

にてファイル

ファイル

ファイルを

ファイル

を移送

移送

移送

移送

「どの

どの

どのファイル

どの

ファイル

ファイル

ファイルをどこへ

をどこへ

をどこへ置

をどこへ

置けばい

けばい

けばい

けばい

いのか

いのか

いのか

いのか?」

?」

?」

?」などと

などと

などと

などと悩

悩まないで

まないで

まないで

まないで良

良い

¥ ¥¥ ¥hwhwhwhw¥¥¥¥ハードウェアファイルハードウェアファイルハードウェアファイルハードウェアファイル ¥sw¥¥¥swswsw¥¥¥¥ソフトウェアファイルソフトウェアファイルソフトウェアファイルソフトウェアファイル ¥ ¥¥

¥EDKEDKEDKEDK¥¥¥¥EDKEDKEDKEDKファイルファイルファイルファイル

(23)

XPSのIPとして認識される

'

CoDeveloper

CoDeveloper

CoDeveloperが

CoDeveloper

が生成

生成した

生成

生成

した

した

したハードウェア

ハードウェア

ハードウェア

ハードウェア

をAdd/Core

Add/Core

Add/Coreダイヤログ

Add/Core

ダイヤログ

ダイヤログ

ダイヤログの

のリスト

リスト

リスト

リストに

に表示

表示

表示

表示

'

CoDeveloper

CoDeveloper

CoDeveloperから

CoDeveloper

から

から移行

から

移行された

移行

移行

された

された

されたソフトウェ

ソフトウェ

ソフトウェ

ソフトウェ

アや

やインタフェースファイル

インタフェースファイル

インタフェースファイルも

インタフェースファイル

も、

、然

然る

べき

べき

べき

べきディレクトリ

ディレクトリ

ディレクトリ下

ディレクトリ

下に

に置

置かれている

かれている

かれている

かれている

Xilinx

Xilinx

Xilinx

Xilinx Platform Studio

Platform Studio

Platform Studio

Platform Studioの

メニュー

メニュー

メニュー

メニュー[

[[

[Project]

Project]

Project]

Project]

(24)

配置配線及び実機確認

基板

基板

基板

基板の

の信号観測

信号観測

信号観測

信号観測の

の為

為の

ターミナルウィンドウ

ターミナルウィンドウ

ターミナルウィンドウ

ターミナルウィンドウ

実機

実機

実機

実機と

とデスクトップシミュ

デスクトップシミュ

デスクトップシミュ

デスクトップシミュ

レーション

レーション

レーション

レーションとで

とで

とで

とで同

同じ

じ内容

内容

内容

内容

先の

の過程

過程

過程で

過程

で行

行われた

われた

われた

われた

デスクトップシミュレーション

デスクトップシミュレーション

デスクトップシミュレーション

デスクトップシミュレーション

(25)

アプリケーションのソフト側プロセス例 

void hear_hello(co_stream hello_in) {int i; int hi = 0; #ifdef IMPULSE_C_TARGET   char dataDIPSW = 0; dataDIPSW= XGpio_mGetDataReg(XPAR_DIPSW_BASEADDR,1); XGpio_mSetDataReg(XPAR_LED_BASEADDR, 1, dataDIPSW); #endif

co_stream_open(hello_in, O_RDONLY, INT_TYPE(32)); for ( i = 0; i < 10; i++ ) {

co_stream_read(hello_in, &hi, sizeof(int)); #ifdef IMPULSE_C_TARGET

hi += dataDIPSW;

#else

hi += 10; #endif

printf("FPGA hardware says: %d¥n¥r", hi); } co_stream_close(hello_in); }

「「

「設計

設計した

設計

設計

した

した

したハード

ハード

ハード」

ハード

」 側

」」

側から

から

から送

から

送られて

られて

られて来

られて

来た

たデータ

データと

データ

データ

と、

LogiCORE GPIO 経由

経由

経由で

経由

で入力

入力した

入力

入力

した

した外部

した

外部

外部デップスイッチ

外部

デップスイッチ

デップスイッチ

デップスイッチ

の値

値を

を演算

演算

演算

演算

(26)

3重の「入れ子」構造

rdy eos Process component Top-level application stream en rdy eos data en data stream rdy eos stream Process component signal en data rdy

top: xxx_top.v/ xxx_top.vhd

com: xxx_com.v/ xxx_com.vhd

他:  xxx_top.v/ xxx_top.vhd を編集して

Impulse C 

 

 

 生成

生成

生成

生成モジュール

モジュール

モジュール

モジュール

Bus接続 ロジック

利用形態

利用形態

利用形態

利用形態:

::

((

(例

例)

))

)opb_xxx.vhd

(27)

組み込み/SOCに使う..….

' 協調設計の効率化

' 処理スピードが仕様を満たさないか

  クリチカル部分をハード化

(28)

組み込みにしか使えないか?

NO!

 

NO!

 

NO!

Impulse C/ CoDeveloper 

+ 

組み込みプロセッサ(MicroBlaze、PowerPC)

=>

In System デバッグ機能

の提供

=>

(29)
(30)

Impulse Cはどのように

ハードウェアを表現するのか?

ハードウェアのサポートには、

「並列動作」

「構造記述の表現」

(ネットリスト)

表現ができる仕掛けが必要

(31)

Impulse Cのハードウェア化サポート

' 並列動作モデル~

   CSP(Communicating Sequential Process)を

   元にした判り易いモデルを採用

' 構造記述表現 ~ コンフィギュレーション関数

  プロセスと通信要素(チャネル)の

  インスタンス化とネットリスト表現

' 仕掛けの実装 ~ ANSI-C上のライブラリとして

  この仕掛けを「

Impulse C

」と言う

(32)

「並列動作」モデル

S/W process

H/W process

H/W process

S/W process

CSP( Communicating Sequential Process )を元にした判り易いモデル

  システムを構成する機能単位

機能単位

機能単位

機能単位(プロセス

プロセス

プロセス)が、並列

プロセス

並列

並列に

並列

に動作

動作

動作しながら相互にデータを

動作

受け渡し、コントロールをし合って目的の機能を実現する

– データストリームとしてバッファリング通信チャネル(FIFO)を採用~制御付き

– データフロー、機能ユニット間メッセージ交換ベースの通信、ローカル/共有メモリ

のサポート

– プロセスレベルの並列化、パイプライン化(下図)

……

……

……

……

……

(33)

Impulse C 

' 各プロセスはCの関数=>

アルゴリズム水準

での機能表現

' プロセス間結合~ コンフィギュレーション関数

' プロセス単位でハード/ソフトの指定

' ハード実装では、各プロセスの処理は自動分析されて、

  ステートマシンとデータ・パスに明確に分けて合成

S/W process H/W process H/W process H/W process S/W process

(34)

Impulse C プロセスと4種類の通信チャネル

Software processes

set up data and perform non time-critical functions

Hardware processes are independently

C language

process

C language

process

Shared memory

block reads/writes

Stream

inputs

Stream

outputs

Register

inputs

Register

outputs

App Monitor

outputs

Signal

inputs

Signal

outputs

(35)

Shared memory

reads/writes

Stream

inputs

Stream

outputs

Signal

inputs

Signal

outputs

App Monitor

outputs cosim_logwindow_create () cosim_logwindow_write() cosim_logwindow_fwrite() コンフィギュレーション関数内で cosim_logwindow_init() コア コア コア コア部部部部

ANSI-C

記述記述記述記述 コンフィギュレーション関数内で co_stream_create() co_memory_readblock(),comemory_writeblock() co_stream_open(), co_stream_close() co_stream_read(),        co_stream_write() co_ssignal_wait(),       co_signal_post() コンフィギュレーション関数内で co_signal_create() コンフィギュレーション関数内で co_memory_create()

Impulse C

プロセス

(36)

通信チャネル(ハード化の場合)1/3

プロセス間のデータ転送、制御のプロトコルを実現する要素

S stream (制御付きFIFO)

S 処理スピードの異なる、もしくは一定しない

プロセス間の自動ハンドシェークを実現

S クロックの異なるプロセス・モジュール結合の整合

S FIFOバッファによるバッファリングリング

S 空のFIFOからは読み込めず、ステートマシンはデータが

準備されるまで止まる、満杯への書き込みも同様

en rdy eos data

(37)

S signal (ready制御付きレジスタ)

S 入力に「待ち」が必要な場合の「相手のready信号」

を待つ自動ハンドシェークを実現

S 「相手のready信号」がクロック同期で来るまで

ステートマシンは該当ヶ所で止まる

S データの転送だけでなく、同期、排他制御に使用

通信チャネル(ハード化の場合)2/3

プロセス間のデータ転送、制御のプロトコルを実現する要素 signal en data rdy

(38)

S register (単純なレジスタ)

S クロック毎に有効データが保障されている場合

S 有効性が別手段で確認できる場合

S Register チャネルによるステート・マシンの制御手

段は無い

S 外部IOに使いやすい

通信チャネル(ハード化の場合)3/3

プロセス間のデータ転送、制御のプロトコルを実現する要素 register en data

(39)

Impulse C のプロセス

S Cの関数として実装

S 引数のデータ型~通信チャネルデータへのポインタ

co_stream, co_signal, co_memory, co_register

S 特殊引数~コンパイル時パラメータ  co_parameter型

VHDLのgeneric値/ Verilog Parameter値

S 戻り値なし

void des_ic(co_stream filter_in, co_stream filter_out) { int32 data;

co_stream_open(filter_in, O_RDONLY, INT_TYPE(32));

co_stream_open(filter_out, O_WRONLY, INT_TYPE(32));

while (co_stream_read(filter_in, &data, sizeof(int32))) {

. . . // Process the data here

co_stream_write(filter_out, &data, sizeof(int32)); }

co_stream_close(filter_in);

co_stream_close(filter_out); }

(40)

configulation関数とプロセスの

ポート・マッピング例

stream source_pixeldata 24bit x 4 hw process prep 3x3画素処理の切り出し処理 hw process filter 3x3画素フィルタリング処理 r2 header_ready Pixels_in test_consumer prep_run関数 stream 24bit x 3 filter_run関数 stream result_pixeldata 24bit r0 row2 r1 r2 r1 r0 output_stream input_stream row0 row1 Impulse ImpulseImpulse Impulse C プロセスプロセスプロセスプロセス関数関数関数関数 ImpulseImpulseImpulseImpulseC プロセスプロセスプロセスプロセス関数関数関数関数

(41)

configulation関数による

プロセスの結合とhw/sw分割

// Create instance of Impulse C software process

cpu_proc = co_process_create("cpu_proc", (co_function)call_fpga,

3, shrmem, startsig, donesig);

// Create instances of Impulse C hardware processes

reader = co_process_create("reader", (co_function)to_stream,

3, startsig, shrmem, istream);

prep_proc = co_process_create("prep", (co_function)prep_run,

4, istream, row0, row1, row2);

filter_proc = co_process_create("filter", (co_function)filter_run,

4, row0, row1, row2, ostream);

writer = co_process_create("writer", (co_function)from_stream,

3, ostream, shrmem, donesig);

// Assign processes to hardware partitions

co_process_config(reader, co_loc, "PE0"); co_process_config(prep_proc, co_loc, "PE0"); co_process_config(filter_proc, co_loc, "PE1"); co_process_config(writer, co_loc, "PE1");

(configulation関数) 'プロセスへの分割

' ソフト/ハードの切り分け 'ハード化はプロセス単位

(42)

Shared memory

reads/writes

Stream

inputs

Stream

outputs

Signal

inputs

Signal

outputs cosim_logwindow_create () cosim_logwindow_write() cosim_logwindow_fwrite() コンフィギュレーション関数内で コア コア コア コア部部部は部ははは全全く全全くくく自由自由自由な自由ななな

ANSI-C

記述記述記述記述 コンフィギュレーション関数内で co_stream_create() co_memory_readblock(), comemory_readblock() co_stream_open(), co_stream_close() co_stream_read(),        co_stream_write() co_ssignal_wait(),       co_signal_post() コンフィギュレーション関数内で co_signal_create() コンフィギュレーション関数内で co_memory_create()

Impulse Cの

「ソフト・プロセス」

「機能検証段階のハード・プロセス」

(43)

Shared memory

reads/writes

Stream

inputs

Stream

outputs

Signal

inputs

Signal

outputs

App Monitor

outputs

Impulse Cの

ハード化「可能」プロセス

cosim_logwindow_create () cosim_logwindow_write() cosim_logwindow_fwrite() コンフィギュレーション関数内で cosim_logwindow_init() コンフィギュレーション関数内で co_stream_create() co_memory_readblock(), comemory_readblock() co_stream_open(), co_stream_close() co_stream_read(),        co_stream_write() co_ssignal_wait(),       co_signal_post() コンフィギュレーション関数内で co_signal_create() コンフィギュレーション関数内で co_memory_create() コア コア コア コア部記述部記述部記述部記述はははは多少制限多少制限多少制限多少制限のあるのあるのあるのある

ANSI-C

記述記述記述記述

(44)

ハード化プロセスへの制約

' 再帰的な表現の禁止

' コンパイル時に確定値を持つポインターのみ

ダイナミック・ポインターの使用禁止

' グローバル変数の使用禁止

' 整数演算、固定少数点演算のみ~ 

固定小数点はマクロでサポート

' 構造体の使用~10月版でサポート予定

(45)

2.

Impulse C

動作合成

C => HDL

(CoBuilder)

(46)

動作合成

デジタル・システム =

データパス

コントロール

に分解してRTL-HDL合成

S0 S2 S1 REG ADD MUX コントロール部 データパス部

……

Impulse Cハード化プロセス

(47)

Impulse Cのモジュール合成

Cソースを制御文と制御文の 間で分割~ 

Block

各Blockを少ないクロックで 処理する~ 

Stage

(48)

Impulse Cのモジュール合成

1. 各ステージ(Stage)は、生成ステートマシン(FSM)の

各ステートと1対1の対応

2. 制御構造を抜き出してステートマシン(FSM)となる

3. クロックが入るだけで、C言語ソースの構造を

完全に維持

(49)

3種類

の並列化

1. プロセス・レベルの並列化、パイプライン化

~ 設計のCSPモデリングであり

     

設計の一部->ユーザに委ねられている

2. プロセス内のスケジューリング(ステージ分割)

依存関係の無い処理は一括して1clockで => ステージ化

      

CoBuilder による

3. ループ内パイプライン化~ステージの並列動作化

      

CoBuilder による

動作合成コアCoBuilderは2.、 3.の並列化をサポート

(50)

Process 内の並列化制御

出力レポート +

スケジューリングのグラフィカル表現

結果の確認

3つのプラグマ

Pipeline、 Unroll、 StageDelay

合成制約

#pragma で指定

1 stage

最適化の対象~ブロック単位(stage分割)

1 clock

Impulse C

のタイミング制御要素

(51)

Stage Delay

Stage

Stage

Stage

Stage(

(ステージ

ステージ

ステージ

ステージ)

Stage = 1clock での処理単位

許されるロジック段数をプラグマStageDelayで調整

S 使用例

#pragma CO set Stage Delay 32

下流工程

下流工程

下流工程

下流工程にむかうにつれ

にむかうにつれ

にむかうにつれ

にむかうにつれ、

論理合成

論理合成

論理合成

論理合成ツール

ツール

ツール

ツールの

の最適化

最適化

最適化

最適化

処理

処理

処理

処理などによって

などによって

などによって

などによって、

、より

より

より

より

削減

削減

削減

削減されることもある

されることもある

されることもある

されることもある

StageDelay:

::

:クロック周期と最大遅延の関係の調整

(52)

プラグマ UNROLL

sum += A[0];

sum += A[1];

sum += A[2];

sum += A[3];

sum += A[4];

sum += A[5];

sum += A[6];

sum += A[7];

sum += A[8];

sum += A[9];

sum += A_0;

sum += A_1;

sum += A_2;

sum += A_3;

sum += A_4;

sum += A_5;

sum += A_6;

sum += A_7;

sum += A_8;

sum += A_9;

for (i=0; i <10; i++) {

#pragma CO UNROLL

sum += A[i];

}

with

(53)

co_par_break() 

do {

#pragma CO PIPELINE

co_stream_read(strm_in_samples, &sample, sizeof(DCTELEM));

high = ( sample >> 16 ) & 0xffff ;

low = sample & 0xffff ;

co_par_break();

z1 = IMUL32(low, FIX_0_707106781);

co_par_break();

z2 = IMUL32( z1, z1 );

co_par_break();

z3 = z2 + high ;

z4 = ( z4 & 0x80 ) ? z3 + 0x100 : z3;

co_stream_write(strm_out_dct, &z4, sizeof(DCTELEM));

} while ( ! co_stream_eos(strm_in_samples) );

(54)

hw処理速度の理論値 (例)

stream source_pixeldata 24bit hw process prep_proc 3x3画素処理の切り出し処理 hw process filter 3x3画素フィルタリング処理 r2 header_ready Pixels_in test_consumer prep_run関数 stream 24bit x 3 filter_run関数 stream result_pixeldata 24bit r0 row2 r1 r2 r1 r0 output_stream input_stream row0 row1 Impulse ImpulseImpulse Impulse C プロセスプロセスプロセスプロセス関数関数関数関数 ImpulseImpulseImpulseImpulseC プロセスプロセスプロセスプロセス関数関数関数関数

(55)

Process 内のタイミング制御(CoBuilder出力レポート)

prep_run -Block #6 loop:  Stages: 2 (意味)ループ内は2ステージに分割され2clock処理 ---do { p02=B[j]; p12=C[j]; co_stream_read(input_stream,&p22,sizeof(int32)); co_stream_write(r0,&p02,sizeof(int32)); co_stream_write(r1,&p12,sizeof(int32)); co_stream_write(r2,&p22,sizeof(int32)); B[j]=p12; C[j]=p22; j++; } while (j<IMG_WIDTH);

(56)

Process 内のタイミング制御(CoBuilder出力レポート)

filter_run -Block #1 pipeline: Latency: 8 Rate: 2 (意味) ループ内は8段のパイプラインで        2clock 毎に1結果 ---while (co_stream_read(r0,&data,sizeof(int32)) == co_err_none) { #pragma CO PIPELINE

#pragma CO set stageDelay 64

p00=p01; p01=p02; p10=p11; p11=p12; p20=p21; p21=p22; p02=data; co_stream_read(r1,&p12,sizeof(int32)); co_stream_read(r2,&p22,sizeof(int32)); d0=RED(p11)<<3; d0=d0-RED(p00); d0=d0-RED(p10); d0=d0-RED(p12); d0=d0-RED(p20); d0=d0-RED(p21); d0=d0-RED(p22); d0&=(d0>>15)-1; res=d0&0xff; d0=GREEN(p11)<<3; d0=d0-GREEN(p00); ………… d0=d0-GREEN(p22); d0&=(d0>>15)-1; res=(res<<8)|(d0&0xff); d0=BLUE(p11)<<3; d0=d0-BLUE(p00); ………… d0=d0-BLUE(p22); d0&=(d0>>15)-1; res=(res<<8)|(d0&0xff); co_stream_write(output_stream,&res,sizeof(int32));

(57)

Process 内のタイミング制御(Stage Master Explorer option)

pixelMag = 0;

(58)
(59)

CoDeveloper

の構成

Application Manager

S Impulse C設計をサポートするIDE環境

S MinGW(GNU)ベースのANSI-C、Windows設計環境

Application Monitor(

((

(CoMonitor))))

S プロセス動作のモニタリング

CoBuilder

S 動作合成(C to RTL-HDL)

S PSPと一緒になってhw/swインターフェースを生成

Impulse C 基本

基本

基本ライブラリ

基本

(60)

Simulation

1. App Monitor ((((CoMonitor))))

Cアルゴリズム水準 DesktopSimulation

* あらゆるANSI-C関連ツールが一緒に使用可能

* プロセス内動作を見る

2. Cycle Acculate Debugger(

Option

RTL-HDL -> timed C を得て

cycle accurateな

hw/sw協調検証 

3. 合成されたRTL-HDLのHDLシミュレーション

判り易いモデルstream、signal…

テストベンチ作成は容易(多くの例)

(61)

Impulse Cによるhw/sw協調設計手順

対象を独立した並行動作をするプロセスに分割

各プロセスをANSI-Cで記述

設計をC言語シミュレーション

設計をターゲット・プラットフォームに最適化

RTL-HDL生成、C言語生成、インターフェース生成

必要に応じて HDL シミュレーション

(62)

CoDeveloperを使っての設計

S ソフトもハードも共通のC言語水準での「プロセス」概念で

システムを表現

=> 抽象度の高い水準での設計で効率的

S hw/swインターフェースのためのコード~自動生成

面倒な低水準の設計から開放

S hw/sw協調設計の導入~ 

十分なhw、swインターフェース検証と

hw、sw分割の最適化

開発効率、実行速度両方の向上

(63)

5. Impulse C Case Study

3DES 暗号システム

(Xilinx Microblaze

®

platforms)

μClinuxを用いた評価環境

(Xilinx Microblaze

®

platform)

(64)

Case Study1: 3DES 暗号システム

S パブリックドメインの 3DES ソース・コード使用

S Phil Karn : Qualcomm(

www.ka9q.net

)開発によるコード

S 並行動作向けに開発されたものでなく通常のCPU走行に最適化

S ハード化に

ストリーム・ベースの通信による手法にするための最低限の変更

S データ・ブロックとキーの送受信にストリームの読み込み/書き込みを使用

S 「元のCコードによるCPU走行」と

Impulse C によりハード化した「

専用エンジン」

との

同一データによる比較

S この2つのバージョンが1つのシミュレーション対象になるような

アプリケーション例とする

S ハードにコンパイルして結果を比較

S 元のコードは CPUで、 Impulse C版は専用エンジンで走行

(65)

Application Structure (hw Test)

Reference/prototype board

Producer

(random data)

H/W encrypt

S/W encrypt

(legacy C)

Consumer

(compare results

and speed)

Embedded processor FPGA gates “Platform” FPGA

(66)

Compiling 3DES to Hardware

S CoBuilder で VHDL に コンパイル

S 3DES encryption process のみハード化

S Cソース

180

行 から 

6500

行 の VHDL コードを生成

S C to RTL コンパイル時間 :

分(2.4GHz Pentium, WinXP)

S FPGA vendor tools でVHDL論理合成

S Xilinx ISE (target FPGA: Virtex II )

S 結果の比較を評価ボード上で

S Producer, consumer processes を embedded uP で走行

S 3DES process を FPGA hardware で走行

(67)

Results (Virtex

®

II FPGA)

S MicroBlaze clock : 100MHz

S 3DES algorithm clock: 24MHz

S Performance (1000 blocks):

S 1block処理のClock cycle数 : 149 (not including I/O

overhead)

S 36X

speedup over software-only version~

チューニング

なし

S

簡単なコードチューニングにより、数100倍以上

6.9 ms*

252 ms

3DES in FPGA

3DES in MicroBlaze

(68)

Case Study2:

μClinuxを用いた評価環境

uClinux Image Filter

1. TIFF 画像の元ファイルをFTP 経由でAlbertにPCから ダウンロード 2. TIFF画像を ソフトで処理 (Microblaze) 3. TIFF画像を ハードで処理 (FPGAハード化 エンジン) 4. ソフトとハードの処理速度比較 5. 画像処理後の TIFFファイルをFTP経由で 東京エレクトロンデバイス Virtex-II Pro評価ボード  TB-V2P-XSP-016 (Albert)

uClinux コンソール

(HyperTerminal)

FTP サーバー

(画像ファイル転送) Xilinx® MicroBlaze™ ソフトコア組み込みプロセッサ上で uClinux が走行

開発システム

Xilinx

®

ISE, EDK

(69)

エッジ検出システム方式 1/2

sw/hwの関係

sw process フルカラー画像(24bit)ファイル からデータを読み出し、 そのまま32bit単位で エンジンに送信 hw process edge_detect_process sw process フルカラー画像(24bit)ファイル のデータ部へ 受信データを直接書き込み source TIF/Bitmap file result TIF/ Bitmap file (file_data_out) call_fpga 関数 edge_detect エンジン fromcpu stream source_file_data 32bit tocpu stream result_file_data 32bit call_fpga 関数 hw processes:パイプラインで構成 フルカラー画像(24bit)ファイルの データ列を受信し、エッジ検出結果を フルカラー画像ファイルに直接書き 込めるデータ列として出力 (file_data_in) output_stream input_stream output_stream input_stream FTP get FTP put

(70)

エッジ検出hwシステム 2/2

istream source_pixel_data 32bit hw process prep_proc 3x3 画素処理の 切り出し処理 hw process edge_detectを4つのプロセスで構成

4段のパイプライン

hw process filter 3x3 画素の フィルタリング処理 r2 header_ready Pixels_in prep_run関数 stream 32bit x 3 filter_run関数 ostream result_pixel_data 32bit r0 r1 r2 r1 r0 output_stream input_stream unpack関数 input_stream pack関数 input_stream fromcpu stream source_file_data 32bit tocpu stream result_file_data 32bit row0 row2 output_stream output_stream hw process unpacker fileデータから ピクセルデータに 変換処理 hw process packer ピクセルデータから fileデータに 変換処理 row1

(71)
(72)

sw7seg Impulse C 設計(カウンター)

Process component hello 7seg DIP SWITCH

sw7seg_hw. c

仕様:

DIPスイッチの下3ビットをカウントアッ

プの上限とする

表示スピードを決めるタイマーの

Process component tick 7SEG  LED say_hello7 time_tick digit

(73)

sw7seg 合成

rdy eos Process component hello register en data en data DIP SWITCH signal data

top: sw7seg_top. vhd

com: sw7seg_comp.vhd

sw7seg _hw.c

生成

生成

生成

生成モジュール

モジュール

モジュール

モジュール

register Process component en en data rdy data 7SEG  LED say_hello70 time_tick0 en register data digit sel

(74)

組み込みCPUコアとのhw/sw協調設計ツール

Impulse C

InterLink

InterLink

InterLink

InterLink

有限会社 インターリンクインターリンクインターリンクインターリンク 231-0023 横浜市中区山下町252 グランベル横浜9F TEL:045-663-5940 FAX:045-663-5945   [email protected] http://www.ilink.co.jp

参照

関連したドキュメント

り分けることを通して,訴訟事件を計画的に処理し,訴訟の迅速化および低

(6) 管理者研修:夏に、 「中長期計画策定」の演習/年度末の 3 月は、 「管理者の役割につ

処理処分の流れ図(図 1-1 及び図 1-2)の各項目の処理量は、産業廃棄物・特別管理産業廃 棄物処理計画実施状況報告書(平成

 (所)   1,051     53   4,605     251    5,523    2,197    4,733  機器個数 ..  (個)   3,747    107   11,879     373   15,288    4,120 

(注)

会社法規部の紛争処理機能は, いわば会社法規部設立の歴史的経緯からく

ALPS 処理水希釈放出設備は通常運転~停止の他, 「意図しない形での ALPS

ALPS 処理水希釈放出設備は通常運転~停止の他, 「意図しない形での ALPS