JP5979965B2 - 回路設計支援装置及び回路設計支援方法及びプログラム - Google Patents
回路設計支援装置及び回路設計支援方法及びプログラム Download PDFInfo
- Publication number
- JP5979965B2 JP5979965B2 JP2012108307A JP2012108307A JP5979965B2 JP 5979965 B2 JP5979965 B2 JP 5979965B2 JP 2012108307 A JP2012108307 A JP 2012108307A JP 2012108307 A JP2012108307 A JP 2012108307A JP 5979965 B2 JP5979965 B2 JP 5979965B2
- Authority
- JP
- Japan
- Prior art keywords
- array
- access array
- write access
- read access
- read
- 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
Links
Images
Description
より具体的には、動作記述コード(以下、単に「動作記述」ともいう)からレジスタ転送レベルを自動生成する高位合成(動作合成)を利用した半導体設計を支援する回路設計支援装置に関する。
近年では集積回路の回路規模が増大しており、RTL設計時間を多大に要することが問題となっている。
そこで、RTLよりも抽象度が高い高級言語であるC言語、C++言語、SystemC言語などを用いて自動的にRTLを生成する高位合成技術が提唱されており、これを実現する高位合成ツールが市販されている。
一方で、高位合成ツールに対して、高性能なRTLを得るためにアーキテクチャを考慮した設計技術が提案されている。
特許文献1では、演算器の前にシフトレジスタを自動で挿入することで、高性能なパイプライン処理を行うものである。
特許文献1では、図20に示すようにメモリが1つしか生成されないので、図21に示すように、ループ1とループ2の処理は並列化ができず、その処理性能は低い。
もし、これを図22に示すように2つのメモリを使い、ループ1(の演算器)がメモリ1に書き込んでいる間、ループ2(の演算器)がメモリ2のデータを読み出し、2つのループ(の演算器)が各々の処理を完了すれば、今度は、ループ1(の演算器)がメモリ2に書き込み、ループ2(の演算器)がメモリ1からデータを読み出すような構成をとることができれば、処理は高速になる。
図22の構成における処理動作を図23に示す。
このような2つのメモリからなる構成を本明細書ではダブルバッファと呼ぶ。
ライトアクセスされるライトアクセス配列と、前記ライトアクセス配列と配列名が共通する、リードアクセスされるリードアクセス配列とが用いられて、高位合成の対象となる回路の動作が記述されている動作記述コードを、入力するコード入力部と、
配列名が共通するライトアクセス配列とリードアクセス配列との間の連携に用いられる連携バッファを前記高位合成において2個以上生成すべきライトアクセス配列とリードアクセス配列の条件がマルチバッファ生成条件として定義されているマルチバッファ生成条件情報を、入力する条件情報入力部と、
前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列とリードアクセス配列について前記マルチバッファ生成条件が成立するか否かを判断する条件判断部と、
前記条件判断部により、前記ライトアクセス配列と前記リードアクセス配列について前記マルチバッファ生成条件が成立すると判断された場合に、前記ライトアクセス配列と前記リードアクセス配列に対して2個以上の連携バッファを前記高位合成において生成することを指定するバッファ生成指定部とを有することを特徴とする。
本実施の形態では、高位合成において、複数のループ文の間にダブルバッファが生成されるようにする半導体設計支援装置を説明する。
つまり、本実施の形態に係る半導体設計支援装置は、配列からのリードだけでなく、配列へのライトも考慮して、その依存関係を抽出し、ダブルバッファ構成を実現できるようにする。
特許文献1では、配列の添え字はループ変数の一次式に限定されており、添え字に規則性がない場合は適用できないといった課題がある。
また、配列の添え字がループ変数の一次式の場合でも、読み出すメモリへライトするモジュールにおいて、そのライトするアドレスに規則性がない場合、システム全体として処理性能が劣るといった課題がある。
図19のMEM[i+adr]はライトアクセスされる配列であり、MEM[i]とMEM[i+1]はリードアクセスされる配列である。
「添え字に規則性がない」とは、図19のコード中のループ1の「MEM[i+adr]」のような配列の添え字がループ変数以外の変数を含むアドレスの指定をいう。
複数のメモリが配置され、1つの演算器に複数のメモリからデータを読み出す場合、それらのメモリからのリードデータの遅延を合わせるために、適宜遅延バッファと遅延バッファを制御する制御回路を別途作成する必要がある。
図24では、処理Cが処理Bと処理Aの結果を利用するが、処理Bの結果と処理Aの結果が時間的にずれるため、遅延バッファを設けて、その差を吸収している。
この遅延バッファと遅延バッファに付随する制御回路の設計は、高位合成ツールでは自動的に生成することができず、設計者が遅延バッファや制御回路の設計をする必要があるため、設計負荷が大きくなるといった課題がある。
このため、本実施の形態に係る半導体設計支援装置は、複数のメモリが配置され、1つの演算器に複数のメモリからデータを読み出す場合、そのデータの遅延を合わせるための、遅延バッファとそれを制御する制御回路を自動で生成する。
図1において、半導体設計支援装置1は、処理部3とテーブル記憶部4とファイル記憶部5を備える。
半導体設計支援装置1は、回路設計支援装置に相当する。
高位合成装置2は、高級言語(C/C++/SystemC言語など)による動作記述コードを受理して、RTLを生成する装置である。
半導体設計支援装置1から高位合成装置2へ高位合成が可能な動作記述コードを与えることで目的とするRTLを得ることができる。
一般に高位言語で記述されたコードは、高位合成ツールが高位合成できるように書き直しを行う必要がある。
この書き直しは、高位合成ツールの制約で合成できない記述をコードから削除、あるいは書き直すといった作業と、アーキテクチャを考慮したコードに変更することを意味する。
本明細書は、特に後者について考慮した高位合成向け高位言語生成を意図している。
処理部3は、コード入力部、条件情報入力部、条件判断部及びバッファ生成指定部に相当する。
テーブル記憶部4は、処理部3の処理結果が示されるテーブルや、処理部3が参照するテーブルを記憶する。
ファイル記憶部5は、処理部3が入力した動作記述コードを記憶する。
また、ファイル記憶部5は、処理部3が変更した後の動作記述コードを記憶してもよい。
図2は、実施の形態1の半導体設計支援装置1の動作の流れを示すフローチャートである。
このフローチャートにある機能は処理部3で実行され、必要なときにテーブル記憶部4とファイル記憶部5とのデータのやりとりが行われる。
動作を説明するにあたり図3に例示する動作記述コードを用いる。
なお、図3のコードは本実施の形態に係る動作を説明するために必要な一部を抜き出して示したものであり、動作記述としては不完全なものである。
本実施の形態に係る高性能化でダブルバッファを生成する場合、メモリ容量を従来の2倍要する。
性能が高くない場合でもシステム全体として十分であるならば、図20に示すようにメモリ1つでもよい。
設計によっては処理性能よりもメモリ量を少なくすることを優先する場合があるため、この選択はユーザ設定とする。
設定する手段としては、コードにプラグマを指定する方法や対話型でオプションを設定する方法などが可能である。
本明細書では、高性能化を実施する場合を説明するため、以降、高性能化指定があったという前提で説明を進める。
まず、処理部3は、高位合成対象となる動作記述コード(図3)とバッファ指定テーブル(図9)を入力し、動作記述コード(図3)をファイル記憶部5に格納し、バッファ指定テーブル(図9)をテーブル記憶部4に格納する。
バッファ指定テーブル(図9)は、高位合成においてダブルバッファ構成がとられるための条件(マルチバッファ生成条件)が示される情報であり、マルチバッファ生成条件情報の例に該当する。
なお、バッファ指定テーブル(図9)の詳細は後述する。
動作記述コードのファイル記憶部5への格納、バッファ指定テーブルのテーブル記憶部4への格納の後、処理部3は、ループ処理を検索し、読み出した順にループID(Identifier)を割り当てる。
次に、処理部3は、ループ内にライト(配列記述が左辺にある)記述部分と、リード(配列記述が右辺にある)記述部分を全て抽出し、抽出結果をアクセス情報テーブルとしてテーブル記憶部4に格納する。
ここで、
Noは、テーブルのレコード番号である。
配列IDは、配列の識別子である。
配列変数名が同じであれば、同じ配列IDとなる。
配列変数名は、参照名ではなく実体である変数名である。
ループIDは、ループ処理の識別子である。
同一ループ内にある配列変数であれば、配列変数IDが異なっていても同じループIDとなる。
R/Wは、Rが配列リードを表し、Wが配列ライトを表す。
実行数は、配列変数の記述箇所(行数)である。
図4のNo.2のdatは、図3のループ(2)のdat[radr+i]である。
図4のNo.3のdatは、図3のループ(3)の右辺のdat[i]とdat[i+1]である。
図4のNo.4のdatは、図3のループ(3)の左辺のdat[i]である。
図4のNo.5のfooは、図3のループ(2)の左辺のfoo[i]である。
図4のNo.6のfooは、図3のループ(3)の左辺のfoo[N−i]である。
また、ライトアクセス配列の配列要素をライトアクセスアドレスといい、リードアクセス配列の配列要素をリードアクセスアドレスという。
ライトアクセスアドレスは、それぞれライトアクセスのアクセス先のアドレスであり、リードアクセスアドレスは、それぞれリードアクセスのアクセス先のアドレスである。
処理部3の処理により高位合成においてダブルバッファとして設けられる2個のバッファは、配列名が共通するライトアクセス配列とリードアクセス配列との間の連携のための連携バッファである。
また、図3のループ(1)のライトアクセス配列dat[i+wadr]では、添え字がループ変数以外の変数を含んでおり、ライトアクセスアドレスに規則性がない。
同様に、図3のループ(2)のリードアクセス配列dat[radr+i]でも、添え字がループ変数以外の変数を含んでおり、リードアクセスアドレスに規則性がない。
次に、処理部3は、配列をリネームしてアクセス情報テーブルを更新する。
配列のリネーム処理では、処理部3は、2つの処理を行う。
1つ目は同一メモリへのライトを2回以上行っている場合、2回目のライト処理以降異なる配列へ割り当てる処理を行い、テーブルのアクセス情報テーブルを更新する。
つまり、以下の場合は、2回目のmemAをmemA_1配列などといった新規配列変数に割り当てる。
for(){
memA[..] = ..;
}
for(){
memB[..] = memA[..];
}
for(){
memA[..] = memC[..];//memAに対する2回目のライト処理
}
ただし、2回目のライト処理では、配列を別の配列に割り当てても結果が異ならないことが保証される場合に限る。
また、処理部3の2つ目の処理としては、同一配列をリードする異なるループIDにおいて、配列名をリネームする。
ここで元の配列名にリンクをはる。
また、リネームされた配列IDに異なるIDを再割り当てする。
図3のコード例でこの処理をしたアクセス情報テーブルを図5示す。
次に、処理部3は、テーブル記憶部4からアクセス情報テーブル(図5)を読み出す。
アクセス情報テーブル(図5)の配列IDに対し、動作記述コード(図3)上のどこに宣言があるかを検索する。
例えば、配列宣言は、
//コード
int dat[1024];
あるいは、
dat = new int[1024];
である。
処理部3は、配列宣言を見つけたら、その配列のサイズ(配列の添え字定数)を取得し、配列IDごとにサイズと配列タイプが示される配列タイプテーブルを生成し、生成した配列テーブルをテーブル記憶部4に格納する。
なお、配列タイプとは、MEM(メモリ)かREG(レジスタ)のいずれかである。
配列サイズによってはレジスタ構成も可能であるため、閾値をもってそれを判断する。
例えば、配列サイズ256以上の配列であれば、自動的にMEMにするなどである。
図3のコード例において、サイズと配列タイプとを抽出をした結果である配列テーブルを図6に示す。
図6の配列IDは、図5の配列IDと同じである。
次に、処理部3は、アクセス情報テーブル(図5)から以下の2つタイプを判定し、アクセス情報テーブルを更新する。
ループID毎に前のイタレーションが次のイタレーションに影響を与えるかを調べる。
具体的には、繰り返し文中にある任意の変数が参照後、代入を行っている場合は「依存あり」とし、それ以外を「依存なし」とする。
「依存あり」は、ライトアクセスアドレス又はリードアクセスアドレスの順序を変更すると高位合成の対象となる回路の動作が変化してしまうため、ライトアクセスアドレス又はリードアクセスアドレスの順序の変更が許容されないことを意味する。
一方、「依存なし」は、ライトアクセスアドレス又はリードアクセスアドレスの順序を変更しても高位合成の対象となる回路の動作が変化しないので、ライトアクセスアドレス又はリードアクセスアドレスの順序の変更が許容されることを意味する。
また、「依存なし」と判断された場合、処理部3は、更に、以下を判定する。
タイプBの配列に含まれるアドレスの間には規則性がない。
タイプAに該当する配列の添え字の例と、タイプBに該当する配列の添え字の例を以下に示す。
(タイプAの例) ArrayA[i]=ArrayB[i+1]+d;
(タイプBの例) ArrayA[i]=ArrayB[i+adr]+d;
また、「依存あり」の場合は、タイプBと判定する。
図3のコード例においてこの処理をした後のアクセス情報テーブルを図7に示す。
次に、処理部3は、アクセス情報テーブル(図7)を参照し、ループ間の依存関係判定を行い、アクセス情報テーブルを更新する。
まず、処理部3は、依存するループIDを各Noについて解析する。
基点となる最初のメモリアクセスの依存ループIDを依存ループ0(基点)とする。
これについて、外部より基点情報を与えてもよい。
以降、基点以外のリード処理について、解析していく。
図8に図3のコードを処理したアクセス情報テーブルを示す。
図3の例の場合はNo.1を基点(依存ループID0)とする。
No.2では、dat_Aへのリードアクセスは、ループID1のdatへのライトアクセスの終了後に実行されるため、依存ループIDを1とする。
つまり、No.2のdat_Aは、図3のループ(2)のdat[radr+i]であり、ループ(1)のdat[i+wadr]のライトアクセスの後に、リードアクセスされるので、依存ループIDが1となる。
No.3においても同様に、dat_Bへのリードアクセスは、ループID1のdatへのライトアクセスの終了後に実行されるため、依存ループIDを1とする。
つまり、No.3のdat_Bは、図3のループ(3)の右辺のdat[i]とdat[i+1]であり、ループ(1)のdat[i+wadr]のライトアクセスの後に、リードアクセスされるので、依存ループIDが1となる。
No.4のdat_1は図3のループ(3)の左辺のdat[i]であり、No.5のfooは図3のループ(2)の左辺のfoo[i]であるが、これらは、他の配列の影響を受けないので、依存ループはない。
No.6については、fooへのリードアクセスは、No.5のループID2のfooへのライトアクセスの終了後に実行されるため、依存ループIDを2とする。
つまり、No.6のfooは、図3のループ(3)の左辺のfoo[N−i]であり、ループ(2)のfoo[i]のライトアクセスの後に、リードアクセスされるので、依存ループIDが2となる。
次に、処理部3は、図8のアクセス情報テーブル及び図9に示すバッファ指定テーブルを参照し、ループ間のバッファ構成判定を行う。
まず、処理部3は、アクセス情報テーブル(図8)から、依存関係があるループID間にある配列IDを抽出する。
次に、処理部3は、バッファ指定テーブル(図9)を参照し、ループID間の配列のバッファ構成を決定する。
バッファ指定テーブルには、図9に示すように、高位合成においてダブルバッファとすべきライトアクセス配列及びリードアクセス配列についての条件(マルチバッファ生成条件)が定義されている。
ライトアクセス配列及びリードアクセス配列のうちの少なくとも一方のタイプがBであれば、ライトアクセス配列とリードアクセス配列との間にダブルバッファが構成される。
すなわち、ライトアクセス配列に含まれるライトアクセスアドレスの間に規則性がないこと、及びリードアクセス配列に含まれるリードアクセスアドレスの間に規則性がないことの少なくとも一方に該当すれば、ライトアクセス配列とリードアクセス配列との間にダブルバッファが構成される。
また、ライトアクセスアドレスの順序の変更が許容されないこと、及びリードアクセスアドレスの順序の変更が許容されないことの少なくとも一方に該当すれば、ライトアクセス配列とリードアクセス配列との間にダブルバッファが構成される。
このため、バッファ指定テーブル(図9)の4行目より、バッファタイプはダブルバッファとなる。
dat_Aはdatにリンクされているため、datについてはdat_Aに含まれるとして、datのバッファタイプは指定しない。
また、ループID2の配列fooはライトアクセス配列であり、タイプはAであり、この配列fooにリンクされているループID3の配列fooはライトアクセス配列であり、タイプはBである。
このため、バッファ指定テーブル(図9)の2行目より、ダブルバッファ構成となる。
最後にループID1の配列datはライトアクセス配列であり、タイプはBであり、配列datにリンクされているループID3のdat_Bはリードアクセス配列であり、タイプはAである。
このため、バッファ指定テーブル(図9)の3行目より、ダブルバッファ+シフトレジスタ構成となる。
これにより、各ループ間にバッファメモリを構成することが可能となる。
なお、ループ間ではない、例えば配列ID3については、ここではバッファタイプを指定しない。
図10に図3のコードの場合の配列テーブルを示す。
ここでダブルバッファとは、図22に示す構成であるため、そのメモリサイズは、通常の倍となる。
つまり、図10ではサイズは1024とあるが実質はその2倍である。
これにより、処理部3は、ブロック図を表現することが可能となる。
図11に、図3のコード例の場合のブロック図を示す。
処理部3は、図11のブロック図を、図1に図示していない表示装置に表示することができる。
また、後述するように、処理部3は、図11の構成が反映されるように、動作記述コードを書換え、書換え後の動作記述コードを高位合成装置2に出力する。
また、処理部3は、図11のブロック図を生成せずに、図8のアクセス情報テーブルと図10の配列テーブルに基づき、図11の構成が反映されるように、動作記述コードを書換え、書換え後の動作記述コードを高位合成装置2に出力するようにしてもよい。
また、処理部3は、図8のアクセス情報テーブルと図10の配列テーブルを高位合成装置2に出力し、高位合成装置2において動作記述コードを書換えさせるようにしてもよい。
また、本実施の形態に係る半導体設計支援装置によれば、ライトアクセス配列に含まれるライトアクセスアドレスの間に規則性がない場合(例えば、図3のdat[i+wadr])、リードアクセス配列に含まれるリードアクセスアドレスの間に規則性がない場合(例えば、図3のdat[radr+i])でも、高位合成においてダブルバッファを生成することができる。
また、本実施の形態に係る半導体設計支援装置によれば、ライトアクセス配列においてライトアクセスアドレスの順序の変更が許容されない場合、リードアクセス配列においてリードアクセスアドレスの順序の変更が許容されない場合にも、高位合成においてダブルバッファを生成することができる。
図11のブロック図では、ループID3の処理が正常に動作しない。
それは、ループID3(の演算器)がfooとdat_Bのデータをリードする必要があるが、そのデータ到達タイミングがずれてしまい、正しい値をリードできないためである。
そのため、ここではデータ到達の遅延を合わせる操作を行う。
つまり、処理部3は、特定のループ文(図11の例では、ループID1)の実行結果が2つ以上の他のループ文(図11の例では、ループID2とループID3)に派生しており、派生先の2つ以上のループ文の実行タイミングを調整する必要があると判断した場合に、派生先の2つ以上のループ文の実行タイミングの調整のための遅延バッファ(タイミング調整バッファ)を高位合成において生成するよう指定する。
処理部3は、高位合成装置2の高位合成の結果から、各ループIDの処理に何サイクル要するかを得る。
まず、ループID毎に高位合成装置2へ該当する記述部分を送り、高位合成を行わせる。
次に、処理部3は、高位合成装置2から該当する処理部分が要するサイクル数をアクセス情報テーブルの該当するループIDのライト部分におけるサイクル数項目に書き込む。
サイクル数を追記したアクセス情報テーブルの例を図12に示す。
制御インタフェースには、処理開始を受理する開始信号と、処理終了を意味する終了信号を付加する。
例えば、図12のアクセス情報テーブルでは、ループID3がループID1とループID2の2つのループに依存している。
この依存ループIDを1つにする。
どちらの依存ループIDに統一するかを説明するにあたり、ここで追加情報としてアクセス情報テーブルに追記されるアクセス遅延数について説明する。
処理部3は、アクセス情報テーブル内の基点ループID以外のループIDにおいて、アクセス情報テーブルのサイクル数と依存関係を利用してアクセス遅延数を算出する。
基点となるループIDについてはアクセス遅延数を0とする。
次に、処理部3は、基点となるループIDを依存ループIDとしているNoを検索する。
該当するNoについて、アクセス遅延数を基点ループIDのサイクル数とする。
次に、処理部3は、先に検索したNoのループIDを依存ループIDとするNoを検索する。
該当するNoについて、依存ループIDのサイクル数とアクセス遅延数の和を上記Noのアクセス遅延数とする。
以降、処理部3は、これらの処理を繰り返す。
式で表すと、アクセス遅延数=依存ループIDのサイクル数+依存ループIDのアクセス遅延数
となる。
図3のコード例の場合、図12を参照すると、依存ループIDの欄に、基点ループIDであるループID1が示されているレコードは、No.2とNo.3のレコードである。
No.2について、依存ループID1のサイクル数である1024をアクセス遅延数とする。
No.3についても同様に、依存ループID0のサイクル数である1024をアクセス遅延数とする。
依存ループIDの欄にNo.3のループID3が示されているレコードはないので、ループID3についてはループを検索する処理を終了する。
依存ループIDの欄にNo.2のループID2が示されているレコードは、No.6のレコードである。
No.6について、依存ループID2のサイクル数と依存ループID2のアクセス遅延数の和を自身のアクセス遅延数にする。
ここでは1023+1024=2047である。
この操作を繰り返し、アクセス遅延数をアクセス情報テーブルに追記する。
全てのアクセス遅延数を調べたら、基点以外の各ループIDについて以下を計算する。
共通のループIDに属するNoにおいて最大となるアクセス遅延数を、ループIDの最大アクセス遅延数とする。
そして、最大アクセス遅延数から各Noのアクセス遅延数を引いた値を遅延バッファ容量とする。
上記を実施したアクセス情報テーブルを図13に示す。
図14に図3のコード例の場合の依存テーブルを示す。
また、このステップにおいて再構築されたブロック図を図15に示す。
また、このブロック構成の性能を表す図を図17に示す。
図17では、ダブルバッファの構成を1面目、2面目と表記している。
ループID1にて処理されるdatのデータをA1〜A8と表記している。それぞれのAは1024個のデータのかたまりである。
同様にループID2にて処理されるfooのデータをB1〜B8と表記している。
ループID3にて処理されるdatのデータをC1〜C7と表記している。
メモリが2面あるため、読み出しと書き込みの順序を入れ替えることで最終出力であるCのデータが効率よく出力される様子がわかる。
図15に示す構成を得たので、処理部3は、次にダブルバッファとループ処理を制御する制御回路を生成する。
制御回路は、各ループIDの処理開始信号と終了信号、また各ダブルバッファの面の切替タイミングを制御する。
次に、制御回路は、各ループID(の演算器)から処理が終了したことを意味する終了信号を得る。
各ループID(の演算器)は終了信号の送信後、再度処理開始信号が制御回路から送信されるまでは停止する。
制御回路は、全てのループID(の演算器)から終了信号を得たら、ダブルバッファに面切替の指示を出す。
その後、制御回路は、各ループID(の演算器)にいっせいに処理開始信号を送信する。
図16に制御回路を含めた全体のブロック図を示す。
また、ユーザが制御回路の指定を行ってもよい。
また、処理部3は、制御回路によるダブルバッファの切替タイミングを算出し、算出した切替タイミングが高位合成においてダブルバッファに適用されるように動作記述コードを書換える。
そして、処理部3は、書換え後の動作記述コードを高位合成装置2に出力する。
最後に、高位合成装置2が、処理部3により書換えられた動作記述コードに基づき、各ループ文の演算器、ダブルバッファ、遅延バッファ、制御回路等を高位合成し、全ての回路を接続する。
また、処理部3が動作記述コードを書換える代わりに、処理部3が図16の内容を示す情報を高位合成装置2に出力し、高位合成装置2に動作記述コードを書換えさせ、高位合成装置2が、書換え後の動作記述コードに基づき、各ループ文の演算器、ダブルバッファ、遅延バッファ、制御回路等を高位合成し、全ての回路を接続するようにしてもよい。
しかし、生成するバッファのメモリの個数に限定はなく、複数個のメモリからなるマルチバッファであれば、本実施の形態に係る手法を適用可能である。
回路の動作を記述した動作記述を入力とし、前記入力された動作記述の中から、配列へアクセスする複数の配列変数の依存関係を抽出する手段と、
並列動作が可能となるように複数のメモリ構成を持つ動作記述に変換する手段を有する半導体設計支援装置を説明した。
回路の動作を記述した動作記述を入力とし、前記入力された動作記述の中から、複数の異なる遅延量、または遅延時間でデータを受理する演算器を抽出し、遅延量または遅延時間を吸収する遅延バッファを上記演算器の前に自動で配置する手段を有する半導体設計支援装置を説明した。
動作記述の中の異なるループ記述において、共通の配列名に代入をしている場合、2回目以降の配列代入において、異なる配列名で同じサイズの配列を生成し、配列の再利用をなくしたコードを生成する手段を有することを説明した。
半導体設計支援装置1はコンピュータであり、半導体設計支援装置1の各要素はプログラムにより処理を実行することができる。
半導体設計支援装置1のハードウェア構成としては、バスに、演算装置901、外部記憶装置902、主記憶装置903、通信装置904、入出力装置905が接続されている。
外部記憶装置902は、例えばROM(Read Only Memory)やフラッシュメモリ、ハードディスク装置である。
主記憶装置903は、RAM(Random Access Memory)である。
通信装置904は、高位合成装置2やその他の装置と通信を行う。
入出力装置905は、例えば、マウス、キーボード、ディスプレイ装置である。
プログラムは、図1に示す「処理部3」として説明している機能を実現するプログラムである。
更に、外部記憶装置902にはオペレーティングシステム(OS)も記憶されており、OSの少なくとも一部が主記憶装置903にロードされ、演算装置901はOSを実行しながら、図1に示す「処理部3」の機能を実現するプログラムを実行する。
また、本実施の形態の説明において、「〜の判断」、「〜の判定」、「〜の抽出」、「〜の算出」、「〜の導出」、「〜の指定」、「〜の解析」、「〜の検知」、「〜の設定」、「〜の登録」、「〜の選択」、「〜の生成」、「〜の入力」、「〜の出力」等として説明している処理の結果を示す情報やデータや信号値や変数値が主記憶装置903にファイルとして記憶されている。
また、暗号鍵・復号鍵や乱数値やパラメータが、主記憶装置903にファイルとして記憶されてもよい。
また、本実施の形態に示した高位合成装置2も、図18のハードウェア構成をしていてもよいし、他のハードウェア構成であってもよい。
Claims (18)
- ライトアクセスされるライトアクセス配列と、前記ライトアクセス配列と配列名が共通する、リードアクセスされるリードアクセス配列とが用いられて、高位合成の対象となる回路の動作が記述されている動作記述コードを、入力するコード入力部と、
配列名が共通するライトアクセス配列とリードアクセス配列との間の連携に用いられる連携バッファを前記高位合成において2個以上生成するためのマルチバッファ生成条件として、ライトアクセス配列に含まれるライトアクセスアドレスに規則性がないこと、及びリードアクセス配列に含まれるリードアクセスアドレスに規則性がないことの少なくともいずれかが定義されているマルチバッファ生成条件情報を、入力する条件情報入力部と、
前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列に含まれるライトアクセスアドレスに規則性があるか否か、及び抽出したリードアクセス配列に含まれるリードアクセスアドレスに規則性があるか否かを判断し、前記ライトアクセス配列に含まれるライトアクセスアドレスに規則性がない場合、及び前記リードアクセス配列に含まれるリードアクセスアドレスに規則性がない場合の少なくともいずれかにおいて、前記マルチバッファ生成条件が成立すると判断する条件判断部と、
前記条件判断部により、前記マルチバッファ生成条件が成立すると判断された場合に、前記ライトアクセス配列と前記リードアクセス配列に対して2個以上の連携バッファを前記高位合成において生成することを指定するバッファ生成指定部とを有することを特徴とする回路設計支援装置。 - 前記条件判断部は、
抽出したライトアクセス配列の添え字にループ変数以外の変数が含まれる場合は、前記ライトアクセス配列に含まれるライトアクセスアドレスに規則性がないと判断し、
抽出したリードアクセス配列の添え字にループ変数以外の変数が含まれる場合は、前記リードアクセス配列に含まれるリードアクセスアドレスに規則性がないと判断することを特徴とする請求項1に記載の回路設計支援装置。 - 前記条件判断部は、
抽出したライトアクセス配列の添え字が、係数が1であるループ変数の一次式と定数とで表現されている場合以外は、前記ライトアクセス配列に含まれるライトアクセスアドレスの間に規則性がないと判断し、
抽出したリードアクセス配列の添え字が、係数が1であるループ変数の一次式と定数とで表現されている場合以外は、前記リードアクセス配列に含まれるリードアクセスアドレスに規則性がないと判断することを特徴とする請求項1に記載の回路設計支援装置。 - 前記条件情報入力部は、ライトアクセスの順序の変更が許容されないこと、及びリードアクセスの順序の変更が許容されないことの少なくともいずれかがマルチバッファ生成条件として定義されているマルチバッファ生成条件情報を入力し、
前記条件判断部は、
前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列においてライトアクセスの順序の変更が許容されるか否か、及び抽出したリードアクセス配列においてリードアクセスの順序の変更が許容されるか否かを判断し、
前記ライトアクセス配列においてライトアクセスの順序の変更が許容されない場合、及び前記リードアクセス配列においてリードアクセスの順序の変更が許容されない場合の少なくともいずれかにおいて、前記マルチバッファ生成条件が成立すると判断することを特徴とする請求項1に記載の回路設計支援装置。 - ライトアクセスされるライトアクセス配列と、前記ライトアクセス配列と配列名が共通する、リードアクセスされるリードアクセス配列とが用いられて、高位合成の対象となる回路の動作が記述されている動作記述コードを、入力するコード入力部と、
配列名が共通するライトアクセス配列とリードアクセス配列との間の連携に用いられる連携バッファを前記高位合成において2個以上生成すべきライトアクセス配列とリードアクセス配列の条件がマルチバッファ生成条件として定義されているマルチバッファ生成条件情報を、入力する条件情報入力部と、
前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列とリードアクセス配列について前記マルチバッファ生成条件が成立するか否かを判断する条件判断部と、
前記条件判断部により、前記ライトアクセス配列と前記リードアクセス配列について前記マルチバッファ生成条件が成立すると判断された場合に、前記ライトアクセス配列と前記リードアクセス配列に対して2個以上の連携バッファを前記高位合成において生成することを指定するバッファ生成指定部とを有し、
前記条件判断部は、
前記動作記述コードから複数のループ文を抽出し、
抽出したループ文から、配列名が共通するライトアクセス配列とリードアクセス配列を抽出し、
抽出した配列名が共通するライトアクセス配列とリードアクセス配列のうちのいずれかの配列の配列名を変更し、
配列名の変更後のライトアクセス配列とリードアクセス配列において、リードアクセス配列ごとに、リードアクセス配列が依存しているライトアクセス配列を特定し、
リードアクセス配列と、リードアクセス配列が依存しているライトアクセス配列とを対にし、
ライトアクセス配列とリードアクセス配列との対ごとに、前記マルチバッファ生成条件が成立するか否かを判断する回路設計支援装置。 - 前記回路設計支援装置は、
前記条件判断部によるライトアクセス配列又はリードアクセス配列の配列名の変更が反映されるように、前記動作記述コードを書換えることを特徴とする請求項5に記載の回路設計支援装置。 - 前記条件判断部は、
配列名が共通するライトアクセス配列とリードアクセス配列において、リードアクセス配列ごとに、リードアクセス配列が依存している、他のループ文から抽出されたライトアクセス配列を特定することを特徴とする請求項5に記載の回路設計支援装置。 - 前記バッファ生成指定部は、
いずれかのライトアクセス配列とリードアクセス配列との対に対して2個以上の連携バッファを生成するよう指定した場合に、
前記ライトアクセス配列とリードアクセス配列との対の抽出元である2つのループ文と他のループ文との関係と、ループ文ごとの演算サイクル数とに基づき、前記2個以上の連携バッファの間でバッファの切替が行われる切替タイミングを算出し、算出した切替タイミングを前記高位合成において前記2個以上の連携バッファに対して適用するよう指定することを特徴とする請求項7に記載の回路設計支援装置。 - ライトアクセスされるライトアクセス配列と、前記ライトアクセス配列と配列名が共通する、リードアクセスされるリードアクセス配列とが用いられて、高位合成の対象となる回路の動作が記述されている動作記述コードを、入力するコード入力部と、
配列名が共通するライトアクセス配列とリードアクセス配列との間の連携に用いられる連携バッファを前記高位合成において2個以上生成すべきライトアクセス配列とリードアクセス配列の条件がマルチバッファ生成条件として定義されているマルチバッファ生成条件情報を、入力する条件情報入力部と、
前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列とリードアクセス配列について前記マルチバッファ生成条件が成立するか否かを判断する条件判断部と、
前記条件判断部により、前記ライトアクセス配列と前記リードアクセス配列について前記マルチバッファ生成条件が成立すると判断された場合に、前記ライトアクセス配列と前記リードアクセス配列に対して2個以上の連携バッファを前記高位合成において生成することを指定するバッファ生成指定部とを有し、
前記条件判断部は、
前記動作記述コードから複数のループ文を抽出し、
前記バッファ生成指定部は、
前記条件判断部により抽出された前記複数のループ文のうちの特定のループ文の実行結果が2つ以上の他のループ文に派生しており、派生先の2つ以上のループ文の実行タイミングを調整する必要があると判断した場合に、
派生先の2つ以上のループ文の実行タイミングの調整のためのタイミング調整バッファの生成を指定することを特徴とする回路設計支援装置。 - 前記バッファ生成指定部は、
前記条件判断部により抽出された前記複数のループ文におけるループ文の間の関係を解析した結果、特定のループ文の実行結果が2つ以上の他のループ文に派生しており、派生先の2つ以上のループ文のうちのいずれかのループ文の実行結果が他のいずれかのループ文に派生している場合に、
派生先の2つ以上のループ文の実行タイミングを調整する必要があると判断することを特徴とする請求項9に記載の回路設計支援装置。 - 前記バッファ生成指定部は、
派生先の2つ以上のループ文の実行タイミングを調整する必要があると判断した場合に、
前記特定のループ文の演算サイクル数と、派生先の各ループ文の演算サイクル数とに基づき、タイミング調整バッファのバッファ容量を算出し、
算出したバッファ容量を有するタイミング調整バッファの生成を指定することを特徴とする請求項9に記載の回路設計支援装置。 - 前記バッファ生成指定部は、
前記高位合成を実行する高位合成装置から、前記特定のループ文の演算サイクル数と、派生先の各ループ文の演算サイクル数とを通知され、
前記高位合成装置から通知された、前記特定のループ文の演算サイクル数と、派生先の各ループ文の演算サイクル数とに基づき、タイミング調整バッファのバッファ容量を算出することを特徴とする請求項11に記載の回路設計支援装置。 - 前記回路設計支援装置は、
前記動作記述コードに含まれるループ文を実行する演算器と、前記バッファ生成指定部により指定された2個以上の連携バッファとが接続されて示されるブロック図を生成することを特徴とする請求項1、5及び9のいずれか一項に記載の回路設計支援装置。 - 前記回路設計支援装置は、
前記演算器と前記2個以上の連携バッファとの接続関係が反映されるように、前記動作記述コードを書換えることを特徴とする請求項13に記載の回路設計支援装置。 - 前記回路設計支援装置は、
前記動作記述コードに含まれるループ文を実行する演算器と、前記バッファ生成指定部により指定された2個以上の連携バッファと前記タイミング調整バッファと、前記演算器と前記2個以上の連携バッファと前記タイミング調整バッファを制御する制御回路とが接続されて示されるブロック図を生成することを特徴とする請求項9に記載の回路設計支援装置。 - 前記回路設計支援装置は、
前記演算器と前記2個以上の連携バッファと前記タイミング調整バッファと前記制御回路との接続関係が反映されるように、前記動作記述コードを書換えることを特徴とする請求項15に記載の回路設計支援装置。 - ライトアクセスされるライトアクセス配列と、前記ライトアクセス配列と配列名が共通する、リードアクセスされるリードアクセス配列とが用いられて、高位合成の対象となる回路の動作が記述されている動作記述コードを、コンピュータが、入力するコード入力ステップと、
配列名が共通するライトアクセス配列とリードアクセス配列との間の連携に用いられる連携バッファを前記高位合成において2個以上生成するためのマルチバッファ生成条件として、ライトアクセス配列に含まれるライトアクセスアドレスに規則性がないこと、及びリードアクセス配列に含まれるリードアクセスアドレスに規則性がないことの少なくともいずれかが定義されているマルチバッファ生成条件情報を、前記コンピュータが、入力する条件情報入力ステップと、
前記コンピュータが、前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列に含まれるライトアクセスアドレスに規則性があるか否か、及び抽出したリードアクセス配列に含まれるリードアクセスアドレスに規則性があるか否かを判断し、前記ライトアクセス配列に含まれるライトアクセスアドレスに規則性がない場合、及び前記リードアクセス配列に含まれるリードアクセスアドレスに規則性がない場合の少なくともいずれかにおいて、前記マルチバッファ生成条件が成立すると判断する条件判断ステップと、
前記条件判断ステップにより、前記マルチバッファ生成条件が成立すると判断された場合に、前記コンピュータが、前記ライトアクセス配列と前記リードアクセス配列に対して2個以上の連携バッファを前記高位合成において生成することを指定するバッファ生成指定ステップとを有することを特徴とする回路設計支援方法。 - ライトアクセスされるライトアクセス配列と、前記ライトアクセス配列と配列名が共通する、リードアクセスされるリードアクセス配列とが用いられて、高位合成の対象となる回路の動作が記述されている動作記述コードを、入力するコード入力ステップと、
配列名が共通するライトアクセス配列とリードアクセス配列との間の連携に用いられる連携バッファを前記高位合成において2個以上生成するためのマルチバッファ生成条件として、ライトアクセス配列に含まれるライトアクセスアドレスに規則性がないこと、及びリードアクセス配列に含まれるリードアクセスアドレスに規則性がないことの少なくともいずれかが定義されているマルチバッファ生成条件情報を、入力する条件情報入力ステップと、
前記動作記述コードから配列名が共通するライトアクセス配列とリードアクセス配列とを抽出し、抽出したライトアクセス配列に含まれるライトアクセスアドレスに規則性があるか否か、及び抽出したリードアクセス配列に含まれるリードアクセスアドレスに規則性があるか否かを判断し、前記ライトアクセス配列に含まれるライトアクセスアドレスに規則性がない場合、及び前記リードアクセス配列に含まれるリードアクセスアドレスに規則性がない場合の少なくともいずれかにおいて、前記マルチバッファ生成条件が成立すると判断する条件判断ステップと、
前記条件判断ステップにより、前記マルチバッファ生成条件が成立すると判断された場合に、前記ライトアクセス配列と前記リードアクセス配列に対して2個以上の連携バッファを前記高位合成において生成することを指定するバッファ生成指定ステップとをコンピュータに実行させることを特徴とするプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012108307A JP5979965B2 (ja) | 2012-05-10 | 2012-05-10 | 回路設計支援装置及び回路設計支援方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012108307A JP5979965B2 (ja) | 2012-05-10 | 2012-05-10 | 回路設計支援装置及び回路設計支援方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2013235474A JP2013235474A (ja) | 2013-11-21 |
JP5979965B2 true JP5979965B2 (ja) | 2016-08-31 |
Family
ID=49761541
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012108307A Active JP5979965B2 (ja) | 2012-05-10 | 2012-05-10 | 回路設計支援装置及び回路設計支援方法及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5979965B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10599803B2 (en) | 2016-03-10 | 2020-03-24 | Mitsubishi Electric Corporation | High level synthesis apparatus, high level synthesis method, and computer readable medium |
WO2018146727A1 (ja) * | 2017-02-07 | 2018-08-16 | 三菱電機株式会社 | 高位合成装置、高位合成方法および高位合成プログラム |
JP6761182B2 (ja) * | 2017-03-14 | 2020-09-23 | 富士通株式会社 | 情報処理装置、情報処理方法及びプログラム |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4083491B2 (ja) * | 2002-07-19 | 2008-04-30 | 富士通株式会社 | モジュール間インタフェースの自動合成装置、合成方法、プログラム及び可搬記憶媒体 |
JP2007272797A (ja) * | 2006-03-31 | 2007-10-18 | Toshiba Corp | パイプライン高位合成システム及び方法 |
-
2012
- 2012-05-10 JP JP2012108307A patent/JP5979965B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2013235474A (ja) | 2013-11-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9639371B2 (en) | Solution to divergent branches in a SIMD core using hardware pointers | |
JP4339907B2 (ja) | マルチプロセッサ向け最適コード生成方法及びコンパイル装置 | |
US6505339B1 (en) | Behavioral synthesis links to logic synthesis | |
US6678644B1 (en) | Integrated circuit models having associated timing exception information therewith for use with electronic design automation | |
Miranda et al. | High-level address optimization and synthesis techniques for data-transfer-intensive applications | |
US6438731B1 (en) | Integrated circuit models having associated timing exception information therewith for use in circuit design optimizations | |
US8584062B2 (en) | Tool suite for RTL-level reconfiguration and repartitioning | |
US9830164B2 (en) | Hardware and software solutions to divergent branches in a parallel pipeline | |
JP5966509B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
JP5312151B2 (ja) | 半導体設計支援装置、高位合成方法及び半導体設計支援プログラム | |
JP7088897B2 (ja) | データアクセス方法、データアクセス装置、機器及び記憶媒体 | |
Pham‐Quoc et al. | A high‐performance fpga‐based bwa‐mem dna sequence alignment | |
US8266416B2 (en) | Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system | |
JP5979965B2 (ja) | 回路設計支援装置及び回路設計支援方法及びプログラム | |
US8990741B2 (en) | Circuit design support device, circuit design support method and program | |
Park et al. | Performance and area modeling of complete FPGA designs in the presence of loop transformations | |
US11106846B1 (en) | Systems and methods for emulation data array compaction | |
JP6091140B2 (ja) | 情報処理装置及び情報処理方法及びプログラム | |
CN115004150A (zh) | 用于预测和调度软件流水化循环中的复制指令的方法和装置 | |
JP6305644B2 (ja) | アーキテクチャ生成装置およびアーキテクチャ生成プログラム | |
US11048843B1 (en) | Dynamic netlist modification of compacted data arrays in an emulation system | |
JP6317603B2 (ja) | 情報処理装置、情報処理装置の制御方法及びプログラム | |
US8495539B1 (en) | Scheduling processes in simulation of a circuit design | |
JP5626724B2 (ja) | アクセラレータ及びデータ処理方法 | |
JP2011022863A (ja) | 動作合成装置及び動作合成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20141203 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20151217 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20160119 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160222 |
|
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: 20160628 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160726 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5979965 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 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |