(58)【調査した分野】(Int.Cl.,DB名)
前記メモリコントローラが、前記ホストインタフェースから受信される前記データ及び前記エラー訂正データを、前記メモリインタフェース上で転送するように構成される、請求項1に記載のメモリコントローラ。
前記第1のエラー検出回路が、リンク層及び/又はトランスポート層によって前記ホストインタフェースに結合されるサイクリックリダンダンシーチェック(CRC)エンジンを備える、
請求項1に記載のメモリコントローラ。
前記ECCエンジンが、前記メモリインタフェースから受信される前記データの1つ又は複数のエラーを訂正するように構成される、請求項1に記載のメモリコントローラ。
【発明を実施するための形態】
【0010】
本開示は、メモリコントローラ内のデータ完全性のための方法、装置及びシステムを含む。1つのメモリコントローラ実施態様は、ホストインタフェース、及びそのホストインタフェースに結合される第1のエラー検出回路を含む。メモリコントローラは、メモリインタフェース、及びそのメモリインタフェースに結合される第2のエラー検出回路を含むことができる。第1のエラー検出回路は、ホストインタフェースから受信されるデータに対してエラー検出データを計算し、ホストインタフェースに送信されるデータの完全性をチェックするように構成することができる。第2のエラー検出回路は、メモリインタフェースに送信されるデータ及び第1エラー訂正データに対してエラー訂正データを計算し、メモリインタフェースから受信されるデータ及び第1のエラー訂正データの完全性をチェックするように構成することができる。
【0011】
本開示の以下の発明を実施するための形態では、本明細書の一部を形成し、本開示の1つ又は複数の実施形態がどのように実践されることがあるのかが例示によって示される添付図面が参照される。これらの実施形態は、当業者が本開示の実施形態を実践できるようにするほど十分に詳細に説明され、他の実施形態が活用されてよいこと、及びプロセス変更、電気的な変更、及び構造上の変更が本開示の範囲から逸脱することなく行われてよいことを理解される。本明細書に使用される場合、特に図面中の参照数字に関して指示詞Nは、このように指示される特定の特長の数が本開示の1つ又は複数の実施形態に含まれることができることを示す。指示詞は、同数又は異なる数の特定の特長を表すことができる。
【0012】
本明細書の図は、1つ又は複数の最初の桁が図面の図面番号に相当し、残りの桁が図面中の要素又は構成要素を識別する番号付け方式に従う。異なる図の間の類似する要素又は構成要素は、類似する数字を使用することによって識別されることがある。例えば、110は
図1の要素「10」を参照し、類似する要素は
図2では210として参照されてもよい。理解されるように、本明細書の多様な実施形態に示される要素は、本開示の多くの追加の実施形態を提供するように追加、交換、及び/又は排除できる。さらに、理解されるように、図中に提供される要素の割合及び相対的な尺度は、本開示の実施形態を示すことを目的としており、制限的な意味で解釈されるべきではない。
【0013】
図1は、本開示の1つ又は複数の実施形態によるメモリシステム120を含むコンピューティングシステム100の機能ブロック図である。
図1に示される実施形態では、例えば、ソリッドステートドライブ(SSD)等のメモリシステム120が、メモリコントローラ101、物理インタフェース103、及び、例えばNANDフラッシュデバイス等の1つ又は複数のソリッドステートメモリデバイス130−1、…、130−Nを含むことができる。
図1に示されるように、メモリコントローラ101は、物理インタフェース103に、及びソリッドステートメモリデバイス130−1、...、130−Nに結合できる。
【0014】
物理インタフェース103は、メモリシステム120と、ホストシステム102等の別の装置の間で情報を通信するために使用できる。ホストシステム102は、プロセッサ等、メモリアクセスデバイスを含むことができる。当業者は、「プロセッサ」が、並列処理システム、多くのコプロセッサ等の1台又は複数台のプロセッサを意図する可能性があることを理解するだろう。ホストシステムの例は、ラップトップコンピュータ、パーソナルコンピュータ、デジタルカメラ、デジタル記録装置及び再生装置、携帯電話、PDA、メモリカードリーダ、インタフェースハブ等を含む。1つ又は複数の実施形態の場合、物理インタフェース103は、標準化された物理インタフェースの形をとることができる。例えば、メモリシステム120が、コンピューティングシステム100でのデータ記憶に使用されるとき、物理インタフェース103は、他の物理インタフェースの中でも、シリアルアドバンストテクノロジーアタッチメント(SATA)、ペリフェラルコンポーネントインターコネクタエクスプレス(PCIe)、又はユニバーサルシリアルバス(USB)とすることができる。しかしながら、一般的には、物理インタフェース103は、
図2のホストインタフェース210等、メモリシステム120のコントローラ101のホストインタフェースと、物理インタフェース103用に互換性のある受容器を有するホストシステム102の間で、コントロール、アドレス、データ、及び他の信号を渡すための物理的な接続を提供できる。
【0015】
メモリコントローラ101は、他の動作の中でも、データを読み取り、書き込み、消去するためにソリッドステートメモリデバイス130−1、...、130−Nと通信できる。メモリコントローラ101は、1つ又は複数の集積回路、及び/又は個別部品である場合がある回路を有することができる。1つ又は複数の実施形態の場合、メモリコントローラ101内の回路は、ソリッドステートメモリデバイス130−1、...、130−Nにわたってアクセスを制御するための制御回路、及びホストシステム102とメモリシステム120の間にトランスレーション層を提供するための回路を含んでよい。したがって、メモリコントローラは、適切なときに適切なI/O接続で適切な信号を受信するために、ソリッドステートメモリデバイス130−1、...、130−NのI/O接続(
図1では不図示)を選択的に結合できる可能性がある。同様に、ホストシステム102とメモリシステム120の間の通信プロトコルは、ソリッドステートメモリデバイス130−1、...、130−Nのアクセスに必要とされるものとは異なることがある。その場合、メモリコントローラ101は、ホストから受信されたコマンドを適切なコマンドに変換し、ソリッドステートメモリデバイス130−1、...、130−Nへの所望されるアクセスを達成できる。
【0016】
図1の実施形態は、本開示の実施形態を分かりにくくしないように示されていない追加の回路を含むことができる。例えば、メモリシステム120は、I/O回路を通してI/O接続上で提供されるアドレス信号をラッチするためにアドレス回路を含むことができる。アドレス信号は、ソリッドステートメモリデバイス130−1、...、130−Nにアクセスするために、受信され、行デコーダ及び列デコーダによって復号できる。アドレス入力接続の数が、ソリッドステートメモリデバイス130−1、...、130−Nの密度及びアーキテクチャに依存する可能性があることが、当業者によって理解されるだろう。
【0017】
図2は、本開示の1つ又は複数の実施形態によるメモリコントローラ201を含むシステム200の機能ブロック図である。コントローラ201は、
図1に示されるコントローラ101に類似する場合がある。1つ又は複数の実施形態では、コントローラ201は、SSD等のメモリシステムの構成要素である場合がある。
図2に示されているものを越えて、追加の回路及び構成要素を設けることができ、図解を容易にするために
図2のコントローラの詳細が少なくされていることが、当業者によって理解されるであろう。
【0018】
図2に示されるように、メモリコントローラ201は、1つ又は複数のソリッドステートメモリデバイス230と結合できる。ソリッドステートメモリデバイス230は、
図1に示されるソリッドステートメモリデバイス130−1、...、130−Nに類似するようにできる。コントローラ201は、フロントエンド部204及びバックエンド部206を含むことができる。メモリコントローラは、ダイレクトメモリアクセス(DMA)モジュール214等、ホストインタフェース210とデータ転送回路との間で結合される多くのフロントエンド構成要素を含むことができる。また、メモリコントローラは、DMAモジュール214と、エラー検出回路/メモリインタフェース(I/F)222のメモリインタフェース構成要素等、メモリインタフェースとの間で結合される多くのバックエンド構成要素も含むことができる。1つ又は複数の実施形態では、エラー検出回路/メモリI/F222のエラー検出回路構成要素を、エラー訂正コード(ECC)エンジンとすることができる。一般に、メモリコントローラ201は、
図1のホストシステム102等、ホストシステム202から受信される、又はホストシステム202に転送されるコマンド及びデータを、フロントエンド204を用いて処理することができる。一般に、メモリコントローラ201は、他の動作の中でも、ソリッドステートメモリデバイス230上でデータを読み取り、書き込み、消去するために、バックエンド206を用いてソリッドステートメモリデバイス230との通信を管理できる。しかしながら、コマンド処理及びメモリ通信管理の特定の態様は、フロントエンド204とバックエンド206のどちらかで、又はフロントエンド204とバックエンド206の両方で、コントローラ201によって処理することができる。
図2に示されるように、ホストインタフェース210及びDMAモジュール214を、フロントエンド構成要素とすることができる。
【0019】
図2に示されるように、フロントエンド部204は、
図1のホストシステム102等、ホストシステム202に結合できるホストインタフェース210を含むことができる。ホストインタフェース210は、ホストシステムからデータを受信するように構成できる。ホストインタフェースから受信されるデータは、ある数のデータのセクタを含むデータペイロードである場合がある。1つ又は複数の実施形態では、ホストインタフェースから受信されるデータはストリーミングデータである場合がある。ホストインタフェース210は、物理層205、リンク層207、及びトランスポート層209を含む多くの層を通してホストシステム202とインタフェース接続することができる。当業者は、ある特定のホストインタフェースのための層の数を、SATA、PCIe、USB等のインタフェース規格によって定めることができることを理解するだろう。本明細書で使用される場合、トランスポート層は、SATA規格の一部としての少なくとも1つのトランスポート層、又はPCIe規格の一部としてのトランザクション層を示すことができる。当業者は、SATA規格によるトランスポート層が、PCIe規格によるトランザクション層に類似していることを理解するだろう。ホストインタフェース210は、ホストシステム202と通信するために、SSD等のメモリシステム上で、
図1に示されている物理インタフェース103等の物理インタフェースに結合できる。かかる詳細は、図解を容易にするために
図2には図示されていない。
【0020】
ホストインタフェース210は、DMAモジュール214と、サイクリックリダンダンシーチェック(CRC)エンジン212等のフロントエンドエラー検出回路と結合できる。「CRCエンジン」212として示されているが、エラー検出回路は、サイクリックリダンダンシーチェック以外の機能性を提供することができる。例えば、エラー検出回路は、数ある中でも、反復方式、パリティ方式、チェックサム、ハミング距離に基づくチェック、ハッシュ関数、水平リダンダンシーチェック及び垂直リダンダンシーチェック、極性方式、並びに/又はECC等のエラー訂正方式を含むことができる。1つ又は複数の実施形態では、ホストインタフェース210は、フロントエンドCRCエンジン212と直接結合でき、且つDMAモジュール214と直接結合できる。
【0021】
1つの又は複数の実施形態では、フロントエンドCRCエンジン212は、リンク層207及び/又はトランスポート層209によって、ホストインタフェース210に、したがってホストシステムに結合できる。CRCエンジン212等、フロントエンドエラー検出回路は、例えばデータが、
図1のメモリシステム120等のメモリシステム内にある間にデータのエラーを検出するように構成できる。例えば、フロントエンドCRCエンジン212は、例えば書き込み動作の一部として、リンク層207及び/又はトランスポート層209から受信されるDMAペイロード等のデータペイロードのセクタ等、データに対応して、CRCデータ等、エラー訂正データを計算できる。1つ又は複数の実施形態では、フロントエンドCRCエンジン212は、セクタごとにCRCデータを計算できる。1つ又は複数の実施形態では、フロントエンドCRCエンジン212は、リンク層207及び/又はトランスポート層209によってホストインタフェース210に結合することができ、リンク層207及び/又はトランスポート層209から、DMAペイロード等、ある数のデータのセクタを受信できる。1つ又は複数の実施形態では、フロントエンドCRCエンジン212は、リンク層207からだけ、又はトランスポート層209からだけ、その数のデータのセクタを受信できる。しかしながら、実施形態はそのように制限されている。メモリコントローラ201に転送されるデータのためにホストシステム202によって生成された場合があるCRCデータは、PCIeタイプのインタフェースの場合トランスポート層209で、又はSATAタイプのインタフェースの場合リンク層207で、データから取り去られることがある。しかしながら、本開示の1つ又は複数の実施形態に従って、フロントエンドCRCエンジン212は、それが結合できるホストインタフェース210から受信されるデータの1セクタあたりのCRCデータを計算し、チェックすることができる。
【0022】
DMAモジュール214は、バックエンドデータバッファ218、及びCRCメモリ216等、バックエンドエラー検出メモリに結合できる。バックエンドデータバッファ218は、ECCエンジン/メモリI/F222に結合できる。バックエンドデータバッファ218は、例えばある数のデータのセクタ等、書き込み動作中にECCエンジン/メモリI/F222のためにDMAモジュール214から受信されるDMAペイロードの少なくとも一部をバッファリングするように構成できる。バックエンドデータバッファ218は、読み取り動作中に、ECCエンジン/メモリI/F222から受信されるある数のデータのセクタをバッファリングするように構成できる。バックエンドデータバッファ218及びバックエンドCRCメモリ216は、ECCエンジン及びメモリインタフェース等、エラー検出回路に結合できる。1つ又は複数の実施形態におけるように、及び
図2の実施形態に示されるように、ECCエンジン及びメモリインタフェースは、「ECCエンジン/メモリI/F」222等、1つの構成要素としてともに結合できる。本書でのECCエンジン/メモリI/Fに対する集合的な参照は、エラー検出回路及びメモリインタフェースを別々の構成要素として有する実施形態を除外しない。同様に、本明細書での構成要素に対する個別的な参照は、エラー検出回路及びメモリインタフェースが1つの構成要素として含まれる実施形態を除外しない。
【0023】
バックエンドCRCメモリ216は、フロントエンドCRCエンジン212によって計算されたCRCデータを記憶するように構成できる。バックエンドCRCメモリ216は、ECCエンジン/メモリI/F222に結合することができ、ソリッドステートメモリデバイス230に以前に記憶されていたCRCデータ等、ECCエンジン/メモリI/F222のメモリインタフェース部からのCRCデータを受信し、記憶するように構成できる。バックエンドデータバッファ218は、フロントエンドCRCエンジン212に、DMAモジュール214上でECCエンジン/メモリI/F222から受信されたある数のデータのセクタを転送するように構成できる。フロントエンドCRCエンジン212は、例えばDMAモジュール214を介して、ECCエンジン/メモリI/F222のエラー検出回路部に結合できる。バックエンドCRCメモリ216は、フロントエンドCRCエンジン212に、DMAモジュール214上でECCエンジン/メモリI/F222から受信されるその数のデータのセクタに対応するCRCデータを転送するように構成できる。かかる例では、フロントエンドCRCエンジン212は、例えばDMAモジュール214から受信されるデータの、それぞれのセクタのためにCRCデータを計算するように構成できる。次に、フロントエンドCRCエンジンは、例えば、データのセクタがホストインタフェース210上でホストシステムに転送される前に、DMAモジュール214から受信されたデータのセクタの完全性を検証するために、DMAモジュール214から受信されたデータのセクタに対して計算されたCRCデータを、DMAモジュール214を介してバックエンドCRCメモリ216から受信されたCRCデータと比較できる。DMAモジュールの動作に関する追加の詳細は、少なくとも一人の共通発明者を有し、代理人整理番号第1002.0390001号を有する、「Memory Controller」と題する同一出願人による米国特許出願番号第
号に記載されている。
【0024】
ECCエンジン/メモリI/F222は、ソリッドステートメモリデバイス230に結合できる。1つ又は複数の実施形態では、ECCエンジン/メモリI/F222は、バックエンドCRCメモリ216から受信されるCRCデータ等のCRCデータを、データの対応するセクタにアペンドするように構成できる。ECCエンジン/メモリI/F222のデータエンジン部は、例えばデータのセクタ内で等、データ内でエラーを検出するように構成できる。1つ又は複数の実施形態では、ECCエンジン/メモリI/F222のECCエンジン部は、データが
図1のメモリシステム120等のメモリシステム内にある間に、データのエラーを検出、及び/又は訂正するように構成できる。例えば、ECCエンジン/メモリI/F222のECCエンジン部は、データ単独のために、及び/又はデータと、CRC等、アペンドされたエラー検出データに対して、ECCデータ等、エラー訂正データを計算できる。1つ又は複数の実施形態では、ECCエンジン/メモリI/F222のECCエンジン部は、セクタごとにECCデータを計算するように構成できる。ECCエンジン/メモリI/F222は、ECCデータを、データの対応するセクタにアペンドするように構成できる。1つ又は複数の実施形態では、ECCエンジン/メモリI/F222のECCエンジン部が、フロントエンドCRCエンジン212によって計算されたCRCデータ等、アペンドされたCRCデータとともに、データの対応するセクタに対してECCデータを計算するように構成できる。読み取り動作中、ECCエンジン/メモリI/F222のECCエンジン部は、ある数のデータのセクタがバックエンドデータバッファ218内にある間に、その数のデータのセクタのエラーを訂正するように構成できる。ECCエンジン/メモリI/F222のECCエンジン部は、CRCデータがバックエンドCRCメモリ216内にある間にCRCデータのエラーを訂正するように構成できる。実施形態は、これらの特定の場所でのエラーの訂正に制限されていない。
【0025】
1つ又は複数の実施形態では、メモリコントローラ201は、書き込み動作のために、例えばソリッドステートメモリデバイス230に、ECCエンジン/メモリI/F222上で、ある数のデータのセクタ、対応する計算されたCRCデータ、及び対応するECCデータ、又はそのさまざまな組み合わせを転送するように構成できる。つまり、コントローラは、ソリッドステートメモリデバイス230内の場所に、データのセクタ、対応するCRCデータ、及び対応するECCデータを記憶するように構成できる。
【0026】
1つ又は複数の実施形態は、コントローラ201が、例えば書き込み動作と連動して、ホストインタフェース210のリンク層207及び/又はトランスポート層209を用いて、ホストシステム202からある数のデータのセクタを受信することを含むことができる。その数のデータのセクタは、ホストインタフェース210を通して、フロントエンドCRCエンジン212及びDMAモジュール214に転送できる。1つ又は複数の実施形態では、その数のデータのセクタは、フロントエンドCRCエンジン212及びDMAモジュール214と並行して受信できる。フロントエンドCRCエンジン212は、その数のデータのセクタのそれぞれに対応するCRCデータを計算できる。例えば、データの各セクタは一意のCRCデータに対応する可能性がある。DMAモジュール214は、CRCエンジン212からバックエンドCRCメモリ216にCRCデータを転送できる。フロントエンドCRCエンジン212は、例えばDMAモジュール214を介して、バックエンドCRCメモリ216に結合できる。1つ又は複数の実施形態では、バックエンドCRCメモリ216は、CRCデータを記憶できる。バックエンドCRCメモリ216は、それぞれの一意のCRCデータがデータのある特定のセクタに相当する可能性がある2つ以上の一意のCRCデータを記憶できる。DMAモジュール214は、その数のデータのセクタをバックエンドデータバッファ218に転送できる。ECCエンジン/メモリI/F222は、バックエンドデータバッファ218からその数のデータのセクタ、及びバックエンドCRCメモリ216から対応するCRCデータを転送し、その数のデータのセクタ及び対応するCRCデータのそれぞれに対して一意のECCデータを計算し、そのECCデータをデータの対応するセクタにアペンドし、1つ又は複数のソリッドステートメモリデバイス230に、データのセクタ、CRCデータ、及びECCデータを記憶することができる。
【0027】
前記に示すように、CRCデータは、他のCRC計算方法の中でも、dword(32ビット)量で、フレーム情報構造(FIS)のコンテンツに関して計算できる。しかしながら、ホストシステム202から受信されるデータペイロードは、例えば512バイト部分等、データペイロードのある数のセクタを含むことがある。いくつかの以前の手法に従って、CRCデータは、データペイロードに含まれるデータの各セクタごとではなく、全体としてのデータペイロードに対して計算されることがある。すなわち、CRCデータがリンク層207又はトランスポート層209を越えて伝搬しても、データは、少なくとも部分的には、それが、例えば、
図1のメモリデバイス130−1等の、メモリデバイスに書き込まれ、且つ/又はメモリデバイスから読み取られる量とは異なる量で、例えば、
図1のメモリシステム120等の、メモリシステムへ、又はメモリシステムから転送されるため、CRCデータは、データの特定のセクタにとって有用ではない場合がある。したがって、同じデータに対してであっても、読み取り及び/又は書き込み動作に関連するデータのセクタ数に対してと同じCRCデータをデータペイロードに対して使用しても、ある数のデータのセクタにデータの完全性は提供されない場合がある。
【0028】
対照的に、本開示の1つ又は複数の実施形態に従って、CRCデータは、各セクタに対して、データの各セクタごとに計算される。例えば、一意のCRCデータは、データの各セクタごとに計算される。例えば、データペイロードが2048バイトを含む場合、CRCデータはデータの4個の512バイトセクタのそれぞれに対して計算できる。データ完全性は、それが、例えば、ホストインタフェース210における等の、フロントエンド204におけるホストシステム202からコントローラ201によって受信される点から、それがバックエンド206からソリッドステートメモリデバイス230に転送される点までのその数のセクタに対して提供できる。データ完全性を提供することは、ホストインタフェース210からECCエンジン/メモリI/F222まで、及び/又はソリッドステートメモリデバイス230までのデータのセクタに対して、同じCRCデータを維持することを含むことができる。
【0029】
1つ又は複数の実施形態では、ECCエンジン/メモリI/F222は、例えば読み取り動作と連動して、1つ又は複数のソリッドステートメモリデバイス230から、ある数のデータのセクタ、その対応する第1のCRCデータ、及びECCデータを受信することができる。ECCエンジン/メモリI/F222は、バックエンドデータバッファ218にその数のデータのセクタを記憶し、バックエンドCRCメモリ216にそれらに対応するCRCデータを記憶できる。その数のデータのセクタ、並びにその対応する第1のCRCデータ、及びECCデータは、ECCエンジン/メモリI/F222のECCエンジン部を用いてエラーチェックできる。ECCエンジン/メモリI/F222のECCエンジン部によって識別される、CRCデータの1つ又は複数のエラーは、CRCデータがバックエンドCRCメモリ216に記憶されている間に訂正できる。ECCエンジン/メモリI/F222のECCエンジン部によって識別される、その数のデータのセクタの1つ又は複数のエラーは、その数のデータのセクタがバックエンドデータバッファ218内にバッファリングされている間に訂正できる。エラー訂正後、DMAモジュール214は、その数のデータのセクタ及びその対応するCRCデータを受信し、フロントエンドCRCエンジン212に転送できる。フロントエンドCRCエンジン212は、転送されたその数のデータのセクタに対して第2のCRCデータを計算し、その数のデータのセクタの完全性を検証するために、第1のCRCデータを対応する第2のCRCデータと比較できる。第1のCRCデータを第2のCRCデータと比較した後で、その数のデータのセクタは、ホストインタフェース210のトランスポート層209上で、例えばその数のデータの読み取られたセクタ等を、例えばデータを要求したホストシステム202に転送できる。1つ又は複数の実施形態では、その数のデータのセクタは、第1のCRCデータ又は第2のCRCデータのどちらかがなくても、ホストインタフェース210上で転送できる。1つ又は複数の実施形態では、ECCエンジン/メモリI/F222が、その数のデータのセクタからECCデータを削除し、その数のデータのセクタ及び第1のCRCデータを、フロントエンドCRCエンジン212に並行して転送できる。
【0030】
前述された読み取り動作等の本開示の1つ又は複数の実施形態によると、データ完全性は、その数のデータのセクタに対して提供できる。すなわち、データ完全性は、その数のセクタが、例えば、ECCエンジン/メモリI/F222における等の、ソリッドステートメモリデバイス230からコントローラ201のバックエンド206によって受信される点から、その数のセクタが、例えば、フロントエンド204からホストシステム202へ等の、ホストインタフェース210上で転送される点までのその数のデータのセクタに対して提供できる。データ完全性を提供することは、ソリッドステートメモリデバイス230からホストインタフェース10まで同じCRCデータを維持することを含むことができる。
【0031】
図3は、本開示の1つ又は複数の実施形態によるメモリコントローラ301を含むシステム300の機能ブロック図である。コントローラ301は、
図1に示されるコントローラ101に類似する可能性がある。1つ又は複数の実施形態では、コントローラ301は、SSSD等のメモリシステムの構成要素とすることができる。
図3に示されているものを越えて、追加の回路及び構成要素を設けることができ、図解をさらに容易にするために
図3のコントローラの詳細が少なくされていることが、当業者によって理解されるであろう。
【0032】
図3に示される実施形態は、例えば、CRCエンジン312等の、フロントエンドエラー検出回路、及び、例えば、DMAモジュール314等の、データ転送回路だけではなく物理層305、、リンク層307、及びトランスポート層309を備えるホストインタフェース310を含む
図2に示される構成要素に類似する可能性がある構成要素を含む。しかしながら、1つ又は複数の実施形態では、ホストインタフェース310は、図示されているFIFO324等、フロントエンドホストバッファ324、及び高度暗号化規格(AES)エンジン326等、暗号化回路を介してDMAモジュールに結合できる。「AESエンジン」326として示されているが、他の形の暗号化が、本開示の1つ又は複数の実施形態とともに使用されてよい。FIFO324は、ホストインタフェース310とAESエンジン326の間のDMAペイロードをバッファリングするように構成できる。
図3には示されていないが、AESエンジン326は、FIFO324と分離したAESバッファを含むことができる、又はFIFO324と分離したAESバッファに結合できる。
【0033】
図3に示されるように、AESエンジン326は、ある数のデータのセクタ、例えばコントローラ301によって受信されるある数のデータパケットから引き出されるデータストリーム等のデータペイロード(DMA)ペイロードを受信するように構成されてもよい。暗号化の前、その数のデータのセクタはプレーンテキスト(P.T.)である可能性がある。AESエンジン326は、暗号文(C.T.)等、暗号化された出力をDMAモジュール14に提供するために任意選択でその数のデータのセクタを処理するように配置及び構成されてもよい。1つ又は複数の実施形態では、AESエンジン326は、任意選択でその数のデータのセクタを処理することができ、AESエンジンがプレーンテキストから暗号文にその数のデータのセクタを暗号化できる、又はAESエンジン326が、暗号化せずに、例えばプレーンテキストで、その数のデータのセクタをDMAモジュール314に転送できることを意味する。
【0034】
1つ又は複数の実施形態では、ホストインタフェース310を介してホストシステムから受信されるある数のデータのセクタは、フロントエンドCRCエンジン312、及び図示されているようなFIFO324等、フロントエンドホストバッファ324から並行して受信できる。その数のデータのセクタはホストバッファ324から、その数のデータのセクタをプレーンテキストから暗号文に暗号化できるAESエンジン326に転送することができる。暗号化後、その数のデータのセクタは、さらなる処理のためにAESエンジン326からDMAモジュール314に転送できる。暗号化エンジンの動作の追加の例は、少なくとも一人の共通発明者を有する、「Parallel Encryption/Decryption」と題する、同一出願人による米国特許出願番号第12/333,822号にさらに詳細に説明されている。
【0035】
DMAモジュール314は、フロントエンド304回路をバックエンド306回路に効果的に結合する。1つ又は複数の実施形態では、コントローラ301のバックエンド部306は、2つ以上のバックエンドチャネルを含むことができる。
図3に示される実施形態では、コントローラ301はある数のバックエンドチャネル319−1、...、319−Nを含む。各バックエンドチャネル319−1、...、319−Nは、チャネルプロセッサ、332−1、...、332−N、及びチャネルメモリ、334−1、…334−Nを含むことができる。バックエンドチャネルプロセッサ332−1、…、332−N及びメモリ334−1、...、334−Nは、DMAモジュール314に、及びバックエンドチャネルDMAモジュール328−1、...、328−Nに結合できる。各バックエンドチャネル319−1、...、319−Nは、DMAモジュール314に結合できるチャネルDMAモジュール328−1等、バックエンドチャネルデータ転送回路を含むことができる。DMAモジュール314は、DMAペイロードに関連するコマンドを、バックエンドチャネルプロセッサ332−1等、各バックエンドチャネルプロセッサに向け、DMAペイロードに関連するデータを、バックエンドチャネルDMAモジュール328−1等、各バックエンドチャネルDMAモジュールに向けるように構成できる。チャネルプロセッサの例示的な動作は、少なくとも一人の共通発明者を有する、「Modifying Commands」と題する、同一出願人による米国特許出願番号第12/351,206号にさらに詳細に説明されている。
【0036】
コントローラ301のバックエンド部は、
図2に示される構成要素に類似した構成要素を含むことができる。例えば、各バックエンドチャネル319−1、...、319−Nは、バックエンドデータバッファ318−1、...、318−N、例えばCRCメモリ316−1、...、316−N等の、バックエンドエラー検出メモリ、及びECCエンジン/メモリインタフェース322−1、...、322−Nを含むことができる。1つ又は複数の実施形態で、及び
図3の実施形態に示されるように、ECCエンジン及びメモリインタフェースは、例えば、「ECCエンジン/メモリI/F」322等の、1つの構成要素としてともに結合できる。1つ又は複数の実施形態では、ECCエンジン及びメモリインタフェースは別々の構成要素とすることができる。
図3に示されるように、バックエンドデータバッファ318−1、...、318−Nは、バックエンドチャネルDMAモジュール328−1、...、328−Nと、ECCエンジン/メモリインタフェース322−1、...、322−Nとの間に結合できる。さらに、バックエンドCRCメモリ316−1、...、316−Nは、DMAモジュール314とECCエンジン/メモリインタフェース322−1、...、322−Nとの間に結合できる。
図3に示されるように、特定のメモリデバイス、チップ、アレイ等は、特定のチャネルに対応することができる。例えば、ソリッドステートメモリデバイス(複数の場合がある)330−1は、チャネル319−1に対応することができる。
【0037】
図4は、本開示の1つ又は複数の実施形態によるメモリコントローラ401を含むシステム400の機能ブロック図である。コントローラ401は、
図1に示されるコントローラ101に類似している可能性がある。1つ又は複数の実施形態では、コントローラ401は、SSD等のメモリシステムの構成要素である場合がある。
図4に示されているものを越えて、追加の回路及び構成要素を設けることができ、図解をさらに容易にするために
図4のコントローラ401の詳細が少なくされていることが、当業者によって理解される。
【0038】
図4に示される実施形態は、例えばCRCエンジン412−F等の、フロントエンドエラー検出回路、及び例えばDMAモジュール414等の、データ転送回路だけではなく、物理層405、リンク層407、及びトランスポート層409を含むホストインタフェース410等のコントローラ401のフロントエンド404構成要素を含む
図3に示される構成要素に類似する可能性がある構成要素を含む。また、コントローラ401は、バックエンドチャネルプロセッサ432−1、...、432−N及びメモリ434−1、...、434−N、例えばチャネルDMAモジュール428−1、...、428−N等の、バックエンドチャネルデータ転送回路、バックエンドデータバッファ418−1、...、418−N、例えばECCエンジン/メモリインタフェース422−1、...、422−N等の、エラー検出回路、並びに例えばCRCメモリ416−1、...、416−N等の、バックエンドエラー検出メモリを含む、バックエンドチャネル419−1、...、419N等の
図3に示される構成要素に類似する可能性がある、ある数のバックエンド406構成要素も含む。1つ又は複数の実施形態で、及び
図4に示されるように、ECCエンジン及びメモリインタフェースは、例えば、「ECCエンジン/メモリI/F 」422等、1つの構成要素としてともに結合できる。1つ又は複数の実施形態では、ECCエンジン及びメモリインタフェースは別々の構成要素とすることができる。
図4に示されるように、各チャネル419−1、...、419−Nは、ECCエンジン/メモリインタフェース422−1、...、422−Nによって1つ又は複数のソリッドステートメモリデバイス430−1、...、430−Nに結合できる。
【0039】
しかしながら、1つ又は複数の実施形態では、バックエンドチャネル419−1、...、419−Nは、バックエンドCRCメモリ416−1、...、416−Nに結合される、例えばバックエンドCRCエンジン412−B1、...、412−BN等の、バックエンドエラー検出回路を含むことができる。バックエンドCRCエンジン412-B1、...、412−BNは、例えばデータの対応するセクタ等の、対応するデータに対して、例えば「第2の」CRCデータ等の、エラー検出データを計算するように構成できる。1つ又は複数の実施形態では、この対応するデータは、DMAペイロードの少なくとも一部分である場合がある。フロントエンドCRCエンジン412−Fは、データのセクタに対して「第1の」CRCデータを計算できる。バックエンドCRCエンジン412−B1、...、412−BNは、データのセクタの完全性をチェックし、且つ/又は検証するために第1のCRCデータを第2のCRCデータと比較するように構成できる。例えば、DMAモジュール414は、フロントエンドCRCエンジン412−Fに、及びバックエンドCRCメモリ416−1、...、416−Nに結合できる。DMAモジュール414は、第1のCRCデータを、バックエンドCRCメモリ416−1、...、416−Nに転送するように構成できる。次に、バックエンドCRCエンジン412−B1、...、412−BNは、バックエンドCRCメモリ416−1、...、416−Nから受信される第1のCRCデータを、計算された第2のCRCデータと比較できる。バンクエンドCRCエンジン412-B1、...、412−BNは、複数のバックエンドチャネル419−1、...、419−Nを含むコントローラ401を示す
図4に関して開示されているが、実施形態はそのように制限されていない。例えば、本開示の1つ又は複数の実施形態は、バックエンドCRCエンジンを含む、例えば
図2のバックエンド206に関して示されるような、単一のバックエンドチャネル付きのメモリコントローラを含むことができる。
【0040】
バックエンドCRCエンジン412−B1、...、412−BNは、ECCエンジン/メモリインタフェース422−1、...、422−Nに結合できる。1つ又は複数の実施形態では、バックエンドCRCエンジン412−B1、...、412−BNは、ECCエンジン/メモリI/F422−1、...、422−Nに直接結合できる。ECCエンジン/メモリI/F422−1、...、422−NのECCエンジン部は、例えばバックエンドデータバッファ418−1、...、418−Nから受信されるDMAペイロードの一部等の、データのセクタに対して、ECCデータを計算するように構成できる。1つ又は複数の実施形態では、コントローラ401は、第1の又は第2の対応するCRCデータなしに、ECCエンジン/メモリI/F422−1、...、422−N上でデータのセクタ及び対応するECCデータを転送するように構成できる。すなわち、1つ又は複数の実施形態では、データのセクタ及び対応するECCデータは、ソリッドステートメモリデバイス430−1、...、430−Nに対応するCRCデータを記憶することなく、ソリッドステートメモリデバイス430−1、...、430−Nに記憶できる。1つ又は複数の実施形態では、コントローラ401は、バックエンドCRCエンジン412−B1、...、412−BNがデータのセクタの完全性を検証するときに、ソリッドステートメモリデバイス430−1、...、430−N内の場所に対応するCRCデータなしで、データのセクタ及び対応するECCデータを記憶するように構成できる。すなわち、バックエンドCRCエンジン412−B1、...、412−BNが、データのセクタの完全性を検証しない場合、次にコントローラ401は、1つ又は複数の実施形態でソリッドステートメモリデバイス430−1、...、430−Nにデータのセクタを記憶しないことがある。
【0041】
1つ又は複数の実施形態は、書き込み動作と連動して等、ホストインタフェース410のリンク層407及び/又はトランスポート層409から、フロントエンドCRCエンジン412−Fを用いてある数のデータのセクタを受信することを含むことができる。フロントエンドCRCエンジン412−Fは、データの各セクタごとに第1のCRCデータを計算するように構成できる。したがって、書き込み動作の場合、CRCデータが、その数のデータのセクタに対する他の動作の実行の前に、又はその数のデータのセクタに対する他の動作の実行とは別にその数のデータのセクタに対して計算されるために、その数のデータのセクタのデータ完全性は、少なくとも部分的にコントローラ401のフロントエンド404で維持できる。第1のCRCデータは、DMAモジュール414に転送できる。
【0042】
DMAモジュール414は、バックエンドチャネルDMAモジュール428−1、...、428−Nにデータのセクタ数を転送できる。1つ又は複数の実施形態では、DMAモジュール414は、例えば、メモリアドレスに対応するソリッドステートメモリデバイスに結合されるチャネル等の、その数のデータのセクタに関連付けられたメモリアドレスに対応するバックエンドチャネル419−1、...、419−Nにその数のデータのセクタを転送できる。例えば、その数のデータのセクタに関連付けられたメモリアドレスが、例えば430−1等の、特定のソリッドステートメモリデバイスに対応するとき、DMAモジュールは、チャネル419−1上のバックエンドチャネルDMAモジュール428−1に、その数のデータのセクタを転送できる。その数のデータのセクタは、バックエンドチャネルDMAモジュール428−1、...、428−Nからバックエンドデータバッファ418−1、...、418−Nに転送できる。バックエンドデータバッファ418−1、...、418−Nは、その数のデータのセクタが、ECCエンジン/メモリインタフェース422−1、...、422−N、及び/又はバックエンドCRCエンジン412−B1、...、412−BNに転送される前に、書き込み動作中に、バックエンドチャネルDMAモジュール428−1、…、428−Nから受信されたデータのセクタをバッファリングできる。1つ又は複数の実施形態では、その数のデータのセクタは、バックエンドデータバッファ418−1、...、418−NからバックエンドCRCエンジン412−B1、...、412−BN、及びECCエンジン/メモリI/F422−1、...、422−Nに並行して転送できる。
【0043】
DMAモジュール414は、バックエンドCRCメモリ416−1、...、416−Nに第1のCRCデータを転送できる。1つ又は複数の実施形態では、DMAモジュール414は、第1のCRCデータを、第1のCRCデータが計算されるデータのセクタと関連付けられたメモリアドレスに対応するバックエンドチャネルに転送できる。第1のCRCデータは、バックエンドCRCエンジン412−B1、...、412−BNが第2のCRCデータを計算する前に、バックエンドCRCメモリ416−1、...、416−Nに記憶できる。バックエンドCRCエンジン412−B1、,,,、412−BNは、データのセクタに対して第2のCRCデータを計算し、第1のCRCデータを第2のCRCデータと比較できる。比較に続き、データのセクタは、1つ又は複数のソリッドステートメモリデバイス430−1、...、430−Nに記憶できる。1つ又は複数の実施形態では、ECCエンジン/メモリI/F422−1、...、422−NのECCエンジン部分は、第1のCRCデータの第2のCRCデータとの比較の後であるが、データのセクタがソリッドステートメモリデバイス430−1、...、430−Nに記憶される前に、データのセクタに対してECCデータを計算できる。ECCデータは、それがソリッドステートメモリデバイス430−1、...、430−Nに記憶される前にデータのセクタにアペンドでき、したがってデータのセクタ及びECCデータは記憶されるが、第1のCRCデータも第2のCRCデータもソリッドステートメモリデバイス430−1、...、430−Nに記憶されない。かかる実施形態は、例えば、CRCデータがその中に記憶されないとき等、少なくとも部分的にはソリッドステートメモリデバイス430−1、...、430−N内に記憶されている情報の量の削減のため、有利であることがある。
【0044】
1つ又は複数の実施形態では、例えば、第1のCRCデータが第2のCRCデータに一致する場合等、バックエンドCRCエンジン412−B1,...、412−BNがその数のデータのセクタの完全性を検証する場合、その数のデータのセクタは、ECCエンジン/メモリI/F422−1、...、4220Nからソリッドステートメモリデバイス430−1、...、430−Nに転送されるに過ぎない。したがって、書き込み動作の場合、少なくとも部分的には、第2のCRCデータが、DMAモジュール414及びバックエンドチャネルDMAモジュール428−1、...、428−Nによる処理後に、その数のデータのセクタに対して計算され、その数のデータのセクタに対する他の動作の実行の前に、又はその数のデータのセクタに対する他の動作の実行とは別に計算された第1のCRCデータに比較されるために、その数のデータのセクタのデータ完全性は、コントローラ401のバックエンド406で維持できる。
【0045】
1つ又は複数のメモリシステム動作の実施形態は、1つ又は複数のソリッドステートメモリデバイス430−1、...、430−Nから、ある数のデータのセクタ及び対応するECCデータを読み取ることを含む、読み取り動作を含む。その数のデータのセクタは、ECCエンジン/メモリI/F422−1、...、422−NのECCエンジン部でエラーチェックできる。ECCエンジン/メモリI/F422−1、...、422−NのECCエンジン部でエラーチェック後、ECCデータはその数のデータのセクタから削除できる。バックエンドCRCエンジン412−B1、...、412−BNは、その数のデータのセクタのそれぞれに対してCRCデータを計算できる。その数のデータのセクタ及びCRCデータは、例えば、それぞれホストバッファ424及びDMAモジュール414からフロントエンドCRCエンジン412−Fへ等、並行して転送できる。フロントエンドCRCエンジン412−Fは、その数のデータのセクタの完全性をチェックするために、その数のデータのセクタのそれぞれに対してCRCデータを計算し、それを、バックエンドCRCエンジンによって計算されるCRCデータと比較できる。その数のデータのセクタは、比較後に、ホストインタフェース410のトランスポート層409上で転送できる。
【0046】
したがって、読み取り動作の場合、ある数のデータのセクタのデータ完全性は、少なくとも部分的には、その数のデータのセクタがECCエンジン/メモリI/F422−1、...、422−Nに転送された後に、その数のデータのセクタのそれぞれに対してCRCデータを計算するため、コントローラ401のバックエンド406からフロントエンド404に維持できる。さらに、データの特定のセクタに対する、新規に計算されたCRCデータとの比較のために、コントローラ401のフロントエンド404に以前に計算されたCRCデータを転送することは、データの特定のセクタの完全性が維持されていることを検証するのに役立つ可能性がある。したがって、本開示の1つ又は複数の実施形態は、コントローラ401でのその数のデータのセクタにデータ完全性を与えることができる。
(結論)
【0047】
本開示は、メモリコントローラ内のデータ完全性のための方法、装置、及びシステムを含む。1つのメモリコントローラ実施形態は、ホストインタフェース、及びホストインタフェースに結合される第1のエラー検出回路を含む。メモリコントローラは、メモリインタフェース、及びメモリインタフェースに結合される第2のエラー検出回路を含むことができる。第1のエラー検出回路は、ホストインタフェースから受信されるデータに対してエラー検出データを計算し、ホストインタフェースに伝送されるデータの完全性をチェックするように構成できる。第2のエラー検出回路は、メモリインタフェースに送信されるデータ及び第1のエラー訂正データに対してエラー訂正データを計算し、メモリインタフェースから受信されるデータ及び第1のエラー訂正データの完全性をチェックするように構成できる。
【0048】
ある要素が、別の要素「の上にある」、「に接続される」、又は「と結合される」と参照されるとき、その要素は直接的に他の要素の上にある、直接的に他の要素に接続される、又は直接的に他の要素と結合されるか、もしくは介入する要素が存在することがあると理解される。対照的に、ある要素が、別の要素「の上に直接的にある」、「に直接的に接続される」又は「と直接的に結合される」と参照されるとき、介入する要素又は層は存在しない。本明細書に使用される場合、用語「及び/又は」は、関連付けられた一覧される品目の1つ又は複数のありとあらゆる組み合わせを含む。
【0049】
第1の、第2の等の用語は、多様な要素を説明するために本明細書中で使用されてよく、これらの要素はこれらの用語によって制限されるべきではないことが理解される。これらの用語はある要素を別の要素から区別するためにだけ使用される。したがって、第1の要素は、本開示の教示から逸脱することなく、第2の要素と称することができる可能性がある。
【0050】
特定の実施形態が、本明細書に図解され、説明されてきたが、当業者は、同じ結果を達成するために計算された構成が、示されている特定の実施形態に代わることができることを理解するだろう。この開示は、本開示の1つ又は複数の実施形態の改作物又は変形物を網羅することを目的とする。前記説明が、制限的ではなく、例示的に行われたことが理解されるべきである。上記実施形態、及び本書に特に説明されていない他の実施形態の組み合わせは、前記説明を検討すれば当業者に明らかであろう。本開示の1つ又は複数の実施形態の範囲は、前記構造及び方法が使用される他の応用例も含む。したがって、本開示の1つ又は複数の実施形態の範囲は、添付特許請求の範囲、並びにかかる特許請求の範囲が認められている同等物の全範囲を参照して決定されるべきである。
【0051】
前述の発明を実施するための形態では、開示を合理化する目的でいくつかの特長がグループ化されて単一の実施形態にまとめられている。この開示方法は、本開示の開示された実施形態が、各請求項に明示的に記載されるより多くの特長を使用しなければならないという意図を反映するとして解釈されてはならない。むしろ、以下の特許請求の範囲が反映するように、発明の内容は、単一の開示された実施形態の全ての特長よりも少ない状態にある。したがって、以下の特許請求の範囲は、これによって発明を実施するための形態に組み込まれ、各請求項はそれ自体別個の実施形態となる。