(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0007】
以下の説明では、異なる図面における同じ符号の使用は、同様の又は同一のアイテムを示す。特に言及されない限り、「結合される」という用語及びこれに関連する動詞形は、当該技術分野では周知の手段による直接接続および間接電気接続の両方を含み、特に言及されない限り、直接接続についてのどの説明も、適切な形態の間接電気接続を同様に用いる代替的な実施形態を意味する。
【0008】
図1は、いくつかの実施形態に係る物理的メモリを実装する第1のマルチチップモジュールの斜視図である。マルチチップモジュール100は、概して、マルチコアプロセッサチップ120と、メモリチップスタック140と、を含む。メモリチップスタック140は、積層された複数のメモリチップを含む。
図1に示すように、メモリチップスタック140は、メモリチップ142と、メモリチップ144と、メモリチップ146と、メモリチップ148と、を含む。一般に、メモリチップスタック140は、
図1に示されるよりも多い又は少ないメモリチップを含んでもよいことに留意されたい。メモリチップスタック140の各メモリチップは、適正なシステム動作のために所望によりメモリチップスタック140内の他のメモリチップに接続されている。また、メモリチップスタック140の各メモリチップは、適正なシステム動作のために所望によりマルチコアチップ120に接続されている。
【0009】
マルチチップモジュール100のコンポーネントは、動作中に、単一の集積回路パッケージとして組み合わされ、メモリチップスタック140およびマルチコアチップ120は、ユーザからは単一の集積回路のように見える。マルチコアチップ120へのメモリチップスタック140の電気接続は、水平相互接続と組み合わせた垂直相互接続(例えば、バイア又はシリコンスルーホール)を用いて実現される。マルチコアプロセッサダイ120は、メモリチップスタック140のメモリチップより厚く形成されており、メモリチップスタック140を物理的に支持する。マルチチップモジュール100は、5つのチップの各々と比べた場合に、概してコンポーネントアクセス時間を減少させ、かつ、システム性能を増加させながら、システムコストおよび広いスペースを節約する。しかしながら、メモリチップは、種々の信頼性問題に陥る。例えば、環境内で自然発生し又は半導体パッケージング材料から放出されるアルファ粒子などのバックグラウンド放射線は、ビットセルに当たって値を乱すことがある。メモリの繰り返し使用も他の障害を引き起こすことがある。例えば、特定の重要なデバイスにおけるエレクトロマイグレーションは、当該デバイスの摩耗を引き起こすことがあり、当該デバイスは事実上より薄くなり、これにより当該デバイスの抵抗が増加し、最終的にはタイミング誤差を引き起こし、不正確な値が読み出されることになる。他のタイプの障害も起こりうる。メモリチップが故障した場合、故障したメモリチップを交換する実用的な方法が存在しない。代わりに、ユーザは、まだ機能しているメモリ及びプロセッサチップの全てを含むパッケージ全体を交換しなければならず、これは効果なオプションとなる。
【0010】
図2は、いくつかの実施形態に係る物理的メモリを実装する第2のマルチチップモジュール200の斜視図である。マルチチップモジュール200は、概して、インターポーザ210と、マルチコアプロセッサチップ220と、メモリチップスタック240と、を含む。インターポーザ210は、マルチコアチップ220のアクティブ側に接続されている。メモリチップスタック240は、積層された複数のメモリチップを含む。
図2に示すように、メモリチップスタック240は、メモリチップ242と、メモリチップ244と、メモリチップ246と、メモリチップ248と、を含む。一般に、メモリチップスタック240は、
図2に示すよりも多い又は少ないメモリチップを含んでもよいことに留意されたい。メモリチップスタック240の各々のメモリチップは、適正なシステム動作のために所望によりメモリチップスタック240の他のメモリチップに接続されている。また、メモリチップスタック240各々の各メモリチップは、適正なシステム動作のために所望によりマルチコアチップ220に接続されている。いくつかの実施形態では、メモリチップスタック240は単一のメモリチップを含む。いくつかの実施形態では、マルチチップモジュール200は、メモリチップスタック240のように、1つよりも多いメモリチップのスタックを含む。
【0011】
マルチチップモジュール200のコンポーネントは、動作中に、単一のパッケージ(
図2には図示せず)として組み合わされ、これにより、メモリチップスタック240およびマルチコアチップ220は、ユーザからは単一の集積回路のように見える。マルチコアチップ220へのメモリチップスタック240の電気接続は、水平相互接続と組み合わせた垂直相互接続(例えばバイア又はシリコンスルーホール)を用いて実現される。インターポーザ210は、メモリチップスタック240の各々のメモリチップと、マルチコアチップ220との接続を容易にするために、物理的支持およびインターフェースの両方を提供する。5つのチップの各々と比べた場合に、マルチチップモジュール200は、概してコンポーネントアクセス時間を減少させ、かつ、システム性能を増加させながら、システムコストおよび広いスペースを節約する。マルチチップモジュール200は、マルチコアプロセッサ220からメモリチップスタック240を分離し、これにより、マルチコアプロセッサ220のより良好な冷却を可能にする。しかしながら、マルチチップモジュール200は、パッケージ全体を交換せずに、欠陥のあるメモリチップを容易に交換することができないので、信頼性問題及びサービス性問題に悩まされる。
【0012】
図3は、いくつかの実施形態に係る高信頼性メモリコントローラを有する集積回路300を示すブロック図である。集積回路300は、概して、単一の集積回路ダイ上に実装されたマルチコアプロセッサ310と、メモリ350と、を含む。
【0013】
マルチコアプロセッサ310は、メモリアクセス生成回路320と、キュー332と、クロスバースイッチ(XBAR)334と、高速入力/出力(I/O)コントローラ336と、メモリコントローラ340と、を含む。メモリアクセス生成回路320は、「CPU
0」と表記された中央処理装置(CPU)コア322と、「CPU
1」と表記されたCPUコア324と、を含む。CPUコア322,324は、メモリアクセスを行うとともに、メモリアクセスを定義するアドレス、データ及び制御信号を送受信する。キュー332は、CPUコア322と、CPUコア324と、XBAR334と、に接続されている。XBAR334は、高速I/Oコントローラ336と、メモリコントローラ340と、に接続されている。高速I/Oコントローラ336は、「I/O」と表記された周辺装置(
図3には示されていない)に対して外部信号のセットを送受信するために、入力/出力(I/O)ポートを有している。
【0014】
メモリコントローラ340は、誤り訂正符号(ECC)/巡回冗長符号(CRC)計算(「comp」)回路342と、ダイナミックランダムアクセスメモリ(DRAM)スケジューラ344と、物理的インターフェース(PHY)346と、を含む。ECC/CRC comp回路342及びDRAMスケジューラ344の各々は、PHY346に接続されている。PHY346は、「制御」と表記された信号のセットを提供するための出力と、「BA」と表記されたバンクアドレス信号のセットを提供するための出力と、「アドレス」と表記された信号のセットを提供するための出力と、「データ」と表記された信号のセットを送受信するためのI/Oポートと、を有している。
【0015】
メモリ350は、アドレス空間を画定し、DRAM352と、DRAM354と、DRAM356と、DRAM358と、を含む複数のダイナミックランダムアクセスメモリ(DRAM)チップを含む。メモリ350は、
図1のメモリチップスタック140又は
図2のメモリチップスタック240の何れかによって実装されてもよい。DRAM352,354,356,358は、JEDECによって公開されたDDR3ダブルデータレート(DDR)規格に準拠しているが、他の実施形態では、他のDDR規格及び非DDR規格に準拠してもよい。概して、DDRチップの各々は、メモリバンクのセットを有している。メモリ350の各DRAMチップは、制御を受信するための入力と、BAを受信するための入力と、アドレスを受信するための入力と、データを送受信するためのI/Oポートと、を有している。
【0016】
CPUコア322およびCPUコア324の両方は、動作中に、1つ以上のプログラムに対応する命令をフェッチする機能と、当該命令を実行する機能と、メモリアクセス要求をキュー332に提供することによって当該命令に関連するデータにアクセスする機能と、を有している。キュー332は、I/Oコントローラ336又はメモリコントローラ340にディスパッチするために、アクセスを記憶する。キュー332は、データアクセスに対して、先入れ先出し方式で優先順位を付ける。
【0017】
XBAR334は、メモリアクセス生成回路320と、キュー332と、高速I/Oコントローラ336と、メモリコントローラ340と、を含むマルチコアプロセッサ310の回路、および、これらに関連したバスを切り換えるとともに多重化する。高速I/Oコントローラ336は、XBAR334と、イーサネット(登録商標)コントローラなどの外部回路との間の接続を提供する。
【0018】
メモリコントローラ340は、メモリアクセス要求に応じて、メモリ350のアドレス空間内の記憶位置にアクセスする。メモリコントローラ340は、正常なデータと、データに関する特別な信頼性情報と、を標準的な既製のメモリチップに格納することによって、高い信頼性を保証する。信頼性データ情報は、ビットエラーの検出と、当該ビットエラーの可能な訂正と、を可能にする。メモリコントローラ340は、信頼性データを、低コストコモディティのメモリに格納することによって、マルチコアプロセッサ310が低価格のマルチチップモジュールのスタックドダイと一体化されるのを可能にする。
【0019】
以下により詳細に説明されるように、メモリコントローラ340は、アドレス空間の第1の部分におけるデータ要素と、アドレス空間の第2の部分における前記データ要素に対応する信頼性データと、にアクセスする。メモリコントローラ340は、メモリ350に格納する信頼性データを、ECC/CRC comp回路342を用いて生成し、その後、格納された信頼性データに対してチェックを行うために、信頼性データを計算する。ECC/CRC comp回路342は、DRAMスケジューラ344によってアクセスされたデータを、信頼性データを用いてチェックし、適切な場合には、当該データのエラーを選択的に訂正し、訂正されたデータを、リクエストしているCPUに転送する。
【0020】
PHY346は、ECC/CRC comp回路342及びDRAMスケジューラ344の、マルチバンクメモリ350へのインターフェースを提供する。PHY346は、データにアクセスするために、標準的な制御信号、BA信号及びアドレス信号を、メモリ350に提供する。概して、メモリコントローラ340は、読み出しアクセス要求に応じて、アドレス空間の第1の部分からデータ要素を読み出し、アドレス空間の第2の部分から信頼性データを読み出すように、PHY346を制御する。ECC/CRC comp回路342は、受信したデータに基づいて信頼性を生成し、メモリコントローラ340は、生成した信頼性データを、検索した信頼性データと比較して、データが適正に読み出されたかどうかを判定する。メモリコントローラ340は、書き込みアクセス要求に応じて、データ要素に関する信頼性データを生成するようにECC/CRC comp回路342を制御し、データ要素をアドレス空間の第1の部分に書き込み、かつ、信頼性データをアドレス空間の第2の部分に書き込むように、PHY346を制御する。異なるレベルの信頼性をサポートするために、メモリコントローラ340がメモリ350のアドレス空間を生成及び管理する方法が以下に記載される。
【0021】
図4は、いくつかの実施形態に係る
図3のメモリのアドレス空間400の表現を示す図である。アドレス空間400は、概して、「バンク0」と表記されたメモリバンク410と、「バンク1」と表記されたメモリバンク420と、「バンク2」と表記されたメモリバンク430と、「バンク3」と表記されたメモリバンク440と、を含む連続したメモリバンクの間でアドレスの連続した部分を含む。
【0022】
メモリバンク410は、「A」と表記された代表的なメモリページ412と、「B」〜「P」と連続して表記された複数の付加的かつ例示的なメモリページとを含む、複数の4キロバイト(KB)メモリページを含む。
【0023】
メモリバンク420,430,440は、同様に、複数の4KBメモリページを含む。ここで、メモリバンク440は、連続するデータ部分442と、全てのメモリバンクに関する信頼性データを格納するための連続する信頼性部分444と、を含む。信頼性部分444は、「E
0」と表記された代表的なメモリページ446と、「E
1」と表記された代表的なメモリページと、を含む。メモリページ446は、メモリページA〜Hのデータ要素に対応する、「E
A」〜「E
H」と連続して表記された信頼性データを含む。
【0024】
メモリコントローラ340は、動作中に、アドレス空間400の第1の部分(例えば、最上位、又は、より下位のアドレス)におけるデータ要素にアクセスし、かつ、アドレス空間400の第2の部分(例えば、最下位、又は、より上位のアドレス)、すなわち信頼性部分444における、データ要素に対応する信頼性データにアクセスする。例えば、メモリバンク410は、4KBメモリページに編成されている。
図4は、アドレスの連続する部分における代表的なページA〜Hを示している。メモリバンク440において、メモリコントローラ340は、アドレスの連続する部分444内のページA〜Hのデータグループに対応する信頼性データE
A〜E
Hを含む信頼性データグループE
0に関する1つの4KBメモリページ446にアクセスする。
【0025】
同様に、メモリコントローラ340は、メモリバンク410において、アドレスの連続する部分におけるページI〜Pのデータグループに関する8つの4KBメモリページにアクセスする。また、メモリコントローラ340は、メモリバンク440において、信頼性部分444内のページI〜Pのデータグループに対応する信頼性データ(
図4には具体的に示されていない)を含む信頼性データグループE
1に関する1つの4KBメモリページにアクセスする。
【0026】
アドレス空間400は、アドレス空間400の端部の連続する部分に信頼性データを配置することによって線形データアドレス空間を提供し、これにより、アドレス空間の「穴(holes)」を回避する。アドレス空間400は、種々のタイプの信頼性データをサポートする。例えば、ある規格では、64のデータビットにつき8の信頼性ビット(合計72ビット)を有する、例えば(72,64)SECDEDコードなどの有用なシングルエラー訂正、ダブルエラー検出(SECDED)コードを規定している。ECC/CRC comp回路342は、SECDEDを用いて、シングルエラーを検出及び訂正し、かつ、ダブルエラーを検出するが訂正しない機能を有する。他の周知のコードに関して、ECC/CRC comp回路342は、2つ以上のエラーを検出及び/又は訂正する機能を有する。アドレス空間400は、システムの信頼性のニーズに基づき使用される信頼性コードのタイプに基づいて、信頼性部分444のサイズが変更されるのを可能にする。
【0027】
しかしながら、メモリコントローラ340は、全ての信頼性データを単一のメモリバンクに配置することによって、いくつかのシステムのアクセス待ち時間を、許容できないほど増加させる場合がある。例えば、複数のバンクにおいてページを同時に開いた状態に維持するシステムでは、メモリコントローラ340が単一のバンク440と異なるバンクへのアクセスのために信頼性データにアクセスする場合に、信頼性部分444へのアクセスが「ボトルネック」を引き起こす。マルチコアプロセッサ310は、このボトルネックを補償するために、他の機構を組み込むことが可能である点に留意されたい。例えば、メモリコントローラ340又はメモリアクセス生成回路320などの回路は、信頼性データをプリフェッチし、信頼性データをローカルキャッシュに格納することができる。以下により十分に述べられるように、メモリコントローラ340は、1つよりも多いシングルバンクに信頼性データを分散させることによって、信頼性データにアクセスするための待ち時間を補償することができ、又は、データ要素及び信頼性データをメモリバンク間で交互に格納することもできる。
【0028】
図5は、いくつかの実施形態に係る
図3のメモリのアドレス空間500の別の表現を示す図である。アドレス空間500は、概して、「バンク0」と表記されたメモリバンク510と、「バンク1」と表記されたメモリバンク520と、「バンク2」と表記されたメモリバンク530と、「バンク3」と表記されたメモリバンク540と、を含む連続したメモリバンクの間でアドレスの連続した部分を含む。
【0029】
メモリバンク510は、「A」〜「D」と連続して表記された4つの代表的なメモリページ516を含む、連続するデータ部分512内の複数のメモリページを含む。また、バンク510は、信頼性部分514内のメモリページを含む。信頼性部分514内の各ページは、メモリページA〜Dのデータ要素に対応する、「E
A」と表記された代表的な信頼性データ518と「E
B」〜「E
D」と連続して表記された信頼性データとを含む、信頼性データを含む。また、同様に、メモリバンク520,530,540の各々は、データ部分522,532,542と信頼性部分524,534,544とを含む。信頼性部分524,534,544内の各ページは、それぞれデータ部分522,532,542内のデータ要素に対応する信頼性データを含む。
【0030】
メモリコントローラ340は、動作中に、各メモリバンクの第1の部分内のデータ要素と、同じメモリバンクの第2の部分内のデータ要素に対応する信頼性データとにアクセスする。例えば、メモリコントローラ340は、データ部分510のメモリページ516内のデータ要素A,B,C,Dと、信頼性部分514のメモリページ518内の信頼性データE
A〜E
Dとにアクセスする。これにより、メモリコントローラ340は、データと、当該データに対応する信頼性データとを、単一のメモリバンクに格納する。同様に、メモリコントローラ340は、データ部分522,532,542内のデータ要素のために、メモリバンク520,530,540にアクセスする。また、メモリコントローラ340は、信頼性部分524,534,544内の信頼性データのために、メモリバンク520,530,540にアクセスする。
【0031】
全体として、アドレス空間500は、メモリバンク510〜540間で分散された不連続のデータ部分と、同様にメモリバンク510〜540間で分散された不連続の信頼性部分と、を有する。メモリコントローラ340は、メモリバンクの最初の(100−X)%からデータ要素にアクセスし、かつ、同じメモリバンクの最後のX%から信頼性データにアクセスする。例えば、メモリコントローラ340が(64,72)SECDEDコードを用いる場合には、X=12.5%である。アドレス空間500は、単一の線形データ空間を含まないが、信頼性データを、対応するデータと同じメモリバンクに配置することによって、メモリ空間500は、
図4のメモリ空間400に関連したボトルネックを回避する。
【0032】
図6は、いくつかの実施形態に係る
図3のメモリのアドレス空間600の別の表現を示す図である。アドレス空間600は、概して、「バンク0」と表記されたメモリバンク610と、「バンク1」と表記されたメモリバンク620と、「バンク2」と表記されたメモリバンク630と、「バンク3」と表記されたメモリバンク640と、を含む連続したメモリバンクの間でアドレスの連続する部分を含む。
【0033】
アドレス空間600は、「A」〜「R」と表記された代表的なメモリ列を含む複数のメモリ列であって、データを格納し、かつ、4つのメモリバンク間で分散された複数のメモリ列を含む。また、アドレス空間600は、データに関する信頼性コードを格納する複数のメモリ列であって、メモリバンク間で分散され、かつ、データ要素を有する列とインターリーブされる複数のメモリ列を含む。これらの列の各々は、他の列のデータ要素に対応する信頼性データを有する。
【0034】
特に、メモリバンク610は列611〜615を含み、メモリバンク620は列621〜625を含み、メモリバンク630は列631〜635を含み、メモリバンク640は列641〜645を含む。アドレス空間600において、データはメモリバンク間で分散される。したがって、データ要素Aはバンク610の列611に格納され、データ要素Bはバンク620の列621に格納され、データ要素Hがバンク640の列642に格納されるまで同様である。ここで、8つのデータ要素がこの方法で列に分散された後に、列に対応する信頼性データのセットが格納される。したがって、メモリバンク610は、列A〜Hのデータ要素に対応する「E
A〜E
H」と表記された信頼性データを列613に含む。
【0035】
バンク610〜640は、データ要素Iを格納するバンク620の列623で始まり、データ要素Jを格納するバンク630の列633、データ要素Pを格納するバンク610の列615まで同様の連続した位置に、8つの後続のデータ要素I〜Pを格納する。メモリバンク620の列625は、列I〜P内のデータ要素に対応する「E
I〜E
P」と表記された信頼性データを格納する。
【0036】
メモリコントローラ340は、動作中に、アドレス空間600内の連続したメモリバンク610〜640間で、データ要素を、当該データ要素に対応する信頼性データとインターリーブする。メモリコントローラ340は、連続してアドレス指定されたある数のデータ要素を有するデータグループの各データ要素を、複数のバンクのうち連続したバンク間で格納し、かつ、グループの全てのデータ要素に関する信頼性データを、次の連続したバンクに格納する。例えば、メモリコントローラ340は、メモリバンク610〜640間の列611,621,631,641,612,622,632,642内の第1の8つのデータグループに水平にアクセスする。メモリコントローラ340は、列A〜H内の第1の8つのデータグループに対応する信頼性データを格納する列613であって、8番目のデータグループの後の列613に配置された信頼性データE
A〜E
Hにアクセスする。また、メモリコントローラ340は、メモリバンク610〜640間の列623,633,643,614,624,634,644,615内の第2の8つのデータグループに水平にアクセスする。また、メモリコントローラ340は、列I〜P内の第2の8つのデータグループに対応する信頼性データを格納する列625であって、第2の8つのデータグループの後の列625内の信頼性データE
I〜E
Pにアクセスする。
【0037】
連続したメモリバンク間で、データ要素を、当該データ要素に対応する信頼性データとインターリーブすることによって、メモリコントローラ340は、特定のメモリアクセスに関する信頼性データが、対応するデータを格納するメモリバンクと同じメモリバンクに格納されることになる機会を低減する。DDR DRAMでは、新しいページにアクセスする前に、バンクにプレチャージコマンドを発行することによって前のページが閉じられなければならず、かつ、アクティブ化コマンドを発行することによって新しいページが開かれなければならない。したがって、データと当該データに対応する信頼性データとが同じバンクに格納されることになる確率を低減させることによって、アドレス空間600は、データ及び当該データに対応する信頼性データにアクセスするのに必要な平均時間を減少させる。
【0038】
図7は、いくつかの実施形態に係る
図3のメモリのアドレス空間700の別の表現を示す図である。アドレス空間700は、概して、「チャネル0」と表記されたメモリチャネル710と、「チャネル1」と表記されたメモリチャネル720と、データ要素730と、信頼性データ740と、を含む。メモリチャネル710は、「バンク0」〜「バンク7」と連続して表記されたメモリバンク711〜718を含む複数のメモリバンクを含む。
【0039】
メモリバンク711は、データバイト「A[7]」〜「A[0]」を含む「A」と表記されたデータグループを含む。メモリバンク712〜718の各々は、8バイトを有し、かつ、メモリバンク711と同様の態様で配列されたデータグループを含む。メモリバンク712は、データバイト「B[7]」〜「B[0]」を含む「B」と表記されたデータグループを含む。メモリバンク713は、データバイト「C[7]」〜「C[0]」を含む「C」と表記されたデータグループを含む。メモリバンク714は、データバイト「D[7]」〜「D[0]」を含む「D」と表記されたデータグループを含む。メモリバンク715は、データバイト「E[7]」〜「E[0]」を含む「E」と表記されたデータグループを含む。メモリバンク716は、データバイト「F[7]」〜「F[0]」を含む「F」と表記されたデータグループを含む。メモリバンク717は、データバイト「G[7]」〜「G[0]」を含む「G」と表記されたデータグループを含む。メモリバンク718は、データバイト「H[7]」〜「H[0]」を含む「H」と表記されたデータグループを含む。
【0040】
メモリチャネル720は、「バンク0」と表記された代表的なメモリバンク721と、「バンク1」と表記された代表的なメモリバンクとを含む、複数のさらなるメモリバンクを含む。メモリバンク721は、「ECCコンポーネント」と表記された信頼性データコンポーネントを含む。
【0041】
データ要素730は、8つの代表的なデータバイトであるコンポーネント[0]〜コンポーネント[7]を含む。
【0042】
メモリコントローラ340は、動作中に、メモリチャネル710間でデータ要素730の一部をインターリーブし、データ要素730に関する信頼性データを、さらなるメモリバンク721に格納する。例えば、メモリコントローラ340は、データ要素730のコンポーネント[0]をバンク711のA[0]に格納し、データ要素730のコンポーネント[1]をバンク712のB[0]に格納し、データ要素730のコンポーネント[2]をバンク713のC[0]に格納し、以降同様に、データ要素730のコンポーネント[7]をバンク718のH[0]に格納する。メモリコントローラ340は、データコンポーネント[7]〜データコンポーネント[0]に対応する信頼性データコンポーネント740を、さらなるメモリバンク721のバイト位置[0]に格納する。
【0043】
メモリチャネルのバンク間でデータ要素のバイトをインターリーブし、信頼性データバイトをさらなるメモリチャネルのバンクに格納することによって、メモリコントローラ340は、単一のバンクが故障した場合のデータの復元を可能にする。
【0044】
しかしながら、メモリコントローラ340は、他の十分に機能しているメモリバンクにおいて、故障しているメモリバンクのデータコンポーネントを再度生成する能力を有する。例えば、メモリコントローラ340は、データ要素の各コンポーネントをメモリバンクに格納し、各コンポーネントを、さらなるメモリバンクからの信頼性データコンポーネントでカバーするので、故障しているメモリバンクの全てのデータ要素コンポーネントは、さらなるバンクからの関連する信頼性データによってカバーされる。例えば、メモリコントローラ340は、SECDEDコードを用いて、故障しているバンク内の全てのデータ要素を検出し、訂正し、再度生成する機能を有する。
【0045】
上記の
図4〜
図7で開示された構成などの構成を用いることによって、マルチコアプロセッサ310は、低価格な既製のメモリを用いて、メモリチップを追加することなく、システムの信頼性、可用性及びサービス性を高める。
【0046】
図8は、いくつかの実施形態に係るデータを書き込む方法800のフロー図である。アクションボックス810では、データ要素に関する書き込みアクセスをリクエスタから受信する。アクションボックス820では、データ要素に関する信頼性データが計算される。アクションボックス830では、データ要素がアドレス空間の第1の部分に格納される。アクションボックス840では、信頼性データが前記アドレス空間の第2の部分に格納される。
【0047】
図9は、いくつかの実施形態に係るデータを読み出す方法900のフロー図である。例えば、
図8の方法800を用いて事前に書き込まれたデータに関する読み出しを行うこともできる。アクションボックス910では、データ要素に関する読み出しアクセスをリクエスタから受信する。決定ボックス920では、データ要素がアドレス空間の第1の部分から読み出される。アクションボックスのセット930では、信頼性データが適正に読み出されたかどうかが判定される。
【0048】
アクションボックスのセット930は、計算された信頼性データを生成するために、アドレス空間の第1の部分から読み出されたデータ要素に関する信頼性データを計算するアクションボックス932と、格納された信頼性データを生成するために、アドレス空間の第2の部分に格納された信頼性データを読み出すアクションボックス934と、格納された信頼性データを計算された信頼性データと比較するアクションボックス936と、をさらに含む。
【0049】
方法900を続けると、決定ボックス940は、格納された信頼性データが計算された信頼性データと一致するか否かを判定する。格納された信頼性データが計算された信頼性データと一致する場合には、フローは、データ要素をリクエスタに戻すアクションボックス942に進む。格納された信頼性が計算された信頼性データと一致しない場合には、フローは、信頼性データを訂正することができるか否かを判定する決定ボックス944に進む。信頼性データを訂正することができる場合には、フローは、データを訂正するアクションボックス946と、訂正されたデータをリクエスタに戻すアクションボックス948と、に進む。信頼性データを訂正することができない場合には、フローは、エラーをリクエスタに報告するアクションボックス950に進む。
【0050】
データ及び対応する信頼性データを格納し、後に取り出すことは、上記の
図4〜
図7で説明された技術の何れかかを用いて行うことができる。したがって、いくつかの実施形態では、アドレス空間は、第1のアドレスの連続する部分と、第2のアドレスの連続する部分と、に分割され、データ要素は、第2のアドレスの連続する部分に格納され、信頼性データは、第2のアドレスの連続する部分に格納される。いくつかの実施形態では、アドレス空間は、バンクの第1のアドレスの連続する部分と、バンクの第2のアドレスの連続する部分と、に分割され、データ要素は、バンクの第1のアドレスの連続する部分に格納され、信頼性データは、バンクの第2のアドレスの連続する部分に格納される。いくつかの実施形態では、アドレス空間は、アドレス空間内で順序を有する複数のバンク間で分割され、アドレス空間の第1の部分は、当該順序の複数のバンク間で分散された所定数のデータ要素の複数のグループとして形成され、アドレス空間の第2の部分は、複数のグループの各々の対応するデータ要素ごとの信頼性データ要素を含み、グループに関する信頼性データ要素は、当該順序のグループの最後のデータ要素を含む第2のバンクの後の第1のバンクに配置される。いくつかの実施形態では、アドレス空間は、第1のチャネル及び第2のチャネルを用いて形成され、第1のチャネルは複数のバンクを含み、データ要素は、第1のチャネルの複数のバンク間で分散され、データ要素に関する信頼性データは、第2のチャネルに格納される。
【0051】
図3のメモリコントローラ340は、ハードウェア及びソフトウェアの種々の組み合わせと共に実装されてもよく、ソフトウェアコンポーネントは、少なくとも1つのプロセッサによる実行のためにコンピュータ可読記憶媒体に格納されてもよい。さらに、
図4〜
図7に示されたアドレスマップは、コンピュータ可読記憶媒体に格納されるとともに、メモリコントローラ340の機能を実装する少なくとも1つのプロセッサによって実行される命令によって、少なくとも部分的に実装されてもよい。
図8及び
図9に示された動作の各々は、固定(non−transitory)のコンピュータメモリ又はコンピュータ可読記憶媒体に格納された命令に対応してもよい。種々の実施形態では、固定のコンピュータ可読記憶媒体は、磁気ディスク記憶装置、光ディスク記憶装置、例えばフラッシュメモリなどのソリッドステート記憶装置、又は、他の1つ以上の不揮発性メモリデバイスを含む。固定のコンピュータ可読記憶媒体に格納されるコンピュータ可読命令は、1つ以上のプロセッサによって解釈及び/若しくは実行可能なソースコード、アセンブリ言語コード、オブジェクトコード、又は、他の命令フォーマットであってもよい。
【0052】
さらに、メモリコントローラ340及び/又はマルチコアプロセッサ310は、データベースの形態のコンピュータがアクセス可能なデータ構造であってもよいし、集積回路300を製造するためにプログラムによって直接又は間接的に読み出し及び用いることの可能な他のデータ構造によって説明又は表されてもよい。例えば、このデータ構造は、例えばVerilog若しくはVHDLなどの高レベル設計言語(HDL)でのハードウェア機能の挙動レベル記述又はレジスタ伝達レベル(RTL)記述であってもよい。この記述は、合成ライブラリからのゲートのリストを含むネットリストを生成するために記述を合成し得る合成ツールによって読み出されてもよい。ネットリストは、集積回路300を含むハードウェアの機能を表すゲートのセットを含む。ネットリストは、次いで、マスクに適用される幾何学的形状を記述するデータセットを生成するために、配置及びルーティングされてもよい。マスクは、次いで、集積回路300を製造するために、種々の半導体製造ステップで用いられてもよい。代替的に、コンピュータがアクセス可能な記憶媒体上のデータベースは、所望によりネットリスト(合成ライブラリを有する若しくは有しない)又はデータセットであってもよいし、グラフィックデータシステム(GDS)IIデータであってもよい。
【0053】
開示された実施形態の種々の変更が当業者にとって明白となるであろう。本明細書に記載のメモリコントローラは、マルチチップモジュール100,200の他にデータ破壊を起こしやすい他の集積回路構成に有用である。例えば、プロセッサ及びメモリチップは、フリップチップ結合を用いてマザーボード基板に直接取り付けられる。メモリコントローラ及びメモリは、同じダイ上に実装することもできるが、高レベルの電磁干渉(EMI)を有する環境で用いられることなどによる他の理由でデータ破壊を起こしやすい。メモリチップスタック140又はメモリチップスタック240は、例えば、個別のCPUメモリ、個別のグラフィックス処理ユニット(GPU)メモリ、個別のAPUメモリなどとして、集積回路300のメインメモリとは個別に実装することができる。ダイスタッキング集積(die stacking integration)100及びダイスタッキング集積200は、マルチチップモジュール(MCM)として実装することができる。代替的に、メモリチップは、共通の基板上にCPU、GPU、APU、メインメモリなどと隣接して同一平面上に配置することができる。マルチチップモジュール100,200は4チップメモリチップスタックを含むが、他の実施形態では異なる数のメモリチップを含むこともできる点に留意されたい。
【0054】
メモリコントローラ340は、
図3に示すように、マイクロプロセッサダイ上で少なくとも1つのプロセッサコアと一体化することができ、又は、別個のチップとすることができる。いくつかの実施形態では、集積回路310は、CPUを必要としない論理機能などのコンピューティング機能以外の他の全機能を果たすことができる。さらに、
図3では、CPUコア322,324とは個別のメモリコントローラ340が示されているが、メモリコントローラ340は、CPUコア又は他の論理ブロックの内部に形成されてもよい。
【0055】
メモリコントローラ340の動作は、異なるレベルの信頼性及びオーバーヘッドを実装する種々のアドレスマップに関連して説明されている。
図4〜
図7では、代表的な数のメモリバンクと共にこれらの概念が示されているが、そこで説明された技術は、異なる数のメモリバンクにスケール変更することができる。例えば、メモリ350が4つのDDR3チップと共に実装される場合には、アドレス空間内のメモリバンクの総数は32となるであろう。
【0056】
使用され得る信頼性データの例は、パリティビットと、誤り訂正符号ビット(例えば、限定されないが、シングルエラー訂正(SEC)、シングルエラー訂正及びダブルエラー検出(SEC−DED)、ダブルビットエラー訂正及びトリプルビットエラー検出(DEC−TED)、トリプルエラー訂正、クワッドエラー検出(TEC−QED)、及び、Bose Chaudhuri Hocquenghem(BCH)コードなどの線形ブロックコードを含む)と、チェックサム(例えば、CRC、メッセージ・ダイジェスト(MD5))と、を含む。1、2又はそれ以上のレベルのECC保護に関するサポートを提供することができ、この場合、システムハードウェア又はソフトウェアは、性能と信頼性のバランスをとるために選択することができる。
【0057】
メモリ350は、DRAM技術に関連して上記で説明されている。しかしながら、メモリ350は、他のメモリ技術(例えば、スタティックランダムアクセスメモリ(SRAM)、相変化メモリ(PCM)、例えばメモリスタ及びスピントルク伝達磁気RAM(STT−MRAM)などの抵抗式RAM技術、並びに、フラッシュメモリ)と共に実装することができる。
【0058】
上記の
図4〜
図7に示された実施形態は、8バイトのデータにつき1バイトの信頼性データを用いる。他の実施形態によれば、所与の数のデータバイトに関する信頼性データの量が異なることがある。
【0059】
図示された実施形態では、メモリコントローラ340は、特定のメモリバンクの特定の部分にある信頼性データにアクセスする。いくつかの実施形態によれば、メモリコントローラ340は、代替メモリバンクの代替部分にアクセスすることもできる。
【0060】
いくつかの図示された実施形態では、複数のバンク間でデータ要素を当該データ要素に対応する信頼性データとインターリーブすることを示している。いくつかの実施形態によれば、インターリーブアルゴリズム及びマッピングアルゴリズムを変更することもできる。
【0061】
いくつかの実施形態では、複数のバンクにわたるアドレスの連続する部分が示されている。他の実施形態によれば、アドレスの部分は、アドレスの不連続の部分とすることもでき、アドレスの穴を含むこともできる。
【0062】
したがって、開示された実施形態の範囲に含まれる開示された実施形態の全ての変更を包含することは、添付の請求項によって意図される。