(57)【特許請求の範囲】
【請求項１】
半導体回路であって、
データを記憶するためのメモリと、
ハードウェアアクセラレータ開始アドレスを記憶するための第一記憶部と、
プログラムを実行し、前記プログラムの実行中のアドレスを示すプログラムカウンタの値がハードウェアアクセラレータ開始アドレスと等しくなると、前記プログラムの関数の引数のデータとベースアドレスとをスタックポインタに記憶されたメモリのアドレスに書き込み、前記スタックポインタのアドレスを出力する処理装置と、
前記処理装置の前記プログラムカウンタの値が前記ハードウェアアクセラレータ開始アドレスと等しくなると、前記処理装置から前記スタックポインタのアドレスを受信するハードウェアアクセラレータとを有し、
前記ハードウェアアクセラレータは、
第二記憶部と、
前記スタックポインタに記憶された前記メモリのアドレスから前記関数の引数のデータと前記ベースアドレスとを読み出し、前記ベースアドレスを前記第二記憶部に書き出し、前記引数のデータを用いて前記関数を実行する有限ステートマシンとを有する、
ことを特徴とする半導体回路。
【請求項２】
さらに、前記処理装置が出力する前記プログラムカウンタの値と前記ハードウェアアクセラレータ開始アドレスとを比較し、両者が一致すると一致信号を出力する比較器を有し、
前記ハードウェアアクセラレータは、前記比較器が一致信号を出力すると、前記プログラムカウンタの値が前記ハードウェアアクセラレータ開始アドレスになったと判断することを特徴とする請求項１記載の半導体回路。
【請求項３】
前記ハードウェアアクセラレータは、
前記スタックポインタに記憶された前記メモリのアドレス及びスタック読み出しアドレスを加算し、前記メモリのアドレスを出力する第１の加算器を有し、
前記第１の加算器により出力された前記メモリのアドレスから前記関数の引数のデータを読み出すことを特徴とする請求項１又は２記載の半導体回路。
【請求項４】
前記ハードウェアアクセラレータは、
前記ベースアドレス及びデータアドレスを加算し、前記メモリのアドレスを出力する第２の加算器を有し、
前記第２の加算器により出力された前記メモリのアドレスそれぞれに対してデータの読み出し又は書き込みを行うことを特徴とする請求項１〜３のいずれか１項に記載の半導体回路。
【請求項５】
前記ハードウェアアクセラレータは、さらに、
前記第１と第２の加算器の出力を選択するセレクタを有することを特徴とする請求項４に記載の半導体回路。
【請求項６】
前記ハードウェアアクセラレータ開始アドレスは、
前記処理装置によって処理される前記プログラムの前記関数のアドレスを示すことを特徴とする請求項１〜５のいずれか１項に記載の半導体回路。
【請求項７】
前記処理装置は、さらに、
前記スタックポインタの前記アドレスの出力のあとに、無限ループ処理またはスリープ命令を実行することを特徴とする請求項１〜６のいずれか１項に記載の半導体回路。
【請求項８】
前記ハードウェアアクセラレータは、さらに、
前記関数に内部バスの通過を許可するラッパー回路を有することを特徴とする請求項１〜７のいずれか１項に記載の半導体回路。
【請求項９】
半導体回路の設計装置であって、
前記設計装置は、
処理装置が処理を行うプログラム中の引数を有する関数である第１の関数を、ハードウェアアクセラレータに処理される前記第１の関数の処理完了待ちの処理を行う第２の関数に置き換える第１の変換部と、
前記第１の関数を有するプログラムをコンパイルし、前記処理装置に当該プログラムを処理させるための実行ファイルを生成するコンパイル部と、
前記第１の関数を前記ハードウェアアクセラレータに処理させるために、前記第１の関数の引数をローカル配列化する第２の変換部と、
前記第１の関数をハードウェア化するためにローカル配列化された前記第１の関数を高位合成し、前記ハードウェアアクセラレータの設計データを生成する高位合成部と
を有し、
前記半導体回路は、
データを記憶するためのメモリと、
ハードウェアアクセラレータ開始アドレスを記憶するための第一記憶部と、
プログラムを実行し、前記プログラムの実行中のアドレスを示すプログラムカウンタの値がハードウェアアクセラレータ開始アドレスと等しくなると、前記プログラムの関数の引数のデータとベースアドレスとをスタックポインタに記憶されたメモリのアドレスに書き込み、前記スタックポインタに記憶された前記アドレスを出力する前記処理装置と、
前記処理装置のプログラムカウンタの値が前記ハードウェアアクセラレータ開始アドレスと等しくなると、前記処理装置から前記スタックポインタのアドレスを受信するための前記ハードウェアアクセラレータとを有し、
前記ハードウェアアクセラレータは、
第二記憶部と、
前記スタックポインタに記憶された前記メモリのアドレスから前記関数の引数のデータと前記ベースアドレスとを読み出し、前記ベースアドレスを前記第二記憶部に書き出し、前記引数のデータを用いて前記関数を実行する有限ステートマシンとを有ることを特徴とする設計装置。
【請求項１０】
前記高位合成部は、
前記ハードウェアアクセラレータのレジスタートランスファレベル設計データを生成することを特徴とする請求項９に記載の設計装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体回路及び設計装置に関する。
【背景技術】
【０００２】
ＳｏＣ（System-on-a-chip）では、半導体回路の集積度の向上と共に、年々アプリケーションが複雑かつ大規模になってきており、これを処理するプロセッサやＤＳＰ（デジタルシグナルプロセッサ）に求められる処理能力は増加の一途を辿っている。一方で、プロセッサやＤＳＰの処理能力も、テクノロジの進歩と共に向上を続けてきたが、近年では、半導体回路の微細化を利用した動作周波数の向上は消費電力の増大がネックとなり望めなくなり、代わりに特定のアプリケーションに特化した命令を追加し、処理能力を向上させる手法等が採られている。
【０００３】
図１は、ＳｏＣの構成例を示す図である。ＳｏＣ１０１は、内部バス１１１、中央処理装置（ＣＰＵ）１１２、ハードウェアアクセラレータ１１３、内部メモリ１１４及びメモリコントローラ１１５を有する。ハードウェアアクセラレータ１１３は、有限ステートマシン１３１、制御レジスタ１３２、ベースアドレス記憶部１３３及び加算器１３４を有する。内部メモリ１１４は、アドレステーブル１２１及び入出力データ１２２を記憶する。内部バス１１１には、中央処理装置１１２、ハードウェアアクセラレータ１１３、内部メモリ１１４及びメモリコントローラ１１５が接続される。メモリコントローラ１１５は、外部メモリ１０２を制御する。
【０００４】
ＳｏＣ１０１のアプリケーションは、中央処理装置１１２によるソフトウェア部分とハードウェアアクセラレータ１１３によるハードウェア部分に分割される。中央処理装置１１２及びハードウェアアクセラレータ１１３は、内部バス１１１に接続され、内部メモリ１１４を共有する。ハードウェアアクセラレータ１１３を動作させるために、ハードウェアアクセラレータ１１３の制御レジスタ１３２が定義される。制御レジスタ１３２は、ビット毎に有限ステートマシン１３１が行う処理が割り当てられている。中央処理装置１１２は、パス１４１によりハードウェアアクセラレータ１１３のメモリアクセスに使用されるベースアドレスを内部メモリ１１４内のアドレステーブル１２１から読み出し、パス１４２によりハードウェアアクセラレータ１１３内のベースアドレス記憶部１３３にベースアドレスを書き込む。また、中央処理装置１１２は、パス１４２により制御レジスタ１３２の各ビットにデータを書き込む。制御レジスタ１３２にデータが書き込まれると、有限ステートマシン１３１は制御レジスタ１３２の各ビットの値に応じて処理を行う。例えば、有限ステートマシン１３１は、データ読み出しアドレスを加算器１３４に出力する。加算器１３４は、ベースアドレス記憶部１３３のベースアドレス及び有限ステートマシン１３１のデータ読み出しアドレスを加算し、内部メモリ１１４のアドレスを出力する。有限ステートマシン１３１は、パス１４３により加算器１３４の出力アドレスの内部メモリ１１４からデータ１２２を読み出し、読み出したデータに対して所定の処理を行う。そして、有限ステートマシン１３１は、加算器１３４にデータ書き込みアドレスを出力する。加算器１３４は、ベースアドレス記憶部１３３のベースアドレス及び有限ステートマシン１３１のデータ書き込みアドレスを加算し、内部メモリ１１４のアドレスを出力する。有限ステートマシン１３１は、パス１４３により加算器１３４の出力アドレスの内部メモリ１１４に上記の処理したデータを書き込む。有限ステートマシン１３１は、制御レジスタ１３２の値に応じた処理が終了すると、処理完了通知の割り込み信号１４４を中央処理装置１１２に出力する。
【０００５】
また、データを処理するための装置であって、データ処理オペレーションを実行するプログラム命令制御下で動作するプログラム可能な汎用プロセッサと、プロセッサに接続されたメモリシステムと、プロセッサ及びメモリシステムに接続されたハードウェアアクセラレータと、ハードウェアアクセラレータに接続されたシステム監視回路とを具備する装置が知られている（例えば、特許文献１参照）。
【０００６】
また、ソースコードにおける仕様を分割する方法であって、仕様を複数の抽象構文木に変換するステップと、複数の抽象構文木を第１のプロセッサによって実現されるべき第１の抽象構文木の組と第２のプロセッサによって実現されるべき第２の抽象構文木の組に分割するステップとを備えた方法が知られている（例えば、特許文献２参照）。
【０００７】
また、任意のプログラムからファンクション識別子と引数とを指定してファンクションを呼び出した場合のプログラムの動的リンク方法であって、スタック上でファンクション識別子と引数との上に積まれるデータの内、プログラムへのリターン時に必要なデータを退避する行程と、ファンクション識別子に対応するファンクションをスタック上の引数を使って実行する行程と、ファンクション実行後に、退避したリターン時に必要なデータをスタック上の所定位置に復帰する行程とを備えるプログラムの動的リンク方法が知られている（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００９−１４０４７９号公報
【特許文献２】特表２００５−５３４１１４号公報
【特許文献３】特開平７−１３４６５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
中央処理装置１１２によるソフトウェア部分とハードウェアアクセラレータ１１３によるハードウェア部分に切り分ける場合には、これらのインターフェースとして制御レジスタ１３２を定義する。中央処理装置１１２は、プログラム（ソフトウェア）を実行することにより、制御レジスタ１３２に値を書き込み、ハードウェアアクセラレータ１１３を動作させる。しかし、制御レジスタ１３２の定義の設計が必要になり、かつソフトウェアには制御レジスタ１３２を制御する記述が必要になり、作業に時間が掛かると共に、処理性能上においてもオーバーヘッドが生じる。
【００１０】
本発明の目的は、制御レジスタの定義の設計を不要にし、かつソフトウェアの変更を自動化して、作業に掛かる時間を削減すると共に、処理装置がハードウェアアクセラレータを高速に起動させることができる半導体回路及びその設計装置を提供することである。
【課題を解決するための手段】
【００１１】
半導体回路は、データを記憶するためのメモリと、プログラムを実行し、前記プログラムの実行中のアドレスを示すプログラムカウンタの値がハードウェアアクセラレータ開始アドレスになると、前記プログラムの関数の引数のデータを前記メモリのスタックポインタのアドレスに書き込み、前記スタックポインタのアドレスを出力する処理装置と、前記処理装置のプログラムカウンタの値が前記ハードウェアアクセラレータ開始アドレスになると、前記処理装置から前記スタックポインタのアドレスを入力し、前記スタックポインタのアドレスを基に前記メモリから前記関数の引数のデータを読み出し、前記引数のデータを用いてハードウェア化した関数の処理を行うハードウェアアクセラレータとを有する。
【発明の効果】
【００１２】
ハードウェアアクセラレータの設計工数を削減すると共に、処理装置がハードウェアアクセラレータを高速に起動させることができる。
【図面の簡単な説明】
【００１３】
【図１】ＳｏＣの構成例を示す図である。
【図２】実施形態によるＳｏＣ（半導体回路）の構成例を示す図である。
【図３】図２のハードウェアアクセラレータの具体的な構成例を示す図である。
【図４】中央処理装置、内部メモリ及びハードウェアアクセラレータの処理例を示す図である。
【図５】ＳｏＣの設計方法を説明するための図である。
【図６】図５の設計方法の詳細を示すフローチャートである。
【図７】図５のコンピュータ（設計装置）のハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１４】
図２は、実施形態によるＳｏＣ（半導体回路）の構成例を示す図である。ＳｏＣ２０１は、半導体回路であり、内部バス２１１、中央処理装置（ＣＰＵ）２１２、ハードウェアアクセラレータ（ＨＡ）２１３、内部メモリ２１４、メモリコントローラ２１５、ハードウェアアクセラレータ開始アドレス記憶部２１６及び比較器２１７を有する。ハードウェアアクセラレータ２１３は、ハードウェア化した関数２３１、第１の加算器２３５及びセレクタ２３６を有する。ハードウェア化した関数２３１は、有限ステートマシン２３２、ベースアドレス記憶部１３３及び第２の加算器２３４を有する。内部メモリ２１４は、スタックメモリ２２２を有し、アドレステーブル２２１及び入出力データ２２３を記憶する。内部バス２１１には、中央処理装置２１２、ハードウェアアクセラレータ２１３、内部メモリ２１４及びメモリコントローラ２１５が接続される。メモリコントローラ２１５は、外部メモリ２０２を制御する。中央処理装置２１２は、プロセッサ又はＤＳＰ等の処理装置であってもよい。
【００１５】
本実施形態では、ＳｏＣ２０１のアプリケーションの任意の関数をハードウェア化し、そのハードウェア化した関数２３１をハードウェアアクセラレータ２１３内に設ける。中央処理装置２１２は、プログラムを実行し、プログラムの実行中のアドレスを示すプログラムカウンタの値２４１を出力する。ハードウェアアクセラレータ開始アドレス記憶部２１６は、ハードウェアアクセラレータ開始アドレス２４２を記憶する。ハードウェアアクセラレータ開始アドレス２４２は、中央処理装置２１２のプログラム中の上記の関数の開始アドレスである。中央処理装置２１２は、プログラムを実行し、プログラムカウンタの値２４１がハードウェアアクセラレータ開始アドレス２４２になると、プログラムの関数の引数のデータ及びベースアドレスを内部メモリ２１４のスタックメモリ２２２内のスタックポインタのアドレスに書き込み、スタックポインタのアドレス２４４を出力する。その後、中央処理装置２１２は、例えば無限ループ処理又はスリープ命令等のハードウェアアクセラレータ２１３の処理完了待ちの処理を行う。
【００１６】
比較器２１７は、プログラムカウンタの値２４１とハードウェアアクセラレータ開始アドレス２４２とを比較し、両者が一致すると一致信号２４３を出力する。ハードウェアアクセラレータ２１３は、比較器２１７が一致信号２４３を出力すると、プログラムカウンタの値２４１がハードウェアアクセラレータ開始アドレス２４２になったと判断し、中央処理装置２１２からスタックポインタのアドレス２４４を入力し、スタックポインタのアドレス２４４を基に内部メモリ２１４から関数の引数のデータを読み出し、その引数のデータを用いてハードウェア化した関数２３１の処理を行う。具体的には、有限ステートマシン２３２が、引数のデータを用いてハードウェア化した関数２３１の処理を行う。
【００１７】
以下、具体例を説明する。有限ステートマシン２３２は、スタック読み出しアドレス２４５を出力する。第１の加算器２３５は、スタックポインタのアドレス２４４及びスタック読み出しアドレス２４５を加算し、内部メモリ２１４のアドレス２４７を出力する。セレクタ２３６は、アドレス２４７を選択し、選択したアドレス２４７をアドレス２４８として内部メモリ２１４に出力する。有限ステートマシン２３２は、パス２４９により、第１の加算器２３５により出力された内部メモリ２１４のアドレス２４７のスタックメモリ２２２から関数の引数のデータ及びベースアドレスを読み出す。次に、有限ステートマシン２３２は、読み出したベースアドレスをベースアドレス記憶部２３３に書き込む。
【００１８】
なお、ベースアドレスは、スタックメモリ２２２に記憶させる場合に限定されない。例えば、予め、アドレステーブル２２１にベースアドレスを記憶させておいてもよい。その場合、有限ステートマシン２３２は、アドレステーブル２２１からベースアドレスを読み出し、読み出したベースアドレスをベースアドレス記憶部２３３に書き込む。
【００１９】
また、ハードウェア化した関数２３１は、高位合成により、プログラム中の関数をハードウェア化した関数である。高位合成は、ＳｙｓｔｅｍＣのような高級言語のプログラムを基にハードウェア化したＲＴＬ設計データを生成する。例えば、高位合成時に、関数の引数はローカル配列化し、高位合成することにより、ハードウェアアクセラレータ２１３は、スタックメモリ２２２から関数の引数を読み出すことが可能になる。
【００２０】
次に、有限ステートマシン２３２は、データ読み出しアドレスを第２の加算器２３４に出力する。第２の加算器２３４は、ベースアドレス記憶部２３３に記憶されているベースアドレス及び有限ステートマシン２３２が出力するデータ読み出しアドレスを加算し、内部メモリ２１４のアドレス２４６を出力する。セレクタ２３６は、アドレス２４６を選択し、選択したアドレス２４６をアドレス２４８として内部メモリ２１４に出力する。有限ステートマシン２３２は、パス２５０により、第２の加算器２３４により出力された内部メモリ２１４のアドレス２４６からデータ２２３を読み出し、読み出したデータに対して所定の処理を行う。
【００２１】
次に、有限ステートマシン２３２は、データ書き込みアドレスを第２の加算器２３４に出力する。第２の加算器２３４は、ベースアドレス記憶部２３３に記憶されているベースアドレス及び有限ステートマシン２３２が出力するデータ書き込みアドレスを加算し、内部メモリ２１４のアドレス２４６を出力する。セレクタ２３６は、アドレス２４６を選択し、選択したアドレス２４６をアドレス２４８として内部メモリ２１４に出力する。有限ステートマシン２３２は、パス２５０により、第２の加算器２３４により出力された内部メモリ２１４のアドレス２４６に上記の処理したデータを書き込む。
【００２２】
次に、有限ステートマシン２３２は、ハードウェア化した関数２３１の処理が終了すると、処理完了通知の割り込み信号２５１を中央処理装置２１２に出力する。中央処理装置２１２は、処理完了通知の割り込み信号２５１を入力すると、ハードウェアアクセラレータ２１３の処理完了待ちを解除し、プログラムの後続の処理を再開する。ハードウェアアクセラレータ２１３の処理完了待ちの解除の処理は、例えば、無限ループ処理を抜ける処理又はスリープ命令を解除する処理等である。
【００２３】
なお、中央処理装置２１２は、必ずしもハードウェアアクセラレータ２１３の処理完了待ちの処理を行う必要がない。例えば、プログラムの後続の処理がハードウェア化した関数２３１と無関係の処理である場合には、ハードウェアアクセラレータ２１３がハードウェア化した関数２３１の処理を行っている間に、プログラムの後続の処理を行うようにしてもよい。
【００２４】
図３は、図２のハードウェアアクセラレータ２１３の具体的な構成例を示す図である。図３のハードウェアアクセラレータ２１３は、図２のハードウェアアクセラレータ２１３に対して、インターフェース３０１及びレジスタ３０２を追加したものである。以下、図３のハードウェアアクセラレータ２１３が図２のハードウェアアクセラレータ２１３と異なる点を説明する。インターフェース３０１は、第１の加算器２３５及びセレクタ２３６を有し、ハードウェア化した関数２３１が図２の内部バス２１１にアクセスすることを可能にする。セレクタ２３６がアドレス２４７を選択すると、スタックメモリ２２２のアドレスが指定され、有限ステートマシン２３２はパス２４９によりスタックメモリ２２２から関数の引数を読み出し、読み出した関数の引数をローカル変数としてレジスタ３０２に書き込む。次に、有限ステートマシン２３２は、レジスタ３０２内の関数の引数を用いて、ハードウェア化した関数２３１の処理を行う。
【００２５】
図４は、上記の中央処理装置２１２、内部メモリ２１４及びハードウェアアクセラレータ２１３の処理例を示す図である。中央処理装置２１２は、プログラム中の抽出した関数４０１の処理を行う。中央処理装置２１２が処理を行うプログラム中の引数を有する関数４０１の処理内容をハードウェアアクセラレータ２１３に処理させるために、中央処理装置２１２が処理を行うプログラム中の引数を有する関数４０１の処理内容はハードウェアアクセラレータ２１３の処理完了待ちの処理４０２に置き換えられる。中央処理装置２１２は、関数４０１の処理を開始すると、プログラムカウンタの値及びスタックポインタのアドレス４２１をハードウェアアクセラレータ２１３に出力し、ハードウェアアクセラレータ２１３の処理完了待ちの処理４０２を行う。比較器２１７が一致信号２４３を出力すると、ハードウェアアクセラレータ２１３は起動処理４１１を行う。次に、ハードウェアアクセラレータ２１３は、スタックポインタのアドレス４２１を基に内部メモリ２１４のスタックメモリ２２２から関数の引数のデータ及びベースアドレス４２２を読み出す。次に、ハードウェアアクセラレータ２１３は、ベースアドレス４２２を基に内部メモリ２１４からデータ４２３を読み出し、引数のデータ４２２を用いて所定の処理を行う。次に、ハードウェアアクセラレータ２１３は、ベースアドレス４２２を基に内部メモリ２１４に処理したデータ４２４を書き込む。次に、ハードウェアアクセラレータ２１３は、関数の処理が終了すると、処理完了通知の割り込み信号４２５を中央処理装置２１２に出力する。中央処理装置２１２は、処理完了通知の割り込み信号４２５を入力すると、処理完了待ちの処理４０２を解除し、プログラムの後続の処理を実行する。
【００２６】
図５は、ＳｏＣ２０１の設計方法を説明するための図であり、図６はその設計方法の詳細を示すフローチャートである。コンピュータ５０２は、ＳｏＣ２０１の設計を行う設計装置である。記憶装置５０３には、ＳｏＣ２０１のアプリケーション５３１が記憶されている。アプリケーション５３１は、中央処理装置２１２により実行させようとしている高級言語（例えばＳｙｓｔｅｍＣ）のプログラムである。ステップ５１１では、作業者５０１は、アプリケーション５３１の中からハードウェア化する関数６０１を抽出する。中央処理装置２１２が行うプログラムの一部の関数をハードウェア化し、ハードウェア化したハードウェアアクセラレータ２１３を生成することにより、処理を高速化したり、高性能の中央処理装置を低性能の中央処理装置に置き換え、コスト低減及び低消費電力化を実現することができる。次に、ステップ５１２では、作業者５０１は、コンピュータ５０２に対して変換スクリプトの実行を指示する。すると、ステップ５２１では、コンピュータ５０２は、変換スクリプトの実行を行う。ステップ５２１は、ステップ５２２〜５２４を含む。
【００２７】
ステップ５２２では、コンピュータ５０２は、変換スクリプトにより、抽出した関数６０１を基に変換後の関数６０２を生成する。具体的には、コンピュータ５０２は、抽出した関数ｆの中身を非呼び出し関数ｆ’に置き換え、関数ｆ’の後に処理完了待ちの「ＣＰＵ制御コード」を挿入した呼び出し関数ｆ（関数６０２）を生成する。非呼び出し関数ｆ’は、処理の中身が空であるダミー関数である。処理完了待ちの「ＣＰＵ制御コード」は、例えば無限ループ処理又はスリープ命令の制御コードである。これにより、関数ｆは、中央処理装置２１２のプログラムに実行させる代わりに、ハードウェアアクセラレータ２１３に実行させることが可能になる。
【００２８】
ステップ５２３及び５２５は、中央処理装置２１２のソフトウェア（ＳＷ）を生成するための処理である。これに対して、ステップ５２４及び５２６は、ハードウェアアクセラレータ２１３のハードウェア（ＨＷ）の設計データを生成するための処理である。
【００２９】
次に、ステップ５２３では、コンピュータ５０２は、変換スクリプトにより、抽出した関数６０１をステップ５２２で生成した関数６０３に置き換える。例えば、抽出した関数ｆを空のダミー関数ｆ’に置き換える。具体的には、ステップ５２２で説明したように、コンピュータ５０２の第１の変換部は、中央処理装置２１２が処理を行うプログラム中の引数を有する関数ｆの処理内容をハードウェアアクセラレータ２１３に処理させるために、中央処理装置２１２が処理を行うプログラム中の引数を有する関数ｆの処理内容をハードウェアアクセラレータ２１３の処理完了待ちの処理の「ＣＰＵ制御コード」に置き換える。
【００３０】
その後、コンピュータ５０２は、置き換えられた関数のプログラムを、アプリケーション（ソフトウェア部分）５３２として記憶装置５０３に書き込む。アプリケーション（ソフトウェア部分）５３２は、アプリケーション５３１内のソフトウェア部分であり、中央処理装置２１２のプログラムにより実行される。
【００３１】
例えば、関数ｆ（関数６０３）は、引数の整数データａ，ｂ，ｃを有する。中央処理装置２１２は、アプリケーション（ソフトウェア部分）５３２の関数ｆ（関数６０３）を実行すると、まず引数の整数データａ，ｂ，ｃ及びベースアドレスを内部メモリ２１４のスタックメモリ２２２に書き込み、関数ｆ’を実行する。関数ｆ’では、中央処理装置２１２は、何の処理も行わずに、「ｒｅｔｕｒｎ」命令により、関数ｆに戻る。その後、関数ｆでは、中央処理装置２１２は、「ＣＰＵ制御コード」により、ハードウェアアクセラレータ２１３の処理完了待ちの処理を行う。
【００３２】
次に、ステップ５１３では、作業者５０１は、コンピュータ５０２に対してコンパイラの実行を指示する。すると、ステップ５２５では、コンピュータ５０２は、高級言語のアプリケーション（ソフトウェア部分）５３２をコンパイルすることにより、マシン語の実行ファイルを生成する。すなわち、コンピュータ５０２のコンパイル部は、ステップ５２３により置き換えられた関数のプログラムのアプリケーション（ソフトウェア部分）５３２を中央処理装置２１２に処理させるために、ステップ５２３により置き換えられた関数のプログラムのアプリケーション（ソフトウェア部分）５３２をコンパイルすることにより実行ファイル（バイナリファイル）５３３を生成し、実行ファイル５３３を記憶装置５０３に書き込む。
【００３３】
ステップ５２４では、コンピュータ５０２の第２の変換部は、ステップ５２３の後、変換スクリプトにより、中央処理装置２１２が処理を行うプログラム中の引数を有する関数の処理内容をハードウェアアクセラレータ２１３に処理させるために、関数６０４に示すように、関数の引数をローカル配列化し、アプリケーション（ハードウェア部分）５３４として記憶装置５０３に書き込む。
【００３４】
例えば、関数６０４において、整数データＶ［０］，Ｖ［１］，Ｖ［２］は３個整数データのローカル配列であり、整数データａ，ｂ，ｃはローカル変数である。ローカル配列Ｖ［０］，Ｖ［１］，Ｖ［２］には、内部メモリ２１４のスタックメモリ２２２内の引数のデータが格納される。その後、ローカル変数ａ，ｂ，ｃには、それぞれローカル配列Ｖ［０］，Ｖ［１］，Ｖ［２］のデータが格納される。その後、関数６０１と同じ処理が行われる。
【００３５】
具体的には、図３のハードウェアアクセラレータ２１３では、有限ステートマシン２３２は、スタック読み出しアドレス２４５を指定し、パス２４９により、内部メモリ２１４のスタックメモリ２２２内の引数のデータを読み出し、ローカル配列Ｖ［０］，Ｖ［１］，Ｖ［２］に格納する。次に、有限ステートマシン２３２は、ローカル配列Ｖ［０］，Ｖ［１］，Ｖ［２］のデータをそれぞれレジスタ３０２のローカル変数ａ，ｂ，ｃに格納する。
【００３６】
次に、ステップ５１４では、作業者５０１は、コンピュータ５０２に対して高位合成の実行を指示する。すると、ステップ５２６では、コンピュータ５０２の高位合成部は、インターフェース３０１（図３）のラッパー回路５３５と共に、ローカル配列化された関数を高位合成することによりハードウェア化し、ハードウェアアクセラレータ２１３の設計データ５３６を生成し、記憶装置５０３に書き込む。インターフェース３０１のラッパー回路５３５は、ハードウェア化した関数２３１（図３）が内部バス２１１（図２）にアクセス可能にするためのインターフェース回路である。高位合成は、ＳｙｓｔｅｍＣのような高級言語のプログラムを基にハードウェア化したＲＴＬ設計データを生成する。このＲＴＬ設計データを基に、ハードウェアアクセラレータ２１３が生成される。
【００３７】
図７は、図５のコンピュータ（設計装置）５０２のハードウェア構成例を示す図である。バス７０１には、中央処理装置（ＣＰＵ）７０２、ＲＯＭ７０３、ＲＡＭ７０４、ネットワークインターフェース７０５、入力装置７０６、出力装置７０７及び外部記憶装置７０８が接続されている。中央処理装置７０２は、データの処理又は演算を行うと共に、バス７０１を介して接続された各種構成要素を制御するものである。ＲＯＭ７０３には、予め中央処理装置７０２の制御手順（コンピュータプログラム）を記憶させておき、このコンピュータプログラムを中央処理装置７０２が実行することにより、起動する。外部記憶装置７０８にコンピュータプログラムが記憶されており、そのコンピュータプログラムがＲＡＭ７０４にコピーされて中央処理装置７０２により実行される。ＲＡＭ７０４は、データの入出力、送受信のためのワークメモリ、各構成要素の制御のための一時記憶として用いられる。外部記憶装置７０８は、例えばハードディスク記憶装置やＣＤ−ＲＯＭ等であり、電源を切っても記憶内容が消えない。中央処理装置７０２は、ＲＡＭ７０４内のコンピュータプログラムを実行することにより、図５及び図６のコンピュータ５０２の処理等を行う。ネットワークインターフェース７０５は、ネットワークに接続するためのインターフェースである。入力装置７０６は、例えばキーボード及びマウス等であり、各種指定又は入力等を行うことができる。出力装置７０７は、ディスプレイ及びプリンタ等である。例えば、外部記憶装置７０８は、図５の記憶装置５０３に対応する。
【００３８】
図５及び図６の処理は、コンピュータ５０２がプログラムを実行することによって実現することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体及び上記のプログラム等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００３９】
本実施形態のＳｏＣ２０１は、組み込みソフトウェアの用途に向けて、高い中央処理装置２１２の性能が要求される画像や音声、信号、その他高度な演算処理を行う場合に、ハードウェアアクセラレータ２１３を用いるメリットが大きい。また、本実施形態では、中央処理装置２１２のプログラム（ソフトウェア部分）とハードウェアアクセラレータ（ハードウェア部分）２１３のインターフェースに、スタックメモリ２２２を利用する。これにより、ソフトウェア部分とハードウェア部分の分割の自動化を可能とし、かつ、ハードウェアアクセラレータ２１３を制御するための処理性能上のオーバーヘッドを無くすことができる。また、ハードウェアアクセラレータ２１３の設計が自動化され、開発工数を削減することができる。また、ハードウェアアクセラレータ２１３の起動のための中央処理装置２１２の処理によるオーバーヘッドが無くなり、処理の高速化が可能となる。
【００４０】
本実施形態では、スタックメモリ２２２を内部メモリ２１４に配置し、中央処理装置２１２とハードウェアアクセラレータ２１３が内部バス２１１を介してスタックメモリ２２２を共有する構成としたが、この構成に限定されるものではない。例えば、スタックメモリ２２２が中央処理装置２１２に直結されたローカルメモリに配置されている場合では、このローカルメモリを、バスを介さずに中央処理装置２１２とハードウェアアクセラレータ２１３が共有する構成としてもよい。
【００４１】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００４２】
２０１  ＳｏＣ
２０２  外部メモリ
２１１  内部バス
２１２  中央処理装置
２１３  ハードウェアアクセラレータ
２１４  内部メモリ
２１５  メモリコントローラ
２１６  ハードウェアアクセラレータ開始アドレス記憶部
２１７  比較器
２３１  ハードウェア化した関数
２３２  有限ステートマシン
２３３  ベースアドレス記憶部
２３４  第２の加算器
２３５  第１の加算器
２３６  セレクタ
【図１】
0005632651.tif 000002
【図２】
0005632651.tif 000003
【図３】
0005632651.tif 000004
【図４】
0005632651.tif 000005
【図５】
0005632651.tif 000006
【図６】
0005632651.tif 000007
【図７】
0005632651.tif 000008