(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-27
(45)【発行日】2024-06-04
(54)【発明の名称】二元対称不変積符号を符号化するためのハーフ・サイズ・データ・アレイ
(51)【国際特許分類】
G06F 11/10 20060101AFI20240528BHJP
H03M 13/29 20060101ALI20240528BHJP
【FI】
G06F11/10 648
H03M13/29
(21)【出願番号】P 2022520840
(86)(22)【出願日】2020-10-15
(86)【国際出願番号】 EP2020079088
(87)【国際公開番号】W WO2021083682
(87)【国際公開日】2021-05-06
【審査請求日】2023-03-24
(32)【優先日】2019-10-29
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】サイプラス、ロバート、アラン
(72)【発明者】
【氏名】キャンプ、チャールズ
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2018/0115325(US,A1)
【文献】米国特許出願公開第2016/0188230(US,A1)
【文献】特開2003-032124(JP,A)
【文献】Mittelholzer Thomas et al.,Symmetry-based subproduct codes,2015 IEEE International Symposium on Information Theory (ISIT),米国,IEEE,2015年06月14日,pp.251-255,[retrieved on 2024-04-24] ,インターネット <URL:https://ieeexplore.ieee.org/abstract/document/7282455>,DOI: 10.1109/ISIT.2015.7282455
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/10
H03M 13/29
(57)【特許請求の範囲】
【請求項1】
各次元においてD個のデータ・ビットおよびP個のパリティ・ビットを含む二元対称不変積符号を利用して入力データを符号化するための符号化器であって、前記符号化器は回路を備え、前記回路は、
それぞれがHビットの入力データ用のストレージを有するD個の行を含むハーフ・サイズ・データ・アレイであって、Dは2×H+1に等しい整数であり、前記符号化器は、前記ハーフ・サイズ・データ・アレイの前記D個の行のうちの選択された1つから第1のHビットのデータ・ワードを読み出し、前記ハーフ・サイズ・データ・アレイのH個の異なる行にまたがって第2のHビットのデータ・ワードを読み出すことによって、前記二元対称不変積符号の各行のビットにアクセスするように構成される、前記ハーフ・サイズ・データ・アレイと、
前記二元対称不変積符号の各行の前記ビットを受け取り
、前記二元対称不変積符号の前記行を取得するように構成されるレジスタと、
前記レジスタに結合され、前記二元対称不変積符号の各行の行パリティを生成するように構成される行パリティ生成器と、
前記行パリティ生成器によって生成された行パリティに基づいて、前記二元対称不変積符号の全ての行の前記P個のパリティ・ビットに関する列パリティを生成するように構成される列パリティ生成器と、
を含
み、ここで、F、D、P、およびHは全て正の整数である、前記符号化器。
【請求項2】
前記二元対称不変積符号は半積符号(HPC)である、請求項1に記載の符号化器。
【請求項3】
前記ハーフ・サイズ・データ・アレイは複数のシフト・レジスタを備える、請求項1に記載の符号化器。
【請求項4】
前記符号化器は、前記ハーフ・サイズ・データ・アレイの行の間でビットをシフトし、前記ハーフ・サイズ・データ・アレイから読み出された前記第1のHビットのデータ・ワードを前記ハーフ・サイズ・データ・アレイに戻るように再循環させるように構成される、請求項1に記載の符号化器。
【請求項5】
前記符号化器は、前記ハーフ・サイズ・データ・アレイ内の同じビット記憶位置のセットから読み出すことによって、前記二元対称不変積符号の全ての行を形成する、請求項4に記載の符号化器。
【請求項6】
前記符号化器は、前記ハーフ・サイズ・データ・アレイにHビットの入力データを一度に詰め込むように構成される、請求項1に記載の符号化器。
【請求項7】
前記符号化器は、それぞれがH個のデータ・ビットおよびP個のパリティ・ビットを含む符号化されたデータのD個のセットを出力するように構成される、請求項1に記載の符号化器。
【請求項8】
前記符号化器は、P×(P-1)/2個のクロス・パリティ・ビットを出力するようにさらに構成される、請求項7に記載の符号化器。
【請求項9】
前記二元対称不変積符号の前記行を取得することが、前記二元対称不変積符号の各行の前記ビットを回転させることを含み、該回転することが行データをNビット右に回転することによって行われ、ここで、Nは整数の行番号であり、但し、Nが0の場合に上記回転は実行されない、請求項1~8のいずれか1項に記載の符号化器。
【請求項10】
不揮発性メモリ・システムと、
前記不揮発性メモリ・システムに結合されたコントローラであって、請求項1ないし
9のいずれかに記載の符号化器を含む、前記コントローラと、
を備える、データ・ストレージ・システム。
【請求項11】
請求項1ないし
9のいずれかに記載の符号化器と、
前記符号化器から符号化されたデータを受け取り、前記符号化されたデータを変調し、前記変調された符号化されたデータを通信チャネルに出力するように構成される変調器と、
を備える、データ通信システム。
【請求項12】
各次元においてD個のデータ・ビットおよびP個のパリティ・ビットを含む二元対称不変積符号を符号化する方法であって、
それぞれがHビットの入力データ用のストレージを有するD個の行を含むハーフ・サイズ・データ・アレイに入力データを詰め込むことであって、Dは2×H+1に等しい整数である、前記詰め込むことと、
前記ハーフ・サイズ・データ・アレイの前記D個の行のうちの選択された1つから第1のHビットのデータ・ワードを読み出し、前記ハーフ・サイズ・データ・アレイのH個の異なる行にまたがって第2のHビットのデータ・ワードを読み出すことによって、前記二元対称不変積符号の各行のビットに反復的にアクセスすることと、
前記二元対称不変積符号の前記行を取得することと、
前記二元対称不変積符号の各行の行パリティを生成し、行パリティ生成器によって生成された行パリティに基づいて、前記二元対称不変積符号の全ての行の前記P個のパリティ・ビットに関する列パリティを生成することと、
前記第1のHビットのデータ・ワード、行パリティ、および列パリティを出力することと、
を含
み、ここで、F、D、P、およびHは全て正の整数である、前記方法。
【請求項13】
前記二元対称不変積符号は半積符号(HPC)である、請求項
12に記載の方法。
【請求項14】
前記ハーフ・サイズ・データ・アレイに詰め込むことは、複数のシフト・レジスタに詰め込むことを含む、請求項
12に記載の方法。
【請求項15】
前記ハーフ・サイズ・データ・アレイの行の間でビットをシフトすることと、
前記ハーフ・サイズ・データ・アレイからアクセスされた前記第1のHビットのデータ・ワードを前記ハーフ・サイズ・データ・アレイに戻るように再循環させることと、
をさらに含む、請求項
12に記載の方法。
【請求項16】
前記アクセスすることは、前記ハーフ・サイズ・データ・アレイ内の同じビット記憶位置のセットから読み出すことによって、前記二元対称不変積符号の全ての行を形成することを含む、請求項
15に記載の方法。
【請求項17】
前記詰め込むことは、前記ハーフ・サイズ・データ・アレイにHビットの入力データを一度に詰め込むことを含む、請求項
12に記載の方法。
【請求項18】
前記列パリティを出力することは、P×(P-1)/2個のクロス・パリティ・ビットを出力することを含む、請求項
12に記載の方法。
【請求項19】
前記第1のHビットのデータ・ワード、行パリティ、および列パリティを不揮発性メモリ・システムに記憶することをさらに含む、請求項
12に記載の方法。
【請求項20】
前記第1のHビットのデータ・ワード、行パリティ、および列パリティを含む符号化されたデータを変調し、前記変調された符号化されたデータを通信チャネルで送信すること
をさらに含む、請求項
12に記載の方法。
【請求項21】
前記二元対称不変積符号の前記行を取得することが、前記二元対称不変積符号の各行の前記ビットを回転させることを含み、該回転することが行データをNビット右に回転することによって行われ、ここで、Nは0からD-1までの整数の行番号であり、但し、Nが0の場合に上記回転は実行されない、請求項12ないし20のいずれかに記載の方法。
【請求項22】
プログラム・コードを含むコンピュータ・プログラムであって、コンピュータに請求項
12ないし
20のいずれかに記載の方法を実行させるための、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示はデータ処理に関し、より詳細には、たとえば、データ・ストレージ・システムまたはデータ通信システムにおける、二元対称不変積符号(binary symmetry-invariant product code)(たとえば、半積符号(half product code))を利用したデータの効率的な符号化および復号に関する。
【背景技術】
【0002】
データ・ストレージ・システムおよびデータ通信システムにおいて、データ・チャネルからデータを復元できる精度を向上させるために、誤り訂正符号化が利用されている。チャネルにデータを供給する前に誤り訂正符号(ECC:error-correction code)に従ってデータを符号化することにより、チャネル出力での誤りを識別し、ECCの特性に応じた範囲で訂正することができる。そのようなECC手法は数多く知られている。よく知られているECC手法のクラスの1つは、積符号に基づくものである。積符号は、2つの成分ECC符号を使用して、入力データの概念上(notional)の2次元アレイの行および列を符号化する。
【0003】
従来の積符号の基本構造を
図1に概略的に示す。入力データ・シンボル(これは一般に、q個の可能なシンボル値を有するq元(q
ary)シンボルであり、ここでq≧2である)は、n
2行およびn
1列のシンボル位置を有する概念上のアレイにおいてそれぞれのシンボル位置に割り当てられる。この例では、k
2×k
1個のデータ・シンボルが、n
2×n
1アレイの最初のk
2行および最初のk
1列の共通部分にあるk
2×k
1サブアレイにおいてそれぞれの位置に割り当てられる。結果的に得られた入力データ・シンボルのアレイは、アレイの行および列を別々に符号化することによって符号化される。第1のECC符号C1を使用して、アレイの各行のk
1個のシンボル・データ・ワードを長さn
1のC1符号語へと符号化する。この例では組織符号化(systematic encoding)を使用しているので、入力データは符号語内に保持される。具体的には、C1符号語のn
1個の符号シンボルは、所与の行のk
1個のシンボル・データ・ワードの後に(n
1-k
1)個のパリティ・シンボルを追加することによって得られる。次いで、第2のECC符号C2を使用して、アレイの各列のk
2個のシンボルを長さn
2のC2符号語へと符号化し、ここでは各列の最後に(n
2-k
2)個のパリティ・シンボルを追加することによってこれを行う。結果的に得られたアレイ内のn
2×n
1個の符号シンボルが、積符号の出力符号語を形成する。この基本的な考え方の拡張として、インターリーブされた積符号では、アレイのs>1の等間隔の列にわたってC2符号を適用することにより、n
1/s個のC2符号語が生じる。
【0004】
積符号は実用的な符号化器/復号器の実装を提供し、それらの復号器は硬判定ベースであるので、軟判定復号に付随する様々な複雑性および遅延の問題を回避することができる。インターリーブされた積符号用の一部の復号器は、基本的な符号構造から定義されるグラフに基づく反復復号(iterative decoding)の技術を使用する。簡単に言えば、それぞれがC1符号語に対応するn2個の右ノードと、それぞれのC2符号語に対応するn1/s個の左ノードとを有する二部グラフを定義することができる。各右ノードは、s個のエッジによって各左ノードに接続される。ノードのペアを接続するs個のエッジは、上記の概念上のアレイにおけるそれらのノードのC1符号語およびC2符号語の共通部分にあるs個の共通のシンボルを表す。このグラフに基づいて、C1符号語を1つずつ復号したのち、C2符号語を1つずつ復号することによって、反復復号が実行される。符号語が正常に復号されるたびに、該当するノードから出ているエッジが訂正される。この処理は復号が完了するまで反復され、すなわち、復号器によって誤りが検出されなくなるまで反復されるか、または所定の最大反復回数に達するまで反復され、その場合、復号器は復号の失敗を宣言し得る。
【0005】
積符号に基づく他のECC手法は、光伝送ネットワーク(OTN:optical transmissionnetwork)のコンテキストで、J. Justesen, “Errorcorrecting coding for OTN,” IEEE Communications Magazine, September 2010、およびJ. Justesen,Performance of Product Codes and Related Structures withIterative Decoding, IEEE Transactions on Communications, 2011に提案されている。これらの符号は、半積符号(HPC:half product code)と呼ばれ、行符号C1および列符号C2に同一の符号を使用する積符号である。各成分符号C1およびC2が、符号長(すなわち、符号語内のシンボル数)n、次元(すなわち、各符号語に符号化されるデータ・シンボル数)kの、レートk/nの符号である場合、結果的に得られる積符号Cは、長さN=n2、次元K=k2、およびレート(k/n)2である。Cの符号語は、上記の概念上のアレイに対応する(n×n)のシンボル行列Xによって定義することができ、ここで、Xの各行および各列は、行/列符号の符号語である。このとき、対応する半積符号CHは、CH={X-XT:X∈C}で定義され、ここで、XTはXの転置行列である。
【0006】
Xが符号語である場合、行符号および列符号が同じであるので、XTも符号語であることに留意されたい。構成的に、CHの全ての符号語YHはゼロ主対角線(zero major diagonal)を有する(どちらの主対角線もゼロ主対角線にすることができるが、本明細書ではゼロ主対角線を、(n×n)シンボル行列YHを右上のシンボルから左下のシンボルまで対角線上に横切るシンボルの線として定義する)。すなわち、ゼロ主対角線上の全てのシンボルは、値がゼロである。CHの定義から、YH=YH
Tであるので、ゼロ主対角線のそれぞれの側にある三角形のサブアレイ内のn(n-1)/2個のシンボルのセットは同じである。したがって、これらのn(n-1)/2個のシンボルが符号語YHを定義するので、半積符号は有効長がNH=n(n-1)/2となる。HPCでは、符号化および反復復号は従来、積符号と同様にして実行されるが、入力データはゼロ主対角線の片側にある三角形のサブアレイに制限されるので、HPCの次元はKH=k(k-1)/2となる。
【0007】
例示的な従来技術のHPC200を
図2に示す。従来技術では、HPC200を形成するために、オリジナル入力データ204が、正方形のアレイ内のゼロ主対角線202より下に詰め込まれる。全てのオリジナル入力データ204が埋められると、オリジナル入力データ204をコピーし、オリジナル入力データ204のビットごとの転置を実行し、得られたデータをゼロ主対角線202より上に配置することによって、対称的な複製データ206が形成される。次いで、パリティ・データ208が、行および列ごとに別々に計算される(たとえば、Bose-Chaudhuri-Hocquenghem(BCH)誤り訂正関数を利用する)。符号化後、データは対称であるので、ゼロ主対角線202より上または下のアレイの部分のみを記憶または送信あるいはその両方を行えばよい。
【0008】
データがメモリから取り出されるか、またはデータ送信を介して受信された場合、取り出された/受信されたデータを複製および転置してアレイを埋めることにより、HPC200を再構築することができる。そのため、
図3に示すように、データの記憶、保持、取り出し、または送信、あるいはそれらの組合せの間に発生する誤りも、再構築されたアレイのゼロ主対角線に関して対称になる。従来の復号(すなわち、行および列を反復的に処理して行および列の誤りを訂正する誤り訂正処理)の間に、アレイ内のデータはまず行形式でアクセスされ、次いで列形式でアクセスされる。
【発明の概要】
【発明が解決しようとする課題】
【0009】
高性能を実現するには、HPC符号化器および復号器のハードウェア実装が好ましいであろう。しかしながら、ハードウェア符号化器の単純なハードウェア実装は、メモリ内に完全なHPCアレイ(複製データ206を含む)を形成したのち、各行を1つずつ、次いで各列を1つずつ反復的に符号化するものであろう。このアプローチは、従来のソフトウェア実装よりもはるかに高い性能を提供し得るが、本開示は、好ましい実施形態によれば、行形式および列形式の両方でデータにアクセスできるようにする集積回路がダイ面積の観点で非常に高価であることを認識している。本開示はまた、好ましい実施形態によれば、そのようなハードウェア実装では、行および列のデータを独立して符号化する必要があり、すなわち、アレイの対称性からの利益が得られないことを認識している。
【課題を解決するための手段】
【0010】
少なくとも1つの実施形態では、符号化器は、半積符号(HPC)などの二元対称不変積符号を利用して符号語の反復符号化をハードウェアで実行する。
【0011】
少なくとも1つの実施形態では、符号化器は、それぞれがHビットのストレージを有するD個の行を含むハーフ・サイズ・データ・アレイを含み、二元対称不変積符号は、2×H+1に等しい行および列のデータ次元Dを有する。符号化器は、D個の行のうちの1つから第1のHビットのデータ・ワードを読み出し、ハーフ・サイズ・データ・アレイのH個の異なる行にまたがって第2のHビットのデータ・ワードを読み出すことによって、積符号の各行のビットにアクセスするように構成される。符号化器はさらに、積符号の各行のビットを受け取り、ビットを回転させて積符号の行を取得するように構成されるレジスタと、積符号の各行の行パリティを生成するように構成される行パリティ生成器とを含む。符号化器は最後に、行パリティに基づいて、積符号の全ての行のパリティ・ビットに関する列パリティを生成するように構成される列パリティ生成器を含む。
【0012】
少なくとも1つの実施形態では、二元対称不変積符号は半積符号(HPC)である。
【0013】
少なくとも1つの実施形態では、ハーフ・サイズ・データ・アレイは複数のシフト・レジスタ・ラッチで実装される。
【0014】
少なくとも1つの実施形態では、符号化器は、ハーフ・サイズ・データ・アレイの行の間でビットをシフトし、ハーフ・サイズ・データ・アレイから読み出された第1のHビットのデータ・ワードをハーフ・サイズ・データ・アレイに戻るように再循環させるように構成される。
【0015】
少なくとも1つの実施形態では、符号化器は、ハーフ・サイズ・データ・アレイ内の同じビット記憶位置のセットから読み出すことによって、二元対称不変積符号の全ての行を形成する。
【0016】
少なくとも1つの実施形態では、符号化器は、ハーフ・サイズ・データ・アレイにHビットの入力データを一度に詰め込むように構成される。
【0017】
少なくとも1つの実施形態では、各次元においてD個のデータ・ビットおよびP個のパリティ・ビットを含む二元対称不変積符号を符号化する方法は、それぞれがHビットの入力データ用のストレージを有するD個の行を含むハーフ・サイズ・データ・アレイに入力データを詰め込むことであって、Dは2×H+1に等しい、詰め込むことを含む。この方法はさらに、ハーフ・サイズ・データ・アレイのD個の行のうちの選択された1つから第1のHビットのデータ・ワードを読み出し、ハーフ・サイズ・データ・アレイのH個の異なる行にまたがって第2のHビットのデータ・ワードを読み出すことによって、二元対称不変積符号の各行のビットに反復的にアクセスすることを含む。必要に応じて二元対称不変積符号の各行のビットを回転させて二元対称不変積符号の行を取得する。二元対称不変積符号の各行の行パリティが生成される。行パリティ生成器によって生成された行パリティに基づいて、二元対称不変積符号の全ての行のP個のパリティ・ビットに関する列パリティも生成される。第1のHビットのデータ・ワード、行パリティ、および列パリティが出力される。
【0018】
一態様によれば、各次元においてD個のデータ・ビットおよびP個のパリティ・ビットを含む二元対称不変積符号を利用して入力データを符号化するための符号化器であって、符号化器は回路を備え、回路は、それぞれがHビットの入力データ用のストレージを有するD個の行を含むハーフ・サイズ・データ・アレイであって、Dは2×H+1に等しい整数であり、符号化器は、ハーフ・サイズ・データ・アレイのD個の行のうちの選択された1つから第1のHビットのデータ・ワードを読み出し、ハーフ・サイズ・データ・アレイのH個の異なる行にまたがって第2のHビットのデータ・ワードを読み出すことによって、二元対称不変積符号の各行のビットにアクセスするように構成される、ハーフ・サイズ・データ・アレイと、二元対称不変積符号の各行のビットを受け取り、必要に応じてビットを回転させて二元対称不変積符号の行を取得するように構成されるレジスタと、レジスタに結合され、二元対称不変積符号の各行の行パリティを生成するように構成される行パリティ生成器と、行パリティ生成器によって生成された行パリティに基づいて、二元対称不変積符号の全ての行のP個のパリティ・ビットに関する列パリティを生成するように構成される列パリティ生成器と、を含む、符号化器が提供される。
【0019】
他の態様によれば、不揮発性メモリ・システムと、不揮発性メモリ・システムに結合されたコントローラであって、段落18に記載の符号化器を含む、コントローラと、を備える、データ・ストレージ・システムが提供される。
【0020】
他の態様によれば、段落18に記載の符号化器と、符号化器から符号化されたデータを受け取り、符号化されたデータを変調し、変調された符号化されたデータを通信チャネルに出力するように構成される変調器と、を備える、データ通信システムが提供される。
【0021】
他の態様によれば、各次元においてD個のデータ・ビットおよびP個のパリティ・ビットを含む二元対称不変積符号を符号化する方法であって、それぞれがHビットの入力データ用のストレージを有するD個の行を含むハーフ・サイズ・データ・アレイに入力データを詰め込むことであって、Dは2×H+1に等しい整数である、詰め込むことと、ハーフ・サイズ・データ・アレイのD個の行のうちの選択された1つから第1のHビットのデータ・ワードを読み出し、ハーフ・サイズ・データ・アレイのH個の異なる行にまたがって第2のHビットのデータ・ワードを読み出すことによって、二元対称不変積符号の各行のビットに反復的にアクセスすることと、必要に応じて二元対称不変積符号の各行のビットを回転させて二元対称不変積符号の行を取得することと、二元対称不変積符号の各行の行パリティを生成し、行パリティ生成器によって生成された行パリティに基づいて、二元対称不変積符号の全ての行のP個のパリティ・ビットに関する列パリティを生成することと、第1のHビットのデータ・ワード、行パリティ、および列パリティを出力することと、を含む、方法が提供される。
【0022】
他の態様によれば、プログラム・コードを含むコンピュータ・プログラムであって、上記プログラムがコンピュータ上で実行された場合に、前の段落に記載の方法を実行するようになされる、コンピュータ・プログラムが提供される。
【0023】
ここで、本発明の実施形態を単なる例として、添付の図面を参照して説明する。
【図面の簡単な説明】
【0024】
【
図2】従来技術の半積符号(HPC)を示す図である。
【
図3】従来技術の対称的なデータ誤りを含むHPCを示す図である。
【
図4】一実施形態によるデータ・ストレージ・システムの高レベルのブロック図である。
【
図5】一実施形態によるデータ通信システムの高レベルのブロック図である。
【
図6】
図4のデータ・ストレージ・システムの例示的な実装形態を示す図である。
【
図7】
図4のデータ・ストレージ・システムの例示的な実装形態を示す図である。
【
図8】一実施形態による概念的HPCアレイを示す図である。
【
図9】入力データおよび複製データがゼロ主対角線の異なる側に分別された従来のHPCのデータ・フィールドを示す図である。
【
図10】一実施形態による、各行で同数の入力データ・ビットが得られるように入力データおよび複製データが再編成されたHPCのデータ・フィールドを示す図である。
【
図11】一実施形態による、行ごとにHPCの同数の入力データ・ビットを収容するようにサイズ設定されたハーフ・サイズ・データ・アレイを示す図である。
【
図12】一実施形態による、ハーフ・サイズ・データ・アレイおよび従来のHPCアレイにおけるHPCの処理の間の対応関係を示す図である。
【
図13】一実施形態による、ハーフ・サイズ・データ・アレイおよび従来のHPCアレイにおけるHPCの処理の間の対応関係を示す図である。
【
図14】一実施形態による、ハーフ・サイズ・データ・アレイおよび従来のHPCアレイにおけるHPCの処理の間の対応関係を示す図である。
【
図15】一実施形態による、HPCを利用して入力データを符号化するためのハードウェア・ベースの符号化器を示す図である。
【
図16】一実施形態による、
図15の符号化器がHPCを利用して入力データを符号化する例示的な処理の高レベルの論理フローチャートである。
【発明を実施するための形態】
【0025】
少なくとも1つの実施形態では、本出願は、半積符号(HPC)などの二元対称不変積符号を利用してデータの反復符号化をハードウェア回路で実行する符号化器を対象とする。本出願はさらに、関連する方法を対象とする。
【0026】
本明細書に記載の解決策は、上記で論じた従来のHPCに適用することができるが、本明細書に開示する本発明は、好ましい実施形態によれば、行ごとに2つ以上のタイプの成分符号と、列ごとに2つ以上のタイプの成分符号とで形成される対称不変積符号にも適用可能であることを理解されたい。同様に、符号構造内で2つ以上のタイプの成分符号を使用することによって、HPCのさらなる拡張を得ることができる。たとえば、同じ長さnではあるが、異なる誤り訂正能力t1およびt2を有する2つのタイプの成分符号を使用し得る。HPCの場合、行/列の前半がt1の誤り訂正の成分符号からの符号語であり、行/列の後半がt2の誤り訂正の成分符号からの符号語であることが必要とされ得る。
【0027】
再び図を参照し、特に
図4を参照すると、データ・ストレージ・デバイスに対してECC符号化されたデータを読み書きするためのデータ・ストレージ・システム400の例示的な実施形態の高レベルのブロック図がある。データ・ストレージ・システム400は、メモリ404(たとえば、フラッシュ・メモリまたは他の不揮発性ランダム・アクセス・メモリ(NVRAM))と、メモリ404内のデータを読み書きするための読み出し/書き込み装置406とを含む記録チャネル402を含む。
図4では単一のブロックとして示しているが、メモリ404は、たとえば、単一のチップまたはダイから、それぞれがメモリ・チップの複数のパッケージを含む複数のストレージ・バンクまで及ぶ、データ・ストレージ・ユニットの任意の所望の構成を含み得る。読み出し/書き込み装置406は、知られている方法で読み書き動作を実行して、メモリ404内のワード線およびビット線のアレイに適切な電圧を印加することによって、読み書きの目的でメモリ・セルをアドレス指定する。
【0028】
データ・ストレージ・システム400は、符号化器410および復号器412をさらに含む。符号化器410は、二元対称不変積符号(たとえば、HPC)に従って入力(ユーザ)データを符号シンボルに符号化し、符号シンボルを記録チャネル402に出力する。復号器412は、読み出し/書き込み装置406によってメモリ404から取得されたリードバック・シンボルを処理して、対称不変積符号を復号することによって、オリジナル入力データを復元して出力する。
【0029】
さらに
図5に示すように、HPCなどの対称不変積符号は、データ通信システム500などのデータ通信システムにも応用される。データ通信システム500の送信機は、
図4を参照して上述した符号化器510と、変調器508と、送信デバイス(TX)506とを含む。符号化器510によって出力された符号シンボルは、変調器508を介して送信デバイス506に供給され、送信デバイス506は、通信リンク504を介して符号シンボルを送信するための信号を生成する。通信リンク504は、物理(有線または無線)リンク、または1つもしくは複数の物理リンクを介した論理リンクを含み得る。データ通信システムの受信機は、リンク504を介して送信された信号を受信するための受信デバイス(RX)516と、受信信号を復調するための復調器518と、復調器518から受け取った得られた符号シンボルを復号するための上述の復号器512とを含む。
【0030】
好ましい実施形態では、符号化器410、510および復号器412、512の機能は、高性能を実現するために、ハードウェア回路(すなわち、集積回路)で実装される。しかしながら、他の実施形態では、符号化器410、510および復号器412、512の機能は、ソフトウェアまたはファームウェアあるいはその両方のプログラム命令を実行するハードウェアで実装することができる。たとえば、符号化および復号を実行するように1つまたは複数のプロセッサを符号化器または復号器あるいはその両方として構成するソフトウェアを実行することによって、符号化および復号を全体的または部分的に実行することができる。
【0031】
ここで
図6および
図7を参照すると、
図4のデータ・ストレージ・システム400などのデータ・ストレージ・システムの例示的な実装形態のより詳細なブロック図が示されている。
図6は、命令およびデータを処理する1つまたは複数のプロセッサ604を有するプロセッサ・システム602などの1つまたは複数のホストを含むデータ処理環境600を示している。プロセッサ・システム602は、プロセッサ604によって実行される処理のプログラム・コード、オペランド、または実行結果あるいはそれらの組合せを記憶し得るローカル・ストレージ606(たとえば、ダイナミック・ランダム・アクセス・メモリ(DRAM)またはディスク)を追加的に含み得る。様々な実施形態では、プロセッサ・システム602は、たとえば、モバイル・コンピューティング・デバイス(たとえば、スマートフォンまたはタブレット)、ラップトップもしくはデスクトップのパーソナル・コンピュータ・システム、サーバ・コンピュータ・システム(たとえば、インターナショナル・ビジネス・マシーンズ(R)社から入手可能なPOWER(R)シリーズのサーバの1つ)、またはメインフレーム・コンピュータ・システムとすることができる。プロセッサ・システム602はまた、メモリ・キャッシュ、メモリ・コントローラ、ローカル・ストレージ、I/Oバス・ハブなどのいずれかと組み合わせられた、ARM(R)、POWER(R)、インテル(R)x86、または他の任意のプロセッサなどの様々なプロセッサを使用する組み込みプロセッサ・システムとすることもできる。
【0032】
各プロセッサ・システム602は入力/出力(I/O)アダプタ608をさらに含み、I/Oアダプタ608は、I/Oチャネル610を介してデータ・ストレージ・システム620に直接的に(すなわち、介在デバイスなしで)または間接的に(すなわち、少なくとも1つの中間デバイスを介して)結合される。様々な実施形態において、I/Oチャネル610は、たとえば、ファイバ・チャネル(FC)、FCオーバー・イーサネット(R)(FCoE)、インターネット・スモール・コンピュータ・システム・インターフェース(iSCSI)、インフィニバンド(R)、トランスポート制御プロトコル/インターネット・プロトコル(TCP/IP)、ペリフェラル・コンポーネント・インターコネクト・エクスプレス(PCIe(R))などを含む、知られているまたは将来開発される通信プロトコルのうちの任意の1つまたは組合せを利用し得る。I/Oチャネル610を介して伝達されるI/O要求は、プロセッサ・システム602がデータ・ストレージ・システム620にデータを要求する読み出し要求と、プロセッサ・システム602がデータ・ストレージ・システム620へのデータの記憶を要求する書き込み要求と含む。
【0033】
必須ではないが、図示の実施形態では、データ・ストレージ・システム620は複数のインターフェース・カード622を含み、これらを経由して、データ・ストレージ・システム620は、I/Oチャネル610を介してホストのI/O要求を受け取り、それに応答する。各インターフェース・カード622は、フォールト・トレランスおよび負荷分散を容易にするために、複数の安価ディスク冗長アレイ(RAID:Redundant Array of Inexpensive Disks)コントローラ624のそれぞれに結合される。転じて、RAIDコントローラ624のそれぞれは、不揮発性記憶媒体に(たとえば、PCIeバスによって)結合され、不揮発性記憶媒体は、図示の例では、NANDフラッシュ・メモリを保持する複数のフラッシュ・カード626を含む。他の実施形態では、代替または追加あるいはその両方の不揮発性ストレージ・デバイスを利用することができる。
【0034】
図示の実施形態では、データ・ストレージ・システム620の動作は、冗長なシステム管理コントローラ(SMC:systemmanagement controller)623によって管理され、SMC623はインターフェース・カード622およびRAIDコントローラ624に結合される。様々な実施形態では、システム管理コントローラ623は、ハードウェア、あるいはファームウェアもしくはソフトウェアまたはその両方を実行するハードウェアを利用して実装することができる。
【0035】
図7は、
図6のデータ・ストレージ・システム620のフラッシュ・カード626の例示的な実施形態のより詳細なブロック図を示している。フラッシュ・カード626は、フラッシュ・カード626とRAIDコントローラ624との間のインターフェースとして機能するゲートウェイ730を含む。ゲートウェイ730は汎用プロセッサ(GPP:general-purpose processor)732に結合され、GPP732は、ゲートウェイ730によって受信されたI/O要求に関して前処理を実行し、またはフラッシュ・カード626によるI/O要求へのサービス提供をスケジューリングし、あるいはその両方を行うように(たとえば、プログラム・コードによって)構成することができる。GPP732はGPPメモリ734(たとえば、ダイナミック・ランダム・アクセス・メモリ(DRAM))に結合され、GPPメモリ734は、GPP732によってその処理の最中に作成、参照、または修正、あるいはそれらの組合せが行われるデータ、あるいはフラッシュ・コントローラ740のうちの1つまたは複数宛てにゲートウェイ730を介して流れるデータをバッファリングできると好都合である。
【0036】
ゲートウェイ730はさらに複数のフラッシュ・コントローラ740に結合され、各フラッシュ・コントローラ740は、それぞれのNANDフラッシュ・メモリ・システム750を制御する。フラッシュ・コントローラ740は、たとえば、特定用途向け集積回路(ASIC)、および/またはフィールド・プログラマブル・ゲート・アレイ(FPGA)、ならびに/あるいはマイクロプロセッサによって実装することができ、各フラッシュ・コントローラ740には、フラッシュ・コントローラ・メモリ742(たとえば、DRAM)が関連付けられている。フラッシュ・コントローラ740がFPGAで実装される実施形態では、GPP732は、データ・ストレージ・システム620の起動中にフラッシュ・コントローラ740をプログラムして構成し得る。起動後、通常動作時に、フラッシュ・コントローラ740は、NANDフラッシュ・メモリ・システム750に記憶されたデータを読み出すこと、またはNANDフラッシュ・メモリ・システム750にデータを記憶すること、あるいはその両方を要求する読み出し要求および書き込み要求をゲートウェイ730から受信する。フラッシュ・コントローラ740は、たとえば、NANDフラッシュ・メモリ・システム750にアクセスして要求されたデータをNANDフラッシュ・メモリ・システム750に対して読み書きすることによって、またはNANDフラッシュ・メモリ・システム750に関連付けられたメモリ・キャッシュ(図示せず)にアクセスすることによって、これらの要求にサービス提供する。
【0037】
フラッシュ・コントローラ740は、NANDフラッシュ・メモリ・システム750内の特定のメモリ位置へのアクセスを可能にする論理/物理アドレス変換を提供するフラッシュ変換レイヤ(FTL:flash translation layer)を実装する。一般に、プロセッサ・システム602などのホスト・デバイスからフラッシュ・コントローラ740によって受信されるI/O要求は、データがアクセスされる(読み出しまたは書き込みされる)論理ブロック・アドレス(LBA:logical block address)を含み、書き込み要求の場合は、データ・ストレージ・システム620に記憶される書き込みデータも含む。I/O要求は、アクセスするデータの量(またはサイズ)も指定し得る。データ・ストレージ・システム620によってサポートされるプロトコルおよび機能に応じて、他の情報も伝達され得る。フラッシュ変換レイヤは、RAIDコントローラ624から受け取ったLBAを、NANDフラッシュ・メモリ・システム750内の対応する物理位置に割り当てられた物理アドレスに変換する。フラッシュ・コントローラ740は、アドレス変換を実行し、またはフラッシュ・コントローラ・メモリ742に記憶されると好都合であり得る論理/物理変換テーブル(LPT:logical-to-physical translation table)などの論理/物理変換データ構造内に論理アドレスと物理アドレスとの間のマッピングを記憶し、あるいはその両方を行い得る。
【0038】
NANDフラッシュ・メモリ・システム750は、様々な実施形態において多くの形態をとり得る。
図7に示す実施形態では、各NANDフラッシュ・メモリ・システム750は、複数の(たとえば、32個の)個別にアドレス指定可能なNANDフラッシュ・メモリ・ストレージ・デバイス752を含む。図示の例では、フラッシュ・メモリ・ストレージ・デバイス752は、基板に取り付けられたフラッシュ・メモリ・モジュール、たとえば、シングル・レベル・セル(SLC)、マルチ・レベル・セル(MLC)、3レベル・セル(TLC)、またはクアッド・レベル・セル(QLC)のNANDフラッシュ・メモリ・モジュールの形態をとる。フラッシュ・メモリ・ストレージ・デバイス752から読み出されるデータの忠実度は、好ましくは、たとえば、フラッシュ・コントローラ740、またはGPP732もしくはRAIDコントローラ624などの高レベルのコントローラ、あるいはその両方によるECC符号化の実装を通じて高められる。図示の実施形態では、ECC符号化および復号は、少なくともフラッシュ・コントローラ740内に、符号化器744および復号器746によって実装される。
【0039】
ここで
図8を参照すると、符号化器410、510、および744ならびに復号器412、512、および746によって実行される符号化および復号を説明するために利用される概念的(conceptual)HPCアレイが示されている。
図2を参照して上記で説明したように、HPCアレイ800は、同数の行および列を有する正方形のアレイである。HPCアレイ800は、ゼロ主対角線、たとえば、ゼロ主対角線802をさらに含む。前述のように、入力データ804は、HPCアレイ800内のゼロ主対角線802より下に詰め込まれ、対称的な複製データ806は、ゼロ主対角線802より上に配置される。各行および各列のパリティ・データ808は、関連する行または列の最後に付加される。パリティ・データ808は、パリティのみの行および列のパリティを含む正方形のクロス・パリティ・サブアレイ810を含む。
【0040】
この概念的HPCアレイ800では、全ての行および列は、DビットのデータおよびPビットのパリティを含むFビットの共通の次元を有する。
図8にさらに示すように、各行および各列のD個のデータ・ビットは、ゼロ主対角線802内の1つの0のデータ・ビットと、2×H個の他のビットとを含み、これはDが奇数の整数であることを意味する。これらの次元は、次の関係式で表すことができる。
F=D+P
D=2×H+1
ここで、F、D、P、およびHは全て正の整数である。
【0041】
従来技術では、典型的な実装形態は、全てのデータ・ビットが埋められるまで、ゼロ主対角線802より下の三角形のアレイを入力データ804のビットで埋めてから、入力データ804のビットを1つずつ転置して、複製データ806を作成するものであろう。次いで、各行および各列のパリティ・フィールドが個別に計算されることになる。この処理は、全ての行が異なる数のデータ・ビットを含み、(複製データ806を形成するために)転置を計算するには、要素ごとにただ1つの特定の行および列へのアクセスが必要となる、入力データ804の三角形(非長方形)のアレイをハードウェアで処理することが困難であるので、一般にソフトウェアで実行される。
【0042】
そこで、本開示は、HPCなどの二元対称不変積符号を利用して入力データをハードウェアで符号化するための革新的な技術を提示する。コンパクトなロジックを利用してハードウェアでこの符号化を実行するために、本開示は、従来技術で利用されているものとは大きく異なるデータ詰め込み技術を実装する。この技術を説明するために、まず
図9を参照し、
図9は例示的な従来のHPCアレイのデータ・フィールド900のみを示している(すなわち、パリティ・データを省略している)。この例では、データ・フィールド900は、0から14までの番号が付けられた15個の行と、0から14までの番号が付けられた15個の列とを含む。したがって、この例では、Dは15であり、Hは7であり、データ・フィールド900は、105個の入力ビットと、105個の複製ビットと、ゼロ主対角線内の15個の「0」ビットとを含む225ビットを含む。
図9では、各記憶位置には、行番号および列番号で形成された2つ組(duple)のラベルが付けられている。これらの2つ組は、右下隅の(0,0)から左上隅の(14,14)までに及ぶ。従来のHPCでは、入力データは、ゼロ主対角線902より下の入力データ・フィールド904に分別され、複製データは、ゼロ主対角線902より上の複製データ・フィールド906に分別される。上述のように、各行の入力データの記憶位置の数は異なり、行0での14ビットから行14での0ビットまでに及ぶ。
【0043】
より効率的なデータ詰め込みを推進するために、HPCの全ての行が同じビット数の入力データを含むと好ましい。そこで、
図10に示すように、全ての行で同数の入力データ・ビットを実現するために、HPCのデータ・フィールド1000のデータ・ビットを異なる記憶位置に再割り当てすることができる。この例では、入力データ・ビットが全てゼロ主対角線1002より下に詰め込まれるわけではない。代わりに、入力データは、ゼロ主対角線1002より下の第1の入力データ・フィールド1004aと、ゼロ主対角線1002より上の第2の入力データ・フィールド1004bとに詰め込まれる。同様に、複製データは、ゼロ主対角線1002より上の第1の複製データ・フィールド1006aと、ゼロ主対角線1002より下の第2の複製データ・フィールド1006bとに詰め込まれる。この配置の結果、データ・フィールド1000の各行はH=7ビットの入力データを含み、各ビットは、
図9のデータ・フィールド900内の対応する行および列の位置のデータを示すようにラベル付けされる。このため、たとえば、記憶位置(0,7)および(7,0)にはD0.0のラベルが付けられており、これらの記憶位置が、データ・フィールド900の記憶位置(0,0)に記憶されるはずの入力データ・ビットを保持することを示す。
【0044】
データ・フィールドに同じ長さの行の入力データを詰め込めるようになると、行ごとにHPCの同数の入力データ・ビットを収容するようにサイズ設定された、
図11に示すようなハーフ・サイズ・データ・アレイを形成することが可能になる。この例では、ハーフ・サイズ・データ・アレイ1100は、0から14の番号が付けられた15個の行(すなわち、D個の行)と、0から6の番号が付けられた7つの列(すなわち、H個の列)とを含む。ハーフ・サイズ・データ・アレイ1100は、入力データ・フィールド1104のみを含み、複製データ・フィールドを含まないことに留意されたい。ハーフ・サイズ・データ・アレイ1100はまた、明示的なゼロ主対角線の記憶を省略し得るが、代わりに、行ごとの黙示の「0」ビットを含む黙示的なゼロ主対角線1102を含むことができる。
【0045】
ハーフ・サイズ・アレイ1100の入力データ・フィールド1104内のデータ・ビットの詰め込みが与えられると、
図10に示した概念的HPCアレイ1000で処理されるはずのものと同じデータ・ビットを反復的に選択して処理することにより、HPCの各行および各列のパリティを計算することができる。たとえば、
図12は、HPCアレイ1000の行0 1010(および複製転置列14)のパリティが、選択されたパリティ・アルゴリズム(BCHなど)を行0の15ビットに適用することにより計算できることを示している。これらの同じデータ・ビット(すなわち、概念的HPCアレイ1000の行0で見つかるデータ・ビット)は、データ・ビットD14.6、D13.5、D12.4、D11.3、D10.2、D9.1、およびD8.0を含む斜めデータ・ワード1200bと、データ・ビットD0.0~D0.6を含む水平データ・ワード1200aとから対応する14ビットを読み出すことによって、ハーフ・サイズ・データ・アレイ1100からアクセスすることができる(ゼロ主対角線1002からの「0」は黙示的である)。
【0046】
さらに
図13に示すように、HPCアレイ1000の行1 1012(および複製転置列13)のパリティは、選択されたパリティ・アルゴリズム(BCHなど)を行1の15ビットに適用することにより計算することができる。ハーフ・サイズ・データ・アレイ1100内でのアクセス位置を
図12でのアクセス位置からシフトすることによって同じデータ・ビットにアクセスすることは可能であるが、好ましい実施形態では、代わりに、ハーフ・サイズ・データ・アレイ1100内でのアクセス位置が同じままになるようにハーフ・サイズ・データ・アレイ1100内の入力データをシフトして、概念的HPCアレイの全ての行を処理する。このため、好ましい実施形態では、概念的HPCアレイの行0の完全な15ビットが形成された後、ハーフ・サイズ・データ・アレイ1100の行0に位置する入力データは、ハーフ・サイズ・データ・アレイ1100の「一番上」(すなわち、行14)に戻るように「再循環」され、ハーフ・サイズ・アレイ1100内の残りの入力データは、1行下にシフトされる。したがって、たとえば、データD0.[6-0]がSRLアレイの一番上に戻るようにロードされた後、他の全ての入力データは1行「下」にシフトされ、このとき水平アレイ1202aを形成するD1.[6-0]はハーフ・サイズ・アレイ1100の行0に記憶される。このように循環された入力データ内で、データ・ビットD0.6、D14.5、D13.4、D12.3、D11.2、D10.1およびD9.0を含む斜めデータ・ワード1202bと、データ・ビットD1.0~D1.6を含む水平データ・ワード1202aとに同様にアクセスすることによって、概念的HPCアレイ1000の行1を形成することができる(ゼロ主対角線1002からの「0」は同様に黙示的である)。
【0047】
図14に示すように、ハーフ・サイズ・アレイ1100から入力データにアクセスし、HPCの行を形成してパリティを計算し、ハーフ・サイズ・アレイ1100内で入力データを再循環させるこの処理は、概念的HPC行列1000の一番上の行1014(たとえば、行14)に対応する入力データ・ビットに達するまで続く。概念的HPCアレイ1000の一番上の行1014に対応する入力データは、データ・ビットD13.6、D12.5、D11.4、D10.3、D9.2、D8.1、およびD7.0を含む斜めデータ・ワード1204bと、データ・ビットD14.0~D14.6を含む水平データ・ワード1204aとに同様にアクセスすることによって形成することができる(ゼロ主対角線1002からの「0」は同様に黙示的である)。この場合も、処理全体を通して、ハーフ・サイズ・アレイ1100からアクセスされる入力データの位置は変化しない。
【0048】
ここで
図15を参照すると、一実施形態による、HPCを利用して入力データを符号化するためのハードウェア・ベースの符号化器が示されている。符号化器1500を利用して、上記で論じた符号化器410、510、または744のいずれかを実装することができる。
【0049】
図示のように、符号化器1500はHビットの入力データのD個の行を記憶するためのハーフ・サイズ・アレイ1502を含み、対応する概念的HPCアレイのデータ・フィールドは各次元で2×H+1(すなわち、D)ビットであり、各行および各列はPビットのパリティを含む。1つの好ましい実施形態では、ハーフ・サイズ・データ・アレイ1502は、たとえば、シフト・レジスタ・ラッチ(SRL)1504を用いて実装され得る、同数の等サイズの直列に接続されたシフト・レジスタで形成されたH個の列を含む。そのような各列は、2×H+1(すなわち、D)ビットの直列化されたストレージを含む。この実施形態では、ハーフ・サイズ・アレイ1502の各列は、列にまたがって、さらには列内で独立してアドレス指定され得、各個別のSRL1504は、単一の「アドレス」を受け取り、最大で1つのデータ・ビットを出力する。
【0050】
データが符号化器1500により入力マルチプレクサ1508で受け取られ、入力マルチプレクサ1508は、第1の入力がHビットの入力バス1506に結合され、第2の入力がHビットの再循環バス1510に結合されており、Hビットの再循環バス1510は、ハーフ・サイズ・アレイ1502から読み出された水平データ・ワードを再循環させる。入力データがハーフ・サイズ・アレイ1502に最初に詰め込まれる詰め込みフェーズ中には、符号化器1500は入力マルチプレクサ1508を制御して、第1の入力に提示されたデータを選択してハーフ・サイズ・アレイ1502の次の占有されていない行に挿入し、符号化フェーズ中には、符号化器1500は入力マルチプレクサ1508を制御して、第2の入力に提示されたデータを選択してハーフ・サイズ・アレイ1502の一番上の行に挿入する。
【0051】
符号化フェーズ中に、ハーフ・サイズ・アレイ1502から長さHの2つのワードを一度に読み出すことによって、サイズD=2×H+1のHPC行レジスタ1512にロードされる。ハーフ・サイズ・アレイ1502内の単一のSRL1504は、HPC行レジスタ1512に1ビットを超えるデータを供給しないことに留意されたい。図示の実施形態では、HPC行レジスタの左端のビットは、概念的HPCアレイのゼロ主対角線によって供給されるビットを表す「0」ビットであり、次のHビットは、ハーフ・サイズ・アレイ1502の所定の水平行(たとえば、一番下の行1518)から供給される水平データ・ワード1514であり、その次のHビットは、斜めデータ・ワード1520によって供給される複製データ・ビット1516である。
【0052】
参照番号1522に示すように、HPC行レジスタ1512にHPC行データがロードされた後、HPC行データは次いで必要に応じて、HPC行レジスタ1512または別のレジスタ内で回転される。図示の実施形態では、HPC行データはNビット右に回転され、ここで、Nは概念的HPCアレイの対応する整数の行番号である。このため、行0の場合、回転は実行されず、行14の場合、HPC行データは14ビット右に回転される。回転が実行された場合、その回転の結果として、ゼロ主対角線からの「0」ビットがHPC行データ内に適切に再配置され、入力データ・ビット1514または複製データ・ビット1520の1つまたは複数のビットが回り込む。
【0053】
回転が行われた場合、その回転によってHPC行データが適切にフォーマットされると、行パリティ生成器1524は、選択されたパリティ・アルゴリズム(BCHなど)に従って、概念的HPCアレイの第N行のP個のパリティ・ビットを生成する。これらのP個の行パリティ・ビットは列パリティ生成器1526に供給され、列パリティ生成器1526は概念的HPCアレイのP×P「クロス・パリティ」サブアレイ810を計算する。符号化器1500は、(それぞれがD+Pビットを有する)データおよびパリティのD個の行のそれぞれを記憶または送信あるいはその両方のために出力するが、行パリティの生成後に、斜めデータ・ワード1520によって供給された複製データ・ビット1516を記憶も送信もしない(代わりに破棄する)ことが好ましいということに留意することが重要である。同様に、列パリティ生成器1526によって生成されたクロス・パリティ・サブアレイ810のうち、符号化器1500は、ゼロ主対角線802より下のP×(P-1)/2個のビットのみを出力することが好ましい。
【0054】
ここで
図16を参照すると、一実施形態による、
図15の符号化器がHPCデータ・アレイを利用して入力データを符号化する例示的な処理の高レベルの論理フローチャートが示されている。
【0055】
処理は、符号化器1500が符号化対象の入力データを受け取ったことに応答して、ブロック1600から開始する。次いで、処理は、詰め込みフェーズを示すブロック1602に進む。詰め込みフェーズ中に、符号化器1500は、入力マルチプレクサ1508を制御して入力バス1506から到来したデータを選択し、必要なアドレス指定信号を供給して、入力データのHビット・ワードをハーフ・サイズ・アレイ1502のD行全てに詰め込むことによって、ハーフ・サイズ・アレイ1502を埋める。ハーフ・サイズ・アレイ1502に詰め込んだ後、符号化器1500は、ブロック1604~1612を含む処理ループによって表される符号化フェーズに入る。
【0056】
ブロック1604において、符号化器1500は、ハーフ・サイズ・アレイ1502のD行全てが処理されたか否かを判定する。処理された場合、処理は後述のブロック1620に進む。処理されていない場合、符号化器1500は、入力データの水平Hビット・ワード1518を複製データの斜めHビット・ワード1520と連結することによって、概念的HPCアレイの次の行のHPC行データを取得する(ブロック1606)。次いで、符号化器1500は、HPC行データをN位置右にバレル回転(barrel rotate)させ、ここで、Nは、処理中のハーフ・サイズ・アレイ1502の行を示す0からD-1までの整数である(ブロック1608)。次いで、符号化器1500は、行パリティ生成器1524を利用して、行符号語のP個のパリティ・ビットを生成する(ブロック1610)。符号化器1500はさらに、ハーフ・サイズ・アレイ1502から読み出された入力データ1514の水平Hビット・ワードをハーフ・サイズ・アレイ1502の一番上の行に戻るように再循環させ、ハーフ・サイズ・アレイ1502内の他の入力データの行を1行下にシフトする(ブロック1612)。この処理は、符号化器1500がブロック1604において、ハーフ・サイズ・アレイ1502のD行全てが処理されたと判定するまで反復される。ブロック1604においてハーフ・サイズ・アレイ1502のD行全てが処理されたと符号化器1500が判定したことに応答して、符号化器1500は、列パリティ生成器1526を利用してHPCデータ・アレイのゼロ主対角線より下のP×(P-1)/2個のクロス・パリティ・ビットを生成して出力する(ブロック1620)。その後、
図16の処理はブロック1622において終了する。
【0057】
当業者は、符号化されたデータが、
図16に示したものと同様の処理を利用して復号できることを理解するであろう。具体的には、復号器412、512、または746は、上記で論じたようにハーフ・サイズ・アレイ1502に詰め込む。HPC行データの反復処理中に、行パリティ生成器1524によって出力されたパリティが、記憶または送信されたパリティと比較され、1つまたは複数のパリティ誤りが検出された場合、従来の誤り訂正回路は、可能であれば検知された誤りを訂正する。次いで、復号されたデータは、記憶、送信、または別の方法で処理することができる。
【0058】
説明したように、少なくとも1つの実施形態では、符号化器は二元対称不変積符号を利用して入力データを符号化する。符号化器は、それぞれがHビットのストレージを有するD個の行を有するデータ・フィールドを含むハーフ・サイズ・データ・アレイを含む回路を含む。符号化器は、D個の行のうちの1つ(たとえば、第1の行)から第1のHビットのデータ・ワードを読み出し、ハーフ・サイズ・データ・アレイのH個の異なる行にまたがって第2のHビットのデータ・ワードを読み出すことによって、積符号の各行のビットにアクセスするように構成される。符号化器はさらに、積符号の各行のビットを受け取り、ビットを回転させて積符号の行を取得するように構成されるレジスタと、積符号の各行の行パリティを生成するように構成される行パリティ生成器とを含む。符号化器は最後に、行パリティに基づいて、積符号の全ての行のパリティ・ビットに関する列パリティを生成するように構成される列パリティ生成器を含む。
【0059】
開示した符号化器は、従来技術よりも大幅に少ないロジックで符号化を実行する。必要なロジックの削減は、符号化対象の入力データを記憶するアレイ内の任意の無作為的なアレイ位置から入力データを選択する必要がなくなることに一部起因する。開示した符号化器はまた、行および列のパリティを計算するために、入力データおよび複製データの両方を含むフル・サイズのデータ・アレイを形成する必要性を排除する。開示した符号化器は高性能を実現可能であり、完全なHPCのデータの行をハーフ・サイズ・アレイから単一のサイクルで読み出すことを可能にする。
【0060】
本発明は、システム、方法、またはコンピュータ・プログラム製品あるいはそれらの組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実施させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体(または複数の媒体)を含み得る。
【0061】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のために命令を保持および記憶可能な有形のデバイスとすることができる。コンピュータ可読記憶媒体は、たとえば、限定はしないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組合せであり得る。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラム可能読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリー・スティック(R)、フロッピー(R)・ディスク、命令が記録されたパンチ・カードまたは溝の隆起構造などの機械的にコード化されたデバイス、およびこれらの任意の適切な組合せが含まれる。コンピュータ可読記憶媒体は、本明細書で使用する場合、たとえば、電波もしくは他の自由に伝搬する電磁波、導波管もしくは他の伝送媒体を伝搬する電磁波(たとえば、光ファイバ・ケーブルを通過する光パルス)、または有線で伝送される電気信号などの一過性の信号自体であると解釈されるべきではない。
【0062】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいは、たとえば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくは無線ネットワーク、またはそれらの組合せなどのネットワークを介して外部コンピュータまたは外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅線伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組合せを含み得る。各コンピューティング/処理デバイスのネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶する。
【0063】
本発明の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはSmalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つもしくは複数のプログラミング言語の任意の組合せで記述されたソース・コードまたはオブジェクト・コードであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上かつ部分的にリモート・コンピュータ上で、または完全にリモート・コンピュータもしくはサーバ上で実行され得る。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続され得、または(たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータへの接続がなされ得る。いくつかの実施形態では、たとえば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用してコンピュータ可読プログラム命令を実行することによって、電子回路を個人向けにし得る。
【0064】
本発明の態様は、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して本明細書で説明している。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組合せが、コンピュータ可読プログラム命令によって実装できることは理解されよう。
【0065】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行された命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定された機能/行為を実施するための手段を生成するように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供されて、マシンを生成するものであってよい。これらのコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定された機能/行為の態様を実施する命令を含む製造品を含むように、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラム可能データ処理装置、または他のデバイスあるいはその組合せに特定の方法で機能するよう指示することができるものであってもよい。
【0066】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行された命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定された機能/行為を実施するように、コンピュータ実装プロセスを生成するべく、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラム可能装置または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【0067】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示している。これに関して、フローチャートまたはブロック図の各ブロックは、指定された論理的機能を実装するための1つまたは複数の実行可能命令を含むモジュール、セグメント、または命令の一部を表し得る。一部の代替的実装形態では、ブロックに記載した機能は、図示した順序以外で行われ得る。たとえば、関与する機能に応じて、連続して示した2つのブロックは、実際には実質的に同時に実行され得、またはそれらのブロックは、場合により逆の順序で実行され得る。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組合せは、指定された機能もしくは行為を実行するか、または専用ハードウェアおよびコンピュータ命令の組合せを実行する専用のハードウェア・ベースのシステムによって実装できることにも気付くであろう。
【0068】
本発明は、1つまたは複数の好ましい実施形態を参照して説明したように具体的に示してきたが、当業者には、本発明の思想および範囲から逸脱することなく、形態および詳細の様々な変更がなされ得ることは理解されよう。たとえば、特定の機能を指示するフラッシュ・コントローラを含むデータ・ストレージ・システムに関する態様を説明してきたが、本発明は、代替的には、プロセッサがそのような機能を実行することによって、またはそのような機能を実行させることによって、処理することが可能なプログラム・コードを記憶するストレージ・デバイスを含むプログラム製品として実装され得ることを理解されたい。本明細書で使用する場合、「ストレージ・デバイス」とは、具体的には、法定製造品(statutory article of manufacture)のみを含み、信号媒体自体、一過性の伝搬信号自体、およびエネルギーの形態自体を除外するように定義する。
【0069】
上記で説明した図面および以下の特定の構造および機能についての明細書は、出願人が発明したものの範囲、または添付の特許請求の範囲を制限するために提示していない。むしろ、図面および明細書は、特許保護を求める発明を作成および使用する方法を当業者に教示するために提供している。当業者は、明確さおよび理解のために、本発明の商用の実施形態の全ての特徴を説明または図示しているわけではないことを理解するであろう。当業者はまた、本発明の態様を組み込んだ実際の商用の実施形態の開発には、商用の実施形態に関する開発者の最終目標を達成するために多数の実装固有の判断が必要となることを理解するであろう。そのような実装固有の判断には、システム関連の、ビジネス関連の、政府関連の、およびその他の制約への準拠が含まれ得るが、おそらくこれらに限定されることはなく、これらの制約は、特定の実装形態、場所、およびその時々によって異なり得る。開発者の努力は絶対的な意味で複雑で時間がかかるものであり得るが、それにもかかわらず、そのような努力は、本開示の利益を得る当業者にとっては日常的な作業であろう。本明細書に開示および教示した発明は、多数の様々な修正および代替形態が容易であることを理解されたい。最後に、「a」などであるがこれに限定されない単数形の使用は、項目の数を限定することを意図したものではない。