JP4083491B2 - Module-to-module interface automatic synthesis apparatus, synthesis method, program, and portable storage medium - Google Patents

Module-to-module interface automatic synthesis apparatus, synthesis method, program, and portable storage medium Download PDF

Info

Publication number
JP4083491B2
JP4083491B2 JP2002211812A JP2002211812A JP4083491B2 JP 4083491 B2 JP4083491 B2 JP 4083491B2 JP 2002211812 A JP2002211812 A JP 2002211812A JP 2002211812 A JP2002211812 A JP 2002211812A JP 4083491 B2 JP4083491 B2 JP 4083491B2
Authority
JP
Japan
Prior art keywords
variable
inter
module interface
module
data
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.)
Expired - Fee Related
Application number
JP2002211812A
Other languages
Japanese (ja)
Other versions
JP2004054641A (en
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2002211812A priority Critical patent/JP4083491B2/en
Publication of JP2004054641A publication Critical patent/JP2004054641A/en
Application granted granted Critical
Publication of JP4083491B2 publication Critical patent/JP4083491B2/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明は、高位合成(High Level Synthesis)による回路設計の技術に関し、更に詳しくは並列動作する複数の回路モジュール間のインタフェースとなるモジュール間インタフェースの合成に関する。
【0002】
【従来の技術】
近年ハードウエアは、VLSIに代表されるように大規模化されており、これに対処する為ハードウエア設計をコンピュータを使って自動化するという研究が進められている。ハードウエア設計の手法の一つとして、VHDLやSFLなどのような回路記述言語を用いてハードウエアを意識しないで動作仕様を記述し、これをコンピュータに入力すると、コンピュータが各モジュールの入力論理の合成や論理圧縮などを行い、更に配置・配線などが行われて実際の回路を合成するものがある。このような回路記述言語からの合成手法のうち、特に抽象度の高い回路記述から合成する手法を高位合成と呼ぶ。
【0003】
図32に、高位合成による回路設計で用いられる回路記述言語による動作記述例を示す。同図の例では、(A)部分には、配列変数にデータを出力する処理が記述されており、(B)部分には、配列変数からデータを読み出す処理が記述されている。
【0004】
高位合成による回路設計において、図32に示すように記述された、もともと逐次的に処理される部分(A)、(B)を、並列実行させる構成としたい場合がある。
【0005】
このような場合、並列実行される回路モジュール間でのデータ転送を担いインタフェースとなる部分をハードウエアとして作成するが、たいていこのインタフェースとなる部分の回路には、タイミング調整用のバッファメモリを設けなければならない。そしてデータを出力する回路モジュールはこのバッファにデータを書き込み、データを受け取る回路モジュールはこのバッファからデータを読み出す。
【0006】
図32の(A)部分で記述された処理を実現する回路モジュールA、及び(B)部分で記述された処理を実現する回路モジュールBを実装し、両者を並列実行させる場合、回路モジュールAと回路モジュールBとでバッファ上の同じ配列変数に対するアクセスが行われる。
【0007】
この時この2つの回路モジュールが正しく並列処理を行う為には、配列変数に対する書き込みと読み出しの順序が正しく行われなければならない。つまり、回路モジュールAが書き込んだ後に回路モジュールBが読み出す、回路モジュールBが読み出す前に回路モジュールAが書き込んではいけない、といった順序関係が保証される必要がある。
【0008】
これを実現する方法の1つとして、配列変数array を2重化し、array Aとarray Bの2つの配列変数に対するメモリ領域を備える構成としてハードウエア化することが考えられる。この場合、回路モジュールAがarray Aに書き込み、その間回路モジュールBはarray Bから読み出す。回路モジュールA、Bが最後まで書き込み/読み出し終わったら、今度は、回路モジュールAがarray Bに書き込み、回路モジュールBはarray Aから読み出す。以降、この動作を繰り返す。
【0009】
この方法を用いると、回路モジュールAで書き込み終わった後に回路モジュールBが読み出し、回路モジュールBが読み出す前に回路モジュールAは書き込まない、という条件は満たすことが出来る。
【0010】
この方法を用いた場合、配列変数arrayとして使用するメモリ量は、必ずしも元の配列変数のサイズの2倍は必要ないケースが多い。しかし回路を半導体チップ内に構成する場合、メモリサイズはできるだけ小さい方が回路の配置/配線、消費電力、製造コストなど多くの点でメリットがある。
【0011】
メモリを2重化する方法以外としては、回路設計者が、動作記述を十分に解析し、上記の配列変数を領域を2重化する方法よりもメモリ量を削減した実現方法を、回路毎に検討して手作業で設計する方法が考えられる。
【0012】
また高位合成一般において、本発明で対象としているモジュール間インタフェース回路とは別に、変数をメモリ(レジスタ)に割り当てるスケジューリング処理がある。そこでは、変数共有と呼ばれる最適化処理が行われる。これは、ライフタイムが重複しない変数は、おなじメモリに割り当てることで、高位合成によって生成されるハードウエア量を減らす技術である。この技術は、本発明で対象としている高位レベル記述のモデルの構造と配列変数に対しては、そのままでは適用できない。
【0013】
【発明が解決しようとする課題】
本発明は、上述したような、並列実行される複数の回路のインタフェースとなる回路を自動合成することが出来る仕組みを提供することを課題とする。
【0014】
またこの時、インタフェースとなる回路を構成するバッファメモリのサイズ決定と、バッファメモリに関係する制御回路を自動合成することが出来る仕組みを提供することを課題とする。
【0015】
配列変数のアクセスを数学的にモデル化し、従来より少ないメモリ量でレイテンシ(処理すべきデータが投入されてから処理結果がでてくるまでの時間)も小さくなったインタフェースとなる回路を、自動合成する仕組みを提供することを課題とする。
【0016】
【課題を解決するための手段】
上記問題点を解決する本発明による合成装置は、並列に動作する複数の回路モジュールの間のデータの受け渡しを行うモジュール間インタフェースを合成することを前提として、変数算出手段、ライフタイム算出手段、縮退集合算出手段及び回路合成手段を備える。
【0017】
変数算出手段は、前記回路モジュールによる前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析し、該解析の結果に基いて前記モジュール間インタフェースが持つ変数を求める。
【0018】
ライフタイム算出手段は、前記モジュール間インタフェースが持つ変数に対して、最初にデータが書き込まれてから最後に読み出されるまでの期間を示すライフタイムを求める。
【0019】
縮退集合算出手段は、前記変数を要素として持つ集合を整数分割して得られる部分集合で、要素となる変数の全てに対し、当該要素となる変数の前記ライフタイムと特定の時間ずれた前記ライフタイムを持つ変数が、前記分割して得られる他の部分集合に存在する縮退させた変数集合を探す。
【0020】
回路合成手段は、前記縮退させた変数集合を用いて、変数の割り当てを元に前記モジュール間インタフェースを合成する。
また本発明は、回路記述言語による記載を解析し、回路の仕様を出力するコンパイラ手段及び上記合成装置を手段として備えるCADシステムとして実現することもできる。
【0021】
また本発明は、前記回路モジュールによる前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析し、該解析の結果に基いて前記モジュール間インタフェースが持つ変数を求め、前記モジュール間インタフェースが持つ変数に対して、最初にデータが書き込まれてから最後に読み出されるまでの期間を示すライフタイムを求め、前記変数を要素として持つ集合を整数分割して得られる部分集合で、要素となる変数の全てに対し、当該要素となる変数の前記ライフタイムと特定の時間ずれた前記ライフタイムを持つ変数が、前記分割して得られる他の部分集合に存在する縮退させた変数集合を探し、前記縮退させた変数集合を用いて、変数の割り当てを元に前記モジュール間インタフェースを合成することを特徴とする合成方法も適用範囲内である。
【0022】
更に本発明は、コンピュータプログラムや可搬記憶媒体も適用範囲内である。本発明によれば、モジュール間インタフェースを自動的に合成することができる。
【0023】
また使用するメモリ量を少なくしたモジュール間インタフェースを合成することができる。
発明の他の特徴を図24,図25を参照して説明する。V[0]からV[n−1]までのn個の変数の全体集合(図24ではV[0]からV[63])の各変数V[i]が時刻Begin[i](図24で#の始まる時刻)において、メモリのあるアドレスに書き込まれ、ライフタイムT(図24では#の数)だけ保持され、時刻End[i](図24で#が終わった次の時刻)で読み出されるメモリの書き込み読み出し動作を前提に説明する。変数V[i](図24で例えばV[0]の書き込みが始まるBegin[i]からライフタイムT後に変数V[j](図24で例えばV[4])の書き込み時刻Begin[j]となること、及び変数V[i]の読み出し時刻End[i]以降に変数V[j]のBegin[j]が始まらなければいけないという条件を満足するiとjの組み合わせからなる書き込み系列と読み出し系列が、互いに合同すなわち時間差Trで同じライフタイムをもつ変数の集合になる部分集合(図24のP0,P1,P2,P3)を求める。各部分集合の中では変数の書き込み時刻は異なる。その条件を満足する部分集合がいくつかできた場合にはその部分集合を全体集合に対して縮退された部分集合と呼ぶ。
【0024】
この縮退された部分集合は変数の順序関係において、合同となっているので縮退された部分集合の変数に対応するアドレス空間で(図24では部分集合P0に対応するアドレス空間16)メモリの読み書きが可能となる。すなわち、アドレス空間が図24では64から16に縮退されたことになる。
【0025】
さらに、各縮退された変数集合をさらなる部分集合に分割しても、変数の共有化すなわち1つのアドレスに複数の変数を入れることによって前述の縮退されたアドレス空間よりも少ないアドレス空間で上の条件を満たすことができる。たとえば、図24のV[0],V[4],V[6]をA,+,Bとすれば、図25のメモリのアドレスM[0]に割り当てることができる。これを変数の共有化と呼ぶ。図25では、もともとのアドレス空間64が10まで縮退されたことになる。
【0026】
【発明の実施の形態】
図1は、本発明におけるインタフェースとなるモジュール間インタフェースのを自動生成する技術をCADシステムに応用した場合のCADシステムの構成を示すブロック図である。
【0027】
同図のCADシステム1は、入力編集部11、コンパイラ部12、ライブラリ格納部13、インタフェースモジュール生成部14及び出力部15を備えている。尚同図は、CADシステムのうち本発明に関連する部分のみが示してある。
【0028】
入力編集部11は、回路を設計する際、ユーザによる処理内容を回路記述言語で記述入力・編集を処理する部分である。コンパイラ部12は、入力編集部11からユーザが入力した記述内容やファイルとして読み込んだファイル内の回路記述言語による記述内容を実現する回路の仕様を生成する。ライブラリ格納部13は、複数の回路ライブラリを格納する部分で、コンパイラ部12が回路を生成する際に参照し、必要なライブラリを引き出す。インタフェースモジュール生成部14は、上記した並列実行される複数の回路モジュール間のインタフェースとなるモジュール間インタフェースを生成するもので、コンパイラ部12が回路を生成する際、回路記述言語による記述内容を解析し、モジュール間インタフェースが必要と判断すると、その生成を依頼する。尚このインタフェースモジュール生成部14は、ライブラリ格納部13の一部機能として構成しても良い。入出力部15は、コンパイラ部12が生成した回路をファイルとして、あるいはディスプレイ等の表示装置上に出力するものである。
【0029】
このCADシステムは専用ハード上によって実現しても良いし、汎用のコンピュータを用いてソフトウエアによって実現することも可能である。
尚インタフェースモジュール生成部14は、CADシステム1やCADシステムを実現するソフトウエア一部としてではなく、他の装置やソフトエア、例えば高位合成ツール等の開発ツールやコンパイラの一部として、あるいは単独の装置やソフトウエアとして構成しても良い。
【0030】
図2は、インタフェースモジュール生成部14が行う処理を示す図である。
インタフェースモジュール生成部14は、コンパイラ部12からのインタフェースモジュールの生成依頼に対して、以下の処理を行う。
1.書き込み系列と読み出し系列を解析する。
2.書き込み系列と読み出し系列から、出力遅延を求める。
3.変数のライフタイムを解析する。
4.縮退させた変数集合を求める。
5.変数共有問題を解き、変数をメモリに割り当てる。
6.モジュール間インタフェースを合成する。
【0031】
尚上記各処理については、後述する。
インタフェースモジュール生成部14は、並列に動作する回路モジュールA、B及び回路モジュールA、Bのモジュール間インタフェースCをプロセスとして表現して処理する。
【0032】
ここでのプロセスとは、通信ポートに書き込みもしくは読み出しを行うことで、他のプロセスと通信しながら動作するものをいう。プロセス内部には、記憶(メモリ)が存在してもよい。プロセスは、互いに影響を与えることなく自由に通信操作を実行できる(複数のプロセスが並列動作する)。
【0033】
またモジュール間インタフェースCを生成する際には、以下の点を考慮して行う。
・複数のプロセスが並列に動作する。
・通信路に記憶は存在しない。
・相手が読み出す前に書き込みを行った場合には、いわゆる上書きを行ってしまい、前回書き込んだデータを壊してしまう。
・新しいデータを書き込む前に読み出しを行うと、前回書き込んだデータが読み出されるだけで新しいデータを読み出すことは出来ない。
【0034】
プロセスは、それぞれ固有の時計を持つ。ただし、各プロセスの時計が示す時刻は、互いに線形関数で表現できるものとする。プロセス毎に時計が別々なのは、各回路モジュールが同一のクロック信号を用いて動作しているとは限らず、回路モジュール毎にクロック周波数やその位相が異なった場合において、簡潔に表現するためのものにすぎない。またそれぞれ固有の時計を持っても、各時刻は線形関数で変換できるので、複数の時計があることで、モデルがそれほど複雑になることはない。また、各回路モジュールが全て同一のクロック信号で動作することが予め判っているときは、全ての回路モジュールの時刻を1つの時計で表現してもよい。
【0035】
図3は、インタフェースモジュール生成部14で扱われるプロセスの例を示す図である。
同図において、プロセスCが並列動作するプロセスA及びプロセスBのモジュール間インタフェースとなる。プロセスAは、データを出力する際、プロセスCのメモリへの書き込み操作に相当する通信を行い、プロセスBは、データを入力する際、プロセスCのメモリからの読み出し操作に相当する通信を行う。そしてインタフェースモジュール生成部14は、回路モジュールAが書き込身が完了した後に回路モジュールBが読み出し、回路モジュールBが読み出す前に回路モジュールAが書き込まないよう、順序関係が保証されるように制御するモジュールCを生成する。
【0036】
図4及び図5は、インタフェースモジュール生成部14によって生成されるモジュール間インタフェースの実現例を示す図である。
図4は、配列変数をRAM上に割り当てた場合の構成で、回路モジュールAからのデータの書き込みやモジュールBからのデータの読み出しに対して、制御回路が各配列変数に割り当てたアドレスを発行して、順序関係が保証されるように制御する。
【0037】
また図5は、配列変数をレジスタ上に割り当てた場合の構成で、回路モジュールAからのデータの書き込みに対して、制御回路は割り当てられたレジスタに対してロード信号を送信して書き込ませ、モジュールBからのデータの読み出しに対しては、セレクタを制御信号によって制御して対応するレジスタからのデータを出力させることによって順序関係が保証されるように制御する。
【0038】
次に図2に示した、インタフェースモジュール生成部14による処理を詳細に説明する。
(1)書き込み系列/読み出し系列の解析
この処理では、回路モジュールAの出力及び回路モジュールBの入力をプロセスCの入力/出力として書き換え、以降の処理をプロセスCに対する記述のみで議論できるようにする。
【0039】
以下の説明では、プロセスA及びプロセスBの時計が示す時刻をtA 、tB と表記する。またプロセスAが時刻tA のときに書き込む配列変数の添字の集合をω(A,tA)、プロセスBが時刻tB のときに読み出す配列変数の添字の集合をγ(B,tB )と表記する。尚本実施例では一度に複数の配列変数要素に対してアクセスするケースも想定して集合としている。また
プロセスAの書き込み系列W(A):
W(A)={(tA ,ω(A,tA ))|tA はプロセスAの時刻}
プロセスBの読み出し系列R(B):
R(B)={tB ,γ(B,tB ))|tB はプロセスBの時刻}
と定義する。たとえば、
W(A)={(0,{0,32}),(1,{1,33}),・・・,{j,(32+j)}},j=c mod32
は、時刻0で配列変数の0番目と32番目に書き込みを行い、時刻1で1番目と33番目に書き込みを行い、・・・というプロセスを表現しており、また
R(B)={(0,{0,1}),(1,{2,3}),・・・,(d,{(2j),(2j+1)}),・・・},j=d mod 32
は、時刻0で配列変数の0番目と1番目を読み出し、時刻1で2番目と3番目を読み出し、・・・というプロセスを表現している。
【0040】
図6は、読み出し系列/書き込み系列のデータ構造例を示す図である。
プロセスの読み出し系列は書き込み系列は、図6のような1次元配列とリスト構造の組み合わせで実現できる。同図は、配列の要素がリスト構造データの先頭を示しており、またリスト構造部分の各データはその時刻でアクセスする変数の添え字の集合を表している。同図の例では系列{(0,{0,1、2}),(1,{3,4}),(3,{5,6}),・・・,(n−1,{30,31})}を格納した場合を示している。
【0041】
またプロセスAの時刻tA bからtA eまでの書き込み系列W(A,tA b,tA e):
W(A,tA b,tA e)={(tA b,ω(A,tA ))|tA b≦tA <tA e
プロセスAの時刻tb AからtA eまでの書き込み位置集合ω(A,tA b,tA e):
【0042】
【数1】

Figure 0004083491
【0043】
と定義する。
同様に、プロセスBの読み出しについても、以下のように定義する。
プロセスBの時刻tB bからtB eまでの読み出し系列R(B,tB b,tB e):
R(B,tB b,tB e)={(tB,γ(B,tB))|tB b<t <tB e
プロセスBの時刻tB bからtB eまでの読み出し位置集合γ(B,tB b,tB e):
【0044】
【数2】
Figure 0004083491
【0045】
図3の場合、プロセスAからプロセスCへの通信路があるため、Aの書き込み系列は、Cの読み出し系列でもある。ここでは取りこぼしがなく、確実に通信が行えるケースのみを扱うので、それが実現できるように、各プロセスでの時計を設定する。
【0046】
プロセスAの時刻tA をプロセスCの時刻tC によって
A =αCa C +βCa:αCa,βCaは定数(αCaはクロック信号の周波数の比、βCaは位相の差に対応)
と表現すると、プロセスCの読み出し系列γ(C,t C ,t C +1)は、プロセスAの書き込み系列から容易に求められる。
γ(C,t C ,t C +1)=ω(A,αCaC +βCa,αCa(t C +1)+βCa
同様にして、プロセスBの時刻tB をプロセスCの時刻tC によって
B =αCb C +βCb:αCb,βCbは定数(αCbはクロック信号の周波数の比、βCbは位相の差に対応)
と表現すると、プロセスBの書き込み系列ω(C,t C ,t C +1)は、プロセスCの書き込み系列から求めることが可能である。
ω(C,t C ,t C +1)=γ(B,αCbC +βCb,αCb(t C +1)+βCb
ただし実際の処理としては、プロセスAの書き込み系列とプロセスBの読み出し系列が与えられる情報となり、本処理では、逆にプロセスBの読み出し系列から、プロセスCの書き込み系列を求めることとなる。
【0047】
実際には、各プロセスが同じクロック信号で動くケース、つまり、αCa=1,βCa=0のようなケースが大部分であるが、本処理では必ずしもクロック信号が同じ(周波数が同じ)でない場合にも対処する為に、一般化してこのような表現を用いる。
【0048】
このようにして、モジュールAの出力、モジュールBの入力の2つを、プロセスCの入力と出力だけで表現し、今後、回路モジュールCの合成方法をプロセスCだけで議論できるようになる。
【0049】
一方のプロセスが1回の読み出し処理を行う間に、他方のプロセスが2回以上の書き込み処理を行う場合、複数のポートを用いて通信する等の工夫が必要になる。逆に、一方のプロセスが1回の書き込み処理を行う間に、他方のプロセスが2回以上の読み出し処理を行う場合、読み出しを休む回を設ける等の工夫が必要になる。
【0050】
図7(a)は、プロセスAの書き込み系列をプロセスCの読み出し系列に変換する処理を示すフローチャートである。同図の処理によってtA =0からプロセスAの書き込み系列において、最後に書き込みを行う時刻tA EまでのプロセスAの書き込み系列をプロセスCの読み出し系列に変換する。
【0051】
同図において、処理が開始されるとまずステップS1として、ta =0、プロセスCにより読み出し系列を保存する図6に示したリスト構造のデータRC を全てクリアする。
【0052】
次にステップS2としてtC にαaCA +βaC(αaC,βaCは時間の関係式における定数)の計算値を小数点以下切り上げた値を代入し、プロセスAでの時刻をプロセスCの時刻に変換する。そしてステップS3として時刻tCのプロセスCの読み出し系列を保存している図6に示したようなリスト構造のデータRC [tC ]の末尾に時刻taのプロセスAの書き込み系列を保存している図6に示したようなリスト構造のデータWA [ta ]を付加する。
【0053】
次にステップS4としてtA の値を1つ加算し、ステップS5としてta の値が最後に書き込みを行う時刻tA Eを超えていなければ(ステップS5、YES)、ステップS2に処理を戻し、ステップS2〜S5の処理を繰り返す。そしてステップS5で、ステップS5としてtAの値が最後に書き込みを行う時刻tA Eを超えたならば(ステップS5、NO)、処理を終了する。
【0054】
図7(b)は、図7(a)の処理によってプロセスAの書き込み系列のプロセスCの読み出し系列への変換を示したもので、同図上段はプロセスAの方がプロセスCより速度が遅い場合、同図下段はプロセスAの方がプロセスCより速度が速い場合を示している。
【0055】
同図上段では、プロセスAの方が速度が遅いので、時刻tA の書き込み処理がプロセスCの時刻tC の読み出し処理に、また時刻tA +1の書き込み処理がプロセスCの時刻tC+2の読み出し処理に対応する。また同図下段では、プロセスAの方が速度が速いので、時刻tA の書き込み処理がプロセスCの時刻tC読み出し処理に、また時刻tA +1とtA +2の書き込み処理がプロセスCの時刻tc +1の読み出し処理に対応する。
【0056】
図8(a)は、プロセスBの読み出し系列をプロセスCの書き込み系列に変換する処理を示すフローチャートである。同図の処理によってtB =0からプロセスBの書き込み系列において、最後に読み出しを行う時刻tB EまでのプロセスBの読み出し系列をプロセスCの書き込む系列に変換する。
【0057】
同図において処理が開始されると、まずステップS11として、tB =0、プロセス系列を保存する図6に示したリスト構造のデータWCを全てクリアする。
次にステップS12としてtc にαbCB+βbC(αbC,βbCは時間の関係式における定数)の計算値を小数点以下切り下げた値を代入し、プロセスBでの時刻をプロセスCの時刻に変換する。そしてステップS13として時刻tCのプロセスCの読み出し系列を保存している図6に示したようなリスト構造のデータWC [tC ]の末尾に時刻tBのプロセスBによる読み出し系列を保存している図6に示したようなリスト構造のデータRB [tB ]を付加する。
【0058】
次にステップS14としてtB の値をインクリメントし、ステップS15としてtB の値が最後に読み出しを行う時刻tB Eを超えていなければ(ステップS15、YES)、ステップS12に処理を戻し、ステップS12〜S15の処理を繰り返す。そしてステップS15で、ステップS15としてtBの値が最後に読み出しを行う時刻tB Eを超えたならば(ステップS15、NO)、処理を終了する。
【0059】
図8(b)は、図8(a)の処理によってプロセスBの読み出し系列のプロセスCの書き込み系列への変換を示したもので、同図上段はプロセスBの方がプロセスCより速度が速い場合、同図下段はプロセスBの方がプロセスCより速度が遅い場合を示している。
【0060】
同図上段では、プロセスBの方が速度が速いので、プロセスCの時刻tC の書き込み処理がプロセスBの時刻tb またはtb +1のいずれかの読み出し処理に、またプロセスCの時刻tC+1の書き込み処理がプロセスBの時刻tC +2またはtC +3のいずれかでの読み出し処理に対応する。また同図下段では、プロセスBの方が速度が遅いので一般的には複数の通信ポートが必要になり、プロセスCの時刻tCの書き込み処理がプロセスBの時刻tb 読み出し処理に、またプロセスCの時刻tC +1とtC +2の2回分の書き込み処理がプロセスBの時刻tb+1の読み出し処理に対応する。この場合、複数個のデータがプロセス間で受け渡されるならば、複数の通信ポートが必要になる
(2)出力遅延を求める
出力遅延は、プロセスCプロセスCが、プロセスAからデータを読み出してから、そのデータをプロセスBに書き出すまでの時間で最小出力遅延tC odel ay は、その最小時間を示す値である。本実施形態では、モジュールCで使用するメモリ量を削減するために、プロセスCの出力遅延として、この最小出力遅延tC odelay を選択する。
【0061】
最小出力遅延tC odelayは、以下の関係を満足する整数値となる。
∀t C γ(C,0,t C )⊇ω(C,0,tC−tC odelay
プロセスAが書き込みを開始してから、最小出力遅延tC odelay時間経過後にプロセスBの読み出しを開始すれば、
・プロセスAが配列変数に書き込んだあとに、プロセスBが配列変数を読み出す・プロセスAが配列変数を書き込まないうちに、プロセスBが配列変数を読み出すことはない
という処理の順序関係を満たす。
【0062】
最小出力遅延tC odelayを求めるアルゴリズムの一例を以下に示す。尚配列変数の添字の集合γ及びωは時刻tC に対して要素数が単調増加し、上限は配列変数のサイズに等しい。よってこのアルゴリズムは、最大でも、プロセスBが全ての要素を読み出すのに要するサイクル数だけループすれば停止する。
1.t=0
2.γ(C,0,tC )⊇ω(C,0,tC−t)ならば、tC odelay =tとして終了
3.t=t+1
4.2へ戻る
図9は、最小出力遅延tC odelayを求める処理を示すフローチャートである。
【0063】
同図において処理が開始されると、まずステップS21として、初期値としてd、t1、t2に0、Rに時刻t1のプロセスCの読み出し系列を保存している図6に示したようなリスト構造のデータRc[t1]が設定される。
【0064】
次にステップS22としてt2がプロセスCが最後に書き込みを行う時間tC E以下であるかどうかを判断する。その結果tC E以下であるならば(ステップS22、YES)、ステップS23としてリスト構造のデータのWc [t2]の要素が全てリスト構造のデータRに含まれているかどうかを判断し、含まれていなければ(ステップS23、NO)dを1つ加算させ(ステップS24)、含まれていれば(ステップS23、YES)、t2を1つ加算する(ステップS25)。
【0065】
そしてステップS26として、t1の値を1つ加算すると共に、リスト構造の変数Rの末尾にリスト構造の変数Rc [t1]を付加して、ステップS22に処理を戻し、t2がtC Eを超えるまで、ステップS22〜S26の処理を繰り返す。
【0066】
ステップS22において、t2がtC Eより大きければ(ステップS22、NO)、ステップS27としてtC odelayとしてdの値を設定して処理を終了する。
(3)変数のライフタイムの解析
変数vのライフタイムL(v)=(begin(v),end(v))とは、時刻begin(v)に最初に変数vに値の代入が発生し、時刻end(v)に最後の変数vの値参照が発生したことを示す。本処理では、モジュールCに含まれる配列変数のライフタイムを解析する。
【0067】
配列変数の要素v[i](iは添え字)について、値の代入時刻は、モジュールAより通信ポートを介して読み出した時刻となり、最後の参照時刻とは、通信ポートよりモジュールBに向けて書き出した時刻となる。
【0068】
変数v[i]について、ライフタイムL(v[i])=(begin(v[i]),end(v[i])
は以下のように求められる。
i∈γ(C,t)ならばbegin(v[i])=t
i∈ω(C,t’)ならばend(v[i])=t’
図10は、変数のライフタイムbegin(v[i]),end(v[i])のデータ構造を示す図である。
【0069】
変数v[0]〜v[i]のライフタイムを示すbegin(v[0])〜begin(v[i])及びend(v[0])〜end(v[i])は、それぞれ同図に示すような一次元配列Begin[0]〜Begin[n−1]及び一次元配列End[0]〜[n−1]によって実現することが出来る。
【0070】
図11は、ライフタイム∀ vi,L(vi)=(begin(v[i],end(v[i])を求める処理を示すフローチャートである。
同図の処理は、図10に示した1次元配列を用いて行われるものとする。
【0071】
同図において処理が開始されると、ステップS31として初期値としてt=0が設定される。
次にステップS32として、時刻tのプロセスCの読み出し系列を格納する図6のようなリスト構造をもつ変数Rc[t]の全要素に対して、図10に示した一次配列変数Begin[i](iは変数Rc[t]の要素)にtを代入してゆく(ステップS33)。
【0072】
次にステップS34として、時刻tのプロセスCの書き込み系列を格納する図6のようなリスト構造をもつ変数Wc[t]の全要素に対して、図10に示した一次配列変数End[i](iは変数Wc[t]の要素)にtを代入してゆく(ステップS35)。
【0073】
ステップS36としてtの値を1つ加算し、この値がプロセスCが最後に書き込みを行う時間tC Eより小さいかどうかを判断する(ステップS37)。その結果tがtC Eより小さければ、ステップS32に処理を戻しステップS32〜S36の処理を繰り返す。そして、ステップS37でtがtC Eより小さくなくなったら(ステップS37、NO)、処理を終了する。
(4)縮退させた変数集合を求める
変数集合Vと、Vの部分集合PとQ、P⊆V、Q⊆V、|P|=|Q|(本明細書の説明で|集合X|は集合Xの要素数を示す)と、ある整数Trについて、∀p∈P ∃q∈Q such that begin(p)+Tr=begin(q)且つend(p)+Tr=end(q)且つend(p)≦begin(q)が成り立つ場合を、 外1 と表記する。この時PとQは時間差Trで同
【0074】
【外1】
Figure 0004083491
【0075】
じライフタイムを持つと呼ぶ。
このような部分集合Pが存在すれば、変数集合V全体を考慮せずに、より小さい集合Pを考慮するだけでよくなる。Pのことをここでは縮退させた変数集合と呼ぶ。
【0076】
本処理では、モジュールCに含まれる配列変数を縮退した変数集合を求める。
縮退させた変数集合Vrを求める処理を以下に示す。
Head(n,L)を、順序つきリスト構造のデータLの先頭からn個の要素を集合として返す関数とする。
1.変数集合Vから、各変数vi∈Vについてbegin(vi)の昇順で並んだ順序つきリストVord を求める。
2.変数集合Vの要素数|V|の全公約数(≠1)の中で、以下を満足するような最小の公約数mを求める。
【0077】
【数3】
Figure 0004083491
【0078】
3.mが求まったなら、V =P0=Head(m,Vord )を、縮退された変数集合とする。
4.もしこのようなmが存在しなければ、Vr=Vとする(縮退できない)。
【0079】
図12は、縮退された変数集合を示す図である。
同図の例は、1/4に縮退された場合(集合Vord の要素数/m=4)を示す。各変数集合P0〜P3は、 外2 の関係が成り立っており、P0〜P3は
【0080】
【外2】
Figure 0004083491
【0081】
それぞれm個の要素を持つ。
このような縮退させた変数集合P0が求まると、変数集合V全体でなくこの変数集合P0を縮退させた変数集合Vrとして考慮すればよい。
【0082】
図13は、縮退させた変数集合Vrを求める処理を示すフローチャートである。
同図の処理を行うに当たって、プロセスCの変数の集合を一次元配列Vに、一次元配列Vの要素vi∈VをBegin[i]の昇順にソートしたリストデータを一次元配列Vord に、一次元配列Vの要素数|V|の約数の集合を降順に並べたリストを一次元配列Mに事前に設定しておく。
【0083】
図13の処理が開始されると、まずステップS41として配列Mが空かどうかが判断される。その結果空でなければ(ステップS41、NO)、nに一次元配列Mの最初の要素、即ち要素のうち最も小さい値を設定し、配列Mからこの最初の要素を取り除く。
【0084】
次にステップS43として一次元配列Vord 内の要素を先頭から順番にn等分し、これらをP0,P1,・・・,Pn−1とする。そして以下のステップS44〜S48によって、このP0,P1,・・・,Pn−1に対して 外3 が
【0085】
【外3】
Figure 0004083491
【0086】
成り立つかどうかを判断する。
まずステップS44として変数iに初期値0を設定し、次にステップS45としてi<n−1かどうか、即ち全てのP0,P1,・・・,Pn−1に対して処理を行ったかどうかを判断し、その結果i<n−1ならば(ステップS45、YES)、ステップS46として 外4 かどうかを判断し、その結果YESなら
【0087】
【外4】
Figure 0004083491
【0088】
ば(ステップS46、YES)、ステップS47として変数iの値を1つ加算すると共にステップS45の処理に戻り、ステップS45〜S47の処理を繰り返す。そしてステップS45で、i<n−1でないと判断されたなら(ステップS45、NO)、P0,P1,・・・,Pn−1の全てに対してステップS46の判断において、 外5 が成立すると判断されたので、ステップS48としてV
【0089】
【外5】
Figure 0004083491
【0090】
r=P0として処理を終了する。
また途中で、ステップS46の判断の結果がNOとなったならば(ステップS46、NO)、ステップS41に処理を戻し、一次配列M内の1番目の要素をnとして、上記した処理と同様の処理を繰り返す。尚ステップS46の判断処理についての詳細は、後述する。
【0091】
一次配列M内の全ての要素に対して処理が完了し、ステップS41で一次配列Mが空と判断されたなら(ステップS41、YES)、変数の集合Vは縮退できないので、ステップS49としてVr=Vord として処理を終了する。
【0092】
図14は、図13のステップS46の判断処理の詳細を示すフローチャートである。
ステップS46の判断処理では、まず初期値として、変数mにPiの要素数|P|、変数jにm*i、変数TrにBegin[m]−Bgegin[0]が設定される(ステップS461)。
【0093】
次に、ステップS462でj<n−1かどうかが判断され,その結果j<n−1ならば(ステップS462、YES)、ステップS462としてBegin[j]+Tr=Begin[j+m]且つEnd[j]+Tr=End[j+m]且つEnd「j」≦Begin[j+m]かどうかが判断される。その結果これら条件を満たしていれば(ステップS463、YES)、ステップS464として変数jの値を1つ加算した後、ステップS463の処理を戻し、ステップS463の判断で上記条件を満たしていないと判断されるか(ステップS463、NO)、ステップS463でj<n−1を満たしていないと判断される(ステップS463、NO)までステップS462〜S464の処理を繰り返す。そして、テップS462でNOとなった時は、 外6 が成立している
【0094】
【外6】
Figure 0004083491
【0095】
と判断され、ステップS46はYESとなり、ステップS463でNOとなったときは、 外7 は成立しないと判断され、ステップS46はNOとなる。
【0096】
【外7】
Figure 0004083491
【0097】
(5)変数共有問題を解き、変数をメモリに割り当てる
本処理では、(4)の処理によって縮退された変数集合Vrの各要素に対して、メモリを割り当ててゆく。変数集合Vrは縮退が行われているので、このVrの要素となっている変数にそれぞれメモリを割り当て、他の変数はVrの要素となっている変数とメモリを共有することによって、メモリの規模を縮小化させた、モジュール間インタフェースを生成することができる。
【0098】
またこの変数集合Vrについて、変数共有問題を解き、この結果に基いて変数にメモリを割り当てることにより、更にモジュール間インタフェースのメモリ量を更に小さくできる。
【0099】
この変数共有問題を解くのには、以下の文献に記載されているLeft Edge 法を修正したアルゴリズムで解くことが可能である。
書名 Hight-Level Synthesys
著者 D. Gajski, N. Dutt, A. Wu and S. Lin
発行 Kluwer Academic Publishers 発行年 1992
Left Edge 法を修正したアルゴリズムでは、処理対象の変数群S内の変数vをbeginの昇順に並べ替え、最初の変数とから他の変数とライフタイムが重なりあうかを調べ、重なり合わなければ同じメモリに割り当ててゆく。
【0100】
変数集合Vについて、V’を以下のような集合とする。
V’={v’|v’∈V,L(v’)=(begin(v)+T,end(v)+T)}
上式においてTはプロセスの周期であり、プロセスCが配列変数の要素に初めて書き込んだ時刻をt1 とし、プロセスCが配列変数のすべての要素に書き込み終わった後、初めて書き込みを行ったときの時刻をt2とするとT=t2−t1となる。この変数集合Vを縮退できなかった際、このV’を用いて変数共有問題を解く。
【0101】
図15は、変数共有問題を解く処理を示すフローチャートである。
本処理では、最初に変数集合Vを縮退できた場合と出来なかった場合とで場合分けをし、縮退できなかった場合には、変数集合Sに上記V’を加えて、本来の2倍の量の要素を考慮している。これは、モジュール間インタフェースを設計する際にメモリを2倍にして、読み込み側と書き込み側とで交互にメモリを使って、アクセス競合を防ぐのと同じアイディアである。
【0102】
図15の処理が開始されると、まずステップS51として、縮退した変数集合Vrが変数集合Vの変数を最初に値の代入が発生した順序で並べた順序つきリストVord と同じかどうかが判断される。その結果異なれば(ステップS51、NO)、ステップS52としてS=Vr、Tr=Begin[|Vr|]−Begin[0]を設定する。またステップS51で同じであれば(ステップS51、YES)、S=V∪V’、Tr=T*2とする。
【0103】
次にステップS54として集合Sに対して、Begin[i],i∈Sの昇順でソートをかけこれを順序付きリストSord とする。
そしてステップS55として、変数mem、last及びiに0を、また変数nextに∞を設定する。
【0104】
次にステップS56としてSord が空かどうか判断され、空でなければ(ステップS56、NO)、Sord の要素数|Sord |≦iかどうかが判断される。その結果|Sord|≦iならば(ステップS57、YES)、ステップS58として、変数memの値を1つ加算し、変数last及びiに0を、nextに∞を設定した後、またステップS57で|Sord|≦iでないならば(ステップS57、NO),そのまま処理をステップS59に移す。
【0105】
ステップS59では、Sord の先頭からi番目の要素をvに代入し、ステップS60としてlast≦Begin[v]且つEnd[v]≦nextを満たしているかどうかを判断する。
【0106】
その結果、満たしていると判断した場合(ステップS60、YES)、ステップS62として順序付きリストSord から要素vを除き、
ステップS63としてBegin[v]<End[v]かどうかを判断し、その結果Begin[v]<End[v]でなければ(ステップS63、NO)、処理をステップS56に処理を戻す。
【0107】
またステップS63の判断において、Begin[v]<End[v]ならば)(ステップS63、YES)、ステップS64として変数のメモリへの割り振りを示す配列assign[v]にmemを代入し、またlast=end(v)とした後処理をステップS56に戻す。そしてnextには、nextの値とBegin(v)+Trの値の小さいほうを代入する。またステップS60で上記条件を満たしていなかった場合(ステップS60、NO)、ステップS61としてiに対して1つ加算した後処理をステップS56に戻す。
【0108】
このステップS56からS64までの処理を順序付きリストSord の要素が無くなるまで繰り返し、Sord が空になったら(ステップS56、YES)、処理を終了する。そしてこの配列変数assignに格納された結果に基いて変数にメモリを割り当てる。
(6)インタフェース回路を合成する
これまでの手続きによって、変数がメモリに割り当てられ、どのタイミングでどの変数にアクセスするか(=どのタイミングでどのメモリにアクセスするか)が決まったので、プロセスCをRTL(レジスタ・トランスファ・レベル)での回路として実現するのに十分な情報がそろったことになる。あとは、これらの情報に基づいたFSM(Finite State Machine)を構築し、FSMに従って、回路を作ればよい。
【0109】
以下、RTLを記述するときの文法として、SystemCにならった書式を採用する。
プロセスCのRTLは、次の2つのサブプロセスから構成される。サブプロセスは同時に実行開始され、並列実行される。動作のタイミングは「wait(数字)」(後述)で同期するようになっている。
・入力ポートから読み込んで、メモリに書き込むサブプロセス
・メモリもしくは入力ポートからデータを読み込んで、出力ポートに書き込むサブプロセス
変数集合を縮退できた場合の、RTL生成を行うアルゴリズムを、図16に示す。尚変数集合を縮退できなかった場合は、図15の処理と同様に、2倍の量の変数を考慮する。このとき、γ(C,tC )とω(C,tC )とを、2倍の量の変数を扱えるように拡張する。拡張するとは、以下のような置き換えをすることを示す。
【0110】
もともとは、γ(C,tC )=γ(C,tC +T)であるが、次のように定義される、拡張したγ+ (C,tC)にγ(C,tC )を置き換える。
・γ+ (C,tC)=γ(C,tC ) 0≦tc <T
・γ+ (C,tC)=γ(C,tC )のインデックスだけを|V|だけ増加させたもの。T≦tc <2Tとする。ω(C,tc )についても同様にω+(C,tc)に置き換える。
【0111】
尚図16中のoutputは、RTLコードをファイルやコンパイラなどに出力するという意味を示し、Pjは入力ポートjを示し、Pj.read()は入力ポートから読み出したデータ、Qkは出力ポートk、Qk.write(d)は出力ポートkにデータdを書き込むことを意味する。
【0112】
またγ(C,tC )は集合であるので、1サイクル中に複数のデータを取り込む場合がある。これを実現するために、プロセスCは入力ポート及び出力ポートは複数存在する。またどのポートからどのデータが入ってくるかはあらかじめ与えられるとする。
【0113】
またAssign[]は変数共有問題で得られた値であり、Assign[v]は変数vがどのメモリに割り当てられたかを出力する。このAssign[]はRTLコード生成時には、定数値となる。Mem[a]=bは、メモリのa番目に値bを書き込むことを意味する。wait(n)は、nクロック待つことを意味する。
【0114】
図16において上段のサブプロセスはデータの読み込みのRTL記述を出力するアルゴリズムで、γ(C,t1)(t1=0〜T−1)の各要素に対してMem[Assign[j]]=Pj.read()(jはγ(C,t1)の各要素)を出力する。
【0115】
図17は、このデータの読み込みを行うサブプロセスによるRTL記述の出力例を示す図である。尚同図及び後述する図18、19においては、サブプロセスによって出力される注釈分については略してある。
【0116】
同図の記述ではこれまでの処理によって得られた各変数とメモリの割り当て関係から、入力ポートからの入力データが、メモリの0,1,2,3,4,5,6,7,0,4,2,6,8番目に格納されてゆくことを示している。図4若しくは図5に示した制御部は、write addressやロード信号によってこの記述に基いた制御を行いデータをメモリやレジスタに格納してゆく。
【0117】
図16において下段のサブプロセスはデータの書き込みのRTL記述を出力するアルゴリズムで、ω(C,t2)(t2=0〜T−1)の各要素に対してQk.write(Mem[Assign[k]])(kはω(C,t2)の各要素)を出力する。
【0118】
図18は、このデータの出力ポートへの書き込みを行うサブプロセスによるRTL記述の出力例を示す図である。
同図の記述ではこれまでの処理によって得られた各変数とメモリの割り当て関係から、出力ポートに対して、メモリの0,2,4,6,0,2,0に格納されているデータ、入力ポートのデータ、メモリの1,3,5,7,4,6,8,9に格納されているデータが、出力されてゆくことを示している。図4若しくは図5に示した制御部は、read addressやロード選択信号によってこの記述に基いた制御を行いデータをメモリやレジスタからデータを出力ポートに出力してゆく。
【0119】
図19は、データの読み込みを行うサブプロセスとデータの出力ポートへの書き込みを行うサブプロセスの2つのサブプロセスをまとめたRTLコードの模擬的な例を示す図である。
【0120】
2つのサブプロセスを1つにまとめて記述すると同図のようになり、2つの順序回路を1つにまとめて記述したものとなっている。
次に本実施形態による、具体的な設計例を示す。
【0121】
例1として、以下のようなω(A,tA )とγ(B,tB )と規定されるプロセスA、Bが与えられたとする。これはサイズ64の配列変数をAからBへ受け渡すことに相当しており、T=64である。
【0122】
【数4】
Figure 0004083491
【0123】
ここで、zi はzを2進表現した場合のi桁目の値(0若しくは1)を表しており、[zi,zj ,・・・]は、0か1の値をこの順序で並べた2進数表現の値のことを指す。つまりz=[z5 ,z4,z3 ,z2 ,z1 ,z0 ]であり、yはzのビット5〜3を並べ替えて得られる値となる。
【0124】
ここでは、時間の関係式における定数αC =1、αCb=1、βCa=0、βCb=0として、プロセスCの読み出し系列R(C)、書き込み系列W(C)を求めると、以下のようになる。
【0125】
Figure 0004083491
また最小出力遅延を求めるとt C odelay=7となる。
【0126】
本実施形態の前提条件として、プロセスCは一度データの出力をはじめたら、決められた順序で常に出力しつづけ、まだ入力データが到着していないので、出力を一時停止させる、といった措置はいっさい行わないものとしている(いったん流れ始めたら、出力は滞ることなく、常に流れつづけなければならない)。そのため、あまり早いうちから出力を出しはじめてしまうと、まだ到着していないデータを出力する状況に追い込まれてしまう。そのため、ある程度待ってデータがたまってから出力を始める。この時間が最小遅延時間tc odelayである。
【0127】
たとえば、上の例で、2単位時間だけ待って出力を開始するケースを考えるとする。そのときの様子を図20に示す。
同図では、各時刻において、
・どのデータが入力として到着し、
・どのデータを出力し
・バッファメモリ内には、どのデータが保持されているか
を表している。
【0128】
同図中矢印はデータの移動を、バツ印はバッファメモリからデータが取り出されることを表している。バッファメモリの内容は集合で表現しており、順序は関係ない(この順番で、メモリに格納されていることを意味しているのではない)。尚、時刻tC におけるバッファメモリの内容は、次のように集合の差で表現できる。
(バッファメモリの内容)=γ(C,0,tC )−ω(C,0,tC−2)
同図では、時刻5のとき、3番目のデータを出力しなければならないが、まだ3番は到着していないので、行き詰まってしまう(出力が滞る)。
【0129】
次に、7単位時間だけ待って出力するケースを考える。その様子は、図21のようになる。
図21では時刻28までしか描かれていないが、それ以降も、出力が滞ることなくデータの入力と出力を連続して実行することが可能である。
【0130】
7単位時間よりも長く待ってから出力するケースは、(1)必要なバッファメモリ量が増加する、(2)入力が入ってから出力がでるまでの時間(レイテンシ)が増加する、といったデメリットしかないため、本実施形態ではそのようなケースは対象外とする。ただし、対象外というのは、そのようなケースを扱えないという意味ではない。このようなケースを扱うのには単にtc odelay の値に最小出力遅延の値よりも大きい値を採用すればよいだけである。
【0131】
プロセスCの配列変数vのライフタイムの解析結果を図22に示す。
同図においてBegin及びEndは、図10に示した1次元配列に対応し、Beginはその変数に最初に値の代入が発生した時間、Endは最後に参照が発生時間、添え字は変数の添え字を示している。
【0132】
図23は、図22を元に、各変数のライフタイムを図形的に表したものである。
同図は縦軸方向にプロセスCの配列変数の添え字(インデックス)とり、横方向にその変数のライフタイムを“#”で表している。同図ではi行目が配列変数の要素v[i]に対応しており、Begin[i]からEnd[i]−1までの範囲で記号#をプロットしている。
【0133】
普通、配列変数の各要素は、それぞれ専用のメモリに割り当てられる。例えば、変数v[0]はMem[0]、変数v[1]はMem[1]という具合である。
【0134】
しかし、もしも変数v[0]と変数V[1]のライフタイムに重なりが無いならば専用のメモリを割り当てることなく、メモリ1つだけで、2つの変数の値を確保させることが可能になる。例えば、変数v[0]のライフタイムがL(V[0])=(3,5)であり、変数v[1]のライフタイムがL(v[1])=(10,15)であるとき、メモリMem[0]は、時刻3〜5のときは変数v[0]の値を保持し(厳密にいうと、時刻5の時に最後の値読み出しが行われ、時刻5から新しい値を保持させられるようになる)、時刻10〜15の時は変数v[0]の値を保持する。L(V[1])=(10,15)とは、時刻15を過ぎたら、もう変数v[1]の値は使わないので値が書き換えられてしまってもかまわない、という意味である。
【0135】
変数共有問題とは、いくつかの変数を同じメモリに割り当てるやり方を決めることである。変数集合を縮退させることは、先に変数の共有問題を大雑把に解くことに相当するとも言える。
【0136】
縮退させた変数集合Vrを求めると、|V|=64、m=16であり、変数集合Vを4等分した、Vr={v0 ,v32,v1 ,v33,v2 ,v34,v3 ,v35,v4 ,v36,v5 ,v37,v6 ,v38,v7 ,v39}が求まる。
【0137】
図24は、図23に示した変数集合から求めた縮退させた変数集合の例を示す図である。
同図では、変数集合Vを4つの部分集合に分けることが出来、各部分集合は時間差Trで同じライフタイムを持っている。尚ここでは、ここではTr=16となっている。
【0138】
縮退させた変数集合Vrは、変数集合Vの1/4のとなり、モジュールCが必要とするメモリは、変数集合V内の各要素にそれぞれメモリを割り当てた場合の1/4の大きさですむ。
【0139】
次に第2の例として、図23、24のように縮退させた変数集合Vrに対して、図15に示したようなLeft Edge 法を修正したアルゴリズムによる処理を施して変数共有問題を解き、更にモジュールCが必要とするメモリを小さくした例を示す。
【0140】
図24に示した縮退させた変数集合Vr内の各変数においても、ライフタイムが重ならなければ、1つのメモリを複数の変数で共有することができる。
図24に示した、縮退させた変数集合Vrに対して図15に示した処理を施し、変数の共有問題を解くと以下のように変数がメモリに割り当てられる。
【0141】
Mem[0]へは変数v0、v4、v6
Mem[1]へは変数v32
Mem[2]へは変数v1、v5
Mem[3]へは変数v33
Mem[4]へは変数v2、v36
Mem[5]へは変数v34
Mem[6]へは変数v3、v37
Mem[7]へは変数v35
Mem[8]へは変数v38
Mem[9]へは変数v39
ここで変数集合Vが縮退されている為、メモリMem[k]に変数vi∈P0が割り当てられているなら、P1、P2、P3中の変数も対応するP0中の変数と同じメモリに割り当てられる。
【0142】
図25は、図24の縮退した変数の集合に対して変数共有問題を解いた後、変数をメモリに割り当てた場合を示す図である。
図23にあるように元々はサイズ64の配列変数があり、読み出しと書き込みの順序保証を行う為、モジュールCは、最大でサイズ128のメモリが必要となるところであったのが、図25に示すように、本実施形態に示した処理を施すことによって、サイズ10のメモリを持つ構成として合成することができる。
【0143】
次に第3の例として変数集合Vが縮退できない場合を示す。
以下のようなω(A,tA )とγ(B,tB )とで規定されるプロセスA,Bが与えられた場合を示す。この例はサイズ64の配列変数をプロセスAからプロセスBへ受け渡すことに相当し、T=64である。
【0144】
W(A)={(0,{0}),(1,{1}),(2,{2}),(3,{3}),・・・(63,{63})}={i,{i}}|0≦i≦63}
R(B)={(0,{0}),(1,{8}),(2,{16}),(3,{24}),・・・(63,{63})}={i,{i}}|0≦i≦63,j=(i mod 8)×8+[i/8]}(ここでは、[i/8]は、iを8で割って小数を切り捨てて整数にした値を表す。)
ここでは、時間の関係式における定数αC =1、αCb=1、βCa=0、βCb=0として、プロセスCの読み出し系列R(C)、書き込み系列W(C)を求めると、R(C)=w(A),W(C)=R(B)となる。
【0145】
プロセスCの配列変数vのライフタイムの解析結果を図26に示す。
同図においてBegin及びEndは、図10に示した1次元配列に対応し、Beginはその変数に最初に値の代入が発生した時間、Endは最後に参照が発生時間、添え字は変数の添え字を示している。
【0146】
図27は、図26を元に、各変数のライフタイムを図形的に表したものである。
本例の場合は、変数集合Vに 外8 となるVの部分集合P、Qが見つけられ
【0147】
【外8】
Figure 0004083491
【0148】
ず、変数集合vは縮退することが出来ない。また、変数をBegin[v]の昇順に並べ替えても図23と変わらない。
このような変数集合Vに対して、図15に示したようなLeft Edge 法を修正したアルゴリズムによる処理を施して変数共有問題を解くと、図24に示すように各変数がメモリへ割り当てられる。
【0149】
図28は、例3における変数のメモリの割り当て状況を示す図である。
同図より変数v0,v49,v63,v112,v121は、メモリの0番目に割り当てる。表現を変えれば、Assin[0]=0,Assin[49]=0,Assign[63]=0,Assign[112]=0,Assign[121]=0である、とも言える。
【0150】
例3では、変数集合を縮退できなかったため、2倍のサイズの変数集合を扱っている。そのため、もともとあった変数v0〜v63と、追加の変数v64〜v127の、合計128個の変数を同時に扱っている。
【0151】
この図28より、プロセスCが必要とするメモリサイズがわかる。もともとはサイズ64の配列変数があり、読み書き競合を防ぐためにはメモリを2倍にして、最大でサイズ128のメモリが必要になるところであったが、本発明を適用することにより、サイズ56のメモリで済ませることができる。
【0152】
なお、図26をみると、変数v56のライフタイムはL(v56)=(56,56)であり、beginの値とendの値が等しい。そのような変数は、メモリに格納することなく、入力ポートから出力ポートへ素通しで出力する。これは、(1)レイテンシを短くするため、(2)バッファとして必要なメモリ量を減らす、という2つの目的がある。これと同様なことが、例1での変数v7にて見られる。
【0153】
図29に第3の例における変数のメモリの割り当て状況を示す。同図は、図24に示した変数のメモリへの割り当て状況を縦軸にメモリ、横軸に時間を取って示した図である。
【0154】
図30は、図1のCADシステムを汎用のコンピュータとして実現した場合のコンピュータのシステム環境図である。
同図のコンピュータは、CPU21、各プログラムのワークエリアとなる主記憶装置22、各プログラムやデータベースが記録されるハードディスク等の補助記憶装置23、ディスプレイ、キーボード等の入出力装置(I/O)24、モデム等のネットワーク接続装置25及びディスク、磁気テープなどの可搬記憶媒体から記憶内容を読み出す媒体読取り装置26を有し、これらが互いにバス28により接続される構成を備えている。
【0155】
CADシステムとしての機能や上記したモジュール間インタフェースの自動生成の機能をソフトウエアによって実現した場合、CPU21がプログラムに基いて、主記憶装置22をワークエリアとして、主記憶装置22若しくは補助記憶装置23上の領域に実現されたライブラリ格納部21からデータを読み出して実現する。
【0156】
図30のコンピュータでは、媒体読取り装置26により磁気テープ、フレキシブルディスク、CD−ROM、MO等の記憶媒体27に記憶されているプログラム、データを読み出し、これを主記憶装置22または補助記憶装置23にダウンロードする。そして本実施形態による各処理は、CPU21がこのプログラムやデータを実行することにより、ソフトウエア的に実現させることが出来る。
【0157】
また、図30のコンピュータでは、フレキシブルディスク等の記憶媒体27を用いてアプリケーションソフトの交換が行われる場合がある。よって、本発明は、モジュール間インタフェースの自動合成装置、合成方法に限らず、コンピュータにより使用されたときに、上述した本発明の実施形態の機能をコンピュータに行わせるためのプログラムやコンピュータ読み出し可能な記憶媒体27として構成することもできる。
【0158】
この場合、「記憶媒体」には、例えば図31に示されるように、CD−ROM、フレキシブルディスク(あるいはMO、DVD、リムーバブルハードディスク等であってもよい)等の媒体駆動装置37に脱着可能な可搬記憶媒体36や、ネットワーク回線33経由で送信される外部の装置(サーバ等)内の記憶手段(データベース等)32、あるいはコンピュータ31の本体34内のメモリ(RAM又はハードディスク等)35等が含まれる。可搬記憶媒体36や記憶手段(データベース等)32に記憶されているプログラムは、本体34内のメモリ(RAM又はハードディスク等)35にロードされて、実行される。
【0159】
尚2つの回路モジュール間でデータの受け渡しを行うモジュール間インタフェースは、回路でなくても良い。例えば2つの回路モジュールが、並列実行される計算機で、共有メモリへのアクセスによってデータのやり取りを行う際、図17,18に対応するデータメモリへの読み込み/書き込みの情報を2つの計算機に与えることによって、これら計算機はこの情報に基いて共有メモリにアクセスすることによって、共有メモリのデータの受け渡しに用いる領域を小さくすることができる。
【0160】
(付記1) 並列に動作する複数の回路モジュールの間のデータの受け渡しを行うモジュール間インタフェースを合成する合成装置であって、
前記回路モジュールによる前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析し、該解析の結果に基いて前記モジュール間インタフェースが持つ変数を求める変数算出手段と、
前記モジュール間インタフェースが持つ変数に対して、最初にデータが書き込まれてから最後に読み出されるまでの期間を示すライフタイムを求めるライフタイム算出手段と、
前記変数を要素として持つ集合を整数分割して得られる部分集合で、要素となる変数の全てに対し、当該要素となる変数の前記ライフタイムと特定の時間ずれた前記ライフタイムを持つ変数が、前記分割して得られる他の部分集合に存在する縮退させた変数集合を探す縮退集合算出手段と、
前記縮退させた変数集合を用いて、変数の割り当てを元に前記モジュール間インタフェースを合成する回路合成手段と、
を備えることを特徴とするモジュール間インタフェースの自動合成装置。
【0161】
(付記2) 前記縮退された変数集合の要素である変数の前記ライフタイムが重ならないようにメモリに共有させ、前記縮退された変数集合の要素である変数の前記メモリへの割り当てを求める変数割り当て手段を更に備え、前記回路合成手段は前記割り当てに基いて前記モジュール間インタフェースを合成することを特徴とする付記1に記載のモジュール間インタフェースの自動合成装置。
【0162】
(付記3) 前記モジュール間インタフェースがデータを読み込んでから書き込むまでの最小の時間である最小遅延時間を求める最小遅延時間算出手段を更に備え、前記回路合成手段は、前記最小遅延時間を考慮して、前記モジュール間インタフェースを合成することを特徴とする付記1又は2に記載のモジュール間インタフェースの自動合成装置。
【0163】
(付記4) 前記回路合成手段は、前記縮退させた変数集合から求まる値に基づいて、前記モジュール間インタフェースが有するメモリの大きさを決定することを特徴とする付記1乃至3の何れか1つに記載のモジュール間インタフェースの自動合成装置。
【0164】
(付記5) 回路記述言語による記載を解析し、回路の仕様を出力するコンパイラ手段と、
前記コンパイラ手段から、並列に動作する複数の回路モジュールの間のデータの受け渡しを行うモジュール間インタフェースを合成を依頼されると、該モジュール間インタフェースを合成するインタフェースモジュール生成手段とを備え、
前記インタフェースモジュール生成手段は、
前記回路モジュールによる前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析し、該解析の結果に基いて前記モジュール間インタフェースが持つ変数を求める変数算出手段と、
前記モジュール間インタフェースが持つ変数に対して、最初にデータが書き込まれてから最後に読み出されるまでの期間を示すライフタイムを求めるライフタイム算出手段と、
前記変数を要素として持つ集合を整数分割して得られる部分集合で、要素となる変数の全てに対し、当該要素となる変数の前記ライフタイムと特定の時間ずれた前記ライフタイムを持つ変数が、前記分割して得られる他の部分集合に存在する縮退させた変数集合を探す縮退集合算出手段と、
前記縮退させた変数集合を用いて、変数の割り当てを元に前記モジュール間インタフェースを合成する回路合成手段と、
を有することを特徴とするCADシステム。
【0165】
(付記6) 並列に動作する複数の回路モジュールの間のデータの受け渡しを行うモジュール間インタフェースを合成する合成方法であって、
前記回路モジュールによる前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析し、該解析の結果に基いて前記モジュール間インタフェースが持つ変数を求め、
前記モジュール間インタフェースが持つ変数に対して、最初にデータが書き込まれてから最後に読み出されるまでの期間を示すライフタイムを求め、
前記変数を要素として持つ集合を整数分割して得られる部分集合で、要素となる変数の全てに対し、当該要素となる変数の前記ライフタイムと特定の時間ずれた前記ライフタイムを持つ変数が、前記分割して得られる他の部分集合に存在する縮退させた変数集合を探し、
前記縮退させた変数集合を用いて、変数の割り当てを元に前記モジュール間インタフェースを合成する
ことを特徴とする合成方法。
【0166】
(付記7) 並列に動作する複数の回路モジュールの間のデータの受け渡しを行うモジュール間インタフェースを合成するコンピュータによって実行されるプログラムであって
前記回路モジュールによる前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析し、該解析の結果に基いて前記モジュール間インタフェースが持つ変数を求め、
前記モジュール間インタフェースが持つ変数に対して、最初にデータが書き込まれてから最後に読み出されるまでの期間を示すライフタイムを求め、
前記変数を要素として持つ集合を整数分割して得られる部分集合で、要素となる変数の全てに対し、当該要素となる変数の前記ライフタイムと特定の時間ずれた前記ライフタイムを持つ変数が、前記分割して得られる他の部分集合に存在する縮退させた変数集合を探し、
前記縮退させた変数集合を用いて、変数の割り当てを元に前記モジュール間インタフェースを合成する
ことを前記コンピュータに実行させるプログラム。
【0167】
(付記8) 前記縮退された変数集合の要素である変数の前記ライフタイムが重ならないようにメモリに共有させ、前記縮退された変数集合の要素である変数の前記メモリへの割り当てを求め、前記割り当てに基いて前記モジュール間インタフェースを合成することを前記コンピュータに実行させる付記7に記載のプログラム。
【0168】
(付記9) Left Edge 法に基いて、前記縮退された変数集合の要素である変数の前記ライフタイムが重ならないようにメモリに共有させ、前記縮退された変数集合の要素である変数の前記メモリへの割り当てを求めることを特徴とする付記8に記載のプログラム。
【0169】
(付記10) 前記メモリへの割り当てに基づいて、前記モジュール間インタフェースが有するメモリの大きさを決定することを前記コンピュータに実行させる付記8又は9に記載のプログラム。
【0170】
(付記11) 前記モジュール間インタフェースがデータを読み込んでから書き込むまでの最小の時間である最小遅延時間を求め、該最小遅延時間を考慮して、前記モジュール間インタフェースを合成することを前記コンピュータに実行させる付記7乃至10の何れか1つに記載のプログラム。
【0171】
(付記12) 前記最小遅延時間を考慮して、前記モジュール間インタフェースが有するメモリの大きさを決定することを前記コンピュータに実行させる付記10に記載のプログラム。
【0172】
(付記13) 前記縮退させた変数集合から求まる値に基づいて、前記モジュール間インタフェースが有するメモリの大きさを決定することを前記コンピュータに実行させる付記7乃至12の何れか1つに記載のモジュール間インタフェースの自動合成装置。
【0173】
(付記14) 前記モジュール間インタフェースへのデータの書き込みを行う前記回路モジュール、前記モジュール間インタフェースへのデータの読み出しを行う前記回路モジュール及び前記モジュール間インタフェースに対してそれぞれの同期信号に基いた時刻を設定し、前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析する際、前記書き込みを行う回路モジュール及び読み出しを行う前記回路モジュールの時刻を前記モジュール間インタフェースの時刻に変換することを前記コンピュータに実行させることを特徴とする付記7乃至13の何れか1つに記載のプログラム。
【0174】
(付記15) 並列に動作する複数の回路モジュールの間のデータの受け渡しを行うモジュール間インタフェースを合成するコンピュータによって使用された時、
前記回路モジュールによる前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析し、該解析の結果に基いて前記モジュール間インタフェースが持つ変数を求め、
前記モジュール間インタフェースが持つ変数に対して、最初にデータが書き込まれてから最後に読み出されるまでの期間を示すライフタイムを求め、
前記変数を要素として持つ集合を整数分割して得られる部分集合で、要素となる変数の全てに対し、当該要素となる変数の前記ライフタイムと特定の時間ずれた前記ライフタイムを持つ変数が、前記分割して得られる他の部分集合に存在する縮退させた変数集合を探し、
前記縮退させた変数集合を用いて、変数の割り当てを元に前記モジュール間インタフェースを合成する
ことを前記コンピュータに実行させるプログラムを記憶した前記コンピュータが読み出し可能な可搬記憶媒体。
【0175】
【発明の効果】
本発明によれば、従来手法よりも使用するメモリ量を少なくしたモジュール間インタフェースを自動的に合成することができる。
【0176】
またこのモジュール間インタフェースを自動的に合成することができるので、手作業で設計することによるミスを防げる。
【図面の簡単な説明】
【図1】本実施形態におけるCADシステムの構成を示す図である。
【図2】インタフェースモジュール生成部が行う処理を示す図である。
【図3】インタフェースモジュール生成部で扱われるプロセスの例を示す図である。
【図4】インタフェース回路モジュールの実現例を示す図(その1)である。
【図5】インタフェース回路モジュールの実現例を示す図(その2)である。
【図6】読み出し系列/書き込み系列のデータ構造例を示す図である。
【図7】(a)はプロセスAの書き込み系列をプロセスCの読み出し系列に変換する処理を示すフローチャート、(b)はその変換例を示す図である。
【図8】(a)はプロセスBの読み出し系列をプロセスCの書き込み系列に変換する処理を示すフローチャート(b)はその変換例を示す図である。
【図9】最小出力遅延tc odelayを求める処理を示すフローチャートである。
【図10】変数のライフタイムbegin(v[i]),end(v[i])のデータ構造を示す図である。
【図11】ライフタイムを求める処理を示すフローチャートである。
【図12】縮退された変数集合を示す図である。
【図13】縮退させた変数集合Vrを求める処理を示すフローチャートである。
【図14】ステップS46の判断処理の詳細を示すフローチャートである。
【図15】変数共有問題を解く処理を示すフローチャートである。
【図16】RTL生成を行うアルゴリズムを示す図である。
【図17】入力ポートの読み出しを行うサブプロセスのRTLコードの例を示す図である。
【図18】出力ポートの書き込みを行うサブプロセスのRTLコードの例を示す図である。
【図19】2つのサブプロセスをまとめたRTLコードの模擬的な例を示す図である。
【図20】出力遅延の説明図(その1)である。
【図21】出力遅延の説明図(その2)である。
【図22】例1における配列変数のライフタイムの解析結果を示す図である。
【図23】例1における配列変数のライフタイムを示す図である。
【図24】例1における変数集合から求めた縮退させた変数集合の例を示す図である。
【図25】例2における変数のメモリへの割り当てを示す状況を示す図である。
【図26】例3における配列変数のライフタイムの解析結果を示す図である。
【図27】例3における配列変数のライフタイムを示す図である。
【図28】第3の例における変数のメモリの割り当て結果を示す図である。
【図29】第3の例における変数のメモリの割り当て状況を示す図である
【図30】本実施形態におけるコンピュータのシステム環境図である。
【図31】媒体例を示す図である。
【図32】高位合成による回路設計で用いられる回路記述言語による動作記述例を示す図である。
【符号の説明】
1 CADシステム
11 入力編集部
12 コンパイラ部
13 ライブラリ格納部
14 インタフェースモジュール生成部
15 出力部
21 CPU
22 主記憶装置
23 補助記憶装置
23 入出力装置
25 ネットワーク接続装置
26 媒体読取装置
27 記憶媒体
28 バス
31 情報処理装置
32 記憶手段
33 ネットワーク回線
34 本体
35 メモリ
36 可搬記憶媒体[0001]
BACKGROUND OF THE INVENTION
The present invention relates to a technique of circuit design by high level synthesis, and more particularly to synthesis of an inter-module interface that becomes an interface between a plurality of circuit modules operating in parallel.
[0002]
[Prior art]
In recent years, hardware has been enlarged as represented by VLSI, and research to automate hardware design using a computer is underway to cope with this. As one of the hardware design methods, an operation specification is described without being aware of hardware using a circuit description language such as VHDL or SFL, and when this is input to a computer, the computer inputs the input logic of each module. There are some which synthesize an actual circuit by performing composition, logic compression, etc., and further arranging and wiring. Among the synthesis methods from such a circuit description language, a method of synthesizing from a circuit description having a particularly high degree of abstraction is called high-level synthesis.
[0003]
FIG. 32 shows an operation description example in a circuit description language used in circuit design by high-level synthesis. In the example shown in the figure, a process for outputting data to an array variable is described in part (A), and a process for reading data from the array variable is described in part (B).
[0004]
In circuit design by high-level synthesis, there is a case where it is desired that the parts (A) and (B) described as shown in FIG. 32 that are originally processed sequentially are executed in parallel.
[0005]
In such a case, the interface part that handles data transfer between the circuit modules that are executed in parallel is created as hardware.However, the circuit part of the interface part is usually provided with a buffer memory for timing adjustment. I must. A circuit module that outputs data writes data to this buffer, and a circuit module that receives data reads data from this buffer.
[0006]
When the circuit module A that realizes the process described in the part (A) of FIG. 32 and the circuit module B that realizes the process described in the part (B) are mounted and executed in parallel, the circuit module A and The circuit module B accesses the same array variable on the buffer.
[0007]
At this time, in order for these two circuit modules to perform parallel processing correctly, the order of writing to and reading from the array variables must be performed correctly. That is, it is necessary to guarantee an order relationship in which the circuit module B reads after the circuit module A writes, and the circuit module A must not write before the circuit module B reads.
[0008]
As one of the methods for realizing this, it is conceivable that the array variable array is duplicated and the hardware is formed as a configuration including a memory area for two array variables of array A and array B. In this case, the circuit module A writes to the array A, while the circuit module B reads from the array B. When the writing / reading of the circuit modules A and B is completed to the end, this time, the circuit module A writes to the array B, and the circuit module B reads from the array A. Thereafter, this operation is repeated.
[0009]
If this method is used, the condition that the circuit module B reads after completion of writing in the circuit module A and the circuit module A does not write before the circuit module B reads can be satisfied.
[0010]
When this method is used, the memory amount used as the array variable array is not always required to be twice the size of the original array variable. However, when a circuit is configured in a semiconductor chip, the smaller memory size has advantages in many respects such as circuit arrangement / wiring, power consumption, and manufacturing cost.
[0011]
As an alternative to the method of duplicating the memory, the circuit designer can analyze the behavioral description sufficiently and implement an implementation method that reduces the amount of memory compared with the method of duplicating the above array variables for each circuit. A method of studying and designing manually can be considered.
[0012]
In general high-level synthesis, there is a scheduling process for assigning variables to memories (registers) separately from the inter-module interface circuit which is the subject of the present invention. There, an optimization process called variable sharing is performed. This is a technique for reducing the amount of hardware generated by high-level synthesis by assigning variables whose lifetimes do not overlap to the same memory. This technique cannot be applied to the structure and array variables of the high-level description model that is the subject of the present invention.
[0013]
[Problems to be solved by the invention]
An object of the present invention is to provide a mechanism capable of automatically synthesizing a circuit serving as an interface between a plurality of circuits executed in parallel as described above.
[0014]
It is another object of the present invention to provide a mechanism that can automatically determine the size of a buffer memory that constitutes a circuit serving as an interface and a control circuit related to the buffer memory.
[0015]
Mathematical modeling of access to array variables, and automatic synthesis of a circuit that becomes an interface with a smaller amount of memory than in the past and a reduced latency (time from the input of data to be processed until the processing result comes out) It is an issue to provide a mechanism to do this.
[0016]
[Means for Solving the Problems]
A synthesizing apparatus according to the present invention that solves the above problems is based on the premise that an inter-module interface that transfers data between a plurality of circuit modules that operate in parallel is synthesized, variable calculation means, lifetime calculation means, degeneration A set calculation means and a circuit synthesis means are provided.
[0017]
The variable calculation means analyzes writing and reading of data to and from the inter-module interface by the circuit module, and obtains a variable that the inter-module interface has based on the result of the analysis.
[0018]
The lifetime calculation means obtains a lifetime indicating a period from when data is first written to when it is finally read, with respect to a variable included in the inter-module interface.
[0019]
The degenerate set calculation means is a subset obtained by integer division of the set having the variable as an element, and for all the variables that are elements, the life that is shifted from the lifetime of the variables that are the elements by a specific time A variable having time is searched for a degenerated variable set that exists in another subset obtained by the division.
[0020]
The circuit synthesis means synthesizes the inter-module interface based on the variable assignment using the degenerated variable set.
The present invention can also be realized as a CAD system including as a means a compiler means for analyzing a description in a circuit description language and outputting a circuit specification, and the synthesis apparatus.
[0021]
Further, the present invention analyzes the writing and reading of data to and from the inter-module interface by the circuit module, obtains a variable possessed by the inter-module interface based on the result of the analysis, and calculates the variable possessed by the inter-module interface. Then, the lifetime indicating the period from when data is first written to when it is last read is obtained, and is a subset obtained by dividing the set having the variables as elements into integers, and for all the variables that are elements. The variable having the lifetime shifted by a certain time from the lifetime of the variable as the element is searched for a degenerated variable set existing in another subset obtained by the division, and the degenerated variable A composition characterized by synthesizing the inter-module interface based on variable assignment using a set The law is also within the scope.
[0022]
Further, the present invention includes a computer program and a portable storage medium. According to the present invention, the interface between modules can be automatically synthesized.
[0023]
It is also possible to synthesize an interface between modules that uses a small amount of memory.
Other features of the invention will be described with reference to FIGS. Each variable V [i] of the entire set of n variables from V [0] to V [n−1] (V [0] to V [63] in FIG. 24) is represented by time Begin [i] (FIG. 24). Is written at an address in the memory at the beginning of the time (#), is held for the lifetime T (number of # in FIG. 24), and is read at time End [i] (the next time when # ends in FIG. 24). The description will be made on the premise of the memory read / write operation. The writing time Begin [j] of the variable V [j] (for example, V [4] in FIG. 24) after the lifetime T from Begin [i] in which writing of the V [0] in FIG. And a write sequence and a read sequence composed of a combination of i and j that satisfy the condition that Begin [j] of the variable V [j] must start after the read time End [i] of the variable V [i]. Are obtained, that is, subsets (P 0, P 1, P 2, P 3 in FIG. 24) that become a set of variables having the same lifetime with a time difference Tr. If some subsets satisfy the above, the subsets are called reduced subsets of the entire set.
[0024]
Since the degenerated subsets are congruent in the order of the variables, the read / write of the memory is performed in the address space corresponding to the degenerated subset variables (in FIG. 24, the address space 16 corresponding to the subset P0). It becomes possible. That is, the address space is degenerated from 64 to 16 in FIG.
[0025]
Furthermore, even if each degenerated variable set is divided into further subsets, the above condition can be obtained in a smaller address space than the above degenerated address space by sharing variables, that is, by putting a plurality of variables in one address. Can be met. For example, if V [0], V [4], and V [6] in FIG. 24 are A, +, and B, they can be assigned to the memory address M [0] in FIG. This is called variable sharing. In FIG. 25, the original address space 64 is degenerated to 10.
[0026]
DETAILED DESCRIPTION OF THE INVENTION
FIG. 1 is a block diagram showing a configuration of a CAD system when a technique for automatically generating an inter-module interface serving as an interface in the present invention is applied to a CAD system.
[0027]
The CAD system 1 shown in FIG. 1 includes an input editing unit 11, a compiler unit 12, a library storage unit 13, an interface module generation unit 14, and an output unit 15. In the figure, only the part related to the present invention in the CAD system is shown.
[0028]
The input editing unit 11 is a part for processing description input / editing of processing contents by a user in a circuit description language when designing a circuit. The compiler unit 12 generates a specification of a circuit that realizes the description content input by the user from the input editing unit 11 and the description content in the circuit description language in the file read as a file. The library storage unit 13 stores a plurality of circuit libraries, and is referenced when the compiler unit 12 generates a circuit to extract a necessary library. The interface module generation unit 14 generates an inter-module interface that serves as an interface between a plurality of circuit modules that are executed in parallel. When the compiler unit 12 generates a circuit, the description content in the circuit description language is analyzed. If it determines that an inter-module interface is necessary, it requests its generation. The interface module generation unit 14 may be configured as a partial function of the library storage unit 13. The input / output unit 15 outputs the circuit generated by the compiler unit 12 as a file or on a display device such as a display.
[0029]
This CAD system may be realized on dedicated hardware, or may be realized by software using a general-purpose computer.
The interface module generation unit 14 is not a part of the software that implements the CAD system 1 or the CAD system, but is a part of another device or software, for example, a development tool such as a high-level synthesis tool or a compiler, or a single unit. You may comprise as an apparatus or software.
[0030]
FIG. 2 is a diagram illustrating processing performed by the interface module generation unit 14.
In response to the interface module generation request from the compiler unit 12, the interface module generation unit 14 performs the following processing.
1. Analyze write and read sequences.
2. The output delay is obtained from the write sequence and the read sequence.
3. Analyze the lifetime of variables.
4). Find the degenerate variable set.
5. Solve variable sharing problems and assign variables to memory.
6). Synthesize module interface.
[0031]
The above processes will be described later.
The interface module generation unit 14 processes the circuit modules A and B operating in parallel and the inter-module interface C of the circuit modules A and B as processes.
[0032]
The process here refers to a process that operates while communicating with other processes by writing or reading data in a communication port. There may be memory (memory) within the process. Processes can freely perform communication operations without affecting each other (a plurality of processes operate in parallel).
[0033]
Further, when generating the inter-module interface C, the following points are taken into consideration.
・ Multiple processes run in parallel.
-There is no memory in the communication path.
-If writing is done before the partner reads, so-called overwriting is performed and the data written last time is destroyed.
• If reading is performed before writing new data, the previously written data is only read and new data cannot be read.
[0034]
Each process has its own clock. However, the time indicated by the clock of each process can be expressed by a linear function. The clocks are different for each process because each circuit module does not always operate using the same clock signal, but is simply expressed when the clock frequency and phase are different for each circuit module. Only. Even if each has its own clock, each time can be converted by a linear function, so the presence of multiple clocks does not complicate the model. When it is known in advance that all circuit modules operate with the same clock signal, the time of all the circuit modules may be expressed by one clock.
[0035]
FIG. 3 is a diagram illustrating an example of a process handled by the interface module generation unit 14.
In the figure, a process C is an interface between modules of a process A and a process B that operate in parallel. The process A performs communication corresponding to a write operation to the memory of the process C when outputting data, and the process B performs communication corresponding to a read operation from the memory of the process C when inputting data. Then, the interface module generation unit 14 performs control so that the order relationship is ensured so that the circuit module B reads after the circuit module A completes writing, and the circuit module A does not write before the circuit module B reads. Module C is generated.
[0036]
4 and 5 are diagrams illustrating an implementation example of the inter-module interface generated by the interface module generation unit 14.
FIG. 4 shows a configuration in which array variables are allocated on the RAM. In response to writing data from the circuit module A and reading data from the module B, the control circuit issues addresses allocated to the array variables. Control to assure the order relation.
[0037]
FIG. 5 shows a configuration in which an array variable is assigned to a register. In response to data writing from the circuit module A, the control circuit transmits a load signal to the assigned register and writes it to the module. For reading data from B, the selector is controlled by a control signal to output data from the corresponding register so that the order relationship is guaranteed.
[0038]
Next, the processing by the interface module generation unit 14 shown in FIG. 2 will be described in detail.
(1)Analysis of write series / read series
In this processing, the output of the circuit module A and the input of the circuit module B are rewritten as the input / output of the process C so that the subsequent processing can be discussed only with the description for the process C.
[0039]
In the following description, the time indicated by the clocks of process A and process B is tA , TB Is written. Also, process A is at time tA Ω (A, tA), Process B is time tB Γ (B, tB ). In the present embodiment, a set is assumed assuming that a plurality of array variable elements are accessed at a time. Also
Process A write sequence W (A):
W (A) = {(tA , Ω (A, tA )) | TA Is the time of process A}
Process B read sequence R (B):
R (B) = {tB , Γ (B, tB )) | TB Is the time of process B}
It is defined as For example,
W (A) = {(0, {0, 32}), (1, {1, 33}),..., {J, (32 + j)}}, j = c mod 32
Represents the process of writing the 0th and 32nd array variables at time 0, writing the first and 33rd at time 1, and so on.
R (B) = {(0, {0, 1}), (1, {2, 3}), ..., (d, {(2j), (2j + 1)}), ...}, j = D mod 32
Represents the process of reading the 0th and 1st array variables at time 0, reading the 2nd and 3rd at time 1 and so on.
[0040]
FIG. 6 is a diagram illustrating an example of a data structure of a read sequence / write sequence.
The read sequence of processes and the write sequence can be realized by a combination of a one-dimensional array and a list structure as shown in FIG. In the figure, the elements of the array indicate the head of the list structure data, and each data in the list structure part represents a set of subscripts of variables accessed at that time. In the example shown in the figure, the sequences {(0, {0, 1, 2}), (1, {3, 4}), (3, {5, 6}), ..., (n-1, {30 , 31})} is stored.
[0041]
Process A time tA bTo tA eWrite series W (A, tA b, TA e):
W (A, tA b, TA e) = {(TA b, Ω (A, tA )) | TA b≦ tA <TA e}
Process A time tb ATo tA eWriting position set ω (A, tA b, TA e):
[0042]
[Expression 1]
Figure 0004083491
[0043]
It is defined as
Similarly, the reading of the process B is defined as follows.
Process B time tB bTo tB eReading series R (B, tB b, TB e):
R (B, tB b, TB e) = {(TB, Γ (B, tB)) | TB b<TB <TB e}
Process B time tB bTo tB eReading position set γ (B, tB b, TB e):
[0044]
[Expression 2]
Figure 0004083491
[0045]
In the case of FIG. 3, since there is a communication path from the process A to the process C, the A write series is also a C read series. Here, only cases where communication can be performed reliably without any omissions are dealt with, so that a clock for each process is set so that this can be realized.
[0046]
Process A time tA To process C time tC By
tA = ΑCat C + ΒCa: ΑCa, ΒCaIs a constant (αCaIs the frequency ratio of the clock signal, βCaCorresponds to the phase difference)
In other words, the readout sequence γ (C, t of process C C  , T C  +1) is easily obtained from the write sequence of process A.
γ (C, t C  , T C  +1) = ω (A, αCatC + ΒCa, ΑCa(T C +1) + βCa)
Similarly, process B time tB To process C time tC By
tB = ΑCbt C + ΒCb: ΑCb, ΒCbIs a constant (αCbIs the frequency ratio of the clock signal, βCbCorresponds to the phase difference)
In other words, the writing sequence ω (C, t of process B C  , T C  +1) can be obtained from the writing sequence of process C.
ω (C, t C  , T C  +1) = γ (B, αCbtC + ΒCb, ΑCb(T C +1) + βCb)
However, in actual processing, the write sequence of process A and the read sequence of process B are information. In this processing, the write sequence of process C is obtained from the read sequence of process B.
[0047]
In practice, each process runs on the same clock signal, that is, αCa= 1, βCaIn most cases, however, such a representation is used in order to deal with the case where the clock signals are not necessarily the same (the frequency is the same).
[0048]
In this way, the output of module A and the input of module B are expressed only by the input and output of process C, and in the future, the synthesis method of circuit module C can be discussed only by process C.
[0049]
When one process performs a single read process and the other process performs a write process twice or more, it is necessary to devise communication using a plurality of ports. On the other hand, when one process performs one writing process and the other process performs two or more reading processes, it is necessary to devise a method such as providing a period for resting reading.
[0050]
FIG. 7A is a flowchart showing a process of converting the write sequence of process A into the read sequence of process C. TA = 0 to the last write time t in the process A write seriesA EThe write sequence of process A up to is converted into a read sequence of process C.
[0051]
In the figure, when the processing is started, first, as step S1, ta = 0, the data R of the list structure shown in FIG.C Clear all.
[0052]
Next, as step S2, tC ΑaCtA + ΒaCaC, ΒaCIs a value obtained by rounding up the calculated value of the constant in the time relational expression, and the time in process A is converted to the time in process C. In step S3, time tCThe data R having the list structure as shown in FIG.C [TC ] At the end of timeaThe data W of the list structure as shown in FIG.A [Ta ] Is added.
[0053]
Next, as step S4, tA 1 is added and t is set as step S5.a Is the last write time tA EIf not exceeded (step S5, YES), the process returns to step S2, and the processes of steps S2 to S5 are repeated. In step S5, t is set as step S5.AIs the last write time tA EIs exceeded (step S5, NO), the process is terminated.
[0054]
FIG. 7B shows the conversion of the write series of process A into the read series of process C by the process of FIG. 7A. The upper part of FIG. In this case, the lower part of the figure shows the case where the process A is faster than the process C.
[0055]
In the upper part of the figure, since the speed of the process A is slower, the time tA Write processing is time t of process CC At the time tA +1 write processing is time t of process CCThis corresponds to +2 read processing. In the lower part of the figure, since the speed of process A is faster, time tA Write processing is time t of process CCIn the reading process, the time tA +1 and tA The write process of +2 corresponds to the read process of process C at time tc + 1.
[0056]
FIG. 8A is a flowchart illustrating a process of converting the read sequence of process B into the write sequence of process C. TB = 0 to the last read time t in the process B write seriesB EThe process B read sequence up to is converted into a process C write sequence.
[0057]
When processing is started in the figure, first, as step S11, tB = 0, data W of the list structure shown in FIG.CClear all.
Next, in step S12, αbCtB+ ΒbCbC, ΒbCIs a value obtained by rounding down the calculated value of the constant in the relational expression for time, and converts the time in process B to the time of process C. In step S13, time tCThe data W of the list structure as shown in FIG.C [TC ] At the end of timeBThe data R of the list structure as shown in FIG.B [TB ] Is added.
[0058]
Next, as step S14, tB Is incremented, and t15 is performed as step S15.B Time t when the value of is last readB EIs not exceeded (step S15, YES), the process is returned to step S12, and the processes of steps S12 to S15 are repeated. In step S15, t is set as step S15.BTime t when the value of is last readB EIs exceeded (step S15, NO), the process is terminated.
[0059]
FIG. 8B shows conversion of the read sequence of process B into the write sequence of process C by the process of FIG. 8A. In the upper part of FIG. 8B, process B is faster than process C. In this case, the lower part of the figure shows the case where the process B is slower than the process C.
[0060]
In the upper part of the figure, since the speed of the process B is faster, the time t of the process CC Write processing of process B is time tb Or tb +1 for any one of the reading processes, and the time t of the process CC+1 write processing is time B of process BC +2 or tC It corresponds to the reading process at any of +3. In the lower part of the figure, since the speed of the process B is slower, generally, a plurality of communication ports are required, and the time t of the process CCWrite processing of process B is time tb For the reading process, the time t of process CC +1 and tC +2 twice write processing is process B time tbThis corresponds to the reading process of +1. In this case, if a plurality of data is transferred between processes, a plurality of communication ports are required.
(2)Find output delay
The output delay is the minimum output delay t from the time when the process C reads data from the process A to the time when the data is written to the process B.C odel ay Is a value indicating the minimum time. In this embodiment, in order to reduce the amount of memory used in the module C, this minimum output delay t is used as the output delay of the process C.C odelay Select.
[0061]
Minimum output delay tC odelayIs an integer value that satisfies the following relationship.
∀t C  γ (C, 0, t C  ) ⊇ω (C, 0, tC-TC odelay)
Minimum output delay t since process A started writingC odelayIf reading of process B is started after the elapse of time,
-Process B reads array variables after process A writes to array variables-Process B does not read array variables before process A writes array variables
The order relationship of processing is satisfied.
[0062]
Minimum output delay tC odelayAn example of an algorithm for obtaining is shown below. The set of array variable subscripts γ and ω is the time t.C The number of elements increases monotonically, and the upper limit is equal to the size of the array variable. Therefore, this algorithm stops at the maximum if the process B loops the number of cycles required to read all the elements.
1. t = 0
2. γ (C, 0, tC ) ⊇ω (C, 0, tC-T), tC odelay = T ends
3. t = t + 1
Return to 4.2
FIG. 9 shows the minimum output delay tC odelayIt is a flowchart which shows the process which calculates | requires.
[0063]
When the processing is started in the figure, first, in step S21, the initial value is 0 for d, t1, t2, and the list structure as shown in FIG. Data Rc [t1] is set.
[0064]
Next, in step S22, t2 is the time t at which process C last writes.C EDetermine whether: Result tC EIf it is the following (step S22, YES), it is determined in step S23 whether or not all the elements of Wc [t2] of the list structure data are included in the list structure data R (step S23). S23, NO) One d is added (step S24), and if it is included (step S23, YES), one t2 is added (step S25).
[0065]
In step S26, the value of t1 is incremented by 1 and the list structure variable Rc [t1] is added to the end of the list structure variable R. The process returns to step S22, and t2 is tC ESteps S22 to S26 are repeated until the value exceeds.
[0066]
In step S22, t2 is tC EIf it is larger (step S22, NO), t is set as step S27.C odelayAs a result, the value of d is set and the process is terminated.
(3)Analysis of variable lifetime
The lifetime L (v) = (begin (v), end (v)) of the variable v means that a value is first assigned to the variable v at time begin (v) and the last at time end (v). Indicates that a value reference for variable v has occurred. In this process, the lifetime of the array variable included in module C is analyzed.
[0067]
For the element v [i] (i is a subscript) of the array variable, the value assignment time is the time read from the module A through the communication port, and the last reference time is from the communication port to the module B. It will be the time of writing.
[0068]
For the variable v [i], the lifetime L (v [i]) = (begin (v [i]), end (v [i])
Is obtained as follows.
If i∈γ (C, t) then begin (v [i]) = t
If iεω (C, t ′), then end (v [i]) = t ′
FIG. 10 is a diagram illustrating a data structure of variable lifetimes begin (v [i]) and end (v [i]).
[0069]
Begin (v [0]) to begin (v [i]) and end (v [0]) to end (v [i]) indicating the lifetimes of the variables v [0] to v [i] are the same. It can be realized by a one-dimensional array Begin [0] to Begin [n−1] and a one-dimensional array End [0] to [n−1] as shown in the figure.
[0070]
FIG. 11 is a flowchart showing a process for obtaining the lifetime ∀vi, L (vi) = (begin (v [i], end (v [i])).
It is assumed that the process in FIG. 10 is performed using the one-dimensional array shown in FIG.
[0071]
When the process is started in the figure, t = 0 is set as an initial value in step S31.
Next, as step S32, the primary array variable Begin [i] shown in FIG. 10 is applied to all elements of the variable Rc [t] having a list structure as shown in FIG. T is substituted for (i is an element of variable Rc [t]) (step S33).
[0072]
Next, as step S34, the primary array variable End [i] shown in FIG. 10 is applied to all elements of the variable Wc [t] having a list structure as shown in FIG. T is substituted for (i is an element of the variable Wc [t]) (step S35).
[0073]
In step S36, the value t is incremented by one, and this value is the time t at which the process C last writes.C EIt is determined whether it is smaller (step S37). The result t is tC EIf smaller, the process returns to step S32 and the processes of steps S32 to S36 are repeated. In step S37, t is t.C EWhen it becomes smaller (step S37, NO), the process is terminated.
(4)Find degenerate variable set
Variable set V, subsets P and Q of V, P⊆V, Q⊆V, | P | = | Q | (in the description of this specification, | set X | indicates the number of elements of set X), For a certain integer Tr, Pp∈P ∃q∈Q such that there (p) + Tr = begin (q) and end (p) + Tr = end (q) and end (p) ≦ begin (q) It is written as outside 1. At this time, P and Q have the same time difference Tr
[0074]
[Outside 1]
Figure 0004083491
[0075]
It is called having the same lifetime.
If such a subset P exists, it is only necessary to consider a smaller set P without considering the entire variable set V. Here, P is referred to as a degenerated variable set.
[0076]
In this process, a variable set obtained by degenerating the array variable included in the module C is obtained.
A process for obtaining the degenerated variable set Vr will be described below.
Let Head (n, L) be a function that returns a set of n elements from the beginning of data L with an ordered list structure.
1. From the variable set V, an ordered list V arranged in ascending order of begin (vi) for each variable vi∈V.ord Ask for.
2. Among all the common divisors (≠ 1) of the number of elements | V | of the variable set V, the smallest common divisor m satisfying the following is obtained.
[0077]
[Equation 3]
Figure 0004083491
[0078]
3. If m is found, Vr = P0 = Head (m, Vord ) Is a degenerate variable set.
4). If such m does not exist, Vr = V (cannot be degenerated).
[0079]
FIG. 12 is a diagram illustrating a degenerated variable set.
The example in the figure shows a case where the set is reduced to 1/4 (set Vord The number of elements / m = 4). Each variable set P0-P3 has a relationship of outer 2 and P0-P3 is
[0080]
[Outside 2]
Figure 0004083491
[0081]
Each has m elements.
When such a degenerated variable set P0 is obtained, the variable set Vr may be considered as a degenerated variable set Vr, not the entire variable set V.
[0082]
FIG. 13 is a flowchart showing a process for obtaining the degenerated variable set Vr.
In performing the processing shown in the figure, the set of variables of the process C is set to the one-dimensional array V, and the list data obtained by sorting the elements vi∈V of the one-dimensional array V in ascending order of Begin [i] is set to the one-dimensional array V.ord In addition, a list in which a set of divisors of the number of elements | V | of the one-dimensional array V is arranged in descending order is set in the one-dimensional array M in advance.
[0083]
When the processing of FIG. 13 is started, first, at step S41, it is determined whether or not the array M is empty. If the result is not empty (NO in step S41), the first element of the one-dimensional array M, that is, the smallest value among the elements is set in n, and the first element is removed from the array M.
[0084]
Next, in step S43, the one-dimensional array Vord Are equally divided into n in order from the top, and these are defined as P0, P1,..., Pn-1. Then, by the following steps S44 to S48, the outer 3 is set to P0, P1,.
[0085]
[Outside 3]
Figure 0004083491
[0086]
Determine whether it is true.
First, in step S44, an initial value 0 is set to the variable i. Next, in step S45, whether i <n−1, that is, whether all P0, P1,..., Pn−1 have been processed. If i <n−1 as a result of the determination (step S45, YES), it is determined whether or not outside 4 as step S46.
[0087]
[Outside 4]
Figure 0004083491
[0088]
If YES (step S46, YES), one value of the variable i is added as step S47, and the process returns to step S45 to repeat the processes of steps S45 to S47. If it is determined in step S45 that i <n-1 is not satisfied (step S45, NO), if the determination in step S46 is satisfied for all of P0, P1,. Since it is determined, V is determined as step S48.
[0089]
[Outside 5]
Figure 0004083491
[0090]
The process ends with r = P0.
On the other hand, if the result of determination in step S46 is NO (step S46, NO), the process returns to step S41, and the first element in the primary array M is set to n, and the same process as described above. Repeat the process. Details of the determination process in step S46 will be described later.
[0091]
If the processing is completed for all the elements in the primary array M, and the primary array M is determined to be empty in step S41 (YES in step S41), the variable set V cannot be degenerated. Vord To finish the process.
[0092]
FIG. 14 is a flowchart showing details of the determination processing in step S46 of FIG.
In the determination process of step S46, first, as the initial value, the number of elements of Pi | P | is set in the variable m, m * i is set in the variable j, and Begin [m] −Bgegin [0] is set in the variable Tr (step S461). .
[0093]
Next, in step S462, it is determined whether j <n−1. If j <n−1 (step S462, YES), then as step S462, Begin [j] + Tr = Begin [j + m] and End [j ] + Tr = End [j + m] and End “j” ≦ Begin [j + m]. As a result, if these conditions are satisfied (step S463, YES), the value of the variable j is incremented by one as step S464, and then the process of step S463 is returned, and it is determined in step S463 that the above conditions are not satisfied. The process of steps S462 to S464 is repeated until it is determined that j <n-1 is not satisfied in step S463 (NO in step S463) (NO in step S463). And when NO in step S462, the outer 6 is established.
[0094]
[Outside 6]
Figure 0004083491
[0095]
When step S46 is YES and NO is determined in step S463, it is determined that the outer 7 is not established, and step S46 is NO.
[0096]
[Outside 7]
Figure 0004083491
[0097]
(5)Solve variable sharing problems and assign variables to memory
In this process, a memory is allocated to each element of the variable set Vr degenerated by the process (4). Since the variable set Vr is degenerated, a memory is allocated to each variable that is an element of this Vr, and other variables share the memory with the variable that is an element of the Vr, so that the scale of the memory is obtained. It is possible to generate a module-to-module interface with a reduced size.
[0098]
Further, by solving the variable sharing problem for the variable set Vr and allocating memory to the variable based on the result, the memory amount of the inter-module interface can be further reduced.
[0099]
In order to solve this variable sharing problem, it is possible to solve it with an algorithm modified from the Left Edge method described in the following document.
Title Hight-Level Synthesys
Author D. Gajski, N. Dutt, A. Wu and S. Lin
Published Kluwer Academic Publishers Published 1992
In the algorithm modified from the Left Edge method, the variable v in the variable group S to be processed is rearranged in the ascending order of begin, and it is checked whether the lifetime overlaps with other variables from the first variable. Allocate to memory.
[0100]
For the variable set V, V ′ is set as follows.
V ′ = {v ′ | v′εV, L (v ′) = (begin (v) + T, end (v) + T)}
In the above equation, T is the period of the process, and the time when the process C first writes to the elements of the array variable is t1, and the time when the process C has written to all the elements of the array variable for the first time If t is t2, then T = t2-t1. When this variable set V cannot be degenerated, the variable sharing problem is solved using this V '.
[0101]
FIG. 15 is a flowchart showing processing for solving the variable sharing problem.
In this process, the case where the variable set V can be first reduced and the case where the variable set V cannot be reduced is divided. If the variable set V cannot be reduced, V ′ is added to the variable set S to double the original value. The quantity factor is taken into account. This is the same idea as designing an interface between modules by doubling the memory and alternately using the memory on the reading side and the writing side to prevent access contention.
[0102]
When the process of FIG. 15 is started, first, in step S51, the degenerated variable set Vr arranges the variables of the variable set V in the order in which the first value substitution occurred.ord It is judged whether or not. If the result is different (NO in step S51), S = Vr and Tr = Begin [| Vr |] -Begin [0] are set as step S52. If it is the same in step S51 (step S51, YES), S = V∪V ′ and Tr = T * 2.
[0103]
Next, in step S54, the set S is sorted in the ascending order of Begin [i], i∈S, and this is added to the ordered list S.ord And
In step S55, the variables mem, last, and i are set to 0, and the variable next is set to ∞.
[0104]
Next, as step S56, Sord Is determined to be empty, and if not empty (step S56, NO), Sord Number of elements | Sord It is determined whether | ≦ i. Result | SordIf | ≦ i (step S57, YES), as step S58, the value of the variable mem is incremented by one, the variables last and i are set to 0, and next is set to ∞.ordIf | ≦ i is not satisfied (step S57, NO), the process directly proceeds to step S59.
[0105]
In step S59, Sord The i-th element from the top is substituted for v, and it is determined in step S60 whether last ≦ Begin [v] and End [v] ≦ next are satisfied.
[0106]
As a result, when it is determined that it is satisfied (step S60, YES), the ordered list S is used as step S62.ord Remove element v from
In step S63, it is determined whether Begin [v] <End [v]. If the result is not Begin [v] <End [v] (NO in step S63), the process returns to step S56.
[0107]
If it is determined in step S63 that Begin [v] <End [v] (YES in step S63), mem is substituted in the array assign [v] indicating the allocation of the variable to the memory in step S64, and last. The post-processing with = end (v) is returned to step S56. For next, the smaller of the value of next and the value of Begin (v) + Tr is substituted. If the above condition is not satisfied in step S60 (NO in step S60), one is added to i in step S61, and the post-processing is returned to step S56.
[0108]
The processing from step S56 to S64 is performed as an ordered list S.ord Repeat until there are no more elements.ord Is empty (step S56, YES), the process is terminated. Then, the memory is allocated to the variable based on the result stored in the array variable assign.
(6)Synthesize the interface circuit
By the procedure so far, the variable is assigned to the memory, and which variable is to be accessed at which timing (= which memory is to be accessed at which timing), the process C is determined to be RTL (register transfer level). This means that we have enough information to implement as a circuit. After that, an FSM (Finite State Machine) based on these pieces of information is constructed, and a circuit is made according to the FSM.
[0109]
In the following, a format similar to SystemC is adopted as a grammar for describing RTL.
The RTL of process C is composed of the following two subprocesses. Sub-processes start executing simultaneously and are executed in parallel. The operation timing is synchronized with “wait (number)” (described later).
-Subprocess that reads from input port and writes to memory
-Subprocess that reads data from memory or input port and writes to output port
FIG. 16 shows an algorithm for performing RTL generation when a variable set can be degenerated. If the variable set cannot be reduced, twice as many variables are considered as in the process of FIG. At this time, γ (C, tC ) And ω (C, tC ) To handle twice as many variables. “Expand” means the following replacement.
[0110]
Originally, γ (C, tC ) = Γ (C, tC + T), but defined as+ (C, tC) To γ (C, tC ).
・ Γ+ (C, tC) = Γ (C, tC ) 0 ≦ tc <T
・ Γ+ (C, tC) = Γ (C, tC ) Is increased only by | V |. T ≦ tc <2T. Similarly for ω (C, tc)+Replace with (C, tc).
[0111]
16 indicates that the RTL code is output to a file or a compiler, Pj indicates the input port j, Pj. read () is data read from the input port, Qk is the output port k, Qk. write (d) means writing data d to the output port k.
[0112]
Also, γ (C, tC ) Is a set, a plurality of data may be taken in one cycle. In order to realize this, the process C has a plurality of input ports and output ports. Also, it is assumed that which data comes from which port is given in advance.
[0113]
Assign [] is a value obtained in the variable sharing problem, and Assign [v] outputs to which memory the variable v is assigned. This Assign [] is a constant value when generating the RTL code. Mem [a] = b means that the value b is written in the ath memory. wait (n) means waiting for n clocks.
[0114]
In FIG. 16, the upper sub-process is an algorithm for outputting an RTL description for reading data, and Mem [Assign [j]] = Pj for each element of γ (C, t1) (t1 = 0 to T−1). . read () (j is each element of γ (C, t1)) is output.
[0115]
FIG. 17 is a diagram showing an output example of the RTL description by the sub-process that reads this data. In FIG. 18 and FIGS. 18 and 19 described later, the annotations output by the sub-process are omitted.
[0116]
In the description of the figure, the input data from the input port is 0, 1, 2, 3, 4, 5, 6, 7, 0, from the allocation relationship between the variables and the memory obtained by the processing so far. This indicates that the fourth, second, sixth and eighth positions are stored. The control unit shown in FIG. 4 or 5 performs control based on this description by a write address or a load signal, and stores data in a memory or a register.
[0117]
In FIG. 16, the lower sub-process is an algorithm that outputs an RTL description for writing data, and for each element of ω (C, t2) (t2 = 0 to T−1), Qk. write (Mem [Assign [k]]) (k is each element of ω (C, t2)).
[0118]
FIG. 18 is a diagram illustrating an output example of the RTL description by the sub-process that writes the data to the output port.
In the description of the figure, the data stored in 0, 2, 4, 6, 0, 2, 0 of the memory with respect to the output port, based on the allocation relationship between each variable and the memory obtained by the processing so far, It shows that the data of the input port and the data stored in the memory 1, 3, 5, 7, 4, 6, 8, 9 are output. The control unit shown in FIG. 4 or FIG. 5 performs control based on this description by read address or load selection signal, and outputs data from the memory or register to the output port.
[0119]
FIG. 19 is a diagram showing a simulated example of an RTL code in which two subprocesses, that is, a subprocess that reads data and a subprocess that writes data to an output port are combined.
[0120]
If two subprocesses are described together as one, it is as shown in the figure, and two sequential circuits are described together as one.
Next, a specific design example according to this embodiment is shown.
[0121]
As an example 1, the following ω (A, tA ) And γ (B, tB Assume that processes A and B defined as) are given. This corresponds to passing an array variable of size 64 from A to B, and T = 64.
[0122]
[Expression 4]
Figure 0004083491
[0123]
Where zi Represents the i-th digit value (0 or 1) when z is expressed in binary, and [zi, Zj ,...] Indicate binary representation values in which 0 or 1 values are arranged in this order. That is, z = [zFive , ZFour, ZThree , Z2 , Z1 , Z0 And y is a value obtained by rearranging bits 5 to 3 of z.
[0124]
Here, the constant α in the time relational expressionC a= 1, αCb= 1, βCa= 0, βCbWhen = 0, the read sequence R (C) and write sequence W (C) of the process C are obtained as follows.
[0125]
Figure 0004083491
When the minimum output delay is obtained, t C odelay= 7.
[0126]
As a precondition of the present embodiment, once the process C starts outputting data, it continues to output in a predetermined order, and since input data has not yet arrived, all measures are taken such as temporarily stopping output. (Once it begins to flow, the output must always flow without stagnation). For this reason, if the output is started too early, the situation where the data that has not yet arrived is output is driven. Therefore, after waiting for a certain amount of data, output begins. This time is the minimum delay time tc odelayIt is.
[0127]
For example, in the above example, consider a case in which output is started after waiting for two unit times. The state at that time is shown in FIG.
In the figure, at each time,
Which data arrives as input,
-Which data is output
-What data is stored in the buffer memory
Represents.
[0128]
In the figure, arrows indicate data movement, and crosses indicate that data is extracted from the buffer memory. The contents of the buffer memory are expressed as a set, and the order does not matter (it does not mean that they are stored in the memory in this order). Time tC The contents of the buffer memory in can be expressed as set differences as follows.
(Contents of buffer memory) = γ (C, 0, tC ) -Ω (C, 0, tC-2)
In the figure, at time 5, the third data must be output, but since the third data has not yet arrived, it becomes stuck (output is delayed).
[0129]
Next, consider a case in which the output is made after waiting for 7 unit times. The situation is as shown in FIG.
In FIG. 21, only the time 28 is shown, but after that, it is possible to execute data input and output continuously without delaying the output.
[0130]
The case of outputting after waiting for longer than 7 unit time has only demerits such as (1) increase in required buffer memory amount, (2) increase in time from input to output (latency). Therefore, in this embodiment, such a case is excluded. However, excluding does not mean that such cases cannot be handled. To handle such a case simply tc odelay It is only necessary to adopt a value larger than the value of the minimum output delay for the value of.
[0131]
The lifetime analysis result of the array variable v of process C is shown in FIG.
In the figure, “Begin” and “End” correspond to the one-dimensional array shown in FIG. 10, “Begin” is the time when the value is first assigned to the variable, “End” is the time when the reference is lastly generated, and the subscript is the variable attached. The letters are shown.
[0132]
FIG. 23 graphically represents the lifetime of each variable based on FIG.
In the figure, the subscript (index) of the array variable of the process C is taken in the vertical axis direction, and the lifetime of the variable is represented by “#” in the horizontal direction. In the figure, the i-th row corresponds to the element v [i] of the array variable, and the symbol # is plotted in the range from Begin [i] to End [i] -1.
[0133]
Normally, each element of an array variable is assigned to a dedicated memory. For example, the variable v [0] is Mem [0], the variable v [1] is Mem [1], and so on.
[0134]
However, if there is no overlap between the lifetimes of the variables v [0] and V [1], it is possible to secure the values of the two variables with only one memory without allocating dedicated memories. . For example, the lifetime of the variable v [0] is L (V [0]) = (3, 5), and the lifetime of the variable v [1] is L (v [1]) = (10, 15). At some time, the memory Mem [0] holds the value of the variable v [0] at time 3 to 5 (strictly speaking, the last value is read at time 5 and a new value is obtained from time 5). At the time 10 to 15, the value of the variable v [0] is held. L (V [1]) = (10, 15) means that after the time 15, the value of the variable v [1] is no longer used and the value may be rewritten.
[0135]
The variable sharing problem is to decide how to assign several variables to the same memory. It can be said that reducing the variable set is equivalent to roughly solving the variable sharing problem first.
[0136]
When the degenerated variable set Vr is obtained, | V | = 64, m = 16, and the variable set V is divided into four equal parts, Vr = {v0, v32, v1, v33, v2, v34, v3, v35, v4, v36, v5, v37, v6, v38, v7, v39} are obtained.
[0137]
FIG. 24 is a diagram illustrating an example of a degenerated variable set obtained from the variable set illustrated in FIG.
In the figure, the variable set V can be divided into four subsets, and each subset has the same lifetime with a time difference Tr. Here, Tr = 16 here.
[0138]
The degenerated variable set Vr is ¼ of the variable set V, and the memory required by the module C can be ¼ the size of the memory allocated to each element in the variable set V. .
[0139]
Next, as a second example, the variable set Vr degenerated as shown in FIGS. 23 and 24 is processed by an algorithm modified from the Left Edge method as shown in FIG. Further, an example in which the memory required by the module C is reduced will be shown.
[0140]
Even in each variable in the reduced variable set Vr shown in FIG. 24, one memory can be shared by a plurality of variables as long as the lifetimes do not overlap.
When the process shown in FIG. 15 is performed on the degenerated variable set Vr shown in FIG. 24 and the variable sharing problem is solved, variables are allocated to the memory as follows.
[0141]
Mem [0] has variables v0, v4, v6
Mem [1] has variable v32
Mem [2] has variables v1, v5
Mem [3] has variable v33
Mem [4] has variables v2 and v36
To Mem [5], the variable v34
Variables v3 and v37 for Mem [6]
Mem [7] has variable v35
The variable v38 to Mem [8]
Mem [9] has variable v39
Here, since the variable set V is degenerated, if the variable viεP0 is assigned to the memory Mem [k], the variables in P1, P2, and P3 are also assigned to the same memory as the corresponding variable in P0. .
[0142]
FIG. 25 is a diagram illustrating a case where variables are allocated to a memory after the variable sharing problem is solved for the degenerated variable set of FIG.
As shown in FIG. 23, originally there is an array variable of size 64, and module C needs to have a memory of size 128 at the maximum in order to guarantee the order of reading and writing, as shown in FIG. Thus, by performing the processing shown in this embodiment, it is possible to synthesize a configuration having a memory of size 10.
[0143]
Next, a case where the variable set V cannot be degenerated as a third example will be described.
Ω (A, tA ) And γ (B, tB ) And processes A and B specified by the above are given. This example corresponds to passing an array variable of size 64 from process A to process B, and T = 64.
[0144]
W (A) = {(0, {0}), (1, {1}), (2, {2}), (3, {3}), ... (63, {63})} = {I, {i}} | 0 ≦ i ≦ 63}
R (B) = {(0, {0}), (1, {8}), (2, {16}), (3, {24}), ... (63, {63})} = {I, {i}} | 0 ≦ i ≦ 63, j = (i mod 8) × 8 + [i / 8]} (Here, [i / 8] is obtained by dividing i by 8 and rounding down decimals. (Represents an integer value.)
Here, the constant α in the time relational expressionC a= 1, αCb= 1, βCa= 0, βCbWhen the read sequence R (C) and the write sequence W (C) of the process C are obtained with = 0, R (C) = w (A) and W (C) = R (B).
[0145]
The analysis result of the lifetime of the array variable v of process C is shown in FIG.
In the figure, “Begin” and “End” correspond to the one-dimensional array shown in FIG. 10, “Begin” is the time when the value is first assigned to the variable, “End” is the time when the reference is lastly generated, and the subscript is the variable attached. The letter is shown.
[0146]
FIG. 27 graphically represents the lifetime of each variable based on FIG.
In the case of this example, the subsets P and Q of V that are outside 8 are found in the variable set V.
[0147]
[Outside 8]
Figure 0004083491
[0148]
In other words, the variable set v cannot be degenerated. Further, even if the variables are rearranged in the ascending order of Begin [v], they are the same as in FIG.
When such a variable set V is processed by an algorithm modified from the Left Edge method as shown in FIG. 15 to solve the variable sharing problem, each variable is allocated to the memory as shown in FIG.
[0149]
FIG. 28 is a diagram illustrating a variable memory allocation state in the third example.
From the figure, variables v0, v49, v63, v112, and v121 are assigned to the 0th memory. In other words, it can be said that Assin [0] = 0, Assin [49] = 0, Assign [63] = 0, Assign [112] = 0, and Assign [121] = 0.
[0150]
In Example 3, since the variable set could not be degenerated, a variable set of twice the size is handled. For this reason, a total of 128 variables of the original variables v0 to v63 and additional variables v64 to v127 are handled simultaneously.
[0151]
FIG. 28 shows the memory size required by process C. Originally there was an array variable of size 64, and in order to prevent read / write contention, the memory was doubled and a memory of size 128 at the maximum was necessary. However, by applying the present invention, a memory of size 56 You can do it.
[0152]
In FIG. 26, the lifetime of the variable v56 is L (v56) = (56, 56), and the value of begin is equal to the value of end. Such variables are output from the input port to the output port without being stored in the memory. This has two purposes: (1) to reduce the latency, and (2) to reduce the amount of memory required as a buffer. The same thing can be seen in the variable v7 in Example 1.
[0153]
FIG. 29 shows the state of variable memory allocation in the third example. This figure shows the allocation status of the variables shown in FIG. 24 to the memory with the vertical axis representing the memory and the horizontal axis representing the time.
[0154]
FIG. 30 is a system environment diagram of a computer when the CAD system of FIG. 1 is realized as a general-purpose computer.
The computer shown in FIG. 1 includes a CPU 21, a main storage device 22 serving as a work area for each program, an auxiliary storage device 23 such as a hard disk in which each program and database are recorded, and an input / output device (I / O) 24 such as a display and a keyboard. A network connection device 25 such as a modem, and a medium reading device 26 that reads out stored contents from a portable storage medium such as a disk or a magnetic tape, and these are connected to each other via a bus 28.
[0155]
When the functions of the CAD system and the function of automatically generating the inter-module interface described above are realized by software, the CPU 21 uses the main storage device 22 as a work area on the main storage device 22 or the auxiliary storage device 23 based on the program. This is realized by reading data from the library storage unit 21 realized in the area.
[0156]
In the computer of FIG. 30, a program and data stored in a storage medium 27 such as a magnetic tape, a flexible disk, a CD-ROM, and an MO are read by the medium reading device 26, and this is read into the main storage device 22 or the auxiliary storage device 23. to download. And each process by this embodiment is realizable like software, when CPU21 runs this program and data.
[0157]
In the computer of FIG. 30, application software may be exchanged using a storage medium 27 such as a flexible disk. Therefore, the present invention is not limited to an automatic module synthesizing apparatus and a synthesizing method for inter-module interfaces, and when used by a computer, a program for causing a computer to perform the functions of the above-described embodiments of the present invention and a computer-readable program. The storage medium 27 can also be configured.
[0158]
In this case, as shown in FIG. 31, for example, as shown in FIG. 31, the “storage medium” is detachable from a medium driving device 37 such as a CD-ROM, a flexible disk (or may be an MO, DVD, removable hard disk, etc.). A portable storage medium 36, storage means (database or the like) 32 in an external device (server or the like) transmitted via the network line 33, or a memory (RAM or hard disk or the like) 35 in the main body 34 of the computer 31 or the like. included. The program stored in the portable storage medium 36 or the storage means (database or the like) 32 is loaded into a memory (RAM or hard disk or the like) 35 in the main body 34 and executed.
[0159]
The inter-module interface that exchanges data between two circuit modules may not be a circuit. For example, when data is exchanged by accessing a shared memory in a computer in which two circuit modules are executed in parallel, read / write information to the data memory corresponding to FIGS. 17 and 18 is given to the two computers. Thus, these computers can reduce the area used for data transfer in the shared memory by accessing the shared memory based on this information.
[0160]
(Additional remark 1) It is the synthetic | combination apparatus which synthesize | combines the interface between modules which transfers the data between the several circuit modules which operate | move in parallel,
Analyzing the writing and reading of data to and from the inter-module interface by the circuit module; and variable calculating means for obtaining a variable of the inter-module interface based on the result of the analysis;
Lifetime calculation means for obtaining a lifetime indicating a period from when data is first written to when it is last read, for the variable possessed by the inter-module interface;
In a subset obtained by integer division of the set having the variable as an element, the variable having the lifetime deviated by a specific time from the lifetime of the variable serving as the element for all the variables serving as the element, Reduced set calculation means for searching for a reduced variable set existing in another subset obtained by the division;
Circuit synthesis means for synthesizing the inter-module interface based on variable assignment using the degenerated variable set;
A device for automatically synthesizing an interface between modules.
[0161]
(Supplementary Note 2) Variable allocation for causing a memory to be shared so that the lifetimes of variables that are elements of the degenerated variable set do not overlap, and for determining allocation of variables that are elements of the degenerated variable set to the memory The inter-module interface automatic synthesizing apparatus according to claim 1, further comprising: means for synthesizing the inter-module interface based on the assignment.
[0162]
(Additional remark 3) It further has the minimum delay time calculation means which calculates | requires the minimum delay time which is the minimum time after the said interface between modules reads data and writes it, The said circuit synthetic | combination means considers the said minimum delay time. The inter-module interface automatic synthesizing apparatus according to appendix 1 or 2, wherein the inter-module interface is synthesized.
[0163]
(Additional remark 4) The said circuit synthesis means determines the magnitude | size of the memory which the said interface between modules has based on the value calculated | required from the degenerated variable set, Any one of Additional remark 1 thru | or 3 characterized by the above-mentioned. An automatic synthesis device for inter-module interfaces as described in 1.
[0164]
(Supplementary Note 5) Compiler means for analyzing a description in a circuit description language and outputting a circuit specification;
An interface module generating means for synthesizing the inter-module interface when requested by the compiler means to synthesize an inter-module interface for transferring data between a plurality of circuit modules operating in parallel;
The interface module generation means includes
Analyzing the writing and reading of data to and from the inter-module interface by the circuit module; and variable calculating means for obtaining a variable of the inter-module interface based on the result of the analysis;
Lifetime calculation means for obtaining a lifetime indicating a period from when data is first written to when it is finally read, with respect to a variable possessed by the inter-module interface;
In a subset obtained by integer division of the set having the variable as an element, the variable having the lifetime deviated by a specific time from the lifetime of the variable serving as the element for all the variables serving as the element, Reduced set calculation means for searching for a reduced variable set existing in another subset obtained by the division;
Circuit synthesis means for synthesizing the inter-module interface based on variable assignment using the degenerated variable set;
A CAD system characterized by comprising:
[0165]
(Additional remark 6) It is the synthetic | combination method which synthesize | combines the interface between modules which transfers data between the several circuit modules which operate | move in parallel,
Analyzing the writing and reading of data to the inter-module interface by the circuit module, and determining the variables of the inter-module interface based on the results of the analysis,
For a variable of the inter-module interface, obtain a lifetime indicating a period from when data is first written to when it is finally read,
In a subset obtained by integer division of the set having the variable as an element, the variable having the lifetime deviated by a specific time from the lifetime of the variable serving as the element for all the variables serving as the element, Search for a degenerate variable set existing in another subset obtained by the division,
Using the degenerated variable set, the inter-module interface is synthesized based on the variable assignment.
A synthesis method characterized by the above.
[0166]
(Supplementary Note 7) A program executed by a computer that synthesizes an inter-module interface for transferring data between a plurality of circuit modules operating in parallel.
Analyzing the writing and reading of data to the inter-module interface by the circuit module, and determining the variables of the inter-module interface based on the results of the analysis,
For a variable of the inter-module interface, obtain a lifetime indicating a period from when data is first written to when it is finally read,
In a subset obtained by dividing the set having the variables as elements into integers, for all of the variables that are elements, the variables having the lifetime deviated from the lifetime of the variables that are the elements by a specific time, Search for a degenerate variable set existing in another subset obtained by the division,
Using the degenerated variable set, the inter-module interface is synthesized based on the variable assignment.
A program for causing the computer to execute the above.
[0167]
(Supplementary Note 8) The memory is shared so that the lifetimes of the variables that are elements of the degenerated variable set do not overlap, and the allocation of the variables that are the elements of the degenerated variable set to the memory is obtained, The program according to appendix 7, which causes the computer to synthesize the inter-module interface based on assignment.
[0168]
(Supplementary Note 9) Based on the Left Edge method, the memory of a variable that is an element of the degenerated variable set is shared by a memory so that the lifetimes of the variables that are elements of the degenerated variable set do not overlap. 9. The program according to appendix 8, characterized in that an assignment to a user is obtained.
[0169]
(Additional remark 10) The program of Additional remark 8 or 9 which makes the said computer perform determining the magnitude | size of the memory which the said inter-module interface has based on the allocation to the said memory.
[0170]
(Additional remark 11) The said interface between modules calculates | requires the minimum delay time which is the minimum time from reading to writing, and performs the said interface between modules in consideration of this minimum delay time. The program according to any one of appendices 7 to 10.
[0171]
(Additional remark 12) The program of Additional remark 10 which makes the said computer perform determining the magnitude | size of the memory which the said inter-module interface has in consideration of the said minimum delay time.
[0172]
(Additional remark 13) The module as described in any one of additional remark 7 thru | or 12 which makes the said computer perform determining the magnitude | size of the memory which the said inter-module interface has based on the value calculated | required from the degenerated variable set. Automatic interface synthesizer.
[0173]
(Supplementary Note 14) The circuit module for writing data to the inter-module interface, the circuit module for reading data to the inter-module interface, and the time based on the respective synchronization signals for the inter-module interface When analyzing the writing and reading of data to and from the inter-module interface, the computer executes the conversion of the time of the circuit module that performs the writing and the time of the circuit module that performs the reading to the time of the inter-module interface 14. The program according to any one of appendices 7 to 13, wherein the program is executed.
[0174]
(Supplementary Note 15) When used by a computer that synthesizes an inter-module interface for transferring data between a plurality of circuit modules operating in parallel,
Analyzing the writing and reading of data to the inter-module interface by the circuit module, and determining the variables of the inter-module interface based on the results of the analysis,
For a variable of the inter-module interface, obtain a lifetime indicating a period from when data is first written to when it is finally read,
In a subset obtained by dividing the set having the variables as elements into integers, for all of the variables that are elements, the variables having the lifetime deviated from the lifetime of the variables that are the elements by a specific time, Search for a degenerate variable set existing in another subset obtained by the division,
Using the degenerated variable set, the inter-module interface is synthesized based on the variable assignment.
A portable storage medium readable by the computer storing a program for causing the computer to execute the above.
[0175]
【The invention's effect】
According to the present invention, it is possible to automatically synthesize an interface between modules that uses less memory than the conventional method.
[0176]
In addition, since this inter-module interface can be automatically synthesized, mistakes due to manual design can be prevented.
[Brief description of the drawings]
FIG. 1 is a diagram illustrating a configuration of a CAD system according to an embodiment.
FIG. 2 is a diagram illustrating processing performed by an interface module generation unit.
FIG. 3 is a diagram illustrating an example of a process handled by an interface module generation unit.
FIG. 4 is a diagram (part 1) illustrating an implementation example of an interface circuit module;
FIG. 5 is a diagram (part 2) illustrating an implementation example of an interface circuit module;
FIG. 6 is a diagram illustrating an example of a data structure of a read sequence / write sequence.
7A is a flowchart showing a process for converting a write sequence of process A into a read sequence of process C, and FIG. 7B is a diagram showing an example of the conversion.
FIG. 8A is a flowchart showing a process for converting a process B read sequence into a process C write sequence, and FIG.
FIG. 9: Minimum output delay tc odelayFIG.
FIG. 10 is a diagram illustrating the data structure of variable lifetimes begin (v [i]) and end (v [i]).
FIG. 11 is a flowchart showing a process for obtaining a lifetime.
FIG. 12 is a diagram showing a degenerated variable set.
FIG. 13 is a flowchart showing processing for obtaining a degenerated variable set Vr;
FIG. 14 is a flowchart showing details of determination processing in step S46.
FIG. 15 is a flowchart showing processing for solving a variable sharing problem.
FIG. 16 is a diagram illustrating an algorithm for performing RTL generation;
FIG. 17 is a diagram illustrating an example of an RTL code of a sub process that reads an input port;
FIG. 18 is a diagram illustrating an example of an RTL code of a sub-process that writes to an output port.
FIG. 19 is a diagram showing a simulated example of RTL code in which two sub-processes are collected.
FIG. 20 is an explanatory diagram (part 1) of an output delay;
FIG. 21 is an explanatory diagram (part 2) of the output delay;
22 is a diagram showing the analysis result of the lifetime of the array variable in Example 1. FIG.
FIG. 23 is a diagram illustrating lifetimes of array variables in Example 1;
24 is a diagram illustrating an example of a degenerate variable set obtained from the variable set in Example 1. FIG.
FIG. 25 is a diagram illustrating a situation indicating allocation of variables to memories in Example 2;
FIG. 26 is a diagram showing the analysis result of the lifetime of the array variable in Example 3.
FIG. 27 is a diagram illustrating lifetimes of array variables in Example 3.
FIG. 28 is a diagram illustrating variable memory allocation results in the third example;
FIG. 29 is a diagram showing a variable memory allocation state in the third example;
FIG. 30 is a system environment diagram of a computer according to the present embodiment.
FIG. 31 is a diagram illustrating an example of a medium.
FIG. 32 is a diagram illustrating an example of operation description in a circuit description language used in circuit design by high-level synthesis.
[Explanation of symbols]
1 CAD system
11 Input editor
12 Compiler section
13 Library storage
14 Interface module generator
15 Output section
21 CPU
22 Main memory
23 Auxiliary storage
23 I / O devices
25 Network connection device
26 Medium reader
27 Storage media
28 Bus
31 Information processing device
32 storage means
33 Network line
34 Body
35 memory
36 Portable storage media

Claims (6)

並列に動作する複数の回路モジュールの間のデータの受け渡しを行い、モジュール間インタフェースに入出力される変数を記憶するバッファメモリを有する前記モジュール間インタフェースを合成する合成装置であって、
前記回路モジュールによる前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析し、該解析の結果に基いて前記モジュール間インタフェースが持つ各変数viを求める変数算出手段と、
前記モジュール間インタフェースが持つ変数viに対して、最初にデータが書き込まれてから最後に読み出されるまでの期間を示すライフタイムを求めるライフタイム算出手段と、
前記各変数viが最初に書き込まれる時刻をbegin(i)、最後に読み書きされる時刻をend(i)、順序つきリスト構造のデータLの先頭からn個の要素を集合として返す関数をHead(n,L)としたとき、前記変数算出手段が求めた変数集合Vから、各変数vi∈Vについてbegin(vi)の昇順で並んだ順序つきリストV ord を求め、前記変数集合Vの要素数|V|の全公約数(≠1)の中で、
Figure 0004083491
としたときに、∀p∈P j ∃q∈P j+1 such that begin(p)+m=begin(q)且つend(p)+m=end(q)且つend(p)≦begin(q)が成り立つ最小の公約数mを求め、Head(m,V ord を前記変数集合Vの縮退させた変数集合とする縮退集合算出手段と、
前記縮退された変数集合の要素である変数の前記ライフタイムが重ならないように前記バッファメモリに共有させ、前記縮退された変数集合の要素である変数の前記バッファメモリへの割り当てを求める変数割り当て手段と、
前記割り当てに基いて、前記縮退された変数の集合の要素である変数のうち、互いにライフタイムが重ならない複数の変数に対して前記バッファメモリの同一アドレスを割り当てて前記モジュール間インタフェースを合成する回路合成手段と、
を備えることを特徴とするモジュール間インタフェースの自動合成装置。
There line passing of data between the plurality of circuit modules operating in parallel, a synthesizer for synthesizing the inter-module interface having a buffer memory for storing the variables input to and output from the inter-module interface,
Variable calculation means for analyzing writing and reading of data to and from the inter-module interface by the circuit module, and obtaining each variable vi of the inter-module interface based on a result of the analysis;
Lifetime calculation means for obtaining a lifetime indicating a period from when data is first written to when it is finally read, for a variable vi possessed by the inter-module interface;
A function that returns a set of n elements from the beginning of the data L of the ordered list structure, Head ( n, L), the ordered list V ord arranged in ascending order of begin (vi) for each variable viεV from the variable set V obtained by the variable calculation means. In the total common divisor (≠ 1) of the number of elements | V | of the variable set V,
Figure 0004083491
∀pεP j ∃qεP j + 1, that thatbegin (p) + m = begin (q) and end (p) + m = end (q) and end (p) ≦ begin (q) A degenerate set calculation means for obtaining a minimum common divisor m satisfying and using Head (m, V ord ) as a degenerate variable set of the variable set V ;
Variable allocation means for sharing the buffer memory so that the lifetimes of variables that are elements of the degenerated variable set do not overlap, and for allocating variables that are elements of the degenerated variable set to the buffer memory When,
A circuit for synthesizing the inter-module interface by allocating the same address of the buffer memory to a plurality of variables whose lifetimes do not overlap among variables that are elements of the set of degenerated variables based on the allocation Combining means;
A device for automatically synthesizing an interface between modules.
回路記述言語による記載を解析し、回路の仕様を出力するコンパイラ手段と、
前記コンパイラ手段から、並列に動作する複数の回路モジュールの間のデータの受け渡しを行うモジュール間インタフェースに入出力される変数を記憶するバッファメモリを有する前記モジュール間インタフェースを合成を依頼されると、該モジュール間インタフェースを合成するインタフェースモジュール生成手段とを備え、
前記インタフェースモジュール生成手段は、
前記回路モジュールによる前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析し、該解析の結果に基いて前記モジュール間インタフェースが持つ各変数viを求める変数算出手段と、
前記モジュール間インタフェースが持つ変数viに対して、最初にデータが書き込まれてから最後に読み出されるまでの期間を示すライフタイムを求めるライフタイム算出手段と、
前記各変数viが最初に書き込まれる時刻をbegin(i)、最後に読み書きされる時刻をend(i)、順序つきリスト構造のデータLの先頭からn個の要素を集合として 返す関数をHead(n,L)としたとき、前記変数算出手段が求めた変数集合Vから、各変数vi∈Vについてbegin(vi)の昇順で並んだ順序つきリストV ord を求め、前記変数集合Vの要素数|V|の全公約数(≠1)の中で、
Figure 0004083491
としたときに、∀p∈P j ∃q∈P j+1 such that begin(p)+m=begin(q)且つend(p)+m=end(q)且つend(p)≦begin(q)が成り立つ最小の公約数mを求め、Head(m,V ord を前記変数集合Vの縮退させた変数集合とする縮退集合算出手段と、
前記縮退された変数集合の要素である変数の前記ライフタイムが重ならないように前記バッファメモリに共有させ、前記縮退された変数集合の要素である変数の前記バッファメモリへの割り当てを求める変数割り当て手段と、
前記割り当てに基いて、前記縮退された変数の集合の要素である変数のうち、互いにライフタイムが重ならない複数の変数に対して前記バッファメモリの同一アドレスを割り当てて前記モジュール間インタフェースを合成する回路合成手段と、
を有することを特徴とするCADシステム。
A compiler means for analyzing a description in a circuit description language and outputting a circuit specification;
When requested by the compiler means to synthesize the inter-module interface having a buffer memory for storing variables input / output to / from the inter-module interface that transfers data between a plurality of circuit modules operating in parallel, Interface module generating means for synthesizing the interface between modules,
The interface module generation means includes
Variable calculation means for analyzing writing and reading of data to and from the inter-module interface by the circuit module, and obtaining each variable vi of the inter-module interface based on a result of the analysis;
Lifetime calculation means for obtaining a lifetime indicating a period from when data is first written to when it is finally read, for a variable vi possessed by the inter-module interface;
A function that returns a set of n elements from the beginning of the data L of the ordered list structure , Head ( n, L), the ordered list V ord arranged in ascending order of begin (vi) for each variable viεV from the variable set V obtained by the variable calculation means. In the total common divisor (≠ 1) of the number of elements | V | of the variable set V,
Figure 0004083491
∀p P j ∃q P j + 1 such that begin (p) + m = begin (q) and end (p) + m = end (q) and end (p) ≦ begin (q) A degenerate set calculation means for obtaining a minimum common divisor m satisfying and using Head (m, V ord ) as a degenerate variable set of the variable set V ;
Variable allocation means for sharing the buffer memory so that the lifetimes of variables that are elements of the degenerated variable set do not overlap, and for allocating variables that are elements of the degenerated variable set to the buffer memory When,
A circuit for synthesizing the inter-module interface by allocating the same address of the buffer memory to a plurality of variables whose lifetimes do not overlap among variables that are elements of the set of degenerated variables based on the allocation Combining means;
A CAD system characterized by comprising:
並列に動作する複数の回路モジュールの間のデータの受け渡しを行うモジュール間インタフェースに入出力される変数を記憶するバッファメモリを有する前記モジュール間インタフェースを合成するコンピュータによって実行される合成方法であって、
前記回路モジュールによる前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析し、該解析の結果に基いて前記モジュール間インタフェースが持つ各変数viを求め、
前記モジュール間インタフェースが持つ変数viに対して、最初にデータが書き込まれてから最後に読み出されるまでの期間を示すライフタイムを求め、
各変数viが最初に書き込まれる時刻をbegin(i)、最後に読み書きされる時刻をend(i)、順序つきリスト構造のデータLの先頭からn個の要素を集合として返す関数をHead(n,L)としたとき、前記モジュール間インタフェースが持つ変数集合Vから、各変数vi∈Vについてbegin(vi)の昇順で並んだ順序つきリストV ord を求め、前記変数集合Vの要素数|V|の全公約数(≠1)の中で、
Figure 0004083491
としたときに、∀p∈P j ∃q∈P j+1 such that begin(p)+m=begin(q)且つend(p)+m=end(q)且つend(p)≦begin(q)が成り立つ最小の公約数mを求め、Head(m,V ord を前記変数集合Vの縮退させた変数集合とし、
前記縮退された変数集合の要素である変数の前記ライフタイムが重ならないようにバッファメモリに共有させ、前記縮退された変数集合の要素である変数の前記バッファメモリへの割り当てを求め、
前記割り当てに基いて、前記縮退された変数の集合の要素である変数のうち、互いにライフタイムが重ならない複数の変数に対して前記バッファメモリの同一アドレスを割り当てて前記モジュール間インタフェースを合成する
ことを特徴とする合成方法。
A synthesis method executed by a computer for synthesizing the inter-module interface having a buffer memory for storing a variable input / output to / from the inter-module interface that transfers data between a plurality of circuit modules operating in parallel,
Analyzing the writing and reading of data to the inter-module interface by the circuit module, and determining each variable vi of the inter-module interface based on the result of the analysis;
For a variable vi possessed by the inter-module interface, a lifetime indicating a period from when data is first written to when it is finally read is obtained.
A function that returns the first time of each variable vi as begin (i), the last time of reading and writing as end (i), and a function that returns n elements from the head of the data L of the ordered list structure as Head (n , L), the ordered list V ord arranged in ascending order of begin (vi) for each variable viεV from the variable set V possessed by the inter-module interface. In the total common divisor (≠ 1) of the number of elements | V | of the variable set V,
Figure 0004083491
∀p P j ∃q P j + 1 such that begin (p) + m = begin (q) and end (p) + m = end (q) and end (p) ≦ begin (q) Find the smallest common divisor m that holds, and let Head (m, V ord ) be a degenerate variable set of the variable set V,
The buffer memory is shared so that the lifetimes of variables that are elements of the degenerated variable set do not overlap, and the allocation of variables that are elements of the degenerated variable set to the buffer memory is obtained,
Based on the allocation, the same address of the buffer memory is allocated to a plurality of variables whose lifetimes do not overlap among variables that are elements of the degenerated variable set, and the inter-module interface is synthesized. A synthesis method characterized by
並列に動作する複数の回路モジュールの間のデータの受け渡しを行うモジュール間インタフェースに入出力される変数を記憶するバッファメモリを有する前記モジュール間インタフェースを合成するコンピュータによって実行されるプログラムであって
前記回路モジュールによる前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析し、該解析の結果に基いて前記モジュール間インタフェースが持つ各変数viを求め、
前記モジュール間インタフェースが持つ変数viに対して、最初にデータが書き込まれてから最後に読み出されるまでの期間を示すライフタイムを求め、
各変数viが最初に書き込まれる時刻をbegin(i)、最後に読み書きされる時刻をend(i)、順序つきリスト構造のデータLの先頭からn個の要素を集合として返す関数をHead(n,L)としたとき、前記モジュール間インタフェースが持つ変数集合Vから、各変数vi∈Vについてbegin(vi)の昇順で並んだ順序つきリストV ord を求め、前記変数集合Vの要素数|V|の全公約数(≠1)の中で、
Figure 0004083491
としたときに、∀p∈P j ∃q∈P j+1 such that begin(p)+m=begin(q)且つend(p)+m=end(q)且つend(p)≦begin(q)が成り立つ最小の公約数mを求め、Head(m,V ord を前記変数集合Vの縮退させた変数集合とし、
前記縮退された変数集合の要素である変数の前記ライフタイムが重ならないように前記バッファメモリに共有させ、前記縮退された変数集合の要素である変数の前記バッファメモリへの割り当てを求め、
前記割り当てに基いて、前記縮退された変数の集合の要素である変数のうち、互いにライフタイムが重ならない複数の変数に対して前記バッファメモリの同一アドレスを割り当てて前記モジュール間インタフェースを合成する
ことを前記コンピュータに実行させるプログラム。
A program executed by a computer for synthesizing the inter-module interface having a buffer memory for storing a variable input / output to / from the inter-module interface that exchanges data between a plurality of circuit modules operating in parallel. Analyzing writing and reading of data to the inter-module interface by the module, and obtaining each variable vi possessed by the inter-module interface based on the result of the analysis,
For a variable vi possessed by the inter-module interface, a lifetime indicating a period from when data is first written to when it is finally read is obtained.
A function that returns the first time of each variable vi as begin (i), the last time of reading and writing as end (i), and a function that returns n elements from the head of the data L of the ordered list structure as Head (n , L), the ordered list V ord arranged in ascending order of begin (vi) for each variable viεV from the variable set V possessed by the inter-module interface. In the total common divisor (≠ 1) of the number of elements | V | of the variable set V,
Figure 0004083491
∀p P j ∃q P j + 1 such that begin (p) + m = begin (q) and end (p) + m = end (q) and end (p) ≦ begin (q) Find the smallest common divisor m that holds, and let Head (m, V ord ) be a degenerate variable set of the variable set V,
The buffer memory is shared so that the lifetimes of variables that are elements of the degenerated variable set do not overlap, and the assignment of variables that are elements of the degenerated variable set to the buffer memory is obtained,
Based on the allocation, the same address of the buffer memory is allocated to a plurality of variables whose lifetimes do not overlap among variables that are elements of the degenerated variable set, and the inter-module interface is synthesized. A program for causing the computer to execute.
前記モジュール間インタフェースがデータを読み込んでから書き込むまでの最小の時間である最小遅延時間を求め、該最小遅延時間を考慮して、前記モジュール間インタフェースを合成することを前記コンピュータに実行させる請求項4に記載のプログラム。Determining the minimum of the minimum delay time is the time of the inter-module interface to write the read data, in consideration of said minimum delay time, claim to perform the synthesis of the inter-module interface to the computer 4 the program according to. 前記モジュール間インタフェースへのデータの書き込みを行う前記回路モジュール、前記モジュール間インタフェースへのデータの読み出しを行う前記回路モジュール及び前記モジュール間インタフェースに対してそれぞれの同期信号に基いた時刻を設定し、前記モジュール間インタフェースへのデータの書き込み及び読み出しを解析する際、前記書き込みを行う回路モジュール及び読み出しを行う前記回路モジュールの時刻を前記モジュール間インタフェースの時刻に変換することを前記コンピュータに実行させることを特徴とする請求項4または5に記載のプログラム。The circuit module for writing data to the inter-module interface, the circuit module for reading data to the inter-module interface, and a time based on the respective synchronization signals are set for the inter-module interface, When analyzing data writing to and reading from an inter-module interface, the computer is caused to convert the time of the circuit module that performs the writing and the time of the circuit module that performs the reading into the time of the inter-module interface. The program according to claim 4 or 5 .
JP2002211812A 2002-07-19 2002-07-19 Module-to-module interface automatic synthesis apparatus, synthesis method, program, and portable storage medium Expired - Fee Related JP4083491B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002211812A JP4083491B2 (en) 2002-07-19 2002-07-19 Module-to-module interface automatic synthesis apparatus, synthesis method, program, and portable storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002211812A JP4083491B2 (en) 2002-07-19 2002-07-19 Module-to-module interface automatic synthesis apparatus, synthesis method, program, and portable storage medium

Publications (2)

Publication Number Publication Date
JP2004054641A JP2004054641A (en) 2004-02-19
JP4083491B2 true JP4083491B2 (en) 2008-04-30

Family

ID=31934909

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002211812A Expired - Fee Related JP4083491B2 (en) 2002-07-19 2002-07-19 Module-to-module interface automatic synthesis apparatus, synthesis method, program, and portable storage medium

Country Status (1)

Country Link
JP (1) JP4083491B2 (en)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5312151B2 (en) * 2009-03-31 2013-10-09 三菱電機株式会社 Semiconductor design support apparatus, high-level synthesis method, and semiconductor design support program
JP5293520B2 (en) * 2009-09-14 2013-09-18 株式会社リコー Circuit block diagram creation apparatus, circuit block diagram creation method, and semiconductor integrated circuit manufacturing method
JP5979966B2 (en) 2012-05-10 2016-08-31 三菱電機株式会社 Circuit design support apparatus, circuit design support method, and program
JP5979965B2 (en) * 2012-05-10 2016-08-31 三菱電機株式会社 Circuit design support apparatus, circuit design support method, and program
JP6091140B2 (en) * 2012-05-11 2017-03-08 三菱電機株式会社 Information processing apparatus, information processing method, and program
US9449131B2 (en) * 2014-06-02 2016-09-20 Xilinx, Inc. Extracting system architecture in high level synthesis
JP6806096B2 (en) * 2016-02-01 2021-01-06 日本電気株式会社 High-level synthesizer, high-level synthesis method and program
JP6761182B2 (en) * 2017-03-14 2020-09-23 富士通株式会社 Information processing equipment, information processing methods and programs

Also Published As

Publication number Publication date
JP2004054641A (en) 2004-02-19

Similar Documents

Publication Publication Date Title
US20080172646A1 (en) Array transformation in a behavioral synthesis tool
KR100296183B1 (en) Design method of semiconductor integrated circuit, semiconductor integrated circuit and operation circuit
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
US7251803B2 (en) Memory re-implementation for field programmable gate arrays
Schmit et al. Synthesis of application-specific memory designs
US6438731B1 (en) Integrated circuit models having associated timing exception information therewith for use in circuit design optimizations
EP0433066A2 (en) Common symbol library architecture
JP2001519958A (en) Method and system for generating optimal physical embodiments from high-level descriptions of electronic designs
US20130047128A1 (en) Method and Apparatus for Using Entropy in An Colony Optimization Circuit Design from High Level Synthesis
JP2002123563A (en) Compiling method, composing device, and recording medium
US8296712B2 (en) Method and apparatus for improving the interconnection and multiplexing cost of circuit design from high level synthesis using ant colony optimization
WO2009014731A2 (en) Architectural physical synthesis
US20070028197A1 (en) Method and apparatus for auto-generation of shift register file for high-level synthesis compiler
JP6935356B2 (en) Semiconductor devices, information processing systems, and information processing methods
JP4083491B2 (en) Module-to-module interface automatic synthesis apparatus, synthesis method, program, and portable storage medium
US20020188923A1 (en) High-level synthesis apparatus, high-level synthesis method, method for producing logic circuit using the high-level synthesis method, and recording medium
KR20030057397A (en) Method for designing a system lsi
US20030041128A1 (en) Resource interconnection patterns in a customized memory organization context
US20120084067A1 (en) Method and apparatus for synthesizing pipelined input/output in a circuit design from high level synthesis
US20010013113A1 (en) Technology mapping method and storage medium
EP2622549A1 (en) Method and apparatus for using entropy in ant colony optimization circuit design from high level systhesis
US11106761B2 (en) Optimization problem arithmetic method and optimization problem arithmetic apparatus
US20080201673A1 (en) Semiconductor design support device, semiconductor design support method, and manufacturing method for semiconductor integrated circuit
US20120226890A1 (en) Accelerator and data processing method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050112

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20071019

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20071030

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071227

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: 20080212

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080213

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4083491

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110222

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110222

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120222

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130222

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140222

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees