TOP > 国内特許検索 > ハードウエア記述言語合成ツール及びそれを利用した集積回路の設計方法 > 明細書

明細書 :ハードウエア記述言語合成ツール及びそれを利用した集積回路の設計方法

発行国 日本国特許庁(JP)
公報種別 特許公報(B1)
特許番号 特許第3735723号 (P3735723)
登録日 平成17年11月4日(2005.11.4)
発行日 平成18年1月18日(2006.1.18)
発明の名称または考案の名称 ハードウエア記述言語合成ツール及びそれを利用した集積回路の設計方法
国際特許分類 G06F  17/50        (2006.01)
FI G06F 17/50 654M
G06F 17/50 654A
請求項の数または発明の数 17
全頁数 31
出願番号 特願2004-260466 (P2004-260466)
出願日 平成16年9月8日(2004.9.8)
審査請求日 平成17年2月3日(2005.2.3)
特許権者または実用新案権者 【識別番号】504160781
【氏名又は名称】国立大学法人金沢大学
発明者または考案者 【氏名】北川 章夫
【氏名】尾形 秀範
【氏名】秋田 純一
早期審査対象出願または早期審理対象出願 早期審査対象出願
個別代理人の代理人 【識別番号】100094525、【弁理士】、【氏名又は名称】土井 健二
【識別番号】100094514、【弁理士】、【氏名又は名称】林 恒徳
審査官 【審査官】田中 幸雄
参考文献・文献 M. Wazlowski et al.,PRISM-II Compiler and Architecture,Proceedings of 1993 IEEE Workshop on FPGAs for Custom Computing Machines,米国,IEEE,1993年 4月 5日,p9-16
Xiaoyong Tang et al.,Compiler Optimizations in the PACT HDL Behavioral Synthesis Tool for ASICs and FPGAs,Proceedings of 2003 IEEE International SOC Conference,米国,IEEE,2003年 9月17日,p189-192
調査した分野 G06F 17/50
IEEE Xplore
要約 【課題】C言語などの高位レベル言語で記述されたプログラムから自動的にハードウエア記述言語で記述されたハードウエア設計ファイルを形成することができるハードウエア記述言語合成ツール及びそれを利用した集積回路の設計方法を提供する。
【解決手段】 マイクロプロセッサのプログラムメモリとプログラムコードなどを除くハードウエアコンポーネントを、ハードウエア記述言語で記述したハードウエアファイルと、高級レベル言語プログラムをコンパイルして得られたアセンブリレベル言語プログラムを解析して、その命令コードをハードウエアコンポーネントに対応させてハードエウア記述言語で記述したソフトウエアファイルに変換するアセンブリレベル合成プログラムとを有するハードウエア記述言語合成ツールである。そして、このツールは、ハードウエアファイルとソフトウエアファイルとを、ハードウエア設計ファイルとして出力する。
【選択図】 図1
特許請求の範囲 【請求項1】
少なくとも入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタと、プログラムメモリと、プログラムデコーダとを有するマイクロプロセッサの、前記プログラムメモリ及びプログラムデコーダを除く前記入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタとを含むハードウエアコンポーネントを、ハードウエア記述言語で記述したプロセッサハードウエアファイルと、
アセンブリレベル合成プログラムとを有し、
前記アセンブリレベル合成プログラムは、
高位レベル言語で記述された高位レベル言語プログラムを当該マイクロプロセッサに対応するコンパイラにより変換した前記マイクロプロセッサが実行可能なアセンブリレベル言語プログラムの命令コードを、解析する手順と、
前記解析したアセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する手順と、
前記プロセッサハードウエアファイルと前記プロセッサソフトウエアファイルとを出力する手順とをコンピュータに実行させることを特徴とするハードウエア記述言語合成プログラム
【請求項2】
請求項1において、
更に、複数の前記命令コードにそれぞれ対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルを有し、
前記変換手順は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成し、
当該プロセッサソフトウエアファイルは、前記アセンブリレベル言語プログラムの命令コードに対応する前記プロセッサソフトウエアモジュールを有することを特徴とするハードウエア記述言語合成プログラム
【請求項3】
請求項2において、
前記プロセッサソフトウエアモジュールは、前記プログラムカウンタのカウント値が前記アセンブリレベル言語プログラムのプログラムアドレスと一致する時に、当該プログラムアドレスの命令コードに対応する所定の動作を行う制御回路の記述、を有することを特徴とするハードウエア記述言語合成プログラム
【請求項4】
請求項1において、
更に、複数の前記命令コードそれぞれに対応して、及び複数の一連の命令コードからなる複合命令コードに対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルを有し、
前記変換手順は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コード及び複合命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成し、
当該プロセッサソフトウエアファイルは、前記アセンブリレベル言語プログラムの命令コード及び複合命令コードに対応する前記プロセッサソフトウエアモジュールを有することを特徴とするハードウエア記述言語合成プログラム
【請求項5】
請求項4において、
前記変換手順は、前記複合命令コードを個別の命令コードに優先して、当該複合命令コードに対応するプロセッサソフトウエアモジュールに変換することを特徴とするハードウエア記述言語合成プログラム
【請求項6】
請求項1において、
前記アセンブリレベル合成プログラムは、更に、
前記アセンブリレベル言語プログラムの命令コードを解析して、前記プロセッサハードウエアファイルから、使用されないハードウエアコンポーネントに対応するハードウエア記述言語による記述を削除したプロセッサハードウエアファイルを作成する手順を有し、
前記出力手順は、当該削除されたプロセッサハードウエアファイルを出力することを特徴とするハードウエア記述言語合成プログラム
【請求項7】
請求項1において、
前記プロセッサソフトウエアファイルは、前記プログラムカウンタのカウントが前記アセンブリレベル言語プログラムのプログラムアドレスと一致する時に、当該プログラムアドレスの命令コードに対応する所定の動作を行う制御回路の記述、を有することを特徴とするハードウエア記述言語合成プログラム
【請求項8】
請求項2または4において、
前記プロセッサハードウエアファイルと前記対応テーブルとを、複数のマイクロプロセッサに対応して、複数組有することを特徴とするハードウエア記述言語合成プログラム
【請求項9】
請求項2または4において、
前記プロセッサハードウエアファイルと前記対応テーブルとを、仮想的マイクロプロセッサに対応して有すると共に、
更に、前記仮想マイクロプロセッサに対応して前記高位レベル言語プログラムを前記アセンブリレベル言語プログラムに変換する仮想コンパイラプログラムを有することを特徴とするハードウエア記述言語合成プログラム
【請求項10】
少なくとも入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタと、プログラムメモリと、プログラムデコーダとを有するマイクロプロセッサの、前記プログラムメモリとプログラムデコーダを除く前記入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタとを含むハードウエアコンポーネントを、ハードウエア記述言語で記述したプロセッサハードウエアファイルがあらかじめ生成され、集積回路をハードウエア記述言語で記述したハードウエア記述言語ファイルを生成する集積回路の設計方法において、
高位レベル言語で記述された高位レベル言語プログラムを、当該マイクロプロセッサに対応するコンパイラにより前記マイクロプロセッサが実行可能なアセンブリレベル言語プログラムの命令コードに変換する工程と、
前記アセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する工程と、
前記プロセッサハードウエアファイルと前記プロセッサソフトウエアファイルを、前記ハードウエア記述言語ファイルとして出力する工程とを有する集積回路の設計方法。
【請求項11】
請求項10において、
更に、前記ハードウエア記述言語ファイルを、論理合成ツールにより、前記集積回路のネットリストに変換する工程を有することを特徴とする集積回路の設計方法。
【請求項12】
請求項10において、
更に、複数の前記命令コードにそれぞれ対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルがあらかじめ生成され、
前記変換工程は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成する工程を含み、
当該プロセッサソフトウエアファイルは、前記アセンブリレベル言語プログラムの命令コードに対応する前記プロセッサソフトウエアモジュールを複数有することを特徴とする集積回路の設計方法。
【請求項13】
高位レベル言語で記述された高位レベル言語プログラムを、所定のマイクロプロセッサに対応するコンパイラにより変換した前記マイクロプロセッサが実行可能なアセンブリレベル言語プログラムの命令コードを、解析する手順と、
前記アセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する手順と、
前記プロセッサソフトウエアファイルを、前記マイクロプロセッサの少なくともプログラムメモリとプログラムデコーダを除くハードウエアコンポーネントをハードウエア記述言語で記述したプロセッサハードウエアファイルと共に、出力する手順とをコンピュータに実行させることを特徴とするハードウエア記述言語合成プログラム
【請求項14】
請求項13において、
更に、複数の前記命令コードにそれぞれ対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルを有し、
前記変換手順は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成することを特徴とするハードウエア記述言語合成プログラム
【請求項15】
請求項13において、
更に、複数の前記命令コードそれぞれに対応して、及び複数の一連の命令コードからなる複合命令コードに対応して、前記ハードウエア記述言語で記述された複数のプロセッサソフトウエアモジュールを有する対応テーブルを有し、
前記変換手順は、当該対応テーブルを参照して、前記アセンブリレベル言語プログラムの命令コード及び複合命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換して前記プロセッサソフトウエアファイルを生成することを特徴とするハードウエア記述言語合成プログラム
【請求項16】
請求項15において、
前記変換手順は、前記複合命令コードを個別の命令コードに優先して、当該複合命令コードに対応するプロセッサソフトウエアモジュールに変換することを特徴とするハードウエア記述言語合成プログラム
【請求項17】
請求項13において、
前記アセンブリレベル合成プログラムは、更に、
前記アセンブリレベル言語プログラムの命令コードを解析して、前記プロセッサハードウエアファイルから、使用されないハードウエアコンポーネントに対応するハードウエア記述言語による記述を削除したプロセッサハードウエアファイルを作成する手順を有し、
前記出力手順は、当該削除されたプロセッサハードウエアファイルを出力することを特徴とするハードウエア記述言語合成プログラム
発明の詳細な説明 【技術分野】
【0001】
本発明は、ハードウエア記述言語合成ツール及びそれを利用した集積回路の設計方法に関し、特に、高級レベル言語で記述された高級言語プログラムから集積回路設計用のハードウエア記述言語ファイルを自動的に生成することを可能にするハードウエア記述言語合成ツール及びそれを利用した集積回路の設計方法に関する。
【背景技術】
【0002】
半導体集積回路の設計において、近年、C言語をもとにしたハードウエア記述言語(Hardware Description Language:HDL)によりハードウエア回路を記述し、それを論理合成して集積回路のネットリストを作成し、集積回路を作成することが行われている。それに伴って、Verilog-HDLやVHDLなどの標準化されたHDLが普及してきており、このようなHDLにより記述されたハードウエア設計ファイルをネットリストに変換する論理合成ツールも開発され、実用化されている。
【0003】
ハードウエアを記述するHDLは、レジスタ・トランスファ・レベル(RTL:Register Transfer Level)でハードウエア回路を具体的に記述する独特の記述法が用いられており、ハードウエア回路の知識をもつハードウエア開発者によってハードウエア回路がHDL記述により開発されているのが現状である。一方、一般的なC言語などの高位レベル言語は、HDLにより記述されるハードウエア回路に比較するとより抽象的な記述になりがちであり、かかる抽象度の違いから、ソフトウエアツールによってC言語で記述されたプログラムからHDLで記述されたハードウエアに合成することは、一般的に困難である。
【0004】
一般的なC言語で記述されたアルゴリズム記述から、HDLによるレジスタ・トランスファ・レベル(RTレベル)の記述に変換することは一部で提案されている。例えば、特許文献1に示される通りである。この提案によれば、C言語で記述されたアルゴリズム記述を、機能C記述に変換し、更に、この機能C記述に時間の概念であるクロック記述を挿入して、RTレベルのC記述に変換する。

【特許文献1】特開平2003-16122号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかしながら、上記の特許文献1によれば、各変換の段階で必ずしも1対1に対応する変換が行われるわけでなく、変換の前後で記述の抽象度が異なるため、変換前と変換後とで論理的に等価であるか否かを数学的に検証したり、各段階で変換後の記述に対して機能シミュレーションを行ったりすることが必要になり、実用化には適切ではない。
【0006】
そこで、本発明の目的は、C言語などの高位レベル言語で記述されたプログラムから自動的にハードウエア記述言語で記述されたハードウエア設計ファイルを形成することができるハードウエア記述言語合成ツール(プログラム)及びそれを利用した集積回路の設計方法を提供することにある。
【課題を解決するための手段】
【0007】
上記目的を達成するために、本発明の第1の側面によれば、(1)マイクロプロセッサのプログラムメモリとプログラムデコーダなどを除くハードウエアコンポーネントを、ハードウエア記述言語で記述したハードウエアファイルと、(2)高位レベル言語プログラムをコンパイルして得られたアセンブリレベル言語プログラムを解析して、その命令コードをハードウエアコンポーネントに対応させてハードウエア記述言語で記述したソフトウエアファイルに変換するアセンブリレベル合成プログラムとを有するハードウエア記述言語合成ツールである。そして、このツールは、ハードウエアファイルとソフトウエアファイルとを、ハードウエア設計ファイルとして出力する。
【0008】
上記第1の側面において、好ましい実施例によれは、複数の前記命令コードにそれぞれ対応して、ハードウエア記述言語で記述された複数のソフトウエアモジュールを有する対応テーブルを有し、当該対応テーブルを参照して、アセンブリレベル言語プログラムの命令コードを、それぞれ対応するプロセッサソフトウエアモジュールに変換してソフトウエアファイルを生成する。
【0009】
更に、上記第1の側面において、好ましい実施例によれば、複数の一連の命令コードからなる複合命令コードに対応して、ハードウエア記述言語で記述されたソフトウエアモジュールを有する対応テーブルを有し、アセンブリレベル言語プログラム内の複合命令コードに対しては、それに対応するソフトウエアモジュールに優先的に変換してソフトウエアファイルを生成する。この複合命令に対応するソフトウエアモジュールは、複合命令を構成する個々の命令コードをそれぞれ対応するソフトウエアモジュールに変換した場合よりも、より最適化されより少ない記述量になっている。
【0010】
更に、上記の第1の側面において、好ましい実施例によれば、アセンブリレベル言語プログラムの命令コードを解析して、ハードウエアファイルから、使用されないハードウエアコンポーネントに対応するHDL記述を削除したハードウエアファイルを作成し、当該削除されたハードウエアファイルを出力する。アセンブリレベル言語プログラムの命令コードは比較的高級言語に近いので、その解析は、HDL記述された後のファイルの解析よりも容易に行うことができ、より効率的に使用されないハードウエアコンポーネントを削除することができる。
【0011】
上記の目的を達成するために、本発明の第2の側面によれば、少なくとも入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタと、プログラムメモリと、プログラムデコーダとを有するマイクロプロセッサの、前記プログラムメモリ及びプログラムデコーダを除く前記入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタとを含むハードウエアコンポーネントを、ハードウエア記述言語で記述したプロセッサハードウエアファイルと、
アセンブリレベル合成プログラムとを有し、
前記アセンブリレベル合成プログラムは、
高位レベル言語で記述された高位レベル言語プログラムを当該マイクロプロセッサに対応するコンパイラにより変換した前記マイクロプロセッサが実行可能なアセンブリレベル言語プログラムの命令コードを、解析する手順と、
前記解析したアセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する手順と、
前記プロセッサハードウエアファイルと前記プロセッサソフトウエアファイルとを出力する手順とをコンピュータに実行させることを特徴とするハードウエア記述言語合成プログラムである。
【0012】
更に、上記目的を達成するために、本発明の第3の側面によれば、少なくとも入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタと、プログラムメモリと、プログラムデコーダとを有するマイクロプロセッサの、前記プログラムメモリとプログラムデコーダを除く前記入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタとを含むハードウエアコンポーネントを、ハードウエア記述言語で記述したプロセッサハードウエアファイルがあらかじめ生成され、集積回路をハードウエア記述言語で記述したハードウエア記述言語ファイルを生成する集積回路の設計方法において、
高位レベル言語で記述された高位レベル言語プログラムを、当該マイクロプロセッサに対応するコンパイラにより前記マイクロプロセッサが実行可能なアセンブリレベル言語プログラムの命令コードに変換する工程と、
前記アセンブリレベル言語プログラムの命令コードを、前記プロセッサハードウエアファイルに含まれるハードウエアコンポーネントに対応させて前記ハードウエア記述言語で記述したプロセッサソフトウエアファイルに、変換する工程と、
前記プロセッサハードウエアファイルと前記プロセッサソフトウエアファイルを、前記ハードウエア記述言語ファイルとして出力する工程とを有することを特徴とする。
【発明の効果】
【0013】
上記発明の側面によれば、高位レベル言語プログラムを、コンパイラによりマイクロプロセッサが実行可能なアセンブリレベル言語プログラムの命令コードに変換し、そのアセンブリレベル言語プログラムの命令コードをマイクロプロセッサのハードウエアコンポーネントに対応させてハードウエア記述言語で記述したプロセッサソフトウエアファイルに変換する。アセンブリレベル言語プログラムの命令コードは、例えばあるレジスタにある定数を加算してあるレジスタに格納するというように、マイクロプロセッサのハードウエアコンポーネントに対応しているので、かかるアセンブリレベル言語プログラムであれば、1対1でハードウエア記述言語で記述したハードウエア設計ファイルに置き換えることができ、従来例のような検証やシミュレーションを行う必要がなく、実用的である。
【発明を実施するための最良の形態】
【0014】
以下、図面にしたがって本発明の実施の形態について説明する。但し、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【0015】
図1は、本実施の形態における集積回路の設計工程を示すフローチャート図である。本実施の形態では、所定のマイクロプロセッサで実行可能なC言語などの標準的な高級レベル言語(以下HLL:High Level Language)のプログラムP1を、そのマイクロプロセッサのコンパイラによるコンパイル工程(S10)により、アセンブリレベル言語プログラム(以下ALL:Assembly Level Language)P2に変換する。
【0016】
ALLプログラムP2の命令コードは、例えばあるレジスタにメモリ内の定数を加算して別のレジスタに格納するなど、マイクロプロセッサのハードウエアコンポーネントであるレジスタや演算回路に対する制御命令である。したがって、あらかじめマイクロプロセッサのハードウエアコンポーネントについてハードウエア記述言語(HDL)で記述しておけば、そこで宣言されたレジスタやワイヤ(信号)や演算子に対応する制御回路として、ALLプログラムP2の命令コードをHDLで記述することが可能である。しかも、ALLプログラムの命令コードとHDLで記述したハードウエアとは、その抽象度に違いがなく1対1に対応する。
【0017】
そこで、本実施の形態におけるHDL合成ツールP10は、そのアセンブリレベル合成工程S14により、コンパイルされたALLプログラムP2の命令コードを、HDLで記述したソフトウエアファイルP3に変換する。この変換についての具体例は、後で詳述する。
【0018】
さらに、本実施の形態の設計工程では、所定のマイクロプロセッサの、プログラムメモリとプログラムデコーダを除く、レジスタ群や演算ユニット、それにプログラムカウンタを含むハードウエアコンポーネントを、HDLで記述したハードウエアファイルP4をあらかじめ準備しておき、HDL合成ツールP10が、前述のソフトウエアファイルP3と共に、ハードウエアファイルP4も出力する。つまり、ハードウエアファイルP4は、マイクロプロセッサのソフトウエアの部分を除いたハードウエアコンポーネントをHDLで記述した設計ファイルであり、一方、ソフトウエアファイルP3は、そのハードウエアコンポーネントを制御する制御回路等をHDLで記述した設計ファイルに対応する。
【0019】
そこで、本実施の形態の設計方法では、このHDLで記述されたソフトウエアファイルP3とハードウエアファイルP4とをロジック・シンセサイザで論理合成し(S14)、集積回路のネットリストP6を生成する。現在、一部のHDLは標準化されており、その標準化されたHDLからネットリストを生成するロジック・シンセサイザも、前述したとおりすでに実現化されている。したがって、本実施の形態においては、現在普及しているロジック・シンセサイザを利用することで、HDL記述の両ファイルP3、P4をネットリストP6に変換することができる。
【0020】
その後の工程は、通常のLSIの設計工程と同じである。すなわち、レイアウトツールによる自動レイアウト工程S16により、ネットリストP6からレイアウトデータP7が生成され、レイアウトデータP7を利用してLSIプロセスS18により専用の集積回路装置P8が生成される。
【0021】
従来では、ハードウエア技術者がハードウエア回路をHDLで記述して設計し、それを論理合成してネットリストに変換していたが、本実施の形態では、マイクロプロセッサが実行可能なHLLプログラムから、HDL合成ツールP10により自動的にHDLで記述したハードウエア設計ファイルP3を生成することができるので、ハードウエア技術者でないソフトウエア技術者でも、専用LSIを設計することができる。しかも、HLLプログラムからコンパイラによりコンパイルされたALLプログラムの命令コードをHDL記述のハードウエア回路に変換しているので、変換前後で抽象度が同じであり、1対1に対応させて変換でき、従来例のような変換前後の論理の検証を行う必要がない。
【0022】
図2は、本実施の形態におけるHDL合成ツールの構成図である。HDL合成ツールP10は、プロセッサハードウエアファイルP4と、ALLプログラムの命令コードとHDLで記述したハードウエアファイルとの対応テーブルTB12と、対応テーブルTB12を参照してALLプログラムP2をプロセッサソフトウエアファイルP3に変換するALLプログラム変換プログラムP14とで構成される。プロセッサハードウエアファイルP4は、所定のマイクロプロセッサのプログラムメモリ、プログラムデコーダなどのソフトウエアに必要なハードウエアコンポーネントを除いて、例えば、入出力端子と、レジスタ群と、演算ユニットと、プログラムカウンタなどのハードウエアコンポーネントについてHDLで記述したファイルである。また、対応テーブルTB12は、上記マイクロプロセッサのコンパイラによりコンパイルされうる全ての命令コードそれぞれに対応して、各命令コードをHDLで記述したハードウエア回路のファイル(プロセッサソフトウエアモジュール)を有する。このプロセッサソフトウエアモジュールは、後述するように、ALLの命令コードをプロセッサハードウエアファイルP4のハードウエアコンポーネントに対応して、それらを制御する制御回路をHDLで記述したものである。図2には、ALL命令コード「ADDWF」に対応するHDL記述されたプロセッサソフトウエアモジュールが例示されている。
【0023】
図3は、マイクロプロセッサの一般的構成例を示す図である。このマイクロプロセッサMPは、プログラムカウンタPCと、スタックレジスタSRと、プログラムメモリ10と、命令レジスタ12と、プログラムデコーダ14とを有する。プログラムカウンタPCのプログラムアドレスに対応するプログラム命令コードが、プログラムメモリ10からフェッチされ、命令レジスタ12に格納され、その命令レジスタ内のプログラム命令コードが、プログラムデコーダ14でデコードされ、デコード結果による制御信号等C14が生成される。また、マイクロプロセッサMPは、入出力端子として、クロック入力端子clkinと、メインクリア端子mclrと、入出力データ群Ra、Rb(それぞれ8ビット)とを有し、更に、データメモリ16と、特殊レジスタ18と、定数データメモリ20と、タイマーなどの周辺回路22とを有する。そして、マイクロプロセッサMPは、各種の演算器を有する演算ユニット24と、演算結果が格納されるWレジスタ26とを有する。演算器には、例えば、AND、OR、EORなどの論理回路や、加算器などの演算器が含まれる。
【0024】
入出力端子Ra、Rbに入力されるデータは、一旦特殊レジスタ18に格納され、内部バスBUSを介して演算ユニット24に供給され、命令コードに対応した演算が実行され、その演算結果が、Wレジスタ26に格納され、または特殊レジスタ18の所定のレジスタに格納される。また、所定の処理結果が特殊レジスタ18に格納され、入出力端子Ra、Rbから出力される。プログラムメモリ10に格納されている命令コードは、C言語などのHLLプログラムではなく、それをコンパイルしたALLプログラムである。もちろん、ALLプログラムコードをアセンブラーにより翻訳された機械語コード(ニーモニック)の形態で、プログラムメモリ10に格納されている。そして、ALLプログラムの命令コードは、例えば、特殊レジスタの所定のレジスタの値に、定数データメモリの定数を加算して、データメモリ16内の所定の領域に格納するなどの形態になっており、プロセッサのレジスタ群や演算器などのハードウエアコンポーネントへの制御に対応するものである。
【0025】
更に、マイクロプロセッサMPにおけるタイミングの概念は、主に、プログラムカウンタPCと、制御クロックclkinとにある。つまり、プログラムカウンタPCのアドレスに対応する命令コードが、制御クロックclkinに同期して、実行されるからである。そして、命令コードの実行が完了するたびに、プログラムカウンタPCがインクリメントされ、次の命令コードが同様にして実行される。
【0026】
図4は、本実施の形態において、前述のプロセッサハードウエアファイルP4内にHDL記述されるハードウエアコンポーネントの一例を示す図である。図3のマイクロプロセッサMPを構成するハードウエアコンポーネントのうち、プログラムメモリ10と、命令レジスタ12と、命令デコーダ14とを除く、全てのハードウエアコンポーネントが、HDL記述されたハードウエア設計ファイルとしてのプロセッサハードウエアファイルP4内に記述される。図4の例では、入出力端子clkin、mclr、Ra、Rbと、データメモリ、特殊レジスタ、定数データメモリ、周辺回路、演算ユニット、Wレジスタ、プログラムカウンタPC及びスタックレジスタSRなどが、HDL記述される。HDLは標準化された言語によるものであり、マイクロプロセッサのハードウエア回路の仕様がわかれば、その回路のコンポーネント(回路要素)をHDL記述することが可能になる。この具体例については、後述する。
【0027】
図2にもどり、プロセッサハードウエアファイルP4と、対応テーブルTB12とは、所定のマイクロプロセッサ毎にあらかじめ作成され、HDL合成ツールP10に添付されている。そして、C言語などのHLLプログラムが作成されると、対応するマイクロプロセッサのコンパイラによりALLプログラムに変換され、そのALLプログラムP2の各命令コードが、HDL合成ツールP10のALLプログラム変換プログラム(ALL合成ツール)P14により、逐一、ハードウエア回路をHDL記述したプロセッサソフトウエアモジュールに置き換えられる。この置き換えは、ALL命令コードとHDL記述モジュールとの対応を有する対応テーブルTB12を参照して行われる。そして、HDL合成ツールP10は、プロセッサソフトウエアファイルP3と、あらかじめ添付されていたプロセッサハードウエアファイルP4とをハードウエア設計ファイル(P3+P4)として出力する。
【0028】
このように、プロセッサハードウエアファイルP4と対応テーブルTB12とは、所定のマイクロプロセッサに対応してあらかじめ作成しておけば、その後のHDL合成では、繰り返して使用することができる。また、複数のマイクロプロセッサに対応するHLLプログラムに対応可能にするためには、その複数のマイクロプロセッサに対応して、プロセッサハードウエアファイルP4と対応テーブルTB12とをあらかじめ生成してツールに添付しておく必要がある。
【0029】
図5は、本実施の形態におけるHDL合成手順を示すフローチャート図である。最初に、HLLプログラムからコンパイラによりコンパイルされているALLプログラムを読み込む(S20)。この読み込まれたALLプログラムからどのマイクロプロセッサに対応するものかを判別し、その判別されたマイクロプロセッサのプロセッサハードウエアファイルP4が出力される(S22)。工程S22では、あらかじめ作成されて添付されているプロセッサハードウエアファイルP4がそのまま出力される。
【0030】
次に、HDL合成では、i=0として(S24)、アドレスi番地のALLプログラム命令コードが解析される。そして、対応テーブルTB12を参照して、その命令コードに対応するプロセッサソフトウエアモジュール(HDL記述ファイル)が選択され、出力される(S28)。そして、全てのALLプログラムの命令コードに対して(S30、S32)、上記の工程S26とS28とが繰り返される。その結果、ALLプログラムの全ての命令コードが、対応するHDL記述のプロセッサソフトウエアモジュールに変換される。その結果、C言語などの標準HLLプログラムが、ハードウエア回路に対応するHDL記述ファイルP3、P4として出力される。上記の手順S20、S24、S26、S28、S30、S32が、アセンブリレベル合成手順S14に対応する。
【0031】
図6は、最終的に生成されるLSIの構造図である。本実施の形態のHDL合成ツールにより、マイクロプロセッサのプログラムメモリやプログラムデコーダ等を除くハードウエアコンポーネントが、プロセッサハードウエアファイルP4として出力され、プログラムメモリに格納されているALLプログラムがプロセッサソフトウエアファイルP3として出力される。そして、プロセッサソフトウエアファイルP3は、ハードウエアコンポーネントに対する制御回路30をHDL記述したものである。したがって、これらのハードウエア設計ファイルであるHDLファイルP3,P4から、論理合成、レイアウトにより生成されるLSIは、図6に示されるようになる。つまり、マイクロプロセッサのハードウエアコンポーネントである、入出力端子群clkin、mclr、Ra、Rb、プログラムカウンタPC、スタックレジスタSR、データメモリ16、特殊レジスタ18、定数データメモリ20、周辺回路22、演算ユニット24、Wレジスタ26などに加えて、ソフトウエアファイルP3に対応する制御回路ユニット30で構成される。そして、制御回路ユニット30の制御信号群C30~C36が、前述のハードウエアコンポーネントに供給される。
【0032】
以上が、本実施の形態の概略的な説明である。以下、具体例を示して、プロセッサハードウエアファイルP4、対応テーブルTB12、プロセッサソフトウエアファイルP3について詳述する。
【0033】
[プロセッサハードウエアファイルP4]
図7~図13は、プロセッサハードウエアファイルP4の一例を示す図である。なお、これらの図には、HDL記述が含まれ、それを説明するコメントがブロック内に示されている。また、VerilogHDLには、レジスタ宣言文reg、ワイヤ(信号)宣言文wire、アサイン文assign、オールウエイズ文alwaysなどが含まれる。
【0034】
ハードウエアファイルP4は、前述したとおり、図4に示されたプロセッサのハードウエアコンポーネントをHDLで記述したものである。図7には、ハードウエアファイルP4に含まれる入出力ポート定義部100と、レジスタ及びワイヤ(信号)の宣言部とデータメモリ設定部106の一部が示される。この例のプロセッサでは、16の入出力端子ra0-ra7、rb0-rb7と、クロック端子clkin、マスタクリア端子mclrとがあり、入出力ポート定義部100には、時間の単位の宣言101と、モジュール名sampleの宣言102と、16個の入出力端子の宣言102と、入力端子の宣言104とが含まれる。
【0035】
プロセッサは、回路の各設定を行う特殊レジスタやデータを格納するデータレジスタなどのレジスタと、レジスタや演算器の出力信号などのワイヤがあり、それらが、レジスタ及びワイヤ宣言部とデータメモリ設定部106で宣言される。即ち、「reg」がレジスタの宣言を、「wire」がワイヤ(信号)の宣言文である。そして、図7に示されるように、13ビットのプログラムカウンタpc_regとクロック信号clkの宣言108と、8ビットのワイヤportain1_wire, portain2_wire, portbin1_wire, Portbin2_wireと、入力ポート部における8ビットのレジスタportaout_reg, portbout_reg, option_reg, Trisa_regの宣言110と、割込関連のワイヤ(信号)とレジスタの宣言112とが含まれる。
【0036】
図8には、前述のレジスタ及びワイヤ宣言部とデータメモリ設定部106の一部が示され、ここでは、32バイトの8ビットレジスタファイルとしてのram_regの宣言114と、演算ユニット関連のレジスタとワイヤの宣言116とが示されている。演算ユニット関連116では、Wレジスタw_regと、入力レジスタin_regと、加算出力信号addout_node、論理和出力信号andout_nodeなど、スタックレジスタstack_reg及びスタックポインタレジスタstack_pnt_regが宣言されている。
【0037】
図9には、前述のレジスタ及びワイヤ宣言部とデータメモリ設定部106の一部が示され、ここでは、特にデータメモリ設定部118が示される。特殊レジスタ群INDF~INTCONとデータメモリのアドレス空間内の配置が示されている。このデータメモリ設定部118は、前述のレジスタファイルram_regにおけるレジスタの配置を示している。
【0038】
図10は、入出力切り替え制御部の記述120であり、それぞれ8ビットの入出力ポートAの記述122と入出力ポートBの記述124とが一部省略して示されている。入出力ポートAの記述122には、3つのassign文が含まれている。Assign文とは、ある条件の下でワイヤ(信号)に他のワイヤや回路の出力を割り付けるものである。即ち、1行目のassign文は、信号portain1_wire[7]を、レジスタtrisa_reg[7]が1ビット「1」の時(trisa_reg[7]==1'b1)はポートra7を割り当てて、それ以外の時はハイインピーダンス(1'bz)を割り当てることを意味する。2行目のassign文も同様である。そして、3行目のassign文では、ポートra7を、レジスタtrisa_reg[7]が1ビット「0」の時(trisa_reg[7]==1'b0)は信号portaout_reg[7]を割り当てて、それ以外の時はハイインピーダンス(1'bz)を割り当てることを意味する。このような3つのassign文を含む入出力ポートAの記述122によれば、図14に示すハードウエア回路図が定義される。
【0039】
図14に示されたハードウエア回路図は、ゲート回路300、302、304が含まれ、入出力端子Ra7に対する内部信号との関係についての入出力回路を構成する。つまり、ゲート回路300,302,304は、レジスタtrisa_reg[7]の状態に応じて、図10に示した信号を出力とする。つまり、レジスタtrisa_reg[7]が「1」の時は、ゲート回路300は入力ポートRa7を出力し、ゲート回路302はそれを出力し、ゲート回路304は出力をハイインピーダンスにし、レジスタtrisa_reg[7]が「0」の時は、ゲート回路300は出力をハイインピーダンスにし、ゲート回路302は信号portaout_reg[7]を出力し、ゲート回路304は信号portaout_reg[7]を入出力ポートRa7に出力する。このように、図10の入出力ポートAのHDL記述122によれば、図14のような入出力回路が一義的に定義されるのである。
【0040】
図11は、ピン変化割込回路の記述126を示す。この記述は、入出力ポートrb7-rb4、rb0の変化に対応する割込回路を記述するものである。最初に割込信号int0~int7を信号portbin1_wire[0]-[7]にそれぞれ割り当てるアサイン文の記述128が示され、次に、2つのオールウエイズ文alwaysの記述130が示される。この記述130を説明するために、行番号1301~1317を記載している。1301行のalways文は、割込信号int0の立ち上がりエッジ(posegde int0)または内部クリアレジスタintclr_reg0の出力の立ち上がりエッジ(posedge intclr_reg0)が発生した場合に、以下の動作を行うことを記述する。また、1303~1307行では、内部クリアレジスタintclr_reg0が「1」ならレジスタintrise_reg[0]を1ビット「0」(1'b0)にし、それ以外であれば1ビット「1」にすることを記述する。つまり、この記述により、信号int0またはレジスタintclr_reg0の立ち上がりエッジが発生した時に、レジスタintclr_reg0が「0」であれば、その割込を許可してレジスタintrise_reg[0]を「1」に設定し、レジスタintclr_reg0が「1」であれば、その割込を禁止してレジスタintrise_reg[0]を「0」にする回路が定義される。1309~1316行も同様の記述である。
【0041】
そして、1317行では、内部割込信号rb0_intは、割込受付レジスタoption_reg[6]が「1」であれば、レジスタintrise_reg[0]に、「0」であれば、レジスタintdown_reg[0]になることを記述している。3つのassign文の記述140により、特に1403行により最終的な内部割込信号int_nodeを生成する論理回路が記述される。従って、これらの記述128,130,140によれば、割込回路が定義される。
【0042】
図12には、各演算器や制御信号の設定の記述142が示される。Assign文144は、プログラムカウンタのインクリメンタ端子incpc_nodeが、プログラムカウンタレジスタpc_regに13ビットの「000...001」を加算したものであることを記述する。また、演算ユニット内の演算器出力信号の記述146が示される。この記述146の1行目を例にして説明すると、加算器出力信号addout_nodeは、8ビットのWレジスタw_regに9ビット目の「0」(1'b0)を加えた9ビットの値と、8ビットの入力レジスタin_regに9ビット目の「0」(1'b0)を加えた9ビットの値との加算結果であることが記述されている。つまり、加算によるキャリーを考慮して、入力レジスタは9ビット構成になっているのである。各行の//の後にそれぞれの演算論理が示されている。他のアサイン文も同様である。この記述146により、演算ユニット内の複数の演算器が定義される。さらに、記述148は、スリープ信号powerdown_nodeや、スリープ解除信号startclkin_nodeや、クロック選択信号selclk_nodeをそれぞれ記述する。
【0043】
演算器の記述146において、comout_nodeは入力レジスタin_regの反転論理、decout_nodeは入力レジスタin_regを-1、incout_nodeは入力レジスタを+1、iorout_nodeは入力レジスタとWレジスタとの論理和、rlfout_nodeは入力レジスタの左シフト、rrfout_nodeは入力レジスタの右シフト、subout_nodeは入力レジスタとWレジスタの除算結果、swapout_nodeは入力レジスタの上位ビットと下位ビットを入れ替えた出力、xorout_nodeは入力レジスタとWレジスタとの排他的論理和、bcfout_nodeは入力レジスタをマスクレジスタbit_regでクリアした出力、bsfout_nodeは入力レジスタをマスクレジスタでセットした出力、addlowout_nodeは入力レジスタとWレジスタの加算下位4ビット出力、sublowout_nodeは入力レジスタとWレジスタの減算下位4ビット出力をそれぞれ示している。
【0044】
図13は、シンクロナイザー、リセット時の動作設定、タイマ、プリスケーラ、割込制御回路の記述150の一部であり、図13には、シンクロナイザーの記述152と、リセット時の動作設定の記述154とが示される。シンクロナイザーの記述152では、クロックclkの立ち上がりエッジ(posedge)が発生すると、マスタクリア端子mclrがマスタクリアレジスタmclr_sync_regに取り込まれることが記述され、これによりマスタクリア端子mclrがクロックclk同期でレジスタに取り込まれる回路が定義される。また、リセット動作設定の記述154は、そのマスタクリアレジスタmclr_sync_regが「0」(1'b0)になると、プログラムカウンタレジスタpc_regやステータスレジスタstatus_regなどが所定の値にリセットされることを記述している。
【0045】
以上が、ハードウエアファイルP4の記述例である。そして、ハードウエアファイルP4の最後に、「end else begin」の記述156が挿入され、これ以降に、ソフトウエアファイルP3の記述が加えられる。
【0046】
[対応テーブルTB12]
図15~図23は、対応テーブルTB12の具体例を示す図である。対応テーブルTB12は、前述のとおり、C言語のプログラムをコンパイルしたALL記述プログラムの全ての命令コード
と、その命令コードを実行するための制御回路についてHDL記述したファイルとの対応を有する。したがって、図15~図24は、命令コードとHDL記述されたソフトウエアモジュールとの対応を有する。本実施の形態のマイクロプロセッサは、ALL記述の命令として全部で35命令を有する。その命令には、18のバイト対応のレジスタファイル命令群(図15~図19)と、4つのビット対応のレジスタファイル命令群(図20~図21)と、13のリテラル(定数)及びコントロール命令群(図21~図24)とからなる。
【0047】
図15には、バイト対応のレジスタファイル命令200の一つである命令ADDWFに対応するソフトウエアモジュールのHDL記述202が示されている。この命令ADDWFは、ニーモニック(機械言語)では「000111dfffffff」であり、Wレジスタとレジスタファイルfffffff番地のデータ(データソース)を加算し、dで指定された格納先(デスティネーション)に保存する命令である。このADDWF命令のHDL記述202は、プログラムカウンタレジスタpc_regが「xxxx」番地の時に(2021行)、第1のクロックサイクル(ステートレジスタstate_regが「0」(1'b0)のとき)で(2022行)、データソースであるレジスタファイルfffffff番地のデータを入力レジスタin_regに格納し(2023行)、第2のクロックサイクルに移り(ステートレジスタstate_regを「1」(1'b1)にする)(2022行)、第2のクロックサイクルにおいて、加算器出力の下位8ビットaddout_node[7:0]をdで指定された格納先に格納し(2026行)、プログラムカウンタレジスタpc_regをインクリメントし(2027行)、加算出力のキャリービットaddout_node[8]などをステータスレジスタstatus_reg[0]などに格納し(2028行)、加算器出力の下位8ビットaddout_node[7:0]がすべて「0」(1'b0)のときはステータスレジスタstatus_reg[2]を「1」(1'b1)にしそれ以外では「0」にし(2030~2034行)、最後に第1クロックサイクルに移る(ステートレジスタatate_regを「0」にする)(2035行)。
【0048】
なお、データソース部とは、バイト対応のレジスタファイル命令では、データソースとなりうるのは特殊レジスタとデータメモリであり、そのアドレスは、図9に示した通りである。また、データディスティネーションとなりうるのは、特殊レジスタとデータメモリ及びWレジスタであり、d=0の時はWレジスタ、d=1の時は特殊レジスタとデータメモリ(データソースに上書き)になる。
【0049】
このHDL記述202において、タイミング制御として、プログラムカウンタpc_regが所定の番地「xxxx」である場合に動作することと(2021行)、2つのクロックサイクルに同期してそれぞれ動作すること(ステートレジスタstate_regが「0」のサイクルと、「1」のサイクル)が記述されている。つまり、HLLであるC言語のプログラムをコンパイルしたALLプログラムは、それぞれプログラムアドレスが割り当てられているので、そのプログラムアドレスを処理のタイミングに利用しているのである。
【0050】
図16は、対応テーブルの命令ANDWFに対応するソフトウエアモジュールのHDL記述204が示されている。この命令ANDWFは、ニーモニック(機械言語)では「000101dfffffff」であり、Wレジスタとレジスタファイルfffffff番地のデータ(データソース)の論理積をとり、dで指定された格納先(デスティネーション)に保存する命令である。この記述204では、図15の記述例と同様に、プログラムアドレスが「xxxx」の時に開始され(2041行)、1クロック目(state_reg=0)でデータソースのデータを入力レジスタin_regに格納し(2043行)、2クロック目(state_reg=1)で論理積出力andout_nodeをデータディスティネーションに格納し(2046行)、プログラムカウンタをインクリメントし(2047行)、演算結果が0であればゼロフラグであるステータスレジスタstate_reg[2]を「1」(1'b1)にし(2048、2049行)、演算結果が0以外であれば「0」(1'b0)にする(2051行)。そして、1クロック目に戻す(2053行)。
【0051】
図16の記述204Aは、実際にアセンブリレベル合成されて出力されるソフトウエアモジュール例である。つまり、この例では、プログラムカウンタが「8」になったときに(1行目)、所定の番地のメモリレジスタram_regのデータを入力レジスタin_regに格納し(3行目)、演算結果andout_nodeをWレジスタw_regに格納する例である。このように、後述するALLプログラムのアドレスに対応して対応テーブルのモジュールの「xxxx」が特定され(HDL204の2041行目)、その命令コードに対応してデータソース及びデータディスティネーションが特定され(HDL204の2043行、2046行)、対応テーブル内のHDL記述モジュール204が出力例204Aとして出力される。
【0052】
図17は、対応テーブルにおけるバイト対応のレジスタファイル命令のうち、命令CLRF、CLRW、COMF、DECF、DECFSZに対応するHDL記述のモジュール206,208,210,212を示している。それぞれの命令の説明は、図中に記載されるとおりであり、HDL記述モジュールは、プログラムカウンタのカウント値「xxxx」を条件とするif文と、所定の処理(省略)と、プログラムカウンタをインクリメントする記述(pc_reg<=incpc_node)とが含まれる。図18、図19も図17と同様であり、バイト対応のレジスタファイル命令の命令INCF、INCFSZ、IORWF、MOVF、MOVWF、NOP、RLF、RRF、SUBWF、SWAPF、XORWFに対応するHDL記述のモジュール214~232をそれぞれ示している。各HDL記述モジュールは、図17と同様に、所定の制御記述に加えて、プログラムカウンタ値の条件とプログラムカウンタのインクリメントの記述とを有する。
【0054】
図20は、ビット対応のレジスタファイル命令204のうち、命令BCFに対応するHDL記述のモジュール236が示されている。命令BCFは、レジスタファイルfffffff番地のデータを別途テーブル235で指定されたbbbに対応する8ビットマスクデータで指定されたビットの値をクリア「0」にする命令である。つまり、データソースのデータを入力レジスタに格納し(2363行)、bbbで指定されたマスクデータをマスクレジスタbit_regに格納し(2364行)、それらの論理積出力bcfout_nodeをデータディスティネーションのレジスタに格納する(2367行)。
【0055】
図20には、命令BSF、命令BTFSCに対応するHDL記述のモジュールファイル238、240が示されている。但し、具体的な部分は省略している。
【0056】
図21には、命令BTFSSに対応するHDL記述のモジュールファイル242が示されている。また、図21には、定数演算命令(リテラル)とコントロール命令243のうち、命令ADDLW、CLRWDT、ANDLW、CALLに対応するHDL記述のモジュールファイル244、246、248、250が示される。各命令については、図中の説明に示されている。命令CALLは、プログラムアドレス「kkkkkkkkkkk」番地のサブルーチンを呼び出す命令である。したがって、HDL記述のモジュール250には、アドレス「kkkkkkkkkkk」にPCラッチレジスタの2ビットpclath_reg[4:3]を上位ビットとして加えた13ビットのアドレスが、プログラムカウンタレジスタpc_regに格納され(2502行)、スタックポイントレジスタstack_pnt_regが示すスタックレジスタstack_regに、プログラムカウンタをインクリメントしたアドレス(リターンアドレス)が格納され(2503行)、スタックポイントレジスタが「111」であればそれを「000」に戻して(2504、2505行)、スタックポイントレジスタが「111」以外であれば、単にそのポイント値を+1する(2507行)。
【0057】
図22は、命令GOTO、IORLW、MOVLW、RETURN、RETFIEに対応するHDL記述のモジュール252、254、256、258、260を示し、図23は、命令RETLW、SLEEP、SUBLW、XORLWに対応するHDL記述のモジュール262、264、266、268を示す。例えば、命令GOTOは、プログラムアドレス「kkkkkkkkkkk」にジャンプする命令であり、HDL記述252には、プログラムカウンタにそのアドレスにPCラッチレジスタの2ビットを上位に加えたアドレスを格納することが記述されている。また、命令RETURNは、サブルーチンから復帰する命令であり、そのHDL記述258には、スタックポイントレジスタの-1のポイントにあるスタックレジスタに格納されたアドレスをプログラムカウンタに格納し(2582行)、スタックポイントレジスタを-1減算する(2583~2586行)ことが記述されている。
【0058】
以上のように、対応テーブルTB12には、全てのALLの命令に対応して、HDL記述されたモジュールファイルが設けられている。そして、後述するとおり、HDL合成ツールが、コンパイルされたALLプログラムに示されたプログラムアドレスと、命令コードと、レジスタファイルアドレスを解析して、命令コードに対応するHDL記述モジュールにプログラムアドレスとレジスタファイルアドレスの情報を反映させて、ソフトウエアファイルP3を出力する。
【0059】
[具体例]
次に、具体的なC言語記述のプログラムに基づき、それがコンパイルされ、コンパイルされたALL記述されたプログラムからHDL合成ツールにより、専用集積回路をHDL記述するハードウエア設計ファイルが生成されることを説明する。
【0060】
図24は、HLLとしてC言語で記述された乗剰余算のプログラムP1を示す図である。このC言語記述プログラムは、X×Y÷Pの余り(%)を求める演算を実行するものである。まずヘッダーファイルが定義され(記述300)、変数としてin1~in3とregがそれぞれ整数として定義され(記述302)、そして、ポートa0(pin_a0)とポートa1(pin_a1)とを共にLレベルに初期化する(記述304)。なお、ポートa0がHレベルで変数X,Y,Pが順次入力され、ポートa1がHレベルで演算結果が出力されることが前提である。
【0061】
また、図24のプログラムは、無限ループ(記述305)として、ポートa0=HにしてXを変数in1として入力し、ポートa0=Lにし(記述306)、ポートa0=HにしてYを変数in2として入力し、ポートa0=Lにし(記述308)、ポートa0=HにしてPを変数in3として入力し、ポートa0=Lにし(記述310)、変数in1に変数in2を乗算し、変数in3で除算し、その余りを変数regに与え(記述312)、そして、ポートa1=Hにして変数regを出力し、ポートa1=Lにする(記述314)。
【0062】
このようなC言語記述のプログラムP1が生成されると、所定のマイクロプロセッサのコンパイラによりコンパイルされ、ALL記述プログラムが生成される。
【0063】
図25~図29は、図24のC言語をコンパイルしたALLプログラムの例を示す図である。図25に記載されるように、ALLプログラムP2は、プログラムアドレスの欄400と、命令コード欄402と、レジスタファイルアドレスの欄404とを有する命令コードからなる。つまり、対応ファイルTB12に含まれる命令コードからなる。図25の例では、プログラムアドレス「0000」には、命令コードMOVLW、定数データ8ビット「00000000」が記述されている。つまり、定数「00」(=8ビットで00000000)の定数(リテラル)データをWレジスタに移動する命令コードである。以下、同様に複数の命令コードが記述されている。
【0064】
図30は、図25~29に示されたALLプログラムP2をニーモニックコード(機械語コード)に変換した例である。
【0065】
図31は、図30に示したALLプログラムP2のニーモニックコードをHDL合成ツールに与えた結果合成されたHDL記述ファイルの一例を示す図である。つまり、図1、2に示したように、HDL合成ツールは、まずプロセッサのハードウエアコンポーネントをHDL記述したプロセッサハードウエアファイルP4を出力し、その最終行を「end else begin」で終了させる。さらに、アセンブリレベル合成ツールであるALLプログラム変換プログラムP14は、図30のALLプログラムの命令コードを1行毎に解析し、対応テーブルTB12を参照して、各命令コードをHDL記述されたモジュールに変換し、プロセッサソフトウエアファイルP3として出力する。図13のソフトウエアファイルP3には、図25のALLプログラムの命令「MOVLW 00」と、命令「MOVWF 0A」とに対応するHDL記述のモジュールファイルが含まれている。これらのモジュールファイルには、それぞれのプログラムアドレス「0000」「0001」を有するif文と、データディスティネーションとが含まれている。つまり、図1に示したように、共にHDLで記述されたハードウエアファイルP4とソフトウエアファイルP3とからなるハードウエア設計ファイルが、図31のように生成される。
【0066】
[論理合成]
図1に示されるように、このHDL記述されたファイルは、論理合成ツール(ロジックシンセサイザ)により、ネットリストP6に変換される。論理合成は、一般的に次のように行われる。論理合成ツールは、HDL記述されたファイルと、面積や速度などの制約条件とを入力し、加算器や乗算器などのリソースを有するリソースライブラリと、チップ上のセルやマクロを有するテクノロジライブラリを参照して、論理回路を合成し、ネットリストの形態で出力する。この論理合成処理は、例えば、(1)リソース割り当てとリソースシェアリング、(2)レジスタの推定、(3)状態コードの割り当て、(4)組み合わせ回路の合成、(5)論理最適化、(6)テクノロジマッピングの処理からなる。(1)リソース割り当てとリソースシェアリング処理では、HDL記述中の「+」「*」などの演算子に対して、リソースライブラリに登録されている加算器や乗算器といったハードウエアリソースを割り当てて、さらに、HDL記述を解析し、複数の演算子が同時に使用されない場合を条件として、それらの演算子に対して共通のハードウエアリソースを割り当てる。(2)レジスタの推定処理では、HDL記述中のあらかじめ決められたレジスタを表現するパターンに一致した部分をレジスタとして認識する。(3)状態コード割り当て処理では、状態に対してそれぞれ状態コードを割り当てる。(4)組み合わせ回路の合成処理では、HDL記述中の代入文、if文、case文、for文、while文などの文を論理式に変換する。つまり、ある信号の状態を条件に所定のレジスタのデータが別の信号に割り当てられる場合は、それらを論理回路に対応するように論理式に変換する。そして、(5)論理最適化処理では、例えば、使用されていないHDL記述やハードウエアコンポーネントを削除して、無駄なハードウエア回路の発生を回避し、所定の論理式を合成して最適化された論理式に変換するなど、様々な論理式の最適化が行われる。最後に、(6)テクノロジマッピング処理では、最適化された論理式にテクノロジライブラリに登録されたセルやマクロを割り当てる。このとき、面積や速度などの制約条件を考慮してセルを割り当てる。さらに、レジスタに対してはテクノロジライブラリに登録されているフリップフロップのセルを割り当てる。
【0067】
[変形例1]
図32は、本実施の形態におけるHDL合成ルールの変形例を示す図である。図2に示したHDL合成ツールとの相違点は、複数のマイクロプロセッサ(プロセッサA、プロセッサB)に対応して、プロセッサハードウエアファイルP4(A)、P4(B)、対応テーブルTB12(A)、TB12(B)を有することである。このようにすることにより、それぞれのマイクロプロセッサに対応するALLプログラムP2(A),P2(B)に対しても、HDL合成することができる。複数のマイクロプロセッサに対応させるためには、それぞれに対応するプロセッサハードウエアファイルと対応テーブルを作成する必要があるが、一度作成すれば、その後繰り返し使用することができる。
【0068】
また、別の変形例として、仮想的なマイクロプロセッサを開発し、その仮想的なマイクロプロセッサに対応するコンパイラを開発することで、既存の複数のマイクロプロセッサに対応させて複数のハードウエアファイルや対応テーブルを作成する必要をなくすことができる。つまり、仮想的なマイクロプロセッサを開発することで、それに対応するハードウエアファイルと対応テーブルだけをあらかじめ作成しておけば、HLL記述のプログラムが与えられた時、その仮想的なマイクロプロセッサ用のコンパイラでALLプログラムを作成し、HDL合成することができる。上記のような仮想的なマイクロプロセッサは世の中に存在しないので、本実施の形態のHDL合成ツールが、そのコンパイラも有しておき、HLL記述のプログラムをコンパイルする機能を備えておくことが必要になる。
【0069】
[変形例2]
上記実施の形態では、HDL合成手順P10において、あらかじめ作成されているプロセッサハードウエアファイルP4をそのまま出力している。しかしながら、例えば、小規模なHLLプログラムの場合は、全てのハードウエアコンポーネントを使用することがなく、また、全てのALL命令コードを利用したALLプログラムに変換されることもない。あるいは、大規模なHLLプログラムであっても、特定の機能のみしか備えていない場合も、全てのハードウエアコンポーネントを使用することがなく、全てのALL命令コードを利用したALLプログラムに変換されることもない。そのような場合は、使用しないハードウエアコンポーネントを含んだプロセッサハードウエアファイルP4を出力すると、そのファイルが不必要に大規模になり、集積回路装置が不必要に大規模化され、動作速度も遅くなる可能性がある。
【0070】
HDLファイルからネットリストに変換する論理合成工程において、このように使用しないハードウエアコンポーネントに対応するHDL記述を削除して最適化することも提案されているが、一旦複雑なHDL記述にされた状態で、不必要な記述を削除することは容易ではない。
【0071】
そこで、変形例2では、ALLプログラムに含まれるALL命令コードをチェックし、所定のハードウエアコンポーネントの使用に対応するALL命令コードや、ALL命令コードとレジスタファイルアドレスの組合せが存在しないかどうかをチェックする。そして、もしそのようなALL命令コードや、ALL命令コードとレジスタファイルアドレスの組合せが存在しない場合は、対応するハードウエアコンポーネントに対応するHDL記述を、プロセッサハードウエアファイルP4から削除し、その削除により最適化されたプロセッサハードウエアファイルを出力する。
【0072】
更に、上記実施の形態では、HDL合成手順P10において、各ALL命令コードを対応テーブルTB12を参照してそれぞれ対応するHDLモジュールに変換している。しかしながら、複数の一連のALL命令コードの組合せにおいて、各命令コードで無駄な処理が行われることがある。例えば、ある演算結果をWレジスタに格納するALL命令コードと、そのWレジスタのデータをデータメモリのある番地に格納するALL命令コードとが連続する場合は、Wレジスタへの書き込みと読み出しの処理は無駄な処理である。したがって、それらの命令コードが連続する場合は、Wレジスタへの書き込みと読み出しを省略することで、より最適化することができる。
【0073】
そこで、変形例2では、比較的多く頻出する連続するALL命令コードの組合せからなる複合命令コードに対して、最適化されたHDLモジュールを、対応テーブルTB12に追加する。そして、ALLプログラムをHDL記述のプロセッサソフトウエアファイルに変換する時は、複合命令コードに対しては、最適化されている複合命令に対応するHDLモジュールに変換し、複合命令コードでない場合は、各ALL命令コードを対応するHDLモジュールに変換する。また、複合命令コードに対しては、優先的に対応するHDLモジュールに変換することが望ましい。
【0074】
上記の処理を行うことで、変形例2によれば、変換後のHDL記述ファイルであるプロセッサハードウエアファイルP3とプロセッサソフトウエアファイルP4のファイル規模を小さくし、集積回路規模を抑制し、処理スピードを高めることができる。以下、例を示して説明する。
【0075】
図33は、変形例2におけるHDL合成手順P10のフローチャート図である。図5と同じ工程には同じ番号を与えている。ALLプログラムの読み込み工程S20の次に、読み込んだALLプログラムを解析して、使用しないハードウエアコンポーネントを検出する。例えば、入出力ポートは、図9に示した特殊レジスタに接続されているので、ALL命令コードのレジスタファイルアドレス欄に特殊レジスタに対応するアドレスがあるか否かをチェックすることで、使用されない特殊レジスタと入出力ポートとを検出することができる。レジスタ・ワイヤー宣言については、ALL命令コードから使用予定の演算器を検出することができ、その結果演算器の出力となるワイヤーが判明するので、不使用のワイヤーを検出することができる。同様に、各演算器の設定に関しても使用しない演算器を検出することができる。データメモリの設定については、ALL命令コードのレジスタファイルアドレス欄をチェックすることで、使用されないデータメモリ領域を特定することができる。
【0076】
また、割り込みやタイマー回路については、ALL命令コードのBSF(レジスタファイルの所定ビットを「0」にする命令)のレジスタファイルアドレスが「0b.3」「0b.4」が割り込み発生に対応し、「0b.5」がタイマー回路に対応する。つまり、レジスタファイルアドレス「0b」は、図9のメモリアドレスマップに示したように、割り込みレジスタに対応する。従って、このようなALL命令コード「BSF 0b.3」「BSF 0b.4」「BSF 0b.5」が存在しない場合は、割り込み回路、タイマー回路が必要ないことが判明する。そして、割り込み回路が使用されなければ、リセット時の動作定義も不要になる。
【0077】
上記のように、ALL命令コードをチェックすることで、使用しないハードウエアコンポーネントを検出することができるので、その検出した不使用のハードウエアコンポーネントのHDL記述を削除して、プロセッサハードウエアファイルP4を出力する(S22B)。これにより、プロセッサハードウエアファイルP4の記述量を減らすことができる。
【0078】
更に、図33のフローチャートによれば、プロセッサソフトウエアファイルP4を生成するためのALL命令コードからHDLモジュールへの変換において、アドレスi番地のALLプログラムが複合命令か否かがチェックされる(S27)。そして、複合命令に該当する場合は、それに対応するHDLモジュールのファイルが出力され(S29)、複合命令に該当しない場合は、図5と同様に各ALL命令コードに対応するHDLモジュールのファイルが出力される(S28)。それ以外の処理は、図5と同じである。
【0079】
図34は、複合命令の一例を示す図である。この例は、ALL命令コードmovlw(あるデータをレジスタw_regに格納する命令)とmovwf(レジスタw_regのデータをデータメモリのある番地に格納する命令)とからなる複合命令500である。この2つの命令が連続する場合、あるデータをレジスタw_regに格納し、その格納したデータをデータメモリのある番地に格納する処理になるので、データを一旦レジスタw_regに格納する処理が無駄になっている。
【0080】
図34中、各命令movlwとmovwfをそれぞれ対応テーブルTB12のHDLモジュールに変換した例が、HDL記述502に示されている。前述のとおり、この命令が連続すると、プログラムアドレス「0005」の時に、あるデータ「30」をレジスタw_regに格納し、プログラムカウンタレジスタpc_regをインクリメントし、プログラムアドレス「0006」の時に、レジスタw_reg内のデータをデータメモリ20番地に格納し、プログラムカウンタをインクリメントすることになる。動作完了には2クロックを要している。
【0081】
一方、図34中、複合命令movlw、movwfに対して最適化したHDLモジュール504が示されている。これによれば、プログラムカウンタ「0005」の時に、あるデータ「30」がデータメモリ20番地に格納し、プログラムカウンタを2つインクリメントしている。つまり、レジスタw_regへの格納が省略され、プログラムカウンタ「0006」の判断が削除されている。その結果、HDLモジュールの記述量が減り、1クロックで動作完了している。
【0082】
図35、図36は、別の複合命令を示す図である。この複合命令は、ALL命令コードbtfss(データメモリのある番地のあるビットが1なら次の命令をスキップする命令)、goto(あるプログラムアドレスにジャンプする命令)の組合せである。図35中のALL命令コード列506では、命令コードbtfss 30h,3(データメモリ30番地の3ビット目が1なら次の命令をスキップ)と、命令コードgoto 0010(プログラムアドレス0010にジャンプ)と、命令コードgoto 0025(プログラムアドレス0025にジャンプ)とが連続している。従って、命令コードbtfssの結果に応じて、次の命令をジャンプまたは次の命令の実行を行うことなく、プログラムアドレス0010または0025にジャンプすれば、より効率的な処理になる。
【0083】
図35中のHDL記述ファイル508は、各命令コードをそれぞれ対応するHDLモジュールに変換した例である。命令コードbtfssでは、プログラムカウンタ「0005」の時に、データメモリ30番地のデータをレジスタin_regに格納し、マスクビット「8'b11110111」をマスクレジスタmask_regに格納し、それらレジスタのOR値の出力ノードbsfout_node「8'b11111111」の場合は、データメモリ30番地のデータの3ビット目が「1」であったことになるので、プログラムカウンタを+2し、それ以外ならプログラムカウンタを+1する。そして、命令コードgotoでは、それぞれのジャンプ先アドレスをプログラムカウンタに格納する。このHDL記述ファイル508によれば、動作完了に3クロックを要し、記述量も多い。
【0084】
それに対して、図36には、複合命令btfss,goto,gotoに対して最適化されたHDLモジュール510が示されている。これによれば、プログラムカウンタ「0005」の時に、1クロック目の動作はHDL記述ファイル508と同じであるが、2クロック目では、演算結果ノードbsfout_nodeに応じて、プログラムカウンタを「0025」にするか「0010」にするかの処理が行われて完了している。つまり、2クロックで動作が完了し、その記述量もHDL記述ファイル508より大幅に減少している。
【0085】
上記のように複数のALL命令コードからなる複合命令に対して、最適化されたHDLモジュールを対応テーブルTB12に追加登録し、コンパイルされたALLプログラム中に当該追加登録された複合命令が存在する場合は、それに対応するHDLモジュールに優先的に変換する。登録された複合命令に該当しないALL命令に対しては、従前通りに対応するHDLモジュールに変換すれば良い。このように複合命令を優先して最適化されたHDLモジュールに変換することで、全体のHDL記述ファイルを縮小することができ、動作に必要なクロック数を減らすことができる。
【0086】
マイクロプロセッサの場合は、一般論として、ALL命令の数を増やすことは、命令メモリや命令デコーダの回路規模が増大する。例えば、使用頻度の高い複合命令をマクロ命令などで置き換える場合である。そのため、マイクロプロセッサでは、ALL命令の数をむやみに増やすことは好ましくない。しかし、本実施の形態では、最終的な集積回路装置は命令メモリや命令デコーダを有しないので、上記の問題はない。つまり、HDL合成手順の処理の負担が増大しない限りでは、複合命令の登録をできるだけ多くして、より最適化されたHDLモジュールへの変換を可能にすることが望ましい。
【0087】
本変形例2によれば、HDL記述されたプロセッサハードウエアファイルP3からは、使用されないハードウエアコンポーネントに対応するHDL記述が削除され、HDL記述されたプロセッサソフトウエアファイルP4では、複合命令に対しては最適化されたHDLモジュールに変換されているので、その記述数が減少し、使用クロック数も減少している。そして、これらの減少に必要な処理は、HDL合成手順P10の段階で、ALLプログラムの命令コードを解析することにより行われる。したがって、一旦HDL記述に変換されたファイルP3,P4を解析して最適化する従来の論理合成処理よりも、解析処理が簡単で且つ効率的である。最終的に生成される集積回路装置についていえば、図6の回路において、プロセッサハードウエアファイルP3の最適化により制御回路ユニット30以外の回路構成が簡単化され、プロセッサソフトウエアファイルP4の最適化により制御回路ユニット30の回路構成が簡単化されることになる。
【0088】
以上のとおり、本実施の形態によれば、C言語などのHLL記述されたプログラムから、自動的にHDL記述のハードウエア設計ファイルを作成することができ、専用のLSIの設計効率を高めることができる。また、HLL記述のプログラムとALL記述のプログラムとの間の検証は不要であり、ALL記述プログラムとHDL記述のハードウエアとの間の抽象度も同じであり、両者の間の検証も不要であり、実用性の高いツールである。
【図面の簡単な説明】
【0089】
【図1】本実施の形態における集積回路の設計工程を示すフローチャート図である。
【図2】本実施の形態におけるHDL合成ツールの構成図である。
【図3】マイクロプロセッサの一般的構成例を示す図である。
【図4】本実施の形態において、前述のプロセッサハードウエアファイルP4内にHDL記述されるハードウエアコンポーネントの一例を示す図である。
【図5】本実施の形態におけるHDL合成手順を示すフローチャート図である。
【図6】最終的に生成されるLSIの構造図である。
【図7】プロセッサハードウエアファイルP4の一例を示す図である。
【図8】プロセッサハードウエアファイルP4の一例を示す図である。
【図9】プロセッサハードウエアファイルP4の一例を示す図である。
【図10】プロセッサハードウエアファイルP4の一例を示す図である。
【図11】プロセッサハードウエアファイルP4の一例を示す図である。
【図12】プロセッサハードウエアファイルP4の一例を示す図である。
【図13】プロセッサハードウエアファイルP4の一例を示す図である。
【図14】プロセッサハードウエアファイルP4の一例を示す図である。
【図15】対応テーブルTB12の具体例を示す図である。
【図16】対応テーブルTB12の具体例を示す図である。
【図17】対応テーブルTB12の具体例を示す図である。
【図18】対応テーブルTB12の具体例を示す図である。
【図19】対応テーブルTB12の具体例を示す図である。
【図20】対応テーブルTB12の具体例を示す図である。
【図21】対応テーブルTB12の具体例を示す図である。
【図22】対応テーブルTB12の具体例を示す図である。
【図23】対応テーブルTB12の具体例を示す図である。
【図24】HLLとしてC言語で記述された乗剰余算のプログラムP1を示す図である。
【図25】図24のC言語をコンパイルしたALLプログラムの例を示す図である。
【図26】図24のC言語をコンパイルしたALLプログラムの例を示す図である。
【図27】図24のC言語をコンパイルしたALLプログラムの例を示す図である。
【図28】図24のC言語をコンパイルしたALLプログラムの例を示す図である。
【図29】図24のC言語をコンパイルしたALLプログラムの例を示す図である。
【図30】図25~29に示されたALLプログラムP2をニーモニックコード(機械語コード)に変換した例を示す図である。
【図31】図30に示したALLプログラムP2のニーモニックコードをHDL合成ツールに与えた結果合成されたHDL記述ファイルの一例を示す図である。
【図32】本実施の形態におけるHDL合成ルールの変形例を示す図である。
【図33】変形例2におけるHDL合成手順P10のフローチャート図である。
【図34】複合命令の一例を示す図である。
【図35】複合命令の別の例を示す図である。
【図36】複合命令の一例を示す図である。
【符号の説明】
【0090】
P1:HLL記述プログラム(C言語)、P2:ALL記述プログラム
P3:プロセッサソフトウエアファイル(HDL)
P4:プロセッサハードウエアファイル(HDL)
P10:HDL合成ツール


図面
【図1】
0
【図2】
1
【図3】
2
【図4】
3
【図5】
4
【図6】
5
【図7】
6
【図8】
7
【図9】
8
【図10】
9
【図11】
10
【図12】
11
【図13】
12
【図14】
13
【図15】
14
【図16】
15
【図17】
16
【図18】
17
【図19】
18
【図20】
19
【図21】
20
【図22】
21
【図23】
22
【図24】
23
【図25】
24
【図26】
25
【図27】
26
【図28】
27
【図29】
28
【図30】
29
【図31】
30
【図32】
31
【図33】
32
【図34】
33
【図35】
34
【図36】
35