(57)【要約】単一命令マルチプル・データ・プロセッサでの使用のための複数の単一ポート・メモリが提供される。これらは、複数の単一ポート・メモリへの同時アクセスを持ったマルチ・ポート・メモリとして作動可能である。本装置は、複数のメモリ位置のためのアクセス・リクエストを、既知の順序で、位置に送るために作動可能である。このリクエストは次に、単一ポート・メモリへのアプリケーションのために適したように、再オーダーされる。メモリは次に、アクセスされ、データは、アクセス・リクエスト・フォーマットに適合させるために再オーダーされる。
2006509284.tif 000002
【特許請求の範囲】
【請求項１】
単一命令マルチプル・データ(ＳＩＭＤ)プロセッサでの使用のために複数の単一ポート・メモリを同時に読み出すことによって、複数のメモリを、マルチ・ポート・メモリとして作動させるための方法であって、
複数のメモリ位置のためのリード・リクエストを、既知の順序でメモリ(memories)に送り、
アプリケーションのために適切であるべきリード・リクエストを、単一ポートメモリ(memories)に再オーダリングし、
メモリ(memories)をアクセスし、そして、
オリジナルのリクエストの順序にマッチさせるために、メモリ位置から読み出されたデータを再オーダリングする、
ステップを含む方法。
【請求項２】
単一のシステム・クロック・サイクルにおいて複数のメモリが読まれる、請求項１に記載の方法。
【請求項３】
リード・リクエストが、再オーダされ、メモリに適用されるまで、ＳＩＭＤプロセッサの作動を機能停止(stalling)するステップを含む、請求項１又は２に記載の方法。
【請求項４】
再オーダリング・ステップが、メモリ・リード・リクエストのストリーム上で作動する、以上のいずれかの請求項に記載の方法。
【請求項５】
再オーダリング・ステップが、定常状態モード内で作動しているときに、各クロック・サイクルでメモリ・リード・リクエストを提供する、請求項４に記載の方法。
【請求項６】
メモリ・リード・リクエストに、メモリ・ライト・リクエストに比べて、より高い優先度が与えられる、請求項１に記載の方法。
【請求項７】
単一命令マルチプル・データ(ＳＩＭＤ)プロセッサで使用するために、複数の単一ポート・メモリ(memories)に同時に書き込むことによって、複数のメモリを、マルチ・ポート・メモリとして作動させるための方法であって、
複数のメモリ位置のためのライト・リクエストを、既知の順序でメモリ(memories)に送り、
アプリケーションのために適切であるべきライト・リクエストを、単一ポートのメモリ(memories)に再オーダリングし、そして、
メモリ(memories)にアクセスする、
ステップを含む方法。
【請求項８】
複数のメモリが、単一システム・クロック・サイクルでアクセスされる、請求項７に記載の方法。
【請求項９】
リクエストが、サービスされ得るまで、バッファ内にライト・リクエストを保持するステップを含む、請求項７に記載の方法。
【請求項１０】
再オーダリング・ステップが、メモリ・ライト・リクエスト（requests）のストリーム上で作動する、請求項７に記載の方法。
【請求項１１】
再オーダリング・ステップが、定常状態モードで作動しているときに、各クロック・サイクルで各メモリにメモリ・ライト・リクエストを提供する、請求項７に記載の方法。
【請求項１２】
複数の単一ポート・メモリへの同時アクセスを持つ、ＳＩＭＤプロセッサで使用するための、マルチ・ポート・メモリとして作動可能な、複数の単一ポートメモリであって、
複数のメモリ位置のためのアクセス・リクエストを、既知の順序でメモリ(memories)に送るための手段、
アプリケーションのために適切であるべきアクセス・リクエストを、単一ポート・メモリ（memories）に再オーダリングするための手段、
メモリ（memories）にアクセスするための手段、
アクセス・リクエストに基づいてメモリ（memories）から読み取られたデータを再オーダリングするための手段、
を備える複数の単一ポートメモリ。
【請求項１３】
単一クロック・サイクルで同時にアクセス可能な、請求項１２に記載の複数の単一ポート・メモリ。
【請求項１４】
アクセス・リクエストが、リード・リクエストであり、リード・リクエストが再オーダリング手段によって再オーダー(reordered)されるまで、ＳＩＭＤプロセッサの作動を機能停止(stall)する手段を含む、請求項１２又は１３に記載の複数の単一ポート・メモリ。
【請求項１５】
再オーダリング手段が、メモリ・アクセス・リクエストのストリーム上のパイプライン・プロセッサとして作動する、請求項１２、１３、又は、１４に記載の複数の単一ポート・メモリ（memories）。
【請求項１６】
再オーダリング手段が定常状態モードで作動して、各システム・クロック・サイクルで各メモリにアクセス・リクエストを提供する、請求項１４に記載の、複数の単一ポート・メモリ（memories）。
【請求項１７】
アクセス・リクエストに優先度を割り当てる手段を含む、請求項１２から１６に記載の複数の単一ポート・メモリ。
【請求項１８】
優先度を割り当てる手段が、ライト・リクエストに比較して、リード・リクエストにより高い優先度を割り当てる、請求項１７に記載の複数の単一ポート・メモリ。
【請求項１９】
図１、２、及び３を参照して、実質的に本明細書に説明される、ＳＩＭＤプロセッサでの使用のための複数の単一ポート・メモリ。
【請求項２０】
図４から１２を参照して、実質的に本明細書に説明される、ＳＩＭＤプロセッサでの使用のために、複数の単一ポート・メモリにアクセスするための方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の単一ポート・メモリにアクセスするための方法及び装置であって、複数の単一ポート・メモリが、マルチ・ポート・メモリ・ユニットとして作動するような方法及び装置に関連する。
【背景技術】
【０００２】
特許文献１において、広い範囲のアナログ及びデジル信号フォーマットの復調をサポートするアーキテクチャが記載される。そのアーキテクチャの１つの主要な要素は、各クロック・サイクル内でマルチプル・データ・ワードへのアクセスを提供するメモリ・ユニットに密接にカップルされた、単一命令マルチプル・データ(ＳＩＭＤ)のプログラマブル・プロセッサである。当該発明の１つの実施例において、各クロック・サイクルにおいて４つの独立のデータ値をリード或いはライトすることが必要である。
特許文献２「マルチ・ポート・メモリ及びマルチプル・アーキテクチャ・ユニットを持つカスケード接続された２段の計算的ＳＩＭＤエンジン」において、いくつかの演算ユニット及びマルチ・ポート・メモリからなる、いくつかのＳＩＭＤプロセッサのアレンジメントが記載される。この特許は、如何にして、単一ポートのメモリを用いる適切なマルチ・ポート・メモリを構築するかを記載しない。
特許文献３「内部的にキャッシュされた静的ランダム・アクセス・メモリ・アーキテクチャを用いて二重ポートメモリ装置をエミュレートする方法」において、大規模の単一ポート・メモリへの二重ポート・アクセスを与えるメモリの階層的なキャッシング・アレンジメントが記載される。このアレンジメントは、特許文献１に記載されたもののようなＳＩＭＤプロセッサのために適切ではない。
特許文献４「直接データ・フローを持つマルチ・ポート・メモリ・アーキテクチャ」において、メモリ・ポートに比べて、より広いデータ・バス幅と、より速いサイクル時間を持つ大規模な単一ポート・メモリへのマルチ・ポート・アクセスを与えるアレンジメントが記載される。このアレンジメントは、特許文献１に記載されたもののようなＳＩＭＤプロセッサに適していない。
特許文献５「同じものをアクセスするマルチ・ポート・メモリ及びデータ・プロセッサ」において、連続するクロック・サイクルの上で、２つのメモリの各々に２つの入力ポートの各々を割り当てることによって、２つの独立の単一ポート・メモリへの二重ポートアクセスを与えれるアレンジメントが記載される。このアレンジメントは、特許文献１に記載されるもののようなＳＩＭＤプロセッサに適していない。
特許文献６「単一ポートのＲＡＭを用いたマルチ・ポートのメモリ・アーキテクチャ」において、バス許与信号(bus grant signals)、割り込み(interrupts)、及び、メールボックス、の組み合わせを用いて、いくつかの独立の単一ポート・メモリにマルチ・ポート・アクセスを与えるアレンジメントが記載される。このアレンジメントは、マルチプル処理層装置が、共通のメモリ領域を共有することを可能とするが、このアレンジメントは、特許文献１に記載されるもののようなＳＩＭＤプロセッサに適していない。
ここに記載される本発明の好ましい実施例は、複数の単一ポートメモリを用いる、特許文献１に記載されるタイプのプロセッサで要求されるマルチ・ポート・メモリの実現に対する効率的な構造を提供する。
特許文献１に記載されたもののようなＳＩＭＤプロセッサは、１つのクロック・サイクル内で、メモリへの、Ｎ個の独立的アクセスを提供するマルチ・ポート・メモリを必要とする。クロック・サイクル当りＮ個の同時独立アクセスを可能としている従来的なマルチ・ポートの半導体メモリは一般的に、マルチ・ポート。メモリと同じトータルの記憶キャパシティーを持つＮ個の独立の単一ポートの半導体メモリより大きい。より大きなサイズは、各メモリ・セルへのマルチプルの独立アクセスを提供するために必要とされる余計な回路に起因する。マルチ・ポート・メモリを必要とする半導体チップにおいて、メモリによって占有されるチップ面積を最小化することが望ましい。複数の単一ポート・メモリへのマルチ・ポート・アクセスを与えるアレンジメントは、所定のメモリ記憶キャパシティに対するチップ面積における大きな削減を提供し得る。
【０００３】
【特許文献１】英国特許出願番号０２２６７３２．６号公報
【特許文献２】米国特許第５，６６９，０１０号公報
【特許文献３】米国特許第６，１８９，０７３号公報
【特許文献４】米国特許第６，４３４，６７４号公報
【特許文献５】米国特許第６，２８２，５０５号公報
【特許文献６】米国特許第６，２１２，６０７号公報
【発明の開示】
【課題を解決するための手段】
【０００４】
本発明の好ましい実施例において、特許文献１に記載されるもののようなＳＩＭＤプロセッサで使用するための効率的なマルチ・ポート・メモリ構造を提供する個々のメモリにアクセスする方法を伴う複数の単一ポート・メモリのアレンジメントが提供される。ＳＩＭＤプロセッサは一般的に、他の規則的に間隔が空けられたシーケンスを計算するために、規則的に間隔が空けられたデータ・サンプルのシーケンス上で作動する。ＳＩＭＤプロセッサの作動は、再オーダリング・バッファがメモリ・リード・ポートに付着され、別個の再オーダリング・バッファがメモリ・ライト・ポートに付着された状態の、いくつかの単一ポート・メモリからなるマルチ・ポート・メモリ・ユニットを用いて、それが効率的に作動できるようなやり方で規定される。ここに記載されるアレンジメントは、メモリ・アクセスの多くのしばしば用いられる(frequently-used)パターンのために、１つのクロック・サイクルにおいて、統合された(unified)メモリ空間へのＮ個の独立アクセスを提供する。Ｎ個の独立メモリ・アクセスを提供するために、１クロック・サイクルより多くを要求するメモリ・アクセスのパターンに対して、ここに記載されるアレンジメントは、プロセッサ作動内に機能停止サイクル(stall cycles)を自動的に導入する。
【発明を実施するための最良の形態】
【０００５】
図１のＳＩＭＤプロセッサ１は、密接にカップルされた高速メモリ７とＤＭＡコントローラ２を持つ、プログラマブル・データ処理ユニット１０のアレンジメントである。この例において、２つの外部ポートが、ＤＭＡユニットを介してメモリ・ユニットへのアクセスを持つ。２つのポートは、入力ポート４と出力ポート３である。
ＳＩＭＤプロセッサ１の作動は、制御記憶部６内に保持される命令によって制御される。超長命令語(ＶＬＩＷ)命令は、制御記憶部６から取り込まれ、アドレス・ユニット９とデータ・ユニット１０の双方を制御するために、制御ユニット８によって解読される。アドレス・ユニット９は、制御ユニット８から命令を受け取ることによって、リード又はライト作動のためのリクエストを生成する。データ・ユニット１０は、制御ユニットから命令を受け取り、そのレジスタ内に保持されたデータについての作動を実行する。
データ・ユニット１０内或いはアドレス・ユニット９内のレジスタには、アドレス・ユニット９がリード・リクエストを発行する際にメモリ・ユニット７から読み出されたデータも一緒にロードされ得る。
データ・ユニット１０内又はアドレス・ユニット９のレジスタの内容は、アドレス・ユニット９がライト・リクエストを発行する際にメモリに書き込まれ得る。
アドレス・ユニット９によるリード・リクエストの生成と、レジスタ内にロードするための有効なデータの到着、の間には遅延が存在する。このメモリ・リード遅延は、メモリ・ユニット７内のデータ・パス命令パイプライン１１を用いて、データ・ユニット命令を、対応するメモリ・リード・アクセスと同じ遅延に曝す(subjecting)ことによって、プログラマから隠される。
この例においては、アドレス・ユニット９は、クロック・サイクル当り、４つの独立のリード又はライト・リクエストを発行し得る。データ・ユニット１０は、いくつかの算術作動ユニット(これらのそれぞれは、１つのクロック・サイクル内に、データの４つの独立の項目(items)について算術作動を実行出来る)を含む。
【０００６】
図２は、ＳＩＭＤプロセッサ内の、メモリ・ユニット７の接続性(connectivity)の、より詳細な概要を提供する。
入力ポート４と出力ポート３は、ＤＭＡユニット２にリクエストを発行する。そしてＤＭＡユニト２は、リード及びライト・リクエストを、メモリ・ユニット７に発行する。入力サンプルが、入力ポート４において呈示されたときに、ライト・リクエスト及び対応するデータが、ＤＭＡユニット２を介して、メモリ・ユニット７に渡される。出力ポート３に送られるべきデータは、ＤＭＡユニット２を介してメモリ・ユニット７に渡されるリード・リクエストによって得られる。もし、メモリ・ユニット７が、ＤＭＡユニット２からリクエストを受け取ったときにメモリ・ユニット７がビジーならば、メモリ・ユニット７は、発行されたＤＭＡリクエストを機能停止(stall)でき、後の時刻においてリクエストをサービスできる。出力ポート４は、出力用に要求される時刻に先立ってリクエストされたデータを保持するためのＦＩＦＯ１７を含む。出力ポートＦＩＦＯは、メモリ・ユニット７へのリクエストが、他のメモリ・アクセス・リクエストが進行されることを可能とするために、一定の時間だけ機能停止された場合であっても、要求されたときに出力データが利用可能であることを保証する。
制御ユニット８は、ロード及びストア命令を、アドレス・ユニット９に送る。次にアドレス・ユニット９は、リード命令及びライト・リクエストを、メモリ・ユニット７に送る。メモリ・ユニット７の作動は、リード・リクエストと、メモリユニット７からの有効なリード・データの到着の間に遅延が存在するようなものである。データ・ユニット１０の正しい作動は、メモリ・ユニット７からのデータの到着における遅延を補償するデータ・ユニット命令フロー内への遅延の挿入によって保証される。
データ・ユニット命令フローにおける遅延は、データ・パス命令パイプライン１１によって実現される。データ・パス命令パイプライン１１は、固定された数のクロック・サイクルだけ各データ・ユニット命令を遅延させる。ＳＩＭＤプロセッサが、機能停止無しにフル・スピードで命令（instructions）を実行しているときに、データ・パス命令パイプライン１１によって提供される遅延は、その作動に対してリクエストされたリード・データがメモリ・ユニット７から到着する際に各データ・ユニット作動が実行されることを保証する。
メモリ・ユニット７が、データ・パス命令によって要求されるリード・データを提供できないときには、データ・パス命令パイプライン１１は、データが利用可能となるまで機能停止（stalled）される。この状況は、アドレス・ユニット９からのリード・リクエストに勝る優先権を取ったＤＭＡユニット２によるメモリ・アクセスか、メモリ・ユニット７が、利用可能なクロック・サイクル数内にリクエストされたメモリ・アドレスのシーケンスにアクセス不能であるか、のいずれかに起因して発生し得る。いずれの場合にも、その結果は、ＳＩＭＤプロセッサ作動内における機能停止サイクル（stall cycle）である。
データ・パス命令パイプライン１１は、メモリ・リードの遅延とデータ・ユニット作動とのバランスをとり、ＳＩＭＤプロセッサに対するコードの書き込みを単純化する。例えばプログラマは、１つのクロック・サイクル内で以下の２つの作動を実行するための命令を書き込み得る：
・アドレス・ユニット９内のレジスタＰ内に保持されたアドレスが用いられて、データ・ユニット内のデータ・レジスタをロードするためにメモリ・ユニット７がアクセスされる。
・アドレス・ユニット９内のレジスタＰ内に保持されたアドレスが、１つ増加される。
メモリ・リードの遅延とデータ・ユニット作動のバランシングに起因して、これらの２つの作動は同時に完了し、その結果は、次の命令での利用のためにレジスタ内で利用可能である。
リード・リクエスト作動からのデータが、アドレス・ユニット９内のレジスタをロードするために用いられるときに、メモリ・リード待ち時間（latency）は、それがデータ・ユニット作動について秘匿されるようなやり方ではプログラマから秘匿され得ない。待ち時間が秘匿され得ないので、ロード・アドレス命令によってターゲットとされたアドレス・レジスタのコンテントが、ロード・アドレス命令に引き続いて固定された数の命令が発行された後に変更されることを保証することによって、その影響（effect）は最小化される。ロード・アドレスの固定された待ち時間ＦＩＦＯ１５は、メモリ・ユニット７からアドレス・ユニット９への戻りパス内に含まれ、その作動は、固定された数の命令が、ロード・アドレス命令と、ターゲット・レジスタ・コンテンツの変更、の間で発行されることを保証する。これによって、プログラマが、命令のシーケンス内で、いつ、ロード・アドレス作動が、実施されるかを正確に予測し、適切にコーディング（code）することが可能とされる。
【０００７】
図３は、メモリ・ユニット７の内部アレンジメントを示す。ＤＭＡユニット２は、１つのクロック・サイクル内に単一のリード或いはライト・リクエストを発行しうる一方、アドレス・ユニット９は、１つのクロック・サイクル内に４つのリード或いはライト・リクエストを生成し得る。４つのメモリ・アクセス・リクエストは直接、リード（reads）のためにセル・アクセス・リクエスト・アービタ２９に発行されるが、ライトの場合には、それは第１に、ライト・リクエスト・パイプライン、及び、再オーダー・ユニット２８を通過させられる。ライト・リクエスト・パイプライン２８は、データ・パス命令パイプライン１１と同じやり方で遅延バランシングを実行して、正しい、データ・パス・レジスタ及び結果２７が、記憶のために選択されることを保証する。
この例では、アドレス・ユニット９は、メモリ・ユニット７にアクセスするために、クロック・サイクル当り４つのリクエストを発行する。アクセスされるべき４つのメモリ・アドレスは、関連が無いかもしれないが、しばしば、それらは、式（１）
Ａｎ＝Ｂ＋ｎ．Ｋ    （ｎ＝０，１，２，３）      （１）
によって関連される。ここで、Ａｎは、４つのアドレスの１つであり、Ｂはベース・アドレス（base_address）であり、Ｋは、メモリ位置の間の間隔である。
もし、ＳＩＭＤプロセサが、ベクトル内の全ての要素の一定値との乗算のよな作動を実行しているならば、次にそれは、シーケンシャルな位置から読出しし、シーケンシャルな位置に書き込み、式（１）においてＫの値は１である。高速フーリエ変換（ＦＦＴ）計算のような他の作動において、Ｋの値は、２のｎ乗（ｎは何らかの数）となり得る。
メモリ・ユニット内での記憶（storage）は、ＲＡＭセル・ブロック３０内に保持される。ＲＡＭセル・ブロック３０は、０から３にナンバリングされた４つの独立のＲＡＭセルを保持する。メモリ・アドレスの、個々のＲＡＭセルへの割当ては、一般的プロセッサ作動に対するメモリ効率を最大化するように選択される。ＲＡＭセルＭは、メモリ位置４Ｎ＋Ｍを含む。ここで、Ｎは整数であり、Ｍは、０，１，２，３の値をとる。従って、４つのシーケンシャルなメモリ位置の如何なるシーケンスも、４つの独立ＲＡＭセルから、単一のサイクル（cycle）内でアクセスされ得る。
【０００８】
図４は、ベクトルの全ての（every）要素（element）を、一定値で乗算するときの場合のように、ＳＩＭＤプロセッサが、シーケンシャルなメモリ位置を読出し或いは書き込みしているときに、ＲＡＭセル０から３によって実行されるリード及びライト作動のシーケンスを示す。図４は、初期パイプライン・セットアップの後に、各ＲＡＭセルが、各（every）クロック・サイクルにおいて作動を実行していることを示し、メモリが、最大効率において使用されることを示す。
ＦＦＴを実行するときに、バタフライ作動は、２Rだけ分離されたいくつかの位置からのデータを結合する。ここで、Ｒは、整数である。ＦＦＴ計算の処理の中で、Ｒは、０と２の正数乗（positive power of two）の間の値の数をとる。Ｒ＝０の場合を除く全ての場合において、アドレス・ユニット９によって生成されるアドレスのシーケンスは、単一のクロック・サイクル内で、単一のＲＡＭセルへのマルチプル・アクセスすることを目標とする（target）。
ＦＦＴコードが、radix-４バタフライを使用するように構築することによって、ＦＦＴ計算において、機能停止サイクルは回避される。ＦＦＴの各段階において、ＦＦＴステージ（stage）内の４つのシーケンシャルのradix-４バタフライの如何なるグループも、各ＲＡＭセルへの４つのリード（reads）及び４つのライト（writes）を正確に実行するように、バタフライ実行の順序（order）がアレンジされる。
【０００９】
図５は、ＳＩＭＤプロセッサが、４つの位置のデータ間隔（spacing）の状態で、radix-４バタフライを用いてＦＦＴ計算を実行しているときに、ＲＡＭセル０から３によって実行されるリード及びライト作動（operations）のシーケンスを示す。図５は、初期パイプライン・セットアップの後に、各ＲＡＭセルが、各クロック・サイクルにおいて作動を実行していることを説明し、メモリが、最大効率で使用されていることを示す。
各ＲＡＭセルへの４つの読出しは、セル・アクセス・リクエスト・アービタ２９によって再オーダー（re-ordered）され、ＲＡＭセルから読出しされたデータは、ＲＤリターン・データ・パイプライン３１によって再び再オーダーされて、データ・ユニット１０において現れるデータが、要求された順序であることを保証する。戻りデータ・パイプラインの出力は、戻りデータ確認ユニット３２によって確認（validated）されて、関連するレジスタ・ロード及びデータ作動が、有効なデータが利用可能である際にのみ進むことを保証する。
各ＲＡＭセル・パスへの４つの書き込みは、ライト・リクエストをバッファし、データが適切なＲＡＭセルに書き込まれ得るまで、それらを保持する、ライト・リクエスト・パイプライン及び再オーダー・ユニット２８を通過する。リード・パス及びライト・パス上でのバッファリングと再オーダリングの組み合わせは、ＳＩＭＤプロセッサが、機能停止サイクルの無いメモリによって許容されるフルの速度でＦＦＴ機能を実行することを可能とする。
【００１０】
図５に示される同じメモリ・アクセシング・シーケンスが、４より大きいデータ間隔を持つ、ＦＦＴバタフライのために使用され得る。それはまた、非シーケンシャルのメモリ位置をアクセスする他のプロセッサ作動のための、効率的なメモリ利用実現するためにも用いられ得る。
ライト・リクエスト・バッファ及びレンダリング・パイプライン２８は、それが、多くのライト・リクエストを、ＲＡＭセルに書き込みしなければならない前に、当該多くのライト・リクエストを受け入れ可能で、バッファ可能である。一般的に、ライト・リクエスト・バッファ及び再オーダリング・パイプライン２８は、２０個の独立のライト・リクエスト及び関連データを保持するためのサイズにされ（sized）得る。ブロック３０内の各ＲＡＭセルへのアクセスは、セル・アクセス・リクエスト・アービタ２９によって優先化される。セル・アクセス・リクエスト・アービタ２９は、ＤＭＡユニット２からのリクエストに最も高い優先度を与え、アドレス・ユニット９からのリード・リクエストに２番目に高い優先度を与える。ＲＡＭセルが、ＤＭＡリクエスト又はライト・リクエストにサービスしていないときに、それは、ライト・リクエスト・バッファ及び再オーダリング・パイプライン２８からのライト・リクエストをサービスできる。バッファ及び再オーダリング・パイプライン３２が、更なるデータを受け入れできないときに、もし、ライト・リクエストが、アドレス・ユニット９によって発行されたならば、次に、リード・リクエストは機能停止され、ＲＡＭセル内に書き込まれるべきバッファされたライト・リクエストのためのアクセスを可能とする。一旦、新たなライト・リクエストを受け入れるために、バッファ及び再オーダリング・パイプライン２８内に十分な空間が存在すると、次に、リード・リクエストが進行することが許され、通常のプロセッサ作動が再開する。
【００１１】
図６は、ライト・リクエスト・バッファ及び再オーダリング・パイプライン２８の内部構造のための、１つの可能なアレンジメントを示し、更に、そのコンテントが、如何にして、いくつかのクロック・サイクルを通じて（over）展開（evolve）するかを示す。図６内の各セルは、ライト・リクエストを保持できる。このライト・リクエストは、それが書き込まれることになるデータの項目及びアドレスからなる。
ラベリングされたreqA,reqB,reqC及びreqC４つのセルが、１つのクロック・サイクル内で、ライト・リクエスト・バッファ及び再オーダリング・パイプライン２８に呈示される（presented）４つのライト・リクエストを保持する。このセルのグループは、ここでは、reqセルと呼ばれる。
４つのセルの４つの行（R1[0..3],R2[0..3],R3[0..3],R4[0..3]）は、再オーダーされた（re-ordered）ライト・リクエストが、セル・アクセス・リクエスト・アービタ２９に向けて伝搬する（propagate）につれて、再オーダーされた（re-ordered）ライト・リクエストを保持する。このセルのグループは、ここでは、Ｒセルと呼ばれる。
Ｒセルの列０は、ＲＡＭセル０を目標（target）とするライト・リクエストを保持するために割り当てられる。同様に、列１はＲＡＭセル１を目標とし、列２はＲＡＭセル２を目標とし、列３はＲＡＭセル３を目標とする。
Ｒセルの行Ｒ４は、ライト・リクエスト・バッファ及び再オーダリング・パイプライン２８から、セル・アクセス・リクエスト・アービタ２９に転送され得るライト・リクエストを保持する。Ｒセル内に保持された各ライト・リクエストは、それが転送出力され（transferred out）得る前に、行Ｒ４に移動せねばならない。
いずれのreqセルのコンテントもが、如何なるＲセルにも転送され得るように、４つのreqセルと１６のセルの間には完全な接続性（full connectivity）が存在し得る。或いは、設計は、接続の数を削減することによって単純化され得る。もし設計が、不必要な機能停止サイクルを回避するためのものならば、各reqセルから、Ｒセルの各列への少なくとも１つの接続が無ければならない。これは、Ｒセルが既に、転送（transfer）をブロックするリクエストを保持しない限り、如何なる４つのリクエストも、単一のクロック・サイクル（cycle）内の、Ｒセルのアレイ内に受け入れられ得ることを保証する。
【００１２】
図６は、サイクル０において、４つのセルreqｘが、Aa0,Ab0,Ac0及びAd0とラベリングされた４つの独立のリクエストを保持することを示す。ここで、第１の文字（Ａ，Ｂ，Ｃ，Ｄ等）は、一緒に発行されたリクエストのグループを特定し、第２の文字（ａ，ｂ，ｃ，ｄ）は、グループ内の個々のリクエストを特定し、最後の文字（０，１，２，３）は、ライト・リクエストによって目標とされた（targeted）ＲＡＭセルを特定する。
図６は、サイクル１において、Aa0,Ab0,Ac0及びAd0とラベリングされたライト・リクエストが、再オーダーされて、R1[0], R2[0], R3[0], R4[0]とラベリングされた記憶セル内に転送されたことを示す。これらの記憶セルの全ては、ＲＡＭセル０を目標とする保持ライト・リクエストに割当てられる。目的地（destination）ＲＡＭセルは、それらが占有する列から明白なので、０の接尾部は、リクエスト・ラベルから落とされる。Ba0,Bb0,Bc0,及びBd0とラベリングされたリクエストの新たなグループは、サイクル１内でreqセル内に転送される。
サイクル２において、リクエストAaが、ライト・リクエスト・バッファ及び再オーダリング・パイプライン２８から、セル・アクセス・リクエスト・アービタ２９に転送され、リクエストAb、Ac、Adは、列をシャッフル・ダウン（shuffle down）する。
Ｒセルの列０内のリクエストBaのための空間だけが存在するので、他のＢリクエストは、reqセル内に残り、更なるリクエストの受け入れをブロック（blocking）している。
サイクル３及び４の間、Ｒセルの列０はシャッフル・ダウンし続ける。サイクル５において、reqセルは、Ca1、Cb1、Cc1、及び、Cd1とラベリングされたリクエストの新たなグループを受け入れできる。これらのリクエストの全ては、ＲＡＭセル１を目標（target）とするので、それらは、サイクル６において（on）Ｒセルの列１に転送され、reqセルが、Da２、Db2、Dc2、及び、Dd2とラベリングされた、新たなリクエストのグループを受け入れることを自由にさせる（freeing）。
【００１３】
図８及び図９は、セル・アクセス・リクエスト・アービタ２９内のリード・リクエスト・パイプラインの作動を示す。リード・リクエストは、req[x]とラベリングされたセルのアレイ内に保持される。ここで、ｘ＝0，1，2，3である。各クロック・サイクルにおいて、セル・アクセス・リクエスト・アービタ２９は、reqの各行、特に、req[3]d,req[2]c,req[1]b,及び,req[0]a（これらの全ては、図面内でグレイで強調されている）、から１つの個々のリード・リクエストをサービスすることを試みる。これらのリード・リクエストは、以下の順序で優先度が与えられている。
1.最も高い優先度  req[3]d
2.                req[2]c
3.                req[1]b
4.最も低い優先度  req[0]a
もし、リード・リクエストが、より高い優先度のリード・リクエストの目標であるＲＡＭセル、或いは、このクロック・サイクルの上で既に異なったアクセスにコミットされた（committed）ＲＡＭセルを目標とするならば、リード・リクエストは、サービスされない。アレイreq内の各行ｋについては、行ｋ内のリード・リクエストがサービスされたときだけに、req[k]内の残りのリード・リクエストが、req[k+1]に向かって移動するようにする。
リード・リクエストが、サービスされた(serviced)ときに、ＲＡＭセル３０のブロック内のＲＡＭセルにおいてリード・アクセスが実行される。ＲＡＭセルが、RAMcell[x]とラベリングされたセルのアレイとして、図８及び９に表現される。ここで、ｘ＝0,1,2,3である。ＲＡＭセル・リードに起因するデータは、ＲＤリターン・データ・パイプライン３１に転送される(これは、ｄ［ｘ］とラベリングされたセルのアレイとして図８及び９に表現される。ここで、ｘ＝0,1,2,3である。)。ＲＡＭセルからのデータ・リードの各項目（item）が、アレイｄ内の行ｍに転送されるにつれて、その行ｍは、行ｍ＋１に向かって移動する。リード・リターン・データが、行ｄ［3］に到達するときに、それは、リード・リクエストの１つのグループに対する全てのリターン・データを保持する。
【００１４】
図８のサイクル０において、req[0]は、アドレス・ユニット９によって、その全てが同じクロック・サイクルにおいて発行された、Aa0,Ab1,Ac2,Ad2とラベリングされた４つのリード・リクエストのグループを保持する。第１の文字(Ａ,Ｂ,Ｃ,Ｄ等)は、一緒に発行されたリクエストのグループを特定(identifies)し、第２の文字(a,b,c,d)は、グループ内の個々のリクエストを特定し、最終文字(0,1,2,3)は、ライト・リクエストによって目標とされた(targeted by)ＲＡＭセルを特定する。
サイクル１において、リクエストAa０がサービスされ、ramCELL[0]のリードという結果をもたらす。Ａグループ内の残っているリクエストは、req[1]に向かって移動し、リクエストBa0,Bb0,Bc0,Bd0の新たなグループは、req[0]内に転送される。
サイクル２において、リード・リクエストAaの結果は、ＲＤリターン・データ・パイプライン３１内のセルd[0]a内に転送される。リクエストAb及びBaは、Ramセルによってサービスされ、リクエストのＡグループとＢグループの双方が前に移動し、新たなリクエスト・グループＣが、req内に転送されることを可能とする。
サイクル３及びサイクル４において、全てのリクエスト・グループが、機能停止(stalling)無しにパイプラインを通じて前に進み、サイクル４において、ＲＡＭセルの全ての４つがアクセスされ、フルのメモリ・リード能力が実現されていることを示す。この状況は、ＲＡＭセルに対するリクエストの間にコンフリクトが存在しない限り継続し得る。
サイクル５において、ＲＡＭセルが、１つより多いリード・リクエストによって目標とされたことに起因して、リード・パイプラインが機能停止する。サイクル５でサービスされるべきＲＡＭセル・リード・リクエストは、サイクル４内の強調されたreqセル内に現れ(appear)、調査すると、Db3とEa3の双方が、ＲＡＭセル３を目標とすることがわかる。リクエストDb3は最も高い優先度を持ので、このリクエストがサービスされる。リクエスト・グループＢ,Ｃ,Ｄは前に進むが、リクエスト・グループＥは、前に進まない。
サイクル５の終りにおいて、グループＡ内の全ての４つのリード・リクエストが、サービスされ、行d[3]内にリターン・データが保持される。サイクル６において、リクエスト・グループＡに対するリターン・データは、行d[3]から外に、そして、その目的地(destination)(データ・パス・レジスタ２３、又は、ロード・アドレスの固定された待ち時間ＦＩＦＯ１５かのいずれか)の中に転送される。
サイクル６において、依然として、ＲＡＭセル３に対する接続が存在する。従って、リクエスト・グループＣ及びＤだけが前に進む一方、リクエスト・グループＥは前に進まない。リクエストＥaがサービスされ、リクエスト・グループＥが前に進み、リクエスト・グループＦがパイプラインに入ることを可能とする、サイクル８まで、ＲＡＭセル３に対するコンテンション(contention)が継続する。
サイクル９は、リクエストEb及びFaが、サービスされるつれて(as)、リクエスト・グループＥ及びＦが前方に移動することを示す。図９における残りのサイクルは、全てのリード・リクエストが、同じＲＡＭセルを目標とする(targeting)ことに起因する機能停止を示す。
【００１５】
図１０は、セル・アクセス・リクエスト・アービタ２９によって実行されるメモリ・アクセス・リクエストに対する優先度付けを示す。図１０のフロー・チャートは、クロック・サイクル毎に一回実行される。ＤＭＡリード及びライト・リクエスト３２は、最も高い優先度が与えられ、そのようなリクエストが受信されたか否かの判断が、４０で為される。もし受信されたなら、次に、アクセスされたＤＭＡリード／ライト・リクエストが41で実行される。この後、そして、もし、ＤＭＡリード／ライト・リクエストが受信されていないならば、システムが、単一ステップ(single-stepped)或いはラン・モード(run mode)であるか否か、及び、システムが、ライト・パイプラインによって機能停止されていないかについても判断が為される。もし答えがＹＥＳなら次に、４３においてリード・アクセスが実行される。何故なら、これらが、次に高い優先度を与えられているからであるる。ＳＩＭＤプロセッサ１が、ラン或いは単一ステップ・モードでコードを実行し、ライト・リクエスト・パイプライン及び再オーダ・ユニット２８によって機能停止されていないときに、それらは進むことが許される。ＳＩＭＤプロセッサ１が、ライト・リクエスト・パイプライン及び再オーダ・ユニット２８によって機能停止され、リード・リクエストが禁止される場合を除いて、最も低い優先度はライト・リクエストに与えられる。ライト・アクセスは、図１０のフローチャート内のい４４で実行される。
【００１６】
図１１のフロー図は、セル・アクセス・リクエスト・アービタ２９が、リード・リクエストをサービングしているときの、セル・アクセス・リクエスト・アービタ２９の作動の順序(order)を示す。これは、図８及び９との関係で説明されるように、リード・リクエストの優先度を作動する。
【００１７】
同様に、図１２は、図６及び７との関係で説明されるように、セル・アクセス・リクエスト・アービタ２９が、ライト・リクエストをサービスしているときの、セル・アクセス・リクエスト・アービタ２９の作動を示す。
ＳＩＭＤプロセッサ及びメモリ・システムは、４より少ない、或いは、４より多い、クロック・サイクル当りの作動が、サポートされるように設計され得る。
ライト・パイプライン及び再ドーダリング・バッファの、及び、リード・パイプライン及び再オーダリング・バッファの、多くの可能な代替物の実施形態が存在する。
遅延バランシングのための代替的実施は、対応する作動のために、期待された(expected)データが利用可能であることを保証するために、分割されて異なった待ち時間で処理される、個々の命令フィールドにタグを付け(tag)得る。これは、個々のパイプラインを、同じ遅延に支配する(subjects)上述の例とは異なる。もし、別個の従属作動の数が増加されるならば、設計はより複雑であるが、例で採用されたアプローチの利点は、単純化されたデバッグ、及び、削減された領域(area)である。
代替的な実現は、余分のメモリ・セル・リクエスタ(requestors)及び／又はデータ・セルの追加によって、この例を拡張し得る。例えば、この例のＲＡＭセルに加えて、メモリ・マップされたレジスタ及び一定のルックアップ・テーブルが目標とされ(targeted)得る。
本システムは、１つのクロック・サイクルでのユニタリ(unitary)・メモリ・スペースへのマルチプル・アクセスを要求する、如何なるシステムにも順応(adjusted)され得る。
【図面の簡単な説明】
【００１８】
【図１】本発明を実現する構造化されたメモリ・ユニットを利用するＳＩＭＤプロセッサのブロック図を示す。
【図２】ＳＩＭＤプロセッサ・システム内のメモリ・ユニットの接続性を示す。
【図３】メモリ・ユニットの構造を示す。
【図４】シーケンシャル・リード及びライト作動に対するＲＡＭセル・アクセス・シーケンスの例を示す。
【図５】radix４ＦＦＴ作動に対するＲＡＭセル・アクセス・シーケンスの例を示す。
【図６】ライト・リクエスト・パイプライン及び再オーダリング・バッファの構造及び作動の例を示す。
【図７】ライト・リクエスト・パイプライン及び再オーダリング・バッファの構造及び作動の例を示す。
【図８】リード・パイプライン及び再オーダリング・バッファの構造及び作動の例を示す。
【図９】リード・パイプライン及び再オーダリング・バッファの構造及び作動の例を示す。
【図１０】セル・アクセス・リクエスト・アービタ(arbiter)によって実行されるメモリ・リクエストのためのフロー・チャートを示す。
【図１１】セル・リクエスト・アービタが、リード・リクエストをサービスしているときのセル・リクエスト・アービタの作動を示す。
【図１２】セル・リクエスト・アービタが、ライト・リクエストをサービスしているときのセル・リクエスト・アービタの作動を示す。
【図１】
2006509284.tif 000003
【図２】
2006509284.tif 000004
【図３】
2006509284.tif 000005
【図４】
2006509284.tif 000006
【図５】
2006509284.tif 000007
【図６】
2006509284.tif 000008
【図７】
2006509284.tif 000009
【図８】
2006509284.tif 000010
【図９】
2006509284.tif 000011
【図１０】
2006509284.tif 000012
【図１１】
2006509284.tif 000013
【図１２】
2006509284.tif 000014
【国際調査報告】
2006509284.tif 000015
2006509284.tif 000016
2006509284.tif 000017