(57)【要約】      （修正有）【課題】  ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成する。【解決手段】  シフトレジスタファイルの入力ソースコード、特定のシフトレジスタファイルのシフトレジスタファイル名、シフトレジスタファイルサイズ、シフトレジスタファイル読み出しアクセス順序およびシフトレジスタファイル書き込みタイミングを指示する複数のコンパイラディレクティブをパースする。自動的な各読み出しまたは書き込み後に、特定の定義を備えたシフトレジスタファイルのシフト間隔を決定する。さらに、特定の定義を備えたシフトレジスタファイルが生成されているかどうかを判定して、それが生成されていない場合には、特定の定義を備えたシフトレジスタファイルを生成し、かつ特定の定義を備えたシフトレジスタファイルにアクセスするシフトレジスタファイル制御信号を生成する。【選択図】図２
2007034887.tif 000002
【特許請求の範囲】
【請求項１】
ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成する方法であって、
（ａ）  特定の定義を備えたシフトレジスタファイル用の入力ソースコードをパースすることと、
（ｂ）  特定の定義を備えた前記シフトレジスタファイルのシフト間隔を決定することと、
（ｃ）  特定の定義を備えた前記シフトレジスタファイルが前に生成されているかどうかを判定することと、
（ｄ）  特定の定義を備えた前記シフトレジスタファイルが前に生成されていない場合には、特定の定義を備えた前記シフトレジスタファイルを生成することと、
（ｅ）  特定の定義を備えた前記シフトレジスタファイルにアクセスするシフトレジスタファイル制御信号を生成することと、
を含む方法。
【請求項２】
特定の定義を備えたシフトレジスタファイル用の入力ソースコードをパースすることが、特定の定義を備えた前記シフトレジスタファイルを指示する複数のコンパイラディレクティブをパースすることを含む、請求項１に記載の方法。
【請求項３】
複数のコンパイラディレクティブをパースすることが、シフトレジスタファイル名と、シフトレジスタファイルサイズと、シフトレジスタ読み出しアクセス順序と、シフトレジスタ書き込みタイミングとをパースすることを含む、請求項２に記載の方法。
【請求項４】
特定の定義を備えたシフトレジスタファイル用の入力ソースコードをパースすることが、特定の定義を備えた前記シフトレジスタファイルにアクセスする複数の組み込み関数をパースすることをさらに含む、請求項２に記載の方法。
【請求項５】
前記シフトレジスタファイル名が、回路設計において特定の定義を備えたシフトレジスタファイルとして実現される配列の名前である、請求項３に記載の方法。
【請求項６】
前記シフトレジスタファイルサイズが、回路設計において特定の定義を備えたシフトレジスタファイルとして実現される前記配列における合計要素数である、請求項３に記載の方法。
【請求項７】
前記シフトレジスタファイル読み出しアクセス順序が、特定の定義を備えた前記シフトレジスタファイルが一度に１行かまたは一度に１列読み出される仕方である、請求項３に記載の方法。
【請求項８】
前記シフトレジスタファイル書き込みタイミングが、特定の定義を備えた前記シフトレジスタファイルがインデックス番号に従ってランダムな順序で、一度に１行かまたは一度に１列書き込まれる仕方である、請求項３に記載の方法。
【請求項９】
前記複数の組み込み関数が、特定の定義を備えた前記シフトレジスタファイルに記憶されたデータを読み出す読み出し用組み込み関数と、特定の定義を備えた前記シフトレジスタファイルにデータを書き込む書き込み用組み込み関数とである、請求項４に記載の方法。
【請求項１０】
前記シフトレジスタファイル読み出しアクセス順序が、特定の定義を備えた前記シフトレジスタファイルに記憶された前記データにアクセスする前記読み出し用組み込み関数と関連して用いられる、請求項２から９のいずれか一項に記載の方法。
【請求項１１】
前記シフトレジスタファイル書き込みタイミングが、特定の定義を備えた前記シフトレジスタファイルにデータを書き込む前記書き込み用組み込み関数と関連して用いられる、請求項２から９のいずれか一項に記載の方法。
【請求項１２】
特定の定義を備えた前記シフトレジスタファイルの前記シフト間隔を決定することが、前記書き込みタイミングに従った各書き込みの後かまたは前記読み出しアクセス順序に従った各読み出しの後で、各行または列の前記シフト間隔を決定することを含む、請求項２から１１のいずれか一項に記載の方法。
【請求項１３】
特定の定義を備えた前記シフトレジスタファイルが前に生成されているかどうかを判定することが、前記特定の名および前記特定のサイズを備えた前記シフトレジスタファイルを発見することを含む、請求項１から８のいずれか一項に記載の方法。
【請求項１４】
特定の定義を備えた前記シフトレジスタファイルが前に生成されていない場合には、特定の定義を備えた前記シフトレジスタファイルを生成することをさらに含む、請求項１３に記載の方法。
【請求項１５】
特定の定義を備えた前記シフトレジスタファイルにアクセスする前記シフトレジスタファイル制御信号を生成することが、特定の定義を備えた前記シフトレジスタファイルへの前記アクセスが前記複数の組み込み関数に従った読み出しかまたは書き込みかを判定することを含む、請求項１から１４のいずれか一項に記載の方法。
【請求項１６】
特定の定義を備えた前記シフトレジスタファイルに記憶された前記データを読み出す読み出しモード信号か、または特定の定義を備えた前記シフトレジスタファイルにデータを書き込む書き込みモード信号を生成することをさらに含む、請求項１５に記載の方法。
【請求項１７】
読み出し順序が一度に１行かまたは一度に１列である場合には、前記読み出しモード信号が、前記シフトレジスタファイル読み出しアクセス順序に対応する入力されたシフトイネーブル信号および読み出し行／列信号を用いることによって生成される、請求項１６に記載の方法。
【請求項１８】
前記書き込み順序が一度に１行かまたは一度に１列である場合には、前記書き込みモード信号が、前記シフトレジスタファイル書き込みタイミングによって指定されたランダムな前記書き込み順序に対応する前記入力された書き込みアドレスと、前記書き込みイネーブル信号と、シフトイネーブル信号と、前記シフトレジスタファイル書き込みタイミングに対応する書き込み行／列信号とを用いることによって、生成される、請求項１７に記載の方法。
【請求項１９】
特定の定義を備えた前記シフトレジスタファイルが一次元かまたは二次元である、請求項１から１８のいずれか一項に記載の方法。
【請求項２０】
入力としてアクセスモードと、読み出しモードと、書き込みモードと、書き込みデータとを、かつ出力として読み出しデータと、読み出しアクセス遅延とを有する、特定の定義を備えた一次元シフトレジスタファイルを生成することをさらに含む、請求項１から１９のいずれか一項に記載の方法。
【請求項２１】
入力としてアクセスモードと、書き込みモードと、書き込みデータと、読み出しモードとを、かつ出力として読み出しデータと、読み出しアクセス遅延とを有する、特定の定義を備えた二次元シフトレジスタファイルを生成することをさらに含む、請求項１から２０のいずれか一項に記載の方法。
【請求項２２】
前記読み出しモードが一度に１行である場合には、特定の定義を備えた前記一次元シフトレジスタファイルが、一度に１行読み出され、次に１行だけシフトアップかまたはシフトダウンされる、請求項１８から２０のいずれか一項に記載の方法。
【請求項２３】
前記アクセスモードが、特定の定義を備えた前記シフトレジスタファイルを読み出すことである場合には、特定の定義を備えた前記一次元シフトレジスタファイルが前記データおよび読み出しアクセス遅延を出力する、請求項１８から２０のいずれか一項に記載の方法。
【請求項２４】
前記読み出しアクセス遅延が、前記一次元シフトレジスタファイルが前記読み出しモードに従って出力データを提供する際の遅延である、請求項１８から２０のいずれか一項に記載の方法。
【請求項２５】
前記読み出しモードが一度に１行である場合には、特定の定義を備えた前記二次元シフトレジスタファイルが、一度に１行読み出され、次に１行だけシフトアップかまたはシフトダウンされる、請求項１８から２１のいずれか一項に記載の方法。
【請求項２６】
前記読み出しモードが一度に１列である場合には、特定の定義を備えた前記二次元シフトレジスタファイルが、一度に１列読み出され、次に１列だけ左シフトかまたは右シフトされる、請求項１８から２１のいずれか一項に記載の方法。
【請求項２７】
前記書き込みモードが一度に１行である場合には、特定の定義を備えた前記二次元シフトレジスタファイルが、一度に１行書き込まれ、次に１行だけシフトアップかまたはシフトダウンされる、請求項１８から２１のいずれか一項に記載の方法。
【請求項２８】
前記書き込みモードが一度に１列である場合には、特定の定義を備えた前記二次元シフトレジスタファイルが、一度に１列書き込まれ、次に１列だけ左シフトされる、請求項１８から２１のいずれか一項に記載の方法。
【請求項２９】
前記アクセスモードが、特定の定義を備えた前記シフトレジスタファイルを読み出すことである場合には、特定の定義を備えた前記二次元シフトレジスタファイルが、前記データおよび読み出しアクセス遅延を出力する、請求項１８から２１のいずれか一項に記載の方法。
【請求項３０】
前記読み出しアクセス遅延が、前記二次元シフトレジスタファイルが前記読み出しモードに従って出力データを提供する際の遅延である、請求項１８から２１のいずれか一項に記載の方法。
【請求項３１】
配列定義を入力することをさらに含む、請求項１から３０のいずれか一項に記載の方法。
【請求項３２】
ハイレベル合成コンパイラにおける回路用のシフトレジスタファイルを自動生成するための方法である、請求項１から３１のいずれか一項に記載の方法。
【請求項３３】
ハイレベル合成コンパイラにおける電子回路用のシフトレジスタファイルを自動生成するための方法である、請求項１から３２のいずれか一項に記載の方法。
【請求項３４】
添附の図面に関連して前述においておおむね説明しかつ示したように、ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成する方法。
【請求項３５】
ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための装置であって、
特定の定義を備えたシフトレジスタファイル用の入力ソースコードをパースするための手段と、
特定の定義を備えた前記シフトレジスタファイルのシフト間隔を決定するための手段と、
特定の定義を備えた前記シフトレジスタファイルが前に生成されているかどうかを判定するための手段と、
特定の定義を備えた前記シフトレジスタファイルが前に生成されていない場合には、特定の定義を備えた前記シフトレジスタファイルを生成するための手段と、
特定の定義を備えた前記シフトレジスタファイルにアクセスするシフトレジスタファイル制御信号を生成するための手段と、
を含む装置。
【請求項３６】
請求項１から３４のいずれか一項に記載の方法に従って動作可能な装置。
【請求項３７】
請求項１から３４のいずれか一項に記載の方法に従って動作可能な、請求項３３に記載の装置。
【請求項３８】
添附の図面に関連して前述においておおむね説明しかつ示したように動作するように構成かつ配置された、ハイレベル合成コンパイラにおけるシフトレジスタファイルを自動生成するための装置。
【請求項３９】
ハイレベル合成コンパイラにおけるシフトレジスタファイルを自動生成するための、コンピュータ可読媒体に記録されたコンピュータプログラムを有するコンピュータプログラムプロダクトであって、
特定の定義を備えたシフトレジスタファイル用の入力ソースコードをパースするためのコンピュータプログラムコード手段と、
特定の定義を備えた前記シフトレジスタファイルのシフト間隔を決定するためのコンピュータプログラムコード手段と、
特定の定義を備えた前記シフトレジスタファイルが前に生成されているかどうかを判定するためのコンピュータプログラムコード手段と、
特定の定義を備えた前記シフトレジスタファイルが前に生成されていない場合には、特定の定義を備えた前記シフトレジスタファイルを生成するためのコンピュータプログラムコード手段と、
特定の定義を備えた前記シフトレジスタファイルにアクセスするシフトレジスタファイル制御信号を生成するためのコンピュータプログラムコード手段と、
を含むコンピュータプログラムプロダクト。
【請求項４０】
ハイレベル合成コンパイラにおけるシフトレジスタファイルを自動生成するための、かつ請求項１から３４のいずれか一項に記載の方法に従って動作可能な、コンピュータ可読媒体に記録されたコンピュータプログラムを有するコンピュータプログラムプロダクト。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタル回路におけるハイレベル合成コンパイラ用のシフトレジスタファイルの自動生成に関する。
【背景技術】
【０００２】
１チップに搭載できるゲート数を増加させる技術が、著しく進歩した。短期間で効率的にデジタル回路を設計および開発するために、ハイレベルな合成によって、超大規模集積回路（ＶＬＳＩ）の動作記述が、構造的なレジスタ転送レベル（ＲＴＬ）インプリメンテーションに変換される。回路設計者は、回路の機能性のアルゴリズム仕様を含む動作記述から始めてもよい。ＲＴＬインプリメンテーションによって、マクロブロック（たとえば機能ユニット、レジスタ、マルチプレクサ、バス、メモリブロック等）の相互接続およびランダム論理が記述される。
【０００３】
順序回路の動作記述は、回路のサイクルごとの動作またはその構造的インプリメンテーション関して、ほとんど情報を含まなくてもよい。典型的には、ハイレベル合成（ＨＬＳ）ツールが、動作記述を、コントロールデータフローグラフ（ＣＤＦＧ）などの適切な中間フォーマットにコンパイルする。ハイレベル合成ツールは、典型的には、次のタスクの１つまたは複数を実行する。すなわち、それらは、変換、モジュール選択、クロック選択、スケジューリング、資源割り振りおよび割り当て（リソースシェアリングまたはハードウェアシェアリングとも呼ばれる）である。ハイレベル合成技術は、非特許文献１において詳細に説明された。
【０００４】
ハイレベル合成ツールのインプリメンテーションが増加するにつれて、面積の低減および低電力損失の最適化など、回路設計および開発に対するこれらのツールの効率および有効性が、回路設計者によって望まれている。通常は回路設計者によって入力される動作記述に基づいて、ハイレベル合成ツールは、特定のアルゴリズム用の定義済み要件を満足させる回路設計を提供できなければならない。
【０００５】
離散コサイン変換（ＤＣＴ）、逆離散コサイン変換（ＩＤＣＴ）、逆量子化（ＩＱ）、有限インパルス応答（ＦＩＲ）フィルタ、高速フーリエ変換（ＦＦＴ）および逆高速フーリエ変換（ＩＦＦＴ）などの一次元または二次元配列を利用する符号化および復号化アルゴリズムが、一次元または二次元シフトレジスタを用いて実行できる。このインプリメンテーションの一例が、非特許文献２に説明されているようなＪＰＥＧ標準であるが、これは、符号化および復号化のために、二次元離散コサイン変換および逆離散コサイン変換をそれぞれ利用する。しかしながら、従来のシフトレジスタにおいて遭遇する問題は、それらを実行するのに必要な論理回路の数である。シフトレジスタファイルにおいてレジスタの数が増加するにつれて、必要な論理回路もまた増加する。
【０００６】
図１は、各レジスタのアドレスを復号化するために大きなマルチプレクサを用いるシフトレジスタファイルのインプリメンテーションを示す。大きなマルチプレクサは、チップ面積の著しい増加の一因となる。１つの特定のレジスタが読み出されるかまたは書き込まれるたびに、マルチプレクサは、復号化したアドレスに従い、その入力レジスタのうちの１つを出力レジスタに出力する。符号化および復号化アルゴリズムインプリメンテーションの動作を利用して、ハイレベル合成コンパイラのための効率的なシフトレジスタファイル生成が考案された。
【非特許文献１】ダニエル  ガジスキイ（Ｄａｎｉｅｌ  Ｇａｊｓｋｉ）、ニキル  ダット（Ｎｉｋｉｌｌ  Ｄｕｔｔ）、アレン  ウー（Ａｌｌｅｎ  Ｗｕ）、スティーブ  リン（Ｓｔｅｖｅ  Ｌｉｎ）著「Ｈｉｇｈ−Ｌｅｖｅｌ  Ｓｙｎｔｈｅｓｉｓ：Ｉｎｔｒｏｄｕｃｔｉｏｎ  ｔｏ  Ｃｈｉｐ  ａｎｄ  Ｓｙｓｔｅｍ  Ｄｅｓｉｇｎ（ハイレベル合成：チップおよびシステム設計入門）」、Ｋｌｕｗｅｒ  Ａｃａｄｅｍｉｃ  Ｐｕｂｌｉｓｈｅｒｓ、１９９２年
【非特許文献２】ワラス（Ｗａｌｌａｃｅ）著、「Ｔｈｅ  ＪＰＥＧ  ｓｔｉｌｌ  ｐｉｃｔｕｒｅ  ｃｏｍｐｒｅｓｓｉｏｎ  ｓｔａｎｄａｒｄ（ＪＰＥＧ静止画像圧縮標準）」、ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｃｏｎｓｕｍｅｒ  Ｅｌｅｃｔｒｏｎｉｃｓ、３４巻、第４号、３０から４４ページ、１９９１年４月
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来のシフトレジスタファイルにおいてレジスタの数が増加するにつれて、必要な論理回路もまた増加し、シフトレジスタファイルの生成が容易でない。そこで本発明では、シフトレジスタファイルの生成を容易にすることを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一態様によれば、ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成する方法が提供される。この方法には、シフトレジスタファイルの特定の定義のための入力ソースコード、ならびに特定のシフトレジスタファイルのシフトレジスタファイル名、シフトレジスタファイルサイズ、シフトレジスタファイル読み出しアクセス順序およびシフトレジスタファイル書き込みタイミングを指示する複数のコンパイラディレクティブをパースすることが含まれる。この方法にはまた、自動的な各読み出しまたは書き込み後に、特定の定義を備えたシフトレジスタファイルのシフト間隔を決定することが含まれる。さらに、この方法には、特定の定義を備えたシフトレジスタファイルが生成されているかどうかを判定して、それが生成されていない場合には、特定の定義を備えたシフトレジスタファイルを生成し、かつ特定の定義を備えたシフトレジスタファイルにアクセスするシフトレジスタファイル制御信号を生成することが含まれる。この方法には、一次元的または二次元的な仕方で読み出すかまたは書き込むために、特定の定義を備えたシフトレジスタファイルにアクセスすることがさらに含まれる。
【０００９】
本発明の別の態様によれば、ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための装置が提供される。この装置には、シフトレジスタファイルの特定の定義のために入力ソースコードをパースするための手段、ならびに特定のシフトレジスタのシフトレジスタファイル名、シフトレジスタファイルサイズ、シフトレジスタファイル読み出しアクセス順序およびシフトレジスタファイル書き込みタイミングを指示するコンパイラディレクティブ手段が含まれる。この装置にはまた、自動的な各読み出しおよび書き込み後に、特定の定義を備えたシフトレジスタファイルのシフト間隔を決定することが含まれる。さらに、この装置には、特定の定義を備えたシフトレジスタファイルが生成されているかどうかを判定する手段、およびそれが生成されていない場合には、特定の定義を備えたシフトレジスタファイルを生成するための手段が含まれる。また、この装置には、特定の定義を備えたシフトレジスタファイルにアクセスするシフトレジスタファイル制御信号を生成するための手段が含まれる。この装置には、一次元的または二次元的な仕方で読み出すかまたは書き込むために、特定の定義を備えたシフトレジスタファイルにアクセスするための手段がさらに含まれる。
【００１０】
本発明のさらなる態様によれば、第１の態様の方法に従って動作可能なハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための装置が提供される。
【００１１】
本発明のさらに別の態様によれば、ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための、コンピュータ可読媒体に記録されたコンピュータプログラムを有するコンピュータプログラムプロダクトが提供される。コンピュータプログラムプロダクトには、シフトレジスタファイルの特定の定義のための入力ソースコードをパースするためのコンピュータプログラムコード手段、ならびに特定のシフトレジスタファイルのシフトレジスタファイル名、シフトレジスタファイルサイズ、シフトレジスタファイル読み出しアクセス順序およびシフトレジスタファイル書き込みタイミングを指示するコンパイラディレクティブ手段が含まれる。このプロダクトにはまた、自動的な各読み出しおよび書き込み後に、特定の定義を備えたシフトレジスタファイルのシフト間隔を決定するための手段が含まれる。さらに、このプロダクトには、特定の定義を備えたシフトレジスタファイルが生成されているかどうかを判定する手段、およびそれが生成されていない場合には、特定の定義を備えたシフトレジスタファイルを生成するための手段が含まれる。このプロダクトには、特定の定義を備えたシフトレジスタファイルにアクセスするシフトレジスタファイル制御信号を生成するためのコンピュータプログラムコード手段がさらに含まれる。このプロダクトには、一次元的または二次元的な仕方で読み出すかまたは書き込むために、特定の定義を備えたシフトレジスタファイルにアクセスするためのコンピュータプログラムコード手段がさらに含まれる。
【００１２】
また本発明のさらなる態様によれば、第１の態様の方法に従って動作可能な、ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための、コンピュータ可読媒体に記録されたコンピュータプログラムを有するコンピュータプログラムプロダクトが提供される。
【発明の効果】
【００１３】
本発明の実施形態を用いてハイレベル合成ツールに対話型インターフェースを提供して、開発要件およびアルゴリズム要件の取り合わせのために、シフトレジスタファイルの定義を指定し、かつチップ開発者によって指定された範囲内にある特定の定義を備えたシフトレジスタファイルを生成することができる。
【００１４】
本発明によれば、シフトレジスタファイルを自動生成することが出来るので、効率的に必要な回路を得ることが出来る。
【発明を実施するための最良の形態】
【００１５】
本発明を、添付の図面を用いて説明するが、発明はこれらの図面に限定されるものではない。
記載した実施形態は、ハイレベル合成におけるシフトレジスタファイルハードウェアの自動生成と呼ぶことができるものを用いる。本実施形態はコンパイラディレクティブを用いて、入力ソースコードで用いられるシフトレジスタファイルの定義を与え、かつ指定された定義に基づいてシフトレジスタファイルハードウェアを自動的に生成する。
【００１６】
本発明の記載した実施形態は、ハイレベル合成のスケジューリング段階およびデータパス割り振り段階の一部であり、達成すべきタスクとして、シフトレジスタファイルの自動生成がある。開発者は、シフトレジスタファイルを、複数のコンパイラディレクティブを通して生成するかどうかを決定できる。さらに、開発者は、シフトレジスタファイルを読み出すかまたはそれに書き込むために、２セットの組み込み関数を通してシフトレジスタファイルにアクセスするように決定することができる。
【００１７】
複数のコンパイラディレクティブは、シフトレジスタファイルの特定の定義を設定し、かつシフトレジスタファイル名、シフトレジスタファイルサイズ、シフトレジスタファイル読み出しアクセス順序およびシフトレジスタファイル書き込みタイミングを含んでいる。特定の定義を備えたシフトレジスタファイルにアクセスするための２セットの組み込み関数を用いて、特定の定義を備えたシフトレジスタファイルを読み出すかまたはそれに書き込むかを決定することができる。
【００１８】
チップ面積を低減することにおいては劣る複雑なアドレスジェネレータなしに、記載した実施形態を用いて、シフトレジスタファイルアクセスからなるＲＴＬ設計を生成することができる。開発者は、チップ要件およびアルゴリズム要件に従い、ＲＴＬ設計におけるシフトレジスタファイルのインプリメンテーションを記述できる。
【００１９】
図２は、開発者が与えたシフトレジスタファイルの特定の定義に基づいて、自動的にシフトレジスタファイルを生成するための、本発明における一実施形態のオペレーションに関する概略的フローチャートである。
【００２０】
回路の動作記述が、入力として提供される（ステップＳ１００）。これは、機械によってか、またはキーボードもしくはグラフィカルユーザインターフェースなどのインターフェースを用いてユーザが入力してもよい。配列定義は、ソースコードにおいて指定された複数のコンパイラディレクティブを通して入力される（ステップ１０１）。
【００２１】
動作記述および配列定義は、ハイレベル合成コンパイラによってパースされる（ステップ１０２）。中間表現がまた、いくつか周知の方法のうち任意の１つによって、最適化される（ステップ１０３）。中間表現を最適化する普通の技術には、ソフトウェアパイプライン方式、ループ展開、命令並列化（ｉｎｓｔｒｕｃｔｉｏｎ  ｐａｒａｌｌｅｌｉｚｉｎｇ）スケジューリング、フォースディレクティッド（ｆｏｒｃｅ−ｄｉｒｅｃｔｅｄ）スケジューリングなどが含まれる。通常、これらの方法を協同して適用し、中間表現を最適化する。
【００２２】
生成されるシフトレジスタファイルのシフト間隔は、スケジューリング段階中に計算される（ステップ１０４）。シフトレジスタファイルのタイミング間隔を他のオペレーションおよび変数と一体化し、スケジューリングされたデータフローグラフ（ＤＦＧ）を生成する。データフローグラフ表現は、コンパイルされた入力動作記述を用いて、スケジューリングされる（ステップＳ１０５）。データパスは、クリーク分割、左エッジアルゴリズム、重み付けバイパータイト（ｂｉｐａｒｔｉｔｅ）アルゴリズムなどのいくつか周知の方法のうち任意の１つを用い、スケジューリングされたＤＦＧに基づいて割り振られる。データパス割り振りにおいては、モジュール割り振り（ステップ１０６）が最初に完了され、シフトレジスタファイル生成（ステップ１０７）およびレジスタ割り振り（ステップ１０８）が続く。
【００２３】
シフトレジスタファイルハードウェアは、パースされた入力配列定義（Ｓ１０１）およびシフトレジスタファイルの計算されたシフト間隔（Ｓ１０４）に基づいて生成される（ステップＳ１０７）。パースされた入力配列定義には、シフトレジスタファイル名、シフトレジスタファイルサイズ、シフトレジスタファイル読み出しアクセス順序およびシフトレジスタファイル書き込みタイミングが含まれる。シフトレジスタファイル読み出しアクセス順序およびシフトレジスタファイル書き込みタイミングを用いて、レジスタファイルを読み書きするアクセス順序を指定する。シフトレジスタファイルのシフト間隔を用いて、各書き込みまたは読み出しの後、いつシフトレジスタファイルをシフトすべきであるかを指定する。シフトレジスタファイルハードウェア生成は、特定の定義を備えたシフトレジスタファイルが、パースされた入力配列定義および２セットの組み込み関数に従って、生成および／またはアクセスされたときに停止する。
【００２４】
コンパイラディレクティブ
図３は、コンパイラディレクティブおよび組み込み関数を用いて、特定のシフトレジスタファイル生成を定義し、そのパラメータを指定する実例である。複数のコンパイラディレクティブによって、回路開発者は、シフトレジスタファイルの自動生成に対する微細な制御を与えられる。複数のコンパイラディレクティブは、関数のソースコードの初めに挿入されて、ユーザが、シフトレジスタファイル名、シフトレジスタファイルサイズ、シフトレジスタファイル読み出しアクセス順序およびシフトレジスタファイル書き込みタイミングを指定するのを可能にする。これらのコメント（プラグマ）機能によって、ユーザは、従来のシフトレジスタファイルにおけるような複雑なアドレスデコーダを必要とせずに、効率的なアドレシングでシフトレジスタファイルを指定することが可能になる。２セットの組み込み関数を用いて、シフトレジスタファイルのアクセスモードを決定することができる。
【００２５】
このような複数のコンパイラディレクティブの使用例が、Ｃソースコードで書かれ、図３に示されているが、ここでユーザは、シフトレジスタファイル名、シフトレジスタファイルサイズ、シフトレジスタファイル読み出しアクセス順序およびシフトレジスタファイル書き込みタイミングを定義する。シフトレジスタファイル読み出しアクセス順序およびシフトレジスタ書き込みタイミングは、それぞれ、＿ｒｅａｄ＿ｓｈｉｆｔ＿ａｒｒａｙ（）およびｗｒｉｔｅ＿ｓｈｉｆｔ＿ａｒｒａｙ（）組み込み関数の前に指定されなければならない。シフトレジスタ読み出しアクセス順序および＿ｒｅａｄ＿ｓｈｉｆｔ＿ａｒｒａｙ（）組み込み関数を何度も指定して、行順序または列順序で、特定の定義を備えたシフトレジスタファイルを読み出すことができる。シフトレジスタ書き込みタイミングおよび＿ｗｒｉｔｅ＿ｓｈｉｆｔ＿ａｒｒａｙ（）組み込み関数を何度も指定して、行順序または列順序において、インデックス番号に従いランダムな順序で、特定の定義を備えたシフトレジスタファイルに書き込むことができる。
【００２６】
ｓｈｉｆｔ＿ａｒｒａｙディレクティブはシフトレジスタファイル名を指定し、ｓｈｉｆｔ＿ａｒｒａｙ＿ｓｉｚｅディレクティブはシフトレジスタファイルサイズを指定する。一次元シフトレジスタファイルにおいて、ｓｈｉｆｔ＿ａｒｒａｙ＿ｓｉｚｅディレクティブ値は、一次元配列のサイズである。一方で、二次元のＮ×Ｎシフトレジスタファイル（ここでＮは配列のサイズである）において、ｓｈｉｆｔ＿ａｒｒａｙ＿ｓｉｚｅディレクティブ値は、Ｎ×Ｎによって指定されるような配列における合計要素数になる。シフトレジスタファイルの行方向および列方向の要素数は、たとえば２×２、４×４、８×８など、同じ数にすべきである。
【００２７】
ｒｅａｄ＿ａｃｃｅｓｓ＿ｏｒｄｅｒディレクティブは、シフトレジスタファイルを読み出す方法を指定する。一次元シフトレジスタファイルにおいては、ｒｏｗ＿ｓｈｉｆｔアクセスだけが許可される。二次元シフトレジスタファイルにおいて、「行」がｒｅａｄ＿ａｃｃｅｓｓ＿ｏｒｄｅｒディレクティブに割り当てられる場合には、二次元シフトレジスタファイルは、一度に１行が読み出される。「列」がｒｅａｄ＿ａｃｃｅｓｓ＿ｏｒｄｅｒディレクティブに割り当てられる場合には、二次元シフトレジスタファイルは、一度に１列が読み出される。回路開発者が、指定した仕方で、特定の定義を備えたシフトレジスタファイルを読み出したい場合には、ｒｅａｄ＿ａｃｃｅｓｓ＿ｏｒｄｅｒディレクティブが、組み込み関数＿ｒｅａｄ＿ｓｈｉｆｔ＿ａｒｒａｙ（）と一緒に指定されなければならない。
【００２８】
ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブは、シフトレジスタファイルに書き込む方法を指定する。一次元シフトレジスタファイルにおいて、「行」がｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブに割り当てられる場合には、一次元シフトレジスタファイルは、一度に１行が書き込まれる。シフトレジスタファイルサイズに従った合計要素数を有するインデックス番号の配列が、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブに割り当てられる場合には、一次元シフトレジスタファイルは、配列において指定されたインデックス番号に従って書き込まれる。二次元シフトレジスタファイルにおいて、「行」がｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブに割り当てられる場合には、二次元シフトレジスタファイルは、一度に１行が書き込まれる。「列」がｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブに割り当てられる場合には、二次元シフトレジスタファイルは、一度に１列が書き込まれる。シフトレジスタファイルサイズに従った合計要素数を有するインデックス番号の配列が、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブに割り当てられる場合には、二次元シフトレジスタファイルは、配列において指定されたインデックス番号に従って書き込まれる。回路開発者が、指定した方法で、特定の定義を備えたシフトレジスタファイルに書き込みたい場合には、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブは、組み込み関数＿ｗｒｉｔｅ＿ｓｈｉｆｔ＿ａｒｒａｙ（）と一緒に指定されなければならない。
【００２９】
特定の定義を備えたシフトレジスタファイルのアクセスモードは、図３に示す組み込み関数によって定義される。
【００３０】
＿ｗｒｉｔｅ＿ｓｈｉｆｔ＿ａｒｒａｙ（）組み込み関数は、複数のコンパイラディレクティブによって与えられるような、特定の定義を備えたシフトレジスタファイルの書き込みアクセスモードを指定する。２つのパラメータが、＿ｗｒｉｔｅ＿ｓｈｉｆｔ＿ａｒｒａｙ（）組み込み関数に指定される。すなわち、それらは、特定の定義を備えた宛先シフトレジスタファイル、および特定の定義を備えたシフトレジスタファイルに書き込まれるソース値である。特定の定義を備えたシフトレジスタファイルに書き込むべき方法を指定するために、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブを、＿ｗｒｉｔｅ＿ｓｈｉｆｔ＿ａｒｒａｙ（）組み込み関数の関数呼び出しの前に、指定しなければならない。
【００３１】
＿ｒｅａｄ＿ｓｈｉｆｔ＿ａｒｒａｙ（）組み込み関数は、複数のコンパイラディレクティブによって与えられるような、特定の定義を備えたシフトレジスタファイルの読み出しアクセスモードを指定する。２つのパラメータが、＿ｒｅａｄ＿ｓｈｉｆｔ＿ａｒｒａｙ（）組み込み関数に指定される。すなわち、それらは、宛先変数および読み出される、特定の定義を備えたソースシフトシフトレジスタファイルである。特定の定義を備えたシフトレジスタファイルを読み出すべき方法を指定するために、ｒｅａｄ＿ａｃｃｅｓｓ＿ｏｒｄｅｒディレクティブを、＿ｒｅａｄ＿ｓｈｉｆｔ＿ａｒｒａｙ（）組み込み関数の関数呼び出しの前に、指定しなければならない。図３において、＿ｒｅａｄ＿ｓｈｉｆｔ＿ａｒｒａｙ（）組み込み関数の後の追加オペレーションを、シフトレジスタファイルのシフト間隔によって遅延する必要がある。なぜなら、シフトレジスタファイルの出力は、各シフト間隔の後で利用可能になるからである。この場合には、読み出しアクセス順序は、一度に１行であり、したがって、＿ｒｅａｄ＿ｓｈｉｆｔ＿ａｒｒａｙ（）組み込み関数の後の追加オペレーションは、シフトレジスタファイルの１行のシフト間隔だけ遅延される。
【００３２】
シフトレジスタタイミング間隔の例
図４は、定義済みのシフト機構を用いてシフトレジスタファイルに書き込むためのタイミング間隔の計算例である。シフトレジスタファイルは第１の行から書き込まれ、次に、各行が、１行だけシフトダウンされる。シフトレジスタファイルの各行に書き込むシフト間隔は、Ｎクロックサイクルである。したがって、入力レジスタＲ１、Ｒ２、Ｒ３、Ｒ４は、Ｎクロックサイクル内に同時に、シフトレジスタファイルの第１の行に書き込まれ、次に、シフトレジスタファイルは、１行だけシフトダウンされる。シフトレジスタファイルの次の書き込みは、１行のために再びＮクロックサイクルを必要とする等である。シフトレジスタファイルの全ての行がデータで書き込まれたときに、書き込みは完了する。
【００３３】
図５は、定義済みのシフト機構を用いてシフトレジスタファイルから読み出すためのタイミング間隔の計算例である。シフトレジスタファイルは、最後の行から読み出され、次に、各行が、１行だけシフトダウンされる。シフトレジスタファイルの各行を読み出すシフト間隔は、Ｎクロックサイクルである。したがって、演算論理ユニット（ＡＬＵ）を、シフトレジスタファイルからの出力が利用可能になるまで、遅延する必要がある。
【００３４】
シフトレジスタファイル生成
図６は、シフトレジスタファイル生成、およびハイレベル合成コンパイラ用の、シフトレジスタファイルの制御信号生成を示すフローチャートである。ハイレベル合成のスケジューリング段階におけるシフトレジスタシフト間隔の計算、およびデータパスにおけるモジュール割り振りの後に、シフトレジスタファイル生成が開始する。シフトレジスタファイル名、シフトレジスタサイズ、シフトレジスタ読み出しアクセス順序およびシフトレジスタ書き込みタイミングから構成される、パースされた入力配列情報（Ｓ２００）を用いて、特定の定義を備えたシフトレジスタファイルが既に生成されているかどうかを判定する（Ｓ２０１）。
【００３５】
特定の定義を備えたシフトレジスタファイルが前に生成されている場合には、特定の定義を備えたシフトレジスタファイルにアクセスする制御信号が生成される（Ｓ２０３）。特定の定義を備えたレジスタファイルが前に生成されていない場合には、特定の定義を備えたシフトレジスタファイルの生成（Ｓ２０２）が必要である。特定の定義を備えたシフトレジスタファイルが生成された後、次に、特定の定義を備えたシフトレジスタファイルにアクセスする制御信号が生成される（Ｓ２０３）。
【００３６】
特定の定義を備えたシフトレジスタファイルの制御信号を生成（Ｓ２０３）する際に、組み込み関数＿ｗｒｉｔｅ＿ｓｈｉｆｔ＿ａｒｒａｙ（）および＿ｒｅａｄ＿ｓｈｉｆｔ＿ａｒｒａｙ（）を用いて、特定の定義を備えたシフトレジスタファイルのアクセスモードが、読み出しかまたは書き込みアクセスモードかどうかを判定する。アクセスモードが読み出しアクセスモードである場合には、特定の定義を備えたシフトレジスタファイル用の読み出し制御信号の生成が必要である。アクセスモードが書き込みアクセスモードである場合には、特定の定義を備えたシフトレジスタファイル用の書き込み制御信号の生成が必要である。読み出しおよび書き込みアクセスモードの両方において、スケジューリング段階中に計算された、シフトレジスタファイルのシフト間隔を用いて、特定の定義を備えたシフトレジスタファイル用の制御信号を生成する。
【００３７】
特定の定義を備えたシフトレジスタファイル用の読み出しまたは書き込み制御信号を生成した後で、シフトレジスタファイルアクセス（Ｓ２０４）が実行できる。パースされた入力配列定義に従って、特定の定義を備えた一次元または二次元シフトレジスタファイルが、ｒｅａｄ＿ａｃｃｅｓｓ＿ｏｒｄｅｒまたはｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブによって決定される方法で、それぞれ、読み出されるかまたは書き込まれる。
【００３８】
シフトレジスタファイル制御
図７は、特定の定義を備えた一次元シフトレジスタファイル用の書き込みモード信号生成を表すブロック図を示す。書き込みモード信号を用いて、特定の定義を備えたシフトレジスタファイルの書き込みアクセスモードを制御する。特定の定義を備えた一次元シフトレジスタファイルにおいて、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブにおけるインデックス番号に従ってランダムな順序で書き込むか、または一度に１行を書き込むかどうかが、書き込みモード信号によって制御される。特定の定義を備えたシフトレジスタファイルが、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブにおけるインデックス番号に従ってランダムな方法で書き込まれる場合には、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブにおいて指示された要素番号の書き込みアドレス（３００）、および書き込みイネーブル信号（３０１）を用いて、書き込みイネーブルバッファ（３０３）を生成する。行シフト書き込みアクセス用のシフトイネーブル（３０２）が、書き込みイネーブルバッファ（３０３）と一緒に論理和をとられ、書き込みモード信号（３０４）を生成する。
【００３９】
特定の定義を備えた一次元シフトレジスタファイル用の読み出しモード信号生成は、シフトイネーブル信号によってなされる。特定の定義を備えた一次元シフトレジスタファイルは一度に１行読み出すことができるだけなので、シフトイネーブル信号を用いて、読み出しモード信号を生成する。
【００４０】
図８は、特定の定義を備えた二次元シフトレジスタファイル用の書き込みモード信号生成を表すブロック図を示す。書き込みモード信号を用いて、特定の定義を備えたシフトレジスタファイルの書き込みアクセスモードを制御する。特定の定義を備えた二次元シフトレジスタファイルにおいて、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブにおけるインデックス番号に従ってランダムな順序で書き込むか、一度に１行を書き込むか、または一度に１列を書き込むかどうかが、書き込みモード信号によって制御される。特定の定義を備えたシフトレジスタファイルがランダムな方法で書き込まれる場合には、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブにおいて指示された要素番号の書き込みアドレス（４００）、および書き込みイネーブル信号（４０１）を用いて、書き込みイネーブルバッファ（４０４）を生成する。書き込み列／行信号（４０２）は、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブから得られる値である。書き込み列／行信号（４０２）およびシフトイネーブル（４０３）を用いて、シフトイネーブルバッファ（４０５）を生成する。シフトイネーブルバッファ（４０５）は、特定の定義を備えたシフトレジスタファイルが、書き込みの後で行シフトするかまたは列シフトするかを決定する。書き込みイネーブルバッファ（４０４）は、シフトイネーブルバッファ（４０５）と一緒に論理和され、特定の定義を備えた二次元シフトレジスタファイル用の書き込みモード信号（４０６）を生成する。
【００４１】
図９は、特定の定義を備えた二次元シフトレジスタファイル用の読み出しモード信号生成を表すブロック図を示す。読み出しモード信号（５０２）は、シフトイネーブル信号（５０１）、およびｒｅａｄ＿ａｃｃｅｓｓ＿ｏｒｄｅｒディレクティブから得られる読み出し列／行信号（５００）によって生成される。読み出し列／行信号（５００）は、特定の定義を備えたシフトレジスタファイルの読み出しが、一度に１行かまたは一度に１列かどうかを決定する。シフトイネーブル信号（５０１）が、読み出し列／行信号（５００）と一緒に論理積され、読み出しモード信号（５０２）を生成する。
【００４２】
一次元シフトレジスタファイル
図１０は、ハイレベル合成コンパイラによって生成された一次元シフトレジスタファイルを示す。特定の定義を備えた一次元シフトレジスタファイル（６００）は、アクセスモード信号（６０１）、読み出しモード信号（６０２）、書き込みモード信号（６０３）および書き込みデータ（６０４）を受信する。アクセスモードが、特定の定義を備えた一次元シフトレジスタファイル（６００）を読み出すことである場合には、特定の定義を備えた一次元シフトレジスタファイル（６００）は、出力データ（６０６）および読み出しアクセス遅延（６０７）を生成する。
【００４３】
アクセスモード（６０１）は、特定の定義を備えた一次元シフトレジスタファイル（６００）が、読み出されることになっているかまたは書き込まれることになっているかどうかを判定する。特定の定義を備えた一次元シフトレジスタファイル（６００）が読み出される場合には、出力データ（６０６）が、一度に１行、出力される。読み出しモード信号（６０２）に従って、特定の定義を備えたシフトレジスタファイル（６００）が、一度に１行、読み出される。たとえば、特定の定義を備えた一次元シフトレジスタファイルの第１の要素（６１０）が最初に読み出される場合には、特定の定義を備えた一次元シフトレジスタファイル（６００）は、一度に１行、シフトアップされる（６０５）。特定の定義を備えた一次元シフトレジスタファイル（６００）の第１の要素（６１０）は、特定の定義を備えた一次元シフトレジスタファイル（６００）の最後の行へシフトされる。アクセスモードが、特定の定義を備えたシフトレジスタファイル（６００）を読み出すことである場合には、読み出しアクセス遅延（６０７）もまた生成される。読み出しアクセス遅延（６０７）は、レジスタかまたは機能ユニットに入力され、レジスタの書き込みイネーブルを判定するか、または特定の定義を備えたシフトレジスタファイルの出力データ（６０６）が利用可能になるまで動作の実行を遅らせる。
【００４４】
特定の定義を備えた一次元シフトレジスタファイル（６００）が書き込まれる場合には、出力データ（６０６）も読み出しアクセス遅延（６０７）もない。書き込みモード信号（６０３）は、特定の定義を備えた一次元シフトレジスタファイル（６００）が、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブにおける値に従ってランダムな方法でか、または一度に１行、書き込まれるべきかどうかを判定する。書き込みデータ（６０４）には、特定の定義を備えた一次元シフトレジスタファイル（６００）に書き込まれるデータが含まれる。たとえば、特定の定義を備えた一次元シフトレジスタファイル（６００）の最後の行が最初に書き込まれる場合には、特定の定義を備えた一次元のレジスタファイル（６００）は、全てのデータが特定の定義を備えた一次元シフトレジスタファイル（６００）に書き込まれるまで、一度に１行、シフトアップされる（６０５）。
【００４５】
二次元シフトレジスタファイル
図１１は、ハイレベル合成コンパイラによって生成された二次元シフトレジスタファイルを示す。特定の定義を備えた二次元シフトレジスタファイル（７００）は、アクセスモード信号（７０１）、読み出しモード信号（７０２）、書き込みモード信号（７０３）および書き込みデータ（７０４）を受信する。アクセスモードが、特定の定義を備えた二次元シフトレジスタファイル（７００）を読み出すことである場合には、特定の定義を備えた二次元シフトレジスタファイル（７００）は、出力データ（７０９）および読み出しアクセス遅延（７１０）を生成する。
【００４６】
アクセスモード（７０１）は、特定の定義を備えた二次元シフトレジスタファイル（７００）が、読み出されることになっているかまたは書き込まれることになっているかどうかを判定する。特定の定義を備えた二次元シフトレジスタファイル（７００）が読み出される場合には、出力データ（７０９）が、一度に１行かまたは一度に１列、出力される。特定の定義を備えた二次元シフトレジスタファイル（７００）が書き込まれる場合には、出力データ（７０９）も読み出しアクセス遅延（７１０）もない。
【００４７】
読み出しモード信号（７０２）は、特定の定義を備えた二次元シフトレジスタファイル（７００）を、一度に１行かまたは一度に１列、読み出すべきかどうかを決定する。たとえば、特定の定義を備えた二次元シフトレジスタファイル（７００）が第１の行（７０７）から読み出される場合には、特定の定義を備えた二次元シフトレジスタファイル（７００）は、一度に１行、シフトアップされる（７０６）。特定の定義を備えた二次元シフトレジスタファイル（７００）が、第１の列（７０８）から読み出される場合には、特定の定義を備えた二次元シフトレジスタファイル（７００）は、一度に１列、左シフトされる（７０５）。
【００４８】
書き込みモード信号（７０３）は、特定の定義を備えた二次元シフトレジスタファイル（７００）に、図１１に示すように一度に１行かまたは一度に１列、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブに従ってランダムな方法で、書き込むべきかどうかを決定する。特定の定義を備えた二次元シフトレジスタファイル（７００）が、ｗｒｉｔｅ＿ｔｉｍｉｎｇ＿ａｒｒａｙディレクティブに従ってランダムな方法で書き込まれる場合には、書き込みデータ（７０４）は、書き込みモード信号（７０３）における書き込みアドレスに従ってランダムに書き込まれる。特定の定義を備えた二次元シフトレジスタファイル（７００）の最後の行が、最初に書き込まれる場合には、特定の定義を備えた二次元シフトレジスタファイル（７００）は、全てのデータが、特定の定義を備えた二次元シフトレジスタファイル（７００）に書き込まれるまで、一度に１行シフトアップされる（７０６）。特定の定義を備えた二次元シフトレジスタファイル（７００）の最後の列が、最初に書き込まれる場合には、特定の定義を備えた二次元シフトレジスタファイル（７００）は、全てのデータが、特定の定義を備えた二次元シフトレジスタファイル（７００）に書き込まれるまで、一度に１列、左シフトされる。
【００４９】
シフトレジスタファイルインプリメンテーションの例
図１２は、前に図１１で示した定義済みのシフト機構を用いた二次元シフトレジスタファイルインプリメンテーション（７２０）の実例である。特定の定義を備えた二次元シフトレジスタファイルは、１つの大きなマルチプレクサの代わりに、多くの２対１マルチプレクサを用いて実現される。この種のインプリメンテーションは、複雑なアドレスデコーダの除去により、結果として回路面積の著しい低減をもたらす。図１２において、特定の定義を備えたシフトレジスタファイルは、最後の列から開始して、一度に１列、入力を受け取り、次に、１列だけ左シフトされる。特定の定義を備えたシフトレジスタファイルはまた、最後の行から開始して、一度に１行、入力を受け取り、次に、１行だけシフトアップされる。特定の定義を備えたシフトレジスタファイルは、第１の列から開始して一度に１列を出力し、次に、１列だけ左シフトされる。特定の定義を備えたシフトレジスタファイルはまた、第１の行から開始して一度に１行を出力し、次に、１行だけシフトアップされる。
【００５０】
たとえば図１０で概略的に示したように、例示的な実施形態の装置およびプロセスは、コンピュータシステム（８００）で実行することができる。本実施形態は、たとえば、コンピュータシステム（８００）内で実行されかつコンピュータシステム（８００）に例示的な実施形態の方法を実行するように命令するコンピュータプログラムなど、ソフトウェアとして実現してもよい。
【００５１】
コンピュータシステム（８００）には、コンピュータモジュール（８０１）、キーボード（８０２）およびマウス（８０３）などの入力モジュール、ならびにディスプレイ（８０４）およびプリンタ（８０５）などの複数の出力装置が含まれる。
【００５２】
コンピュータモジュール（８０１）は、適切なトランシーバ装置（８０７）を介してコンピュータネットワーク（８０６）に接続され、たとえば、インターネットまたはローカルエリアネットワーク（ＬＡＮ）もしくはワイドエリアネットワーク（ＷＡＮ）などの他のネットワークシステムへのアクセスを可能とする。
【００５３】
この例におけるコンピュータモジュール（８０１）には、プロセッサ（８０８）、ランダムアクセスメモリ（ＲＡＭ）（８０９）およびリードオンリーメモリー（ＲＯＭ）（８１０）が含まれる。コンピュータモジュール（８０１）にはまた、多数の入力／出力（Ｉ／Ｏ）インターフェース、たとえば、ディスプレイ（８０４）へのＩ／Ｏインターフェース（８１１）、キーボード（８０２）へのＩ／Ｏインターフェース（８１２）、マウス（８０３）へのＩ／Ｏインターフェース（８１５）、およびプリンタ（８０５）へのＩ／Ｏインターフェース（８１６）が含まれる。チップ設計者は、たとえばキーボード（８０２）を用い、アルゴリズムインプリメンテーションの要件および必要に従って、シフトレジスタファイルの定義を指定してもよい。
【００５４】
コンピュータモジュール（８０１）の構成要素は、典型的には、相互接続されたバス（８１３）介し、関連技術分野の熟練者に周知の方法で通信する。
【００５５】
アプリケーションプログラムは、典型的には、ＣＤ−ＲＯＭかフロッピーディスクなどのデータ記憶媒体において符号化されてコンピュータシステム（８００）のユーザに供給され、データ記憶装置（８１４）の対応するデータ記憶媒体ドライブを用いて読み出される。アプリケーションプログラムは、その実行の際に、プロセッサ（８０８）によって読み出され制御される。プログラムデータの中間記憶装置は、ＲＡＭ（８０９）を用いて実現してもよい。
【００５６】
ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための方法および装置は、複数のコンパイラディレクティブを利用する。レジスタファイル用の効率的なシフト機構の自動生成を用いれば、ハイレベル合成コンパイラによって生成される回路設計により、面積の低減がもたらされる。なぜなら、様々なレジスタに記憶されたデータにアクセスするためのアドレスジェネレータが、相当に単純化されるかまたは必要とされないからである。離散コサイン変換（ＤＣＴ）、逆離散コサイン変換（ＩＤＣＴ）、逆量子化（ＩＱ）、有限インパルス応答（ＦＩＲ）フィルタ、高速フーリエ変換（ＦＦＴ）およびなどの一次元または二次元配列を利用する符号化および復号化アルゴリズムは、ハイレベル合成コンパイラを用いることにより効率的に実行することができる。レジスタファイルのシフト機構およびシフトレジスタファイルの自動生成を用いることにより達成される相当な面積の低減によって、さらに、回路設計における決定的要因である、製造コストを低減し、市場投入までの期間を短縮することができる。
【００５７】
上記の実施形態は、たとえばデコーダかまたはエンコーダのための電子回路用のハイレベル合成コンパイラのためのシフトレジスタファイルの自動生成に関して説明されている。しかしながら、説明したプロセスは、光学／光子回路などの他の回路用のハイレベル合成コンパイラにおけるシフトレジスタファイルの自動生成のために用いることが可能であり、これは、当業者には容易に理解されるであろう。
【００５８】
ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための方法および装置が、前述の仕方で開示された。いくつかの実施形態のみを開示したが、しかし、この開示を考慮すれば、本発明の範囲から逸脱することなく、多数の変更および／または修正が可能であることが、当業者には明らかであろう。
【産業上の利用可能性】
【００５９】
本発明は、ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための方法および装置に利用可能である。
【図面の簡単な説明】
【００６０】
【図１】従来のシフトレジスタファイルアクセスにおいて用いられる大きなマルチプレクサの実例である。
【図２】本発明における一実施形態のオペレーションに関する概略的フローチャートである。
【図３】コンパイラディレクティブおよび組み込み関数を用いて、特定のシフトレジスタファイル生成を定義し、かつそのパラメータを指定する実例である。
【図４】定義済みのシフト機構を用いた、シフトレジスタファイルに書き込むタイミング間隔の実例である。
【図５】定義済みのシフト機構を用いた、シフトレジスタファイルから読み出すタイミング間隔の実例である。
【図６】ハイレベル合成コンパイラ用のシフトレジスタファイル生成およびその制御信号生成を示すフローチャートである。
【図７】一次元シフトレジスタファイル用の書き込みモード信号生成を示すブロック図である。
【図８】二次元シフトレジスタファイル用の書き込みモード信号生成を示すブロック図である。
【図９】二次元シフトレジスタファイル用の読み出しモード信号生成を示すブロック図である。
【図１０】ハイレベル合成コンパイラによって生成された一次元シフトレジスタファイルの実例である。
【図１１】ハイレベル合成コンパイラによって生成された二次元シフトレジスタファイルの実例である。
【図１２】定義済みのシフト機構を用いた二次元シフトレジスタファイルインプリメンテーションの実例である。
【図１３】例示的な実施形態に関連する装置およびプロセスを実行するためのコンピュータシステムの実例である。
【符号の説明】
【００６１】
Ｓ１００  動作記述の入力
Ｓ１０１  配列定義の入力
Ｓ１０２  動作記述および配列定義のパーシング
Ｓ１０３  中間表現の最適化
Ｓ１０４  シフトレジスタファイルシフト間隔の計算
Ｓ１０５  データフローグラフ表現のスケジューリング
Ｓ１０６  モジュールの割り振り
Ｓ１０７  シフトレジスタファイルの生成
Ｓ１０８  レジスタの割り振り
Ｓ２００  パースされた入力配列情報
Ｓ２０１  シフトレジスタファイルは既に生成されているかの判定
Ｓ２０２  特定の定義を備えたシフトレジスタファイルの生成
Ｓ２０３  シフトレジスタファイルアクセス制御信号の生成
Ｓ２０４  シフトレジスタファイルアクセス
３００  書き込みアドレス
３０１  書き込みイネーブル信号
３０２  シフトイネーブル
３０３  書き込みイネーブルバッファ
３０４  書き込みモード信号
４００  書き込みアドレス
４０１  書き込みイネーブル信号
４０２  書き込み列／行信号
４０３  シフトイネーブル
４０４  書き込みイネーブルバッファ
４０５  シフトイネーブルバッファ
４０６  書き込みモード信号
５００  読み出し列／行信号
５０１  シフトイネーブル信号
５０２  読み出しモード信号
６００  特定の定義を備えた一次元シフトレジスタファイル
６０１  アクセスモード信号
６０２  読み出しモード信号
６０３  書き込みモード信号
６０４  書き込みデータ
６０５  一度に１行シフトアップ
６０６  出力データ
６０７  読み出しアクセス遅延
７００  特定の定義を備えた二次元シフトレジスタファイル
７０１  アクセスモード信号
７０２  読み出しモード信号
７０３  書き込みモード信号
７０４  書き込みデータ
７０５  一度に１列左シフト
７０６  一度に１行シフトアップ
７０７  第１の行
７０８  第１の列
７０９  出力データ
７１０  読み出しアクセス遅延
７２０  二次元シフトレジスタファイルインプリメンテーション
８００  コンピュータシステム
８０１  コンピュータモジュール
８０２  キーボード
８０３  マウス
８０４  ディスプレイ
８０５  プリンタ
８０６  コンピュータネットワーク
８０７  トランシーバ装置
８０８  プロセッサ
８０９  ランダムアクセスメモリ
８１０  リードオンリーメモリー
８１１  ディスプレイへのＩ／Ｏインターフェース
８１２  キーボードへのＩ／Ｏインターフェース
８１３  相互接続されたバス
８１４  データ記憶装置
８１５  マウスへのＩ／Ｏインターフェース
８１６  プリンタへのＩ／Ｏインターフェース
【図１】
2007034887.tif 000003
【図２】
2007034887.tif 000004
【図３】
2007034887.tif 000005
【図４】
2007034887.tif 000006
【図５】
2007034887.tif 000007
【図６】
2007034887.tif 000008
【図７】
2007034887.tif 000009
【図８】
2007034887.tif 000010
【図９】
2007034887.tif 000011
【図１０】
2007034887.tif 000012
【図１１】
2007034887.tif 000013
【図１２】
2007034887.tif 000014
【図１３】
2007034887.tif 000015