(57)【特許請求の範囲】
【請求項１】
動作記述からレジスタトランスファレベルの論理回路を生成する高位合成装置であって、
ハードウェアの構成に関する情報が含まれず、処理の動作のみが記述された動作記述を解析して、演算、外部入出力およびメモリアクセス実行順序の依存関係を表現するコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段と、
該コントロールデータフローグラフ生成手段によって生成されたコントロールデータフローグラフの各節点を、スレッドを構成する有限状態遷移機械の状態に対応したステップに割り当てるスケジューリング手段と、
該スケジューリング手段によってスケジューリングされたコントロールデータフローグラフの実行に必要な演算器、レジスタおよび入出力ピンを生成し、コントロールデータフローグラフの演算を該演算器に、ステップ境界を横切るデータ依存枝を該レジスタに、外部入出力およびメモリアクセスを該入出力ピンにそれぞれ割り当てるアロケーション手段と、
コントロールデータフローグラフのデータ依存枝に対応したデータパスを生成し、必要に応じてセレクタを生成するデータパス生成手段と、
前記アロケーション手段および前記データパス生成手段により生成されたレジスタおよびセレクタを制御する制御論理を生成する制御論理生成手段とを備え、
前記スケジューリング手段により、並列に動作する他のスレッドとメモリを共有しているスレッドにおける前記有限状態遷移機械のメモリアクセス要求をコントロールデータフローグラフの節点で表現してスケジューリングを行い、前記制御論理生成手段により、前記メモリアクセス要求の節点が割り当てられたステップに対応する前記有限状態遷移機械の状態として、共有メモリインターフェイスに対してアクセス要求信号を出力し、該共有メモリインターフェイスからのアクセス要求受付信号がアクティブになるまで該アクセス要求信号を出力する状態に留まって次の状態に遷移しない状態遷移論理を有する有限状態遷移機械を生成してスレッドを合成することを特徴とする高位合成装置。
【請求項２】
請求項１に記載の高位合成装置により、動作記述からレジスタトランスファレベルの論理回路を生成する高位合成方法であって、
前記コントロールデータフローグラフ生成手段によって、ハードウェアの構成に関する情報が含まれず、処理の動作のみが記述された動作記述を解析して、演算、外部入出力およびメモリアクセス実行順序の依存関係を表現するコントロールデータフローグラフを生成するコントロールデータフローグラフ生成工程と、
前記スケジューリング手段によって、該コントロールデータフローグラフの各節点を、スレッドを構成する有限状態遷移機械の状態に対応したステップに割り当てるスケジューリング工程と、
前記アロケーション手段によって、該スケジューリングされたコントロールデータフローグラフの実行に必要な演算器、レジスタおよび入出力ピンを生成し、コントロールデータフローグラフの演算を該演算器に、ステップ境界を横切るデータ依存枝を該レジスタに、外部入出力およびメモリアクセスを該入出力ピンにそれぞれ割り当てるアロケーション工程と、
前記データパス生成手段によって、コントロールデータフローグラフのデータ依存枝に対応したデータパスを生成し、必要に応じてセレクタを生成するデータパス生成工程と、
前記制御論理生成手段によって、前記アロケーション工程および前記データパス生成工程により生成されたレジスタおよびセレクタを制御する制御論理を生成する制御論理生成工程とを含み、
前記スケジューリング工程において、並列に動作する他のスレッドとメモリを共有しているスレッドにおける前記有限状態遷移機械のメモリアクセス要求をコントロールデータフローグラフの節点で表現してスケジューリングを行い、前記制御論理生成工程において、前記メモリアクセス要求の節点が割り当てられたステップに対応する前記有限状態遷移機械の状態として、共有メモリインターフェイスに対してアクセス要求信号を出力し、該共有メモリインターフェイスからのアクセス要求受付信号がアクティブになるまで該アクセス要求信号を出力する状態に留まって次の状態に遷移しない状態遷移論理を有する有限状態遷移機械を生成してスレッドを合成することを特徴とする高位合成方法。
【請求項３】
前記高位合成装置は、前記スレッド内に、前記共有メモリからリードされたデータが一時記憶されるリードデータ記憶回路と、前記共有メモリからリードされた前記データを前記アクセス要求受付信号がアクティブになってから該リードデータ記憶回路に書き込むためのタイミングを発生するリードタイミング発生回路と、前記共有メモリからのデータリードが実行されると、該リードデータ記憶回路の前記リードデータの読み出しポインタを更新するための信号を発生させるリード終了発生回路とを有するリードデータ記憶選択回路を生成するリードデータ記憶選択回路生成手段を有し、
前記制御論理生成工程に次いで、前記リードデータ記憶選択回路生成手段によって前記リードデータ記憶選択回路を生成する工程を実行することを特徴とする請求項２に記載の高位合成方法。
【請求項４】
前記リードデータ記憶選択回路を生成する工程において生成される前記リードデータ記憶選択回路は、前記スレッドを構成する前記有限状態遷移機械が連続して状態遷移したか否かを判定する連続遷移判定回路と、該連続遷移判定回路の判定結果に基づいて、前記共有メモリからリードされたデータを前記有限状態遷移機械を有するスレッドにて直接用いるか、または前記リードデータ記憶回路に記憶されたデータを該スレッドにて用いるかを選択するリードデータ選択回路とを有する請求項３に記載の高位合成方法。
【請求項５】
前記リードデータ記憶回路は、キューを含む請求項３に記載の高位合成方法。
【請求項６】
前記リードタイミング発生回路は、シフトレジスタを含む請求項３に記載の高位合成方法。
【請求項７】
前記連続遷移判定回路は、シフトレジスタを含む請求項４に記載の高位合成方法。
【請求項８】
前記高位合成装置は、複数のスレッドからリード要求信号が入力されたときに、該リード要求信号がアクティブであるスレッドのうち、最も優先度の高いスレッドからの要求を受け付けてそのスレッドに対する要求受付信号をアクティブにする共有メモリインターフェイスを生成する共有メモリインターフェイス生成手段と、該共有メモリインターフェイスを前記合成されたスレッドと接続する接続手段とを有し、
前記共有メモリインターフェイス生成手段によって前記共有メモリインターフェイスを生成する工程と、次いで、前記接続手段によって、該共有メモリインターフェイスと前記スレッドとを接続する工程とをさらに含む、請求項２に記載の高位合成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、動作記述からレジスタトランスファレベル（ＲＴＬ）の論理回路を自動的に生成する、高位合成方法とその高位合成方法を用いて生成されたスレッドおよび回路生成方法に関し、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ Ｓｐｅｃｉｆｉｃ Ｉｎｔｅｇｒａｔｅｄ Ｃｉｒｃｕｉｔ：特定用途向けＩＣ）の設計等、短期間での設計が要求される場合に、特に有効に用いられる技術である。
【０００２】
【従来の技術】
高位合成方法は、ハードウェアの構成に関する情報が含まれず、処理の動作のみが記述された動作記述から、レジスタ、演算器等のハードウェア構成と動作周期毎のレジスタ間のデータの流れと処理とが含まれるＲＴＬの論理回路を自動的に生成する方法である。この高位合成方法は、例えば特開平５−１０１１４１号公報に開示されている。以下に、従来の高位合成方法のフローについて、その概要を説明する。
【０００３】
▲１▼動作記述からコントロールデータフローグラフ（ＣＤＦＧ）への変換
高位合成においては、まず、動作記述が解析されて、演算、外部入出力およびメモリアクセス実行順序の依存関係を表現するＣＤＦＧと称されるモデルに変換される。
【０００４】
図１に動作記述の例を示す。この動作記述では、１０１において変数ａにアドレス（ａｄｒ）に対応するメモリの内容が代入され、１０２において変数ｂにアドレス（ａｄｒ＋１）に対応するメモリの内容が代入され、１０３において変数ｃにアドレス（ａｄｒ−１）に対応するメモリの内容が代入されている。そして、１０４において変数ｄにａ＋ｂ＋ｃの値が代入されている。
【０００５】
図２に、図１の動作記述から変換されたＣＤＦＧの例を示す。このＣＤＧＦにおいて、節点１０５は回路に対する外部入力であり、節点１０６は回路からの外部出力である。また、節点１０７〜１０９はメモリへのリード要求であり、節点１１０〜１１２はメモリからのリードデータである。また、節点１３３はインクリメント、節点１３４はデクリメントであり、節点１３５および１３６は加算である。
【０００６】
図２に一点鎖線で示す枝１１３および１１４は制御依存枝であり、枝１１３は節点１０７と節点１０８とを接続しており、枝１１４は節点１０８と節点１０９とを接続している。この制御依存枝の接続先の節点は、この枝の接続元の節点よりも遅いステップにスケジューリングする必要がある。例えば、後述するスケジューリング工程において、節点１０８は節点１０７よりも遅いステップにスケジューリングされる。パイプラインアクセス可能なメモリを用いる場合には、リード要求１０７〜１０９が動作記述と同じ順序で実行され、かつ、異なるステップにスケジューリングされていればよい。ここで、パイプラインアクセス可能なメモリとは、毎クロック、アクセスを要求することができるメモリのことを表す。図１の動作記述では、メモリリードを３回行っており、それらが記述されている順に、異なるステップで実行されるように、制御依存枝１１３および１１４が設けられる。
【０００７】
図２に点線で示す枝１１７〜１１９は制御依存枝であり、枝１１７は節点１０７と節点１１０とを接続しており、枝１１８は節点１０８と節点１１１とを接続しており、枝１１９は節点１０９と節点１１２とを接続している。この制御依存枝の接続先の節点は、この枝の接続元の節点よりもｎステップだけ遅いステップにスケジューリングする必要がある。ここで、ｎはこの枝に対応付けられた相対ステップ数１２０〜１２２である。例えば、後述するスケジューリング工程において、節点１１０は節点１０７よりも２ステップだけ遅いステップにスケジューリングされる。図３に示すように、リード要求信号ＲＲＥＱの立ち上がり時点から２クロック後に、リードデータＲＤＡＴＡが有効になるメモリを用いる場合には、相対ステップ数２の制御依存枝１１７〜１１９が設けられる。本明細書においては、リード要求信号の立ち上がり時点からｎクロック後に、リードデータが有効になり、かつ、パイプラインアクセス可能なメモリを、レイテンシがｎのパイプラインメモリと称する。
【０００８】
図２に実線で示す枝１２３〜１３２はデータ依存枝である。枝１２３はメモリへのリード要求１０７と外部から入力されるメモリのアドレス１０５を接続している。また、枝１２６はメモリへのリード要求１０８とインクリメント１３３を接続しており、枝１２４はインクリメント１３３とメモリのアドレス１０５とを接続している。また、枝１２７はメモリへのリード要求１０９とデクリメント１３４とを接続しており、枝１２５はデクリメント１３４とメモリのアドレス１０５とを接続している。枝１２８および１２９は、それぞれメモリからのリードデータ１１０および１１１と加算１３５とを接続しており、枝１３０および１３１は、それぞれ加算１３５およびメモリからのリードデータ１１２と加算１３６とを接続している。さらに、枝１３２は加算１３６と外部出力１０６とを接続しており、外部出力１０６から処理結果が外部に出力される。
【０００９】
▲２▼スケジューリング
スケジューリング工程では、ＣＤＦＧの各節点が、ステップと称される、コントローラ（有限状態遷移機械）の状態に対応した時間に割り当てられる。
【００１０】
図４に、図２のＣＤＦＧをスケジューリングした結果の例を示す。この例では、ステップ０〜ステップ４までの５つのステップが各節点に割り当てられている。異なるステップにスケジューリングされた演算間では、１つの演算器を共有することができる。例えば、図４では、加算１３５と加算１３６とは異なるステップにスケジューリングされているので、１つの加算器を共有することができる。スケジューリングにおいては、このようにハードウェアの数をできるだけ少なくしてコストを低減できるように、各節点がステップに割り当てられる。
【００１１】
▲３▼アロケーション
アロケーション工程では、スケジューリングされたＣＤＦＧの実行に必要な演算器、レジスタおよび入出力ピンが生成され、ＣＤＦＧの演算が演算器に、ステップ境界を横切るデータ依存枝がレジスタに、外部入出力およびメモリアクセスが入出力ピンにそれぞれ割り当てられる。
【００１２】
図５に、アロケーションの例を示す。この例では、インクリメンタ１３７、デクリメンタ１３８および加算器１３９が生成されて、図５に点線で示すように、インクリメント１３３がインクリメンタ１３７に割り当てられ、デクリメント１３４がデクリメンタ１３８に割り当てられ、加算１３５および１３６が加算器１３９に割り当てられる。
【００１３】
また、レジスタ１４０が生成されて、図５に点線で示すように、、ステップ境界を横切るデータ依存枝１２４、１２５、１２８および１３０がレジスタ１４０に割り当てられる。
【００１４】
さらに、入力ピン１４１および１４２、出力ピン１４３および１４４が生成されて、図５に点線で示すように、外部入力１０５が入力ピン１４１に割り当てられ、外部出力１０６が出力ピン１４４に割り当てられ、リード要求１０７〜１０９が出力ピン１４３に割り当てられ、リードデータ１１０〜１１２が入力ピン１４２に割り当てられる。
【００１５】
▲４▼データパスの生成
データパス生成工程では、ＣＤＦＧのデータ依存枝に対応したデータパスが生成され、必要に応じてセレクタが生成される。
【００１６】
図６に、データパス生成の例を示す。この例では、図６に点線で示すように、外部入力１０５からリード要求１０７へのデータ依存枝１２３に対応して、外部入力１０５が割り当てられた入力ピン１４１からリード要求１０７が割り当てられた出力ピン１４３へのパス１４５および１４６が生成される。
【００１７】
また、図６に点線で示すように、外部入力１０５からインクリメント１３３へのデータ依存枝１２４に対応して、外部入力１０５が割り当てられた入力ピン１４１からデータ依存枝１２４が割り当てられたレジスタ１４０へのパス１４７および１４８と、データ依存枝１２４が割り当てられたレジスタ１４０からインクリメント１３３が割り当てられたインクリメンタへのパス１４９とが生成される。
【００１８】
さらに、図６に点線で示すように、メモリリード１１０から加算１３５へのデータ依存枝１２８に対応して、メモリリード１１０が割り当てられた入力ピン１４２からデータ依存枝１２８が割り当てられたレジスタ１４０へのパス１５０および１４８と、データ依存枝１２８が割り当てられたレジスタ１４０から加算１３５が割り当てられた加算器１３９へのパス１５１が生成される。
【００１９】
同様にして、外部入力１０５からデクリメント１３４へのデータ依存枝に対応するデータパス、インクリメント１３３からリード要求１０８へのデータ依存枝に対応するデータパス、デクリメント１３４からリード要求１０９へのデータ依存枝に対応するデータパス、メモリリード１１１から加算１３５へのデータ依存枝に対応するデータパス、メモリリード１１２から加算１３６へのデータ依存枝に対応するデータパス、加算１３６から外部出力１０６へのデータ依存枝に対応するデータパスがそれぞれ生成される。
【００２０】
なお、この例のように、演算器、レジスタ、出力ピン等が共有されている場合には、セレクタ１５２および１５３が生成されて演算器、レジスタ、出力ピン等に入力されるデータが選択される。
【００２１】
▲５▼制御論理の生成
制御論理生成工程では、アロケーション工程およびデータパス生成工程により生成されたレジスタ、セレクタ等を制御する制御論理が生成される。
【００２２】
図７に、制御論理生成の例を示す。
【００２３】
（１）制御論理用入出力ピンの生成
まず、制御論理用の入出力ピンとして、クロックが入力される入力ピン１５４およびメモリリード要求が出力される出力ピン１５５が生成される。なお、リード要求が出力されるときには、上記出力ピン１４３からメモリのアドレスが出力され、この出力ピン１５５からリード要求が出力される。
【００２４】
（２）有限状態遷移機械の生成
次に、有限状態遷移機械１５６が生成される。ここでは、まず、スケジューリング結果の総ステップ数と同じ数の状態４０３〜４０７（Ｓ０〜Ｓ４）が生成される。次に、各ステップに対応する状態から次のステップに対応する状態への遷移条件を真として、Ｓ０から順に状態が毎クロック遷移するように、状態遷移論理４０８〜４１１が生成される。その後、各状態に対応するときにアクティブとなり、他の状態に対応するときにはインアクティブとなる状態出力論理および状態出力ピン１５８〜１６２が生成される。
【００２５】
（３）メモリリード要求信号論理の生成
上記スケジューリングの結果から分かるように、ステップ０に対応する状態Ｓ０、ステップ１に対応する状態Ｓ１、ステップ２に対応する状態Ｓ２では、メモリリードが要求される。このため、状態遷移機械１５６の状態出力ピン１５８、１５９および１６０からそれぞれ出力される出力Ｓ０、Ｓ１およびＳ２のいずれかがアクティブであるときに、出力ピン１５５からの出力がアクティブになるように論理１６３が生成される。
【００２６】
（４）セレクタ選択論理の生成
上記スケジューリング、アロケーションおよびデータパス生成の結果から分かるように、ステップ０では入力ピン１４１から出力ピン１４３へのパス１４５および１４６が使用される。このため、状態遷移機械１５６の状態出力ピン１５８から出力される出力Ｓ０がアクティブであるときに、パス１４５を介して入力ピン１４１に接続されたセレクタ１５３の入力１６４が選択されるように論理１６５が生成される。
【００２７】
同様にして、状態遷移機械１５６の状態出力ピン１５９および１６０から出力される出力Ｓ１およびＳ２がそれぞれアクティブであるときに、インクリメンタに接続された入力およびデクリメンタに接続された入力がそれぞれ選択されるように論理１６５が生成される。セレクタ１５２についても同様に、状態遷移機械１５６の状態出力ピン１５８、１６０および１６１から出力される出力Ｓ０、Ｓ２およびＳ３がそれぞれアクティブであるときに、パス１４５を介して入力ピン１４１に接続された入力、パス１５０を介して入力ピン１４２に接続された入力および加算器１３９に接続された入力がそれぞれ選択されるように論理が生成される。また、レジスタ１４０に接続されている論理（ＯＲ）については、出力Ｓ０〜Ｓ３がアクティブであるときにレジスタがアクティブになるように論理が生成されている。
【００２８】
以上のようにして、動作記述からＲＴＬの論理回路が生成される。
【００２９】
【発明が解決しようとする課題】
以下に、並列に動作する複数のスレッドがメモリを共有している回路構成について考える。ここで、スレッドとは、独立した有限状態遷移機械を有する回路である。この回路構成において、上述した従来の高位合成方法により各スレッドを個別に生成すると、複数のスレッドから同時に共有メモリへのアクセスが行われたときに、アクセスの競合が起こり、正しいメモリアクセスを行うことができない場合がある。
【００３０】
本発明は、このような従来技術の課題を解決するためになされたものであり、並列に動作する複数のスレッドから共有メモリに対して同時にアクセスが行われたときに、スレッド間でアクセスの競合が起こらないようにすることができる高位合成方法とそれを用いて生成された回路およびそのスレッドを備えた回路を提供することを目的とする。
【００３１】
【課題を解決するための手段】
本発明の高位合成装置は、動作記述からレジスタトランスファレベルの論理回路を生成する高位合成装置であって、ハードウェアの構成に関する情報が含まれず、処理の動作のみが記述された動作記述を解析して、演算、外部入出力およびメモリアクセス実行順序の依存関係を表現するコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段と、該コントロールデータフローグラフ生成手段によって生成されたコントロールデータフローグラフの各節点を、スレッドを構成する有限状態遷移機械の状態に対応したステップに割り当てるスケジューリング手段と、該スケジューリング手段によってスケジューリングされたコントロールデータフローグラフの実行に必要な演算器、レジスタおよび入出力ピンを生成し、コントロールデータフローグラフの演算を該演算器に、ステップ境界を横切るデータ依存枝を該レジスタに、外部入出力およびメモリアクセスを該入出力ピンにそれぞれ割り当てるアロケーション手段と、コントロールデータフローグラフのデータ依存枝に対応したデータパスを生成し、必要に応じてセレクタを生成するデータパス生成手段と、前記アロケーション手段および前記データパス生成手段により生成されたレジスタおよびセレクタを制御する制御論理を生成する制御論理生成手段とを備え、前記スケジューリング手段により、並列に動作する他のスレッドとメモリを共有しているスレッドにおける前記有限状態遷移機械のメモリアクセス要求をコントロールデータフローグラフの節点で表現してスケジューリングを行い、前記制御論理生成手段により、前記メモリアクセス要求の節点が割り当てられたステップに対応する前記有限状態遷移機械の状態として、共有メモリインターフェイスに対してアクセス要求信号を出力し、該共有メモリインターフェイスからのアクセス要求受付信号がアクティブになるまで該アクセス要求信号を出力する状態に留まって次の状態に遷移しない状態遷移論理を有する有限状態遷移機械を生成してスレッドを合成することを特徴とし、そのことにより上記目的が達成される。
また、本発明は、前記高位合成装置により、動作記述からレジスタトランスファレベルの論理回路を生成する高位合成方法であって、前記コントロールデータフローグラフ生成手段によって、ハードウェアの構成に関する情報が含まれず、処理の動作のみが記述された動作記述を解析して、演算、外部入出力およびメモリアクセス実行順序の依存関係を表現するコントロールデータフローグラフを生成するコントロールデータフローグラフ生成工程と、前記スケジューリング手段によって、該コントロールデータフローグラフの各節点を、スレッドを構成する有限状態遷移機械の状態に対応したステップに割り当てるスケジューリング工程と、前記アロケーション手段によって、該スケジューリングされたコントロールデータフローグラフの実行に必要な演算器、レジスタおよび入出力ピンを生成し、コントロールデータフローグラフの演算を該演算器に、ステップ境界を横切るデータ依存枝を該レジスタに、外部入出力およびメモリアクセスを該入出力ピンにそれぞれ割り当てるアロケーション工程と、前記データパス生成手段によって、コントロールデータフローグラフのデータ依存枝に対応したデータパスを生成し、必要に応じてセレクタを生成するデータパス生成工程と、前記制御論理生成手段によって、前記アロケーション工程および前記データパス生成工程により生成されたレジスタおよびセレクタを制御する制御論理を生成する制御論理生成工程とを含み、前記スケジューリング工程において、並列に動作する他のスレッドとメモリを共有しているスレッドにおける前記有限状態遷移機械のメモリアクセス要求をコントロールデータフローグラフの節点で表現してスケジューリングを行い、前記制御論理生成工程において、前記メモリアクセス要求の節点が割り当てられたステップに対応する前記有限状態遷移機械の状態として、共有メモリインターフェイスに対してアクセス要求信号を出力し、該共有メモリインターフェイスからのアクセス要求受付信号がアクティブになるまで該アクセス要求信号を出力する状態に留まって次の状態に遷移しない状態遷移論理を有する有限状態遷移機械を生成してスレッドを合成することを特徴とし、そのことにより上記目的が達成される。
【００３２】
上記方法によれば、後述する実施形態１に示すように、並列に動作する複数のスレッドから共有メモリに対して同時にアクセスが行われたときに、スレッド間でアクセスの競合が起こらないように調整することができる。
【００３３】
前記高位合成装置は、前記スレッド内に、前記共有メモリからリードされたデータが一時記憶されるリードデータ記憶回路と、前記共有メモリからリードされた前記データを前記アクセス要求受付信号がアクティブになってから該リードデータ記憶回路に書き込むためのタイミングを発生するリードタイミング発生回路と、前記共有メモリからのデータリードが実行されると、該リードデータ記憶回路の前記リードデータの読み出しポインタを更新するための信号を発生させるリード終了発生回路とを有するリードデータ記憶選択回路を生成するリードデータ記憶選択回路生成手段を有し、前記制御論理生成工程に次いで、前記リードデータ記憶選択回路生成手段によって前記リードデータ記憶選択回路を生成する工程を実行することを特徴としてもよい。
【００３４】
上記方法によれば、後述する実施形態２に示すように、正しいタイミングでメモリからリードされたデータが、一旦、リードデータ記憶回路に記憶されるため、スレッドは、必要なときにキューに記憶されたデータを読み出すことができる。
【００３５】
前記リードデータ記憶回路は、キューを含んでいてもよい。また、前記リードタイミング発生回路は、シフトレジスタを含んでいてもよい。
【００３６】
上記方法によれば、キューおよびシフトレジスタを用いることにより、回路の面積を小さくすることができる。
【００３７】
前記リードデータ記憶選択回路を生成する工程において生成される前記リードデータ記憶選択回路は、前記スレッドを構成する前記有限状態遷移機械が連続して状態遷移したか否かを判定する連続遷移判定回路と、該連続遷移判定回路の判定結果に基づいて、前記共有メモリからリードされたデータを前記有限状態遷移機械を有するスレッドにて直接用いるか、または前記リードデータ記憶回路に記憶されたデータを該スレッドにて用いるかを選択するリードデータ選択回路とを有していてもよい。
【００３８】
上記方法によれば、後述する実施形態３に示すように、スレッドの有限状態遷移機械が連続して遷移したか否かが判定され、その結果によってメモリからリードされたデータまたはリードデータ記憶回路に記憶されたデータのどちらかが選択されるため、メモリ自体のレイテンシと等しいレイテンシでメモリアクセスを行うことができる。
【００３９】
前記連続遷移判定回路は、シフトレジスタを含んでいてもよい。
【００４０】
上記方法によれば、シフトレジスタを用いることにより、回路の面積を小さくすることができる。
【００４２】
前記高位合成装置は、複数のスレッドからリード要求信号が入力されたときに、該リード要求信号がアクティブであるスレッドのうち、最も優先度の高いスレッドからの要求を受け付けてそのスレッドに対する要求受付信号をアクティブにする共有メモリインターフェイスを生成する共有メモリインターフェイス生成手段と、該共有メモリインターフェイスを前記合成されたスレッドと接続する接続手段とを有し、前記共有メモリインターフェイス生成手段によって前記共有メモリインターフェイスを生成する工程と、次いで、前記接続手段によって、該共有メモリインターフェイスと前記スレッドとを接続する工程とをさらに含んでいてもよい。
【００４３】
【発明の実施の形態】
以下に、本発明の実施の形態について、図面に基づいて説明する。
【００４４】
（実施形態１）
図８は、実施形態１の回路生成方法を説明するためのフローチャートである。本実施形態では、並列に動作し、共有メモリに対してアクセスを行う複数のスレッドと、メモリインターフェイスとが接続された回路において、複数のスレッド間でメモリアクセス競合を調整することができる回路が生成される。
【００４５】
まず、メモリインターフェイスの生成５０４では、メモリインターフェイスが生成される。このメモリインターフェイスは、複数のスレッドからリード要求信号が入力されたときに、リード要求信号がアクティブ”1”(アクティブ)であるスレッドのうち、最も優先度の高いスレッドからの要求を受け付けて、直ちにそのスレッドに対する要求受付信号をアクティブ”１”にし、要求が受け付けられたことをスレッドに通知する。そして、ｎ回目のクロックの立ち上がり後、リードデータピンにメモリからのデータを出力する。ここで、ｎはメモリのレイテンシである。
【００４６】
次に、各スレッドの合成５０５では、高位合成方法によりＲＴＬレベルの各スレッドが個別に生成される。図９は、本実施形態１において、各スレッドを生成する高位合成方法のフローチャートである。ここでは、動作記述からＣＤＦＧへの変換工程、スケジューリング工程、アロケーション工程、データパス生成工程および制御論理生成工程５００がこの順に行われる。この図９において、動作記述からＣＤＦＧへの変換工程、スケジューリング工程、アロケーション工程およびデータパス生成工程は、図１〜図６を用いて説明した従来技術と同様であり、制御論理生成工程５００が従来技術と異なっている。
【００４７】
図１０は、本実施形態１における、制御論理工程５００のフローチャートである。ここでは、制御論理用入出力ピンの生成、有限状態遷移機械の生成５０１、メモリリード要求論理の生成およびセレクタ選択論理の生成がこの順に行われる。この図１０において、制御論理用入出力ピンの生成、メモリリード要求論理の生成およびセレクタ選択論理の生成は、図７を用いて説明した従来技術と同様であり、有限状態遷移機械の生成５０１が従来技術と異なっている。
【００４８】
図１１は、本実施形態１における、有限状態遷移機械の生成５０１のフローチャートである。ここでは、スケジューリング結果の総ステップ数と同じ数の状態の生成、リード要求ノードの選択５０２、状態論理の生成５０３、状態出力論理および状態出力ピンの生成がこの順に行われる。この図１１において、スケジューリング結果の総ステップ数の状態の生成と、状態出力論理および状態出力ピンの生成とは、図７を用いて説明した従来技術と同様であり、リード要求ノードの選択５０２および状態論理の生成５０３が従来技術と異なっている。
【００４９】
リード要求ノードの選択５０２では、リード競合調停が行われるリード要求ノード（節点）が選択される。また、状態論理の生成５０３では、リード要求ノードがスケジューリングされたステップに対応する状態から、次のステップに対応する状態への遷移条件を、メモリリード要求受け付け信号＝アクティブとして、それ以外の遷移条件を真（常に遷移）とした状態遷移論理を生成する。これによって、スレッドからリード要求信号がメモリインターフェイスに出力されると共に、メモリインターフェイスからスレッドに入力されるメモリリード要求受付信号がアクティブ”１”であれば次状態へ遷移し、インアクティブであれば状態遷移しない状態遷移論理が生成される。
【００５０】
その後、各スレッドとメモリインターフェイスとの接続５０６では、生成された各スレッドとメモリインターフェイスとが接続される。
【００５１】
以下に、このようにして生成された回路の動作について、図１２を用いて説明する。ここでは、スレッド１およびスレッド２の２つのスレッドとメモリインターフェイスとが接続されており、レイテンシが２のパイプラインメモリにアクセスが行われるものとする。また、スレッド１および２は、状態Ｓ０でメモリリードを要求し、状態Ｓ２でメモリリードを行うものとする。
【００５２】
図１２（ａ）に示すサイクル０では、スレッド１および２の状態が共にＳ０であるため、スレッド１および２は同時にメモリリードを要求する。メモリインターフェイスは、スレッド１からの要求を優先し、スレッド１へのリード要求受付信号をアクティブにする。
【００５３】
サイクル０において、メモリインターフェイスからスレッド１へのリード要求受付信号がアクティブになるので、図１２（ｂ）に示すサイクル１では、スレッド１は状態Ｓ１になる。一方、サイクル０において、メモリインターフェイスからスレッド２へのリード要求受付信号はインアクティブのままであるので、図１２（ｂ）に示すサイクル１では、スレッド２は状態Ｓ０のままである。
【００５４】
サイクル１において、スレッド２は再びメモリリードを要求する。このときには、メモリインターフェイスは、スレッド２からの要求を受け付けて、スレッド２へのリード要求受付信号をアクティブにする。
【００５５】
図１２（ｃ）のサイクル２では、スレッド１がメモリインターフェイスからデータをリードする。また、図１２（ｄ）のサイクル３では、スレッド２がメモリインターフェイスからデータをリードする。
【００５６】
このように、本実施形態の回路生成方法によって生成された回路では、各スレッドが、メモリインターフェイスからの要求受付信号によって、次の状態に遷移するか、遷移しないかを決定することにより、複数のスレッド間でメモリアクセスが競合しないように調整することができる。
【００５７】
図１３に、本実施形態において生成される、スレッド、メモリインターフェイスを含む回路のトップ階層を示す。ここでは、スレッド２０１〜２０３の３つのスレッドとメモリインターフェイス２１１とが接続されている。スレッド２０１〜２０３からメモリインターフェイス２１１に対してリード要求信号２０４〜２０６とそのアドレスがそれぞれ入力される。インターフェイス２１１は、リード要求を行ったスレッドのうち、最も優先度の高いスレッドからの要求を受け付けて、直ちにそのスレッドに対するリード要求受付信号２０７〜２０９をアクティブ”１”にして、要求が受け付けられたことをスレッドに通知する。そして、２回目のクロックの立ち上がり後、リードデータピン２１０にメモリからのデータを出力する。
【００５８】
図１４に、レイテンシが２のパイプラインメモリを使用すると仮定して、本実施形態の高位合成方法によって、図１に示す動作記述から生成されるスレッドの回路例を示す。本実施形態において、図１に示す動作記述から変換されるＣＤＦＧは図２と同様であり、スケジューリング結果は図４と同様であり、アロケーション結果は図５と同様であり、データパス生成結果は図６と同様である。
【００５９】
この図１４の回路では、リード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”のとき（Ｃ０）に、このノード１０７がスケジューリングされたステップに対応する状態Ｓ０ ４０３から、次のステップに対応する状態Ｓ１ ４０４へ遷移し、リード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がインアクティブであれば状態Ｓ０ ４０３に留まる状態遷移論理４１２が生成されている。そして、図２に示すリード要求ノード１０７に対してのみ、リード競合調停が行われる。それ以外の構成は、図７に示す従来のスレッドの回路構成と同様である。
【００６０】
このように、本実施形態の回路生成方法によって生成された回路では、各スレッドが、メモリインターフェイスからの要求受付信号によって、次の状態に遷移するか、遷移しないかを決定することにより、並列に動作する複数のスレッドから共有メモリに対して同時にアクセスが行われたときに、スレッド間でアクセスの競合が起こらないように調整することができる。
【００６１】
次に、本実施形態の回路生成方法を用いて生成される回路の問題点について説明する。ここでは、図２に示すリード要求ノード１０７〜１０９に対して、リード競合調停が行われる場合について考える。図１５に、本実施形態の高位合成方法によって生成されるスレッドの回路例を示す。
【００６２】
この図１５の回路では、メモリへのリード要求が行われる各状態Ｓ０ ４０３〜Ｓ２ ４０５において、メモリインターフェイスからのリード要求受付信号２１５がアクティブ”１”のときに、その状態から次の状態へ遷移し、リード要求受付信号２１５がインアクティブ（Ｃ０バー））であればその状態に留まる制御論理が生成されている。
【００６３】
図１３に示すメモリインターフェイス２１１において、リード要求が受け付けられると、２回目のクロックの立ち上がり後にリードデータピン２１０にデータが出力されるが、その後は、他のリード要求に対応するデータが出力される可能性がある。
【００６４】
一方、図１５に示す状態遷移機械１５６は、状態Ｓ０、Ｓ１またはＳ２では、メモリインターフェイスからの要求受付信号２１５がアクティブにならない限りその状態に留まっているので、リード要求信号が出力されてから３クロック以上後にリードデータ入力ピン１４２からデータが入力される可能性がある。
【００６５】
この場合の問題点について、図１５に示すスレッドの回路と、図１６に示すタイミング図とを用いて説明する。
【００６６】
サイクル０では、スレッドの状態がＳ０であり、スレッドはメモリへのリード要求信号ＭＥＭ＿ＲＲＥＱ １５５をアクティブ”１”にする。そして、サイクル０では、すぐにリード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”になるため、スレッドからのリード要求が受け付けられたと判断して、サイクル１でスレッドが状態Ｓ１になる。
【００６７】
サイクル１でも、スレッドはメモリへのリード要求信号ＭＥＭ＿ＲＲＥＱ １５５をアクティブ”１”にするが、リード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がインアクティブ”０”になるため、サイクル２でもスレッドが状態Ｓ１のままで次の状態Ｓ２に遷移しない。
【００６８】
サイクル２では、リード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”になるため、サイクル３でスレッドが状態Ｓ２になる。この状態Ｓ２では、最初のリード要求に対応するメモリデータがスレッドにリードされるが、この時点２１８では既にサイクル３であり、最初のリード要求時点２２０から３サイクル経っているため、スレッドは正しいリードデータ２１９を読み込むことができない。従って、実施形態１で生成された回路では、メモリリードを正しいタイミングで行うことができないおそれがある。この問題点を解決することができる回路生成方法について、以下の実施形態２において説明する。
【００６９】
（実施形態２）
図１７は、実施形態２の回路生成方法を説明するためのフローチャートである。本実施形態では、並列に動作し、共有メモリに対してアクセスを行う複数のスレッドと、メモリインターフェイスとが接続された回路において、正しいタイミングでメモリからデータがリードされ、リードされたデータが、一旦、リードデータ記憶回路に記憶され、スレッドが必要とするときにキューに記憶されたデータが読み出されることにより、共有メモリに対してパイプラインアクセスを行うことができ、かつ、複数のスレッド間でメモリアクセス競合を調整することができる回路が生成される。
【００７０】
ここでは、メモリインターフェイスの生成、各スレッドの合成５０７および各スレッドとメモリインターフェイスとの接続がこの順に行われる。この図１７において、メモリインターフェイスの生成および各スレッドとメモリインターフェイスとの接続は、図８を用いて説明した実施形態１と同様であり、各スレッドの合成５０７が実施形態１と異なっている。
【００７１】
各スレッドの合成５０７では、高位合成方法によりＲＴＬレベルの各スレッドが個別に生成される。図１８は、本実施形態２において、各スレッドを生成する高位合成方法のフローチャートである。ここでは、動作記述からＣＤＦＧへの変換工程５１４、スケジューリング工程、アロケーション工程、データパス生成工程、制御論理生成工程、リードデータ記憶選択回路の生成工程５０８およびデータパスへの挿入工程５０９がこの順に行われる。この図１８において、スケジューリング工程、アロケーション工程、データパス生成工程および制御論理生成工程は、図９を用いて説明した実施形態１と同様であり、動作記述からＣＤＦＧへの変換工程５１４、リードデータ記憶選択回路の生成工程５０８およびデータパスへの挿入工程５０９が実施形態１と異なっている。
【００７２】
本実施形態で生成される回路は、メモリインターフェイスを介してメモリからリードされたデータが、一旦、キューを含むリードデータ記憶回路に記憶され、その後、キューからそのデータが読み出されて利用される。このため、１クロック分のオーバーヘッドを見込んで、リードデータノードは、リード要求ノードよりも（ｎ＋１）ステップだけ遅いステップにスケジューリングされる。従って、動作記述からＣＤＦＧへの変換工程５１４においては、リード要求ノードと対応するリードデータノード間に、相対ステップ数（ｎ＋１）の制御依存枝が設けられる。それ以外は、実施形態１と同様である。ここで、ｎは使用されるパイプラインメモリのレイテンシである。
【００７３】
リードデータ記憶選択回路の生成工程５０８では、メモリインターフェイスからリードされたデータが一時記憶されるリードデータ記憶選択回路が生成される。
【００７４】
データパスへの挿入工程５０９では、生成されたリードデータ記憶選択回路が、データパスに挿入される。
【００７５】
図１９は、本実施形態２における、リードデータ記憶選択回路の生成工程のフローチャートである。ここでは、リードデータ記憶回路の生成５１０、リードタイミング発生回路の生成５１１、リード終了信号発生回路の生成５１２および各サブ回路の接続５１３がこの順に行われる。
【００７６】
リードデータ記憶回路の生成５１０では、メモリインターフェイスからリードされたデータが一時記憶されるキューが生成される。
【００７７】
リードタイミング発生回路の生成５１１では、メモリリード要求がメモリインターフェイスに受け付けられてからｎクロック後に、メモリインターフェイスからのデータをキューに書き込むためのタイミングを発生する回路が生成される。このタイミング発生のためには、シフトレジスタが用いられる。ここで、ｎはパイプラインメモリのレイテンシである。
【００７８】
リード終了信号発生回路の生成５１２では、メモリリードが実行されると出力をアクティブにする、リード終了信号発生回路が生成される。この信号は、キューから新しいデータを読み出すために、キューの読み出しポインタを更新するために用いられる。
【００７９】
各サブ回路の接続５１３では、リードデータ記憶回路、リードタイミング発生回路およびリード終了信号発生回路が接続され、リードデータ記憶選択回路が生成される。
【００８０】
図２０に、レイテンシが１のパイプラインメモリを使用すると仮定して、本実施形態の高位合成方法によって生成されるスレッドの回路例を示す。この場合には、リードデータノードがリード要求ノードから２ステップだけ遅いステップにスケジューリングされるため、図１に示す動作記述から変換されるＣＤＦＧは図２と同様であり、スケジューリング結果は図４と同様であり、アロケーション結果は図５と同様であり、データパス生成結果は図６と同様である。
【００８１】
この図２０の回路では、図１５に示す実施形態１の回路に加えて、リードタイミング発生回路３１１、リードデータ記憶回路３０４およびリード終了信号発生回路３２２を含むリードデータ記憶選択回路３２４が設けられている。
【００８２】
リードタイミング発生回路３１１は、３つのＡＮＤ回路とＯＲ回路とシフトレジスタ３１２とを有している。各ＡＮＤ回路の入力には、有限状態遷移機械１５６から出力される状態Ｓ０およびリード要求受付信号ＭＥＭ＿ＲＡＣＫ（Ｃ０）と、状態Ｓ１およびＣ０と、状態Ｓ２およびＣ０とがそれぞれ入力され、各ＡＮＤ回路の出力はそれぞれＯＲ回路の入力と接続されている。また、ＯＲ回路の出力は、シフトレジスタ３１２の入力ＤＩＮ ３３６と接続されている。シフトレジスタ３１２の入力ＣＬＫには、クロックが入力される。
【００８３】
リード終了信号発生回路３２２は、ＡＮＤ回路とＯＲ回路とを有している。ＡＮＤ回路の入力には、状態Ｓ２およびリード要求受付信号ＭＥＭ＿ＲＡＣＫ（Ｃ０）が入力され、ＡＮＤ回路の出力と有限状態遷移機械１５６から出力される状態Ｓ３およびＳ４とがＯＲ回路の入力と接続されている。
【００８４】
リードデータ記憶回路３０４は、キュー３３９を有している。キュー３３９の入力ＷＥＮ ３４０は、リードタイミング発生回路３１１を構成するシフトレジスタ３１２の出力ＤＯＵＴ０ ３３８と接続されている。また、キュー３３９の入力ＤＩＮは、リードデータＭＥＭ＿ＲＤＡＴＡが入力される入力ピン１４２と接続されている。また、キュー３３９の入力ＲＦ５２３は、リード終了信号発生回路３２２を構成するＯＲ回路の出力と接続されている。キュー３３９の入力ＣＬＫには、クロックが入力される。キュー３３９の出力ＤＯＵＴ３４１は、リードデータ記憶選択回路３２４の出力ｒｄｍ ｏｕｔ ３４３と接続されており、データ記憶選択回路３２４の出力３４３は、加算器１３９の一方の入力およびセレクタ１５２の入力と接続されている。
【００８５】
図２１に、キュー３３９のアクセスタイミングを示す。ＤＩＮにリードデータが与えられ、ＷＥＮが”１”になると、次のＣＬＫの立ち上がり時に、キュー３３９にデータが書き込まれる。図２１の例では、ｄａｔａ１、ｄａｔａ２およびｄａｔａ３の３つのデータが連続して書き込まれる。
【００８６】
キュー３３９の出力ＤＯＵＴには、キュー３３９の読み出しポインタが現在示している値が出力される。そして、ＲＦが”１”になると、次のＣＬＫの立ち上がり時にキュー３３９の読み出しポインタが移動して、ＤＯＵＴに新しいデータが出力される。図２１の例では、最初はＤＯＵＴからｄａｔａ１が出力されているが、ＲＦが１回目に”１”になってＣＬＫが立ち上がるとｄａｔａ２が出力され、ＲＦが２回目に”１”になってＣＬＫが立ち上がるとｄａｔａ３が出力される。
【００８７】
図２２に、シフトレジスタ３１２のアクセスタイミングを示す。このシフトレジスタは、１ビットのシフトレジスタであり、ＣＬＫが立ち上がる度にＤＩＮの値がＤＯＵＴに代入される。
【００８８】
この回路の動作タイミングについて、図２０に示すスレッドの回路と、図２３に示すタイミング図とを用いて説明する。
【００８９】
サイクル０では、スレッドの状態がＳ０であり、スレッドはメモリへのリード要求信号ＭＥＭ＿ＲＲＥＱ １５５をアクティブ”１”にする。そして、サイクル０では、すぐにリード要求が受け付けられてリード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”になる。よって、リードタイミング発生回路３１１に含まれるシフトレジスタ３１２の入力ＤＩＮ ３３６が”１”になり、サイクル１でスレッドが状態Ｓ１になる。
【００９０】
サイクル１では、スレッドの状態がＳ１であり、スレッドはメモリへのリード要求信号ＭＥＭ＿ＲＲＥＱ １５５をアクティブ”１”にするが、リード要求は受け付けられず、リード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がインアクティブ”０”になる。よって、サイクル２でもスレッドが状態Ｓ１のままで次の状態Ｓ２に遷移しない。
【００９１】
また、サイクル１において、リードタイミング発生回路３１１に含まれるシフトレジスタ３１２の出力ＤＯＵＴ０ ３３８が”１”になる。この出力ＤＯＵＴ０ ３３８は、リードデータ記憶回路３０４内のキュー３３９の入力ＷＥＮ ３４０に接続されているため、サイクル１でメモリインターフェイスからリードされたデータｄａｔａ１がキュー３３９に書き込まれる。
【００９２】
サイクル２では、スレッドの状態がＳ１であり、スレッドはメモリへのリード要求信号ＭＥＭ＿ＲＲＥＱ １５５をアクティブ”１”にする。そして、サイクル２では、すぐにリード要求が受け付けられてリード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”になる。よって、リードタイミング発生回路３１１に含まれるシフトレジスタ３１２の入力ＤＩＮ ３３６が”１”になり、サイクル３でスレッドが状態Ｓ２になる。
【００９３】
サイクル３では、スレッドの状態がＳ２であり、１回目のメモリリード要求に対するメモリリードが行われる。そして、リードデータ記憶選択回路３２４の出力ｒｄｍ＿ｏｕｔ３４３がキュー３３９の出力に接続されているため、キュー３３９からの出力ｄａｔａ１がリードデータとしてスレッドに利用される。
【００９４】
また、サイクル３では、リード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”であるため、キュー３３９の入力ＲＦ ５２３が”１”になり、次のサイクル４でキュー３３９の出力ＤＯＵＴ ３４１はｄａｔａ２になる。
【００９５】
また、サイクル３では、スレッドの状態がＳ２であり、スレッドはメモリへのリード要求信号ＭＥＭ＿ＲＲＥＱ １５５をアクティブ”１”にする。そして、サイクル３では、すぐにリード要求が受け付けられてリード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”になる。よって、リードタイミング発生回路３１１に含まれるシフトレジスタ３１２の入力ＤＩＮ ３３６が”１”になり、サイクル４でスレッドが状態Ｓ３になる。
【００９６】
また、サイクル３において、リードタイミング発生回路３１１に含まれるシフトレジスタ３１２の出力ＤＯＵＴ０ ３３８がアクティブ”１”になる。この出力ＤＯＵＴ０ ３３８は、リードデータ記憶回路３０４内のキュー３３９の入力ＷＥＮ ３４０に接続されているため、サイクル３でメモリインターフェイスからリードされたデータｄａｔａ２がキュー３３９に書き込まれる。
【００９７】
サイクル４では、スレッドの状態がＳ３であり、２回目のメモリリード要求に対するメモリリードが行われる。そして、リードデータ記憶選択回路３２４の出力ｒｄｍ＿ｏｕｔ３４３がキュー３３９の出力に接続されているため、キュー３３９からの出力ｄａｔａ２がリードデータとしてスレッドに利用される。
【００９８】
また、サイクル４において、リードタイミング発生回路３１１に含まれるシフトレジスタ３１２の出力ＤＯＵＴ０ ３３８がアクティブ”１”になる。この出力ＤＯＵＴ０ ３３８は、リードデータ記憶回路３０４内のキュー３３９の入力ＷＥＮ ３４０に接続されているため、サイクル４でメモリインターフェイスからリードされたデータｄａｔａ３がキュー３３９に書き込まれる。
【００９９】
また、サイクル４では、スレッドの状態がＳ３であるため、キュー３３９の入力ＲＦ ５２３が”１”になり、次のサイクル５でキュー３３９の出力ＤＯＵＴ ３４１はｄａｔａ３になる。
【０１００】
サイクル５では、スレッドの状態がＳ４であり、３回目のメモリリード要求に対するメモリリードが行われる。そして、リードデータ記憶選択回路３２４の出力ｒｄｍ＿ｏｕｔ３４３がキュー３３９の出力に接続されているため、キュー３３９からの出力ｄａｔａ３がリードデータとしてスレッドに利用される。
【０１０１】
このように、本実施形態の回路生成方法によって生成された回路では、正しいタイミングでメモリからリードされたデータが、一旦、リードデータ記憶回路に記憶され、スレッドは、必要なときにキューに記憶されたデータを読み出すことができるので、共有メモリに対してパイプラインアクセスを行い、かつ、複数のスレッド間でメモリアクセスが競合しないように調整することができる。
【０１０２】
この実施形態２において、図１に示す動作記述から図４に示すスケジューリング結果を得るためには、レイテンシが１のパイプラインメモリを用いる必要がある。これは、スレッドによってメモリインターフェイスを介してメモリからリードしたデータが一旦キューに記憶され、キューの出力がリードデータとして利用され、１クロック分のオーバーヘッドが生じるためである。
【０１０３】
この実施形態２において、レイテンシが２のパイプラインメモリを用いるためには、動作記述からＣＤＦＧの変換において、リード要求ノードと対応するリードデータノードとの間に、相対スレッド数３の制御依存枝を設けて、スケジューリングする必要がある。この場合には、メモリアクセスのレイテンシが長くなるため、回路の動作速度がおそくなるおそれがある。この問題点を解決することができる回路生成方法について、以下の実施形態３において説明する。
【０１０４】
（実施形態３）
図２４は、実施形態３の回路生成方法を説明するためのフローチャートである。本実施形態では、並列に動作し、共有メモリに対してアクセスを行う複数のスレッドと、メモリインターフェイスとが接続された回路において、スレッドの有限状態遷移機械が連続して遷移したか否かが判定され、その結果によってメモリからリードされたデータまたはリードデータ記憶回路に記憶されたデータのどちらかが選択されることにより、メモリ自体のレイテンシと等しいレイテンシでメモリアクセスを行うことができる回路が生成される。
【０１０５】
ここでは、メモリインターフェイスの生成、各スレッドの合成６００および各スレッドとメモリインターフェイスとの接続がこの順に行われる。この図２４において、メモリインターフェイスの生成および各スレッドとメモリインターフェイスとの接続は、図１７を用いて説明した実施形態２と同様であり、各スレッドの合成６００が実施形態２と異なっている。
【０１０６】
各スレッドの合成６００では、高位合成方法によりＲＴＬレベルの各スレッドを個別に生成する。図２５は、本実施形態３において、各スレッドを生成する高位合成方法のフローチャートである。ここでは、動作記述からＣＤＦＧへの変換工程６０１、スケジューリング工程、アロケーション工程、データパス生成工程、制御論理生成工程、リードデータ記憶選択回路の生成工程６０２およびデータパスへの挿入工程がこの順に行われる。この図２５において、スケジューリング工程、アロケーション工程、データパス生成工程、制御論理生成工程およびデータパスへの挿入工程は、図１８を用いて説明した実施形態２と同様であり、動作記述からＣＤＦＧへの変換工程６０１およびリードデータ記憶選択回路の生成工程６０２が実施形態２と異なっている。
【０１０７】
本実施形態で生成される回路は、連続遷移判定回路によってスレッドを構成する有限状態遷移機械が連続して状態遷移したか否かが判定され、この判定結果に応じて、リードデータ選択回路によって共有メモリからリードされたデータを直接用いるか、またはリードデータ記憶回路に記憶されたデータを用いるかが選択される。よって、動作記述からＣＤＦＧへの変換工程６０１においては、リード要求ノードと対応するリードデータノードとの間に、相対ステップ数ｎの制御依存枝が設けられる。それ以外は、実施形態２と同様である。ここで、ｎは使用されるパイプラインメモリのレイテンシである。
【０１０８】
リードデータ記憶選択回路の生成工程６０２では、メモリインターフェイスからリードされたデータが一時記憶されるリードデータ記憶選択回路が生成される。
【０１０９】
図２６は、本実施形態３における、リードデータ記憶選択回路の生成工程のフローチャートである。ここでは、リードデータ記憶回路の生成、リードタイミング発生回路の生成、連続遷移判定回路の生成６０３、リードデータ選択回路の生成６０４、リード終了信号発生回路の生成および各サブ回路の接続がこの順に行われる。この図２６において、リードデータ記憶回路の生成、リードタイミング発生回路の生成、、リード終了信号発生回路の生成および各サブ回路の接続は、図１９を用いて説明した実施形態２と同様であり、連続遷移判定回路の生成６０３およびリードデータ選択回路の生成６０４が実施形態２と異なっている。
【０１１０】
メモリインターフェイスにリード要求が受け付けられてから、そのリード要求に対するリードが行われるまで、スレッドに含まれる有限状態遷移機械が止まることなく連続して遷移した場合に、スレッドによってメモリインターフェイスから直接データがリードされて利用される。一方、スレッドに含まれる有限状態遷移機械が連続して遷移しなかった場合には、スレッドによってキューに記憶されたデータがリードされて利用される。このため、連続遷移判定回路の生成６０３では、有限状態遷移機械が連続して状態遷移したか否かを判定して判定信号を生成する、連続遷移判定回路が生成される。この判定のためには、シフトレジスタが用いられる。
【０１１１】
リードデータ選択回路６０４の生成では、連続遷移判定回路から出力される判定信号によって、メモリインターフェイスを介してメモリからリードされたデータ、またはキューからリードされたデータのいずれかを選択するリードデータ選択回路が生成される。
【０１１２】
図２７に、レイテンシが２のパイプラインメモリを使用すると仮定して、本実施形態の高位合成方法によって生成されるスレッドの回路例を示す。本実施形態において、図１に示す動作記述から生成されるＣＤＦＧは図２と同様であり、スケジューリング結果は図４と同様であり、アロケーション結果は図５と同様であり、データパス生成結果は図６と同様である。
【０１１３】
この図２７の回路では、図２０に示す実施形態２の回路に加えて、リードデータ選択記憶回路３２４内に、連続遷移判定回路３１８およびリードデータ選択回路３２０が設けられている。
【０１１４】
連続遷移判定回路３１８は、４つのＡＮＤ回路と２つのＯＲ回路とシフトレジスタ３２８とを有している。３つＡＮＤ回路の入力には、有限状態遷移機械１５６から出力される状態Ｓ０およびリード要求受付信号ＭＥＭ＿ＲＡＣＫ（Ｃ０）と、状態Ｓ１およびＣ０と、状態Ｓ２およびＣ０とがそれぞれ入力され、各ＡＮＤ回路の出力はそれぞれ一方のＯＲ回路の入力と接続されている。このＯＲ回路の出力は、他方のＯＲ回路の入力と接続されている。また、他方のＯＲ回路の出力は２つの分岐され、それぞれシフトレジスタ３２８の入力ＤＩＮ ３３７と、もう１つのＡＮＤ回路の入力とに接続されている。シフトレジスタ３２８の入力ＣＬＫには、クロックが入される。シフトレジスタ３２８の出力ＤＯＵＴ０およびＤＯＵＴ１は、それぞれもう１つのＡＮＤ回路の入力に接続されている。なお、リードデータタイミング発生回路３１１のシフトレジスタの出力についても、シフトレジスタ３２８と動作タイミングを合わせるためにＤＯＵＴ１、ＤＯＵＴ０の２つが設けられているが、このＤＯＵＴ１はシフトレジスタの外部とは接続されていない。
【０１１５】
リードデータ選択回路３２０は、ＮＯＴ回路とセレクタとを有している。連続遷移判定回路３１８を構成するＡＮＤ回路の出力ｃｔｊ＿ｏｕｔ３４２は２つに分岐され、それぞれＮＯＴ回路の入力とセレクタの入力とに接続されている。セレクタの入力は、さらに、ＮＯＴ回路の出力と、リードデータＭＥＭ＿ＲＤＡＴＡが入力される入力ピン１４２と、キュー３３９を構成するリードデータ記憶回路３０４の出力ＤＯＵＴとに接続されている。セレクタの出力は、リードデータ記憶選択回路３２４の出力ｒｄｍ ｏｕｔ ３４３と接続されており、データ記憶選択回路３２４の出力３４３は、加算器１３９の一方の入力およびセレクタ１５２の入力と接続されている。
【０１１６】
図２８に、シフトレジスタ３１２および３２８のアクセスタイミングを示す。このシフトレジスタは、２ビットのシフトレジスタであり、ＣＬＫが立ち上がる度にＤＯＵＴ１の値がＤＯＵＴ０に代入され、ＤＩＮの値がＤＯＵＴ１に代入される。
【０１１７】
この回路の動作タイミングについて、図２７に示すスレッドの回路と、図２９に示すタイミング図とを用いて説明する。
【０１１８】
サイクル０では、スレッドの状態がＳ０であり、スレッドはメモリへのリード要求信号ＭＥＭ＿ＲＲＥＱ １５５をアクティブ”１”にする。そして、サイクル０では、すぐにリード要求が受け付けられてリード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”になる。よって、リードタイミング発生回路３１１に含まれるシフトレジスタ３１２の入力ＤＩＮ ３３６および連続遷移判定回路３１８に含まれるシフトレジスタ３２８の入力ＤＩＮ ３３７が”１”になり、サイクル１でスレッドが状態Ｓ１になる。
【０１１９】
サイクル１では、スレッドの状態がＳ１であり、スレッドはメモリへのリード要求信号ＭＥＭ＿ＲＲＥＱ １５５をアクティブ”１”にするが、リード要求は受け付けられず、リード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がインアクティブ”０”になる。よって、サイクル２でもスレッドが状態Ｓ１のままで次の状態Ｓ２に遷移しない。
【０１２０】
また、サイクル１では、スレッドの状態がＳ１であり、リード要求受付信号ＭＲＭ＿ＲＡＣＫ ２１５がインアクティブ”０”であるため、連続遷移判定回路３１８に含まれるシフトレジスタ３２８の入力ＤＩＮ ３３７は”０”になる
サイクル２では、スレッドの状態がＳ１であり、スレッドはメモリへのリード要求信号ＭＥＭ＿ＲＲＥＱ １５５をアクティブ”１”にする。そして、サイクル２では、すぐにリード要求が受け付けられてリード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”になる。よって、リードタイミング発生回路３１１に含まれるシフトレジスタ３１２の入力ＤＩＮ ３３６が”１”になり、サイクル３でスレッドが状態Ｓ２になる。
【０１２１】
また、サイクル２において、リードタイミング発生回路３１１に含まれるシフトレジスタ３１２の出力ＤＯＵＴ０ ３３８が”１”になる。この出力ＤＯＵＴ０ ３３８は、リードデータ記憶回路３０４内のキュー３３９の入力ＷＥＮ ３４０に接続されているため、サイクル２でメモリインターフェイスからリードされたデータｄａｔａ１がキュー３３９に書き込まれ、サイクル３でキュー３３９の出力３４１にリードされた値ｄａｔａ１が出力される。
【０１２２】
また、サイクル２では、スレッドの状態がＳ１であり、リード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”であるため、連続遷移判定回路３１８に含まれるシフトレジスタ３２８の入力ＤＩＮ ３３７は”１”になる。
【０１２３】
サイクル３では、スレッドの状態がＳ２であり、リード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”であるため、連続遷移判定回路３１８に含まれるシフトレジスタ３２８の入力ＤＩＮ ３３７は”１”になる。
【０１２４】
よって、サイクル３では、連続状態遷移判定回路３１８の出力ｃｔｊ＿ｏｕｔ３４２が”０”になり、リードデータ選択回路３２０では、キュー３３９からの出力３４１が選択されるため、リードデータ記憶選択回路３２４の出力ｒｄｍ＿ｏｕｔ ３４３には、キュー３３９からの出力ｄａｔａ１が出力される。
【０１２５】
また、サイクル３では、スレッドの状態がＳ２であり、リード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”であるので、連続遷移判定回路３１８に含まれるシフトレジスタ３２８の入力ＤＩＮ ３３７は”１”になる。
【０１２６】
また、サイクル３では、リード要求が受け付けられ、リード要求受付信号ＭＥＭ＿ＲＡＣＫ ２１５がアクティブ”１”になる。よって、リードタイミング発生回路３１１に含まれるシフトレジスタ３１２の入力ＤＩＮ３３６が”１”になり、サイクル４でスレッドが状態Ｓ３になる。
【０１２７】
サイクル４では、スレッドの状態がＳ３であるので、連続遷移判定回路３１８に含まれるシフトレジスタ３２８の入力ＤＩＮ ３３７は”１”になる。
【０１２８】
よって、サイクル４では、連続状態遷移判定回路３１８の出力ｃｔｊ＿ｏｕｔ３４２が”１”になり、リードデータ選択回路３２０では、メモリインターフェイスからのデータＭＥＭ＿ＲＤＡＴＡが選択されるため、リードデータ記憶選択回路３２４の出力ｒｄｍ＿ｏｕｔ ３４３には、メモリインターフェイスからのデータｄａｔａ２が出力される。
【０１２９】
同様に、サイクル５でも、連続状態遷移判定回路３１８の出力ｃｔｊ＿ｏｕｔ３４２が”１”になり、リードデータ選択回路３２０では、メモリインターフェイスからのデータＭＥＭ＿ＲＤＡＴＡが選択されるため、リードデータ記憶選択回路３２４の出力ｒｄｍ＿ｏｕｔ ３４３には、メモリインターフェイスからのデータｄａｔａ３が出力される。
【０１３０】
このように、本実施形態の回路生成方法によって生成された回路では、スレッドの有限状態遷移機械が連続して遷移したか否かが判定され、その結果によってメモリからリードされたデータまたはリードデータ記憶回路に記憶されたデータのどちらかが選択されるため、メモリ自体のレイテンシと等しいレイテンシでメモリアクセスを行うことができる。
【０１３１】
【発明の効果】
以上詳述したように、請求項１および請求項２に記載の本発明によれば、共有メモリにアクセスする複数のスレッドを含み、各スレッドから共有メモリへのアクセス競合が生じないように調整することができる回路を生成することができる。
【０１３２】
また、請求項３に記載の本発明によれば、共有メモリにアクセスする複数のスレッドを含み、各スレッドから共有メモリに対してパイプラインアクセスを行うことができ、かつ、各スレッドから共有メモリへのアクセス競合が生じないように調整することができる回路を生成することができる。
【０１３３】
請求項４および請求項８に記載の本発明によれば、共有メモリにアクセスする複数のスレッドを含み、各スレッドから共有メモリに対してパイプラインアクセスを行うことができると共に、メモリのレイテンシと等しいレイテンシでメモリアクセスを行うことができ、かつ、各スレッドから共有メモリへのアクセス競合が生じないように調整することができる回路を生成することができる。
【０１３４】
請求項４、請求項５および請求項８に記載の本発明によれば、共有メモリにアクセスする複数のスレッドを含み、各スレッドから共有メモリに対してパイプラインアクセスを行うことができ、かつ、各スレッドから共有メモリへのアクセス競合が生じないように調整することができ、面積が小さい回路を生成することができる。
【０１３５】
請求項６および請求項８に記載の本発明によれば、共有メモリにアクセスする複数のスレッドを含み、各スレッドから共有メモリに対してパイプラインアクセスを行うことができると共に、メモリのレイテンシと等しいレイテンシでメモリアクセスを行うことができ、かつ、各スレッドから共有メモリへのアクセス競合が生じないように調整することができ、面積が小さい回路を生成することができる。
【図面の簡単な説明】
【図１】高位合成における動作記述の例を示す図である。
【図２】高位合成におけるＣＤＦＧの例を示す図である。
【図３】パイプラインメモリにおけるリードタイミングを示すタイミング図である。
【図４】高位合成におけるスケジューリングの例を示す図である。
【図５】高位合成におけるアロケーションの例を示す図である。
【図６】高位合成におけるデータパス生成の例を示す図である。
【図７】高位合成における制御論理生成の例を示す図である。
【図８】実施形態１の回路生成方法を説明するためのフローチャートである。
【図９】実施形態１の回路生成方法を説明するためのフローチャートである。
【図１０】実施形態１の回路生成方法を説明するためのフローチャートである。
【図１１】実施形態１の回路生成方法を説明するためのフローチャートである。
【図１２】（ａ）〜（ｄ）は、実施形態１で生成された回路の動作を説明するための図である。
【図１３】実施形態１で生成された回路のトップ階層を示す図である。
【図１４】実施形態１で生成された回路における、スレッドの構成を示す図である。
【図１５】実施形態１の回路生成方法の問題点を説明するためのスレッドの構成を示す図である。
【図１６】図１５に示すスレッドの動作タイミングを示すタイミング図である。
【図１７】実施形態２の回路生成方法を説明するためのフローチャートである。
【図１８】実施形態２の回路生成方法を説明するためのフローチャートである。
【図１９】実施形態２の回路生成方法を説明するためのフローチャートである。
【図２０】実施形態２で生成された回路における、スレッドの構成を示す図である。
【図２１】実施形態２で生成された回路における、キューの動作タイミングを示すタイミング図である。
【図２２】実施形態２で生成された回路における、シフトレジスタの動作タイミングを示すタイミング図である。
【図２３】図２０に示すスレッドの動作タイミングを示すタイミング図である。
【図２４】実施形態３の回路生成方法を説明するためのフローチャートである。
【図２５】実施形態３の回路生成方法を説明するためのフローチャートである。
【図２６】実施形態３の回路生成方法を説明するためのフローチャートである。
【図２７】実施形態３で生成された回路における、スレッドの構成を示す図である。
【図２８】実施形態３で生成された回路における、シフトレジスタの動作タイミングを示すタイミング図である。
【図２９】図２７に示すスレッドの動作タイミングを示すタイミング図である。
【符号の説明】
１０５  回路への外部入力
１０６  回路からの外部出力
１０７〜１０９  メモリへのリード要求
１１０〜１１２  メモリからのリードデータ
１１３、１１４、１１７〜１１９  制御依存枝
１２０〜１２２  相対ステップ数
１２３〜１３２  データ依存枝
１３３  インクリメント
１３４  デクリメント
１３５、１３６  加算
１３７  インクリメンタ
１３８  デクリメンタ
１３９  加算器
１４０、１５２、１５３  セレクタ
１４１  外部入力が入力される入力ピン
１４２  リードデータが入力される入力ピン
１４３  リード要求が出力される出力ピン
１４４  外部出力が出力される出力ピン
１４５〜１５１  データパス
１５４  クロックが入力される入力ピン
１５５  メモリリード要求が出力される出力ピン
１５６  有限状態遷移機械
１５８〜１６２  状態出力ピン
１６３  メモリリード要求信号論理
１６４  セレクタの入力
１６５  セレクタ選択論理
２０１〜２０３  スレッド
２１１  メモリインターフェイス
２０４〜２０６  リード要求信号
２０７〜２０９  リード要求受付信号
２１０  リードデータピン
２１５  リード要求受付信号
３０４  リードデータ記憶回路
３１１  リードタイミング発生回路
３１２、３２８  シフトレジスタ
３１８  連続遷移判定回路
３２０  リードデータ選択回路
３２２  リード終了信号発生回路
３３６、３３７  シフトレジスタの入力ＤＩＮ
３３８  シフトレジスタの出力ＤＯＵＴ
３３９  キュー
３４０  キューの入力ＷＥＮ
３４１  キューの出力ＤＯＵＴ
３４２  連続遷移判定回路の出力ｃｔｊ＿ｏｕｔ
３４３  データ記憶船体選択回路の出力ｒｄｍ＿ｏｕｔ
４０３〜４０７  状態
４０８〜４１１、４１２  状態遷移論理
５２３  キューの入力ＲＦ
【図１】
0004007483.tif 000002
【図２】
0004007483.tif 000003
【図３】
0004007483.tif 000004
【図４】
0004007483.tif 000005
【図５】
0004007483.tif 000006
【図６】
0004007483.tif 000007
【図７】
0004007483.tif 000008
【図８】
0004007483.tif 000009
【図９】
0004007483.tif 000010
【図１０】
0004007483.tif 000011
【図１１】
0004007483.tif 000012
【図１２】
0004007483.tif 000013
【図１３】
0004007483.tif 000014
【図１４】
0004007483.tif 000015
【図１５】
0004007483.tif 000016
【図１６】
0004007483.tif 000017
【図１７】
0004007483.tif 000018
【図１８】
0004007483.tif 000019
【図１９】
0004007483.tif 000020
【図２０】
0004007483.tif 000021
【図２１】
0004007483.tif 000022
【図２２】
0004007483.tif 000023
【図２３】
0004007483.tif 000024
【図２４】
0004007483.tif 000025
【図２５】
0004007483.tif 000026
【図２６】
0004007483.tif 000027
【図２７】
0004007483.tif 000028
【図２８】
0004007483.tif 000029
【図２９】
0004007483.tif 000030