(57)【要約】      （修正有）【課題】配列読込の際に発生するメモリ読込の論理回路クロック上のタイミングを同じタイミングにまとめることで、論理回路の消費クロック数を削減し、高速化することができる高位合成装置、高位合成方法、及び高位合成プログラムを提供する。【解決手段】異なるメモリへの読込記述を複数含む動作記述が入力された場合、異なるメモリへの読込記述を条件分岐前に論理回路クロック上の同じタイミングで読み込まれるように変更した動作記述を出力することで、論理回路の消費クロック数を削減し、高速化することができる。【選択図】図１０
2019191796.tif 000002
【特許請求の範囲】
【請求項１】
高位合成方法であって、
異なるメモリへの読込記述を複数含む動作記述が入力された場合、
前記メモリへの読込記述を条件分岐前に論理回路クロック上の同じタイミングで読み込まれるように変更した動作記述を出力する、
高位合成方法。
【請求項２】
請求項１の高位合成方法において、
入力された前記動作記述から前記条件分岐文を条件分岐文抽出部によって抽出する工程と、
抽出した前記条件分岐文における異なるメモリへの複数の読込記述の存否を演算解析部によって判定する工程と、
前記異なるメモリへの複数の読込記述が存在すると判定された場合、前記異なるメモリへの複数の読込記述が条件分岐前に論理回路クロック上の同じタイミングで読み込まれるように、変更部によって、前記動作記述を変更し、変更後の動作記述を生成する工程と、
を含む高位合成方法。
【請求項３】
前記動作記述を実装する半導体装置に使用可能なリソースの存否を判定する工程と、
前記半導体装置に使用可能なリソースがあると判定された場合、前記異なるメモリへの複数の読込記述が条件分岐前に同じタイミングで読み込まれるように前記動作記述を変更し、変更後の動作記述を生成する工程と、
前記変更後の動作記述に対して高位合成処理を行う工程と、
を含む請求項２に記載の高位合成方法。
【請求項４】
前記動作記述を実装する半導体装置における使用可能なリソースの存否を判定する工程と、
前記半導体装置に使用可能なリソースがないと判定された場合、前記異なるメモリへの複数の読込記述が条件分岐前に同じタイミングで読み込まれるように前記動作記述を変更し、変更後の動作記述を生成する工程と、
前記変更後の動作記述を記憶装置に保存する工程と、
前記動作記述と同一の動作記述が入力され、かつ前記半導体装置に使用可能なリソースがあると判定されたときには、前記記憶装置に保存された前記変更後の動作記述を読み出し、前記変更後の動作記述に対して高位合成処理を行う工程と、
を含む請求項２に記載の高位合成方法。
【請求項５】
前記異なるメモリへの複数の読込記述が条件分岐前に同じタイミングで読み込まれるように前記動作記述を変更し、変更後の動作記述を生成する工程において、
メモリアクセスを行う配列及び変数のポインタが取得され、条件分岐記述前に前記ポインタに同一のポインタ値が代入された前記変更後の動作記述が出力される、
請求項２に記載高位合成方法。
【請求項６】
高位合成プログラムであって、
条件分岐文を含む動作記述が入力された場合、
前記条件分岐文に含まれる異なるメモリへの複数の読込記述が条件分岐前に論理回路クロック上の同じタイミングで読み込まれるように変更された変更後の動作記述を出力する、
高位合成プログラム。
【請求項７】
請求項６の高位合成プログラムにおいて、
入力された前記動作記述から前記条件分岐文を条件分岐文抽出部によって抽出する工程と、
抽出した前記条件分岐文に異なるメモリへの複数の読込記述の存否を演算解析部によって判定する工程と、
前記異なるメモリへの複数の読込記述があると判定された場合、前記異なるメモリへの複数の読込記述が条件分岐前に論理回路クロック上の同じタイミングで読み込まれるように、変更部によって、前記動作記述を変更し、変更後の動作記述を生成する工程と、
を実行させる高位合成プログラム。
【請求項８】
前記動作記述を実装する半導体装置に使用可能なリソースの存否を判定する工程と、
前記半導体装置に使用可能なリソースがあると判定された場合、前記異なるメモリへの複数の読込記述が条件分岐前に同じタイミングで読み込まれるように前記動作記述を変更し、変更後の動作記述を生成する工程と、
前記変更後の動作記述に対して高位合成処理を行う工程と、
を実行させる請求項７に記載の高位合成プログラム。
【請求項９】
前記動作記述を実装する半導体装置に使用可能なリソースの存否を判定する工程と、
前記半導体装置に使用可能なリソースがないと判定された場合、前記異なるメモリへの複数の読込記述が条件分岐前に同じタイミングで読み込まれるように前記動作記述を変更し、変更後の動作記述を生成する工程と、
前記変更後の動作記述を記憶装置に保存しておく工程と、
前記動作記述と同一の動作記述が入力され、かつ前記半導体装置に使用可能なリソースがあると判定されたときには、前記記憶装置に保存された前記変更後の動作記述を読み出し、前記変更後の動作記述に対して高位合成処理を行う工程と、
を実行させる請求項７に記載の高位合成プログラム。
【請求項１０】
前記異なるメモリへの複数の読込記述が条件分岐前に同じタイミングで読み込まれるように前記動作記述を変更し、変更後の動作記述を生成する工程において、
メモリアクセスを行う配列及び変数のポインタが取得され、条件分岐記述前に前記ポインタに同一のポインタ値が代入された前記変更後の動作記述が出力される、
請求項７に記載の高位合成プログラム。
【請求項１１】
高位合成装置であって、
条件分岐文を含む動作記述が入力された場合、
前記条件分岐文に含まれる異なるメモリへの複数の読込記述が条件分岐前に論理回路クロック上の同じタイミングで読み込まれるように変更された変更後の動作記述を出力する、
高位合成装置。
【請求項１２】
前記高位合成装置は、
入力された前記動作記述から前記条件分岐文を抽出する条件分岐文抽出部と、
抽出した前記条件分岐文に異なるメモリへの複数の読込記述の存否を判定する演算解析部と、
前記異なるメモリへの複数の読込記述があると判定された場合、前記異なるメモリへの複数の読込記述が条件分岐前に論理回路クロック上の同じタイミングで読み込まれるように、前記動作記述を変更し、変更後の動作記述を生成する変更部と、
を有する請求項１１に記載の高位合成装置。
【請求項１３】
前記高位合成装置は、
前記動作記述を実装する半導体装置に使用可能なリソースの存否を判定し、
前記半導体装置に使用可能なリソースがあると判定された場合、前記異なるメモリへの複数の読込記述が条件分岐前に同じタイミングで読み込まれるように前記動作記述を変更し、変更後の動作記述を生成し、
前記変更後の動作記述に対して高位合成処理を行う、
を請求項１２に記載の高位合成装置。
【請求項１４】
前記高位合成装置は、
前記動作記述を実装する半導体装置に使用可能なリソースの存否を判定し、
前記半導体装置に使用可能なリソースがないと判定された場合、前記異なるメモリへの複数の読込記述が条件分岐前に同じタイミングで読み込まれるように前記動作記述を変更し、変更後の動作記述を生成し、
前記変更後の動作記述を記憶装置に保存しておき、
前記動作記述と同一の動作記述が入力され、かつ前記半導体装置に使用可能なリソースがあると判定されたときには、前記記憶装置に保存された前記変更後の動作記述を読み出し、前記変更後の動作記述に対して高位合成処理を行う、
を請求項１２に記載の高位合成装置。
【請求項１５】
前記高位合成装置は、
前記異なるメモリへの複数の読込記述が条件分岐前に同じタイミングで読み込まれるように前記動作記述を変更し、変更後の動作記述を生成する工程において、メモリアクセスを行う配列及び変数のポインタが取得し、条件分岐記述前に前記ポインタに同一のポインタ値が代入された前記変更後の動作記述を出力する、
請求項１２に記載の高位合成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高位合成方法、高位合成プログラム及び高位合成装置に関するものである。
【背景技術】
【０００２】
高位合成は、C言語等の高級言語による動作記述をRTL(Register Transfer Level)記述に自動変換する技術である。この技術によって設計者は、論理回路設計の工数を大幅に削減することができる。しかし、高性能なRTL記述に変換する為にはメモリアクセスと演算の最適化が必要となる。
【０００３】
特許文献１には、「解析部は、記憶部に記憶された動作記述より、配列アクセス間の再利用関係を添え字及び条件文の条件に基づき解析し、配列アクセス間のデータの再利用距離、配列アクセス間の前記再利用距離の差、及び前記配列アクセスの再利用が発生する条件を算出する。第１の処理部は、再利用距離の差と規定値に基づき循環バッファの記述、又はシフトレジスタの記述を追加する。第２の処理部は、配列アクセスを、シフトレジスタ、又は循環バッファの入出力端を表す一時変数アクセスに置き換え、条件文を追加して、最適化された動作記述を生成する。」との記載がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−２２５２００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記の特許文献１においては、配列読込の再利用を最適化することを目的とし、再利用が発生する箇所に循環バッファ、又はシフトレジスタの記述を追加することが開示されている。
しかしながら、特許文献１の発明は、論理回路中における配列読込が再び発生した際に適用可能な手法であり、論理回路において配列読込が複数回発生する場合のクロック上のタイミングの最適化については考慮されていない。
【０００６】
例えば、論理回路上で条件分岐前に論理回路クロックで配列読み込みを行った場合であっても、条件分岐が成立した後、または、条件分岐が非成立となった後に、配列読込が発生する場合には、条件分岐前に配列読み込みを行う論理クロックと別のタイミングの論理クロックで配列読み込みを行うこととなる。そのため、配列読込が別々のタイミングで行われることとなり、論理回路のクロックが無駄に消費されてしまい、論理回路の処理時間が長引く問題がある。
【０００７】
そこで、本発明は、配列読込の際に発生するメモリ読込の論理回路クロック上のタイミングを同じタイミングにまとめることで、論理回路の消費クロック数を削減し、高速化することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、代表的な本発明の高位合成方法の一つは、異なるメモリへの読込記述を複数含む動作記述が入力された場合、前記メモリへの読込記述を条件分岐前に論理回路クロック上の同じタイミングで読み込まれるように変更した動作記述を出力する高位合成方法である。
【発明の効果】
【０００９】
本発明によれば、高位合成後の論理回路のクロック数が削減され、論理回路の処理時間の高速化が達成される。
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施例に係る高位合成装置の構成の一例を示す図である。
【図２】本発明の実施例に係る高位合成の全体概要を示す図である。
【図３】本発明の実施例に係る動作記述の設計装置の一例を示す構成図である。
【図４】従来の技術における動作記述の一例を示す図である。
【図５】本発明の実施例に係る高位合成の方法・プログラム・装置によって変更された変更後の動作記述の一例を示す図である。
【図６】図４の動作記述におけるメモリの読込箇所の一例を明示的に示した図である。
【図７】図６の動作記述により生成された論理回路における各命令のタイミングの一例を示す図である。
【図８】本発明の実施例に係る高位合成の方法を図５の動作記述に対して適用した動作記述の一例を示す図である。
【図９】本発明の実施例に係る高位合成の方法を適用した図８の動作記述により生成された論理回路における各命令のタイミングの一例を示す図である
【図１０】本発明の実施例１に係る高位合成の方法を示すフローチャートである。
【図１１】本発明の実施例に係る動作記述におけるメモリ読込処理が内在する処理記述パターンの一例を示す図である。
【図１２】本発明の実施例２に係る高位合成の方法を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、従来例及び本発明の実施形態について説明する。なお、この実施形態により本発明が限定されるものではない。また、図面の記載において、同一部分には同一の符号を付して示している。
【００１２】
まず、図１を参照して、本発明の実施形態に係る高位合成装置の構成の一例について説明する。
【００１３】
図１は、本発明の実施形態に係る高位合成装置（以下、「半導体装置」ということもある）として動作するコンピュータ１１０のハードウェア構成を示す図である。コンピュータ１１０は、ＨＤＤ（Hard Disk Drive）１１２と、ＣＰＵ（Central Processing Unit）１１４と、ＲＡＭ（Random Access Memory）１１５と、ＲＯＭ（Read Only Memory）１１６とを含む。これらの各装置１１２〜１１６は、バス１１１によって接続されてもよい。
【００１４】
ＨＤＤ１１２は、図２における前処理部１４、高位合成２１に対応した処理機能を持つプログラム１１３を記憶する装置である。なお、図１にはＨＤＤ１１２が記憶装置として例示されているが、本発明はこれに限定されず、フラッシュメモリ（Flash Memory）等の半導体メモリ素子、光ディスク等の記憶装置によって実現されてもよい。コンピュータ１１０は、ＨＤＤ１１２に記憶されたプログラム１１３をＣＰＵ１１４に読み出し、ＲＡＭ１１５に展開後、解析実行させることで本発明で説明する高位合成の方法の各処理を行う。
【００１５】
なお、プログラム１１３は、必ずしもＨＤＤ１１２に記録されている必要はない。プログラム１１３は、ＨＤＤ１１２の代替となる、コンピュータ１１０が読み出すことが可能な記憶媒体装置に記憶されていてもよい。コンピュータ１１０が読み出すことが可能な記憶媒体装置の具体例としては、ハードディスク等の磁気ディスク装置、ＤＶＤ、ＣＤ等の光学ディスク装置、ＳＳＤ、ＵＳＢメモリ等のフラッシュメモリ装置等が挙げられる。上記記憶装置とコンピュータ１１０は、直接接続されている必要はなく、ＬＡＮケーブルや無線等によってネットワーク接続され（つまり、間接的に接続され）ることによってコンピュータ１１０がプログラム１１３を読み出してもよい。このようなハードウェア構成を用いることで、任意のコンピュータ１１０を高位合成装置として動作させることができ、本発明の実施形態に係る高位合成の方法を実現することができる。
【実施例１】
【００１６】
次に、図２を参照して、本発明の実施例１に係る高位合成の方法の全体概要について説明する。
【００１７】
図２は、本発明の実施例１に係る高位合成の全体概要を示す図である。具体的には、図２は、本発明の実施の形態に係る高位合成の方法を、動作記述に対する処理を時系列的に示した実施例である。図２に示すように、前処理部１４は、動作記述１１に対して高位合成２１を行う前に当該動作記述の最適化を行い、メモリ読込最適化動作記述１８を出力する。次に、高位合成２１は、メモリ読込最適化動作記述１８を受け取り、メモリ読込が最適化された論理回路記述２２を出力する。この論理回路記述２２は、FPGA等の半導体装置（例えば、図１で示す高位合成装置）の論理回路設計に用いられてもよい。そして、最適化（すなわち、変更）した動作記述を使用することで、論理回路のクロックを効率よく管理することができる。
【００１８】
次に、図３を参照して、本発明の実施例１に係る動作記述の設計装置の一例について説明する。
【００１９】
図３は、図２で示した前処理部１４の内部構造を示した設計装置の詳細である。図３に示す前処理部１４は、入力された動作記述１１を、条件分岐文抽出部１５、演算解析部１６、記述変更部１７を経由させることによって、メモリ読込最適化動作記述１８を出力する機能部である。
【００２０】
図３で示すように、動作記述１１は演算処理命令12及びメモリ読み込み処理命令13の組み合わせによって構成されている。条件分岐文抽出部１５は、動作記述１１に含まれる演算処理命令１２及びメモリ読込処理命令１３から、条件分岐文を抽出する処理を行う機能部である。演算解析部１６は、前記抽出された条件分岐文に対して、その内部に異なるメモリへの複数の読込記述が存在するか否かを判定した後に、読み込まれるメモリを抽出する機能部である。記述変更部１７は、前記メモリに対して、論理回路として実現された場合に、条件分岐前にメモリ読込回路が生成される記述に変更し、メモリ読込最適化動作記述１８を出力する機能部である。これらの機能部は、上述したプログラム１１３におけるモジュールであってもよく、あるいはコンピュータ１１０における独立したハードウェアとして実現されてもよい。
次に、図４〜図９を参照して、本発明に係る高位合成の方法の具体例について説明する。
【００２１】
図４は、従来の高位合成における動作記述の一例を示す図である。動作記述とは、通常のソフトウェアのプログラムと同様に、処理命令における動作を記述したものである。上述したように、動作記述は条件分岐文を含んでもよい。条件分岐文とは、動作記述の内部に存在し、「もしXならば、Yせよ、さもなくばZせよ」等のような条件を定義する制御構造である。例えば、条件分岐文はif文、then節、else節等を含んでもよい。
一例として、図４に示す動作記述は「if(bramA[1]>100){sum+=bramB[1];})」の条件分岐文を含む。なお、図４に示す動作記述はC言語で記述された動作記述の一例であるが、本発明における動作記述はC言語に限定されず、他のコンピュータ言語で書かれているものであってもよい。
【００２２】
図５は、本発明の実施例１に係る高位合成の方法・プログラム・装置によって変更された後の動作記述の一例を示す図である。
図４に示す動作記述を図５に示すように条件分岐文に変更することで、メモリの読込クロックタイミングを合わせることができる。具体的には、動作記述を変更する手法の一つとしては、条件分岐文の配列及び引数に対して、条件分岐前にそのポインタを取得する記述と、そのポインタに対して同一のポインタを代入する記述を挿入し、以降の配列や引数への参照記述をポインタによって行うように変更する手法が挙げられる。
【００２３】
なお、ここでは、動作記述を変更する手法としてポインタ代入処理を説明したが、本発明はそれに限定されず、メモリの読込クロックタイミングを統一させる効果があれば、他の手法でもよい。
【００２４】
図６は、図４の動作記述におけるメモリの読込適用箇所を明示的に示した図である。図６に示す動作記述は、本発明の実施例に係る高位合成方法が適用されていないものである（つまり、従来の高位合成における動作記述）。図６に示すように、動作記述は処理項７１、処理項７２及び書き出し処理73から構成される。
【００２５】
図７は、図６に示す従来の高位合成における動作記述のコードが高位合成によって論理回路として実現された場合の、各処理のタイミングを示す図である。図７に示されるように、論理回路クロックが、１から５へと順に刻まれていき、当該タイミングに配置された処理を順に実行していく。例えば、bramA[1]読込８１の処理は、１と２のクロックで処理を行い、100と比較８２の処理は、２のクロックで処理を行う。図６の処理項７１で示す条件分岐処理項は、論理回路クロック上では図７の処理群８３で示す処理タイミングで実行される。また、図６の処理項７２で示す条件分岐処理項は、論理回路クロック上では図７の処理群８４で示す処理タイミングで実行される。図６の書き出し処理７３は、論理回路クロック上では図７の８５に示す出力として処理される。
【００２６】
その結果、図６に示す動作記述は、論理回路上では図７に示すように、５クロック消費して実行される。処理群８３と８４のクロック上のタイミングがずれているのは、高位合成が条件分岐のコードを論理回路に変換する際に、条件分岐外の処理との依存性を厳密に無くす為に条件分岐コード７１と条件分岐内コード７２の処理タイミングを意図的にずらしていることに起因する。
【００２７】
しかしながら、例のような場合、処理群８３はbramA[1]へのアクセスであり、処理群８４ではbramB[1]へのアクセスであるため、メモリアクセス間における依存性は無い。その為、本来、bramA[1]読込８１の処理と同時にbramB[1]読込８７の処理は実行可能であり、処理群８４のbramB[1]読込８７は１のクロックから開始することができるはずである。
【００２８】
図８は、本発明の実施例に係る高位合成方法を図５の動作記述に対して適用した動作記述のコードの一例を示す図である。また、図９は、本発明の実施例に係る高位合成方法を適用した図８の動作記述により生成された論理回路における各命令のタイミングの一例を示す図である。図８に示す動作記述のコードは、高位合成を行うと、図９に示す論理回路クロックによって順に実行される。図８の９１に示すコード群は、bramA[1]とbramB[1]が条件分岐文前に確実に読み込まれる（すなわち、先読みされる）ための記述である。図７の処理群８３、８４のように、高位合成において、メモリの読込は、宣言時ではなく、そのメモリを用いた演算の直前に発生するように構成される。
【００２９】
よって、メモリを条件分岐前に先読みさせる為には、当該メモリを用いた演算を条件分岐前に挿入する必要がある。コード群９１では、コードint* tmp1=&bramA[1];、int*tmp2=&bramB[1];によってメモリbramA[1]とbramB[1]に対し、まずそのポインタを取得する。ソフトウェアにおいて、ポインタは、メモリのアドレスを指し示すが、高位合成によって変換された論理回路において、ポインタはレジスタとして機能する。ここで、そのポインタの示す値に対し、同じ値を代入する処理、*tmp1 = *tmp1、*tmp2=*tmp2を加える。メモリへ同値を代入する処理は、ソフトウェア上の処理としては意味を成さないが、高位合成においては、代入がメモリへの演算として扱われる。この代入処理を配置することで、代入処理前にメモリ読込処理も配置することができる。
【００３０】
この手法によって、意図的にメモリを先読みさせることで、後の条件分岐におけるメモリの読込クロックタイミングを合わせることができる。コード９１によって、bramA[1]読込処理とbramB[1]読込処理は、論理回路クロック上で、図９の処理１０１に示すように１と２のクロックで同時に処理されるようになる。
図８の９２で示すコードは、bramA[1]読込処理を除いた、図７の100と比較８２を含んでおり、図９に示す通り、既にbramA[1]読込は終えている為、図９の処理群（１０２）に示すように、２のクロックで処理することができる。図８の９３も同様に、図９に示す処理１０３の通り、２と３のクロックで処理することができる。その結果、クロックを削減することで全体の処理時間が短縮し、結果として高速化することができる。
【００３１】
次に、図１０を参照して、上述した高位合成の態様をフローチャートを用いて説明する。
【００３２】
図１０は、本発明の実施例に係る高位合成方法を示すフローチャートである。まず、ステップ３１では、本発明の実施例に係る高位合成方法を適用していない状態の動作記述１１を前処理部１４に入力する。この動作記述の入力は、例えば、ユーザ（例えば、論理回路設計者等）がキーボード等の入力装置に部分的に前処理部１４に入力した情報を順次に前処理部１４に転送することによって入力してもよいしし、完成した動作記述が保存されている記憶装置から、連続的に前処理部１４に転送することによって入力してもよい。
【００３３】
次に、ステップ３２では、条件分岐文抽出部１５は、前記動作記述の内部にある条件分岐文を抽出する。ここでは、抽出するという表現は、取り出したり、識別したり、リストアップしたり、選定したりすることを含む。具体的には、条件分岐文抽出部１５は、図６に示される処理項７１及び処理項７２をまとめて、条件分岐文として抽出してもよい。図９上述のように、この条件分岐文とその内部は、演算処理命令１２及びメモリ読込処理命令１３から構成される。
【００３４】
次に、ステップ３３では、上述した処理項（例えば図６に示される処理項７１及び処理項７２）に異なるメモリへの複数の読込処理命令１３があるかどうかを演算解析部１６を用いて判定する。ここでは、判定するという表現は、検出したり、決定したり、確定したり、判断したりすることを含む。また、ここでは、異なるメモリという表現は、同じメモリデバイス内にある、お互いに異なるメモリ番地を示すことを意味します（同じメモリ番地をアクセスする読込記は既に同時に処理されるため、異なるメモリへの読込記述が複数あれ場合には本発明の効果がより大きく発揮される）。
【００３５】
処理項の中に、異なるメモリへの複数の読込処理命令があると判定された場合には、本処理はステップ３４へと移り、異なるメモリへの複数の読込処理命令が無いと判定された場合には、本処理はステップ３８へと移る。動作記述において、メモリ読込処理命令１３は、配列要素や引数の読込を行う命令である。このため、動作記述内で、当該命令が記述されている場合には、その命令が呼び出されるタイミングでそれぞれの配列要素や引数が読み込まれる処理が実行される。
【００３６】
次に、図１１を参照して、この判定処理の具体例について説明する。図１１は、本発明の実施例に係る動作記述におけるメモリ読込処理が内在する処理記述パターンの一例を示す図である。図１１に示されるように、bramA[1]>100という記述ではbramA[1]という配列要素の読込と、bramA[1]と100の比較処理の２つの処理が内在し、bramA[1]読込処理後にbramA[1]と100の比較処理が実行される。例えば、図６を参照すると、処理項７１は、判定文のbramA[1]>100の記述で、配列要素であるbramA[1]を読み込んでおり、処理項７２は+=bramB[1]で配列要素のbramB[1]を読み込んでいる。これら処理項は、条件分岐文に対するメモリ読込処理命令１３を保有しているため、異なるメモリへの複数の読込処理命令があると判定される。従って、本処理がステップ３４へと移る。
【００３７】
次に、ステップ３４では、演算解析部１６は、当該メモリ読込処理命令１３で読み込まれる配列要素及び引数を抽出し、取得する。具体的には、図６を参照して、演算解析部１６は、bramA[1]及びbramB[1]をアクセスする配列として取得する。
【００３８】
次に、ステップ３５では、演算解析部１６は、動作記述１１を実装する半導体装置に、使用可能なリソースがあるかどうかの判定を行う。ここでは、動作記述１１を実装する半導体装置とは、動作記述に対して高位合成処理を行うことで、FPGA等のような論理回路を生成することができる半導体装置である。例えば、一例として、この半導体装置は、図１で示す高位合成装置として機能するコンピュータ１１０であってもよい。この処理は、後述するステップ３６において、当該半導体装置のレジスタのリソース（例えば、CPUリソース、メモリリソース等）が確保できるかを判定するものである。
【００３９】
具体的には、演算解析部１６は、動作記述に求められるリソース量に比較することで、必要なリソースの有無を判定してもよい。あるいは、所定のリソース使用率を予め設定し、半導体装置のリソース使用率が所定のリソース使用率以下の場合にのみ処理を続ける（すなわち、後述するように動作記述を変更する処理を行う）ことも可能である。リソースを確保することができると判定された場合には、本処理がステップ３６へと移り、リソースを確保することができない場合には、本処理がステップ３８へと移る。
このように、半導体装置のリソースを確保できる場合にのみ動作記述を変更することで、半導体装置のリソース使用率が高い時に余計な負担をかけることを避けることができ、半導体装置のリソースを効率よく使用することができる。
【００４０】
次に、ステップ３６では、記述変更部１７は、動作記述の内部にある配列要素及び引数が条件分岐前に同じタイミングで読み込まれるように記述を変更する。ここでは、変更するという表現は、修正したり、変換したり、訂正したり、調整したりすることを含む。
具体的には、当該処理は一例として、図５に示すように、配列要素及び引数に対して、条件分岐前にそのポインタを取得する記述と、そのポインタに対して同一のポインタを代入する記述を挿入し、以降の配列要素や引数への参照記述をポインタによって行うように変更する手法が挙げられる。
【００４１】
なお、当該手法を用いると、半導体装置のレジスタから求められるリソースが増えるが、論理回路クロック上の同一のタイミングで、動作記述の配列要素及び引数の読込を行うことができる。その結果、論理回路クロック上の無駄なクロック消費を抑えることができ、処理時間を短縮する効果が得られる。
【００４２】
次に、ステップ３８では、前処理部１４は、ステップ３６で上述したように、記述変更部１７によってメモリ読込タイミングが変更（すなわち、最適化）された動作記述を出力する。なお、本実施例では、ステップ３６で記述変更部１７によって変更されなかった動作記述（例えば、ステップ３５で必要なリソースがないと判定された動作記述）は、未変更の状態で通常の動作記述として処理される。
【００４３】
ただし、後述する実施例２においては、半導体装置（すなわち、図１で示す高位合成装置のような、FPGA等の論理回路を生成することができる半導体装置）に使用可能なリソースがないと判定された場合にも、動作記述を変更し、変更後の動作記述を記憶装置（例えば図１のＨＤＤ１１２）に格納することで、後のタイミングで半導体装置のリソースが使用可能となった時に、変更後の動作記述を高位合成に用いることができる。
【００４４】
上述したように、前処理部１４が、条件分岐後における配列要素及び入力読込を条件分岐前に配置する記述を挿入することで、高位合成後の論理回路で強制的に読込処理を論理回路クロック上の同じタイミングで実行させて、以降の演算処理も無駄な論理回路クロック無しに実行することができるようになる。
【実施例２】
【００４５】
次に、図１２を参照して、本発明の実施例２に係る高位合成方法について説明する。なお、実施例２については、以下で記述しない点については、実施例１と共通であるので、記載を省略する。
【００４６】
図１２は、本発明の実施例２に係る高位合成方法を示すフローチャートである。上述した実施例１では、メモリ読込記述がないと判定された動作記述や、半導体装置に必要なリソースがないと判定された動作記述は、未変更の状態で通常の動作記述として処理されたが、本実施例では、半導体装置（すなわち、図１で示す高位合成装置のような、FPGA等の論理回路を生成することができる半導体装置）に使用可能なリソースがないと判定された場合にも、動作記述を変更し、変更後の動作記述を記憶装置（例えば図１のＨＤＤ１１２）に格納することで、後のタイミングで半導体装置のリソースが使用可能となった時に、変更後の動作記述を高位合成に用いることができる。これにより、半導体装置のリソース使用負荷を低減することができると共に、一回変更した動作記述を再利用することができる。
【００４７】
なお、図１２では、ステップ３１、ステップ３２、ステップ３３、ステップ３４、ステップ３５、ステップ３６、及びステップ３８は図１０のステップと実質的に同様であるため、ここでは、それらの工程の説明を省略する。
【００４８】
まず、ステップ３７aでは、ステップ３５で半導体装置（すなわち、図１で示す高位合成装置のような、FPGA等の論理回路を生成することができる半導体装置）に使用可能なリソースがないと判定された動作記述が記述変更部１７によって変更される。上述したように、この変更処理では、動作記述に内在する配列要素及び引数が、条件分岐前に同じタイミングで読み込まれるように変更される。
【００４９】
具体的には、当該処理の一例として、図５に示すように、配列要素及び引数に対して、条件分岐前にそのポインタを取得する記述と、そのポインタに対して同一のポインタを代入する記述を挿入し、以降の配列要素及び引数への参照記述をポインタによって行うように変更する手法があげられる。次に、この変更後の動作記述は記憶装置（例えば図１のＨＤＤ１１２やＲＡＭ１１５）に保存されてもよい。このように、変更時には半導体装置に使用可能なリソースがない場合にも、その後の処理に備えて、変更後の動作記述を予め用意することができる。
【００５０】
次に、ステップ３７bでは、ステップ３７aで変更した動作記述と同一の動作記述が発生して、かつ半導体装置に使用可能なリソースがあるかどうかが判定される。具体的には、演算解析部１６は、新しく入力された動作記述と、ステップ３７aで変更した動作記述の変更前の状態が同一なのか（条件分岐文、配列要素、引数等の、全ての内容項目が合致するか）を判定する。
【００５１】
新しく入力された動作記述と、ステップ３７aで変更した動作記述の変更前の状態が同一であると判定された場合には、次に、当該動作記述を実装する半導体装置（例えば、図１のような高位合成装置として機能するコンピュータ）に使用可能なリソース（CPUリソース、メモリリソース等）があるかどうかの判定を行う。新しく入力された動作記述と、ステップ３７aで変更した動作記述の変更前の状態が同一であり、かつ半導体装置のリソースを確保することができると判定された場合には、本処理がステップ３７ｃへと移る。
【００５２】
その一方、新しく入力された動作記述と、ステップ３７aで変更した動作記述の変更前の状態が同一ではなく、及び／又は半導体のリソースを確保することができないと判定された場合には、本処理が終了する。
【００５３】
次に、ステップ３７ｃでは、ステップ３７aで保存しておいた変更後の動作記述が記憶装置から読み出され、新しく入力された（未変更の）動作記述の代わりに出力される。
【００５４】
このように、半導体装置に必要なリソースがない場合にも、動作記述のメモリ読込を変更し、記憶装置に格納しておくことで、その後の処理において同一の動作記述が発生して、かつ半導体装置のリソースが使用可能となった場合に、保存しておいた変更後の動作記述を読み出すことによって、一回変更した動作記述を複数回再利用することができ、高位合成処理を効率よく行うことができる。
【符号の説明】
【００５５】
１１  動作記述
１４  前処理部
１５  条件分岐文抽出部
１６  演算解析部
１７  記述変更部
２１  高位合成
１１０  コンピュータ
１１２  ＨＤＤ
１１３  プログラム
【図１】
2019191796.tif 000003
【図２】
2019191796.tif 000004
【図３】
2019191796.tif 000005
【図４】
2019191796.tif 000006
【図５】
2019191796.tif 000007
【図６】
2019191796.tif 000008
【図７】
2019191796.tif 000009
【図８】
2019191796.tif 000010
【図９】
2019191796.tif 000011
【図１０】
2019191796.tif 000012
【図１１】
2019191796.tif 000013
【図１２】
2019191796.tif 000014