(57)【特許請求の範囲】
【請求項１】
ライトアクセスされるライトアクセス配列と、前記ライトアクセス配列と配列名が共通する、リードアクセスされるリードアクセス配列とが用いられて、高位合成の対象となる回路の動作が記述されている動作記述コードを、入力するコード入力部と、
配列名が共通するライトアクセス配列とリードアクセス配列との間の連携に用いられる連携バッファを前記高位合成において２個以上生成するためのマルチバッファ生成条件として、ライトアクセス配列に含まれるライトアクセスアドレスに規則性がないこと、及びリードアクセス配列に含まれるリードアクセスアドレスに規則性がないことの少なくともいずれかが定義されているマルチバッファ生成条件情報を、入力する条件情報入力部と、
前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列に含まれるライトアクセスアドレスに規則性があるか否か、及び抽出したリードアクセス配列に含まれるリードアクセスアドレスに規則性があるか否かを判断し、前記ライトアクセス配列に含まれるライトアクセスアドレスに規則性がない場合、及び前記リードアクセス配列に含まれるリードアクセスアドレスに規則性がない場合の少なくともいずれかにおいて、前記マルチバッファ生成条件が成立すると判断する条件判断部と、
前記条件判断部により、前記マルチバッファ生成条件が成立すると判断された場合に、前記ライトアクセス配列と前記リードアクセス配列に対して２個以上の連携バッファを前記高位合成において生成することを指定するバッファ生成指定部とを有することを特徴とする回路設計支援装置。
【請求項２】
前記条件判断部は、
抽出したライトアクセス配列の添え字にループ変数以外の変数が含まれる場合は、前記ライトアクセス配列に含まれるライトアクセスアドレスに規則性がないと判断し、
抽出したリードアクセス配列の添え字にループ変数以外の変数が含まれる場合は、前記リードアクセス配列に含まれるリードアクセスアドレスに規則性がないと判断することを特徴とする請求項１に記載の回路設計支援装置。
【請求項３】
前記条件判断部は、
抽出したライトアクセス配列の添え字が、係数が１であるループ変数の一次式と定数とで表現されている場合以外は、前記ライトアクセス配列に含まれるライトアクセスアドレスの間に規則性がないと判断し、
抽出したリードアクセス配列の添え字が、係数が１であるループ変数の一次式と定数とで表現されている場合以外は、前記リードアクセス配列に含まれるリードアクセスアドレスに規則性がないと判断することを特徴とする請求項１に記載の回路設計支援装置。
【請求項４】
前記条件情報入力部は、ライトアクセスの順序の変更が許容されないこと、及びリードアクセスの順序の変更が許容されないことの少なくともいずれかがマルチバッファ生成条件として定義されているマルチバッファ生成条件情報を入力し、
前記条件判断部は、
前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列においてライトアクセスの順序の変更が許容されるか否か、及び抽出したリードアクセス配列においてリードアクセスの順序の変更が許容されるか否かを判断し、
前記ライトアクセス配列においてライトアクセスの順序の変更が許容されない場合、及び前記リードアクセス配列においてリードアクセスの順序の変更が許容されない場合の少なくともいずれかにおいて、前記マルチバッファ生成条件が成立すると判断することを特徴とする請求項１に記載の回路設計支援装置。
【請求項５】
ライトアクセスされるライトアクセス配列と、前記ライトアクセス配列と配列名が共通する、リードアクセスされるリードアクセス配列とが用いられて、高位合成の対象となる回路の動作が記述されている動作記述コードを、入力するコード入力部と、
配列名が共通するライトアクセス配列とリードアクセス配列との間の連携に用いられる連携バッファを前記高位合成において２個以上生成すべきライトアクセス配列とリードアクセス配列の条件がマルチバッファ生成条件として定義されているマルチバッファ生成条件情報を、入力する条件情報入力部と、
前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列とリードアクセス配列について前記マルチバッファ生成条件が成立するか否かを判断する条件判断部と、
前記条件判断部により、前記ライトアクセス配列と前記リードアクセス配列について前記マルチバッファ生成条件が成立すると判断された場合に、前記ライトアクセス配列と前記リードアクセス配列に対して２個以上の連携バッファを前記高位合成において生成することを指定するバッファ生成指定部とを有し、
前記条件判断部は、
前記動作記述コードから複数のループ文を抽出し、
抽出したループ文から、配列名が共通するライトアクセス配列とリードアクセス配列を抽出し、
抽出した配列名が共通するライトアクセス配列とリードアクセス配列のうちのいずれかの配列の配列名を変更し、
配列名の変更後のライトアクセス配列とリードアクセス配列において、リードアクセス配列ごとに、リードアクセス配列が依存しているライトアクセス配列を特定し、
リードアクセス配列と、リードアクセス配列が依存しているライトアクセス配列とを対にし、
ライトアクセス配列とリードアクセス配列との対ごとに、前記マルチバッファ生成条件が成立するか否かを判断する回路設計支援装置。
【請求項６】
前記回路設計支援装置は、
前記条件判断部によるライトアクセス配列又はリードアクセス配列の配列名の変更が反映されるように、前記動作記述コードを書換えることを特徴とする請求項５に記載の回路設計支援装置。
【請求項７】
前記条件判断部は、
配列名が共通するライトアクセス配列とリードアクセス配列において、リードアクセス配列ごとに、リードアクセス配列が依存している、他のループ文から抽出されたライトアクセス配列を特定することを特徴とする請求項５に記載の回路設計支援装置。
【請求項８】
前記バッファ生成指定部は、
いずれかのライトアクセス配列とリードアクセス配列との対に対して２個以上の連携バッファを生成するよう指定した場合に、
前記ライトアクセス配列とリードアクセス配列との対の抽出元である２つのループ文と他のループ文との関係と、ループ文ごとの演算サイクル数とに基づき、前記２個以上の連携バッファの間でバッファの切替が行われる切替タイミングを算出し、算出した切替タイミングを前記高位合成において前記２個以上の連携バッファに対して適用するよう指定することを特徴とする請求項７に記載の回路設計支援装置。
【請求項９】
ライトアクセスされるライトアクセス配列と、前記ライトアクセス配列と配列名が共通する、リードアクセスされるリードアクセス配列とが用いられて、高位合成の対象となる回路の動作が記述されている動作記述コードを、入力するコード入力部と、
配列名が共通するライトアクセス配列とリードアクセス配列との間の連携に用いられる連携バッファを前記高位合成において２個以上生成すべきライトアクセス配列とリードアクセス配列の条件がマルチバッファ生成条件として定義されているマルチバッファ生成条件情報を、入力する条件情報入力部と、
前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列とリードアクセス配列について前記マルチバッファ生成条件が成立するか否かを判断する条件判断部と、
前記条件判断部により、前記ライトアクセス配列と前記リードアクセス配列について前記マルチバッファ生成条件が成立すると判断された場合に、前記ライトアクセス配列と前記リードアクセス配列に対して２個以上の連携バッファを前記高位合成において生成することを指定するバッファ生成指定部とを有し、
前記条件判断部は、
前記動作記述コードから複数のループ文を抽出し、
前記バッファ生成指定部は、
前記条件判断部により抽出された前記複数のループ文のうちの特定のループ文の実行結果が２つ以上の他のループ文に派生しており、派生先の２つ以上のループ文の実行タイミングを調整する必要があると判断した場合に、
派生先の２つ以上のループ文の実行タイミングの調整のためのタイミング調整バッファの生成を指定することを特徴とする回路設計支援装置。
【請求項１０】
前記バッファ生成指定部は、
前記条件判断部により抽出された前記複数のループ文におけるループ文の間の関係を解析した結果、特定のループ文の実行結果が２つ以上の他のループ文に派生しており、派生先の２つ以上のループ文のうちのいずれかのループ文の実行結果が他のいずれかのループ文に派生している場合に、
派生先の２つ以上のループ文の実行タイミングを調整する必要があると判断することを特徴とする請求項９に記載の回路設計支援装置。
【請求項１１】
前記バッファ生成指定部は、
派生先の２つ以上のループ文の実行タイミングを調整する必要があると判断した場合に、
前記特定のループ文の演算サイクル数と、派生先の各ループ文の演算サイクル数とに基づき、タイミング調整バッファのバッファ容量を算出し、
算出したバッファ容量を有するタイミング調整バッファの生成を指定することを特徴とする請求項９に記載の回路設計支援装置。
【請求項１２】
前記バッファ生成指定部は、
前記高位合成を実行する高位合成装置から、前記特定のループ文の演算サイクル数と、派生先の各ループ文の演算サイクル数とを通知され、
前記高位合成装置から通知された、前記特定のループ文の演算サイクル数と、派生先の各ループ文の演算サイクル数とに基づき、タイミング調整バッファのバッファ容量を算出することを特徴とする請求項１１に記載の回路設計支援装置。
【請求項１３】
前記回路設計支援装置は、
前記動作記述コードに含まれるループ文を実行する演算器と、前記バッファ生成指定部により指定された２個以上の連携バッファとが接続されて示されるブロック図を生成することを特徴とする請求項１、５及び９のいずれか一項に記載の回路設計支援装置。
【請求項１４】
前記回路設計支援装置は、
前記演算器と前記２個以上の連携バッファとの接続関係が反映されるように、前記動作記述コードを書換えることを特徴とする請求項１３に記載の回路設計支援装置。
【請求項１５】
前記回路設計支援装置は、
前記動作記述コードに含まれるループ文を実行する演算器と、前記バッファ生成指定部により指定された２個以上の連携バッファと前記タイミング調整バッファと、前記演算器と前記２個以上の連携バッファと前記タイミング調整バッファを制御する制御回路とが接続されて示されるブロック図を生成することを特徴とする請求項９に記載の回路設計支援装置。
【請求項１６】
前記回路設計支援装置は、
前記演算器と前記２個以上の連携バッファと前記タイミング調整バッファと前記制御回路との接続関係が反映されるように、前記動作記述コードを書換えることを特徴とする請求項１５に記載の回路設計支援装置。
【請求項１７】
ライトアクセスされるライトアクセス配列と、前記ライトアクセス配列と配列名が共通する、リードアクセスされるリードアクセス配列とが用いられて、高位合成の対象となる回路の動作が記述されている動作記述コードを、コンピュータが、入力するコード入力ステップと、
配列名が共通するライトアクセス配列とリードアクセス配列との間の連携に用いられる連携バッファを前記高位合成において２個以上生成するためのマルチバッファ生成条件として、ライトアクセス配列に含まれるライトアクセスアドレスに規則性がないこと、及びリードアクセス配列に含まれるリードアクセスアドレスに規則性がないことの少なくともいずれかが定義されているマルチバッファ生成条件情報を、前記コンピュータが、入力する条件情報入力ステップと、
前記コンピュータが、前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列に含まれるライトアクセスアドレスに規則性があるか否か、及び抽出したリードアクセス配列に含まれるリードアクセスアドレスに規則性があるか否かを判断し、前記ライトアクセス配列に含まれるライトアクセスアドレスに規則性がない場合、及び前記リードアクセス配列に含まれるリードアクセスアドレスに規則性がない場合の少なくともいずれかにおいて、前記マルチバッファ生成条件が成立すると判断する条件判断ステップと、
前記条件判断ステップにより、前記マルチバッファ生成条件が成立すると判断された場合に、前記コンピュータが、前記ライトアクセス配列と前記リードアクセス配列に対して２個以上の連携バッファを前記高位合成において生成することを指定するバッファ生成指定ステップとを有することを特徴とする回路設計支援方法。
【請求項１８】
ライトアクセスされるライトアクセス配列と、前記ライトアクセス配列と配列名が共通する、リードアクセスされるリードアクセス配列とが用いられて、高位合成の対象となる回路の動作が記述されている動作記述コードを、入力するコード入力ステップと、
配列名が共通するライトアクセス配列とリードアクセス配列との間の連携に用いられる連携バッファを前記高位合成において２個以上生成するためのマルチバッファ生成条件として、ライトアクセス配列に含まれるライトアクセスアドレスに規則性がないこと、及びリードアクセス配列に含まれるリードアクセスアドレスに規則性がないことの少なくともいずれかが定義されているマルチバッファ生成条件情報を、入力する条件情報入力ステップと、
前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列に含まれるライトアクセスアドレスに規則性があるか否か、及び抽出したリードアクセス配列に含まれるリードアクセスアドレスに規則性があるか否かを判断し、前記ライトアクセス配列に含まれるライトアクセスアドレスに規則性がない場合、及び前記リードアクセス配列に含まれるリードアクセスアドレスに規則性がない場合の少なくともいずれかにおいて、前記マルチバッファ生成条件が成立すると判断する条件判断ステップと、
前記条件判断ステップにより、前記マルチバッファ生成条件が成立すると判断された場合に、前記ライトアクセス配列と前記リードアクセス配列に対して２個以上の連携バッファを前記高位合成において生成することを指定するバッファ生成指定ステップとをコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、回路設計を支援する回路設計支援装置に関する。
より具体的には、動作記述コード（以下、単に「動作記述」ともいう）からレジスタ転送レベルを自動生成する高位合成（動作合成）を利用した半導体設計を支援する回路設計支援装置に関する。
【背景技術】
【０００２】
従来の半導体集積回路設計では、回路に含まれるレジスタとレジスタ間の組み合わせ回路の動作を記述するレジスタ転送レベル（ＲＴＬ）をハードウェア記述言語で設計していた。
近年では集積回路の回路規模が増大しており、ＲＴＬ設計時間を多大に要することが問題となっている。
そこで、ＲＴＬよりも抽象度が高い高級言語であるＣ言語、Ｃ＋＋言語、ＳｙｓｔｅｍＣ言語などを用いて自動的にＲＴＬを生成する高位合成技術が提唱されており、これを実現する高位合成ツールが市販されている。
一方で、高位合成ツールに対して、高性能なＲＴＬを得るためにアーキテクチャを考慮した設計技術が提案されている。
特許文献１では、演算器の前にシフトレジスタを自動で挿入することで、高性能なパイプライン処理を行うものである。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２７２７９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
高位言語で記述した動作記述コード（ループ文が２つ含まれる）を特許文献１の技術に適用すると、図２０に示すとおり、ループ１（の演算器）とループ２（の演算器）の間にメモリが１つ生成される。
特許文献１では、図２０に示すようにメモリが１つしか生成されないので、図２１に示すように、ループ１とループ２の処理は並列化ができず、その処理性能は低い。
もし、これを図２２に示すように２つのメモリを使い、ループ１（の演算器）がメモリ１に書き込んでいる間、ループ２（の演算器）がメモリ２のデータを読み出し、２つのループ（の演算器）が各々の処理を完了すれば、今度は、ループ１（の演算器）がメモリ２に書き込み、ループ２（の演算器）がメモリ１からデータを読み出すような構成をとることができれば、処理は高速になる。
図２２の構成における処理動作を図２３に示す。
このような２つのメモリからなる構成を本明細書ではダブルバッファと呼ぶ。
【０００５】
上述のように、特許文献１では、高位合成において２つのループの間に２つ以上のバッファを設けることができず、処理の効率化を図ることができないという課題がある。
【０００６】
この発明は、このような課題を解決することを主な目的としており、ライトアクセスアドレスとリードアクセスアドレスとの連携に用いられる連携バッファが高位合成において２個以上生成されるようにすることを主な目的とする。
【課題を解決するための手段】
【０００７】
本発明に係る回路設計支援装置は、
ライトアクセスされるライトアクセス配列と、前記ライトアクセス配列と配列名が共通する、リードアクセスされるリードアクセス配列とが用いられて、高位合成の対象となる回路の動作が記述されている動作記述コードを、入力するコード入力部と、
配列名が共通するライトアクセス配列とリードアクセス配列との間の連携に用いられる連携バッファを前記高位合成において２個以上生成すべきライトアクセス配列とリードアクセス配列の条件がマルチバッファ生成条件として定義されているマルチバッファ生成条件情報を、入力する条件情報入力部と、
前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列とリードアクセス配列について前記マルチバッファ生成条件が成立するか否かを判断する条件判断部と、
前記条件判断部により、前記ライトアクセス配列と前記リードアクセス配列について前記マルチバッファ生成条件が成立すると判断された場合に、前記ライトアクセス配列と前記リードアクセス配列に対して２個以上の連携バッファを前記高位合成において生成することを指定するバッファ生成指定部とを有することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、ライトアクセス配列とリードアクセス配列に対して２個以上の連携バッファを生成するよう指定するため、高位合成でライトアクセス配列とリードアクセス配列に対して２個以上の連携バッファを生成することができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１に係る半導体設計支援装置の構成例を示す図。
【図２】実施の形態１に係る処理部の動作例を示すフローチャート図。
【図３】実施の形態１に係る高級言語で記述されたコードの例を示す図。
【図４】実施の形態１に係るアクセス情報テーブルの例を示す図。
【図５】実施の形態１に係るアクセス情報テーブル（リネーム後）の例を示す図。
【図６】実施の形態１に係る配列テーブルの例を示す図。
【図７】実施の形態１に係るアクセス情報テーブル（タイプ判定後）の例を示す図。
【図８】実施の形態１に係るアクセス情報テーブル（依存関係判定後）の例を示す図。
【図９】実施の形態１に係るバッファ指定テーブルの例を示す図。
【図１０】実施の形態１に係る配列テーブル（バッファ構成判定後）の例を示す図。
【図１１】実施の形態１の手法を適用した場合に生成されるハードウェアブロックの例を示す図。
【図１２】実施の形態１に係るアクセス情報テーブル（サイクル数判定後）の例を示す図。
【図１３】実施の形態１に係るアクセス情報テーブル（アクセス遅延判定後）の例を示す図。
【図１４】実施の形態１に係る依存テーブルの例を示す図。
【図１５】実施の形態１の手法を適用した場合に生成されるハードウェアブロック（遅延バッファ包含）の例を示す図。
【図１６】実施の形態１の手法を適用した場合に生成されるハードウェアブロック（制御回路包含）の例を示す図。
【図１７】実施の形態１の手法を適用した場合の処理シーケンスの例を示す図。
【図１８】実施の形態１に係る半導体設計支援装置のハードウェア構成例を示す図。
【図１９】高級言語で記述されたコードの例を示す図。
【図２０】実施の形態１の手法を適用しない場合のハードウェアブロックの例を示す図。
【図２１】実施の形態１の手法を適用しない場合のハードウェアの性能を説明する図。
【図２２】ダブルバッファのハードウェアブロックの例を示す図。
【図２３】ダブルバッファのハードウェアの性能を説明する図。
【図２４】遅延バッファが必要なハードウェアブロックの例を示す図。
【発明を実施するための形態】
【００１０】
実施の形態１．
本実施の形態では、高位合成において、複数のループ文の間にダブルバッファが生成されるようにする半導体設計支援装置を説明する。
つまり、本実施の形態に係る半導体設計支援装置は、配列からのリードだけでなく、配列へのライトも考慮して、その依存関係を抽出し、ダブルバッファ構成を実現できるようにする。
【００１１】
また、本実施の形態に係る半導体設計支援装置は、配列の添え字に規則性がない場合でも高性能なＲＴＬを得るためにダブルバッファ構成を自動で生成できるようにする。
特許文献１では、配列の添え字はループ変数の一次式に限定されており、添え字に規則性がない場合は適用できないといった課題がある。
また、配列の添え字がループ変数の一次式の場合でも、読み出すメモリへライトするモジュールにおいて、そのライトするアドレスに規則性がない場合、システム全体として処理性能が劣るといった課題がある。
【００１２】
添え字に規則性がない配列が含まれる動作記述コードの例を図１９に示す。
図１９のＭＥＭ［ｉ＋ａｄｒ］はライトアクセスされる配列であり、ＭＥＭ［ｉ］とＭＥＭ［ｉ＋１］はリードアクセスされる配列である。
「添え字に規則性がない」とは、図１９のコード中のループ１の「ＭＥＭ［ｉ＋ａｄｒ］」のような配列の添え字がループ変数以外の変数を含むアドレスの指定をいう。
【００１３】
本実施の形態に係る半導体設計支援装置は、このような、添え字に規則性がない配列が含まれる動作記述コードや、ライト先のアドレスに規則性がない動作記述コードでも高性能なＲＴＬを得るためにダブルバッファ構成を自動で生成できるようにする。
【００１４】
更に、本実施の形態に係る半導体設計支援装置は、データの遅延量を計算し、遅延バッファとそれに伴う制御回路を自動で生成することで高性能なＲＴＬを得ることができるようにする。
複数のメモリが配置され、１つの演算器に複数のメモリからデータを読み出す場合、それらのメモリからのリードデータの遅延を合わせるために、適宜遅延バッファと遅延バッファを制御する制御回路を別途作成する必要がある。
図２４では、処理Ｃが処理Ｂと処理Ａの結果を利用するが、処理Ｂの結果と処理Ａの結果が時間的にずれるため、遅延バッファを設けて、その差を吸収している。
この遅延バッファと遅延バッファに付随する制御回路の設計は、高位合成ツールでは自動的に生成することができず、設計者が遅延バッファや制御回路の設計をする必要があるため、設計負荷が大きくなるといった課題がある。
このため、本実施の形態に係る半導体設計支援装置は、複数のメモリが配置され、１つの演算器に複数のメモリからデータを読み出す場合、そのデータの遅延を合わせるための、遅延バッファとそれを制御する制御回路を自動で生成する。
【００１５】
そして、本実施の形態に係る半導体設計支援装置によれば、設計者の能力に依存することなく高性能なハードウェア構成（アーキテクチャ）を短時間で得ることができる。
【００１６】
図１は、実施の形態１に係る半導体設計支援装置を用いた高位合成システムの構成を示すブロック図である。
図１において、半導体設計支援装置１は、処理部３とテーブル記憶部４とファイル記憶部５を備える。
半導体設計支援装置１は、回路設計支援装置に相当する。
高位合成装置２は、高級言語（Ｃ／Ｃ＋＋／ＳｙｓｔｅｍＣ言語など）による動作記述コードを受理して、ＲＴＬを生成する装置である。
半導体設計支援装置１から高位合成装置２へ高位合成が可能な動作記述コードを与えることで目的とするＲＴＬを得ることができる。
【００１７】
ここで、高位合成向け高位言語を説明する。
一般に高位言語で記述されたコードは、高位合成ツールが高位合成できるように書き直しを行う必要がある。
この書き直しは、高位合成ツールの制約で合成できない記述をコードから削除、あるいは書き直すといった作業と、アーキテクチャを考慮したコードに変更することを意味する。
本明細書は、特に後者について考慮した高位合成向け高位言語生成を意図している。
【００１８】
処理部３は、高位合成の対象となる回路の動作を記述した動作記述コード、例えばＣ言語、Ｃ＋＋言語、ＳｙｓｔｅｍＣ言語で作成された動作記述コードを入力し、また、ダブルバッファを構成するための条件を入力し、配列のアクセス情報を解析し、高速に処理可能になるようなバッファ構成を判定し、モジュール生成する。
処理部３は、コード入力部、条件情報入力部、条件判断部及びバッファ生成指定部に相当する。
テーブル記憶部４は、処理部３の処理結果が示されるテーブルや、処理部３が参照するテーブルを記憶する。
ファイル記憶部５は、処理部３が入力した動作記述コードを記憶する。
また、ファイル記憶部５は、処理部３が変更した後の動作記述コードを記憶してもよい。
【００１９】
次に、実施の形態１の動作を説明する。
図２は、実施の形態１の半導体設計支援装置１の動作の流れを示すフローチャートである。
このフローチャートにある機能は処理部３で実行され、必要なときにテーブル記憶部４とファイル記憶部５とのデータのやりとりが行われる。
動作を説明するにあたり図３に例示する動作記述コードを用いる。
なお、図３のコードは本実施の形態に係る動作を説明するために必要な一部を抜き出して示したものであり、動作記述としては不完全なものである。
【００２０】
ステップ１：高性能化の指定
本実施の形態に係る高性能化でダブルバッファを生成する場合、メモリ容量を従来の２倍要する。
性能が高くない場合でもシステム全体として十分であるならば、図２０に示すようにメモリ１つでもよい。
設計によっては処理性能よりもメモリ量を少なくすることを優先する場合があるため、この選択はユーザ設定とする。
設定する手段としては、コードにプラグマを指定する方法や対話型でオプションを設定する方法などが可能である。
本明細書では、高性能化を実施する場合を説明するため、以降、高性能化指定があったという前提で説明を進める。
【００２１】
ステップ２：配列アクセス情報抽出
まず、処理部３は、高位合成対象となる動作記述コード（図３）とバッファ指定テーブル（図９）を入力し、動作記述コード（図３）をファイル記憶部５に格納し、バッファ指定テーブル（図９）をテーブル記憶部４に格納する。
バッファ指定テーブル（図９）は、高位合成においてダブルバッファ構成がとられるための条件（マルチバッファ生成条件）が示される情報であり、マルチバッファ生成条件情報の例に該当する。
なお、バッファ指定テーブル（図９）の詳細は後述する。
動作記述コードのファイル記憶部５への格納、バッファ指定テーブルのテーブル記憶部４への格納の後、処理部３は、ループ処理を検索し、読み出した順にループＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）を割り当てる。
次に、処理部３は、ループ内にライト（配列記述が左辺にある）記述部分と、リード（配列記述が右辺にある）記述部分を全て抽出し、抽出結果をアクセス情報テーブルとしてテーブル記憶部４に格納する。
【００２２】
図４に、図３のコードを入力した場合のアクセス情報テーブルの例を示す。
ここで、
Ｎｏは、テーブルのレコード番号である。
配列ＩＤは、配列の識別子である。
配列変数名が同じであれば、同じ配列ＩＤとなる。
配列変数名は、参照名ではなく実体である変数名である。
ループＩＤは、ループ処理の識別子である。
同一ループ内にある配列変数であれば、配列変数ＩＤが異なっていても同じループＩＤとなる。
Ｒ／Ｗは、Ｒが配列リードを表し、Ｗが配列ライトを表す。
実行数は、配列変数の記述箇所（行数）である。
【００２３】
図４のＮｏ．１のｄａｔは、図３のループ（１）のｄａｔ［ｉ＋ｗａｄｒ］である。
図４のＮｏ．２のｄａｔは、図３のループ（２）のｄａｔ［ｒａｄｒ＋ｉ］である。
図４のＮｏ．３のｄａｔは、図３のループ（３）の右辺のｄａｔ［ｉ］とｄａｔ［ｉ＋１］である。
図４のＮｏ．４のｄａｔは、図３のループ（３）の左辺のｄａｔ［ｉ］である。
図４のＮｏ．５のｆｏｏは、図３のループ（２）の左辺のｆｏｏ［ｉ］である。
図４のＮｏ．６のｆｏｏは、図３のループ（３）の左辺のｆｏｏ［Ｎ−ｉ］である。
【００２４】
なお、ライトアクセスされる配列をライトアクセス配列といい、リードアクセスされる配列をリードアクセス配列という。
また、ライトアクセス配列の配列要素をライトアクセスアドレスといい、リードアクセス配列の配列要素をリードアクセスアドレスという。
ライトアクセスアドレスは、それぞれライトアクセスのアクセス先のアドレスであり、リードアクセスアドレスは、それぞれリードアクセスのアクセス先のアドレスである。
処理部３の処理により高位合成においてダブルバッファとして設けられる２個のバッファは、配列名が共通するライトアクセス配列とリードアクセス配列との間の連携のための連携バッファである。
また、図３のループ（１）のライトアクセス配列ｄａｔ［ｉ＋ｗａｄｒ］では、添え字がループ変数以外の変数を含んでおり、ライトアクセスアドレスに規則性がない。
同様に、図３のループ（２）のリードアクセス配列ｄａｔ［ｒａｄｒ＋ｉ］でも、添え字がループ変数以外の変数を含んでおり、リードアクセスアドレスに規則性がない。
【００２５】
ステップ３：配列変数のリネーム
次に、処理部３は、配列をリネームしてアクセス情報テーブルを更新する。
配列のリネーム処理では、処理部３は、２つの処理を行う。
１つ目は同一メモリへのライトを２回以上行っている場合、２回目のライト処理以降異なる配列へ割り当てる処理を行い、テーブルのアクセス情報テーブルを更新する。
つまり、以下の場合は、２回目のｍｅｍＡをｍｅｍＡ＿１配列などといった新規配列変数に割り当てる。
ｆｏｒ（）｛
ｍｅｍＡ［．．］  ＝  ．．；
｝
ｆｏｒ（）｛
ｍｅｍＢ［．．］  ＝  ｍｅｍＡ［．．］；
｝
ｆｏｒ（）｛
ｍｅｍＡ［．．］  ＝  ｍｅｍＣ［．．］；／／ｍｅｍＡに対する２回目のライト処理
｝
ただし、２回目のライト処理では、配列を別の配列に割り当てても結果が異ならないことが保証される場合に限る。
また、処理部３の２つ目の処理としては、同一配列をリードする異なるループＩＤにおいて、配列名をリネームする。
ここで元の配列名にリンクをはる。
また、リネームされた配列ＩＤに異なるＩＤを再割り当てする。
図３のコード例でこの処理をしたアクセス情報テーブルを図５示す。
【００２６】
ステップ４：配列タイプ抽出
次に、処理部３は、テーブル記憶部４からアクセス情報テーブル（図５）を読み出す。
アクセス情報テーブル（図５）の配列ＩＤに対し、動作記述コード（図３）上のどこに宣言があるかを検索する。
例えば、配列宣言は、
／／コード
ｉｎｔ  ｄａｔ［１０２４］；
あるいは、
ｄａｔ  ＝  ｎｅｗ  ｉｎｔ［１０２４］；
である。
処理部３は、配列宣言を見つけたら、その配列のサイズ（配列の添え字定数）を取得し、配列ＩＤごとにサイズと配列タイプが示される配列タイプテーブルを生成し、生成した配列テーブルをテーブル記憶部４に格納する。
なお、配列タイプとは、ＭＥＭ（メモリ）かＲＥＧ（レジスタ）のいずれかである。
配列サイズによってはレジスタ構成も可能であるため、閾値をもってそれを判断する。
例えば、配列サイズ２５６以上の配列であれば、自動的にＭＥＭにするなどである。
図３のコード例において、サイズと配列タイプとを抽出をした結果である配列テーブルを図６に示す。
図６の配列ＩＤは、図５の配列ＩＤと同じである。
【００２７】
ステップ５：添え字判定
次に、処理部３は、アクセス情報テーブル（図５）から以下の２つタイプを判定し、アクセス情報テーブルを更新する。
ループＩＤ毎に前のイタレーションが次のイタレーションに影響を与えるかを調べる。
具体的には、繰り返し文中にある任意の変数が参照後、代入を行っている場合は「依存あり」とし、それ以外を「依存なし」とする。
「依存あり」は、ライトアクセスアドレス又はリードアクセスアドレスの順序を変更すると高位合成の対象となる回路の動作が変化してしまうため、ライトアクセスアドレス又はリードアクセスアドレスの順序の変更が許容されないことを意味する。
一方、「依存なし」は、ライトアクセスアドレス又はリードアクセスアドレスの順序を変更しても高位合成の対象となる回路の動作が変化しないので、ライトアクセスアドレス又はリードアクセスアドレスの順序の変更が許容されることを意味する。
また、「依存なし」と判断された場合、処理部３は、更に、以下を判定する。
【００２８】
配列の添え字は、１重ループ変数（１次式かつ係数が１）と定数で表現されている場合は、タイプＡと判定し、配列の添え字が上記以外は、タイプＢと判定する。
タイプＢの配列に含まれるアドレスの間には規則性がない。
タイプＡに該当する配列の添え字の例と、タイプＢに該当する配列の添え字の例を以下に示す。
（タイプＡの例）  ＡｒｒａｙＡ［ｉ］＝ＡｒｒａｙＢ［ｉ＋１］＋ｄ；
（タイプＢの例）  ＡｒｒａｙＡ［ｉ］＝ＡｒｒａｙＢ［ｉ＋ａｄｒ］＋ｄ；
また、「依存あり」の場合は、タイプＢと判定する。
図３のコード例においてこの処理をした後のアクセス情報テーブルを図７に示す。
【００２９】
ステップ６：依存関係判定
次に、処理部３は、アクセス情報テーブル（図７）を参照し、ループ間の依存関係判定を行い、アクセス情報テーブルを更新する。
まず、処理部３は、依存するループＩＤを各Ｎｏについて解析する。
基点となる最初のメモリアクセスの依存ループＩＤを依存ループ０（基点）とする。
これについて、外部より基点情報を与えてもよい。
以降、基点以外のリード処理について、解析していく。
図８に図３のコードを処理したアクセス情報テーブルを示す。
図３の例の場合はＮｏ．１を基点（依存ループＩＤ０）とする。
Ｎｏ．２では、ｄａｔ＿Ａへのリードアクセスは、ループＩＤ１のｄａｔへのライトアクセスの終了後に実行されるため、依存ループＩＤを１とする。
つまり、Ｎｏ．２のｄａｔ＿Ａは、図３のループ（２）のｄａｔ［ｒａｄｒ＋ｉ］であり、ループ（１）のｄａｔ［ｉ＋ｗａｄｒ］のライトアクセスの後に、リードアクセスされるので、依存ループＩＤが１となる。
Ｎｏ．３においても同様に、ｄａｔ＿Ｂへのリードアクセスは、ループＩＤ１のｄａｔへのライトアクセスの終了後に実行されるため、依存ループＩＤを１とする。
つまり、Ｎｏ．３のｄａｔ＿Ｂは、図３のループ（３）の右辺のｄａｔ［ｉ］とｄａｔ［ｉ＋１］であり、ループ（１）のｄａｔ［ｉ＋ｗａｄｒ］のライトアクセスの後に、リードアクセスされるので、依存ループＩＤが１となる。
Ｎｏ．４のｄａｔ＿１は図３のループ（３）の左辺のｄａｔ［ｉ］であり、Ｎｏ．５のｆｏｏは図３のループ（２）の左辺のｆｏｏ［ｉ］であるが、これらは、他の配列の影響を受けないので、依存ループはない。
Ｎｏ．６については、ｆｏｏへのリードアクセスは、Ｎｏ．５のループＩＤ２のｆｏｏへのライトアクセスの終了後に実行されるため、依存ループＩＤを２とする。
つまり、Ｎｏ．６のｆｏｏは、図３のループ（３）の左辺のｆｏｏ［Ｎ−ｉ］であり、ループ（２）のｆｏｏ［ｉ］のライトアクセスの後に、リードアクセスされるので、依存ループＩＤが２となる。
【００３０】
ステップ７：バッファ構成判定
次に、処理部３は、図８のアクセス情報テーブル及び図９に示すバッファ指定テーブルを参照し、ループ間のバッファ構成判定を行う。
まず、処理部３は、アクセス情報テーブル（図８）から、依存関係があるループＩＤ間にある配列ＩＤを抽出する。
次に、処理部３は、バッファ指定テーブル（図９）を参照し、ループＩＤ間の配列のバッファ構成を決定する。
バッファ指定テーブルには、図９に示すように、高位合成においてダブルバッファとすべきライトアクセス配列及びリードアクセス配列についての条件（マルチバッファ生成条件）が定義されている。
ライトアクセス配列及びリードアクセス配列のうちの少なくとも一方のタイプがＢであれば、ライトアクセス配列とリードアクセス配列との間にダブルバッファが構成される。
すなわち、ライトアクセス配列に含まれるライトアクセスアドレスの間に規則性がないこと、及びリードアクセス配列に含まれるリードアクセスアドレスの間に規則性がないことの少なくとも一方に該当すれば、ライトアクセス配列とリードアクセス配列との間にダブルバッファが構成される。
また、ライトアクセスアドレスの順序の変更が許容されないこと、及びリードアクセスアドレスの順序の変更が許容されないことの少なくとも一方に該当すれば、ライトアクセス配列とリードアクセス配列との間にダブルバッファが構成される。
【００３１】
図３に示すコード例の場合、ループＩＤ１の配列ｄａｔはライトアクセス配列であり、配列ｄａｔにリンクされているループＩＤ２のｄａｔ＿Ａはリードアクセス配列であり、ともにタイプがＢである。
このため、バッファ指定テーブル（図９）の４行目より、バッファタイプはダブルバッファとなる。
ｄａｔ＿Ａはｄａｔにリンクされているため、ｄａｔについてはｄａｔ＿Ａに含まれるとして、ｄａｔのバッファタイプは指定しない。
また、ループＩＤ２の配列ｆｏｏはライトアクセス配列であり、タイプはＡであり、この配列ｆｏｏにリンクされているループＩＤ３の配列ｆｏｏはライトアクセス配列であり、タイプはＢである。
このため、バッファ指定テーブル（図９）の２行目より、ダブルバッファ構成となる。
最後にループＩＤ１の配列ｄａｔはライトアクセス配列であり、タイプはＢであり、配列ｄａｔにリンクされているループＩＤ３のｄａｔ＿Ｂはリードアクセス配列であり、タイプはＡである。
このため、バッファ指定テーブル（図９）の３行目より、ダブルバッファ＋シフトレジスタ構成となる。
【００３２】
そして、処理部３は、配列テーブル（図８）に、決定したバッファタイプを追記する。
これにより、各ループ間にバッファメモリを構成することが可能となる。
なお、ループ間ではない、例えば配列ＩＤ３については、ここではバッファタイプを指定しない。
図１０に図３のコードの場合の配列テーブルを示す。
ここでダブルバッファとは、図２２に示す構成であるため、そのメモリサイズは、通常の倍となる。
つまり、図１０ではサイズは１０２４とあるが実質はその２倍である。
【００３３】
アクセス情報テーブル（図８）には、ループＩＤとそれに属する配列ＩＤのリード及びライトが記載されているので、接続関係がわかる。
これにより、処理部３は、ブロック図を表現することが可能となる。
図１１に、図３のコード例の場合のブロック図を示す。
処理部３は、図１１のブロック図を、図１に図示していない表示装置に表示することができる。
また、後述するように、処理部３は、図１１の構成が反映されるように、動作記述コードを書換え、書換え後の動作記述コードを高位合成装置２に出力する。
また、処理部３は、図１１のブロック図を生成せずに、図８のアクセス情報テーブルと図１０の配列テーブルに基づき、図１１の構成が反映されるように、動作記述コードを書換え、書換え後の動作記述コードを高位合成装置２に出力するようにしてもよい。
また、処理部３は、図８のアクセス情報テーブルと図１０の配列テーブルを高位合成装置２に出力し、高位合成装置２において動作記述コードを書換えさせるようにしてもよい。
【００３４】
このように、本実施の形態に係る半導体設計支援装置によれば、高位合成において、ライトアクセス配列とリードアクセス配列の間にダブルバッファを生成することができる。
また、本実施の形態に係る半導体設計支援装置によれば、ライトアクセス配列に含まれるライトアクセスアドレスの間に規則性がない場合（例えば、図３のｄａｔ［ｉ＋ｗａｄｒ］）、リードアクセス配列に含まれるリードアクセスアドレスの間に規則性がない場合（例えば、図３のｄａｔ［ｒａｄｒ＋ｉ］）でも、高位合成においてダブルバッファを生成することができる。
また、本実施の形態に係る半導体設計支援装置によれば、ライトアクセス配列においてライトアクセスアドレスの順序の変更が許容されない場合、リードアクセス配列においてリードアクセスアドレスの順序の変更が許容されない場合にも、高位合成においてダブルバッファを生成することができる。
【００３５】
ステップ８：遅延合わせ
図１１のブロック図では、ループＩＤ３の処理が正常に動作しない。
それは、ループＩＤ３（の演算器）がｆｏｏとｄａｔ＿Ｂのデータをリードする必要があるが、そのデータ到達タイミングがずれてしまい、正しい値をリードできないためである。
そのため、ここではデータ到達の遅延を合わせる操作を行う。
つまり、処理部３は、特定のループ文（図１１の例では、ループＩＤ１）の実行結果が２つ以上の他のループ文（図１１の例では、ループＩＤ２とループＩＤ３）に派生しており、派生先の２つ以上のループ文の実行タイミングを調整する必要があると判断した場合に、派生先の２つ以上のループ文の実行タイミングの調整のための遅延バッファ（タイミング調整バッファ）を高位合成において生成するよう指定する。
【００３６】
具体的には、まず、ループＩＤ毎に高位合成装置２において、高位合成を行う。
処理部３は、高位合成装置２の高位合成の結果から、各ループＩＤの処理に何サイクル要するかを得る。
まず、ループＩＤ毎に高位合成装置２へ該当する記述部分を送り、高位合成を行わせる。
次に、処理部３は、高位合成装置２から該当する処理部分が要するサイクル数をアクセス情報テーブルの該当するループＩＤのライト部分におけるサイクル数項目に書き込む。
サイクル数を追記したアクセス情報テーブルの例を図１２に示す。
【００３７】
なお、処理部３は、このとき高位合成するループＩＤには、制御インタフェースを追加しておく。
制御インタフェースには、処理開始を受理する開始信号と、処理終了を意味する終了信号を付加する。
【００３８】
次に、処理部３は、アクセス情報テーブル（図１２）において、各ループＩＤの依存ＩＤを１つに限定する処理を行う。
例えば、図１２のアクセス情報テーブルでは、ループＩＤ３がループＩＤ１とループＩＤ２の２つのループに依存している。
この依存ループＩＤを１つにする。
どちらの依存ループＩＤに統一するかを説明するにあたり、ここで追加情報としてアクセス情報テーブルに追記されるアクセス遅延数について説明する。
処理部３は、アクセス情報テーブル内の基点ループＩＤ以外のループＩＤにおいて、アクセス情報テーブルのサイクル数と依存関係を利用してアクセス遅延数を算出する。
基点となるループＩＤについてはアクセス遅延数を０とする。
次に、処理部３は、基点となるループＩＤを依存ループＩＤとしているＮｏを検索する。
該当するＮｏについて、アクセス遅延数を基点ループＩＤのサイクル数とする。
次に、処理部３は、先に検索したＮｏのループＩＤを依存ループＩＤとするＮｏを検索する。
該当するＮｏについて、依存ループＩＤのサイクル数とアクセス遅延数の和を上記Ｎｏのアクセス遅延数とする。
以降、処理部３は、これらの処理を繰り返す。
式で表すと、アクセス遅延数＝依存ループＩＤのサイクル数＋依存ループＩＤのアクセス遅延数
となる。
【００３９】
図３に示すコード例の場合を説明する。
図３のコード例の場合、図１２を参照すると、依存ループＩＤの欄に、基点ループＩＤであるループＩＤ１が示されているレコードは、Ｎｏ．２とＮｏ．３のレコードである。
Ｎｏ．２について、依存ループＩＤ１のサイクル数である１０２４をアクセス遅延数とする。
Ｎｏ．３についても同様に、依存ループＩＤ０のサイクル数である１０２４をアクセス遅延数とする。
依存ループＩＤの欄にＮｏ．３のループＩＤ３が示されているレコードはないので、ループＩＤ３についてはループを検索する処理を終了する。
依存ループＩＤの欄にＮｏ．２のループＩＤ２が示されているレコードは、Ｎｏ．６のレコードである。
Ｎｏ．６について、依存ループＩＤ２のサイクル数と依存ループＩＤ２のアクセス遅延数の和を自身のアクセス遅延数にする。
ここでは１０２３＋１０２４＝２０４７である。
この操作を繰り返し、アクセス遅延数をアクセス情報テーブルに追記する。
全てのアクセス遅延数を調べたら、基点以外の各ループＩＤについて以下を計算する。
共通のループＩＤに属するＮｏにおいて最大となるアクセス遅延数を、ループＩＤの最大アクセス遅延数とする。
そして、最大アクセス遅延数から各Ｎｏのアクセス遅延数を引いた値を遅延バッファ容量とする。
上記を実施したアクセス情報テーブルを図１３に示す。
【００４０】
ここで、依存ループＩＤは最大アクセス遅延数の依存ループＩＤに統一する。
図１４に図３のコード例の場合の依存テーブルを示す。
また、このステップにおいて再構築されたブロック図を図１５に示す。
また、このブロック構成の性能を表す図を図１７に示す。
図１７では、ダブルバッファの構成を１面目、２面目と表記している。
ループＩＤ１にて処理されるｄａｔのデータをＡ１〜Ａ８と表記している。それぞれのＡは１０２４個のデータのかたまりである。
同様にループＩＤ２にて処理されるｆｏｏのデータをＢ１〜Ｂ８と表記している。
ループＩＤ３にて処理されるｄａｔのデータをＣ１〜Ｃ７と表記している。
メモリが２面あるため、読み出しと書き込みの順序を入れ替えることで最終出力であるＣのデータが効率よく出力される様子がわかる。
【００４１】
ステップ９：制御回路生成
図１５に示す構成を得たので、処理部３は、次にダブルバッファとループ処理を制御する制御回路を生成する。
制御回路は、各ループＩＤの処理開始信号と終了信号、また各ダブルバッファの面の切替タイミングを制御する。
【００４２】
制御回路は外部信号となる開始信号を受理すると、各ループＩＤ（の演算器）に処理開始信号を送信する。
次に、制御回路は、各ループＩＤ（の演算器）から処理が終了したことを意味する終了信号を得る。
各ループＩＤ（の演算器）は終了信号の送信後、再度処理開始信号が制御回路から送信されるまでは停止する。
制御回路は、全てのループＩＤ（の演算器）から終了信号を得たら、ダブルバッファに面切替の指示を出す。
その後、制御回路は、各ループＩＤ（の演算器）にいっせいに処理開始信号を送信する。
図１６に制御回路を含めた全体のブロック図を示す。
【００４３】
なお、この制御回路は、ライブラリとしてもっておいて、適宜参照する形式でもかまわない。
また、ユーザが制御回路の指定を行ってもよい。
【００４４】
処理部３は、図１６の構成が反映されるように、動作記述コードを書換える。
また、処理部３は、制御回路によるダブルバッファの切替タイミングを算出し、算出した切替タイミングが高位合成においてダブルバッファに適用されるように動作記述コードを書換える。
そして、処理部３は、書換え後の動作記述コードを高位合成装置２に出力する。
【００４５】
ステップ１０：モジュール生成と接続
最後に、高位合成装置２が、処理部３により書換えられた動作記述コードに基づき、各ループ文の演算器、ダブルバッファ、遅延バッファ、制御回路等を高位合成し、全ての回路を接続する。
また、処理部３が動作記述コードを書換える代わりに、処理部３が図１６の内容を示す情報を高位合成装置２に出力し、高位合成装置２に動作記述コードを書換えさせ、高位合成装置２が、書換え後の動作記述コードに基づき、各ループ文の演算器、ダブルバッファ、遅延バッファ、制御回路等を高位合成し、全ての回路を接続するようにしてもよい。
【００４６】
なお、以上では、２個のメモリからなるダブルバッファを生成する例を説明した。
しかし、生成するバッファのメモリの個数に限定はなく、複数個のメモリからなるマルチバッファであれば、本実施の形態に係る手法を適用可能である。
【００４７】
以上、本実施の形態では、
回路の動作を記述した動作記述を入力とし、前記入力された動作記述の中から、配列へアクセスする複数の配列変数の依存関係を抽出する手段と、
並列動作が可能となるように複数のメモリ構成を持つ動作記述に変換する手段を有する半導体設計支援装置を説明した。
【００４８】
また、本実施の形態では、
回路の動作を記述した動作記述を入力とし、前記入力された動作記述の中から、複数の異なる遅延量、または遅延時間でデータを受理する演算器を抽出し、遅延量または遅延時間を吸収する遅延バッファを上記演算器の前に自動で配置する手段を有する半導体設計支援装置を説明した。
【００４９】
また、本実施の形態に係る半導体設計支援装置は、
動作記述の中の異なるループ記述において、共通の配列名に代入をしている場合、２回目以降の配列代入において、異なる配列名で同じサイズの配列を生成し、配列の再利用をなくしたコードを生成する手段を有することを説明した。
【００５０】
また、ループ記述において、ループ内の任意の変数が代入後に参照している場合、あるいは配列の添え字がループ変数の一次式でない場合に、本実施の形態に係る半導体設計支援装置が、メモリを２倍にし、前後の演算器と協調して並列に動作することが可能となるコードを生成することを説明した。
【００５１】
また、複数の演算器がメモリを介して構成される場合に、本実施の形態に係る半導体設計支援装置が、各演算器の中から最も演算サイクルを要する演算を抽出し、上記演算サイクルをカウントする制御回路と、上記演算サイクル数に達したときにメモリの切り替え制御信号を出力とする制御回路を自動生成することを説明した。
【００５２】
最後に、本実施の形態に示した半導体設計支援装置１のハードウェア構成例を図１８を参照して説明する。
半導体設計支援装置１はコンピュータであり、半導体設計支援装置１の各要素はプログラムにより処理を実行することができる。
半導体設計支援装置１のハードウェア構成としては、バスに、演算装置９０１、外部記憶装置９０２、主記憶装置９０３、通信装置９０４、入出力装置９０５が接続されている。
【００５３】
演算装置９０１は、プログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
外部記憶装置９０２は、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフラッシュメモリ、ハードディスク装置である。
主記憶装置９０３は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
通信装置９０４は、高位合成装置２やその他の装置と通信を行う。
入出力装置９０５は、例えば、マウス、キーボード、ディスプレイ装置である。
【００５４】
プログラムは、通常は外部記憶装置９０２に記憶されており、主記憶装置９０３にロードされた状態で、順次演算装置９０１に読み込まれ、実行される。
プログラムは、図１に示す「処理部３」として説明している機能を実現するプログラムである。
更に、外部記憶装置９０２にはオペレーティングシステム（ＯＳ）も記憶されており、ＯＳの少なくとも一部が主記憶装置９０３にロードされ、演算装置９０１はＯＳを実行しながら、図１に示す「処理部３」の機能を実現するプログラムを実行する。
また、本実施の形態の説明において、「〜の判断」、「〜の判定」、「〜の抽出」、「〜の算出」、「〜の導出」、「〜の指定」、「〜の解析」、「〜の検知」、「〜の設定」、「〜の登録」、「〜の選択」、「〜の生成」、「〜の入力」、「〜の出力」等として説明している処理の結果を示す情報やデータや信号値や変数値が主記憶装置９０３にファイルとして記憶されている。
また、暗号鍵・復号鍵や乱数値やパラメータが、主記憶装置９０３にファイルとして記憶されてもよい。
【００５５】
なお、図１８の構成は、あくまでも半導体設計支援装置１のハードウェア構成の一例を示すものであり、半導体設計支援装置１のハードウェア構成は図１８に記載の構成に限らず、他の構成であってもよい。
また、本実施の形態に示した高位合成装置２も、図１８のハードウェア構成をしていてもよいし、他のハードウェア構成であってもよい。
【００５６】
また、本実施の形態に示す手順により、本発明に係る回路設計支援方法を実現可能である。
【符号の説明】
【００５７】
１  半導体設計支援装置、２  高位合成装置、３  処理部、４  テーブル記憶部、５  ファイル記憶部。
【図１】
0005979965.tif 000002
【図２】
0005979965.tif 000003
【図３】
0005979965.tif 000004
【図４】
0005979965.tif 000005
【図５】
0005979965.tif 000006
【図６】
0005979965.tif 000007
【図７】
0005979965.tif 000008
【図８】
0005979965.tif 000009
【図９】
0005979965.tif 000010
【図１０】
0005979965.tif 000011
【図１１】
0005979965.tif 000012
【図１２】
0005979965.tif 000013
【図１３】
0005979965.tif 000014
【図１４】
0005979965.tif 000015
【図１５】
0005979965.tif 000016
【図１６】
0005979965.tif 000017
【図１７】
0005979965.tif 000018
【図１８】
0005979965.tif 000019
【図１９】
0005979965.tif 000020
【図２０】
0005979965.tif 000021
【図２１】
0005979965.tif 000022
【図２２】
0005979965.tif 000023
【図２３】
0005979965.tif 000024
【図２４】
0005979965.tif 000025