(57)【特許請求の範囲】
【請求項１】
与えられた動作レベル記述からレジスタ転送レベル記述を生成する動作合成部と、
プロセッサが解釈可能な命令と当該命令により当該プロセッサが実行する処理とを対応付けて記述する第１の動作レベル記述と、当該プロセッサのレジスタ転送レベル記述が満たすべき性能目標と、の入力を受け付ける受付部と、
当該第１の動作レベル記述から当該プロセッサが実行する処理を表す関数のうち、当該プロセッサが解釈可能な命令に対応して当該プロセッサが実行する処理の全てを単独では表していない関数を抽出する抽出部と、
当該抽出された関数からいずれかを選択し、当該選択された関数により表される処理を当該プロセッサが実行する処理とする新たな命令を生成して、当該生成された命令と当該選択された関数とを対応付ける記述を当該第１の動作レベル記述に追加した第２の動作レベル記述を生成する追加部と、
当該第２の動作レベル記述を前記動作合成部に与えて得られるレジスタ転送レベル記述が当該受け付けられた性能目標を
（ａ）満たす場合、当該得られたレジスタ転送レベル記述を出力し、
（ｂ）満たさない場合、当該第１の動作レベル記述を前記動作合成部に与えて得られるレジスタ転送レベル記述を出力する
出力部と、
を備える、ことを特徴とするプロセッサ合成装置。
【請求項２】
請求項１に記載のプロセッサ合成装置であって、
前記出力部は、当該第２の動作レベル記述を前記動作合成部に与えて得られるレジスタ転送レベル記述が当該受け付けられた性能目標を満たす場合、当該得られたレジスタ転送レベル記述を出力するのにかえて、当該第２の動作レベル記述を新たな第１の動作レベル記述として前記抽出部に与える、
ことを特徴とするプロセッサ合成装置。
【請求項３】
請求項２に記載のプロセッサ合成装置であって、
前記追加部は、前記抽出された関数のうち引数の個数及び型並びに返り値の型が所定の条件を満たすものを選択する、
ことを特徴とするプロセッサ合成装置。
【請求項４】
請求項２に記載のプロセッサ合成装置であって、
前記追加部は、前記抽出された関数のうち引数の個数及び型並びに返り値の型が所定の条件を満たし、当該第１の動作レベル記述においていずれかの命令に対応付けられる処理を表す記述に含まれる関数若しくは当該関数から呼び出される関数を選択する、
ことを特徴とするプロセッサ合成装置。
【請求項５】
請求項４に記載のプロセッサ合成装置であって、
前記追加部は、当該呼び出される関数が複数ある場合に、それぞれの関数について、当該関数を新たな命令に対応付けて当該第１の動作レベル記述に追加したものを前記動作合成部に与えて得られるレジスタ転送レベル記述の評価値が最も大きくなる関数を選択する、
ことを特徴とするプロセッサ合成装置。
【請求項６】
請求項５に記載のプロセッサ合成装置であって、
当該レジスタ転送レベル記述の評価値は当該プロセッサの面積である、
ことを特徴とするプロセッサ合成装置。
【請求項７】
請求項１乃至６のいずれか１項に記載のプロセッサ合成装置から出力されるレジスタ転送レベル記述に対する動作レベル記述において記述される命令のうち、ユーザにより指定された命令（以下「無効命令」という。）以外の命令（以下「有効命令」という。）と当該有効命令により当該プロセッサが実行する処理と、から、当該プロセッサ用のコンパイラを生成するコンパイラ生成部と、
当該プロセッサにより実行されるべきアプリケーションのソースプログラムを、当該生成されたコンパイラによりコンパイルして、当該プロセッサにより実行可能なアプリケーションプログラムを得るアプリケーション生成部と、
を備える、ことを特徴とするコンパイル装置。
【請求項８】
請求項１乃至６のいずれか１項に記載のプロセッサ合成装置と、
当該プロセッサ合成装置に対する請求項７に記載のコンパイル装置と、
を備えることを特徴とする開発システム。
【請求項９】
動作合成部、受付部、抽出部、追加部、出力部を備えるプロセッサ合成装置が実行するプロセッサ合成方法であって、
前記動作合成部が、与えられた動作レベル記述からレジスタ転送レベル記述を生成する動作合成ステップ、
前記受付部が、プロセッサが解釈可能な命令と当該命令により当該プロセッサが実行する処理とを対応付けて記述する第１の動作レベル記述と、当該プロセッサのレジスタ転送レベル記述が満たすべき性能目標と、の入力を受け付ける受付ステップ、
前記抽出部が、当該第１の動作レベル記述から当該プロセッサが実行する処理を表す関数のうち、当該プロセッサが解釈可能な命令に対応して当該プロセッサが実行する処理の全てを単独では表していない処理を表す関数を抽出する抽出ステップ、
前記追加部が、当該抽出された関数からいずれかを選択し、当該選択された関数により表される処理を当該プロセッサが実行する処理とする新たな命令を生成して、当該生成された命令と当該選択された関数により表される処理とを対応付ける記述を当該第１の動作レベル記述に追加した第２の動作レベル記述を生成する追加ステップ、
前記出力部が、当該第２の動作レベル記述を前記動作合成部に与えて得られるレジスタ転送レベル記述が当該受け付けられた性能目標を
（ａ）満たす場合、当該得られたレジスタ転送レベル記述を出力し、
（ｂ）満たさない場合、当該第１の動作レベル記述を前記動作合成部に与えて得られるレジスタ転送レベル記述を出力する
出力ステップ、
を備える、ことを特徴とするプロセッサ合成方法。
【請求項１０】
コンピュータを、
与えられた動作レベル記述からレジスタ転送レベル記述を生成する動作合成部、
プロセッサが解釈可能な命令と当該命令により当該プロセッサが実行する処理とを対応付けて記述する第１の動作レベル記述と、当該プロセッサのレジスタ転送レベル記述が満たすべき性能目標と、の入力を受け付ける受付部、
当該第１の動作レベル記述から当該プロセッサが実行する処理を表す関数のうち、当該プロセッサが解釈可能な命令に対応して当該プロセッサが実行する処理の全てを単独では表していない処理を表す関数を抽出する抽出部、
当該抽出された関数からいずれかを選択し、当該選択された関数により表される処理を当該プロセッサが実行する処理とする新たな命令を生成して、当該生成された命令と当該選択された関数により表される処理とを対応付ける記述を当該第１の動作レベル記述に追加した第２の動作レベル記述を生成する追加部、
当該第２の動作レベル記述を前記動作合成部に与えて得られるレジスタ転送レベル記述が前記受け付けられた性能目標を
（ａ）満たす場合、当該得られたレジスタ転送レベル記述を出力し、
（ｂ）満たさない場合、当該第１の動作レベル記述を前記動作合成部に与えて得られるレジスタ転送レベル記述を出力する
出力部、
として機能させる、ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、専用命令にバグがあっても、プロセッサの処理性能の低下を抑制することができるプロセッサ合成装置、コンパイル装置、開発システム、プロセッサ合成方法、並びに、これらをコンピュータ上で実現するためのプログラムに関する。
【背景技術】
【０００２】
ＳＯＣ（Ｓｙｓｔｅｍ  Ｏｎ  Ｃｈｉｐ）又はシステムＬＳＩ（Ｓｙｓｔｅｍ  Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）と呼ばれる、所望のシステムの回路機能の全てを１つのチップで実現するＬＳＩが知られている。近年、半導体製造プロセスの微細化に伴い、システムＬＳＩに集積できるゲート数は飛躍的に増加し、それに伴いシステムＬＳＩの処理能力も向上している。このため、システムＬＳＩは、画像処理や暗号化処理、フィルタ処理、復号処理など多彩な処理に用いられている。
【０００３】
システムＬＳＩの設計には、動作合成ツールを用いた設計手法が有効である。この動作合成ツールは、入力ポートや変数のビット幅等のＨ／Ｗ化に必要な情報を含んだ動作レベル記述を動作合成することにより、ＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ（レジスタ転送レベル））記述を出力するツールである。動作合成ツールを用いたシステムＬＳＩの設計方法については、例えば、特許文献１、２、３及び４に開示されている。また、動作合成技術については、非特許文献１に開示されている。
【０００４】
特許文献１、２、３及び４に開示されたシステムＬＳＩの設計方法では、ハードウェアは、汎用的な演算処理を行うマイクロプロセッサなどの基本命令プロセッサと、信号の入出力部分の処理など、用途に特化した特定処理を行う専用命令プロセッサとを組み合わせて設計される。そして、基本命令プロセッサには、ハードウェアＩＰとして保有する設計済みのプロセッサが使用される。一方、専用命令プロセッサは、開発の都度、動作レベル記述を動作合成することにより生成する。
【特許文献１】特開２００６−２０２３３０号公報
【特許文献２】特開２００６−２０２３２９号公報
【特許文献３】特開２００３−３１６８３８号公報
【特許文献４】特開２００３−１９６３３３号公報
【非特許文献１】ＥＬＬＩＯＴＴ  “Ｂｅｈａｖｉｏｒａｌ  Ｓｙｎｔｈｅｓｉｓ”  Ｋｌｕｗｅｒ  Ａｃａｄｅｍｉｃ  Ｐｕｂｌｉｓｈｅｒ、  ２５−４０頁、  １９９９年
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ここで、特許文献１、２、３及び４に開示されたシステムＬＳＩの設計方法では、専用命令の回路（例えば、特許文献１における「新規動作関数記述」）にバグや仕様変更があった場合は、その専用命令を使用できない。この場合、汎用命令を用いて処理を行わざるを得ないため、プロセッサの処理性能が低下し、場合によっては目標性能を達成できない。その理由は、バグのある専用命令を他の専用命令で置き換えることができないためである。
【０００６】
本発明は、上記問題に鑑みてなされたものであり、専用命令にバグがあっても、プロセッサの処理性能の低下を抑制することができるプロセッサ合成装置、コンパイル装置、開発システム、プロセッサ合成方法、並びに、これらをコンピュータ上で実現するためのプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、本発明の第１の観点に係るプロセッサ合成装置は、動作合成部、受付部、抽出部、追加部、出力部を備え、以下のように構成する。
まず、動作合成部は、与えられた動作レベル記述からレジスタ転送レベル記述を生成する。
次に、受付部は、プロセッサが解釈可能な命令と当該命令により当該プロセッサが実行する処理とを対応付けて記述する第１の動作レベル記述と、当該プロセッサのレジスタ転送レベル記述が満たすべき性能目標と、の入力を受け付ける。
さらに、抽出部は、当該第１の動作レベル記述から当該プロセッサが実行する処理を表す関数のうち、当該プロセッサが解釈可能な命令に対応して当該プロセッサが実行する処理の全てを単独では表していない関数を抽出する。
そして、追加部は、当該抽出された関数からいずれかを選択し、当該選択された関数により表される処理を当該プロセッサが実行する処理とする新たな命令を生成して、当該生成された命令と当該選択された関数により表される処理とを対応付ける記述を当該第１の動作レベル記述に追加した第２の動作レベル記述を生成する。
また、出力部は、当該第２の動作レベル記述を動作合成部に与えて得られるレジスタ転送レベル記述が当該受け付けられた性能目標を
（ａ）満たす場合、当該得られたレジスタ転送レベル記述を出力し、
（ｂ）満たさない場合、当該第１の動作レベル記述を動作合成部に与えて得られるレジスタ転送レベル記述を出力する。
【０００８】
上記目的を達成するために、その他の観点に係るコンパイル装置は、コンパイラ生成部、アプリケーション生成部を備え、以下のように構成する。
まず、コンパイラ生成部は、上記のプロセッサ合成装置から出力されるレジスタ転送レベル記述に対する動作レベル記述において記述される命令のうち、ユーザにより指定された命令（以下「無効命令」という。）以外の命令（以下「有効命令」という。）と当該有効命令により当該プロセッサが実行する処理と、から、当該プロセッサ用のコンパイラを生成する。
次に、アプリケーション生成部は、当該プロセッサにより実行されるべきアプリケーションのソースプログラムを、当該生成されたコンパイラによりコンパイルして、当該プロセッサにより実行可能なアプリケーションプログラムを得る。
【０００９】
上記目的を達成するために、その他の観点に係る開発システムは、当該プロセッサ合成装置と、当該プロセッサ合成装置に対するコンパイル装置とを備える。
【００１０】
上記目的を達成するために、その他の観点に係るプロセッサ合成方法は、動作合成部、受付部、抽出部、追加部、出力部を備えるプロセッサ合成装置が実行する動作合成方法であって、動作合成ステップ、受付ステップ、抽出ステップ、追加ステップ、出力ステップを備え、以下のように構成する。
すなわち、動作合成ステップでは、動作合成部が、与えられた動作レベル記述からレジスタ転送レベル記述を生成する。
そして、受付ステップでは、受付部が、プロセッサが解釈可能な命令と当該命令により当該プロセッサが実行する処理とを対応付けて記述する第１の動作レベル記述と、当該プロセッサのレジスタ転送レベル記述が満たすべき性能目標と、の入力を受け付ける。
さらに、抽出ステップでは、抽出部が、当該第１の動作レベル記述から当該プロセッサが実行する処理を表す関数のうち、当該プロセッサが解釈可能な命令に対応して当該プロセッサが実行する処理の全てを単独では表していない処理を表す関数を抽出する。
また、追加ステップでは、追加部が、当該抽出された関数からいずれかを選択し、当該選択された関数により表される処理を当該プロセッサが実行する処理とする新たな命令を生成して、当該生成された命令と当該選択された関数により表される処理とを対応付ける記述を当該第１の動作レベル記述に追加した第２の動作レベル記述を生成する。
さらに、出力ステップでは、出力部が、当該第２の動作レベル記述を前記動作合成部に与えて得られるレジスタ転送レベル記述が当該受け付けられた性能目標を
（ａ）満たす場合、当該得られたレジスタ転送レベル記述を出力し、
（ｂ）満たさない場合、当該第１の動作レベル記述を前記動作合成部に与えて得られるレジスタ転送レベル記述を出力する。
【００１１】
上記目的を達成するために、その他の観点に係るプログラムは、コンピュータを、動作合成部、受付部、抽出部、追加部、出力部として、以下のように機能させる。
まず、動作合成部は、与えられた動作レベル記述からレジスタ転送レベル記述を生成する。
次に、受付部は、プロセッサが解釈可能な命令と当該命令により当該プロセッサが実行する処理とを対応付けて記述する第１の動作レベル記述と、当該プロセッサのレジスタ転送レベル記述が満たすべき性能目標と、の入力を受け付ける。
さらに、抽出部は、当該第１の動作レベル記述から当該プロセッサが実行する処理を表す関数のうち、当該プロセッサが解釈可能な命令に対応して当該プロセッサが実行する処理の全てを単独では表していない処理を表す関数を抽出する。
また、追加部は、当該抽出された関数からいずれかを選択し、当該選択された関数により表される処理を当該プロセッサが実行する処理とする新たな命令を生成して、当該生成された命令と当該選択された関数により表される処理とを対応付ける記述を当該第１の動作レベル記述に追加した第２の動作レベル記述を生成する。
さらに、出力部は、当該第２の動作レベル記述を前記動作合成部に与えて得られるレジスタ転送レベル記述が前記受け付けられた性能目標を
（ａ）満たす場合、当該得られたレジスタ転送レベル記述を出力し、
（ｂ）満たさない場合、当該第１の動作レベル記述を前記動作合成部に与えて得られるレジスタ転送レベル記述を出力する。
【発明の効果】
【００１２】
本発明によれば、専用命令にバグがあっても、プロセッサの処理性能の低下を抑制することができるプロセッサ合成装置、コンパイル装置、開発システム、プロセッサ合成方法、並びに、これらをコンピュータ上で実現するためのプログラムを提供することができる。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照して、本実施形態に係るプロセッサ合成装置について説明する。
【００１４】
まず、図１を参照して、本実施形態に係るプロセッサ合成装置の構成について説明する。なお、プロセッサ合成装置は、動作レベル記述を動作合成することによりプロセッサ用のＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ（レジスタ転送レベル））記述を得て、得られたＲＴＬ記述を論理合成する装置である。
【００１５】
図１に示すように、プロセッサ合成装置１００は、物理的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１３と、ハードディスク装置１４と、入力装置１５と、表示装置１６と、を備える。プロセッサ合成装置１００が備える各構成要素はバスを介して接続される。
【００１６】
ＣＰＵ１１は、ハードディスク装置１４に記憶されたプログラムに従ってプロセッサ合成装置１００全体の動作を制御する。ＣＰＵ１１は、各構成要素とバスを介して接続され制御信号やデータのやりとりをする。
【００１７】
ＲＯＭ１２は、電源投入直後に実行されるＩＰＬ（Ｉｎｉｔｉａｌ  Ｐｒｏｇｒａｍ  Ｌｏａｄｅｒ）を記憶する。ＩＰＬが実行された後、ＣＰＵ１１は、ハードディスク装置１４に記憶されたプログラムをＲＡＭ１３に読み出して実行する。
【００１８】
ＲＡＭ１３は、データやプログラムを一時的に記憶する。ＲＡＭ１３は、ハードディスク装置１４から読み出されたプログラムや、動作合成処理に必要なデータ等を一時記憶する。
【００１９】
ハードディスク装置１４は、ＣＰＵ１１により実行されるプログラムを記憶する。また、ハードディスク装置１４は、動作合成すべき動作レベル記述や、動作合成により得られたＲＴＬ記述等を記憶する。
【００２０】
入力装置１５は、ＣＰＵ１１による制御のもと、動作合成に必要なパラメータ等の入力をユーザから受け付け、また、動作合成開始要求等の要求をユーザから受け付ける。入力装置１５は、例えば、キーボードやマウスから構成される。
【００２１】
表示装置１６は、ＣＰＵ１１による制御のもと、ユーザからのパラメータ等の入力や動作合成開始要求等の要求を受け付けるための画面、動作レベル記述を表示するための画面、レジスタ転送レベル記述を表示するための画面等を表示する。表示装置１６は、例えば、液晶ディスプレイ装置から構成される。
【００２２】
次に、本実施形態に係るプロセッサ合成装置１００の基本構成について説明する。
【００２３】
図２は、本実施形態に係るプロセッサ合成装置１００の基本構成を示すブロック図である。図２に示すように、プロセッサ合成装置１００は、機能的には、受付部２０と、抽出部３０と、追加部４０と、動作合成部５０と、出力部６０と、を備える。
【００２４】
受付部２０は、プロセッサが解釈可能な命令と当該命令により当該プロセッサが実行する処理とを対応付けて記述する第１の動作レベル記述と、当該プロセッサのレジスタ転送レベル記述が満たすべき性能目標と、の入力を受け付ける。受付部２０は、ＣＰＵ１１が、ＲＯＭ１２、ＲＡＭ１３及び入力装置１５と協働することにより実現される。
【００２５】
抽出部３０は、動作レベル記述から当該プロセッサが実行する処理を表す関数のうち、当該プロセッサが解釈可能な命令に対応付けられていない関数を抽出する。抽出部３０は、ＣＰＵ１１が、ＲＯＭ１２及びＲＡＭ１３と協働することにより実現される。
【００２６】
追加部４０は、抽出部３０により抽出された関数からいずれかを選択し、当該選択された関数により表される処理を当該プロセッサが実行する処理とする新たな命令を生成して、当該生成された命令と当該選択された関数により表される処理とを対応付ける記述を当該第１の動作レベル記述に追加した第２の動作レベル記述を生成する。追加部４０は、ＣＰＵ１１が、ＲＯＭ１２及びＲＡＭ１３と協働することにより実現される。
【００２７】
動作合成部５０は、第２の動作レベル記述を動作合成することにより、ＲＴＬ記述を生成する。動作合成部５０は、ＣＰＵ１１が、ＲＯＭ１２及びＲＡＭ１３と協働することにより実現される。
【００２８】
出力部６０は、動作合成部５０が生成したＲＴＬ記述が受付部２０が受け付けた性能目標を満たすと判別した場合、当該ＲＴＬ記述を出力し、性能目標を満たさないと判別した場合、第１の動作レベル記述を動作合成部５０に与えて得られるＲＴＬ記述を出力する。出力部６０は、ＣＰＵ１１が、ＲＯＭ１２及びＲＡＭ１３と協働することにより実現される。
【００２９】
次に、本実施形態に係るプロセッサ合成装置１００が実行するプロセッサ合成処理について図３と図４とを参照して説明する。
【００３０】
図３は、本発明の実施形態に係るプロセッサ合成装置１００の動作を説明するためのブロック図である。なお、理解を容易にするため、本発明に直接関係しない構成要素については説明を省略する。説明を省略した構成要素については、例えば特許文献１の図１に開示されている。
【００３１】
図３に示すように、本発明の実施形態は、ＣＰＵ１１などによるプログラム制御により動作するデータ処理装置１００と、ハードディスク装置１４などによる記憶装置１１０とから構成される。
【００３２】
命令追加手段１０１に相当する構成は、特許文献１に開示されていない。また、動作合成手段１０２は特許文献１の図１の「動作合成」に相当する。記憶装置１１０は、プロセッサソースコード（動作レベル記述）１１１をあらかじめ記憶している。プロセッサソースコード１１１は、特許文献１の図１におけるプロセッサ記述５に相当する。プロセッサソースコード１１１は、特許文献１に開示された技術によって作成されたものである。
【００３３】
これらの構成要素はそれぞれ概略次のように動作する。命令追加手段１０１は記憶装置１１０からプロセッサソースコード１１１を読み出し、ソースコード中の関数をひとつ選択し、その関数を実行する命令をプロセッサに追加し、追加して得られたプロセッサソースコード１１１を記憶装置１１０に格納する。また、命令追加手段１０１は、追加した命令の命令定義テーブル１１２を作成し記憶装置１１０に格納する。命令定義テーブル１１２は、特許文献１の図１の命令定義テーブル１１２に相当する。
【００３４】
動作合成手段１０２は、新規命令が追加されたプロセッサソースコード１１１を記憶装置１１０から読み込み、動作合成を行い、得られたＲＴＬ記述１１３と、性能指標１１４を記憶装置１１０に格納する。動作合成手段１０２は、例えば、非特許文献１に開示された既存の技術を用いて構成する。
【００３５】
従って、命令追加手段１０１により受付部２０、抽出部３０、追加部４０が実現され、動作合成手段１０２により動作合成部５０、出力部６０が実現される。
【００３６】
次に、本実施形態に係るプロセッサ合成装置１００が実行するプロセッサ合成処理について詳細に説明する。
【００３７】
図４は、本実施形態に係るプロセッサ合成装置１００が実行する動作記述追加処理を示すフローチャートである。
【００３８】
なお、動作記述追加処理に先だって、性能目標値が例えばハードディスク装置１４からデータ処理装置に供給される。性能目標値として、例えば、面積、クロック周期、遅延、レイテンシを読み出す。
【００３９】
まず、命令追加手段１０１は、ソースコード（動作レベル記述）を記憶装置１１０から読み出す（ステップＳ１１）。
【００４０】
そして、命令追加手段１０１は、新規に命令にする関数の候補を抽出する（ステップＳ１２）。具体的には、命令追加手段１０１は、プロセッサが実行する処理を表す関数のうち、プロセッサが解釈可能な命令に対応付けられていない処理を表す関数をソースコードから抽出する。
【００４１】
次に、命令追加手段１０１は、抽出した関数の中から新規に命令とする関数を一つ選択する（ステップＳ１３）。例えば、命令追加手段１０１は、既にプロセッサに備わっている専用命令から呼び出されているものを選ぶ。
【００４２】
そして、命令追加手段１０１は、プロセッサソースコード１１１を変更し、選択された関数を実行する命令をプロセッサに追加する。命令追加手段１０１は、変更後のソースコードをハードディスク装置１４に書き出すことにより記憶装置１１０に格納する（ステップＳ１４）。なお、命令追加手段１０１は、変更前のソースコードを上書きせずに記憶装置１１０に残しておく。
【００４３】
次に、動作合成手段１０２は、記憶装置１１０から変更後のソースコードを読み出し、動作合成をおこない、プロセッサのＲＴＬ記述（ＲＴＬモデル）と性能指標とを出力する（ステップＳ１５）。性能指標としては、例えば、面積、クロック周期、遅延、レイテンシが出力される。動作合成手段１０２は、ＲＴＬ記述と性能指標とを記憶装置１１０に格納する。
【００４４】
次に、動作合成手段１０２は、出力した性能指標が性能目標値を達成しているか否かを判別する（ステップＳ１６）。動作合成手段１０２は、性能指標が性能目標値を達成していないと判別した場合には（ステップＳ１６：ＮＯ）、ステップ１４でのソースコードの変更を元に戻す（ステップＳ１７）。動作合成手段１０２は、例えば、記憶装置１１０に記憶された変更前のソースコードで変更後のソースコードを上書きする。
【００４５】
動作合成手段１０２は、性能指標が、性能目標値を達成していると判別した場合（ステップＳ１６：ＹＥＳ）、または、命令の追加を元に戻すと（ステップＳ１７）、動作記述追加処理を完了する。
【００４６】
ここで、設計したプロセッサの専用命令のひとつにバグがあることが判明した場合、バグのある専用命令の関数定義テーブルを用いず、代わりに、バグのある専用命令から呼び出されている関数のなかでバグがない関数の命令定義テーブルを用いることとする。そして、特許文献１に開示されたコンパイル技術等を用いて、アプリケーションプログラムをコンパイルし、機械語命令セットを得る。
【００４７】
次に、本実施形態に係るプロセッサ合成装置１００が動作記述に命令を追加する動作について、具体例を挙げて説明する。
【００４８】
図５（Ａ）、（Ｂ）に、特許文献１に開示された技術で作成されたプロセッサソースコード１１１を例示する。当該ソースコード（動作レベル記述）は、ＳｙｓｔｅｍＣ言語を用いて表現しているが、本発明の説明に関連ない部分は一部省略している。
【００４９】
ソースコードの３行目から５行目までは、メモリ資源の定義部分を表している。９行目から３３行目までが命令デコード及び実行呼び出し部分をそれぞれ表している。当該ソースコードは、２つの値の積を計算する専用命令ＭＵＬと、８つの値の差の平均を計算する専用命令ＡＶＥ＿ＤＩＦＦとを有している。そして、２５行目から２７行目が専用命令ＭＵＬの呼び出し部分を表し、２８行目から３１行目が専用命令ＡＶＥ＿ＤＩＦＦの呼び出し部分を表している。また、３６行目から４５行目が専用命令ＭＵＬの動作を定義する関数ｍｕｌ（）を表し、４７行目から７４行目が専用命令ＡＶＥ＿ＤＩＦＦの動作を定義する関数ｆｉｌｌ＿ｂｕｆ（）、ａｖｅ＿ｄｉｆｆ（）、ｄｉｆｆ（）を表している。
【００５０】
命令追加手段１０１は、プロセッサが解釈可能な命令に対応付けられていない関数を抽出する。図５（Ａ）、（Ｂ）に示すソースコードでは、関数ｍｕｌ（）は専用命令ＭＵＬに対応付けられた処理を表す関数であるため抽出されない。関数ｆｉｌｌ＿ｂｕｆ（）、ａｖｅ＿ｄｉｆｆ（）は、それぞれの関数が、専用命令ＡＶＥ＿ＤＩＦＦに対応付けられた全ての処理を表す関数ではないため抽出される。さらに、関数ｄｉｆｆ（）は、いずれかの命令に対応付けられた処理を表す関数ではないため抽出される。
【００５１】
命令追加手段１０１は、抽出した関数から所定の選択基準に従って関数を一つ選択する。選択基準は任意であるが、例えば、引数の個数及び型並びに返り値の型が所定の条件を満たすことを選択基準としてもよい。引数の個数及び型並びに返り値の型が所定の条件を満たす関数を追加するようにすれば、命令を自動で追加することが容易であるためである。
【００５２】
例えば、本実施例においては、設計されるプロセッサの命令は一般に２つのレジスタ（ｒｓ番レジスタとｒｔ番レジスタ）が格納する値に演算を施して、その結果を他のレジスタ（ｒｄ番レジスタ）に格納する。各レジスタは、８ビットであるから関数の引数は８ビットの整数値を２つ引数としてとり、返り値が８ビットの整数であるものとする。なお、８ビットの整数値は、１６ビット若しくは３２ビットの整数値と考えることもできるから関数の引数や返り値をこれらのビット数の整数値とするようなものを選択しても良い。
【００５３】
また、選択基準は、バグを有する専用命令の代わりに当該選択した関数を実行する命令を用いてアプリケーションプログラムをコンパイルして得られる機械語のプログラムをプロセッサが実行する場合に、性能の劣化が抑制されると予想される関数を優先的に選択する選択基準であることが望ましい。
【００５４】
具体的には、例えば、処理内容が多い関数を優先的に選択することが有効である。このような関数を用いて回路を生成する方が、処理内容が少ない関数を組み合わせて回路を実現するよりも効率が良いと考えられるためである。
【００５５】
より具体的には、例えば、ソースコードにおいていずれかの命令に対応付けられる処理を表す記述に含まれる関数若しくは当該関数から呼び出される関数を選択する。このような関数は、処理内容が多い可能性が高いためである。図５（Ａ）、（Ｂ）に示すソースコードでは、関数ｆｉｌｌ＿ｂｕｆ（）、ａｖｅ＿ｄｉｆｆ（）は、いずれも命令ＡＶＥ＿ＤＩＦＦに対応付けられる処理を表す記述に含まれる関数であり、関数ｄｉｆｆ（）は当該関数（関数ａｖｅ＿ｄｉｆｆ（））から呼び出される関数である。
【００５６】
また、例えば、命令追加手段１０１により抽出された他の関数から呼び出されない関数から順に選択する。命令追加手段１０１により抽出された他の関数から呼び出される関数を選択するのであれば、呼び出し元の関数を選択する方が効率化が図れると予測されるためである。図５（Ａ）、（Ｂ）に示すソースコードでは、関数ｆｉｌｌ＿ｂｕｆ（）、ａｖｅ＿ｄｉｆｆ（）は、いずれも他の関数から呼び出されない関数であるが、関数ｄｉｆｆ（）は関数ａｖｅ＿ｄｉｆｆ（）から呼び出される関数である。
【００５７】
また、多数の関数から呼び出される関数を選択するようにしてもよい。多数の関数から呼び出される関数は、多くの命令の実行により呼び出される可能性が高く、多くのバグに対応できる可能性があるためである。
【００５８】
また、命令追加手段１０１は、選択候補の関数のそれぞれについて、新たな命令に対応付けてソースコードに追加したものを動作合成手段１０２に与えて得られるＲＴＬ記述の評価値が最も大きくなる関数を選択するようにしてもよい。
【００５９】
例えば、生成したプロセッサの面積の大きさをこの評価値とすることができる。関数を新たな命令に対応付けてソースコードに追加した場合に、生成されるプロセッサの面積の大きさが大きくなればなる程、複雑な処理を表す関数であると考えられ、追加する価値が高いと考えられるためである。
【００６０】
選択基準は、ハードディスク装置１４に記憶されたプログラムにあらかじめ組み込むようにしても良いが、ハードディスク装置１４や入力装置１５から入力するようにしてもよい。
【００６１】
以下、上述した選択基準により、命令追加手段１０１は、ソースコードの中から関数ｄｉｆｆ（）を選択したものとして説明する。
【００６２】
命令追加手段１０１は、関数ｄｉｆｆ（）を実行する命令ＤＩＦＦを追加し、追加されたプロセッサソースコード１１１を記憶装置１１０に格納する。図６（Ａ）、（Ｂ）に、命令ＤＩＦＦが追加されたプロセッサソースコード１１１を例示する。３１ｂ行目から３１ｄ行目が、命令ＤＩＦＦの呼び出し部を表している。なお、図６（Ｂ）に示す３６行目以降は図６（Ｂ）に示すソースコードと同じ記述である。
【００６３】
動作合成手段１０２は、プロセッサソースコード１１１を読み込み、動作合成を行い、得られたＲＴＬ記述と性能指標とを記憶装置１１０に格納する。もし、性能指標が性能目標を達成していない場合には、動作合成手段１０２は、ソースコードの変更を元に戻して処理を完了する。
【００６４】
こうして得られたプロセッサのＲＴＬ記述を、特許文献１に開示された技術により作成されたＲＴＬ記述の代わりにハードウェア化する。
このとき、専用命令ＡＶＥ＿ＤＩＦＦにバグがない限りは、アプリケーションプログラムのコンパイルに、追加命令ＤＩＦＦ及びＦＩＬＬ＿ＢＵＦの命令定義テーブルは使用されない。そのため、ここで追加した命令は使用されない。
【００６５】
ここで、プロセッサをハードウェア化したあとに、専用命令ＡＶＥ＿ＤＩＦＦのバグが発見されたときのことを考える。具体的には、図５（Ｂ）の５９行目に宣言されている変数ｖａｌのビット幅が間違っているときのことを考える。計算精度を確保するためには１０ビットではなく１２ビット必要であった場合である。
【００６６】
このとき、関数ａｖｅ＿ｄｉｆｆ（）にバグがあるが、関数ｄｉｆｆ（）にはバグがない。そこで、専用命令ＡＶＥ＿ＤＩＦＦを無効化し、命令ＤＩＦＦを有効化したコンパイラで、アプリケーションプログラムをし直す。すなわち、アプリケーションプログラムのコンパイルに、専用命令ＡＶＥ＿ＤＩＦＦの命令定義テーブルを使用せず、代わりに、追加命令ＤＩＦＦの命令定義テーブルを使用する。
【００６７】
このようにコンパイルしたアプリケーションプログラムは、バグのある、専用命令ＡＶＥ＿ＤＩＦＦを使用しない。したがって、当該プロセッサのハードウェアは問題なく使用できる。また、追加専用命令ＤＩＦＦを使用するため、性能の劣化を抑制できる。
【００６８】
（変形例）
上記実施形態に係るプロセッサ合成装置１００は、得られる性能指標が性能目標を満たす場合に、命令を１つだけプロセッサに追加した。しかながら、得られる性能指標が性能目標を満たす限り、プロセッサへの命令の追加を繰り返すことができる。以下、変形例に係るプロセッサ合成装置２００について説明する。
【００６９】
まず、変形例に係るプロセッサ合成装置２００の構成について説明する。図７に示すように、プロセッサ合成装置２００はプロセッサ合成装置１００とほぼ同様の構成をしている。このため、プロセッサ合成装置１００と異なる部分についてのみ説明する。
【００７０】
出力部６０は、動作合成部５０が生成したＲＴＬ記述が受付部２０が受け付けた性能目標を満たさないと判別した場合、第１の動作レベル記述を動作合成部５０に与えて得られるＲＴＬ記述を出力する。一方、出力部６０は、性能目標を満たすと判別した場合、さらなる命令の追加を指示する信号を抽出部３０に出力する。
【００７１】
抽出部３０は、出力部６０からさらなる命令の追加を指示する信号を供給されると、追加した命令に対応づけられた関数を除外して、関数を抽出する。
【００７２】
次に、変形例に係るプロセッサ合成装置２００の動作について説明する。図８に示すように、プロセッサ合成装置２００が実行する動作記述追加処理はプロセッサ合成装置１００が実行する動作記述追加処理にさらなる命令を追加するステップ（ステップＳ１８）を追加した処理となる。このため、プロセッサ合成装置１００が実行する動作記述追加処理と異なる部分についてのみ説明する。
【００７３】
プロセッサ合成装置２００、ステップＳ１１からステップＳ１５までは、図４に示したフローチャートと同様の処理を行う。
【００７４】
動作合成手段１０２は、出力した性能指標が性能目標値を達成しているか否かを判別する（ステップＳ１６）。動作合成手段１０２は、性能指標が性能目標値を達成していないと判別した場合には（ステップＳ１６：ＮＯ）、ステップＳ１４でのソースコードの変更を元に戻す（ステップＳ１７）。動作合成手段１０２は、例えば、記憶装置１１０に記憶された変更前のソースコードで変更後のソースコードを上書きする。
【００７５】
動作合成手段１０２は、性能指標が、性能目標値を達成していると判別した場合（ステップＳ１６：ＹＥＳ）、または、命令の追加を元に戻すと（ステップＳ１７）、ステップＳ１８を実行する。
【００７６】
動作合成手段１０２は、ステップＳ１８では、さらにソースコード中の関数の中でプロセッサの命令にすべきものがあるか否かを判別する。動作合成手段１０２は、そのような関数があると判別した場合には（ステップＳ１８：ＹＥＳ）、ステップＳ１３に処理を戻す。一方、動作合成手段１０２は、追加すべき関数がないと判別した場合には（ステップＳ１８：ＮＯ）、動作記述追加処理を完了する。
【００７７】
上述のように、動作合成手段１０２は、追加すべき関数がないと判別するまで、ステップＳ１２からステップＳ１７の処理を繰り返す。なお、動作合成手段１０２は、ステップＳ１７において命令の追加を元に戻した場合でも、実装サイズの小さい関数をさらに追加することもできる。
【００７８】
次に、変形例に係るプロセッサ合成装置２００が動作記述に命令を追加する動作について、具体例を挙げて説明する。なお、追加すべき命令がなくなるまで命令の追加をすること以外は、プロセッサ合成装置１００が動作記述に命令を追加する動作と同様である。このため、プロセッサ合成装置１００が実行する動作記述追加処理と異なる部分についてのみ説明する。
【００７９】
以下、上述した選択基準により、命令追加手段１０１は、ソースコードの中から関数ｄｉｆｆ（）を選択したのちの動作を説明する。
【００８０】
命令追加手段１０１は、関数ｄｉｆｆ（）を実行する命令ＤＩＦＦを追加し、追加されたプロセッサソースコード１１１を記憶装置１１０に格納する。
【００８１】
動作合成手段１０２は、プロセッサソースコード１１１を読み込み、動作合成を行い、得られたＲＴＬ記述と性能指標とを記憶装置１１０に格納する。もし、性能指標が性能目標を達成していない場合には、動作合成手段１０２は、ソースコードの変更を元に戻す。
【００８２】
次に、命令追加手段１０１は、さらに追加する命令があるか否かを判別する。命令追加手段１０１は、追加する命令があると判別した場合、さらに、例えば、関数ｆｉｌｌ＿ｂｕｆ（）を選択し、当該関数を実行する命令ＦＩＬＬ＿ＢＵＦを追加し、追加されたプロセッサソースコード１１１を記憶装置１１０に格納する。動作合成手段１０２は、プロセッサソースコード１１１を読み込み、動作合成を行い、得られたＲＴＬモデルと性能指標を記憶装置１１０に格納する。命令追加手段１０１は、追加する命令がないと判別するまで、命令の追加を繰り返す。
【００８３】
以上示したように、変形例に係るプロセッサ合成装置２００によれば、得られる性能指標が性能目標を満たす限り、プロセッサへの命令の追加を繰り返すことができる。
【００８４】
上記実施形態では、プログラムが、記憶装置に予め記憶されているものとして説明した。しかし、プロセッサ合成装置を、装置の全部又は一部として動作させ、あるいは、上述の処理を実行させるためのプログラムを、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、ＭＯ（Ｍａｇｎｅｔｏ  Ｏｐｔｉｃａｌ  Ｄｉｓｋ）などのコンピュータ読み取り可能な記録媒体に格納して配布し、これを別のコンピュータにインストールし、上述の手段として動作させ、あるいは、上述の工程を実行させてもよい。
【００８５】
さらに、インターネット上のサーバ装置が有するディスク装置等にプログラムを格納しておき、例えば、搬送波に重畳させて、コンピュータにダウンロード等してプログラムを実行してもよい。
【００８６】
以上示したように、本発明によれば、専用命令にバグがあっても、プロセッサの処理性能の低下を抑制することができるプロセッサ合成装置、コンパイル装置、開発システム、プロセッサ合成方法、並びに、これらをコンピュータ上で実現するためのプログラムを提供することができる。
【図面の簡単な説明】
【００８７】
【図１】本発明の実施形態に係るプロセッサ合成装置の物理的な構成を示すブロック図である。
【図２】本発明の実施形態に係るプロセッサ合成装置の基本構成を示すブロック図である。
【図３】動作記述追加処理を説明するためのブロック図である。
【図４】本発明の実施形態に係る動作記述追加処理を示すフローチャートである。
【図５】（Ａ）、（Ｂ）は、命令追加前の動作レベル記述の一例を示す図である。
【図６】（Ａ）、（Ｂ）は、命令追加後の動作レベル記述の一例を示す図である。
【図７】変形例に係るプロセッサ合成装置の基本構成を示すブロック図である。
【図８】変形例に係るプロセッサ合成装置の動作記述追加処理を示すフローチャートである。
【符号の説明】
【００８８】
１１  ＣＰＵ
１２  ＲＯＭ
１３  ＲＡＭ
１４  ハードディスク装置
１５  入力装置
１６  表示装置
２０  受付部
３０  抽出部
４０  追加部
５０  動作合成部
６０  出力部
１００、２００  プロセッサ合成装置
１０１  命令追加手段
１０２  動作合成手段
１１０  記憶装置
１１１  プロセッサソースコード
１１２  命令定義テーブル
１１３  ＲＴＬ記述
１１４  性能指標
【図１】
0005071189.tif 000002
【図２】
0005071189.tif 000003
【図３】
0005071189.tif 000004
【図４】
0005071189.tif 000005
【図５】
0005071189.tif 000006
【図６】
0005071189.tif 000007
【図７】
0005071189.tif 000008
【図８】
0005071189.tif 000009