JP6091140B2 - 情報処理装置及び情報処理方法及びプログラム - Google Patents

情報処理装置及び情報処理方法及びプログラム Download PDF

Info

Publication number
JP6091140B2
JP6091140B2 JP2012221483A JP2012221483A JP6091140B2 JP 6091140 B2 JP6091140 B2 JP 6091140B2 JP 2012221483 A JP2012221483 A JP 2012221483A JP 2012221483 A JP2012221483 A JP 2012221483A JP 6091140 B2 JP6091140 B2 JP 6091140B2
Authority
JP
Japan
Prior art keywords
sequence
program code
array
extracted
sequences
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012221483A
Other languages
English (en)
Other versions
JP2013254472A (ja
Inventor
平野 進
進 平野
山本 亮
亮 山本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2012221483A priority Critical patent/JP6091140B2/ja
Publication of JP2013254472A publication Critical patent/JP2013254472A/ja
Application granted granted Critical
Publication of JP6091140B2 publication Critical patent/JP6091140B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、プログラムコードを解析し、プログラムコードの書換えを行う装置に関する。
特に、半導体集積回路設計に用いられるプログラムコードを解析し、プログラムコードの書換えを行う装置に関する。
従来の半導体集積回路設計では、Verilog−HDL(Hardware Description Language)やVHDL(Very high−speed integrated circuit Hardware Description Language)等のハードウェア記述言語で回路に含まれる全てのレジスタを記述し、レジスタとレジスタとの間における組み合わせ回路の動作を記述したレジスタ転送レベル(RTL)を作成する。
このRTLを論理合成ツールに入力することにより、レジスタ間の機能を全てのゲートに割り当てたゲートレベルを出力させ、これを配置配線する、という工程で半導体集積回路を設計していた。
しかしながら、近年の半導体集積回路の集積度の向上によって半導体チップに集積される回路規模が増大しており、RTLを手書き設計するには、非常に多くの設計期間が必要となる。
これに対して、近年では、RTLよりも抽象度の高い動作記述からRTLを自動的に生成する高位合成(あるいは、動作合成とも呼ばれる)技術が提唱されており、これを実現する高位合成ツールも市販されている。
上述の動作記述用の言語には、コンピュータプログラム用の言語として一般的に普及しているCやC++等の言語が用いられることが多い。
動作記述では、ハードウェアで実現すべき動作のみを記述することは可能であるが、クロックやリセット、レジスタ等の半導体集積回路のハードウェアの概念は記述できない。
このため、同じ機能を持つ半導体集積回路用の動作記述とRTL記述とを比較した場合、動作記述は、RTL記述よりも記述量が少なく、この結果として手書き設計に要する設計期間が短くて済む。
動作記述は、動作のみの仕様を記述するもので、実装についての仕様は記述しないが、高位合成における一般的な制約から、動作記述の記述方法によっては結果として得られる実装が影響を受ける場合がある。
また、動作記述の中で配列の構文は、まとまった記憶領域をプログラムから効率的に使用するために用いられる。
動作記述の中で使用された配列は、記述したアルゴリズムにおいて必要な記憶素子を表すことになる。
高位合成においても、配列は、一般的にメモリやレジスタ等の記憶素子へ割り当てられる。
さらに、配列は大きなサイズで記述されることが多く、この場合、高位合成においても、そのまま大きなサイズの記憶素子へ割り当てられる。
半導体集積回路で割り当てられる記憶素子としては、先ず、レジスタが挙げられるが、レジスタは、大きな記憶領域を確保するには回路面積が効率的でない。
また、SRAM(Static Random Access Memory)等のメモリ素子は、面積効率が高い反面、記憶領域の個々の要素の読み出しや書き込みを行うアドレスデコーダの並列化数が制限されるため、処理の並列化を抑制する要因となり、性能の高い半導体集積回路が得られない。
一方、コンピュータに搭載された豊富なメモリ資源を前提に記述されたコンピュータプログラム(アルゴリズムC言語)では、上述したような配列の制約を考慮する必要はない。
また、コンピュータプログラムを記述する設計者は、半導体集積回路を意識せずに設計する場合も多く、配列を減らすという概念がない場合が多い。
そのような状態で記述されたコンピュータプログラムを基に高位合成用の動作記述をした場合、高位合成における配列(メモリ)のハードウェアへの割り当てが非常に多くなり、面積増大や配線混雑という問題が起こる可能性がある。
上記不具合を解決する従来の技術として、高位合成実施前に動作記述を解析し、配列としてデータ保持しなくても当該動作記述に記述される動作に変化がない配列を削減対象として検出し、当該削減対象の配列を削除した動作記述に変換する方法が提案されている(例えば、特許文献1)。
また、前記技術のように不要な配列を削除するだけでなく、一つの配列(メモリ)を複数の論理回路で共有化する方法も提案されている(例えば、特許文献2)。
特開2010−238054号公報 特開2011−134308号公報
特許文献1に開示される従来の方法では、動作記述を解析し、削除しても動作に変化がない配列を削除することが記載されているが、この対策だけでは従来から人手で行っていたRTL設計に比べ、まだ配列(メモリ)が多いという課題がある。
また、特許文献2に開示される従来の方法では、メモリ共有化において抽象度の高い動作記述から、高位合成に向いた動作記述に書き換えることが詳細に記載されているが、複数の配列のうちのどの配列がメモリの共有化が可能なのかについては設計者が見て容易に気が付く配列同士の例しか述べられておらず、メモリ共有化が可能な複数の配列の抽出という意味では明確な方法が無いという課題がある。
この発明は上記のような課題を解決することを主な目的の一つとしており、人手を介することなく、抽象度の高いプログラムコードからメモリ共有が可能な配列を抽出し、抽出した配列にメモリを共有させることを主な目的とする。
本発明に係る情報処理装置は、
複数の配列が含まれるプログラムコードを入力するプログラムコード入力部と、
前記プログラムコードに含まれる配列ごとに、前記プログラムコード内で配列が使用されている範囲を配列使用範囲として特定し、それぞれの配列使用範囲が重複しない2つ以上の配列を抽出する配列抽出部と、
前記配列抽出部により抽出された2つ以上の配列が前記プログラムコードの実行の際に同一のメモリを共有するように、前記プログラムコードを書き換えるプログラムコード書換え部とを有することを特徴とする。
本発明では、プログラムコードに含まれる配列ごとに配列使用範囲を特定し、それぞれの配列使用範囲が重複しない2つ以上の配列が同一のメモリを共有するようにプログラムコードを書き換える。
このため、人手を介することなく、プログラムコードからメモリ共有が可能な配列を抽出し、抽出した配列にメモリを共有させることが可能である。
実施の形態1に係る高位設計メモリ共有化支援装置の構成例を示す図。 実施の形態1に係る動作記述ファイルの例を示す図。 実施の形態1に係る高位設計メモリ共有化支援装置の動作例を示すフローチャート図。 実施の形態1に係るメモリ共有化動作記述ファイルの例を示す図。 実施の形態2に係る高位設計メモリ共有化支援装置の構成例を示す図。 実施の形態2に係る共有化候補リストの例を示す図。 実施の形態2に係る高位設計メモリ共有化支援装置の動作例を示すフローチャート図。 実施の形態3に係る高位設計メモリ共有化支援装置の構成例を示す図。 実施の形態3に係る時間制約のない動作記述ファイルの例を示す図。 実施の形態3に係る時間制約のない動作記述ファイル実行時のメモリ動作と共有化の例を示す図。 実施の形態3に係るパイプライン動作の動作記述ファイルの例を示す図。 実施の形態3に係るパイプライン動作の動作記述ファイル実行時のメモリ動作と共有化の例を示す図。 実施の形態3に係る高位設計メモリ共有化支援装置の動作例を示すフローチャート図。 実施の形態3に係るメモリ共有化動作記述ファイルの例を示す図。 実施の形態1〜3に係る高位設計メモリ共有化支援装置のハードウェア構成例を示す図。
実施の形態1.
本実施の形態では、抽象度の高いコンピュータプログラムを入力し解析することで、物理的に共有化可能な配列(メモリ)を抽出し、その配列同士を共有化する記述に変更した動作記述(SystemC言語)を自動で出力する高位設計メモリ共有化支援装置を説明する。
図1は、実施の形態1による高位設計メモリ共有化支援装置を示す構成図である。
図1において、動作記述ファイル1は、抽象度の高いコンピュータプログラムコードであり、例えば動作を記述したアルゴリズムC言語やSystemC言語のファイルである。
高位設計メモリ共有化支援装置10は、動作記述ファイル1を解析し、動作記述ファイル1の内容を書き換える。
より具体的には、高位設計メモリ共有化支援装置10は、動作記述ファイル1に含まれる配列ごとに、動作記述ファイル1内で配列が使用されている範囲を配列使用範囲として特定し、それぞれの配列使用範囲が重複しない2つ以上の配列を抽出する。
そして、高位設計メモリ共有化支援装置10は、抽出した2つ以上の配列が動作記述ファイル1の実行の際に同一のメモリ領域を共有するように、動作記述ファイル1の内容を書き換える。
メモリ共有化動作記述ファイル2は、高位設計メモリ共有化支援装置10が内容を書き換えた後の動作記述ファイル1である。
なお、高位設計メモリ共有化支援装置10は、情報処理装置の例に相当する。
高位設計メモリ共有化支援装置10において、ファイル入力部15は、動作記述ファイル1を入力する。
ファイル入力部15は、プログラムコード入力部の例に相当する。
配列検出部11は、前記動作記述ファイル1の記述からメモリ共有化の候補になる配列を検出する。
配列読出検索部12は、前記配列の使用されている範囲を前記動作記述ファイル1の記述から検索する。
共有化可能配列抽出部13は、前記動作記述ファイル1の記述から前記配列と共有化可能な別の配列を抽出する。
配列共有化記述部14は、前記共有化可能配列抽出部13で抽出された配列が共有されるように記述し、SystemC等の高位合成可能なファイルとして出力する。
配列共有化記述部14からの出力ファイルが、配列共有化されるように変更されたメモリ共有化動作記述ファイル2である。
なお、配列検出部11、配列読出検索部12及び共有化可能配列抽出部13は、配列抽出部の例に相当する。
また、共有化可能配列抽出部13は、記憶容量判断部の例にも相当する。
また、配列共有化記述部14は、プログラムコード書換え部の例に相当する。
図2は、図1中の動作記述ファイル1の一例を示す図であり、SystemC言語の配列構文に該当するmemA,memB,memCという3つの配列名が含まれた動作記述を示している。
すなわち、当該動作記述ファイル1には、配列名memA,memB,memCに対応する配列が記述されており、これら配列に記憶素子(以降、「メモリ」と呼ぶ)が割り当てられる。
なお、15行目に記載されているコメントは説明のためのものであり、現実の動作記述ファイル1には、このようなコメントは含まれていなくてもよい。
なお、図2に示す記述は、SystemC言語で記述されたプログラムを説明するために必要な一部の記述のみを抜き出したもので、動作記述としては不完全なプログラムである。
次に動作について説明する。
図3は、高位設計メモリ共有化支援装置10の動作を示すフローチャートであり、この図に沿って説明する。
先ず、メモリ共有化したい動作記述ファイル1をファイル入力部15を介して高位設計メモリ共有化支援装置10に入力する(ステップS10)。
次に、配列検出部11が、入力された動作記述ファイル1の一番上に記載されている配列を検出する(ステップS11)。
図2においては、for文で記載されたmemAがそれにあたる。
配列検出部11は、その配列にマーキングが付いているかどうかを確認し、マーキングがある場合は、共有化は不要ということでステップS16に進む。
マーキングが無い場合は共有化の次のフェーズ(ステップS13)に進む(ステップS12)。
なお、マーキングの説明は後述する。
次に、配列読出検索部12が、前記配列検出部11で検出された配列が、入力された動作記述ファイル1のどの行まで使われているかを検索し、使用されている最終行を抽出する(ステップS13)。
図2においては、配列memA(memA[i]=din[i]+fancZ() 式の左辺)が、どの行まで使われているかをファイルの一番下まで検索し、ここでは上から14行目(Array=memA[x]+fancX();)が最後に使用される箇所であることが分かる。
これは、この配列memAが15行目以降は使用されないことを意味する。
つまり、15行目以降の動作では配列memAは使用されずに空いていることを意味する。
次に、前記配列読出検索部12で検索された14行目という情報を用いて、共有化可能配列抽出部13が、共有化可能な配列を抽出する(ステップS14)。
ここでは、配列検出部11と同様な手法を用い、15行目以降ではじめて使用される配列があるかどうかを確認し、該当する配列が無い場合はmemAと共有化できる配列が無いと認識してステップS16に進む。
逆に、15行目以降ではじめて使用される配列があった場合(図2の場合はmemCが17行目から使用されているので、memCが相当)は、15行目以降で使用されないmemAと共有化可能となるため、ステップS15に進む(ステップS14)。
memCはmemAと共有化可能なことがわかったため、共有化可能配列抽出部13が、配列のサイズ関係を比較する。
配列数(メモリのワード数に相当)とビット数を比較し、大きい方に合わせたものを共有化する配列とする。
図2の場合は、memAの配列数512の方がmemCの配列数256より大きいため配列数は512とする。
逆に、memCの配列数が大きい場合は、memAの配列数をmemCに合わせる。
ビット数は、memCの32ビットの方が大きいので、共有化配列は32ビットにする。
このようにして、共有化可能配列抽出部13は、配列ごとに、プログラムコードの実行の際の配列の使用時に必要な記憶容量を解析して、配列memAと配列memCが共有するメモリに必要な記憶容量を判断する。
また、共有化可能配列抽出部13は、共有化することが決まった配列には、memAとmemCが共有化済みである印としてマーキングをつける(ステップS15)。
なお、前記例ではサイズを合わせるようにしているが、サイズが大きく異なる場合はあまり効率的ではないため、共有化しないようにして次の候補の配列を探しにいってもよい。
ステップS15までで一つの配列の共有化解析は完了で、その他の配列についてもステップS11からステップS15までを実施し、全ての配列について共有化解析が完了すればステップS17に進み(ステップS16)、配列共有化記述部14において前記のマーキングした配列を共有化した動作記述(SystemC等)に変更して、動作は終了となる(ステップS17)。
図4が、高位設計メモリ共有化支援装置10の出力である図1のメモリ共有化動作記述ファイル2であり、配列共有化記述部14が図2の動作記述を配列共有化したSystemC記述である。
図4において、図2の下から3行目の「memC[k]=memB[k]+fancX();」に相当する式の左辺がmemCからmemAに変更されて「memA[k]=memB[k]+fancX();」となり(符号401)、1行目のビット数が16から32に(符号402)、3行目のmemCがコメントアウト(無効行)となる(符号403)。
さらに図2、図4には明示していないが、元々の配列memCが使われている箇所すべての信号がmemCからmemAに置き換えられる。
以上の変更でmemCがmemAに共有化される動作記述となる。
なお、図2のmemBについては、memAと同様の手順で共有化が可能な他の配列を検索したが、該当する配列がなかったため、共有化は行われていない。
なお、前記例では全ての配列を解析してから動作記述ファイルを一気に配列共有化に変更するようにしているが、配列一組を解析するたびに動作記述ファイルを配列共有化に変更しても構わない。
また、前記例では全配列を共有化の対象としているが、小容量のメモリを多数共有化したり、レイアウトで離れたメモリを共有化したりすることで配線混雑や配線遅延の問題が生じる可能性がある。
その場合は、共有化したくない配列にあらかじめマーキングしておくことにより、共有化対象外とすることも可能である。
また、前記例では入力である動作記述ファイル1は一つのファイルであるが、複数ファイルであっても順番は把握できるため同様のことが可能である。
また、前記例では共有化する配列memAが繰り返し使用されることに触れられていないが、実際には繰り返し使用されることが多いので、メモリを繰り返し使う場合について述べておく。
例えば、図2の動作記述ファイル1の一例においては、アルゴリズムC記述のため、動作は記述の上から下の順になり、memAはこの動作記述ファイル1のコードが最後(最終行)まで実行されると再び使用される。
つまり、前記例のように、配列memAとmemCを共有化しても、処理がぶつかることも、メモリ共有化しない時に較べ処理時間が遅くなることもない。
処理時間向上については、実施の形態3で述べる。
このように、配列検出部11、配列読出検索部12及び共有化可能配列抽出部13が、プログラムコード(動作記述ファイル1)に含まれる配列ごとに、プログラムコード内で配列が使用されている配列使用範囲(前述の例では、memAは14行目までの範囲、memCは17行目以降の範囲)を特定し、それぞれの配列使用範囲が重複しない2つ以上の配列(前述の例では、memAとmemC)を抽出する。
そして、配列共有化記述部14が、配列使用範囲が重複しない2つ以上の配列がプログラムコードの実行の際に同一のメモリを共有するように、プログラムコードを書き換えて、メモリ共有化動作記述ファイル2とする。
以上のように、本実施の形態によれば、抽象度の高い動作記述を入力し解析することで、物理的に共有化可能な配列(メモリ)を抽出し、その配列同士を共有化させる記述に変更した動作記述ファイルを自動で出力するようにしている。
このため、設計者の手を煩わさずにメモリの共有化が可能となり半導体集積回路の回路規模が削減される。
また、共有化したくないメモリについては、あらかじめ指定して共有化対象から外すことも容易なので、共有化実施後に見直す必要がなくなる。
以上、本実施の形態では、
半導体集積回路の設計において、
設計回路の動作を記述した動作記述を入力する手段と、
当該動作記述から記憶素子となる配列を検出する手段と、
当該配列の使用箇所を検索する手段と、
当該配列と共有化可能な別の配列を抽出する手段と、
当該配列同士が共有化される高位合成対象の動作記述に書き換える手段
とを備えた高位設計メモリ共有化支援装置を説明した。
実施の形態2.
以上の実施の形態1では、メモリを共有化した動作記述ファイルを自動で生成するものであるが、一旦設計者がメモリ共有化情報を確認してから動作記述ファイルの変更が行えるよう、メモリ共有化情報を表やテキストの形式等の見やすいリストで出力し、場合によっては共有化情報を書き換えて実行できる実施の形態を示す。
図5は、実施の形態2による高位設計メモリ共有化支援装置を示す構成図である。
図5において、高位設計メモリ共有化支援装置20、共有化情報入出力部21、共有化候補リスト3以外は、実施の形態1とまったく同じため説明を省略する。
高位設計メモリ共有化支援装置20は、設計者確認用の共有化候補リスト3の出力及び入力を可能にしたこと以外は実施の形態1と同じである。
共有化情報入出力部21は、前記共有化候補リスト3の出力及び入力を可能とする手段である。
図6は共有化候補リスト3の一例である。
共有化候補リスト3は、共有化の候補として抽出された配列が示される情報であり、抽出配列情報の例に相当する。
そして、共有化情報入出力部21は、共有化候補リスト3を高位設計メモリ共有化支援装置20のユーザ(設計者)に提示するものであり、抽出配列情報提示部の例に相当する。
なお、共有化候補リスト3の詳細説明は後述する。
次に動作について説明する。
図7は、高位設計メモリ共有化支援装置20の動作を示すフローチャートであり、この図に沿って説明する。
先ず、ステップS10からステップS16までは、実施の形態1と同じため説明を省略する。
ステップS16で全ての配列の解析を実施した時点で、共有化動作記述変更(ステップS17)には進まず、共有化情報入出力部21が共有化候補リスト3を生成し、出力する(ステップS27)。
共有化候補リスト3について一例を図6で説明する。
図6において、「配列名」とは、抽出された配列を全て書き出したもので、「配列数」、「ビット数」はその配列のサイズを表すもので、「共有化可能配列」は、共有化可能配列抽出部13で抽出された各々の共有化可能な配列を表示し、「マーキング」は、共有化を実施するためのマーキングである。
この例は、実施の形態1の共有化と同じ結果を表しており、memAはmemCと共有化可能なこと、memBは共有化可能な配列が無いことを示している。
この共有化候補リスト3を高位設計メモリ共有化支援装置20に戻す場合、設計者がこの結果を見て満足し、共有化候補リスト3を承認すれば、共有化候補リスト3を変更することなく、ステップS17に進み、実施の形態1と同様に、配列共有化記述部14がmemAとmemCが共有化されるように動作記述を変更して(ステップS17)終了となる。
また、設計者がこの結果を見て共有化の内容を変更したい場合には、設計者はこの共有化候補リスト3を書き換えて、例えばmemCは共有しないよう「マーキング」に×印を入力して高位設計メモリ共有化支援装置20に戻し(ステップS28)、再度ステップS11から実行し直すことで、memAはmemCとは共有化せず次の候補を探しに行く。
所望の共有化がなされた時点でSystemC記述に変更されて(ステップS17)終了となる。
なお、前記例で共有化候補リスト3に変更が無い場合には、共有化候補リスト3を高位設計メモリ共有化支援装置20に戻さないようにしてもよい。
また、前記例では触れていないが、共有化候補リスト3の「配列数」や「ビット数」を所望の数値に書き換えて再実行できるようにしてもよい。
以上のように、自動で抽出された配列共有化情報(共有化候補リスト3)を出力できるようにしているので、設計者は配列がどのように共有化されたかを容易に確認することができる。
また、配列共有化情報(共有化候補リスト3)を変更し、再実行できるようにしているので、もしその共有化情報が設計者の満足行くものでなかった場合には、共有化候補リスト3を書き換えて、所望の共有化が容易にできるようになる。
また、共有化候補リスト3の「配列数」や「ビット数」も変更可能にできるため、あらかじめ共有化させたい配列のサイズを合わせることも可能となる。
以上、本実施の形態では、
実施の形態1で示した構成に加えて、
配列共有化情報を出力する手段と、
当該配列共有化情報を変更して再入力する手段と、
当該配列共有化情報に応じて配列共有化を再実行する手段
とを備えた高位設計メモリ共有化支援装置を説明した。
実施の形態3.
実施の形態1では、時間の制約がない複数メモリを共有化するものであるが、システム全体の処理速度を上げるために時間の制約をつけたパイプライン動作(以降パイプライン動作と呼ぶ)のようなメモリについても共有化できる実施の形態を示す。
図8は、実施の形態3による高位設計メモリ共有化支援装置を示す構成図である。
図8において、ファイル入力部15は、実施の形態1と同様に、動作記述ファイル1(プログラムコード)を入力する。
ファイル入力部15が入力する動作記述ファイル1には、各配列に対する処理が並行して行われるm個(mは3以上の整数)の配列が含まれているものとする。
また、このm個の配列は、それぞれが異なる配列名を有するものとする。
ファイル入力部15は、プログラムコード入力部の例に相当する。
配列検出部11は、実施の形態1と同様に、前記動作記述ファイル1の記述からメモリ共有化の候補になる配列を検出する。
配列処理サイクル抽出部31は、各配列の処理サイクル(実行時間)を抽出する。
つまり、配列処理サイクル抽出部31は、配列検出部11により抽出された配列ごとに、処理サイクル(実行時間)、つまり、動作記述ファイル1の実行の際に配列に対する処理が継続している時間を特定する。
なお、配列処理サイクル抽出部31により特定される処理サイクル(実行時間)は、配列処理時間の例に相当する。
また、配列処理サイクル抽出部31は、配列処理時間特定部の例に相当する。
配列処理サイクル分析部32は、配列処理サイクル抽出部31で抽出された各配列の処理サイクルを分析する。
そして、配列処理サイクル分析部32は、分析結果に基づき、前記m個の配列の中からn個(nは、2以上の整数であって、m>n)の配列を抽出する。
より具体的には、配列処理サイクル分析部32は、前記m個の配列のうち最先に処理される配列を最先処理配列として抽出し、n個の配列の処理サイクル(実行時間)の合計時間が前記最先処理配列の処理サイクル(実行時間)の範囲内となるように、前記最先処理配列以外の配列の中からn個の配列を抽出する。
配列処理サイクル分析部32は、配列処理時間解析部の例に相当する。
共有化可能配列抽出部13は、配列処理サイクル分析部32により抽出された配列ごとに、動作記述ファイル1の実行の際の配列の処理時に必要な記憶容量を解析して、配列処理サイクル分析部32により抽出されたn個の配列が共有するメモリに必要な記憶容量を判断する。
共有化可能配列抽出部13は、記憶容量判断部の例に相当する。
配列共有化記述部14は、共有化可能配列抽出部13により判断された記憶容量を持つメモリを配列処理サイクル分析部32により抽出されたn個の配列が共有するように、動作記述ファイル1を書き換える。
より具体的には、配列共有化記述部14は、n個の配列が動作記述ファイル1の実行の際に同一のメモリを共有し、n個の配列に対する処理がシリアルに行われるように、動作記述ファイル1を書き換える。
次に動作について説明する。
実施の形態1のような時間の制約がない動作記述(図9)では、メモリとなる配列動作は、図10のように一つの配列動作が完了してから次の配列動作に移行する。
つまり、図9の動作記述を実行すると、図10に示すように、物理メモリAを用いた配列memAの処理が完了した後に、物理メモリBを用いた配列memBの処理が開始し、配列memBの処理が完了した後に、物理メモリCを用いた配列memCの処理が開始する。
そのため、全体の処理時間が遅くなってしまう。
図9の動作記述の場合、実施の形態1の手順に従えば、memAとmemCでメモリの共有が可能であるが、処理時間は短くならない。
これを改善するために、パイプライン動作の動作記述(図11)にした場合の、図12のようなメモリ共有化方法について説明する。
図11の動作記述を実行すると、図12に示すように、物理メモリAを用いた配列memAの処理、物理メモリBを用いた配列memBの処理、物理メモリCを用いた配列memCの処理が並列化する。
そして、図11の動作記述の場合、本実施の形態により、memBとmemCでメモリを共有させる。
図13は、高位設計メモリ共有化支援装置30の動作を示すフローチャートであり、この図に沿って説明する。
先ず、メモリ共有化したい動作記述ファイル1をファイル入力部15を介して高位設計メモリ共有化支援装置30に入力する(ステップS10)。
ここでの動作記述ファイル1は、図11のように、配列のパイプライン動作が記述されたものである。
次に、配列検出部11が、入力された動作記述ファイル1の最初の配列(最先処理配列)を検出する(ステップS11)。
図11においては、for文で記載されたmemAがそれにあたる。
配列検出部11は、その配列にマーキングが付いているかどうかを確認し、マーキングがある場合は、共有化は不要ということでステップS16に進む。
マーキングが無い場合は共有化の次のフェーズ(ステップS31)に進む(ステップS12)。
なお、マーキングの説明は後述する。
次に、配列処理サイクル抽出部31が、前記配列検出部11で検出された配列memAの処理サイクルを抽出する(ステップS31)。
配列memAの処理サイクルは、図12では、iの長さが相当し、図11ではfor文のiが「0」から「512」に達するまでのサイクル(時間)が相当する。
次に、配列検出部11が、前記配列処理サイクル抽出部31で検出された配列memAの後に動作する複数の配列を確認し、複数の配列がない場合は共有化できないため、ステップS16に進む。
複数の配列がある場合は、次のフェーズ(ステップS33)に進む(ステップS32)。
複数の配列とは、図11ではmemB、memCがこれに相当する。
前記の複数配列についても、配列処理サイクル抽出部31で各々の処理サイクル(j、k)を抽出し、配列処理サイクル分析部32で各々の値を加算(j+k)する(ステップS33)。
配列memBの処理サイクルは、図12では、jの長さが相当し、図11ではfor文のjが「0」から「256」に達するまでのサイクル(時間)が相当する。
配列memCの処理サイクルは、図12では、kの長さが相当し、図11ではfor文のkが「0」から「256」に達するまでのサイクル(時間)が相当する。
次に、配列処理サイクル分析部32が、前記複数配列の処理サイクル加算値(j+k)と、ステップS11で検出した配列memAの処理サイクルiとを比較し、i≧j+kとなれば配列memBと配列memCが共有可能と判断し、次のフェーズ(ステップS35)に進む。
また、i≧j+kが成り立たない場合は共有不可と判断してステップS16に進む(ステップS34)。
ここで、i≧j+kが成り立つと共有可能とする理由は、配列memA、memB、memCの処理サイクルのうち、システム全体の処理サイクルに影響を及ぼすのはmemAの処理サイクルであり、memB、memCはmemAの処理サイクルに待たされるため、memB、memCの処理サイクルの合計サイクルが、memAの処理サイクル以下であれば、memBとmemCの処理をシリアルに実行して良く(全体の処理速度は変わらない)、別のメモリに振り分ける必要がない。
このため、i≧j+kが成り立つと、配列memBとmemCが共有可能である。
配列memBとmemCが共有化可能な場合は、共有化可能配列抽出部13が、配列のサイズ関係を比較する。
配列数(メモリのワード数に相当)とビット数を比較し、大きい方に合わせたものを共有化する配列とする。
図11の場合は、memBの配列数256、ビット数32がmemCと同じため、このままのメモリサイズとする。
配列数やビット数が異なる場合の処理は、実施の形態1の例と同じであるので、ここでは説明を省略する。
このようにして、共有化可能配列抽出部13は、配列ごとに、プログラムコードの実行の際の配列の使用時に必要な記憶容量を解析して、memBとmemCが共有するメモリに必要な記憶容量を判断する。
また、共有化可能配列抽出部13は、共有化することが決まった配列(memBとmemC)が共有化済みである印としてマーキングをつける(ステップS35)。
なお、前記例ではサイズを合わせるようにしているが、サイズが大きく異なる場合はあまり効率的ではないため、共有化しないようにして次の候補の配列を探しにいってもよい。
ステップS35までで一つのパイプライン配列の共有化解析は完了で、その他の配列についてもステップS11からステップS35までを実施し、全ての配列について共有化解析が完了すればステップS17に進む(ステップS16)。
配列共有化記述部14において前記のマーキングした配列を共有化した動作記述(SystemC等)に変更して、動作は終了となる(ステップS17)。
図14が、高位設計メモリ共有化支援装置30の出力である図8のメモリ共有化動作記述ファイル2であり、配列共有化記述部14が図11の動作記述を配列共有化したSystemC記述である。
図14では、元々memCの開始イネーブル信号であったenCのタイミングをj==0からJ==256に変更し(符号1401)、元々memCだったメモリをmemBに変更するのみである(符号1402、1403)。
また、図11の3つ目のファイルを削除し、2つ目のファイルの下に演算memB[k]= funcX(d2in.read());を置いてもよく、変更方法は特に問わない。
なお、前記例では全ての配列を解析してから動作記述ファイルを一気に配列共有化に変更するようにしているが、配列一組を解析するたびに動作記述ファイルを配列共有化に変更しても構わない。
また、前記例では全配列を共有化の対象としているが、小容量のメモリを多数共有化したり、レイアウトで離れたメモリを共有化したりすることで配線混雑や配線遅延の問題が生じる可能性がある。
その場合は、共有化したくない配列にあらかじめマーキングしておくことにより、共有化対象外とすることも可能である。
このように、配列検出部11、配列処理サイクル抽出部31、配列処理サイクル分析部32及び共有化可能配列抽出部13が、プログラムコード(動作記述ファイル1)に含まれる配列ごとに、プログラムコード内で配列が使用されている配列の処理サイクルを分析し、システム全体の処理サイクルに影響を及ぼさない2つ以上の配列(前述の例では、memBとmemC)を抽出する。
そして、配列共有化記述部14が、システム全体の処理サイクルに影響を及ぼさない2つ以上の配列がプログラムコードの実行の際に同一のメモリを共有するように、プログラムコードを書き換えて、メモリ共有化動作記述ファイル2とする。
以上のように、本実施の形態によれば、性能向上のためのパイプライン動作の動作記述を入力し分析することで、システム全体性能に影響を及ぼさない範囲で共有化可能な配列(メモリ)を抽出し、その配列同士を共有化させる記述に変更した動作記述ファイルを自動で出力するようにしている。
このため、設計者の手を煩わさず、かつ、システム性能を落とすことなくメモリの共有化が可能となり半導体集積回路の回路規模が削減される。
また、共有化したくないメモリについては、あらかじめ指定して共有化対象から外すことも容易なので、共有化実施後に見直す必要がなくなる。
以上、本実施の形態では、
半導体集積回路の設計において、
設計回路の動作を記述した動作記述を入力する手段と、
当該動作記述から記憶素子となる配列を検出する手段と、
当該配列の使用箇所を検索する手段と、
当該配列の処理アクセスを抽出する手段と、
当該配列の処理アクセスを分析する手段と、
当該配列と共有化可能な別の配列を抽出する手段と、
当該配列同士が共有化される高位合成対象の動作記述に書き換える手段
とを備えた高位設計メモリ共有化支援装置を説明した。
なお、本実施の形態と実施の形態2とを組み合わせてもよい。
すなわち、図8の構成に図5の共有化情報入出力部21(抽出配列情報提示部)を追加し、共有化情報入出力部21が、共有化可能配列抽出部13により抽出された共有化候補の配列(前出の例では、配列memBとmemC)が示される共有化候補リスト3を生成し、生成した共有化候補リスト3を設計者に提示するようにしてもよい。
なお、共有化候補リスト3の提示後の手順は、実施の形態2で説明したものと同様であるため、説明を省略する。
なお、上記実施の形態1、2、3では、便宜的に動作記述をsystemC言語で記述した場合を示したが、適用対象は、特定のプログラム言語に限定されない。
従って、C、C++、SystemVerilog等の高位合成に入力する動作記述として用いられる言語に対し同じように適用することができる。
また、上記では、半導体集積回路の動作が記述されている動作記述ファイルに含まれている配列に対してメモリの共有化を図る例を説明したが、適用対象は動作記述ファイルに限定されない。
複数の配列が含まれ、2つ以上の配列でメモリを共有化する必要があるプログラムコードであれば、実施の形態1及び2及び3に示した手法でメモリの共有化を実現することができる。
最後に、実施の形態1及び2及び3に示した高位設計メモリ共有化支援装置10、20、30のハードウェア構成例を図15を参照して説明する。
高位設計メモリ共有化支援装置10、20、30はコンピュータであり、高位設計メモリ共有化支援装置10、20、30の各要素はプログラムにより処理を実行することができる。
高位設計メモリ共有化支援装置10、20、30のハードウェア構成としては、バスに、演算装置901、外部記憶装置902、主記憶装置903、通信装置904、入出力装置905が接続されている。
演算装置901は、プログラムを実行するCPU(Central Processing Unit)である。
外部記憶装置902は、例えばROM(Read Only Memory)やフラッシュメモリ、ハードディスク装置である。
主記憶装置903は、RAM(Random Access Memory)である。
通信装置904は、他の装置と通信を行う。
入出力装置905は、例えば、マウス、キーボード、ディスプレイ装置である。
プログラムは、通常は外部記憶装置902に記憶されており、主記憶装置903にロードされた状態で、順次演算装置901に読み込まれ、実行される。
プログラムは、図1及び図5において「〜部」として説明している機能を実現するプログラムである。
更に、外部記憶装置902にはオペレーティングシステム(OS)も記憶されており、OSの少なくとも一部が主記憶装置903にロードされ、演算装置901はOSを実行しながら、図1及び図5の「〜部」の機能を実現するプログラムを実行する。
また、入力された動作記述ファイル1は、外部記憶装置902に格納され、配列の抽出が行われる際に、外部記憶装置902から主記憶装置903にロードされる。
また、実施の形態1及び2及び3の説明において、「〜の判断」、「〜の判定」、「〜の抽出」、「〜の検出」、「〜の確認」、「〜の決定」、「〜の解析」、「〜の検知」、「〜の設定」、「〜の比較」、「〜の選択」、「〜の生成」、「〜の入力」、「〜の出力」等として説明している処理の結果を示す情報やデータや信号値や変数値が主記憶装置903にファイルとして記憶されている。
また、暗号鍵・復号鍵や乱数値やパラメータが、主記憶装置903にファイルとして記憶されてもよい。
なお、図15の構成は、あくまでも高位設計メモリ共有化支援装置10、20、30のハードウェア構成の一例を示すものであり、高位設計メモリ共有化支援装置10、20、30のハードウェア構成は図15に記載の構成に限らず、他の構成であってもよい。
また、実施の形態1及び2及び3に示す手順により、本発明に係る情報処理方法を実現可能である。
1 動作記述ファイル、2 メモリ共有化動作記述ファイル、3 共有化候補リスト、10 高位設計メモリ共有化支援装置、11 配列検出部、12 配列読出検索部、13 共有化可能配列抽出部、14 配列共有化記述部、15 ファイル入力部、20 高位設計メモリ共有化支援装置、21 共有化情報入出力部、30 高位設計メモリ共有化支援装置、31 配列処理サイクル抽出部、32 配列処理サイクル分析部。

Claims (9)

  1. 複数の配列が含まれるプログラムコードを入力するプログラムコード入力部と、
    前記プログラムコードに含まれる配列ごとに、前記プログラムコード内で配列が使用されている範囲を配列使用範囲として特定し、それぞれの配列使用範囲が重複しない2つ以上の配列を抽出する配列抽出部と、
    前記配列抽出部により抽出された2つ以上の配列が前記プログラムコードの実行の際に同一のメモリを共有するように、前記プログラムコードを書き換えるプログラムコード書換え部とを有することを特徴とする情報処理装置。
  2. 前記プログラムコード入力部は、
    異なる配列名を有する複数の配列が含まれるプログラムコードを入力し、
    前記プログラムコード書換え部は、
    前記配列抽出部により抽出された2つ以上の配列の配列名が同じになるように、前記プログラムコードを書き換えることを特徴とする請求項1に記載の情報処理装置。
  3. 前記情報処理装置は、更に、
    前記配列抽出部により抽出された配列ごとに、前記プログラムコードの実行の際の配列の使用時に必要な記憶容量を解析して、前記配列抽出部により抽出された2つ以上の配列が共有するメモリに必要な記憶容量を判断する記憶容量判断部を有し、
    前記プログラムコード書換え部は、
    前記記憶容量判断部により判断された記憶容量を持つメモリを前記配列抽出部により抽出された2つ以上の配列が共有するように、前記プログラムコードを書き換えることを特徴とする請求項1又は2に記載の情報処理装置。
  4. 前記配列抽出部は、
    抽出の対象外として指定されている配列を除き、配列ごとに配列使用範囲を特定することを特徴とする請求項1〜3のいずれかに記載の情報処理装置。
  5. 前記情報処理装置は、更に、
    前記配列抽出部により抽出された2つ以上の配列が示される抽出配列情報を生成し、前記情報処理装置のユーザに前記抽出配列情報を提示する抽出配列情報提示部を有し、
    前記プログラムコード書換え部は、
    前記抽出配列情報の提示の結果、前記配列抽出部により抽出された2つ以上の配列が前記情報処理装置のユーザに承認された場合に、前記配列抽出部により抽出された2つ以上の配列が前記プログラムコードの実行の際に同一のメモリを共有するように、前記プログラムコードを書き換えることを特徴とする請求項1〜4のいずれかに記載の情報処理装置。
  6. 前記配列抽出部は、
    前記抽出配列情報の提示の結果、前記配列抽出部により抽出された2つ以上の配列が前記情報処理装置のユーザに承認されなかった場合に、承認されなかった2つ以上の配列とは別の2つ以上の配列を抽出することを特徴とする請求項5に記載の情報処理装置。
  7. 前記プログラムコード入力部は、
    前記プログラムコードとして、半導体集積回路の動作が記述されている動作記述ファイルを入力することを特徴とする請求項1〜のいずれかに記載の情報処理装置。
  8. コンピュータが、複数の配列が含まれるプログラムコードを入力するプログラムコード入力ステップと、
    前記コンピュータが、前記プログラムコードに含まれる配列ごとに、前記プログラムコード内で配列が使用されている範囲を配列使用範囲として特定し、それぞれの配列使用範囲が重複しない2つ以上の配列を抽出する配列抽出ステップと、
    前記配列抽出ステップにより抽出された2つ以上の配列が前記プログラムコードの実行の際に同一のメモリを共有するように、前記コンピュータが、前記プログラムコードを書き換えるプログラムコード書換えステップとを有することを特徴とする情報処理方法。
  9. 複数の配列が含まれるプログラムコードを入力するプログラムコード入力ステップと、
    前記プログラムコードに含まれる配列ごとに、前記プログラムコード内で配列が使用されている範囲を配列使用範囲として特定し、それぞれの配列使用範囲が重複しない2つ以上の配列を抽出する配列抽出ステップと、
    前記配列抽出ステップにより抽出された2つ以上の配列が前記プログラムコードの実行の際に同一のメモリを共有するように、前記プログラムコードを書き換えるプログラムコード書換えステップとをコンピュータに実行させることを特徴とするプログラム。
JP2012221483A 2012-05-11 2012-10-03 情報処理装置及び情報処理方法及びプログラム Active JP6091140B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012221483A JP6091140B2 (ja) 2012-05-11 2012-10-03 情報処理装置及び情報処理方法及びプログラム

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2012109157 2012-05-11
JP2012109157 2012-05-11
JP2012221483A JP6091140B2 (ja) 2012-05-11 2012-10-03 情報処理装置及び情報処理方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2013254472A JP2013254472A (ja) 2013-12-19
JP6091140B2 true JP6091140B2 (ja) 2017-03-08

Family

ID=49951883

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012221483A Active JP6091140B2 (ja) 2012-05-11 2012-10-03 情報処理装置及び情報処理方法及びプログラム

Country Status (1)

Country Link
JP (1) JP6091140B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10303832B2 (en) 2015-09-18 2019-05-28 Mitsubishi Electric Corporation Architecture generating device
JP7100597B2 (ja) * 2019-02-25 2022-07-13 株式会社日立製作所 回路設計支援装置、回路設計支援方法、および情報処理装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005520238A (ja) * 2002-03-08 2005-07-07 メンター グラフィックス コーポレイション 動作合成ツールにおけるアレイ変換
JP4083491B2 (ja) * 2002-07-19 2008-04-30 富士通株式会社 モジュール間インタフェースの自動合成装置、合成方法、プログラム及び可搬記憶媒体
JP5293520B2 (ja) * 2009-09-14 2013-09-18 株式会社リコー 回路ブロック図作成装置、回路ブロック図作成方法、及び半導体集積回路製造方法

Also Published As

Publication number Publication date
JP2013254472A (ja) 2013-12-19

Similar Documents

Publication Publication Date Title
US10691856B1 (en) System design flow with runtime customizable circuits
US20190278884A1 (en) Methodology To Create Constraints And Leverage Formal Coverage Analyzer To Achieve Faster Code Coverage Closure For An Electronic Structure
JP5312151B2 (ja) 半導体設計支援装置、高位合成方法及び半導体設計支援プログラム
JP6091140B2 (ja) 情報処理装置及び情報処理方法及びプログラム
JP5979966B2 (ja) 回路設計支援装置及び回路設計支援方法及びプログラム
Tatsuoka et al. Physically aware high level synthesis design flow
Karmazin et al. Timing driven placement for quasi delay-insensitive circuits
US10157253B2 (en) Multi-bit-mapping aware clock gating
US20180107777A1 (en) Optimizing an integrated circuit (ic) design comprising at least one wide-gate or wide-bus
JP5979965B2 (ja) 回路設計支援装置及び回路設計支援方法及びプログラム
US8522175B2 (en) Semiconductor circuit design supporting apparatus and method, and non-transitory computer-readable medium
US8949766B2 (en) Detecting corresponding paths in combinationally equivalent circuit designs
US12073159B2 (en) Computing device and method for detecting clock domain crossing violation in design of memory device
JP2014194746A (ja) シミュレーション装置及びシミュレーション方法及びプログラム
US8832633B2 (en) Generating a convergent circuit design from a functional description using entities having access to the functional description and to physical design information
JP5541011B2 (ja) 最適化ネットリスト作成プログラム、最適化ネットリスト作成装置および最適化ネットリスト作成方法
JP2005293349A (ja) 回路設計支援システム、設計方法及びプログラム
JP5262678B2 (ja) 動作合成システム、動作合成方法、及び動作合成用プログラム
JP5333792B2 (ja) 半導体検証装置、方法およびプログラム
CN106650033B (zh) 一种输入输出端口的工艺映射方法
Chu et al. A New Design Methodology for Composing Complex Digital Systems
US9852259B2 (en) Area and/or power optimization through post-layout modification of integrated circuit (IC) design blocks
JP5849973B2 (ja) データ処理装置、データ処理システム、データ処理方法、及びデータ処理プログラム
US20180039722A1 (en) Circuit design support apparatus, circuit design support method, and computer readable medium
JP6394278B2 (ja) 有限状態機械の設計検証装置、設計検証方法、及び設計検証プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150911

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160804

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160830

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161013

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170110

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170207

R150 Certificate of patent or registration of utility model

Ref document number: 6091140

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250