(57)【特許請求の範囲】
【請求項１】
アプリケーションの一部の処理を実行する回路が動的に再構成可能な半導体回路制御装置において、
アプリケーションを実行するホストプロセッサと、
再構成可能な複数の回路の回路データを記憶したハードウェア・モジュールと、
前記ホストプロセッサが実行する複数のアプリケーションと、該アプリケーションの実行に用いられるハードウェア・オブジェクトの実行に必要であって、前記ハードウェア・モジュールに記憶された回路データにより制御される又は動作する予め組み込まれた回路を制御するプログラムであるハードウェア・ドライバとを記憶した主メモリと、
前記ホストプロセッサと前記主メモリ及び前記ハードウェア・モジュールとの間で、データを通信するバスと
を備え、
前記ホストプロセッサのオペレーティングシステムが立ち上がると、該オペレーティングシステムが、前記ハードウェア・モジュールに関する動作を制御するためのハードウェア・モジュール・ドライバを組み込み、
あるアプリケーションが起動された場合、前記ホストプロセッサは、そのアプリケーションに関連したハードウェア・オブジェクトを生成し、
生成されたハードウェア・オブジェクトが、ハードウェア・ドライバのオペレーティングシステム上への組み込みを管理するオブジェクト・マネジャーに要求を出し、
オブジェクト・マネジャーが、ハードウェア・オブジェクトに対応するハードウェア・ドライバをオペレーティングシステムに組み込むことにより、
前記ホストプロセッサが、前記ハードウェア・モジュールに記憶された回路データにより制御される又は動作する予め組み込まれた回路と、前記主メモリに記憶されたハードウェア・ドライバとを、まとめてハードウェア・オブジェクトとして使用するようにした半導体回路制御装置。
【請求項２】
前記ホストプロセッサは、さらに、
アプリケーションが、メンバー関数を呼出し、
ハードウェア・オブジェクトが、それに対応するハードウェア・ドライバへ、メンバー関数に関連するデータを送り、
ハードウェア・ドライバが、ハードウェア・モジュール・ドライバへ送るべきメンバー関数に関連するデータをセットし、
ハードウェア・モジュール・ドライバが、セットされたデータに従い、バスを介してハードウェア・モジュールに回路を使うためのデータ信号を送信する
ようにした請求項１に記載の半導体回路制御装置。
【請求項３】
前記ハードウェア・モジュールは、さらに、
ハードウェア・モジュールが、前記バスを介して、前記ホストプロセッサからハードウェア・モジュール内の回路を使うためのデータを受信し、
ハードウェア・モジュール内の回路が、メンバー関数に関連する処理を実行し、
ハードウェア・モジュールが、該回路により得られたメンバー関数の処理結果を、前記バスを介して前記ホストプロセッサに送信する
ようにした請求項１又は２に記載の半導体回路制御装置。
【請求項４】
前記ホストプロセッサは、さらに、
ハードウェア・ドライバが、バスを介して、前記ハードウェア・モジュールの回路によるメンバー関数の処理結果を受信し、
ハードウェア・オブジェクトが、ハードウェア・ドライバにより受信された処理結果に従い、メンバー変数をセットし、
アプリケーションが、メンバー変数のセットされたハードウェア・オブジェクトを使用して処理を実行する
ようにした請求項１乃至３のいずれかに記載の半導体回路制御装置。
【請求項５】
前記ハードウェア・オブジェクトは、アプリケーションとハードウェア・ドライバとの間で情報の入出力を制御するインターフェースをさらに備えた請求項１乃至４のいずれかに記載の半導体回路制御装置。
【請求項６】
前記ハードウェア・モジュールは、
前記ホストプロセッサとデータあるいは命令を通信するバスに対するインターフェース回路と、
再構成可能な第１及び第２の回路と、
第１及び第２の局所メモリと
を備え、
前記インターフェース回路と、前記第１の局所メモリと、再構成可能な前記第１の回路とを双方向接続し、該第1の回路が第１の処理を実行し、
再構成可能な前記第１の回路と、前記の第２の局所メモリとを双方向接続し、前記第１の回路による第１の処理結果を前記第２の局所メモリに記憶し、
前記第２の局所メモリと再構成可能な前記第２の回路とを接続することにより、前記第２の回路は、第１の処理結果を用いて第２の処理を実行することを特徴とする請求項１乃至５のいずれかに記載の半導体回路制御装置。
【請求項７】
第１〜第Ｎのメモリと第１〜第Ｎの再構成可能な回路をさらに備え、
前記第１〜第Ｎの回路による処理結果をそれぞれ前記第１〜第Ｎのメモリを介して送受し、再構成可能な第Ｎの回路と、第１の局所メモリとを双方向接続して、パイプライン処理を実行するようにした請求項６に記載の半導体回路制御装置。
【請求項８】
前記ハードウェア・モジュールは、
回路とのデータの書込み・読出しを制御するローカルプロセッサと
をさらに備えた請求項６又は７に記載の半導体回路制御装置。
【請求項９】
再構成可能な複数の回路の回路データを記憶したハードウェア・モジュールと、アプリケーションの実行に用いられるハードウェア・オブジェクトの実行に必要であって前記ハードウェア・モジュールに記憶された回路データにより制御される又は動作する予め組み込まれた回路を制御するプログラムであるハードウェア・ドライバを記憶した主メモリと、を備えたアプリケーションの一部の処理を実行する回路が動的に再構成可能な半導体回路制御装置において、アプリケーションを実行するホストプロセッサが、前記ハードウェア・モジュールに記憶された回路データにより制御される又は動作する予め組み込まれた回路と、前記主メモリに記憶されたハードウェア・ドライバとを、まとめてハードウェア・オブジェクトとして使用するようにした半導体回路制御プログラムであって、
前記ホストプロセッサのオペレーティングシステムが立ち上がると、該オペレーティングシステムが、前記ハードウェア・モジュールに関する動作を制御するためのハードウェア・モジュール・ドライバを組み込むステップと、
あるアプリケーションが起動された場合、前記ホストプロセッサは、そのアプリケーションに関連したハードウェア・オブジェクトを生成するステップと、
生成されたハードウェア・オブジェクトが、ハードウェア・ドライバのオペレーティングシステム上への組み込みを管理するオブジェクト・マネジャーに要求を出すステップと、
オブジェクト・マネジャーが、ハードウェア・オブジェクトに対応するハードウェア・ドライバをオペレーティングシステムに組み込むステップと、
をホストプロセッサに実行させるための半導体回路制御プログラム。
【請求項１０】
アプリケーションが、メンバー関数を呼出すステップと、
ハードウェア・オブジェクトが、それに対応するハードウェア・ドライバへ、メンバー関数に関連するデータを送るステップと、
ハードウェア・ドライバが、ハードウェア・モジュール・ドライバへ送るべきメンバー関数に関連するデータをセットするステップと、
ハードウェア・モジュール・ドライバが、セットされたデータに従い、バスを介してハードウェア・モジュールに回路を使うためのデータ信号を送信するステップと
をさらに含む請求項９に記載の半導体回路制御プログラム。
【請求項１１】
ハードウェア・モジュールが、前記バスを介して、前記ホストプロセッサからハードウェア・モジュール内の回路を使うためのデータを受信するステップと、
ハードウェア・モジュール内の回路が、メンバー関数に関連する処理を実行するステップと、
ハードウェア・モジュールが、該回路により得られたメンバー関数の処理結果を、前記バスを介して前記ホストプロセッサに送信するステップと、
をさらに含む請求項９又は１０に記載の半導体回路制御プログラム。
【請求項１２】
ハードウェア・ドライバが、バスを介して、前記ハードウェア・モジュールの回路によるメンバー関数の処理結果を受信するステップと、
ハードウェア・オブジェクトが、ハードウェア・ドライバにより受信された処理結果に従い、メンバー変数をセットするステップと、
アプリケーションが、メンバー変数のセットされたハードウェア・オブジェクトを使用して処理を実行するステップと、
をさらに含む請求項９乃至１１のいずれかに記載の半導体回路制御プログラム。
【請求項１３】
前記ハードウェア・オブジェクトを使用して作成されたアプリケーションの任意の個所において、該ハードウェア・オブジェクトに応答して、それに対応するハードウェア・モジュール内の回路を制御・生成する関数であるコンストラクタを有することを特徴とする請求項９乃至１２のいずれかに記載の半導体回路制御
プログラム。
【請求項１４】
前記ハードウェア・モジュールに書き込まれた回路データにより制御される又は動作する予め組み込まれた回路を制御する所望の関数を有し、
該ハードウェア・オブジェクトを生成するのに連動して該回路データを再構成可能な半導体装置に書き込み、
該ハードウェア・オブジェクトを削除するのに連動して該回路データを半導体装置から削除することを特徴とする請求項９乃至１３のいずれかに記載の半導体回路制御プログラム。
【請求項１５】
前記ハードウェア・モジュールに書き込まれた回路データにより制御される又は動作する予め組み込まれた回路と通信する所望の関数を有し、
該ハードウェア・オブジェクトに読み書きするのに連動して、該回路データに局所的に読み書きを行う変数を有することを特徴とする請求項９乃至１４のいずれかに記載の半導体回路制御プログラム。
【請求項１６】
前記ハードウェア・モジュールに書き込まれた回路データにより制御される又は動作する予め組み込まれた回路の状態を示す状態変数を有し、
該状態変数を周期的あるいは常時監視することにより、該回路を制御することを特徴とする請求項９乃至１５のいずれかに記載の半導体回路制御プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、半導体回路制御装置及び半導体回路制御プログラムに係り、特に、マイクロプロセッサ、信号処理プロセッサとともに多数使用するシステムの基本部品の制御を行う半導体回路制御装置及び半導体回路制御プログラムに関する。また、本発明は、特に、膨大な計算量を扱う利用分野、例えば、画像処理、探索処理、認識処理、マルチ・プロセッサ・システムによる並列処理等の分野で使用されるアプリケーション・プログラムで使用される際に有効な半導体回路制御装置及び半導体回路制御プログラムに関する。
【０００２】
【従来の技術】
現在、再構成可能（reconfigurable）なハードウェアであるＰＬＤ（Programmable Logic Device）あるいはＦＰＧＡ（Field Programmable Gate Array）などのreconfigurable  ＬＳＩ（以下、ＦＰＧＡやＰＬＤを含めてＲＣ−ＬＳＩと総称する）の集積度並びに動作速度は大幅に向上した。また、Intelectual Property（ＩＰ）と呼ばれる部品を前提にシステムＬＳＩを開発するVirtual Core（ＶＣ）設計システム（Muraoka,M.:EDA Technology Direction Towards 2010, SASIM´98,pp.131-132(1998)）と同様に、汎用プロセッサ、ＰＣＩコントローラなど標準的回路がＩＰとしてＲＣ−ＬＳＩにも提供されおり、ＲＣ−ＬＳＩは今や主要なＬＳＩになっている。また、分散メモリとＲＣ−ＬＳＩとをつなぎ局在した処理を並列処理する事で、ノイマン・ボトル・ネックの解決法が追求されている。
再構成可能システム（Reconfigurable System（ＲＳ））としては、ＳＰＬＩＣＥ（E.Caspi,M.Chu,R.Huang,J,Yeh, Y.Markovskiy, A.DeHon and J.Wawrzynek: Stream Computations Organized for Reconfigurable Execution(SCORE): Introduction and Tutorial, UCB SCORE manual）、ＰｉｐｅＲｅｎｃｈ（Y.Chou,Pllai, P., Schmit, H., Shen, J.:PipeRench Implementation of the Instruction Path Coprocessor, DMU manual.）、ＣＤＦＧから回路を生成するＳ−Ｍａｃｈｉｎｅ（末吉敏則:Reconfigurable Computing Systemの現状と課題−Computer Evolutionへ向けて−,信学技法, Vol. VLD96, No. 79,pp.111-118(1992)）、メモリにある回路データで動的に回路を変更するＤＲＬ  ＬＳＩ（Yamashina,M. and Motomura, M.: Reconfigurable Computing:Its Concept and a Practical Embodiment using Newly Developed Dynamically Reconfigurable Logic(DRL)LSI, ASP-DAC 2000,pp. 329-332 (2000).）、新しい回路構成と回路のオブジェクトとメッセージを念頭に置いたＰｌａｓｔｉｃ  Ｃｅｌｌ  Ａｒｒａｙ（ＰＣＡ）（Imlig, N., Konishi, R., Shiozawa, T., Oguri,K. et al.: Communicating Logic: An Alternative Embeded Stream Processing Paradigm, ASP-DAC 2000,pp. 317-322 (2000).）など多くのシステムが提案されている（Hauser, J. R. and Wawrzynek, J.: Garp: A MIPS Processor with a Reconfigurable Coprocessor., IEEE Symposium on Field Programmable Gate Arrays for Custom Computing Machines, IEEE, pp.12-21(1997).）（J.Villasensor, C.Jones, B.: Video Communications Using Rapidly Reconfigurable Hardware, cas for Video Tech., Vol.5, No.6, pp.565-567(1995).）。
【０００３】
この中でＳＣＯＲＥはスケーラブルな再構成システムであり、Ｓｔｒｅａｍ型データを入力とする演算部とページングを行うセグメントと呼ぶ記憶部とでデーター・フロー・グラフを構成している。この構成でＪＰＥＧのようなフィード・フォワード型の問題では十分な性能が引き出せたことを報告している。ＰｉｐｅＲｅｎｃｈは狭いビット幅のｓｌｉｃｅを並列に並べたＶＬＩＷ型のｐｉｐｅｌｉｎｅ処理でフィード・フォワード型の問題を高速に処理できると述べている。
【０００４】
反面、こうしたビット演算やバイト演算などをパイプライン処理する画像処理や信号処理等で使われる方式は限られ、ＲＳに適したアプリケーションは数少ないとも言われている。また、通常のアプリケーションでは、複雑な条件判断・条件分岐、アドレス変換、関数呼び出しがデータ処理に付随しており、制御に関する処理が処理時間の大半を占めるため、ＲＳシステムでは期待したような性能が得られないとも考えられている。Ｓ−Ｍａｃｈｉｎｅでは、こうした制御部分をＣ、Ｃ＋＋などで記述し、高位合成によりデーターフローグラフ（ＤＦＧ）に変換し、スケジューリングを行い、レジスター・トランスファー・レベル（ＲＴＬ）のモデルを作成している。さらに、論理合成により論理回路を自動生成して高速化を図る方法を念頭に置いている。この方法はＲＣ−ＬＳＩを回路部品としてＡＳＩＣと組み合わせて使う視点に立っている。
【０００５】
他方、ソフトウェア部分が大半を占めるアプリケーションでの性能を向上させる視点に立って見ると、アプリケーションが使用するアルゴリズムは対象のデータ構造に依存して雑多である。こうしたアルゴリズムの基本部分の中には、データ探索・照合、常時監視、データ変換など、回路の並列・分散・実時間処理で実現することが好ましいものもある。特に、アプリケーションをオブジェクト指向設計（ＯＯＰ）で開発する上で、オブジェクト毎にソフトウェア（ＳＷ）にするかハードウェア（ＨＷ）にするかを選択し、ＳＷ／ＨＷ混載システムを構成する開発方法が考えられる。
【０００６】
汎用マイクロプロセッサ、ＤＳＰやゲートアレー等の従来からのプロセッサは製造後回路を変更することは出来ないＬＳＩである。ＰＬＤあるいはＦＰＧＡは、製造後に回路に埋め込まれたスイッチ部分のヒューズを焼き切る手段、ＥＰＲＯＭにスイッチの開閉データや論理回路の真理値表データを書き込む手段、ＳＲＡＭにＲＯＭからスイッチの開閉データや論理回路の真理値表データを書き込む手段などにより、ＬＳＩ製造後に利用者が回路データを書き込むことが出来る。
【０００７】
また、従来の技術では、ハードウェア・デバイスの割り当てはシステムの立ち上げ時に立ち上げプログラムやオペレーティング・システム（ＯＳ）によって行われて、システムに組み込まれてＯＳによって管理される。詳しくは、書き込まれた回路を動作させるためには専用の制御プログラムであるデバイス・ドライバを作成していた。このデバイス・ドライバはＯＳのデバイス・ドライバ管理プログラムにより管理され、ＰＬＤに書き込まれた回路は周辺装置としてシステムに組み込まれていた。
【０００８】
図１８に、従来のシステムＬＳＩの階層の説明図を示す。
従来のシステムＬＳＩでは、関連するアプリケーション１０１、１０２、１０３がそれぞれデバイスドライバ１１１、１１２、１１３を必要とすると想定する。この場合、従来の技術では、システムの立ち上げ時、ＯＳ１２０が、関連する全てのアプリケーション１０１〜１０３のデバイス・ドライバ１１１、１１２、１１３を組込むことになる。
【０００９】
【発明が解決しようとする課題】
このようにＰＬＤに書き込まれた回路を常にシステムに組み込む従来の技術ではアプリケーションを動かす前に事前にＯＳに、全てのアプリケーションに関連する全てのデバイス・ドライバを組み込んでおかなければならず、実際に使用しないアプリケーションのデバイス・ドライバも組込まれる。そのため、従来は、余計なデバイス・ドライバも組込まれるので、ＯＳに負担がかかる。また、従来は、アプリケーション毎に一時的にＰＬＤに書き込まれる回路を実時間でハードウェア部品として登録し簡便に扱うことが出来ない。
【００１０】
そこで、本発明は、デバイス・ドライバやＯＳの知識がなくても、アプリケーション・プログラムを開発する上で自由に簡便にＰＬＤに書き込まれた回路を制御出来るようにするものである。通常は、アプリケーション毎に必要となる回路の種類や数量は異なるし、どのようなアプリケーションが実行されるかは不明なので、全アプリケーションに共通の回路を事前に用意しておくことは不可能である。また、アプリケーションに適した回路を必要な時期に用意できなければならないが、それも、アプリケーション・プログラムが実行された時でなければどの回路が必要なのか判明しない。
【００１１】
しかしながら、本発明によれば、アプリケーション・プログラム開発者はライブラリから単にハードウェア・オブジェクト部品を取り出して使用するだけで、通常のソフトウェアのオブジェクトを使用するのと変わらないようにすることを目的とする。すなわち、本発明は、アプリケーションからＯＳの助けを借りずに自由自在に書き込まれた回路を管理し制御できるようにすることを目的とする。また、計算量が非常に大きい問題や常時、監視しなければならないような問題を含むアプリケーションにおいては、プログラムによる逐次処理だけで行うとＣＰＵのリソースが上記の問題に消費されてしまいアプリケーション全体の処理速度が低下してしまう場合があるが、本発明は、このような課題を解決するものである。
【００１２】
さらに、本発明は、アプリケーション・プログラムからデバイス・ドライバやＯＳを介さずに直接にＰＬＤに書き込まれた回路を制御することでデバイス・ドライバやＯＳでの書き込まれた回路の追加・削除および制御に関するオーバーヘッドを削減することを目的とする。
【００１３】
【課題を解決するための手段】
本発明では、オブジェクト指向プログラミングでの開発手法に整合するオブジェクト・モデルの形でＰＬＤに書き込まれた回路、即ちハードウェア・ネット（hwNet）を包み込んだハードウェア・オブジェクト（hwObject）を使用する。ハードウェア・オブジェクトとしてオブジェクト・ライブラリに登録する。このオブジェクト・ライブラリから必要なハードウェア・オブジェクトをアプリケーション・プログラムの中で使用するうえで、ハードウェア・オブジェクトからアプリケーションに適したオブジェクトを派生させる時に機能やデータを拡張する事で回路の適切な制御が行える。
【００１４】
本発明が要求するハードウェア・オブジェクトに対する手段は、主に、次の点である。
（１）ＰＬＤ上に書き込まれる回路データに関する情報、オブジェクト識別子、入出力バッファー用変数、オブジェクトとして生成に関係するコンストラクタ関数あるいはそれと類似の関数でメモリ空間上にオブジェクトのインスタンスを生成するのに連動して、ＰＬＤ上に回路を書き込む処理を行う手段。
（２）オブジェクトの消滅に関係するデストラクタあるいはそれと類似の関数でメモリ空間上のオブジェクトのインスタンスを削除すると同時にＰＬＤ上の回路を削除する処理を行う手段。
（３）オブジェクトのインスタンスに対する読み書きに対応して回路に対するＩＯ処理を行う手段。
（４）ＰＬＤに書き込まれた回路の初期化、実行、中断、再開、中止、終了をそれぞれ行う関数。
（５）ＰＬＤに書き込まれた回路に関する次の情報を有する変数。回路の識別番号、動作中に回路が使用するメモリ・アドレスとサイズ、回路が書き込まれたＰＬＤの番号とＰＬＤの使用領域のアドレスとサイズ、回路に割り振られたデバイス番号、回路の動作中、処理終了、正常か異常など状態。
【００１５】
本発明の第１の解決手段によると、
アプリケーションの一部の処理を実行する回路が動的に再構成可能な半導体回路制御装置において、
アプリケーションを実行するホストプロセッサと、
再構成可能な複数の回路の回路データを記憶したハードウェア・モジュールと、
前記ホストプロセッサが実行する複数のアプリケーションと、該アプリケーションの実行に用いられるハードウェア・オブジェクトの実行に必要であって、前記ハードウェア・モジュールに記憶された回路データにより制御される又は動作する予め組み込まれた回路を制御するプログラムであるハードウェア・ドライバとを記憶した主メモリと、
前記ホストプロセッサと前記主メモリ及び前記ハードウェア・モジュールとの間で、データを通信するバスと
を備え、
前記ホストプロセッサのオペレーティングシステムが立ち上がると、該オペレーティングシステムが、前記ハードウェア・モジュールに関する動作を制御するためのハードウェア・モジュール・ドライバを組み込み、
あるアプリケーションが起動された場合、前記ホストプロセッサは、そのアプリケーションに関連したハードウェア・オブジェクトを生成し、
生成されたハードウェア・オブジェクトが、ハードウェア・ドライバのオペレーティングシステム上への組み込みを管理するオブジェクト・マネジャーに要求を出し、
オブジェクト・マネジャーが、ハードウェア・オブジェクトに対応するハードウェア・ドライバをオペレーティングシステムに組み込むことにより、
前記ホストプロセッサが、前記ハードウェア・モジュールに記憶された回路データにより制御される又は動作する予め組み込まれた回路と、前記主メモリに記憶されたハードウェア・ドライバとを、まとめてハードウェア・オブジェクトとして使用するようにした半導体回路制御装置が提供される。
【００１６】
本発明の第２の解決手段によると、
再構成可能な複数の回路の回路データを記憶したハードウェア・モジュールと、アプリケーションの実行に用いられるハードウェア・オブジェクトの実行に必要であって前記ハードウェア・モジュールに記憶された回路データにより制御される又は動作する予め組み込まれた回路を制御するプログラムであるハードウェア・ドライバを記憶した主メモリと、を備えたアプリケーションの一部の処理を実行する回路が動的に再構成可能な半導体回路制御装置において、アプリケーションを実行するホストプロセッサが、前記ハードウェア・モジュールに記憶された回路データにより制御される又は動作する予め組み込まれた回路と、前記主メモリに記憶されたハードウェア・ドライバとを、まとめてハードウェア・オブジェクトとして使用するようにした半導体回路制御プログラムであって、
前記ホストプロセッサのオペレーティングシステムが立ち上がると、該オペレーティングシステムが、前記ハードウェア・モジュールに関する動作を制御するためのハードウェア・モジュール・ドライバを組み込むステップと、
あるアプリケーションが起動された場合、前記ホストプロセッサは、そのアプリケーションに関連したハードウェア・オブジェクトを生成するステップと、
生成されたハードウェア・オブジェクトが、ハードウェア・ドライバのオペレーティングシステム上への組み込みを管理するオブジェクト・マネジャーに要求を出すステップと、
オブジェクト・マネジャーが、ハードウェア・オブジェクトに対応するハードウェア・ドライバをオペレーティングシステムに組み込むステップと、
をホストプロセッサに実行させるための半導体回路制御プログラムが提供される。
【００１７】
【発明の実施の形態】
１．  基本的システム構成
ここでは、ハードウェア・オブジェクトモデルによるアプリケーションを開発する上で必要となる基礎的な枠組みの説明を行う。ここで提案する構成は標準的なものであり、ＰＬＤやＦＰＧＡの内部構成には関与しないが、動的に回路が書き換え可能なＲＣ−ＬＳＩを考える。本実施の形態ではアプリケーション開発者がオブジェクトをハードウェアにするか、ソフトウェアにするか判断してプログラム全体を制御して性能向上を図ることを前提とする。また、どちらのオブジェクトも必要数だけ自由に確保できるようにメモリやＲＣ−ＬＳＩが後述する計算機に用意されているとする。
【００１８】
１．１  オブジェクトと回路
仮想回路をオブジェクトでラッピングしたハードウェア・オブジェクトモデルは通常のソフトウェア・オブジェクトと外見は同様であり、自由にプログラムの中で使用出来る。オブジェクト・ライブラリ中のオブジェクトから派生する方法を踏襲し、ハードウェア・オブジェクト・ライブラリを用意する。並列性が重視される画像認識、音声認識などの処理、常時観測が必要な処理など、専用回路に適した処理はハードウェア・オブジェクトとしてライブラリからＲＣ−ＬＳＩに読み出して処理する。ただし、ハードウェア・オブジェクトは回路であるのでタイミングや同期の制御は行わなければならない。
【００１９】
図１は、半導体回路制御装置の概要図である。
この半導体回路制御装置は、例えば、ＣＰＵ１１と、実際のメモリ空間であるメモリ１２と、仮想回路空間であるＰＬＤ１３とを備える。アプリケーション（アプリケーションプログラム）１は、ソフトウェアで実現してあるオブジェクトの他に最適な性能を実現する回路を含んだハードウェア・オブジェクト６も含まれている。アプリケーション１を実行する計算機は、メモリ素子で構成されるメモリ空間１２上にアプリケーションのソフトウェア・プログラム部分を配置し、ソフトウェアを実行するＣＰＵ１１とシステムバスで接続している。同時にＣＰＵ１１には複数のＰＬＤ１３を接続した標準バスが接続されている。このＰＬＤ１３はアプリケーションが起動され、動作中にハードウェア・オブジェクト６が起動されると、その回路部分のハードウェア・ネット１６が書き込まれる実ハードウェア部品である。メモリ素子と同様に多数のＬＳＩで回路空間を構成する。アプリケーション１が起動されるとメモリ１２内にアプリケーション１がまず配置される。プログラムの処理が進みハードウェア・オブジェクト（hwObject）６を生成するコンストラクタ文が実行されると、メモリ１２とＰＬＤ１３とに跨って（両方でセットとして）ハードウェア・オブジェクト６が配置される。ここでは、hwObject−１とhwObject−２のコンストラクタ文が実行されて二つのハードウェア・オブジェクト６が生成されている。アプリケーション１は、hwObject−１及びhwObject−２を含む。各ハードウェア・オブジェクト６に対応して、ハードウェア・ドライバ７及びハードウェア・ネット１６が存在する。ハードウェア・ドライバ７は、メモリ１２内に生成される。一方、ハードウェア・ネット１６は、仮想回路空間であるＰＬＤ１３内に、生成され且つ消去可能とされる。
【００２０】
図２は、ホストプロセッサとハードウェア・ネット間の制御概要の流れを示す図である。
ここでは、ハードウェア・オブジェクト６に対する読み書きの要求がアプリケーション１から、順次、要求を伝えてハードウェア・ネット１６にまで伝えて応答を返すまで処理が続く。この時、ハードウェア・ネット１６は並列動作を行う。アプリケーション１はハードウェア・オブジェクト６に実行を命令して、返答を待たずに、次の処理、例えば、別のハードウェア・オブジェクト６の実行を行っていく。ハードウェア・ネット１６の処理が終了したかどうかを調べる処理を行いハードウェア・オブジェクト６のメンバー変数の値を読み取る。このように、アプリケーション１のレベルでの並列処理にあった形でハードウェア・オブジェクト６を組み込み回路の並列性を適切に利用することが出来る。
【００２１】
以下に、基本的な動作を説明する。
まず、アプリケーション１が起動されると、ＯＳはアプリケーション１の実行に必要な領域をアプリケーション１が排他的に使用できるように確保して制御をアプリケーション１に渡す。アプリケーション１の起動・初期化プログラムは、プログラムで使用されるイベント管理、メッセージ管理等のＯＳとの通信やアプリケーション１内での管理に必要な基盤部分の立ち上げを行う。なお、ハードウェア・オブジェクト６の管理に必要な管理制御部分もこの時にアプリケーション部に組み込まれる。アプリケーションの動作中にハードウェア・オブジェクト６を生成する文が実行されると、ハードウェア・オブジェクト６がメモリ領域にＩＯ処理部であるハードウェア・ドライバ７を含んで生成される。ＰＬＤ１３には同時に回路ハードウェア・ネット１６が書き込まれ、ハードウェア・オブジェクト６が排他的に使用できるように設定される。このハードウェア・ネット１６の回路データは、例えば、このハードウェア・ネット１６の動作仕様を動作記述言語により記述し、設計自動化ツールである高位・論理合成、配置・配線ツールを使いＰＬＤ１３に書き込まれる回路データを事前に作成して、回路ライブラリに登録しておくことができる。ここで、事前にハードウェア・ネット１６を書き込んでおき、ハードウェア・オブジェクト６の生成時に回路を単に活性化させ、回路の書き込み時間を短縮させることは容易に考えられる。ハードウェア・オブジェクト６は一度生成されるとハードウェア・オブジェクト６を消滅させる文が実行されるかアプリケーション１が終了するまで存在し続ける。アプリケーション１の動作中にハードウェア・オブジェクト６に対する読み書きを行う文が実行されると、それがハードウェア・ネット１６に関係するメンバー変数やメンバー関数に対する場合には、ハードウェア・ドライバ７を介してハードウェア・ネット１６に対するＩＯ処理を行う。
【００２２】
２．半導体回路制御装置（プログラム）の詳細
２．１  全体的構成
図３に、半導体装置（システムＬＳＩ）の構成図を示す。
このシステムＬＳＩは、例えば、ホストプロセッサ（ＨＰ．host Processor）３１と、メインメモリ（ＭＭ．Main Memory）３２と、ハードウェアモジュール（hwModule）３３と、バス３５とを備える。バス３５には、ホスト・プロセッサ３１とメインメモリ３２の間にバスブリッジを設けてもよい。図に示すように、ソフトウェア・プログラムの大半はメインメモリ３２に置かれ、ホスト・プロセッサ３１により実行される。各種制御・処理のための回路は仮想化され、ハードウェア・ネット（hwNet）として、システムバス又は標準バス上に置かれたハードウェア・モジュール３３と名付けたハードウェア部品中に設けられ、ホストプロセッサ３１が必要となった時点に一時的に書き込まれ、不要になれば消去される。この生成・消去の手順は、ソフトウェアのオブジェクトと同じようにコンストラクタとデストラクタ演算子で行われる。ハードウェア・モジュール３３はメモリ型のデバイスとして認識され、ハードウェア・オブジェクト６への読み書きは主メモリ３２上に作られたオブジェクトと同じように行われる。メモリ空間上に自由にオブジェクトが作れるのと同じように、ハードウェア・オブジェクト６が自由に作られる仮想回路空間を実部品として提供するのがハードウェア・モジュール３３である。従って、大きな仮想回路空間を張るように多量のハードウェア・モジュール３３を事前に用意する。ハードウェア・オブジェクト６を使った計算モデルは仮想回路をオブジェクトとして扱い、アプリケーション１にハードウェア・ネット１６を埋め込むインターフェースを提供するものである。
【００２３】
２．２  ハードウェアモジュール構成
図４に、ハードウェア・モジュール３３のブロック構成図を示す。
再構成可能システムを構成する基本単位として、図４に示すようなハードウェアボードである、ハードウェア・モジュール３３を導入する。ハードウェア・モジュール３３は、例えば、複数のＲＣ−ＬＳＩ、標準バス・インターフェース（ＢＩ）４１、ローカル・メモリ（ＬＭ）４２、ローカル・プロセッサ（ＬＰ）４３、ＦＰＧＡ４４、をローカル・バスで接続する構成になっている。ＬＰ４３はハードウェア・モジュール３３内のサービスを行う。ＬＰ４３によってハードウェア・ネット１６はＪＴＡＧ方式で任意のＲＣ−ＬＳＩを選択して書き込まれる。ＢＩ４１は、後述するハードウェア・ドライバの制御命令によりＨＰ３１とハードウェア・ネット１６との通信を制御する。ハードウェア・モジュール３３自体はメモリ・デバイスとして認識され、メモリと同じような形態で標準バス（例えば、ＰＣＩ）に接続して計算機に組み込まれる。この時、ＯＳによりハードウェア・モジュール・ドライバと呼ぶデバイス・ドライバが組み込まれ、メモリ領域が割り当てられる。多数のメモリ・チップが一様且つ平坦なメモリ空間を構成するように多数のハードウェア・モジュール３３内のＲＣ−ＬＳＩは仮想回路空間を構成する。
【００２４】
図４に示すようなハードウェア・モジュール３３を使用することで、複数のハードウェア・ネット１６を別々のＦＰＧＡ４４に配置する事でＦＰＧＡ−１に置かれた最初のhwNet−１の出力をＬＭ−２に書き込み、それをＦＰＧＡ−２に書き込まれたhwNet−２が読み込む事で、hwNet−１とhwNet−２とは同時に動作してパイプライン処理をする事ができる。さらに、最終段のハードウェア・ネット１６の出力をhwNet−１に戻す事で繰り返し処理が行える。また、ＬＰによりホストプロセッサ３１の負担を減らす事ができる。すなわち、ＦＰＧＡ４４に書き込まれる使用頻度が高いハードウェア・ネット１６の書き込みは、ＢＩ４１を通してこのＬＰ４３に書き込み命令を送る事で可能である。
【００２５】
２．３  ＣＰＵ構成
図５に、ＣＰＵの階層構成図を示す。
ＣＰＵ３１は、アプリケーション１、オブジェクト・マネジャー２、ハードウェア・モジュール・ドライバ３、ＯＳ４、バス５を備える。この例では、アプリケーション１を３つ含む例を示しているが、適宜の数のアプリケーションを有することができる。各アプリケーション１は、ひとつ又は複数のハードウェアオブジェクト６、ハードウェアドライバ７、アプリケーション１とハードウェアドライバ７との入出力を制御するインターフェース８の組を有する。
【００２６】
図に示す各ハードウェア・ドライバ７は、ハードウェア・ネット１６毎に定義され、ハードウェア・ネット１６の入出力動作を制御する。ハードウェア・ドライバ７には、例えば、hwNetの端子情報、書き込み、読み込み、イネーブル、アウトプット・イネーブルなどのhwNetの制御情報、hwObject番号、hwNet番号、hwModule番号、割り当てＰＬＤ番号、hwNet割り当て端子番号、局所メモリ割り当てアドレス、局所メモリ割り当て領域サイズ、hwNet状態、hwNet命令、主メモリでのhwNet通信領域アドレス、hwNet通信領域サイズ、hwNet通信領域カレント・アドレスなどの通信制御情報が組み込まれている。これらの情報は、ハードウェア・ネットの回路情報と共にハードウェア・ネットライブラリに保存されている。ハードウェア・オブジェクト６が生成されてハードウェア・ネット１６がロードされる時には、hwModule番号、hwNet番号、ＰＬＤ番号などを取得してハードウェア・ドライバ７がハードウェア・オブジェクト６の一部として生成される。
【００２７】
ハードウェア・モジュール３３を計算機に組み込んだ時、図に示すハードウェア・モジュール・ドライバ３は添付されたデバイス情報をもとにＯＳ４にデバイス・ドライバとして永続的に登録される。このハードウェア・モジュール・ドライバ３は、計算機のバスに接続されたハードウェア・モジュール３３に対する通信を制御している。例えば、標準バスとしてＰＣＩバス５を使う時にはＰＣＩデバイス情報などがＯＳから割り当てられる。計算機を立ち上げる時には常にハードウェア・モジュール・ドライバ３は、ＯＳに事前に組み込まれる。
一方、このハードウェア・モジュール・ドライバ３に反して、ハードウェア・オブジェクト６のハードウェア・ドライバ７は、ハードウェア・ネット１６が存在する時だけハードウェア・モジュール・ドライバ３の中に組み込まれ、ＯＳ４がハードウェア・ドライバ７を感知することはない。他方、ハードウェア・オブジェクト６側は、ハードウェア・ドライバ７をＯＳに組み込まれたデバイス・ドライバのように見なしてハードウェア・ネット１６に対するアクセスを行う。このとき、どのハードウェア・モジュール３３に対するアクセスを行うかなどは考慮する必要がない。
【００２８】
このように、本発明では、ＯＳ４側からは、ハードウェア・モジュール・ドライバ３が常時組み込まれるデバイス・ドライバとして安定して制御及び監視を行う事ができるので、システムの安定性を保証する事ができる。他方、アプリケーション１側からは、ハードウェア・ドライバ７が必要なときにだけ割り当てられるので、ハードウェア・ネット１６を使う自由度が大幅に増すことになる。
【００２９】
図６は、ホストプロセッサのフローチャート（１）である。
ＨＰ３１では、まず、ＯＳが立ち上がると（Ｓ１０１）、ＯＳは、ハードウェア・オブジェクト６を使う際又はその前の適当なときに、ハードウェア・モジュール・ドライバ３を組み込む（Ｓ１０３）。アプリケーション１が起動した場合、アプリケーション１は、そのアプリケーションに関連したハードウェア・オブジェクト６を生成する（サブルーチン実行）（Ｓ１０５）。ハードウェア・オブジェクト６が生成されると、ハードウェア・オブジェクト６がオブジェクト・マネジャー２に要求を出す（Ｓ１０７）。オブジェクト・マネジャー２がハードウェア・オブジェクト６に対応するハードウェア・ドライバ７を組み込む（Ｓ１０９）。
【００３０】
図７は、ホストプロセッサのフローチャート（２）である。
つぎに、ＨＰ３１では、アプリケーション１が実行されると、アプリケーション１は、メンバー関数を呼出す（Ｓ２０１）。ハードウェア・オブジェクト６に対応するＩ／Ｆ８からハードウェア・ドライバ７へメンバー関数に関連するデータと指示を送る（Ｓ２０３）。ハードウェア・ドライバ７は、このデータと指示を受け、ハードウェア・モジュール・ドライバ３にデータをセットする（Ｓ２０５）。ハードウェア・モジュール・ドライバ３は、セットされたデータにより、バスにハードウェア・ネット１６を使うためのデータ信号を送信する（Ｓ２０７）。
図８は、ハードウェア・モジュールのフローチャートである。
ハードウェア・モジュール３３では、ＨＰ３１が送信したデータをバス３５を介して受信し、ＰＣＩ−バスＩ／Ｆ４１はローカルプロセッサ４３の制御により、受信データを関連するハードウェア・ネット１６に送る（Ｓ３０１）。ハードウェア・ネット１６は、受信データに従い、メンバー関数に関連する所定の処理を実行する（Ｓ３０３）。ＰＣＩ−バスＩ／Ｆ４１がローカルプロセッサ４３の制御により、バス３５へ処理結果を送信する（Ｓ３０５）。
図９は、ホストプロセッサのフローチャート（３）である。
つぎに、ＨＰ３１では、ハードウェア・ドライバ７がバス３１を介して、ハードウェア・モジュール３３のハードウェア・ネット１６で実行された、メンバー関数の処理結果をバス３５を介して受信する（Ｓ４０１）。オブジェクト・マネジャー２は、ハードウェア・オブジェクト６にＩ／Ｆ７を介してその処理結果を送り、ハードウェア・オブジェクト６は、メンバー変数に値をセットする（Ｓ４０３）。アプリケーション１は、メンバー変数のセットされたハードウェア・オブジェクト６を使用することで所定の処理を実行する（Ｓ４０５）。
【００３１】
３．  ハードウェア・オブジェクト
ライブラリにある仮想回路から派生クラスを作り、逐次的な処理の中で、ハードウェア・オブジェクト６としてハードウェア・ネット１６の同期を考慮して使用する。
【００３２】
３．１  基本クラス
基本クラスhwObject_base_classは以下に示すようにメンバー変数、メンバー関数の他に仮想回路ハードウェア・ネット１６を内包した抽象クラスである。全てのハードウェア・オブジェクト６は、ライブラリ中のハードウェア・オブジェクト６も含めて、このhwObject_base_classから派生させる。hwObject_base_classの主な構成は、ハードウェア・オブジェクト６の回路部分にあたるhwNet名、hwNetのＩＯに対応するメンバー変数port、ＬＭに領域が確保される局所変数localint、生成（コンストラクター）・消滅（デストラクタ）演算子、他のオブジェクトからのこのオブジェクトのportに対するアクセスに対応して実行されるハードウェア・ネットに対するＩＯ命令を含む。
図１０に、ハードウェアオブジェクトの基底クラスの説明図を示す。この図では、オブジェクト指向言語であるクラス定義を用いて、回路データと該回路を制御するread、writeプログラムなどをまとめてハードウェアを含むハードウェア・オブジェクト部品の基本クラス （オブジェクト名）hwObject_base_classとして定義している（▲１▼参照）。
図中の宣言の中で該回路に対する読み(read)書き(write)を行う関数の例として
void write(byte portNo, byte value);
byte read (byte portNo, byte value);
を宣言している（▲５▼参照）。
【００３３】
”該ハードウェア・オブジェクトを生成する“特別な関数であるコンストラクタはクラス名と同じ関数hwObject_base_class (int hwobjid, AnsiString hwNet)として定義されており（▲３▼参照）、この関数の中で”該回路を再構成可能な半導体装置に書き込む命令“を実行する。同様に”該ハードウェア・オブジェクトを削除する“特別な関数であるデストラクタはクラス名の前に「~」をつけて~hwObject_base_class()と定義されており（▲４▼参照）、この関数の中で“該ハードウェア・オブジェクトを削除するのに連動して該回路を半導体装置から削除する命令を実行する。
図中、回路の状態を示す状態変数のうち（▲２▼参照）outPort変数として
outPort   _RDY，＿STATUS;
と宣言してある。
【００３４】
また、状態を監視する関数としてbool check( outPort stat );
を宣言している（▲６▼参照）。図中、制御関数はこのcheck（）関数を対象となる複数の関数に対して呼び出し論理結果を調べればよい。例えば
for（int I=0; I<hwNetSu; I++）{ hwNet* hwNetp = findHwNetP(hwNet[I]); hwNetp->check( );
のように記述すればよい。
【００３５】
図１１は、派生したハードウェア・オブジェクトの例を示す説明図である。
図１１（ａ）は、通常のオブジェクト指向言語Ｃ＋＋での派生クラスの仕方に従ってユーザが自分の目的にあった新しいハードウェア・オブジェクトクラスmyHwObj1を派生させている（?参照）。この派生により、基本クラスhwObject_base_classで定義されている関数や機能のうち必要なものは継承されている。
図中の宣言の中で関数、該回路を該ハードウェア・オブジェクト部品から制御する関数の例として
void funcX(int objNo, int netNo)   ;
byte funcY(byte portNo, byte value);
を宣言している。
図１１（ｂ）も同様に新しいハードウェアオブジェクトクラスmyHwObj2を派生させている（▲２▼参照）。
【００３６】
３．２  生成演算子とロード
生成（消滅）演算子は、ＭＭ３２のメモリ領域確保（削除）の他にハードウェア・モジュール３３のＬＭ４２のメモリ領域確保（削除）と仮想回路のロード（アンロード）を行う。hwObject_base_classにはハードウェア・オブジェクト６のメンバー変数の読み書きとメンバー関数の読み出しは通常のソフトウェア・オブジェクトと同様である。イベント駆動型やスレッド・オブジェクト型のオブジェクトにする場合は多重継承させて新しいハードウェア・オブジェクト６が定義できる。
【００３７】
ハードウェア・ネット１６は、後述するように事前にＨＤＬで記述しビット・イメージを生成して回路ライブラリに登録する。hwNet-nameで指定されたハードウェア・ネット１６がハードウェア・オブジェクト６の生成時にＲＣ−ＬＳＩにロードされる。全てのハードウェア・ネット１６は共通の制御方式によって制御され、その制御ポートはhwObject_base_classに宣言されている。ハードウェア・オブジェクト６は入出力データ領域、命令領域、状態領域をＭＭ３２とＬＭ４２に確保する。ハードウェア・ネット１６はＬＭ命令領域を常時監視し命令を実行する。以上のように、ハードウェア・オブジェクト６は、ＭＭ部とＬＭ部とハードウェア・ネット１６と空間的に離れた部分をカプセル化している。
【００３８】
図１２は、ハードウェア・ネットのＨＤＬ記述例を示す説明図である。
この図はハードウェア記述言語を用いて記述した回路hwNet１の入出力端子の定義を含んだ例を示す。この記述を自動設計ツールの一つである論理合成、配置配線などにより回路データが作成される。ここでは、インプットとアウトプットの変数が宣言されている。
【００３９】
３．３  動作手順
図１３に、ハードウェア・オブジェクトの使用例の説明図を示す。
図では、myHwObj1のメンバー関数中funcXの内容が記載されている。メンバー関数中funcXで、まず図中（ａ）でオブジェクトhwObj2はmyHwObj1の中で宣言される。図中（ｂ）のｎｅｗ演算子で生成されたオブジェクトmyHwObj2のポインタが代入される。即ち、ｎｅｗ関数は、myHwObj2というクラスのオブジェクトをつくって名前をhwObj2とするものである。この処理は、上述のフローチャートのステップＳ１０１〜Ｓ１０９に相当する。ハードウェア・オブジェクトの生成が行われると、空いているハードウェア・モジュール３３を探し、メモリ領域がＭＭ３２とＬＭ４２に確保され、ＲＣ−ＬＳＩに所定の状態変数がそれぞれロードされる。hwObj2はdelete演算子で消滅させない限りメモリ領域とそれに対応するhwNet2は確保されたままである。なお、一時的なものとして作られたハードウェア・オブジェクトの部分は、funcX()関数から抜ける時には、デストラクタによりオブジェクトの消滅が行われ、ＭＭ３２とＬＭ４２でのメモリ領域が開放され、ハードウェア・ネット１６もアンロードされる。図中（ｄ）では、hwObj2のi_1にxを代入する。この処理は上述のフローチャートのステップＳ２０５に相当する。図中（ｅ）では、hwObj2のｅｘｅｃ関数を実行する。この処理は同じくステップＳ２０７に相当する。その後、図中（ｇ）のcheck()関数でhwObj2の動作状態が調べられる。即ちハードウェア・ネットから戻るデータを受信したか否かを調べるもので、既存の制御文でハードウェア・ネットとのデータ送受信制御が可能となる。この処理は上述のフローチャートのステップＳ４０１に相当する。次に状態が「偽」になったら、ｗｈｉｌｅ文を抜けてhwObj2の出力がｙに代入される。この値ｙは、アプリケーション１が使用するものである。オブジェクトのメンバー変数やメンバー関数へのアクセスが（ｄ）のようにあった時には対応するアドレスにデータが送られる。このアドレスは通常、コンパイラにより事前に解読（デコード）されている。
【００４０】
４．  ハードウェア・マネジャー
４．１  オブジェクト管理（オブジェクト・マネジャー、ObjectManager）
図１４に、オブジェクト・マネジャーの説明図を示す。
図に示すように、ハードウェア・オブジェクト・マネジャー２は、アプリケーション１に実装される。ハードウェア・オブジェクト・マネジャー２は、ハードウェア・オブジェクト６の生成・消滅時、ハードウェア・マネジャー６４を介してハードウェア・ネット１６をＲＣ−ＬＳＩで構成された仮想空間への書き込み、削除を管理を行う。ハードウェア・オブジェクト６に対して、実際に割り当てられたハードウェア・モジュール３３のデバイス番号、ＲＣ−ＬＳＩ番号、ＲＣ−ＬＳＩのピン番号、ＲＣ−ＬＳＩ内のhwNet番号、ＬＭのメモリ・アドレスと領域サイズ、管理領域などの情報をＯＳから得た情報を元に設定・管理する。ハードウェア・オブジェクト６に関するイベント管理部は、ハードウェア・オブジェクト・マネジャー２に実装される。イベント処理関数は、ハードウェア・オブジェクト６とハードウェア・オブジェクト・マネジャー２の管理テーブルを参照して、ＲＣ−ＬＳＩ内のハードウェア・ネット１６に対する通信をＬＭ４２を介して行う。ＲＣ−ＬＳＩ内でのハードウェア・ネット１６の制御は、ハードウェア・モジュール３３の制御部が優先権方式で調停を行い、管理領域の実行フラグに従ってＲＣ−ＬＳＩの制御ピン経由でハードウェア・ネット１６を起動する。ＲＣ−ＬＳＩ内の制御回路は、アサインされたhwNet番号に従ってＲＣ−ＬＳＩのリソースをハードウェア・ネット１６に割り当てる。オブジェクト間の通信は単一プロセッサ方式としてＨＰによりＭＭ−ＬＭ間のデータ転送で行われる。
【００４１】
４．２  ハードウェア管理（ｈａｒｄｗａｒｅ  Ｍａｎａｇｅｒ）
標準バスにハードウェア・ネット１６を動的に接続し動作させるため、ＯＳ４立ち上げ時に、ＯＳ４のデバイス管理部にハードウェア・モジュール・ドライバ３を組み込む。ハードウェア・マネジャー（hwManager）６４は、ハードウェア・ネット１６管理情報を元にハードウェア・モジュール・ドライバ３上に動的にハードウェア・ネット１６のデバイス・ドライバであるハードウェア・ドライバ７を提供する。ハードウェア・ネット１６は一時的に生成・消滅が頻繁に行われるので、ハードウェア・オブジェクト６のハードウェア・ネット１６とのインターフェースは、アプリケーション・レベルで管理を行う。アプリケーション・ソフトのハードウェア・オブジェクト６の一部として、ハードウェア・オブジェクト６毎にハードウェア・ドライバ７は作成・管理される。他方、ハードウェア・モジュール３３は、デバイスとしてＯＳレベルで管理される。
【００４２】
４．３  制御階層構成
図１５に、ハードウェア・マネジャーを備えたＣＰＵ側の制御階層構成図を示す。
ＣＰＵ３１は、上述の制御階層構成図におけるアプリケーション１、オブジェクト・マネジャー２、ハードウェア・モジュール・ドライバ３、ＯＳ４、バス５に加え、ハードウェア・マネジャー（Hardware Manager）９を備える。この例では、アプリケーション１を３つ含む例を示しているが、適宜の数のアプリケーションを有することができる。各アプリケーション１は、ひとつ又は複数のハードウェア・オブジェクト６、ハードウェア・ドライバ７、アプリケーション１とハードウェア・ドライバ７との入出力を制御するインターフェース８の組を有する。
【００４３】
ハードウェア・マネジャー９は、ハードウェア・オブジェクト６のインターフェース８とハードウェア・ドライバ７、及び、ハードウェア・ドライバ７とハードウェア・モジュール・ドライバ３とを直接に接続する。このように接続した後は、インターフェース８が送受する信号についてハードウェア・マネジャー９が介在しないで宛先アドレスの計算やオーバーヘッドを無くす事が出来る。あるいは、ハードウェア・マネジャー９が、信号の送受を監視して制御する方式も可能である。ハードウェア・マネジャー９は全アプリケーション間で共用できるハードウェア・ネットを共通管理するために図１５のように介在するもので、共用化を行わない図５に追加したものである。共用化の処理を行う場合にはハードウェア・ドライバ７は、同一のアプリケーション内の異なるハードウェア・オブジェクト６間、あるいは異なるアプリケーション内のハードウェア・オブジェクト６間で共用される。
【００４４】
図１６に、オブジェクト・マネジャーの他の実施の形態を示す。
この例では、上述のオブジェクト・マネジャー２が、アプリケーション１ごとに分割されてオブジェクト・マネジャー２−１〜２−３が備えられる。各オブジェクト・マネジャー２−１〜２−３は、相互に情報のやり取りをおこなう。この情報には、ハードウェア・ドライバの組み込み又は非組み込みに関する情報、ハードウェア・ドライバの種類の情報・識別情報等を含むことができる。ハードウェア・ドライバの共用化を行う場合には、各オブジェクト・マネージャー２−１〜２−３が集めたハードウェア・ドライバの組み込み情報をもとハードウェア・マネジャーが共用化を行う。
【００４５】
アプリケーションがハードウェア・ネットの共用化を行わずに排他的に使用する場合には、オブジェクト・マネジャーおよびハードウェア・マネジャーを統合して情報を一元管理する必要が無い。その場合には、それぞれのアプリケーション毎にオブジェクト・マネジャーおよびハードウェア・マネジャーは独立して存在することになる。
【００４６】
５．ハードウェア・ネットの他の実施の形態
図１７は、再構成可能な半導体装置ＰＬＤとその中に複数個の回路ハードウェア・ネット（hwNet）が書き込まれた図を示す。
上述の再構成可能な半導体装置ＰＬＤに書き込まれた回路であるハードウェア・ネット１６の入出力端子は、内部バスに接続されている。この内部バスは、入出力選択回路５１により前記回路を制御する所望の関数の制御に応じて再構成可能な半導体装置ＰＬＤの入出端子に接続される。この再構成可能な半導体装置ＰＬＤが選択されると、ハードウェア・ネット１６の入出力端子が、内部バス、入出力選択回路５１、再構成可能な半導体装置ＰＬＤの入出端子を介してハードウェア・モジュール３３のバスに接続される。入出力選択回路５１には、ハードウェア・ネット１６に関する情報として、hwNet番号、端子情報、hwNet状態、割り当て位置、再構成可能な半導体装置ＰＬＤの入出端子との対応関係が書き込まれている。再構成可能な半導体装置ＰＬＤにハードウェア・ネット１６に対する入出力命令が送られると、入出力選択回路５１は、上記の情報と比較して当該のハードウェア・ネット１６と再構成可能な半導体装置ＰＬＤの入出力端子とを結びハードウェア・モジュール３３のバスにハードウェア・ネット１６が接続しているように動作する。
【００４７】
６．  アプリケーション・プログラム
アプリケーション・プログラム（ＡＰＰＧ、アプリケーション）１は、例えば、標準Ｗｉｎｄｏｗ  ＯＳ下で動作する。通常、大半のアプリケーションでは、処理時間の大半を占める主要部分はメモリに常駐し、下位にいくつかの専用処理部を占める構造になっている。この主要部分の中には、仮想回路での並列動作に整合する部分があると考えられる。
【００４８】
６．１  構成規則と制約
ＡＰＰＧは以下の制約・規則に従って作成されるものとする。
（１）分散メモリと並列分散処理のアーキテクチャでｓｔｒｅａｍ型の入出力とパイプライン処理をする。
（２）逐次処理のオブジェクト指向プログラミングに標準ライブラリの基本クラスハードウェア・オブジェクト６から派生させたオブジェクトを埋め込む。ハードウェア・オブジェクト６を介して仮想回路ハードウェア・ネット１６の入出力を行う。ハードウェア・オブジェクト６に内包（カプセル化）したドライバでハードウェア・ネット１６を操作する。
（３）イベント（メッセージ）駆動型のオブジェクトで擬似並列動作も組み込む。イベントとイベント処理関数との対応関係をリストにしたイベント・リストとで構成。仮想回路の並列動作との同期をソフトウェアの逐次処理の流れの中で制御する。
【００４９】
６．２  データ処理の種類
ＡＰＰＧで使われる処理の種別のうちハードウェア・オブジェクト６での実現が好ましいものとして以下の処理が考えられる。
（１）検索：データベース検索他、多数のアルゴリズムで使われる。
（２）部分処理：座標計算、シミュレーションなどの並列計算で多数使われる。
（３）前処理：画像・音声など信号処理分野でのデータ変換処理として多用される。
（４）一致処理：認識処理で頻繁に使用される。同時に多数の候補を比較する場合が多い。
（５）アドレス変換：木構造のデータ処理で頻繁に使用される。データ構造が複雑でポインター処理が多用されるオブジェクト指向プログラム。
（６）常時監視：実時間処理を含む場合には必須の機能である。
【００５０】
６．３  処理フロー
ＡＰＰＧの一般的な特徴は、大規模な大域データ、大域的制御変数、データ・ベース、局所データ、局所制御変数、多数の関数が階層的に構成される。オブジェクト指向設計では、これらが、オブジェクトに内包され、標準的なオブジェクトから派生したオブジェクトに別のオブジェクトが組み込まれる。
ＡＰＰＧの処理は、まず、ＯＳがＡＰＰＧを起動すると、主ルーチンで初期設定を行った後に（メニュー項目で選ばれた）命令受付状態に入り、受け取った命令毎に動作条件を調べ対応する関数を呼び出し実行する。同様に、イベント駆動型のプログラムでも、初期化の後にメッセージ受付の状態に入る。大域データは持続的であるが、局所データの中には一時的なものと持続的なものとがある。関数呼び出し時にはスタックが用意され、引数や一時変数がスタックに置かれ、ｃａｌｌ命令が実行される。関数内でハードウェア・オブジェクト６に関するアクセス等の処理終了に伴いｒｅｔｕｒｎ命令が実行されてスタックは削除される。イベント（以下、メッセージも含む）駆動型ではイベントの送信・受理は非同期で行われる。また、並列にイベント処理が行われる。
【００５１】
６．４  イベント駆動
オブジェクトに対する非同期アクセスは、イベントを受け取る側のオブジェクトに作られたイベントとイベント処理関数とを対にしたイベント・リストにより処理される。イベントを発行するオブジェクトはそのメンバー関数の中でイベント発行し、イベント管理部のキューへ送り、次のコードを実行して関数の処理を終わる。イベント管理部は、キューからイベントを取り出し、イベントにある発行先オブジェクトのイベント・リストから、イベント処理関数を呼び出し、イベント処理を行う。
ハードウェア・オブジェクト６に内包された仮想回路hwNet１を動作させるイベント処理関数は、仮想回路hwNet１に対して起動信号を出す。逐次的に処理を進める場合には、その後、仮想回路hwNet１からの応答を待つｗｈｉｌｅループに入り、応答を調べ、条件成立後、次のコードを実行する。分散・並列的に行う場合には、仮想回路hwNet１の応答を調べずに、仮想回路hwNet２を実行する。その後、hwNet１の応答を監視するイベントを発行するか、ｗｈｉｌｅ文でhwNet１の監視を続けるかの制御方法をコードする。
並列実行をイベント処理関数のレベルでＯＳの管理下で行うには、スレッド・オブジェクトを使用する。スレッド関数の中から回路に対して制御を行う場合には、スレッドでの並列制御を組み込み、回路での並列動作と連動させることができる。
【００５２】
【発明の効果】
本発明によると、以上説明した通り、従来のＯＳがデバイスを管理する技術では、アプリケーション・プログラムの動作時に回路を組み込み事が不可能であったが、ハードウェア・オブジェクトを介して、アプリケーション・プログラムの動作時に回路を組み込み事が可能になる。
また、本発明によると、メモリ領域とＰＬＤ上の回路とを一体化して扱い、両者を同時に生成し管理することがアプリケーション・プログラムの中から直接行う事が出来る。
【００５３】
また、本発明によると、アプリケーション・プログラム開発者は通常のソフトウェアのオブジェクトを使用するのと変わらないように単にハードウェア・オブジェクトをライブラリから取り出して色々な回路を使用することができる。したがって、ソフトウェア・プログラム部品とハードウェア・回路部品とを組み合わせてアプリケーションを開発する事が出来るようになる。
また、本発明によると、今まではプロセッサの高速化や専用のＡＳＩＣだけにアプリケーション・プログラムの高速化を頼ってきたが、アプリケーションに合った回路を自前で用意する自由度が得られ、高速で多様なアプリケーションが得られる。
【００５４】
また、本発明によると、ソフトウェア・プログラムだけでは並列度が高いアプリケーションも逐次的なコード列に変換し擬似的に並列処理を行っていたが、並列動作を行う回路を必要なところで使用する事で適切な形で逐次処理と並列処理とを組み合わせることが出来る。
【図面の簡単な説明】
【図１】半導体回路制御装置の概要図。
【図２】ホストプロセッサとハードウェア・ネット間の制御概要の流れ図。
【図３】半導体装置の構成図。
【図４】ハードウェア・モジュール３３のブロック構成図。
【図５】ＣＰＵの階層構成図。
【図６】ホストプロセッサのフローチャート（１）。
【図７】ホストプロセッサのフローチャート（２）。
【図８】ハードウェア・モジュールのフローチャート。
【図９】ホストプロセッサのフローチャート（３）。
【図１０】ハードウェアオブジェクトの基底クラスの説明図。
【図１１】派生したハードウェア・オブジェクトの例を示す図。
【図１２】ハードウェア・ネットのＨＤＬ記述例を示す図。
【図１３】ハードウェア・オブジェクトの使用例の説明図。
【図１４】オブジェクト・マネジャーの説明図。
【図１５】ハードウェア・マネジャーを備えたＣＰＵの階層構成図。
【図１６】オブジェクト・マネジャーの他の実施の形態の図。
【図１７】再構成可能な半導体装置ＰＬＤとその中に複数個の回路ハードウェア・ネットが書き込まれた図。
【図１８】従来のシステムＬＳＩの階層の説明図。
【符号の説明】
１  アプリケーション
６  ハードウェア・オブジェクト
７  ハードウェア・ドライバ
１１  ＣＰＵ
１２  メモリ
１３  ＰＬＤ
１６  ハードウェア・ネット
【図１】
0003845021.tif 000002
【図２】
0003845021.tif 000003
【図３】
0003845021.tif 000004
【図４】
0003845021.tif 000005
【図５】
0003845021.tif 000006
【図６】
0003845021.tif 000007
【図７】
0003845021.tif 000008
【図８】
0003845021.tif 000009
【図９】
0003845021.tif 000010
【図１０】
0003845021.tif 000011
【図１１】
0003845021.tif 000012
【図１２】
0003845021.tif 000013
【図１３】
0003845021.tif 000014
【図１４】
0003845021.tif 000015
【図１５】
0003845021.tif 000016
【図１６】
0003845021.tif 000017
【図１７】
0003845021.tif 000018
【図１８】
0003845021.tif 000019