1 / 21

第4章 Impulse C の導入

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

luann
Download Presentation

第4章 Impulse C の導入

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第4章Impulse C の導入 安達ほのか

  2. はじめに • Impulse Cは通信プロセスプログラミングモデルを使用することにより、並列で複雑なハードウェア/ソフトウェアアルゴリズムとアプリケーションの開発をサポートすることができる。 Impluse C の起源について • ロスアラモス国立研究所のマヤ・ゴーカレー博士 • Streams-Cの商用化であり、 FPGAベースの基盤レベルプラットホームで実現のアプリケーションを表現するメソッドを提供。 • Streams-Cを使用することで、データ暗号化、イメージプロセッシング、天体物理学などの分野でアプリケーションが開発された。 ※Streams-C  一般に公開されているC言語のコンパイラ

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

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

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

  6. Impulse Cコンパイラはハードウェアの過程のために、指定されたストリーム、シグナル、およびメモリーを実行しながら統合された HDL(ハードウェア記述言語)を作り出す。 • コンパイラは命令スケジューリング、ループのパイプライン処理、およびループ変換(プログラムのサイズを犠牲に実行速度を最適化すること)を実行する。 • Impulse Cソフトウェア・ライブラリはコンパイルに  ビジュアルスタジオのようなスタンダードC  開発ツールを使うと、 Impulse Cアプリケーション の並列な動きのデスクトップエミュレーションや シミュレーションをサポートする。

  7. Impulse Cライブラリは複数の埋め込みプロセッサにおけるImpulse Cソフトウェア処理の実行をサポートする • Impulse Cプラットホームサポートライブラリは、 • Xilinx MicroBlazeやパワーPCベースのFPGAsなどの特定のFPGAベースのターゲットに利用可能 • ハードウェアがソフトウェア処理に連結しないモジュールを生成するのに使用できる →Impulse Cを利用するために埋め込み     プロセッサを必ずしも含む必要はない

  8. 4.2 • Inpulse Cは、通信プロセスの並行なプログラミングモデルを支持してCコンパチブル事前に定義されたライブラリ関数を使用することで、標準のANSI C(アメリカ国内の工業製品の規格を策定する団体の定めたC言語の規格)を拡張している。 • Impulse Cでは、プログラミングモデルは永続的なCサブルーチンとして実装される独自に連動しているプロセスのコミュニケーションのプライマリメソッドとしてバッファリングされたデータ・ストリームの使用を強調する。 • ※サブルーチン プログラミングにおいて、コード中で何度も       必要とされる定型的な処理を一つのプログラムに      まとめて外部から呼び出せるようにしたもの。

  9. 構成されるFlFOsを使用するデータのこのバッファリングで、より高いレベルの抽象化で並列アプリケーションを書くことが可能になる。構成されるFlFOsを使用するデータのこのバッファリングで、より高いレベルの抽象化で並列アプリケーションを書くことが可能になる。 • Impulse Cは事前に定義されたCコンパチブルというライブラリ関数を使っているスタンダードANSI Cを拡張した。 • そのライブラリ関数は、通信プロセスの並列なプログラミングモデルを支持している。 • Impulse Cはストリーム指向のアプリケーションのために設計されているが、代替のプログラミングモデルをサポートするほど柔軟性があり、並行で、独自に連動しているプロセスの間の伝達方法としてシグナルと共有メモリの使用を含んでいる。

  10. ImpluseCアプリケーションはデスクトップシミュレーションのために標準C開発ツールでコンパイルできる。ImpluseCアプリケーションはデスクトップシミュレーションのために標準C開発ツールでコンパイルできる。   あるいはFPGAターゲットのためにImpluseCコンパイラ   でコンパイルできる。 • Impulse Cコンパイラは、Impulse Cプログラムを適切な低レベル表現に翻訳して、最適化する。   そしてそれはFPGAへと統合できるVHDLハードウェア    記述と、広く利用可能なCクロスコンパイラの使用で   支持されたマイクロプロセッサにコンパイルできる スタンダードCを含んでいる。 • 完全なImpulse C環境はImpulse Cアプリケーションが標準のデスクトップコンパイラで編集されて、作成されるのを許容するライブラリのセットからなる。

  11. 4.3HelloFPGAとはどういったプログラム? FPGAハートウェアソフトプロセスと ソフトウェアテストベンチの関係

  12. 4.3Impulse Cのプログラミング例①HelloFPGA _sw.c① 伝統的なプロセッサの上で動くソフトウェアを表す アプリケーションの一部 →伝統的はプロセッサとは? • 目標システムの一部である埋め込み型プロセッサ • デスクトップシミュレーションの間、ソフトウェアテストベンチ(試作品)として使用されるプロセッサ

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

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

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

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

  17. Impulse Cのプログラミング例②HelloFPGA_hw.c① HelloFPGA_hw.cはFPGA上で動くハードウェアを表すアプリケーションの一部が書かれている。 #Include… co.hファイルを読み込んでいる Extern宣言  HelloFPGA_sw.cで定義されたProducerとConsumer   プロセスのための宣言。コンフィギュレーション関数は   これらが処理する参照が必要なので、ここで必要となる。

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

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

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

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

More Related