(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-01
(45)【発行日】2024-03-11
(54)【発明の名称】半導体装置及び半導体記憶装置
(51)【国際特許分類】
G06F 7/58 20060101AFI20240304BHJP
G06F 12/00 20060101ALI20240304BHJP
H03K 3/84 20060101ALI20240304BHJP
【FI】
G06F7/58 620
G06F12/00 597U
H03K3/84 Z
(21)【出願番号】P 2020096429
(22)【出願日】2020-06-02
【審査請求日】2023-03-20
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002907
【氏名又は名称】弁理士法人イトーシン国際特許事務所
(72)【発明者】
【氏名】熱海 剛
(72)【発明者】
【氏名】黒澤 泰彦
【審査官】白石 圭吾
(56)【参考文献】
【文献】特開2007-087064(JP,A)
【文献】国際公開第2020/044393(WO,A1)
【文献】特表2016-505887(JP,A)
【文献】特開2003-299862(JP,A)
【文献】特開2018-045501(JP,A)
【文献】特開2007-333854(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 7/58
G06F 12/00
G09C 1/00
H03K 3/84
(57)【特許請求の範囲】
【請求項1】
入力されたデータ
に対して第1のXorShift演算
を行い第1の乱数列データを
生成し、
前記第1の乱数列データの複数の第1ビットに対して第2のXorShift演算を行い第2の乱数列データを生成し、
前記第2の乱数列データに対して非線形変換を行い第1のシードを生成し、
前記第1の乱数列データの、前記複数の第1ビットとは異なる複数の第2ビットに対して前記非線形変換を行い第2のシードを生成する、
シード生成回路と、
前記
第1のシードに対して第3のXorShift演算を行った演算結果と前記第2のシード
に対して第
4のXorShift演算
を行った演算結果とを用いて第
3の乱数列データを生成する
、
乱数生成回路と、
を有する、半導体装置。
【請求項2】
前記シード生成回路は、
前記第1のXorShift演算を行う第1のXorShift回路と、前記第2のXorShift演算を行う第2のXorShift回路と、を少なくとも含む複数のXorShift回路と、
前記
第2の乱数列データに対して
前記非線形変換を行う
第1の非線形変換回路と、
前記複数の第2ビットに対して前記非線形変換を行う第2の非線形変換回路と、を
少なくとも含
む複数の非線形変換回路と、
を含む、請求項1に記載の半導体装置。
【請求項3】
前記乱数生成回路は、
前記第3のXorShift演算を行う第3のXorShift回路と、前記第4のXorShift演算を行う第4のXorShift回路と、を少なくとも含む複数のXorShift回路を含む、請求項2に記載の半導体装置。
【請求項4】
前記乱数生成回路は、前記第
3のXorShift演算の演算結果に対して排他的論理和演算を行うことにより前記第
3の乱数列データを生成する、請求項3に記載の半導体装置。
【請求項5】
前記乱数生成回路は、
前記第1のシードに対して前記第3のXorShift演算を行い第4の乱数列データを生成し、
前記第2のシードに対して前記第4のXorShift演算を行い第5の乱数列データを生成し、
前記第4の乱数列データと、前記第5の乱数列データの複数の第3ビットとを連結した第6の乱数列データに対して排他的論理和演算を行い前記第3の乱数列データを生成する、
請求項
1に記載の半導体装置。
【請求項6】
前記シード生成回路は、
前記第1の乱数列データの、前記複数の第1ビットとは異なる複数の第4ビットに対して前記第2のXorShift演算を行い第7の乱数列データを生成し、
前記第7の乱数列データに対して前記非線形変換を行い第3のシードを生成し、
前記乱数生成回路は、
前記第3のシードに対して前記第3のXorShift演算を行い第8の乱数列データを生成し、
前記第8の乱数列データと、前記第5の乱数列データの前記複数の第3ビットとは異なる複数の第5ビットとを連結した第9の乱数列データを生成し、
前記第6の乱数列データと、前記第9の乱数列データとに対して前記排他的論理和演算を行い前記第3の乱数列データを生成する、
請求項5に記載の半導体装置。
【請求項7】
前記第3のXorShift演算によって得られる前記第4の乱数列データのビット数は、前記第4のXorShift演算によって得られる前記第5の乱数列データのビット数よりも大きい、請求項5に記載の半導体装置。
【請求項8】
前記シード生成回路は、
前記第1のXorShift演算において乱数列データの生成を第1サイクル数実行し、
前記第2のXorShift演算において乱数列データの生成を、前記第1サイクル数とは異なる第2サイクル数実行する、
請求項5に記載の半導体装置。
【請求項9】
前記複数の第4ビットは前記複数の第2ビットの少なくとも一部を含む、請求項6に記載の半導体装置。
【請求項10】
前記非線形変換回路は、同一の種類の非線形変換を行う複数のS-box回路を有する、請求項2に記載の半導体装置。
【請求項11】
前記非線形変換回路は、互いに異なる複数の種類の非線形変換を行う複数のS-box回路を有する、請求項2に記載の半導体装置。
【請求項12】
前記複数のS-box回路は、互いに出力するビット数が異なる少なくとも2つのS-box回路を含む、請求項11に記載の半導体装置。
【請求項13】
前記第3の乱数列データ中のデータ位置を入れ替える入れ替え回路を有する、請求項1に記載の半導体装置。
【請求項14】
前記乱数生成回路は、前記第4のXorShift演算を行う前又は後で、ビット反転、バイト反転又はワード反転を行う反転回路を有する、請求項1に記載の半導体装置。
【請求項15】
不揮発性メモリと、
前記不揮発性メモリへのユーザデータの書き込みを制御するメモリコントローラと、
請求項1に記載の半導体装置と、
を有し、
前記メモリコントローラは、前記ユーザデータの前記不揮発性メモリにおける記憶位置を示す記憶位置データを前記半導体装置に入力し、
前記半導体装置は、入力された記憶位置データから前記第3の乱数列データを生成し、
前記メモリコントローラは、前記第3の乱数列データを用いて前記ユーザデータをランダマイズし、前記ランダマイズしたユーザデータを前記不揮発性メモリに書き込む、
半導体記憶装置。
【請求項16】
前記不揮発性メモリは、前記ユーザデータをページ番号で指定される記憶位置に記憶し、
前記記憶位置データは、前記ページ番号を、又は、前記ページ番号及び前記ページ番号に含まれるフレーム番号を、含む、請求項15に記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、乱数生成回路を有する半導体装置及び半導体記憶装置に関する。
【背景技術】
【0002】
半導体装置には乱数生成回路が搭載される場合がある。例えば、NAND型フラッシュメモリなどの不揮発性メモリでは、メモリセルから読み出されたデータの信頼性を向上させるために、書込み対象のユーザデータは、乱数を用いてランダマイズされた後、メモリセルに書き込まれる。ユーザデータが乱数によりランダマイズされて一様乱数となることにより、メモリセルの様々な不良モードに対する信頼性の向上が図られている。
【0003】
しかし、従来の乱数生成回路は、生成する乱数列データのデータサイズに制限があり、かつ回路規模が大きい。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2018-45501号公報
【文献】特開2019-194873号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
そこで、実施形態は、生成する乱数列データのデータサイズの拡張性が高く、かつ回路規模が小さい半導体装置及び半導体記憶装置を提供することを目的とする。
【課題を解決するための手段】
【0006】
実施形態の半導体装置は、入力されたデータに対して第1のXorShift演算を行い第1の乱数列データを生成し、前記第1の乱数列データの複数の第1ビットに対して第2のXorShift演算を行い第2の乱数列データを生成し、前記第2の乱数列データに対して非線形変換を行い第1のシードを生成し、前記第1の乱数列データの、前記複数の第1ビットとは異なる複数の第2ビットに対して前記非線形変換を行い第2のシードを生成する、シード生成回路と、前記第1のシードに対して第3のXorShift演算を行った演算結果と前記第2のシードに対して第4のXorShift演算を行った演算結果とを用いて第3の乱数列データを生成する、乱数生成回路と、を有する。
【図面の簡単な説明】
【0007】
【
図1】第1実施形態に関わる、メモリシステムとしての半導体記憶装置の概略構成例を示すブロック図である。
【
図2】第1実施形態に関わる不揮発性メモリのメモリセルアレイの構成を説明するための回路図である。
【
図3】第1実施形態に関わる、ランダマイザの構成を示すブロック図である。
【
図4】第1実施形態に関わる、インデックスデータのテーブルの例を示す図である。
【
図5】第1実施形態に関わる、各XorShiftの処理を示すプログラム例を示す図である。
【
図6】第1実施形態に関わる、入力データinが、XorShift32の処理によって出力データoutが生成される処理内容を示すデータ位置の変化を示す図である。
【
図7】第1実施形態に関わる、各S-boxの多項式に応じた変換テーブルの例を示す図である。
【
図8】第1実施形態に関わる、排他的論理和回路(XOR)の回路図である。
【
図9】第1実施形態の変形例に関わる、ランダマイザの構成を示すブロック図である。
【
図10】第2実施形態に関わる、ランダマイザのシード生成回路のS-box部の構成図である。
【
図11】第2実施形態に関わる、S-box_1の第1の多項式に応じた変換テーブルの例を示す図である。
【
図12】第2実施形態に関わる、S-box_2の第2の多項式に応じた変換テーブルの例を示す図である。
【
図13】第2実施形態に関わる、S-box_3の第3の多項式に応じた変換テーブルの例を示す図である。
【
図14】第2実施形態に関わる、S-box_4の第4の多項式に応じた変換テーブルの例を示す図である。
【
図15】第2実施形態に関わる、データQに対応する各スイッチのオン状態を規定するテーブルの例を示す図である。
【
図16】第2実施形態の変形例に関わる、データQのビット列に応じて、各スイッチのオン状態を規定する他のテーブルの例を示す図である。
【
図17】第3実施形態に関わるS-box部のブロック図である。
【
図18】第3実施形態に関わる、2つのS-box_11及びS-box13の多項式に応じた7ビット変換の変換テーブルの例を示す図である。
【
図19】第3実施形態に関わる、2つのS-box_12及びS-box14の多項式に応じた9ビット変換の変換テーブルの例を示す図である。
【
図20】第4実施形態に関わるランダマイザの構成を示すブロック図である。
【
図21】第4実施形態に関わる入れ替え回路の処理内容を説明するための図である。
【
図22】第5実施形態に関わる、ランダマイザの構成を示すブロック図である。
【
図23】第5実施形態に関わる、ビット反転の反転処理を説明するための図である。
【
図24】第5実施形態に関わる、バイト反転の反転処理を説明するための図である。
【
図25】第5実施形態に関わる、ワート反転の反転処理を説明するための図である。
【
図26】第6実施形態に関わる、ランダマイザの構成を示すブロック図である。
【
図27】第7実施形態に関わる、ランダマイザの構成を示すブロック図である。
【
図28】第8実施形態に関わる、ランダマイザの構成を示すブロック図である。
【
図29】第8実施形態の変形例に関わる、ランダマイザの構成を示すブロック図である。
【
図30】第8実施形態に関わる、排他的論理和回路における排他的論理和演算を説明するための図である。
【発明を実施するための形態】
【0008】
以下、図面を参照して実施形態を説明する。
(第1実施形態)
(メモリシステムの構成)
図1は、第1実施形態に関わる、メモリシステムとしての半導体記憶装置の概略構成例を示すブロック図である。
図1に示すように、半導体記憶装置1は、メモリコントローラ2と不揮発性メモリ3とがメモリバス4で接続されて構成されている。
【0009】
不揮発性メモリ3は、データを不揮発に記憶できる半導体メモリであり、たとえばNAND型フラッシュメモリ(以下、単にNANDメモリともいう)である。不揮発性メモリ3は、メモリセルアレイ3aを有し、メモリセルアレイ3aは、ロウ及びカラムに対応付けられた複数の不揮発性のメモリセルを含む複数のブロックBLKを備えている。NANDメモリでは、ブロックBLK毎に、所定の単位で、本実施形態ではページ単位で、データの書き込みおよび読み出しが実行される。すなわち、不揮発性メモリ3は、データをページ番号で指定される記憶位置に記憶する。よって、不揮発性メモリ3におけるデータの記憶位置を示す記憶位置データは、ページ番号を、又は、ページ番号及びページ番号に含まれるフレーム番号(後述する)を、含む。
【0010】
また、NANDメモリでは、ブロックBLK単位でデータの消去が実行される。NANDメモリを不揮発性メモリ3に用いた場合、そのメモリセルは、1ビットの記憶が可能なシングルレベルセルであってもよいし、2ビット以上の記憶が可能なマルチレベルセルであってもよい。
【0011】
メモリコントローラ2は、パーソナルコンピュータや携帯端末などの外部装置であるホストからの要求に応じて、不揮発性メモリ3へのデータの書き込み及び不揮発性メモリ3からのデータの読み出しを制御する。
図1に示すように、メモリコントローラ2は、コントローラ11と、RAM(Random Access Memory)12と、ホストインターフェース(以下、ホストI/Fという)13と、バッファメモリ14と、ECC(Error Check and Correction)回路15と、メモリインターフェース(以下、メモリI/Fという)16と、ランダマイザ17とが内部バス18を介して相互に接続された構成を備える。
【0012】
ホストI/F13は、ホストから受信した要求や、書き込みデータ(以下、データユーザという)などを内部バス18に出力する。また、ホストI/F13は、不揮発性メモリ3から読み出されたユーザデータやコントローラ11からの応答などをホストへ送信する。
【0013】
メモリI/F16は、コントローラ11からの指示に基づいて、ユーザデータを不揮発性メモリ3への書き込むための各種制御信号及びユーザデータを出力する出力処理と、不揮発性メモリ3からのユーザデータを受信する受信処理を実行する。
【0014】
コントローラ11は、半導体記憶装置1を統括的に制御する。コントローラ11は、たとえばCPU(Central Processing Unit)、MPU(Micro Processing Unit)等である。コントローラ11は、ホストからホストI/F13経由で各種要求を受信すると、その受信した要求に従って、メモリコントローラ2内の各部を制御する。例えば、コントローラ11は、ホストからのデータの書き込み要求に従い、不揮発性メモリ3へのユーザデータの書き込みをメモリI/F16へ指示する。また、コントローラ11は、ホストからのデータの読み出し要求に従い、不揮発性メモリ3からのユーザデータの読み出しをメモリI/F16へ指示する。
【0015】
コントローラ11がホストからの書き込み要求を受信した場合、ホストI/F13によりホストから書き込みデータとして受信されたユーザデータは、一時的にバッファメモリ14に蓄積される。コントローラ11は、バッファメモリ14に蓄積されたユーザデータの不揮発性メモリ3の格納領域(すなわち記憶位置)を決定し、この決定された格納領域内にユーザデータを書き込むことをメモリI/F16に指示する。
【0016】
一方、コントローラ11は、ホストからの読み出し要求を受信した場合、読み出し要求に含まれるアドレスに基づいてユーザデータの読み出しをメモリI/F16へ指示する。不揮発性メモリ3から読み出されたユーザデータは、一時的にバッファメモリ14に蓄積された後、ホストI/F13を介してホストへ送信される。
【0017】
バッファメモリ14は、不揮発性メモリ3に対する書き込み/ 読み出しの際にユーザデータ等を一時的に格納する。バッファメモリ14は、たとえばSRAM(Static Random Access Memory)やDRAM(Dynamic Random Access Memory)などの揮発性メモリである。
【0018】
ECC回路15は、たとえば誤り訂正機能を備えた符号化/ 復号化回路であり、不揮発性メモリ3へ書き込むユーザデータをBCH符号などの誤り訂正符号で符号化し、また、不揮発性メモリ3から読み出された符号化されたユーザデータを復号化して元のユーザデータを生成する。
【0019】
ランダマイザ17は、不揮発性メモリ3に書き込まれるユーザデータをランダマイズし、ECC回路15に送る。ランダマイザ17は、不揮発性メモリ3に記憶されるデータが一様乱数となるように、擬似乱数を生成する乱数生成部17aを有する。乱数生成部17aは、XorShift処理を実行するためのビットシフトを行う複数のビットシフト回路BSと、ビット毎の排他的論理和(XOR)演算を行う複数の排他的論理和回路(以下、XORと略す)を含んで構成されている。乱数生成部17aの構成については後述する。
【0020】
不揮発メモリへ3の書き込み時に、ECC回路15はランダマイズされたユーザデータを符号化する。また、不揮発性メモリ3からの読み出し時に、ユーザデータは、ECC回路15により復号化された後、ランダマイザ17に送られる。ランダマイザ17は、ランダマイズされたユーザデータのランダマイズを解除して元のユーザデータに復元する。
【0021】
具体的には、半導体記憶装置1は、データの書き込みの場合、ホストからのユーザデータとアドレスデータを受信すると、メモリコントローラ2のランダマイザ17は、ユーザデータの書き込み先となる不揮発性メモリ3におけるページ番号等に基づいて擬似乱数である乱数列データを生成する。ランダマイザ17は、その生成された乱数列データを用いて、ユーザデータをランダマイズする。ランダマイズされたユーザデータは、ECC回路15において符号化され、メモリコントローラ2から不揮発性メモリ3に出力される。ランダマイズされたユーザデータは、ホストからのアドレスデータで指定されたアドレス(ホストの論理アドレスから変換された不揮発性メモリ3の物理アドレス)に応じたページに記憶される。
【0022】
半導体記憶装置1は、データの読み出しの場合、ホストからのアドレスデータを受信すると、ランダマイザ17は、ユーザデータの読み出し先となる不揮発性メモリ3のページ番号等に基づいて擬似乱数である乱数列データを生成する。乱数列データはページ番号などに応じて、一意に決定される。よって、ホストから2つのアドレスデータAD1、AD2を受信した場合に、アドレスデータAD1とAD2が同じならば、不揮発性メモリ3のページ番号などは同一となるため、アドレスデータAD1に基づいて生成された乱数列データと、アドレスデータAD2に基づいて生成された乱数列データとは一致する。
【0023】
メモリコントローラ2は、ホストからのアドレスデータで指定されたアドレスに応じた不揮発性メモリ3のページから、ランダマイズされたユーザデータを読み出し、ECC回路15において復号化する。メモリコントローラ2は、生成された乱数列データを用いて、不揮発性メモリ3からのランダマイズされたユーザデータのラインマイズを解除して、ランダマイズされたユーザデータから元のユーザデータを復元し、その復元されたユーザデータをホストへ出力する。
【0024】
なお、ユーザデータをECC回路15において符号化し、その符号化されたユーザデータをランダマイズし、そのランダマイズされた符号化データを不揮発性メモリ3に記憶するようにしてもよい。その場合、ユーザデータの読み出しは、不揮発性メモリ3から読み出されたランダマイズされたデータのランダマイズを解除した後に、その解除されたユーザデータに対してECC回路15において誤り訂正が行われる。
(不揮発性メモリの構成)
次に、不揮発性メモリ3の構成について
図2を用いて説明する。
図2は、本実施形態に関わる不揮発性メモリ3のメモリセルアレイの構成を説明するための回路図である。本例では、図示するように、1つのブロックBLKは例えば4つのストリングユニットSU(SU0~SU3)を含む。また各々のストリングユニットSUは、複数のNANDストリングNSを含む。
【0025】
NANDストリングNSの各々は、例えば8個のメモリセルトランジスタMT(MT0~MT7)及び2個の選択トランジスタST1、ST2を含んでいる。各メモリセルトランジスタMTは、制御ゲートと電荷蓄積層とを備え、データを不揮発に保持する。そして複数(例えば8個)のメモリセルトランジスタMTは、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に直列接続されている。
図2は、説明を簡単にするために、1つのストリングユニットSUが8本のワード線WLを有する例を示している。
【0026】
ストリングユニットSU0~SU3の各々における選択トランジスタST1のゲートは、それぞれセレクトゲート線SGD0~SGD3に接続される。これに対してストリングユニットSU0~SU3の各々における選択トランジスタST2のゲートは、例えばセレクトゲート線SGSに共通接続される。もちろん、ストリングユニットSU0~SU3の各々における選択トランジスタST2のゲートは、ストリングユニット毎に異なるセレクトゲート線SGS0~SGS3に接続されても良い。また、同一のブロックBLK内にあるメモリセルトランジスタMT0~MT7の制御ゲートはそれぞれワード線WL0~WL7に共通接続される。
【0027】
また、メモリセルアレイ3a内において同一列にある複数のNANDストリングNSの選択トランジスタST1のドレインは、ビット線BL(BL0~BL(K-1)、但しKは2以上の自然数)に共通接続される。すなわちビット線BLは、複数のブロックBLK間で複数のNANDストリングNSを共通に接続する。更に、複数の選択トランジスタST2のソースは、ソース線SLに共通に接続されている。
【0028】
つまり、メモリセルアレイ3aは、各ビット線BLが共通に接続された複数のブロックBLKの集合体である。また、各ブロックBLKは、各ワード線WLを共通にする複数のストリングユニットSUを複数含む。各ストリングユニットSUは、互いに異なる複数のビット線BLに接続され、且つ同一のセレクトゲート線SGDに接続された複数のNANDストリングNSを含む。
【0029】
不揮発性メモリ3は、メモリセルアレイ3aの他に、図示しない、ロウデコーダ、ドライバ回路、カラムデコーダ、アドレスレジスタ、コマンドレジスタ、及びシーケンサ等を備える。シーケンサが、コマンドレジスタに保持されたコマンドに基づき、不揮発性メモリ3全体の動作を制御することにより、メモリセルアレイ3aへのデータの書き込み処理及びメモリセルアレイ3aからのデータの読み出し処理を行う。
【0030】
本例では、1つのメモリセルトランジスタMTが例えば3ビットデータを保持可能である。すなわち、不揮発性メモリ3は、いわゆるTLC(Triple Level Cell)方式の半導体記憶装置である。この3ビットデータを、下位ビットからそれぞれ下位(Lower)ビット、中位(Middle)ビット、及び上位(Upper)ビットと呼ぶことにする。そして、一つのストリングユニット中の同一のワード線WLに接続された複数のメモリセルトランジスタMTの保持する下位ビットの集合を下位ページと呼び、中位ビットの集合を中位ページと呼び、上位ビットの集合を上位ページと呼ぶ。一つのストリング中の一つのワード線に接続された複数のメモリセルトランジスタMTは、下位、中位及び上位ビットを保持する一つのページユニットを構成する。つまり、各ページユニットには、3ページが割り当てられる。データの書き込みは、ページユニット単位で行われ、データの読み出しは、このページ毎に行われる。
(ランダマイザの構成)
図3は、ランダマイザ17の構成を示すブロック図である。ランダマイザ17は、擬似乱数(以下、単に乱数ともいう)を生成して、データをランダマイズする回路である。メモリコントローラ2は、ランダマイザ17で生成された乱数列データを用いてユーザデータをランダマイズして不揮発性メモリ3に記憶する。
【0031】
上述したように、ランダマイザ17は、XorShiftを具備した乱数生成部17aを含む。本実施形態では、乱数生成部17aに含まれるXorShiftは、32ビットの乱数列データを生成するXorShift32の回路である。各XorShiftは、排他的論理和(XOR)演算を行う複数のXORと、複数のビットシフト回路BSから構成される。ここでは、ランダマイザ17は、64ビット毎にユーザデータをランダマイズする。
【0032】
図3に示すように、乱数生成部17aは、シード生成部SGと、乱数生成回路RGを有する。シード生成回路SGは、入力されたデータからXorShift演算により生成した第1の乱数列データを用いてシードを生成する。乱数生成回路RGは、そのシードを入力してXorShift演算により第2の乱数列データを生成する。すなわち、シード生成回路SGは、XorShift演算によりシードを生成し、乱数生成回路RGは、生成されたシードからXorShift演算により乱数列データを生成する。
【0033】
シード生成回路SGは、複数(ここでは5つ)のXorShift21、23a、23b、23c、23dと、複数(ここでは4つ)のS-box22(22a、22b、22c、22d)を含むS-box部22を有する。以下、4つのS-box22a、22b、22c、22dの全部又はそれぞれを指すときは、S-box22と略し、4つのXorShift23a、23b、23c、23dの全部又はそれぞれを指すときは、XorShift23と略す。各S-box22は、入力されたデータに対して非線形変換を行う非線形変換回路である。すなわち、シード生成回路SGは、複数のXorShift23と、複数のXorShift23の少なくとも1つの出力データに対して非線形変換を行う少なくとも1つのS-box23と、を含み、乱数列データであるシードは、複数のXorShift23と、少なくとも1つのS-box23を用いて生成される。
【0034】
なお、シード生成回路SGは、複数(ここでは5つ)のXorShift回路を有しているが、複数のXorShift演算を所定の順番に実行するようにすれば、1つでも、あるいは2つ、3つでもよい。
【0035】
乱数生成回路RGは、複数(ここでは4つ)のXorShift24a、24b、24c、24dと、複数(ここでは2つ)のXOR25a、25bと、を含む回路である。
【0036】
本実施形態では、シード生成回路SGは、生成される乱数列データの線形性あるいは周期性を、より無くすために複数のS-box22を用いているが、複数のS-box22を有さなくてもよい。
【0037】
なお、
図3では、ランダマイザ17は、9個のXorShiftを含んでいるが、実行の順番を考慮することにより、より少ない数のXorShiftを用いて、同等のXorShift演算を実現することができる。
【0038】
ホストから指定されるデータの格納先アドレスは、論理アドレスであり、メモリコントローラ2では、その論理アドレスを不揮発性メモリ3の物理アドレスに変換して、データの書き込み及び読み出しを行う。物理アドレスは、メモリセルアレイ3aのページ(あるいは、後述するようにページと、そのページにおけるフレーム番号)に対応する。よって、メモリコントローラ2は、メモリセルアレイ3aに対してページを指定してデータの書き込み及び読み出しを行う。
【0039】
例えば、メモリセルアレイ3aに対するデータの書き込みは、ページユニット単位で行われ、メモリセルアレイ3aからのデータの読み出しは、ページ単位で行われる。
【0040】
なお、ユーザデータの書き込み及び読み出し処理は、1ページを所定の単位で分割した分割ページ単位すなわちフレーム単位で行われる場合もある。その場合、物理アドレスは、メモリセルアレイ3aのページと、そのページにおけるフレームとに対応する。
【0041】
なお、以下に説明する本実施形態では、メモリコントローラ2は、1つのページを複数(ここでは4つ)のフレームに分割して、その分割されたフレーム単位で、データの書き込み及び読み出しを行う場合を説明する。
【0042】
シード生成回路SGには、ホストからのアドレスデータに対応して予め設定されたインデックスが入力される。インデックスは、ここではインデックス番号である。後述するように、インデックス番号は、不揮発性メモリ3の格納先アドレスを示すページとフレームに対応して予め設定される。インデックス番号は、不揮発性メモリ3の格納先アドレス(すなわち記憶位置)に対応している。よって、シード生成回路SGは、データの不揮発性メモリ3における記憶位置を示す記憶位置データ(ページとフレーム)から、XorShift演算を用いて生成した乱数列データであるシードを生成する。
【0043】
図4は、インデックスデータのテーブルTBLの例を示す図である。テーブルTBLは、メモリシステムの起動時に、不揮発性メモリ3の所定の記憶領域から読み出されて、RAM12に格納される。
【0044】
例えば、1ページが16KB(キロバイト)のデータであるとき、1ページが16KBのデータは、4つのフレームに分割される。各フレームは、4KBデータである。テーブルTBLは、ワード線WL毎のページ(L,M,U)と、ストリングユニットSU毎のフレーム(Frame0,Frame1,Frame2,Frame3)とに応じたインデックス番号INを格納したテーブルである。
【0045】
図4では、4つのストリングユニットSU0(String0)~SU3(String3)のそれぞれにおける、ワード線WL毎のページとストリングユニット毎のフレームとに応じて、インデックス番号INが設定されている。ワード線WLは、例えば96本あり、各ワード線WLには、上位、中位及び下位の3ページが割り当てられている。
【0046】
ホストからのデータの書き込み又は読み出しの要求を受信すると、メモリコントローラ2のコントローラ11は、ホストからの要求に関わるアドレスデータから、メモリセルアレイ3aのページとフレームを特定する。コントローラ11は、特定したページとフレームから、RAM12中のテーブルTBLを参照して、その特定したページとフレームに対応するインデックス番号INを抽出し、ランダマイザ17に供給する。
【0047】
図3に示すように、インデックス番号INは、バイナリデータとして、XorShift21に入力される。XorShift21は、インデックス番号INに基づき乱数列データを生成する。XorShift21は、その後、その生成した乱数列データに基づき2回目の乱数列データの生成を行う。さらに、XorShift21は、その後、その生成した乱数列データに基づき3回目の乱数列データの生成を行う。すなわち、XorShift21は、インデックス番号INに基づいて生成した乱数列データを出力せずに、その生成した乱数列データに基づく乱数列データの生成を実行し、さらにその生成した乱数列データに基づく乱数列データの生成を実行する。すなわち、XorShift21は、乱数列データの生成を3サイクル実行し、最初の2サイクルでは生成した乱数列データを出力せず、3回目に生成された乱数列データを出力する。言い換えれば、XorShift21は、2回の空回しの乱数列データの生成を行った後に、3回目に生成された乱数列データを出力する。
【0048】
図3において、各XorShiftにおけるm0,m1~m4は、この乱数列データの生成を行う生成回数を示す。よって、XorShift21のm0は、3である。
【0049】
出願人の行った検定によれば、本実施形態では、各XorShiftは、32ビットデータを処理するため、この空回しの回数あるいは乱数データの生成回数は、それぞれ2回あるいは3回で、十分な乱数列データが生成された。
【0050】
なお、本例では、各XorShiftが処理するデータは、32ビットデータであるため、空回し回数は、2回あるいは3回であるが、各XorShiftが処理するデータのビット数が異なれば、空回し回数も異なる。
【0051】
図5は、各XorShiftの処理を示すプログラム例を示す図である。
図6は、入力データinが、XorShift32の処理によって出力データoutが生成される処理内容を示すデータ位置の変化を示す図である。
【0052】
図5及び
図6に示すように、XorShiftは、32ビットの入力データinを、5ビットだけ左シフトするビットシフト処理を行い、5ビット左シフトされた入力データinのシフトデータ(in<<5)と、元の入力データinとの排他的論理和(XOR)をとって、出力データtmp1を得る。
【0053】
例えば、入力データであるインデックス番号INが16ビットデータで表されるとき、インデックス番号INは、例えば16個の「0」が上位ビットに追加されて32ビットデータに変換されて、ランダマイザ17に入力される。
【0054】
次に、XorShiftは、32ビットの出力データtmp1を、17ビットだけ右シフトするビットシフト処理を行い、17ビットだけ右シフトされた出力データtmp1のシフトデータ(tmp1>>17)と、元の出力データtmp1との排他的論理和(XOR)をとって、出力データtmp2を得る。
【0055】
さらに、XorShiftは、32ビットの出力データtmp2を、13ビットだけ左シフトするビットシフト処理を行い、13ビットだけ左シフトされた出力データtmp2(tmp2<<13)と、元の出力データtmp2との排他的論理和(XOR)をとって、出力データoutを得て出力する。
【0056】
32ビットの出力outは、4つのS-box22a、22b、22c、22dと、2つのXorShift23a、23bとへ供給される。
【0057】
各S-box22は、8ビット入力に対して8ビット出力を行う回路であり、AES(Advanced Encryption Standard)に準拠したラインダールの既約多項式を用いた非線形変換を行う。各S-box22は、入力データをガロア体GF(256)演算により逆元変換を行うテーブルを含み、非線形変換処理を実行する。32ビットデータを同時にデータ変換するために、4つのS-box22a、22b、22c、22dが設けられている。ここでは、各S-box22は、1バイトデータの入力に対して、非線形変換を行って、1バイトデータを出力する。4つのS-box22a、22b、22c、22dを用いることにより、32ビットの乱数列データが生成されて出力される。
図7は、各S-box22の多項式に応じた変換テーブルの例を示す図である。
【0058】
以上のように、4つのS-box22a、22b、22c、22dには、XorShift21の32ビットの出力(乱数列データ)が入力され、32ビット中の8ビット毎のデータが、4つのS-box22a、22b、22c、22dに入力される。具体的には、最上位の8ビットデータがS-box22aに入力され、最上位の8ビットの次の下位の8ビットデータがS-box22bに入力され、最下位の8ビットの次の上位の8ビットデータがS-box22cに入力され、最下位の8ビットデータがS-box22dに入力される。
【0059】
上述したように、S-boxを用いているのは、S-boxによる非線形性の効果を乱数生成部17aにおいて生じさせるためである。S-box部22の出力は、XorShift23c、23dに入力され、そのXorShift23c、23dの出力をシードの一部として用いて、乱数生成回路RGに供給される。
【0060】
XorShift21の32ビットの出力の下位16ビットデータは、XorShift23aに入力され、XorShift21の32ビットの出力の上位16ビットデータは、XorShift23bに入力される。
【0061】
XorShift23aは、XorShift21の出力の下位16ビットデータを用いて、m1回(ここでは、m1=4)の乱数列データの生成を行って32ビットの出力データを生成し、XorShift23bも、XorShift21の出力の上位16ビットデータを用いて、m2回(ここでは、m2=4)の乱数列データの生成を行って32ビットの出力データを生成する。
【0062】
S-box部22の下位16ビットデータは、XorShift23cに入力され、S-box部22の上位16ビットデータは、XorShift23dに入力される。
【0063】
XorShift23cは、S-box部22の下位16ビットデータを用いて、m3回(ここでは、m3=4)の乱数列データの生成を行って32ビットの出力データを生成し、XorShift23dも、S-box部22の上位16ビットデータを用いて、m4回(ここでは、m4=4)の乱数列データの生成を行って32ビットの出力データを生成する。
【0064】
4つのXorShift23a、23b、23c、23dの4つの出力データが、シードとして、それぞれ、乱数生成回路RGの4つのXorShift24a、24b、24c、24dに供給される。具体的には、XorShift23aの32ビットの出力データは、XorShift24aに供給され、XorShift23bの32ビットの出力データは、XorShift24bに供給され、XorShift23cの32ビットの出力データは、XorShift24cに供給され、XorShift23dの32ビットの出力データは、XorShift24dに供給される。
【0065】
以上のように、シード生成回路SGの複数のXorShiftは、入力されたデータに対してXorShift演算を行うXorShift21と、XorShift21と非線形変換回路(S-box)の両方からの出力データを処理してシードを生成する複数のXorShift23を含む。
【0066】
なお、ここでは、XorShift21の32ビットの出力データを、そのまま上位側16ビットと下位側16ビットに分割して、それぞれXorShift23a、23bに供給しているが、XorShift21の32ビットの出力データの偶数番目データと奇数番目データとに分離して、それぞれXorShift23a、23bに供給するようにしてもよい。
【0067】
乱数生成回路RGは、シード生成回路SGからのシードを入力し、そのシードに対するXorShift演算により、乱数列データを生成する。乱数生成回路RGの4つのXorShift24a、24b、24c、24dの各々は、入力された32ビットデータに対する乱数列データの生成を行って、出力データを出力する。各XorShift24において、XorShift演算による乱数列データを出力する所定回数は、スクランブルするユーザデータのデータ長(ビット数)を、64で除算した回数である。
【0068】
図3に示すように、XorShift24aの出力データとXorShift24cの出力データは、XOR25aに供給される。XOR25aは、XorShift24aの出力データとXorShift24cの出力データとのビット毎の排他的論理和(XOR)を取って、32ビットの出力データを出力する。XorShift24aとXorShift24cは、それぞれ出力データを所定回数分、出力し、その出力の度にXOR25aにおいて、XorShift24aの出力データとXorShift24cの出力データとのビット毎の排他的論理和(XOR)演算の結果が出力される。
【0069】
同様に、XorShift24bの出力データとXorShift24dの出力データは、XOR25bに供給される。XOR25bは、XorShift24bの出力データとXorShift24dの出力データとのビット毎の排他的論理和(XOR)を取って、32ビットの出力データを出力する。XorShift24bとXorShift24dは、それぞれ出力データを所定回数分、出力し、その出力の度にXOR25bにおいて、XorShift24bの出力データとXorShift24dの出力データとのビット毎の排他的論理和(XOR)演算の結果が出力される。
【0070】
XOR25a、25bの32ビットの2つの出力データは、連結(concatenate)されて、64ビット化されて、乱数生成回路RGの乱数列データ出力として、XOR26に出力される。
【0071】
以上のように、乱数生成回路RGは、複数のXorShift24の演算結果に対して排他的論理和(XOR)演算を行うことにより乱数列データを生成する。
【0072】
図8は、XOR26の回路図である。XOR26は、ユーザデータの内の64ビットのデータと、2つのXOR25a、25bからの64ビットのデータとが入力され、ビット毎に排他的論理和(XOR)演算された64ビットの出力データOUTを出力する。出力データOUTは、64ビットのユーザデータが、乱数生成回路RGにおいて生成された乱数列データでランダマイズされたユーザデータである。
【0073】
ランダマイザ17は、ユーザデータを64ビット毎に分割し、XOR26において、64ビット単位でユーザデータと乱数列データとの排他的論理和(XOR)を取った出力データOUTを、サイクル毎に生成する。すなわち、XOR26は、排他的論理和演算(XOR)の演算結果を1サイクル毎に生成して出力する。
【0074】
よって、XorShift24aから24dは、所定回数として、ユーザデータのビット数を64ビットで割った回数分だけ、同じ出力データをXOR25a、25bへ出力するように動作する。例えば、1フレームが4KBのデータであれば、所定回数は、32000/64である。
【0075】
その結果、ユーザデータが不揮発性メモリ3に書き込まれるとき、ユーザデータは、アドレスに基づいて算出された乱数列データを用いてスクランブル(すなわちランダマイズ)されて、不揮発性メモリ3に格納される。ユーザデータが不揮発性メモリ3から読み出されるとき、不揮発性メモリ3からのランダマイズされたユーザデータは、アドレスに基づいて算出された乱数列データを用いて逆スクランブルされて、元のユーザデータに復元される。乱数列データは、アドレスに基づいて生成されるため、書き込み時に生成された乱数列データと、読み出し時に生成される乱数列データは、同じになる。よって、書き込み時に生成された乱数列データと同じ乱数列データが、読み出し時にも再現される。
【0076】
以上のように、本実施形態によれば、XorShift演算により乱数列データを生成しているため、乱数生成回路が生成する乱数列データのデータサイズの拡張性が高く、かつ乱数生成回路の回路規模も小さくすることができる。
【0077】
例えば、CRC32の場合、乱数周期は(232-1)であるが、NANDメモリなどの不揮発性メモリのアドレス空間に対しては、CRC32では、乱数空間は将来不足する虞がある。しかし、上述した実施形態によれば、乱数列データのデータサイズの拡張性が高いので、より長い乱数周期を実現することができ、かつ乱数性能も高い。
【0078】
特に、本実施形態では、ランダマイザ17は、ページとフレームなどに応じて割り振られたインデックス番号INを入力データとして乱数列データを生成するので、シードテーブルを有する必要がない。
【0079】
公知の線形帰還シフトレジスタ(LFSR(Linear Feedback Shift Register))を用いた乱数生成器あるいはCRC32を半導体メモリに搭載した場合は、1サイクルで出力できるビット数が限られてしまうが、本実施形態によれば、1サイクルで出力できるビット数を多くできるので、データサイズの拡張性が高いランダマイザを実現することができる。また、遅れフィボナッチ乱数生成器の場合、初期化に多くのビット数が必要であるため、初期化回路の回路規模も大きくなるが、本実施形態の場合、初期化回路の回路規模を小さくすることができる。
【0080】
なお、上述した乱数生成回路RGでは、4つのXorShift23a、23b、23c、23dの4つの出力データ(シード)が、4つのXorShift24a、24b、24c、24dに供給され、4つのXorShift24a、24b、24c、24dの出力データに対する、2つのXOR25a、25bによる排他的論理和(XOR)演算を行うことによって、2つの32ビットの出力データを得て、その2つの32ビットの出力データを結合することによって、最終的な64ビットの乱数列データを生成しているが、4つのXorShift23a、23b、23c、23dの4つの出力データを2つのXORにより排他的論理和をとって、2つの32ビットの出力データを得て、その2つの32ビットの出力データを2つのXorShiftに入力して2つの32ビットの出力データを得るようにしてもよい。
【0081】
図9は、本実施形態の変形例に関わる、ランダマイザ17xの構成を示すブロック図である。
図9に示すように、ランダマイザ17xの乱数生成回路RGでは、2つのXorShift23a、23cの2つの出力データに対してXOR25axによる排他的論理和(XOR)演算を行うことによって、1つの32ビットの出力データを得て、XorShift24axに供給され、2つのXorShift23b、23dの2つの出力データに対してXOR25bxによる排他的論理和(XOR)演算を行うことによって、1つの32ビットの出力データを得て、XorShift24bxに供給されている。2つのXorShift24ax、24bxの2つの出力データは結合されて、最終的な64ビットの乱数列データが生成される。
【0082】
すなわち、乱数生成回路RGは、複数のXorShift23の演算結果に対して排他的論理和(XOR)演算を行い、その排他的論理和(XOR)演算の演算結果に対してXorShiftを行うことにより乱数列データを生成する。
【0083】
本変形例によれば、ランダマイザ17xは、乱数生成回路RGのXorShiftの回路が半分となり、ランダマイザ17よりも構成は簡素化され、第1実施形態と同等の効果を得ることができる。
【0084】
また、上述した実施形態では、各XorShiftは、同じビットシフト量のXorShift32を用い、XOR25a、25bも32ビットの入出力を有しているが、上述したXorShift32以外のXorShiftを用いてもよい。
【0085】
例えば、複数のXorShiftとして、互いにビットシフト量が異なる複数のXorShiftを用いてもよい。あるいは、使わないビットデータが発生しても、XorShift48,XorShift55等のより大きなビット幅データを扱うXorShiftを用いてもよい。さらにあるいは、XorShift8,XorShift16、XorShift24などの、扱うビット幅が小さな複数のXorShiftを組み合わせて用いるようにしてもよい。
(第2実施形態)
第1実施形態のシード生成回路RGは、各々が同じ非線形変換処理を実行する複数(上記の例では4つ)のS-boxを用いているが、本第2実施形態では、シード生成回路RGは、互いに異なる非線形変換処理を実行する複数のS-boxを用いている。すなわち、第1実施形態の非線形変換回路は、同一の種類の非線形変換を行う複数のS-boxを有するが、本第2実施形態の非線形変換回路は、互いに異なる複数の種類の非線形変換を行う複数のS-boxを有する。
【0086】
第2実施形態の半導体装置、メモリコントローラ及びランダマイザの構成は、上述した第1実施形態(変形例を含む)の半導体記憶装置1、メモリコントローラ2及びランダマイザ17の構成と略同じであるため説明は省略し、同じ構成要素についても同じ符号を用いて、説明は省略し、異なる構成についてのみ説明する。
【0087】
図10は、本実施形態に関わる、ランダマイザ17のシード生成回路RGのS-box部22Aの構成図である。S-box部22Aは、複数(ここでは4つ)のサブS-box部22Aa~22Adを有する。各サブS-box部22Aa~22Adは、複数(ここでは4つ)のS-box_1~S-box_4を含む。複数のサブS-box部22Aa~22Adが、
図3の各S-box22a~22dに代えて、シード生成回路RGに設けられる。すなわち、シード生成回路RGは、
図10のS-box部22Aを4つ有している。S-box_1~S-box_4は、互いに異なる多項式を用いた非線形変換を行う。
【0088】
4つのS-box部22Aには、XorShift21からの32ビットデータが入力される。各S-box部22Aには、XorShift21からの32ビット中の8ビットデータが入力される。すなわち、XorShift21からの32ビットデータが、8ビット毎に上位ビットから順番に入力される。
【0089】
S-box_1は、第1の多項式(x8+x4+x3+x+1)による非線形変換を行う。S-box_2は、第2の多項式(x8+x6+x5+x3+1)による非線形変換を行う。S-box_3は、第3の多項式(x8+x4+x3+x2+1)による非線形変換を行う。S-box_4は、第4の多項式(x8+x7+x6+x5+x4+x2+1)による非線形変換を行う。
【0090】
図11は、S-box_1の第1の多項式に応じた変換テーブルの例を示す図である。
図12は、S-box_2の第2の多項式に応じた変換テーブルの例を示す図である。
図13は、S-box_3の第3の多項式に応じた変換テーブルの例を示す図である。
図14は、S-box_4の第4の多項式に応じた変換テーブルの例を示す図である。
【0091】
図10に示すように、S-box部22Aの出力は、スイッチ部31に供給される。スイッチ部31は、4つのS-box_1~S-box_4のそれぞれに対応したスイッチ31A,31B,31C,31Dを含む。さらに、スイッチ部31は、スイッチ31Aと31Bの出力の排他的論理和(XOR)演算を行うXOR32Aと、スイッチ31Cと31Dの出力の排他的論理和(XOR)演算を行うXOR32Bと、XOR32Aの出力とXOR32Bの出力の排他的論理和(XOR)演算を行い、出力データYを出力するXOR32Cと有する。
【0092】
スイッチ31Aから31Dの入力は、それぞれS-box_1~S-box_4に接続されている。各スイッチ31Aから31Dのオン・オフは、スイッチ制御部33からの切り替え制御信号に基づいて、入力データXを所定の非線形変換した出力データYを出力するように制御される。
【0093】
スイッチ制御回路33には、XorShift21の出力する32ビットデータの下位4ビットのデータQに基づいて、各スイッチ31Aから31Dへの所定の切り替え制御信号を出力する。各スイッチ31Aから31Dのオン・オフの切り替えは、所定のルールに基づいて行われる。
【0094】
図15は、データQに対応する各スイッチ31Aから31Dのオン状態を規定するテーブルTBL1の例を示す図である。スイッチ制御部33は、テーブルTBL1に基づいて、4ビットの各ビットが1であるか否かに応じて、オン状態にするように各スイッチ31Aから31Dを制御する。テーブルTBL1では、最下位ビットQ[0]が1であるとき、S-Box_1の出力Aを出力するように、スイッチ31Aがオンされることを示している。すなわち、XorShift21の出力する32ビットデータの下位4ビットデータQに各ビットに、各スイッチ31Aから31Dのオン・オフ状態が割り当てられている。
【0095】
4つのS-box部22Aの各々が、XorShift21の出力する32ビットデータ中の対応する8ビットデータに対して、同様に、下位4ビットデータQに基づいて、各スイッチ31Aから31Dへの所定の切り替え制御信号を出力することにより、生成されるシードの非線形性をより大きくすることができる。
【0096】
なお、上述した例では、各スイッチ31Aから31Dのオン・オフ状態は、XorShift21の出力する32ビットデータの下位4ビットのデータQに各ビットに割り当てられているが、データQのデータ列に応じて、各スイッチ31Aから31Dのオン・オフ状態の組み合わせを割り当てるようにしてもよい。
【0097】
図16は、第2実施形態の変形例に関わる、データQのビット列に応じて、各スイッチ31Aから31Dのオン状態を規定する他のテーブルTBL2の例を示す図である。スイッチ制御回路33は、テーブルTBL2に基づいて、4ビットの組み合わせすなわちビット列に応じて、4つのスイッチ31Aから31Dの各々のオン状態を制御する。テーブルTBL2では、例えば、4ビットのデータQが、データ列[0000]のときは、スイッチ31Aのみをオンにし、4ビットのデータQが、データ列[1010]のときは、スイッチ31A、31B、31Cをオンにすることを示している。すなわち、XorShift21の出力する32ビットデータの下位4ビットデータQの組み合わせに応じて、各スイッチ31Aから31Dのオン・オフ状態が割り当てられている。
【0098】
図16のようなテーブルTBL2を用いても、生成されるシードの非線形性をより大きくすることができる。
図16の場合、データQに応じて、15通りのスイッチの状態を生成することができる。
【0099】
以上のように、本実施形態によれば、第1実施形態と同様の効果に加えて、生成されるシードの非線形性をより大きくすることができる。
(第3実施形態)
第1実施形態のシード生成回路RGの各S-boxは、1つのガロア体GF(256)の逆元変換をするため1種類のS-boxを用いているが、本第3実施形態では、シード生成回路RGは、2種類のガロア体GFの逆元変換をするため2種類のS-boxを用いている。
【0100】
第3実施形態の半導体装置、メモリコントローラ及びランダマイザの構成は、上述した第1実施形態(変形例を含む)の半導体記憶装置1、メモリコントローラ2及びランダマイザ17の構成と略同じであるため説明は省略し、同じ構成要素についても同じ符号を用いて、説明は省略し、異なる構成についてのみ説明する。
【0101】
第1実施形態では、シード生成回路SGのS-box部は、32ビットの出力データのために、各々が8ビット入力で8ビット出力の同じ非線形変換を行う4つのS-box(テーブルTBL)を有しているが、本実施形態では、シード生成回路SGは、32ビットの出力データのために、各々が16ビット入力で16ビット出力をする2つのS-box部を有し、各S-box部は、7ビット入力で7ビット出力の非線形変換を行うS-boxと、16ビット入力で16ビット出力の非線形変換を行うS-boxを有している。すなわち、複数のS-box部は、互いに出力するビット数が異なる少なくとも2つのS-box回路を含む。
【0102】
図17は、本実施形態のS-box部のブロック図である。S-box部22Bは、2つのサブS-box部41a、41bを有する。サブS-box部41aは、データ分離器42aと、S-box_11、S-box_12を有する。サブS-box部41bは、データ分離器42bと、S-box_13、S-box_14を有する。S-box_11とS-box_13は、同じ非変換処理を行う。S-box_12とS-box_14は、同じ非変換処理を行う。
【0103】
2種類のガロア体GF(2n)とGF(2m)を用いて、(n+m)ビットへ変換することが出来る。ここで、n、mは、正の整数である。例えば、GF(128)とGF(512)の場合、GF(128)は、(X7+x+1)の既約多項式によるS-boxを用い、GF(512)は、(X9+X6+X4+X3+1)の既約多項式によるS-boxを用いる。すなわち、2種類のS-boxを用いて、16ビットの非線形変換を行うことができる。
【0104】
データ分離器42aには、XorShift21の32ビットの上位16ビットデータが入力される。データ分離器42aは、入力された上位16ビットデータの上位側7ビットデータと下位側9ビットデータに分離して、それぞれS-box_11とS-box_12に供給する。
【0105】
データ分離器42bには、XorShift21の32ビットの下位16ビットデータが入力される。データ分離器42bは、入力された下位16ビットデータの上位側7ビットデータと下位側9ビットデータに分離して、それぞれS-box_13とS-box_14に供給する。
【0106】
図18は、S-box_11及びS-box13の多項式に応じた7ビット変換の変換テーブルの例を示す図である。
図19は、S-box_12及びS-box14の多項式に応じた9ビット変換の変換テーブルの例を示す図である。
【0107】
S-box_11及びS-box13は、それぞれGF(128)に基づき生成された変換テーブルを有する。S-box_12及びS-box_14は、それぞれGF(512)に基づき生成された変換テーブルを有する。
【0108】
本実施形態によっても、第1実施形態と同様の効果を得ることができる。
(第4実施形態)
第1実施形態では、乱数生成回路で生成された乱数列データは、ユーザデータとのビット毎の排他的論理和(XOR)演算に、そのまま用いられているが、本実施形態では、乱数生成回路で生成された乱数列データを部分的に入れ替え、その入れ替えた乱数列データを、ユーザデータとのビット毎の排他的論理和(XOR)演算に用いる。
【0109】
第4実施形態の半導体装置、メモリコントローラ及びランダマイザの構成は、上述した第1実施形態の半導体記憶装置1、メモリコントローラ2及びランダマイザ17の構成と略同じであるため説明は省略し、同じ構成要素についても同じ符号を用いて、説明は省略し、異なる構成についてのみ説明する。
【0110】
図20は、本実施形態のランダマイザ17Aの構成を示すブロック図である。乱数生成回路RGは、乱数列データ中のデータ位置を入れ替える入れ替え回路51を有する。XOR25a、25bの32ビットの2つの出力データは、連結されて64ビット化されて、入れ替え回路51に入力される。
【0111】
図21は、入れ替え回路51の処理内容を説明するための図である。入れ替え回路51は、入力されたビット列データを、所定のルールに従って部分的に入れ替える処理を行う回路である。
図21では、64ビットデータは、6つの部分データDP1~DP6に分割され、各部分データの64ビット列中の位置が、入れ替え回路51の入れ替え処理により、入れ替わっている。
【0112】
データを書き込みと読み出しにおいて、同じ入れ替え処理が行われることにより、ランダマイズされたユーザデータは、元のユーザデータに正しく復元される。
【0113】
本実施形態によっても、第1実施形態と同様の効果を得ることができる。
(第5実施形態)
第1実施形態の乱数生成回路RGでは、シード生成回路SGからのデータはXorShift24aから24dにそのまま入力され、又はXOR25axと25bxからのデータはXorShift24ax、24bxに入力されるが、本実施形態では、乱数生成回路RGの2つのXorShiftの少なくとも一方に入力されるデータに対して、所定のビット操作が行われ、所定のビット操作が行われたデータが、2つのXorShiftの少なくとも一方に入力される。
【0114】
第5実施形態の半導体装置、メモリコントローラ及びランダマイザの構成は、上述した第1実施形態の半導体記憶装置1、メモリコントローラ2及びランダマイザ17の構成と略同じであるため説明は省略し、同じ構成要素についても同じ符号を用いて、説明は省略し、異なる構成についてのみ説明する。
【0115】
図22は、本実施形態に関わる、ランダマイザ17Bの構成を示すブロック図である。
図22のランダマイザ17Bは、
図9のランダマイザ17xに対応する。ここでは、2つのXorShiftの一方に入力されるデータに対して、所定のビット操作が行われる。
【0116】
図22では、XOR25axの出力はXorShift24axにそのまま入力されるが、XOR25bxの出力は、ビット列データをシャッフルする反転回路61に入力される。すなわち、2つのXOR25ax、25bxの一方の出力が、反転回路61によりシャッフルされる。反転回路61で、シャッフルされたビット列データが、XorShift24bxに入力される。反転回路61は、ビット反転、バイト反転又はワード反転のいずれかの反転処理を行う。
【0117】
なお、ここでは、XOR25bxの出力が、XorShift24bxに入力される前に、反転処理が行われているが、XorShift24bxの出力に、反転回路61を設けてもよい。
【0118】
以上のように、乱数生成回路RGは、XorShift24ax又は24bxにおけるXorShift演算を行う前又は後で、ビット反転、バイト反転又はワード反転を行う反転回路61を有する。
【0119】
図23は、ビット反転の反転処理を説明するための図である。反転回路61が、ビット反転処理を行う場合は、
図23に示すように、反転回路61に入力された32ビットの入力データは、ビット単位で反転されて、ビット反転された32ビットデータが、出力データとして出力される。すなわち、ビット反転は、LSB(最下位ビット)からMSB(最上位ビット)までのビット列データを、LSB(最下位ビット)からMSB(最上位ビット)までのビット列の並びの順序が逆になるように並び換える処理である。
【0120】
図24は、バイト反転の反転処理を説明するための図である。反転回路61が、バイト反転処理を行う場合は、
図24に示すように、反転回路61に入力された32ビットの入力データは、バイト単位で反転されて、バイト反転された32ビットデータが、出力データとして出力される。すなわち、バイト反転は、32ビットデータをバイト単位で区切って、バイト単位のデータの並びの順序が逆になるように並び換える処理である。
【0121】
図25は、ワート反転の反転処理を説明するための図である。反転回路61が、ワード反転処理を行う場合は、
図25に示すように、反転回路61に入力された32ビットの入力データは、ワード単位で反転されて、ワード反転された32ビットデータが、出力データとして出力される。すなわち、ワード反転は、32ビットデータをワード単位で区切って、ワード単位のデータの並びの順序が逆になるように並び換える処理である。
【0122】
本実施形態によっても、第1実施形態と同様の効果を得ることができる。
(第6実施形態)
第1実施形態では、シード生成回路SGにおいてS-boxが用いられているが、本実施形態では、シード生成回路SGにおいてS-boxは用いず、乱数生成回路RGにおいて、2つのXorShiftをたすき掛けにし、かつS-boxを用いてシードを拡散させている。
【0123】
第6実施形態の半導体装置、メモリコントローラ及びランダマイザの構成は、上述した第1実施形態の半導体記憶装置1、メモリコントローラ2及びランダマイザ17の構成と略同じであるため説明は省略し、同じ構成要素についても同じ符号を用いて、説明は省略し、異なる構成についてのみ説明する。
【0124】
図26は、本実施形態に関わる、ランダマイザ17Cの構成を示すブロック図である。ランダマイザ17Cは、3つのXorShift71、72、73と、2つのS-box74、75と、XOR76を含んでいる。
【0125】
ここでは、シード生成回路SGは、1つのXorShift71を有している。XorShift71は、入力されたインデックス番号を含む32ビットデータを、5ビット、17ビット、13ビットだけ、それぞれ左シフト、右シフト、左シフトする、XorShift32である。
図25において、(a,b,c)=(5,17,13)は、XorShift32において、入力されたビット列データを、5ビット、17ビット、13ビットだけ、それぞれ左シフト、右シフト、左シフトすることを示している。XorShift71の出力は、初期値すなわちシードとして、XorShift72に供給される。
【0126】
XorShift72は、32ビットの出力を、S-box75とXOR76に出力する。S-box75の出力は、XorShift73に供給される。XorShift73は、32ビットの出力を、S-box74とXOR76に出力する。
【0127】
以上のように、乱数生成回路RGは、2つのXorShift72,73と、2つのS-box74,75を含む。XorShift72の入力は、S-box74の出力に接続され、XorShift72の出力は、S-box75の入力に接続されている。XorShift73の入力は、S-box75の出力に接続され、XorShift73の出力は、S-box74の入力に接続されている。
【0128】
XorShift72、73は、それぞれS-box74、75において非線形処理された入力を用いている。XorShift72、73の2つの出力は、排他的論理和(XOR)演算されて、32ビット出力の乱数列データを出力する。
【0129】
図示しないが、ユーザデータは、この乱数列データとの排他的論理和(XOR)がとられることにより、ランダマイズされる。
【0130】
本実施形態によっても、第1実施形態と同様の効果を得ることができる。
(第7実施形態)
第6実施形態では、乱数生成回路は、2つのXorShiftと2つのS-boxとを有しているが、本実施形態では、乱数生成回路は、2つのXorShiftと2つのS-boxとを有するユニットを複数段有している。
【0131】
第7実施形態の半導体装置、メモリコントローラ及びランダマイザの構成は、上述した第1実施形態及び第6実施形態の半導体記憶装置1、メモリコントローラ2及びランダマイザ17、17aCの構成と略同じであるため説明は省略し、同じ構成要素についても同じ符号を用いて、説明は省略し、異なる構成についてのみ説明する。
【0132】
図27は、本実施形態に関わる、ランダマイザ17Dの構成を示すブロック図である。ランダマイザ17Dは、2つのXorShiftと2つのS-boxからなるユニットを多段(ここでは、4段)有している。ランダマイザ17Dは、8つのXorShift72a、72b、72c、72d、73a、73b、73c、73dと、8つのS-box74a、74b、74c、74d,75a、75b、75c、75dと、XOR76を含んでいる。以下、4つのXorShift72a、72b、72c、72dの全部又はそれぞれを指すときは、XorShift72と略し、4つのXorShift73a、73b、73c、73dの全部又はそれぞれを指すときは、XorShift73と略す。同様に、4つのS-box74a、74b、74c、74dの全部又はそれぞれを指すときは、S-box74と略し、4つのS-box75a、75b、75c、75dの全部又はそれぞれを指すときは、S-box75と略す。各S-box74,75は、例えば8ビットの入力で8ビットの出力を行う4つのS-boxを含む。
【0133】
具体的には、4つのユニットが、直列に接続されている。第1ユニットCR1は、2つのXorShift72a、73aと、2つのS-box74a、75aを含んでいる。第2ユニットCR2は、2つのXorShift72b、73bと、2つのS-box74b、75bを含んでいる。第3ユニットCR3は、2つのXorShift72c、73cと、2つのS-box74c、75cを含んでいる。第4ユニットCR4は、2つのXorShift72d、73dと、2つのS-box74d、75dを含んでいる。
【0134】
ここでは、各ユニットの2つのXorShift演算におけるシフト量は、
図27に示すように、第1から第4のユニットCR1からCR4間では、互いに異なっている。
【0135】
なお、各ユニットCR1からCR4内では、2つのXorShift72,73は、同じ左と右のシフト量(a,b,c)は、同じであるが、異なるようにしてもよい。
【0136】
各ユニットCR1からCR4の2つのXorShiftと2つのS-boxとの接続は、
図26の2つのXorShiftと2つのS-boxとの接続と同じである。第1ユニットCR1のXorShift72aには、インデックス番号INが入力される。第2ユニットCR2のXorShift72bには、XorShift72aの出力が入力される。第3ユニットCR3のXorShift72cには、XorShift72bの出力が入力される。第4ユニットCR4のXorShift72dには、XorShift72cの出力が入力される。
【0137】
XOR76には、第4ユニットCR4のXorShift72dの出力とXorShift73dの出力が入力される。
【0138】
第1ユニットCR1から第4ユニットCR4は、インデックス番号INの入力に対して1回動作し、第4ユニットCR4は、32で除算した回数分、出力データを出力する。
【0139】
本実施形態によっても、第1実施形態と同様の効果を得ることができる。
(第8実施形態)
第1実施形態では、乱数生成回路は、XorShift32を用いて64ビットデータを出力するが、本実施形態では、乱数生成回路は、XorShift56を用いて64ビットデータを出力する。
【0140】
第8実施形態の半導体装置、メモリコントローラ及びランダマイザの構成は、上述した第1実施形態の半導体記憶装置1、メモリコントローラ2及びランダマイザ17の構成と略同じであるため説明は省略し、同じ構成要素についても同じ符号を用いて、説明は省略し、異なる構成についてのみ説明する。
【0141】
図28は、本実施形態に関わる、ランダマイザ17Eの構成を示すブロック図である。ランダマイザ17Eは、6つのXorShift81,82a、82b、84a、84b、84cと、3つのS-box83a、83b、83cと、2つの結合回路85a、85bと、XOR86を含む。5つのXorShift81,82a、82b、84a、84bの各々は、56ビットの乱数列データを生成するXorShift56である。XorShift84cは、16ビットの乱数列データを生成するXorShift16である。
【0142】
5つのXorShift81,82a、82b、84a、84bの各々は、11ビット、23ビット、33ビットだけ、それぞれ左シフト、右シフト、左シフトする、XorShift56である。XorShift84cは、7ビット、9ビット、8ビットだけ、それぞれ左シフト、右シフト、左シフトする、XorShift16である。
図27において、(a,b,c)=(11,23,33)は、XorShift56において、入力されたビット列データを、11ビット、23ビット、33ビットだけ、それぞれ左シフト、右シフト、左シフトすることを示している。
図27において、(a,b,c)=(7,9,8)は、XorShift16において、入力されたビット列データを、7ビット、9ビット、8ビットだけ、それぞれ左シフト、右シフト、左シフトすることを示している。
【0143】
XorShift81は、インデックス番号INを入力して、下位側の28ビット(LSB28ビット)を、XorShift82aに供給し、上位側の28ビット(MSB28ビット)を、XorShift82bに供給する。さらに、XorShift81は、下位側の16ビット(LSB16ビット)を、S-box83cに供給する。
【0144】
XorShift81は、乱数列データの生成を3サイクル実行し、最初の2サイクルでは生成した乱数列データを出力せず、3回目に生成された乱数列データを出力する。言い換えれば、XorShift81は、2回の空回しの乱数列データの生成を行った後に、3回目に生成された乱数列データを出力する。
【0145】
XorShift82a、82bは、それぞれ乱数列データをS-box83a、83bに出力する。S-box83a、83bは、56ビットの入力データに対して、非線形変換した56ビットのビット列データを出力する。S-box83cは、16ビットの入力データに対して、非線形変換した16ビットのビット列データを出力する。
【0146】
具体的には、XorShift82a、82bは、乱数列データの生成を4サイクル実行し、最初の3サイクルでは生成した乱数列データを出力せず、4回目に生成された乱数列データを出力する。言い換えれば、XorShift82a、82bは、3回の空回しの乱数列データの生成を行った後に、4回目に生成された乱数列データを出力する。
【0147】
S-box83a、83b、83cは、それぞれ非線形変換したビット列データを、シードとして、XorShift84a、84b、84cに出力する。
【0148】
XorShift84a、84bは、それぞれ、生成した乱数列データを結合回路(Concatenate)85a、85bに出力する。XorShift84cは、生成した乱数列データの上位側8ビットデータを結合回路85aに出力し、生成した乱数列データの下位側8ビットデータを結合回路85bに出力する。
【0149】
XorShift84a、84b、84cは、ユーザデータを56ビットで除算した回数、同じ出力データを出力する。
【0150】
結合回路85aの64ビットの出力データと結合回路85bの64ビットの出力データは、XOR86において、ビット毎に排他的論理和(XOR)演算が取られて64ビットの乱数列データとして出力される。XOR86の出力データは、図示しない排他的論理和回路(XOR)において、ユーザデータと排他的論理和(XOR)演算が取られることによって、ユーザデータは、ランダマイズされ、そのランダマイズされたユーザデータが不揮発性メモリ3に格納される。
【0151】
以上のように、2つのXorShift84a、84bからはそれぞれ56ビットの乱数列データが得られるが、56ビットを64ビットに変換するために、不足する8ビットは、XorShift84cの16ビットの一部の8ビットを用いている。その8ビットと56ビットを連結することにより、64ビットの乱数列データが生成される。
【0152】
なお、複数のXorShiftの一部に16ビットの乱数列データを生成するXorShift16を用いているが、全てのXorShiftを、XorShift56にしてもよい。
【0153】
図29は、
図28の変形例に関わる、ランダマイザ17Fの構成を示すブロック図である。ランダマイザ17Fは、ランダマイザ17Eとは、全てのXorShiftに、XorShift56を用いている点が異なる。
図29のランダマイザ17Fでは、
図28のXorShift16のXorShift84cに代えて、XorShift56のXorShfit84c1が用いられている。
【0154】
図30は、XOR86における排他的論理和(XOR)演算を説明するための図である。結合回路85aと85bでは、56ビットデータに8ビットデータが結合される。
図30では、XOR86に入力される一方の64ビットは、56ビットデータの上位側に8ビットデータを結合した64ビットデータであり、XOR86に入力される他方の64ビットは、56ビットデータの下位側に8ビットデータを結合した64ビットデータである。結合される1つの8ビットは、56ビット中の27番目から20番目の8ビットと、結合されるもう1つの8ビットは、56ビット中の35番目から28番目の8ビットである。XOR86では、2つの64ビットデータがビット毎に排他的論理和(XOR)演算された64ビットデータを、乱数列データとして出力する。
【0155】
本実施形態によっても、第1実施形態と同様の効果を得ることができる。
【0156】
以上のように、上述した各実施形態及び各変形例によれば、生成する乱数列データのデータサイズの拡張性が高く、かつ回路規模が小さい半導体装置及び半導体記憶装置を提供することができる。
【0157】
なお、各実施形態及び各変形例において、XorShiftあるいはS-boxの出力データの拡散のために、XorShiftあるいはS-boxの出力データに対して所定のアフィン変換処理を行うアフィン変換回路を、ランダマイザに追加してもよい。
【0158】
従来は、NAND型フラッシュメモリなどの不揮発性メモリでは、そのメモリ構造、等により、脆弱な乱数列データが生成される場合があるが、上述した各実施形態及び各変形例によれば、メモリ構造、等の影響により様々な不良モードに対して、ロバスト性の高い乱数列データを生成することができる。
【0159】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として例示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0160】
1 半導体記憶装置、2 メモリコントローラ、3 不揮発性メモリ、3a メモリセルアレイ、4 メモリバス、11 コントローラ、12 RAM、13 ホストインターフェース、14 バッファメモリ、15 ECC回路、16 メモリインターフェース、17、17A、17B、17C、17D、17E、17F、17x ランダマイザ、18 内部バス、21、23a,23b,23c,23d,24a、24b、24c、24d、71,72,72a~72d,73、73a~73d,81,82a、82b、84a、84b、84c、84c1 XorShift回路、22、22A、22a、22b、22c、22d、74,74a~74d,75、75a~75d,83a~83c S-box部、22Aa、22Ab,22Ac,22Ad サブS-box部、31 スイッチ部、31A,31B,31C,31D スイッチ、25a、25ax、25b、25bx、26,32A、32B、76 排他的論理和回路、33 スイッチ制御回路、41a、41b サブS-box部、42a、42b データ分離器、51 入れ替え回路、61 反転回路、85a、85b 結合回路。