(57)【特許請求の範囲】
【請求項１】
処理の動作のみを記述した動作記述から、レジスタトランスファレベルの論理回路を合成する高位合成方法において、
バス接続リソース抽出手段が該動作記述からバス接続リソースの情報を抽出するステップと、
バスインターフェイス生成手段が、バス接続させる通信路およびメモリ、レジスタに関する該バス接続リソースの情報が格納されるバス接続リソースデータベースおよび、事前にバスプロトコルが格納されたバスプロトコルライブラリを参照して、対象とするバスインターフェイス回路を自動生成するステップとを有する高位合成方法。
【請求項２】
組み込みソフト用ヘッダファイル生成手段が前記バス接続リソースデータベースを参照し、対象とするバスに関する組み込みソフト用ヘッダファイルを自動生成する請求項１記載の高位合成方法。
【請求項３】
組み込みソフト用ライブラリ関数生成手段が前記バス接続リソースデータベースを参照し、対象とするバスに関する組み込みソフト用ライブラリ関数を自動生成する請求項１または２記載の高位合成方法。
【請求項４】
処理の動作のみを記述した動作記述から、レジスタトランスファレベルの論理回路を合成する高位合成装置において、
該動作記述からバス接続リソースの情報を抽出するバス接続リソース抽出手段と、バス接続させる通信路およびメモリ、レジスタに関する該バス接続リソースの情報を格納するバス接続リソースデータベースと、事前にバスプロトコルが格納されたバスプロトコルライブラリと、該バス接続リソースデータベースおよひ該バスプロトコルライブラリを参照して、対象とするバスインターフェイス回路を自動生成するバスインターフェイス生成手段とを有した高位合成装置。
【請求項５】
抽出した前記バス接続リソースの情報およびバス接続リソースデータベースを参照し、対象とするバスに関する組み込みソフト用ヘッダファイルを自動生成する組み込みソフト用ヘッダファイル生成手段を有した請求項４記載の高位合成装置。
【請求項６】
抽出した前記バス接続リソースの情報およびバス接続リソースデータベースを参照し、対象とするバスに関する組み込みソフト用ライブラリ関数を自動生成する組み込みソフト用ライブラリ関数生成手段を有した請求項４または５記載の高位合成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、処理の動作のみを記述した動作記述によって表現された半導体集積回路（ＬＳＩ）の論理回路を自動生成する高位合成方法および、それに用いる高位合成装置に関し、特に、後述するＣ言語のような抽象度の高い言語で記述された動作記述から、ハードワイヤ−ド回路を合成する技術において、汎用ＣＰＵなどの外部回路とデータ転送するために、プロトコルが決められたバスに接続するためのインターフェイス回路を自動生成する高位合成方法および、それに用いる高位合成装置に関する。
【０００２】
【従来の技術】
近年の半導体集積回路（ＬＳＩ）の微細化により大規模なシステムＬＳＩが実現可能になっており、このようなシステムＬＳＩを効率的に設計およびその検証を行うことができる環境が求められている。
【０００３】
そこで、１９９０年代に入って実用化され始めた論理合成ツールに続き、ハードウエアの構造に関する情報は含まず、動作のみを記述した動作記述から、レジスタトランスファレベル（以下、ＲＴレベルという）の記述を合成する動作合成ツールが実用段階に入り、人手設計に比べて遜色のないＬＳＩの設計が短期間で行なわれることが可能になってきている。
【０００４】
このような動作合成ツールを使用する場合には、ＬＳＩの本質的な動作を決定するアルゴリズム設計が人手設計の大部分を占めるため、設計者はアルゴリズム設計に集中することができ、回路の品質も向上させることができる。
【０００５】
システムＬＳＩのような大規模なデジタルＬＳＩの上流設計においては、まず、システム全体のアルゴリズムを検討し、それの検証を行う「アルゴリズム設計」が行われる。ここでは、プログラミング言語である「Ｃ言語」などのソフトウエア記述用言語を用い、ワークステーションやパーソナルコンピュータ上で設計・検証を行い、アルゴリズムの検討が行われる。その後、システムで必要な個々の処理内容について、ハードウエア記述用言語で動作記述を行い、検証を行うことになる。このため、始めにソフトウエア記述用言語を用いて記述したアルゴリズムを、再度、ハードウエア記述用言語で動作記述を用いて書き直す必要がある。そこで、従来から、「Ｃ言語」をベースにしたシステム全体のアルゴリズム、または動作記述から回路を合成する手法（高位合成）が提案されている。このような従来技術として、例えば特開平１０−１１６３０２号公報「集積回路の設計方法及びそれによって設計された集積回路」が挙げられる。
【０００６】
このように、現在、「Ｃ言語」のような抽象度の高い言語を用いて、音声処理や画像処理などのアプリケーションを実現するハードウエアの動作を記述し、回路を合成してハードウエア化する高位合成が行なわれている。
【０００７】
また、大規模なシステムを開発する場合には、処理の一部をプロセッサ上で実行するソフトウエアとして実装し、仕様変更や機能拡張を行い安くすることがある。この場合、ＡＳＩＣ（Application Specific Integrated Circuit；特定用途向けＩＣ）や、ソフトウエアを実行するＣＰＵ（中央演算処理装置）、メモリなどの複数の機能ブロックを接続してシステムを構築することになる。このようなシステムでは、各機能ブロック間のデータ転送は、予め転送プロコトルが、決められたバスを介して行なわれる。したがって、各機能ブロックには、バスに接続するためのバスインターフェイス回路を付加する必要がある。
【０００８】
バスインターフェイス回路の動作は、プロトコルに従って、制御信号やアドレスを解釈してバス上のデータを各機能ブロック内のリソース（記憶素子）に読み込んだり、バスに対して各機能ブロック内の所望のデータを出力する。これらの動作は、各機能ブロックで実現するアプリケーションに比較すると原始的であり、動作記述で表現して合成しても効率が悪い。また、タイミングが決まっているインターフェイス回路は、動作合成に向かなかった。これは、回路構造に関する情報を持たない動作記述から論理回路を得る動作合成では、スケジューリングによってデータ転送のタイミングが決まっているからである。
【０００９】
さらに、データ転送のタイミングに関する制約を追加すれば、インターフェイス回路のタイミング仕様に合った回路を合成することも可能であるが、動作記述が複雑になったり、動作合成される他の回路部分の性能が悪くなったり、回路をＬＳＩ化したときにこの回路部分の面積が大きくなったりしてしまうなどの悪影響が生じることがあった。
【００１０】
そこで、従来、インターフェイス回路は、主に、人手設計により別設計され、アプリケーション部に付加されてきた。この従来技術の設計フローチャートを図２４に示している。図２４に示すように、従来技術の設計では、インターフェイス回路以外の回路部分については、「動作記述」から、所定の各種処理を経て、「ＲＴレベル回路記述」が生成されるが、インターフェイス回路のみ、「人手設計」により別設計され、「ＲＴレベル回路記述」とインターフェイス回路の設計とが「全体回路記述」として合成されてきた。
【００１１】
なお、上記所定の各種処理としては、詳細には後述するが、図２４に示すように、処理の動作のみを記述した動作記述を構文解析する「動作記述解析部」と、この動作記述における演算間の実行順序の依存関係を表現する「コントロールデータフローグラフ（以下、ＣＤＦＧという）生成部」と、ＣＤＦＧの各演算および入出力を、各ステップに対応した時間に順次割り当てる「スケジューリング部」と、スケジューリングされたＣＤＦＧの実行に必要な演算器、レジスタおよび入出力ピンをそれぞれ、各部に割り当てる「アロケーション部」と、ＣＤＦＧのデータ依存枝に対応した回路パス（マルチプレクサなど）を生成する「データパス生成部」と、アロケーション処理およびデータパス生成処理により生成された演算器、レジスタおよびマルチプレクサを制御するコントローラを生成する「コントローラ生成部」とを有している。
【００１２】
【発明が解決しようとする課題】
上述した従来技術では、インターフェイス回路を人手設計する必要があるが、アプリケーションが複雑になり、多くの通信路、メモリ、レジスタなどのリソース（記憶素子）に対してバスを介したデータ転送が必要になると、人手設計では管理が大変になり、誤りが発生し易くなる。
【００１３】
また、アプリケーションとは別に設計されるため、アプリケーションが変更され、リソース数やデータタイプが変わる度にインターフェイス回路を人手にて修正する必要が生じる。
【００１４】
さらに、多くの回路の設計開発では、仕様が変更されることが多く、回路の入出力が変更されると、それに合わせてインターフェイス回路も修正しなければならず、これらの変更は時間のかかる作業となり、設計期間が延びる原因になっていた。
【００１５】
また、人手設計では、誤りが生じる可能性もあった。また、バスを介して、メモリのデータ転送を行うケースも多く、このようなケースにおいても、従来技術の人手設計では、データ転送を行うメモリアドレスを管理しておく必要があり、人手設計では管理が大変になり、誤りが発生しやすい。
【００１６】
さらに、前述したように、システムが大規模化すると、処理の一部をＣＰＵ上のソフトウエアとして実装される場合があり、この場合、大規模なシステムには、ソフトウエアを実行するＣＰＵが必要となり、ハードウエアとソフトウエアで構成されるシステムとなる。そこでは、ハードウエアの開発も別途行う必要がある。ハードウエアとソフトウエア間でデータ転送を行うには、ＣＰＵ内のリソースのアドレスなどを指定する必要があり、ここでも、アドレスなどの情報管理が必要となって、人手管理では誤りが発生しやすい。
【００１７】
本発明、上記事情に鑑みて為されたもので、動作記述から、外部回路とデータ転送を行うために、プロトコルが決められたバスに接続するためのバスインターフェイス回路を自動生成することができる高位合成方法および、それに用いる高位合成装置を提供することを目的とする。
【００１８】
【課題を解決するための手段】
本発明の高位合成方法は、処理の動作のみを記述した動作記述から、レジスタトランスファレベルの論理回路を合成する高位合成方法において、バス接続リソース抽出手段が該動作記述からバス接続リソースの情報を抽出するステップと、バスインターフェイス生成手段が、バス接続させる通信路およびメモリ、レジスタに関する該バス接続リソースの情報が格納されるバス接続リソースデータベースおよび、事前にバスプロトコルが格納されたバスプロトコルライブラリを参照して、対象とするバスインターフェイス回路を自動生成するステップとを有するものであり、そのことにより上記目的が達成される。また、これに用いる本発明の高位合成装置は、処理の動作のみを記述した動作記述から、レジスタトランスファレベルの論理回路を合成する高位合成装置において、動作記述からバス接続リソースの情報を抽出するバス接続リソース抽出手段と、バス接続させる通信路およびメモリ、レジスタに関するバス接続リソースの情報を格納するバス接続リソースデータベースと、事前にバスプロトコルが格納されたバスプロトコルライブラリと、バス接続リソースデータベースおよひバスプロトコルライブラリを参照して、対象とするバスインターフェイス回路を自動生成するバスインターフェイス生成手段とを有したものであり、そのことにより上記目的が達成される。
【００１９】
この構成により、バス接続リソースデータベースおよびバスプロトコルライブラリを参照することで、従来は人手設計に頼らざるを得なかったバスインターフェイス回路を自動生成して、動作記述から、このバスインターフェイス回路を含む全体回路のＲＴレベル回路に合成することが可能となる。よって、回路内のリソースの管理が簡単なものになると共に、人手設計では避けられない誤りを防止することが可能となって、設計品質の向上、設計期間の短縮を図ることが可能になる。
【００２０】
また、好ましくは、本発明の高位合成方法において、組み込みソフト用ヘッダファイル生成手段が前記バス接続リソースデータベースを参照し、対象とするバスに関する組み込みソフト用ヘッダファイルを自動生成する。また、好ましくは、本発明の高位合成装置は、抽出したバス接続リソースの情報およびバス接続リソースデータベースを参照し、対象とするバスに関する組み込みソフト用ヘッダファイルを自動生成する組み込みソフト用ヘッダファイル生成手段を有する。
【００２１】
この構成により、システム内にＣＰＵが存在した場合には、リソース情報を参照することで、ヘッダファイルを自動的に生成するので、従来、人手で管理していたリソースの情報管理から、人手を排除できて、設計品質の向上、設計期間の短縮を図ることが可能になる。
【００２２】
さらに、好ましくは、本発明の高位合成方法において、組み込みソフト用ライブラリ関数生成手段がバス接続リソースデータベースを参照し、対象とするバスに関する組み込みソフト用ライブラリ関数を自動生成する。また、好ましくは、本発明の高位合成装置において、抽出したバス接続リソースの情報およびバス接続リソースデータベースを参照し、対象とするバスに関する組み込みソフト用ライブラリ関数を自動生成する組み込みソフト用ライブラリ関数生成手段を有する。
【００２３】
この構成により、システム内にＣＰＵが存在した場合には、リソース情報を参照することで、ライブラリ関数を自動的に生成するので、従来、人手で管理していたリソースの情報管理から、人手を排除できて、設計品質の向上、設計期間の短縮を図ることが可能になる。
【００２４】
【発明の実施の形態】
以下、本発明の実施形態の高位合成装置および、それを用いた高位合成方法について図面を参照しながら説明する。
【００２５】
図１は、本発明の一実施形態における高位合成装置の構成を示すブロック図である。図１において、高位合成装置１は、動作記述格納手段２と、動作記述解析手段３と、バス接続リソース抽出手段４と、バス接続リソースデータベース５と、ＣＤＦＧ生成手段６と、スケジューリング手段７と、アロケーション手段８と、データパス生成手段９と、コントローラ生成手段１０と、バスプロトコルライブラリ１１と、バスインターフェイス生成手段１２と、ＲＴレベル回路記述生成手段１３と、ＲＴレベル回路記述格納手段１４とを有し、動作記述から生成される演算器、レジスタ、データパスおよびコントローラ回路などに、バスインターフェイス生成手段１２により自動生成されたバスインターフェイス回路を付加して、全体のＲＴレベル回路を合成するものである。
【００２６】
動作記述格納手段２は、処理の動作のみを記述した動作記述を格納するものであり、以下の説明で、動作記述は、「Ｂａｃｈ−Ｃ」による記述を用いる。「Ｂａｃｈ−Ｃ」とは、Ｃ言語を基に、データのビット幅の指定、明示的な並列実行記述のための構文、並列実行記述間のデータ通信命令を追加した、システムのアルゴリズム記述からのＬＳＩ設計を支援する言語系であり、その更なる詳細内容については、文献「Ｂａｃｈ；Ｃ言語を用いたＬＳＩ設計環境」第１１回 回路とシステム（軽井沢）ワークショップ、および、文献「ハードウエアコンパイラＢａｃｈ」信学技報Technical Report of IEICE CRSY97−87（1997−10）に述べられている。
【００２７】
その動作記述の一例を図２に示している。
【００２８】
図２は、図１の動作記述格納手段に格納される動作記述の一例を示す図であり、この動作記述は、前述した「Ｂａｃｈ−Ｃ」による記述を用いている。図２において、動作記述はバスへのデータ転送を含み、その第１行目でリソースｘをバスstdbusに接続することを宣言し、その第２行目で、そのアドレスが0x4000であることを定義している。また、第３行目〜第６行目までに記述されているcircuit()関数は、動作合成の対象となる回路の動作を示し、同期通信路inからデータを受け取り、非同期通信路ｘが示す値との積を演算し、その演算結果を同期通信路outに出力する回路動作を表している。さらに、第８行目〜第１３行目までに記述されているtbench()関数は、回路の外部環境の動作を示し、非同期通信路ｘに値「２」、同期通信路inに値「１」を設定し、同期通信路outから、回路での演算結果を受信する動作を表している。さらに、第１５行目〜第２４行目までに記述されているmain()関数は、回路と外部環境の全体の動作を表している。
【００２９】
ここで、バスに接続するリソースは上記動作記述上で以下のように記述する。
【００３０】
♯Pragma  stdbus  res name
♯Pragma  busaddr  res name  addr
res nameは、リソースの識別子を表し、stdbusは、バスの種類（プロトコルの種類）の情報を含む。また、busaddrは、リソースの識別子res nameと、バスのアドレス空間でのアドレスaddrを指定することを意味する。
【００３１】
以上のバスに関するリソースの情報を追加した動作記述を、後述するバス接続リソース抽出手段４で抽出することにより、バスに接続されるリソースの情報が得られる。
【００３２】
ユーザがリソースを指定する手段としては、上述したように、動作記述中で、バスに接続するリソースを記述する方法以外に、コマンド発行時にオプションとして指定する方法もあるが、上記のように、バスに接続されるリソースの識別子、リソースを接続するバスプロトコルの種類、リソースに割り当てるアドレスが指定できれば、他の方法でも構わない。リソースの識別子が分かれば、動作記述を解析し、そのリソースに対して宣言されているデータのビット幅を取得することができる。
【００３３】
動作記述解析手段３は、処理の動作のみを記述した上記動作記述の構文を解析するものである。
【００３４】
バス接続リソース抽出手段４は、処理の動作のみを記述した動作記述から、動作記述で指定された外部とのデータ通信用の通信路・メモリを抽出する。具体的には、図２に示す動作記述に対して、バスの種類がstdbusで、そのバスに接続されるリソースとして非同期通信路ｘを使用、そのアドレスが0x4000であることなどが抽出される。
【００３５】
バス接続リソースデータベース５は、バス接続リソース抽出手段４で抽出した通信路・メモリ、その通信路・メモリを特定するアドレスおよびデータ幅などのリソースの情報を保存するものである。このリソースの情報は、更に説明すると、バスに接続されるリソース（通信路・メモリ）の識別子、リソースを接続するバスプロトコルの種類、リソースに割り当てるアドレス、リソースのデータ幅である。
【００３６】
ＣＤＦＧ生成手段６は、演算の実行順序の依存関係を表現するＣＤＦＧを生成するものである。このＣＤＦＧとは、入出力、演算、定数、通信（送信および受信）、分岐、ループを節点とし、データの依存関係を有向枝（データの依存枝）とするグラフであり、ＣＤＦＧは、例えば図２に示す動作記述から、図３に示すように、同期通信路inからのデータ入力rcv(in)６０、非同期通信路ｘのデータ入力６１、演算器６２、同期通信路outへの演算結果の出力send(out)６３が節点となり、これらの間をデータ依存枝６４〜６６のそれぞれが接続されて構成される。
【００３７】
スケジューリング手段７は、ＣＤＦＧの各演算および入出力を、ステップと呼ばれるクロックに対応した時間に順次割り当てるものである。例えば図４に、図３のＣＤＦＧを３つのステップにスケジューリングした処理結果を示している。
【００３８】
アロケーション手段８は、スケジューリングされたＣＤＦＧの実行に必要な演算器、レジスタおよび入出力ピンをそれぞれ生成し、ＣＤＦＧ中の演算を演算器に、クロック境界を横切るデータ依存枝をレジスタに、入出力を入出力ピンにそれぞれ割り当てるものである。例えば図５に示すように演算６２がその演算内容により乗算器８０に割り当てられ、また、例えば図６に示すようにクロック境界を横切るデータ依存枝６４〜６６がレジスタ８１，８２に割り当てられる。この場合、データ依存枝６４，６６は、異なるクロック境界を横切っているために、動作する時間が異なることから、同一のレジスタ８１に割り当てられている。また、例えば図７に示すように入出力６０，６１，５３は、入力ピン８３，８４および出力ピン８５に割り当てられる他、それらのデータピン以外に、制御信号入力ピン８６，８７および制御信号出力ピン８８，８９に割り当てられる。
【００３９】
データパス生成手段９は、ＣＤＦＧのデータ依存枝６４〜６６に対応したデータパス（マルチプレクサ）を生成するものである。例えば図８にデータパス生成結果の一例を示している。図８では、データ依存枝６４に対応するデータパス９０〜９２が生成され、データ依存枝６５に対応するデータパス９３，９４が生成され、データ依存枝６６に対応するデータパス９５，９１，９２，９６が生成される。この場合、アロケーション処理の図６でレジスタ８１を共用としたため、図８ではマルチプレクサ９７をデータパス９０，９１間に追加している。
【００４０】
コントローラ生成手段１０は、上記アロケーション処理およびデータパス生成処理により生成された演算器８０、レジスタ８１，８２、マルチプレクサ９７を制御するコントローラを生成するものである。例えば図９にコントローラ生成の結果を示している。図９では、コントローラ１００からのレジスタ８１，８２への制御信号線１０１，１０２、マルチプレクサ９７への制御信号線１０３、入力ピン８６，８７への制御信号線１０４，１０５、出力ピン８９，８８への制御信号線１０６，１０７が生成される。
【００４１】
バスプロトコルライブラリ１１は、バスのタイミング、制御用の信号線の種類がライブラリとして記録されている。
【００４２】
バスインターフェイス生成手段１２は、これらバス接続リソースデータベース５およびバスプロトコルライブラリ１１を参照してバスインターフェイス回路を生成するものであり、その詳細な説明を図１０に示している。
【００４３】
図１０は、図１のバスインターフェイス生成手段の詳細な構成を示すブロック図である。図１０において、バスインターフェイス生成手段１２は、バス接続リソースデータベース読み込み部１２１と、バスプロトコルライブラリ読み込み部１２２と、バス側接続回路生成部１２３と、ユーザ回路側接続回路生成部１２４と、アドレスデコーダ生成部１２５とを有している。
【００４４】
バス接続リソースデータベース読み込み部１２１は、バス接続リソースデータベース５を読み込み、バスに接続するリソースの識別子、接続するバスの種類、データのビット幅、アドレスを取得するようになっている。
【００４５】
バスプロトコルライブラリ読み込み部１２２は、バスプロトコルライブラリ１１を読み込み、各バスプロトコルの種類について、バスで使用される信号の種類、各信号の入出力の方向、各信号のビット幅、各信号の入出力のタイミングを取得するようになっている。
【００４６】
バス側接続回路生成部１２３は、バスで使用される信号の種類を参照し、バスとインターフェイス回路間の信号の入出力のための回路を生成するものである。
【００４７】
ユーザ回路側接続回路生成部１２４は、高位合成で自動生成されるユーザ側回路とインターフェイス回路を入出力するための回路を生成するものである。ここでは、バスに接続される全てのリソースについて、バスからリソースへの書き込み時にバスのデータをリソースに伝播するための回路を生成し、リソースからバスへの読み出し時にリソースのデータをバスへ出力するための回路を生成する。
【００４８】
アドレスデコーダ生成部１２５は、バス側から入力されるアドレスと、読み出し・書き込み時の制御信号を解釈し、アドレスに対応するリソースに読み出しイネーブル信号、または、書き込みイネーブル信号を出力する回路を生成するものである。この結果、生成されるインターフェイス回路は、以下に示す回路構成がＲＴレベルで合成される。
【００４９】
非同期通信路を用いたデータ転送では、送信側と受信側は任意のタイミングでデータの読み書きを行う。この場合、回路構成は図１１のように合成される。送信側回路は、送信を行うステップでデータをwdataに出力し、書き込みイネーブル信号をwenに出力する。受信側回路は、受信を行うステップでrdataからデータを読み込む。
【００５０】
また、メモリを用いたデータ転送では、送信側回路と受信側回路は任意のタイミングでデータの読み書きを行う。この場合、回路構成は、図１２のように合成される。送信側回路は、送信を行うステップでデータをwdataに出力し、アドレスをwaddrに出力し、書き込みイネーブル信号をwenに出力する。受信側回路は、受信を行うステップで読み出すメモリアドレスをraddrに出力し、読み出しイネーブル信号をrenに出力し、rdataからデータを読み込む。
【００５１】
さらに、同期型通信路を用いたデータ転送では、送信側回路と受信側回路はハンドシェークを確立してデータ転送を行う。この場合、回路構成は図１３のように合成される。送信側回路は、wtx（初期状態はロウレベル）をハイレベルにし、データをwdataに出力し、wrxがハイレベルになるまで待つ。wrxがハイレベルになると、次のステップでwtxをロウレベルにする。また、受信側回路は、受信するステップでrtx（初期状態はロウレベル）をハイレベルにし、rtxがハイレベルになるまで待つ。rtxがハイレベルになると、rdataからデータを読み出し、次のステップでrtxをロウレベルにする。また、双方向のデータ転送がある場合には、送信側回路と受信側回路の両方の信号をそれぞれの回路が持つ。
【００５２】
以上により、図１のバスインターフェイス生成手段１２は、バス接続リソースデータベース５に保存された通信路、メモリを参照し、また、バスプロトコルライブラリ１１を参照し、また、バスで使われる送信プロトコルに従い、送信モードを示す制御信号、転送を行うレジスタやメモリの指定を行うアドレス、転送するデータ、転送終了を示すレスポンスをバスプロトコルライブラリ１１を参照することにより、予め決められたタイミングで信号を入出力する回路を生成する。
【００５３】
なお、図１のバスインターフェイス生成手段１２で生成されるインターフェイス回路は、色々な回路が考えられる。例えば図１２のようなメモリ回路として、具体的には、通常のメモリ以外にも、ＦＩＦＯを使った回路や、スタックを使った回路などが考えられる。したがって、図１のバスインターフェイス生成手段１２は、通信路の送信部、受信部の入出力動作仕様が分かれば、その仕様に合わせて、上記各部１２１〜１２５により為される各処理に従い、インターフェイス回路の生成を行う。したがって、図１のバスインターフェイス生成手段１２は、図１１〜図１３に示す、インターフェイス回路以外の回路実装方法についても対応することができる。
【００５４】
図１のＲＴレベル回路記述生成手段１３は、生成されたバスインターフェイス回路を含む全体回路のＲＴレベルの回路を合成し、ＲＴレベル回路記述を出力するものである。
【００５５】
ＲＴレベル回路記述格納手段１４は、ＲＴレベル回路記述生成手段１３からのＲＴレベル回路記述を格納するものである。
【００５６】
次に、高位合成装置１は、組み込みソフト用ヘッダファイル生成手段１５と、組み込みソフト用ヘッダファイル１６と、組み込みソフト用ライブラリ関数生成手段１７と、組み込みソフト用ライブラリ関数ファイル１８とを有し、システム内に汎用ＣＰＵが必要である場合に、組み込みソフト用ヘッダファイル生成手段１５により組み込みソフト用ヘッダファイルを自動生成し、また、組み込みソフト用ライブラリ関数生成手段１７により組み込みソフト用ライブラリ関数を自動生成するものである。
【００５７】
組み込みソフト用ヘッダファイル生成手段１５は、バス接続リソースデータベース５を参照し、汎用ＣＰＵのプログラム用に組み込みソフト用ヘッダファイルを自動生成するものである。なお、汎用ＣＰＵで動作するプログラムでは、汎用ＣＰＵのメモリ空間での、バスに接続する各通信路のアドレスをユーザが指定することにより、リソースの情報が、前述したように、バス接続リソース抽出手段４によって抽出された後、バス接続リソースデータベース５に保存されている。この組み込みソフト用ヘッダファイル生成手段１５の詳細な構成を図１４に示している。
【００５８】
図１４は、図１の組み込みソフト用ヘッダファイル生成手段の詳細な構成を示すブロック図である。図１４において、組み込みソフト用ヘッダファイル生成手段１５は、バス接続リソースデータベース読み込み部１５１と、組み込みソフト用ヘッダファイル出力部１５２とを有している。
【００５９】
バス接続リソースデータベース読み込み部１５１は、図１のバス接続リソースデータベース５を読み込み、組み込みソフト用ヘッダファイル出力部１５２で、全てのリソースに対して割り当てられたアドレスを、図１の組み込みソフト用ヘッダファイル１６に出力する。その出力フォーマットは、以下のようになる。
【００６０】
♯define  ADDR indentifier  address
ここで、indentifierは、リソースの名前、addressはアドレスを示す数値である。
【００６１】
組み込みソフト用ヘッダファイル１６は、組み込みソフト用ヘッダファイル生成手段１５からのヘッダファイル出力をファイリングするものである。
【００６２】
組み込みソフト用ライブラリ関数生成手段１７は、バス接続リソースデータベース５を参照し、汎用ＣＰＵのプログラム用に組み込みソフト用ライブラリ関数を生成するものである。なお、前述したように、バス用リソース抽出手段４において、バスに接続されるリソースの名前、リソースの種類が抽出された後、これらは、バス通信路データベースであるバス接続リソースデータベース５にて保存されている。
【００６３】
この組み込みソフト用ライブラリ関数としては、バスを介しての通信に必要な以下の関数である。
【００６４】
Send()関数；ＣＰＵから、バスを介してデータを送信（書き込み）するための関数である。
【００６５】
Receive() 関数；ＣＰＵから、バスを介してデータを受信（読み出し）するための関数である。
【００６６】
Sync send() 関数；通信相手に送信可能状態であることを知らせる、ハンドシェーク信号を送信するための関数である。
【００６７】
Sync Receive()関数；通信相手に受信可能状態であることを知らせる、ハンドシェーク信号を受信するための関数である。
【００６８】
組み込みソフト用ライブラリ関数ファイル１８は、組み込みソフト用ライブラリ関数生成手段１７からのライブラリ関数出力をファイリングするものである。
【００６９】
現在、ＬＳＩの設計は、パーソナルコンピュータやワークステーション上で各種設計・検証用ソフトウエアを駆使して行なわれており、本発明の高位合成方法も、これらハードウエア内にインストールされ、または、ネットワーク環境の下、設計環境の一部分として使用される。そこで、本発明の高位合成方法が、このよな環境の下で使用できるようにされた設計装置が、本発明の高位合成装置である。
【００７０】
上記構成により、その動作を説明する。
【００７１】
図１５は、図１の高位合成装置の動作を示す処理フローチャートである。なお、図１５では、図２に示す動作記述格納処理からＲＴレベルの回路記述を合成する処理までの各処理フロー中で、本発明の特徴部分であるバス接続リソース抽出・格納処理、組み込みソフト用ヘッダファイル生成・ファイリング処理、組み込みソフト用ライブラリ関数生成・ファイリング処理を除く高位合成の処理フローは、図２４と略同様であるが、ここでは、図２に示す動作記述に基づいて説明することにし、その更なる詳細な説明については、特願平１２−０２０９７３号「高位合成方法並びに高位合成方法の実施に使用される記憶媒体」に記載されている。
【００７２】
図１５に示すように、まず、ステップＳ１で、図２に示す動作記述が動作記述格納手段２に与えられると、ステップＳ２で、動作記述解析手段３が、この動作記述の構文解析を行う。
【００７３】
次に、ステップＳ３でバス接続リソース抽出・格納処理を行う。即ち、図２に示す動作記述で指定された外部とのデータ通信用の通信路・メモリ、例えば、バスの種類stdbus、バスに接続されるリソースとして使用する非同期通信路ｘ、そのアドレスが0x4000などが抽出される。その通信路、アドレスおよびデータ幅などのリソース情報を、バス接続リソースデータベース５に保存する。次のステップＳ４からは、図２に示す動作記述において、circuit()関数で記述された回路の合成に入る。
【００７４】
ステップＳ４において、ＣＤＦＧ生成処理を行う。例えば図２に示す動作記述から、図３に示すように、同期通信路inからのデータ入力rcv(in)６０、非同期通信路ｘのデータ入力６１、演算６２、同期通信路outへの演算結果の出力send(out)６３が節点となるＣＤＦＧが生成される。
【００７５】
さらに、ステップＳ５で、スケジューリング処理を行う。例えば図４に示すように、図３のＣＤＦＧの各演算および入出力が３つのステップにスケジューリングされる。
【００７６】
さらに、ステップＳ６でアロケーション処理を行う。このアロケーション処理として、例えば、図５のように演算６２が乗算器８０に、図６のようにデータ依存枝６４〜６６がレジスタ８１，８２に、図７のように入出力６０，６１，６３が、入力ピン８３，８４および出力ピン８５に、これ以外の入力および出力に、制御信号入力ピン８６，８７および制御信号出力ピン８８，８９が割り当てられる。
【００７７】
さらに、ステップＳ７でデータパス生成処理を行う。例えば図８に示すように、データ依存枝６４に対応するデータパス９０〜９２が生成され、データ依存枝６５に対応するデータパス９３，９４が生成され、データ依存枝６６に対応するデータパス９５，９１，９２，９６が生成される。さらに、レジスタ８１を共用としたため、マルチプレクサ９７が追加されている。
【００７８】
さらに、ステップＳ８でコントローラ生成処理を行う。例えば図９に示すように、コントローラ１００が生成され、このコントローラ１００のレジスタ８１，８２への制御信号線１０１，１０２、マルチプレクサ９７への制御信号線１０３、入力ピン８６，８７への制御信号線１０４，１０５、出力ピン８９，８８への制御信号線１０６，１０７が生成される。
【００７９】
以上によって、本発明の特徴部分であるインターフェイス回路部分を除く、処理に必要なデータバスやコントローラ１００を持つＲＴレベルの回路モデルが出来上がる。
【００８０】
次に、ステップＳ９で本発明の特徴部分であるバスインターフェイス生成処理を行う。バスインターフェイス生成処理とは、バスを介した外部とのデータ転送を行うためのインターフェイス回路を生成する処理である。このバスインターフェイス生成処理について、以下に詳細に説明する。
【００８１】
まず、図２で非同期通信路ｘの使用が宣言されており、非同期通信路ｘの実装としては、図１６に示すようにレジスタregX１６０を用いて実装する。
【００８２】
ここで、使用するバスstdbusは、バス接続を要求するマスタとスレーブから構成されるマスタ・スレーブ型のバスとし、合成する回路をスレーブとするインターフェイス回路の生成を行い、スレーブから見たときの信号変化のタイミングは、図１７に示すように予め決まっているものとする。また、使用するバスstdbusの仕様は以下の仕様（１）〜（６）とする。
【００８３】
（１）入力信号SEL，RW，ADDR，WDATA，RDATAは、全てクロック信号CLKの立ち上がり時の値が参照される。
【００８４】
（２）スレーブ回路は、スレーブ選択信号SELがハイレベルならばそれ自体が選択され、読み書きを行う。
【００８５】
（３）入力信号RWは、ハイレベルならばスレーブ回路への書き込みを表し、ローレベルならばスレーブ回路からの読み出しを表すものとする。
【００８６】
（４）アドレス信号ADDRは、書き込み時または読み出し時のアドレスとする。
【００８７】
（５）書き込みデータ信号WDATAは、スレーブ回路への書き込みデータとする。
【００８８】
（６）読み出しデータ信号RDATAは、スレーブ回路から読み出されたデータとする。
【００８９】
このように、このバスstdbusの書き込みまたは読み出しのタイミングは、それ自体が選択された次のクロックで行なわれる仕様であり、このようにタイミングが事前に規定されている回路は、前述したように、従来技術の動作合成では、記述が困難であった。
【００９０】
バスstdbusに関する図１７のタイミング、および上記仕様（１）〜（６）が、事前に図１のバスプロトコルライブラリ１１に登録されている。すると、バス接続リソース抽出手段４による抽出内容で使用を宣言された結果、バスの種類やバスに接続されるリソースの情報が、バス接続リソースデータベース５に保存され、バスプロトコルライブラリ１１から、このバスstdbusが選ばれ、バスインターフェイス生成手段１２でバスインターフェイス回路が生成される。
【００９１】
次に、ステップＳ１０でＲＴレベル回路記述生成・格納処理を行う。ＲＴレベル回路記述生成手段１３は、生成されたバスインターフェイス回路を含む全体回路のＲＴレベルの回路を生成し、ＲＴレベル回路記述が出力する。ＲＴレベル回路記述格納手段１４は、このＲＴレベル回路記述を格納する。
【００９２】
このバスインターフェイス回路を含む全体の回路記述が生成された結果を、図１８に示している。図１８において、バスインターフェイス回路１８０は、太い点線で囲った回路部分であり、バスインターフェイス回路１８０を除く回路部分１８６とバスstdbus１８５とを接続している。また、アドレスデコーダ１８１は、スレーブ選択信号SEL、入力信号RW、アドレス信号ADDRから、レジスタregX１６０への書き込みイネーブル信号XWE１８２を生成すると共に出力イネーブル信号１８３を生成する。また、読み出しデータ信号RDATAを出力するために、レジスタregXからの読み出しパス１８４が追加されている。
【００９３】
この結果、生成されたバスインターフェイス回路１８０の動作としては、クロックCLKの立ち上がりエッジで、スレーブ選択信号SELと入力信号RWがハイレベルで、かつ、アドレス信号ADDRがバスのアドレスを示すとき、書き込みイネーブル信号XWE１８２をハイレベルにし、それ以外のときは、書き込みイネーブル信号XWE１８２をローレベルにする。一方、図２の第２行目で、バスのアドレスを0x4000と宣言しており、図１９のタイミングチャートに示すように、サイクルcycle0の後半から、アドレス信号ADDRがバスのアドレスを0x4000を示し、これが、次のクロックCLKの立ち上がりエッジでアドレスデコーダ１８１に取り込まれ、サイクルcycle1で書き込みイネーブル信号XWE１８２がハイレベルになり、書き込みデータ信号WDATAの値0x0120がレジスタregX１６０に取り込まれている。また、サイクルcycle2の後半から、アドレス信号ADDRがバスのアドレスを0x4000を示し、これが、次のクロックCLKの立ち上がりエッジでアドレスデコーダ１８１に取り込まれ、入力信号RWがローレベルのため、レジスタregX１６０の値0x0120が、読み出しデータ信号RDATAに出力される。
【００９４】
以上、説明したように本発明によって、バスの使用を含む動作記述からバスのインターフェイス回路１８０を含むＲＴレベルの回路が合成される。そこで、この後、ＲＴレベルの回路を市販の論理合成ツールで回路合成を行うことにより、ハードウエア回路に変換することができる。
【００９５】
次に、ステップＳ１１において、システム内に汎用ＣＰＵが存在するかどうかを判定し、システム内に汎用ＣＰＵが存在しない場合は処理を終了し、また、システム内に汎用ＣＰＵが存在する場合には、ハードウエアの設計と並行して行なわれるソフトウエア開発における組み込みソフト用のヘッダファイルの自動生成およびライブラリ関数の自動生成を行う。以下に、ステップＳ１２の組み込みソフト用ヘッダファイル生成・格納処理と、ステップＳ１３の組み込みソフト用ライブラリ関数の自動生成・格納処理について、以下に、その一例を説明する。
【００９６】
図２０は、汎用ＣＰＵとして、ＡＲＭを用いたときの回路の動作記述例を示す図であり、使用するバスはAMBAバスとする。図２０の動作記述の動作は、図２で前述したように、３つの関数main()、circuit()、testbench()から構成されている。関数circuit()は、合成対象の関数、関数testbench()は、テストベンチとする。関数main()では、汎用ＣＰＵとの通信に用いる２つの同期型通信路と、一つの非同期通信路の計３つの通信路が、その第２５行目および第２５行目に宣言されている。関数circuit()では、プラグマamba asbを用いて外部とのデータ転送に用いる通信路・メモリを指定する。同期型通信路は、circuit()回路と汎用ＣＰＵのハンドシェークに、非同期型通信路やメモリはデータ転送に用いるものとする。さらに、汎用ＣＰＵから通信路を特定できるように、各通信路、メモリ、割り込み信号にアドレスを割り当てる。アドレスを、例えば図２１のように割り当てると、図２０の動作記述では第３３行目〜第３５行目のように指定することになる。
【００９７】
この動作記述において、合成対象となるcircuit()回路の動作は以下のようになる。
【００９８】
合成対象となるcircuit()回路は、まず、ARM ＣＰＵから送信許可が出るまで待つ。これには、図２０の第９行目に示すようにreceive()関数を使う。ARM ＣＰＵから送信許可が出れば、非同期通信路dataに対してデータを書き込む。データの書き込みが終われば、ARM ＣＰＵに送信完了を知らせるため、図２０の第１２行目に示すようにsend(bach done,1)を実行する。ここで、send()は、ARM ＣＰＵが受信完了を持たない。また、send()で送信する値は意味かなく、どんな数値であっても値「１」が送信されたものと見なす。
【００９９】
このように、各通信路、メモリにアドレスが割り当てられた動作記述が、本発明の図１の動作記述格納手段２に与えられると、前述したように、バスインターフェイス回路を含むＲＴレベル回路記述がＲＴレベル回路記述生成手段１３により生成されると共に、バス接続リソース抽出手段４で、各リソースの情報が抽出され、組み込みソフト用ヘッダファイル生成手段１５で組み込みソフト用ヘッダファイルが生成される。そこで、図２２に示すように、汎用ＣＰＵであるARM ＣＰＵを使った組み込みソフト用ソフトウエアを作成すると、その第１行目〜第３行目に示すように、ソフトウエアのプログラム内では、各アドレスを定義するヘッダファイルが自動的に付加される。図２２に示す組み込みソフト用ソフトウエアの動作は以下のようになる。
【０１００】
circuit()回路からARM ＣＰＵへのデータ転送では、ARM ＣＰＵが受信可能であることをcircuit()回路に知らせるため、図２２の第５行目に示すように、sync send(ARM READY)を実行し、circuit()回路に対して送信許可を出す。sync send()はライブラリ関数で、指定されたアドレスのデータが「１」になるまで待つ。circuit()回路側でデータの書き込みが終われば、図２２の第８行目に示すように、そのデータを読み出す。データの読み出しが終われば、circuit()回路に対して次のデータの送信を許可するため、図２２の第１０行目に示すようにsync send(ARM READY)を実行する。通常、ARM ＣＰＵのソフトウエアを実行するよりcircuit()回路側の処理の方が早いため、ARM ＣＰＵ側は、可能な限り早い時期に送信を許可しておく。
【０１０１】
ここで、図２２の組み込みソフト用ソフトウエアでは、sync send()などのライブラリ関数が使われている。そこで、ヘッダファイルと同様に、使用する通信路が宣言された動作記述が、図１の動作記述格納手段２に与えられると、前述したように、バスインターフェイス回路１８０を含むＲＴレベル回路がＲＴレベル記述生成手段１３により生成されると共に、バス接続リソース抽出手段４で、各通信路の情報が抽出され、バス接続リソースデータベース５を参照し、組み込みソフト用ライブラリ関数生成手段１７で組み込みソフト用ライブラリ関数ファイルが生成される。この生成された組み込みソフト用ライブラリ関数を図２３に示している。この組み込みソフト用ライブラリ関数を組み込みソフト用ライブラリ関数ファイル１８にファイリングする。
【０１０２】
以上により、本実施形態によれば、従来は人手設計に頼らざるを得なかったバスインターフェイス回路が、動作記述からＲＴレベル回路に合成することができ、回路内のリソースの管理が簡単になると共に、人手設計では避けられない誤りがなくなり、設計品質の向上、設計期間の短縮に多大な効果がある。
【０１０３】
また、システム内にＣＰＵが存在した場合には、ハードウエア開発とソフトウエア開発とが並行して行なわれ、従来、人手で管理していたリソースの情報管理が、ヘッダファイル、ライブラリ関数が自動的に生成されることにより、人手を排除でき、上記と同様に、設計品質の向上、設計期間の短縮に多大な効果がある。
【０１０４】
【発明の効果】
以上のように、請求項１，４によれば、バス接続リソースデータベースおよびバスプロトコルライブラリを参照することで、従来は人手設計に頼らざるを得なかったバスインターフェイス回路を自動生成できて、動作記述から、このバスインターフェイス回路を含む全体回路のＲＴレベル回路に合成することができる。よって、回路内のリソースの管理を簡単に行うことができると共に、人手設計では避けられない誤りを防止することができて、設計品質の向上、設計期間の短縮を図ることができる。
【０１０５】
また、請求項２，５によれば、システム内にＣＰＵが存在した場合には、リソース情報を参照することで、ヘッダファイルを自動的に生成するため、従来、人手で管理していたリソースの情報管理から人手を排除できて、設計品質の向上、設計期間の短縮を図ることができる。
【０１０６】
さらに、請求項３，６によれば、システム内にＣＰＵが存在した場合には、リソース情報を参照することで、ライブラリ関数を自動的に生成するので、従来、人手で管理していたリソースの情報管理から人手を排除できて、設計品質の向上、設計期間の短縮を図ることができる。
【図面の簡単な説明】
【図１】本発明の一実施形態における高位合成装置の構成を示すブロック図である。
【図２】図１の動作記述格納手段に格納される動作記述の一例を示す図である。
【図３】図１のＣＤＦＧ生成手段で生成されたコントロールデータフローグラフを示す図である。
【図４】図１のスケジューリング手段で処理されたスケジューリング結果を示す図である。
【図５】図１のアロケーション手段で演算内容が乗算器として割り当てられた結果を示す図である。
【図６】図１のアロケーション手段でデータ依存枝がレジスタに割り当てられた結果を示す図である。
【図７】図１のアロケーション手段で入出力が各入出力ピンに割り当てられた結果を示す図である。
【図８】図１のデータパス生成手段でデータ依存枝がデータパスに割り当てられた結果を示す図である。
【図９】図１のコントローラ生成手段でコントロール回路が生成されたＲＴレベル回路を示す回路図である。
【図１０】図１のバスインターフェイス生成手段の詳細な構成を示すブロック図である。
【図１１】レジスタを用いた非同期通信路用インターフェイス回路の回路図である。
【図１２】メモリを用いたインターフェイス回路の回路図である。
【図１３】同期型通信路におけるインターフェイス回路の回路図である。
【図１４】図１の組み込みソフト用ヘッダファイル生成手段の詳細な構成を示すブロック図である。
【図１５】図１の高位合成装置の動作を示す処理フローチャートである。
【図１６】図９の回路に対して非同期チャネルにレジスタが追加されたＲＴレベル回路を示す回路図である。
【図１７】バスstdbusのタイミング仕様を示す図である。
【図１８】図１のＲＴレベル回路記述生成手段による、インターフェイス回路を含む全体のＲＴレベル回路記述の生成結果を示す回路図である。
【図１９】図１８のバスstdbusへのデータ転送のタイミングを示す図である。
【図２０】汎用ＣＰＵとしてARMを用いた場合の回路動作記述例を示す図である。
【図２１】バス転送用通信路のアドレス対応関係を示す図である。
【図２２】汎用ＣＰＵとしてARMを用いた場合のプログラミング例を示す図である。
【図２３】バスAMBAを用いた場合のライブラリ関数を示す図である。
【図２４】従来の高位合成装置の動作を示す処理フローチャートである。
【符号の説明】
１    高位合成装置
２    動作記述格納手段
３    動作記述解析手段
４    バス接続リソース抽出手段
５    バス接続リソースデータベース
６    コントロールデータフローグラフ（ＣＤＦＧ）生成手段
７    スケジューリング手段
８    アロケーション手段
９    データパス生成手段
１０    コントローラ生成手段
１１    バスプロトコルライブラリ
１２    バスインターフェイス生成手段
１２１    バス接続リソースデータベース読み込み部
１２２    バスプロトコルライブラリ読み込み部
１２３    バス側接続回路生成部
１２４    ユーザ回路側接続回路生成部
１２５    アドレスデコーダ生成部
１３    レジスタトランスファ（ＲＴ）レベル記述生成手段
１４    ＲＴレベル記述格納手段
１５    組み込みソフト用ヘッダファイル生成手段
１５１    バス接続リソースデータベース読み込み部
１５２    組み込みソフト用ヘッダファイル出力部
１６    組み込みソフト用ヘッダファイル
１７    組み込みソフト用ライブラリ関数生成手段
１８    組み込みソフト用ライブラリ関数ファイル
１８０    バスインターフェイス回路
【図１】
0003852741.tif 000002
【図２】
0003852741.tif 000003
【図３】
0003852741.tif 000004
【図４】
0003852741.tif 000005
【図５】
0003852741.tif 000006
【図６】
0003852741.tif 000007
【図７】
0003852741.tif 000008
【図８】
0003852741.tif 000009
【図９】
0003852741.tif 000010
【図１０】
0003852741.tif 000011
【図１１】
0003852741.tif 000012
【図１２】
0003852741.tif 000013
【図１３】
0003852741.tif 000014
【図１４】
0003852741.tif 000015
【図１５】
0003852741.tif 000016
【図１６】
0003852741.tif 000017
【図１７】
0003852741.tif 000018
【図１８】
0003852741.tif 000019
【図１９】
0003852741.tif 000020
【図２０】
0003852741.tif 000021
【図２１】
0003852741.tif 000022
【図２２】
0003852741.tif 000023
【図２３】
0003852741.tif 000024
【図２４】
0003852741.tif 000025