JP2021149416A - メモリシステム - Google Patents

メモリシステム Download PDF

Info

Publication number
JP2021149416A
JP2021149416A JP2020047738A JP2020047738A JP2021149416A JP 2021149416 A JP2021149416 A JP 2021149416A JP 2020047738 A JP2020047738 A JP 2020047738A JP 2020047738 A JP2020047738 A JP 2020047738A JP 2021149416 A JP2021149416 A JP 2021149416A
Authority
JP
Japan
Prior art keywords
circuit
read
read pointer
data string
input data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2020047738A
Other languages
English (en)
Inventor
翔 小玉
Sho Kodama
翔 小玉
圭里 中西
Keiri Nakanishi
圭里 中西
恒平 及川
Kohei Oikawa
恒平 及川
大亮 八島
Daisuke Yashima
大亮 八島
正人 住吉
Masato Sumiyoshi
正人 住吉
洋平 深澤
Yohei Fukazawa
洋平 深澤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kioxia Corp
Original Assignee
Kioxia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kioxia Corp filed Critical Kioxia Corp
Priority to JP2020047738A priority Critical patent/JP2021149416A/ja
Priority to US16/998,031 priority patent/US11461008B2/en
Publication of JP2021149416A publication Critical patent/JP2021149416A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】辞書式圧縮回路の圧縮性能を向上させるメモリシステムを提供する。【解決手段】メモリシステムの圧縮回路50は、ヒストリーバッファ100と、ハッシュ計算回路110と、リードポインタテーブル120と、ヒストリーバッファ書き込み回路130と、リードポインタ書き込み回路140と、リードポインタ読み出し回路150と、ヒストリーバッファ読み出し回路160と、入力データ列と一致候補データ列とを比較して、少なくとも一部が一致している場合に、入力データ列を、一致候補データ列を参照する参照情報に置き換えるマッチ回路(184、170)と、を有する。リードポインタ読み出し回路によるリードポインタの読み出し及びヒストリーバッファ読み出し回路による入力済みデータ列の読み出しを、リードポインタ書き込み回路によるリードポインタの書き込み及びヒストリーバッファ書き込み回路による入力データ列の書き込みの完了後に実行する。【選択図】図2

Description

本開示の一実施形態は不揮発性メモリを備えるメモリシステムに関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
このようなメモリシステムにおいてデータを圧縮する場合に、圧縮対象の入力データ列を、過去に入力された入力済みデータ列に対する参照情報で置き換える辞書式圧縮が用いられている(特許文献1)。
米国特許第5406278号明細書
本開示の実施形態に係るメモリシステムは、辞書式圧縮回路の圧縮性能を向上させる。
一実施形態に係るメモリシステムは、記憶装置と、前記記憶装置を制御し且つ入力データ列を圧縮するメモリコントローラと、を備えるメモリシステムであって、前記メモリコントローラは、入力済みデータ列を格納するヒストリーバッファと、前記入力データ列からハッシュ値を計算するハッシュ計算回路と、前記ハッシュ値によって指定されたアドレスに、前記ヒストリーバッファにおけるアドレスを示すリードポインタを格納するリードポインタテーブルと、前記入力データ列を前記ヒストリーバッファへ書き込むヒストリーバッファ書き込み回路と、前記ハッシュ値によって指定された前記リードポインタテーブルにおけるアドレスに対して、前記入力データ列の前記リードポインタを書き込むリードポインタ書き込み回路と、前記ハッシュ値を使用して前記リードポインタテーブルからの前記リードポインタの読み出しを実行するリードポインタ読み出し回路と、前記リードポインタ読み出し回路によって読み出された前記リードポインタを使用して、前記ヒストリーバッファから前記入力済みデータ列を一致候補データ列として読み出すヒストリーバッファ読み出し回路と、前記入力データ列と前記一致候補データ列とを比較して、少なくとも一部が一致している場合に、前記入力データ列を、前記一致候補データ列を参照する参照情報に置き換えるマッチ回路と、を有し、前記リードポインタ読み出し回路による前記リードポインタの読み出し及び前記ヒストリーバッファ読み出し回路による前記入力済みデータ列の読み出しを、前記リードポインタ書き込み回路による前記リードポインタの書き込み及び前記ヒストリーバッファ書き込み回路による前記入力データ列の書き込みの完了後に実行する。
一実施形態に係るメモリシステムの構成を説明するためのブロック図である。 一実施形態に係る圧縮回路の構成を説明するためのブロック図である。 一実施形態に係る圧縮回路の圧縮動作を説明するための概念図である。 一実施形態に係る圧縮回路の圧縮動作を説明するためのフローチャートである。 一実施形態に係る圧縮回路の圧縮動作を説明するための概念図である。 比較例のメモリシステムおける圧縮回路の圧縮動作を説明するための概念図である。 一実施形態に係る圧縮回路の構成を説明するためのブロック図である。 一実施形態に係る複数ステージ比較回路の構成を説明するためのブロック図である。 一実施形態に係るポインタテーブルの構成を説明するためのブロック図である。
以下、実施形態にかかるメモリシステムについて、図面を参照して具体的に説明する。なお、以下の説明において、略同一の機能及び構成を有する構成要素については、同一符号を付し、重複説明は必要な場合にのみ行う。また、以下に示す各実施形態は、この実施形態の技術的思想を具体化するための装置や方法を例示するものであって、実施形態の技術的思想は、構成部品の材質、形状、構造、配置等を下記のものに特定するものでない。実施形態の技術的思想は、特許請求の範囲において、種々の変更を加えることができる。
以下の説明において、1バイト(Byte)の情報を「データ」といい、当該データが入力された順に並べられたものを「データ列」という。ただし、「データ」は1バイトの情報に限定されない。また、「圧縮する」とは、対象のデータ列の情報量(例えばビット数)を小さくすることを意味し、「符号化する」ということもできる。「伸長する」とは、圧縮されたデータ列の情報量を圧縮前の状態に復元することを意味し、「復号化する」ということもできる。
<第1実施形態>
第1実施形態に係るメモリシステムについて説明する。第1実施形態に係るメモリシステムは、例えば、半導体記憶装置としてのNAND型フラッシュメモリと、当該NAND型フラッシュメモリを制御するメモリコントローラと、を含む。
[メモリシステム1の全体構成]
図1は、一実施形態に係るメモリシステムの構成を説明するためのブロック図である。図1に示すように、メモリシステム1は、メモリコントローラ10と、不揮発性メモリ20とを備える。メモリシステム1は、ホスト30と接続可能である。図1では、メモリシステム1とホスト30とが接続された状態が示されている。ホスト30は、例えば、パーソナルコンピュータ、携帯端末などの電子機器である。
不揮発性メモリ20は、データを不揮発に記憶する不揮発性メモリであり、例えば、NAND型フラッシュメモリ(以下、単にNANDメモリという)である。以下の説明では、不揮発性メモリ20としてNANDメモリが用いられた場合を例示するが、不揮発性メモリ20として3次元構造フラッシュメモリ、ReRAM(Resistance Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)等のNANDメモリ以外の半導体記憶装置を用いることができる。不揮発性メモリ20が半導体記憶装置であることは必須ではなく、半導体記憶装置以外の種々の記憶媒体に対して本実施形態を適用することができる。
メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とが1つのパッケージとして構成されるメモリカード等であってもよく、SSD(Solid State Drive)等であってもよい。
メモリコントローラ10は、例えばSoC(System-On-a-Chip)として構成される半導体集積回路である。以下で説明するメモリコントローラ10の各構成要素の動作の一部又は全部はハードウエアで実現されるが、CPU(Central Processing Unit)がファームウエアを実行することによって実現されてもよい。
メモリコントローラ10は、ホスト30からの書き込み要求に従って不揮発性メモリ20への書き込みを制御し、ホスト30からの読み出し要求に従って不揮発性メモリ20からの読み出しを制御する。メモリコントローラ10は、プロセッサ11、RAM(Random Access Memory)12、ROM(Read Only Memory)13、ランダマイザ14、ECC回路15、圧縮・伸長回路(Compression/Decompression Circuit)16、ホストI/F(ホストインタフェース)17、及びメモリI/F(メモリインタフェース)18を備える。これらの機能ブロックは内部バス19で相互に接続されている。
圧縮・伸長回路16は、不揮発性メモリ20へ書き込むデータを圧縮する符号化器として動作する。また、圧縮・伸長回路16は、不揮発性メモリ20から読み出されたデータを伸長する復号器としても動作する。なお、圧縮・伸長回路16のより詳細な構成及び動作は後述する。
ホストI/F17は、ホスト30との間のインタフェース規格に従った処理を実行し、ホスト30から受信した要求、書き込み対象のデータなどを内部バス19に出力する。また、ホストI/F17は、不揮発性メモリ20から読み出され、圧縮・伸長回路16によって伸長されたデータ及びプロセッサ11からの応答などをホスト30へ送信する。
メモリI/F18は、プロセッサ11の指示に基づいて、不揮発性メモリ20への書き込み処理を行う。また、メモリI/F18は、プロセッサ11の指示に基づいて、不揮発性メモリ20からの読み出し処理を行う。
プロセッサ11は、メモリシステム1の各機能ブロックを統括的に制御する制御部である。プロセッサ11は、ホストI/F17経由でホスト30からの要求を受け付けた場合に、その要求に応じた制御を行う。例えば、プロセッサ11は、ホスト30からの書き込み要求に応じて、不揮発性メモリ20へのデータの書き込みをメモリI/F18へ指示する。また、プロセッサ11は、ホスト30からの読み出し要求に応じて、不揮発性メモリ20からのデータの読み出しをメモリI/F18へ指示する。
プロセッサ11は、ホスト30から書き込み要求を受信した場合、RAM12に保持されるデータに対して、不揮発性メモリ20上の格納領域(メモリ領域)を決定する。すなわち、プロセッサ11は、データの書き込み先を管理する。ホスト30から受信したデータの論理アドレスと当該データが格納された不揮発性メモリ20上の格納領域を示す物理アドレスとの対応はアドレス変換テーブルとして格納される。
プロセッサ11は、ホスト30から読み出し要求を受信した場合、読み出し要求により指定された論理アドレスを、上述のアドレス変換テーブルを用いて物理アドレスに変換し、当該物理アドレスからの読み出しをメモリI/F18へ指示する。
NANDメモリでは、一般に、ページと呼ばれるデータ単位で書き込み及び読み出しが行われ、ブロックと呼ばれるデータ単位で消去が行われる。同一のワード線に接続される複数のメモリセルをメモリセルグループという。メモリセルがSLC(Single Level Cell)である場合は、1つのメモリセルグループが1ページに対応する。メモリセルがMLCやTLCやQLCなどの多ビットセルである場合は、1つのメモリセルグループが複数ページに対応する。また、各メモリセルはワード線に接続されるとともにビット線にも接続される。したがって、各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとで識別することが可能である。
RAM12は、例えばデータバッファとして使用され、メモリコントローラ10がホスト30から受信したデータを不揮発性メモリ20へ記憶するまでに一時的に保持する。また、RAM12は、不揮発性メモリ20から読み出したデータをホスト30へ送信するまでに一時的に保持する。RAM12には、例えば、SRAM(Static Random Access Memory)やDRAM(Dynamic Random Access Memory)などの汎用メモリを用いることができる。
RAM12は、アドレス変換テーブルや、起動時等に不揮発性メモリ20の特定の領域から読み出されて展開されるマスタテーブル(スナップショット)などの各種管理テーブルや、各種管理テーブルの変更差分であるログ情報などを記憶するワーキングメモリとして使用されてもよい。
ROM13は、メモリコントローラ10を動作させるための種々のプログラムやパラメータ等を記憶する。ROM13に格納されているプログラムやパラメータ等は、必要に応じてプロセッサ11に読み出されて実行される。
ランダマイザ14は、例えば線形帰還シフトレジスタ等を含んで構成され、入力されたシード値に対して一義的に求まる擬似乱数を生成する。ランダマイザ14で生成された擬似乱数は、例えばプロセッサ11において書き込みデータとの排他的論理和が取られる。これにより、不揮発性メモリ20に書き込まれる書き込みデータがランダマイズされる。
ホスト30から送信されるデータは、内部バス19に転送されてRAM12に一時的に保持された後、圧縮・伸長回路16によって圧縮され、さらに、ECC回路15により誤り訂正符号化され、その後、メモリI/F18を介して不揮発性メモリ20に書き込まれる。一方、不揮発性メモリ20から読み出されたデータは、ECC回路15により誤り訂正復号され、その後、圧縮・伸長回路16により伸長されることで、オリジナルのデータに復元される。復元されたデータは、例えばRAM12に一時的に保持された後、ホストI/F17を介してホスト30へ転送される。なお、圧縮・伸長回路16及び/又はECC回路15により符号化されるデータには、上記のデータ以外にも、メモリコントローラ10内部で用いる制御データ等が含まれてもよい。
以上のような構成を備えるメモリシステム1における書き込み処理では、プロセッサ11は、不揮発性メモリ20への書き込み時に、圧縮・伸長回路16に対してデータの圧縮を指示する。その際、プロセッサ11は、不揮発性メモリ20における書き込みデータの格納場所(格納アドレス)を決定し、決定した格納場所をメモリI/F18へ指示する。圧縮・伸長回路16は、プロセッサ11からの指示に基づいて、RAM12上のデータを圧縮する。そして、ECC回路15は、プロセッサ11からの指示に基づいて、RAM12上の圧縮されたデータをさらにECC符号化する。これにより生成された書き込みデータは、メモリI/F18を介して不揮発性メモリ20の指定された格納場所に書き込まれる。なお、ECC回路15の符号化方式としては、例えば、LDPC(Low-Density Parity-Check)符号やBCH(Bose-Chaudhuri-Hocquenghem)符号やRS(Reed-Solomon)符号を用いた符号化方式を採用することができる。
一方、読み出し処理では、プロセッサ11は、不揮発性メモリ20からの読み出し時に、不揮発性メモリ20上のアドレスを指定してメモリI/F18へ読み出しを指示する。プロセッサ11は、ECC回路15へECC復号の開始を指示するとともに、圧縮・伸長回路16へ伸長の開始を指示する。メモリI/F18は、プロセッサ11の指示に従って、不揮発性メモリ20の指定されたアドレスに対する読み出しを実行し、この読み出しにより得られた読み出しデータをECC回路15に入力する。ECC回路15は入力された読み出しデータをECC復号化し、圧縮・伸長回路16はECC復号化されたデータを伸長する。この伸長に成功した場合、伸長されたオリジナルのデータをRAM12に格納する。一方、ECC復号化及び伸長に失敗した場合、プロセッサ11は、例えば、ホスト30へリードエラーを通知する。
[圧縮回路50の全体構成]
圧縮・伸長回路16では、例えばLZ77圧縮など、データ列の類似性を利用した辞書式圧縮を用いた圧縮技術が用いられる。詳細は以下に示すが、圧縮・伸長回路16に備えられた圧縮機能は、圧縮対象のデータ列を、過去に入力されたデータ列を参照(マッチ)する情報に置き換えることで、当該圧縮対象のデータ列を圧縮する。そして、圧縮・伸長回路16に備えられた伸長機能によって、圧縮されたデータ列は、過去に伸長された伸長済みデータ列及びシンボルに基づいて伸長される。なお、シンボルとは、過去に伸長されたデータ列が格納されているヒストリーバッファにおけるアドレスを示す「位置情報」と、当該アドレスに格納されたデータ列の先頭からのデータ数を示す「長さ情報」と、を含む情報である。以下の説明では、圧縮・伸長回路16のうち圧縮機能を備える圧縮回路50について説明する。なお、圧縮・伸長回路16の伸長機能を備える伸長回路としては一般的な回路を用いることができるため、ここでは説明を省略する。
図2は、一実施形態に係る圧縮回路の構成を説明するためのブロック図である。図2に示すように、圧縮回路50は、ヒストリーバッファ100、ハッシュ計算回路110、リードポインタテーブル120、ヒストリーバッファ書き込み回路130、リードポインタ書き込み回路140、リードポインタ読み出し回路150、ヒストリーバッファ読み出し回路160、マッチ選択回路170、入力データ遅延回路180、アドレス遅延回路182、複数ステージ比較回路184、サブストリング生成回路186、ライトポインタ管理回路188、及びリードポインタ計算回路190を備える。また、圧縮回路50は第1入力端子50−1及び第2入力端子50−2を備える。第1入力端子50−1には、圧縮対象の入力データ列(Input Data)が入力される。第2入力端子50−2には、第1入力端子50−1に入力された入力データ列のヒストリーバッファ100への書き込みに対する有効又は無効を示す制御情報(Data Valid)が入力される。
なお、本実施形態の圧縮回路50は、圧縮対象の入力データ列に基づいて、図3に示すように当該データ列が1バイトずつ順にずれた複数のサブストリング(SubString 0 ~ 3)を生成し、各サブストリングに対して並列で圧縮処理を行う。したがって、図2に示す圧縮回路50は、1サイクルで4バイト分の処理を行う。
ヒストリーバッファ100は、過去に圧縮回路50に入力されたデータが入力された順に並べられた入力済みデータ列を格納する。つまり、ヒストリーバッファ100には、圧縮対象の入力データ列の先頭のデータよりも前に圧縮回路50に入力されたデータ列が格納されている。ヒストリーバッファ100には、例えば数キロバイトから数十キロバイトの入力済みデータが格納される。ヒストリーバッファ100はリングバッファポリシーに基づくフリップフロップ構成のバッファである。ヒストリーバッファ100は、バイト単位でアドレスを指定可能な構成を有し、複数のリード要求及びライト要求に対する処理を行うことができる。なお、ヒストリーバッファ100はSRAMを含んでもよい。
ヒストリーバッファ書き込み回路130は、入力端子が第1入力端子50−1に接続され、出力端子がヒストリーバッファ100の入力端子に接続された構成を有している。ヒストリーバッファ書き込み回路130は、圧縮回路50に入力された入力データ列をヒストリーバッファ100に書き込む。
ライトポインタ管理回路188は、入力端子が第2入力端子50−2に接続され、出力端子がヒストリーバッファ書き込み回路130及びリードポインタ計算回路190に接続された構成を有している。ライトポインタ管理回路188は、ヒストリーバッファ書き込み回路130が入力データ列をヒストリーバッファ100に書き込むアドレス(ライトポインタ:Write Ptr)を管理する。つまり、ライトポインタ管理回路188は、ヒストリーバッファ書き込み回路130によって入力データ列がヒストリーバッファ100に書き込まれると、ライトポインタを更新し、次に入力された入力データ列が書き込まれるアドレスを管理する。ライトポインタ管理回路188は、第2入力端子50−2に入力された制御情報が有効の場合、ヒストリーバッファ書き込み回路130にライトポインタを指示し、当該制御情報が無効の場合、ヒストリーバッファ書き込み回路130への書き込みを禁止する。
ライトポインタ管理回路188によって管理されるライトポインタに基づく圧縮対象の入力データ列が入力される度に、ライトポインタ管理回路188はライトポインタを4ずつインクリメントする。なお、インクリメントする数はサブストリングの数に合わせて調整することができる。つまり、サブストリングの数がk個であれば、ライトポインタ管理回路188は入力データ列が入力される度にライトポインタをkずつインクリメントする。ライトポインタ管理回路188は、ライトポインタがヒストリーバッファ100の末尾に達したら、ライトポインタを先頭にラップアラウンドする。
サブストリング生成回路186は、入力端子が第1入力端子50−1に接続され、出力端子が複数のハッシュ計算回路110の入力端子に接続された構成を有している。サブストリング生成回路186は、圧縮回路50に入力された入力データ列に基づいて複数のサブストリングを生成し、ハッシュ計算回路110に当該サブストリングを出力する。本実施形態では、図3に示すように、サブストリング生成回路186は4のサブストリングを生成しているが、生成されるサブストリングは3つ以下であってもよく、5つ以上であってもよい。
ハッシュ計算回路110は、出力端子がリードポインタ書き込み回路140の入力端子及びアドレス遅延回路182の入力端子に接続された構成を有している。本実施形態では、ハッシュ計算回路110は、複数のサブストリングの各々に対して設けられている。図2の例では、入力データ列に基づいて4つのサブストリングが生成されるため、4つのハッシュ計算回路110が設けられている。ハッシュ計算回路110は、圧縮対象である入力データ列からハッシュ値を計算する。具体的には、ハッシュ計算回路110は、ハッシュ計算回路110に入力された各サブストリング(入力データ列)の先頭のデータから最小マッチ長分のデータに対してハッシュ値を求める。
ここで、最小マッチ長は、圧縮処理を実行するか否かを判断するための指標となるバイト数である。圧縮回路50は、入力データ列とヒストリーバッファ100に格納された入力済みデータ列とを比較し、入力データ列の先頭のデータからNバイト以上一致するデータ列がヒストリーバッファ100に格納されている場合に本実施形態に係る圧縮処理を実行する。上記のNバイトが最小マッチ長である。つまり、2つのデータ列のハッシュ値が同じ値である場合、当該2つのデータ列は少なくとも先頭から最小マッチ長分のデータが同じ値を示す。換言すると、圧縮回路50は、2つのデータ列のハッシュ値に基づいて圧縮処理の要否を判断する。
リードポインタ書き込み回路140は、出力端子がリードポインタテーブル120に接続された構成を有している。リードポインタ書き込み回路140は、リードポインタテーブル120においてハッシュ値によって指定されたアドレスに対して、ヒストリーバッファ100において当該ハッシュ値の元の入力データ列が格納されたアドレスに関する情報を書き込む。
リードポインタテーブル120は、ヒストリーバッファ100に格納された入力済みデータ列のヒストリーバッファ100におけるアドレスと、当該入力済みデータ列に対してハッシュ計算回路110によって求められたハッシュ値とが関連付けて格納されたデータテーブルである。リードポインタテーブル120に対して、あるハッシュ値をキーとして検索を行うと、当該ハッシュ値に関連付けられた、ヒストリーバッファ100におけるアドレスが検索結果として出力される。このように、検索結果として得られたアドレスは「リードポインタ」と呼ばれる。上記の動作を換言すると、リードポインタテーブル120は、ハッシュ値によって指定されたアドレスに、ヒストリーバッファ100におけるアドレスを示すリードポインタを格納している。なお、リードポインタテーブル120はフリップフロップ構成のデータテーブルであり、複数のリード要求及びライト要求に対する処理を行うことができる。なお、リードポインタテーブル120はSRAMを含んでもよい。
リードポインタ書き込み回路140が、リードポインタテーブル120におけるハッシュ値に基づくアドレスに対してリードポインタの書き込みを行うと、リードポインタテーブル120に格納されていた古いリードポインタは新たなリードポインタに更新される。なお、更新されたリードポインタは、リードポインタ計算回路190によってライトポインタと関連付けられる。リードポインタ計算回路190の出力端子は、リードポインタテーブル120に接続されている。
なお、リードポインタ計算回路190は、サブストリング生成回路186によって生成される各サブストリングの、ヒストリーバッファ100におけるアドレスを示すリードポインタを算出する。つまり、当該リードポインタはライトポインタに基づいて算出される。具体的には、図2における4つのサブストリングのうち、第1入力端子50−1に入力された入力データ列と一致するサブストリングのリードポインタはライトポインタと同じ値である。このサブストリングから1バイトずれたサブストリングのリードポインタは、上記ライトポインタ+1の値であり、Nバイトずれたサブストリングのリードポインタは、上記ライトポインタ+Nの値である。
アドレス遅延回路182は、出力端子がリードポインタ読み出し回路150に接続された構成を有している。アドレス遅延回路182は、ハッシュ計算回路110からハッシュ値を受信し、遅延させてから、当該ハッシュ値をリードポインタ読み出し回路150に送信する。本実施形態では、アドレス遅延回路182は、4つのハッシュ計算回路110の各々からハッシュ値を受信し、それぞれのハッシュ値を遅延させる。アドレス遅延回路182による遅延期間は回路設計に応じて適宜調整することができるが、例えば1〜2サイクル遅延させることができる。
リードポインタ読み出し回路150は、出力端子がリードポインタテーブル120に接続された構成を有している。リードポインタ読み出し回路150は、アドレス遅延回路182を介して受信したハッシュ値によって定まる、リードポインタテーブル120におけるアドレスをリードポインタテーブル120に入力する。当該アドレスの入力によってリードポインタテーブル120からリードポインタが読み出される。本実施形態では、リードポインタ読み出し回路150は、アドレス遅延回路182から受信した4つのハッシュ値の各々によって定まる、リードポインタテーブル120におけるアドレスをそれぞれリードポインタテーブル120に入力する。当該アドレスの入力によって、それぞれのハッシュ値に対応するリードポインタが読み出される。なお、上記のリードポインタ読み出し回路150の機能を換言すると、リードポインタ読み出し回路150は上記ハッシュ値を使用してリードポインタテーブル120からのリードポインタの読み出しを実行する。ここで、リードポインタ読み出し回路150は、アドレス遅延回路182によって遅延されたハッシュ値を用いてリードポインタテーブル120に当該アドレスを入力するため、あるハッシュ値に対応するリードポインタが読み出されるときには、当該ハッシュ値と同一のハッシュ値によって指定されたアドレスへの書き込みは完了している。
ヒストリーバッファ読み出し回路160は、入力端子がヒストリーバッファ100及びリードポインタテーブル120に接続され、出力端子が複数ステージ比較回路184に接続された構成を有している。ヒストリーバッファ読み出し回路160は、リードポインタ読み出し回路150のアドレス入力によって読み出されたリードポインタを使用して、ヒストリーバッファ100から入力済みデータ列を読み出す。ヒストリーバッファ読み出し回路160によって読み出された入力済みデータ列は、圧縮対象である入力データ列を、過去に入力されたデータ列を参照する情報に置き換えることが可能かどうか、つまり入力データ列が過去に入力されたデータ列に一致するか否かを判断するために用いられるデータ列である。当該入力済みデータ列を一致候補データ列という場合がある。本実施形態では、4つのリードポインタを使用して、4つの一致候補データ列を読み出す。
上記のように、ハッシュ計算回路110から出力されたハッシュ値が、アドレス遅延回路182を介してリードポインタ読み出し回路150に送信されることで、リードポインタ読み出し回路150によるリードポインタの読み出し、及びヒストリーバッファ読み出し回路160による入力済みデータ列の読み出しを、リードポインタ書き込み回路140によるリードポインタの書き込み及びヒストリーバッファ書き込み回路130による入力データ列の書き込みの完了後に実行することができる。
入力データ遅延回路180は、入力端子が第1入力端子50−1に接続され、出力端子が複数ステージ比較回路184に接続された構成を有している。入力データ遅延回路180は、圧縮回路50に入力された入力データ列を遅延させて複数ステージ比較回路184に送信する。入力データ遅延回路180の遅延期間は、アドレス遅延回路182の遅延期間と同じ又はアドレス遅延回路182の遅延期間に基づいて決定される。つまり、入力データ遅延回路180の遅延期間は、アドレス遅延回路182による遅延の後にヒストリーバッファ読み出し回路160が一致候補データ列を読み出すタイミングに合わせて決定される。
複数ステージ比較回路184は、出力端子がマッチ選択回路170に接続された構成を有している。複数ステージ比較回路184は、ヒストリーバッファ読み出し回路160がヒストリーバッファ100から読み出した一致候補データ列と、入力データ遅延回路180によって遅延された入力データ列とを比較してマッチ長を求める。本実施形態では、複数ステージ比較回路184は、4つの一致候補データ列と入力データ列とをそれぞれ比較して、それぞれに対してマッチ長を求める。
マッチ選択回路170は、出力端子が圧縮回路50の出力端子50−3に接続された構成を有している。マッチ選択回路170は、複数ステージ比較回路184によって求められた個別のマッチ結果を組み合わせて、最終的なマッチ結果を生成する。本実施形態では、マッチ結果として、入力データ列が、入力データ列と一致する一致候補データ列を参照する参照情報に置き換えられたものが出力される。参照情報は、例えば、入力データ列と一致した一致候補データ列の先頭データの、ヒストリーバッファ100におけるアドレス(例えば、入力データ列の先頭データからの距離)及び当該先頭データからのマッチ長である。最後に、マッチ選択回路170は、複数ステージ比較回路184によって求められた4つのマッチ結果を組み合わせる。
マッチ選択回路170は、1サイクル前の処理によって得られたマッチ結果に含まれるデータのうち、末尾のデータの次のデータ位置から処理を開始する。ここで、「末尾のデータ」は、図3においてヒストリーバッファ100に格納された最も新しいデータ「b」に相当し、「次のデータ」は、データ「b」の次の入力データ列の先頭のデータ「c」に相当する。マッチ選択回路170は、データ「c」を先頭とするデータ列を有する各サブストリングに対してマッチ結果を確認する。
入力データ列と入力済みデータ列との比較において、最小マッチ長のデータ一致(マッチ)が確認されなかった場合、マッチ選択回路170は、原則1つ大きいサブストリングの処理を次の先頭のデータとして処理を行う。ただし、マッチが確認されなかったサブストリングが確認された場合であっても、そのサブストリングよりも前のサブストリングでマッチが確認されている場合は、当該前のサブストリングで確認されたマッチ長に基づいた分だけ大きいサブストリングの処理を次の先頭のデータとして処理を行う。例えば、図3において、サブストリング1でマッチ長:3のマッチが確認され、サブストリング2でマッチが確認されなかった場合、データ「f」まではマッチが確認されているため、先頭のデータが「g」であるサブストリングに対して処理を行う。つまり、マッチが確認されたサブストリング1から、サブストリング1で確認されたマッチ長の分(3つ)だけ大きいサブストリングまで進めて次の処理を行う。
上記の複数ステージ比較回路184及びマッチ選択回路170を合わせてマッチ回路という場合、当該マッチ回路は、入力データ列と一致候補データ列とを比較して、少なくとも一部が一致している場合に、入力データ列を、一致候補データ列を参照する参照情報に置き換える、ということができる。上記のマッチ回路の動作をデータ一致判定処理という場合がある。
[圧縮回路50の圧縮動作の動作フロー]
図4は、一実施形態に係る圧縮回路の圧縮動作を説明するためのフローチャートである。図2を参照しながら、図4の動作フローを説明する。図4に示すように、圧縮回路50の動作が開始すると、圧縮対象列として入力データ列が第1入力端子50−1に入力される(ステップS201)。入力データ列は、ヒストリーバッファ書き込み回路130によって、ヒストリーバッファ100においてライトポインタによって指定されたアドレスに書き込まれる(ステップS202)。ヒストリーバッファ100への入力データ列の書き込まれると、ライトポインタ管理回路188によってライトポインタが更新される(ステップS203)。
上記のS202及びS203のステップと並行して、以下のステップS204〜S206が行われる。第1入力端子50−1に入力された入力データ列は、サブストリング生成回路186によってサブストリングが生成される(ステップS204)。本実施形態では、4つのサブストリングが生成される。生成されたサブストリングはハッシュ計算回路110入力され、各サブストリングに応じたハッシュ値が計算される(ステップS205)。計算されたハッシュ値に対応するリードポインタテーブル120におけるアドレスに対して、リードポインタ書き込み回路140によって、当該ハッシュ値に対応するリードポインタが書き込まれる(ステップS206)。
ステップS206の後、ハッシュ値はアドレス遅延回路182によって遅延され、リードポインタ読み出し回路150に送信される(ステップS207)。リードポインタ読み出し回路150によるリードポインタの読み出しは、アドレス遅延回路182によって、ステップS203のライトポインタの更新が完了するまで遅延されてから行われる。アドレス遅延回路182の遅延期間は、固定された期間であってもよく、ライトポインタ管理回路188からアドレス遅延回路182に送信され、ライトポインタの更新が完了したことを示す信号に基づいて決定されてもよい。
上記のように、リードポインタ読み出し回路150は、ハッシュ値を受信すると、当該ハッシュ値によって定まる、リードポインタテーブル120におけるアドレスをリードポインタテーブル120に入力する。当該アドレスの入力によってリードポインタテーブル120からリードポインタが読み出される(ステップS208)。この時点で、ヒストリーバッファ100には、リードポインタを読み出すために使用されたハッシュ値に対応する入力データ列が格納され、当該入力データ列が格納されたヒストリーバッファ100におけるアドレスに関連する情報もリードポインタテーブル120に格納されている。したがって、リードポインタに基づいてヒストリーバッファ100から入力済みデータ列(一致候補データ列)を読み出しする際に(ステップS209)、同一サイクルの入力データ列の一部を利用することができる。そして、ヒストリーバッファ100から読み出された一致候補データ列と入力データ列とを比較して、データ一致判定処理を行う(ステップS210)。
[圧縮回路50の圧縮動作の具体例]
図5を用いて、圧縮回路50の圧縮動作を具体的なデータ列を用いて説明する。図5は、一実施形態に係る圧縮回路の圧縮動作を説明するための概念図である。図5の例では、ヒストリーバッファ100に入力済みデータ列「・・・ab」というデータ列が格納されており、そこに入力データ列として「ababab」が入力された場合が示されている。
入力データ列に基づいて、サブストリング0〜3が生成される。図5に示すように、サブストリング0は「ababab」というデータ列であり、サブストリング1は「bababc」というデータ列であり、サブストリング2は「ababcd」というデータ列であり、サブストリング3は「babcde」というデータ列である。なお、この例における最小マッチ長は3である。
サブストリング0について、先頭から3バイト分の「aba」はヒストリーバッファ100の入力済みデータ列には存在しない。したがって、マッチが確認されないというマッチ結果が得られる。サブストリング1について、先頭から3バイト分の「bab」もヒストリーバッファ100の入力済みデータ列には存在しない。したがって、マッチが確認されないというマッチ結果が得られる。
サブストリング2について、先頭から4バイト分の「abab」はヒストリーバッファ100の入力済みデータ列に存在する。つまり、マッチが確認されるというマッチ結果が得られる。マッチが確認された入力済みデータ列の先頭(ヒストリーバッファ100に格納された「・・・ab」の「a」)は、入力データ列の先頭(サブストリング2の先頭の[a])からの距離が4バイトであり、マッチ長が4バイトである。この場合、参照情報は(距離:マッチ長)=(4:4)と表現することができる。サブストリング3について、先頭の3バイト分の「bab」はヒストリーバッファ100の入力済みデータ列に存在する。つまり、マッチが確認されるというマッチ結果が得られる。マッチが確認された入力済みデータ列の先頭は、入力データ列の先頭からの距離が4バイトであり、マッチ長が3バイトである。この場合、参照情報は(距離:マッチ長)=(4:3)と表現することができる。
上記のサブストリング0〜3のマッチ結果は、マッチ選択回路170によって組み合わされて、最終的なマッチ結果が生成される。最終的なマッチ結果によって、入力データ列の「ababab」は、ヒストリーバッファ100に格納されていた末尾2バイトのデータ「ab」と入力データ列の先頭の4バイトのデータ「abab」とを合わせたデータ列を参照する参照情報を用いて圧縮することができる。この場合、参照情報は(距離:マッチ長)=(2:6)と表現することができる。
一方、比較例におけるメモリシステムにおける圧縮回路の圧縮動作について図6を用いて説明する。図6は、比較例のメモリシステムおける圧縮回路の圧縮動作を説明するための概念図である。図6の動作は図5の動作と類似しているが、比較例のメモリシステムでは、例えば図4に示すステップS203のライトポインタの更新、ステップS208のハッシュ値を使用したリードポインタの読み出し、及びステップS206のハッシュ値に対応するリードポインタの書き込みが同じタイミングで行われるため、同じサイクルで入力された入力データ列の一部を参照することができない。つまり、サブストリング0に対する処理を行う場合だけでなく、サブストリング1〜3に対する処理を行う場合も、ヒストリーバッファには「・・・ab」しか格納されていない状態である。したがって、比較例のメモリシステムにおいては、サブストリング0〜3に対して、マッチが確認されない(Miss Match)というマッチ結果が得られる。
以上のように、第1実施形態に係るメモリシステム1によると、圧縮対象の入力データ列の一部を参照することができるため、圧縮性能を向上させることができる。
<第2実施形態>
第2実施形態では、第1実施形態における圧縮回路50と類似した構成の圧縮回路50Aについて説明する。図7は、一実施形態に係る圧縮回路の構成を説明するためのブロック図である。図7に示す圧縮回路50Aは、図2に示す圧縮回路50に類似しているが、リードポインタテーブル120Aの構成がリードポインタテーブル120と相違する。以下の説明において、図2の構成と同様の特徴については説明を省略し、主に図2の構成と相違する点について説明する。
図7に示すように、リードポインタテーブル120Aは、アドレスデコーダ300A、複数のフリップフロップ回路310A、入力用マルチプレクサ320A、及び出力用マルチプレクサ330Aを有する。1つの入力用マルチプレクサ320Aに対して直列に接続された複数のフリップフロップ回路310Aは、同一のアドレス(又は、同一のハッシュ値)に対して設けられたフリップフロップ回路であり、各々のフリップフロップ回路310Aはリードポインタを格納する。同一のアドレスに対して設けられた複数のフリップフロップ回路310Aは、先入先出法(First-In First-Out:FIFO)を用いている。なお、複数のフリップフロップ回路310A及び入力用マルチプレクサ320Aの組み合わせの数は、少なくともアドレスの数以上である。同一のアドレスに対して、複数のフリップフロップ回路310Aが設けられているが、各々の回路を区別して説明する場合はフリップフロップ回路310A−1、・・・、nといい、各々の回路を特に区別する必要がない場合はフリップフロップ回路310Aという。
アドレスデコーダ300Aは、入力端子がリードポインタ書き込み回路140Aの出力端子に接続され、出力端子が複数のフリップフロップ回路310Aの各々及び各アドレスに対して設けられた入力用マルチプレクサ320Aの制御端子に接続された構成を有している。フリップフロップ回路310Aは、上記のようにFIFOを構成している。入力用マルチプレクサ320Aは、入力端子がリードポインタ計算回路190Aに接続され、出力端子が先頭のフリップフロップ回路310Aに接続され、制御端子がアドレスデコーダ300Aに接続された構成を有している。出力用マルチプレクサ330Aは、入力端子が複数のフリップフロップ回路310Aの各々に接続され、出力端子がヒストリーバッファ読み出し回路160Aに接続され、制御端子がリードポインタ読み出し回路150Aに接続された構成を有している。
アドレスデコーダ300Aは、リードポインタ書き込み回路140Aによって指定されたアドレスに対応する入力用マルチプレクサ320Aを有効にして、当該アドレスに設けられたフリップフロップ回路310Aにリードポインタを書き込む。つまり、リードポインタテーブル120Aは、アドレス毎に複数のリードポインタを有している。リードポインタが先頭の第1フリップフロップ回路310A−1に書き込まれる前に、第1フリップフロップ回路310A−1に格納されていたリードポインタは、第1フリップフロップ回路310A−1に隣接する2番目の第2フリップフロップ回路310A−2に移動する。そして、n番目の第nフリップフロップ回路310A−nにリードポインタが格納されている場合は、当該リードポインタは消去される。
つまり、リードポインタ書き込み回路140Aは、複数のリードポインタをリードポインタテーブル120Aの指定のアドレスに書き込む場合であって、既に書き込まれたリードポインタが当該アドレスに存在し、既に書き込まれたリードポインタの少なくとも一部を上書きしなければいけない場合、既に書き込まれたリードポインタのうち、書き込まれたタイミングが古いリードポインタから順に上書きする。
出力用マルチプレクサ330Aは、リードポインタ読み出し回路150Aから受信したハッシュ値に対応するアドレスを選択し、選択されたアドレスに対応する第1フリップフロップ回路310A−1〜第nフリップフロップ回路310A−nまでの複数のリードポインタが読み出される。
ヒストリーバッファ読み出し回路160Aは、リードポインタ読み出し回路150Aによって読み出された複数のリードポインタに基づいて、1つのサブストリングに対して複数の一致候補データ列を読み出す。当該複数の一致候補データ列は、複数ステージ比較回路184Aに入力され、入力データ列と比較される。
図8は、一実施形態に係る複数ステージ比較回路の構成を説明するためのブロック図である。図8に示すように、サブストリング0〜3の各々に対して複数の比較器340A〜343A(Comparator)が設けられている。なお、例えば、サブストリング0に対して、複数の比較器が並列に接続されているが、各々の比較器を区別して説明する場合は比較器340A−1、・・・、nといい、各々の比較器を特に区別する必要がない場合は比較器340Aという。各サブストリングに対して設けられた比較器340Aの数は、各アドレスに対して設けられたフリップフロップ回路310Aの数と等しい。
本実施形態では、比較器340A−1はフリップフロップ回路310A−1に対して設けられ、比較器340A−nはフリップフロップ回路310A−nに対して設けられている。また、本実施形態では、nが8である構成が例示されている。つまり、1つのサブストリングに対して、8個のリードポインタに基づいて8個の一致候補データ列がヒストリーバッファ100から読み出され、それぞれの一致候補データ列が比較器340Aに入力されている。つまり、比較器340A−1は、フリップフロップ回路310A−1に格納されたリードポインタに基づいて読み出された一致候補データ列と入力データ列とを比較する。ただし、当該比較器の数は必ずしも当該フリップフロップ回路310Aの数と一致していなくてもよい。
複数ステージ比較回路184Aにおいて、同一のサブストリングに対して設けられた比較器のうち、最もマッチ長が長い結果がマッチ選択回路170Aに送信される。例えば、サブストリング0に対して設けられた比較器340A−1〜340A−nの各々によって生成されたマッチ長のうち、最も長いマッチ長の結果がマッチ選択回路170Aに送信され、マッチ選択回路170Aによって最終的なマッチ結果が生成される。マッチ選択回路170Aの動作は、図2に示すマッチ選択回路170の動作と同様である。つまり、複数ステージ比較回路184A及びマッチ選択回路170A(マッチ回路)によって、1つのサブストリングに対して読み出された複数の一致候補データ列に対する処理が行われる。
以上のように、第2実施形態に係るメモリシステムによると、入力データ列と複数の一致候補データ列とを比較することができるため、入力データ列を、よりマッチ長が長い一致候補データ列を用いて圧縮することができる。その結果、より圧縮性能を向上させることができる。
<第3実施形態>
第3実施形態では、第2実施形態における圧縮回路50Aと類似した構成の圧縮回路50Bについて説明する。図9は、一実施形態に係るポインタテーブルの構成を説明するためのブロック図である。図9においては、圧縮回路50Bの一部の構成を図示している。図9に示す圧縮回路50Bは、図7に示す圧縮回路50Aに類似しているが、リードポインタテーブル120Bの構成がリードポインタテーブル120Aと相違する。また、圧縮回路50Bには、LRU選択回路450BおよびLRU選択回路450Bが設けられている。以下の説明において、図7の構成と同様の特徴については説明を省略し、主に図7の構成と相違する点について説明する。
第3実施形態に係る圧縮回路50Bにおいて、リードポインタ書き込み回路140Bが、リードポインタテーブル120Bの指定のアドレスに複数のリードポインタを書き込む場合であって、当該アドレスに既に書き込まれたリードポインタが存在し、既に書き込まれたリードポインタの少なくとも一部を上書きしなければいけない場合、圧縮回路50Bは、マッチ回路(複数ステージ比較回路184及びマッチ選択回路170)によって参照された履歴に基づいて、既に書き込まれたリードポインタのうち上書きするリードポインタを決定する。なお、本実施形態では、上記の履歴としてLRU(Least Recently Used)が用いられた例について説明するが、LRUに限定されない。
図9に示すように、リードポインタテーブル120Bは、アドレスデコーダ400B、LRUアドレスデコーダ405B、複数のフリップフロップ回路410B、入力用マルチプレクサ420B、LRUマルチプレクサ430B、複数のFFマルチプレクサ425B、及び出力用マルチプレクサ440Bを有する。入力用マルチプレクサ420B及びLRUマルチプレクサ430Bに対して、交互に直列に接続されたFFマルチプレクサ425B及びフリップフロップ回路410Bは、同一のアドレスに対して設けられている。各々のフリップフロップ回路410Bはリードポインタを格納する。
アドレスデコーダ400Bは、入力端子がリードポインタ書き込み回路140Bの出力端子に接続され、出力端子が複数のフリップフロップ回路410Bの各々及び入力用マルチプレクサ420Bの制御端子に接続された構成を有している。アドレスデコーダ405Bは、入力端子がLRU選択回路450Bの出力端子に接続され、出力端子が複数のFFマルチプレクサ425Bの各々の制御端子及びLRUマルチプレクサ430Bの制御端子に接続された構成を有している。LRUマルチプレクサ430Bの入力端子は、LRU入力回路460Bの出力端子に接続されている。
LRU選択回路450Bは、フリップフロップ回路410Bに格納されていたリードポインタを再度フリップフロップ回路410Bに書き戻す際に対象のアドレスを選択する。具体的には、LRU選択回路450Bは、複数ステージ比較回路184B(図示せず)において最も長いマッチ長が得られたリードポインタについて、そのリードポインタが格納されていたリードポインタテーブル120Bにおけるアドレスを選択する。より具体的には、複数ステージ比較回路184Bにおいて、同一のサブストリングに対して設けられた複数の比較器(図8の比較器340A〜343Aに相当する比較器)のうち、最もマッチ長が長い結果が得られた比較器に対応するフリップフロップ回路410Bに格納されていたリードポインタを選択する。LRU選択回路450Bは、LRU入力回路460Bに対して、上記のように最も長いマッチ長が得られたリードポインタを出力する。ここで、書き戻すリードポインタは、例えば1サイクル以上前にマッチ回路によって参照されたリードポインタであってもよい。
LRUマルチプレクサ430Bの出力端子は、FFマルチプレクサ425B−1の入力端子に接続されている。入力用マルチプレクサ420Bの出力端子は、FFマルチプレクサ425B−1、425B−2の各々の入力端子に接続されている。FFマルチプレクサ425B−1の出力端子は、フリップフロップ回路410B−1の入力端子に接続されている。フリップフロップ回路410B−1の出力端子は、FFマルチプレクサ425B−2、425B−3の各々の入力端子及び出力用マルチプレクサ440Bの入力端子に接続されている。
FFマルチプレクサ425B−2の出力端子は、フリップフロップ回路410B−2の入力端子に接続されている。フリップフロップ回路410B−2の出力端子は、FFマルチプレクサ425B−3、425B−4の各々の入力端子及び出力用マルチプレクサ440Bの入力端子に接続されている。FFマルチプレクサ425B−3の出力端子は、フリップフロップ回路410B−3の入力端子に接続されている。上記のように、各段のフリップフロップ回路410Bは、1段後及び2段後の2つのFFマルチプレクサ425Bに接続されている。つまり、FFマルチプレクサ425Bの制御によって、フリップフロップ回路410Bに格納されていたリードポインタの移動先が、1段後又は2段後のフリップフロップ回路410Bに決定される。
リードポインタの書き戻しを行う場合、書き戻すリードポインタがフリップフロップ回路410B−1に書き込まれ、入力データ列に基づくリードポインタがフリップフロップ回路410B−2に書き込まれる。この場合、フリップフロップ回路410B−1に格納されていたリードポインタは、FFマルチプレクサ425B−3を介してフリップフロップ回路410B−3に移動する。また、フリップフロップ回路410B−2に格納されていたリードポインタは、FFマルチプレクサ425B−4の出力端子に接続されたフリップフロップ回路(図示しない)に移動する。
一方、リードポインタの書き戻しを行わない場合は、図7と同様にFIFOとして動作する。つまり、入力データ列に基づくリードポインタがフリップフロップ回路410B−1に書き込まれ、フリップフロップ回路410B−1に格納されていたリードポインタは、FFマルチプレクサ425B−2を介してフリップフロップ回路410B−2に移動する。フリップフロップ回路410B−2に格納されていたリードポインタは、FFマルチプレクサ425B−3を介してフリップフロップ回路410B−3に移動する。
以上のように、第3実施形態に係るメモリシステムによるとフリップフロップ回路410Bには有用性の高いリードポインタを残すことができるため、圧縮性能を向上させることができる。
以上、本発明について図面を参照しながら説明したが、本発明は上記の実施形態に限られるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、本実施形態の圧縮回路を基にして、当業者が適宜構成要素の追加、削除もしくは設計変更を行ったものも、本発明の要旨を備えている限り、本発明の範囲に含まれる。さらに、上述した各実施形態は、相互に矛盾がない限り適宜組み合わせが可能であり、各実施形態に共通する技術事項については、明示の記載がなくても各実施形態に含まれる。
上述した各実施形態の態様によりもたらされる作用効果とは異なる他の作用効果であっても、本明細書の記載から明らかなもの、又は、当業者において容易に予測し得るものについては、当然に本発明によりもたらされるものと解される。
1:メモリシステム、 10:メモリコントローラ、 11:プロセッサ、 12:RAM、 13:ROM、 14:ランダマイザ、 15:ECC回路、 16:圧縮・伸長回路、 17:ホストI/F、 18:メモリI/F、 19:内部バス、 20:不揮発性メモリ、 30:ホスト、 50:圧縮回路、 50−1:第1入力端子、 50−2:第2入力端子、 50−3:出力端子、 100:ヒストリーバッファ、 110:ハッシュ計算回路、 120:リードポインタテーブル、 130:ヒストリーバッファ書き込み回路、 140:リードポインタ書き込み回路、 150:リードポインタ読み出し回路、 160:ヒストリーバッファ読み出し回路、 170:マッチ選択回路、 180:入力データ遅延回路、 182:アドレス遅延回路、 184:複数ステージ比較回路、 186:サブストリング生成回路、 188:ライトポインタ管理回路、 190:リードポインタ計算回路、 300A:アドレスデコーダ、 310A:フリップフロップ回路、 320A:入力用マルチプレクサ、 330A:出力用マルチプレクサ、 340A〜343A:比較器、 400B:アドレスデコーダ、 405B:LRUアドレスデコーダ、 410B:フリップフロップ回路、 420B:入力用マルチプレクサ、 425B:FFマルチプレクサ、 430B:LRUマルチプレクサ、 440B:出力用マルチプレクサ、 450B:LRU選択回路、 460B:LRU入力回路

Claims (9)

  1. 記憶装置と、前記記憶装置を制御し且つ入力データ列を圧縮するメモリコントローラと、を備えるメモリシステムであって、
    前記メモリコントローラは、
    入力済みデータ列を格納するヒストリーバッファと、
    前記入力データ列からハッシュ値を計算するハッシュ計算回路と、
    前記ハッシュ値によって指定されたアドレスに、前記ヒストリーバッファにおけるアドレスを示すリードポインタを格納するリードポインタテーブルと、
    前記入力データ列を前記ヒストリーバッファへ書き込むヒストリーバッファ書き込み回路と、
    前記ハッシュ値によって指定された前記リードポインタテーブルにおけるアドレスに対して、前記入力データ列の前記リードポインタを書き込むリードポインタ書き込み回路と、
    前記ハッシュ値を使用して前記リードポインタテーブルからの前記リードポインタの読み出しを実行するリードポインタ読み出し回路と、
    前記リードポインタ読み出し回路によって読み出された前記リードポインタを使用して、前記ヒストリーバッファから前記入力済みデータ列を一致候補データ列として読み出すヒストリーバッファ読み出し回路と、
    前記入力データ列と前記一致候補データ列とを比較して、少なくとも一部が一致している場合に、前記入力データ列を、前記一致候補データ列を参照する参照情報に置き換えるマッチ回路と、
    を有し、
    前記リードポインタ読み出し回路による前記リードポインタの読み出し及び前記ヒストリーバッファ読み出し回路による前記入力済みデータ列の読み出しを、前記リードポインタ書き込み回路による前記リードポインタの書き込み及び前記ヒストリーバッファ書き込み回路による前記入力データ列の書き込みの完了後に実行するメモリシステム。
  2. 前記ヒストリーバッファはフリップフロップ回路を含む、請求項1に記載のメモリシステム。
  3. 前記リードポインタテーブルはフリップフロップ回路を含む、請求項1に記載のメモリシステム。
  4. 前記ヒストリーバッファはSRAMを含む、請求項1に記載のメモリシステム。
  5. 前記リードポインタテーブルはSRAMを含む、請求項1に記載のメモリシステム。
  6. 前記リードポインタテーブルは、アドレス毎に複数の前記リードポインタを有し、
    前記リードポインタ読み出し回路は、前記複数の前記リードポインタの読み出しを実行し、
    前記ヒストリーバッファ読み出し回路は、前記複数の前記リードポインタに基づいて、複数の前記一致候補データ列を読み出し、
    前記マッチ回路は、前記複数の前記一致候補データ列を処理する、請求項1に記載のメモリシステム。
  7. 前記リードポインタ書き込み回路は、前記複数の前記リードポインタを前記リードポインタテーブルの指定アドレスに書き込む場合であって、既に書き込まれた前記リードポインタが前記指定アドレスに存在し、既に書き込まれた前記リードポインタの少なくとも一部を上書きしなければいけない場合、既に書き込まれた前記リードポインタのうち、書き込まれたタイミングが古い前記リードポインタから順に上書きする、請求項6に記載のメモリシステム。
  8. 前記リードポインタ書き込み回路は、前記複数の前記リードポインタを前記リードポインタテーブルの指定アドレスに書き込む場合であって、既に書き込まれた前記リードポインタが前記指定アドレスに存在し、既に書き込まれた前記リードポインタの少なくとも一部を上書きしなければいけない場合、前記マッチ回路によって参照された履歴に基づいて、既に書き込まれた前記リードポインタのうち上書きする前記リードポインタを決定する、請求項6に記載のメモリシステム。
  9. 前記ハッシュ値は、前記入力データ列の先頭からNバイトのデータを用いて計算され、
    前記マッチ回路は、前記入力データ列と前記一致候補データ列とがNバイト以上一致する場合に、前記入力データ列を前記参照情報に置き換える、請求項1乃至8のいずれか一に記載のメモリシステム。
JP2020047738A 2020-03-18 2020-03-18 メモリシステム Pending JP2021149416A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2020047738A JP2021149416A (ja) 2020-03-18 2020-03-18 メモリシステム
US16/998,031 US11461008B2 (en) 2020-03-18 2020-08-20 Memory system for improving compression performance of a dictionary coder circuit

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020047738A JP2021149416A (ja) 2020-03-18 2020-03-18 メモリシステム

Publications (1)

Publication Number Publication Date
JP2021149416A true JP2021149416A (ja) 2021-09-27

Family

ID=77746667

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020047738A Pending JP2021149416A (ja) 2020-03-18 2020-03-18 メモリシステム

Country Status (2)

Country Link
US (1) US11461008B2 (ja)
JP (1) JP2021149416A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12001339B2 (en) 2022-03-09 2024-06-04 Kioxia Corporation Dictionary compression device and memory system

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140266816A1 (en) * 2013-03-15 2014-09-18 Dialogic Networks (Israel) Ltd. Method and apparatus for compressing data-carrying signals
JP2016052046A (ja) * 2014-09-01 2016-04-11 株式会社東芝 圧縮装置、伸長装置およびストレージ装置
US20170192709A1 (en) * 2015-12-31 2017-07-06 International Business Machines Corporation Hybrid compression for large history compressors
JP2019029023A (ja) * 2017-07-28 2019-02-21 アップル インコーポレイテッドApple Inc. メモリ圧縮を実行するシステム及び方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5473326A (en) 1990-12-14 1995-12-05 Ceram Incorporated High speed lossless data compression method and apparatus using side-by-side sliding window dictionary and byte-matching adaptive dictionary
US5406278A (en) 1992-02-28 1995-04-11 Intersecting Concepts, Inc. Method and apparatus for data compression having an improved matching algorithm which utilizes a parallel hashing technique
JP3889762B2 (ja) 2002-12-26 2007-03-07 富士通株式会社 データ圧縮方法、プログラム及び装置
JP5251799B2 (ja) 2009-09-15 2013-07-31 株式会社リコー データ処理装置およびデータ処理方法
US10509580B2 (en) * 2016-04-01 2019-12-17 Intel Corporation Memory controller and methods for memory compression utilizing a hardware compression engine and a dictionary to indicate a zero value, full match, partial match, or no match
US10241938B1 (en) * 2017-12-20 2019-03-26 Sandisk Technologies Llc Output data path for non-volatile memory

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140266816A1 (en) * 2013-03-15 2014-09-18 Dialogic Networks (Israel) Ltd. Method and apparatus for compressing data-carrying signals
JP2016052046A (ja) * 2014-09-01 2016-04-11 株式会社東芝 圧縮装置、伸長装置およびストレージ装置
US20170192709A1 (en) * 2015-12-31 2017-07-06 International Business Machines Corporation Hybrid compression for large history compressors
JP2019029023A (ja) * 2017-07-28 2019-02-21 アップル インコーポレイテッドApple Inc. メモリ圧縮を実行するシステム及び方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12001339B2 (en) 2022-03-09 2024-06-04 Kioxia Corporation Dictionary compression device and memory system

Also Published As

Publication number Publication date
US11461008B2 (en) 2022-10-04
US20210294500A1 (en) 2021-09-23

Similar Documents

Publication Publication Date Title
US5373290A (en) Apparatus and method for managing multiple dictionaries in content addressable memory based data compression
US5485526A (en) Memory circuit for lossless data compression/decompression dictionary storage
JPWO2015128955A1 (ja) 記憶デバイス、記憶デバイスを有する装置、及び記憶制御方法
JP2022094108A (ja) 圧縮装置および制御方法
JP2021149416A (ja) メモリシステム
JP2022188911A (ja) 圧縮装置、圧縮伸張装置及びメモリシステム
US11588498B2 (en) Character string search device and memory system
US11397546B2 (en) Memory system
JP2023131392A (ja) 辞書式圧縮装置及びメモリシステム
CN112053735B (zh) 固态存储装置的重复数据处理方法
JP2022070104A (ja) データ圧縮装置及びデータ圧縮方法
WO2021046054A1 (en) Command processor with multiple string copy engines for a decompression system
US20230291418A1 (en) Data decompression device, memory system, and data decompression method
Safieh et al. Address space partitioning for the parallel dictionary LZW data compression algorithm
US20230403027A1 (en) Dictionary compressor, data compression device, and memory system
US12108064B2 (en) Memory system
US20240204796A1 (en) Code table generation device, memory system, and code table generation method
US20240106459A1 (en) Compression device and compression method
US11561738B2 (en) Memory system
Vasanthi et al. Implementation of Robust Compression Technique Using LZ77 Algorithm on Tensilica's Xtensa Processor
US20240311003A1 (en) Memory system and method
US20240004549A1 (en) Memory system
Safieh The Parallel Dictionary LZW Algorithm for Flash Memory Controllers
JP2023039698A (ja) データ圧縮装置およびメモリシステム
JPH07104969A (ja) データ圧縮方法および装置並びにデータ復元方法および装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220909

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230614

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230620

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230817

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20230905