(57)【特許請求の範囲】
【請求項１】
システムバスを介してシステムメモリにアクセスするように構成されたメモリインターフェースと、
前記システムメモリ内のマスタディレクトリの以前に読み出されたマスタディレクトリメモリブロックを記憶するように各々が構成された複数のCIキャッシュエントリを備える圧縮インジケータ(CI)キャッシュと
を備える圧縮メモリコントローラであって、
前記システムメモリ内のメモリライン内のアクセスされるべきメモリブロックの物理アドレスを備えるメモリ読出し要求を受信し、
前記物理アドレスが前記CIキャッシュの前記複数のCIキャッシュエントリのうちのCIキャッシュエントリに対応するかどうかを決定し、
前記物理アドレスが前記CIキャッシュの前記複数のCIキャッシュエントリのうちのCIキャッシュエントリに対応しないことを決定することに応答して、
前記マスタディレクトリから前記物理アドレスに対応するCIを含むマスタディレクトリメモリブロックを読み出し、
前記CIキャッシュのCIキャッシュエントリに前記マスタディレクトリメモリブロックを書き込み、
前記CIキャッシュの前記CIキャッシュエントリから前記CIを読出し、
前記物理アドレスが前記CIキャッシュの前記複数のCIキャッシュエントリのうちのCIキャッシュエントリに対応することを決定することに応答して、前記CIキャッシュの前記CIキャッシュエントリから前記CIを読み出し、
前記CIに基づいて、前記メモリ読出し要求のために読み出す前記システムメモリ内の前記メモリライン内のメモリブロックの数を決定し、
前記CIが前記マスタディレクトリから読み出されるべきであることを確率的に決定することに応答して、前記物理アドレスにおいて開始する前記システムメモリ内の前記メモリライン内の前記決定された数のメモリブロックを読み出すように構成され、
前記CIが前記マスタディレクトリから読み出されるべきではないことを確率的に決定することに応答して、前記メモリブロックに関連付けられた1つまたは複数の誤り訂正コード(ECC)ビットから前記CIを読み出すようさらに構成された、圧縮メモリコントローラ。
【請求項２】
前記CIキャッシュの前記CIキャッシュエントリに前記マスタディレクトリメモリブロックを書き込む前に、
前記CIキャッシュの現在のCIキャッシュエントリが追い出されるべきであるかどうかを決定し、
現在のCIキャッシュエントリが追い出されるべきであることを決定することに応答して、
前記現在のCIキャッシュエントリが修正されているかどうかを決定し、
前記現在のCIキャッシュエントリが修正されていることを決定することに応答して、前記マスタディレクトリに前記現在のCIキャッシュエントリを書き込むようにさらに構成された、請求項1に記載の圧縮メモリコントローラ。
【請求項３】
前記物理アドレスが前記CIキャッシュの前記複数のCIキャッシュエントリのうちの前記CIキャッシュエントリに対応するかどうかを決定することに並行して、前記システムメモリに早期メモリ読出し要求を送信するようにさらに構成され、
前記圧縮メモリコントローラが、前記物理アドレスが前記CIキャッシュの前記複数のCIキャッシュエントリのうちの前記CIキャッシュエントリに対応することを決定することに応答して、前記CIに基づいて前記早期メモリ読出し要求を修正するように構成されていることによって、前記決定された数のメモリブロックを読み出すように構成された、請求項1に記載の圧縮メモリコントローラ。
【請求項４】
前記物理アドレスが前記CIキャッシュの前記複数のCIキャッシュエントリのうちの前記CIキャッシュエントリに対応するかどうかを決定することに並行して、レベル4(L4)キャッシュ上のキャッシュ読出し動作を実行するようにさらに構成された、請求項1に記載の圧縮メモリコントローラ。
【請求項５】
前記CIによって示された圧縮パターンを決定するように構成されていることによって、前記CIに基づいて、前記メモリ読出し要求のために読み出す前記システムメモリ内の前記メモリライン内のメモリブロックの前記数を決定するように構成された、請求項1に記載の圧縮メモリコントローラ。
【請求項６】
前記CIが、ゼロのメモリブロックが読み出されるべきであることを示すゼロラインインジケータを備えることを決定するように構成されていることによって、前記CIによって示される前記圧縮パターンを決定するように構成された、請求項5に記載の圧縮メモリコントローラ。
【請求項７】
システムバスを介してシステムメモリにアクセスするように構成されたメモリインターフェースと、
前記システムメモリ内のマスタディレクトリの以前に読み出されたマスタディレクトリメモリブロックを記憶するように各々が構成された複数のCIキャッシュエントリを備える圧縮インジケータ(CI)キャッシュと
を備える圧縮メモリコントローラであって、
書込みデータと、前記システムメモリ内のメモリライン内の書き込まれるべきメモリブロックの物理アドレスとを備えるメモリ書込み要求を受信し、
前記書込みデータのための圧縮パターンを決定し、
前記圧縮パターンに基づいて前記書込みデータのためのCIを生成し、
前記物理アドレスが前記CIキャッシュの前記複数のCIキャッシュエントリのうちのCIキャッシュエントリに対応するかどうかを決定し、
前記物理アドレスが前記CIキャッシュの前記複数のCIキャッシュエントリのうちのCIキャッシュエントリに対応しないことを決定することに応答して、
前記マスタディレクトリ内の前記物理アドレスに対応する記憶されたCIを、前記生成されたCIで更新し、
前記CIキャッシュのCIキャッシュエントリに前記記憶されたCIを書き込み、
前記物理アドレスが前記CIキャッシュの前記複数のCIキャッシュエントリのうちのCIキャッシュエントリに対応することを決定することに応答して、
前記CIキャッシュの前記CIキャッシュエントリを前記生成されたCIで更新し、
前記生成されたCIに基づいて、前記システムメモリ内の前記メモリライン内の1つまたは複数のメモリブロックに前記書込みデータを書き込み、
前記システムメモリ内の前記メモリライン内の前記1つまたは複数のメモリブロックの各々の1つまたは複数の誤り訂正コード(ECC)ビット内に前記生成されたCIを書き込むように構成された、圧縮メモリコントローラ。
【請求項８】
前記CIが前記マスタディレクトリ内で更新されるべきであることを確率的に決定することに応答して、前記記憶されたCIを更新するように構成された、請求項7に記載の圧縮メモリコントローラ。
【請求項９】
前記マスタディレクトリが更新されるべきであることを確率的に決定することにさらに応答して、前記記憶されたCIを更新し、前記CIキャッシュの前記CIキャッシュエントリに前記記憶されたCIを書き込むように構成された、請求項7に記載の圧縮メモリコントローラ。
【請求項１０】
前記CIキャッシュの前記CIキャッシュエントリに前記記憶されたCIを書き込む前に、
前記CIキャッシュの現在のCIキャッシュエントリが追い出されるべきかどうかを決定し、
現在のCIキャッシュエントリが追い出されるべきであると決定することに応答して、
前記現在のCIキャッシュエントリが修正されているかどうかを決定し、
前記現在のCIキャッシュエントリが修正されていることを決定することに応答して、前記マスタディレクトリに前記CIキャッシュエントリを書き込むようにさらに構成された、請求項7に記載の圧縮メモリコントローラ。
【請求項１１】
メモリ読出し要求のためのメモリ帯域幅の圧縮を提供するための方法であって、
圧縮メモリコントローラによって、システムバスを介して、システムメモリ内のメモリライン内のアクセスされるべきメモリブロックの物理アドレスを備えるメモリ読出し要求を受信するステップと、
前記物理アドレスが圧縮インジケータ(CI)キャッシュの複数のCIキャッシュエントリのうちのCIキャッシュエントリに対応するかどうかを決定するステップと、
前記物理アドレスが前記CIキャッシュの前記複数のCIキャッシュエントリのうちのCIキャッシュエントリに対応しないことを決定することに応答して、
前記システムメモリ内のマスタディレクトリから前記物理アドレスに対応する圧縮インジケータ(CI)を含むマスタディレクトリメモリブロックを読み出すステップと、
前記CIキャッシュのCIキャッシュエントリに前記マスタディレクトリメモリブロックを書き込むステップと、
前記CIキャッシュの前記CIキャッシュエントリから前記CIを読み出すステップと、
前記物理アドレスが前記CIキャッシュの前記複数のCIキャッシュエントリのうちのCIキャッシュエントリに対応することを決定することに応答して、
前記CIキャッシュの前記CIキャッシュエントリから前記CIを読み出すステップと、
前記CIに基づいて、前記メモリ読出し要求のために読み出す前記システムメモリ内の前記メモリライン内のメモリブロックの数を決定するステップと、
前記CIが前記マスタディレクトリから読み出されるべきであることを確率的に決定することに応答して、前記物理アドレスにおいて開始する前記システムメモリ内の前記メモリライン内の前記決定された数のメモリブロックを読み出すステップと、
前記CIが前記マスタディレクトリから読み出されるべきではないことを確率的に決定することに応答して、前記メモリブロックに関連付けられた1つまたは複数の誤り訂正コード(ECC)ビットから前記CIを読み出すステップと、
を備える方法。
【請求項１２】
メモリ書込み要求のためのメモリ帯域幅の圧縮を提供するための方法であって、
圧縮メモリコントローラによって、システムバスを介して、書込みデータと、システムメモリ内のメモリライン内の書き込まれるべきメモリブロックの物理アドレスとを備えるメモリ書込み要求を受信するステップと、
前記書込みデータのための圧縮パターンを決定するステップと、
前記圧縮パターンに基づいて前記書込みデータのための圧縮インジケータ(CI)を生成するステップと、
前記物理アドレスに対応するCIがCIキャッシュの複数のCIキャッシュエントリのうちのCIキャッシュエントリ内に存在するかどうかを決定するステップと、
前記物理アドレスに対応するCIが前記CIキャッシュの前記複数のCIキャッシュエントリのうちのCIキャッシュエントリ内に存在しないことを決定することに応答して、
マスタディレクトリ内の前記物理アドレスに対応する記憶されたCIを前記生成されたCIで更新するステップと、
前記CIキャッシュのCIキャッシュエントリに前記記憶されたCIを書き込むステップと、
前記物理アドレスに対応するCIが前記CIキャッシュの前記複数のCIキャッシュエントリのうちのCIキャッシュエントリ内に存在することを決定することに応答して、
前記CIキャッシュの前記CIキャッシュエントリを前記生成されたCIで更新するステップと、
前記生成されたCIに基づいて、前記システムメモリ内の前記メモリライン内の1つまたは複数のメモリブロックに前記書込みデータを書き込むステップと、
前記システムメモリ内の前記メモリライン内の前記1つまたは複数のメモリブロックの各々の1つまたは複数の誤り訂正コード(ECC)ビット内に前記生成されたCIを書き込むステップと
を備える方法。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権出願
本出願は、その全体が参照により本明細書に組み込まれている、2014年5月21日に出願した、「MEMORY CONTROLLERS EMPLOYING MEMORY CAPACITY AND/OR BANDWIDTH COMPRESSION, AND RELATED PROCESSOR-BASED SYSTEMS AND METHODS」と題する、米国仮特許出願第62/001,545号の優先権を主張するものである。
【０００２】
本出願はまた、その全体が参照により本明細書に組み込まれている、2014年12月16日に出願した、「MEMORY CONTROLLERS EMPLOYING MEMORY CAPACITY AND/OR BANDWIDTH COMPRESSION, AND RELATED PROCESSOR-BASED SYSTEMS AND METHODS」と題する、米国仮特許出願第62/092,326号の優先権を主張するものである。
【０００３】
本出願はまた、その全体が参照により本明細書に組み込まれている、2014年12月16日に出願した、「MEMORY CONTROLLERS EMPLOYING MEMORY CAPACITY AND/OR BANDWIDTH COMPRESSION WITH NEXT READ ADDRESS PREFETCHING, AND RELATED PROCESSOR-BASED SYSTEMS AND METHODS」と題する、米国仮特許出願第62/092,409号の優先権を主張するものである。
【０００４】
本出願はまた、その全体が参照により本明細書に組み込まれている、2015年5月19日に出願した、「MEMORY CONTROLLERS EMPLOYING MEMORY CAPACITY COMPRESSION, AND RELATED PROCESSOR-BASED SYSTEMS AND METHODS」と題する、米国特許出願第14/716,001号の優先権を主張するものである。
【０００５】
本出願はまた、その全体が参照により本明細書に組み込まれている、2015年5月20日に出願した、「PROVIDING MEMORY BANDWIDTH COMPRESSION USING COMPRESSED MEMORY CONTROLLERS (CMCs) IN A CENTRAL PROCESSING UNIT (CPU)-BASED SYSTEM」と題する、米国特許出願第14/717,552号の優先権を主張するものである。
【０００６】
本開示の技術は、一般には、コンピュータメモリシステムに関し、詳細には、中央処理装置(CPU)にメモリへのメモリアクセスインターフェースを提供するためのコンピュータメモリシステム内のメモリコントローラに関する。
【背景技術】
【０００７】
マイクロプロセッサは、多種多様な用途において計算タスクを実行する。典型的なマイクロプロセッサの用途は、ソフトウェア命令を実行する1つまたは複数の中央処理装置(CPU)を含む。ソフトウェア命令は、メモリ内の位置からデータをフェッチするようにCPUに命令し、フェッチしたデータを使用して1つまたは複数のCPU動作を実行し、結果を生成し得る。結果は、次いで、メモリ内に記憶され得る。非限定的な例として、このメモリは、CPUローカルなキャッシュ、CPUブロック内のCPU間で共有されるローカルキャッシュ、複数のCPUブロック間で共有されるキャッシュ、またはマイクロプロセッサのメインメモリであり得る。
【０００８】
この点について、図1は、CPU搭載システム12を含む例示的なシステムオンチップ(SoC)10の概略図である。CPU搭載システム12は、この例では複数のCPUブロック14(1)〜14(N)を含み、ここで「N」は、所望のCPUブロック14(1)〜14(N)の任意の数に等しい。図1の例では、CPUブロック14(1)〜14(N)の各々は、2つのCPU16(1)、CPU16(2)を含む。CPUブロック14(1)〜14(N)は、さらに、それぞれ、共有レベル2(L2)キャッシュ18(1)〜18(N)を含む。共有レベル3(L3)キャッシュ20はまた、CPUブロック14(1)〜14(N)の各々のいずれかによって使用される、またはCPUブロック14(1)〜14(N)の各々の間で共有されるキャッシュされたデータを記憶するために設けられる。内部システムバス22は、CPUブロック14(1)〜14(N)の各々が共有L3キャッシュ20ならびに他の共有リソースにアクセスすることを可能にするために設けられる。内部システムバス22を介してCPUブロック14(1)〜14(N)によってアクセスされる他の共有リソースは、メイン外部メモリ(たとえば、非限定的な例として、二重レートダイナミックランダムアクセスメモリ(DRAM)(DDR))にアクセスするためのメモリコントローラ24、周辺機器26、他のストレージ28、エクスプレス周辺機器構成要素相互接続(PCI)(PCI-e)インターフェース30、ダイレクトメモリアクセス(DMA)コントローラ32、および/または統合メモリコントローラ(IMC)34を含み得る。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
図1中のCPU搭載システム12において実行されるCPUベースのアプリケーションは、複雑さおよび性能が増加するにつれて、共有L2キャッシュ18(1)〜18(N)および共有L3キャッシュ20、ならびにメモリコントローラ24を介してアクセス可能な外部メモリのメモリ容量要件も、増加し得る。データ圧縮は、物理メモリ容量を増加させることなく、CPU搭載システム12の有効メモリ容量を増加させるために用いられ得る。しかしながら、データ圧縮の使用は、データが圧縮されているかまたは圧縮されてないかに応じて、データを検索するとき複数のメモリアクセス要件が必要とされ得るとき、メモリアクセスレイテンシを増加させ得、付加的なメモリ帯域幅を消費し得る。したがって、メモリアクセスレイテンシおよびメモリ帯域幅への影響を軽減しながら、データ圧縮を使用するCPU搭載システム12のメモリ容量を増加させることが望ましい。
【課題を解決するための手段】
【００１０】
本明細書で開示された態様は、中央処理装置(CPU)搭載システム内の圧縮メモリコントローラ(CMC)を使用してメモリ帯域幅の圧縮を提供することを含む。この点について、いくつかの態様では、CMCは、メモリ読出し要求および/またはメモリ書込み要求のためのメモリ帯域幅の圧縮を提供するように構成される。いくつかの態様によれば、システムメモリ内の物理アドレスへのメモリ読出し要求を受信すると、CMCは、マスタディレクトリからおよび/またはシステムメモリ内の物理アドレスに関連付けられた誤り訂正コード(ECC)ビットから、物理アドレスのための圧縮インジケータ(CI)を読み出し得る。いくつかの態様では、CIは、CMCに(たとえば、データが圧縮されているかまたは圧縮されていないかを示す、および/または、圧縮されたデータが物理アドレスにおいて記憶されたメモリブロックの数を示す)圧縮パターンを提供し得る。CIに基づいて、CMCは、メモリ読出し要求のために読み出されるべきメモリブロックの数を決定し、物理アドレスにおいて開始する決定された数のメモリブロックを読み出す。いくつかの態様では、システムメモリ内の物理アドレスへのメモリ書込み要求を受信すると、CMCは、書き込むべき書込みデータのための圧縮パターンを決定し得、圧縮パターンに基づいて書込みデータのためのCIを生成し得る。CMCは、次いで、マスタディレクトリ、および/または物理アドレスに関連付けられたECCビットを更新し得、生成されたCIに基づいてシステムメモリに書込みデータを書き込み得る。CMCのいくつかの態様は、さらに、以前の読出しCIをキャッシュするためのCIキャッシュを提供し得る。このようにして、CMCは、圧縮されたおよび圧縮されていないデータをより効率的に読み書きすることができ、減少したメモリアクセスレイテンシおよび改善されたシステム性能をもたらす。
【００１１】
別の態様では、CMCが提供される。CMCは、システムバスを介してシステムメモリにアクセスするように構成されたメモリインターフェースを備える。CMCは、システムメモリ内のメモリライン内でアクセスされるべきメモリブロックの物理アドレスを備えるメモリ読出し要求を受信するように構成される。CMCは、さらに、システムメモリ内のマスタディレクトリから物理アドレスに対応するCIを含むマスタディレクトリメモリブロックを読み出すように構成される。CMCはまた、CIに基づいて、メモリ読出し要求のために読み出すシステムメモリ内のメモリライン内のメモリブロックの数を決定するように構成される。CMCは、加えて、物理アドレスにおいて開始するシステムメモリ内のメモリライン内の決定された数のメモリブロクを読み出すように構成される。
【００１２】
別の態様では、CMCが提供される。CMCは、システムバスを介してシステムメモリにアクセスするように構成されたメモリインターフェースを備える。CMCは、書込みデータと、システムメモリ内のメモリライン内の書き込まれるべきメモリブロックの物理アドレスとを備えるメモリ書込み要求を受信するように構成される。CMCは、さらに、書込みデータのための圧縮パターンを決定するように構成される。CMCはまた、圧縮パターンに基づいて書込みデータのためのCIを生成するように構成される。CMCは、加えて、マスタディレクトリ内の物理アドレスに対応する記憶されたCIを、生成されたCIで更新するように構成される。CMCは、さらに、生成されたCIに基づいて、システムメモリ内のメモリライン内の1つまたは複数のメモリブロックに書込みデータを書き込むように構成される。CMCはまた、システムメモリのメモリライン内の1つまたは複数のメモリブロックの各々の1つまたは複数のECCビット内に、生成されたCIを書き込むように構成される。
【００１３】
別の態様では、メモリ読出し要求のためのメモリ帯域幅の圧縮を提供するための方法が提供される。方法は、システムバスを介してCMCによって、システムメモリ内のメモリライン内のアクセスされるべきメモリブロックの物理アドレスを備えるメモリ読出し要求を受信するステップを備える。方法は、さらに、システムメモリ内のマスタディレクトリから、物理アドレスに対応するCIを含むマスタディレクトリメモリブロックを読み出すステップを備える。方法はまた、CIに基づいて、メモリ読出し要求のために読み出すシステムメモリ内のメモリライン内のメモリブロックの数を決定するステップを備える。方法は、加えて、物理アドレスにおいて開始するシステムメモリ内のメモリライン内の決定された数のメモリブロックを読み出すステップを備える。
【００１４】
別の態様では、メモリ書込み要求のためのメモリ帯域幅の圧縮を提供するための方法が提供される。方法は、システムバスを介してCMCによって、書込みデータと、システムメモリ内のメモリライン内に書き込まれるべきメモリブロックの物理アドレスとを備えるメモリ書込み要求を受信するステップを備える。方法は、さらに、書込みデータのための圧縮パターンを決定するステップを備える。方法はまた、圧縮パターンに基づいて書込みデータのためのCIを生成するステップを備える。方法は、加えて、マスタディレクトリ内の物理アドレスに対応する記憶されたCIを、生成されたCIで更新するステップを備える。方法は、さらに、生成されたCIに基づいて、システムメモリ内のメモリライン内の1つまたは複数のメモリブロックに書込みデータを書き込むステップを備える。方法はまた、システムメモリのメモリライン内の1つまたは複数のメモリブロックの各々の1つまたは複数のECCビット内に、生成されたCIを書き込むステップを備える。
【００１５】
他の態様では、小さいデータブロックの圧縮に適し得る圧縮方法およびフォーマットが開示される。これらの圧縮方法およびフォーマットは、本明細書で開示されたメモリ帯域幅圧縮態様に用いられ得る。
【００１６】
これらCMCおよび圧縮機構のいくつかのまたはすべての態様では、物理メモリサイズの増加を軽減し、システム性能への影響を最小限に抑えながら、メモリアクセスレイテンシを減少させ、CPU搭載システムのメモリ帯域幅を効果的に増加させることが可能であり得る。
【図面の簡単な説明】
【００１７】
【図１】中央処理装置(CPU)搭載システムを含む例示的なシステムオンチップ(SoC)の概略図である。
【図２】複数のCPUと、メモリ帯域幅の圧縮を提供するように構成された圧縮メモリコントローラ(CMC)とを有する例示的なCPU搭載システムを含むSoCの概略図である。
【図３】CMCが、さらに、メモリ帯域幅の圧縮を提供するために用いられ得るオプションの内部メモリに通信可能に結合された、図2のCMCのより詳細な概略図である。
【図４】図3のCMCによって実装され得る例示的なメモリ帯域幅圧縮機構の概略図である。
【図５】CMCにおけるアドレス変換による性能損失を補償するためにオプションのレベル4(L4)キャッシュを含む図1のSoCの一例を示す図である。
【図６Ａ】メモリ読出し動作およびメモリ書込み動作の間の例示的な通信フローと、メモリ帯域幅の圧縮を提供するための図3のCMCによってアクセスされ得る図4のシステムメモリおよびマスタディレクトリの例示的な要素とを示す図である。
【図６Ｂ】メモリ読出し動作およびメモリ書込み動作の間の例示的な通信フローと、メモリ帯域幅の圧縮を提供するための図3のCMCによってアクセスされ得る図4のシステムメモリおよびマスタディレクトリの例示的な要素とを示す図である。
【図７】メモリ帯域幅の圧縮を使用して図6AのCMCによってメモリ読出し動作を実行するための例示的な動作を示すフローチャートである。
【図８】メモリ帯域幅の圧縮を使用して図6BのCMCによるメモリ書込み動作を実行するための例示的な動作を示すフローチャートである。
【図９Ａ】メモリ読出し動作およびメモリ書込み動作の間の例示的な通信フローと、メモリ帯域幅の圧縮を提供するための図3中のCMCのいくつかの態様によって提供される圧縮インジケータ(CI)のキャッシュの例示的な要素とを示す図である。
【図９Ｂ】メモリ読出し動作およびメモリ書込み動作の間の例示的な通信フローと、メモリ帯域幅の圧縮を提供するための図3中のCMCのいくつかの態様によって提供される圧縮インジケータ(CI)キャッシュの例示的な要素とを示す図である。
【図１０Ａ】CIキャッシュを使用して図9AのCMCによるメモリ読出し動作を実行するための例示的な動作を示すフローチャートである。
【図１０Ｂ】CIキャッシュを使用して図9AのCMCによるメモリ読出し動作を実行するための例示的な動作を示すフローチャートである。
【図１０Ｃ】CIキャッシュを使用して図9AのCMCによるメモリ読出し動作を実行するための例示的な動作を示すフローチャートである。
【図１１Ａ】CIキャッシュを使用して図9BのCMCによるメモリ書込み動作を実行するための例示的な動作を示すフローチャートである。
【図１１Ｂ】CIキャッシュを使用して図9BのCMCによるメモリ書込み動作を実行するための例示的な動作を示すフローチャートである。
【図１１Ｃ】CIキャッシュを使用して図9BのCMCによるメモリ書込み動作を実行するための例示的な動作を示すフローチャートである。
【図１２】そのいずれかがメモリデータブロックを圧縮および伸長するために図3のCMCによって使用され得る、例示的なデータブロック圧縮フォーマットおよび機構を示す図である。
【図１３】そのいずれかがメモリデータブロックを圧縮および伸長するために図3のCMCによって使用され得る、例示的なデータブロック圧縮フォーマットおよび機構を示す図である。
【図１４】そのいずれかがメモリデータブロックを圧縮および伸長するために図3のCMCによって使用され得る、例示的なデータブロック圧縮フォーマットおよび機構を示す図である。
【図１５】そのいずれかがメモリデータブロックを圧縮および伸長するために図3のCMCによって使用され得る、例示的なデータブロック圧縮フォーマットおよび機構を示す図である。
【図１６】そのいずれかがメモリデータブロックを圧縮および伸長するために図3のCMCによって使用され得る、例示的なデータブロック圧縮フォーマットおよび機構を示す図である。
【図１７】そのいずれかがメモリデータブロックを圧縮および伸長するために図3のCMCによって使用され得る、例示的なデータブロック圧縮フォーマットおよび機構を示す図である。
【図１８】そのいずれかがメモリデータブロックを圧縮および伸長するために図3のCMCによって使用され得る、例示的なデータブロック圧縮フォーマットおよび機構を示す図である。
【図１９】図2のCMCを用いる図1のSoCを含み得る例示的なコンピューティングデバイスのブロック図である。
【発明を実施するための形態】
【００１８】
ここで図面を参照すると、本開示のいくつかの例示的な態様が記載されている。「例示的」という語は、本明細書では「一例、事例、または例示としての役割を果たすこと」を意味するために使用される。「例示的」として本明細書において説明されるいずれの態様も、必ずしも他の態様よりも好ましいか、または有利であると解釈されるとは限らない。
【００１９】
本明細書で開示された態様は、中央処理装置(CPU)搭載システム内の圧縮メモリコントローラ(CMC)を使用してメモリ帯域幅の圧縮を提供することを含む。この点について、いくつかの態様では、CMCは、メモリ読出し要求および/またはメモリ書込み要求のためのメモリ帯域幅の圧縮を提供するように構成される。いくつかの態様によれば、システムメモリ内の物理アドレスへのメモリ読出し要求を受信すると、CMCは、マスタディレクトリからおよび/またはシステムメモリ内の物理アドレスに関連付けられた誤り訂正コード(ECC)ビットから、物理アドレスのための圧縮インジケータ(CI)を読み出し得る。いくつかの態様では、CIは、CMCに(たとえば、データが圧縮されているかまたは圧縮されていないかを示す、および/または、圧縮されたデータが物理アドレスにおいて記憶されたメモリブロックの数を示す)圧縮パターンを提供し得る。CIに基づいて、CMCは、メモリ読出し要求のために読み出されるべきメモリブロックの数を決定し、物理アドレスにおいて開始する決定された数のメモリブロックを読み出す。いくつかの態様では、システムメモリ内の物理アドレスへのメモリ書込み要求を受信すると、CMCは、書き込むべき書込みデータのための圧縮パターンを決定し得、圧縮パターンに基づいて書込みデータのためのCIを生成し得る。CMCは、次いで、マスタディレクトリ、および/または物理アドレスに関連付けられたECCビットを更新し得、生成されたCIに基づいてシステムメモリに書込みデータを書き込み得る。CMCのいくつかの態様は、さらに、以前の読出しCIをキャッシュするためのCIキャッシュを提供し得る。このようにして、CMCは、圧縮されたおよび圧縮されていないデータをより効率的に読み書きすることができ、減少したメモリアクセスレイテンシおよび改善されたシステム性能をもたらす。
【００２０】
この点について、図2は、図1中のCPU搭載システム12と同様の複数のCPUブロック14(1)〜14(N)を有する例示的なCPU搭載システム12'を含むSoC10'の概略図である。図12中のCPU搭載システム12'は、図1中のCPU搭載システム12といくつかの共通の構成要素を含み、それらは、図1と図2との間で共通の要素番号によって示される。簡潔にするために、これらの構成要素を再び説明しない。しかしながら、図2中のCPU搭載システム12'では、CMC36が設けられる。CMC36は、システムメモリ38へのアクセスを制御する。システムメモリ38は、非限定的な例として、1つまたは複数の二重データレート(DDR)ダイナミックランダムアクセスメモリ(DRAM)40(1)〜40(R)(以下、「DRAM40(1)〜40(R)」と呼ぶ)を備え得る。この例におけるCMC36は、本明細書および以下で開示された態様によるメモリ帯域幅の圧縮を用いる。図1のCPU搭載システム12のメモリコントローラ24と同様に、図2中のCPU搭載システム12'内のCMC36は、内部システムバス22を介してCPUブロック14(1)〜14(N)によって共有される。
【００２１】
図2中のCMC36の例示的な内部構成要素のより詳細な概略図を示すために、図3が提供される。この例では、CMC36は、図2中のCPUブロック14(1)〜14(N)を含む半導体ダイ46(1)、46(2)とは別個の半導体ダイ44上に設けられる。代替的には、いくつかの態様では、CMC36は、CPUブロック14(1)〜14(N)と共通の半導体ダイ(図示せず)内に含まれ得る。ダイ構成に関係なく、CMC36は、CPUブロック14(1)〜14(N)が内部システムバス22を介してCMC36へメモリアクセス要求を行い得、CMC36を介してメモリからデータを受信し得るように設けられる。
【００２２】
図3への参照を継続すると、CMC36は、DRAM40(1)〜40(R)を備えるものとして図2および図3に示されたシステムメモリ38へのメモリアクセスのための動作を制御する。CMC36は、メモリアクセス要求(図示せず)に対処するために使用される複数のメモリインターフェース(MEM I/F)48(1)〜48(P)(たとえば、DDR DRAMインターフェース)を含む。この点について、この例におけるCMC36は、圧縮コントローラ50を含む。圧縮コントローラ50は、図2中のCPUブロック14(1)〜14(N)からのメモリアクセス要求に応答して、システムメモリ38に記憶されたデータを圧縮することと、システムメモリ38から取得したデータを伸長することとを制御する。このようにして、CPUブロック14(1)〜14(N)は、CMC36によってアクセスされるメモリの実際の容量よりも大きい仮想メモリアドレス空間が提供され得る。圧縮コントローラ50はまた、内部システムバス22を介してCPUブロック14(1)〜14(N)に提供される情報の帯域幅圧縮を実行するように構成され得る。
【００２３】
以下でより詳細に論じるように、圧縮コントローラ50は、メモリ帯域幅圧縮を提供するために、任意の数の圧縮技術およびアルゴリズムを実行し得る。ローカルメモリ52は、そのような圧縮技術およびアルゴリズムを実行するために圧縮コントローラ50によって必要とされるデータ構造および他の情報のために設けられる。この点について、ローカルメモリ52は、スタティックランダムアクセスメモリ(SRAM)54の形態で設けられる。ローカルメモリ52は、圧縮技術およびアルゴリズムを実行するために圧縮コントローラ50のために必要とされ得るデータ構造および他のデータ記憶のために使用されるのに十分なサイズである。ローカルメモリ52はまた、CMC36内の内部使用のための追加のキャッシュメモリを提供するために、レベル4(L4)キャッシュなどのキャッシュを含むように分割され得る。したがって、L4コントローラ55はまた、L4キャッシュへのアクセスを提供するために、CMC36内に設けられ得る。拡張圧縮技術およびアルゴリズムは、以下でより詳細に論じるように、より大きい内部メモリを必要とし得る。たとえば、ローカルメモリ52は、128キロバイト(kB)のメモリを提供し得る。
【００２４】
さらに、図3に示し、以下でより詳細に説明するように、オプションの追加の内部メモリ56はまた、CMC36のために設けられ得る。追加の内部メモリ56は、例として、DRAMとして設けられ得る。以下でより詳細に論じるように、追加の内部メモリ56は、CPU搭載システム12'のメモリ帯域幅の圧縮を増加させるために、追加の、またはメモリ圧縮および伸長機構を提供するCMC36のためのローカルメモリ52内よりも大量のデータ構造および他のデータの記憶を容易にし得る。内部メモリコントローラ58は、圧縮で使用するための追加の内部メモリ56へのメモリアクセスを制御するために、CMC36内に設けられる。内部メモリコントローラ58は、CPUブロック14(1)〜14(N)に対してアクセス可能または可視ではない。
【００２５】
上述したように、図3中のCMC36は、いくつかの態様では、ゼロライン圧縮を含む、メモリ帯域幅の圧縮を実行し得る。ローカルメモリ52は、そのような圧縮のために使用される、より大きいデータ構造を記憶するために使用され得る。以下でより詳細に論じるように、メモリ帯域幅の圧縮は、メモリアクセスレイテンシを減少させ得、メモリアクセスレイテンシへの影響を最小限に抑えながら、より多くのCPU16(1)、16(2)またはそれらのそれぞれのスレッドが同じ数のメモリチャネルにアクセスすることを可能にし得る。いくつかの態様では、メモリチャネルの数は、そのような圧縮がCMC36によって実行されなかった場合のより多くのメモリチャネルと比較して、同様のレイテンシ結果を達成しながら、減少され得、それは、低減したシステムレベルの電力消費をもたらし得る。
【００２６】
ローカルメモリ52および追加の内部メモリ56を含む、図3中のCMC36内のメモリ帯域幅の圧縮のために提供されるリソースの各々は、リソースおよび領域間の所望のバランス、電力消費、メモリ容量の圧縮により増加したメモリ容量。ならびにメモリ帯域幅の圧縮により増加した性能を達成するために、互いに独立して、または互いに組み合わせて使用され得る。メモリ帯域幅の圧縮は、所望のように有効化または無効化され得る。さらに、CMC36による使用のための上記で説明したリソースは、メモリ容量および/または帯域幅の圧縮効率と、消費電力と、性能との間の所望のトレードオフを達成するために有効化または無効化され得る。CMC36に利用可能なこれらのリソースを使用する例示的なメモリ帯域幅の圧縮技法を、ここで論じる。
【００２７】
この点について、図4は、メモリ帯域幅の圧縮を提供するために図3のCMC36によって実装され得る例示的なメモリ帯域幅圧縮機構60の概略図である。メモリ帯域幅圧縮機構60では、システムメモリ38は、複数のメモリライン62を備え、メモリライン62の各々は、物理アドレスに関連付けられる。複数のメモリライン62の各々は、メモリ読出しまたは書込み要求(図示せず)の物理アドレスを使用してCMC36によってアクセスされ得る。データ(図示せず)は、圧縮された形態または圧縮されていない形態のいずれかにおいて、システムメモリ38内のメモリライン62の各々内に記憶され得る。いくつかの態様では、CI64を備える1つまたは複数のECCビットは、メモリライン62が圧縮された形態で記憶されているかどうかを示すために、各メモリライン62に関連付けて記憶され得る。このようにして、システムメモリ38へのメモリアクセス要求を実行するとき、CMC36は、メモリライン62がメモリアクセス要求の処理の一部として圧縮されているかどうかを決定するために、アドレスされるべき物理アドレスに対応するメモリライン62に関連付けられたCI64をチェックし得る。
【００２８】
マスタディレクトリ66はまた、システムメモリ38内に設けられる。マスタディレクトリ66は、物理アドレスに対応するシステムメモリ38内のメモリライン62ごとに1つのエントリ68を含む。マスタディレクトリ66はまた、メモリライン62がメモリライン62内に圧縮されて記憶されているかどうかと、そうである場合、複数の圧縮長さがサポートされる態様では、データの圧縮長さを示す圧縮パターンとを示すために、エントリ68あたり1つのCI64を含む。たとえば、メモリライン62が128バイトの長さであり、そこに記憶されたデータが64バイト以下に圧縮され得る場合、システムメモリ38内に記憶されたデータに対応するマスタディレクトリ66内のCI64は、データが128バイトメモリライン62の最初の64バイト内に記憶されることを示すように設定され得る。
【００２９】
図4を参照し続けると、書込み動作中、CMC36は、システムメモリ38内に書き込まれるべきメモリブロックを圧縮し得る。たとえば、データ(たとえば、128バイトまたは256バイト)が圧縮される。圧縮されたデータブロックがシステムメモリ38のメモリブロックサイズ(たとえば、64バイト)以下である場合、64バイトが書き込まれ得、そうでなければ、128バイトが書き込まれる。256バイトは、圧縮されたデータサイズに応じて、64、128、192、または256バイトとして書き込まれ得る。システムメモリ38内のメモリライン62に関連付けられた1つまたは複数のECCビット内に記憶されたCI64はまた、メモリライン62内のデータが圧縮されているかどうかを示すように設定され得る。
【００３０】
読出し動作例の間、CMC36は、読み出されるべきデータがシステムメモリ38内で圧縮されているかどうかを決定するために、マスタディレクトリ66からCI64を読み出し得る。CI64に基づいて、CMC36は、システムメモリ38からアクセスされるべきデータを読み出し得る。読み出されるべきデータがCI64によって示されるようにシステムメモリ38内で圧縮されていた場合、CMC36は、1つのメモリ読出し動作で圧縮されたデータブロック全体を読み出すことができる。読み出されるデータの一部がシステムメモリ38内で圧縮されていなかった場合、読み出されるべきメモリライン62の追加の部分もシステムメモリ38から読み出されなければならないので、メモリアクセスレイテンシは、悪影響を受け得る。いくつかの態様では、いくつかのアドレス範囲について、訓練機構が用いられ得、訓練機構では、CMC36は、状況の所与のセット内でシステムメモリ38から2つのアクセスにおいてデータを読み出すことがよいかどうか、または、レイテンシの影響を回避するためにシステムメモリ38から全量のデータを読み出すことがよいかどうかを「学習」するように構成され得る。
【００３１】
図4の例では、CIキャッシュ70はまた、システムメモリ38の外部の別個のキャッシュ内に設けられ得る。CIキャッシュ70は、システムメモリ38内のメモリライン62が圧縮された形態で記憶されているかどうかを示すために、システムメモリ38内のメモリライン62あたり1つのキャッシュエントリ72を提供する。このようにして、システムメモリ38へのメモリアクセス要求を実行するときCMC36は、メモリライン62を読み出さなければならないことなく、システムメモリ38内の物理アドレスにおけるメモリライン62がメモリアクセス要求の処理の一部として圧縮されているかどうかを決定するために、アドレスされるべき物理アドレスに対応するCIキャッシュ70内のキャッシュエントリ72を最初にチェックし得る。したがって、CIキャッシュ70が、メモリライン62が圧縮されて記憶されていることを示す場合、CMC36は、メモリライン62全体を読み出す必要はなく、したがって、レイテンシを低減する。CIキャッシュ70が、メモリライン62が圧縮されずに記憶されていることを示す場合、CMC36は、メモリライン62全対応読み出すことができる。ミスがCIキャッシュ70において発生した場合、マスタディレクトリ66内に記憶された対応するCI64は、同じ物理アドレスへの後続のメモリアクセス要求のために参照され得、CIキャッシュ70内にロードされ得る。
【００３２】
いくつかの態様では、CIキャッシュ70は、従来のキャッシュとして編成され得る。CIキャッシュ70は、非限定的な例として、タグアレイを含み得、nウェイの連想キャッシュとして編成され得る。CMC36は、CIキャッシュ70に関する追い出しポリシーを実装し得る。図4中に示すCIキャッシュ70では、各キャッシュライン74は、複数のキャッシュエントリ72を記憶し得る。各キャッシュエントリ72は、キャッシュエントリ72に関連付けられたシステムメモリ38内のメモリライン62が圧縮されているかどうかを示すため、および/または、キャッシュエントリ72に対応するデータの圧縮サイズを示す圧縮パターンを表すために、CI76を含み得る。たとえば、CI76は、4つの可能性のある圧縮サイズ(たとえば、32、64、96、または128バイト)を表す2ビットを備え得る。この例では、この情報は、キャッシュエントリ72内のCI76内にも記憶されるので、CI64は、冗長であることに留意されたい。たとえば、メモリライン62が128バイトの長さであり、そこに記憶されたデータが64バイト以下に圧縮され得る場合、システムメモリ38内のメモリライン62に対応するCIキャッシュ70内のキャッシュエントリ72内のCI76は、128バイトのメモリライン62の最初の64バイト内に記憶されたデータを示すように設定され得る。
【００３３】
メモリ帯域幅圧縮機構のための追加のキャッシュを設けることも望ましい可能性がある。この点について、図5は、図2中のSoC10'のような代替SoC10"の例を示すが、図5中のSoC10"は、加えて、この例ではL4キャッシュであるオプションのキャッシュ78を含む。CMC36は、レイテンシを最小化するために、L4キャッシュ78とCIキャッシュ70の両方における物理アドレスを同時に検索することができる。L4キャッシュ78内のアドレスは、圧縮されていない物理アドレスである。L4キャッシュ78における物理アドレスのヒットに際し、CIキャッシュ70における物理アドレスの検索は、冗長である。L4キャッシュ78における物理アドレスのミスに際し、CIキャッシュ70における物理アドレスの検索は、システムメモリ38からデータを得るために必要とされる。また、L4キャッシュ78とCIキャッシュ70の両方にアクセスするCPU16の付加的なレイテンシを回避するために、L4キャッシュ78およびCIキャッシュ70は、プライミングされ得る。
【００３４】
図6Aおよび図6Bは、メモリ帯域幅の圧縮を提供するための図3のCMC36によってアクセスされ得る図4のシステムメモリ38およびマスタディレクトリ66の例示的な通信フローおよび例示的な要素を示すために提供される。具体期には、図6Aは、メモリ読出し動作の間の例示的な通信フローを示し、図6Bは、メモリ書込み動作の間の例示的な通信フローを示す。図6Aおよび図6Bを説明する際に、図3および図4の要素は、明確化のために参照される。
【００３５】
図6Aおよび図6Bでは、システムメモリ38は、圧縮されたデータと圧縮されていないデータとを記憶するための複数のメモリライン80(0)〜80(X)を含む。メモリライン80(0)〜80(X)は、各々、システムメモリ38の基礎となるメモリアーキテクチャによって決定されるように、それぞれのメモリブロック82(0)〜82(Z)および84(0)〜84(Z)に細分される。いくつかの態様では、メモリブロック82(0)〜82(Z)、84(0)〜84(Z)の各々のサイズは、メモリ読出し動作においてシステムメモリ38から読み出され得るデータの最小量を表す。たとえば、いくつかの例示的なメモリアーキテクチャでは、メモリライン80(0)〜80(X)の各々は、2つの64バイトメモリブロック82(0)〜82(Z)、84(0)〜84(Z)に細分された128バイトのデータを備え得る。いくつかの態様は、メモリライン80(0)〜80(X)の各々がより多いまたはより少ないバイトのデータ(非限定的な例として、たとえば、256バイトまたは64バイト)を備え得る。同様に、いくつかの態様によれば、メモリライン80(0)〜80(X)内のメモリブロック82(0)〜82(Z)、84(0)〜84(Z)は、より大きくてもよく、またはより小さくてもよい(非限定的な例として、たとえば、128バイトまたは32バイト)。いくつかの態様では、メモリ読出し動作は、メモリブロック82(0)〜82(Z)、84(0)〜84(Z)の各々のサイズよりも少ないバイトを読み出し得るが、依然としてメモリブロック82(0)〜82(Z)、84(0)〜84(Z)の1つと同じ量のメモリ帯域幅を消費し得る。
【００３６】
メモリブロック82(0)〜82(Z)、84(0)〜84(Z)の各々は、1つまたは複数の対応するECCビット86(0)〜86(Z)、88(0)〜88(Z)に関連付けられる。ECCビット86(0)〜86(Z)、88(0)〜88(Z)などのECCビットは、メモリブロック82(0)〜82(Z)、84(0)〜84(Z)内の一般的に遭遇するタイプの内部データ破壊を検出し、修正するために従来から使用されている。図6Aおよび図6Bの例では、ECCビット86(0)〜86(Z)、88(0)〜88(Z)のうちの1つまたは複数は、それぞれのメモリブロック82(0)〜82(Z)、84(0)〜84(Z)のためのCI90(0)〜90(Z)、92(0)〜92(Z)を記憶するために再利用される。図6Aおよび図6B中のECCビット86(0)〜86(Z)、88(0)〜88(Z)は、それらのそれぞれのメモリブロック82(0)〜82(Z)、84(0)〜84(Z)に隣接するものとして示されているが、ECCビット86(0)〜86(Z)、88(0)〜88(Z)は、システムメモリ38内の他の場所に配置され得ることが理解されるべきである。
【００３７】
図6Aおよび図6Bの例では、システムメモリ38はまた、複数のマスタディレクトリメモリブロック94(0)〜94(Y)を含むマスタディレクトリ66を含む。マスタディレクトリメモリブロック94(0)〜94(Y)の各々は、メモリブロック82(0)〜82(Z)、84(0)〜84(Z)と同じサイズである。マスタディレクトリメモリブロック94(0)〜94(Y)は、CI96(0)〜96(W)、98(0)〜98(W)、100(0)〜100(W)を記憶し、CIの各々は、メモリブロック82(0)〜82(Z)、84(0)〜84(Z)のうちの1つの物理アドレスに対応する。以下でより詳細に論じるように、いくつかの態様では、ECCビット86(0)〜86(Z)、88(0)〜88(Z)内に記憶されたCI90(0)〜90(Z)、92(0)〜92(Z)およびマスタディレクトリメモリブロック94(0)〜94(Y)内に記憶されたCI96(0)〜96(W)、98(0)〜98(W)、100(0)〜100(W)は、メモリブロック82(0)〜82(Z)、84(0)〜84(Z)のうちの所与の1つのための同じ値を常に記憶するように維持され得る。いくつかの態様は、ECCビット86(0)〜86(Z)、88(0)〜88(Z)内に記憶されたCI90(0)〜90(Z)、92(0)〜92(Z)は、マスタディレクトリメモリブロック94(0)〜94(Y)内に記憶されたCI96(0)〜96(W)、98(0)〜98(W)、100(0)〜100(W)よりも頻繁に更新され得る。
【００３８】
CI90(0)〜90(Z)、92(0)〜92(Z)およびCI96(0)〜96(W)、98(0)〜98(W)、100(0)〜100(W)は、各々、システムメモリ38の対応するメモリブロック82(0)〜82(Z)、84(0)〜84(Z)において記憶されたデータの圧縮状態を示す1つまたは複数のビットを備え得る。いくつかの態様では、CI90(0)〜90(Z)、92(0)〜92(Z)およびCI96(0)〜96(W)、98(0)〜98(W)、100(0)〜100(W)の各々は、対応するメモリブロック82(0)〜82(Z)、84(0)〜84(Z)内のデータが圧縮されているかまたは圧縮されていないかを示す単一のビットを備え得る。いくつかの態様によれば、CI90(0)〜90(Z)、92(0)〜92(Z)およびCI96(0)〜96(W)、98(0)〜98(W)、100(0)〜100(W)の各々は、対応するメモリブロック82(0)〜82(Z)、84(0)〜84(Z)の各々のための圧縮パターン(非限定的な例として、たとえば、圧縮されたデータによって占有されるメモリブロック82(0)〜82(Z)、84(0)〜84(Z)の数)を示すために使用され得る複数のビットを備え得る。
【００３９】
図6Aの例では、物理アドレス104を指定するメモリ読出し要求102は、矢印106によって示されるように、CMC36によって受信される。例示の目的のため、この例では、物理アドレス104が128バイトのメモリライン80(0)の64バイトの細分であるメモリブロック82(0)に対応すると仮定する。メモリ読出し要求102が受信されたとき、CMC36は、メモリブロック82(0)において記憶されたデータが圧縮されているかどうかを知らない。CMC36は、メモリライン80(0)全体を読み出すことを続けることができるが、要求されたデータがメモリブロック82(0)のみの中に圧縮された形態で記憶されている場合、メモリブロック82(Z)の読出しは、不要になり、増加したメモリアクセスレイテンシをもたらすことになる。代替的には、CMC36は、メモリブロック82(0)のみを読み出すことができ、その内容に基づいて、そこに記憶されたデータが圧縮されているかどうかを決定することができ、次いで、データが圧縮されていない場合、メモリブロック82(Z)を読み出すことができる。しかしながら、この手法はまた、2つの別個のメモリ読出し動作を発行することに起因する増加したメモリアクセスレイテンシをもたらし得る。したがって、メモリブロック82(0)の圧縮状態を知ることなく、CMC36は、メモリアクセスレイテンシに悪影響を及ぼし得る不要なメモリ読出し動作を実行する危険を冒す。
【００４０】
CI90(0)〜90(Z)、92(0)〜92(Z)および/またはCI96(0)〜96(W)、98(0)〜98(W)、100(0)〜100(W)を使用することによって、CMC36は、所与のメモリ読出し要求102のための(圧縮されたまたは圧縮されていない)すべてのデータがシステムメモリ38から効率的に読み出されることを保証するためにどれくらい多くのメモリブロック82(0)〜82(Z)が読み出されるべきかを決定し得る。したがって、メモリ読出し要求102を受信した後、CMC36は、矢印108によって示されるように、メモリブロック82(0)の物理アドレス104に対応するCI96(0)にアクセスするために、マスタディレクトリ66のマスタディレクトリメモリブロック94(0)を読み出し得る。CI96(0)は、次いで、メモリ読出し要求102によって要求されたデータが効率的に取得されることを保証するために、メモリライン80(0)内のどれくらい多くのメモリブロック82(0)〜82(Z)が読み出すのかを決定するために、CMC36によって使用され得る。
【００４１】
いくつかの態様では、CMC36は、CI96(0)によって示される圧縮パターン(図示せず)を決定することによって、どれくらい多くのメモリブロック82(0)〜82(X)が読み出すのかを決定し得る。上記の例では、CI96(0)は、データが圧縮されている(すなわち、メモリブロック82(0)のみが読み出されるべき)または圧縮されていない(すなわち、メモリブロック82(0)と82(Z)の両方が読み出されるべき)ことを示す単一のビットであり得る。システムメモリ38のメモリライン80(0)〜80(X)が各々2つ以上のメモリブロック82(0)〜82(Z)、84(0)〜84(Z)を含む態様によれば、CI96(0)は、どれくらい多くのメモリブロック82(0)〜82(Z)が圧縮されたデータを含んでいるのかを示す複数のビットを備え得る。たとえば、メモリライン80(0)〜80(X)が4つの64バイトメモリブロック82(0)〜82(Z)に細分された256バイトメモリラインであった場合、CI96(0)は、圧縮されたデータが64バイト、128バイト、または192バイト(それぞれ、メモリブロック82(0)、メモリブロック82(0)〜82(1)、メモリブロック82(0)〜82(2)に対応する)内に記憶されることを示し得る。CI96(0)に基づいて、CMC36は、次いで、矢印110によって示されるように、メモリライン80(0)内の所定の数のメモリブロック82(0)〜82(Z)を読み出すために、適切な数のメモリ読出し動作を発行し得る。いくつかの態様は、CI96(0)によって示される圧縮パターンがゼロラインインジケータを備えることをCMC36が決定し得ることを提供し得、ゼロラインインジケータは、物理アドレス104において記憶されたデータが完全にゼロ値から構成されることをCMC36に示す。そのような場合には、CMC36は、ゼロのメモリブロック82(0)〜82(Z)を読み出し得る。いくつかの態様によれば、CMC36は、CI96(0)によって示される圧縮パターンが、物理アドレス104において記憶された(非限定的な例として、すべて1などの)他の固定されたデータパターンのインジケータを備えることを決定し得る。
【００４２】
いくつかの態様では、CMC36によって受信された特定の割合のメモリ読出し要求102のみについて、マスタディレクトリ66からCI96(0)〜96(W)、98(0)〜98(W)、100(0)〜100(W)を読み出すことが望ましい可能性がある。たとえば、いくつかの態様では、マスタディレクトリ66は、CMC36によって受信されたメモリ読出し要求102の10パーセント(%)についてのみアクセスされ得る。そのような態様では、メモリ読出し要求102を受信すると、CMC36は、マスタディレクトリ66からメモリブロック82(0)のためのCI96(0)を読み出すかどうか、または代替的に、ECCビット86(0)からメモリブロック82(0)のためのCI90(0)を読み出すかどうかを、(たとえば、乱数発生器(図示せず)に基づいて)確率的に決定し得る。後者の場合には、CMC36は、破線の矢印112によって示されるように、CI90(0)を読み出し得、メモリライン80(0)からどれくらい多くのメモリブロック82(0)〜82(Z)を読み出すのかを決定する際に、CI90(0)を使用し得る。
【００４３】
ここで図6Bを参照すると、CMC36は、矢印116によって示されるように、メモリ書込み要求114を受信する。メモリ書込み要求114は、システムメモリ38に書き込まれるべき書込みデータ118、ならびに、書込みデータ118が書き込まれるべきシステムメモリ38の物理アドレス104の両方を含む。例示の目的のために、物理アドレス104がメモリブロック82(0)に対応することを再び仮定する。メモリ書込み要求114を受信すると、CMC36は、書込みデータ118を圧縮する動作を実行し得、書込みデータ118を圧縮した結果に基づいて、書込みデータ118のための圧縮パターンを決定し得る。圧縮パターンは、非限定的な例として、書込みデータ118が正常に圧縮されたかどうか、および/または、圧縮された書込みデータ118によって占有されるメモリブロック82(0)〜82(Z)の数を示し得る。圧縮パターンに基づいて、CMC36は、書込みデータ118のためのCI120を生成する。
【００４４】
CMC36は、次いで、矢印122によって示されるように、メモリブロック82(0)の物理アドレス104のためのマスタディレクトリ66内に記憶されたCI96(0)を、生成されたCI120で更新し得る。いくつかの態様によれば、マスタディレクトリ66は、CMC36によって受信されたメモリ書込み要求114の特定の割合のみについて更新され得る。たとえば、いくつかの態様では、マスタディレクトリ66は、CMC36によって受信されたメモリ書込み要求114の10パーセント(10%)についてのみ更新され得る。したがって、そのような態様では、CMC36は、マスタディレクトリ66内のメモリブロック82(0)のための記憶されたCI96(0)を更新するかどうかを、(たとえば、乱数発生器(図示せず)に基づいて)確率的に決定し得る。そうでない場合、このオプションは、省略され得る。CMC36は、次いで、矢印124によって示されるように、メモリブロック82(0)〜82(Z)のうちの1つまたは複数に書込みデータ118を書き込む。CMC36はまた、矢印126によって示されるように、書込みデータ118が書き込まれた1つまたは複数のメモリブロック82(0)〜82(Z)のECCビット86(0)〜86(Z)内に記憶されたCI90(0)〜90(Z)に、生成されたCI120を書き込む。
【００４５】
図7は、図6Aを参照して論じたようにメモリ帯域幅の圧縮を使用して図3のCMC36によるメモリ読出し動作を実行するための例示的な動作を示すフローチャートである。明確化のために、図2、図3、および図6Aの要素は、図7を説明する際に参照される。図7では、CMC36が内部システムバス22を介して、システムメモリ38内のメモリライン80(0)内のアクセスされるべきメモリブロック82(0)の物理アドレス104を備えるメモリ読出し要求102を受信して、動作が開始する(ブロック128)。いくつかの態様では、CMC36は、オプションで、CI96(0)がマスタディレクトリ66から読み出されるべきかどうかを確率的に決定し得る(ブロック130)。CMC36が、CI96(0)がマスタディレクトリ66から読み出されるべきではないことを決定した場合、CMC36は、メモリブロック82(0)を読み出すとともに、1つまたは複数のECCビット86(0)からCI90(0)を読み出し、CI96(0)としてCI90(0)を使用する(ブロック132)。しかしながら、CMC36が確率的決定を使用していない場合、または、CMC36が決定ブロック130においてCI96(0)がマスタディレクトリ66から読み出されるべきであることを確率的に決定した場合、CMC36は、システムメモリ38内のマスタディレクトリ66から物理アドレス104に対応するCI96(0)を含むマスタディレクトリメモリブロック94(0)を読み出す(ブロック134)。
【００４６】
CMC36は次いで、CI96(0)に基づいて、メモリ読出し要求102のために読み出すシステムメモリ38内のメモリライン80(0)内のメモリブロック82(0)〜82(Z)の数を決定する(ブロック136)。いくつかの態様では、読み出すメモリブロック82(0)〜82(Z)の数を決定するためのブロック136の動作は、CI96(0)によって示された圧縮パターンを決定することを備え得る(ブロック138)。たとえば、CMC36は、CI96(0)がゼロのメモリブロック82(0)〜82(Z)が読み出されるべきであることを示すゼロラインインジケータを備えることを決定し得る(ブロック140)。CMC36は次いで、物理アドレス104において開始するシステムメモリ38内のメモリライン80(0)内の決定された数のメモリブロック82(0)〜82(Z)を読み出す(ブロック142)。
【００４７】
メモリ帯域幅の圧縮を使用して図3のCMC36によるメモリ書込み動作を実行するための例示的な動作を例示するために、図6Bに関連して上述したように、図8が提供される。この点について、図2、図3、および図6Bの要素は、明確化のために、図8を説明する際に参照される。図8における動作は、CMC36が内部システムバス22を介して、書込みデータ118と、システムメモリ38内のメモリライン80(0)内の書き込まれるべきメモリブロック82(0)の物理アドレス104とを備えるメモリ書込み要求114を受信して開始する(ブロック144)。書込みデータ118を圧縮しようとした後、CMC36は、書込みデータ118のための(たとえば、書込みデータ118が圧縮されているかどうか、および/または、書込みデータ118を記憶するためにどれくらい多くのメモリブロック82(0)〜82(Z)が必要とされるか)圧縮パターンを決定する(ブロック146)。圧縮パターンに基づいて、CMC36は、圧縮パターンに基づいて書込みデータ118のためのCI120を生成する(ブロック148)。
【００４８】
いくつかの態様によれば、CMC36は、オプションで、マスタディレクトリ66に記憶されたCI96(0)が更新されるべきであるかどうかを確率的に決定し得る(ブロック150)。CMC36が、マスタディレクトリ66内の記憶されたCI96(0)が更新されるべきではないことを決定した場合、処理は、図8のブロック152において再開する。しかしながら、CMC36が、マスタディレクトリ66内の記憶されたCI96(0)が更新されるべきであることを決定ブロック150で決定した場合、または、CMC36が確率的決定を用いていない場合、CMC36は、マスタディレクトリ66内の物理アドレス104に対応する記憶されたCI96(0)を、生成されたCI120で更新する(ブロック154)。
【００４９】
CMC36は、次に、生成されたCI120に基づいて、システムメモリ38内のメモリライン80(0)内のメモリブロック82(0)〜82(Z)のうちの1つまたは複数に書込みデータ118を書き込む(ブロック152)。CMC36はまた、システムメモリ38のメモリライン80(0)内のメモリブロック82(0)〜82(Z)の各々の1つまたは複数のECCビット86(0)〜86(Z)内に生成されたCI120を書き込む(ブロック156)。いくつかの態様では、生成されたCI120は、第1のメモリブロック82(0)に書込みデータ118を書き込む同じメモリ書込み動作の一部としてECCビット86(0)内に書き込まれる。
【００５０】
図4に関連して上述したように、CMC36によって提供されるメモリ帯域幅の圧縮は、さらに、いくつかの態様では、図4のCIキャッシュ70の使用により強化され得る。この点について、図9Aおよび図9Bは、例示的な通信フローと、メモリ帯域幅の圧縮を提供するための図3のCMC36によってアクセスされ得るCIキャッシュ70の例示的な要素とを示すために提供される。具体的には、図9Aおよび図9Bは、各々、CIキャッシュ70を使用するメモリ読出し動作およびメモリ書込み動作の間の例示的な通信フローを示す。図9Aおよび図9Bを説明する際、図3、図4、図6A、および図6Bの要素は、明確化のために参照される。
【００５１】
図9Aに見られるように、CMC36のCIキャッシュ70は、キャッシュされたCI160(0)〜160(W)、162(0)〜162(W)、および164(0)〜164(W)を記憶する複数のCIキャッシュエントリ158(0)〜158(T)を含む。キャッシュエントリ158(0)〜158(T)の各々は、マスタディレクトリメモリブロック94(0)〜94(Y)と同じサイズであり、いくつかの態様では、CMC36によるメモリ読出し動作またはメモリ書込み動作の過程で読み出されるマスタディレクトリメモリブロック94(0)〜94(Y)のうちの1つを記憶するように構成される。このようにして、CMC36は、CI90(0)〜90(Z)、92(0)〜92(Z)、および/またはCI96(0)〜CI96(W)、98(0)〜98(W)、100(0)〜100(W)を読み出すために、システムメモリ38にアクセスするのではなく、後続のメモリ読出し動作およびメモリ書込み動作においてキャッシュされたCI160(0)〜160(W)、162(0)〜162(W)、および164(0)〜164(W)にアクセスし得る。CMC36は、システムメモリ38から読み出すまたはシステムメモリ38に書き込むよりもはるかに高速にCIキャッシュ70から読み出すまたはCIキャッシュ70に書き込み得るので、CIキャッシュ70の使用は、CMC36がメモリアクセスレイテンシをさらに減少させることを可能にし得る。
【００５２】
図9Aの例では、CIキャッシュ70を提供するCMC36は、矢印166によって示すように、物理アドレス104を備えるメモリ読出し要求102を受信する。物理アドレス104は、システムメモリ38のメモリライン80(0)のメモリブロック82(0)に対応すると仮定する。CMC36は、次いで、物理アドレス104がCIキャッシュエントリ158(0)〜158(T)のうちの1つに対応するかどうかを決定し得る。CIキャッシュエントリ158(0)などのCIキャッシュエントリ158(0)〜158(T)のうちの1つがメモリブロック82(0)の物理アドレス104に対応する(すなわち、キャッシュ「ヒット」)場合、CMC36は、メモリブロック82(0)のためのCI160(0)などのCIインジケータを含むCIキャッシュエントリ158(0)を識別している。CMC36は、次いで、CIキャッシュ70のCIキャッシュエントリ158(0)からCI160(0)を読出し、図6Aに関連して上記で論じたように、CI160(0)に基づいて、読み出すメモリブロック82(0)〜82(Z)の数を決定する。
【００５３】
しかしながら、CMC36が、物理アドレス104がCIキャッシュエントリ158(0)〜158(T)のいずれにも対応していないことを決定した場合、CMC36は、矢印168によって示されるように、メモリブロック82(0)の物理アドレス104に対応するCI96(0)にアクセスするために、マスタディレクトリ66のマスタディレクトリメモリブロック94(0)を読み出し得る。上述したように、いくつかの態様では、CMC36が、CMC36によって受信されたメモリ読出し要求102の特定の割合のみについてマスタディレクトリ66を読み出すことが望ましい可能性がある。したがって、そのような態様では、CMC36は、マスタディレクトリ66からマスタディレクトリメモリブロック94(0)を読み出すかどうか、または代替的には、ECCビット86(0)からメモリブロック82(0)ためのCI90(0)を読み出すかどうかを、(たとえば、乱数発生器(図示せず)に基づいて)確率的に決定し得る。後者の場合には、CMC36は、破線の矢印170によって示されるように、CI90(0)を読み出し得る。CMC36は、次いで、CIキャッシュ70をさらに更新することなく、CI90(0)を使用し得る。
【００５４】
CMC36は次いで、新しいCIキャッシュエントリ158(0)としてCIキャッシュ70内にマスタディレクトリメモリブロック94(0)を書き込み得る。いくつかの態様では、新しいCIキャッシュエントリ158(0)としてマスタディレクトリメモリブロック94(0)を書き込む前に、CIキャッシュ70は、最初に、現在のCIキャッシュエントリ158(0)が追い出されなければならないかどうかを決定し得る。そうである場合、CIキャッシュ70は、さらに、(たとえば、少なくとも1つのキャッシュされたCI160(0)〜160(W)がマスタディレクトリ66から読み出されてから変更されているかどうかを決定することによって)現在のCIキャッシュエントリ158(0)がCIキャッシュ70内に書き込まれてから変更されているかどうかを決定し得る。いくつかの態様では、CIキャッシュ70は、現在のCIキャッシュエントリ158(0)に関連付けられたダーティビット(図示せず)が設定されているかどうかをチェックすることによって、現在のCIキャッシュエントリ158(0)が変更されているかどうかを決定し得る。現在のCIキャッシュエントリ158(0)が変更されている場合、CMC36は、マスタディレクトリメモリブロック94(0)〜94(Y)のうちの対応する1つに現在のCIキャッシュエントリ158(0)を書き込む。CMC36は、次いで、CIキャッシュ70のCIキャッシュエントリ158(0)からCI160(0)を読出し、上記で論じたように、CI160(0)に基づいて、読み出すメモリブロック82(0)〜82(Z)の数を決定する。決定された数のメモリブロック82(0)〜82(Z)は、次いで、矢印172によって示されるように、CMC36によって読み出される。
【００５５】
いくつかの態様では、CMC36は、物理アドレス104がCIキャッシュエントリ158(0)〜158(T)のうちの1つに対応するかどうかを決定すると同時に、メモリ読出し要求102に基づいて、システムメモリ38に早期メモリ読出し要求174を発行し得る。早期メモリ読出し要求174は、CI160(0)に基づいて読み出すメモリブロック82(0)〜82(Z)の数を決定するCMC36と並行して処理され得る。読み出すメモリブロック82(0)〜82(Z)の数を決定すると、早期メモリ読出し要求174は、CI160(0)に基づいて修正され得る。非限定的な例として、早期メモリ読出し要求174は、決定された数のメモリブロック82(0)〜82(Z)を読み出すように修正され得る。このようにして、追加のメモリ帯域幅の圧縮および減少したメモリアクセスレイテンシが、早期メモリ読出し要求174ならびにCIキャッシュ70の読出しおよび/または書込みの並列処理によって提供され得る。
【００５６】
さらに、図5に関連して上記で論じたいくつかの態様によれば、CMC36はまた、物理アドレス104がCIキャッシュ70内のCIキャッシュエントリ158(0)〜158(T)のうちの1つに対応するかどうかを決定すると同時に、L4キャッシュ78内の物理アドレス104を検索するためにキャッシュ読出し動作(図示せず)を実行し得る。そうすることによって、CMC36は、さらに、メモリアクセスレイテンシを最小化し得る。
【００５７】
ここで図9Bを参照すると、CMC36は、矢印176によって示されるように、メモリ書込み要求114を受信する。メモリ書込み要求114は、システムメモリ38に書き込まれるべき書込みデータ118、ならびに、書込みデータ118が書き込まれるべきシステムメモリ38の物理アドレス104の両方を含む。例示の目的のために、物理アドレス104がメモリブロック82(0)に対応すると再び仮定する。メモリ書込み要求114を受信すると、CMC36は、書込みデータ118を圧縮する動作を実行し得、書込みデータ118を圧縮した結果に基づいて、書込みデータ118のための圧縮パターンを決定し得る。圧縮パターンは、非限定的な例として、書込みデータ118が正常に圧縮されたかどうか、および/または、圧縮された書込みデータ118によって占有されるメモリブロック82(0)〜82(Z)の数を示し得る。圧縮パターンに基づいて、CMC36は、書込みデータ118のためのCI120を生成する。
【００５８】
CMC36は次いで、物理アドレス104がCIキャッシュエントリ158(0)〜158(T)のうちの1つに対応するかどうかを決定し得る。CIキャッシュエントリ158(0)などのCIキャッシュエントリ158(0)〜158(T)のうちの1つがメモリブロック82(0)の物理アドレス104に対応する(すなわち、キャッシュ「ヒット」)場合、CMC36は、メモリブロック82(0)のためのCI160(0)などのCIインジケータを含むCIキャッシュエントリ158(0)を識別している。したがって、CMC36は、矢印178によって示されるように、CIキャッシュエントリ158(0)のCI160(0)を生成されたCI120で更新する。CMC36は、次に、矢印180によって示されるように、メモリライン80(0)内のメモリブロック82(0)〜82(Z)のうちの1つまたは複数に書込みデータ118を書き込む。CMC36はまた、矢印182によって示されるように、書込みデータ118が書き込まれたメモリブロック82(0)〜82(Z)のうちの1つまたは複数のECCビット86(0)〜86(Z)のうちの1つまたは複数内に生成されたCI120を書き込む。いくつかの態様によれば、生成されたCI120は、第1のメモリブロック82(0)に書込みデータ118を書き込むのと同じメモリ書込み動作の一部としてECCビット86(0)内に書き込まれる。
【００５９】
しかしながら、CMC36が、物理アドレス104がCIキャッシュエントリ158(0)〜158(T)のいずれにも対応しないこと(すなわち、キャッシュミス)を決定した場合、CMC36は、矢印184によって示されるように、マスタディレクトリ66内の物理アドレス104に対応する記憶されたCI96(0)を生成されたCI120で更新し得る。CMC36は、次いで、矢印186によって示されるように、新しいCIキャッシュエントリ158(0)としてCIキャッシュ70内にマスタディレクトリメモリブロック94(0)を書き込み得る。いくつかの態様では、新しいCIキャッシュエントリ158(0)としてマスタディレクトリメモリブロック94(0)を書き込む前に、CIキャッシュ70は、最初に、現在のCIキャッシュエントリ158(0)が追い出されなければならないかどうかを決定し得る。そうである場合、CIキャッシュ70は、さらに、現在のCIキャッシュエントリ158(0)がCIキャッシュ70内に書き込まれてから変更されているかどうかを決定し得る。いくつかの態様では、CIキャッシュ70は、現在のCIキャッシュエントリ158(0)に関連付けられたダーティビット(図示せず)が設定されているかどうかをチェックすることによって、CIキャッシュエントリ158(0)が変更されているかどうかを決定し得る。現在のCIキャッシュエントリ158(0)が変更されている場合、CMC36は、新しいCIキャッシュエントリ158(0)としてCIキャッシュ70内にマスタディレクトリメモリブロック94(0)を書き込む前に、矢印188によって示されるように、マスタディレクトリメモリブロック94(0)〜94(Y)のうちの対応する1つに現在のCIキャッシュエントリ158(0)を書き込む。
【００６０】
いくつかの態様では、マスタディレクトリ66は、CMC36によって受信されたメモリ書込み要求114の特定の割合に関するCIキャッシュ70におけるキャッシュミスに応答して更新され得る。したがって、そのような態様では、CMC36は、マスタディレクトリ66内のメモリブロック82(0)のための記憶されたCI96(0)を更新するかどうかを(たとえば、乱数発生器(図示せず)に基づいて)確率的に決定し得る。そうでない場合、キャッシュミスに関して上記で説明した動作は、省略される(すなわち、マスタディレクトリ66もCIキャッシュ70のいずれも更新されず、生成されたCI120は、メモリブロック82(0)〜82(Z)のうちの1つまたは複数のECCビット86(0)〜86(Z)内に記憶される)。
【００６１】
図10A〜図10Cは、図9Aおよび図9BのCIキャッシュ70を使用して図3のCMC36によってメモリ読出し動作を実行するための例示的な動作を示すフローチャートである。具体的には、図10Aは、メモリ読出し要求102を受信し、メモリ読出し要求102の物理アドレス104に対応するCI160(0)のためのCIキャッシュ70の検索がヒットまたはミスのいずれをもたらすのかを決定する動作を示す。図10Bは、CIキャッシュ70上でキャッシュミスの結果として実行される動作を示し、図10Cは、CIキャッシュ70上でキャッシュヒットの結果として実行される動作を示す。図2、図3、および図9Aの要素は、明確化のために、図10A〜図10Cを説明する際に参照される。
【００６２】
図10Aにおける動作は、CMC36が、内部システムバス22を介して、システムメモリ38内のメモリライン80(0)内のアクセスされるべきメモリブロック82(0)の物理アドレス104を備えるメモリ読出し要求102を受信することで開始する(ブロック190)。いくつかの態様では、CMC36は、後続の動作と同時に、システムメモリ38に早期メモリ読出し要求174を送信し得る(ブロック192)。CMC36は、いくつかの態様によれば、後続の動作と同時に、図5のL4キャッシュ78などのL4キャッシュ上のキャッシュ読出し動作を実行し得る(ブロック194).決定は、次いで、L4キャッシュ78上のキャッシュ読出し動作がキャッシュヒットをもたらしたかどうかに関してなされる(ブロック195)。そうである場合、キャッシュ読出し動作の結果は、返され、システムメモリ38への読出しは意味がなくなる(be rendered moot)(ブロック196)。
【００６３】
CMC36は、次に、物理アドレス104がCIキャッシュ70の複数のCIキャッシュエントリ158(0)〜158(T)のCIキャッシュエントリ158(0)に対応するかどうかを決定する(ブロック197)。CMC36が、決定ブロック196において、物理アドレス104が複数のCIキャッシュエントリ158(0)〜158(T)のCIキャッシュエントリ158(0)に対応しないこと(すなわち、キャッシュミス)を決定した場合、処理は、図10Bのブロック198において再開する。物理アドレス104が、CIキャッシュエントリ158(0)に対応する(すなわち、キャッシュヒット)と決定された場合、処理は、図10Cのブロック200において再開する。
【００６４】
ここで図10Bを参照すると、いくつかの態様におけるCMC36は、キャッシュミスに応答して、CI96(0)がマスタディレクトリ66から読み出されるべきかどうかを確率的に決定し得る(ブロック198)。そのような態様では、メモリブロック82(0)〜82(Z)、84(0)〜84(Z)のうちの1つまたは複数のECCビット86(0)〜86(Z)、88(0)〜88(Z)は、CI90(0)〜90(Z)、92(0)〜92(Z)を記憶することになることに留意されたい。確率的決定は、非限定的な例として、乱数発生器を使用してなされ得る。決定ブロック198において、CI96(0)がマスタディレクトリ66から読み出されるべきであると決定された場合、CMC36は、システムメモリ38内のマスタディレクトリ66から物理アドレス104に対応するCI96(0)を含むマスタディレクトリメモリブロック94(0)を読み出す(ブロック202)。CMC36が、決定ブロック198において、CI96(0)がマスタディレクトリ66から読み出されるべきではないと決定した場合、CMC36は、メモリブロック82(0)を読み出すとともに、1つまたは複数のECCビット86(0)からCI90(0)を読み出す(ブロック204)。処理は、次いで、図10Cのブロック214において再開する。
【００６５】
図10Bを続けて参照すると、いくつかの態様によるCMC36は、次に、CIキャッシュ70の現在のCIキャッシュエントリ158(0)が追い出されるべきであるかどうかを決定し得る(ブロック206)。そうでない場合、処理は、図10Bのブロック208において再開する。CMC36が、決定ブロック206において、現在のCIキャッシュエントリ158(0)が追い出されるべきであると決定した場合、CMC36は、次に、現在のCIキャッシュエントリ158(0)が修正されているかどうかを決定する(ブロック210)。この決定は、非限定的な例として、CIキャッシュエントリ158(0)のためのダーティビットが設定されているかどうかを決定することに基づき得る。現在のCIキャッシュエントリ158(0)が決定ブロック210において変更されていないと決定された場合、処理は、図10Bのブロック208において再開する。そうでない場合、CMC36は、マスタディレクトリ66に現在のCIキャッシュエントリ158(0)を書き込む(ブロック212)。マスタディレクトリメモリブロック94(0)は、次いで、CIキャッシュ70のCIキャッシュエントリ158(0)に書き込まれる(ブロック208)。処理は、次いで、図10Cのブロック200において再開する。
【００６６】
ここで図10Cを見ると、CMC36は、CIキャッシュ70のCIキャッシュエントリ158(0)からCI160(0)を読み出す(ブロック200)。CMC36は、次に、CI160(0)に基づいて、メモリ読出し要求102のために読み出すシステムメモリ38内のメモリライン80(0)内のメモリブロック82(0)〜82(Z)の数を決定する(ブロック214)。CMC36は、次いで、物理アドレス104において開始するシステムメモリ38内のメモリライン80(0)内の決定された数のメモリブロック82(0)〜82(Z)を読み出す(ブロック216)。早期メモリ読出し要求174が発行された態様では、決定された数のメモリブロック82(0)〜82(Z)を読み出すためのブロック216の動作は、CI160(0)に基づいて早期メモリ読出し要求174を修正することを含み得る(ブロック218)。
【００６７】
図8のCIキャッシュ70を使用して図3のCMC36によるメモリ書込み動作を実行するための例示的な動作を説明するために、図11A〜図11Cが提供される。図11Aは、メモリ書込み要求114を受信するための動作と、メモリ書込み要求114の物理アドレス104に対応するCIキャッシュエントリ158(0)〜158(T)のためのCIキャッシュ70の検索がヒットまたはミスのいずれをもたらすのかを決定する動作とを示す。図11Bは、CIキャッシュ70におけるキャッシュミスの結果として行われる動作を示し、図11Cは、CIキャッシュ70におけるキャッシュヒットの結果として行われる動作を示す。図2、図3、および図9Bの要素は、明確化のために、図11A〜図11Cを説明する際に参照される。
【００６８】
図11Aでは、動作は、CMC36が、内部システムバス22を介して、書込みデータ118と、システムメモリ38内のメモリライン80(0)内に書き込まれるべきメモリブロック82(0)の物理アドレス104とを備えるメモリ書込み要求114を受信することで開始する(ブロック220)。CMC36は、書込みデータ118のための圧縮パターンを決定する(ブロック222)。いくつかの態様では、圧縮パターンは、書込みデータ118が圧縮されているかもしくは圧縮されていないか、および/または、書込みデータ118によって占有されるメモリブロック82(0)〜82(Z)の数を示し得る。圧縮パターンに基づいて、CMC36は、圧縮パターンに基づいて書込みデータ118のためのCI120を生成する(ブロック224)。
【００６９】
CMC36は、次に、物理アドレス104がCIキャッシュ70の複数のCIキャッシュエントリ158(0)〜158(T)のCIキャッシュエントリ158(0)に対応するかどうかを決定する(ブロック226)。物理アドレス104が決定ブロック226において複数のCIキャッシュエントリ158(0)〜158(T)のCIキャッシュエントリ158(0)に対応しない(すなわち、キャッシュミス)と決定された場合、処理は、図11Bのブロック228において再開する。しかしながら、CMC36が、決定ブロック226において、物理アドレス104がCIキャッシュエントリ158(0)に対応する(すなわち、キャッシュヒット)と決定した場合、処理は、図11Cのブロック230において再開する。
【００７０】
ここで図11Bを参照すると、CMC36のいくつかの態様は、CI96(0)がマスタディレクトリ66内で更新されるべきであるかどうかを確率的に決定し得る(ブロック228)。決定ブロック228において、CI96(0)が更新されるべきではないと決定された場合、処理は、図11Cのブロック242において再開する。しかしながら、CMC36が決定ブロック228においてCI96(0)を更新することを決定した場合、または、CMC36が確率的決定を使用するように構成されていない場合、CMC36は、マスタディレクトリ66内の物理アドレス104に対応する記憶されたCI96(0)を生成されたCI120で更新する(ブロック232)。
【００７１】
いくつかの態様では、CMC36は、次に、CIキャッシュ70の現在のCIキャッシュエントリ158(0)が排除されるべきであるかどうかを決定し得る(ブロック234)。そうでない場合、処理は、図11Bのブロック236において再開する。CMC36が、決定ブロック234において、現在のCIキャッシュエントリ158(0)が排除されるべきであると決定した場合、CMC36は、現在のCIキャッシュエントリ158(0)が修正されているかどうかを決定する(ブロック238)。CIキャッシュエントリ158(0)が修正されているかどうかを決定することは、非限定的な例として、CIキャッシュエントリ158(0)のダーティビットが設定されているかどうかを決定することを備え得る。現在のCIキャッシュエントリ158(0)が決定ブロック238において変更されていないと決定された場合、処理は、図11Bのブロック236において再開する。しかしながら、CMC36が決定ブロック238において現在のCIキャッシュエントリ158(0)が修正されていると決定した場合、CMC36は、マスタディレクトリ66に現在のCIキャッシュエントリ158(0)を書き込む(ブロック240)。CMC36は、次いで、CIキャッシュ70のCIキャッシュエントリ158(0)に、記憶されたCI96(0)を書き込む(ブロック236)。処理は、図11Cのブロック242において再開する。
【００７２】
図11Cにおいて、CMC36は、CIキャッシュ70のCIキャッシュエントリ158(0)を、生成されたCI120で更新する(ブロック230)。CMC36は、次いで、生成されたCI120に基づいて、システムメモリ38内のメモリライン80(0)内の1つまたは複数のメモリブロック82(0)〜82(Z)に書込みデータ118を書き込む(ブロック242)。生成されたCI120は、システムメモリ38のメモリライン80(0)内の1つまたは複数のメモリブロック82(0)〜82(Z)の各々の1つまたは複数のECCビット86(0)〜86(Z)内に書き込まれる(ブロック244)。いくつかの態様では、生成されたCI120は、第1のメモリブロック82(0)に書込みデータ118を書き込むのと同じメモリ書込み動作の一部としてECCビット86(0)内に書き込まれる。
【００７３】
上述したように、圧縮化を最適化する特別な場合として、構成可能な固定データパターンを有するメモリデータブロック82(0)〜82(Z)の圧縮を提供することが望ましい場合がある。たとえば、メモリデータブロック82(0)〜82(Z)(たとえば、128バイト)がすべて0である場合、データは、読み出されない、または書き込まれないが、すべて0として別個のデータ構造において示される。0ビットは、メモリライン80(0)〜80(X)が圧縮されているかどうかを示すために、システムメモリ38内に設けられ得、したがって、メモリデータブロック82(0)〜82(Z)ごとに1ビット追加する。CMC36は、たとえば、いくつかの128バイトメモリブロック82(0)〜82(Z)のために、ブロックがすべて0であるかどうかを記憶しているキャッシュを維持し得る。書込み動作について、メモリデータブロック82(0)〜82(Z)がすべて0である場合、CMC36は、システムメモリ38にラインを書き込まないが、CIキャッシュ70は、更新される。読出し動作について、CIキャッシュ70内のゼロビットは、ラインに関してチェックされる。ラインがCIキャッシュ70内にある場合、ゼロビットに応じて、ラインがシステムメモリ38から読み出されるか、またはすべて0が返される。ラインがCIキャッシュ70内にない場合、それは、システムメモリ38から読み出される。ラインがゼロである場合、CIキャッシュ70は、更新され得る。
【００７４】
CIキャッシュ70は、公知の技術(LRU、疑似LRUなど)に従って、キャッシュライン74を追い出すために更新され得る。ラインが追い出された場合、それらのゼロビットが設定されているすべてのラインは、メインメモリに書き込まれる必要がある。これは、ライトオールゼロキュー(write-all-zeros queue)として編成され得る。可能な最適化は、2ビットを使用することであり、1つのビットは、ラインがすべてゼロであるかどうかを示し、別のビットは、ラインがダーティである(すなわち、まだメインメモリに書き込まれていない)かどうかを示す。CMC36のバックグラウンドタスクは、CIキャッシュ70を検査し得、「ライトオールゼロ」キュー内のダーティビットでラインを待ち行列に入れ得る。上記で説明したメモリ帯域幅圧縮機構とともに、異なるメモリ圧縮機構が、所望のようにCMC36によって用いられ得る。たとえば、上記の例において説明したキャッシュライン74は、例としてそれらのサイズを含むので、64、128、および256バイトなどの小さいデータブロックに対して最適化されたメモリ圧縮機構を用いることが望ましい可能性がある。
【００７５】
いくつかの態様では、複数のビットを備えるCIの値は、メモリブロック82(0)〜82(Z)のうちの1つなどのメモリブロック内に記憶された圧縮状態および/または固定データパターンを示し得る。非限定的な例として、2ビットのCIについて、「00」の値は、対応するメモリブロックが圧縮されていないことを示し得、「01」の値は、対応するメモリブロックが圧縮されていることを示し得る。「11」の値は、固定パターン(たとえば、すべて0またはすべて1)が対応するメモリブロック内に記憶されていることを示し得る。そのような態様では、マスタディレクトリ66は、確率的決定に対する更新された対象ではなく、常に更新されることになる。
【００７６】
この点について、図12は、頻出パターン圧縮データ圧縮機構246を示す。この点について、圧縮されるべきソースデータフォーマット248内のソースデータは、128バイトとして例によって示される。圧縮データフォーマット250を以下に示す。圧縮データフォーマット250は、プリフィックスコードPx、およびDataxとしてプリフィックスの後ろにあるデータのフォーマットにおいて提供される。プリフィックスは、3ビットである。プリフィックスコードは、頻出パターン符号化テーブル254内のプリフィックスコード列252において示されており、頻出パターン符号化テーブル254は、プリフィックスコード列252内の所与のプリフィックスコードのためのパターン符号化列256において符号化されたパターンを示す。符号化されたパターンに関するデータサイズは、頻出パターン符号化テーブル254のデータサイズ列258において提供される。
【００７７】
図13は、32ビット頻出パターン圧縮データ圧縮機構260を示す。この点について、圧縮されるべきソースデータフォーマット262内のソースデータは、128バイトとして例によって示されている。圧縮データフォーマット264を以下に示す。圧縮データフォーマット264は、プリフィックスPx、およびDataxとしてプリフィックスの直後にあるデータのフォーマットにおいて提供される。新しい圧縮データフォーマット266は、効率の目的のために一緒にグループ化されるように編成される、プリフィックスコードPx、データDatax、フラグ、およびパターンの異なるフォーマットにおいて提供される。プリフィックスコードは、3ビットである。プリフィックスコードは、頻出パターン符号化テーブル270内のプリフィックスコード列268において示されており、頻出パターン符号化テーブル270は、プリフィックスコード列268内の所与のプリフィックスコードのためのパターン符号化列272において符号化されたパターンを示す。符号化されたパターンのためのデータサイズは、頻出パターン符号化テーブル270のデータサイズ列274において提供される。プリフィックスコード000は、新しい圧縮データフォーマット266内の32ビットのフルサイズのデータとなる非圧縮パターンを意味する。プリフィックスコード001は、すべてゼロのデータブロックを意味し、それは、新しい圧縮データフォーマット266のデータ内の0ビットとして提供され得る。3ビットプリフィックスでは、プリフィックスコード010〜111は、この例では、それぞれ、0、4、8、12、16、および24ビットのパターンである、ソースデータ内で認識される他の特定のパターンを符号化するために使用され得る。
【００７８】
図14は、32ビット頻出パターン圧縮データ圧縮機構276の一例を示す。この点について、圧縮されるべきソースデータフォーマット278内のソースデータは、128バイトとして例によって示されている。圧縮データフォーマット280を以下に示す。圧縮データフォーマット280は、プリフィックスPx、およびDataxとしてプリフィックスの後ろにあるデータのフォーマットにおいて提供される。新しい圧縮データフォーマット282は、効率の目的のために一緒にグループ化されるように編成される、プリフィックスコードPx、データDatax、フラグ、およびパターンの異なるフォーマットにおいて提供される。プリフィックスコードは、3ビットである。プリフィックスコードは、頻出パターン符号化テーブル286内のプリフィックスコード列284において示されており、頻出パターン符号化テーブル286は、プリフィックスコード列284内の所与のプリフィックスコードのためのパターン符号化列288において符号化されたパターンを示す。符号化されたパターンのためのデータサイズは、頻出パターン符号化テーブル286のデータサイズ列290において提供される。プリフィックスコード000は、新しい圧縮データフォーマット282内の32ビットのフルサイズのデータとなる非圧縮パターンを意味する。プリフィックスコード001は、すべてゼロのデータブロックを意味し、それは、新しい圧縮データフォーマット282のデータ内の0ビットとして提供され得る。プリフィックスコード010は、特定のパターンであり、したがって、新しい圧縮データフォーマット282による圧縮データにおいて0ビットのデータサイズを必要とするパターン0xFFFFFFFFを意味する。他のパターンは、プリフィックスコード011〜111のための頻出パターン符号化テーブル286内に示されている。新しい圧縮データフォーマット282内のフラグフィールドは、プリフィックスコード001〜111のためのどのパターンが圧縮データのデータ部分(すなわち、Datax)内に存在するのかを示す。パターンが圧縮データ内に存在する場合、パターンは、次いで非圧縮データを再作成するために考慮に入れられ得る新しい圧縮データフォーマット282内に記憶される。データフィールドは、新しい圧縮データフォーマット282内のデータフィールドに関連付けられたプリフィックスコードに従って圧縮データを含む。
【００７９】
図15は、64ビット頻出パターン圧縮データ圧縮機構292の別の例を示す。この点について、圧縮されるべきソースデータフォーマット294内のソースデータは、128バイトとして例によって示されている。新しい圧縮データフォーマット296は、効率の目的のために一緒にグループ化されるように編成される、プリフィックスコードPx、データDatax、フラグ、およびパターンの異なるフォーマットにおいて提供される。プリフィックスコードは、4ビットである。プリフィックスコードは、頻出パターン符号化テーブル302内のプリフィックスコード列298、300において示されており、頻出パターン符号化テーブル302は、プリフィックスコード列298、300内の所与のプリフィックスコードのためのパターン符号化列304、306において符号化されたパターンを示す。符号化されたパターンのためのデータサイズは、頻出パターン符号化テーブル302のデータサイズ列308、310において提供される。プリフィックスコード0000は、すべてゼロのデータブロックを意味し、それは、新しい圧縮データフォーマット296のデータ内の0ビットとして提供され得る。他のパターンは、ASCIIパターンを頻繁に生じるためのASCIIパターンを含むプリフィックスコード0001〜1111のための頻出パターン符号化テーブル302内に示されている。新しい圧縮データフォーマット296内のフラグフィールドは、プリフィックスコード0001〜1111のためのどのパターンが圧縮データのデータ部分(すなわち、Datax)内に存在するのかを示す。パターンが圧縮データ内に存在する場合、パターンは、次いで非圧縮データを再作成するために考慮に入れられ得る新しい圧縮データフォーマット296内に記憶される。データフィールドは、新しい圧縮データフォーマット296内のデータフィールドに関連付けられたプリフィックスコードに従って圧縮データを含む。
【００８０】
図16は、64ビット頻出パターン圧縮データ圧縮機構312の別の例を示す。この点について、圧縮されるべきソースデータフォーマット314内のソースデータは、128バイトとして例によって示されている。新しい圧縮データフォーマット316は、効率の目的のために一緒にグループ化されるように編成される、プリフィックスコードPx、データDatax、フラグ、およびパターンの異なるフォーマットにおいて提供される。プリフィックスコードは、4ビットである。プリフィックスコードは、頻出パターン符号化テーブル322内のプリフィックスコード列318、320において示されており、頻出パターン符号化テーブル322は、プリフィックスコード列318、320内の所与のプリフィックスコードのためのパターン符号化列324、326において符号化されたパターンを示す。符号化されたパターンのためのデータサイズは、頻出パターン符号化テーブル322のデータサイズ列328、330において提供される。プリフィックスコード0000は、すべてゼロのデータブロックを意味し、それは、新しい圧縮データフォーマット316のデータ内の0ビットとして提供され得る。他のパターンは、固定パターンの組合せを含み得るプリフィックスコード0001〜1111のための頻出パターン符号化テーブル322内に示されている。新しい圧縮データフォーマット316内のフラグフィールドは、プリフィックスコード0001〜1111のためのどのパターンが圧縮データ内のデータ部分(すなわち、Datax)内に存在するのかを示す。パターンが圧縮データ内に存在する場合、パターンは、新しい圧縮データフォーマット316内に記憶され、それは次いで、非圧縮データを再作成するためにデータ圧縮中に考慮に入れられ得る。プリフィックスコードP0〜P31は、非圧縮フォーマットにおいて完全な長さのデータを再作成するために対応するデータ(Datax)と一緒に使用されるパターンにリンクし得る。データフィールドは、新しい圧縮データフォーマット316内のデータフィールドに関連付けられたプリフィックスコードに従って圧縮データを含む。
【００８１】
図16内の頻出パターン圧縮データ圧縮機構312で使用され得る固定パターンの例は、図17内のテーブル332に示されており、そこで、固定パターンは、パターン列334内に与えられ、その長さは、長さ列336内に与えられ、パターンの定義は、パターン定義列338内に与えられている。フラグの定義は、CMC36がプリフィックスコードにリンクされた所与のパターンを、非圧縮データを作成するために使用される定義に相関させることを可能にするために、フラグ定義テーブル340内に示されている。フラグ定義テーブル340は、フラグ列342内の所与のフラグのためのビットと、フラグ値列344内の所与のフラグのためのビットの値と、フラグ定義列346内の所与のフラグのためのフラグの定義とを含む。
【００８２】
図18は、64ビット頻出パターン圧縮データ圧縮機構348の別の例を示す。この点について、圧縮されるべきソースデータフォーマット350内のソースデータは、128バイトとして例によって示されている。新しい圧縮データフォーマット352は、効率の目的のために一緒にグループ化されるように編成される、プリフィックスコードPx、データDatax、フラグ、およびパターンの異なるフォーマットにおいて提供される。プリフィックスコードは、4ビットである。プリフィックスコードは、頻出パターン符号化テーブル358内のプリフィックスコード列354、356において示されており、頻出パターン符号化テーブル358は、プリフィックスコード列354、356内の所与のプリフィックスコードのためのパターン符号化列360、362において符号化されたパターンを示す。符号化されたパターンのためのデータサイズは、頻出パターン符号化テーブル358のデータサイズ列364、366において提供される。プリフィックスコード0000は、すべてゼロのデータブロックを意味し、それは、新しい圧縮データフォーマット352のデータ内の0ビットとして提供され得る。プリフィックスコード1111は、新しい圧縮データフォーマット352において圧縮されていないデータブロックを意味する。他のパターンは、そこに示されているように定義されたパターンの組合せを含み得るプリフィックスコード0001〜1110のための頻出パターン符号化テーブル358内に示されている。新しい圧縮データフォーマット352内のフラグフィールドは、プリフィックスコード0000〜1110のためのどのパターンが圧縮データのデータ部分(すなわち、Datax)内に存在するのかを示す。パターンが圧縮データ内に存在する場合、パターンは、次いで非圧縮データを再作成するために考慮され得る新しい圧縮データフォーマット352内に記憶される。この例では、ソースデータ内に存在するプリフィックスコード0000〜1110内で説明されるパターンのみが存在したので、新しい圧縮データフォーマット352は、パターン0〜5のみを含むものとして示されている。データフィールドは、新しい圧縮データフォーマット352内のデータフィールドに関連付けられたプリフィックスコードに従って圧縮データを含む。
【００８３】
本明細書で開示した態様によるCPU搭載システム内のCMCを使用してメモリ帯域幅の圧縮を提供することは、任意のプロセッサ搭載デバイス内で提供され得る、または任意のプロセッサ搭載デバイス内に統合され得る。例は、限定はしないが、セットトップボックス、娯楽ユニット、ナビゲーションデバイス、通信デバイス、固定位置データユニット、モバイル位置データユニット、モバイルフォン、セルラーフォン、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末(PDA)、モニタ、コンピュータモニタ、テレビジョン、チューナ、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、およびポータブルデジタルビデオプレーヤを含む。
【００８４】
この点について、図19は、図2のCMC36で図2のSoC10'を用いることができるプロセッサ搭載システム368の一例を示す。この例では、プロセッサ搭載システム368は、1つまたは複数のプロセッサ372を各々が含む1つまたは複数のCPU370を含む。CPU370は、一時的に記憶されたデータへの高速アクセスのためにプロセッサ372に結合されたキャッシュメモリ374を有し得る。CPU370は、システムバス376に結合され、プロセッサ搭載システム368内に含まれるデバイスを相互に結合することができる。周知のように、CPU370は、システムバス376を介して、アドレス、制御、およびデータ情報を交換することによって、これらの他のデバイスと通信する。たとえば、CPU370は、スレーブデバイスの一例としてメモリコントローラ378にバストランザクション要求を通信することができる。図19に示されていないが、複数のシステムバス376を設けることができる。
【００８５】
他のデバイスは、システムバス376に接続され得る。図19に示されるように、これらのデバイスは、例として、メモリシステム380、1つまたは複数の入力デバイス382、1つまたは複数の出力デバイス384、1つまたは複数のネットワークインターフェースデバイス386、および1つまたは複数のディスプレイコントローラ388を含むことができる。入力デバイス382は、限定はしないが、入力キー、スイッチ、音声プロセッサ等を含む、任意のタイプの入力デバイスを含むことができる。出力デバイス384は、限定はしないが、音声、ビデオ、他の視覚インジケータなどを含む、任意のタイプの出力デバイスを含むことができる。ネットワークインターフェースデバイス386は、ネットワーク390との間でデータを交換することを可能にするように構成された任意のデバイスであり得る。ネットワーク390は、限定はしないが、ワイヤードまたはワイヤレスネットワーク、プライベートまたはパブリックネットワーク、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク、ワイヤレスローカルエリアネットワーク、BLUETOOTH（登録商標）(BT)、およびインターネットを含む、任意のタイプのネットワークであり得る。ネットワークインターフェースデバイス386は、所望の任意のタイプの通信プロトコルをサポートするように構成され得る。メモリシステム380は、1つまたは複数のメモリユニット392(0)〜392(N)を含むことができる。
【００８６】
CPU370はまた、1つまたは複数のディスプレイ394に送られる情報を制御するために、システムバス376を介してディスプレイコントローラ388にアクセスするように構成され得る。ディスプレイコントローラ388は、1つまたは複数のビデオプロセッサ396を介して表示されるように情報をディスプレイ394に送り、1つまたは複数のビデオプロセッサ396は、表示されるべき情報をディスプレイ394に適したフォーマットに処理する。ディスプレイ394は、限定はしないが、陰極線管(CRT)、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイ、プラズマディスプレイなどを含む、任意のタイプのディスプレイを含むことができる。
【００８７】
当業者は、さらに、本明細書で開示した態様に関連して説明した様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムが、電子ハードウェアとして、メモリもしくは別のコンピュータ可読媒体内に記憶され、プロセッサもしくは他の処理デバイスによって実行される命令として、または両方の組合せとして実装され得ることを理解するであろう。本明細書に記載のデバイスは、例として、任意の回路、ハードウェア構成要素、集積回路(IC)、またはICチップ内で用いられ得る。本明細書において開示されるメモリは、任意のタイプおよびサイズのメモリとすることができ、所望の任意のタイプの情報を記憶するように構成することができる。この互換性を明確に説明するために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップは、それらの機能の観点から一般的に上記で説明されている。そのような機能がどのように実現されるかは、特定の用途、設計上の選択、および/または、システム全体に課された設計上の制約によって決まる。当業者は、説明した機能を各特定の用途のための様々な方法で実装し得るが、そのような実装の決定は、本開示の範囲からの逸脱を引き起こすと解釈されるべきではない。
【００８８】
本明細書で開示した態様に関連して説明した様々な例示的な論理ブロック、モジュール、および回路は、プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタロジック、個別ハードウェア構成要素、または、本明細書に記載の機能を実行するように設計されたそれらの任意の組合せを用いて実装または実行され得る。プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装され得る。
【００８９】
本明細書で開示した態様は、ハードウェアおよびハードウェア内に記憶された命令において具体化され得、たとえば、ランダムアクセスメモリ(RAM)、フラッシュメモリ、読出し専用メモリ(ROM)、電気的プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当該技術分野で公知の任意の他の形態のコンピュータ可読媒体内に存在し得る。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるようにプロセッサに結合される。代替では、記憶媒体は、プロセッサと一体であり得る。プロセッサおよび記憶媒体は、ASIC内に存在し得る。ASICは、遠隔局内に存在し得る。代替では、プロセッサおよび記憶媒体は、遠隔局、基地局、またはサーバ内に個別構成要素として存在し得る。
【００９０】
また、本明細書で例示的な態様のいずれかにおいて説明した動作ステップは、例および説明を提供するために説明されていることに留意されたい。説明した動作は、図示した順序以外の多数の異なる順序で実行され得る。さらに、単一の動作ステップで説明した動作は、実際にはいくつかの異なるステップで実行され得る。加えて、例示的な態様において論じた1つまたは複数の動作ステップは、組み合わされ得る。当業者には容易に明らかになるように、フローチャート図に示す動作ステップは、多数の異なる修正を受ける場合があることを理解されたい。当業者はまた、情報および信号が様々な異なる技術および技法のいずれかを使用して表され得ることを理解するであろう。たとえば、上記の説明全体にわたって言及され得るデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場もしくは磁性粒子、光場または光学粒子、またはそれらの任意の組合せによって表され得る。
本開示の上記の説明は、当業者が本開示を製作または使用することを可能にするために提供される。本開示に対する様々な修正は、当業者には容易に明らかになり、本明細書で定義された一般的な原理は、本開示の要旨または範囲から逸脱することなく、他の変形例に適用され得る。したがって、本開示は、本明細書で説明する例および設計に限定されるものではなく、本明細書で開示する原理および新規の特徴と一致する最も広い範囲を与えられるべきである。
【符号の説明】
【００９１】
10'  SoC
10"  SoC
12'  CPU搭載システム
14(1)〜14(N)  CPUブロック
16(1)、16(2)  CPU
18(1)〜18(N)  共有L2キャッシュ
20  共有L3キャッシュ
22  内部システムバス
24  メモリコントローラ
26  周辺機器
28  ストレージ
30  エクスプレス周辺機器構成要素相互接続(PCI)(PCI-e)インターフェース
32  ダイレクトメモリアクセス(DMA)コントローラ
34  統合メモリコントローラ(IMC)
36  CMC
38  システムメモリ
40(1)〜40(R)  二重データレート(DDR)ダイナミックランダムアクセスメモリ(DRAM)
44  半導体ダイ
46(1)、46(2)  半導体ダイ
48(1)〜48(P)  メモリインターフェース(MEM I/F)
50  圧縮コントローラ
52  ローカルメモリ
54  スタティックランダムアクセスメモリ(SRAM)
55  L4コントローラ
56  内部メモリ
58  内部メモリコントローラ
60  メモリ帯域幅圧縮機構
62  メモリライン
64  CI
66  マスタディレクトリ
68  エントリ
70  CIキャッシュ
72  キャッシュエントリ
74  キャッシュライン
76  CI
78  L4キャッシュ
80(0)〜80(X)  メモリライン
82(0)〜82(Z)  メモリブロック
84(0)〜84(Z)  メモリブロック
86(0)〜86(Z)  ECCビット
88(0)〜88(Z)  ECCビット
90(0)〜90(Z)  CI
92(0)〜92(Z)  CI
94(0)〜94(Y)  マスタディレクトリメモリブロック
96(0)〜96(W)  CI
98(0)〜98(W)  CI
100(0)〜100(W)  CI
102  メモリ読出し要求
104  物理アドレス
106  矢印
108  矢印
110  矢印
112  破線の矢印
114  メモリ書込み要求
116  矢印
118  書込みデータ
120  CI
122  矢印
124  矢印
126  矢印
158(0)〜158(T)  CIキャッシュエントリ
160(0)〜160(W)  キャッシュされたCI
162(0)〜162(W)  キャッシュされたCI
164(0)〜164(W)  キャッシュされたCI
166  矢印
168  矢印
170  破線の矢印
172  矢印
174  早期メモリ読出し要求
176  矢印
178  矢印
180  矢印
182  矢印
184  矢印
186  矢印
246  頻出パターン圧縮データ圧縮機構
248  ソースデータフォーマット
250  圧縮データフォーマット
252  プリフィックスコード列
254  頻出パターン符号化テーブル
256  パターン符号化列
258  データサイズ列
260  32ビット頻出パターン圧縮データ圧縮機構
262  ソースデータフォーマット
264  圧縮データフォーマット
266  新しい圧縮データフォーマット
268  プリフィックスコード列
270  頻出パターン符号化テーブル
272  パターン符号化列
274  データサイズ列
276  32ビット頻出パターン圧縮データ圧縮機構
278  ソースデータフォーマット
280  圧縮データフォーマット
282  新しい圧縮データフォーマット
284  プリフィックスコード列
286  頻出パターン符号化テーブル
288  パターン符号化列
290  データサイズ列
292  64ビット頻出パターン圧縮データ圧縮機構
294  ソースデータフォーマット
296  新しい圧縮データフォーマット
298  プリフィックスコード列
300  プリフィックスコード列
302  頻出パターン符号化テーブル
304  パターン符号化列
306  パターン符号化列
308  データサイズ列
310  データサイズ列
312  64ビット頻出パターン圧縮データ圧縮機構
314  ソースデータフォーマット
316  新しい圧縮データフォーマット
318  プリフィックスコード列
320  プリフィックスコード列
322  頻出パターン符号化テーブル
324  パターン符号化列
326  パターン符号化列
328  データサイズ列
330  データサイズ列
332  テーブル
334  パターン列
336  長さ列
338  パターン定義列
340  フラグ定義テーブル
342  フラグ列
344  フラグ値列
346  フラグ定義列
348  64ビット頻出パターン圧縮データ圧縮機構
350  ソースデータフォーマット
352  新しい圧縮データフォーマット
354  プリフィックスコード列
356  プリフィックスコード列
358  頻出パターン符号化テーブル
360  パターン符号化列
362  パターン符号化列
364  データサイズ列
366  データサイズ列
368  プロセッサ搭載システム
370  CPU
372  プロセッサ
374  キャッシュメモリ
376  システムバス
378  メモリコントローラ
380  メモリシステム
382  入力デバイス
384  出力デバイス
386  ネットワークインターフェースデバイス
388  ディスプレイコントローラ
390  ネットワーク
392(0)〜392(N)  メモリユニット
394  ディスプレイ
396  ビデオプロセッサ
【図１】
0006599898.tif 000002
【図２】
0006599898.tif 000003
【図３】
0006599898.tif 000004
【図４】
0006599898.tif 000005
【図５】
0006599898.tif 000006
【図６Ａ】
0006599898.tif 000007
【図６Ｂ】
0006599898.tif 000008
【図７】
0006599898.tif 000009
【図８】
0006599898.tif 000010
【図９Ａ】
0006599898.tif 000011
【図９Ｂ】
0006599898.tif 000012
【図１０Ａ】
0006599898.tif 000013
【図１０Ｂ】
0006599898.tif 000014
【図１０Ｃ】
0006599898.tif 000015
【図１１Ａ】
0006599898.tif 000016
【図１１Ｂ】
0006599898.tif 000017
【図１１Ｃ】
0006599898.tif 000018
【図１２】
0006599898.tif 000019
【図１３】
0006599898.tif 000020
【図１４】
0006599898.tif 000021
【図１５】
0006599898.tif 000022
【図１６】
0006599898.tif 000023
【図１７】
0006599898.tif 000024
【図１８】
0006599898.tif 000025
【図１９】
0006599898.tif 000026