(57)【特許請求の範囲】
【請求項１】
アドレス発生器であって、
第１の加算器と減算器とを備える第１の処理ユニットを備え、前記第１の加算器の出力は前記減算器の第１の入力に結合され、ヌル値またはブロックサイズＫのいずれかは、符号ビットに応答して前記減算器の第２の入力に結合され、
前記第１の処理ユニットからのステージ出力を受けるために結合されて、アドレス出力を提供するように構成された第２の処理ユニットとを備え、
前記第２の処理ユニットは、ブロックサイズＫを受けて負の値を加えるように結合され、
前記ステージ出力は、前記ブロックサイズがＫの場合に、−Ｋから−１までの第１の範囲内にあり、前記アドレス出力は、０からＫ−１までの第２の範囲内にある、アドレス発生器。
【請求項２】
前記アドレス発生器は、エンコーダ、デコーダおよびコーデックからなるグループから選択された符号化デバイスの一部であり、前記アドレス発生器は、２次置換多項式インターリービングのための前記アドレス出力を提供する、請求項１に記載のアドレス発生器。
【請求項３】
前記アドレス出力は複数のアドレスシーケンスを含む、請求項２に記載のアドレス発生器。
【請求項４】
前記第１の処理ユニットおよび前記第２の処理ユニットは、それぞれ、第１の初期化値または第２の初期化値で初期化される、請求項３に記載のアドレス発生器。
【請求項５】
前記第１の初期化値は、前記複数のアドレスシーケンスのうちの第１のシーケンスのためのものであり、前記第２の初期化値は、前記複数のアドレスシーケンスのうちの第２のシーケンスのためのものである、請求項４に記載のアドレス発生器。
【請求項６】
前記アドレス出力は、０からＫ−１までのアドレスシーケンスの少なくとも一部のためのものであり、
前記第１の処理ユニットは、第１の初期化値および第２の初期化値で初期化され、
前記第２の処理ユニットは、第３の初期化値および第４の初期化値で初期化される、請求項２に記載のアドレス発生器。
【請求項７】
前記第１の処理ユニットは、
前記第１の加算器と、
前記第１の加算器に結合された第１のレジスタと、
前記第１のレジスタに結合された第１のマルチプレクサと、
前記第１のマルチプレクサおよび前記第１のレジスタに結合された前記減算器と、
前記減算器と結合されて前記ステージ出力を出力する第２のレジスタとを備え、
前記ステージ出力は、前記第１の加算器にフィードバックされる、請求項１に記載のアドレス発生器。
【請求項８】
前記第１のレジスタは第１のシーケンスを処理し、前記第２のレジスタは第２のシーケンスを同時に処理する、請求項７に記載のアドレス発生器。
【請求項９】
前記第２の処理ユニットは、
前記ステージ出力を受けるための第２の加算器と、
前記第２の加算器に結合された第３のレジスタと、
前記第３のレジスタに結合されて前記ブロックサイズＫを受けるように結合された第２のマルチプレクサと、
前記第２のマルチプレクサおよび前記第３のレジスタに結合された第３の加算器と、
前記第３の加算器に結合されて前記アドレス出力を出力する第４のレジスタとを備え、
前記ブロックサイズＫは前記第２の処理ユニットの前記第３の加算器に結合されて負の値を加え、
前記アドレス出力は前記第２の加算器の入力にフィードバックされる、請求項８に記載のアドレス発生器。
【請求項１０】
アドレスを発生させるための方法であって、
第１の処理ユニットによってステップサイズとブロックサイズとを取得するステップと、
第２の処理ユニットによってブロックサイズを取得するステップと、
前記第１の処理ユニットによって第１の初期化値を取得するとともに前記第２の処理ユニットによって第２の初期化値を取得するステップと、
前記第１の処理ユニットの第１の加算器によって前記ステップサイズを差分に加算して第１の和を提供するステップと、
前記第１の和の第１の符号ビットに応答して、前記第１の処理ユニットの減算器により、前記第１の和からヌル値または前記ブロックサイズのいずれかを減算して、他の差分を提供するステップとを備え、前記他の差分はブロックサイズがＫの場合に−Ｋから−１までの範囲内にあり、
前記第１の処理ユニットの第１のレジスタにより、前記第１の和または前記他の差分を登録して第１のステージの出力を生成するステップをさらに備え、
前記第１のステージは前記第１の処理ユニットによって与えられ、
前記他の差分を前記ステップサイズに加算するために前記他の差分を前記第１の加算器にフィードバックするステップと、
前記第２の処理ユニットの第２の加算器によって、前記第１のステージの前記出力を第３の和に加算することによって第２の和を生成するステップと、
前記第２の処理ユニットの第３の加算器によって、前記第２の和の第２の符号ビットに応答して前記ヌル値または前記ブロックサイズのいずれかを前記第２の和に加算して、他の第３の和を提供するステップとをさらに備え、前記他の第３の和は０からＫ−１までの範囲内にある、方法。
【請求項１１】
前記第２の処理ユニットの第２のレジスタによって、前記第２の和または前記他の第３の和を登録するステップと、
前記加算するステップの別の繰返しのための前記他の第３の和を前記第２の加算器にフィードバックして前記第２の和を提供するステップとをさらに備える、請求項１０に記載の方法。
【請求項１２】
前記第１の和または前記他の差分を登録するステップは、パイプライン動作のためのそれぞれのフィードバックループ内の他の差分を登録するステップを含み、前記第２の和または前記他の第３の和を登録するステップは、パイプライン動作のためのそれぞれのフィードバックループ内の前記他の第３の和を登録するステップを含む、請求項１１に記載の方法。
【請求項１３】
前記第１の和または前記他の差分を登録するステップは、パイプライン動作のためのそれぞれのフィードバックループ内の前記第１の和を登録するステップを含み、前記第２の和または前記他の第３の和を登録するステップは、パイプライン動作のためのそれぞれのフィードバックループ内の前記第２の和を登録するステップを含む、請求項１１に記載の方法。
【請求項１４】
前記ステップサイズを前記差分に加算して前記第１の和を提供するステップは、前記他の差分の前記第３の和の加算によって前記第２の和を提供するための前記加算するステップと同時に実行される、請求項１１に記載の方法。
【請求項１５】
２次置換多項式インターリービングのための前記別の第３の和を提供するステップをさらに備える、請求項１１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明は、集積回路デバイス（ＩＣ）に関する。より特定的には、本発明はＩＣによるアドレス発生に関する。
【背景技術】
【０００２】
発明の背景
プログラマブルロジックデバイス（ＰＬＤ）は、特定の論理機能を実行するようにプログラム可能な周知の種類の集積回路である。ＰＬＤの一種であるフィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、典型的にはプログラマブルタイルの列を含む。これらのプログラマブルタイルは、たとえば、入力／出力ブロック（ＩＯＢ）と、コンフィギュラブルロジックブロック（ＣＬＢ）と、専用のランダムアクセスメモリブロック（ＢＲＡＭ）と、乗算器と、デジタル信号処理ブロック（ＤＳＰ）と、プロセッサと、クロックマネージャと、ディレイロックループ（ＤＬＬ）などを含みうる。本明細書で用いられるように「含む（include）」および「含む（including）」との用語は、制限なしに含むことを意味する。
【０００３】
各プログラマブルタイルは、典型的には、プログラマブルインターコネクトおよびプログラマブルロジックの両方を含む。プログラマブルインターコネクトは、典型的には、プログラマブルインターコネクトポイント（ＰＩＰ）によって相互接続される、長さを変化させる多数のインターコネクトラインを含む。プログラマブルロジックは、プログラマブル要素を用いてユーザ設計のロジックを実現し、当該プログラマブル要素は、たとえばファンクションジェネレータ、レジスタ、数値演算ロジックなどを含み得る。
【０００４】
プログラマブルインターコネクトおよびプログラマブルロジックは、典型的には、プログラマブル要素がどのようにして構成されるかを定義するインターナルコンフィギュレーションメモリセルに、コンフィギュレーションデータのストリームをロードすることによってプログラムされる。コンフィギュレーションデータは、メモリ（たとえば外部のＰＲＯＭ）から読出されることができ、あるいは外部装置によってＦＰＧＡに書込まれることができる。そして個々のメモリセルの集合的なステータスがＦＰＧＡの機能を決定する。
【０００５】
別の種類のＰＬＤは、コンプレックスプログラマブルロジックデバイスあるいはＣＰＬＤと呼ばれるものである。ＣＰＬＤは、２以上の「機能ブロック」を含み、それらの機能ブロックは、インターコネクトスイッチマトリクスによって、ともに接続されるとともに入出力（Ｉ／Ｏ）リソースに接続される。ＣＰＬＤの各機能ブロックは、２レベルＡＮＤ／ＯＲ構造を含み、その構造は、プログラマブルロジックアレイ（ＰＬＡ）およびプログラマブルアレイロジック（ＰＡＬ）デバイスにおいて用いられる構造と同様である。ＣＰＬＤにおいては、設定データ（configuration data）は典型的には不揮発性メモリに内蔵されており、初期設定（プログラミング）シーケンスの一部として揮発性メモリにダウンロードされる。
【０００６】
これらプログラマブルロジックデバイス（ＰＬＤ）の全ての場合、デバイスの機能性は、その目的のために当該デバイスに与えられるデータビットによって制御される。データビットは揮発性メモリ（たとえばＦＰＧＡおよびいくつかのＣＰＬＤではスタティックメモリセル）、あるいは不揮発性メモリ（たとえばいくつかのＣＰＬＤにおいては、フラッシュメモリ）、あるいは、他の種類のメモリセルに記憶されうる。
【０００７】
他のＰＬＤは、金属層のような、デバイスの様々な素子をプログラム可能に接続する処理層を利用することによってプログラムされる。これらのＰＬＤは、マスクプログラマブルデバイスとして知られている。ＰＬＤは、たとえばフューズまたはアンチフーズ技術を用いるといった、他の方法でも実現されうる。「ＰＬＤ」および「プログラマブルロジックデバイス」との用語は、部分的にのみプログラム可能な包括的なデバイスと同じく、これらの例示的デバイスも含むが、それらに限定されるものではない。たとえば一種のＰＬＤは、ハードコードされた（hard-coded）トランジスタロジックと、ハードコードされたトランジスタロジックをプログラム可能に相互接続する、プログラム可能なスイッチファブリックとの組み合わせを含む。
【０００８】
ターボチャネル符号は、従来、データを符号化するために用いられる。ターボ符号は、データが受信された順番およびインターリーブされた（interleaved）順番でデータを使用する。従って、元のデータは２回用いられる。ターボチャネル符号により、それは、畳み込まれた符号を意味する。データはインターリーバ（interleaver）を用いてシャッフルされ、そのようなインターリーバはエンコーダ、デコーダ、またはエンコーダ／デコーダ（コーデック）の一部でありうる。
【０００９】
データは符号化に先立ってインターリーブされ、そして、復号のためにデインターリーブ（deinterleaved）されうる。あるコーディングでは、符号化と復号とのいずれか一方または両方を含むが、システムは、並行処理を通じて高スループットを達成する。データは一般にエンコーダによってインターリーブされ、デコーダによってデインターリーブされる。復号は符号化よりも計算での労力を要し、システム全体の高スループットを達成するためには、デコーダで並列にデインターリーブを実現可能としなければならない。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
第３世代パートナーシッププロジェクト（３ＧＰＰ）において、２次置換多項式（quadratic permutation polynomial；ＱＰＰ）インターリーバは、提案されるロングタームエボリューション（ＬＴＥ）３ＧＰＰ仕様書中に付記されて、競合のないアドレス指定を容易にする。３ＧＰＰ  ＬＴＥに関する追加の詳細は、htttp://www.3gpp.orgにおいて見つかりうる。特に、３ＧＰＰ  ＴＳ  ３６．２１２  バージョン８．３．０  技術仕様書（２００８年５月）は、チャネルコーディングと、多重化と、インターリーブとを、そのセクション５、特にチャネルインターリーバを記述するサブセクション５．１．３，５．１．４．１．１および５．２．２．８において開示する。
【００１１】
ＱＰＰインターリーバの使用は、データの個々のブロックを複数のスレッドに分解して並列に処理することを可能にする。複数の独立したデータのブロックの各々が、その処理されたスレッドを有するならば、すべてのそのようなデータブロックのそのようなスレッドを並列に処理することは、ＱＰＰインターリーバを複製することを含む。したがって、ＱＰＰインターリーバを実現するために用いられるインターリーバ回路のサイズおよび性能は、ターボチャネル符号の符号化および復号の両方の効率に影響を与えるということが理解されるべきである。
【課題を解決するための手段】
【００１２】
発明の概要
アドレス発生器の実施形態は、第１の処理ユニットと、第１の処理ユニットからのステージ出力を受けるために結合されて、アドレス出力を提供するように構成された第２の処理ユニットとを備える。ステージ出力は、ブロックサイズがＫの場合に−Ｋから−１までの第１の範囲内にあり、アドレス出力は０からＫ−１までの第２の範囲内である。
【００１３】
この実施形態において、アドレス発生器は、エンコーダ、デコーダおよびコーデックからなるグループから選択された符号化デバイスの一部であり得るが、その場合において、アドレス発生器は、２次置換多項式インターリービングのためのアドレス出力を提供する。アドレス出力は複数のアドレスシーケンスを含み得る。第１の処理ユニットと第２の処理ユニットとは、それぞれ、第１の初期化値または第２の初期化値で初期化され得る。第１の初期化値は複数のアドレスシーケンスのうちの第１のシーケンスのためのものであり得るとともに、第２の初期化値は複数のアドレスシーケンスのうちの第２のシーケンスのためのものであり得る。アドレス出力は、０からＫ−１までのアドレスシーケンスの少なくとも一部のためのものであり得る。第１の処理ユニットは、第１の初期化値および第２の初期化値で初期化され得る。第２の処理ユニットは、第３の初期化値および第４の初期化値で初期化され得る。
【００１４】
この実施形態において、第１の処理ユニットは、第１の加算器と、第１の加算器に結合された第１のレジスタと、第１のレジスタに結合された第１のマルチプレクサと、第１のマルチプレクサおよび第１のレジスタに結合された第１の減算器と、その減算器に結合されてステージ出力を出力する第２のレジスタとを備え得るが、ステージ出力は、第１の加算器へフィードバックされる。第１のレジスタは第１のシーケンスを処理可能であり、第２のレジスタは第２のシーケンスを同時に処理可能である。第２の処理ユニットは、ステージ出力を受けるための第２の加算器と、第２の加算器に結合された第３のレジスタと、第３のレジスタに結合された第２のマルチプレクサと、第２のマルチプレクサおよび第３のレジスタに結合された第３の加算器と、第３の加算器に結合されてアドレス出力を出力する第４のレジスタとを備え得るが、アドレス出力は第２の加算器の入力にフィードバックされ得る。
【００１５】
アドレスを発生させるための方法の実施形態は、ステップサイズとブロックサイズとを取得するステップと、第１の初期化値および第２の初期化値を取得するステップと、ステップサイズを差分に加算して第１の和を提供するステップと、第１の和の符号ビットに応答して、第１の和からヌル値またはブロックサイズのいずれかを減算して、他の差分を提供するステップとを備え、他の差分は、ブロックサイズがＫの場合に−Ｋから−１までの範囲内にあり、方法は、第１の和または他の差分を登録するステップと、他の差分をステップサイズに加算するために他の差分をフィードバックするステップとをさらに備える。
【００１６】
この実施形態において、方法は、他の差分を第３の和に加算することによって第２の和を生成するステップと、第２の和の符号ビットに応答してヌル値またはブロックサイズのいずれかを第２の和に加算して、他の第３の和を提供するステップとをさらに備え得るが、他の第３の和は０からＫ−１までの範囲内にある。方法は第２の和または他の第３の和を登録するステップと、加算するステップの別の繰返しのための他の第３の和をフィードバックして第２の和を提供するステップとをさらに備える。第１の和または他の差分を登録することは、パイプライン動作のためのそれぞれのフィードバックループ内の他の差分を登録するステップを含み得るが、第２の和または他の第３の和を登録するステップは、パイプライン動作のためのそれぞれのフィードバックループ内の他の第３の和を登録するステップを含み得る。第１の和または他の差分を登録するステップは、パイプライン動作のためのそれぞれのフィードバックループ内の第１の和を登録するステップを含み得るが、第２の和または他の第３の和を登録するステップは、パイプライン動作のためのそれぞれのフィードバックループ内の第２の和を登録するステップを含み得る。ステップサイズを差分に加算して第１の和を提供するステップは、他の差分の第３の和の加算によって第２の和を提供するための加算するステップと同時に実行され得る。方法は、さらに２次置換多項式インターリービングのための他の第３の和を提供するステップを備え得る。
【００１７】
添付の図面は、本発明の１以上の局面に従う例示的実施形態を示す。しかしながら、添付の図面は示された実施形態に本発明を限定するものと捉えられるべきではなく、単に説明と理解とのためのものである。
【図面の簡単な説明】
【００１８】
【図１】本発明の１以上の局面において実現され得る、コラムナ（columnar）フィールドプログラマブルゲートアレイ（ＦＰＧＡ）アーキテクチャの例示的実施形態を示す単純化したブロック図である。
【図２】インターリーバの例示的実施形態を示すブロック図である。
【図３】図２のインターリーバのアドレス発生器の例示的実施形態を示す回路図である。
【図４】図３のアドレス発生器のアドレス発生フローの例示的実施形態を示すフロー図である。
【図５】アドレス発生フローの例示的実施形態を示す擬似コードリストの図である。
【発明を実施するための形態】
【００１９】
詳細な説明
以下の説明において、多数の具体的な詳細が説明されて、本発明の具体的実施形態のより完全な説明が提供される。しかしながら当業者は、以下に示される具体的詳細のすべてがなくても本発明が実施され得ることを理解すべきである。他の例においては、周知の特徴が詳細に記述されていないが、それによって発明が不明瞭とはならない。図示を容易にするため、異なる図において用いられる同一の参照符号は、同じ要素を参照する。しかしながら代替的な実施形態において要素は異なり得る。
【００２０】
上記のように、アドバンスドＦＰＧＡは、アレイ中にいくつかの異なる種類のプログラマブルロジックブロックを含みうる。たとえば図１は、ＦＰＧＡアーキテクチャ１００を示し、ＦＰＧＡアーキテクチャ１００は、マルチギガビットトランシーバ（ＭＧＴ）１０１と、コンフィギュラブルロジックブロック（ＣＬＢ）１０２と、ランダムアクセスメモリブロック（ＢＲＡＭ）１０３と、入力／出力ブロック（ＩＯＢ）１０４と、コンフィギュレーションおよびクロックロジック(ＣＯＮＦＩＧ／ＣＬＯＣＫＳ）１０５と、デジタル信号処理ブロック（ＤＳＰ）１０６と、特殊入力／出力ブロック（Ｉ／Ｏ）１０７（たとえばコンフィギュレーションポートおよびクロックポート）と、デジタルクロックマネージャ、アナログデジタル変換器、システム監視ロジックなどといった、その他のプログラマブルロジック１０８を含む、多数の異なるプログラマブルタイルを含む。いくつかのＦＰＧＡはまた、専用のプロセッサブロック（ＰＲＯＣ）１１０を含む。
【００２１】
いくつかのＦＰＧＡにおいて、各プログラマブルタイルは、プログラマブルインターコネクト要素（ＩＮＴ）１１１を含み、そのプログラマブルインターコネクト要素は、各隣り合うタイル中の対応するインターコネクト要素への、およびそのインターコネクト要素からの標準化された接続を有する。したがって、集められたプログラマブルインターコネクト要素は、図示されたＦＰＧＡに対するプログラマブルインターコネクト構造を実現する。プログラマブルインターコネクト要素１１１はまた、図１の上部に含まれる例によって示されるように、同じタイル内のプログラマブルロジック要素へのそのプログラマブルロジック要素からの接続を含む。
【００２２】
たとえば、ＣＬＢ１０２は、単一のプログラマブルインターコネクト要素（ＩＮＴ）１１１を加えたユーザロジックを実現するためにプログラムされることが可能なコンフィギュラブルロジック要素（ＣＬＥ）１１２を含みうる。ＢＲＡＭ１０３は、１以上のプログラマブルインターコネクト要素に加えてＢＲＡＭロジック要素（ＢＲＬ）１１３を含みうる。典型的には、タイルに含まれるインターコネクト要素の数はタイルの高さに依存する。図示された実施の形態においては、ＢＲＡＭタイルは５つのＣＬＢと同じ高さを有するが、他の数（たとえば４）もまた用いられることができる。ＤＳＰタイル１０６は適切な数のプログラマブルインターコネクト要素に加えてＤＳＰロジック要素（ＤＳＰＬ）１１４を含むことができる。ＩＯＢ１０４は、プログラマブルインターコネクト要素（ＩＮＴ）１１１の１つのインスタンスに加えて入力／出力ロジック要素（ＩＯＬ）１１５の２つのインスタンスを含むことができる。当業者にとっては明らかであるように、たとえばＩ／Ｏロジック要素１１５に接続される実際のＩ／Ｏパッドは、入力／出力ロジック要素１１５の領域に限定されない。
【００２３】
図示された実施の形態において、ダイの中心近くの縦領域（図１に示す）は、コンフィギュレーション、クロックおよび他の制御ロジックのために用いられる。この列から延びる水平領域３０９は、ＦＰＧＡの幅を横切るクロックおよびコンフィギュレーション信号を分配するために用いられる。
【００２４】
図１に示されたアーキテクチャを利用するいくつかのＦＰＧＡは、ＦＰＧＡの大部分を形成する規則的な列構造を満たす、付加的なロジックブロックを含む。その付加的なロジックブロックは、プログラマブルブロックおよび／または専用ロジックとされうる。たとえば、図１に示されたプロセッサブロック１１０は、ＣＬＢおよびＢＲＡＭの複数の列に及ぶ。
【００２５】
図１は、単に例示的なＦＰＧＡアーキテクチャを示すことを意図していることに注意すべきである。たとえば、１列中のロジックブロックの数、列の相対的な幅、列の数および順序、列に含まれるロジックブロックの種類、ロジックブロックの相対的なサイズ、図１の上部に含まれる相互接続／ロジック構成は、純粋に例示的なものである。たとえば、実際のＦＰＧＡにおいては、ユーザロジックの効率的な実現を容易にするために、ＣＬＢが現れるところではどこでも、ＣＬＢの１以上の隣り合う列が典型的に含まれる。
【００２６】
上記のように、ＱＰＰインターリーバはＬＴＥ  ３ＧＰＰ仕様書において規定されて、そのようなＱＰＰインターリーバはブロックサイズＫの２次方程式モジュロ（quadratic equation modulo）として策定され得る。具体的なＱＰＰインターリーブ処理の直接的な実現は、複雑な乗算と複雑なモジュロ演算とを含むが、それらはハードウェアで実現するには極端に非効率的である。より効率的なハードウェアでの実現は、２００８年３月３１日に出願された出願番号１２／０５９，７３１（代理人整理番号  Ｘ−２７２６ＵＳ）である、ベン・Ｊ・ジョーンズ（Ben J. Jones）らによる「２次置換多項式インターリーブのためのアドレス発生（"Address Generation for Quadratic Permutation Polynomial Interleaving"）」と題された同時係属の米国出願（以下、「ジョーンズ」）に記述される。ジョーンズは、加算器、減算器およびマルチプレクサのような選択回路を用いて実現され得る回路を作成するために、２次方程式の解（quadratic formula）がどのようにして削減され得るかということを示すとともに説明している。以下においてさらに詳細に説明するように、インターリーブのためのアドレス発生のためのより一層単純化した回路は、ジョーンズに関連する選択動作を削除して、ジョーンズの多数の加算器および減算器を削減することによって得られ得る。さらに、ジョーンズと比較して、そのような回路の削減は、結果としてレジスタの数（count）を削減するが、以下の説明から、そのような単純化したアドレス発生器はジョーンズのそれと同じまたは匹敵する性能を有しているということが理解されるべきである。ジョーンズと比較される別の削減は、以下において詳細に説明されるように、初期化値が同時に適用され得るにつれて、制御ロジックがより一層単純化されることを可能にする、第１および第２のステージの間でのレジスタの削減である。
【００２７】
以下の説明はＬＴＥ  ３ＧＰＰ  ＱＰＰインターリーバおよびそのためのアドレスシーケンスに関するものであるが、他のアドレスシーケンスが用いられ得るということが理解されるべきである。ＬＴＥ  ３ＧＰＰ  ＱＰＰインターリーバは以下のように定義されるアドレスシーケンスを有する。
【００２８】
【数１】
0005242796.tif 000002
【００２９】
ここでｆ1およびｆ2は多項式の係数であり、ｘは０からＫ−１までのリニアシーケンスにおけるインクリメントであり、Ｋはブロックサイズである。ｘ番目のインターリーブドアドレスは式（１）を用いて得ることができるが、この場合、ｆ1およびｆ2は任意の整数ブロックサイズＫに対する一定の係数である。したがって、インクリメントｘのためのアドレスのシーケンスは、ｘに対して並び替えられた順序における０からＫ−１までである。シーケンスが０からＫ−１まで進むように説明されているが、シーケンスは、０から始まる必要がなく、Ｋ−１までのすべてを通る必要もない。すなわちシーケンスは、すべてのＫインクリメントに対するシーケンスの各リニアインクリメントを通って進む必要がないということを理解すべきである。さらに、シーケンスを生成するためのリニアインクリメントをスキップするためのスキップ値も存在し得る。再度、以下に詳細に説明されるように、データのブロックは並列処理のための複数のスレッドまたはストリームに分解され得るということを理解すべきである。
【００３０】
ジョーンズに示されるように、式（１）の１次微分は、
【００３１】
【数２】
0005242796.tif 000003
【００３２】
であり、式（１）の２次微分は、
【００３３】
【数３】
0005242796.tif 000004
【００３４】
である。式（２）および式（３）において、ｎは、０よりも大きい任意の整数値となり得るスキップ値である。すなわち、たとえばｎが１に等しいならば、スキップはなく、シーケンス０，１，２，…，ある数（Ｋ−１と同じ大きさであり得る）の各リニアインクリメントは、そのようなシーケンスのための最大Ｋのインターリーブドアドレスを提供するために処理される。すなわち、スキップ値ｎは、生成されたインターリーブドアドレスシーケンスにおけるストライドまたはジャンプを決定するために用いられ得る。
【００３５】
さらに、ｎが１に設定された場合、Ｋのアドレスの完全なシーケンスが生成され得る。しかしながら、ｎが１よりも大きい整数値に設定されたならば、シーケンスのアドレスの部分集合が生成され得る。たとえば、ｎが２に等しく設定されたならば、シーケンスにおけるあらゆる他のアドレスは０から始まるように生成され得る。すなわち０，２，４，…，Ｋ−２となる。式（２）および式（３）における連続項同士（successive terms）の間の差分は、それぞれ線形関数および定数であるので、回路はシーケンスのアドレスを生成するために、以下に詳細に説明されるように加算、減算および選択動作のみを用いて実現可能である。さらに、複数のシーケンス、すなわち複数のスレッドまたは、次々と処理される複数のストリームのパイプラインのため、登録動作（registering operation）のような一時的な記憶動作が追加され得る。すなわち、以下の説明から理解されるべきであるが、インターリーブドアドレスを発生させるためのスループットをより高めるために、複数のフェーズまたはシーケンスがアドレス発生器の回路での実現においてパイプライン処理されうる。代わりに、ターボ符号化処理ブロックの並列的な性質に依存して、パイプライン処理は、データの単一または複数のブロックの異なるスレッドのためのインターリーブドアドレスシーケンスを、代わりの方式で生成するために用いられ得る。すなわち、多くの異なるシーケンス開始点、すなわち、ｘおよび／またはスキップ値ｎのための多くの異なる開始点が、さまざまなデータブロックのためにサポートされ得る。シーケンスのためのアドレス発生の初期化のために、初期化値は予め決定されてメモリに記憶され得る。
【００３６】
図２は、インターリーバ２００の例示的な実施形態を示すブロック図である。インターリーバ２００は、デコーダ、エンコーダまたはコーデックの一部であり得る。より特定的には、インターリーバ２００は、ＱＰＰインターリービングのためのターボチャネル符号のような畳み込み符号と関連付けられ得る。ブロックサイズ２０１はストレージ２１０に入力され得るが、ストレージ２１０はインターリーバ２００の一部であり得るか、またはインターリーバ２００とは分離され得る。ストレージ２１０は、ルックアップテーブル、ランダムアクセスメモリまたは他の形態のストレージであり得る。さらに、ブロックサイズ２０１は、アドレス発生器２２０に入力され得る。ストレージ２１０への他の入力はスキップ値２０２であり得る。ブロックサイズ２０１およびスキップ値２０２により、初期化値２０３およびステップサイズ２０４が、アドレス発生器２２０への提供のために、ストレージ２１０から取得され得る。アドレス発生器２２０は、アドレス２２１を生成して、アドレスの１以上のシーケンスを提供する。
【００３７】
図３は、図２のアドレス発生器２２０の実施形態を示す回路図である。アドレス発生器２２０は、第１ステージのアドレスエンジン３１０と第２ステージのアドレスエンジン３２０とを含む。第１ステージのアドレスエンジン３１０は、アドレス発生のための最初のステージでありステージ出力３０２を生成する。ステージ出力３０２はアドレス２２１の少なくとも１つのシーケンスを発生させるために第２ステージのアドレスエンジン３２０に提供される。
【００３８】
第１ステージのアドレスエンジン３１０は、加算器３１１と、減算器３１２と、マルチプレクサ３１３のような選択回路とを含む。この例示的実施形態において、第１ステージのアドレスエンジン３１０はレジスタ３１４，３１５を含む。単一のストリーム／シーケンスの場合、ただ１つのレジスタ、すなわちレジスタ３１４または３１５のいずれかが第１ステージのアドレスエンジン３１０のフィードバックループ内で実現され得る。第１ステージのエンジン３１０におけるレジスタの設定は、第２ステージのエンジン３２０のレジスタの設定を反映して、繰返しでの時間的に同じ点において、特定のストリーム／シーケンスに対する値が、ステージ出力３０２からの加算器３２１への入力と一致することを確保する。しかしながら、パイプラインがスループットを高めるために用いられ得る。さらに少なくとも１つの各々のレジスタ３１４，３１５を有することによって、アドレスの２つのシーケンス、すなわち２つのスレッドまたはストリームがともに生成され得る。さらに、レジスタ３１４，３１５の各々の１つのみが図に表されているが、レジスタ３１４，３１５の各々が、１つよりも多く実装され得る。たとえば、レジスタ３１４，３１５の各々が２つ存在するならば、パイプラインでの同時並行によって、シーケンスの４つのスレッドまたはストリームと同数が生成され得る。ストリームは交互のクロック周期において生成されるということが理解されるべきである。さらに、エッジトリガフリップフロップが、交互のエッジにおいてストリームを生成するために用いられ得る。例示による明確化および制限しない目的のため、レジスタ３１４，３１５の各々の一方のみが存在するとされてもよい。
【００３９】
既に説明したように、初期化値２０３はストレージ２１０から取得され得る。これらの初期化値は初期化値Ｉ（ｘ）２０３−１および初期化値Ａ（ｘ）２０３−２として示される。
【００４０】
第２ステージのアドレスエンジン３２０は、加算器３２１と、加算器３２２と、マルチプレクサ３２３のような選択回路とを含む。さらに、パイプラインが用いられるならば、第２ステージのアドレスエンジン３２０は、少なくとも１つのレジスタ３２４と、少なくとも１つのレジスタ３２５とを含み得る。さらに、レジスタ３１４，３１５を参照して既に説明されたように、レジスタ３２４，３２５の少なくとも１つ、またはレジスタ３２４，３２５の各々の複数が存在し得る。さらに、例示による明確化および制限しない目的のため、レジスタ３２４，３２５の各々の１つが存在するとされてもよい。この点において、アドレスエンジン３１０，３２０は、３つの加算器、１つの減算器および２つの選択回路で実現され得るということが理解されるべきである。
【００４１】
初期化値Ｉ（ｘ）２０３−１は、ロード可能な加算器３１１へのロード可能な入力として提供される。レジスタ３１４，３１５，３２４，３２５の各々のクロック部に提供されるクロック信号３０１の最初のクロックサイクルにおいて、加算器３１１の出力は、シーケンスのための初期の妥当な出力として初期化値Ｉ（ｘ）２０３−１を用いる。同様に、シーケンスの最初のサイクルのため、ロード可能な加算器３２１へのロード可能な入力として与えられる初期化値Ａ（ｘ）２０３−２は、そこからの初期の妥当な出力として用いられる。
【００４２】
ステップサイズ２０４は、加算器３１１へのデータ入力として与えられる。加算器３１１への他のデータ入力はフィードバック入力として与えられるステージ出力３０２である。したがって、ステップサイズ２０４は、初期化値Ｉ（ｘ）２０３−１がそのような加算器から出力された後に、出力のために初期ステージ出力３０２と加算され得る。より特定的に図３の例示的実施形態の場合には、レジスタ３１４，３１５が存在するので、ステップ値２０４がそれに加算されるべき２クロックサイクル後（すなわち３番目のサイクル）までは、加算器３１１に適用される第１の初期化値は加算器３１１へのフィードバック３０２としてフィードバックされない。２番目のサイクルにおいて、フィードバックループ内に２つのレジスタ／パイプステージが存在する場合には、サポートされるものとしての第２のシーケンス／ストリームに、さらなる初期化値が適用され得る。
【００４３】
加算器３１１の出力はレジスタ３１４のデータ入力ポートに与えられる。レジスタ３１４の出力は、減算器３１２のプラスポートに与えられる。さらに、最上位ビット（ＭＳＢ）のような符号ビット３１６が、マルチプレクサ３１３の制御選択信号としてレジスタ３１４の出力から取得される。レジスタ３１４からのＭＳＢ出力は減算器３１２のプラスポートにも与えられるということが理解されるべきである。
【００４４】
マルチプレクサ３１３の論理０ポートは、ブロックサイズ２０１を受けるために結合されて、マルチプレクサ３１３の論理１ポートは、論理０（３３０）を受けるために結合される。ＭＳＢビット３１６が、負の値を示す論理１ならば、マルチプレクサ３１３は論理０（３３０）、すなわちヌル値を出力する。しかしながら、もし、ＭＳＢビット３１６が、レジスタ３１４の出力が正の値であることを示す論理０であるならば、マルチプレクサ３１３はブロックサイズ２０１を出力する。
【００４５】
マルチプレクサ３１３の出力は、減算器３１２のプラスポートに入力されたデータからの減算のための、減算器３１２のマイナスポートに与えられる。代わりに、マルチプレクサ３１３と減算器３１２との組合せは、ロード可能な加算器としてみなされてもよく、その場合にはロードされるべき値は、減算される（すなわちプラス入力ポートに接続される）候補であり、ロード制御ビットは、この値のＭＳＢである。したがって、もしレジスタ３１４からの出力が正であるならば、ブロックサイズ２０１の減算すなわち−Ｋは、減算器３１２の出力を負、すなわち−Ｋから−１までの範囲内とさせる。もしレジスタ３１４の出力が既に負であるならば、そのような出力への論理０（３３０）の加算は、なんら影響を及ぼさず、したがって減算器３１２の出力はレジスタ３１４の負の出力となる。したがって、減算器３１２の出力は、レジスタ３１５のデータポートへの入力のための−Ｋから−１までの範囲内にある。レジスタ３１５の出力はステージ出力３０２である。すなわち、ステージ出力３０２は−Ｋから−１までの範囲内にあり、この場合、Ｋはブロックサイズ２０１である。すなわち、第１ステージのアドレスエンジン３１０は、その範囲を負の値、すなわち−Ｋの移動分だけシフトさせる。
【００４６】
第１ステージのアドレスエンジン３１０からのステージ出力３０２は、アドレス２２１との加算のために加算器３２１のデータポートに与えられる。アドレス２２１は、レジスタ３２５からのアドレス出力であり、フィードバックアドレスとして与えられる。アドレス２２１のシーケンスは動作の間の複数のクロックサイクルから生成されるということが理解されるべきである。アドレス発生器２２０から妥当なデータが出力されるクロックサイクルにおいて、アドレス２２１はアドレスシーケンスのアドレス出力形成部を構成する。
【００４７】
初期化値Ａ（ｘ）２０３−２を出力したの地に、ロード可能な加算器３２１は、フィードバックアドレス２２１とステージ出力３０２との和を出力し得る。次のサイクルにおいて、ロード可能な加算器３１１を参照してこれまでに説明したように、そしてここでは明確さの目的のために繰返さないが、他のシーケンスのための他の初期化値となる。ロード可能な加算器３２１からの出力は、レジスタ３２４のデータポートに与えられる。レジスタ３２４の出力は加算器３２２のデータポートに与えられて、たとえばＭＳＢビット３２６のような、レジスタ３２４から出力された符号ビットが加算器３２２のデータポートに与えられるのと同様に、制御選択信号としてマルチプレクサ３２３に与えられる。
【００４８】
マルチプレクサ３２３の論理０ポートは、論理０（３３０）を受けるために結合され、マルチプレクサ３２３の論理１ポートは、ブロックサイズ２０１を受けるために結合される。ＭＳＢビット３２６が論理０である場合、すなわちレジスタ３２４の出力が正を示す場合、マルチプレクサ３２３は出力のために論理０（３３０）を選択する。しかしながら、ＭＳＢビット３２６が、レジスタ３２４の出力が負の値であることを示す論理１であるならば、マルチプレクサ３２３は出力のためにブロックサイズ２０１を選択する。
【００４９】
マルチプレクサ３２３の出力は加算器３２２のデータ入力ポートに与えられる。加算器３２２は、レジスタ３２４からの出力をマルチプレクサ３２３の出力と加算する。したがって、加算器３２２の出力は正の範囲、すなわち０からＫ−１までの範囲内にあるということが理解されるべきである。言い換えれば、アドレスエンジン３２０においてＫを除外することにより、アドレスエンジン３１０において−Ｋだけ値をシフトまたは移動させることが効果的に中和され、すなわち計算上に正味の影響が生じなくなる。
【００５０】
加算器３２２の出力は、０からＫ−１までの範囲内にあるが、レジスタ３２５のデータ入力ポートに与えられる。レジスタ３２５の出力は、加算器３２１にフィードバックされて、アドレスシーケンスの一部として用いられる、アドレス２２１である。
【００５１】
第１ステージのアドレスエンジン３１０と、第２ステージのアドレスエンジン３２０とは図１のＦＰＧＡ１００のＤＳＰ１０６とＣＬＢ１０２とのそれぞれで実現可能である。代わりに、ＣＬＢ１０２のみがエンジン３１０および３２０を実現するために用いられ得る。ＣＬＢとＤＳＰとの各々の１つで実現されたアドレスエンジンステージを有することによって、並列に動作する複数のアドレスエンジンを実現することが容易となり、各々のアドレスエンジンステージによって消費されるリソースがとても少なくなる。言い換えれば、アドレス発生器２２０を提供するために、とても少ない回路要素が用いられ得るため、ＦＰＧＡ内で複数のアドレス発生器を実現するためのより多くの機会が与えられる。
【００５２】
図３の例示的実施形態において、アドレスエンジン３１０，３２０は直列に結合されて、したがってシーケンシャルな動作を有する。しかしながら、アドレスエンジン３１０，３２０はシーケンスを処理するために同時並行的に動作されるということが理解されるべきである。すなわち、レジスタ３１４，３１５，３２４，３２５を有する例示的実施形態の場合には、妥当なアドレス２２１の前にアドレスシーケンス３２１の一部として出力される４サイクルの待ち時間（latency）を有するよりも、むしろ２サイクルの待ち時間しか存在しない。これは、図４を参照してさらに詳細に説明されるが、図４では、図３のアドレス発生器２２０のアドレス発生の例示的実施形態を示すフロー図が示される。フロー４００は図３および図４を同時に参照してさらに説明される。
【００５３】
４０１において、ブロックサイズ２０１とスキップサイズ２０２とのようなブロックサイズおよびスキップサイズが取得される。４０２において、初期化値Ｉ（ｘ）２０３−１とＡ（ｘ）２０３−２のような初期化サイズおよびステップサイズ２０４のようなステップサイズが、４０１で取得された値に応じてストレージから取得される。
【００５４】
４０３において、既に説明したように、たとえば加算器３１１によって和が生成される。４０４において、既に説明したように、加算器３２１によって和が生成される。４０３および４０４で生成された和は、同時並行的すなわち並列に生成される。
【００５５】
４０５において、４０３で生成された和が、たとえば減算器３１２によって差分を生成するために用いられる。さらに、この差分は−Ｋから−１までの範囲内にある。４０５において生成された差分は、次のサイクルにおいて、４０４での別の和を生成するために与えられる。
【００５６】
４０６において、たとえば加算器３２２によって、４０４で生成された和を用いて和が生成される。ここで、４０５での差分の生成および４０６での和の生成は、図３を参照して既に説明されたものであり、ここでは明確さのために繰返さない。さらに、４０６で生成された和の範囲は０からＫ−１までの範囲である。さらに４０６で、アドレスが、たとえばアドレス２２１として出力され得る。
【００５７】
シーケンスが完了していない場合、４０６でのアドレス出力はフィードバックされて４０４での別の和を生成する。さらに、シーケンスが完了していない場合には、４０５で生成された差分がフィードバックされて、４０３において別の和を生成する。
【００５８】
４０６での出力から、４０７においてシーケンスがインクリメントされるべきかどうかが判断され得る。ハードウェアでの実現の場合、クロック信号３０１を受信するために結合されたカウンタ（図示せず）が、ステップサイズ２０４および／またはブロックサイズ２０１に応答して、リニアシーケンスのためにプリセットされ得る。しかしながら、ファームウェアを含むソフトウェアでの実現の場合、決定がなされ得る。シーケンスがインクリメントされるべき場合には、４０８においてシーケンスがインクリメントされる。すなわち、次のクロックサイクルでの４０３および４０４において別の和を生成するために、ｘまたは後に説明するｉがインクリメントされる。したがって、動作のシーケンスは、ハードウェア、ソフトウェアまたはそれらの組合せであり得る。
【００５９】
４０７において、シーケンスがインクリメントされるべきでないということが決定されたならば、４０９において、別のシーケンスが処理されるべきかどうかが判断され得る。４０９において別のシーケンスが処理されるべきであると判断された場合、フロー４００は、そのような他のシーケンスのためのブロックサイズおよびスキップサイズを取得するために４０１に戻る。もし処理されるべきさらなるシーケンスが存在しない場合、フロー４００は４９９において終了する。
【００６０】
図５は、アドレス発生フロー５００の例示的実施形態を示す擬似コードリストである。５０１において概して示されるように、ループ５０２のために値が設定されるとともに初期化される。
【００６１】
図５の場合、ターボ符号のためブロックサイズＫは２５６に等しく、スキップ値ｎは２に等しいものとする。すなわち、５０３でブロックサイズおよびスキップサイズを設定するために、２つのフレーズまたは２つのシーケンスが同時に処理される。この例示的実施形態の場合には、シーケンスは奇数シーケンス（odd sequence）と偶数シーケンス（even sequence）である。偶数シーケンスの場合、ｘは０で始まり、奇数シーケンスの場合、ｘは１で始まる。したがって、偶数シーケンスの場合、初期化値（Ａ＿ｃａｎｄ［ｘ］）２０３−２（偶数）は、ｘ＝０での式（１）である。さらに、偶数シーケンスの場合、初期化値（Ｉ＿ｃａｎｄ［ｘ］）２０３−１（偶数）は、ｘ＝０での式（２）である。偶数シーケンスのための初期化値２０３−１および２０３−２の両方は、それぞれの定数を少なくするが、それは係数ｆ1およびｆ2が定数であるためである。
【００６２】
奇数シーケンスの場合、ｘは１で始まる。したがってｘ＝１を式（１）に代入することは、初期化値２０３−２（奇数）を生成することであり、ｘ＝１を式（２）に代入することは初期化値２０３−１（奇数）を生成することである。同様に、奇数シーケンスのための初期化値２０３−１および２０３−２の各々は、定数を少なくすることが理解されるべきである。
【００６３】
ステップサイズ２０４は式（３）に示されるようにｘには依存せず、したがってステップサイズ（ｓ）２０４は一定値である。ステップサイズ２０４と同様に、奇数シーケンスおよび偶数シーケンスのための初期化値２０３−１および２０３−２に関する一定値によって、これらがデータブロックの１以上のシーケンスに対する定数であることが理解されるべきである。この例において、２つのスレッドまたはストリームが存在するが、２よりも大きいスレッドも実現可能である。ｘはリニアシーケンスの一部としてインクリメントされるが、初期化アドレス候補（Ａ＿ｃａｎｄ［ｘ］）およびインクリメント候補（Ｉ＿ｃａｎｄ［ｘ］）は、ｘの増加ごとに進む。したがって、第１フェーズの場合、すなわち、この例では偶数シーケンスの場合、ｘは、シーケンス０，２，４，…，Ｋ−２であり、第２フェーズでは、ｘは、この例示的実施の形態において１，３，５，…，Ｋ−１の数列を有する。
【００６４】
アドレス候補はシーケンスのための第１の繰返しにおいて正であり、したがってそれは直接に出力され得る。さらに、インクリメント候補はシーケンスのための第１の繰返しにおいて正であり、したがってそこから減算されるブロックサイズを有する。すなわち、ｘ＝０の場合、偶数シーケンスのための第１のアドレス値の出力は、初期化値２０３−２（偶数）すなわち０であり、そのような第１の繰返しのための初期ステージ出力は初期化値２０３−１（偶数）からＫを減じたものである。既に説明されたような、あるサイクル待ち時間が存在し得て、したがって第１の繰返しが第１の妥当な出力を意味するということが、第１の繰返しによって理解されるべきである。第２の繰返しの場合、すなわち第２の妥当な出力であるが奇数シーケンスにとって第１の妥当な出力である場合、アドレス候補は正であり、したがって、それは直接的、すなわちＫを加えることなしに出力され得る。インクリメント候補は第２の繰返しにおいて正であり、したがってそれは、そこから減算されるブロックサイズを有する。すなわち、第２の繰返しにおいて、初期化値２０３−２（奇数）は図３のアドレス２２１として出力され、初期化値２０３−１（奇数）からＫを減じたものはステージ出力３０２として出力される。さらに、ステップサイズ２０４は、それが奇数フェーズおよび偶数フェーズの両方の場合にスキップ値ｎにのみ依存するので、初期化され得る定数である。すなわち、奇数フェーズおよび偶数フェーズの両方が同じステップサイズを有する。
【００６５】
スキップ値をｎ＝２に設定する必要はない。すなわち、より大きなスキップ値が用いられ得る、あるいは、スキップ値ｎは１に等しく設定され得る。さらに、ブロックサイズＫ＝２５６が、例示による明確化および制限しない目的のために説明されているが、２５６よりも大きい、または２５６未満のブロックサイズが用いられ得るということが理解されるべきである。さらに、明確さの目的のため、この例においては固定されたブロックサイズが用いられているが、可変のブロックサイズが用いられ得るということが理解されるべきである。すなわち、奇数シーケンスまたは偶数シーケンスを用いる必要がなく、あるいはスキップ値を用いて複数のシーケンスの間で変更する必要がない。たとえば、スキップ値は、ブロックサイズのいくつかの部分に設定され得る。リニアシーケンスが０からＫ−１までのすべてを通る必要はないが、シーケンスのある部分が処理され得る。しかしながら、例示による明確化および制限しない目的のため、０からＫ−１までのシーケンス全体がループ５０２において処理されるものとされている。
【００６６】
ｘは、スキップ値に対応する初期化値を有する必要はない。たとえば、ｘはブロックサイズの部分で再初期化され得る。Ｋ＝２５６の場合の上記の例に続き、ｘ＝Ｋ／２において再初期化されるならば、そのような処理のために初期化値２０３−２および２０３−１をそれぞれ生成するために、ｘ＝１２８が式（１）および（２）に代入される。しかしながら、第１の値、すなわちこのシーケンスではｘ＝０であることは、既に説明したとおりである。
【００６７】
５１１において、ループ５０２で、０からＫ−１まで進むに従い、インクリメントｉが、設定される。アドレス候補が負である場合、ブロックサイズＫは、５１２において示されるように、アドレス候補に加算される。インクリメント候補が正である場合、ブロックサイズＫは５１３において示されるように、減算される。
【００６８】
５１４において、現在のフェーズの次のフェーズのための次のアドレス候補が計算される。５１５において、現在のフェーズの次のフェーズのための次のインクリメント候補が計算される。５１６において、現在のフェーズのためのアドレスが出力される。この例におけるループ５０２は、０からＫ−１まで１ずつインクリメントするインクリメントｉの場合であり、５１６の後にｉがＫ−１に等しい場合、ループ５０２は５１７において終了する。
【００６９】
アドレス生成フロー５００は複数のスレッドまたはシーケンスのために説明されたが、そのようなフローが単一のシーケンスのために削減され得るということが理解されるべきであり、単一のシーケンスでは、アドレスおよびインクリメント候補の１つの組のみが取得される。さらに、２つの組よりも多い、アドレスおよびインクリメント候補の組が、２よりも多いスレッドまたはフェーズに対してインクリメントされ得るということが理解されるべきである。
【００７０】
本発明の１以上の局面に従って以上のように例示的実施形態を記載したが、本発明の１以上の局面に従う他の実施形態、および、さらなる実施形態が、続くクレームおよびその均等物によって決定される本発明の範囲から逸脱することなく考え出され得る。たとえば、上記の説明では、初期化は各エンジンの初期レジスタの前あるいは直前に位置するロジックを用いるものとされているが、初期化は各エンジンにおける任意のレジスタの前で実行され得る。すなわち、例示的実施形態は、ただ単に図３のレジスタ３１４，３２４のそれぞれの前のロード可能な加算器３１１，３２１における初期化を示しているにすぎない。初期化は、加算器３１１，３２１においてなされるものとされるが、その理由は、それらがそれぞれのマルチプレクサを含まないので、これらの加算器がより複雑とならないためである。しかしながら、初期化はロード可能な減算器３１２およびロード可能な加算器３２２によって起こり得る。あるいは、両方のストリームが順次というよりも、むしろ１度で初期化され得る。したがって、減算器３１２からの差分と加算器３２２からの和は、加算器３１１からの和として同時に第１のシーケンスのために初期化され、加算器３１２からの和は第２のシーケンスのために初期化される。また、１以上の外部ストリームを可能とするために外部のレジスタが挿入されるならば、そのようなレジスタの前にはロジックは存在せず、したがってそのようなレジスタは初期化のために用いられ得る。
【００７１】
さらに、第１のストリーム／シーケンスが第１および第３の初期化値に用いられて、第２のストリーム／シーケンスが第２および第４の初期化値に用いられるならば、そのような第１および第２のストリーム／シーケンスは、完全に互いに独立であり、各々はブロック中の任意の点において開始可能であるが、両者は同じ開始点を有していなくてもよい。しかしながら、第１のストリーム／シーケンスは、第２のストリーム／シーケンスの前後で初期化されなければならないという必要はない。さらに、第３の初期化値が第１の初期化値と同じストリーム／シーケンスに対応し、第３の初期化値が第２の処理エンジンを初期化する場合、第１の初期化値は、０とＫ−１（含む）との間の特定の開始位置で同じストリーム／シーケンスのための第１の処理エンジンを初期化するために用いられ得る。同様に、第２の初期化値および第４の初期化値は同じストリーム／シーケンスに対応する。
【００７２】
本発明は、その特定の実施形態を参照して説明されたが、当業者にとっては、説明された実施形態の変形が本発明の精神から逸脱することなくなされるということが明らかであるだろう。すなわち、発明の範囲は添付のクレームによって定義され、上記の詳細な説明によって定義されるものではない。クレームで挙げたステップはそれらステップのいかなる順序も含まず、商標はそのそれぞれの所有者の財産である。
【図１】
0005242796.tif 000005
【図２】
0005242796.tif 000006
【図３】
0005242796.tif 000007
【図４】
0005242796.tif 000008
【図５】
0005242796.tif 000009