(57)【要約】【課題】メモリコントローラベースで圧縮（伸張）を行うシステムを提供する。【解決手段】本発明にかかるシステムは、メモリコントローラ（１１０）及びＲＡＭコントローラ（１２０）を備える。メモリコントローラは、未圧縮データブロックを圧縮し、圧縮したデータブロックのサイズを計算し、ＲＡＭ（１３０）との通信に使用されるバーストモードプロトコルを操作する。ＲＡＭコントローラは、メモリコントローラ及びＲＡＭに接続され、圧縮データブロック及びそのサイズをメモリコントローラから受信して、バーストモードプロトコルによって、ＲＡＭに圧縮データブロックを書き込む他に、ＲＡＭに書き込まれた圧縮データブロックを読み出す際に圧縮データブロックのサイズを取得できるよう、サイズを記憶する。【選択図】図１
2007004795.tif 000002
【特許請求の範囲】
【請求項１】
システム（１００）であって、
メモリコントローラ（１１０）であって、
メモリに記憶される未圧縮データブロックを受信するように構成され、
前記未圧縮データブロックをハードウェアで圧縮して圧縮データブロックにするように構成され、
前記圧縮データブロックのサイズを計算するように構成され、
ランダムアクセスメモリ（ＲＡＭ）（１３０）とデータを通信する際に使用されるバーストモードプロトコルを選択的に操作するように構成された
メモリコントローラ（１１０）と、
バスによって前記メモリコントローラ（１１０）に動作可能に接続され、メモリインターフェースによって前記ＲＡＭ（１３０）に動作可能に接続されたＲＡＭコントローラ（１２０）であって、
前記圧縮データブロック及び前記圧縮データブロックの前記サイズを前記メモリコントローラ（１１０）から受信するように構成され、
前記バーストモードプロトコルを使用して、前記メモリインターフェースを介して前記ＲＡＭ（１３０）に前記圧縮データブロックを書き込むように構成され、前記圧縮データブロックを前記ＲＡＭ（１３０）に書き込むのに必要とされるバースト数は、前記ＲＡＭコントローラ（１２０）によって制御可能であり、前記圧縮データブロックの前記サイズに少なくとも部分的に基づいており、前記圧縮データブロックは、前記未圧縮データブロックのサイズに少なくとも部分的に基づいてデフォルトのバーストモードＲＡＭライン境界に配置された（aligned）１つ又は複数のサブデータブロックとして書き込まれ、
前記ＲＡＭ（１３０）に書き込まれた前記圧縮データブロックを対象とした読み出しアクセス時に前記圧縮データブロックの前記サイズを取得できるように、前記サイズを記憶するように構成された
ＲＡＭコントローラ（１２０）と
を備えるシステム。
【請求項２】
前記圧縮データブロックは、前記メモリコントローラ（１１０）により、前記バスを介して前記ＲＡＭコントローラ（１２０）に提供され、前記ＲＡＭコントローラ（１２０）に前記圧縮データブロックを提供する際に使用されるバスサイクル数は、前記圧縮データブロックの前記サイズから演算され、前記サイズによって少なくとも部分的に制御される
請求項１に記載のシステム。
【請求項３】
前記圧縮データブロックの前記サイズは、明示的な値及び暗黙的なデータ終了マーカの一方又は双方として前記ＲＡＭコントローラ（１２０）に提供される
請求項１に記載のシステム。
【請求項４】
前記ＲＡＭコントローラ（１２０）は、明示的な値及びデータ終了マーカの一方又は双方として前記ＲＡＭ（１３０）に前記圧縮データブロックの前記サイズを記憶するように構成される
請求項１に記載のシステム。
【請求項５】
前記バーストモードプロトコルを選択的に操作することは、ＲＡＳ／ＣＡＳ（行アドレス選択／列アドレス選択）シーケンス及び構成可能なデータビットバースト長の一方又は双方を決定することを含む
請求項１に記載のシステム。
【請求項６】
前記メモリコントローラ（１１０）は、記憶された圧縮データブロックが前記ＲＡＭコントローラ（１２０）によって前記ＲＡＭ（１３０）から取り出されることを要求するようにさらに構成され、前記ＲＡＭコントローラ（１２０）は、前記バーストモードプロトコルを使用して、前記メモリインターフェースを介して前記ＲＡＭ（１３０）から前記記憶された圧縮データブロックを取り出すように構成される
請求項１に記載のシステム。
【請求項７】
前記ＲＡＭコントローラ（１２０）は、前記記憶された圧縮データブロックの取り出したサイズを取得するように構成され、前記メモリインターフェースを介して、前記記憶された圧縮データブロックの前記取り出しをカスタマイズし、前記記憶された圧縮データブロックの前記取り出したサイズに少なくとも部分的に基づいて前記バーストモードプロトコルを制御するように構成される
請求項６に記載のシステム。
【請求項８】
前記ＲＡＭコントローラ（１２０）及び前記メモリコントローラ（１１０）の一方は、前記圧縮データブロックが前記ＲＡＭ（１３０）から取り出された後に、前記圧縮データブロックを伸張して伸張データブロックにするようにさらに構成される
請求項７に記載のシステム。
【請求項９】
方法（５００）であって、
メモリに記憶される未圧縮データブロックをメモリコントローラで受信すること（５１０）と、
前記メモリコントローラに関連したハードウェアで前記未圧縮データブロックを圧縮して圧縮データブロックにすること（５２０）と、
前記圧縮データブロックを前記メモリに記憶するためにＲＡＭコントローラに提供すること（５３０）と、
前記圧縮データブロックのサイズを求めること（５４０）と、
前記ＲＡＭコントローラを制御すること（５４５）であって、それによって、前記メモリへデータを転送するためのバーストモードプロトコルを選択的に操作することと、
前記バーストモードプロトコルを使用して、１つ又は複数のデフォルトのバーストモードＲＡＭ境界に配置された１つ又は複数のサブデータブロックとして前記圧縮データブロックを前記メモリに書き込むこと（５５０）であって、前記バーストモードプロトコルは、前記圧縮データブロックの前記サイズによって少なくとも部分的に制御されることと、
前記圧縮データブロックを対象とした読み出しアクセス時に前記圧縮データブロックの前記求められたサイズを取得できるように、前記求められたサイズを記憶すること（５６０）と
を含む方法。
【請求項１０】
前記メモリに記憶された圧縮データブロックを読み出す要求を前記メモリコントローラで受信すること（５７０）と、
前記メモリに記憶された前記圧縮データブロックの圧縮サイズを取り出すこと（５８０）と、
前記圧縮サイズによって少なくとも部分的に制御される（５８５）前記バーストモードプロトコルを使用して前記メモリから前記圧縮データブロックを取り出すこと（５９０）と、
前記取り出された圧縮データブロックをハードウェアで伸張すること（５９５）と
を含む請求項９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラベースの圧縮（伸張）に関する。
【背景技術】
【０００２】
データは、従来、未圧縮フォーマットでダイナミックＲＡＭ（ＤＲＡＭ）のようなランダムアクセスメモリ（ＲＡＭ）に記憶されていた。メモリのコストの増加及びコンピューティングシステムのＤＲＡＭへの依存度の増加に伴い、メモリの空間を保存する努力が行われてきた。これらの努力は、通常、メインメモリにおけるデータの圧縮に関係してきた。データが圧縮フォーマットでメインメモリに記憶されている場合、その目的は、一般に、空間を節約することである。しかしながら、ＤＲＡＭの空間を節約することによって、所与のデータブロックは、ＤＲＡＭに事前に割り当てられた特定のロケーションを有しない場合があり、これは、データ転送を遅くするおそれがある。したがって、データブロックを圧縮フォーマットで記憶するには、そのデータブロックを圧縮し、そのサイズを求めて、圧縮されたブロックを保持できるメモリの空きエリアを見つけることが必要とされる場合がある。これら従来の動作は、適正なＤＲＡＭの行データアドレス及び列データアドレスを求めるための複雑な、したがって多くの時間を要する方法を実行することを伴う場合がある。また、これらの方法は、通常、データが圧縮された後に実行される。したがって、これら従来の方式は、メモリ空間を節約するが、メモリ転送帯域幅にマイナスの影響を与えるおそれがある。
【０００３】
ＤＲＡＭは、通常、デュアルインラインメモリモジュール（ＤＩＭＭ）にパッケージ化される。ＤＲＡＭは、セルと呼ばれる数百万個のメモリロケーションを有することができる。各セルは、１ビットの情報を記憶する。セルは、通常、行及び列のマトリクスに配列される。ＤＲＡＭの行は、ページと呼ばれる場合がある。ＤＲＡＭセルにアクセスするために、メモリコントローラは、ターゲットセルの行アドレス及び列アドレスを指定する電子信号を送信する。メモリコントローラは、アドレス／コマンドライン及びデータラインの双方を有することができるメモリバス又はメモリインターフェースを介して、これらの行／列信号を送信する。データラインは、メモリコントローラとＤＲＡＭとの間でデータを運ぶ一方、アドレス／コマンドラインは、メモリコントローラとＤＲＡＭとの間でアドレス及びコマンドを運ぶ。メモリコントローラとＤＲＡＭとの間のデータスループットは、利用可能なデータラインの本数（たとえば、６４本）、及び、データをそれらのデータラインを介して転送できる周波数に依存する。
【０００４】
セルへのアクセスは、通常、ＤＲＡＭに対して、セルが位置する行を特定すること、次いで、ＤＲＡＭに対して、セルが位置する列を特定することを含む。行を特定することは、通常、行アドレス選択（ＲＡＳ）動作を含む。同様に、列を特定することは、通常、列アドレス選択（ＣＡＳ）動作を含む。したがって、システムによっては、データの各ビットを取得するのに、２つのアドレス／コマンド動作が必要とされる場合がある。したがって、本来のＤＲＡＭの中には、メモリアクセス毎に、複数（たとえば、最大６つまで）のシステムバスサイクルを必要とするものがあった。これは、メモリへのデータ転送時及び／又はメモリからのデータ転送時にボトルネックになるおそれがある。
【０００５】
これに加えて、データがプロセッサからメモリコントローラへ転送され、次いで、メモリへ転送される時、プロセッサからメモリコントローラへの接続（たとえば、フロントサイドバス）の帯域幅が、メモリコントローラからメモリへの接続（たとえば、メモリインターフェース）の帯域幅よりも大きい場合に、帯域幅の格差が存在する場合がある。この帯域幅の格差も、メモリへのデータ転送時及び／又はメモリからのデータ転送時にボトルネックになるおそれがある。このボトルネックは、圧縮（伸張）待ち時間が読み出し／書き込み待ち時間を超える場合に、従来のメモリコントローラベースの圧縮（伸張）装置によって悪化される場合がある。空間節約がこれら従来のシステムの焦点であるので、設計トレードオフは、通常、空間節約を達成するためにこのボトルネックを容認していた。
【０００６】
これらのボトルネック問題の少なくとも一部に取り組むために、バーストモードプロトコルが、ＤＲＡＭと相互作用するために使用されてきた。一例のバーストモードプロトコルでは、単一のＲＡＳ動作、及び、その後に続く単一のＣＡＳ動作によって、２ビット又は３ビット以上のデータをＤＲＡＭへ且つ／又はＤＲＡＭから転送することができる。たとえば、単一のＲＡＳ／ＣＡＳペアによって、４つの連続的なデータロケーションの転送を引き起こすことができる。最も効率的なデータ転送は、単一のＲＡＳ／ＣＡＳペアを使用してＤＲＡＭへ且つ／又はＤＲＡＭから１行全体を転送できる場合に生じる。
【０００７】
従来実施されていたように、ＤＲＡＭの１つの行内に存在するデータはすべて、１つの新たなアドレスコマンドの送信しか必要としない。通常、ＤＲＡＭコントローラは、これを利用し、また、バーストモードプロトコルも利用することができる。さらに、メモリサブシステムは、キャッシュライン全体又は通常のデータブロック構造体が、適切なバーストモード境界上で開始して、新たなアドレス（ページ）境界を越えないように、ＤＲＡＭマッピングをセットアップすることができる。しかしながら、空間の節約に焦点を置いた通常の圧縮方式は、メモリコントローラに、所与のデータブロックのサイズ及び開始ロケーションの双方を追跡させたままにしている。
【０００８】
キャッシュラインは、通常、バーストモード境界の倍数であり、且つ、行境界の約数であるサイズを有する。したがって、キャッシュラインは、通常、バーストサイクルの整数倍未満であることを必要とすること、又は、データが複数の行境界にまたがることを必要とすることから未圧縮データを容易にする開始ポイントを知っている。
【発明の開示】
【課題を解決するための手段】
【０００９】
本発明にかかるシステム（１００）は、メモリコントローラ（１１０）であって、メモリに記憶される未圧縮データブロックを受信するように構成され、前記未圧縮データブロックをハードウェアで圧縮して圧縮データブロックにするように構成され、前記圧縮データブロックのサイズを計算するように構成され、ランダムアクセスメモリ（ＲＡＭ）（１３０）とデータを通信する際に使用されるバーストモードプロトコルを選択的に操作するように構成されたメモリコントローラ（１１０）と、バスによって前記メモリコントローラ（１１０）に動作可能に接続され、メモリインターフェースによって前記ＲＡＭ（１３０）に動作可能に接続されたＲＡＭコントローラ（１２０）であって、前記圧縮データブロック及び前記圧縮データブロックの前記サイズを前記メモリコントローラ（１１０）から受信するように構成され、前記バーストモードプロトコルを使用して、前記メモリインターフェースを介して前記ＲＡＭ（１３０）に前記圧縮データブロックを書き込むように構成され、前記圧縮データブロックを前記ＲＡＭ（１３０）に書き込むのに必要とされるバースト数は、前記ＲＡＭコントローラ（１２０）によって制御可能であり、前記圧縮データブロックの前記サイズに少なくとも部分的に基づいており、前記圧縮データブロックは、前記未圧縮データブロックのサイズに少なくとも部分的に基づいてデフォルトのバーストモードＲＡＭライン境界に配置された１つ又は複数のサブデータブロックとして書き込まれ、前記ＲＡＭ（１３０）に書き込まれた前記圧縮データブロックを対象とした読み出しアクセス時に前記圧縮データブロックの前記サイズを取得できるように、前記サイズを記憶するように構成されたＲＡＭコントローラ（１２０）とを備える。
【００１０】
明細書に組み込まれて明細書の一部を構成する添付図面は、本発明の態様のさまざまな実施の形態例を示すさまざまなシステム例、方法例等を示す。図示した要素の境界（たとえば、ボックス、数群のボックス、又は他の形状）は、境界の一例を表す形状であることが理解されよう。１つの要素を複数の要素として設計することもできるし、複数の要素を１つの要素として設計することもできることが当業者には理解されよう。別の要素の内部コンポーネントとして示された要素は、外部コンポーネントとして実施することもできるし、その逆も同様である。さらに、要素は、一律の縮尺で描かれていない場合がある。
【発明を実施するための最良の形態】
【００１１】
本明細書で説明するシステム例及び方法例は、メモリへ且つ／又はメモリからデータを転送するのに使用されるバーストモードプロトコルを選択的に制御することによって、メモリ転送帯域幅を増加させることを容易にする、時間及びロケーションにおけるデータの圧縮（伸張）に関する。これらのシステム例及び方法例は、圧縮データによって消費されるメモリ量を削減することよりもメモリ転送時間を削減することにより関係している。このように、システム例及び方法例は、空間節約の視点ではなく伝送最適化の視点からデータ圧縮を見据え、したがって、圧縮データサイズの計算及び記憶の双方を行う。
【００１２】
システム例及び方法例は、キャッシュラインのようなデフォルトのデータ構造体を、未圧縮データに最適なデフォルトのバーストモードアラインメント又は行アラインメントに配置し続ける。さらに、システム例及び方法例は、圧縮データをデフォルトのアラインメント境界に配置することも行う。このように、システム例及び方法例は、メモリコントローラの計算を削減することを容易にし、したがって、メモリコントローラの時間を節約することを容易にする。これに加えて、システム例及び方法例は、圧縮によって生成されるような可変サイズのデータ構造体の一意の開始アドレスを検索又は演算することに関連したストレージペナルティ（storage penalty）も軽減する。
【００１３】
このように、たとえデータの圧縮部分が、デフォルトの構造サイズと一致しない非標準サイズを有する場合であっても、システム例及び方法例は、それでも、デフォルトのデータ構造体開始アラインメントを使用することができる。空間は節約されないが、転送帯域幅は節約され、メモリコントローラの計算も同様である。換言すれば、圧縮データサイズを使用して、バースト長及び／又はバースト数を求めることができるが、デフォルトの未圧縮サイズを使用して、デフォルトの開始アラインメントを計算することができる。
【００１４】
データがＤＲＡＭに記憶される場合、そのデータにアクセスすることに関連した２つの主要なステップは、行アドレス選択（ＲＡＳ）及び列アドレス選択（ＣＡＳ）である。各ＲＡＳオペレーションについて、複数のＣＡＳオペレーションを実行して、１行における連続した列アドレスの複数ビットのデータにアクセスすることができる。行アクセスごとの複数の列ビットの読み出し及び／又は書き込みは、「バーストモード」オペレーションと呼ばれる。バースト長制御データを、ＤＲＡＭライン境界に配置された圧縮データに関連したサイズデータから計算できるので、バーストモードオペレーションは、本明細書で説明するシステム例及び方法例が選択的に制御することができる。バーストモードオペレーションを選択的に制御することによって、メモリコントローラとＤＲＡＭとの間のデータ転送に関連したボトルネックを削減することが容易になる。バーストモードオペレーションを制御して、帯域幅及び転送時間を節約することを容易にできる一方、デフォルトの未圧縮データ構造体のサイズを使用して、開始アラインメントを計算することができる。
【００１５】
メモリサブシステムは、バーストモードアクセスを使用して、比較的狭いインターフェースを介してアクセス可能なメモリチップ（たとえば、ＤＲＡＭ）にデータブロックを記憶することができる。たとえば、メモリチップは、当該チップとメモリコントローラとの間でデータを転送するための６４ビット幅のデータバスを有する場合がある。しかし、メモリに書き込まれる通常のライン（たとえば、キャッシュライン）は、データバスよりも広い場合がある（たとえば、１２８バイト）。したがって、キャッシュラインの書き込みは、メモリインターフェースにおいて多数のサイクルを必要とする場合がある。たとえば、１２８バイトのキャッシュラインを書き込むには、６４ビットチップを１６サイクルさせてそのキャッシュラインを記憶することが必要である。
【００１６】
連続した列アドレスへの１６回のアクセスのバーストは、１２８バイト例のキャッシュラインの６４ビット例のＤＩＭＭに対する読み出し及び／又は書き込みのための効率的なメカニズムである。このように、システム例及び方法例は、「全」キャッシュラインよりも少ない（たとえば、圧縮されたキャッシュライン）転送時であっても、デフォルトのバーストモード境界を使用することができ、したがって、バーストモードプロトコルを操作して、高効率のバースト（たとえば、連続した１６列）の比率を増加させることを容易にする一方、全体的なバーストサイクル数を削減する。
【００１７】
一例では、圧縮及び伸張は、メモリアクセスロジックとメモリとの間に挿入されたメモリコントローラで行うことができる。たとえば、書き込まれるデータは、メモリコントローラで受信でき、メモリコントローラで圧縮でき、そして、圧縮データに関するサイズ情報と共にＲＡＭコントローラに送信できる。ＲＡＭコントローラは、次に、キャッシュラインの未圧縮バージョンが使用された場合と同じデフォルトの境界に圧縮データラインを配置するように注意して、圧縮データをメモリに書き込むことができる。デフォルトのライン境界でメモリに圧縮ラインを書き込むことは、或る空間を未使用のままにする場合があるが、バスサイクルの消費を従来の可能なものよりも少なくすることができる。書き込みオペレーション中に利用可能なサイズ情報を有することによって、より効率的なバーストを使用することを容易にすることができ、また、より正確なデータ量を転送することも容易にすることができる。これらの双方は、バス帯域幅にプラスの影響を与えることができる。
【００１８】
同様に、データは、ＲＡＭコントローラが、メモリから圧縮フォーマットで読み出すことができ、圧縮データのサイズに関する情報と共に、データを伸張するメモリコントローラに提供することができる。ＲＡＭコントローラは、圧縮データを読み出す時、その圧縮データに関するサイズ情報を取得でき、実際の圧縮データのみを読み出す一方、未使用の空間を無視でき、圧縮ブロックのデータのみを送信でき、且つ、ブロックの終了時に未使用の空間を送信しないようにすることができる。このように、データ転送及びバスサイクルを削減することができる。メモリコントローラは、次に、伸張データをメモリアクセスロジックに提供することができる。データをメモリコントローラで圧縮（伸張）することによって、転送されるビット数がより少なくなるので、メモリからのデータの読み出し／メモリへのデータの書き込みに必要とされるバスサイクル数を削減することが容易になる。
【００１９】
圧縮データを送信した（ただし、ラインの終了時に未使用空間は送信しない）後、ＲＡＭコントローラは、ＲＡＭのバーストモード読み出しを停止でき、メモリコントローラへの送信を中止でき、そして、メモリコントローラからの別のコマンドを実行できる。このように、圧縮（伸張）ロジックがその圧縮（伸張）を完了する間、後続のコマンドをコマンド／アドレスバスに置くことができる。この並列化によっても、メモリ転送に関連したボトルネックを削減することが容易になる。
【００２０】
以下は、本明細書で使用される、選択された用語の定義を含む。これらの定義は、用語の範囲内に入り且つ実施に使用できるコンポーネントのさまざまな例及び／又は形態を含む。これらの例は、限定することを目的とするものではない。用語の単数形及び複数形の双方を定義の範囲内に含めることができる。
【００２１】
「コンピュータ可読媒体」は、本明細書では、信号、命令、及び／又はデータを直接的又は間接的に提供することに関与する媒体を指す。コンピュータ可読媒体は、不揮発性媒体、揮発性媒体、及び伝送媒体を含む形態を取ることができるが、これらに限定されるものではない。不揮発性媒体には、たとえば、光ディスク又は磁気ディスク等が含まれ得る。揮発性媒体には、たとえば、光ディスク又は磁気ディスク、ダイナミックメモリ等が含まれ得る。伝送媒体には、同軸ケーブル、銅線、光ファイバケーブル等が含まれ得る。また、伝送媒体は、電波及び赤外線のデータ通信中に生成される放射のような電磁放射の形態を取ることもできるし、１つ又は複数の信号群の形態を取ることもできる。コンピュータ可読媒体の一般的な形態には、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、他の磁気媒体、ＣＤ−ＲＯＭ、他の光媒体、パンチカード、紙テープ、孔のパターンを有する他の物理媒体、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、フラッシュＥＰＲＯＭ、又は他のメモリチップ若しくはメモリカード、メモリスティック、搬送波／パルス、及び、コンピュータ、プロセッサ、又は他の電子デバイスが読み出すことができる他の媒体が含まれるが、これらに限定されるものではない。インターネットのようなネットワークを介して命令又は他のソフトウェアを伝搬するのに使用される信号は、「コンピュータ可読媒体」とみなすことができる。
【００２２】
「ロジック」には、本明細書では、機能（複数可）又は動作（複数可）を実行し、且つ／又は、別のロジック、方法、及び／若しくはシステムからの機能若しくは動作を引き起こすためのハードウェア及びファームウェア並びにそれぞれの組み合わせが含まれるが、これらに限定されるものではない。たとえば、所望の用途又はニーズに基づいて、ロジックには、ソフトウェア制御のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）のようなディスクリートロジック、プログラミングされたロジックデバイス、命令を収容したメモリデバイス等が含まれ得る。ロジックは、１つ又は複数のゲート、ゲートの組み合わせ、又は他の回路コンポーネントを含むことができる。複数の論理ロジックを記述する場合、それら複数の論理ロジックを１つの物理ロジックに組み込むことが可能な場合がある。同様に、単一の論理ロジックを記述する場合、その単一の論理ロジックを複数の物理ロジック間に分散させることが可能な場合もある。
【００２３】
「動作可能接続」又はエンティティを「動作可能に接続」する接続は、信号、物理通信、及び／又は論理通信を送信及び／又は受信できる接続である。通常、動作可能接続には、物理インターフェース、電気インターフェース、及び／又はデータインターフェースが含まれるが、動作可能接続には、動作可能制御を可能にするのに十分なこれらのタイプの接続又は他のタイプの接続の異なる組み合わせが含まれ得ることに留意すべきである。たとえば、直接、又は、プロセッサ、オペレーティングシステム、ロジック、ソフトウェア、若しくは他のエンティティのような１つ又は複数の中間エンティティを通じて、互いに信号を通信できることによって、２つのエンティティを動作可能に接続することができる。論理通信チャネル及び／又は物理通信チャネルを使用して、動作可能接続を作成することができる。
【００２４】
「信号」には、本明細書では、１つ又は複数の電気信号若しくは光信号、アナログ信号若しくはデジタル信号、データ、１つ又は複数のコンピュータ命令若しくはプロセッサ命令、メッセージ、ビット若しくはビットストリーム、又は、受信、送信、及び／若しくは検出が可能な他の手段が含まれるが、これらに限定されるものではない。
【００２５】
「ソフトウェア」には、本明細書では、読み出し、インタープリット、コンパイル、及び／又は実行が可能で、且つ、コンピュータ、プロセッサ、又は他の電子デバイスに、機能、動作を実行させ、且つ／又は、所望の通り振る舞わせる１つ又は複数のコンピュータ命令又はプロセッサ命令が含まれるが、これらに限定されるものではない。命令は、動的及び／又は静的にリンクされたライブラリからの個別のアプリケーション又はコードを含んだルーチン、アルゴリズム、モジュール、メソッド、スレッド、及び／又はプログラムのようなさまざまな形態で実施することができる。また、ソフトウェアも、さまざまな実行可能な形態及び／又はロード可能な形態で実施することができる。このさまざまな実行可能な形態及び／又はロード可能な形態には、スタンドアロンプログラム、関数コール（ローカル及び／又はリモート）、サーブレット、アプレット、メモリに記憶された命令、オペレーティングシステムの一部、又は他のタイプの実行可能命令が含まれるが、これらに限定されるものではない。ソフトウェアの形態は、たとえば、所望のアプリケーションの要件、所望のアプリケーションが実行される環境、及び／又は設計者／プログラマ等の要望等に依存し得ることが当業者には理解されよう。また、コンピュータ可読命令及び／又はコンピュータ実行可能命令は、１つのロジックに配置することができ、且つ／又は、２つ若しくは３つ以上の通信ロジック、協同ロジック、及び／又は並列処理ロジック間に分散させることができ、したがって、シリアル形式、パラレル形式、超パラレル形式、及び他の形式でロードすることができ、且つ／又は、実行することができることも理解されよう。
【００２６】
本明細書で説明するシステム例及び方法例のさまざまなコンポーネントを実施するのに適したソフトウェアは、Ｊａｖａ（登録商標）、Ｐａｓｃａｌ、Ｃ＃、Ｃ＋＋、Ｃ、ＣＧＩ、Ｐｅｒｌ、ＳＱＬ、ＡＰＩ、ＳＤＫ、アセンブリ、ファームウェア、マイクロコード、及び／又は他の言語並びにツールのようなプログラミング言語並びにツールを使用して制作することができる。ソフトウェアは、システム全体であろうとシステムのコンポーネントであろうと、製品の１つとして実施することができ、上記で定義したようなコンピュータ可読媒体の一部として保持又は提供することができる。ソフトウェアの別の形態には、ネットワーク又は他の通信媒体を介してソフトウェアのプログラムコードを受信者へ送信する信号が含まれ得る。したがって、一例では、コンピュータ可読媒体は、ウェブサーバからユーザへダウンロードされるとき、ソフトウェア／ファームウェアを表す信号の形態を有する。別の例では、コンピュータ可読媒体は、ウェブサーバに保持されるとき、ソフトウェア／ファームウェアの形態を有する。
【００２７】
以下の詳細な説明のいくつかの部分は、メモリ内のデータビットに対するオペレーションのアルゴリズム及びシンボル表現の観点で提示される。これらのアルゴリズム的な説明及び表現は、当業者が自身の作業の内容を他者に伝えるのに使用する手段である。アルゴリズムは、ここでは、一般的に、結果を生成するオペレーションのシーケンスであると考えられる。オペレーションは、物理量の物理的な操作を含むことができる。必ずしもそうではないが、通例、物理量は、ロジック等における記憶、転送、結合、比較、及びそれ以外の操作を行うことができる電気信号又は磁気信号の形態を取る。
【００２８】
主として一般的な慣例との理由から、これらの信号を、ビット、値、要素、シンボル、文字、用語、数字等と呼ぶことが時に便利であることが分かっている。しかしながら、これらの用語及び類似の用語は、適切な物理量に関連付けられることになり、これらの物理量に適用される単なる便利なラベルにすぎないことに留意すべきである。特に指定のない限り、この説明全体を通じて、処理、計算、演算、決定（求める）、表示等のような用語は、コンピュータシステム、ロジック、プロセッサ、又は物理（電子）量として表されたデータの操作及び変換を行う類似の電子デバイス、の動作及びプロセスを指すことが理解される。
【００２９】
図１は、アーキテクチャ１００における一例のメモリコントローラ１１０、ＲＡＭコントローラ１２０、及びＲＡＭ１３０を示している。ＲＡＭ１３０は、より一般的には、メモリ１３０と呼ぶことができ、たとえば、ＤＩＭＭにパッケージ化されたＤＲＡＭとして実施することができる。アーキテクチャ１００は、たとえば、コンピュータ、プリンタ、及び他のコンピューティングデバイスに実施することができる。
【００３０】
メモリコントローラ１１０は、メモリ１３０に記憶される未圧縮データブロックを受信するように構成することができる。未圧縮データブロックは、たとえば、プロセッサ、入出力ロジック、キャッシュ等から受信することができる。一例では、未圧縮データブロックは、キャッシュラインとすることができる。キャッシュラインは、通常、バーストモード境界の倍数であることを思い出されたい。
【００３１】
また、メモリコントローラ１１０は、未圧縮データブロックを圧縮データブロックに圧縮するように構成することもできる。メモリコントローラ１１０は、ハードウェアで圧縮を実行するように構成することができる。たとえば、メモリコントローラ１１０は、圧縮を実行するための圧縮ロジック１１２を含むことができる。ランレングス符号化、辞書ベース符号化等のような簡単な圧縮方式は、圧縮ロジック１１２が実行することができるが、圧縮ロジック１１２のようなハードウェアで実行できる他の圧縮方式も使用できることが理解されるべきである。また、メモリコントローラ１１０は、圧縮データブロックのサイズを計算するように構成することもできる。一例では、このサイズは、未圧縮データブロックが圧縮データブロックに圧縮されている間に計算することができる。
【００３２】
圧縮データブロックのサイズが利用可能であると、メモリコントローラ１１０を、メモリ１３０とデータを通信する際に使用されるバーストモードプロトコルを選択的に操作するように構成することもできる。一例では、バーストモードプロトコルは、ＲＡＭコントローラ１２０とメモリ１３０との間で使用することができる。別の例では、バーストモードプロトコルは、メモリコントローラ１１０とＲＡＭコントローラ１２０との間で使用することもできる。バーストモードプロトコルを選択的に操作することは、たとえば、メモリ１３０へ且つ／又はメモリ１３０から圧縮データを効率的に転送する構成可能なデータビットバースト長に関連したＲＡＳ／ＣＡＳシーケンスを決定することを含むことができる。したがって、デフォルトのデータビットバースト長を使用する代わりに、且つ、場合によっては（potentially）、未使用のデータビットを回復させる代わりに、より正確なデータビットバースト長を使用して、不要なビットの読み出し及び／又は書き込みからの保護に役立てることができる。また、デフォルトのデータビットバースト長の複数の事例を使用する代わりに、場合によってはより長いデータビットバースト長を計算することができる。一例では、データビットバースト長は、１行のデータビット全体とすることさえも可能である。圧縮されたサイズを使用して、バーストモード又は長さを求めることができるが、未圧縮のサイズを使用して、デフォルトの開始アラインメントを計算することができる。
【００３３】
ＲＡＭコントローラ１２０は、バスによってメモリコントローラ１１０に動作可能に接続することができ、メモリインターフェースによってメモリ１３０に接続することができる。ＲＡＭコントローラ１２０は、圧縮データブロック及び圧縮データブロックのサイズをメモリコントローラ１１０から受信し、バーストモードプロトコルを使用してメモリインターフェースを介して圧縮データブロックをメモリ１３０に書き込むように構成することができる。圧縮データブロックをメモリ１３０に書き込むのに必要なバースト数は、ＲＡＭコントローラ１２０によって制御可能とすることができる。バースト数は、たとえば、圧縮データブロックのサイズに依存する場合がある。
【００３４】
ＲＡＭコントローラ１２０は、メモリ１３０のデフォルトのデータ構造体に関連したデフォルトの開始アラインメント境界に配置される１つ又は複数のサブデータブロックとして、圧縮データブロックを書き込むように構成することができる。これによって、メモリ１３０の或る空間が未使用となる場合があるが、デフォルトのアラインメント境界への書き込みの利点には、データのサイズ及びロケーションの双方を追跡する必要なく、より効率的なバーストを使用してメモリ１３０へ且つ／又はメモリ１３０からデータを転送するようにバーストモードプロトコルを選択的に制御できることが含まれる。その結果、これによって、メモリへ且つ／又はメモリからデータを転送することに関連したボトルネックの削減が容易になる。
【００３５】
また、ＲＡＭコントローラ１２０は、圧縮データブロックのサイズを記憶するように構成することもでき、圧縮データブロックを対象とした読み出しアクセス時にそのサイズを取得できるようにされる。利用可能な圧縮データブロックのサイズを有することによって、メモリ１３０からデータを読み出すのに使用されるバーストモードプロトコルを選択的に操作することが容易になる。たとえば、圧縮データブロックのサイズが、２行全体及び３行目の７列であることが判明している場合、３つの正確なＲＡＳ／ＣＡＳバーストサイクルをプログラミングして、最大データビット転送数を超えてＲＡＳ／ＣＡＳコマンド及びバスサイクルを償却することができる。圧縮データのサイズが判明していない従来のシステム、すなわち、データがライン境界に配置されていない従来のシステムでは、このようなＲＡＳ／ＣＡＳ効率を達成することはできない。この例は、ＤＲＡＭの行全体よりも通例はるかに小さいキャッシュラインに最適化されたメモリシステムにとって特殊ではある（atypical）が、システム例及び方法例の別の適用を示している。
【００３６】
このように、圧縮データブロックのサイズを求めること、デフォルトのアラインメント境界に圧縮データを配置すること、及び、データを転送するようにバーストモードプロトコルを選択的に制御することによって、メモリコントローラとメモリとの間のデータ転送の効率性をより大きく達成することができる。したがって、一例では、圧縮データブロックをＲＡＭコントローラ１３０に提供する際に使用されるバスサイクル数は、メモリコントローラ１１０によって計算された圧縮データブロックのサイズから演算することができ、そのサイズによって少なくとも部分的に制御することができる。一例では、圧縮データブロックのサイズは、値として明示的にＲＡＭコントローラ１２０に提供することができる一方、別の例では、圧縮データブロックのサイズは、データ終了マーカとして暗黙的にＲＡＭコントローラ１２０に提供することができる。同様に、一例では、ＲＡＭコントローラ１２０は、値として明示的にメモリ１３０に圧縮データブロックのサイズを記憶するように構成することができる一方、別の例では、ＲＡＭコントローラ１２０は、データ終了マーカとして暗黙的にメモリ１３０に圧縮データブロックのサイズを記憶するように構成することができる。別の例では、ＲＡＭコントローラ１２０は、圧縮データブロックのサイズを記憶するように構成されたメモリコントローラ１１０とすることができる。圧縮データブロックのサイズを、メモリ１３０に記憶されるものとして説明しているが、いくつかの例では、このサイズは、他のロケーションに記憶できることが理解されるべきである。
【００３７】
一例では、未圧縮データブロックは、メモリコントローラ１１０における受信時に、メモリ動作要求を伴うことができる。したがって、一例では、メモリコントローラ１１０は、このメモリ動作要求に少なくとも部分的に基づいて、未圧縮データブロックを選択的に圧縮するように構成することができる。このように、データが圧縮されることを指示できるメモリ動作要求もある一方、データが圧縮されないことを指示できる他のメモリ動作要求もある。
【００３８】
上述したように、メモリコントローラ１１０は、メモリ１３０へ且つ／又はメモリ１３０からデータを転送するのに使用されるバーストモードプロトコルを選択的に制御することを容易にするように構成することができる。これに加えて、且つ／又は、これに代えて、ＲＡＭコントローラ１２０は、ＲＡＭコントローラ１２０とＲＡＭ１３０との間の接続のサイズ、圧縮データブロックのサイズ等のようなデータポイントに基づいてバーストモード制御データを計算するように構成することもできる。たとえば、ＲＡＭコントローラ１２０又はメモリコントローラ１１０は、ＲＡＳ／ＣＡＳシーケンス（複数可）がメモリ１３０へ且つ／又はメモリ１３０から圧縮データを転送するのに最も効率的であり得るかどうかを判断することができる。たとえば、デフォルトのアラインメント境界で配置された１行全体の圧縮データを取り出す１つのカスタムＲＡＳ／ＣＡＳシーケンスは、１行の４分の１を取り出す４つのデフォルトのＲＡＳ／ＣＡＳシーケンスよりも効率的な場合がある。
【００３９】
図２は、アーキテクチャ２００における別の例のメモリコントローラ２１０、ＲＡＭコントローラ２２０、及びＲＡＭ２３０を示している。いくつかの例では、メモリコントローラ２１０、ＲＡＭコントローラ２２０、及びＲＡＭ２３０は、図１の対応する要素と同様である。アーキテクチャ２００では、メモリコントローラ２１０は、記憶されたデータブロックをＲＡＭ２３０から取り出す要求を受信するように構成することもできる。場合によっては、このデータブロックを圧縮することができる。したがって、ＲＡＭコントローラ２２０は、選択的に制御されたバーストモードプロトコルを使用して、メモリインターフェースを介してＲＡＭ２３０から、記憶された圧縮データブロックを取り出すように構成することができる。バーストモードプロトコルを選択的に制御することを容易にするために、ＲＡＭコントローラ２２０は、記憶された圧縮データブロックのサイズを取得するように構成することができる。このサイズは、たとえば、メモリ２３０から取り出すこともできるし、当該サイズが記憶された別のロケーションから取り出すこともできる。記憶された圧縮データブロックのサイズが利用可能であると、ＲＡＭコントローラ２２０は、メモリインターフェースを介して記憶された圧縮データブロックの取り出しをカスタマイズすることができる。たとえば、ＲＡＭコントローラ２２０は、バーストモードプロトコルを選択的に制御して、特定のデータビットバーストサイズを有する特定のＲＡＳ／ＣＡＳシーケンスを使用することができる。このシーケンス及び／又はサイズは、たとえば、記憶された圧縮データブロックのサイズに基づくことができる。
【００４０】
アーキテクチャ２００の一例では、ＲＡＭコントローラ２２０及び／又はメモリコントローラ２１０は、圧縮データブロックがメモリ２３０から取り出された後に、その圧縮データブロックを伸張するように構成することができる。一例では、圧縮データブロックは、ＲＡＭコントローラ２２０及び／又はメモリコントローラ２１０に関連したハードウェアで伸張することができる。たとえば、メモリコントローラ２１０は、圧縮データを伸張するように構成されたロジック２１２を含むことができる。同様に、ＲＡＭコントローラ２２０も、伸張ロジック（図示せず）で構成することができる。このように、ロジック２１２は、メモリコントローラ２１０内に示されているが、いくつかの例では、ロジック２１２は、ＲＡＭコントローラ２２０内に配置することもできるし、他の例では、ロジック２１２は、メモリコントローラ２１０及び／又はＲＡＭコントローラ２２０のいずれかを動作可能に接続できる別個のハードウェアとすることもできることが理解されるべきである。
【００４１】
一例では、圧縮データブロックを伸張データブロックに選択的に伸張するようにメモリコントローラ２１０を制御することができる。圧縮データブロックが伸張されるかどうかは、メモリコントローラ２１０が受信したメモリ読み出し要求に少なくとも部分的に依存することができる。たとえば、いくつかのメモリ要求ロジックは、メモリ２３０が圧縮データを記憶できて、データをその圧縮形式で記憶するように要求できることを認識している場合がある。
【００４２】
方法例は、図３、図４、及び図５のフロー図を参照することによって、より良く理解することができる。説明を簡単にするために、図示した方法論は、一連のブロックとして示されて説明されているが、いくつかのブロックは、図示して説明する順序とは異なる順序で行うことができ、且つ／又は、他のブロックと同時に行うことができるので、これらの方法論は、ブロックの順序によって限定されるものでないことが理解されるべきである。その上、一例の方法論を実施するのに必要とされるブロックが、図示したすべてのブロックよりも少ない場合がある。さらに、追加方法論及び／又は代替的方法論は、図示しない追加ブロックを使用することもできる。
【００４３】
フロー図では、ブロックは、ロジックと共に実施できる「処理ブロック」を示す。この処理ブロックは、方法のステップ及び／又はその方法のステップを実行するための装置の要素を表すことができる。フロー図は、どの特定のプログラミング言語、方法論、又はスタイル（たとえば、手続型、オブジェクト指向型）のシンタックスも示すものではない。逆に、フロー図は、当業者が、図示した処理を実行するためのロジックを開発するのに使用できる機能的な情報を示す。いくつかの例では、一時変数、ルーチンループ等のようなプログラム要素が示されないことが理解されよう。さらに、電子アプリケーション及びソフトウェアアプリケーションは、図示したシーケンスとは異なる他のシーケンスで図示したブロックを実行できるように、且つ／又は、ブロックを結合したり複数のコンポーネントに分割したりできるように、動的で柔軟なプロセスを含むことができることも理解されよう。プロセスは、マシン語、手続型技法、オブジェクト指向型技法、及び／又は人工知能技法のようなさまざまなプログラミング手法を使用して実施できることが理解されよう。
【００４４】
図３は、帯域幅の効率的な方法で圧縮データを節約することに関連した一例の方法３００を示している。この方法３００は、３１０において、メモリに記憶される未圧縮データブロックを受信することを含むことができる。このデータは、メモリコントローラに受信することができる。また、方法３００は、３２０において、未圧縮データブロックを圧縮データブロックに圧縮することも含むことができる。この圧縮は、メモリコントローラに関連したハードウェアで行うことができる。また、方法３００は、３３０において、圧縮データブロックをメモリに記憶するためにＲＡＭコントローラに提供することも含むことができる。いくつかのメモリコントローラベースの圧縮（伸張）方式は、３１０から３３０に説明する動作を実行することができるが、方法３００は、３４０において、ＲＡＭコントローラを制御して、メモリへデータを転送するようにバーストモードプロトコルを選択的に操作することも含むことができる。バーストモードプロトコルを選択的に操作することは、たとえば、データビットバースト長の値と共に使用するＲＡＳ／ＣＡＳシーケンスを識別して、ＲＡＭコントローラとメモリとの間の接続にわたってデータをより効率的に転送することを含むことができる。例示として、圧縮データブロックは、ＤＲＡＭの３行及び４行目の一部を消費するものとして識別することができる。したがって、３行すべての書き込み及び残りの部分のみの第４の書き込みを実行するようにバーストモードプロトコルを操作することができる。１行につき４つの連続したデータビットの４つの組を書き込んでいた可能性がある一連のデフォルトのＲＡＳ／ＣＡＳシーケンスを使用することとは対照的に、全体的なＲＡＳ／ＣＡＳシーケンス数が選択的な制御によって減少されていた。圧縮サイズが、バースト長又はバースト数を制御するのに使用されていた可能性があるが、デフォルトの未圧縮サイズを使用して、書き込みの開始アラインメント（複数可）を計算することができることに留意されたい。したがって、方法３００は、データサイズの追跡及び或る固有の開始アドレスの計算の双方を必要としない。
【００４５】
図４は、帯域幅の効率的な方法で圧縮データを節約することに関連した別の例の方法を示している。この方法４００は、４１０において、メモリに記憶される未圧縮データブロックを受信することを含むことができる。このデータは、メモリコントローラに受信することができる。また、方法４００は、４２０において、未圧縮データブロックを圧縮データブロックに圧縮することも含むことができる。この圧縮は、メモリコントローラに関連したハードウェアで行うことができる。また、方法４００は、４３０において、圧縮データブロックをメモリに記憶するためにＲＡＭコントローラに提供することも含むことができる。さらに、方法４００は、４４０において、ＲＡＭコントローラを制御して、メモリへデータを転送するようにバーストモードプロトコルを選択的に操作することも含むことができる。
【００４６】
上述したように、いくつかのメモリコントローラベースの圧縮（伸張）方式は、４１０から４３０で実行される動作を説明することができる。しかしながら、方法４００は、４５０において、圧縮データブロックのサイズを求めることも含むことができる。圧縮データのサイズが利用可能であると、従来のシステムを超える改良を行うことができる。したがって、方法４００は、４６０において、バーストモードプロトコルを使用して、デフォルトのアラインメント境界に配置されたデータのサブブロック（複数可）として圧縮データブロックをメモリに書き込むことを含むことができる。したがって、メモリコントローラは、データブロックのサイズ及びロケーションの双方を追跡するタスクを課せられない。たとえば、圧縮データブロックのサイズのようなデータによってバーストモードプロトコルを制御することができる。バーストモードプロトコルを制御することは、たとえば、書き込まれる圧縮データのサイズに基づいて、より正確なデータビットバースト長を有するＲＡＳ／ＣＡＳシーケンスをカスタマイズすることを含むことができる。たとえば、圧縮データが、単一行のメモリよりも少ないメモリに一致するキャッシュラインである場合、圧縮キャッシュラインのサイズに等しいデータビットバースト長を有する単一のＣＡＳ／ＲＡＳシーケンスを、圧縮キャッシュラインがデフォルトのアラインメント境界で開始して書き込まれる時に使用することができる。
【００４７】
また、方法４００は、４７０において、圧縮データブロックのサイズを記憶することも含むことができ、記憶された圧縮データブロックのサイズを、その圧縮データブロックを対象とした読み出しアクセス時に取得できるようにされる。記憶された圧縮データブロックのサイズを有することによって、圧縮データをより効率的に取り出すことが容易になる。一例では、圧縮データブロックのサイズは、圧縮データが記憶されるメモリに値として記憶することができる。別の例では、圧縮データブロックのサイズは、たとえば、圧縮データブロックの後尾に追加されたデータ終了マーカによってメモリに暗黙的に示すことができる。さらに別の例では、データのサイズは、圧縮データが記憶されるメモリ以外のロケーションに記憶することができる。
【００４８】
図５は、帯域幅の効率的な方法で圧縮データの読み出し及び書き込みを行うことに関連した方法５００を示している。この方法５００は、５１０において、メモリに記憶される未圧縮データブロックを受信することを含むことができる。また、方法５００は、５２０において、未圧縮データブロックを圧縮データブロックに圧縮することも含むことができ、５３０において、圧縮データブロックをメモリに記憶するためにＲＡＭコントローラに提供することも含むことができる。さらに、方法５００は、５４０において、圧縮データブロックのサイズを求めることも含むことができる。圧縮データのサイズが利用可能であると、従来のシステムを超える改良を行うことができる。したがって、方法５００は、５４５において、データをメモリに書き込むのに使用されるバーストモードプロトコルを選択的に制御することを含むことができる。次いで、方法５００は、５５０において、バーストモードプロトコルを使用して、デフォルトのアラインメント境界に配置されたデータのサブブロック（複数可）として圧縮データブロックをメモリに書き込むことを含むことができる。また、方法５００は、５６０において、圧縮データブロックのサイズを記憶することも含むことができ、記憶された圧縮データブロックのサイズを、その圧縮データブロックを対象とした読み出しアクセス時に取得できるようにされる。
【００４９】
また、方法５００は、５７０において、メモリコントローラでデータブロックの読み出し要求を受信することも含むことができる。このデータブロックは、圧縮されて、メモリに記憶された圧縮データとして記憶されたものである場合がある。この要求は、圧縮データブロックを対象とするものとして説明されているが、要求側は、データが圧縮形式で記憶されていることを認識していない場合があることを理解すべきである。したがって、メモリ要求は、単にデータブロックを求めるものではあるが、たまたま圧縮フォーマットで記憶されるデータブロックを探し求める場合がある。圧縮データブロックの読み出し要求を受信すると、方法５００は、５８０において、メモリに記憶された圧縮データブロックのサイズを取り出すことを含むことができる。
【００５０】
圧縮データのサイズが一旦判明すると、方法５００は、５８５において、メモリコントローラと、データが記憶されるメモリとの間でバーストモードプロトコルを選択的に操作して、圧縮データブロックを効率的に取り出すことを容易にする。また、方法５００は、５９０において、圧縮サイズによって少なくとも部分的に制御されるバーストモードプロトコルを使用して、メモリから圧縮データブロックを取り出すことも含むことができる。たとえば、圧縮データのサイズが１行よりも小さい場合に、データビットバースト長がそのデータのサイズと等しい単一のＲＡＳ／ＣＡＳシーケンスを使用して、データを取り出すことができる。圧縮データは、デフォルトのアラインメント境界に配置されたメモリに書き込まれたので、単一のＲＡＳコマンドを使用することができる。したがって、たとえデータブロックが圧縮されても、そのデータブロックはまだデフォルトのアラインメント境界に配置されているので、メモリコントローラは、そのデータブロックのサイズ及びロケーションの双方を追跡する必要はない。
【００５１】
また、方法５００は、５９５において、取り出された圧縮データブロックを伸張することも含むことができる。この伸張は、たとえば、メモリコントローラ、ＲＡＭコントローラ等に関連したハードウェアで行うことができる。５９９において、別の要求（たとえば、書き込み、読み出し）が処理されるか否かに関する判断が行われる。５９９における判断がＹｅｓである場合には、処理は、５１０又は５７０のいずれかに戻ることができ、そうでない場合には、処理は終了することができる。
【００５２】
一例では、方法論は、コンピュータ可読媒体上に設けられたプロセッサ実行可能命令及び／又はオペレーションとして実施される。したがって、一例では、コンピュータ可読媒体は、メモリに記憶される未圧縮データブロックをメモリコントローラで受信すること、メモリコントローラに関連したハードウェアで未圧縮データブロックを圧縮データブロックに圧縮すること、及び、圧縮データブロックをメモリに記憶するためにＲＡＭコントローラに提供することを含む方法を実行するように動作可能なプロセッサ実行可能命令を記憶することができる。この方法は、圧縮データブロックのサイズを求めること、ＲＡＭコントローラを制御して、ＲＡＭコントローラとメモリとの間でデータを転送するためのバーストモードプロトコルを選択的に制御すること、及び、バーストモードプロトコルを使用して、デフォルトのアラインメント境界に配置されたサブデータブロック（複数可）として圧縮データブロックをメモリに書き込むことを含むこともできる。バーストモードプロトコルは、圧縮データブロックのサイズによって少なくとも部分的に制御することができる。また、この方法は、圧縮データブロックを対象とした読み出しアクセス時に圧縮データブロックのサイズを取得できるように、圧縮データブロックのサイズを記憶することも含むことができる。また、この方法は、メモリに記憶された圧縮データブロックを読み出す要求をメモリコントローラで受信すること、メモリに記憶された圧縮データブロックのサイズを取り出すこと、及び、この圧縮サイズによって少なくとも部分的に制御されるバーストモードプロトコルを使用してメモリから圧縮データブロックを取り出すことも含むことができる。さらに、この方法は、取り出された圧縮データブロックをハードウェアで伸張することも含むことができる。
【００５３】
上記方法は、コンピュータ可読媒体上に設けられるものとして説明されているが、本明細書で説明する他の方法例も、コンピュータ可読媒体上に設けることができることが理解されるべきである。
【００５４】
図６は、メモリコントローラベースの圧縮及びバーストモードプロトコルの制御のためのシステム６００に配置された一例のメモリコントローラロジック６１０、ＲＡＭコントローラロジック６２０、及びＲＡＭ６３０を示している。メモリコントローラロジック６１０は、メモリに記憶されるデータラインを受信するように構成された受信ロジック６１２を含むことができる。記憶されるデータラインの送信側は、データが圧縮フォーマットで記憶されていることを認識していない場合があり、したがって、いくつかの例では、記憶されるデータラインは、送信側により、圧縮フォーマットで記憶されるデータラインとしてではなく、単に記憶されるデータラインとして識別される場合があることが理解されるべきである。しかしながら、メモリコントローラロジック６１０は、そのデータラインを、圧縮され且つ記憶されるデータラインとして受信することができる。そこで、メモリコントローラロジック６１０は、受信ロジック６１２に動作可能に接続された圧縮ロジック６１４も含むことができる。圧縮ロジック６１４は、データラインをハードウェアで圧縮するように構成することができる。メモリコントローラロジック６１０は、書き込み長ロジック６１６も含むことができる。この書き込み長ロジック６１６は、圧縮ロジック６１４に動作可能に接続され、且つ、圧縮データラインのサイズを求めるように構成されている。圧縮データラインのサイズを求めることによって、たとえば、バーストモードプロトコルを選択的に制御して、メモリからのデータの読み出し及び／又はメモリへのデータの書き込みをより効率的に行うことが容易になる。
【００５５】
また、システム６００は、メモリコントローラロジック６１０及びＲＡＭ６３０に動作可能に接続されたＲＡＭコントローラロジック６２０も含むことができる。ＲＡＭコントローラロジック６２０は、バーストモード制御ロジック６２２を含むことができる。このバーストモード制御ロジック６２２は、ＲＡＭコントローラ６２０によって使用されるバーストモードプロトコルを選択的に制御してＲＡＭ６３０と圧縮データラインを通信するように構成されている。たとえば、バーストモード制御ロジック６２２によって、ＲＡＭ６３０にデフォルトのアラインメント境界で圧縮ラインを書き込むバーストモードシーケンスを選択的に制御することを容易にすることができる。圧縮データ集合体がデフォルトのアラインメント境界に配置される（たとえば、開始する）ように圧縮データ集合体を書き込むことによって、単一のＲＡＳ／ＣＡＳシーケンスを使用すること、及び、メモリにデータを書き込むのに必要とされるバスサイクル数を最小にすることが容易になる。
【００５６】
ＲＡＭコントローラロジック６２０は、バーストモード制御ロジック６２２に動作可能に接続された書き込みロジック６２４も含むことができる。この書き込みロジック６２４は、たとえ圧縮データのサイズが、通常はデフォルトのアラインメント境界に配置されるデータ構造体のサイズよりも小さくなる場合があっても、デフォルトのアラインメント境界に圧縮データラインを配置して、ＲＡＭ６３０に圧縮データラインを書き込むように構成することができる。
【００５７】
図７は、メモリコントローラロジック６１０、ＲＡＭコントローラロジック６２０、及びＲＡＭ６３０で構成された別のシステム７００を示している。図６、図７、及び図８において、同様の符号（たとえば、６１０）は、これら３つのシステム６００、７００、及び８００において同様の要素を指す。
【００５８】
システム７００のＲＡＭコントローラロジック６２０は、バーストモード制御ロジック６２２に動作可能に接続された読み出し長ロジック７２６を含むことができる。読み出し長ロジック７２６は、ＲＡＭ６３０に記憶された圧縮データラインのサイズを求めるように構成することができる。圧縮データラインのサイズが判明することにより、バーストモードプロトコルをより正確に制御して、記憶されたメモリをより効率的に読み出すことが容易になる。また、ＲＡＭコントローラロジック６２０は、バーストモードロジック６２２及び／又は読み出し長ロジック７２６に動作可能に接続された取り出しロジック７２８も含むことができる。この取り出しロジック７２８は、ＲＡＭ６３０に記憶された圧縮データラインを取り出すように構成することができる。要求されたデータラインは、取り出された後、たとえば、取り出しロジック７２８に記憶することができ、次いで、メモリコントローラロジック６１０に提供することができる。
【００５９】
図８は、メモリコントローラロジック６１０、ＲＡＭコントローラロジック６２０、及びＲＡＭ６３０を含む別の例のシステム８００を示している。このシステム８００は、メモリコントローラロジック６１０及び／又はＲＡＭコントローラロジック６２０に動作可能に接続可能な伸張ロジック８４０も含む。この伸張ロジック８４０は、圧縮データラインがＲＡＭ６３０から取り出された後、この圧縮データラインを伸張するように構成することができる。伸張ロジック８４０は、メモリコントローラロジック６１０及びＲＡＭコントローラロジック６２０の外部に示されているが、異なる例では、伸張ロジック８４０は、メモリコントローラロジック６１０内又はＲＡＭコントローラロジック６２０内に配置できることが理解されるべきである。いくつかの例では、すべての圧縮データが伸張されるとは限らない。したがって、一例では、伸張ロジック８４０は、メモリコントローラロジック６１０によって受信されたメモリ読み出し要求に少なくとも部分的に基づいて圧縮データラインを選択的に伸張するように構成することができる。
【００６０】
図９は、プロセッサ９０２、メモリ９０４、及び入出力ポート９１０を含むコンピュータ９００を示している。これらプロセッサ９０２、メモリ９０４、及び入出力ポート９１０は、バス９０８によって動作可能に接続されている。一例では、コンピュータ９００は、メモリコントローラ９３２と共に動作するように構成された圧縮（伸張）ロジック９３０を含むことができ、それによって、メモリコントローラベースのデータ圧縮（伸張）が容易にされる。このように、圧縮（伸張）ロジック９３０は、ランダムアクセスメモリ（たとえば、メモリ９０４）に記憶される未圧縮データブロックをハードウェアで圧縮するための手段を提供することができる。また、圧縮（伸張）ロジック９３０は、ランダムアクセスメモリに記憶された圧縮データブロックをハードウェアで伸張するための手段も提供することができる。伸張ロジック９３０は、メモリコントローラ９３２と共に動作して、ランダムアクセスメモリからの圧縮データの読み出し及びランダムアクセスメモリへの圧縮データの書き込みを行う際に使用されるバス及びバスプロトコルを制御するための手段も提供することができる。この制御は、たとえば、メモリコントローラとランダムアクセスメモリとの間で転送される圧縮データの量に基づくことができる。
【００６１】
プロセッサ９０２は、デュアルマイクロプロセッサ及び他のマルチプロセッサアーキテクチャを含む多種多様なさまざまなプロセッサとすることができる。メモリ９０４は、ＲＡＭ、同期ＲＡＭ（ＳＲＡＭ）、動的ＲＡＭ（ＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、直接ＲＡＭバスＲＡＭ（ＤＲＲＡＭ）等のような揮発性メモリとすることができる。
【００６２】
ディスク９０６は、たとえば、入出力インターフェース（たとえば、カード、デバイス）９１８及び入出力ポート９１０を介してコンピュータ９００に動作可能に接続することができる。ディスク９０６には、磁気ディスクドライブ、ソリッドステートディスクドライブ、フロッピー（登録商標）ディスクドライブ、テープドライブ、Ｚｉｐドライブ、フラッシュメモリカード、及び／又はメモリスティックのようなデバイスが含まれ得るが、これらに限定されるものではない。さらに、ディスク９０６には、ＣＤ−ＲＯＭ、書き込み可能ＣＤドライブ（ＣＤ−Ｒドライブ）、書き換え可能ＣＤドライブ（ＣＤ−ＲＷドライブ）、及び／又はデジタルビデオＲＯＭドライブ（ＤＶＤ  ＲＯＭ）のような光ドライブが含まれ得る。メモリ９０４は、たとえば、プロセス９１４及び／又はデータ９１６を記憶することができる。ディスク９０６及び／又はメモリ９０４は、コンピュータ９００の資源の制御及び割り当てを行うオペレーティングシステムを記憶することができる。
【００６３】
バス９０８は、単一の内部バス相互接続アーキテクチャ及び／又は他のバスアーキテクチャ若しくはメッシュアーキテクチャとすることができる。単一のバスが示されているが、コンピュータ９００は、図示しない他のバス（たとえば、ＰＣＩＥ、ＳＡＴＡ、インフィニバンド、１３９４、ＵＳＢ、イーサネット（登録商標））を使用してさまざまなデバイス、ロジック、及び周辺機器と通信することができることが理解されるべきである。バス９０８は、さまざまなタイプのものとすることができる。このさまざまなタイプには、メモリバス、周辺バス若しくは外部バス、クロスバースイッチ、及び／又はローカルバスが含まれるが、これらに限定されるものではない。ローカルバスは、さまざまなものとすることができる。このさまざまなものには、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＳＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、周辺機器相互接続（ＰＣＩ）バス、ユニバーサルシリアルバス（ＵＳＢ）、及び小型コンピュータシステムインターフェース（ＳＣＳＩ）バスが含まれるが、これらに限定されるものではない。
【００６４】
コンピュータ９００は、Ｉ／Ｏインターフェース９１８及び入出力ポート９１０を介して入出力デバイスと相互作用することができる。入出力デバイスには、キーボード、マイク、ポインティング／選択デバイス、カメラ、ビデオカード、ディスプレイ、ディスク９０６、ネットワークデバイス９２０等が含まれ得るが、これらに限定されるものではない。入出力ポート９１０には、シリアルポート、パラレルポート、及びＵＳＢポートが含まれ得るが、これらに限定されるものではない。
【００６５】
コンピュータ９００は、ネットワーク環境で動作することができ、したがって、Ｉ／Ｏインターフェース９１８及び／又はＩ／Ｏポート９１０を介してネットワークデバイス９２０に接続することができる。ネットワークデバイス９２０を通じて、コンピュータ９００は、ネットワークと相互作用することができる。ネットワークを通じて、コンピュータ９００は、リモートコンピュータに論理的に接続することができる。コンピュータ９００が相互作用できるネットワークには、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、及び他のネットワークが含まれるが、これらに限定されるものではない。ネットワークデバイス９２０は、ＬＡＮ技術に接続することができる。このＬＡＮ技術には、ファイバ分散データインターフェース（ＦＤＤＩ）、銅分散データインターフェース（copper distributed data interface；ＣＤＤＩ）、イーサネット（ＩＥＥＥ８０２．３）、トークンリング（ＩＥＥＥ８０２．５）、無線コンピュータ通信（ＩＥＥＥ８０２．１１）、ブルートゥース（ＩＥＥＥ８０２．１５．１）、Ｚｉｇｂｅｅ（ＩＥＥＥ８０２．１５．４）等が含まれるが、これらに限定されるものではない。同様に、ネットワークデバイス９２０は、ＷＡＮ技術にも接続することができる。このＷＡＮ技術には、ポイントツーポイントリンク、統合サービスデジタル網（ＩＳＤＮ）のような回線交換ネットワーク、パケット交換ネットワーク、及びデジタル加入者線（ＤＳＬ）が含まれるが、これらに限定されるものではない。個々のネットワークタイプを説明しているが、ネットワークを介した、ネットワーク上の（over）、且つ／又はネットワークを通じた通信には、複数の通信を組み合わせたもの及び複数の通信を混合したものが含まれ得ることが理解されるべきである。
【００６６】
図１０は、本明細書で説明したシステム例のように動作するよう構成された圧縮（伸張）ロジック１０１０及びメモリコントローラ１０６０を含む一例の画像形成デバイス１０００を示している。圧縮（伸張）ロジック１０１０及びメモリコントローラ１０６０は、本明細書で説明した方法のような実行可能方法を実行するように構成されたロジックを含むことができる。圧縮（伸張）ロジック１０１０及びメモリコントローラ１０６０は、画像形成デバイス１０００に恒久的に、且つ／又は、着脱可能に取り付けることができる。
【００６７】
画像形成デバイス１０００は、レンダリングされる印刷データを受信することができる。したがって、画像形成デバイス１０００は、印刷データを記憶するように構成された、より一般的には、画像処理に使用されるように構成されたメモリ１０２０も含むことができる。また、画像形成デバイス１０００は、印刷データからプリンタ準備画像を生成するように構成されたレンダリングロジック１０３０も含むことができる。レンダリングは、関与するデータのフォーマット、及び、画像化デバイスのタイプに基づいて変化する。一般に、レンダリングロジック１０３０は、高レベルデータを、表示用又は印刷用のグラフィカル画像（たとえば、印刷準備データ）に変換する。たとえば、一形態は、３次元物体又は３次元シーンの数学的モデルを取り込んで、その数学的モデルをビットマップ画像に変換するレイトレーシングである。別の例は、ＨＴＭＬを表示／印刷用の画像に変換するプロセスである。画像形成デバイス１０００は、レンダリングする必要のないプリンタ準備データを受信することもでき、したがって、レンダリングロジック１０３０は、いくつかの画像形成デバイスには現れない場合があることは理解すべきである。
【００６８】
また、画像形成デバイス１０００は、印刷準備画像から印刷媒体上に画像を生成するように構成された画像形成メカニズム１０４０も含むことができる。この画像形成メカニズム１０４０は、画像デバイス１０００のタイプに基づいて変化する場合があり、レーザ画像化メカニズム、他のトナーに基づく画像化メカニズム、インクジェットメカニズム、デジタル画像化メカニズム、又は他の画像化復元エンジンを含むことができる。画像形成デバイス１０００のオペレーションを制御するロジックで実施されるプロセッサ１０５０を含めることができる。一例では、プロセッサ１０５０は、Ｊａｖａ命令を実行できるロジックを含む。画像形成デバイス１０００の他のコンポーネントは、本明細書では説明されていないが、画像化プロセスに関与する媒体ハンドリングメカニズム及び記憶メカニズム、センサ、コントローラ、並びに他のコンポーネントを含むことができる。
【００６９】
システム例、方法例等を、例を説明することによって示し、これらの例をかなり詳細に説明してきたが、添付の特許請求の範囲をこのような詳細なものに制限することも、多少なりとも限定することも、出願人の意図するところではない。もちろん、本明細書で説明したシステム、方法等を説明するために、コンポーネント又は方法論の考えられるあらゆる組み合わせを説明することは不可能である。別の利点及び変更が、当業者には容易に明らかになるであろう。したがって、この発明は、図示して説明した特定の詳細、代表的な装置、及び例示した例に限定されるものではない。このように、この出願は、添付した特許請求の範囲の範囲内に入る改変、変更、及び変形を包含することを目的としている。さらに、上記説明は、この発明の範囲を限定するように意図されていない。そうではなく、この発明の範囲は、添付の特許請求の範囲及びその均等物によって確定されることになる。
【００７０】
用語「含む」は、発明を実施するための最良の形態又は特許請求の範囲で使用される限りにおいて、用語「備える」が特許請求の範囲で慣習的な用語として使用された場合にその用語が解釈されるのと同様に、包含的であるように意図されている。さらに、用語「又は／若しくは」は、発明を実施するための最良の形態又は特許請求の範囲で使用される限りにおいて（たとえば、Ａ又はＢ）、「Ａ若しくはＢ又は双方」を意味するように意図されている。出願人が、「Ａ又はＢのみであって、双方ではない」ことを示すように意図している場合、用語「Ａ又はＢのみであって、双方ではない」が使用されることになる。したがって、本明細書における用語「又は／若しくは」の使用は、包含的な使用であって、排他的な使用ではない。これについては、Bryan A. Garner著「A Dictionary of Modern Legal Usage」624 (2d. Ed. 1995)を参照されたい。
【図面の簡単な説明】
【００７１】
【図１】一例のメモリコントローラ、ＲＡＭコントローラ、ＲＡＭのアーキテクチャを示す図である。
【図２】別の例のメモリコントローラ、ＲＡＭコントローラ、ＲＡＭのアーキテクチャを示す図である。
【図３】圧縮データを節約することに関連した一例の方法を示す図である。
【図４】圧縮データを節約することに関連した別の例の方法を示す図である。
【図５】圧縮データの読み出し及び書き込みに関連した一例の方法を示す図である。
【図６】メモリコントローラベースの圧縮（伸張）に関連した一例のシステムを示す図である。
【図７】メモリコントローラベースの圧縮（伸張）に関連した別の例のシステムを示す図である。
【図８】メモリコントローラベースの圧縮（伸張）に関連した別の例のシステムを示す図である。
【図９】本明細書に示すシステム例及び方法例が動作できる一例のコンピューティング環境を示す図である。
【図１０】本明細書に示すシステム例及び方法例が動作できる一例の画像形成デバイスを示す図である。
【符号の説明】
【００７２】
１００・・・アーキテクチャ
１１０・・・メモリコントローラ
１１２・・・圧縮ロジック
１２０・・・ＲＡＭコントローラ
２１０・・・メモリコントローラ
２１２・・・圧縮（伸張）ロジック
２２０・・・ＲＡＭコントローラ
６００・・・システム
６１０・・・メモリコントローラロジック
６１２・・・受信ロジック
６１４・・・圧縮ロジック
６１６・・・書き込み長ロジック
６２０・・・ＲＡＭコントローラロジック
６２２・・・バーストモード制御ロジック
６２４・・・書き込みロジック
７００・・・システム
７２６・・・読み出し長ロジック
７２８・・・取り出しロジック
８００・・・システム
８４０・・・伸張ロジック
９００・・・コンピュータ
９０２・・・プロセッサ
９０４・・・メモリ
９０６・・・ディスク
９０８・・・バス
９１０・・・Ｉ／Ｏポート
９１４・・・プロセス
９１６・・・データ
９１８・・・Ｉ／Ｏインターフェース
９２０・・・ネットワークデバイス
９３０・・・圧縮（伸張）ロジック
９３２・・・メモリコントローラ
９４０・・・Ｉ／Ｏコントローラ
１０００・・・画像形成デバイス
１０１０・・・圧縮（伸張）ロジック
１０２０・・・メモリ
１０３０・・・レンダリングロジック
１０４０・・・画像形成メカニズム
１０５０・・・プロセッサ
１０６０・・・メモリコントローラ
【図１】
2007004795.tif 000003
【図２】
2007004795.tif 000004
【図３】
2007004795.tif 000005
【図４】
2007004795.tif 000006
【図５】
2007004795.tif 000007
【図６】
2007004795.tif 000008
【図７】
2007004795.tif 000009
【図８】
2007004795.tif 000010
【図９】
2007004795.tif 000011
【図１０】
2007004795.tif 000012