第4章 Impulse C の導入 安達ほのか はじめに • Impulse Cは通信プロセスプログラミングモデルを使用することによ り、並列で複雑なハードウェア/ソフトウェアアルゴリズムとアプリ ケーションの開発をサポートすることができる。 Impluse C の起源について • ロスアラモス国立研究所のマヤ・ゴーカレー博士 • Streams-Cの商用化であり、 FPGAベースの基盤レベルプラットホー ムで実現のアプリケーションを表現するメソッドを提供。 • Streams-Cを使用することで、データ暗号化、イメージプロセッシン グ、天体物理学などの分野でアプリケーションが開発された。 ※ Streams-C 一般に公開されているC言語のコンパイラ • Impluse CとStreams-Cの相違点 →標準のCプログラミング環境との互換性を維持 Impluse Cライブラリは標準のC開発ツールを使用する ことで行動全体をシミュレートすることができる。 Impulse Cライブラリは、独自に連動している過程から 成る並行なアプリケーションの編集とシミュレーション をするために、過程インタコネクト(ストリームなシグナ ルの相互連絡)を定義する機能を含み、スレッドを使 用することで複数の過程(デスクトップシミュレーション の目的のための)の動きをエミュレートする。 • Impulse Cツールはソフトウェアからハードウェアへ のコンパイラを含んでいる。 • そのコンパイラは、個々のImpulse Cプロセスを、機 能上同等なハードウェア記述に変換して、必要不可 欠なプロセスからプロセスへのインタフェース論理を 生成する。 4.1 • Impulse Cの目的 高度な並行動作アプリケーションを可能にすること • このマルチプロセッサ(並行アプローチ)はFPGA基盤の 組み込みシステムに適している • ストリーム、シグナル、メモリーへのサポートは それぞれのデータタイプに関連付けられたCコンパチブル(互換性 のある)組み込み関数を経由してImpulse Cに提供する。 • ハードウェアに写像する過程において、C言語はCの部分集合 に抑制される。一方ソフトウェアの過程は、ホストかImpulse C コンパイラの制限で抑制される。 • Impulse Cコンパイラはハードウェアの過程のために、指定 されたストリーム、シグナル、およびメモリーを実行しなが ら統合された HDL(ハードウェア記述言語)を作り出す。 • コンパイラは命令スケジューリング、ループのパイプライン 処理、およびループ変換(プログラムのサイズを犠牲に実 行速度を最適化すること)を実行する。 • Impulse Cソフトウェア・ライブラリはコンパイルに ビジュアルスタジオのようなスタンダードC 開発ツールを使うと、 Impulse Cアプリケーション の並列な動きのデスクトップエミュレーションや シミュレーションをサポートする。 • Impulse Cライブラリは複数の埋め込みプロセッサに おけるImpulse Cソフトウェア処理の実行をサポート する • Impulse Cプラットホームサポートライブラリは、 • Xilinx MicroBlazeやパワーPCベースのFPGAsなどの 特定のFPGAベースのターゲットに利用可能 • ハードウェアがソフトウェア処理に連結しないモ ジュールを生成するのに使用できる →Impulse Cを利用するために埋め込み プロセッサを必ずしも含む必要はない 4.2 • Inpulse Cは、通信プロセスの並行なプログラミングモデルを 支持してCコンパチブル事前に定義されたライブラリ関数を使 用することで、標準のANSI C(アメリカ国内の工業製品の規 格を策定する団体の定めたC言語の規格)を拡張している。 • Impulse Cでは、プログラミングモデルは永続的なCサブルー チンとして実装される独自に連動しているプロセスのコミュニ ケーションのプライマリメソッドとしてバッファリングされた データ・ストリームの使用を強調する。 • ※サブルーチン プログラミングにおいて、コード中で何度も 必要とされる定型的な処理を一つのプログラムに まとめて外部から呼び出せるようにしたもの。 • 構成されるFlFOsを使用するデータのこのバッファリング で、より高いレベルの抽象化で並列アプリケーションを 書くことが可能になる。 • Impulse Cは事前に定義されたCコンパチブルというライ ブラリ関数を使っているスタンダードANSI Cを拡張した。 • そのライブラリ関数は、通信プロセスの並列なプログラミ ングモデルを支持している。 • Impulse Cはストリーム指向のアプリケーションのために 設計されているが、代替のプログラミングモデルをサ ポートするほど柔軟性があり、並行で、独自に連動して いるプロセスの間の伝達方法としてシグナルと共有メモ リの使用を含んでいる。 • Impluse Cアプリケーションはデスクトップシミュレーショ ンのために標準C開発ツールでコンパイルできる。 あるいはFPGAターゲットのためにImpluse Cコンパイラ でコンパイルできる。 • Impulse Cコンパイラは、Impulse Cプログラムを適切な 低レベル表現に翻訳して、最適化する。 そしてそれはFPGAへと統合できるVHDLハードウェア 記述と、広く利用可能なCクロスコンパイラの使用で 支持されたマイクロプロセッサにコンパイルできる スタンダードCを含んでいる。 • 完全なImpulse C環境はImpulse Cアプリケーションが 標準のデスクトップコンパイラで編集されて、作成され るのを許容するライブラリのセットからなる。 4.3 HelloFPGAとは どういったプログラム? FPGAハートウェアソフトプロセスと ソフトウェアテストベンチの関係 4.3 Impulse Cのプログラミング例① HelloFPGA _sw.c① 伝統的なプロセッサの上で動くソフトウェアを表す アプリケーションの一部 →伝統的はプロセッサとは? • 目標システムの一部である埋め込み型プロセッサ • デスクトップシミュレーションの間、ソフトウェアテスト ベンチ(試作品)として使用されるプロセッサ HelloFPGA _sw.c② コメントヘッダ このプログラムにおける簡潔な説明 #include… co.hファイルはImpulse C関数ライブラリーを表す宣言と マクロを含んでいる extern co_architecture… 関数co_initialize(初期設定)の宣言 main関数で参照されるかもしれないので、アプリケーション のコンフィギレーション(構成)関数と同じファイルに 入っていなければならない特殊関数。 HelloFPGA _sw.c③ void Producer ソフトウェアソフトベンチのインプット側を表す いくつかの試験データ(この場合、“Hello FPGA!”という 文字を詳細に説明するキャラクタの簡単なストリーム) を生成 プロセス自体は、いくつかの宣言と、入力文字列を通して 繰り返しそして出力文字列として宣言されたストリームへと 文字を書きだす内部コードの繰り返し co_stream_open,co_stream_write,co_stream_close ImpulseCはこのようなプロセス走行関数定義を、 ハードウェアやソフトウェアの中で実際の実現や 具体化から引き離す。 HelloFPGA _sw.c④ void Consumer ソフトウェアテストベンチのアウトプット側を表す。 Producerプロセスのように、このプロセスはデータ ストリーム経由でアプリケーション(特にテストされる ハードウェアモジュール)の他の部分と相互に作用する。 また、キャラクタがモジュールでテストで生成されている 限り、このプロセスはinpute_streamからキャラクタを 読み込ませる内部コードのループをする。 HelloFPGA _sw.c⑤ main メイン関数。主な機能は単にコンソールに メッセージを表示することと、Impulse C関数である co_initializeとco_executeを呼び出すことで アプリケーションを実行する co_initialize あらゆるImpulse Cアプリケーションの必要な部分 (詳細は後に述べる) co_execute アプリケーションと、自身の構成するプロセスを実行する Impulse Cライブラリの関数 Impulse Cのプログラミング例② HelloFPGA_hw.c① HelloFPGA_hw.cはFPGA上で動くハードウェアを表すアプリケー ションの一部が書かれている。 #Include… co.hファイルを読み込んでいる Extern宣言 HelloFPGA_sw.cで定義されたProducerとConsumer プロセスのための宣言。コンフィギュレーション関数は これらが処理する参照が必要なので、ここで必要となる。 HelloFPGA_hw.c② void DoHello プロセス走行関数。このプロセス走行関数は二つのストリーム オブジェクトを受け入れる。その片方である入力ストリームは、 8ビットの文字値の入ってくるストリームを表す。 このストリームはProducerプロセスの出力に関連づけられる。 もう片方の出力ストリームは処理データを表している。 そのデータもまた8ビットの文字値である。 このストリームはConsumerプロセスに関する入力ストリームに 関連づけられる。Consumerプロセスのように、データが入力に 現れる限り、このプロセスは入力ストリームを作動させる内部 コードをループする。 このストリーム操作はImpulse C関数である以下の co_stream_open, co_stream_read,co_stream_write, co_stream_closeを用いて説明される。 HelloFPGA_hw.c③ このco_process_create関数コールはこのプロセスの インスタンスを一つ作成し、そのプロセスインスタンスの 名前を示す。このプロセスは実際に受信データで 何もしない。代わりに、入力ストリームに現れる各値は すぐに、co_stream_writeを通して出力ストリームに 書かれる。 void config_subroutine コンフィギュレーションサブルーチンは,アプリケーションの 構造をプロセスがどう相互接続されていることになっているか 使われたプロセスの観点から定義する。このコンフィギュ レーションサブルーチンは、3つのプロセスインスタンスを 作成するためにco_process_create関数を使う。そのイン スタンスは producer, consumer, helloという名が与えられる。 HelloFPGA_hw.c④ データをproducerからhelloへ、またhelloからconsmerへ それぞれ2つのストリームを作成するために co_stream_create関数を使った。最後に、明確に述べる ためにプロセスコンフィギュレーション関数の co_process_configを使った。 3つのプロセスのうちの一つ、helloは目標FPGAを表す PEOと呼ばれるハードウェアリソースに割り当てられる ことになっている。 HelloFPGA_hw.c⑤ co_archtecture co_initialize… コンフィギュレーションサブルーチンのように、 co_initialize関数はあらゆるImpulse Cアプリケーションで 必要とされる。この関数の中ではco_architecture_create 関数への唯一の呼び出しです。その関数は前もって アプリケーションの目標アーキテクチャへ(この場合では ジェネリックハードウェア・ソフトウェアプラットフォーム)の コンフィギュレーション関数を関連付けます。(特定の プログラム可能な編集の目標になるプラットフォームは ハードウェアコンパイラ設定の一部としてアプリケーション ソースファイルの外で定義される。)
© Copyright 2025 ExpyDoc