FPGAやASIC用の汎用画像処理コアを開発しています。標準的なプロセッサーとインターフェースすることが考えられます。私が持っている問題の1つは、それを「プログラムする」方法です。私に説明してみましょう:コアには、私の "カスタム"拡張のための命令デコーダがあります。たとえば:標準のC/C++コードでカスタム命令/拡張機能を組み込んで翻訳する方法
vector_addition $vector[0], $vector[1], $vector[2] // (i.e. v2 = v0+v1)
などです。この操作は、そのようなループは、非ベクトル演算など、ためにプロセッサを使用して、コアにバスを介してプロセッサによってsendedではれる:
for (i=0; i<15;i++) // to be executed in the processor
vector_add(v0, v1, v2) // to be executed in my custom core
プログラムがC/C++で書かれています。コアは、マシンコードに、命令自体を必要
- オペコード= vector_add = 0x12h
- register_src_1 = V0 = 0x00h
- register_src_2 = V1 = 0x01h
register_dst = V2 = 0x02h
マシンコード= opcore | v0 | v1 | V2 = 0x7606E600h
(または任意、バイナリ命令を構築するために、異なるフィールドのちょうどcontatenation)
一度コアにバスを介してそれを送信する、コアからすべてのデータを要求することができます専用バスでメモリを使用し、プロセッサを使用せずにすべてを処理します。大きな成功は:どのようにして前の命令を16進表現に変換できますか?(バスは問題ありません)。心に来ていくつかのオプションが
- ランは、(プロセッサで実行時にマシンコードに変換)コードを解釈している - > 非常に遅い、でも、インラインのいくつかの種類を使用してマクロ
- でカスタムセクションをコンパイルします外部のカスタムコンパイラ、外部メモリからバイナリをロードし、いくつかのユニークな命令でコアに移動 - >ソースコードの読み込み/理解が難しい、SDKの統合不良、コードが非常に分割されているとセクションが多すぎる
- JITコンパイル - - >これだけのために複雑にする?
- コンパイラの拡張 - >悪夢!
- すべてを処理するためのカスタムコアに接続されたカスタムプロセッサ:ループ、ポインタ、メモリの割り当て、変数... - >あまりにも多くの仕事
問題は、ソフトウェア/コンパイラについてですが、その人のためこのトピックでは深い知識を持っていますが、これはFPGAのSoCで、メインプロセッサはMicroBlazeで、IPコアはAXI4バスを採用しています。
私はそれを正しく説明してくれたと思います...事前に感謝!
多分、私はcuestionを短くする必要があります...私は使用しているコンパイラの[コード生成](http://en.wikipedia.org/wiki/Code_generation_%28compiler%29)ステージに新しい命令を追加する方法(gcc/g ++) – amnl