JP6950149B2 - メモリコントローラ、メモリシステム、および、メモリコントローラの制御方法 - Google Patents

メモリコントローラ、メモリシステム、および、メモリコントローラの制御方法 Download PDF

Info

Publication number
JP6950149B2
JP6950149B2 JP2016096618A JP2016096618A JP6950149B2 JP 6950149 B2 JP6950149 B2 JP 6950149B2 JP 2016096618 A JP2016096618 A JP 2016096618A JP 2016096618 A JP2016096618 A JP 2016096618A JP 6950149 B2 JP6950149 B2 JP 6950149B2
Authority
JP
Japan
Prior art keywords
command
commands
memory
write
read
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.)
Active
Application number
JP2016096618A
Other languages
English (en)
Other versions
JP2017054483A (ja
Inventor
宏行 岩城
宏行 岩城
石井 健
健 石井
龍男 新橋
龍男 新橋
中西 健一
健一 中西
藤波 靖
靖 藤波
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.)
Sony Corp
Sony Group Corp
Original Assignee
Sony Corp
Sony Group 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 Sony Corp, Sony Group Corp filed Critical Sony Corp
Priority to US15/750,280 priority Critical patent/US20180232178A1/en
Priority to PCT/JP2016/067731 priority patent/WO2017043140A1/ja
Publication of JP2017054483A publication Critical patent/JP2017054483A/ja
Application granted granted Critical
Publication of JP6950149B2 publication Critical patent/JP6950149B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • 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
    • G06F3/0611Improving I/O performance in relation to response time
    • 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
    • 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]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Memory System (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Description

本技術は、メモリコントローラ、メモリシステム、および、メモリコントローラの制御方法に関する。詳しくは、コマンドをキューに保持するメモリコントローラ、メモリシステム、および、メモリコントローラの制御方法に関する。
近年の情報処理システムにおいては、補助記憶装置やストレージとして、不揮発性メモリ(NVM:Non-Volatile memory)が用いられることがある。この不揮発性メモリは、大きなサイズを単位としたデータアクセスに対応したフラッシュメモリと、小さな単位での高速なランダムアクセスが可能な不揮発性ランダムアクセスメモリ(NVRAM:Non-Volatile RAM)とに大別される。ここで、フラッシュメモリの代表例としては、NAND型フラッシュメモリが挙げられる。一方、不揮発性ランダムアクセスメモリの例としては、ReRAM(Resistive RAM)、PCRAM(Phase-Change RAM)、MRAM(Magnetoresistive RAM)などが挙げられる。
これらの不揮発性メモリにアクセスする際に、ライトコマンドやリードコマンドをキューに保持し、それらのコマンドを到着順に取り出して処理するメモリコントローラが提案されている(例えば、特許文献1参照。)。このようにキューにコマンドをバッファリングするのは、それらのコマンドを発行するホストコンピュータと、メモリコントローラとの処理速度や転送速度の差を緩和するためである。
特開2007−47274号公報
しかしながら、上述の従来技術では、ライトコマンドおよびリードコマンドが混在して発行された際に、非効率的なアクセスが行われてアクセス速度が低下するおそれがある。例えば、リードコマンドの次にライトコマンドを処理する際にメモリコントローラは、リードデータとライトデータとがデータ線で衝突するのを避けるために、リードデータの読出しが完了してからライトコマンドを処理する必要がある。このため、リードコマンドとライトコマンドが交互に発行された回数が多いほど、リードデータの読出し完了までライトコマンドの処理を待たせる時間の累積時間が長くなり、アクセス速度が低下するという問題がある。
本技術はこのような状況に鑑みて生み出されたものであり、メモリコントローラがメモリにアクセスする際のアクセス速度を向上させることを目的とする。
本技術は、上述の問題点を解消するためになされたものであり、その第1の側面は、種類の異なる2つのコマンドのいずれかが入力されるたびに当該入力されたコマンドを保持する保持部と、上記2つのコマンドのうち優先すべき優先コマンドを上記2つのコマンドの一方から他方に切り替える切替部と、上記優先コマンドを優先して上記保持部から順に取り出してから上記優先コマンドに該当しない方のコマンドを上記保持部から順に取り出すコマンド処理部とを具備するメモリコントローラ、および、その制御方法である。これにより、2つのコマンドの一方から他方に優先コマンドが切り替えられるという作用をもたらす。
前記コマンド処理部は、前記優先コマンドの全てを前記保持部から順に取り出してから前記優先コマンドに該当しない方のコマンドを前記保持部から順に取り出してもよい。これにより、優先コマンドの全てが取り出されてから、優先コマンドに該当しない方のコマンドが取り出されるという作用をもたらす。
また、この第1の側面において、上記2つのコマンドのそれぞれの数を計数して計数値を生成する計数部をさらに具備し、上記切替部は、上記2つのコマンドのそれぞれの計数値が所定の閾値を超えたか否かに基づいて上記優先コマンドを切り替えてもよい。これにより、コマンドのそれぞれの計数値が閾値を超えたか否かに基づいて優先コマンドが切り替えられるという作用をもたらす。
また、この第1の側面において、上記計数部は、上記保持部に保持された上記コマンドの数を計数してもよい。これにより、保持部に保持されたコマンドの数に基づいて優先コマンドが切り替えられるという作用をもたらす。
また、この第1の側面において、上記計数部は、上記保持部から取り出された上記コマンドの数を計数してもよい。これにより、保持部から取り出されたコマンドの数に基づいて優先コマンドが切り替えられるという作用をもたらす。
また、この第1の側面において、前記コマンドの指定する論理アドレスを物理アドレスに変換する論物アドレス変換を行うアドレス変換部をさらに具備し、前記保持部は、前記論物アドレス変換が行われた後の前記コマンドをメモリコマンドとして保持するメモリコマンド保持部と、前記アドレス変換が行われる前の前記コマンドをホストコマンドとして保持するホストコマンド保持部とを備えてもよい。これにより、ホストコマンドまたはメモリコマンドの数に基づいて優先コマンドが切り替えられるという作用をもたらす。
また、この第1の側面において、前記計数部は、前記ホストコマンド保持部に保持された前記ホストコマンドの数を計数してもよい。これにより、保持されたホストコマンド数に基づいて優先モードが切り替えられるという作用をもたらす。
また、この第1の側面において、前記計数部は、前記メモリコマンド保持部に保持された前記メモリコマンドの数を待機中コマンド数として計数し、前記メモリコマンド保持部から取り出された前記メモリコマンドの数を処理コマンド数として計数し、前記閾値は、前記優先コマンドを切り替えたときの前記待機中コマンド数であり、前記切替部は、前記処理コマンド数が前記閾値を超えるか否かに基づいて前記優先コマンドを切り替えてもよい。これにより、優先コマンドを切り替えたときの前記待機中コマンド数を処理コマンド数が超えるか否かに基づいて優先コマンドが切り替えられるという作用をもたらす。
また、この第1の側面において、上記優先モード切替部は、一定時間が経過するたびに上記優先コマンドを切り替えてもよい。これにより、一定時間が経過するたびに優先コマンドが切り替えられるという作用をもたらす。
また、この第1の側面において、上記切替部は、上記優先コマンドの切り替えを指示する特定のコマンドに従って上記優先コマンドを切り替えてもよい。これにより、特定のコマンドにより優先コマンドが切り替えられるという作用をもたらす。
また、この第1の側面において、上記2つのコマンドの一方は、データの読出しを指示するリードコマンドであり、上記2つのコマンドの他方は、データの書込みを指示するライトコマンドであり、上記保持部は、上記リードコマンドを保持するリードコマンド保持部と、上記ライトコマンドを保持するライトコマンド保持部とを備えてもよい。これにより、リードコマンド保持部とライトコマンド保持部とにコマンドが保持されるという作用をもたらす。
また、本技術の第2の側面は、メモリセルと、上記メモリセルにアクセスするための互いに異なる2つのコマンドのいずれかが入力されるたびに当該入力されたコマンドを保持する保持部と、上記2つのコマンドのうち優先すべき優先コマンドを上記2つのコマンドの一方から他方に切り替える切替部と、上記優先コマンドを優先して上記保持部から順に取り出してから上記優先コマンドに該当しない方のコマンドを上記保持部から順に取り出すコマンド処理部とを具備するメモリシステムである。これにより、2つのコマンドの一方から他方に優先コマンドが切り替えられるという作用をもたらす。
本技術によれば、メモリコントローラがメモリにアクセスする際のアクセス速度を向上させることができるという優れた効果を奏し得る。なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
第1の実施の形態におけるメモリシステムの一構成例を示すブロック図である。 第1の実施の形態におけるメモリコントローラの一構成例を示すブロック図である。 第1の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。 第1の実施の形態におけるリクエスト発行制御部の一構成例を示すブロック図である。 第1の実施の形態におけるコマンドキューの一構成例を示す図である。 第1の実施の形態における優先モード切替部の動作の一例を示す図である。 第1の実施の形態におけるリクエスト発行管理部の一構成例を示すブロック図である。 第1の実施の形態における取り出しコマンド切替制御部の動作の一例を示す図である。 第1の実施の形態におけるリクエスト発行部の動作の一例を示す図である。 第1の実施の形態におけるメモリコントローラの状態遷移図の一例である。 第1の実施の形態における不揮発性メモリの一構成例を示すブロック図である。 第1の実施の形態における可変抵抗素子の抵抗分布の一例を示す図である。 第1の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。 第1の実施の形態におけるリクエスト発行処理の一例を示すフローチャートである。 第1の実施の形態におけるリード優先モードのメモリコントローラの動作の一例を示すタイミングチャートである。 第1の実施の形態におけるライト優先モードのメモリコントローラの動作の一例を示すタイミングチャートである。 第2の実施の形態におけるリクエスト発行制御部の一構成例を示すブロック図である。 第2の実施の形態における優先モード切替部の動作の一例を示す図である。 第2の実施の形態におけるメモリコントローラの状態遷移図の一例である。 第2の実施の形態におけるメモリコントローラの動作の一例を示す図である。 第2の実施の形態におけるキュー占有率の変化の一例を示すグラフである。 第2の実施の形態における閾値を変えた場合のキュー占有率の変化の一例を示すグラフである。 リード優先に固定した比較例におけるライトコマンドのキュー占有率の変化の一例を示すグラフである。 ライト優先に固定した比較例におけるライトコマンドのキュー占有率の変化の一例を示すグラフである。 第3の実施の形態におけるリクエスト発行制御部の一構成例を示すブロック図である。 第3の実施の形態における優先モード切替部の動作の一例を示す図である。 第3の実施の形態におけるメモリコントローラの状態遷移図の一例である。 第3の実施の形態におけるメモリコントローラの動作の一例を示す図である。 第4の実施の形態におけるリクエスト発行制御部の一構成例を示すブロック図である。 第4の実施の形態における優先モード切替部の動作の一例を示す図である。 第4の実施の形態におけるメモリコントローラの状態遷移図の一例である。 第4の実施の形態におけるメモリコントローラの動作の一例を示す図である。 第5の実施の形態におけるリクエスト発行制御部の一構成例を示すブロック図である。 第5の実施の形態におけるメモリコントローラの状態遷移図の一例である。 第5の実施の形態におけるメモリコントローラの動作の一例を示すタイミングチャートである。 比較例におけるメモリコントローラの動作の一例を示すタイミングチャートである。 第5の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。 第6の実施の形態におけるリクエスト発行制御部の一構成例を示すブロック図である。 第6の実施の形態における優先モード切替部の動作の一例を示す図である。 第6の実施の形態におけるメモリコントローラの状態遷移図の一例である。 第6の実施の形態におけるメモリコントローラの動作の一例を示すタイミングチャートである。 第6の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。
以下、本技術を実施するための形態(以下、実施の形態と称する)について説明する。説明は以下の順序により行う。
1.第1の実施の形態(待機中のコマンド数に基づいて優先モードを切り替える例)
2.第2の実施の形態(処理したコマンド数に基づいて優先モードを切り替える例)
3.第3の実施の形態(一定時間が経過するたびに優先モードを切り替える例)
4.第4の実施の形態(処理したコマンド数または切替コマンドに基づいて優先モードを切り替える例)
5.第5の実施の形態(ホストコマンド数に基づいて優先モードを切り替える例)
6.第6の実施の形態(動的に変更される閾値に基づいて優先モードを切り替える例)
<1.第1の実施の形態>
[メモリシステムの構成例]
図1は、実施の形態におけるメモリシステムの一構成例を示すブロック図である。このメモリシステムは、ホストコンピュータ100およびストレージ200を備える。
ホストコンピュータ100は、メモリシステム全体を制御するものである。具体的には、ホストコンピュータ100は、コマンドおよびデータを生成してストレージ200に信号線109を介して供給する。また、ホストコンピュータ100は、ストレージ200から、読み出されたデータを受け取る。ここで、コマンドは、ストレージ200を制御するためのものであり、例えば、論理アドレスを指定してデータの書込みを指示するライトコマンドや、論理アドレスを指定してデータの読出しを指示するリードコマンドを含む。ここで、論理アドレスは、ホストコンピュータ100がストレージ200にアクセスする際のアクセス単位ごとに割り振られたアドレスである。
ストレージ200は、メモリコントローラ300と複数のメモリバンク400とを備える。メモリバンク400のそれぞれは、複数の不揮発性メモリ410を備える。メモリコントローラ300は、ストレージ200全体を制御するものである。このメモリコントローラ300は、ホストコンピュータ100からライトコマンドおよびデータを受け取った場合に、そのデータから誤り検出訂正符号(ECC:Error detection and Correction Code)を生成する。メモリコントローラ300は、メモリバンク400のそれぞれに信号線308や信号線309を介してアクセスして符号化したデータを書き込む。
また、ホストコンピュータ100からリードコマンドを受け取った場合、メモリコントローラ300は、メモリバンク400に信号線308等を介してアクセスして符号化されたデータを読み出す。そして、メモリコントローラ300は、符号化されたデータを、符号化前の元のデータに変換(すなわち、復号)する。復号の際に、メモリコントローラ300は、ECCに基づいてデータにおける誤りの検出および訂正を行う。メモリコントローラ300は、訂正したデータをホストコンピュータ100に供給する。
不揮発性メモリ410は、メモリコントローラ300の制御に従って、データを記憶するものである。例えば、ReRAMが不揮発性メモリ410として用いられる。この不揮発性メモリ410は、複数のメモリセルを備え、これらのメモリセルは、複数のブロックに分けられている。ここで、ブロックは、不揮発性メモリ410のアクセス単位であり、セクタとも呼ばれる。ブロックのそれぞれにはメモリアドレスが割り当てられている。なお、ReRAMの代わりに、フラッシュメモリ、PCRAM、および、MRAMなどを不揮発性メモリ410として用いてもよい。
なお、メモリシステムに複数のメモリバンク400を設けているが、メモリバンク400を1つのみ設ける構成であってもよい。
[メモリコントローラの構成例]
図2は、第1の実施の形態におけるメモリコントローラ300の一構成例を示すブロック図である。このメモリコントローラ300は、RAM(Random Access Memory)312、CPU(Central Processing Unit)313、ECC処理部314およびROM(Read Only Memory)315を備える。また、メモリコントローラ300は、ホストインターフェース311、バス316およびメモリインターフェース317を備える。
RAM312は、CPU313が実行する処理において必要となるデータを一時的に保持するものである。CPU313は、メモリコントローラ300全体を制御するものである。ROM315は、CPU313が実行するプログラム等を記憶するものである。ホストインターフェース311は、ホストコンピュータ100との間でデータやコマンドを相互に交換するものである。バス316は、RAM312、CPU313、ECC処理部314、ROM315、ホストインターフェース311およびメモリインターフェース317が相互にデータを交換するための共通の経路である。メモリインターフェース317は、不揮発性メモリ410との間でデータやコマンドを相互に交換するものである。
メモリインターフェース317と不揮発性メモリ410との間には、データ線やコマンドアドレス線が配線されている。メモリインターフェース317は、データ線を介して不揮発性メモリ400との間でリードデータまたはライトデータを転送し、コマンドアドレス線を介してコマンドを転送する。また、メモリインターフェース317は、データ線およびコマンドアドレス線のそれぞれにおいて、送信および受信を同時に行うことのできない半二重通信方式で通信を行っている。このため、メモリインターフェース317は、リクエストごとにライトデータおよびリードデータの一方しか転送することができない。仮に、リードデータおよびライトデータの両方を同時に転送すると、メモリコントローラ300および不揮発性メモリ410の双方は、データの受け取りに失敗してしまう。言い換えれば、ライトデータとリードデータとがデータ線上で衝突してしまう。そこで、この第1の実施の形態では、メモリコントローラ300は、データが衝突しないように、リードリクエストとライトリクエストの発行タイミングを制御している。
ECC処理部314は、符号化対象のデータを符号化し、また、符号化されたデータを復号するものである。データの符号化においてECC処理部314は、データにパリティを付加することにより一定の単位で符号化する。また、データの復号において、ECC処理部314は、パリティを使用してデータの誤りを検出および訂正する。ECC処理部314は、復号した元のデータをホストコンピュータ100にバス316を介して供給する。
図3は、第1の実施の形態におけるメモリコントローラ300の機能構成例を示すブロック図である。このメモリコントローラ300は、ホストインターフェース311、ECC処理部314、メモリインターフェース317およびリクエスト発行制御部320を備える。このリクエスト発行制御部320は、図2におけるRAM312やCPU313により実現される。
リクエスト発行制御部320は、コマンドに基づいてリクエストを発行するものである。ここで、リクエストは、メモリアドレスを指定して不揮発性メモリ410にアクセスを要求するものであり、読出しを要求するリードリクエストや書込みを要求するライトリクエストを含む。このリクエスト発行制御部320は、発行したリクエストをメモリインターフェース317を介して不揮発性メモリ410に供給する。このリクエストによりリクエスト発行制御部320が不揮発性メモリ410にアクセスするアクセス単位は、レジスタ(不図示)などにより予め設定することができる。例えば、アクセス単位は、2キロバイト(KB)や4キロバイト(KB)などに設定される。
[リクエスト発行制御部の構成例]
図4は、第1の実施の形態におけるリクエスト発行制御部320の一構成例を示すブロック図である。このリクエスト発行制御部320は、待機中リードコマンド数計数部321、コマンドデコーダ322、待機中ライトコマンド数計数部323、優先モード切替部324、コマンドキュー340およびリクエスト発行管理部350を備える。
コマンドデコーダ322は、コマンドをデコードするものである。このコマンドデコーダ322は、コマンドをデコードするたびに、そのデコードしたコマンドをコマンドキュー340に追加する。
コマンドキュー340は、コマンドデコーダ322からのコマンドを保持するものである。このコマンドキュー340は、例えば、先入れ先出し(FIFO:First In, First Out)方式で、到着順にコマンドを保持する。これらのコマンドは、リクエスト発行管理部350により、到着順に取り出される。なお、コマンドキュー340は、特許請求の範囲に記載の保持部の一例である。
待機中リードコマンド数計数部321は、コマンドキュー340が保持している(言い換えれば、待機中の)リードコマンドの数を計数するものである。ここで、コマンドには、そのコマンドがライトコマンドであるか否かを示すRWフラグと、アクセス先のメモリアドレスとが格納されるものとする。このRWフラグには、例えば、ライトコマンドである場合に「1」が設定され、リードコマンドである場合に「0」が設定される。
待機中リードコマンド数計数部321は、待機中のコマンドのそれぞれのRWフラグを参照し、それらの値からライトコマンドの数を求める。例えば、待機中リードコマンド数計数部321は、待機中のコマンドのそれぞれのRWフラグの反転値を全て加算し、その加算値をカウンタ値RCNTとして優先モード切替部324およびリクエスト発行管理部350に供給する。
待機中ライトコマンド数計数部323は、待機中のライトコマンドの数を計数するものである。この待機中ライトコマンド数計数部323は、例えば、待機中のコマンドのそれぞれのRWフラグの値を全て加算し、その加算値をカウンタ値WCNTとして優先モード切替部324およびリクエスト発行管理部350に供給する。なお、待機中リードコマンド数計数部321および待機中ライトコマンド数計数部323からなる回路は、特許請求の範囲に記載の計数部の一例である。
なお、待機中リードコマンド数計数部321は、RWフラグの反転値の加算によりコマンド数を計数しているが、他の方法によりコマンド数を計数してもよい。例えば、待機中リードコマンド数計数部321は、コマンドデコーダ322によりリードコマンドが追加されるたびにカウンタ値RCNTを増分してもよい。この場合には、リクエスト発行管理部350によりリードコマンドが取り出されるたびに待機中リードコマンド数計数部321は、カウンタ値RCNTを減分すればよい。待機中ライトコマンド数計数部323についても同様に、ライトコマンドの追加のたびにカウンタ値WCNTを増分し、ライトコマンドの取り出しのたびに減分してもよい。
優先モード切替部324は、2つのコマンドの一方を優先するモードと、他方を優先するモードとのいずれかに優先モードを切り替えるものである。例えば、優先モード切替部324は、ライトコマンドを優先するライト優先モードと、リードコマンドを優先するリード優先モードとを排他的に切り替える。この優先モード切替部324は、カウンタ値RCNTとカウンタ値WCNTと所定の閾値N(Nは、2以上の整数)とを比較し、その比較結果に基づいて優先モードを切り替える。例えば、Nには、コマンドキュー340に保持することができるコマンドの総数(以下、「キューサイズ」と称する。)が設定される。優先モード切替部324は、カウンタ値RCNTがN以上である場合にリード優先モードに切り替え、カウンタ値WCNTがN以上である場合にライト優先モードに切り替える。初期状態においては、特定の優先モード(例えば、リード優先モード)が設定される。優先モード切替部324は、現在の優先モードMODEをリクエスト発行管理部350に通知する。なお、優先モード切替部324は、特許請求の範囲に記載の切替部の一例である。
なお、メモリコントローラ300は、ライトコマンドをおよびリードコマンドのそれぞれを優先するモードを切り替えているが、優先するコマンドの組合せは、ライトコマンドおよびリードコマンドに限定されない。例えば、メモリコントローラ300は、アドレスの全ビットを特定の値(「0」など)にすることを指示する消去コマンドと、それ以外のコマンドとのそれぞれを優先するモードを切り替えてもよい。
また、閾値Nにキューサイズを設定しているが、優先モードを排他的に切り替えることができる値であれば、閾値Nは、キューサイズ未満の値であってもよい。例えば、キューサイズがm(mは整数)である場合、m/2より大きな値をNに設定すれば、優先モード切替部324は、優先モードを排他的に切り替えることができる。
リクエスト発行管理部350は、優先モードMODEに従って、コマンドキュー340からコマンドを取り出して処理するものである。ライト優先モードである場合にリクエスト発行管理部350は、ライトコマンドの全てを到着順にコマンドキュー340から取り出し、それらのコマンドを処理してライトリクエストを発行する。そして、全てのライトコマンドを取り出してから、リクエスト発行管理部350は、リードコマンドを到着順にコマンドキュー340から取り出し、それらのコマンドを処理してリードリクエストを発行する。
一方、リード優先モードである場合にリクエスト発行管理部350は、リードコマンドの全てを到着順にコマンドキュー340から取り出し、それらのコマンドを処理してライトリクエストを発行する。そして、全てのリードコマンドを取り出してから、リクエスト発行管理部350は、ライトコマンドを到着順にコマンドキュー340から取り出し、それらのコマンドを処理してライトリクエストを発行する。なお、リクエスト発行管理部350は、特許請求の範囲に記載のコマンド処理部の一例である。
なお、上述のようにリクエスト発行管理部350が、ホストコンピュータ100によるコマンドの発行順と異なる順でコマンドを処理しても、ホストコンピュータ100により同じアドレスに対するアクセス順が管理されているため不都合は生じない。例えば、ホストコンピュータ100は、ライトコマンドにより、あるアドレスに退避用のデータを書き込んだ際は、ライト応答を受け取るまで、そのアドレスを指定したリードコマンドを発行しない。
図5は、第1の実施の形態におけるコマンドキュー340の一構成例を示す図である。同図に例示するように、コマンドキュー340には、複数のエントリが設けられたコマンド保持部341が設けられる。それぞれのエントリには、エントリを識別するためのエントリ番号が割り当てられ、エントリごとに1つのコマンドが保持される。ここで、コマンドデコーダ322およびリクエスト発行制御部320が共通にアクセスすることができるレジスタ(不図示)には、リードポインタ、ライトポインタおよびコマンド数が保持される。リードポインタは、コマンドを取り出すエントリの位置を示し、ライトポインタは、コマンドを追加するエントリの位置を示す。コマンド数は、コマンドキュー340に保持されているコマンドの数を示す。
コマンドデコーダ322は、コマンドを追加する際にコマンド数がキューサイズである(すなわち、バッファフル)か否かを判断する。バッファフルであれば、コマンドデコーダ322は、例えば、コマンドを破棄し、バッファフルの通知をホストコンピュータ100に返す。一方、バッファフルでない場合にコマンドデコーダ322は、ライトポインタの示すエントリにコマンドを書き込む。そして、コマンドデコーダ322は、ライトポインタを更新(例えば、インクリメント)し、コマンド数を増分する。
また、リクエスト発行制御部320は、コマンド数が「0」(すなわち、バッファエンプティ)でなければ、リードポインタの示すエントリのコマンドのRWフラグを参照し、そのコマンドが取り出す対象のコマンドであるか否かを判断する。例えば、リード優先モードにおいてリクエスト発行制御部320は、全てのリードコマンドを取り出す(すなわち、カウンタ値RCNTが0になる)まではリードコマンドを取り出し対象とする。取り出す対象のコマンドでなければ、リードポインタのエントリ番号をデクリメントし、そのエントリ番号のコマンドのRWフラグを参照する。このようにして、リクエスト発行制御部320は、リードポインタから到着順と逆順にエントリを辿って取り出すコマンドを探索し、取り出し対象のコマンドを取り出す。
リクエスト発行制御部320は、リードポインタの示すエントリと異なるエントリからコマンドを取り出した場合に、その取り出したエントリの次のエントリ以降のコマンドのそれぞれをエントリ番号の若い方に1つずつ詰める。そして、リクエスト発行制御部320は、リードポインタを更新(例えば、インクリメント)し、コマンド数を減分する。
図6は、第1の実施の形態における優先モード切替部324の動作の一例を示す図である。リード優先モードにおいて、待機中のライトコマンド数WCNTがn以上になると、優先モード切替部324は、ライト優先モードに切り替える。一方、ライト優先モードにおいて待機中のリードコマンド数RCNTがN以上になると、優先モード切替部324は、リード優先モードに切り替える。
図7は、第1の実施の形態におけるリクエスト発行管理部350の一構成例を示すブロック図である。このリクエスト発行管理部350は、取り出しコマンド切替制御部351、取り出し部352およびリクエスト発行部353を備える。
取り出しコマンド切替制御部351は、コマンドキュー340から取り出すコマンドの種類を切替信号により切り替えるものである。ここで、切替信号は、コマンドキュー340から取り出すコマンドの種類を取り出し部352に指示する信号である。例えば、リードコマンドの取り出しを指示する場合に切替信号にハイレベルが設定され、ライトコマンドの取り出しを指示する場合に切替信号にローレベルが設定される。
取り出しコマンド切替制御部351は、リード優先モードにおいてカウンタ値RCNTを参照し、コマンドキュー340に待機中のリードコマンドがあるか否かを判断する。待機中のリードコマンドが有る場合に取り出しコマンド切替制御部351は、切替信号をハイレベルにしてリードコマンドを取り出させる。一方、待機中のリードコマンドが無い場合に取り出しコマンド切替制御部351は、切替信号をローレベルにしてライトコマンドを取り出させる。
また、取り出しコマンド切替制御部351は、ライト優先モードにおいてカウンタ値WCNTを参照し、コマンドキュー340に待機中のライトコマンドがあるか否かを判断する。待機中のライトコマンドが有る場合に取り出しコマンド切替制御部351は、切替信号をローレベルにしてライトコマンドを取り出させる。一方、待機中のライトコマンドが無い場合に取り出しコマンド切替制御部351は、切替信号をハイレベルにしてリードコマンドを取り出させる。
この制御により、ライト優先モードにおいて全てのライトコマンドが順にコマンドキュー340から連続して取り出され、ライトコマンドの全てが取り出されてからリードコマンドが順に取り出される。また、リード優先モードにおいて全てのリードコマンドが順にコマンドキュー340から連続して取り出され、リードコマンドの全てが取り出されてからライトコマンドが順に取り出される。
取り出し部352は、切替信号に従って、コマンドキュー340からコマンドを取り出すものである。この取り出し部352は、取り出したコマンドをリクエスト発行部353に供給する。
リクエスト発行部353は、取り出されたコマンドを処理してリクエストを発行するものである。リクエストを発行する際にリクエスト発行部353は、アクセスするメモリ領域(メモリバンクなど)について、完了していないアクセス制御が存在しないか否かを判断し、そのアクセス制御が完了してからリクエストを発行する。例えば、前回リードリクエストを発行したメモリ領域について、ライトリクエストを発行する場合にリクエスト発行部353は、前回のリードデータの読出しが完了してからライトリクエストを発行する。これにより、データ線におけるライトデータとリードデータとの衝突が防止される。また、前回ライトリクエストを発行したメモリ領域について、リクエストを発行する場合にリクエスト発行部353は、ライトリクエストに対するライト応答を受信してからリクエストを発行する。ここで、ライト応答は、不揮発性メモリ410が、ライトデータの書込みに成功したことを通知するものである。
図8は、第1の実施の形態における取出しコマンド切替制御部の351の動作の一例を示す図である。取り出しコマンド切替制御部351は、リード優先モードにおいて待機中のリードコマンドがあれば、切替信号をハイレベルにしてリードコマンドを取り出させる。一方、待機中のリードコマンドが無い場合に取り出しコマンド切替制御部351は、切替信号をローレベルにしてライトコマンドを取り出させる。
また、取り出しコマンド切替制御部351は、ライト優先モードにおいて待機中のライトコマンドがあれば、切替信号をローレベルにしてライトコマンドを取り出させる。一方、待機中のライトコマンドが無い場合に取り出しコマンド切替制御部351は、切替信号をハイレベルにしてリードコマンドを取り出させる。
図9は、第1の実施の形態におけるリクエスト発行部353の動作の一例を示す図である。あるメモリ領域について前回リードリクエストを発行し、今回のリクエストがライトリクエストである場合にはリクエスト発行部353は、リードデータの読出しが完了してから、そのライトリクエストを発行する。また、前回ライトリクエストを発行した場合にリクエスト発行部353は、そのライトリクエストに対するライト応答を受け取ってから、今回のリクエストを発行する。
図10は、第1の実施の形態におけるメモリコントローラ300の状態遷移図の一例である。メモリコントローラ300の状態は、ライト優先モード510およびリード優先モード520を含む。また、ライト優先モード510は、ライトコマンド連続処理モード511と、ライト処理後リードコマンド連続処理モード512とを含む。リード優先モード520は、リード処理後ライトコマンド連続処理モード521と、リードコマンド連続処理モード522とを含む。
初期状態は、例えば、リードコマンド連続処理モード522に設定される。メモリコントローラ300は、このリードコマンド連続処理モード522においてコマンドキュー340からリードコマンドのみを連続して到着順に取り出して処理する。リードコマンド連続処理モード522において待機中のリードコマンドが無くなると、メモリコントローラ300は、リード処理後ライトコマンド連続処理モード521に移行する。
リード処理後ライトコマンド連続処理モード521においてメモリコントローラ300は、コマンドキュー340からライトコマンドのみを連続して到着順に取り出して処理する。リード処理後ライトコマンド連続処理モード521においてリードコマンドがコマンドキュー340に追加されると、メモリコントローラ300は、リードコマンド連続処理モード522に移行する。また、待機中のライトコマンド数がn以上となると、メモリコントローラ300は、ライトコマンド連続処理モード511に移行する。ここで、nがバッファサイズである場合には、待機中のライトコマンド数がnであるときの待機中のリードコマンド数は0である。
ライトコマンド連続処理モード511において、メモリコントローラ300は、コマンドキュー340からライトコマンドのみを連続して到着順に取り出して処理する。このライトコマンド連続処理モード511において待機中のライトコマンドが無くなると、メモリコントローラ300は、ライト処理後リードコマンド連続処理モード512に移行する。
ライト処理後リードコマンド連続処理モード512においてメモリコントローラ300は、コマンドキュー340からリードコマンドのみを連続して到着順に取り出して処理する。このライト処理後リードコマンド連続処理モード512においてライトコマンドがコマンドキュー340に追加されると、メモリコントローラ300は、ライトコマンド連続処理モード511に移行する。また、待機中のリードコマンド数がn以上となると、メモリコントローラ300は、リードコマンド連続処理モード522に移行する。ここで、nがバッファサイズである場合には、待機中のリードコマンド数がnであるときの待機中のライトコマンド数は0である。
[不揮発性メモリの構成例]
図11は、第1の実施の形態における不揮発性メモリ410の一構成例を示すブロック図である。この不揮発性メモリ410は、データバッファ411、メモリセルアレイ412、ドライバ413、アドレスデコーダ414、バス415、制御インターフェース416、および、メモリ制御部417を備える。
データバッファ411は、メモリ制御部417の制御に従って、ライトデータやリードデータをアクセス単位で保持するものである。メモリセルアレイ412は、マトリックス
状に配列された複数のメモリセルを備える。各々のメモリセルとして、ReRAMなどの不揮発性の記憶素子が用いられる。
ドライバ413は、アドレスデコーダ414により選択されたメモリセルに対してデータの書込み、または、データの読出しを行うものである。アドレスデコーダ414は、リクエストにより指定されたアドレスを解析して、そのアドレスに対応するメモリセルを選択するものである。バス415は、データバッファ411、メモリセルアレイ412、アドレスデコーダ414、メモリ制御部417および制御インターフェース416が相互にデータを交換するための共通の経路である。制御インターフェース416は、メモリコントローラ300と不揮発性メモリ410とがデータやリクエストを相互に交換するためのインターフェースである。
メモリ制御部417は、ドライバ413およびアドレスデコーダ414を制御して、データの書込み、または、読出しを行わせるものである。メモリ制御部417は、ライトリクエストを受け取ると、ライトデータをデータバッファ411に保持させる。また、メモリ制御部417は、ライトリクエストにより指定されたメモリアドレスをアドレスデコーダ414に供給する。アドレスデコーダ414によりメモリセルが選択されると、メモリ制御部417は、ドライバ413を制御して、そのメモリセルにデータを書き込ませる。
そして、メモリ制御部417は、ドライバ413を制御して、データが書き込まれたメモリセルからデータを読み出させる。メモリ制御部417は、読み出されたデータと、データバッファ411に保持されたライトデータとを照合(ベリファイ)する。メモリ制御部417は、ベリファイに成功した際にライト応答を生成し、制御インターフェース416を介してメモリコントローラ300に供給する。
また、メモリ制御部417は、リードリクエストを受け取ると、アドレスデコーダ414およびドライバ413を制御してメモリコントローラ300へリードデータを出力させる。
図12は、第1の実施の形態におけるReRAMの可変抵抗素子の抵抗分布の一例を示す図である。同図における横軸は、抵抗値を示しており、縦軸は、セルの数の相対的な分布を相対値により示している。可変抵抗素子の抵抗状態は、所定の閾値R_readを境に、大きく2つの分布に分かれている。閾値R_readと比較して抵抗値が低い状態は、低抵抗状態(LRS:Low-Resistance State)と呼ばれ、閾値R_readと比較して抵抗値が高い状態は、高抵抗状態(HRS:High-Resistance State)と呼ばれる。不揮発性メモリ410は、可変抵抗素子に電圧を印加することにより、その抵抗状態を可逆的に変化させてメモリセルを書き換えることができる。このメモリセルへの電圧印加を止めても抵抗状態が保持されるため、ReRAMは不揮発メモリとして機能することができる。
また、可変抵抗素子のLRSおよびHRSのそれぞれには、論理値「0」および論理値「1」の何れかが対応付けられる。例えば、LRSに論理値「0」が対応付けられ、HRSに論理値「1」が対応付けられる。それぞれの状態に論理値「0」および論理値「1」の何れを対応付けるかは任意である。
HRSのメモリセルに対して、一定以上の電圧が印加されると、そのメモリセルはLRS(「0」)に遷移する。この動作を以下、「セット」動作と称する。一方、LRSのメモリセルに対して、逆方向の電圧が印加されると、そのメモリセルはHRS(「1」)に遷移する。この動作を以下、「リセット」動作と称する。
ベリファイにおいては、閾値R_readと異なる閾値が用いられる。例えば、セットしたメモリセルからデータを読み出す際にメモリ制御部417は、閾値R_readより低いR_verify_setを閾値に設定する。一方、リセットしたメモリセルからデータを読み出す際にメモリ制御部417は、閾値R_readより高いR_verify_resetを閾値に設定する。
[メモリコントローラの動作例]
図13は、第1の実施の形態におけるメモリコントローラ300の動作の一例を示すフローチャートである。この動作は、例えば、メモリコントローラ300に電源が投入されたときに開始する。メモリコントローラ300は、ホストコンピュータ100からのコマンドをデコードし(ステップS901)、コマンドキュー340に追加する(ステップS902)。また、メモリコントローラ300は、待機中のリードコマンド数およびライトコマンド数のそれぞれを計数する(ステップS903)。
そして、メモリコントローラ300は、現在の優先モードがライト優先モードであるか否かを判断する(ステップS904)。ライト優先モードである場合に(ステップS904:Yes)、メモリコントローラ300は、待機中のリードコマンド数がn以上であるか否かを判断する(ステップS905)。リードコマンド数がn以上である場合に(ステップS905:Yes)、メモリコントローラ300は、リード優先モードに遷移する(ステップS906)。
現在の優先モードがリード優先モードである場合に(ステップS904:No)、メモリコントローラ300は、待機中のライトコマンド数がn以上であるか否かを判断する(ステップS907)。ライトコマンド数がn以上である場合に(ステップS907:Yes)、メモリコントローラ300は、ライト優先モードに遷移する(ステップS908)。
リードコマンド数がn未満である場合(ステップS905:No)、またはステップS906の後にメモリコントローラ300は、リクエスト発行処理を実行する(ステップS910)。また、ライトコマンド数がn未満である場合(ステップS907:No)、またはステップS908の後にもメモリコントローラ300は、リクエスト発行処理を実行する(ステップS910)。ステップS910の後に、メモリコントローラ300は、ステップS901以降を繰り返す。
図14は、第1の実施の形態におけるリクエスト発行処理の一例を示すフローチャートである。メモリコントローラ300は、現在の優先モードがライト優先モードであるか否かを判断する(ステップS911)。ライト優先モードである場合に(ステップS911:Yes)、メモリコントローラ300は、コマンドキュー340において取り出し可能なライトコマンドがあるか否かを判断する(ステップS912)。例えば、アクセスするメモリ領域において、リードデータの読出しが完了していない場合や、ライトデータの書込みが完了していない場合には、それらが完了してからライトコマンドが取り出される。
取り出し可能なライトコマンドが有る場合に(ステップS912:Yes)、メモリコントローラ300は、ライトコマンドを取り出して処理し、ライトリクエストを発行する(ステップS916)。
一方、取り出し可能なライトコマンドが無い場合に(ステップS912:No)、メモリコントローラ300は、コマンドキュー340において取り出し可能なリードコマンドがあるか否かを判断する(ステップS912)。例えば、アクセスするメモリ領域において、ライトデータの書込みが完了していない場合には、完了してからリードコマンドが取り出される。
取り出し可能なリードコマンドが有る場合に(ステップS913:Yes)、メモリコントローラ300は、リードコマンドを取り出して処理し、リードリクエストを発行する(ステップS917)。
取り出し可能なリードコマンドが無い場合(ステップS913:No)、または、ステップS916またはS917の後にメモリコントローラ300は、リクエスト発行処理を終了する。
また、リード優先モードである場合に(ステップS911:No)、メモリコントローラ300は、コマンドキュー340において取り出し可能なリードコマンドがあるか否かを判断する(ステップS914)。取り出し可能なリードコマンドが有る場合に(ステップS914:Yes)、メモリコントローラ300は、ステップS917を実行する。取り出し可能なリードコマンドが無い場合に(ステップS914:No)、メモリコントローラ300は、取り出し可能なライトコマンドがあるか否かを判断する(ステップS915)。取り出し可能なライトコマンドが有る場合に(ステップS915:Yes)、メモリコントローラ300は、ステップS916を実行する。取り出し可能なライトコマンドが無い場合に(ステップS915:No)、メモリコントローラ300は、リクエスト発行処理を終了する。
図15は、第1の実施の形態におけるメモリコントローラ300の動作の一例を示すタイミングチャートである。同図におけるaは、リード優先モードにおけるタイミングチャートである。例えば、ホストコンピュータ100が、メモリバンクch0乃至ch7に対応する論理アドレスを指定してリードコマンドを発行し、次に、それらのメモリバンクに対応する論理アドレスを指定してライトコマンドを発行したものとする。次いで、ホストコンピュータ100が、再度メモリバンクch0乃至ch7に対応する論理アドレスを指定してリードコマンドを発行し、次に、それらのメモリバンクに対応する論理アドレスを指定してライトコマンドを発行したものとする。また、タイミングT1においてメモリコントローラ300にリード優先モードが設定されたものとする。
メモリコントローラ300は、まず、コマンドキュー340からリードコマンドを取り出す。そして、メモリコントローラ300は、そのリードコマンドを処理し、メモリバンクch0乃至ch7のメモリアドレスを指定したリードリクエストRr_ch0_0乃至Rr_ch7_0を発行する。それらの発行直後のタイミングT2においてコマンドキュー340内にリードコマンドが保持されているため、メモリコントローラ300は、そのリードコマンドを処理可能か否かを判断する。タイミングT2においてメモリバンクch0についてリードデータの読出しが完了しているため、メモリコントローラ300は、その時点でリードコマンドを処理することができる。メモリコントローラ300は、メモリバンクch0のメモリアドレスを指定した次のリードリクエストRr_ch0_1を発行する。続いて、メモリコントローラ300は、メモリバンクch1乃至ch7のメモリアドレスを指定したリードリクエストRr_ch1_1乃至Rr_ch7_1を順に発行する。
リードリクエストRr_ch0_1乃至Rr_ch7_1の発行直後のタイミングT3において、処理可能なリードコマンドがコマンドキュー340に存在しない。このため、メモリコントローラ300は、コマンドキュー340内のライトコマンドを処理可能か否かを判断する。リードデータの読出しが完了するタイミングT4において、ライトコマンドの処理が可能となる。このタイミングT4が経過するとメモリコントローラ300は、ライトコマンドを取り出し、メモリバンクch0乃至ch7のメモリアドレスを指定したライトリクエストWr_ch0_0乃至Wr_ch7_0を順に発行する。
それらのライトリクエストWr_ch0_0乃至Wr_ch7_0の発行直後のタイミングT5において、処理可能なリードコマンドがコマンドキュー340に存在しない。このため、メモリコントローラ300は、コマンドキュー340内のライトコマンドを処理可能か否かを判断する。メモリバンクch0についてのライト応答をメモリコントローラ300が受け取ったタイミングT6において、ライトコマンドの処理が可能となる。このタイミングT6において、メモリコントローラ300は、ライトコマンドを取り出し、メモリバンクch0のメモリアドレスを指定したライトリクエストWr_ch0_1を発行する。続いて、メモリコントローラ300は、メモリバンクch1乃至ch7のメモリアドレスを指定したライトリクエストWr_ch1_1乃至Wr_ch7_1を順に発行する。これらのリクエストに対するライト応答の受け取りは、タイミングT8に完了する。
また、図15において、リードグループ#0は、リードリクエストRr_ch0_0乃至Rr_ch7_0の集合を示し、リードグループ#1は、リードリクエストRr_ch0_1乃至Rr_ch7_1の集合を示す。ライトグループ#0は、ライトリクエストWr_ch0_0乃至Wr_ch7_0の集合を示し、ライトグループ#1は、ライトリクエストWr_ch0_1乃至Rr_ch7_1の集合を示す。
図15におけるbは、コマンドを到着順に処理する比較例におけるメモリコントローラの動作を示すタイミングチャートである。タイミングT1においてメモリコントローラ300は、リードリクエストRr_ch0_0乃至Rr_ch7_0を順に発行する。これらの発行完了直後のタイミングT2において、到着順では次にライトリクエストを発行する必要があるが、リードデータの読出しが完了するのはタイミングT3'である。このため、タイミングT3'が経過すると、メモリコントローラ300は、ライトリクエストWr_ch0_0乃至Wr_ch7_0を順に発行する。このように、リードデータの読出しが完了してからライトリクエストを発行することにより、リードデータとライトデータとの衝突を回避することができる。逆に言えば、リードリクエストの次にライトリクエストを発行する際にメモリコントローラ300は、リードデータの読出し完了まで、ライトリクエストの発行を待たせる必要がある。
ライトリクエストWr_ch0_0乃至Wr_ch7_0の発行直後のタイミングT4'において、到着順では次にリードリクエストを発行する必要があるが、メモリバンクch0のライト応答をメモリコントローラ300が受け取るのはタイミングT5'である。このため、タイミングT5'が経過すると、メモリコントローラ300は、リードリクエストRr_ch0_1乃至Rr_ch7_1を順に発行する。これらの発行完了直後のタイミングT6'において、到着順では次にライトリクエストを発行する必要があるが、リードデータの読出しが完了するのはタイミングT7'である。このため、タイミングT7'が経過すると、メモリコントローラ300は、ライトリクエストWr_ch0_1乃至Wr_ch7_1を順に発行する。これらのリクエストに対するライト応答の受け取りは、タイミングT9'に完了する。
図15におけるaおよびbを比較すると、aでは、リードリクエストの次に発行されるライトリクエストは1つのみである。例えば、メモリコントローラ300は、タイミングT3でリードリクエストを発行した後、dTが経過したタイミングT4で次のライトリクエストを発行している。一方、同図におけるbでは、リードリクエストの次に発行されるライトリクエストは2つである。例えば、メモリコントローラ300は、タイミングT2'でリードリクエストを発行した後、dTが経過したタイミングT3'で次のライトリクエストを発行している。また、メモリコントローラ300は、タイミングT6'でリードリクエストを発行した後、dTが経過したタイミングT7'で次のライトリクエストを発行している。したがって、同図におけるaで一連のコマンドの処理が完了するタイミングT8は、同図におけるbで処理が完了するタイミングT9'よりもdTだけ早くなる。
このように、リード優先モードでは、リードコマンドがコマンドキュー340から無くなるまで連続して処理されるため、リードデータの読出し完了までライトリクエストの発行が待たされることが少なくなる。したがって、コマンドを到着順に処理する場合と比較して、アクセス速度を向上させることができる。
図16は、第1の実施の形態におけるメモリコントローラの動作の一例を示すタイミングチャートである。同図におけるaは、ライト優先モードにおけるタイミングチャートである。タイミングT11において、ライト優先モードに切り替えられると、メモリコントローラ300は、ライトグループ#0乃至#3内のライトリクエストを順に発行する。これらのライトリクエストの発行により、待機中のライトコマンドが無くなると、メモリコントローラ300は、リードグループ#0乃至#3内のリードリクエストを順に発行する。
図16におけるbは、コマンドを到着順に処理する比較例におけるメモリコントローラの動作を示すタイミングチャートである。タイミングT11において、メモリコントローラ300はリードグループ#0内のリードリクエストを順に発行し、次にライトグループ#0内のライトリクエストを順に発行する。そして、ライトグループ#1、リードグループ#2、ライトグループ#2、リードグループ#3およびライトグループ#3の順で、それらにおけるリクエストが順に発行される。
図16におけるaおよびbを比較すると、aでは、リードリクエストの次に発行されるライトリクエストは無い。一方、同図におけるbでは、リードリクエストの次に発行されるライトリクエストは4つある。このため、同図におけるaにおいて一連のコマンドの処理が完了するタイミングT12は、同図において一連の処理が完了するタイミングT13よりも早くなる。
図15および図16に例示したように、リード優先モードおよびライト優先モードのいずれにおいても、アクセス速度が向上する。
このように、本技術の第1の実施の形態によれば、待機中のコマンド数に基づいて優先モードを切り替えて、優先するコマンドをキューから全て取り出すため、メモリコントローラ300は同じ種類のリクエストを連続して発行することができる。これにより、リードリクエストの次にライトリクエストを発行する際にリードデータの読出し完了までライトリクエストを待たせる時間の合計が短くなり、アクセス速度を向上させることができる。
<2.第2の実施の形態>
上述の第1の実施の形態では、メモリコントローラ300は、コマンドキュー340に保持されているコマンドの数を計数していたが、コマンドキュー340から取り出されたコマンド数を計数して、閾値と比較することもできる。この第2の実施の形態のメモリコントローラ300は、コマンドキュー340から取り出されたコマンド数を計数する点において第1の実施の形態と異なる。
図17は、第2の実施の形態におけるリクエスト発行制御部320の一構成例を示すブロック図である。この第2の実施の形態のリクエスト発行制御部320は、待機中リードコマンド数計数部321および待機中ライトコマンド数計数部323および優先モード切替部324の代わりにコマンド処理数計数部325を備える点において第1の実施の形態と異なる。また、第2の実施の形態のリクエスト発行制御部320は、優先モード切替部324の代わりに優先モード切替部326を備える点において第1の実施の形態と異なる。また、第2の実施の形態のコマンドキュー340は、ライトコマンドキュー345およびリードコマンドキュー346を備える。これらのコマンドキューのキューサイズは、同じ値であってもよいし、異なる値であってもよい。
ライトコマンドキュー345は、ライトコマンドをFIFO方式で保持するものである。リードコマンドキュー346は、リードコマンドをFIFO方式で保持するものである。ライトポインタ、リードポインタおよびコマンド数は、ライトコマンドキュー345およびリードコマンドキュー346のそれぞれについてレジスタ(不図示)に保持される。第2の実施の形態のコマンドデコーダ322およびリクエスト発行管理部350は、コマンドの追加および取り出しにおいて、コマンドキューごとのライトポインタ、リードポインタおよびコマンド数を第1の実施の形態と同様の方法で制御する。なお、ライトコマンドキュー345は、特許請求の範囲に記載のライトコマンド保持部の一例であり、リードコマンドキュー346は、特許請求の範囲に記載のリードコマンド保持部の一例である。
コマンド処理数計数部325は、優先モードが切り替えられたときから取り出されたリードコマンドおよびライトコマンドのそれぞれの数を計数するものである。このコマンド処理数計数部325は、リードコマンドキュー346からリードコマンドが取り出されるたびにカウンタ値RCNTを増分し、ライトコマンドキュー345からライトコマンドが取り出されるたびにカウンタ値WCNTを増分する。そして、コマンド処理数計数部325は、それらのカウンタ値を優先モード切替部326に供給する。なお、コマンド処理数計数部325は、特許請求の範囲に記載の計数部の一例である。
優先モード切替部326は、優先モードを切り替えるたびにカウンタ値RCNTおよびWCNTをリセット信号RSTにより初期値にする。また、優先モード切替部326は、リード優先モードにおいて、カウンタ値RCNTが所定の閾値Nr以上になると、ライト優先モードに切り替える。一方、ライト優先モードにおいて、カウンタ値WCNTが所定の閾値Nw以上になると、優先モード切替部326は、リード優先モードに切り替える。閾値NrおよびNwは、同じ値であってもよいし、異なる値であってもよい。
図18は、第2の実施の形態における優先モード切替部326の動作の一例を示す図である。優先モード切替部326は、リード優先モードにおいて、処理されたリードコマンド数(RCNT)が閾値Nr以上になると、ライト優先モードに切り替え、カウンタ値をリセットする。一方、ライト優先モードにおいて優先モード切替部326は、処理されたライトコマンド数(WCNT)が閾値Nw以上になると、リード優先モードに切り替え、カウンタ値をリセットする。
図19は、第2の実施の形態におけるメモリコントローラ300の状態遷移図の一例である。メモリコントローラ300は、リード優先モード520において、リードコマンドの処理数(RCNT)が閾値Nr以上になると、ライト優先モード510に遷移し、カウンタ値をリセットする。一方、ライト優先モード510においてメモリコントローラ300は、ライトコマンドの処理数(WCNT)が閾値Nw以上になると、リード優先モード520に遷移し、カウンタ値をリセットする。
図20は、第2の実施の形態におけるメモリコントローラ300の動作の一例を示す図である。この第3の実施の形態のメモリコントローラ300の動作は、ステップS903乃至S908の代わりにステップS921乃至S927を実行する点において第1の実施の形態と異なる。
メモリコントローラ300は、コマンドをコマンドキュー340に追加し(ステップS902)、リクエスト発行処理を行う(ステップS910)。また、メモリコントローラ300は、処理したコマンドの数を計数する(ステップS921)。そして、メモリコントローラ300は、現在の優先モードがライト優先モードであるか否かを判断する(ステップS922)。
ライト優先モードである場合に(ステップS922:Yes)、メモリコントローラ300は、ライトコマンドの処理数WCNTがNw以上であるか否かを判断する(ステップS923)。WCNTがNw以上である場合に(ステップS923:Yes)、メモリコントローラ300は、リード優先モードに遷移する(ステップS924)。
一方、リード優先モードである場合に(ステップS922:No)、メモリコントローラ300は、リードコマンドの処理数RCNTがNr以上であるか否かを判断する(ステップS926)。RCNTがNr以上である場合に(ステップS926:Yes)、メモリコントローラ300は、ライト優先モードに遷移する(ステップS927)。ステップS924またはS927の後、メモリコントローラ300は、カウンタ値をリセットする(ステップS925)。WCNTがNw未満の場合(ステップS923:No)、RCNTがNr未満の場合(ステップS926:No)、または、ステップS925の後、メモリコントローラ300は、ステップS901以降を繰り返す。
図21は、第2の実施の形態におけるキュー占有率の変化の一例を示すグラフである。同図における縦軸は、コマンドキュー340全体におけるライトコマンドの比率を示す。同図における横軸は、処理したコマンドの数を示す。
また、リードコマンドの処理数RCNTと比較する閾値Nrは45であり、ライトコマンドの処理数WCNTと比較する閾値Nrは、40である。また、コマンドのサイズはキロバイト(KB)である。これにより、メモリコントローラ300は、リードコマンドを90キロバイト(KB)処理したときにライト優先に切り替え、ライトコマンドを80キロバイト(KB)処理したときにリード優先に切り替える。
上述の条件の下で、メモリコントローラ300が、リードコマンドおよびライトコマンドのそれぞれをランダムに繰り返し発行し、リードデータおよびライトデータのそれぞれを1024キロバイト(KB)転送した。転送時間を計測したところ、これらの合計2048キロバイト(KB)のデータ転送完了までに2697824ナノ秒(ns)を要した。したがって、スループットの測定値は、約759.130メガバイト毎秒(MB/s)である。
図22は、第2の実施の形態における閾値を変えた場合のキュー占有率の変化の一例を示すグラフである。同図における縦軸は、コマンドキュー340全体におけるライトコマンドの比率を示す。同図における横軸は、処理したコマンドの数を示す。
また、閾値Nrおよび閾値Nrをいずれも40に変更された。これにより、メモリコントローラ300は、リードコマンドを80キロバイト(KB)処理したときにライト優先に切り替え、ライトコマンドを80キロバイト(KB)処理したときにリード優先に切り替える。
上述の条件の下で、メモリコントローラ300が、同様にランダムアクセスを行ったところ、2048キロバイト(KB)のデータ転送完了までに2743416ナノ秒(ns)を要した。したがって、スループットの測定値は、約746・515メガバイト毎秒(MB/s)である。
これらの図21および図22に例示するように、ライトコマンドの占有率は、時間の経過に伴って増減する。これは、ライト優先モードとリード優先モードとに交互に優先モードが切り替えられたためである。
図23は、リード優先に固定した比較例におけるライトコマンドのキュー占有率の変化の一例を示すグラフである。スループット測定の際の諸条件は、図21と同様であるものとする。
図23に例示するように、ライトコマンドの占有率は、時間の経過に伴って増加し、100%付近のままで維持される。このため、ライトコマンドが長期間に亘ってコマンドキュー340内に滞留し、書込み速度が低下する。
リード優先に固定してメモリコントローラ300がランダムアクセスを行ったところ、2048キロバイト(KB)のサイズのデータ転送完了までに3091760ナノ秒(ns)を要した。したがって、スループットの測定値は、約662.406メガバイト毎秒(MB/s)である。このように、スループットは、リード優先とライト優先とを切り替える場合よりも低下してしまう。
図24は、ライト優先に固定した比較例におけるライトコマンドのキュー占有率の変化の一例を示すグラフである。スループット測定の際の諸条件は、図21と同様であるものとする。
図24に例示するように、ライトコマンドの占有率は、時間の経過に伴って低下し、0%付近のままで維持される。このため、リードコマンドが期間に亘ってコマンドキュー340内に滞留し、読出し速度が低下する。
ライト優先に固定してメモリコントローラ300がランダムアクセスを行ったところ、2048000バイト(B)のサイズのデータ転送完了までに379088ナノ秒(ns)を要した。したがって、スループットの測定値は、約539.219メガバイト毎秒(MB/s)である。このように、スループットは、リード優先とライト優先とを切り替える場合よりも低下してしまう。
図21乃至図24に例示したように、ライト優先モードとリード優先モードとを切り替えることにより、モードを固定する場合よりもスループットが向上する。
このように、本技術の第2の実施の形態によれば、処理したコマンド数に基づいて優先モードを切り替えて、優先するコマンドをキューから全て取り出すため、メモリコントローラ300は同じ種類のリクエストを連続して発行することができる。これにより、リードリクエストの次にライトリクエストを発行する際にリードデータの読出し完了までライトリクエストを待たせる時間の合計が短くなり、アクセス速度を向上させることができる。
<3.第3の実施の形態>
上述の第2の実施の形態では、メモリコントローラ300は、コマンドキュー340から取り出されたコマンドの数に基づいて優先モードを切り替えていた。しかし、ホストコンピュータ100によるリードコマンドおよびライトコマンドのそれそれの発行頻度が一方に偏っていると、優先モードの切り替えに時間がかかるおそれがある。例えば、リードコマンドの発行頻度がライトコマンドより高いと、ライト優先モードの継続時間が長くなる。この結果、書込み速度が速くなる一方で読出し速度が遅くなる。この第3の実施の形態におけるメモリコントローラ300は、ライト優先モードおよびリード優先モードのそれぞれの継続時間を均等にする点において第1の実施の形態と異なる。
図25は、第3の実施の形態におけるメモリコントローラ300の動作の一例を示す図である。この第3の実施の形態のメモリコントローラ300は、コマンド処理数計数部325の代わりに、クロックサイクルカウンタ327を備える点において第2の実施の形態と異なる。また、第3の実施の形態のメモリコントローラ300は、優先モード切替部326の代わりに優先モード切替部328を備える点において第2の実施の形態と異なる。
クロックサイクルカウンタ327は、所定の周波数のクロック信号CLKに同期してカウンタ値CCNTを計数するものである。このクロックサイクルカウンタ327は、カウンタ値CCNTを優先モード切替部328に供給する。
優先モード切替部328は、優先モードを切り替えてから経過した時間TIMをカウンタ値CCNTに基づいて取得する。例えば、現在のカウンタ値CCNTと優先モードを切り替えたときのカウンタ値CCNTとの差分にクロック周期を乗じた値が経過時間TIMに該当する。そして、経過時間TIMが一定時間Nt以上である場合に優先モード切替部328は、優先モードを切り替える。この制御により、一定時間ごとに、優先モードが切り替わる。一定時間Ntが長すぎると、書込み速度および読出し速度の一方が他方に対して著しく低下するおそれがある。このため、一定時間Ntは、書込み速度および読出し速度のバランスが大きく崩れない程度の値であることが望ましい。
図26は、第3の実施の形態における優先モード切替部328の動作の一例を示す図である。リード優先モードにおいて、経過時間TIMが一定時間Nt以上である場合に、優先モード切替部328は、ライト優先モードに切り替える。一方、ライト優先モードにおいて、経過時間TIMが一定時間Nt以上である場合に、優先モード切替部328は、リード優先モードに切り替える。
図27は、第3の実施の形態におけるメモリコントローラ300の状態遷移図の一例である。リード優先モード520に遷移してから一定時間が経過すると、メモリコントローラ300は、ライト優先モード510に遷移する。また、ライト優先モード510に遷移してから一定時間が経過すると、メモリコントローラ300は、リード優先モード520に遷移する。
図28は、第3の実施の形態におけるメモリコントローラ300の動作の一例を示す図である。この第3の実施の形態のメモリコントローラ300の動作は、ステップS905およびS907の代わりにステップS931およびS932を実行する点において第1の実施の形態と異なる。
ライト優先モードである場合に(ステップS904:Yes)、メモリコントローラ300は、ライト優先モードへの遷移から一定時間が経過したか否かを判断する(ステップS931)。一定時間が経過した場合に(ステップS931:Yes)、メモリコントローラ300は、リード優先モードに遷移する(ステップS906)。
現在の優先モードがリード優先モードである場合に(ステップS904:No)、メモリコントローラ300は、リード優先モードへの遷移から一定時間が経過したか否かを判断する(ステップS932)。一定時間が経過した場合に(ステップS932:Yes)、メモリコントローラ300は、ライト優先モードに遷移する(ステップS908)。
遷移から一定時間が経過していない場合(ステップS931またはステップS932:No)、もしくは、ステップS906またはS908の後に、メモリコントローラ300は、リクエスト発行処理を実行する(ステップS910)。
このように、本技術の第3の実施の形態によれば、一定時間ごとに優先モードを切り替えて、優先するコマンドをキューから全て取り出すため、メモリコントローラ300は同じ種類のリクエストを連続して発行することができる。これにより、リード優先モードおよびライト優先モードのそれぞれの継続時間を均等にして、書込み速度と読出し速度とを同程度にすることができる。
<4.第4の実施の形態>
上述の第2の実施の形態では、メモリコントローラ300は、コマンドキュー340から取り出されたコマンドの数に基づいて優先モードを切り替えていた。しかし、ホストコンピュータ100によるリードコマンドおよびライトコマンドのそれぞれの発行頻度が一方に偏っていると、優先モードの切り替えに時間がかかるおそれがある。例えば、リードコマンドの発行頻度がライトコマンドより高いと、ライト優先モードの継続時間が長くなる。この結果、書込み速度が速くなる一方で読出し速度が遅くなる。この第4の実施の形態におけるメモリコントローラ300は、書込み速度と読出し速度とを同程度にする点において第2の実施の形態と異なる。
図29は、第4の実施の形態におけるリクエスト発行制御部320の一構成例を示すブロック図である。この第4の実施の形態のリクエスト発行制御部320は、コマンドデコーダ322および優先モード切替部324の代わりに、コマンドデコーダ329および優先モード切替部330を備える点において第2の実施の形態と異なる。
コマンドデコーダ329は、切替コマンドをデコードした場合に、そのデコードした切替コマンドを優先モード切替部330に供給する点において第2の実施の形態と異なる。ここで、切替コマンドは、ライト優先モードおよびリード優先モードのいずれかへの切り替えを指示するコマンドであり、ホストコンピュータ100により必要に応じて発行される。例えば、書込み速度が比較的低い場合にホストコンピュータ100は、ライト優先モードへの切り替えを指示する切替コマンドを発行する。一方、読出し速度が比較的低い場合にホストコンピュータ100は、リード優先モードへの切り替えを指示する切替コマンドを発行する。
優先モード切替部330は、取り出されたコマンド数WCNTおよびRCNTのそれぞれに基づいて優先モードを切り替える。また、優先モード切替部330は、切替コマンドに従って優先モードを切り替える。
図30は、第4の実施の形態における優先モード切替部330の動作の一例を示す図である。リード優先モードにおいて、優先モード切替部330は、リードコマンド数RCNTが閾値Nr以上の場合、または、切替コマンドがライト優先を指示する場合にライト優先に切り替え、カウンタ値をリセットする。また、ライト優先モードにおいて、優先モード切替部330は、ライトコマンド数WCNTが閾値Nr以上の場合、または、切替コマンドがリード優先を指示する場合にリード優先に切り替え、カウンタ値をリセットする。
図31は、第4の実施の形態におけるメモリコントローラ300の状態遷移図の一例である。リード優先モード520において、メモリコントローラ300は、リードコマンド数RCNTが閾値Nr以上の場合、または、切替コマンドがライト優先を指示する場合にライト優先モード510に遷移し、カウンタ値をリセットする。また、ライト優先モード510において、メモリコントローラ300は、ライトコマンド数WCNTが閾値Nw以上の場合、または、切替コマンドがリード優先を指示する場合にリード優先モード520に遷移し、カウンタ値をリセットする。
図32は、第4の実施の形態におけるメモリコントローラ300の動作の一例を示す図である。この第4の実施の形態のメモリコントローラ300の動作は、ステップS941およびS942をさらに実行する点において第2の実施の形態と異なる。
ライト優先モードにおいてライトコマンドの処理数がNw未満である場合(ステップS923:No)、メモリコントローラ300は、切替コマンドによりリード優先が指示されたか否かを判断する(ステップS941)。ライトコマンドの処理数がNw以上である場合(ステップS923:Yes)、または、リード優先が指示された場合(ステップS941:Yes)、メモリコントローラ300は、リード優先モードに遷移する(ステップS924)。
また、リード優先モードにおいてリードコマンドの処理数がNr未満である場合(ステップS926:No)、メモリコントローラ300は、切替コマンドによりライト優先が指示されたか否かを判断する(ステップS942)。リードコマンドの処理数がNr以上である場合(ステップS926:Yes)、または、ライト優先が指示された場合(ステップS942:Yes)、メモリコントローラ300は、ライト優先モードに遷移する(ステップS927)。
リード優先が指示されていない場合(ステップS941:No)、ライト優先が指示されていない場合(ステップS942:No)、または、ステップS925の後、メモリコントローラ300は、ステップS901を繰り返す。
なお、メモリコントローラ300は、処理したコマンド数が閾値を超えるか否かを判断しているが、第1の実施の形態と同様に、待機中のコマンド数が閾値を超えるか否かを判断してもよい。この場合にメモリコントローラ300は、待機中のコマンド数が閾値を超えた場合、または、切替コマンドにより切り替えが指示された場合に優先モードを切り替える。
また、メモリコントローラ300は、処理したコマンド数が閾値を超えるか否かを判断しているが、第3の実施の形態と同様に、一定時間が経過したか否かを判断してもよい。この場合にメモリコントローラ300は、切り替えてから一定時間が経過した場合、または、切替コマンドにより切り替えが指示された場合に優先モードを切り替える。
このように、本技術の第4の実施の形態によれば、メモリコントローラ300は、切替コマンドに従って優先モードを切り替えるため、書込み速度と読出し速度とに偏りがある場合に切替コマンドを発行すれば、それらの速度を同程度にすることができる。
<5.第5の実施の形態>
上述の第1の実施の形態では、メモリコントローラ300は、コマンドキュー340内のデコード後のコマンド数を計数し、その計数値によりモードを切り替えていた。しかし、このモード制御では、デコード前のコマンドを保持するホストコマンドキューをさらに設けた場合にスループットが低下するおそれがある。例えば、デコード前はライトコマンドの方がリードコマンドより多く、デコード後はライトコマンドおよびホストコマンドの個数が同程度であると仮定する。このときには、ライト優先モードにおいて、ホストコマンドキュー内にデコード前のライトコマンドがまだ残っているのに、メモリコントローラ300がデコード後のライトコマンドを全て実行してリード優先モードに遷移することがある。このようなときには、モードの切替えが煩雑に生じ、スループットが低下するおそれがある。この第5の実施の形態のメモリコントローラ300は、ホストコマンドキューを設けた構成において、スループットを向上させる点において第1の実施の形態と異なる。
図33は、第5の実施の形態におけるリクエスト発行制御部320の一構成例を示すブロック図である。この第5の実施の形態のリクエスト発行制御部320は、コマンドキュー340の代わりに、ホストコマンドキュー361およびメモリコマンドキュー364を備える。また、第5の実施の形態のリクエスト発行制御部320は、待機中リードコマンド数計数部321、待機中ライトコマンド数計数部コマンドキュー323の代わりにホストリードコマンド数計数部362およびホストライトコマンド数計数部363を備える。
ホストコマンドキュー361は、ホストインターフェース311からのコマンドをホストコマンドとして保持するものである。このホストコマンドは、前述したように論理アドレスを指定する。ホストコマンドのうち、リードコマンドを以下、「ホストリードコマンド」と称し、ライトコマンドを「ホストライトコマンド」と称する。ホストコマンドキュー361は、FIFO方式で、到着順にコマンドを保持する。これらのホストコマンドは、コマンドデコーダ322により、到着順に取り出される。なお、ホストコマンドキュー361は、特許請求の範囲に記載のホストコマンド保持部の一例である。
コマンドデコーダ322は、ホストコマンドの論理アドレスを物理アドレスに変換する。ここで、物理アドレスは、不揮発性メモリ410内の記憶素子のそれぞれに割り当てられたアドレスである。また、コマンドデコーダ322は、ホストコンピュータ100がアクセスする際のアクセス単位と、メモリコントローラ200がアクセスする際のアクセス単位との相違に応じて、ホストコマンドを分割する。例えば、ホスト側のアクセス単位が4キロバイト(kB)で、メモリコントローラ側のアクセス単位が2キロバイト(kB)である場合には、コマンドデコーダ322は、ホストコマンドのそれぞれを2分割する。コマンドデコーダ322は、アドレス変換および分割を含むデコード処理を行ったコマンドをメモリコマンドキュー364に供給する。
メモリコマンドキュー364は、デコード後のコマンドをメモリコマンドとして保持するものである。このメモリコマンドキュー364の構成は、コマンドキュー340と同様である。メモリコマンドのうち、リードコマンドを以下、「メモリリードコマンド」と称し、ライトコマンドを「メモリライトコマンド」と称する。なお、メモリコマンドキュー364は、特許請求の範囲に記載のメモリコマンド保持部の一例である。
ホストリードコマンド数計数部362は、ホストコマンドキュー361が保持しているホストリードコマンドの数を計数するものである。ホストリードコマンド数計数部362は、カウンタ値をRCNTとして優先モード切替部324およびリクエスト発行管理部350に供給する。
ホストライトコマンド数計数部363は、ホストコマンドキュー361が保持しているホストライトコマンドの数を計数するものである。ホストライトコマンド数計数部363は、カウンタ値をWCNTとして優先モード切替部324およびリクエスト発行管理部350に供給する。
図34は、第5の実施の形態におけるメモリコントローラ300の状態遷移図の一例である。メモリコントローラ300は、リード優先モード520において、待機中のホストライトコマンド数(WCNT)が閾値Nw以上になると、ライト優先モード510に遷移する。一方、ライト優先モード510においてメモリコントローラ300は、待機中のホストリードコマンド数(WCNT)が閾値Nr以上になると、リード優先モード520に遷移する。
図35は、第5の実施の形態におけるメモリコントローラ300の動作の一例を示すタイミングチャートである。ホストコマンドキュー361のエントリ数は、例えば、「4」であるものとする。また、例えば、ホストリードコマンドが2回連続して発行されるたびに、ホストライトコマンドが1回発行されるものとする。そして、初期状態のモードは、リード優先モードであるものとし、NrおよびNwはいずれも「3」であるものとする。
3回目にホストライトコマンドが発行されたT1のタイミングにおいて、ホストコマンドキュー361内のホストライトコマンド数WCNTは「3」となり、Nw以上となる。このため、メモリコントローラ300はライト優先モードに移行する。そして、メモリコントローラ300は、タイミングT1から、オーバーヘッドdTが経過したタイミングにおいてメモリライトコマンドの連続的な実行を開始する。
そして、タイミングT1から2回に亘ってホストリードコマンドが発行されたT2のタイミングにおいて、ホストコマンドキュー361内のホストリードコマンド数RCNTは「3」となり、Nr以上となる。このため、メモリコントローラ300はリード優先モードに移行する。そして、メモリコントローラ300は、タイミングT2から、オーバーヘッドdTが経過したタイミングにおいてメモリリードコマンドの連続的な実行を開始する。
図36は、比較例におけるメモリコントローラの動作の一例を示すタイミングチャートである。この比較例のメモリコントローラは、ホストコマンドキュー361およびメモリコマンドキュー364を備え、また、第1の実施の形態と同様にメモリコマンドの計数値に基づいてモードを切り替えるものとする。また、ホストライトコマンドとホストリードコマンドとの発行比率は、図35と同様であるものとする。メモリコマンドキュー364のエントリ数は「8」であり、NrおよびNwはいずれも「4」であるものとする。
2回目にホストライトコマンドが発行されたt1のタイミングにおいて、メモリコマンドキュー364内のメモリライトコマンド数WCNTは「4」となり、Nw以上となる。このため、比較例のメモリコントローラはライト優先モードに移行する。そして、メモリコントローラは、タイミングt1から、オーバーヘッドdTが経過したタイミングにおいてメモリライトコマンドの連続的な実行を開始する。
そして、タイミングt1から2回に亘ってホストリードコマンドが発行されたt2のタイミングにおいて、メモリコマンドキュー364内のメモリリードコマンド数RCNTは「4」となり、Nr以上となる。このため、比較例のメモリコントローラはリード優先モードに移行する。そして、メモリコントローラ300は、タイミングt2から、オーバーヘッドdTが経過したタイミングにおいてメモリリードコマンドの連続的な実行を開始する。
図34に例示するように、比較例のメモリコントローラは、3回目にホストライトコマンドが発行されたタイミングT1までの間に優先モードを3回切り替えている。この切り替え回数は、図35に例示するようにタイミングT1までに2回のみ優先モードを切り替える第5の実施の形態よりも多い。これは、ホストコマンドキュー361内にライトコマンドが残っているにも関わらず、メモリコマンドキュー364内のライトコマンドが枯渇してリードコマンドを実行せざるを得なくなり、リード優先モードに切り替えているためである。
この比較例に対して、メモリコントローラ300は、ホストコマンドキュー361内のコマンド数に基づいて優先モードを切り替えるため、切替えの頻度を少なくしてスループットを向上させることができる。
図37は、第5の実施の形態におけるメモリコントローラ300の動作の一例を示すフローチャートである。メモリコントローラ300は、ホストコマンドキュー361にホストコマンドを追加し(ステップS951)、待機中のホストコマンド数を計数する(ステップS952)。また、メモリコントローラ300は、ホストコマンドを到着順に取り出してデコードし(ステップS901)、メモリコマンドキュー364に追加する(ステップS953)。
そして、メモリコントローラ300は、現在の優先モードがライト優先モードであるか否かを判断する(ステップS904)。ライト優先モードである場合に(ステップS904:Yes)、メモリコントローラ300は、待機中のホストリードコマンド数がNr以上であるか否かを判断する(ステップS954)。リードコマンド数がNr以上である場合に(ステップS954:Yes)、メモリコントローラ300は、リード優先モードに遷移する(ステップS906)。
一方、現在の優先モードがリード優先モードである場合に(ステップS904:No)、メモリコントローラ300は、待機中のホストライトコマンド数がNw以上であるか否かを判断する(ステップS955)。ライトコマンド数がNw以上である場合に(ステップS955:Yes)、メモリコントローラ300は、ライト優先モードに遷移する(ステップS908)。
リードコマンド数がNr未満である場合(ステップS954:No)、またはステップS906の後にメモリコントローラ300は、リクエスト発行処理を実行する(ステップS910)。また、ライトコマンド数がNw未満である場合(ステップS955:No)、またはステップS908の後にもメモリコントローラ300は、リクエスト発行処理を実行する(ステップS910)。ステップS910の後に、メモリコントローラ300は、ステップS951以降を繰り返す。
このように、本技術の第5の実施の形態によれば、待機中のホストコマンド数に基づいて優先モードを切り替えるため、ホストコマンドキュー361が設けられた構成においてモードを切り替える頻度を少なくすることができる。これにより、スループットを向上させることができる。
<6.第6の実施の形態>
上述の第2の実施の形態では、メモリコントローラ300は、取り出して実行したコマンド数が固定の閾値を超えるか否かにより優先モードを切り替えていた。しかし、閾値が不適切であると、切替えが効率的に行われず、スループットが十分に向上しないことがある。この第6の実施の形態のメモリコントローラ300は、適切な閾値を設定する点において第2の実施の形態と異なる。
図38は、第6の実施の形態におけるリクエスト発行制御部320の一構成例を示すブロック図である。第6の実施の形態のリクエスト発行制御部320は、コマンドキュー340および優先モード切替部326の代わりにホストコマンドキュー361、メモリコマンドキュー364および優先モード切替部367を備える点において第2の実施の形態と異なる。また、第6の実施の形態のリクエスト発行制御部320は、待機中リードコマンド数計数部321および待機中ライトコマンド数計数部323をさらに備える点において第2の実施の形態と異なる。
第6の実施の形態のホストコマンドキュー361の構成は、第5の実施の形態と同様である。また、メモリコマンドキュー364は、ライトコマンドキュー365およびリードコマンドキュー366を備える。これらのキューの構成は、第2の実施の形態と同様である。
第6の実施の形態の待機中リードコマンド数計数部321は、リードコマンドキュー366が保持しているメモリリードコマンドの数を待機中リードコマンド数RCNTqとして計数する。また、第6の実施の形態の待機中ライトコマンド数計数部32は、ライトコマンドキュー365が保持しているメモリライトコマンドの数を待機中ライトコマンド数WCNTqとして計数する。また、第6の実施の形態のコマンド処理数計数部325は、メモリライトコマンドの処理数と、メモリリードコマンドの処理数とをWCNTおよびRCNTとして計数する。
優先モード切替部367は、初期状態においてNwおよびNrに初期値を設定する。また、優先モード切替部367は、ライト優先モードにおいてライトコマンド処理数WCNTがNw以上であればリード優先モードに切り替える。そして、優先モード切替部367は、カウンタ値WCNTeおよびRCNTeを初期値にリセットし、Nに待機中リードコマンド数CNTqを設定する。
一方、優先モード切替部367は、リード優先モードにおいてリードコマンド処理数RCNTがNr以上であればライト優先モードに切り替える。そして、優先モード切替部367は、カウンタ値WCNTeおよびRCNTeを初期値にリセットし、Nに待機中ライトコマンド数WCNTqを設定する。このように、閾値Nwには、ライト優先モードに切り替えたときの待機中ライトコマンド数WCNTqが設定され、閾値Nrには、リード優先モードに切り替えたときの待機中リードコマンド数RCNTqが設定される。すなわち、閾値が動的に変更される。

図39は、第6の実施の形態における優先モード切替部367の動作の一例を示す図である。優先モード切替部367は、リード優先モードにおいて、リードコマンド処理数(RCNTe)が閾値Nr以上になると、ライト優先モードに切り替え、カウンタ値をリセットする。このNrは、リード優先モードに切り替えたときの待機中リードコマンド数RCNTqである。
一方、ライト優先モードにおいて優先モード切替部367は、ライトコマンド処理数(WCNTe)が閾値Nw以上になると、リード優先モードに切り替え、カウンタ値をリセットする。このNwは、ライト優先モードに切り替えたときの待機中ライトコマンド数WCNTqである。
図40は、第2の実施の形態におけるメモリコントローラ300の状態遷移図の一例である。メモリコントローラ300は、リード優先モード520において、リードコマンド処理数(RCNTe)が閾値Nr(=RCNTq)以上になると、ライト優先モード510に遷移し、カウンタ値WCNTeおよびRCNTeをリセットする。また、メモリコントローラ300は、閾値Nwに待機中ライトコマンド数WCNTqを設定する。
一方、ライト優先モード510においてメモリコントローラ300は、ライトコマンド処理数(WCNTe)が閾値Nw以上になると、リード優先モード520に遷移し、カウンタ値WCNTeおよびRCNTeをリセットする。また、メモリコントローラ300は、閾値Nrに待機中リードコマンド数RCNTqを設定する。
図41は、第6の実施の形態におけるメモリコントローラ300の動作の一例を示すタイミングチャートである。ライトコマンドキュー365およびリードコマンドキュー366のそれぞれのエントリ数は、例えば、「8」であるものとする。また、例えば、ホストリードコマンドが2回連続して発行されるたびに、ホストライトコマンドが1回発行されるものとする。そして、初期状態のモードは、リード優先モードであるものとし、NrおよびNwの初期値は、いずれも「4」であるものとする。
タイミングT1において、リードコマンド処理数は「4」となり、Nr以上となる。このため、メモリコントローラ300は、ライト優先モードに切り替え、その切り替え時の待機中ライトコマンド数「4」をNwに設定する。そして、タイミングT1から4つのメモリライトコマンドが実行されたタイミングT2において、ライトコマンド処理数は「4」となり、Nw以上となる。このため、メモリコントローラ300は、リード優先モードに切り替え、その切り替え時の待機中リードコマンド数「8」をNrに設定する。
そして、タイミングT2から8つのメモリリードコマンドが実行されたタイミングT3において、リードコマンド処理数は「8」となり、Nr以上となる。このため、メモリコントローラ300は、ライト優先モードに切り替え、その切り替え時の待機中リードコマンド数「4」をNwに設定する。このように、閾値NwおよびNrは、メモリコマンドキュー364に保持されたコマンド数により動的に変更される。これにより、効率的にモードを切り替えることができる。例えば、タイミングT2においては、リードコマンドキュー366内に閾値Nrの初期値「4」よりも多くのリードコマンドが保持されている。この場合に閾値Nrが初期値のままだと、キュー内のメモリリードコマンドが全て取り出されていない状態でライト優先モードに切り替わるおそれがある。しかし、メモリコントローラ300は、待機中リードコマンド数である「8」をNrに新たに設定するため、適切な閾値の設定によりモードを効率的に切り替えることができる。
図42は、第6の実施の形態におけるメモリコントローラ300の動作の一例を示すフローチャートである。メモリコントローラ300は、ステップS925の代わりにステップS961およびS962を実行する点において図20に例示した第2の実施の形態と異なる。
リード優先モードに遷移すると(ステップS924)、メモリコントローラ300は、カウンタ値WCNTeおよびRCNTeをリセットし、閾値Nrに待機中リードコマンド数RCNTqを設定する(ステップS961)。また、ライト優先モードに遷移すると(ステップS927)、メモリコントローラ300は、カウンタ値WCNTeおよびRCNTeをリセットし、閾値Nwに待機中ライトコマンド数WCNTqを設定する(ステップS962)。
このように、本技術の第6の実施の形態によれば、優先モード切替え時の待機中コマンド数を閾値に設定するため、適切な閾値により優先モードを効率的に切り替えることができる。これにより、スループットを向上させることができる。
なお、上述の各実施の形態において、メモリコントローラ300は、優先コマンドの全てを取り出してから優先コマンドでないコマンドを取り出しているが、優先コマンドの全てを取り出す前に優先コマンドでない方を取り出すことがあってもよい。例えば、不揮発性メモリAおよびBが2つメモリコントローラ300に接続される構成を想定する。この構成において不揮発性メモリAがライト優先モードで処理中(ビジー)である等の理由により、その不揮発性メモリAからメモリコントローラ300がライトコマンドを全て取り出すことができないことがある。この場合であっても、メモリコントローラ300は、アイドル中の不揮発性メモリB内に、非優先のリードコマンドがあれば、そのリードコマンドを取り出すことができる。つまり、メモリコントローラ300は、優先コマンドを優先して不揮発性メモリから順に取り出してから、優先コマンドでないコマンドの取り出しを行えばよい。
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、CD(Compact Disc)、MD(MiniDisc)、DVD(Digital Versatile Disc)、メモリカード、ブルーレイディスク(Blu-ray(登録商標)Disc)等を用いることができる。
なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
なお、本技術は以下のような構成もとることができる。
(1)種類の異なる2つのコマンドのいずれかが入力されるたびに当該入力されたコマンドを保持する保持部と、
前記2つのコマンドのうち優先すべき優先コマンドを前記2つのコマンドの一方から他方に切り替える切替部と、
前記優先コマンドを優先して前記保持部から順に取り出してから前記優先コマンドに該当しない方のコマンドを前記保持部から順に取り出すコマンド処理部と
を具備するメモリコントローラ。
(2)前記コマンド処理部は、前記優先コマンドの全てを前記保持部から順に取り出してから前記優先コマンドに該当しない方のコマンドを前記保持部から順に取り出す
前記(1)記載のメモリコントローラ。
(3)前記2つのコマンドのそれぞれの数を計数して計数値を生成する計数部をさらに具備し、
前記切替部は、前記2つのコマンドのそれぞれの計数値が所定の閾値を超えたか否かに基づいて前記優先コマンドを切り替える
前記(1)記載のメモリコントローラ。
(4)前記計数部は、前記保持部に保持された前記コマンドの数を計数する
前記(3)記載のメモリコントローラ。
(5)前記計数部は、前記保持部から取り出された前記コマンドの数を計数する
前記(3)記載のメモリコントローラ。
(6)前記コマンドの指定する論理アドレスを物理アドレスに変換する論物アドレス変換を行うアドレス変換部をさらに具備し、
前記保持部は、
前記論物アドレス変換が行われた後の前記コマンドをメモリコマンドとして保持するメモリコマンド保持部と、
前記アドレス変換が行われる前の前記コマンドをホストコマンドとして保持するホストコマンド保持部と
を備える前記(3)記載のメモリコントローラ。
(7)前記計数部は、前記ホストコマンド保持部に保持された前記ホストコマンドの数を計数する
前記(6)記載のメモリコントローラ。
(8)前記計数部は、前記メモリコマンド保持部に保持された前記メモリコマンドの数を待機中コマンド数として計数し、前記メモリコマンド保持部から取り出された前記メモリコマンドの数を処理コマンド数として計数し、
前記閾値は、前記優先コマンドを切り替えたときの前記待機中コマンド数であり、
前記切替部は、前記処理コマンド数が前記閾値を超えるか否かに基づいて前記優先コマンドを切り替える
前記(6)記載のメモリコントローラ。
(9)前記優先モード切替部は、一定時間が経過するたびに前記優先コマンドを切り替える
前記(1)乃至(8)のいずれかに記載のメモリコントローラ。
(10)前記切替部は、前記優先コマンドの切り替えを指示する特定のコマンドに従って前記優先コマンドを切り替える
前記(1)乃至(8)のいずれかに記載のメモリコントローラ。
(11)前記2つのコマンドの一方は、データの読出しを指示するリードコマンドであり、
前記2つのコマンドの他方は、データの書込みを指示するライトコマンドであり、
前記保持部は、
前記リードコマンドを保持するリードコマンド保持部と、
前記ライトコマンドを保持するライトコマンド保持部と
を備える前記(1)乃至(10)のいずれかに記載のメモリコントローラ。
(12)メモリセルと、
前記メモリセルにアクセスするための互いに異なる2つのコマンドのいずれかが入力されるたびに当該入力されたコマンドを保持する保持部と、
前記2つのコマンドのうち優先すべき優先コマンドを前記2つのコマンドの一方から他方に切り替える切替部と、
前記優先コマンドを優先して前記保持部から順に取り出してから前記優先コマンドに該当しない方のコマンドを前記保持部から順に取り出すコマンド処理部と
を具備するメモリシステム。
(13)種類の異なる2つのコマンドのいずれかが入力されるたびに当該入力されたコマンドを保持部に保持する保持手順と、
前記2つのコマンドのうち優先すべき優先コマンドを前記2つのコマンドの一方から他方に切り替える切替手順と、
前記優先コマンドを優先して前記保持部から順に取り出してから前記優先コマンドに該当しない方のコマンドを前記保持部から順に取り出すコマンド処理手順と
を具備するメモリコントローラの制御方法。
100 ホストコンピュータ
200 ストレージ
300 メモリコントローラ
311 ホストインターフェース
312 RAM
313 CPU
314 ECC処理部
315 ROM
316、415 バス
317 メモリインターフェース
320 リクエスト発行制御部
321 待機中リードコマンド数計数部
322、329 コマンドデコーダ
323 待機中ライトコマンド数計数部
324、326、328、330、367 優先モード切替部
325 コマンド処理数計数部
327 クロックサイクルカウンタ
340 コマンドキュー
341 コマンド保持部
345、365 ライトコマンドキュー
346、366 リードコマンドキュー
350 リクエスト発行管理部
351 取り出しコマンド切替制御部
352 取り出し部
353 リクエスト発行部
361 ホストコマンドキュー
362 ホストリードコマンド数計数部
363 ホストライトコマンド数計数部
364 メモリコマンドキュー
400 メモリバンク
410 不揮発性メモリ
411 データバッファ
412 メモリセルアレイ
413 ドライバ
414 アドレスデコーダ
416 制御インターフェース
417 メモリ制御部

Claims (5)

  1. 種類の異なる第1および第2のコマンドのいずれかが入力されるたびに当該入力されたコマンドを保持する保持部と、
    前記第1および第2のコマンドのうち優先すべき優先コマンドを前記第1および第2のコマンドの一方から他方に切り替える切替部と、
    前記優先コマンドを優先して前記保持部から順に取り出してから前記優先コマンドに該当しない方のコマンドを前記保持部から順に取り出すコマンド処理部と、
    前記第1および第2のコマンドのそれぞれの数を計数して計数値を生成する計数部と、
    前記第1および第2のコマンドのそれぞれの指定する論理アドレスを物理アドレスに変換する論物アドレス変換を行うアドレス変換部と
    を具備し、
    前記保持部は、
    前記論物アドレス変換が行われた後の前記第1のコマンドを第1のメモリコマンドとして保持し、前記論物アドレス変換が行われた後の前記第2のコマンドを第2のメモリコマンドとして保持するメモリコマンド保持部と、
    前記論物アドレス変換が行われる前の前記第1および第2のコマンドのそれぞれをホストコマンドとして保持するホストコマンド保持部と
    を備え、
    前記計数部は、前記メモリコマンド保持部に保持された前記第1および第2のメモリコマンドのそれぞれの数を待機中コマンド数として計数し、前記優先コマンドを前記第1のコマンドから前記第2のコマンドに切り替える前に前記メモリコマンド保持部から取り出された前記第1のメモリコマンドの数を処理コマンド数として計数し、
    前記切替部は、前記第1のメモリコマンドに対応する第1の閾値と前記第2のメモリコマンドに対応する第2の閾値とのうち前記第1の閾値を前記処理コマンド数超えるか否かに基づいて前記優先コマンドを切り替え、
    前記切替部は、前記優先コマンドを前記第1のコマンドから前記第2のコマンドに切り替えたときに前記第2のメモリコマンドに対応する前記待機中コマンド数を前記第2の閾値に設定する
    メモリコントローラ。
  2. 前記コマンド処理部は、前記優先コマンドの全てを前記保持部から順に取り出してから前記優先コマンドに該当しない方のコマンドを前記保持部から順に取り出す
    請求項1記載のメモリコントローラ。
  3. 前記第1および第2のコマンドの一方は、データの読出しを指示するリードコマンドであり、
    前記第1および第2のコマンドの他方は、データの書込みを指示するライトコマンドであり、
    前記保持部は、
    前記リードコマンドを保持するリードコマンド保持部と、
    前記ライトコマンドを保持するライトコマンド保持部と
    を備える請求項1記載のメモリコントローラ。
  4. メモリセルと、
    前記メモリセルにアクセスするための互いに異なる第1および第2のコマンドのいずれかが入力されるたびに当該入力されたコマンドを保持する保持部と、
    前記2つのコマンドのうち優先すべき優先コマンドを前記第1および第2のコマンドの一方から他方に切り替える切替部と、
    前記優先コマンドを優先して前記保持部から順に取り出してから前記優先コマンドに該当しない方のコマンドを前記保持部から順に取り出すコマンド処理部と、
    前記第1および第2のコマンドのそれぞれの数を計数して計数値を生成する計数部と、
    前記第1および第2のコマンドのそれぞれの指定する論理アドレスを物理アドレスに変換する論物アドレス変換を行うアドレス変換部と
    を具備し、
    前記保持部は、
    前記論物アドレス変換が行われた後の前記第1のコマンドを第1のメモリコマンドとして保持し、前記論物アドレス変換が行われた後の前記第2のコマンドを第2のメモリコマンドとして保持するメモリコマンド保持部と、
    前記論物アドレス変換が行われる前の前記第1および第2のコマンドのそれぞれをホストコマンドとして保持するホストコマンド保持部と
    を備え、
    前記計数部は、前記メモリコマンド保持部に保持された前記第1および第2のメモリコマンドのそれぞれの数を待機中コマンド数として計数し、前記優先コマンドを前記第1のコマンドから前記第2のコマンドに切り替える前に前記メモリコマンド保持部から取り出された前記第1のメモリコマンドの数を処理コマンド数として計数し、
    前記切替部は、前記第1のメモリコマンドに対応する第1の閾値と前記第2のメモリコマンドに対応する第2の閾値とのうち前記第1の閾値を前記処理コマンド数超えるか否かに基づいて前記優先コマンドを切り替え、
    前記切替部は、前記優先コマンドを前記第1のコマンドから前記第2のコマンドに切り替えたときに前記第2のメモリコマンドに対応する前記待機中コマンド数を前記第2の閾値に設定する
    メモリシステム。
  5. 種類の異なる第1および第2のコマンドのいずれかが入力されるたびに当該入力されたコマンドを保持部に保持する保持手順と、
    前記第1および第2のコマンドのうち優先すべき優先コマンドを前記2つのコマンドの一方から他方に切り替える切替手順と、
    前記優先コマンドを優先して前記保持部から順に取り出してから前記優先コマンドに該当しない方のコマンドを前記保持部から順に取り出すコマンド処理手順と、
    前記第1および第2のコマンドのそれぞれの数を計数して計数値を生成する計数手順と、
    前記第1および第2のコマンドのそれぞれの指定する論理アドレスを物理アドレスに変換する論物アドレス変換を行うアドレス変換手順と
    を具備し、
    前記保持部は、
    前記論物アドレス変換が行われた後の前記コマンドをメモリコマンドとして保持するメモリコマンド保持部と、
    前記論物アドレス変換が行われる前の前記コマンドをホストコマンドとして保持するホストコマンド保持部と
    を備え、
    前記計数手順において、前記メモリコマンド保持部に保持された前記第1および第2のメモリコマンドのそれぞれの数を待機中コマンド数として計数し、前記優先コマンドを前記第1のコマンドから前記第2のコマンドに切り替える前に前記メモリコマンド保持部から取り出された前記第1のメモリコマンドの数を処理コマンド数として計数し、
    前記切替手順において、前記第1のメモリコマンドに対応する第1の閾値と前記第2のメモリコマンドに対応する第2の閾値とのうち前記第1の閾値を前記処理コマンド数超えるか否かに基づいて前記優先コマンドを切り替え、
    前記切替手順において、前記優先コマンドを前記第1のコマンドから前記第2のコマンドに切り替えたときに前記第2のメモリコマンドに対応する前記待機中コマンド数を前記第2の閾値に設定する
    メモリコントローラの制御方法。
JP2016096618A 2015-09-08 2016-05-13 メモリコントローラ、メモリシステム、および、メモリコントローラの制御方法 Active JP6950149B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US15/750,280 US20180232178A1 (en) 2015-09-08 2016-06-15 Memory controller, memory system, and method of controlling memory controller
PCT/JP2016/067731 WO2017043140A1 (ja) 2015-09-08 2016-06-15 メモリコントローラ、メモリシステム、および、メモリコントローラの制御方法

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2015176786 2015-09-08
JP2015176786 2015-09-08

Publications (2)

Publication Number Publication Date
JP2017054483A JP2017054483A (ja) 2017-03-16
JP6950149B2 true JP6950149B2 (ja) 2021-10-13

Family

ID=58320880

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016096618A Active JP6950149B2 (ja) 2015-09-08 2016-05-13 メモリコントローラ、メモリシステム、および、メモリコントローラの制御方法

Country Status (2)

Country Link
US (1) US20180232178A1 (ja)
JP (1) JP6950149B2 (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180114649A (ko) * 2017-04-11 2018-10-19 에스케이하이닉스 주식회사 복수의 프로세서를 포함하는 컨트롤러 및 컨트롤러의 동작방법 그리고 멀티 프로세서 시스템
KR102322740B1 (ko) * 2017-04-24 2021-11-09 에스케이하이닉스 주식회사 복수의 프로세서를 포함하는 컨트롤러 및 컨트롤러의 동작방법
US11294594B2 (en) * 2017-08-07 2022-04-05 Kioxia Corporation SSD architecture supporting low latency operation
KR20190023777A (ko) * 2017-08-30 2019-03-08 에스케이하이닉스 주식회사 메모리 컨트롤러, 이를 포함하는 메모리 시스템, 및 그의 동작 방법
KR102293069B1 (ko) * 2017-09-08 2021-08-27 삼성전자주식회사 불휘발성 메모리 장치 및 제어기를 포함하는 스토리지 장치, 제어기, 그리고 스토리지 장치의 동작 방법
JP6961445B2 (ja) * 2017-10-02 2021-11-05 キヤノン株式会社 記録装置及びその制御方法
US11436080B2 (en) 2017-11-21 2022-09-06 Sony Semiconductor Solutions Corporation Memory controller, memory, memory system, information processing system, and method of control thereof
JP7060784B2 (ja) * 2017-12-19 2022-04-27 富士通株式会社 演算処理装置、メモリアクセスコントローラおよび演算処理装置の制御方法
US11061600B2 (en) * 2018-01-12 2021-07-13 Western Digital Technologies, Inc. Tiered storage data evacuation within solid state devices
US10642746B2 (en) * 2018-03-22 2020-05-05 Western Digital Technologies, Inc. Controlling cached/non-cached memory access decisions based on memory access queue fill levels
KR20200018156A (ko) * 2018-08-10 2020-02-19 에스케이하이닉스 주식회사 메모리장치에 대한 에러정정코드 기능을 갖는 메모리 시스템 및 그 운영방법
US11579798B2 (en) * 2018-11-16 2023-02-14 SK Hynix Inc. Memory system and operating method thereof
US10764455B2 (en) 2018-12-31 2020-09-01 Kyocera Document Solutions Inc. Memory control method, memory control apparatus, and image forming method that uses memory control method
US10579317B1 (en) * 2018-12-31 2020-03-03 Kyocera Document Solutions Inc. Memory control method, memory control apparatus, and image forming method that uses memory control method
US11288185B2 (en) * 2019-01-03 2022-03-29 Silicon Motion, Inc. Method and computer program product for performing data writes into a flash memory
US11048437B2 (en) * 2019-02-28 2021-06-29 Micron Technology, Inc. Double threshold controlled scheduling of memory access commands
CN110209597B (zh) * 2019-05-24 2021-10-15 北京百度网讯科技有限公司 处理访问请求的方法、装置、设备和存储介质
US11126375B2 (en) * 2019-07-18 2021-09-21 Micron Technology, Inc. Arbiter circuit for commands from multiple physical functions in a memory sub-system
US20210303340A1 (en) * 2020-03-24 2021-09-30 Micron Technology, Inc. Read counter for quality of service design
JP2022128226A (ja) 2021-02-22 2022-09-01 キヤノン株式会社 メモリ制御回路およびその制御方法
JP2022163404A (ja) 2021-04-14 2022-10-26 キヤノン株式会社 メモリ制御回路、情報処理システム及びメモリ制御方法
KR20220165563A (ko) * 2021-06-08 2022-12-15 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
US11907573B2 (en) * 2021-06-21 2024-02-20 Western Digital Technologies, Inc. Performing background operations during host read in solid state memory device
US11907119B2 (en) * 2021-07-14 2024-02-20 Micron Technology, Inc. Array access with receiver masking
US11893280B2 (en) * 2021-08-27 2024-02-06 Micron Technology, Inc. Concurrent command limiter for a memory system
US20240103728A1 (en) * 2022-09-21 2024-03-28 SK hynix NAND Product Solutions Corporation Systems, methods, and media for recovering worker shares from read prioritization

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5948081A (en) * 1997-12-22 1999-09-07 Compaq Computer Corporation System for flushing queued memory write request corresponding to a queued read request and all prior write requests with counter indicating requests to be flushed
JP2000194683A (ja) * 1998-12-28 2000-07-14 Nec Kofu Ltd 共有メモリの調停回路およびその調停方法
JP2001135083A (ja) * 1999-11-04 2001-05-18 Matsushita Electric Ind Co Ltd マルチポートメモリ
US6704817B1 (en) * 2000-08-31 2004-03-09 Hewlett-Packard Development Company, L.P. Computer architecture and system for efficient management of bi-directional bus
JP2003271445A (ja) * 2002-03-15 2003-09-26 Sony Corp メモリ制御装置及び方法
US7188219B2 (en) * 2004-01-30 2007-03-06 Micron Technology, Inc. Buffer control system and method for a memory system having outstanding read and write request buffers
US7277982B2 (en) * 2004-07-27 2007-10-02 International Business Machines Corporation DRAM access command queuing structure
US20060064535A1 (en) * 2004-09-22 2006-03-23 Walker Robert M Efficient multi-bank memory queuing system
US7346713B2 (en) * 2004-11-12 2008-03-18 International Business Machines Corporation Methods and apparatus for servicing commands through a memory controller port
US7272692B2 (en) * 2004-11-12 2007-09-18 International Business Machines Corporation Arbitration scheme for memory command selectors
US7877558B2 (en) * 2007-08-13 2011-01-25 Advanced Micro Devices, Inc. Memory controller prioritization scheme
US8127087B2 (en) * 2009-02-12 2012-02-28 International Business Machines Corporation Memory controller for improved read port selection in a memory mirrored system
JP2011232917A (ja) * 2010-04-27 2011-11-17 Renesas Electronics Corp 半導体集積回路、及びリクエスト制御方法
JP5754273B2 (ja) * 2011-07-11 2015-07-29 株式会社リコー メモリ制御装置、情報処理装置およびメモリ制御方法
US9361236B2 (en) * 2013-06-18 2016-06-07 Arm Limited Handling write requests for a data array
US10318420B2 (en) * 2014-10-31 2019-06-11 Hewlett Packard Enterprise Development Lp Draining a write queue based on information from a read queue
US9965323B2 (en) * 2015-03-11 2018-05-08 Western Digital Technologies, Inc. Task queues

Also Published As

Publication number Publication date
US20180232178A1 (en) 2018-08-16
JP2017054483A (ja) 2017-03-16

Similar Documents

Publication Publication Date Title
JP6950149B2 (ja) メモリコントローラ、メモリシステム、および、メモリコントローラの制御方法
JP7162102B2 (ja) メモリアクセス技術およびコンピュータシステム
JP5942781B2 (ja) 記憶制御装置、メモリシステム、情報処理システム、および、記憶制御方法
CN107025069B (zh) 非易失性存储器的数据路径控制
KR102393427B1 (ko) 반도체장치 및 반도체시스템
CN109815172B (zh) 设备控制器以及包括其的储存设备
US9710192B2 (en) Apparatuses and methods for providing data from a buffer
CN109947362B (zh) 管理闪存存储器读取操作
US9928171B2 (en) Apparatuses and methods for providing data to a configurable storage area
US11669267B2 (en) Completion entry throttling using host memory
EP3477461A1 (en) Devices and methods for data storage management
TWI671757B (zh) 記憶裝置中支援增進式流通量
JP6497394B2 (ja) メモリシステム、記憶装置、および、メモリシステムの制御方法
JP2009015832A (ja) アクセス間調停回路、半導体装置およびアクセス間調停方法
US10503438B1 (en) Memory sub-system supporting non-deterministic commands
CN107870866B (zh) Io命令调度方法与nvm接口控制器
US20170160952A1 (en) Memory controller, memory system, and information processing system
WO2017043140A1 (ja) メモリコントローラ、メモリシステム、および、メモリコントローラの制御方法
CN113467704A (zh) 通过智能阈值检测的命令优化
US20180018104A1 (en) Dynamic write latency for memory controller using data pattern extraction
US20160110119A1 (en) Direct memory access for command-based memory device
JP2015011421A (ja) 記憶制御装置、記憶装置、および、その記憶制御方法
JP6711281B2 (ja) メモリコントローラ、記憶装置、情報処理システムおよびメモリの制御方法
CN103365783A (zh) 存储控制装置、存储装置、信息处理***和处理方法
JP6107625B2 (ja) 記憶制御装置、記憶装置、情報処理システムおよびその記憶制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190318

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200707

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200817

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210209

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210329

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210824

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210906

R151 Written notification of patent or utility model registration

Ref document number: 6950149

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151