第4章 Impulse C の導入

21
Impulse C 第第第 第第第第第

description

第4章 Impulse C の導入. 安達ほのか. はじめに. Impulse C は通信 プロセスプログラミングモデルを使用する こと により、 並列で複雑 なハードウェア / ソフトウェアアルゴリズムとアプリケーション の開発 を サポート することができる 。 Impluse C の起源について ロスアラモス 国立 研究所のマヤ ・ゴーカレー 博士 Streams-C の商用化であり、 FPGA ベースの基盤レベルプラットホーム で実現 のアプリケーションを表現するメソッドを 提供。 - PowerPoint PPT Presentation

Transcript of 第4章 Impulse C の導入

Page 1: 第4章 Impulse C  の導入

第4章Impulse C の導入

安達ほのか

Page 2: 第4章 Impulse C  の導入

はじめに• Impulse C は通信プロセスプログラミングモデルを使用するこ

とにより、並列で複雑なハードウェア / ソフトウェアアルゴリズムとアプリケーションの開発をサポートすることができる。

Impluse C の起源について• ロスアラモス国立研究所のマヤ・ゴーカレー博士• Streams-C の商用化であり、 FPGA ベースの基盤レベルプラッ

トホームで実現のアプリケーションを表現するメソッドを提供。• Streams-C を使用することで、データ暗号化、イメージプロ

セッシング、天体物理学などの分野でアプリケーションが開発された。

※ Streams-C   一般に公開されている C 言語のコンパイラ

Page 3: 第4章 Impulse C  の導入

• Impluse C と Streams-C の相違点 → 標準の C プログラミング環境との互換性を維持 Impluse C ライブラリは標準の C 開発ツールを使用することで行動全体をシミュレートすることができる。Impulse C ライブラリは、独自に連動している過程から成る並行なアプリケーションの編集とシミュレーションをするために、過程インタコネクト(ストリームなシグナルの相互連絡)を定義する機能を含み、スレッドを使用することで複数の過程 ( デスクトップシミュレーションの目的のための ) の動きをエミュレートする。

Page 4: 第4章 Impulse C  の導入

• Impulse C ツールはソフトウェアからハードウェアへのコンパイラを含んでいる。

•  そのコンパイラは、個々の Impulse C プロセスを、機能上同等なハードウェア記述に変換して、必要不可欠なプロセスからプロセスへのインタフェース論理を生成する。

Page 5: 第4章 Impulse C  の導入

4.1 • Impulse C の目的 高度な並行動作アプリケーションを可能にすること• このマルチプロセッサ(並行アプローチ)は FPGA 基盤の  組み込みシステムに適している• ストリーム、シグナル、メモリーへのサポートは  それぞれのデータタイプに関連付けられた C コンパチブル( 互換性  のある ) 組み込み関数を経由して Impulse C に提供する。• ハードウェアに写像する過程において、 C 言語は C の部分集合 に抑制される。一方ソフトウェアの過程は、ホストかImpulse   C  コンパイラの制限で抑制される。

Page 6: 第4章 Impulse C  の導入

• Impulse C コンパイラはハードウェアの過程のために、指定されたストリーム、シグナル、およびメモリーを実行しながら統合された HDL (ハードウェア記述言語)を作り出す。

• コンパイラは命令スケジューリング、ループのパイプライン処理、およびループ変換(プログラムのサイズを犠牲に実行速度を最適化すること)を実行する。

• Impulse C ソフトウェア・ライブラリはコンパイルに ビジュアルスタジオのようなスタンダード C 開発ツールを使うと、 Impulse C アプリケーション の並列な動きのデスクトップエミュレーションや シミュレーションをサポートする。

Page 7: 第4章 Impulse C  の導入

• Impulse C ライブラリは複数の埋め込みプロセッサにおける Impulse C ソフトウェア処理の実行をサポートする

• Impulse C プラットホームサポートライブラリは、• Xilinx MicroBlaze やパワー PC ベースの FPGAs など

の特定の FPGA ベースのターゲットに利用可能• ハードウェアがソフトウェア処理に連結しない

モジュールを生成するのに使用できる   → Impulse C を利用するために埋め込み     プロセッサを必ずしも含む必要はない

Page 8: 第4章 Impulse C  の導入

4.2• Inpulse C は、通信プロセスの並行なプログラミングモデルを

支持して C コンパチブル事前に定義されたライブラリ関数を使用することで、標準の ANSI C (アメリカ国内の工業製品の規格を策定する団体の定めた C 言語の規格)を拡張している。

• Impulse C では、プログラミングモデルは永続的な C サブルーチンとして実装される独自に連動しているプロセスのコミュニケーションのプライマリメソッドとしてバッファリングされたデータ・ストリームの使用を強調する。

• ※サブルーチン プログラミングにおいて、コード中で何度も

      必要とされる定型的な処理を一つのプログラムに      まとめて外部から呼び出せるようにしたもの。

Page 9: 第4章 Impulse C  の導入

• 構成される FlFOs を使用するデータのこのバッファリングで、より高いレベルの抽象化で並列アプリケーションを書くことが可能になる。

• Impulse C は事前に定義された C コンパチブルというライブラリ関数を使っているスタンダード ANSI C を拡張した。

• そのライブラリ関数は、通信プロセスの並列なプログラミングモデルを支持している。

• Impulse C はストリーム指向のアプリケーションのために設計されているが、代替のプログラミングモデルをサポートするほど柔軟性があり、並行で、独自に連動しているプロセスの間の伝達方法としてシグナルと共有メモリの使用を含んでいる。

Page 10: 第4章 Impulse C  の導入

• Impluse C アプリケーションはデスクトップシミュレーションのために標準 C 開発ツールでコンパイルできる。

  あるいは FPGA ターゲットのために Impluse C コンパイラ   でコンパイルできる。• Impulse C コンパイラは、 Impulse C プログラムを適切な低レ

ベル表現に翻訳して、最適化する。  そしてそれは FPGA へと統合できる VHDL ハードウェア    記述と、広く利用可能な C クロスコンパイラの使用で   支持されたマイクロプロセッサにコンパイルできる  スタンダード C を含んでいる。• 完全な Impulse C 環境は Impulse C アプリケーションが標準の

デスクトップコンパイラで編集されて、作成されるのを許容するライブラリのセットからなる。

Page 11: 第4章 Impulse C  の導入

4.3   HelloFPGA とはどういったプログラム?

FPGA ハートウェアソフトプロセスとソフトウェアテストベンチの関係

Page 12: 第4章 Impulse C  の導入

4.3   Impulse C のプログラミング例①HelloFPGA _sw.c①

伝統的なプロセッサの上で動くソフトウェアを表すアプリケーションの一部 →伝統的はプロセッサとは?• 目標システムの一部である埋め込み型プロセッ

サ• デスクトップシミュレーションの間、ソフト

ウェアテストベンチ(試作品)として使用されるプロセッサ

Page 13: 第4章 Impulse C  の導入

HelloFPGA _sw.c②コメントヘッダ  このプログラムにおける簡潔な説明#include…    co.h ファイルは Impulse C 関数ライブラリーを表す宣言と  マクロを含んでいるextern co_architecture…    関数 co_initialize (初期設定)の宣言    main 関数で参照されるかもしれないので、アプリケーション   のコンフィギレーション(構成)関数と同じファイルに   入っていなければならない特殊関数。

Page 14: 第4章 Impulse C  の導入

HelloFPGA _sw.c③void Producer   ソフトウェアソフトベンチのインプット側を表す   いくつかの試験データ(この場合、“ Hello FPGA!” という   文字を詳細に説明するキャラクタの簡単なストリーム)   を生成   プロセス自体は、いくつかの宣言と、入力文字列を通して   繰り返しそして出力文字列として宣言されたストリームへと   文字を書きだす内部コードの繰り返し   co_stream_open,co_stream_write,co_stream_close        ImpulseC はこのようなプロセス走行関数定義を、       ハードウェアやソフトウェアの中で実際の実現や       具体化から引き離す。

Page 15: 第4章 Impulse C  の導入

HelloFPGA _sw.c④

void Consumer   ソフトウェアテストベンチのアウトプット側を表す。    Producer プロセスのように、このプロセスはデータ   ストリーム経由でアプリケーション(特にテストされる   ハードウェアモジュール)の他の部分と相互に作用する。   また、キャラクタがモジュールでテストで生成されている   限り、このプロセスは inpute_stream からキャラクタを   読み込ませる内部コードのループをする。

Page 16: 第4章 Impulse C  の導入

HelloFPGA _sw.c⑤

m ain   メイン関数。主な機能は単にコンソールに   メッセージを表示することと、 Impulse C 関数である     co_initialize と co_execute を呼び出すことで   アプリケーションを実行する   co_initialize    あらゆる Impulse C アプリケーションの必要な部分    (詳細は後に述べる)   co_execute    アプリケーションと、自身の構成するプロセスを実行する      Impulse C ライブラリの関数

Page 17: 第4章 Impulse C  の導入

Impulse C のプログラミング例②HelloFPGA_hw.c①

HelloFPGA_hw.c は FPGA 上で動くハードウェアを表すアプリケーションの一部が書かれている。

#Include…      co.h ファイルを読み込んでいるExtern宣言     HelloFPGA_sw.c で定義された Producer と Consumer     プロセスのための宣言。コンフィギュレーション関数は   これらが処理する参照が必要なので、ここで必要となる。

Page 18: 第4章 Impulse C  の導入

HelloFPGA_hw.c②void DoHello   プロセス走行関数。このプロセス走行関数は二つのストリーム   オブジェクトを受け入れる。その片方である入力ストリームは、    8 ビットの文字値の入ってくるストリームを表す。   このストリームは Producer プロセスの出力に関連づけられる。   もう片方の出力ストリームは処理データを表している。   そのデータもまた 8 ビットの文字値である。   このストリームは Consumer プロセスに関する入力ストリームに   関連づけられる。 Consumer プロセスのように、データが入力に   現れる限り、このプロセスは入力ストリームを作動させる内部    コードをループする。   このストリーム操作は Impulse   C 関数である以下の     co_stream_open, co_stream_read,co_stream_write,    co_stream_close を用いて説明される。

Page 19: 第4章 Impulse C  の導入

HelloFPGA_hw.c③    この co_process_create 関数コールはこのプロセスの    インスタンスを一つ作成し、そのプロセスインスタンスの        名前を示す。このプロセスは実際に受信データで    何もしない。代わりに、入力ストリームに現れる各値は    すぐに、 co_stream_write を通して出力ストリームに    書かれる。void config_subroutine    コンフィギュレーションサブルーチンは , アプリケーションの    構造をプロセスがどう相互接続されていることになっているか       使われたプロセスの観点から定義する。このコンフィギュ    レーションサブルーチンは、3つのプロセスインスタンスを    作成するために co_process_create 関数を使う。そのイン    スタンスは producer, consumer, hello という名が与えられる。

Page 20: 第4章 Impulse C  の導入

HelloFPGA_hw.c④    データを producer から hello へ、また hello からconsmer へ    それぞれ2つのストリームを作成するために     co_stream_create 関数を使った。最後に、明確に述べる     ためにプロセスコンフィギュレーション関数の        co_process_config を使った。    3つのプロセスのうちの一つ、 hello は目標 FPGA を表す     PEO と呼ばれるハードウェアリソースに割り当てられる    ことになっている。

Page 21: 第4章 Impulse C  の導入

HelloFPGA_hw.c⑤co_archtecture co_initialize…    コンフィギュレーションサブルーチンのように、     co_initialize 関数はあらゆる Impulse C アプリケーションで         必要とされる。この関数の中では co_architecture_create    関数への唯一の呼び出しです。その関数は前もって    アプリケーションの目標アーキテクチャへ(この場合では    ジェネリックハードウェア・ソフトウェアプラットフォーム)の    コンフィギュレーション関数を関連付けます。(特定の    プログラム可能な編集の目標になるプラットフォームは   ハードウェアコンパイラ設定の一部としてアプリケーション   ソースファイルの外で定義される。)