IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

<>
  • 特開-メモリシステム 図1
  • 特開-メモリシステム 図2
  • 特開-メモリシステム 図3
  • 特開-メモリシステム 図4
  • 特開-メモリシステム 図5
  • 特開-メモリシステム 図6
  • 特開-メモリシステム 図7
  • 特開-メモリシステム 図8
  • 特開-メモリシステム 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022118489
(43)【公開日】2022-08-15
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G06F 11/07 20060101AFI20220805BHJP
   G06F 12/02 20060101ALI20220805BHJP
   G06F 13/14 20060101ALI20220805BHJP
   G06F 13/42 20060101ALI20220805BHJP
   G06F 13/38 20060101ALI20220805BHJP
【FI】
G06F11/07 178
G06F12/02 570A
G06F11/07 140N
G06F13/14 310F
G06F13/42 310
G06F13/38 350
G06F13/38 320A
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2021015057
(22)【出願日】2021-02-02
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】井上 諒
(72)【発明者】
【氏名】小田 稔
【テーマコード(参考)】
5B042
5B077
5B160
【Fターム(参考)】
5B042GA25
5B042GA33
5B042KK14
5B042MA09
5B077AA41
5B077NN02
5B160AB26
(57)【要約】
【課題】デバッグ時の情報取得を容易化することができるメモリシステムを提供する。
【解決手段】メモリシステムは、第1メモリと、ホストと通信可能であり、第1メモリを制御するコントローラと、を具備する。コントローラは、第1メモリ上の位置を論理的に示す第1情報を含む第1コマンドを解読する第1デコーダと、第1メモリ上の物理的な位置を示す第2情報を含む第2コマンドを解読する第2デコーダと、第1デコーダによって第1コマンドから取得された第1情報を用いて第1メモリに対するアクセスを実行する第1回路と、第2デコーダによって第2コマンドから取得された第2情報を用いて第1メモリに対するアクセスを実行する第2回路と、格納されている値の変更がホストにより可能な第1レジスタと、第1レジスタに格納されている値に応じて、第1回路と第2回路との間で第1メモリに対するアクセスを行う回路を切り替える切替回路と、を含む。
【選択図】図1
【特許請求の範囲】
【請求項1】
第1メモリと、
ホストと通信可能であり、前記第1メモリを制御するコントローラと、
を具備し、
前記コントローラは、
前記第1メモリ上の位置を論理的に示す第1情報を含む第1コマンドを解読する第1デコーダと、
前記第1メモリ上の物理的な位置を示す第2情報を含む第2コマンドを解読する第2デコーダと、
前記第1デコーダによって前記第1コマンドから取得された前記第1情報を用いて、前記第1メモリに対するアクセスを実行する第1回路と、
前記第2デコーダによって前記第2コマンドから取得された前記第2情報を用いて、前記第1メモリに対するアクセスを実行する第2回路と、
格納されている値の変更が前記ホストにより可能な第1レジスタと、
前記第1レジスタに格納されている値に応じて、前記第1回路と前記第2回路との間で前記第1メモリに対するアクセスを行う回路を切り替える切替回路と、を含む
メモリシステム。
【請求項2】
第2メモリをさらに具備し、
前記コントローラは、
前記第2デコーダによって前記第2コマンドから取得された、前記第2メモリ上の物理的な位置を示す第3情報を用いて、前記第2メモリに対するアクセスを実行する第3回路をさらに含む
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、
第3メモリと、
前記第2デコーダによって前記第2コマンドから取得された、前記第3メモリ上の物理的な位置を示す第4情報を用いて、前記第3メモリに対するアクセスを実行する第4回路と、をさらに含む
請求項1または2に記載のメモリシステム。
【請求項4】
前記第1コマンドは、NVM Express(NVMe)仕様に準拠したNVMeコマンドであり、
前記第1レジスタは、PCI Express(PCIe)仕様に準拠したPCIeパケットによってアクセス可能なNVMeレジスタである
請求項1~3のいずれか1項に記載のメモリシステム。
【請求項5】
第1メモリと、
ホストと通信可能であり、前記第1メモリを制御するコントローラと、
を具備し、
前記コントローラは、
前記コントローラ内のレジスタの位置を論理的に示す第1情報を含む第1パケットを解読する第1デコーダと、
前記第1メモリ上の物理的な位置を示す第2情報を含む第2パケットを解読する第2デコーダと、
前記第1デコーダによって前記第1パケットから取得された前記第1情報を用いて、前記コントローラ内のレジスタに対するアクセスを実行する第1回路と、
前記第2デコーダによって前記第2パケットから取得された前記第2情報を用いて、前記第1メモリに対するアクセスを実行する第2回路と、
格納されている値の変更が前記ホストにより可能な第1レジスタと、
前記第1レジスタに格納されている値に応じて、前記第1回路による前記コントローラ内のレジスタへのアクセスと前記第2回路による前記第1メモリへのアクセスとを切り替える切替回路と、を含む
メモリシステム。
【請求項6】
第2メモリをさらに具備し、
前記コントローラは、
前記第2デコーダによって前記第2パケットから取得された、前記第2メモリ上の物理的な位置を示す第3情報を用いて、前記第2メモリに対するアクセスを実行する第3回路をさらに含む
請求項5に記載のメモリシステム。
【請求項7】
前記コントローラは、
第3メモリと、
前記第2デコーダによって前記第2パケットから取得された、前記第3メモリ上の物理的な位置を示す第4情報を用いて、前記第3メモリに対するアクセスを実行する第4回路と、をさらに含む
請求項5または6に記載のメモリシステム。
【請求項8】
前記第1パケットは、PCI Express(PCIe)仕様に準拠した、前記第1レジスタを含む前記コントローラ内のレジスタが割り当てられる論理アドレス空間のアドレスを指定して送信されるPCIeパケットであり、
前記第1レジスタは、前記第1パケットによってアクセス可能なPCIeレジスタである
請求項5~7のいずれか1項に記載のメモリシステム。
【請求項9】
第1メモリと、
ホストと通信可能であり、前記第1メモリを制御するコントローラと、
を具備し、
前記コントローラは、
前記ホストから受信した第1パケットに含まれるアドレス範囲が第1範囲である場合に前記第1パケットを解読する第1デコーダと、
前記アドレス範囲が前記第1範囲とは異なる第2範囲である場合に前記第1パケットを解読する第2デコーダと、
前記第1デコーダによって前記第1パケットから取得された第1情報を用いて、前記コントローラ内のレジスタに対するアクセスを実行する第1回路と、
前記第2デコーダによって前記第1パケットから取得された第2情報を用いて、前記第1メモリに対するアクセスを実行する第2回路と、を含む
メモリシステム。
【請求項10】
第2メモリをさらに具備し、
前記コントローラは、
前記第2デコーダによって前記第1パケットから取得された、前記第2メモリ上の物理的な位置を示す第3情報を用いて、前記第2メモリに対するアクセスを実行する第3回路をさらに含む
請求項9に記載のメモリシステム。
【請求項11】
前記コントローラは、
第3メモリと、
前記第2デコーダによって前記第1パケットから取得された、前記第3メモリ上の物理的な位置を示す第4情報を用いて、前記第3メモリに対するアクセスを実行する第4回路と、をさらに含む
請求項9または10に記載のメモリシステム。
【請求項12】
前記第1パケットは、PCI Express(PCIe)仕様に準拠した、BAR(Base Address Register)をアクセスするパケットである
請求項9~11のいずれか1項に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。たとえばNAND型フラッシュメモリ(NANDメモリ)を備えるSSD(solid state drive)は、サーバやパーソナルコンピュータなどの情報処理装置のストレージとして使用されている。
【0003】
SSDに不良が発生した場合、デバッグの助けとなる情報がSSD内に残存している可能性がある。しかし、NANDメモリを制御するコントローラ内のCPUやバスがハングアップしてしまうような不良の場合には、これらの情報を取得することができなくなってしまっていた。
【0004】
また、そもそも、これらの情報の取得は、たとえばデバッガと称される専用装置をSSDに接続して稼働させる必要があるなど、非常に手間が掛る作業であった。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特許第5225515号公報
【特許文献2】米国特許第7788537号明細書
【特許文献3】米国特許第8762790号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明の1つの実施形態は、デバッグ時の情報取得を容易化することができるメモリシステムを提供する。
【課題を解決するための手段】
【0007】
実施形態によれば、メモリシステムは、第1メモリと、ホストと通信可能であり、第1メモリを制御するコントローラと、を具備する。コントローラは、第1メモリ上の位置を論理的に示す第1情報を含む第1コマンドを解読する第1デコーダと、第1メモリ上の物理的な位置を示す第2情報を含む第2コマンドを解読する第2デコーダと、第1デコーダによって第1コマンドから取得された第1情報を用いて第1メモリに対するアクセスを実行する第1回路と、第2デコーダによって第2コマンドから取得された第2情報を用いて第1メモリに対するアクセスを実行する第2回路と、格納されている値の変更がホストにより可能な第1レジスタと、第1レジスタに格納されている値に応じて、第1回路と第2回路との間で第1メモリに対するアクセスを行う回路を切り替える切替回路と、を含む。
【図面の簡単な説明】
【0008】
図1】ホストと接続されている第1実施形態のメモリシステムの一構成例を示す図
図2】第1実施形態のメモリシステムとホストとのデバッグモードでの動作の流れを示すシーケンス図
図3】第1実施形態のメモリシステムが受信するNVMeコマンドの一フォーマット例を示す図
図4】ホストと接続されている第2実施形態のメモリシステムの一構成例を示す図
図5】第2実施形態のメモリシステムとホストとのデバッグモードでの動作の流れを示すシーケンス図
図6】第1実施形態のメモリシステムが受信するPCIeパケットの一フォーマット例を示す図
図7】ホストと接続されている第3実施形態のメモリシステムの一構成例を示す図
図8】第3実施形態のメモリシステムとホストとのデバッグモードでの動作の流れを示すシーケンス図
図9】第3実施形態のメモリシステムにおけるBARの一設定例を示す図
【発明を実施するための形態】
【0009】
以下、実施の形態について、図面を参照して説明する。
【0010】
(第1実施形態)
まず、第1実施形態について説明する。
【0011】
図1は、第1実施形態のメモリシステム1の一構成例を示す図である。図1には、メモリシステム1と、メモリシステム1に接続されるホスト2と、メモリシステム1とホスト2とを接続するインタフェース3とを含む、情報処理システムの一構成例が併せて示されている。
【0012】
ホスト2は、サーバやパーソナルコンピュータなどの情報処理装置である。インタフェース3は、ホスト2とメモリシステム1とを接続する。インタフェース3は、たとえばPCI Express(PCIe)TM仕様に準拠する。
【0013】
メモリシステム1は、SSDのようなストレージ装置として実現され得る。ここでは、メモリシステム1がSSDとして実現されている例を示す。メモリシステム1は、たとえばNVM Express(NVMe)TM仕様に準拠するプロトコルでホスト2と通信を行う。
【0014】
メモリシステム1は、コントローラ10、DRAM(Dynamic Random Access Memory)20およびNANDメモリ30を有する。
【0015】
コントローラ10は、たとえばSoC(system on a chip)として構成される。コントローラ10の各部の機能は、専用ハードウェア、プログラム(ファームウェア)を実行するプロセッサ、または、これらの組み合わせにより実現され得る。
【0016】
コントローラ10は、ホスト2が発行するコマンドに基づき、ホスト2から送信されてくるデータのNANDメモリ30への書き込み処理や、ホスト2が要求するデータのNANDメモリ30からの読み出し処理などを実行する。コントローラ10は、NANDメモリ30へ書き込むデータやNANDメモリ30から読み出したデータを一時的に格納するバッファとしてDRAM20を使用する。コントローラ10は、コントローラ10内のSRAM(Static Random Access Memory)130をバッファとして使用してもよい。バッファを含む各種領域をDRAM20に代えてSRAM130などに確保する場合、メモリシステム1はDRAM20を搭載しなくてもよい。
【0017】
ここで、ホスト2からメモリシステム1へコマンドを引き渡すためのホスト2およびメモリシステム1の動作の流れについて説明する。
【0018】
ホスト2は、主メモリ50を有する。主メモリ50は、たとえばSRAMである。ホスト2は、メモリシステム1に対するコマンドを格納するSQ(submission queue)51を主メモリ50上に構築する。SQ51は、NVMe仕様に準拠するフォーマットのコマンド(NVMeコマンド)を、たとえば128個まで蓄えておくことができる容量をもつ。ホスト2は、データの書き込みや読み出しを要求するNVMeコマンド(NVMe write/read command)をSQ51に格納する。そして、ホスト2は、NVMeコマンドの発行を通知するための、PCIe仕様に準拠するフォーマットのパケット(PCIeパケット)をメモリシステム1へ送信する。
【0019】
このPCIeパケットは、メモリシステム1内のレジスタ、より詳しくは、コントローラ10内のレジスタに書き込みを行うためのパケットである(PCIe MWr TLP[memory write transaction layer packet])。ホスト2は、このPCIeパケットを使って、NVMeコマンドがSQ51に格納されたことを示す値を、コントローラ10内の所定のレジスタあるいはSRAM130の所定の領域に書き込む。
【0020】
SQ51に関し、メモリシステム1は、ヘッドポインタとテイルポインタとを管理している。当該所定のレジスタあるいはSRAM130の所定の領域への書き込みにより、ホスト2は、ヘッドポインタとテイルポインタとのうちのテイルポインタを更新する。
【0021】
メモリシステム1は、当該所定のレジスタあるいはSRAM130の所定の領域への書き込みが行われ、ヘッドポインタとテイルポインタとが一致していない状態となると、NVMeコマンドがSQ51に格納されたことを認識する。メモリシステム1は、NVMeコマンドをSQ51から読み出すためのPCIeパケット(PCIe MRd TLP[memory read transaction layer packet])をホスト2へ送信する。このPCIeパケットに応じて、ホスト2は、SQ51内のNVMeコマンドをメモリシステム1に送信する。メモリシステム1は、このNVMeコマンドをSRAM130に格納する。NVMeコマンドをSQ51から読み出すと、メモリシステム1は、ヘッドポインタを更新し、ヘッドポインタとテイルポインタとが一致している状態とする。
【0022】
このように、ホスト2がメモリシステム1に対して発行するNVMeコマンドは、ホスト2とメモリシステム1との間でのPCIeパケットの送受信を通じて、ホスト2からメモリシステム1へ引き渡される。
【0023】
コントローラ10は、PCIeコントローラ110、NVMeコントローラ120、SRAM130、通常回路140、専用回路150および切替回路[2]160を有する。
【0024】
PCIeコントローラ110は、PCIeパケットの送受信を含む、PCIeパケットに関する処理を実行する。PCIeコントローラ110は、デコーダ111を有する。デコーダ111は、ホスト2から受信したPCIeパケットを解読する。具体的には、デコーダ111は、PCIeパケットの種類を解析する。ホスト2から受信したPCIeパケットがレジスタあるいはSRAM130へのデータの書き込みを要求するパケット(PCIe MWr TLP)、または、レジスタあるいはSRAM130からのデータの読み出しを要求するパケット(PCIe MRd TLP)であった場合、デコーダ111は、アクセス対象のレジスタを示す情報(アドレス)や、書き込み対象の情報(データ)などを、PCIeパケットから取得する。PCIeコントローラ110は、デコーダ111の解読結果に基づき、レジスタへのデータの書き込み処理や、レジスタからのデータの読み出し処理を実行する。また、PCIeコントローラ110は、NVMeコントローラ120からの指示に応じて、PCIeパケットの生成およびホスト2への送信を実行する。
【0025】
NVMeコントローラ120は、PCIeコントローラ110と連携して、NVMeコマンドの受信および応答に関する処理を実行する。NVMeコントローラ120は、レジスタ121、切替回路[1]122、通常デコーダ123および専用デコーダ124を有する。レジスタ121、切替回路[1]122および専用デコーダ124は、第1実施形態のメモリシステム1独自の構成要素であり、これらについては後述する。
【0026】
前述したように、ホスト2がNVMeコマンドを発行すると、コントローラ10内の所定のレジスタ(不図示)あるいはSRAM130の所定の領域への書き込みが発生する。この書き込みに応じて、NVMeコントローラ120は、ホスト2からのNVMeコマンドの取得を、PCIeコントローラ110に対して指示する。指示を受けたPCIeコントローラ110は、NVMeコマンドをSQ51から読み出すためのPCIeパケット(PCIe MRd TLP)を生成してホスト2へ送信する。
【0027】
通常デコーダ123は、取得されたNVMeコマンドを解読する。具体的には、通常デコーダ123は、NVMeコマンドの種類を解析する。NVMeコマンドがNANDメモリ30へのデータの書き込みを要求するコマンド(NVMe write command)またはNANDメモリ30からのデータの読み出しを要求するコマンド(NVMe read command)であった場合、通常デコーダ123は、アクセス対象のデータに関連づけられた、NANDメモリ30上の位置を論理的に示す論理アドレスをNVMeコマンドから取得する。論理アドレスは、たとえば論理ブロックアドレス(LBA)である。
【0028】
通常回路140は、NVMeコントローラ120によって受信および解釈されたNVMeコマンドに応じた処理を実行する。たとえばNVMeコマンドがNVMe read commandの場合、通常回路140は、通常デコーダ123によって取得された論理アドレスを、NANDメモリ30上の物理的な位置を示す物理アドレスに変換し、NANDメモリ30上の当該物理アドレスで示される位置からのデータの読み出しを実行する。論理アドレスから物理アドレスへの変換は、たとえば論物アドレス変換と称される。
【0029】
通常回路140は、CPU、バス、シーケンサ、PHY(physical layer)を含む。CPUは、ファームウェアと称される、メモリシステム1内のハードウェアを制御するためのプログラムを実行する。バスは、CPUと、CPUが制御するハードウェアとを接続する信号線である。シーケンサは、PHYを介したDRAM20やNANDメモリ30との間のデータの送受信が、予め定められた規則に準じて実行されるように制御する。PHYは、OSI階層モデルにおける最下層の物理層の機能を実現するためのモジュールである。PHYは、DRAM20やNANDメモリ30への信号の出力およびDRAM20やNANDメモリ30からの信号の入力を制御する。
【0030】
以下の説明において、コントローラ10の外部に存在するDRAM20やNANDメモリ30を外部メモリと総称することがあり、また、コントローラ10の内部に存在するSRAM130やレジスタを内部メモリと総称することがある。
【0031】
専用回路150は、通常回路140とは別途設けられる第1実施形態のメモリシステム1独自の構成要素である。専用回路150は、前述のCPUやバスを介さず、DRAM20、NANDメモリ30またはSRAM130へアクセスする。
【0032】
複数の専用回路150が、DRAM20、NANDメモリ30、SRAM130に対して一対一で設けられる。コントローラ10内のレジスタを、前述のCPUやバスを介さずにアクセスする対象とする場合、たとえばレジスタのグループや種類ごとに専用回路150がさらに設けられる。
【0033】
外部メモリに対して設けられる専用回路150は、外部メモリとの間で通信するためのシーケンサ、PHYなどを含む。内部メモリに対して設けられる専用回路150は、内部メモリとの間でデータを入出力するためのin/out信号を制御する回路などを含む。
【0034】
NVMeコントローラ120から論理アドレスを受け取ってNANDメモリ30へのアクセスを実行する通常回路140に対し、専用回路150は、NVMeコントローラ120から物理アドレスを受け取ってNANDメモリ30などへのアクセスを実行する。NVMeコントローラ120による物理アドレスの取得については後述する。
【0035】
切替回路[2]160も、第1実施形態のメモリシステム1独自の構成要素である。切替回路[2]160は、DRAM20、NANDメモリ30、SRAM130、レジスタの接続先を通常回路140と専用回路150との間で切り替える。複数の切替回路[2]160が、複数の専用回路150に対して一対一で設けられる。
【0036】
ここで、メモリシステム1に何らかの不良が発生した場合を想定する。この場合、デバッグの助けとなる情報が、DRAM20、NANDメモリ30、SRAM130、またはコントローラ10内のレジスタに残存している可能性がある。従来、コントローラ10内のCPUやバスがハングアップしてしまうような不良の場合には、これらの情報を取得することができなくなってしまっていた。また、CPUやバスは正常でも、DRAM20、SRAM130、レジスタからデータを取得するためには、たとえばデバッガと称される専用装置をメモリシステム1に接続して稼働させる必要があった。
【0037】
第1実施形態のメモリシステム1は、コントローラ10内のCPUやバスがハングアップしてしまうような不良の場合においても、これらの情報をホスト2から取得することができるようにしたものである。
【0038】
通常時、ホスト2は、NANDメモリ30からデータを読み出す場合、論理アドレスを含むNVMe read commandをSQ51に格納する。これに対して、デバッグ時においては、ホスト2は、たとえばNVMe read commandをデバッグ時におけるデータ取得用のコマンドとして割り当てた場合、通常時の論理アドレスに代えて、物理アドレスを含むNVMe read commandをSQ51に格納する。この物理アドレスは、通常回路140がアドレス変換によって得ているものと同じであってもよいし、NANDメモリ30のチャンネル、ブロック、バンクなどを独自の規則で示すものであってもよい。物理アドレスは、外部メモリ上または内部メモリ上の物理的な位置を、対応する専用回路150が特定できるものであればよい。
【0039】
デバッグ時におけるNVMe read commandには、NANDメモリ30に関する物理アドレスに限らず、DRAM20の物理アドレスや、SRAM130の物理アドレスを含ませることができる。つまり、ホスト2は、NVMe read commandを使って、NANDメモリ30からのデータの読み出しに限らず、DRAM20からのデータの読み出しや、SRAM130からのデータの読み出しを要求することができる。さらには、コントローラ10内のレジスタがデバッグ時のアクセス対象となっている場合には、ホスト2は、レジスタの物理アドレスを含むNVMe read commandを使って、レジスタからのデータの読み出しを要求することができる。
【0040】
NVMe read commandに限らず、ホスト2は、NANDメモリ30、DRAM20、SRAM130、またはコントローラ10内のレジスタへの書き込みを要求するNVMe write commandを発行することもできる。つまり、外部メモリや内部メモリの物理アドレスを指定して、外部メモリや内部メモリへのデータの書き込みを要求することもできる。
【0041】
NVMeコントローラ120内のレジスタ121は、通常モードからデバッグモードへの移行をホスト2がメモリシステム1に通知するために設けられるレジスタである。具体的には、レジスタ121は、通常モードを示す値またはデバッグモードを示す値の一方を格納する。レジスタ121は、たとえばNVMeレジスタにおいてreservedとして定義されている領域の一部分を流用して実装される。メモリシステム1の起動時やリセット時、レジスタ121には通常モードを示す値が初期値として格納される。
【0042】
ホスト2は、デバッグ時、NVMe read commandを使って外部メモリや内部メモリからデータを読み出すにあたり、NVMeコントローラ120内のレジスタ121へのデータの書き込みを実行する。より詳しくは、通常モードからデバッグモードに移行することをメモリシステム1に通知するため、デバッグモードを示す値をレジスタ121に書き込む処理を実行する。レジスタ121へのデータの書き込みは、PCIeパケット(PCIe MWr TLP)を使って要求することができる。
【0043】
切替回路[1]122は、PCIeコントローラ110によるPCIeパケットの送受信を通じて取得されるNVMeコマンドの供給先を、通常デコーダ123と専用デコーダ124との間で切り替える。NVMeコントローラ120は、レジスタ121の値に基づき、切替回路[1]122を制御する。具体的には、NVMeコントローラ120は、レジスタ121の値がデバッグモードを示す値となっていた場合、NVMeコマンドの供給先が専用デコーダ124となるように、切替回路[1]122を制御する。NVMeコントローラ120は、切替回路[1]122の制御と並行して、切替回路[2]160の制御も実行する。具体的には、NVMeコントローラ120は、DRAM20、NANDメモリ30、SRAM130、またはレジスタの接続先が専用回路150となるように、切替回路[2]160を制御する。
【0044】
ホスト2は、レジスタ121へのデータの書き込みを要求するPCIeパケット(PCIe MWr TLP)をメモリシステム1に送信した後、たとえばNANDメモリ30の物理アドレスを含むNVMe read commandをメモリシステム1に対して発行する。具体的には、ホスト2は、NVMe read commandをSQ51に格納し、このNVMe read commandの発行を通知するためのPCIeパケット(PCIe MWr TLP)をメモリシステム1に送信する。デバッグモードのメモリシステム1においては、ホスト2のSQ51から取得された当該NVMe read commandは、切替回路[1]122経由で専用デコーダ124へ供給される。
【0045】
専用デコーダ124も、通常デコーダ123と同様、NVMeコマンドを解析する。前述したように、通常デコーダ123は、NVMe read commandの場合、NANDメモリ30の論理アドレスを、当該NVMe read commandから取得する。これに対して、専用デコーダ124は、DRAM20、NANDメモリ30、SRAM130などの物理アドレスを、NVMe read commandから取得する。この物理アドレスは、たとえば本来は論理アドレスが格納されるNVMe read commandの後述するSLBAフィールドに格納されている。また、専用デコーダ124は、たとえば、この物理アドレスからアクセス対象を特定する。専用デコーダ124は、特定したアクセス対象に対応する専用回路150へ物理アドレスを供給する。
【0046】
デバッグモードへ移行すると、切替回路[2]160により、DRAM20、NANDメモリ30、SRAM130などの接続先が、通常回路140から専用回路150へ切り替わる。専用回路150は、専用デコーダ124から受け取った物理アドレスで示される位置からのデータの読み出しを実行する。
【0047】
図2は、デバッグモードでメモリシステム1からデータを読み出す場合におけるホスト2およびメモリシステム1の動作の流れを示すシーケンス図である。
【0048】
ホスト2は、まず、デバッグモードを示す値をレジスタ121に書き込むためのPCIe MWr TLPをメモリシステム1に送信する(S101)。メモリシステム1は、このPCIe MWr TLPで指定される値をレジスタ121に格納する(S102)。そして、メモリシステム1は、レジスタ121の値に基づき、切替回路[1]122、切替回路[2]160を制御する(S103)。ここまでのS101~S103が、メモリシステム1を通常モードからデバッグモードへ移行させるまでの流れである(a1)。
【0049】
デバッグモードへ移行したメモリシステム1に対して、ホスト2は、デバッグ用のデータを読み出すためのNVMe read commandをSQ51に格納する(S111)。ホスト2は、通常モード時のNANDメモリ30の論理アドレスに代えて、アクセス対象の物理アドレスをNVMe read commandに含ませる。図3は、NVMe read commandの一フォーマット例を示す図である。
【0050】
NVMe read commandは、SLBAフィールド(b1)を有する。ホスト2は、メモリシステム1が通常モードの場合、このSLBAフィールドに論理アドレス(b11)を格納する。一方、メモリシステム1がデバッグモードの場合、ホスト2は、このSLBAフィールドに物理アドレス(b12)を格納する。なお、デバッグモード時における物理アドレスの格納場所は、SLBAフィールド以外であってもよい。その場合、専用デコーダ124は、当該SLBAフィールド以外の場所から物理アドレスを取得する。
【0051】
説明を図2に戻す。NVMe read commandをSQ51に格納すると、ホスト2は、NVMeコマンドをSQ51から取得させるためのPCIe MWr TLPをメモリシステム1に送信する(S112)。このPCIe MWr TLPは、NVMeコマンドがSQ51に格納されていることを示す値をメモリシステム1の所定のレジスタに書き込むためのパケットである。
【0052】
メモリシステム1は、当該所定のレジスタへの書き込みが行われると、NVMeコマンドがSQ51に格納されていることを認識する。メモリシステム1は、NVMeコマンドをSQ51から読み出すためのPCIe MRd TLPをホスト2に送信する(S113)。メモリシステム1は、物理アドレスを含むホスト2から取得したNVMe read commandに応じて、外部メモリ(DRAM20、NANDメモリ30)または内部メモリ(SRAM130、コントローラ10内のレジスタ)からのデータの読み出し処理を実行する(S114)。メモリシステム1は、読み出したデータを送信するためのPCIe MWr TLPをホスト2に送信する(S115)。S111~S115が、デバッグモードにおいてホスト2がメモリシステム1からデータを読み出す流れである(a2)。
【0053】
このように、第1実施形態のメモリシステム1においては、ホスト2は、PCIeパケットを使ってメモリシステム1をデバッグモードに移行させることで、NVMeコマンドを使ってメモリシステム1内のデータを読み出すことができる。デバッグモード時、メモリシステム1は、CPUやバスを含む通常回路140を経ずにデータの読み出しを実行するためのバイパス経路を構成する。従って、メモリシステム1において、CPUやバスがハングアップするような不良が発生した場合でも、データの読み出しが可能である。NANDメモリ30に限らず、DRAM20、SRAM130、コントローラ10内のレジスタからも、ホスト2によるNVMeコマンドを使ったデータの読み出しが可能なので、専用のデバッガをメモリシステム1に接続して稼働させる等の作業を不要にできる。
【0054】
(第2実施形態)
次に、第2実施形態について説明する。ここでは、第1実施形態と同一の構成要素については同一の符号を使用し、また、それらについての説明を省略する。
【0055】
図4は、第2実施形態のメモリシステム1の一構成例を示す図である。図4には、メモリシステム1と、メモリシステム1に接続されるホスト2と、メモリシステム1とホスト2とを接続するインタフェース3とを含む、情報処理システムの一構成例が併せて示されている。
【0056】
第1実施形態のメモリシステム1は、デバッグ時、ホスト2が、NVMeコマンドを使ってメモリシステム1内のデータを読み出せるようにする。つまり、第1実施形態のメモリシステム1においては、デバッグ時、NVMe仕様に準拠する通信がホスト2との間で開通していることが前提条件となっている。これに対して、第2実施形態のメモリシステム1は、ホスト2が、PCIeパケットを使ってメモリシステム1内のデータを読み出せるようにしたものである。つまり、第2実施形態のメモリシステム1においては、デバッグ時、NVMe仕様に準拠する通信が開通している必要はなく、PCIeがリンクアップしていればよい。
【0057】
図4に示す、第2実施形態における通常回路140には、第1実施形態において説明した通常デコーダ123を有するNVMeコントローラが含まれる。このNVMeコントローラには、第1実施形態において説明したレジスタ121、切替回路[1]122、専用デコーダ124は含まれない。これらに代わり、第2実施形態のメモリシステム1においては、PCIeコントローラ110が、レジスタ112、切替回路113、専用デコーダ114を有する。なお、図4の通常デコーダ111は、図1のデコーダ111と同一の構成であってもよい。
【0058】
レジスタ112は、通常モードからデバッグモードへの移行をホスト2がメモリシステム1に通知するために設けられるレジスタである。具体的には、レジスタ112は、通常モードを示す値またはデバッグモードを示す値の一方を格納する。レジスタ112は、PCIeパケット(PCIe CfgRd TLP [configuration read transaction layer packet]/CfgWr TLP [configuration write transaction layer packet])を使ってデータの読み出しや書き込みを要求することができるPCIeレジスタである。メモリシステム1の起動時やリセット時、レジスタ112には通常モードを示す値が初期値として格納される。
【0059】
切替回路[1]113は、ホスト2から送信されるPCIeパケットの供給先を、通常デコーダ111と専用デコーダ114との間で切り替える。PCIeコントローラ110は、レジスタ112の値に基づき、切替回路[1]113を制御する。具体的には、PCIeコントローラ110は、レジスタ112の値がデバッグモードを示す値となっていた場合、PCIeパケットの供給先が専用デコーダ114となるように、切替回路[1]113を制御する。PCIeコントローラ110は、切替回路[1]113の制御と並行して、切替回路[2]160の制御も実行する。具体的には、PCIeコントローラ110は、DRAM20、NANDメモリ30、SRAM130、コントローラ10内のレジスタの接続先が専用回路150となるように、切替回路[2]160を制御する。
【0060】
ホスト2は、レジスタ112へのデータの書き込みを要求するPCIeパケット(PCIe CfgWr TLP)をメモリシステム1に送信した後、たとえばNANDメモリ30の物理アドレスを含むPCIeパケット(PCIe MRd TLP)をメモリシステム1に送信する。デバッグモードのメモリシステム1においては、このPCIe MRd TLPは、切替回路[1]113経由で専用デコーダ114へ供給される。
【0061】
第1実施形態において説明したように、通常デコーダ111は、PCIeパケットの種類を解析する。PCIeパケットがレジスタへのデータの書き込みを要求するパケット(PCIe MWr TLP)またはレジスタからのデータの読み出しを要求するパケット(PCIe MRd TLP)であった場合、通常デコーダ111は、アクセス対象のレジスタを示す情報(アドレス)や、書き込み対象の情報(データ)などを、PCIeパケットから取得する。
【0062】
これに対して、専用デコーダ114は、PCIeパケットがPCIe MWr TLPまたはPCIe MRd TLPであった場合、DRAM20、NANDメモリ30、SRAM130などの物理アドレスをPCIeパケットから取得する。また、専用デコーダ114は、たとえば、その物理アドレスからアクセス対象を特定する。つまり、ホスト2は、デバッグ時、DRAM20、NANDメモリ30、SRAM130などの物理アドレスをPCIeパケットに含めてメモリシステム1に送信する。
【0063】
デバッグモードへ移行すると、切替回路[2]160により、DRAM20、NANDメモリ30、SRAM130などの接続先が、通常回路140から専用回路150へ切り替わる。専用回路150は、専用デコーダ114から受け取った物理アドレスで示される位置からのデータの読み出しを実行する。
【0064】
図5は、デバッグモードでメモリシステム1からデータを読み出す場合におけるホスト2およびメモリシステム1の動作の流れを示すシーケンス図である。
【0065】
ホスト2は、まず、デバッグモードを示す値をレジスタ112に書き込むためのPCIe CfgWr TLPをメモリシステム1に送信する(S201)。メモリシステム1は、このPCIe CfgWr TLPで指定される値をレジスタ112に格納する(S202)。そして、メモリシステム1は、レジスタ112の値に基づき、切替回路[1]113、切替回路[2]160を制御する(S203)。ここまでのS201~S203が、メモリシステム1を通常モードからデバッグモードへ移行させるまでの流れである(c1)。
【0066】
デバッグモードへ移行したメモリシステム1に対して、ホスト2は、デバッグ用のデータを読み出すためのPCIe MRd TLPをメモリシステム1に送信する(S211)。図6は、PCIe MRd TLPの一フォーマット例を示す図である。
【0067】
PCIe MRd TLPは、TLPヘッダ(d1)を有する。また、TLPヘッダは、アドレスフィールド(d10)を有する。ホスト2は、メモリシステム1が通常モードの場合、このアドレスフィールドに論理アドレス(d11)を格納する。この論理アドレスは、NANDメモリ30の位置を論理的に示すアドレスではなく、コントローラ10内のレジスタが割り当てられる論理アドレス空間上の位置を示すアドレスである。具体的には、後述するBAR(Base Address Register)で定義されるアドレス空間の先頭アドレスに当該レジスタのアドレスが加えられたアドレスが格納される。一方、メモリシステム1がデバッグモードの場合、ホスト2は、このアドレスフィールドに、BARで定義されるアドレス空間の先頭アドレスに、アクセス対象となる外部メモリ(DRAM20、NANDメモリ30)や内部メモリ(SRAM130、コントローラ10内のレジスタ)の物理アドレスが加えられたアドレス(d12)を格納する。なお、デバッグモード時における物理アドレスの格納場所は、アドレスフィールド以外であってもよい。その場合、専用デコーダ124は、当該アドレスフィールド以外の場所から物理アドレスを取得する。あるいは、アドレスフィールドと、PCIe MRd TLP内においてTLP Prefix (Vendor Defined)として定義されている領域とを組み合わせて、物理アドレスの格納場所としてもよい。
【0068】
説明を図5に戻す。メモリシステム1は、物理アドレスを含むホスト2から受信したPCIe MRd TLPに応じて、外部メモリ(DRAM20、NANDメモリ30)または内部メモリ(SRAM130、コントローラ10内のレジスタ)からのデータの読み出し処理を実行する(S212)。メモリシステム1は、読み出したデータを送信するためのPCIe CplD TLP[completion with data transaction layer packet]をホスト2に送信する(S213)。PCIe CplD TLPは、PCIe MRd TLPに対する完了通知である。S211~S213が、デバッグモードにおいてホスト2がメモリシステム1からデータを読み出す流れである(c2)。
【0069】
このように、第2実施形態のメモリシステム1においては、ホスト2は、PCIeパケットを使ってメモリシステム1をデバッグモードに移行させることで、PCIeパケットを使ってメモリシステム1内のデータを読み出すことができる。デバッグモード時、メモリシステム1は、CPUやバスを含む通常回路140を経ずにデータの読み出しを実行するためのバイパス経路を構成する。従って、メモリシステム1において、CPUやバスがハングアップするような不良が発生した場合でも、データの読み出しが可能である。NANDメモリ30に限らず、DRAM20、SRAM130、コントローラ10内のレジスタからも、ホスト2によるPCIeパケットを使ったデータの読み出しが可能なので、専用のデバッガをメモリシステム1に接続して稼働させる等の作業を不要にできる。
【0070】
(第3実施形態)
次に、第3実施形態について説明する。ここでは、第1実施形態や第2実施形態と同一の構成要素については同一の符号を使用し、また、それらについての説明を省略する。
【0071】
図7は、第3実施形態のメモリシステム1の一構成例を示す図である。図7には、メモリシステム1と、メモリシステム1に接続されるホスト2と、メモリシステム1とホスト2とを接続するインタフェース3とを含む、情報処理システムの一構成例が併せて示されている。
【0072】
第2実施形態のメモリシステム1は、PCIeレジスタ112によって、通常モードとデバッグモードとの間の切り替えを制御する。これに対して、第3実施形態のメモリシステム1は、BAR(Base Address Register)と称される既存のレジスタ(BAR115)の使い分けによって、通常モードとデバッグモードとの間の切り替えを制御する。BAR115は、PCIeパケット(PCIe CfgWr TLP)を使ってデータが書き込まれるレジスタである。ここで、BAR115について説明する。
【0073】
たとえば、複数のメモリシステム1がホスト2に接続されている場合を想定する。各メモリシステム1は、自分宛てのNVMeコマンドがホスト2のSQ51に格納されていることを認識するためのレジスタ等、コントローラ10内に様々なレジスタを有する。ホスト2は、あるメモリシステム1のレジスタにデータを書き込んだり、あるメモリシステム1のレジスタからデータを読み出したりする場合、そのメモリシステム1宛てに、PCIe MWr TLPやPCIe MRd TLPを送信する。ホスト2からのPCIe MWr TLPやPCIe MRd TLPは、複数のメモリシステム1すべてに送信される。各メモリシステム1は、受信したPCIe MWr TLPやPCIe MRd TLPが自分宛てかどうかを判定する。この判定に、BAR115の値が使用される。
【0074】
ホスト2は、各メモリシステム1に対して、複数のメモリシステム1を含んで構成される情報処理システムにおけるレジスタ用の論理アドレス空間上の領域を割り当てる。この割り当ては、複数のメモリシステム1の間で論理アドレス空間が重複しないように行われる。ホスト2は、このレジスタ用の論理アドレス空間上の、各メモリシステム1に対して割り当てた領域の範囲を示す情報を、PCIe CfgWr TLPを使って、各メモリシステム1のBAR115に書き込む。PCIe CfgWr TLPは、各メモリシステム1の識別情報を指定することができるPCIeパケットである。つまり、各メモリシステム1は、BAR115を参照することなく、受信したPCIe CfgWr TLPが自分宛てかどうかを判定することができる。PCIe MWr TLPやPCIe MRd TLPについては、各メモリシステム1は、それらに含まれるアドレスがBAR115で示される範囲内かどうかで、自分宛てかどうかを判定する。
【0075】
BAR115は、BAR0~5の5つのレジスタで構成されている。BAR0~5のそれぞれは、32ビットの容量をもつ。一方、前述の、レジスタ用の論理アドレス空間上の領域の範囲を示す情報のサイズは、たとえば64ビットである。そのため、BAR0~5は、2つずつの組み合わせで使用される。通常、ホスト2は、BAR0,1を組み合わせて使用する(BAR0/1)。
【0076】
また、ホスト2は、BAR2,3を組み合わせて使用することも可能であり(BAR2/3)、BAR4,5を組み合わせて使用することも可能である(BAR4/5)。つまり、ホスト2は、各メモリシステム1に対して、レジスタ用の論理アドレス空間上の領域を3つまで割り当てることが可能である。換言すれば、各メモリシステム1に対して割り当てられるレジスタ用の論理アドレス空間上の領域は、2つまたは3つの分離した領域であってもよい。しかし、BAR0/1のみで各メモリシステム1の論理アドレス空間を指定できる場合には、BAR2~5は、使用されない。
【0077】
そこで、第3実施形態のメモリシステム1は、未使用のBAR2~5の中のたとえばBAR2,3を用いて、ホスト2から送信されたPCIe MRd TLPやPCIe MRd TLPが自分宛てであり、かつ、デバッグモードで処理すべきであると認識する。たとえば、複数のメモリシステム1がホスト2に接続されている場合、ホスト2は、メモリシステム1ごとに異なる、レジスタ用の論理アドレス空間外の架空の領域の範囲を示す情報を、PCIe CfgWr TLPを使って、各メモリシステム1のBAR(BAR2/3)115に書き込む。
【0078】
たとえば、PCIe MWr TLPに含まれる論理アドレスが、BAR(BAR0/1)115の範囲内の場合、PCIeコントローラ110は、このPCIe MWr TLPが自メモリシステム1宛てであり、かつ、通常モードで処理すべきであると認識する。たとえば、NVMeコマンドの発行を通知するために、ホスト2が自メモリシステム1宛てに送信したPCIe MWr TLPには、NVMeコマンドがSQ51に格納されたことを示す値を書き込むための所定のレジスタに対応し、BAR(BAR0/1)115の範囲内である論理アドレスが含まれている。このPCIe MWr TLPは、通常デコーダ111によって解読され、PCIeコントローラ110は、NVMeコマンドがSQ51に格納されていることを示す値を当該所定のレジスタに書き込む。これにより、通常回路140のNVMeコントローラは、NVMeコマンドがSQ51に格納されたことを認識する。NVMeコントローラは、PCIeコントローラ110に対し、NVMeコマンドをSQ51から取得するためのPCIe MRd TLPのホスト2への送信を指示する。以下、取得されたNVMeコマンドが、NVMeコントローラのデコーダによって解読され、NVMeコマンドに応じた処理が通常回路140によって実行される。
【0079】
一方、デバッグ時にホスト2から送信されてくる、たとえばNANDメモリ30からデータを読み出すことを要求するPCIe MRd TLPには、BAR(BAR2/3)115の範囲内の論理アドレスが含まれている。これにより、PCIeコントローラ110は、このPCIe MRd TLPが自メモリシステム1宛てであり、かつ、デバッグモードで処理すべきであると認識する。なお、第2実施形態では、たとえば本来は論理アドレスが格納されるPCIe MRd TLPのTLPヘッダのアドレスフィールドに、NANDメモリ30などの物理アドレスを格納する例を示した。これに対して、第3実施形態では、PCIe MRd TLPのTLPヘッダのアドレスフィールドに、BAR(BAR2/3)115で定義されるアドレス空間の先頭アドレスに、アクセス対象となる外部メモリ(DRAM20、NANDメモリ30)や内部メモリ(SRAM130、コントローラ10内のレジスタ)の物理アドレスが加えられたアドレスが格納される。なお、このアドレスは、TLPヘッダのアドレスフィールドに代えて、たとえばTLP Prefix (Vendor Defined)に格納されてもよい。
【0080】
PCIeコントローラ110は、PCIe MRd TLPをデバッグモードで処理すべきであると認識すると、このPCIe MRd TLPを専用デコーダ114に供給する。また、PCIeコントローラ110は、DRAM20、NANDメモリ30、SRAM130、レジスタの接続先が専用回路150となるように、切替回路160を制御する。切替回路160は、第2実施形態の切替回路[2]160と同一の構成であってもよい。
【0081】
専用デコーダ114は、第2実施形態と同様、PCIeパケットがPCIe MWr TLPまたはPCIe MRd TLPであった場合、DRAM20、NANDメモリ30、SRAM130などの物理アドレスをPCIeパケットから取得する。また、専用回路150は、専用デコーダ114から受け取った物理アドレスで示される位置からのデータの読み出しなどを実行する。
【0082】
図8は、デバッグモードでメモリシステム1からデータを読み出す場合におけるホスト2およびメモリシステム1の動作の流れを示すシーケンス図である。
【0083】
ホスト2は、まず、BAR115を設定するためのPCIe CfgWr TLPをメモリシステム1に送信する(S301)。具体的には、ホスト2は、BAR0/1を設定するためのPCIe CfgWr TLPと、BAR2/3を設定するためのPCIe CfgWr TLPとをメモリシステム1に送信する。メモリシステム1は、ホスト2からのPCIe CfgWr TLPに応じて、BAR115を設定する(S302)。このBAR115を設定するS301~S302が、メモリシステム1をデバッグモードで動作させる準備の流れである(e1)。図9は、BAR115の一設定例を示す図である。
【0084】
図9に示すように、BAR115のBAR0/1には、ホスト2がPCIe MRd/MWr TLPを使ってメモリシステム1内のレジスタにアクセスするために使用するアドレスの範囲を示す情報が格納される(f1)。一方、BAR115のBAR2/3には、ホスト2がメモリシステム1をデバッグモードで動作させるために使用するアドレスの範囲を示す情報が格納される(f2)。
【0085】
説明を図8に戻す。ホスト2は、デバッグ時、BAR2/3を使用して、つまり、BAR2/3に格納した情報で示される範囲内のアドレスを指定して、デバッグ用のデータを読み出すためのPCIe MRd TLPをメモリシステム1に送信する(S311)。メモリシステム1は、PCIe MRd TLPで指定されているアドレスから、デバッグモードで動作すべきことを認識し、切替回路160を制御する(S312)。具体的には、外部メモリ(DRAM20、NANDメモリ30)または内部メモリ(SRAM130、コントローラ10内のレジスタ)の接続先が通常回路140となっている場合、それらの接続先を専用回路150へ切り替えるように切替回路160を制御する。
【0086】
そして、メモリシステム1は、物理アドレスを含むホスト2から送信されたPCIe MRd TLPに応じて、外部メモリまたは内部メモリからのデータの読み出し処理を実行する(S313)。メモリシステム1は、読み出したデータを送信するためのPCIe CplD TLPをホスト2に送信する(S314)。S311~S314が、デバッグモードでホスト2がメモリシステム1からデータを読み出す流れである(e2)。
【0087】
このように、第3実施形態のメモリシステム1においては、ホスト2は、未使用のBARを使ってメモリシステム1をデバッグモードで動作させることで、PCIeパケットを使ってメモリシステム1内のデータを読み出すことができる。デバッグモード時、メモリシステム1は、CPUやバスを含む通常回路140を経ずにデータの読み出しを実行するためのバイパス経路を構成する。従って、メモリシステム1において、CPUやバスがハングアップするような不良が発生した場合でも、データの読み出しが可能である。NANDメモリ30に限らず、DRAM20、SRAM130、コントローラ10内のレジスタからも、ホスト2によるPCIeパケットを使ったデータの読み出しが可能なので、専用のデバッガをメモリシステム1に接続して稼働させる等の作業を不要にできる。
【0088】
以上のように、各実施形態のメモリシステム1は、デバッグ時の情報取得を容易化することができる。
【0089】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0090】
1…メモリシステム、2…ホスト、3…インタフェース、10…コントローラ、20…DRAM、30…NANDメモリ、50…主メモリ、51…SQ、110…PCIeコントローラ、111…通常デコーダ、112…PCIeレジスタ、113…切替回路、114…専用デコーダ、115…BAR、120…NVMeコントローラ、121…NVMeレジスタ、123…通常デコーダ、124…専用デコーダ、130…SRAM、140…通常回路、150…専用回路、160…切替回路。
図1
図2
図3
図4
図5
図6
図7
図8
図9