(57)【要約】【課題】Ｃ言語などの高位レベル言語で記述されたプログラムから自動的にハードウエア記述言語で記述されたハードウエア設計ファイルを形成することができるハードウエア記述言語合成ツール及びそれを利用した集積回路の設計方法を提供する。【解決手段】  マイクロプロセッサのプログラムメモリとプログラムコードなどを除くハードウエアコンポーネントを、ハードウエア記述言語で記述したハードウエアファイルと、高級レベル言語プログラムをコンパイルして得られたアセンブリレベル言語プログラムを解析して、その命令コードをハードウエアコンポーネントに対応させてハードエウア記述言語で記述したソフトウエアファイルに変換するアセンブリレベル合成プログラムとを有するハードウエア記述言語合成ツールである。そして、このツールは、ハードウエアファイルとソフトウエアファイルとを、ハードウエア設計ファイルとして出力する。【選択図】    図１
2006079226.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタと、プログラムメモリと、プログラムデコーダとを有するマイクロプロセッサの、前記プログラムメモリ及びプログラムデコーダを除く前記入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタとを含むハードウエアコンポーネントを、ハードウエア記述言語で記述したプロセッサハードウエアファイルと、
アセンブリレベル合成プログラムとを有し、
前記アセンブリレベル合成プログラムは、
前記マイクロプロセッサが実行可能な高級レベル言語で記述された高級レベル言語プログラムを当該マイクロプロセッサのコンパイラにより変換したアセンブリレベル言語プログラムを、解析する手順と、
前記アセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する手順と、
前記プロセッサハードウエアファイルと前記プロセッサソフトウエアファイルとを出力する手順とをコンピュータに実行させることを特徴とするハードウエア記述言語合成ツール。
【請求項２】
請求項１において、
更に、複数の前記命令コードにそれぞれ対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルを有し、
前記変換手順は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成し、
当該プロセッサソフトウエアファイルは、前記アセンブリレベル言語プログラムの命令コードに対応する前記プロセッサソフトウエアモジュールを有することを特徴とするハードウエア記述言語合成ツール。
【請求項３】
請求項２において、
前記プロセッサソフトウエアモジュールは、前記プログラムカウンタのカウント値が前記アセンブリレベル言語プログラムのプログラムアドレスと一致する時に、当該プログラムアドレスの命令コードに対応する所定の動作を行う制御回路の記述、を有することを特徴とするハードウエア記述言語合成ツール。
【請求項４】
請求項１において、
更に、複数の前記命令コードそれぞれに対応して、及び複数の一連の命令コードからなる複合命令コードに対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルを有し、
前記変換手順は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コード及び複合命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成し、
当該プロセッサソフトウエアファイルは、前記アセンブリレベル言語プログラムの命令コード及び複合命令コードに対応する前記プロセッサソフトウエアモジュールを有することを特徴とするハードウエア記述言語合成ツール。
【請求項５】
請求項４において、
前記変換手順は、前記複合命令コードを個別の命令コードに優先して、当該複合命令コードに対応するプロセッサソフトウエアモジュールに変換することを特徴とするハードウエア記述言語合成ツール。
【請求項６】
請求項１において、
前記アセンブリレベル合成プログラムは、更に、
前記アセンブリレベル言語プログラムの命令コードを解析して、前記プロセッサハードウエアファイルから、使用されないハードウエアコンポーネントに対応するＨＤＬ記述を削除したプロセッサハードウエアファイルを作成する手順を有し、
前記出力手順は、当該削除されたプロセッサハードウエアファイルを出力することを特徴とするハードウエア記述言語合成ツール。
【請求項７】
請求項１において、
前記プロセッサソフトウエアファイルは、前記プログラムカウンタのカウントが前記アセンブリレベル言語プログラムのプログラムアドレスと一致する時に、当該プログラムアドレスの命令コードに対応する所定の動作を行う制御回路の記述、を有することを特徴とするハードウエア記述言語合成ツール。
【請求項８】
請求項２または４において、
前記プロセッサハードウエアファイルと前記対応テーブルとを、複数のマイクロプロセッサに対応して、複数組有することを特徴とするハードウエア記述言語合成ツール。
【請求項９】
請求項２または４において、
前記プロセッサハードウエアファイルと前記対応テーブルとを、仮想的マイクロプロセッサに対応して有すると共に、
更に、前記仮想マイクロプロセッサに対応して前記高級レベル言語プログラムを前記アセンブリレベル言語プログラムに変換する仮想コンパイラプログラムを有することを特徴とするハードウエア記述言語合成ツール。
【請求項１０】
少なくとも入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタと、プログラムメモリと、プログラムデコーダとを有するマイクロプロセッサの、前記プログラムメモリとプログラムデコーダを除く前記入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタとを含むハードウエアコンポーネントを、ハードウエア記述言語で記述したプロセッサハードウエアファイルがあらかじめ生成され、集積回路をハードウエア記述言語で記述したハードウエア記述言語ファイルを生成する集積回路の設計方法において、
前記マイクロプロセッサが実行可能な高級レベル言語で記述された高級レベル言語プログラムを、当該マイクロプロセッサのコンパイラによりアセンブリレベル言語プログラムに変換する工程と、
前記アセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する工程と、
前記プロセッサハードウエアファイルと前記プロセッサソフトウエアファイルを、前記ハードウエア記述言語ファイルとして出力する工程とを有する集積回路の設計方法。
【請求項１１】
請求項１０において、
更に、前記ハードウエア記述言語ファイルを、論理合成ツールにより、前記集積回路のネットリストに変換する工程を有することを特徴とする集積回路の設計方法。
【請求項１２】
請求項１０において、
更に、複数の前記命令コードにそれぞれ対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルがあらかじめ生成され、
前記変換工程は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成する工程を含み、
当該プロセッサソフトウエアファイルは、前記アセンブリレベル言語プログラムの命令コードに対応する前記プロセッサソフトウエアモジュールを複数有することを特徴とする集積回路の設計方法。
【請求項１３】
マイクロプロセッサが実行可能な高級レベル言語で記述された高級レベル言語プログラムを、当該マイクロプロセッサのコンパイラにより変換したアセンブリレベル言語プログラムを、解析する手順と、
前記アセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する手順と、
前記プロセッサソフトウエアファイルを、前記マイクロプロセッサの少なくともプログラムメモリとプログラムデコーダを除くハードウエアコンポーネントをハードウエア記述言語で記述したプロセッサハードウエアファイルと共に、出力する手順とをコンピュータに実行させることを特徴とするハードウエア記述言語合成ツール。
【請求項１４】
請求項１３において、
更に、複数の前記命令コードにそれぞれ対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルを有し、
前記変換手順は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成することを特徴とするハードウエア記述言語合成ツール。
【請求項１５】
請求項１３において、
更に、複数の前記命令コードそれぞれに対応して、及び複数の一連の命令コードからなる複合命令コードに対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルを有し、
前記変換手順は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コード及び複合命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成することを特徴とするハードウエア記述言語合成ツール。
【請求項１６】
請求項１５において、
前記変換手順は、前記複合命令コードを個別の命令コードに優先して、当該複合命令コードに対応するプロセッサソフトウエアモジュールに変換することを特徴とするハードウエア記述言語合成ツール。
【請求項１７】
請求項１３において、
前記アセンブリレベル合成プログラムは、更に、
前記アセンブリレベル言語プログラムの命令コードを解析して、前記プロセッサハードウエアファイルから、使用されないハードウエアコンポーネントに対応するＨＤＬ記述を削除したプロセッサハードウエアファイルを作成する手順を有し、
前記出力手順は、当該削除されたプロセッサハードウエアファイルを出力することを特徴とするハードウエア記述言語合成ツール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウエア記述言語合成ツール及びそれを利用した集積回路の設計方法に関し、特に、高級レベル言語で記述された高級言語プログラムから集積回路設計用のハードウエア記述言語ファイルを自動的に生成することを可能にするハードウエア記述言語合成ツール及びそれを利用した集積回路の設計方法に関する。
【背景技術】
【０００２】
半導体集積回路の設計において、近年、Ｃ言語をもとにしたハードウエア記述言語（Hardware Description Language：ＨＤＬ）によりハードウエア回路を記述し、それを論理合成して集積回路のネットリストを作成し、集積回路を作成することが行われている。それに伴って、Verilog-ＨＤＬやＶＨＤＬなどの標準化されたＨＤＬが普及してきており、このようなＨＤＬにより記述されたハードウエア設計ファイルをネットリストに変換する論理合成ツールも開発され、実用化されている。
【０００３】
ハードウエアを記述するＨＤＬは、レジスタ・トランスファ・レベル（ＲＴＬ：Register Transfer Level）でハードウエア回路を具体的に記述する独特の記述法が用いられており、ハードウエア回路の知識をもつハードウエア開発者によってハードウエア回路がＨＤＬ記述により開発されているのが現状である。一方、一般的なＣ言語などの高位レベル言語は、ＨＤＬにより記述されるハードウエア回路に比較するとより抽象的な記述になりがちであり、かかる抽象度の違いから、ソフトウエアツールによってＣ言語で記述されたプログラムからＨＤＬで記述されたハードウエアに合成することは、一般的に困難である。
【０００４】
一般的なＣ言語で記述されたアルゴリズム記述から、ＨＤＬによるレジスタ・トランスファ・レベル（ＲＴレベル）の記述に変換することは一部で提案されている。例えば、特許文献１に示される通りである。この提案によれば、Ｃ言語で記述されたアルゴリズム記述を、機能Ｃ記述に変換し、更に、この機能Ｃ記述に時間の概念であるクロック記述を挿入して、ＲＴレベルのＣ記述に変換する。
【特許文献１】特開平２００３−１６１２２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記の特許文献１によれば、各変換の段階で必ずしも１対１に対応する変換が行われるわけでなく、変換の前後で記述の抽象度が異なるため、変換前と変換後とで論理的に等価であるか否かを数学的に検証したり、各段階で変換後の記述に対して機能シミュレーションを行ったりすることが必要になり、実用化には適切ではない。
【０００６】
そこで、本発明の目的は、Ｃ言語などの高位レベル言語で記述されたプログラムから自動的にハードウエア記述言語で記述されたハードウエア設計ファイルを形成することができるハードウエア記述言語合成ツール（プログラム）及びそれを利用した集積回路の設計方法を提供することにある。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、本発明の第１の側面によれば、（１）マイクロプロセッサのプログラムメモリとプログラムデコーダなどを除くハードウエアコンポーネントを、ハードウエア記述言語で記述したハードウエアファイルと、（２）高級レベル言語プログラムをコンパイルして得られたアセンブリレベル言語プログラムを解析して、その命令コードをハードウエアコンポーネントに対応させてハードウエア記述言語で記述したソフトウエアファイルに変換するアセンブリレベル合成プログラムとを有するハードウエア記述言語合成ツールである。そして、このツールは、ハードウエアファイルとソフトウエアファイルとを、ハードウエア設計ファイルとして出力する。
【０００８】
上記第１の側面において、好ましい実施例によれは、複数の前記命令コードにそれぞれ対応して、ハードウエア記述言語で記述された複数のソフトウエアモジュールを有する対応テーブルを有し、当該対応テーブルを参照して、アセンブリレベル言語プログラムの命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換してソフトウエアファイルを生成する。
【０００９】
更に、上記第１の側面において、好ましい実施例によれば、複数の一連の命令コードからなる複合命令コードに対応して、ハードウエア記述言語で記述されたソフトウエアモジュールを有する対応テーブルを有し、アセンブリレベル言語プログラム内の複合命令コードに対しては、それに対応するソフトウエアモジュールに優先的に変換してソフトウエアファイルを生成する。この複合命令に対応するソフトウエアモジュールは、複合命令を構成する個々の命令コードをそれぞれ対応するソフトウエアモジュールに変換した場合よりも、より最適化されより少ない記述量になっている。
【００１０】
更に、上記の第１の側面において、好ましい実施例によれば、アセンブリレベル言語プログラムの命令コードを解析して、ハードウエアファイルから、使用されないハードウエアコンポーネントに対応するＨＤＬ記述を削除したハードウエアファイルを作成し、当該削除されたハードウエアファイルを出力する。アセンブリレベル言語プログラムの命令コードは比較的高級言語に近いので、その解析は、ＨＤＬ記述された後のファイルの解析よりも容易に行うことができ、より効率的に使用されないハードウエアコンポーネントを削除することができる。
【００１１】
上記の目的を達成するために、本発明の第２の側面によれば、少なくとも入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタと、プログラムメモリと、プログラムデコーダとを有するマイクロプロセッサの、前記プログラムメモリ及びプログラムデコーダを除く前記入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタとを含むハードウエアコンポーネントを、ハードウエア記述言語で記述したプロセッサハードウエアファイルと、
アセンブリレベル合成プログラムとを有し、
前記アセンブリレベル合成プログラムは、
前記マイクロプロセッサが実行可能な高級レベル言語で記述された高級レベル言語プログラムを当該マイクロプロセッサのコンパイラにより変換したアセンブリレベル言語プログラムを、解析する手順と、
前記アセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する手順と、
前記プロセッサハードウエアファイルと前記プロセッサソフトウエアファイルとを出力する手順とをコンピュータに実行させることを特徴とするハードウエア記述言語合成ツールである。
【００１２】
更に、上記目的を達成するために、本発明の第３の側面によれば、少なくとも入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタと、プログラムメモリと、プログラムデコーダとを有するマイクロプロセッサの、前記プログラムメモリとプログラムデコーダを除く前記入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタとを含むハードウエアコンポーネントを、ハードウエア記述言語で記述したプロセッサハードウエアファイルがあらかじめ生成され、集積回路をハードウエア記述言語で記述したハードウエア記述言語ファイルを生成する集積回路の設計方法において、
前記マイクロプロセッサが実行可能な高級レベル言語で記述された高級レベル言語プログラムを、当該マイクロプロセッサのコンパイラによりアセンブリレベル言語プログラムに変換する工程と、
前記アセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する工程と、
前記プロセッサハードウエアファイルと前記プロセッサソフトウエアファイルを、前記ハードウエア記述言語ファイルとして出力する工程とを有することを特徴とする。
【発明の効果】
【００１３】
上記発明の側面によれば、マイクロプロセッサが実行可能な高級レベル言語プログラムを、コンパイラによりアセンブリレベル言語プログラムに変換し、そのアセンブリレベル言語プログラムをマイクロプロセッサのハードウエアコンポーネントに対応させてハードウエア記述言語で記述したプロセッサソフトウエアファイルに変換する。アセンブリレベル言語プログラムの命令コードは、例えばあるレジスタにある定数を加算してあるレジスタに格納するというように、マイクロプロセッサのハードウエアコンポーネントに対応しているので、かかるアセンブリレベル言語プログラムであれば、１対１でハードウエア記述言語で記述したハードウエア設計ファイルに置き換えることができ、従来例のような検証やシミュレーションを行う必要がなく、実用的である。
【発明を実施するための最良の形態】
【００１４】
以下、図面にしたがって本発明の実施の形態について説明する。但し、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１５】
図１は、本実施の形態における集積回路の設計工程を示すフローチャート図である。本実施の形態では、所定のマイクロプロセッサで実行可能なＣ言語などの標準的な高級レベル言語（以下ＨＬＬ：High Level Language）のプログラムＰ１を、そのマイクロプロセッサのコンパイラによるコンパイル工程（Ｓ１０）により、アセンブリレベル言語プログラム（以下ＡＬＬ：Assembly Level Language）Ｐ２に変換する。
【００１６】
ＡＬＬプログラムＰ２の命令コードは、例えばあるレジスタにメモリ内の定数を加算して別のレジスタに格納するなど、マイクロプロセッサのハードウエアコンポーネントであるレジスタや演算回路に対する制御命令である。したがって、あらかじめマイクロプロセッサのハードウエアコンポーネントについてハードウエア記述言語（ＨＤＬ）で記述しておけば、そこで宣言されたレジスタやワイヤ（信号）や演算子に対応する制御回路として、ＡＬＬプログラムＰ２の命令コードをＨＤＬで記述することが可能である。しかも、ＡＬＬプログラムの命令コードとＨＤＬで記述したハードウエアとは、その抽象度に違いがなく１対１に対応する。
【００１７】
そこで、本実施の形態におけるＨＤＬ合成ツールＰ１０は、そのアセンブリレベル合成工程Ｓ１４により、コンパイルされたＡＬＬプログラムＰ２の命令コードを、ＨＤＬで記述したソフトウエアファイルＰ３に変換する。この変換についての具体例は、後で詳述する。
【００１８】
さらに、本実施の形態の設計工程では、所定のマイクロプロセッサの、プログラムメモリとプログラムデコーダを除く、レジスタ群や演算ユニット、それにプログラムカウンタを含むハードウエアコンポーネントを、ＨＤＬで記述したハードウエアファイルＰ４をあらかじめ準備しておき、ＨＤＬ合成ツールＰ１０が、前述のソフトウエアファイルＰ３と共に、ハードウエアファイルＰ４も出力する。つまり、ハードウエアファイルＰ４は、マイクロプロセッサのソフトウエアの部分を除いたハードウエアコンポーネントをＨＤＬで記述した設計ファイルであり、一方、ソフトウエアファイルＰ３は、そのハードウエアコンポーネントを制御する制御回路等をＨＤＬで記述した設計ファイルに対応する。
【００１９】
そこで、本実施の形態の設計方法では、このＨＤＬで記述されたソフトウエアファイルＰ３とハードウエアファイルＰ４とをロジック・シンセサイザで論理合成し（Ｓ１４）、集積回路のネットリストＰ６を生成する。現在、一部のＨＤＬは標準化されており、その標準化されたＨＤＬからネットリストを生成するロジック・シンセサイザも、前述したとおりすでに実現化されている。したがって、本実施の形態においては、現在普及しているロジック・シンセサイザを利用することで、ＨＤＬ記述の両ファイルＰ３、Ｐ４をネットリストＰ６に変換することができる。
【００２０】
その後の工程は、通常のＬＳＩの設計工程と同じである。すなわち、レイアウトツールによる自動レイアウト工程Ｓ１６により、ネットリストＰ６からレイアウトデータＰ７が生成され、レイアウトデータＰ７を利用してＬＳＩプロセスＳ１８により専用の集積回路装置Ｐ８が生成される。
【００２１】
従来では、ハードウエア技術者がハードウエア回路をＨＤＬで記述して設計し、それを論理合成してネットリストに変換していたが、本実施の形態では、マイクロプロセッサが実行可能なＨＬＬプログラムから、ＨＤＬ合成ツールＰ１０により自動的にＨＤＬで記述したハードウエア設計ファイルＰ３を生成することができるので、ハードウエア技術者でないソフトウエア技術者でも、専用ＬＳＩを設計することができる。しかも、ＨＬＬプログラムからコンパイラによりコンパイルされたＡＬＬプログラムの命令コードをＨＤＬ記述のハードウエア回路に変換しているので、変換前後で抽象度が同じであり、１対１に対応させて変換でき、従来例のような変換前後の論理の検証を行う必要がない。
【００２２】
図２は、本実施の形態におけるＨＤＬ合成ツールの構成図である。ＨＤＬ合成ツールＰ１０は、プロセッサハードウエアファイルＰ４と、ＡＬＬプログラムの命令コードとＨＤＬで記述したハードウエアファイルとの対応テーブルＴＢ１２と、対応テーブルＴＢ１２を参照してＡＬＬプログラムＰ２をプロセッサソフトウエアファイルＰ３に変換するＡＬＬプログラム変換プログラムＰ１４とで構成される。プロセッサハードウエアファイルＰ４は、所定のマイクロプロセッサのプログラムメモリ、プログラムデコーダなどのソフトウエアに必要なハードウエアコンポーネントを除いて、例えば、入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタなどのハードウエアコンポーネントについてＨＤＬで記述したファイルである。また、対応テーブルＴＢ１２は、上記マイクロプロセッサのコンパイラによりコンパイルされうる全ての命令コードそれぞれに対応して、各命令コードをＨＤＬで記述したハードウエア回路のファイル（プロセッサソフトウエアモジュール）を有する。このプロセッサソフトウエアモジュールは、後述するように、ＡＬＬの命令コードをプロセッサハードウエアファイルＰ４のハードウエアコンポーネントに対応して、それらを制御する制御回路をＨＤＬで記述したものである。図２には、ＡＬＬ命令コード「ＡＤＤＷＦ」に対応するＨＤＬ記述されたプロセッサソフトウエアモジュールが例示されている。
【００２３】
図３は、マイクロプロセッサの一般的構成例を示す図である。このマイクロプロセッサＭＰは、プログラムカウンタＰＣと、スタックレジスタＳＲと、プログラムメモリ１０と、命令レジスタ１２と、プログラムデコーダ１４とを有する。プログラムカウンタＰＣのプログラムアドレスに対応するプログラム命令コードが、プログラムメモリ１０からフェッチされ、命令レジスタ１２に格納され、その命令レジスタ内のプログラム命令コードが、プログラムデコーダ１４でデコードされ、デコード結果による制御信号等Ｃ１４が生成される。また、マイクロプロセッサＭＰは、入出力端子として、クロック入力端子clkinと、メインクリア端子mclrと、入出力データ群Ra、Rb（それぞれ８ビット）とを有し、更に、データメモリ１６と、特殊レジスタ１８と、定数データメモリ２０と、タイマーなどの周辺回路２２とを有する。そして、マイクロプロセッサＭＰは、各種の演算器を有する演算ユニット２４と、演算結果が格納されるＷレジスタ２６とを有する。演算器には、例えば、ＡＮＤ、ＯＲ、ＥＯＲなどの論理回路や、加算器などの演算器が含まれる。
【００２４】
入出力端子Ｒａ、Ｒｂに入力されるデータは、一旦特殊レジスタ１８に格納され、内部バスＢＵＳを介して演算ユニット２４に供給され、命令コードに対応した演算が実行され、その演算結果が、Ｗレジスタ２６に格納され、または特殊レジスタ１８の所定のレジスタに格納される。また、所定の処理結果が特殊レジスタ１８に格納され、入出力端子Ｒａ、Ｒｂから出力される。プログラムメモリ１０に格納されている命令コードは、Ｃ言語などのＨＬＬプログラムではなく、それをコンパイルしたＡＬＬプログラムである。もちろん、ＡＬＬプログラムコードをアセンブラーにより翻訳された機械語コード（ニーモニック）の形態で、プログラムメモリ１０に格納されている。そして、ＡＬＬプログラムの命令コードは、例えば、特殊レジスタの所定のレジスタの値に、定数データメモリの定数を加算して、データメモリ１６内の所定の領域に格納するなどの形態になっており、プロセッサのレジスタ群や演算器などのハードウエアコンポーネントへの制御に対応するものである。
【００２５】
更に、マイクロプロセッサＭＰにおけるタイミングの概念は、主に、プログラムカウンタＰＣと、制御クロックclkinとにある。つまり、プログラムカウンタＰＣのアドレスに対応する命令コードが、制御クロックclkinに同期して、実行されるからである。そして、命令コードの実行が完了するたびに、プログラムカウンタＰＣがインクリメントされ、次の命令コードが同様にして実行される。
【００２６】
図４は、本実施の形態において、前述のプロセッサハードウエアファイルＰ４内にＨＤＬ記述されるハードウエアコンポーネントの一例を示す図である。図３のマイクロプロセッサＭＰを構成するハードウエアコンポーネントのうち、プログラムメモリ１０と、命令レジスタ１２と、命令デコーダ１４とを除く、全てのハードウエアコンポーネントが、ＨＤＬ記述されたハードウエア設計ファイルとしてのプロセッサハードウエアファイルＰ４内に記述される。図４の例では、入出力端子clkin、mclr、Ra、Rbと、データメモリ、特殊レジスタ、定数データメモリ、周辺回路、演算ユニット、Wレジスタ、プログラムカウンタＰＣ及びスタックレジスタＳＲなどが、ＨＤＬ記述される。ＨＤＬは標準化された言語によるものであり、マイクロプロセッサのハードウエア回路の仕様がわかれば、その回路のコンポーネント（回路要素）をＨＤＬ記述することが可能になる。この具体例については、後述する。
【００２７】
図２にもどり、プロセッサハードウエアファイルＰ４と、対応テーブルＴＢ１２とは、所定のマイクロプロセッサ毎にあらかじめ作成され、ＨＤＬ合成ツールＰ１０に添付されている。そして、Ｃ言語などのＨＬＬプログラムが作成されると、対応するマイクロプロセッサのコンパイラによりＡＬＬプログラムに変換され、そのＡＬＬプログラムＰ２の各命令コードが、ＨＤＬ合成ツールＰ１０のＡＬＬプログラム変換プログラム（ＡＬＬ合成ツール）Ｐ１４により、逐一、ハードウエア回路をＨＤＬ記述したプロセッサソフトウエアモジュールに置き換えられる。この置き換えは、ＡＬＬ命令コードとＨＤＬ記述モジュールとの対応を有する対応テーブルＴＢ１２を参照して行われる。そして、ＨＤＬ合成ツールＰ１０は、プロセッサソフトウエアファイルＰ３と、あらかじめ添付されていたプロセッサハードウエアファイルＰ４とをハードウエア設計ファイル（Ｐ３＋Ｐ４）として出力する。
【００２８】
このように、プロセッサハードウエアファイルＰ４と対応テーブルＴＢ１２とは、所定のマイクロプロセッサに対応してあらかじめ作成しておけば、その後のＨＤＬ合成では、繰り返して使用することができる。また、複数のマイクロプロセッサに対応するＨＬＬプログラムに対応可能にするためには、その複数のマイクロプロセッサに対応して、プロセッサハードウエアファイルＰ４と対応テーブルＴＢ１２とをあらかじめ生成してツールに添付しておく必要がある。
【００２９】
図５は、本実施の形態におけるＨＤＬ合成手順を示すフローチャート図である。最初に、ＨＬＬプログラムからコンパイラによりコンパイルされているＡＬＬプログラムを読み込む（Ｓ２０）。この読み込まれたＡＬＬプログラムからどのマイクロプロセッサに対応するものかを判別し、その判別されたマイクロプロセッサのプロセッサハードウエアファイルＰ４が出力される（Ｓ２２）。工程Ｓ２２では、あらかじめ作成されて添付されているプロセッサハードウエアファイルＰ４がそのまま出力される。
【００３０】
次に、ＨＤＬ合成では、ｉ＝０として（Ｓ２４）、アドレスｉ番地のＡＬＬプログラム命令コードが解析される。そして、対応テーブルＴＢ１２を参照して、その命令コードに対応するプロセッサソフトウエアモジュール（ＨＤＬ記述ファイル）が選択され、出力される（Ｓ２８）。そして、全てのＡＬＬプログラムの命令コードに対して（Ｓ３０、Ｓ３２）、上記の工程Ｓ２６とＳ２８とが繰り返される。その結果、ＡＬＬプログラムの全ての命令コードが、対応するＨＤＬ記述のプロセッサソフトウエアモジュールに変換される。その結果、Ｃ言語などの標準ＨＬＬプログラムが、ハードウエア回路に対応するＨＤＬ記述ファイルＰ３、Ｐ４として出力される。上記の手順Ｓ２０、Ｓ２４、Ｓ２６、Ｓ２８、Ｓ３０、Ｓ３２が、アセンブリレベル合成手順Ｓ１４に対応する。
【００３１】
図６は、最終的に生成されるＬＳＩの構造図である。本実施の形態のＨＤＬ合成ツールにより、マイクロプロセッサのプログラムメモリやプログラムデコーダ等を除くハードウエアコンポーネントが、プロセッサハードウエアファイルＰ４として出力され、プログラムメモリに格納されているＡＬＬプログラムがプロセッサソフトウエアファイルＰ３として出力される。そして、プロセッサソフトウエアファイルＰ３は、ハードウエアコンポーネントに対する制御回路３０をＨＤＬ記述したものである。したがって、これらのハードウエア設計ファイルであるＨＤＬファイルＰ３，Ｐ４から、論理合成、レイアウトにより生成されるＬＳＩは、図６に示されるようになる。つまり、マイクロプロセッサのハードウエアコンポーネントである、入出力端子群clkin、mclr、Ra、Rb、プログラムカウンタＰＣ、スタックレジスタＳＲ、データメモリ１６、特殊レジスタ１８、定数データメモリ２０、周辺回路２２、演算ユニット２４、Wレジスタ２６などに加えて、ソフトウエアファイルP3に対応する制御回路ユニット３０で構成される。そして、制御回路ユニット３０の制御信号群C30〜C36が、前述のハードウエアコンポーネントに供給される。
【００３２】
以上が、本実施の形態の概略的な説明である。以下、具体例を示して、プロセッサハードウエアファイルP4、対応テーブルTB12、プロセッサソフトウエアファイルP3について詳述する。
【００３３】
［プロセッサハードウエアファイルP4］
図７〜図１３は、プロセッサハードウエアファイルP4の一例を示す図である。なお、これらの図には、HDL記述が含まれ、それを説明するコメントがブロック内に示されている。また、VerilogHDLには、レジスタ宣言文reg、ワイヤ（信号）宣言文wire、アサイン文assign、オールウエイズ文alwaysなどが含まれる。
【００３４】
ハードウエアファイルP4は、前述したとおり、図４に示されたプロセッサのハードウエアコンポーネントをＨＤＬで記述したものである。図７には、ハードウエアファイルP4に含まれる入出力ポート定義部１００と、レジスタ及びワイヤ（信号）の宣言部とデータメモリ設定部１０６の一部が示される。この例のプロセッサでは、１６の入出力端子ra0-ra7、rb0-rb7と、クロック端子clkin、マスタクリア端子mclrとがあり、入出力ポート定義部１００には、時間の単位の宣言１０１と、モジュール名sampleの宣言１０２と、１６個の入出力端子の宣言１０２と、入力端子の宣言１０４とが含まれる。
【００３５】
プロセッサは、回路の各設定を行う特殊レジスタやデータを格納するデータレジスタなどのレジスタと、レジスタや演算器の出力信号などのワイヤがあり、それらが、レジスタ及びワイヤ宣言部とデータメモリ設定部１０６で宣言される。即ち、「reg」がレジスタの宣言を、「wire」がワイヤ（信号）の宣言文である。そして、図７に示されるように、１３ビットのプログラムカウンタpc_regとクロック信号clkの宣言１０８と、８ビットのワイヤportain1_wire, portain2_wire, portbin1_wire, Portbin2_wireと、入力ポート部における８ビットのレジスタportaout_reg, portbout_reg, option_reg, Trisa_regの宣言１１０と、割込関連のワイヤ（信号）とレジスタの宣言１１２とが含まれる。
【００３６】
図８には、前述のレジスタ及びワイヤ宣言部とデータメモリ設定部１０６の一部が示され、ここでは、３２バイトの８ビットレジスタファイルとしてのram_regの宣言１１４と、演算ユニット関連のレジスタとワイヤの宣言１１６とが示されている。演算ユニット関連１１６では、Wレジスタw_regと、入力レジスタin_regと、加算出力信号addout_node、論理和出力信号andout_nodeなど、スタックレジスタstack_reg及びスタックポインタレジスタstack_pnt_regが宣言されている。
【００３７】
図９には、前述のレジスタ及びワイヤ宣言部とデータメモリ設定部１０６の一部が示され、ここでは、特にデータメモリ設定部１１８が示される。特殊レジスタ群INDF〜INTCONとデータメモリのアドレス空間内の配置が示されている。このデータメモリ設定部１１８は、前述のレジスタファイルram_regにおけるレジスタの配置を示している。
【００３８】
図１０は、入出力切り替え制御部の記述１２０であり、それぞれ８ビットの入出力ポートAの記述１２２と入出力ポートBの記述１２４とが一部省略して示されている。入出力ポートAの記述１２２には、３つのassign文が含まれている。Assign文とは、ある条件の下でワイヤ（信号）に他のワイヤや回路の出力を割り付けるものである。即ち、1行目のassign文は、信号portain1_wire[7]を、レジスタtrisa_reg[7]が１ビット「１」の時（trisa_reg[7]==1'b1）はポートra7を割り当てて、それ以外の時はハイインピーダンス（1'bz）を割り当てることを意味する。２行目のassign文も同様である。そして、３行目のassign文では、ポートra7を、レジスタtrisa_reg[7]が１ビット「０」の時（trisa_reg[7]==1'b0）は信号portaout_reg[7]を割り当てて、それ以外の時はハイインピーダンス（1'bz）を割り当てることを意味する。このような３つのassign文を含む入出力ポートAの記述１２２によれば、図１４に示すハードウエア回路図が定義される。
【００３９】
図１４に示されたハードウエア回路図は、ゲート回路３００、３０２、３０４が含まれ、入出力端子Ra7に対する内部信号との関係についての入出力回路を構成する。つまり、ゲート回路３００，３０２，３０４は、レジスタtrisa_reg[7]の状態に応じて、図１０に示した信号を出力とする。つまり、レジスタtrisa_reg[7]が「１」の時は、ゲート回路３００は入力ポートRa7を出力し、ゲート回路３０２はそれを出力し、ゲート回路３０４は出力をハイインピーダンスにし、レジスタtrisa_reg[7]が「０」の時は、ゲート回路３００は出力をハイインピーダンスにし、ゲート回路３０２は信号portaout_reg[7]を出力し、ゲート回路３０４は信号portaout_reg[7]を入出力ポートRa7に出力する。このように、図１０の入出力ポートAのＨＤＬ記述１２２によれば、図１４のような入出力回路が一義的に定義されるのである。
【００４０】
図１１は、ピン変化割込回路の記述１２６を示す。この記述は、入出力ポートrb7-rb4、rb0の変化に対応する割込回路を記述するものである。最初に割込信号int0〜int7を信号portbin1_wire[0]-[7]にそれぞれ割り当てるアサイン文の記述１２８が示され、次に、２つのオールウエイズ文alwaysの記述１３０が示される。この記述１３０を説明するために、行番号１３０１〜１３１７を記載している。１３０１行のalways文は、割込信号int0の立ち上がりエッジ（posegde int0）または内部クリアレジスタintclr_reg0の出力の立ち上がりエッジ（posedge intclr_reg0）が発生した場合に、以下の動作を行うことを記述する。また、１３０３〜１３０７行では、内部クリアレジスタintclr_reg0が「１」ならレジスタintrise_reg[0]を１ビット「０」（1'b0）にし、それ以外であれば１ビット「１」にすることを記述する。つまり、この記述により、信号int0またはレジスタintclr_reg0の立ち上がりエッジが発生した時に、レジスタintclr_reg0が「０」であれば、その割込を許可してレジスタintrise_reg[0]を「１」に設定し、レジスタintclr_reg0が「１」であれば、その割込を禁止してレジスタintrise_reg[0]を「０」にする回路が定義される。１３０９〜１３１６行も同様の記述である。
【００４１】
そして、１３１７行では、内部割込信号rb0_intは、割込受付レジスタoption_reg[6]が「１」であれば、レジスタintrise_reg[0]に、「０」であれば、レジスタintdown_reg[0]になることを記述している。３つのassign文の記述１４０により、特に１４０３行により最終的な内部割込信号int_nodeを生成する論理回路が記述される。従って、これらの記述１２８，１３０，１４０によれば、割込回路が定義される。
【００４２】
図１２には、各演算器や制御信号の設定の記述１４２が示される。Assign文１４４は、プログラムカウンタのインクリメンタ端子incpc_nodeが、プログラムカウンタレジスタpc_regに１３ビットの「000．．．001」を加算したものであることを記述する。また、演算ユニット内の演算器出力信号の記述１４６が示される。この記述１４６の１行目を例にして説明すると、加算器出力信号addout_nodeは、８ビットのWレジスタw_regに９ビット目の「０」（1'b0）を加えた９ビットの値と、８ビットの入力レジスタin_regに９ビット目の「０」（1'b0）を加えた９ビットの値との加算結果であることが記述されている。つまり、加算によるキャリーを考慮して、入力レジスタは９ビット構成になっているのである。各行の／／の後にそれぞれの演算論理が示されている。他のアサイン文も同様である。この記述１４６により、演算ユニット内の複数の演算器が定義される。さらに、記述１４８は、スリープ信号powerdown_nodeや、スリープ解除信号startclkin_nodeや、クロック選択信号selclk_nodeをそれぞれ記述する。
【００４３】
演算器の記述１４６において、comout_nodeは入力レジスタin_regの反転論理、decout_nodeは入力レジスタin_regを−１、incout_nodeは入力レジスタを＋１、iorout_nodeは入力レジスタとWレジスタとの論理和、rlfout_nodeは入力レジスタの左シフト、rrfout_nodeは入力レジスタの右シフト、subout_nodeは入力レジスタとWレジスタの除算結果、swapout_nodeは入力レジスタの上位ビットと下位ビットを入れ替えた出力、xorout_nodeは入力レジスタとWレジスタとの排他的論理和、bcfout_nodeは入力レジスタをマスクレジスタbit_regでクリアした出力、bsfout_nodeは入力レジスタをマスクレジスタでセットした出力、addlowout_nodeは入力レジスタとWレジスタの加算下位４ビット出力、sublowout_nodeは入力レジスタとWレジスタの減算下位４ビット出力をそれぞれ示している。
【００４４】
図１３は、シンクロナイザー、リセット時の動作設定、タイマ、プリスケーラ、割込制御回路の記述１５０の一部であり、図１３には、シンクロナイザーの記述１５２と、リセット時の動作設定の記述１５４とが示される。シンクロナイザーの記述１５２では、クロックclkの立ち上がりエッジ(posedge)が発生すると、マスタクリア端子mclrがマスタクリアレジスタmclr_sync_regに取り込まれることが記述され、これによりマスタクリア端子mclrがクロックclk同期でレジスタに取り込まれる回路が定義される。また、リセット動作設定の記述１５４は、そのマスタクリアレジスタmclr_sync_regが「０」（1'b0）になると、プログラムカウンタレジスタpc_regやステータスレジスタstatus_regなどが所定の値にリセットされることを記述している。
【００４５】
以上が、ハードウエアファイルP4の記述例である。そして、ハードウエアファイルP4の最後に、「end else begin」の記述１５６が挿入され、これ以降に、ソフトウエアファイルP3の記述が加えられる。
【００４６】
［対応テーブルTB12］
図１５〜図２３は、対応テーブルTB12の具体例を示す図である。対応テーブルTB12は、前述のとおり、C言語のプログラムをコンパイルしたＡＬＬ記述プログラムの全ての命令コード
と、その命令コードを実行するための制御回路についてＨＤＬ記述したファイルとの対応を有する。したがって、図１５〜図２４は、命令コードとＨＤＬ記述されたソフトウエアモジュールとの対応を有する。本実施の形態のマイクロプロセッサは、ＡＬＬ記述の命令として全部で３５命令を有する。その命令には、１８のバイト対応のレジスタファイル命令群（図１５〜図１９）と、４つのビット対応のレジスタファイル命令群（図２０〜図２１）と、１３のリテラル（定数）及びコントロール命令群（図２１〜図２４）とからなる。
【００４７】
図１５には、バイト対応のレジスタファイル命令２００の一つである命令ＡＤＤＷＦに対応するソフトウエアモジュールのＨＤＬ記述２０２が示されている。この命令ＡＤＤＷＦは、ニーモニック（機械言語）では「000111dfffffff」であり、Ｗレジスタとレジスタファイルfffffff番地のデータ（データソース）を加算し、ｄで指定された格納先（デスティネーション）に保存する命令である。このＡＤＤＷＦ命令のＨＤＬ記述２０２は、プログラムカウンタレジスタpc_regが「xxxx」番地の時に（２０２１行）、第１のクロックサイクル（ステートレジスタstate_regが「０」（1'b0）のとき）で（２０２２行）、データソースであるレジスタファイルfffffff番地のデータを入力レジスタin_regに格納し（２０２３行）、第２のクロックサイクルに移り（ステートレジスタstate_regを「１」（1'b1）にする）（２０２２行）、第２のクロックサイクルにおいて、加算器出力の下位８ビットaddout_node[7:0]をｄで指定された格納先に格納し（２０２６行）、プログラムカウンタレジスタpc_regをインクリメントし（２０２７行）、加算出力のキャリービットaddout_node[8]などをステータスレジスタstatus_reg[0]などに格納し（２０２８行）、加算器出力の下位８ビットaddout_node[7:0]がすべて「０」（1'b0）のときはステータスレジスタstatus_reg[2]を「１」（1'b1）にしそれ以外では「０」にし（２０３０〜２０３４行）、最後に第１クロックサイクルに移る（ステートレジスタatate_regを「０」にする）（２０３５行）。
【００４８】
なお、データソース部とは、バイト対応のレジスタファイル命令では、データソースとなりうるのは特殊レジスタとデータメモリであり、そのアドレスは、図９に示した通りである。また、データディスティネーションとなりうるのは、特殊レジスタとデータメモリ及びＷレジスタであり、ｄ＝０の時はＷレジスタ、ｄ＝１の時は特殊レジスタとデータメモリ（データソースに上書き）になる。
【００４９】
このＨＤＬ記述２０２において、タイミング制御として、プログラムカウンタpc_regが所定の番地「xxxx」である場合に動作することと（２０２１行）、２つのクロックサイクルに同期してそれぞれ動作すること（ステートレジスタstate_regが「０」のサイクルと、「１」のサイクル）が記述されている。つまり、ＨＬＬであるC言語のプログラムをコンパイルしたＡＬＬプログラムは、それぞれプログラムアドレスが割り当てられているので、そのプログラムアドレスを処理のタイミングに利用しているのである。
【００５０】
図１６は、対応テーブルの命令ＡＮＤＷＦに対応するソフトウエアモジュールのＨＤＬ記述２０４が示されている。この命令ＡＮＤＷＦは、ニーモニック（機械言語）では「000101dfffffff」であり、Ｗレジスタとレジスタファイルfffffff番地のデータ（データソース）の論理積をとり、ｄで指定された格納先（デスティネーション）に保存する命令である。この記述２０４では、図１５の記述例と同様に、プログラムアドレスが「xxxx」の時に開始され（２０４１行）、１クロック目（state_reg=0）でデータソースのデータを入力レジスタin_regに格納し（２０４３行）、２クロック目（state_reg=1）で論理積出力andout_nodeをデータディスティネーションに格納し（２０４６行）、プログラムカウンタをインクリメントし（２０４７行）、演算結果が０であればゼロフラグであるステータスレジスタstate_reg[2]を「１」（1'b1）にし（２０４８、２０４９行）、演算結果が０以外であれば「０」（1'b0）にする（２０５１行）。そして、１クロック目に戻す（２０５３行）。
【００５１】
図１６の記述２０４Ａは、実際にアセンブリレベル合成されて出力されるソフトウエアモジュール例である。つまり、この例では、プログラムカウンタが「８」になったときに（１行目）、所定の番地のメモリレジスタram_regのデータを入力レジスタin_regに格納し（３行目）、演算結果andout_nodeをＷレジスタw_regに格納する例である。このように、後述するＡＬＬプログラムのアドレスに対応して対応テーブルのモジュールの「xxxx」が特定され（HDL204の２０４１行目）、その命令コードに対応してデータソース及びデータディスティネーションが特定され（HDL204の２０４３行、２０４６行）、対応テーブル内のＨＤＬ記述モジュール２０４が出力例２０４Ａとして出力される。
【００５２】
図１７は、対応テーブルにおけるバイト対応のレジスタファイル命令のうち、命令ＣＬＲＦ、ＣＬＲＷ、ＣＯＭＦ、ＤＥＣＦ、ＤＥＣＦＳＺに対応するＨＤＬ記述のモジュール２０６，２０８，２１０，２１２を示している。それぞれの命令の説明は、図中に記載されるとおりであり、ＨＤＬ記述モジュールは、プログラムカウンタのカウント値「ｘｘｘｘ」を条件とするｉｆ文と、所定の処理（省略）と、プログラムカウンタをインクリメントする記述（pc_reg<=incpc_node）とが含まれる。
【００５３】
図１８、図１９も図１７と同様であり、バイト対応のレジスタファイル命令の命令ＩＮＣＦ、ＩＮＣＦＳＺ、ＩＯＲＷＦ、ＭＯＶＦ、ＭＯＶＷＦ、ＮＯＰ、ＲＬＦ、ＲＲＦ、ＳＵＢＷＦ、ＳＷＡＰＦ、ＸＯＲＷＦに対応するＨＤＬ記述のモジュール２１４〜２３２をそれぞれ示している。各ＨＤＬ記述モジュールは、図１７と同様に、所定の制御記述に加えて、プログラムカウンタ値の条件とプログラムカウンタのインクリメントの記述とを有する。
【００５４】
図２０は、ビット対応のレジスタファイル命令２０４のうち、命令ＢＣＦに対応するＨＤＬ記述のモジュール２３６が示されている。命令ＢＣＦは、レジスタファイルfffffff番地のデータを別途テーブル２３５で指定されたbbbに対応する８ビットマスクデータで指定されたビットの値をクリア「０」にする命令である。つまり、データソースのデータを入力レジスタに格納し（２３６３行）、bbbで指定されたマスクデータをマスクレジスタbit_regに格納し（２３６４行）、それらの論理積出力bcfout_nodeをデータディスティネーションのレジスタに格納する（２３６７行）。
【００５５】
図２０には、命令ＢＳＦ、命令ＢＴＦＳＣに対応するＨＤＬ記述のモジュールファイル２３８、２４０が示されている。但し、具体的な部分は省略している。
【００５６】
図２１には、命令ＢＴＦＳＳに対応するＨＤＬ記述のモジュールファイル２４２が示されている。また、図２１には、定数演算命令（リテラル）とコントロール命令２４３のうち、命令ＡＤＤＬＷ、ＣＬＲＷＤＴ、ＡＮＤＬＷ、ＣＡＬＬに対応するＨＤＬ記述のモジュールファイル２４４、２４６、２４８、２５０が示される。各命令については、図中の説明に示されている。命令ＣＡＬＬは、プログラムアドレス「kkkkkkkkkkk」番地のサブルーチンを呼び出す命令である。したがって、ＨＤＬ記述のモジュール２５０には、アドレス「kkkkkkkkkkk」にＰＣラッチレジスタの２ビットpclath_reg[4:3]を上位ビットとして加えた１３ビットのアドレスが、プログラムカウンタレジスタpc_regに格納され（２５０２行）、スタックポイントレジスタstack_pnt_regが示すスタックレジスタstack_regに、プログラムカウンタをインクリメントしたアドレス（リターンアドレス）が格納され（２５０３行）、スタックポイントレジスタが「１１１」であればそれを「０００」に戻して（２５０４、２５０５行）、スタックポイントレジスタが「１１１」以外であれば、単にそのポイント値を＋１する（２５０７行）。
【００５７】
図２２は、命令ＧＯＴＯ、ＩＯＲＬＷ、ＭＯＶＬＷ、ＲＥＴＵＲＮ、ＲＥＴＦＩＥに対応するＨＤＬ記述のモジュール２５２、２５４、２５６、２５８、２６０を示し、図２３は、命令ＲＥＴＬＷ、ＳＬＥＥＰ、ＳＵＢＬＷ、ＸＯＲＬＷに対応するＨＤＬ記述のモジュール２６２、２６４、２６６、２６８を示す。例えば、命令ＧＯＴＯは、プログラムアドレス「kkkkkkkkkkk」にジャンプする命令であり、ＨＤＬ記述２５２には、プログラムカウンタにそのアドレスにＰＣラッチレジスタの２ビットを上位に加えたアドレスを格納することが記述されている。また、命令ＲＥＴＵＲＮは、サブルーチンから復帰する命令であり、そのＨＤＬ記述２５８には、スタックポイントレジスタの−１のポイントにあるスタックレジスタに格納されたアドレスをプログラムカウンタに格納し（２５８２行）、スタックポイントレジスタを−１減算する（２５８３〜２５８６行）ことが記述されている。
【００５８】
以上のように、対応テーブルＴＢ１２には、全てのＡＬＬの命令に対応して、ＨＤＬ記述されたモジュールファイルが設けられている。そして、後述するとおり、ＨＤＬ合成ツールが、コンパイルされたＡＬＬプログラムに示されたプログラムアドレスと、命令コードと、レジスタファイルアドレスを解析して、命令コードに対応するＨＤＬ記述モジュールにプログラムアドレスとレジスタファイルアドレスの情報を反映させて、ソフトウエアファイルＰ３を出力する。
【００５９】
［具体例］
次に、具体的なＣ言語記述のプログラムに基づき、それがコンパイルされ、コンパイルされたＡＬＬ記述されたプログラムからＨＤＬ合成ツールにより、専用集積回路をＨＤＬ記述するハードウエア設計ファイルが生成されることを説明する。
【００６０】
図２４は、ＨＬＬとしてＣ言語で記述された乗剰余算のプログラムＰ１を示す図である。このＣ言語記述プログラムは、Ｘ×Ｙ÷Ｐの余り（％）を求める演算を実行するものである。まずヘッダーファイルが定義され（記述３００）、変数としてin1〜in3とregがそれぞれ整数として定義され（記述３０２）、そして、ポートa0(pin_a0)とポートa1(pin_a1)とを共にLレベルに初期化する（記述３０４）。なお、ポートa0がHレベルで変数X,Y,Pが順次入力され、ポートa1がHレベルで演算結果が出力されることが前提である。
【００６１】
また、図２４のプログラムは、無限ループ（記述３０５）として、ポートa0＝HにしてXを変数in1として入力し、ポートa0＝Lにし（記述３０６）、ポートa0＝HにしてYを変数in2として入力し、ポートa0＝Lにし（記述３０８）、ポートa0＝HにしてPを変数in3として入力し、ポートa0＝Lにし（記述３１０）、変数in1に変数in2を乗算し、変数in3で除算し、その余りを変数regに与え（記述３１２）、そして、ポートa1＝Hにして変数regを出力し、ポートa1＝Lにする（記述３１４）。
【００６２】
このようなC言語記述のプログラムP1が生成されると、所定のマイクロプロセッサのコンパイラによりコンパイルされ、ALL記述プログラムが生成される。
【００６３】
図２５〜図２９は、図２４のC言語をコンパイルしたＡＬＬプログラムの例を示す図である。図２５に記載されるように、ＡＬＬプログラムＰ２は、プログラムアドレスの欄４００と、命令コード欄４０２と、レジスタファイルアドレスの欄４０４とを有する命令コードからなる。つまり、対応ファイルＴＢ１２に含まれる命令コードからなる。図２５の例では、プログラムアドレス「0000」には、命令コードＭＯＶＬＷ、定数データ８ビット「００００００００」が記述されている。つまり、定数「００」（＝８ビットで00000000）の定数（リテラル）データをＷレジスタに移動する命令コードである。以下、同様に複数の命令コードが記述されている。
【００６４】
図３０は、図２５〜２９に示されたＡＬＬプログラムＰ２をニーモニックコード（機械語コード）に変換した例である。
【００６５】
図３１は、図３０に示したＡＬＬプログラムＰ２のニーモニックコードをＨＤＬ合成ツールに与えた結果合成されたＨＤＬ記述ファイルの一例を示す図である。つまり、図１、２に示したように、ＨＤＬ合成ツールは、まずプロセッサのハードウエアコンポーネントをＨＤＬ記述したプロセッサハードウエアファイルＰ４を出力し、その最終行を「end else begin」で終了させる。さらに、アセンブリレベル合成ツールであるＡＬＬプログラム変換プログラムＰ１４は、図３０のＡＬＬプログラムの命令コードを１行毎に解析し、対応テーブルＴＢ１２を参照して、各命令コードをＨＤＬ記述されたモジュールに変換し、プロセッサソフトウエアファイルＰ３として出力する。図１３のソフトウエアファイルＰ３には、図２５のＡＬＬプログラムの命令「ＭＯＶＬＷ  ００」と、命令「ＭＯＶＷＦ  ０Ａ」とに対応するＨＤＬ記述のモジュールファイルが含まれている。これらのモジュールファイルには、それぞれのプログラムアドレス「００００」「０００１」を有するｉｆ文と、データディスティネーションとが含まれている。つまり、図１に示したように、共にＨＤＬで記述されたハードウエアファイルＰ４とソフトウエアファイルＰ３とからなるハードウエア設計ファイルが、図３１のように生成される。
【００６６】
［論理合成］
図１に示されるように、このＨＤＬ記述されたファイルは、論理合成ツール（ロジックシンセサイザ）により、ネットリストＰ６に変換される。論理合成は、一般的に次のように行われる。論理合成ツールは、ＨＤＬ記述されたファイルと、面積や速度などの制約条件とを入力し、加算器や乗算器などのリソースを有するリソースライブラリと、チップ上のセルやマクロを有するテクノロジライブラリを参照して、論理回路を合成し、ネットリストの形態で出力する。この論理合成処理は、例えば、（１）リソース割り当てとリソースシェアリング、（２）レジスタの推定、（３）状態コードの割り当て、（４）組み合わせ回路の合成、（５）論理最適化、（６）テクノロジマッピングの処理からなる。（１）リソース割り当てとリソースシェアリング処理では、ＨＤＬ記述中の「＋」「＊」などの演算子に対して、リソースライブラリに登録されている加算器や乗算器といったハードウエアリソースを割り当てて、さらに、ＨＤＬ記述を解析し、複数の演算子が同時に使用されない場合を条件として、それらの演算子に対して共通のハードウエアリソースを割り当てる。（２）レジスタの推定処理では、ＨＤＬ記述中のあらかじめ決められたレジスタを表現するパターンに一致した部分をレジスタとして認識する。（３）状態コード割り当て処理では、状態に対してそれぞれ状態コードを割り当てる。（４）組み合わせ回路の合成処理では、ＨＤＬ記述中の代入文、ｉｆ文、ｃａｓｅ文、ｆｏｒ文、ｗｈｉｌｅ文などの文を論理式に変換する。つまり、ある信号の状態を条件に所定のレジスタのデータが別の信号に割り当てられる場合は、それらを論理回路に対応するように論理式に変換する。そして、（５）論理最適化処理では、例えば、使用されていないＨＤＬ記述やハードウエアコンポーネントを削除して、無駄なハードウエア回路の発生を回避し、所定の論理式を合成して最適化された論理式に変換するなど、様々な論理式の最適化が行われる。最後に、（６）テクノロジマッピング処理では、最適化された論理式にテクノロジライブラリに登録されたセルやマクロを割り当てる。このとき、面積や速度などの制約条件を考慮してセルを割り当てる。さらに、レジスタに対してはテクノロジライブラリに登録されているフリップフロップのセルを割り当てる。
【００６７】
［変形例１］
図３２は、本実施の形態におけるＨＤＬ合成ルールの変形例を示す図である。図２に示したＨＤＬ合成ツールとの相違点は、複数のマイクロプロセッサ（プロセッサＡ、プロセッサＢ）に対応して、プロセッサハードウエアファイルＰ４（Ａ）、Ｐ４（Ｂ）、対応テーブルＴＢ１２（Ａ）、ＴＢ１２（Ｂ）を有することである。このようにすることにより、それぞれのマイクロプロセッサに対応するＡＬＬプログラムＰ２（Ａ），Ｐ２（Ｂ）に対しても、ＨＤＬ合成することができる。複数のマイクロプロセッサに対応させるためには、それぞれに対応するプロセッサハードウエアファイルと対応テーブルを作成する必要があるが、一度作成すれば、その後繰り返し使用することができる。
【００６８】
また、別の変形例として、仮想的なマイクロプロセッサを開発し、その仮想的なマイクロプロセッサに対応するコンパイラを開発することで、既存の複数のマイクロプロセッサに対応させて複数のハードウエアファイルや対応テーブルを作成する必要をなくすことができる。つまり、仮想的なマイクロプロセッサを開発することで、それに対応するハードウエアファイルと対応テーブルだけをあらかじめ作成しておけば、ＨＬＬ記述のプログラムが与えられた時、その仮想的なマイクロプロセッサ用のコンパイラでＡＬＬプログラムを作成し、ＨＤＬ合成することができる。上記のような仮想的なマイクロプロセッサは世の中に存在しないので、本実施の形態のＨＤＬ合成ツールが、そのコンパイラも有しておき、ＨＬＬ記述のプログラムをコンパイルする機能を備えておくことが必要になる。
【００６９】
［変形例２］
上記実施の形態では、ＨＤＬ合成手順Ｐ１０において、あらかじめ作成されているプロセッサハードウエアファイルＰ４をそのまま出力している。しかしながら、例えば、小規模なＨＬＬプログラムの場合は、全てのハードウエアコンポーネントを使用することがなく、また、全てのＡＬＬ命令コードを利用したＡＬＬプログラムに変換されることもない。あるいは、大規模なＨＬＬプログラムであっても、特定の機能のみしか備えていない場合も、全てのハードウエアコンポーネントを使用することがなく、全てのＡＬＬ命令コードを利用したＡＬＬプログラムに変換されることもない。そのような場合は、使用しないハードウエアコンポーネントを含んだプロセッサハードウエアファイルＰ４を出力すると、そのファイルが不必要に大規模になり、集積回路装置が不必要に大規模化され、動作速度も遅くなる可能性がある。
【００７０】
ＨＤＬファイルからネットリストに変換する論理合成工程において、このように使用しないハードウエアコンポーネントに対応するＨＤＬ記述を削除して最適化することも提案されているが、一旦複雑なＨＤＬ記述にされた状態で、不必要な記述を削除することは容易ではない。
【００７１】
そこで、変形例２では、ＡＬＬプログラムに含まれるＡＬＬ命令コードをチェックし、所定のハードウエアコンポーネントの使用に対応するＡＬＬ命令コードや、ＡＬＬ命令コードとレジスタファイルアドレスの組合せが存在しないかどうかをチェックする。そして、もしそのようなＡＬＬ命令コードや、ＡＬＬ命令コードとレジスタファイルアドレスの組合せが存在しない場合は、対応するハードウエアコンポーネントに対応するＨＤＬ記述を、プロセッサハードウエアファイルＰ４から削除し、その削除により最適化されたプロセッサハードウエアファイルを出力する。
【００７２】
更に、上記実施の形態では、ＨＤＬ合成手順Ｐ１０において、各ＡＬＬ命令コードを対応テーブルＴＢ１２を参照してそれぞれ対応するＨＤＬモジュールに変換している。しかしながら、複数の一連のＡＬＬ命令コードの組合せにおいて、各命令コードで無駄な処理が行われることがある。例えば、ある演算結果をＷレジスタに格納するＡＬＬ命令コードと、そのＷレジスタのデータをデータメモリのある番地に格納するＡＬＬ命令コードとが連続する場合は、Ｗレジスタへの書き込みと読み出しの処理は無駄な処理である。したがって、それらの命令コードが連続する場合は、Ｗレジスタへの書き込みと読み出しを省略することで、より最適化することができる。
【００７３】
そこで、変形例２では、比較的多く頻出する連続するＡＬＬ命令コードの組合せからなる複合命令コードに対して、最適化されたＨＤＬモジュールを、対応テーブルＴＢ１２に追加する。そして、ＡＬＬプログラムをＨＤＬ記述のプロセッサソフトウエアファイルに変換する時は、複合命令コードに対しては、最適化されている複合命令に対応するＨＤＬモジュールに変換し、複合命令コードでない場合は、各ＡＬＬ命令コードを対応するＨＤＬモジュールに変換する。また、複合命令コードに対しては、優先的に対応するＨＤＬモジュールに変換することが望ましい。
【００７４】
上記の処理を行うことで、変形例２によれば、変換後のＨＤＬ記述ファイルであるプロセッサハードウエアファイルＰ３とプロセッサソフトウエアファイルＰ４のファイル規模を小さくし、集積回路規模を抑制し、処理スピードを高めることができる。以下、例を示して説明する。
【００７５】
図３３は、変形例２におけるＨＤＬ合成手順Ｐ１０のフローチャート図である。図５と同じ工程には同じ番号を与えている。ＡＬＬプログラムの読み込み工程Ｓ２０の次に、読み込んだＡＬＬプログラムを解析して、使用しないハードウエアコンポーネントを検出する。例えば、入出力ポートは、図９に示した特殊レジスタに接続されているので、ＡＬＬ命令コードのレジスタファイルアドレス欄に特殊レジスタに対応するアドレスがあるか否かをチェックすることで、使用されない特殊レジスタと入出力ポートとを検出することができる。レジスタ・ワイヤー宣言については、ＡＬＬ命令コードから使用予定の演算器を検出することができ、その結果演算器の出力となるワイヤーが判明するので、不使用のワイヤーを検出することができる。同様に、各演算器の設定に関しても使用しない演算器を検出することができる。データメモリの設定については、ＡＬＬ命令コードのレジスタファイルアドレス欄をチェックすることで、使用されないデータメモリ領域を特定することができる。
【００７６】
また、割り込みやタイマー回路については、ＡＬＬ命令コードのＢＳＦ（レジスタファイルの所定ビットを「０」にする命令）のレジスタファイルアドレスが「０ｂ．３」「０ｂ．４」が割り込み発生に対応し、「０ｂ．５」がタイマー回路に対応する。つまり、レジスタファイルアドレス「０ｂ」は、図９のメモリアドレスマップに示したように、割り込みレジスタに対応する。従って、このようなＡＬＬ命令コード「ＢＳＦ  ０ｂ．３」「ＢＳＦ  ０ｂ．４」「ＢＳＦ  ０ｂ．５」が存在しない場合は、割り込み回路、タイマー回路が必要ないことが判明する。そして、割り込み回路が使用されなければ、リセット時の動作定義も不要になる。
【００７７】
上記のように、ＡＬＬ命令コードをチェックすることで、使用しないハードウエアコンポーネントを検出することができるので、その検出した不使用のハードウエアコンポーネントのＨＤＬ記述を削除して、プロセッサハードウエアファイルＰ４を出力する（Ｓ２２Ｂ）。これにより、プロセッサハードウエアファイルＰ４の記述量を減らすことができる。
【００７８】
更に、図３３のフローチャートによれば、プロセッサソフトウエアファイルＰ４を生成するためのＡＬＬ命令コードからＨＤＬモジュールへの変換において、アドレスｉ番地のＡＬＬプログラムが複合命令か否かがチェックされる（Ｓ２７）。そして、複合命令に該当する場合は、それに対応するＨＤＬモジュールのファイルが出力され（Ｓ２９）、複合命令に該当しない場合は、図５と同様に各ＡＬＬ命令コードに対応するＨＤＬモジュールのファイルが出力される（Ｓ２８）。それ以外の処理は、図５と同じである。
【００７９】
図３４は、複合命令の一例を示す図である。この例は、ＡＬＬ命令コードmovlw（あるデータをレジスタw_regに格納する命令）とmovwf（レジスタw_regのデータをデータメモリのある番地に格納する命令）とからなる複合命令５００である。この２つの命令が連続する場合、あるデータをレジスタw_regに格納し、その格納したデータをデータメモリのある番地に格納する処理になるので、データを一旦レジスタw_regに格納する処理が無駄になっている。
【００８０】
図３４中、各命令movlwとmovwfをそれぞれ対応テーブルＴＢ１２のＨＤＬモジュールに変換した例が、ＨＤＬ記述５０２に示されている。前述のとおり、この命令が連続すると、プログラムアドレス「０００５」の時に、あるデータ「３０」をレジスタw_regに格納し、プログラムカウンタレジスタpc_regをインクリメントし、プログラムアドレス「０００６」の時に、レジスタw_reg内のデータをデータメモリ２０番地に格納し、プログラムカウンタをインクリメントすることになる。動作完了には２クロックを要している。
【００８１】
一方、図３４中、複合命令movlw、movwfに対して最適化したＨＤＬモジュール５０４が示されている。これによれば、プログラムカウンタ「０００５」の時に、あるデータ「３０」がデータメモリ２０番地に格納し、プログラムカウンタを２つインクリメントしている。つまり、レジスタw_regへの格納が省略され、プログラムカウンタ「０００６」の判断が削除されている。その結果、ＨＤＬモジュールの記述量が減り、１クロックで動作完了している。
【００８２】
図３５、図３６は、別の複合命令を示す図である。この複合命令は、ＡＬＬ命令コードbtfss（データメモリのある番地のあるビットが１なら次の命令をスキップする命令）、goto（あるプログラムアドレスにジャンプする命令）の組合せである。図３５中のＡＬＬ命令コード列５０６では、命令コードbtfss 30h,3（データメモリ３０番地の３ビット目が１なら次の命令をスキップ）と、命令コードgoto 0010（プログラムアドレス0010にジャンプ）と、命令コードgoto 0025（プログラムアドレス0025にジャンプ）とが連続している。従って、命令コードbtfssの結果に応じて、次の命令をジャンプまたは次の命令の実行を行うことなく、プログラムアドレス0010または0025にジャンプすれば、より効率的な処理になる。
【００８３】
図３５中のＨＤＬ記述ファイル５０８は、各命令コードをそれぞれ対応するＨＤＬモジュールに変換した例である。命令コードbtfssでは、プログラムカウンタ「０００５」の時に、データメモリ３０番地のデータをレジスタin_regに格納し、マスクビット「8'b11110111」をマスクレジスタmask_regに格納し、それらレジスタのOR値の出力ノードbsfout_node「8'b11111111」の場合は、データメモリ３０番地のデータの３ビット目が「１」であったことになるので、プログラムカウンタを＋２し、それ以外ならプログラムカウンタを＋１する。そして、命令コードgotoでは、それぞれのジャンプ先アドレスをプログラムカウンタに格納する。このＨＤＬ記述ファイル５０８によれば、動作完了に３クロックを要し、記述量も多い。
【００８４】
それに対して、図３６には、複合命令btfss,goto,gotoに対して最適化されたＨＤＬモジュール５１０が示されている。これによれば、プログラムカウンタ「０００５」の時に、１クロック目の動作はＨＤＬ記述ファイル５０８と同じであるが、２クロック目では、演算結果ノードbsfout_nodeに応じて、プログラムカウンタを「００２５」にするか「００１０」にするかの処理が行われて完了している。つまり、２クロックで動作が完了し、その記述量もＨＤＬ記述ファイル５０８より大幅に減少している。
【００８５】
上記のように複数のＡＬＬ命令コードからなる複合命令に対して、最適化されたＨＤＬモジュールを対応テーブルＴＢ１２に追加登録し、コンパイルされたＡＬＬプログラム中に当該追加登録された複合命令が存在する場合は、それに対応するＨＤＬモジュールに優先的に変換する。登録された複合命令に該当しないＡＬＬ命令に対しては、従前通りに対応するＨＤＬモジュールに変換すれば良い。このように複合命令を優先して最適化されたＨＤＬモジュールに変換することで、全体のＨＤＬ記述ファイルを縮小することができ、動作に必要なクロック数を減らすことができる。
【００８６】
マイクロプロセッサの場合は、一般論として、ＡＬＬ命令の数を増やすことは、命令メモリや命令デコーダの回路規模が増大する。例えば、使用頻度の高い複合命令をマクロ命令などで置き換える場合である。そのため、マイクロプロセッサでは、ＡＬＬ命令の数をむやみに増やすことは好ましくない。しかし、本実施の形態では、最終的な集積回路装置は命令メモリや命令デコーダを有しないので、上記の問題はない。つまり、ＨＤＬ合成手順の処理の負担が増大しない限りでは、複合命令の登録をできるだけ多くして、より最適化されたＨＤＬモジュールへの変換を可能にすることが望ましい。
【００８７】
本変形例２によれば、ＨＤＬ記述されたプロセッサハードウエアファイルＰ３からは、使用されないハードウエアコンポーネントに対応するＨＤＬ記述が削除され、ＨＤＬ記述されたプロセッサソフトウエアファイルＰ４では、複合命令に対しては最適化されたＨＤＬモジュールに変換されているので、その記述数が減少し、使用クロック数も減少している。そして、これらの減少に必要な処理は、ＨＤＬ合成手順Ｐ１０の段階で、ＡＬＬプログラムの命令コードを解析することにより行われる。したがって、一旦ＨＤＬ記述に変換されたファイルＰ３，Ｐ４を解析して最適化する従来の論理合成処理よりも、解析処理が簡単で且つ効率的である。最終的に生成される集積回路装置についていえば、図６の回路において、プロセッサハードウエアファイルＰ３の最適化により制御回路ユニット３０以外の回路構成が簡単化され、プロセッサソフトウエアファイルＰ４の最適化により制御回路ユニット３０の回路構成が簡単化されることになる。
【００８８】
以上のとおり、本実施の形態によれば、Ｃ言語などのＨＬＬ記述されたプログラムから、自動的にＨＤＬ記述のハードウエア設計ファイルを作成することができ、専用のＬＳＩの設計効率を高めることができる。また、ＨＬＬ記述のプログラムとＡＬＬ記述のプログラムとの間の検証は不要であり、ＡＬＬ記述プログラムとＨＤＬ記述のハードウエアとの間の抽象度も同じであり、両者の間の検証も不要であり、実用性の高いツールである。
【図面の簡単な説明】
【００８９】
【図１】本実施の形態における集積回路の設計工程を示すフローチャート図である。
【図２】本実施の形態におけるＨＤＬ合成ツールの構成図である。
【図３】マイクロプロセッサの一般的構成例を示す図である。
【図４】本実施の形態において、前述のプロセッサハードウエアファイルＰ４内にＨＤＬ記述されるハードウエアコンポーネントの一例を示す図である。
【図５】本実施の形態におけるＨＤＬ合成手順を示すフローチャート図である。
【図６】最終的に生成されるＬＳＩの構造図である。
【図７】プロセッサハードウエアファイルP4の一例を示す図である。
【図８】プロセッサハードウエアファイルP4の一例を示す図である。
【図９】プロセッサハードウエアファイルP4の一例を示す図である。
【図１０】プロセッサハードウエアファイルP4の一例を示す図である。
【図１１】プロセッサハードウエアファイルP4の一例を示す図である。
【図１２】プロセッサハードウエアファイルP4の一例を示す図である。
【図１３】プロセッサハードウエアファイルP4の一例を示す図である。
【図１４】プロセッサハードウエアファイルP4の一例を示す図である。
【図１５】対応テーブルTB12の具体例を示す図である。
【図１６】対応テーブルTB12の具体例を示す図である。
【図１７】対応テーブルTB12の具体例を示す図である。
【図１８】対応テーブルTB12の具体例を示す図である。
【図１９】対応テーブルTB12の具体例を示す図である。
【図２０】対応テーブルTB12の具体例を示す図である。
【図２１】対応テーブルTB12の具体例を示す図である。
【図２２】対応テーブルTB12の具体例を示す図である。
【図２３】対応テーブルTB12の具体例を示す図である。
【図２４】ＨＬＬとしてＣ言語で記述された乗剰余算のプログラムＰ１を示す図である。
【図２５】図２４のC言語をコンパイルしたＡＬＬプログラムの例を示す図である。
【図２６】図２４のC言語をコンパイルしたＡＬＬプログラムの例を示す図である。
【図２７】図２４のC言語をコンパイルしたＡＬＬプログラムの例を示す図である。
【図２８】図２４のC言語をコンパイルしたＡＬＬプログラムの例を示す図である。
【図２９】図２４のC言語をコンパイルしたＡＬＬプログラムの例を示す図である。
【図３０】図２５〜２９に示されたＡＬＬプログラムＰ２をニーモニックコード（機械語コード）に変換した例を示す図である。
【図３１】図３０に示したＡＬＬプログラムＰ２のニーモニックコードをＨＤＬ合成ツールに与えた結果合成されたＨＤＬ記述ファイルの一例を示す図である。
【図３２】本実施の形態におけるＨＤＬ合成ルールの変形例を示す図である。
【図３３】変形例２におけるＨＤＬ合成手順Ｐ１０のフローチャート図である。
【図３４】複合命令の一例を示す図である。
【図３５】複合命令の別の例を示す図である。
【図３６】複合命令の一例を示す図である。
【符号の説明】
【００９０】
Ｐ１：ＨＬＬ記述プログラム（Ｃ言語）、Ｐ２：ＡＬＬ記述プログラム
Ｐ３：プロセッサソフトウエアファイル（ＨＤＬ）
Ｐ４：プロセッサハードウエアファイル（ＨＤＬ）
Ｐ１０：ＨＤＬ合成ツール                                                                               
【図１】
2006079226.tif 000003
【図２】
2006079226.tif 000004
【図３】
2006079226.tif 000005
【図４】
2006079226.tif 000006
【図５】
2006079226.tif 000007
【図６】
2006079226.tif 000008
【図７】
2006079226.tif 000009
【図８】
2006079226.tif 000010
【図９】
2006079226.tif 000011
【図１０】
2006079226.tif 000012
【図１１】
2006079226.tif 000013
【図１２】
2006079226.tif 000014
【図１３】
2006079226.tif 000015
【図１４】
2006079226.tif 000016
【図１５】
2006079226.tif 000017
【図１６】
2006079226.tif 000018
【図１７】
2006079226.tif 000019
【図１８】
2006079226.tif 000020
【図１９】
2006079226.tif 000021
【図２０】
2006079226.tif 000022
【図２１】
2006079226.tif 000023
【図２２】
2006079226.tif 000024
【図２３】
2006079226.tif 000025
【図２４】
2006079226.tif 000026
【図２５】
2006079226.tif 000027
【図２６】
2006079226.tif 000028
【図２７】
2006079226.tif 000029
【図２８】
2006079226.tif 000030
【図２９】
2006079226.tif 000031
【図３０】
2006079226.tif 000032
【図３１】
2006079226.tif 000033
【図３２】
2006079226.tif 000034
【図３３】
2006079226.tif 000035
【図３４】
2006079226.tif 000036
【図３５】
2006079226.tif 000037
【図３６】
2006079226.tif 000038
【手続補正書】
【提出日】平成17年8月5日(2005.8.5)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
少なくとも入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタと、プログラムメモリと、プログラムデコーダとを有するマイクロプロセッサの、前記プログラムメモリ及びプログラムデコーダを除く前記入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタとを含むハードウエアコンポーネントを、ハードウエア記述言語で記述したプロセッサハードウエアファイルと、
アセンブリレベル合成プログラムとを有し、
前記アセンブリレベル合成プログラムは、
高位レベル言語で記述された高位レベル言語プログラムを当該マイクロプロセッサに対応するコンパイラにより変換した前記マイクロプロセッサが実行可能なアセンブリレベル言語プログラムの命令コードを、解析する手順と、
前記解析したアセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する手順と、
前記プロセッサハードウエアファイルと前記プロセッサソフトウエアファイルとを出力する手順とをコンピュータに実行させることを特徴とするハードウエア記述言語合成プログラム。
【請求項２】
請求項１において、
更に、複数の前記命令コードにそれぞれ対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルを有し、
前記変換手順は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成し、
当該プロセッサソフトウエアファイルは、前記アセンブリレベル言語プログラムの命令コードに対応する前記プロセッサソフトウエアモジュールを有することを特徴とするハードウエア記述言語合成プログラム。
【請求項３】
請求項２において、
前記プロセッサソフトウエアモジュールは、前記プログラムカウンタのカウント値が前記アセンブリレベル言語プログラムのプログラムアドレスと一致する時に、当該プログラムアドレスの命令コードに対応する所定の動作を行う制御回路の記述、を有することを特徴とするハードウエア記述言語合成プログラム。
【請求項４】
請求項１において、
更に、複数の前記命令コードそれぞれに対応して、及び複数の一連の命令コードからなる複合命令コードに対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルを有し、
前記変換手順は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コード及び複合命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成し、
当該プロセッサソフトウエアファイルは、前記アセンブリレベル言語プログラムの命令コード及び複合命令コードに対応する前記プロセッサソフトウエアモジュールを有することを特徴とするハードウエア記述言語合成プログラム。
【請求項５】
請求項４において、
前記変換手順は、前記複合命令コードを個別の命令コードに優先して、当該複合命令コードに対応するプロセッサソフトウエアモジュールに変換することを特徴とするハードウエア記述言語合成プログラム。
【請求項６】
請求項１において、
前記アセンブリレベル合成プログラムは、更に、
前記アセンブリレベル言語プログラムの命令コードを解析して、前記プロセッサハードウエアファイルから、使用されないハードウエアコンポーネントに対応するハードウエア記述言語による記述を削除したプロセッサハードウエアファイルを作成する手順を有し、
前記出力手順は、当該削除されたプロセッサハードウエアファイルを出力することを特徴とするハードウエア記述言語合成プログラム。
【請求項７】
請求項１において、
前記プロセッサソフトウエアファイルは、前記プログラムカウンタのカウントが前記アセンブリレベル言語プログラムのプログラムアドレスと一致する時に、当該プログラムアドレスの命令コードに対応する所定の動作を行う制御回路の記述、を有することを特徴とするハードウエア記述言語合成プログラム。
【請求項８】
請求項２または４において、
前記プロセッサハードウエアファイルと前記対応テーブルとを、複数のマイクロプロセッサに対応して、複数組有することを特徴とするハードウエア記述言語合成プログラム。
【請求項９】
請求項２または４において、
前記プロセッサハードウエアファイルと前記対応テーブルとを、仮想的マイクロプロセッサに対応して有すると共に、
更に、前記仮想マイクロプロセッサに対応して前記高位レベル言語プログラムを前記アセンブリレベル言語プログラムに変換する仮想コンパイラプログラムを有することを特徴とするハードウエア記述言語合成プログラム。
【請求項１０】
少なくとも入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタと、プログラムメモリと、プログラムデコーダとを有するマイクロプロセッサの、前記プログラムメモリとプログラムデコーダを除く前記入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタとを含むハードウエアコンポーネントを、ハードウエア記述言語で記述したプロセッサハードウエアファイルがあらかじめ生成され、集積回路をハードウエア記述言語で記述したハードウエア記述言語ファイルを生成する集積回路の設計方法において、
高位レベル言語で記述された高位レベル言語プログラムを、当該マイクロプロセッサに対応するコンパイラにより前記マイクロプロセッサが実行可能なアセンブリレベル言語プログラムの命令コードに変換する工程と、
前記アセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する工程と、
前記プロセッサハードウエアファイルと前記プロセッサソフトウエアファイルを、前記ハードウエア記述言語ファイルとして出力する工程とを有する集積回路の設計方法。
【請求項１１】
請求項１０において、
更に、前記ハードウエア記述言語ファイルを、論理合成ツールにより、前記集積回路のネットリストに変換する工程を有することを特徴とする集積回路の設計方法。
【請求項１２】
請求項１０において、
更に、複数の前記命令コードにそれぞれ対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルがあらかじめ生成され、
前記変換工程は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成する工程を含み、
当該プロセッサソフトウエアファイルは、前記アセンブリレベル言語プログラムの命令コードに対応する前記プロセッサソフトウエアモジュールを複数有することを特徴とする集積回路の設計方法。
【請求項１３】
高位レベル言語で記述された高位レベル言語プログラムを、所定のマイクロプロセッサに対応するコンパイラにより変換した前記マイクロプロセッサが実行可能なアセンブリレベル言語プログラムの命令コードを、解析する手順と、
前記アセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する手順と、
前記プロセッサソフトウエアファイルを、前記マイクロプロセッサの少なくともプログラムメモリとプログラムデコーダを除くハードウエアコンポーネントをハードウエア記述言語で記述したプロセッサハードウエアファイルと共に、出力する手順とをコンピュータに実行させることを特徴とするハードウエア記述言語合成プログラム。
【請求項１４】
請求項１３において、
更に、複数の前記命令コードにそれぞれ対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルを有し、
前記変換手順は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成することを特徴とするハードウエア記述言語合成プログラム。
【請求項１５】
請求項１３において、
更に、複数の前記命令コードそれぞれに対応して、及び複数の一連の命令コードからなる複合命令コードに対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルを有し、
前記変換手順は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コード及び複合命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成することを特徴とするハードウエア記述言語合成プログラム。
【請求項１６】
請求項１５において、
前記変換手順は、前記複合命令コードを個別の命令コードに優先して、当該複合命令コードに対応するプロセッサソフトウエアモジュールに変換することを特徴とするハードウエア記述言語合成プログラム。
【請求項１７】
請求項１３において、
前記アセンブリレベル合成プログラムは、更に、
前記アセンブリレベル言語プログラムの命令コードを解析して、前記プロセッサハードウエアファイルから、使用されないハードウエアコンポーネントに対応するハードウエア記述言語による記述を削除したプロセッサハードウエアファイルを作成する手順を有し、
前記出力手順は、当該削除されたプロセッサハードウエアファイルを出力することを特徴とするハードウエア記述言語合成プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００７
【補正方法】変更
【補正の内容】
【０００７】
上記目的を達成するために、本発明の第１の側面によれば、（１）マイクロプロセッサのプログラムメモリとプログラムデコーダなどを除くハードウエアコンポーネントを、ハードウエア記述言語で記述したハードウエアファイルと、（２）高位レベル言語プログラムをコンパイルして得られたアセンブリレベル言語プログラムを解析して、その命令コードをハードウエアコンポーネントに対応させてハードウエア記述言語で記述したソフトウエアファイルに変換するアセンブリレベル合成プログラムとを有するハードウエア記述言語合成ツールである。そして、このツールは、ハードウエアファイルとソフトウエアファイルとを、ハードウエア設計ファイルとして出力する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
上記の目的を達成するために、本発明の第２の側面によれば、少なくとも入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタと、プログラムメモリと、プログラムデコーダとを有するマイクロプロセッサの、前記プログラムメモリ及びプログラムデコーダを除く前記入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタとを含むハードウエアコンポーネントを、ハードウエア記述言語で記述したプロセッサハードウエアファイルと、
アセンブリレベル合成プログラムとを有し、
前記アセンブリレベル合成プログラムは、
高位レベル言語で記述された高位レベル言語プログラムを当該マイクロプロセッサに対応するコンパイラにより変換した前記マイクロプロセッサが実行可能なアセンブリレベル言語プログラムの命令コードを、解析する手順と、
前記解析したアセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する手順と、
前記プロセッサハードウエアファイルと前記プロセッサソフトウエアファイルとを出力する手順とをコンピュータに実行させることを特徴とするハードウエア記述言語合成プログラムである。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】変更
【補正の内容】
【００１２】
更に、上記目的を達成するために、本発明の第３の側面によれば、少なくとも入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタと、プログラムメモリと、プログラムデコーダとを有するマイクロプロセッサの、前記プログラムメモリとプログラムデコーダを除く前記入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタとを含むハードウエアコンポーネントを、ハードウエア記述言語で記述したプロセッサハードウエアファイルがあらかじめ生成され、集積回路をハードウエア記述言語で記述したハードウエア記述言語ファイルを生成する集積回路の設計方法において、
高位レベル言語で記述された高位レベル言語プログラムを、当該マイクロプロセッサに対応するコンパイラにより前記マイクロプロセッサが実行可能なアセンブリレベル言語プログラムの命令コードに変換する工程と、
前記アセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する工程と、
前記プロセッサハードウエアファイルと前記プロセッサソフトウエアファイルを、前記ハードウエア記述言語ファイルとして出力する工程とを有することを特徴とする。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１３
【補正方法】変更
【補正の内容】
【００１３】
上記発明の側面によれば、高位レベル言語プログラムを、コンパイラによりマイクロプロセッサが実行可能なアセンブリレベル言語プログラムの命令コードに変換し、そのアセンブリレベル言語プログラムの命令コードをマイクロプロセッサのハードウエアコンポーネントに対応させてハードウエア記述言語で記述したプロセッサソフトウエアファイルに変換する。アセンブリレベル言語プログラムの命令コードは、例えばあるレジスタにある定数を加算してあるレジスタに格納するというように、マイクロプロセッサのハードウエアコンポーネントに対応しているので、かかるアセンブリレベル言語プログラムであれば、１対１でハードウエア記述言語で記述したハードウエア設計ファイルに置き換えることができ、従来例のような検証やシミュレーションを行う必要がなく、実用的である。