以下、本発明の実施の形態につき添付図面を参照しながら詳細に説明する。実施の形態において各ブロックを構成する回路素子は、特に制限されないが、公知のCMOS(相補型MOSトランジスタ)等の集積回路技術によって、単結晶シリコンのような1個の半導体基板上に形成される。また、具体的な数値は、特に言及がない限り、本発明を説明するにあたって用いた数値であって、特にそれに限定されるものではない。
(第1の実施の形態)
本発明を適用した第1の実施の形態である情報処理システムについて、図1〜図30を用いて説明する。
図1は、本発明を適用した第1の実施の形態である情報処理装置CPU_CHIPとメモリモジュールMEMとから構成される情報処理システムにおいて、その構成の一例を示すブロック図である。また、図2は、情報処理装置CPU_CHIPの構成の一例を示すブロック図である。以下におのおのについて説明する。
情報処理装置CPU_CHIPは、情報処理回路CPU0、CPU1、CPU2、CPU3と、調停回路CARBとメモリ制御回路DCMCから構成されている。メモリモジュールMEMは、メモリ装置M0、M1、M2から構成される。また、情報処理装置CPU_CHIPとメモリ装置M0、M1、M2は直列に接続されている。情報処理回路CPU0はマスター番号レジスタMID0を装備し、情報処理回路CPU1はマスター番号レジスタMID1を装備し、情報処理回路CPU2はマスター番号レジスタMID2を装備し、情報処理回路CPU3はマスター番号レジスタMID3を装備している。
メモリ制御回路DCMCは、コンフィグレーション回路CONFIG、リクエストキューREQQ1、ヒット判定回路IDHT、リクエストキューREQQ2、コマンド生成回路COMGEN、リクエスト出力回路RQOUT、リフレッシュ要求回路REF、キュー管理回路QMGT、レイテンシ調整回路LCHCK、レスポンス入力回路RSIN、レスポンスキューRESQ1を含む。また、コンフィグレーション回路CONFIGは、図示していないがキューレジスタQREG、レイテンシレジスタLTREG、レイテンシドメインレジスタLTDREG、メモリ装置M0に関するタイミングレジスタM0TREG、メモリ装置M1に関するタイミングレジスタM1TREG、メモリ装置M2に関するタイミングレジスタM2TREG、動作モードレジスタOMDREG、コネクションレジスタCNNREGを含んでいる。
情報処理回路CPU0、CPU1、CPU2、CPU3は、調停回路CARMおよびメモリ制御回路DCMCを通じて、メモリモジュールMEMより、OSやアプリケーションプログラムおよびOSやアプリケーションプログラムにて処理を行うデータを読み出し、実行する。
リクエストキューREQQ1およびリクエストキューREQQ2は、情報処理回路CPU0〜3から発行されたリードリクエストやライトリクエストなどが格納され、レスポンスキューRESQ1には、メモリモジュールMEMから読み出されたOS、アプリケーションプログラムおよびデータなどが格納される。
ヒット判定回路IDHTは、情報処理回路CPU0〜3からのリードリクエストおよびライトリクエストに対するデータが、各メモリ装置M0〜2のレスポンスキューやメモリバンク毎の活性化しているページに存在するかを判定する(以下、「ヒット判定」と呼ぶ。)。そのためにヒット判定回路IDHTは、情報処理回路CPU0〜3からのリクエストに対応するアドレスに対して、メモリモジュールMEMを構成する各メモリ装置のバンクアドレスBAddとページアドレスPAddとカラムアドレスCAddの対応付けを行っている。また、ヒット判定回路IDHTは、各メモリ装置が装備しているレスポンスキューの中でデータを保存しているレスポンスキューに対してバンクアドレスとページアドレスとカラムアドレスを保存している。さらに、ヒット判定回路IDHTは、各メモリ装置が装備しているメモリバンクの中で、メモリバンク毎の活性化しているページに対して、そのバンクアドレスとページアドレスを保持している。
メモリモジュールMEMは、メモリ装置M0、M1、M2から構成される。また、情報処理装置CPU_CHIPとメモリ装置M0、M1、M2は直列に接続されている。メモリ装置M0は、揮発性メモリであり、1個の半導体基板上に形成されるメモリ装置であっても、複数のメモリチップが集積されたメモリ装置であっても良い。また、メモリ装置M1およびM2は不揮発性メモリであり、1個の半導体基板上に形成されるメモリ装置であっても、複数のメモリチップが集積されたメモリ装置であっても良い。ここで、代表的な揮発性メモリには、メモリアレイにダイナミックランダムアクセスメモリセルを用いたダイナミックランダムアクセスメモリDRAM及び疑似スタティックランダムアクセスメモリPSRAM、スタティックランダムアクセスメモリセルを用いたスタティックランダムアクセスメモリSRAM等があり、本発明には全ての揮発性メモリセルを利用することができる。本実施の形態ではメモリアレイにダイナミックランダムアクセスメモリセルを用いた例を説明する。不揮発性メモリにはROM(リードオンリーメモリ)、EEPROM(エレクトリカリイレーサブルアンドプログラマブルROM)、フラッシュメモリ、相変化メモリPCM、マグネティック・ランダム・アクセスメモリMRAM、抵抗スイッチング型ランダムアクセスメモリReRAM等を用いることができる。本実施の形態ではフラッシュメモリを例に説明する。また、代表的なフラッシュメモリには、NOR型フラッシュメモリと、AND型フラッシュメモリと、NAND型フラッシュメモリと、ORNAND型フラッシュメモリがあり、本発明には全てのフラッシュメモリを利用することができる。
また、代表的なフラッシュメモリには、メモリセルに1ビットの情報を記憶できる2値メモリセルSLCを用いたフラッシュメモリと、メモリセルに2ビット以上の情報を記憶できる多値メモリセルMLCを用いたフラッシュメモリとがあり、本発明にはこれら全てのフラッシュメモリを利用することができる。
本実施の形態では、2値メモリセルSLCを利用したNOR型フラッシュメモリと2値メモリセルSLCを利用したNAND型フラッシュメモリを例に説明する。メモリ装置M0へ用いられる典型的な揮発性メモリは、ダイナミックメモリセルを利用したダイナミックランダムアクセスメモリであり、約1Gbitの記憶容量を持っている。特に限定しないがメモリ装置M0は情報処理装置CPU_CHIPにてアプリケーションプログラムを実行するための一時的なワークメモリとして利用される。メモリ装置M1へ用いられる典型的なフラッシュメモリは、NOR型フラッシュメモリセルを利用し、約1Gbitの大きな記憶容量を持っている。特に限定しないが、メモリ装置M1には情報処理装置CPU_CHIPにて実行するOS、ブートプログラム、ブートデバイスID値、メモリモジュールMEMのコンフィグレーション情報およびアプリケーションプログラムなどが格納される。メモリ装置M2へ用いられる典型的なフラッシュメモリはNAND型フラッシュメモリセルを利用し、約16Gbitの記憶容量を持っている。特に限定しないが、メモリ装置M2には主に情報処理装置CPU_CHIPにて再生、録音および録画処理を行うために必要な音声データ、静止画像データや動画像データなどが格納される。
メモリ装置M0、M1及びM2には、それぞれ初期設定回路INITがあり、電源投入直後に、それぞれの初期設定回路INITがメモリ装置に対し初期設定を行う。メモリ装置M0、M1及びM2のリクエストキュー制御回路RqCTには、それぞれのメモリ装置の識別番号IDを格納するIDレジスタIDRが設けられている。電源投入直後に先ず、初期設定回路INITによって初期設定され、次に、情報処理装置CPU_CHIPによってメモリ装置M0、M1、M2の識別番号IDが決定され、それぞれのメモリ装置内のIDレジスタIDRへ識別番号IDが格納される。
メモリ装置M0、M1及びM2は、それぞれブートデバイス認識信号Bsigを持っており、このブートデバイス認識信号Bsigが接地(gnd)されている場合は、そのメモリ装置が電源投入直後の動作を行うためのブートプログラムを格納しているブートデバイスであることを示す。ブートデバイス認識信号Bsigが電源(vdd)に接続されている場合は、そのメモリ装置がブートデバイスではないことを示す。本実施の形態では、メモリ装置M1がブートデバイスであり、メモリ装置M0およびM2はブートデバイスに設定されていないものとする。また、ブートデバイス認識信号Bsigによって、どのメモリ装置をブートデバイスにするかをプログラムすることができる。
メモリ装置M0、M1及びM2を直列に接続し、動作させるクロック方式として、コモンクロック方式、ソースシンクロナスクロック方式、エンベデッドクロック方式などがあり、本発明には全てのクロック方式を利用することができる。本実施の形態では、ソースシンクロナスクロック方式による動作を一例として説明する。
RqCk0、RqCK1およびRqCk2は、リクエストクロックであり、RsCk0、RsCK1およびRsCk2はレスポンスクロックである。RqMux0、RqMux1およびRqMux2は、リクエスト信号であり、RsMux0、RsMux1およびRsMux2はレスポンス信号である。これらリクエスト信号を通じて送信されるリクエストは、特に限定しないが4バイトの共通リクエスト部CMNREQFと、最大36バイトの可変リクエスト部VBREQから構成され、多重化されて、それぞれのリクエストクロックRqCk0、RqCk1およびRqCk2に同期して送信される。
共通リクエスト部CMNREQFはリクエスト開始フラグReqStFlg、識別番号ID、命令、マスター番号MID、可変部リクエスト長VREQL、リクエスト番号ReqNから構成され、可変リクエスト部VBREQFは、4バイトのアドレスおよび最大32バイトのライトデータから構成される。可変部リクエスト長VREQLは可変リクエスト部VBREQFの長さをバイト単位で表している。
RsMux0、RsMux1およびRsMux2のレスポンス信号を通じて送信されるレスポンスは、特に限定しないが4バイトの共通レスポンス部CMNRESFと最大32バイトのリードデータから構成され、多重化されて、それぞれのレスポンスクロックRsCk0、RsCk1、RsCk2に同期して送信される。
共通レスポンス部CMNRESFはレスポンス開始フラグResStFlag、識別番号ID、命令、マスター番号MID、リードデータ長RDL、レスポンス番号ResNから構成される。リードデータ長RDLはリードデータの長さをバイト単位で表している。
マスター番号は、情報処理回路CPU0、1、2、3の中で、どの情報処理回路からのリクエストであるかを示し、それぞれのマスター番号レジスタMID0、MID1、MID2へ設定されている値と対応している。また、リクエスト開始フラグがHighの時、そのリクエストの開始を示す。識別番号ID値はメモリ装置M0、M1およびM2を識別する識別番号である。リクエスト番号は、リクエスト自身の識別番号である。リクエスト長は、多重化されたリクエストの長さを示す。また、レスポンス開始フラグがHighの時、そのレスポンスの開始を示す。識別番号ID値はメモリ装置M0、M1およびM2を識別する識別番号である。レスポンス番号は、レスポンス自身の識別番号である。レスポンス長は、多重化されたレスポンスの長さを示す。
<メモリ装置M0の説明>
図3は、メモリ装置M0の構成図の一例である。メモリ装置M0は、リクエストインターフェース回路ReqIFと、レスポンスインターフェース回路ResIFと、初期化回路INIT、メモリ回路Mem0から構成されている。リクエストインターフェース回路ReqIFはリクエストクロック制御回路RqCkCおよび、リクエストキュー制御回路RqCTから構成される。リクエストクロック制御回路RqCkCはクロックドライバDrv1およびクロック分周回路Div1から構成される。
リクエストキュー制御回路RqCTは、リクエストキュー回路RqQI、リクエストキュー回路RqQXI、リクエストキュー回路RqQXO、IDレジスタ回路IDR、ID比較回路CPQ、レスポンス優先順位設定レジスタ回路RRG、リクエストキューチェック回路RQQM、ID有効ビットIDV、ブートデバイスフラグレジスタBRおよび終端デバイスフラグレジスタERから構成される。
特に限定しないが、リクエストキュー回路RqQIは8つのリクエストキューから構成され、リクエストキュー回路RqQXIは4つのリクエストキューから構成され、リクエストキュー回路RqQXOは4つのリクエストキューから構成される。
レスポンスインターフェース回路ResIFは、レスポンスクロック制御回路RsCkCおよび、レスポンスキュー制御回路RsCTから構成される。レスポンスクロック制御回路RsCkCはクロックドライバDrv2およびクロック分周回路Div2から構成される。レスポンスキュー制御回路RsCTは、レスポンスキュー回路RsQo、レスポンスキュー回路RsQp、レスポンスキューチェック回路RSQM、レスポンススケジュール回路SCH、レイテンシコードレジスタLC、デバイスコードレジスタDCから構成される。特に限定しないが、レスポンスキュー回路RsQoは4つのレスポンスキューから構成され、レスポンスキュー回路RsQpは8つのレスポンスキューから構成される。
メモリ回路Mem0は、揮発性メモリであり、ダイナミックランダムアクセスメモリセルを利用したダイナミックランダムアクセスメモリである。初期化回路INITは、メモリ装置M0への電源供給開始時にメモリ装置M0の初期化を行う。リクエストクロック制御回路RqCkCは、クロック信号RqCk0から入力したクロックを、内部クロックck1を通じて、リクエストキュー制御回路RqCT及びレスポンスクロック制御回路RsCkCへ伝える。また、リクエストクロック制御回路RqCkCは、リクエストクロック信号RqCk0から入力されたクロックをクロックドライバDrv1及びクロック分周回路Div1を介して、クロック信号RqCk1を通じて出力する。また、リクエストクロック制御回路RqCkCはリクエスト信号RqMux0を通じて入力した命令に従い、クロック信号ck2およびリクエストクロックRqCk1のクロック周波数を低下させたり、クロックを停止させたり、クロックを再動作させることができる。
レスポンスクロック制御回路RsCkCは、内部クロック信号ck1から入力したクロックを、内部クロック信号ck3を通じて、レスポンスキュー制御回路RsCTへ出力する。また、レスポンスクロック制御回路RsCkCは内部クロック信号ck1から入力したクロックを、クロック分周回路Div2を介してクロック信号RsCk0から出力する。また、レスポンスクロック制御回路RsCkCは、クロック信号RsCK1から入力したクロックを、クロックドライバDiv2を介して、クロック信号ck4よりレスポンスキュー制御回路RsCTへ出力する。さらに、レスポンスクロック制御回路RsCkCはリクエスト信号RqMux0を通じて入力した命令に従い、レスポンスクロックRsCk0のクロック周波数を低下させたり、また、クロックを停止させたり、さらに、クロックを再動作させることができる。
リクエストキュー回路RqQIは、リクエスト信号RqMux0を通じて、ID値、リクエスト番号ReqN、命令、アドレス及び書き込みデータなどが多重化されメモリ装置M0へ入力したリクエストを格納し、リクエスト番号ReqNと同じ番号のレスポンス番号ResNを生成し、レスポンスキュー制御回路RsCTへ送信する。
IDレジスタ回路IDRには、メモリ装置M0の識別番号ID値が格納されており、ID比較回路CPQは、リクエストキュー回路RqQIに格納されているID値と、IDレジスタ回路IDRに格納されている識別番号ID値を比較する。リクエストキュー回路RqQXI及びリクエストキュー回路RqQXOは、リクエストキュー回路RqQIから転送されたリクエストを格納する。
レスポンスキュー回路RsQoは、メモリ装置M0のメモリ回路Mem0から読み出されたデータ及びIDレジスタ回路IDRから読み出されたID値、レスポンス番号ResNを格納する。レスポンスキュー回路RsQpは、レスポンス信号RsMux1を通じて、入力されるID値、レスポンス番号ResN、読み出しデータおよびエラー情報およびステータス情報を格納する。
レスポンススケジュール回路SCHは、レスポンスキュー回路RsQoへ格納されているレスポンスと、レスポンスキュー回路RsQpへ格納されているレスポンスとのレスポンス優先順位を決め、優先順位の高いレスポンスを、レスポンス信号RsMux0から出力するための調停を行う。特に限定しないが、レスポンス優先順位を決める制御方式は順位固定方式や順位変更方式があり、レスポンス優先順位設定レジスタ回路RRGへは設定された方式によってレスポンススケジュール回路SCHはレスポンスの優先順位を決める。順位固定方式では、各メモリ装置が装備しているレスポンスキュー回路RsQp内のレスポンスをレスポンスキュー回路RsQo内のレスポンスより優先させる設定や、レスポンスキュー回路RsQo内のレスポンスをレスポンスキュー回路RsQp内のレスポンスをより優先させる設定などが可能である。また、順位変更方式では、各メモリ装置が装備しているレスポンスキュー回路RsQp内のレスポンスとレスポンスキュー回路RsQo内のレスポンスの優先順位をラウンドロビン方式で変更することが可能である。
<メモリ回路Mem0>
図4は、メモリ装置M0が装備するメモリ回路Mem0の回路ブロック図の一例である。メモリ回路Mem0は、コマンドデコーダCmd Dec、制御回路Cont Logic、リフレッシュカウンタRefC、温度計Thmo、ライトデータバッファWData Lat、リードデータバッファRData Lat、データ制御回路Data Cont、およびメモリバンクBANK0〜BANK7から構成されている。また、各メモリバンクBANK0〜BANK7はロウアドレスバッファRadLat、カラムアドレスバッファCadLat、ロウデコーダRowDec、カラムデコーダColDec、センスアンプSenseAmp、メモリ回路MBank0〜MBank7から構成されている。これらの構成は、よく知られているダイナミックランダムアクセスメモリの構成と同じであるため、ここでの詳しい説明は省略する。
<メモリ装置M1の説明>
図5は、メモリ装置M1の構成図の一例である。図3に示されるメモリ装置M0との相違点は、メモリ回路Mem1が、不揮発性メモリであり、NOR型フラッシュメモリセルを利用したNOR型フラッシュメモリである点である。そのため、メモリ回路Mem1には、ブートデバイスID値BotIDが格納される。メモリ回路Mem1および初期化回路INIT1以外の、メモリ装置M1を構成する回路と、その動作は、図3のメモリ装置M0と同等である。
<メモリ回路Mem1>
図6は、メモリ装置M1が装備するメモリ回路Mem1の回路ブロック図の一例である。メモリ回路Mem1は、コマンドデコーダCmd Dec、制御回路Cont Logic、ライトデータバッファWData Lat、リードデータバッファRData Lat、データ制御回路Data Cont、およびメモリバンクNV1BANK0〜NV1BANK7から構成されている。また、各メモリバンクNV1BANK0〜NV1BANKK7はページアドレスバッファPadLat、カラムアドレスバッファCadLat、ページデコーダPage Dec、カラムデコーダColDec、データバッファDataLat、メモリアレイ回路NV1Bk0〜NV1Bk7から構成されている。
メモリ回路Mem1の読み出し動作の一例を説明する。メモリ装置M1のリクエストキューRqQXIへ、バンクアクティブ命令AC、バンクアドレス7およびページアドレス5が含まれているリクエストReqACID2SEQ15が格納されるとバンクアクティブ命令ACがコマンド信号Commandから、バンクアドレス7およびページアドレス5が、アドレス信号Addressよりメモリ回路Mem1へ送信される。コマンドデコーダCmdDecはバンクアクティブ命令BAを解読し、制御回路Cont LogicによってメモリバンクNV1BANK7が選択され、メモリバンクNV1BANK7のページアドレスバッファPadLatへページアドレス5が格納され、ページデコーダPage Decへ入力される。その後メモリアレイ回路NV1Bk7内のページアドレス5に接続されているメモリセルが活性化され、特に限定しないが1kByte分のデータがデータバッファData Latへ転送される。
つぎに、メモリ装置M1のリクエストキューRqQXIへ8バイトデータリード命令RD8、バンクアドレス7およびカラムアドレス64が格納されると、8バイトデータリード命令RD8がコマンド信号Commandから、バンクアドレス7およびカラムアドレス63が、アドレス信号Addressよりメモリ回路Mem1へ送信される。コマンドデコーダCmd Decは8バイトデータリード命令RD8を解読し、制御回路Cont LogicによってメモリバンクNV1BANK7が選択され、メモリバンクNV1BANK7のカラムアドレスバッファCadLatへカラムアドレス63を格納され、カラムデコーダCol Decへ入力される。
その後、カラムアドレス64を開始アドレスとして、8バイト分のデータが、データバッファDataLatから読み出され、データ制御回路Data Contを介してリードデータバッファRData Latへ転送され格納される。その後読み出された8バイト分のデータはレスポンスキュー回路RsQoへ転送される。
次に、メモリ回路Mem1の書き込み動作の一例を説明する。メモリ装置M1のリクエストキューRqQXIへ8バイトデータライト命令WT8、バンクアドレス7、カラムアドレス128が格納されており、8バイトデータライト命令RD8がコマンド信号Commandから、バンクアドレス7およびカラムアドレス127が、アドレス信号Addressより、8バイトデータがライトデータ信号WDataよりメモリ回路Mem1へ送信される。
コマンドデコーダCmdDecは8バイトデータライト命令WT8を解読し、制御回路Cont LogicによってメモリバンクNV1BANK7が選択され、メモリバンクNV1BANK7のカラムアドレスバッファCadLatへカラムアドレス128が格納され、カラムデコーダCol Decへ入力される。また、制御回路Cont Logicによって8バイト分のライトデータはライトデータバッファWData Latへ格納される。
その後カラムアドレス128を開始アドレスとして、8バイト分のデータが、ライトデータバッファWData Latから、データ制御回路Data Contを介して、メモリバンクNV1BANK7内のデータバッファDataLatへ転送され、メモリアレイ回路NV1Bk7へ書き込まれる。
各メモリバンクNV1BANK0〜NV1BANK7は独立に動作するため、異なるバンク間では、読み出し動作と書き込み動作を同時に実行でき、高速化を図ることができる。
<メモリ装置M2の説明>
図7は、メモリ装置M2の構成図の一例である。図3、5に示されるメモリ装置M0、M1との相違点は、メモリ回路Mem2が、不揮発性メモリであり、NAND型フラッシュメモリセルを利用したNAND型フラッシュメモリである点である。メモリ回路Mem2および初期化回路INIT2、以外のメモリ装置M2を構成する回路と、その動作は、図3のメモリ装置M0および図5のメモリ装置M1と同等である。即ち、初期化回路INIT、INT1、INIT2とメモリ回路Mem0、Mem1、Mem2以外の回路は、メモリ装置M0〜2で共通の回路を用いることができる。
<メモリ回路Mem2>
図8は、メモリ装置M2が装備するメモリ回路Mem2の回路ブロック図の一例である。メモリ回路Mem2は、コマンドデコーダCmd Dec、制御回路Cont Logic、ライトデータバッファWData Lat、リードデータバッファRData Lat、データ制御回路Data Cont、およびメモリバンクNV1BANK0〜NV1BANK7から構成されている。また、各メモリバンクNV2BANK0〜NV2BANK7はページアドレスバッファPadLat、カラムアドレスバッファCadLat、ページデコーダPageDec、カラムデコーダCol Dec、データバッファDataLat、メモリアレイ回路NV2Bk0〜NV2Bk7から構成されている。
メモリ回路Mem2の読み出し動作の一例を説明する。メモリ装置M2のリクエストキューRqQXIへ、バンクアクティブ命令AC、バンクアドレス7およびページアドレス5が含まれているリクエストReqACID3SEQ15が格納されるとバンクアクティブ命令ACがコマンド信号Commandから、バンクアドレス7およびページアドレス5が、アドレス信号Addressよりメモリ回路Mem2へ送信される。コマンドデコーダCmdDecはバンクアクティブ命令BAを解読し、制御回路Cont LogicによってメモリバンクNV1BANK7が選択され、メモリバンクNV1BANK7のページアドレスバッファPadLatへページアドレス5が格納され、ページデコーダPage Decへ入力される。その後メモリアレイ回路NV1BANK7内のページアドレス5に接続されているメモリセルが活性化され、特に限定しないが1kByte分のデータがデータバッファDataLatへ転送される。
つぎに、メモリ装置M2のリクエストキューRqQXIへ8バイトデータリード命令RD8、バンクアドレス7およびカラムアドレス64が格納されると、8バイトデータリード命令RD8がコマンド信号Commandから、バンクアドレス7およびカラムアドレス63が、アドレス信号Addressよりメモリ回路Mem2へ送信される。コマンドデコーダCmd Decは8バイトデータリード命令RD8を解読し、制御回路Cont LogicによってメモリバンクNV1BK7が選択され、メモリバンクNV1BK7のカラムアドレスバッファCadLatへカラムアドレス63を格納され、カラムデコーダCol Decへ入力される。
その後、カラムアドレス64を開始アドレスとして、8バイト分のデータが、データバッファDataLatから読み出され、データ制御回路DataContを介してリードデータバッファRData Latへ転送され格納される。その後読み出された8バイト分のデータはレスポンスキュー回路RsQoへ転送される。
次に、メモリ回路Mem2の書き込み動作の一例を説明する。メモリ装置M2のリクエストキューRqQXIへ8バイトデータライト命令WT8、バンクアドレス7、カラムアドレス128が格納されており、8バイトデータライト命令RD8がコマンド信号Commandから、バンクアドレス7およびカラムアドレス127が、アドレス信号Addressより、8バイトデータがライトデータ信号WDataよりメモリ回路Mem2へ送信される。コマンドデコーダCmd Decは8バイトデータライト命令WT8を解読し、制御回路Cont LogicによってメモリバンクNV1BANK7が選択され、メモリバンクNV1BANK7のカラムアドレスバッファCadLatへカラムアドレス128が格納され、カラムデコーダCol Decへ入力される。また、制御回路Cont Logicによって8バイト分のライトデータはライトデータバッファWData Latへ格納される。
その後カラムアドレス128を開始アドレスとして、8バイト分のデータが、ライトデータバッファWData Latから、データ制御回路Data Contを介して、メモリバンクNV2BANK7内のデータバッファDataLatへ転送され、メモリアレイ回路NV2Bk7へ書き込まれる。各メモリバンクNV2BANK0〜NV2BANK7は独立に動作するため、異なるバンク間では、読み出し動作と書き込み動作を同時に実行でき、高速化を図ることができる。
以下に本情報処理システムの動作を説明する。先ず、電源投入時および電源投入直後の動作について説明する。
<電源投入時の初期シーケンス>
先ず、図1から図9を用いて電源投入時の本情報処理システムの動作の一例について説明する。図9は、本情報処理システムの電源投入時の初期シーケンスを示す一例である。T1の期間(PwON)で情報処理装置CPU_CHIPと、メモリモジュールMEM内のメモリ装置M0、M1及びM2へ電源投入を行い、T2の期間(Reset)でリセットを行う。リセットの方法は特に限定しないが、それぞれの内蔵回路で自動的にリセットを行う方法でも、あるいは、外部にリセット端子を持ち、このリセット信号によってリセット動作を行う方法でも、情報処理装置CPU_CHIPからリクエスト信号RqMux0、RqMux1およびRqMux2を介して、リセット命令をメモリM0、M1およびM2へ入力し、リセットを行う方法としても良い。
T2のリセット期間(Reset)では、情報処理装置CPU_CHIP、メモリ装置M0、M1及びM2の内部状態を初期設定する。以下に一例を示す。情報処理装置CPU_CHIPは、コンフィグレーション回路CONFIG内の全てのレジスタを初期化する。また、情報処理回路CPU0が持つマスター番号レジスタMID0へ0を設定し、情報処理回路CPU1が持つマスター番号レジスタMID1へ1を設定し、情報処理回路CPU2が持つマスター番号レジスタMID2へ2を設定し、情報処理回路CPU3が持つマスター番号レジスタMID3へ3を設定する。
また、情報処理装置CPU_CHIPは、自らが管理するメモリマップを初期設定する。特に限定しないが、ブートプログラム領域、コンフィグレーション領域、プログラム領域、コピー領域、ワーク領域、データ領域、IOデバイス領域などが設定の対象となり、ブートプログラム領域およびプログラム領域はメモリ装置M1へ、コピー領域およびワーク領域はメモリ装置M0へ、データ領域はメモリ装置M2へ、コンフィグレーション領域はコンフィグレーション回路CONFIGへ割り当てられる。
メモリ装置M0は、自身の初期設定回路INITが、自身のリクエストキュー制御回路RqCT、レスポンスキュー制御回路RqCT、リクエスト制御回路RqCkc、レスポンスクロック制御回路RsCkC、クロック分周回路Div1、Div2およびメモリ回路Mem0を初期設定する。メモリ装置M0は、ブートデバイス認識信号Bsigが電源vddに接続されているので、自分自身はブートデバイスではないことを認識し、ブートデバイスフラグレジスタBRへ0を設定する。次にIDレジスタIDRが持つID値は0へ、ID有効ビットIDVはLowへ初期設定される。レスポンスキュー制御回路RqCTが持つレスポンス調停回路のレスポンス優先順位に関して、メモリ装置M0のレスポンス優先順位は1へ、メモリ装置M1のレスポンス優先順位は2へ、メモリ装置M2のレスポンス優先順位は3へ初期設定される。クロック分周回路Div1およびDiv2の分周比は1へ初期設定される。さらに、メモリ装置M1は、RqEn1、RsMux1、RqCk1が開放(open)されていないことによって、直列接続しているメモリ装置の中で最終端のメモリ装置ではないことを認識し、終端デバイスフラグレジスタERへ0を設定する。最後に、メモリ装置M0は、自身のデバイスコードレジスタDCを16進数で0001へ初期設定する。
メモリ装置M1は、自身の初期設定回路INITが、自身のリクエストキュー制御回路RqCT、レスポンスキュー制御回路RqCT、リクエスト制御回路RqCkc、レスポンスクロック制御回路RsCkC、クロック分周回路Div1、Div2およびメモリ回路Mem1を初期設定する。メモリ装置M1は、ブートデバイス認識信号Bsigが電源へ接続されているので、自分自身はブートデバイスであると認識し、ブートデバイスフラグレジスタBRへ1を設定する。さらに自らのメモリ回路Mem1が保持しているブートデバイスID値2をIDレジスタIDRへ設定し、ID有効ビットIDVをHighへ設定する。次にメモリ装置M1のレスポンスキュー制御回路RqCTが持つレスポンス調停回路のレスポンス優先順位に関して、メモリ装置M1のレスポンス優先順位は1へ、メモリ装置M2のレスポンス優先順位は2へ初期設定される。クロック分周回路Div1およびDiv2の分周比は1に設定される。
さらに、メモリ装置M2は、RqEn2、RsMux2、RqCk2が開放(open)されていないことによって、直列接続しているメモリ装置の中で最終端のメモリ装置ではないことを認識し、終端デバイスフラグレジスタERへ0を設定する。最後に、メモリ装置M1は、自身のデバイスコードレジスタDCを16進数で0010へ初期設定する。
メモリ装置M2は、自身の初期設定回路INITが、自身のリクエストキュー制御回路RqCT、レスポンスキュー制御回路RqCT、リクエスト制御回路RqCkc、レスポンスクロック制御回路RsCkC、クロック分周回路Div1、Div2およびメモリ回路Mem2を初期設定する。メモリ装置M2は、ブートデバイス認識信号Bsigが電源に接続されているので、自分自身はブートデバイスではないことを認識し、ブートデバイスフラグレジスタBRへ0を設定する。次にIDレジスタIDRが持つID値は0へ、ID有効ビットIDVはLowへ初期設定される。メモリ装置M2のレスポンスキュー制御回路RqCTが持つレスポンス調停回路のレスポンス優先順位に関してメモリ装置M2のレスポンス優先順位は1へ初期設定される。クロック分周回路Div1およびDiv2の分周比は1に設定される。さらに、メモリ装置M2は、RqEn3、RsMux3、RqCk3を開放(open)していることによって、直列接続しているメモリ装置の最も終端のメモリ装置であることを認識し、終端デバイスフラグレジスタERへ1を設定する。最後に、メモリ装置M2は、自身のデバイスコードレジスタM2CREGを16進数で0100へ初期設定する。
T2のリセット期間(Reset)が終了した後のT3の期間(ClkStable)では、情報処理装置CPU_CHIP、メモリ装置M0,M1およびM2の信号の接続確認を行う。まず、情報処理装置CPU_CHIPからリクエストクロックRqCk0がメモリ装置M0へ入力され、メモリ装置M0のクロックドライバDrv1を通じてクロック分周回路Div1およびクロック信号ck1としてクロック分周回路Div2へ出力される。クロック分周回路Div1へ入力したクロックはクロック信号ck2から出力され、リクエストクロックRqCk1を通じてメモリ装置M1へ出力する。また、メモリ装置M0のクロック分周回路Div2へ入力したクロックはクロック信号ck3から出力され、また、レスポンスクロックRsCk0を通じて情報処理装置CPU_CHIPへ出力する。
メモリ装置M1は、メモリ装置M0からリクエストクロックRqCk1が入力され、メモリ装置M1のクロックドライバDrv1を通じてクロック分周回路Div1およびクロック信号ck1としてクロック分周回路Div2へ出力される。クロック分周回路Div1へ入力したクロックはクロック信号ck2から出力され、リクエストクロックRqCk2を通じてメモリ装置M2へ出力する。また、メモリ装置M1のクロック分周回路Div2へ入力したクロックはクロック信号ck3から出力され、また、レスポンスクロックRsCk1を通じてメモリ装置M0へ出力する。レスポンスクロックRsCk1を通じてメモリ装置M0のクロックドライバDrv2へ入力されたクロックはクロック信号ck4へ出力される。
メモリ装置M2は、メモリ装置M1からリクエストクロックRqCk2が入力され、メモリ装置M2のクロックドライバDrv1を通じてクロック分周回路Div1およびクロック信号ck1としてクロック分周回路Div2へ出力される。クロック分周回路Div1へ入力したクロックはクロック信号ck2から出力され、リクエストクロックRqCk3を通じてメモリ装置M2へ出力する。また、メモリ装置M2のクロック分周回路Div2へ入力したクロックはクロック信号ck3から出力され、また、レスポンスクロックRsCk2を通じてメモリ装置M1へ出力する。レスポンスクロックRsCk2を通じてメモリ装置M1のクロックドライバDrv2へ入力されたクロックはクロック信号ck4へ出力される。
T3の期間が終了した後のT4の期間(BootRd)では情報処理装置CPU_CHIPはメモリ装置M1へ格納されているブートプログラムを読み出す。ブートプログラムには、各メモリ装置のデバイスコードと、情報処理装置CPU_CHIPを立ち上げるためのプログラムBTP0と、各メモリ装置へ識別番号IDを割り当てるためのプログラムと、コンフィグレーション回路内の様々なレジスタへ値を設定するためのプログラムと、これらレジスタへ設定する値とが含まれる。
以下にブートプログラムを読み出す動作の一例を示す。先ず、情報処理装置CPU_CHIPはブートプログラムを保持しているメモリ装置の識別番号ID値を読み出し、確認を行う。情報処理装置CPU_CHIP内の情報処理回路CPU0は、ブートプログラムを保持しているメモリ装置の識別番号ID値を確認するため、識別番号ID値0、リクエスト番号ReqN値0、マスター番号MID値0、リクエスト長、ブートデバイス識別番号読み出し命令BRDを多重化したリクエストRqBRDID0SEQ0をクロック信号RqCK0に同期させ、メモリ装置M0へ転送する。
メモリ装置M0は、情報処理装置CPU_CHIPからのリクエストRqBRDID0SEQ0を、自身のリクエストキュー制御回路RqCTへ格納する。リクエストRqBRDID0SEQ0に含まれているブートデバイス識別番号読み出し命令BRDによってメモリ装置M0は、自身のブートデバイスフラグレジスタBRの値をチェックする。ブートデバイスフラグレジスタBRの値が0であるため、メモリ装置M0はブートデバイスではない。そこで、メモリ装置M0はリクエストRqBRDID0SEQ0をリクエスト信号RqMux1を通じてメモリ装置M1へ転送する。
メモリ装置M1は、メモリ装置M0からのリクエストRqBRDID0SEQ0を、自身のリクエストキュー制御回路RqCTへ格納する。リクエストRqBRDID0SEQ0に含まれているブートデバイス識別番号読み出し命令BRDによってメモリ装置M1は、自身のブートデバイスフラグレジスタBRの値をチェックする。ブートデバイスフラグレジスタBRの値が1であるため、メモリ装置M1はブートデバイスである。そこで、メモリ装置M1は自身のIDレジスタIDR値2を読み出し、レスポンス開始フラグと、識別番号ID値2(IDレジスタ値2と等しい値)と、ブートデバイス識別番号読み出し命令BRD、マスター番号MID値0と、リクエスト長、レスポンス番号ResN値0(リクエスト番号ReqN値0と等しい値)から構成されるレスポンスRsBRDID2SEQ0をレスポンスキュー制御回路RsCTへ送信する。
次に、メモリ装置M1のレスポンスキュー制御回路RsCTは、レスポンス信号RsMux1を通じて、レスポンスRsBRDID2SEQ0をメモリ装置M0へ出力する。メモリ装置M0は、レスポンスRsBRDID2SEQ0を受け取り情報処理装置CPU_CHIPへ出力する。情報処理装置CPU_CHIPはレスポンスRsBRDID2SEQ0を受け取り、このレスポンスRsBRDID2SEQ0へ含まれる識別番号ID値2と、ブートデバイス識別番号読み出し命令BRDによって、ブートプログラムを保持しているメモリ装置の識別番号ID値が2であることを確認する。
つぎに、情報処理装置CPU_CHIP内の情報処理回路CPU0は、識別番号ID値2のメモリ装置からブートプログラムを読み出す。先ず、リクエスト信号RqMux0を通じて、リクエスト開始フラグ、識別番号ID値2、リクエスト番号ReqN値1、マスター番号MID値0、リクエスト長、バンクアクティブ命令BA、バンクアドレスBK0、ページアドレスPage0を多重化したリクエストRqACID2SEQ1をクロック信号RqCK0に同期させ、メモリ装置M0へ転送する。
続いて、リクエスト信号RqMux0を通じて、リクエスト開始フラグ、ID値2、リクエスト番号ReqN値2、マスター番号MID値0、リクエスト長、32バイト読み出し命令RD32、バンクアドレスBK0、カラムアドレスColを多重化したリクエストRqRD32ID2SEQ2をクロック信号RqCK0に同期させ、メモリ装置M0へ転送する。
メモリ装置M0は、情報処理装置CPU_CHIPからのリクエストRqACID2SEQ1とRqRD32ID2SEQ2を順に、自身のリクエストキュー制御回路RqCTへ格納する。メモリ装置M0は、自身のID有効ビットがLowであるため、メモリ装置M0はリクエストRqACID2SEQ1およびRqRD32ID2SEQ2を自身へのリクエストではないと判断し、リクエスト信号RqMux1を通じて、順にメモリ装置M1へ転送する。
メモリ装置M1は、メモリ装置M0からのリクエストRqACID2SEQ1およびRqRD32ID2SEQ2を自身のリクエストキュー制御回路RqCTへ格納する。メモリ装置M1のリクエストキュー制御回路RqCTはリクエストRqACID2SEQ1に含まれるID値2と自身のIDレジスタの値2を比較する。双方は一致しているため、リクエストキュー制御回路RqCTはリクエストReqBA1をメモリ回路Mem1へ送信する。メモリ回路Mem1は、リクエストRqACID2SEQ1にバンクアクティブ命令BA、バンクアドレスBK0、ページアドレスPage0によって、指定された1ページ分(特に限定しないが1kバイト分)のブートプログラムがデータバッファDataLatへ転送される。
メモリ装置M1のリクエストキュー制御回路RqCTは、リクエストRqRD32ID2SEQ2に含まれるID値2と自身のIDレジスタの値2を比較する。双方は一致しているため、リクエストキュー制御回路RqCTは、リクエストRqRD32ID2SEQ2をメモリ回路Mem1へ送信する。メモリ装置M1のメモリ回路Mem1からリクエストRqRD32ID2SEQ2に含まれる読み出し命令RD32、バンクアドレスBK0、カラムアドレスColによって、データバッファDataLat内のブートプログラムが読み出され、この読み出されたブートプログラムと、レスポンス開始フラグ、識別番号ID値2、読み出し命令RD32、マスター番号MID0、リクエスト長およびレスポンス番号ResN値2から構成されるレスポンスRsRDID2SEQ2としてレスポンスキュー制御回路RsCTへ転送される。メモリ装置M1のレスポンスキュー制御回路RsCTは、レスポンス信号RsMux0を通じて、レスポンスRsRD32ID2SEQ2をメモリ装置M0へ出力する。メモリ装置M0は、レスポンスRsRD32ID2SEQ2を受け取り情報処理装置CPU_CHIPへ出力する。
情報処理装置CPU_CHIPは、レスポンスRsRD32ID2SEQ2をレスポンスキューRsQへ格納する。レスポンスRsRD32ID2SEQ2に含まれるID値2および読み出し命令RD32により、ブートプログラムが、メモリ装置M1から送信されたことを知ることができる。
T4の期間が終了した後のT5の期間(InitID)では、情報処理装置CPU_CHIPは、ブートプログラムによって自らを立ち上げ、次に各メモリ装置M0、M1、M2へID番号の割り当てを行い、次にメモリモジュールMEMに対するメモリマップの割り当てを行う。
先ず、情報処理装置CPU_CHIPはブートプログラムに従い、各メモリ装置への識別番号ID付けを行う動作の一例を説明する。情報処理装置CPU_CHIPは、リクエスト信号RqMux0を通じて、リクエスト開始フラグ、識別番号ID値1、リクエスト番号ReqN値3、マスター番号MID値0、リクエスト長およびID設定命令SETIDを含み、多重化したリクエストRqSETID1SEQ3をメモリ装置M0へ転送する。
メモリ装置M0では、ID有効ビットIDVがLowのため、まだ識別番号ID付けが行われていない。そこで、メモリ装置M0は、識別番号ID値1とID設定命令SETIDによってIDレジスタIDRへ識別番号ID値1を設定し、ID有効ビットIDVをHighにする。ID有効ビットIDVがHighとなることで、識別番号ID付けが完了したことを示す。メモリ装置M0は、自身の識別番号ID付けが完了すると、終端デバイスフラグレジスタER値が0であることを確認し、レスポンス信号RsMux0を通じて、レスポンス開始フラグ、メモリ装置M0の識別番号ID値1、ID設定命令SETID、情報処理装置CPU_CHIP、マスター番号マスター番号MID値0、リクエスト長、レスポンス番号ResN値3、デバイスコードレジスタDCの値(16進数で0001)、ブートデバイスフラグレジスタBR値0、終端デバイスフラグレジスタER値0およびID番号付け完了情報を多重化したレスポンスRsSETID1SEQ3を情報処理装置CPU_CHIPへ出力する。
情報処理装置CPU_CHIPは、レスポンスRsSETID1SEQ3を受け取り、このレスポンスRsSETID1SEQ3に含まれるメモリ装置M0のID値1、ID設定命令SETID、デバイスコードレジスタDCの値(16進数で0001)およびID番号付け完了情報によってメモリ装置M0の識別番号ID付けが完了したことを知る。また、情報処理装置CPU_CHIPは、レスポンスRsSETID1SEQ3に含まれるブートデバイスフラグレジスタBR値が0であることによってメモリ装置M0はブートデバイスではないことを知り、終端デバイスフラグレジスタER値が0であることによってメモリ装置M0は最終端のメモリ装置では無いことを知る。さらに、情報処理装置CPU_CHIPは、コンフィグレーション回路CONFIGのコネクションレジスタCNNREGへ、メモリ装置M0の識別番号ID値1とデバイスコードレジスタDCの値(16進数で0001)と、ブートデバイス情報BOOTDEV値0および終端デバイスレジスタENDFLAG値0を設定する。
次に、情報処理装置CPU_CHIPは、リクエスト信号RqMux0を通じて、リクエスト開始フラグ、識別番号ID値2、リクエスト番号ReqN値4、マスター番号MID値0、リクエスト長およびID設定命令SETIDを含み、多重化したリクエストRqSETID2SEQ4をメモリ装置M0へ転送する。メモリ装置M0は、自身のIDレジスタIDRへ保持されている識別番号ID値1とリクエストRqSETID2SEQ2に含まれる識別番号ID番号値2とを比較し、不一致のため、リクエストRqSETID2SEQ4をメモリ装置M1へ転送する。メモリ装置M1はID有効ビットIDVがHighのため、自身のIDレジスタIDRへ保持されている識別番号ID値2とリクエストRqSETID2SEQ4に含まれる識別番号ID値2とを比較する。双方は一致しているためメモリ装置M1は、レスポンス信号RsMux1を通じて、レスポンス開始フラグ、メモリ装置M1の識別番号ID値2、マスター番号MID値0、リクエスト長、レスポンス番号ResN値4、デバイスコードレジスタDCの値(16進数で0010)、ブートデバイスフラグレジスタBR値1、終端デバイスフラグレジスタER値0およびID番号付け完了情報を多重化したレスポンスRsSETID2SEQ4をメモリ装置M0へ出力する。メモリ装置M0はレスポンス信号RsMux0を通じてレスポンスRsSETID2SEQ4を情報処理装置CPU_CHIPへ転送する。
情報処理装置CPU_CHIPは、レスポンスRsSETID2SEQ4を受け取り、このレスポンスRsSETID2SEQ4に含まれるメモリ装置M1の識別番号ID値2、ID設定命令SETID、デバイスコードレジスタDCの値(16進数で0010)およびID番号付け完了情報によってメモリ装置M1の識別番号ID付けが完了したことを知る。また、情報処理装置CPU_CHIPは、レスポンスRsSETID1SEQ4に含まれるブートデバイスフラグレジスタBR値が1であることによってメモリ装置M1はブートデバイスであることを知り、終端デバイスフラグレジスタER値が0であることによってメモリ装置M1は最終端のメモリ装置では無いことを知る。さらに、情報処理装置CPU_CHIPは、コンフィグレーション回路CONFIGのコネクションレジスタCNNREGへ、メモリ装置M1の識別番号ID値2とデバイスコードレジスタM1CREGの値(16進数で0010)と、ブートデバイス情報BOOTDEV値1、終端デバイスレジスタENDFLAG値0を設定する。
次に、情報処理装置CPU_CHIPは、リクエスト信号RqMux0を通じて、リクエスト開始フラグ、識別番号ID値3、リクエスト番号ReqN値5、マスター番号MID値0、リクエスト長およびID設定命令SETIDを含み、多重化したリクエストRqSETID3SEQ5をメモリ装置M0へ転送する。メモリ装置M0は、自身のIDレジスタIDRへ保持されている識別番号ID番号値1とリクエストRqSETID3SEQ5に含まれる識別番号ID値3とを比較し、不一致のため、リクエストRqSETID3SEQ5をメモリ装置M1へ転送する。メモリ装置M1は、自身のIDレジスタIDRへ保持されている識別番号ID番号値2とリクエストRqSETID3SEQ5に含まれる識別番号ID値3とを比較し、不一致のため、リクエストRqSETID3SEQ5をメモリ装置M2へ転送する。メモリ装置M2では、ID有効ビットIDVがLowのため、まだ識別番号ID付けが行われていない。そこで、メモリ装置M2は、リクエストRqSETID3SEQ5に含まれる識別番号ID値3とID設定命令SETIDによってメモリ装置M2のIDレジスタIDRへID番号3を設定し、ID有効ビットIDRをHighにする。
メモリ装置M2は自身の識別番号ID付けが完了すると、終端デバイスフラグレジスタER値が1であることを確認し、レスポンス信号RqMux2を通じて、レスポンス開始フラグ、メモリ装置M2の識別番号ID値3、マスター番号MID値0、リクエスト長、レスポンス番号ResN値5、デバイスコードレジスタDCの値(16進数で0100)、ブートデバイスフラグレジスタBR値0、終端デバイスフラグレジスタER値1および識別番号ID付け完了情報を多重化したレスポンスRsSETID3SEQ5をメモリ装置M1へ出力する。メモリ装置M1はレスポンスRsSETID3SEQ5を受け取り、レスポンス信号RsMux1を通じてレスポンスRsSETID3SEQ4をメモリ装置M0へ出力する。メモリ装置M0はレスポンスRsSETID3SEQ5を受け取り、レスポンス信号RsMux0を通じてレスポンスRsSETID3SEQ5を情報処理装置CPU_CHIPへ転送する。
情報処理装置CPU_CHIPは、レスポンスRsSETID3SEQ5を受け取り、このレスポンスRsSETID3SEQ5に含まれるメモリ装置M2のID値3、ID設定命令SETID、デバイスコードレジスタDCの値(16進数で0100)、終端デバイスフラグレジスタER値1およびID番号付け完了情報を受け取り、メモリ装置M2の識別番号ID付けが完了したことを知る。また、情報処理装置CPU_CHIPはブートデバイスフラグレジスタBR値が0であることによってメモリ装置M2はブートデバイスではないことを知り、終端デバイスフラグレジスタER値1を受け取り最終端のメモリ装置であることを知る。さらに、情報処理装置CPU_CHIPは、コンフィグレーション回路CONFIGのコネクションレジスタCNNREGへ、メモリ装置M2の識別番号ID値3とデバイスコードレジスタDCの値(16進数で0100)、ブートデバイス情報BOOTDEV値0、および終端デバイスレジスタENDFLAG値1を設定する。最後に、ブートプログラムに従いメモリモジュールMEMに対するメモリマップの割り当てを行う。
T5の期間が終了した後のT6の期間(SetCfg)では、情報処理装置CPU_CHIPはブートプログラムに従い、メモリ制御回路DCMCのコンフィグレーション回路CONFIG内のさまざまなレジスタへ値を設定する。キューレジスタQREGには、メモリ制御回路DCMCのリクエストキューREQQ1、REQQ2およびレスポンスキューRESQ1の数が設定される。さらにキューレジスタQREGには、各メモリ装置のリクエストキュー回路RqQIのキュー数、リクエストキュー回路RqQXIのキュー数、リクエストキュー回路RqQXOのキュー数、レスポンスキュー回路RsQoのキュー数およびレスポンスキュー回路RsQpのキュー数などが設定される。レイテンシドメインレジスタLTDREGには、情報処理装置CPU_CHIPがレイテンシを管理するメモリ装置のID値情報などが設定される。メモリ装置M0に関するタイミングレジスタM0TREGには、メモリ装置M0を動作させるためのリクエストとリクエスト間のタイミング情報などが設定される。メモリ装置M1に関するタイミングレジスタM1TREGには、メモリ装置M1を動作させるためのリクエストとリクエスト間のタイミング情報などが設定される。メモリ装置M2に関するタイミングレジスタM2TREGにはメモリ装置M2を動作させるためのリクエストとリクエスト間のタイミング情報などが設定される。動作モードレジスタOMDREGには、メモリ装置M0、M1、M2をバンクオープンモードあるいはバンクローズモードのどちらで動作させるかを設定する。
T6の期間が終了した後のT7の期間(LatCfm)では、情報処理装置CPU_CHIPはブートプログラムに従い、メモリ装置M0、M1、M2の読み出しレイテンシを確認する。以下に動作の一例を示す。先ず、メモリ装置M0のレイテンシの確認動作を説明する。情報処理装置CPU_CHIPは、リクエスト信号RqMux0を通じて、リクエスト開始フラグ、ID値1、リクエスト番号値0、マスター番号0、リクエスト長およびレイテンシ確認命令を含み、多重化したリクエストReqLatm1をメモリ装置M0へ転送する。このリクエストRqLATID1SEQ5の発行と同時に、レイテンシ調整回路LCHCKは、レイテンシの測定を開始する。
メモリ装置M0は、自身のID番号1とリクエストReqLatm1に含まれるID番号1とを比較する。双方は一致しているためメモリ装置M0は、レスポンス信号RsMux1を通じて、レスポンス開始フラグ、メモリ装置M0のID値1、レスポンス番号0、マスター番号0、レスポンス長、レイテンシ計測コードLC値(16進数で1001)多重化したレスポンスRsLATID1SEQ5を出力する。
情報処理装置CPU_CHIPのレスポンス入力回路RSINは、レスポンスRsLATID1SEQ5を受け取り、このレスポンスRes Latm1に含まれるメモリ装置M0のID値1、レスポンス番号0、マスター番号0、およびレイテンシ計測コード(16進数で1001)をレイテンシ調整回路LCHCKへ送信する。この後、レイテンシ調整回路LCHCKは、レイテンシの測定を完了し、実測レイテンシ値Latm1を確定する。次に、レイテンシ調整回路LCHCKは、このメモリ装置M0の実測レイテンシ値Latm1とレイテンシレジスタLTREGへ設定されているメモリ装置M0のレイテンシ値Latexp1の差分LatDiffを求める。この差分LatDiffが0であればレイテンシ値Latexp1を更新せず、この差分LatDiffが0でなければレイテンシレジスタLTREGへ設定されているメモリ装置M0のレイテンシ値を実測レイテンシ値Latm1へ更新する。メモリ装置M1およびM2のレイテンシの確認動作は、上記で説明したメモリ装置M0のレイテンシの確認動作と同様に行われる。
T7の期間が終了した後のT8の期間(Idle)以降は、メモリモジュールMEMはアイドル状態となり、情報処理装置CPU_CHPからのリクエストを待つ状態となる。このように、電源投入直後に、直列接続の確認動作を行うことで、確実にメモリ同士が接続されていることが確認できる。さらに、ブートデバイスを明示し、自動的に各メモリへの識別番号ID付けが行われることで、容易に、必要な分だけメモリ装置を接続し、メモリ容量を拡張することができる。さらに、各メモリ装置のレイテンシを実測し、この実測レイテンシ値をレイテンシレジスタLTREGへ更新することで、情報処理装置CPU_CHPは正確なレイテンシを用いた制御を行い、低レイテンシと高速データ転送を実現することができる。
<レジスタ設定:コネクションレジスタCNNREG>
図10は、電源投入時の初期シーケンスにて、設定されたコネクションレジスタCNNREGへの設定値の一例を示す。特に限定しないが、コネクションレジスタCNNREGには、接続順番号CNCT NOと、有効信号VALIDと、情報処理装置CPU_CHIPや各メモリ装置の識別番号IDと、デバイスコードDEV CODEと、ブートデバイス情報BOOTDEVと、最終端メモリデバイス情報ENDFLAGが設定される。有効信号VALIDが1の時にはデバイスコードDEV CODEと、ブートデバイス情報BOOTDEVと、最終端メモリデバイス情報ENDFLAGが有効であり、0の場合は無効であることを示す。接続順番号CNCT NOが0から8まであり、番号が大きいほど情報処理装置CPU_CHIPに対する接続位置が遠いことを意味する。デバイスコードDEV CODEはデバイス固有の番号である。また、ブートデバイス情報BOOTDEVが1に対応する識別番号ID値がブートプログラムを格納しているメモリ装置の識別番号ID値である。また、最終端メモリデバイス情報ENDFLAGが1に対応するID値が最終端のメモリ装置の識別番号ID値である。接続番号CNCT NOが0には、識別番号ID値0および情報処理装置CPU_CHIPのデバイスコードDEV CODE値0001_0000(16進数)、ブートデバイス情報BOOTDEV値0および最終端メモリデバイス情報ENDFLAG値0が登録されている。また、接続番号CNCT NOが1には、識別番号ID値1およびメモリ装置M0のデバイスコードDEV CODE値0000_0001(16進数)、ブートデバイス情報BOOTDEV値0および最終端メモリデバイス情報ENDFLAG値0が登録されている。また、接続番号CNCT NOが2には、識別番号ID値2およびメモリ装置M1のデバイスコードDEV CODE値0000_0010(16進数)、ブートデバイス情報BOOTDEV値1および最終端メモリデバイス情報ENDFLAG値0が登録されている。また、接続番号CNCT NOが3には、識別番号ID値3およびメモリ装置M2のデバイスコードDEV CODE値0000_0100(16進数)、ブートデバイス情報BOOTDEV値0および最終端メモリデバイス情報ENDFLAG値1が登録されている。これは、接続の形態として、情報処理装置CPU_CHIPの次にメモリ装置M0が接続され、メモリ装置M0の次にメモリ装置M1が接続され、メモリ装置M1の次にメモリ装置M2が、順に直列に接続されていることを示す。また、情報処理装置CPU_CHIPの識別番号ID値が0、メモリ装置M0の識別番号ID値が1、メモリ装置M1の識別番号ID値が2、メモリ装置M2の識別番号ID値が3へ設定されていることを示す。このように、コネクションレジスタCNNREGを利用し、情報処理装置CPU_CHIPが、どのようなメモリ装置が、どの識別番号に対応し、どの順番で接続されているかを管理できることにより、本発明の情報処理システムの信頼性を保てるとともに、本発明の情報処理システムにて、エラーが発生した場合に、速やかにエラー復旧の処理を行うことができる。また、電源投入時の初期シーケンスのみならず、脱着可能な新たなメモリカードや、ストレージデバイスなどが接続された際にも、情報処理装置CPU_CHIPは、新たなIDを設定し、コネクションレジスタCNNREGを更新することができる。
<レジスタ設定:キューレジスタQREG>
図11および12には、電源投入時の初期シーケンスにて、設定されたキューレジスタQREGへの設定値の一例を示す。特に限定しないが、キューレジスタQREGには、レスポンスキューレジスタResQREGと、リクエストキューレジスタReqQREGがあり、それぞれのレジスタには情報処理装置CPU_CHIPや各メモリ装置の識別番号IDに対応した情報処理装置CPU_CHIPや各メモリ装置が装備しているリクエストキューおよびレスポンスキューの数が保持される。図11にはレスポンスキューレジスタResQREGへの設定値の一例を示す。図12にはリクエストキューレジスタReqQREGへの設定値の一例を示す。
メモリ装置M0,M1およびM2のリクエストキューには、前段の情報処理装置CPU_CHIPあるいはメモリ装置からのリクエストを受け取るためのリクエストキューRqQIと、自身の内部動作を行うために必要な内部リクエストキューRqQXIと、自身が受け取ったリクエストを次段のメモリ装置へ送信するために必要な外部リクエストキューRqQXOとがある。また、メモリ装置M0,M1およびM2のレスポンスキューには、自身の内部動作に対するレスポンスを受け取るために必要な内部レスポンスキューRsQoと、メモリ装置からのレスポンスを受け取るために必要な外部レスポンスキューRsQpとがある。
情報処理装置CPU_CHIPは、メモリ装置M0,M1およびM2へリクエストを送信するためのリクエストキューREQQ2と、メモリ装置M0,M1およびM2からのレスポンスを受け取るためのレスポンスキューRESQ1とがある。まず、レスポンスキューレジスタResQREGから説明する。特に限定しないが、レスポンスキューレジスタResQREGには識別番号ID値が0から8まである。有効信号VALIDが1の時には識別番号ID値に対応するレスポンスキューRsQoのキュー数とレスポンスキューRsQpのキュー数が有効であり、0の場合は無効であることを示す。識別番号ID値0は情報処理装置CPU_CHIPの識別番号であり、識別番号ID値1はメモリ装置M0の識別番号であり、識別番号ID値2はメモリ装置M1の識別番号であり、識別番号ID値3はメモリ装置M2の識別番号である。本実施の形態では、情報処理装置CPU_CHIPのレスポンスキューRESQ1は24へ設定されている。メモリ装置M0のレスポンスキューRsQo数は8、レスポンスキューRsQp数は16へ設定されている。メモリ装置M1のレスポンスキューRsQo数は8、レスポンスキューRsQp数は8へ設定されている。メモリ装置M2のレスポンスキューRsQo数は8、レスポンスキューRsQp数は8へ設定されている。
次に、リクエストキューレジスタReqQREGを説明する。本実施の形態では、リクエストキューレジスタReqQREGには識別番号ID値が0から8まである。有効信号VALIDが1の時には識別番号ID値に対応するリクエストキューRqQIと、リクエストキューRqQXIとリクエストキューRqQXOの、それぞれのリクエストキューのキュー数が有効であり、0の場合は無効であることを示す。識別番号ID値0は、情報処理装置CPU_CHIPの識別番号であり、識別番号ID値1はメモリ装置M0の識別番号であり、識別番号ID値2はメモリ装置M1の識別番号であり、識別番号ID値3はメモリ装置M2識別番号である。情報処理装置CPU_CHIPのリクエストキューREQQ2のキュー数は12へ設定されている。メモリ装置M0のリクエストキューRqQIのキュー数は12へ、リクエストキューRqQXIのキュー数は4へ、リクエストキューRqQXOのキュー数は8へ設定されている。メモリ装置M1のリクエストキューRqQIのキュー数は8へ、リクエストキューRqQXIのキュー数は4へ、リクエストキューRqQXOのキュー数は4へ設定されている。メモリ装置M2のリクエストキューRqQIのキュー数は4へ、リクエストキューRqQXIのキュー数は4へ、リクエストキューRqQXOのキュー数は4へ設定されている。また情報処理装置CPU_CHIPは、メモリモジュールMEMの構成によって、レスポンスキューレジスタResQREGおよびリクエストキューレジスタReqQREGを最適な値へ更新することができる。
情報処理装置CPU_CHIPはレスポンスキューレジスタResQREGおよびリクエストキューレジスタReqQREGを更新することができる。情報処理装置CPU_CHIPはレスポンスキューレジスタResQREGおよびリクエストキューレジスタReqQREGを利用し、情報処理装置CPU_CHIP自身が用意しているリクエストキューREQQ2数およびレスポンスキューRESQ1数を管理し、また各メモリ装置が装備しているリクエストキューRqQIのキュー数、リクエストキューRqQXIのキュー数、リクエストキューRqQXOのキュー数、レスポンスキューRsQo数、レスポンスキューRsQp数を管理し、これらのキューが最適に利用されるように、各メモリ装置を制御することによって、低レイテンシかつ高速なデータ転送を実現できる。なお、これらのキューの利用方法及び各メモリ装置の制御については、後述する。また、電源投入時の初期シーケンスのみならず、新たなメモリデバイス、メモリカードやストレージデバイスなどが接続された際にも、情報処理装置CPU_CHIPは、新たな認識番号IDに対する上記のリクエストキューやレスポンスキューの数を設定し、レスポンスキューレジスタResQREGおよびリクエストキューレジスタReqQREGを更新することができる。さらに、上記リクエストキューやレスポンスキューの数は、本発明の情報処理システムの性能が確保できるように決めると良い。
<レジスタ設定:レイテンシドメインレジスタLTDREG>
図13は、電源投入時の初期シーケンスにて、設定されたレイテンシドメインレジスタLTDREGへの設定値の一例を示す。特に限定しないが、レイテンシドメインレジスタLTDREGには、有効信号VALIDと、情報処理装置CPU_CHIPや各メモリ装置の識別番号IDに対応したマスターフラグMFLAGと、レイテンシドメイン情報LAT DMNが設定される。有効信号VALIDが1の時には識別番号ID値に対応するマスターフラグMFLAGと、レイテンシドメイン情報LAT DMNが有効であり、0の場合は無効であることを示す。マスターフラグMFLAGが1の場合は、対応する情報処理装置やメモリ装置などの装置がマスター装置であることを示し、マスターフラグMFLAGが0の場合は、識別番号IDに対応する装置はスレーブ装置であることを示す。レイテンシドメイン情報LAT DMNには、マスター装置の識別番号ID値が設定され、どのマスター装置がどのスレーブ装置を制御し、レイテンシを管理しているかを示す。本実施の形態では、レイテンシドメインレジスタLTDREGには識別番号ID値が0から8まである。識別番号ID値0は、情報処理装置CPU_CHIPの識別番号であり、マスターフラグMFLAG値が1、レイテンシドメイン情報LAT DMN値が0へ設定されている。識別番号ID値1は、メモリ装置M0の識別番号であり、マスターフラグMFLAG値0、レイテンシドメイン情報LAT DMN値が0へ設定されている。識別番号ID値2は、メモリ装置M1の識別番号であり、マスターフラグMFLAG値0、レイテンシドメイン情報LAT DMN値が0へ設定されている。識別番号ID値3は、メモリ装置M2の識別番号であり、マスターフラグMFLAG値0、レイテンシドメイン情報LAT DMN値が0へ設定されている。
レイテンシドメインレジスタLTDREGによって、情報処理装置CPU_CHIPは、マスター装置となり、スレーブ装置であるメモリ装置M0、M1およびM2を制御し、レイテンシを管理することがわかる。このように、レイテンシドメインレジスタLTDREGは、マスター装置の指定と、そのマスター装置が制御するスレーブ装置を指定することができるため、情報処理装置CPU_CHIPのような複数のマスター装置がメモリ装置M0、M1およびM2のようなスレーブ装置と直列に接続されている場合であっても、適切にスレーブデバイスを制御し、レイテンシを管理することができる。また、電源投入時の初期シーケンスのみならず、新たなメモリ装置や、メモリカード、SSD(Solid State Drive)およびHDD(Hard Disk Drive)などのストレージデバイスなどが接続された際にも、情報処理装置CPU_CHIPは、新たなIDを設定し、レイテンシドメインレジスタLTDREGを更新することができる。
<レジスタ設定:レイテンシレジスタLTREG>
図14には、電源投入時の初期シーケンスにて、設定されたレイテンシレジスタLTREGへの設定値の一例を示す。レイテンシレジスタLTREGには情報処理装置CPU_CHIPや各メモリ装置の識別番号IDに対応した、有効信号Valid、レイテンシLatQue、レイテンシLatBank、許容レイテンシLatRange、タイムアウトレイテンシLatTimeOutが設定される。有効信号Validが1の場合は、識別番号IDに対応したレイテンシLatQue、レイテンシLatBank、許容レイテンシLatRangeおよびタイムアウトレイテンシLatTimeOutが有効であり、0の場合は無効であることを示す。レイテンシLatQueは、情報処理装置CPU_CHIPからのリードリクエストがメモリ装置内のレスポンスキューRsQoから、直接データを読み出し、読み出したデータが情報処理装置CPU_CHIPへ到達するまでの読み出しレイテンシを示す。また、レイテンシLatBankは、情報処理装置CPU_CHIPからのリードリクエストがメモリ装置内のメモリバンクからデータを読み出し、読み出したデータが情報処理装置CPU_CHIPへ到達するまでの読み出しレイテンシを示す。また、許容レイテンシLatRangeは、レイテンシLatQueやレイテンシLatBankと、レイテンシ調整回路LCHCKにて実測した読み出しレイテンシLatMrsの差の許容値を示す。情報処理装置CPU_CHIPからのリードリクエストに対する読み出しデータが情報処理装置CPU_CHIPへ入力されずにタイムアウトレイテンシLatTimeOutを越えた際、レイテンシ調整回路LCHCKはタイムアウトとして判断する。識別番号ID値0は、情報処理装置CPU_CHIPの識別番号である。情報処理装置CPU_CHIPはマスター装置として、各メモリ装置を制御するので、レイテンシLatQue値は0、レイテンシLatBank値は0、許容レイテンシLatRange値は0、タイムアウトレイテンシLatTimeOut値は0へ設定される。識別番号ID値1は、メモリ装置M0の識別番号であり、本実施の形態では、レイテンシLatQue値は6、レイテンシLatBank値は8、許容レイテンシLatRange値は1、タイムアウトレイテンシLatTimeOut値は60へ設定されている。識別番号ID値2は、メモリ装置M1の識別番号であり、本実施の形態では、レイテンシLatQue値は10、レイテンシLatBank値は12、許容レイテンシLatRange値は1、タイムアウトレイテンシLatTimeOut値は100へ設定されている。識別番号ID値3は、メモリ装置M2の識別番号であり、本実施の形態では、レイテンシLatQue値は14、レイテンシLatBank値は16、許容レイテンシLatRange値は1、タイムアウトレイテンシLatTimeOut値は140へ設定されている。
情報処理装置CPU_CHIPは、レイテンシ調整回路LCHCKにて各メモリ装置のレイテンシを実測し、この実測レイテンシLatMrsと、レイテンシレジスタLTREGに設定されているレイテンシLatQue、レイテンシLatBank、許容レイテンシLatRangeおよびタイムアウトレイテンシLatTimeOutを比較する。さらに、これらの比較結果を利用し、各メモリ装置を制御することで低レイテンシと高速データ転送を実現することができる。また、電源投入時の初期シーケンスのみならず、新たなメモリデバイス、メモリカードやストレージデバイスなどが接続された際にも、情報処理装置CPU_CHIPは、新たなIDに対する上記のレイテンシLatQue、レイテンシLatBank、許容レイテンシLatRangeおよびタイムアウトレイテンシLatTimeOutを設定し、レイテンシレジスタLTREGを更新することができる。また、電源投入時の初期シーケンスのみならず新たなメモリ装置や、メモリカード、SSD(Solid State Drive)およびHDD(Hard Disk Drive)などのストレージデバイスなどが接続された際にも、情報処理装置CPU_CHIPは、新たなIDを設定し、さらに新たにレイテンシを測定し、その測定値をレイテンシレジスタLTREGへ設定し、更新することができる。
<レジスタ設定:タイミングレジスタM0TREG>
図15には、電源投入時の初期シーケンスにて、設定されたメモリ装置M0に関するタイミングレジスタM0TREGへの設定値の一例を示す。タイミングレジスタM0TREGには情報処理装置CPU_CHIPがメモリ装置M0を制御するためのタイミング情報と有効信号Validが設定される。有効信号Validが1の場合は、メモリ装置M0を制御するためのタイミング情報が有効であり、0の場合は無効であることを示す。タイミングレジスタM0TREGには、tm0RCD(バンクアクティブ命令とリードおよびライト命令の最小時間間隔)、tm0RC(同一バンクでのバンクアクティブ命令とバンクアクティブ命令の最小時間間隔)、tm0RRD(異なるバンクでのバンクアクティブ命令とバンクアクティブ命令の最小時間間隔、tm0RAS(同一バンクでのバンクアクティブ命令とプリチャージ命令の最小時間間隔)、tm0RP(同一バンクでのバンクアクティブ命令とプリチャージ命令の最小時間間隔)、tm0RFC(リフレッシュサイクル最小時間)などが設定される。最小時間間隔は、情報処理装置CPU_CHIPの動作クロックのクロックサイクル数で示される。tm0RCDには8クロックサイクル、tm0RCには30クロックサイクル、tm0RRDには4クロックサイクル、tm0RASには22クロックサイクル、tm0RPには8クロックサイクル、tm0RFCには60クロックサイクルが設定されている。
<レジスタ設定:タイミングレジスタM1TREG>
図16には、電源投入時の初期シーケンスにて、設定されたメモリ装置M1に関するタイミングレジスタM1TREGへの設定値の一例を示す。タイミングレジスタM1TREGには情報処理装置CPU_CHIPがメモリ装置M1を制御するためのタイミング情報と有効信号Validが設定される。有効信号Validが1の場合は、メモリ装置M1を制御するためのタイミング情報が有効であり、0の場合は無効であることを示す。タイミングレジスタM1TREGには、tm1RCD(バンクアクティブ命令とリードおよびライト命令の最小時間間隔)、tm1RC(同一バンクでのバンクアクティブ命令とバンクアクティブ命令の最小時間間隔)、tm1RD(異なるバンクでのバンクアクティブ命令とバンクアクティブ命令の最小時間間隔、tm1RAS(同一バンクでのバンクアクティブ命令とプリチャージ命令の最小時間間隔)、tm1RP(同一バンクでのバンクアクティブ命令とプリチャージ命令の最小時間間隔)などが設定される。最小時間間隔は、情報処理装置CPU_CHIPの動作クロックのクロックサイクル数で示される。本実施の形態では、tm1RCDには16クロックサイクル、tm1RCには60クロックサイクル、tm1RRDには8クロックサイクル、tm1RASには44クロックサイクル、tm1RPには16クロックサイクルが設定されている。
<レジスタ設定:タイミングレジスタM2TREG>
図17には、電源投入時の初期シーケンスにて、設定されたメモリ装置M2に関するタイミングレジスタM2TREGへの設定値の一例を示す。タイミングレジスタM2TREGには情報処理装置CPU_CHIPがメモリ装置M2を制御するためのタイミング情報有効信号Validが設定される。有効信号Validが1の場合は、メモリ装置M2を制御するためのタイミング情報が有効であり、0の場合は無効であることを示す。タイミングレジスタM2TREGには、tm2RCD(バンクアクティブ命令とリードおよびライト命令の最小時間間隔)、tm2RC(同一バンクでのバンクアクティブ命令とバンクアクティブ命令の最小時間間隔)、tm2RD(異なるバンクでのバンクアクティブ命令とバンクアクティブ命令の最小時間間隔、tm2RAS(同一バンクでのバンクアクティブ命令とプリチャージ命令の最小時間間隔)、tm2RP(同一バンクでのバンクアクティブ命令とプリチャージ命令の最小時間間隔)などが設定される。本実施の形態では、最小時間間隔は、情報処理装置CPU_CHIPの動作クロックのクロックサイクル数で示される。t2RCDには10000クロックサイクル、tm2RCには10062クロックサイクル、tm2RRDには16クロックサイクル、tm2RASには10046クロックサイクル、tm2RPには32クロックサイクルが設定されている。
また、タイミング情報tm2RCDの有効信号Validが0となった場合は、バンクアクティブ命令が完了し、次のリードおよびライト命令を入力しても良いというコマンド許可を示す信号が、メモリ装置M2から発行され、メモリ装置M1およびメモリ装置M0を通じて、情報処理装置CPU_CHIPへ入力される。
<レジスタ設定:動作モードレジスタOMDREG>
図18には、電源投入時の初期シーケンスにて設定されたメモリ制御モードレジスタOMDREGへの設定値の一例を示す。メモリ制御モードレジスタOMDREGには情報処理装置CPU_CHIPや各メモリ装置の識別番号IDに対応した、有効信号Validおよび制御モード情報OPMODEが設定される。有効信号Validが1の場合は、識別番号IDに対応したメモリ制御モード情報OPMODEが有効であり、0の場合は無効であることを示す。情報処理装置CPU_CHIPが各メモリを制御する制御方法は、チャネル制御モードと、バンクオープンモードと、バンククローズモードの3種類の制御モードを設定できる。
制御モード情報OPMODが1の場合はバンククローズモードへ、2の場合はバンクオープンモードへ、3の場合はチャネル制御モードへ設定されていることを示す。バンククローズモードとは各メモリ装置のレスポンスキューRsQoと、メモリ装置内のメモリバンク毎のセンスアンプSenseAmpやデータバッファDataLatをキャッシュメモリとして利用しない制御方法である。制御モード情報OPMODがバンククローズモードに設定されている場合は、メモリ制御回路DCMCは、データの読み出しや書き込み後に、メモリ装置のメモリバンク毎のセンスアンプSenseAmpやデータバッファDataLatを常に非活性化する(ページクローズ)。バンクオープンモードとは、各メモリ装置内のメモリバンク毎のセンスアンプSenseAmpやデータバッファDataLatをキャッシュメモリとして利用する制御方法である。制御モード情報OPMODがバンクオープンモードに設定されている場合は、メモリ制御回路DCMCはデータの読み出しや書き込み後に、メモリ装置のメモリバンク毎のセンスアンプSenseAmpやデータバッファDataLatを常に活性化させ、センスアンプSenseAmpやデータバッファDataLat内のデータを保持し続ける(ページオープン)。
ヒット判定回路IDHTは、情報処理回路CPU0〜3からのリードおよびライトリクエストに対するデータがメモリバンク毎のセンスアンプSenseAmpやデータバッファDataLatに存在しているかを判定する(ページヒット判定)。ページヒットの場合、メモリアレイ回路へアクセスすることなくセンスアンプSenseAmpやデータバッファDataLatからデータを読み出すことができるので、低電力且つ低レイテンシで高速にデータを読み出すことができる。
チャネル制御モードとは、各メモリ装置のレスポンスキューRsQoと、メモリ装置内のメモリバンク毎のセンスアンプSenseAmpやデータバッファDataLatをキャッシュメモリとして利用する制御方法である。制御モード情報OPMODがチャネル制御モードに設定されている場合は、メモリ制御回路DCMCはデータの読み出しや書き込み後に、メモリ装置のメモリバンク毎のセンスアンプSenseAmpやデータバッファDataLatを常に活性化する(ページオープン)。メモリ制御回路DCMCのヒット判定回路IDHTは、情報処理回路CPU0〜3からのリードおよびライトリクエストに対するデータが、各メモリのレスポンスキューRsQoに存在しているかを判定し(チャネルヒット判定)、さらにメモリバンク毎のセンスアンプSenseAmpやデータバッファDataLatに存在しているかを判定する(ページヒット判定)。チャネルヒットの場合、センスアンプSenseAmpやデータバッファDataLatへアクセスすることなくレスポンスキューRsQoから直接データを読み出すことができるので、さらに、低電力かつ低レイテンシで高速にデータを読み出すことができる。これらの制御モードは、情報処理装置CPU_CHIPで動作するアプリケーションに対応し、いずれかの制御モードに設定すると良い。
本実施の形態では、識別番号ID値1は、メモリ装置M0の識別番号であり、制御モード情報OPMODEはチャネル制御モードへ設定されている。つまり、情報処理装置CPU_CHIPはメモリ装置M0をチャネル制御モードにて制御することを示す。識別番号ID値2は、メモリ装置M1の識別番号であり、制御モード情報OPMODEはチャネル制御モードへ設定されている。つまり、情報処理装置CPU_CHIPはメモリ装置M1をチャネル制御モードにて制御することを示す。識別番号ID値3は、メモリ装置M2の識別番号であり、制御モード情報OPMODEはチャネル制御モードへ設定されている。つまり、情報処理装置CPU_CHIPはメモリ装置M2をチャネル制御モードにて制御することを示す。また、電源投入時の初期シーケンスのみならず、新たに、メモリ装置や、着脱可能なメモリカードやストレージデバイスなどが接続された際にも、情報処理装置CPU_CHIPは、新たなIDに対する上記の制御モード情報OPMODE設定し、動作モードレジスタOMDREを更新することができる。
<ヒット判定動作>
図19には情報処理装置CPU_CHIPがメモリ装置M0、M1、M2をチャネル制御モードにて制御する場合に、ヒット判定回路IDHTが行うヒット判定結果に基づいて、メモリ制御回路DCMCが各メモリ装置へ出力するリードリクエストの一例である。ヒット判定回路IDHTでの判定結果がチャネルヒット(CHANNEL HIT)の場合、ページヒット判定の結果によらず、メモリ制御回路DCMCは、レスポンスキューRsQoからデータを読み出すためリード命令RDを含むリクエストを出力する。ヒット判定回路IDHTでの判定結果がチャネルミス(CHANNEL MISS)であり、メモリバンクのページがオープン状態(OPEN)にてページヒット(PAGE HIT)した場合、メモリ制御回路DCMCは、センスアンプSenseAmpやデータバッファDataLatからデータを読み出すためリード命令RD2を含むリクエストを出力する。センスアンプSenseAmpやデータバッファDataLatから読み出されたデータはレスポンスキューRsQoへ転送され、最終的に情報処理装置CPU_CHIPへ転送される。
ヒット判定回路IDHTでの判定結果がチャネルミス(CHANNEL MISS)であり、メモリバンクのページがオープン状態(OPEN)にてページヒット(PAGE HIT)した場合、メモリ制御回路DCMCは、センスアンプSenseAmpやデータバッファDataLatからデータを読み出すためリード命令RD2を含むリクエストを出力する。センスアンプSenseAmpやデータバッファDataLatから読み出されたデータはレスポンスキューRsQoへ転送され、最終的に情報処理装置CPU_CHIPへ転送される。
ヒット判定回路IDHTでの判定結果がチャネルミス(CHANNEL MISS)であり、メモリバンクのページがクローズ状態(CLOSE)にてページヒット(PAGE HIT)した場合、まずメモリ制御回路DCMCは、メモリバンクを活性化させ、ページをオープンするために、バンクアクティブ命令を含むリクエストを出力する。次に、センスアンプSenseAmpやデータバッファDataLatからデータを読み出すためリード命令RD2を含むリクエストを出力する。センスアンプSenseAmpやデータバッファDataLatから読み出されたデータはレスポンスキューRsQoへ転送され、最終的に情報処理装置CPU_CHIPへ転送される。
ヒット判定回路IDHTでの判定結果がチャネルミス(CHANNEL MISS)であり、メモリバンクのページがオープン状態(OPEN)にてページミス(PAGE MISS)した場合、まずメモリ制御回路DCMCは、メモリバンクを非活性化させ、ページをクローズするためにプリチャージ命令を含むリクエストを出力する。次に、メモリバンクを活性化させ、ページをオープンするために、バンクアクティブ命令を含むリクエストを出力する。次に、センスアンプSenseAmpやデータバッファDataLatからデータを読み出すためリード命令RD2を含むリクエストを出力する。センスアンプSenseAmpやデータバッファDataLatから読み出されたデータはレスポンスキューRsQoへ転送され、最終的に情報処理装置CPU_CHIPへ転送される。
ヒット判定回路IDHTでの判定結果がチャネルミス(CHANNEL MISS)であり、メモリバンクのページがクローズ状態(CLOSE)にてページミス(PAGE MISS)した場合、まずメモリ制御回路DCMCは、メモリバンクを活性化させ、ページをオープンするために、バンクアクティブ命令を含むリクエストを出力する。次に、センスアンプSenseAmpやデータバッファDataLatからデータを読み出すためリード命令RD2を含むリクエストを出力する。センスアンプSenseAmpやデータバッファDataLatから読み出されたデータはレスポンスキューRsQoへ転送され、最終的に情報処理装置CPU_CHIPへ転送される。
上記では、メモリ制御回路DCMCが各メモリ装置へ出力するデータを読み出すためのリクエストの一例を示したが、データの書き込みに関しても同様の動作を行うことはいうまでもない。このように、チャネル制御モードにて制御する場合、各メモリ装置内のメモリバンク毎のセンスアンプSenseAmpやデータバッファDataLatをキャッシュメモリとして利用するだけではなく、各メモリ装置のレスポンスキューRsQoまでもキャッシュメモリとして利用するので、キャッシュメモリサイズを増やし、キャッシュメモリのヒット率を上げることができ、低レイテンシ且つ高速かつ低電力で各メモリ装置を動作させることが出来る。
<メモリマップの説明>
図20は、情報処理装置CPU_CHIPが管理するメモリモジュールMEMに対するメモリマップの一例を示した図である。本実施の形態では、特に限定されないが、メモリ装置M0の記憶領域は1Gbit、メモリ装置M1の記録領域は1Git、メモリ装置M2の記憶領域は16Gbit+512Mbit(512Mbitは代替領域)であるメモリモジュールを例に代表的なメモリマップを説明する。
本実施の形態では、メモリ装置M0は揮発性メモリでダイナミックランダムアクセスメモリセルを利用したダイナミックランダムアクセスメモリであり、読み出し時間が15ns程度である。また、メモリ装置M1は不揮発性メモリでNOR型フラッシュメモリセルを利用したNOR型フラッシュメモリであり、読み出し時間が80ns程度である。メモリ装置M2は、不揮発性メモリでNAND型フラッシュメモリセルを利用したNAND型フラッシュメモリであり、読み出し時間が25usec程度である。
メモリ制御回路DCMCは、コンフィグレーション領域およびIO領域に分かれている。コンフィグレーション領域は、特に限定しないがメモリ制御回路DCMCのコンフィグレーション回路CONFIG内のキューレジスタQREG、レイテンシレジスタLTREG、レイテンシドメインレジスタLTDREG、メモリ装置M0に関するタイミングレジスタM0TREG、メモリ装置M1に関するタイミングレジスタM1TREG、メモリ装置M2に関するタイミングレジスタM2TREG、制御モードレジスタOMDREG、IOレジスタなどのレジスタに対応するアドレスから構成される。
IO領域は、複数のフラッシュメモリとコントローラから構成されるメモリカードやSSD(Solid State Drive)などの着脱可能なメモリモジュールへアクセスするための領域である。メモリ装置M1は、ブートデバイスID格納領域BotID−AREA、初期プログラム領域InitPR−AREA、プログラム格納領域OSAP−AREAに分かれている。ブートデバイスID格納領域BotID−AREAには、ブートデバイスのID情報が格納される。最終端デバイスID格納領域EndID−AREAには、直列接続されているメモリモジュールMEMに関する最終端メモリデバイスID情報が格納される。初期プログラム領域InitPR−AREAには、ブートプログラムが格納される。プログラム格納領域OSAP−AREAには、オペレーティングシステムやアプリケーションプログラムなどが格納される。メモリ装置M0は、コピー領域COPY−AREA、ワーク領域WORK−AREAに分かれている。ワーク領域WORK−AREAは、プログラム実行時のワークメモリとして、コピー領域COPY−AREAはメモリ装置M1及びM2からのプログラムやデータをコピーするためのメモリとして利用される。メモリ装置M2は、データ領域DATA−AREA、代替領域REP−AREAに分かれている。データ領域DATA−AREAには、音楽データ、音声データ、動画データ、静止画データなどのデータが格納される。
また、フラッシュメモリは、書き換えを繰り返すことによって、信頼性が低下し、書き込み時に書いたデータが、読み出し時には異なるデータとなったり、書き換え時にデータが書き込まれなかったりすることが稀にある。代替領域REP−AREAは、このように不良となったデータを新たな領域へ置き換えるために設けられている。代替領域REP−AREAの大きさは、メモリ装置M2が保証する信頼性が確保できるように決めると良い。
<電源投入直後の動作>
次に、電源投入直後のメモリ装置M1から情報処理装置CPU_CHIPへのデータ転送について説明する。電源投入後、情報処理装置CPU_CHIPは自身の持つブートデバイスIDレジスタBotIDを2へ設定する。メモリ装置M1はブートデバイスID格納領域BotID−AREAからブートデバイスのID情報2を読み出し、自身のIDレジスタへ2を設定する。これにより、ブートデバイスがメモリ装置M1に確定する。次に、情報処理装置CPU_CHIPはブートデバイスであるメモリ装置M1に格納されているブートプログラム及び最終端メモリデバイスID情報を読み出すため、メモリ装置M1のID番号2と読み出し命令をメモリモジュールMEMへ送信する。
メモリモジュールMEMは、ID番号2と読み出し命令に従って、メモリ装置M1の初期プログラム領域InitPR−AREAからブートプログラムを読み出し、情報処理装置CPU_CHIPへ送信する。このように、電源投入直後に、ブートデバイスのIDを初期設定することで、メモリ装置の直列接続によって実現されるメモリモジュールMEM内のブートデバイスを特定することができ、情報処理装置CPU_CHIPとメモリモジュールMEM間の接続信号数を大幅に少なくした上で、情報処理装置CPU_CHIPは、すばやく確実にブートデバイスよりブートプログラムを読み出し、情報処理装置CPU_CHIP及びメモリモジュールMEMを立ち上げることができる。
<データコピー動作の説明>
メモリ装置M0のデータ読み出し時間は、メモリ装置M2の読み出し時間と比較し、大幅に短い。そこで、前もって必要な画像データをメモリ装置M2からメモリ装置M0へ転送すれば、情報処理装置CPU_CHIPにて高速に画像処理を行うことができる。特に限定しないが、メモリ装置M0、M1、M2のそれぞれのIDレジスタ値が1、2及び3に設定された場合の、メモリ装置M2からのメモリ装置M0へのデータ転送の一例を説明する。
情報処理装置CPU_CHIPはメモリ装置M2のデータ領域DATA−AREAからデータを読み出すため、メモリ装置M2の識別番号ID3と1ページ(512Byteのデータ+16ByteのECCコード)分データ読み出し命令をメモリモジュールMEMへ送信する。メモリモジュールMEMは、ID番号3と1ページ分のデータ読み出し命令に従って、メモリ装置M2のデータ領域DATA−AREAから1ページ分のデータを読み出し、認識番号ID3を付加し、情報処理装置CPU_CHIPへ送信する。
情報処理装置CPU_CHIPでは、メモリ装置M2から送信された1ページ分のデータに対しエラー検出を行う。エラーがなければ、1ページ分のデータをメモリ装置M0のコピー領域COPY−AREAへデータを転送するため、情報処理装置CPU_CHIPはメモリ装置M0のID番号1と1ページデータ書き込み命令とデータをメモリモジュールMEMへ送信する。
エラーがあれば修正を行った後、1ページ分のデータをメモリ装置M0のコピー領域COPY−AREAへデータを転送するため、情報処理装置CPU_CHIPはメモリ装置M0のID番号2と1ページデータ書き込み命令をメモリモジュールMEMへ送信する。メモリモジュールMEMは、ID番号2と1ページデータ読み出し命令に従って、メモリ装置M0のコピー領域COPY−AREAへ1ページ分のデータを書き込む。
次に、情報処理装置CPU_CHIPからメモリ装置M0へ高速に画像データが書き込まれ、必要に応じてメモリ装置M2へこの画像データを保存する際の、メモリ装置M0からのメモリ装置M2へのデータ転送について説明する。情報処理装置CPU_CHIPはメモリ装置M0のコピー領域COPY−AREAからデータを読み出すため、メモリ装置M0の識別番号ID値1と1ページ(512Byte)データ読み出し命令をメモリモジュールMEMへ送信する。メモリモジュールMEMは、識別番号ID値1と1ページデータ読み出し命令に従って、メモリ装置M0のコピー領域COPY−AREAから1ページ分のデータを読み出し、識別番号ID値1を付加し、情報処理装置CPU_CHIPへ送信する。情報処理装置CPU_CHIPは、メモリ装置M0から送信された1ページ分のデータをメモリ装置M2のデータ領域DATA−AREAへデータを転送するため、メモリ装置M2の識別番号ID値3と1ページ分のデータ書き込み命令とデータをメモリモジュールMEMへ送信する。
メモリモジュールMEMが、メモリ装置M0及びM1を通じてメモリ装置M2へ識別番号ID値3と1ページデータ書き込み命令を送信すると、メモリ装置M2は自身のデータ領域DATA−AREAへ1ページ分のデータを書き込む。メモリ装置M2はデータの書き込みが成功したかどうかをチェックし、成功すれば書き込み処理を終了する。書き込みが失敗した時には、メモリ装置M2は、識別番号ID値3と書き込みエラー情報を送信し、メモリ装置M1及びメモリ装置M0を介して、情報処理装置CPU_CHIPへ書き込みエラーを通達する。情報処理装置CPU_CHIPは、識別番号ID値3と書き込みエラー情報を受け取ると、メモリ装置M2にあらかじめ用意されている代替領域REP−AREAの新たなアドレスに対して書き込みを行うために、メモリ装置M2の識別番号ID値3と1ページデータ書き込み命令をメモリモジュールMEMへ送信する。メモリモジュールMEMがメモリ装置M0及びM1を通じて識別番号ID値3と1ページデータ書き込み命令をメモリ装置M2へ送信すると、メモリ装置M2は自身の代替領域REP−AREAへ1ページ分のデータを書き込む。また、情報処理装置CPU_CHIPは、代替処理を行った際は、不良アドレスと、不良アドレスに対して、どのアドレスに代替処理を行ったかというアドレス情報を保持し管理する。
以上説明したように、メモリ装置M2の一部のデータをコピーできる領域をメモリ装置内に確保し、あらかじめメモリ装置M2からメモリ装置M0へデータを転送しておくことで、メモリ装置M0と同等の速度でメモリ装置M2のデータを読み出すことができ、情報処理装置CPU_CHIPでの高速処理が可能となる。また、メモリ装置M2へデータを書く際は、いったんデータをメモリ装置M0へ書き込み、必要に応じてメモリ装置M2へ書き戻すことができるため、データの書き込みも高速化することができる。さらに、メモリ装置M2からの読み出し時は、エラー検出と訂正を行い、書き込み時は、書き込みが正しく行われなかった不良アドレスに対して代替処理を行うため、高信頼性を保つことができる。
<メモリ制御回路DCMCのリクエスト発行動作の説明>
図21は、メモリ制御回路DCMCがリクエストをメモリモジュールMEMに対して発行するまでの動作の一例を示すフローチャートである。図21(A)は、リクエストキューREQQ2へリクエストがエントリされるまでの動作の一例を示すフローチャートであり、図21(B)は、リクエストキューREQQ2へエントリされたリクエストをメモリモジュールMEMに対して発行するまでの動作の一例を示すフローチャートである。また、図21(A)と、図21(B)は、独立に動作する。情報処理回路CPU0、CPU1、CPU2およびCPU3は、アプリケーションを実行するためにメモリコントローラDCMCを介してメモリモジュールMEMへリードリクエストやライトリクエストを発行する。ここでは、情報処理回路CPU2がメモリモジュールMEMのメモリ装置M1から32Bのデータを読み出すためのリードリクエストをメモリコントローラDCMCへ発行した際のメモリコントローラDCMCの動作の一例を説明する。
調停回路CARMを通じてコマンド信号CMDから32Bのデータを読み出すリードリクエストReadReq32M1およびアドレス信号ADDからアドレスRAddM1をリクエストキューREQQ1へ送信する(図21:Step1)。リクエストキューREQQ1は、複数のリクエストキューから構成され、リクエストを受け取るための空き状態のリクエストキューがあればリクエストイネーブル信号RQENはHighとなり、空き状態のリクエストキューがなければリクエストイネーブル信号RQENはLowとなる。
リクエストイネーブル信号REQENがLowであれば(図21:Step2)、情報処理回路CPU2からのリードリクエストReadReq32M1およびアドレスRAddM1はリクエストキューREQQ1へ格納されない。リクエストイネーブル信号REQENがHighであれば(図21:Step2)、リードリクエストReadReq32M1およびアドレスRAddM1はリクエストキューREQQ1へ格納される(図21:Step3)。
次に、ヒット判定回路IDHTはリフレッシュ要求回路REFからリフレッシュリクエストRefM0があるかどうかチェックする(図21:Step4)。リフレッシュリクエストがあれば、このリフレッシュリクエストRefM0を優先させ、識別番号IDを判定する(図21:Step11)。コンフィグレーション回路CONFIGの設定値により、このリフレッシュリクエストRefM0はメモリ装置M0へのリフレッシュリクエストであるため識別番号IDは1と判定される。リフレッシュリクエストRefM0が無ければ、リクエストキューREQQ1へ格納されているリードリクエストReadReq32M1およびアドレスRAddM1に対する識別番号IDを判定する(図21:Step5)。特に限定しないが、ヒット判定回路IDHTは、アドレスRAddM1と、図20で示したメモリモジュールMEMに対するメモリマップのアドレス値を比較し、識別番号IDを判定する。特に限定しないがアドレスRAddM1はプログラム格納領域OSAP−AREAのアドレスであるため識別番号IDは2と判定され、リードリクエストReadReq32M1はメモリ装置M1へのリクエストであることが判定される。
次に、ヒット判定回路IDHTはメモリ装置M1へのリードリクエストReadReq32M1に関するアドレスRAddM1に対してページアドレスヒット判定を行う(図21:Step6)。ページヒット判定の方法を以下に示す。ヒット判定回路IDHTはチャネルヒット判定とページヒット判定を行うために、以下の3つの機能を装備している。
(1)ヒット判定回路IDHTは情報処理回路CPU0〜3から各メモリ装置へのリクエストに関するアドレスに対して、各メモリ装置のバンクアドレスEBAddとページアドレスEPAddとカラムアドレスECAddの対応付けを行っている。
(2)ヒット判定回路IDHTは各メモリ装置が装備するレスポンスキューRsQo内のデータに対するバンクアドレスEBAddとページアドレスEPAddとカラムアドレスECAddを保持している。
(3)ヒット判定回路IDHTは各メモリ装置のメモリバンク毎に、メモリバンクが活性化していることを示す有効信号Validと、活性化された最新のページアドレスPAddを保持し、コマンド生成回路COMGENへ送信する。バンク活性化信号AValidがHighの際は、メモリバンクが活性化していることを示し、Lowの場合は非活性であることを示す。
ヒット判定回路IDHTはメモリ装置M1へのリードリクエストReadReq32M1に関するアドレスRAddM1の中のバンクアドレスEBAddM1と、ページアドレスEPAddM1およびカラムアドレスECAddM1を抽出する。
次に、ヒット判定回路IDHTはチャネルヒット判定とページヒット判定を行う。チャネルヒット判定では、メモリ装置M1が装備するレスポンスキューRsQo内のデータに対するバンクアドレスEBAdd、ページアドレスEPAddおよびカラムアドレスECAddと、ヒット判定回路IDHTによって抽出されたバンクアドレスEBAddM1、ページアドレスEPAddM1およびカラムアドレスECAddM1とを比較する(図21:Step6)。すべてのアドレスが一致した場合チャネルヒットとなり、一致しなかった場合はチャネルミスとなる(図21:Step6)。次に、バンクアドレスEBAddM1で指定されたメモリ装置M1のメモリバンクに対応するページアドレス値PAddM1と、ページアドレスEPAddM1を比較する(図21:Step6)。ページアドレス値PAddM1とページアドレスEPAddM1が一致した場合はページヒットとなり、ページアドレス値PAddM1とページアドレスEPAddM1が一致しなかった場合は、ページアドレスミスとなる(図21:Step6)。
次に、コマンド生成回路COMGENは、ヒット判定回路IDHTからメモリ装置M1へのリードリクエストReadReq32M1とアドレスRAddM1、ヒット判定結果とバンク活性化信号AValidの値および判定された識別番号ID値2を受け取り、メモリ装置M1への命令とアドレスを生成する(図21:Step7)。
判定結果がチャネルヒットの場合、情報処理回路CPU2が必要とするデータはメモリ装置M1のチャネルヒットとなったレスポンスキューRsQoへ存在し、このレスポンスキューRsQoから直接データを読み出すことができるため、リード命令RD32と、これに対応したレスポンスキュー番号RsQNoとカラムアドレスECAddM1を生成する(図21:Step7)。レスポンスキューRsQoは複数のレスポンスから構成され、それぞれのレスポンスキューを識別するためのレスポンスキュー番号を利用して、メモリ制御回路DCMCのヒット判定回路IDHTによって管理されている。判定結果がチャネルミスかつページヒットでバンク活性化信号AValidがHighの場合、情報処理回路CPU2が必要とするデータはメモリ装置M1のページアドレスヒットとなったメモリバンクのデータバッファDataLatへ存在し、このデータバッファDataLatから直接データを読み出すことができるため、リード命令RD32と、これに対応したバンクアドレスEBAddM1とカラムアドレスECAddM1を生成する(図21:Step7)。判定結果がチャネルミスかつページミスでバンク活性化信号AValidがHighの場合、情報処理回路CPU2が必要とするデータはメモリ装置M1のページアドレスミスとなったメモリバンクのデータバッファDataLatには存在しないため、このデータバッファDataLatを無効化し、新たなデータをデータバッファDataLatへ転送し、データバッファDataLatから読み出す動作が必要となる。そこで、まずバンクアドレスEBAddM1で指定されたメモリ装置M1のメモリバンクのデータバッファDataLat内のデータを無効化するため、プリチャージ命令Preと、バンクアドレスEBAddM1を生成する(図21:Step7)。
次に、新たなデータをデータバッファDataLatへ転送するためにバンクアクティブ命令ACとバンクアドレスEBAddM1およびページアドレスEPAddM1を生成する。最後に、データバッファDataLatから32バイト分のデータを読み出すためにリード命令RD32とカラムアドレスECAddM1を生成する(図21:Step7)。また、プリチャージ命令Preと、バンクアドレスEBAddM1を含むリクエストがメモリ制御回路DCMCからメモリモジュールMEMへ出力された際には、メモリ装置M1のバンクアドレスEBAddM1で指定されたメモリバンクに対応するバンク活性化信号AValidはLowへ更新され保持される。また、バンクアクティブ命令ACとバンクアドレスEBAddM1およびページアドレスEPAddM1を含むリクエストがメモリ制御回路DCMCからメモリモジュールMEMへ出力された際には、メモリ装置M1のバンクアドレスEBAddM1で指定されたメモリバンクに対応するバンク活性化信号AValidはHighへ更新され保持され、さらにページアドレス値PAddM1は新たなページアドレスEPAddM1へ更新され、保持される。
判定結果がチャネルミスかつページミスでバンク活性化信号AValidがLowの場合、メモリ装置M1のページアドレスミスとなったメモリバンクのデータバッファDataLaはすでに無効化状態となっている。そこで、新たなデータをデータバッファDataLatへ転送するためにバンクアクティブ命令ACとバンクアドレスEBAddM1およびページアドレスEPAddM1を生成する。最後に、データバッファDataLatから32バイト分のデータを読み出すためにリード命令RD32とカラムアドレスECAddM1を生成する(図21:Step7)。また、バンクアクティブ命令ACとバンクアドレスEBAddM1およびページアドレスEPAddM1を含むリクエストがメモリ制御回路DCMCからメモリモジュールMEMへ出力された際には、メモリ装置M1のバンクアドレスEBAddM1で指定されたメモリバンクに対応するバンク活性化信号AValidはHighへ更新され保持され、さらにページアドレス値PAddM1は新たなページアドレスEPAddM1へ更新され、保持される。
判定結果がチャネルミスかつページアドレスヒットで、バンク活性化信号AValidがLowの場合、メモリ装置M1のページアドレスヒットとなったメモリバンクのデータバッファDataLaはすでに無効化状態となっている。そこで、新たなデータをデータバッファDataLatへ転送するためにバンクアクティブ命令ACm1とバンクアドレスEBAddM1およびページアドレスEPAddM1を生成する。最後に、データバッファDataLatから32バイト分のデータを読み出すためにリード命令RD32とカラムアドレスECAddM1を生成する(図21:Step7)。また、バンクアクティブ命令ACとバンクアドレスEBAddM1およびページアドレスEPAddM1を含むリクエストがメモリ制御回路DCMCからメモリモジュールMEMへ出力された際には、メモリ装置M1のバンクアドレスEBAddM1で指定されたメモリバンクに対応するバンク活性化信号AValidはHighへ更新され保持される。さらに、コマンド生成回路COMGENは自らが生成した命令や、レスポンスキュー番号RsQNoおよびアドレス(バンクアドレス、ページアドレスおよびカラムアドレス)や、ライトデータを含むリクエストに対し、特に限定しないがリクエスト開始フラグReqStFlag、識別番号ID、リクエスト番号ReqN、マスター番号MID、可変部リクエスト長VREQLなどを付加し、特に限定しないがリクエスト開始フラグReqStFlg、識別番号ID、命令、マスター番号MID、可変部リクエスト長、リクエスト番号ReqN、アドレス(バンクアドレス、ページアドレスおよびカラムアドレス)、ライトデータの順でリクエストを再構成する。
リクエスト開始フラグReqStFlg、識別番号ID、命令、マスター番号MID、可変部リクエスト長VREQL、リクエスト番号ReqNは、どのリクエストに対しても共通の構成となっている共通リクエスト部分CMNREQFであり、特に限定しないが、4バイト分の固定したリクエスト長となっている。また、アドレス(バンクアドレス、ページアドレスおよびカラムアドレス)やライトデータは命令によって、そのリクエスト長が異なる可変リクエスト部分VBREQFであり、可変部リクエスト長VREQLによって、そのリクエスト長さが示される。リクエスト開始フラグReqStFlagがHighの場合はリクエストが開始されることを示し、Lowの場合はリクエストが発生していないことを示す。リクエスト番号ReqNは、コマンド生成回路COMGENが再構成したリクエストを識別するための番号であり、0から始まり255まで1つずつカウントアップしながら付加される。また、可変部リクエスト長VREQLはリクエストの長さをバイト単位で示す。
ここでは判定結果がチャネルミスかつページアドレスヒット且つバンク活性化信号AValidがLowの場合に、コマンド生成回路COMGENより生成されたバンクアクティブ命令ACとリード命令RD32および、これらの命令に対するアドレスを含むリクエストに対するリクエストの再構成について説明する。
先ず、識別番号IDとリクエスト番号ReqNの付加について説明する。コマンド生成回路COMGENによって、完了通知を必要としないバンクアクティブ命令ACとバンクアドレスEBAddM1およびページアドレスEPAddM1を含むリクエストは、リクエスト開始フラグReqStFlg値1、識別番号ID値2、完了通知を必要としないバンクアクティブ命令AC、マスター番号MID値2、可変部リクエスト長VREQL値3、リクエスト番号ReqN値10、アドレス(バンクアドレスおよびページアドレス)の順で再生成され、バンクアクティブ・リクエストReqACID2Seq10として持される(図21:Step8)。また、このバンクアクティブ・リクエストReqACID2Seq10は完了通知を必要としないリクエストである。続いて、32バイトデータのリード命令RD32とカラムアドレスECAddM1を含むリクエストは、リクエスト開始フラグReqStFlg値1、識別番号ID値2、リード命令RD32、マスター番号MID値2、可変部リクエスト長VREQL値3、リクエスト番号ReqN値11、アドレス(バンクアドレスおよびカラムアドレス)、リードデータサイズRSIZE値32の順で再生成され、リードリクエストReqRD32ID2Seq11として保持される(図21:Step8)。
リクエストキューREQQ2は、複数のリクエストキューから構成され、リクエストを受け取るための空き状態のリクエストキューが無ければ(図21:Step9)格納せず、空き状態のリクエストキューが出来るまで待つ。空き状態のリクエストキューがあれば(図21:Step9)アクティブ・リクエストReqACID2Seq10およびリードリクエストReqRD32ID2Seq11をリクエストキューREQQ2へ格納する(図21:Step10)。
リクエスト出力回路RQOUTは、コンフィグレーション回路CONFIG内のメモリ装置M0に関するタイミングレジスタM0TREGの設定値と、メモリ装置M1に関するタイミングレジスタM1TREGの設定値と、メモリ装置M2に関するタイミングレジスタM2TREGの設定値を受け取り、これらのタイミング設定値に従い、リクエストキューREQQ2から送信されたリクエストを、メモリモジュールMEMの各メモリ装置へ発行する回路である。また、リクエスト出力回路RQOUTは、完了通知を必要とするリクエストをメモリモジュールMEM内の、ある特定のメモリ装置へ発行した場合は、そのメモリ装置からの完了通知を情報処理装置CPU_CHIPが受け取って後に、リクエスト出力回路RQOUTは、そのメモリ装置へ次のリクエストを発行する。具体的に説明すると、リクエスト出力回路RQOUTは、完了通知を必要とするリクエストをメモリモジュールMEM内のメモリ装置M2へ発行した場合は、メモリ装置M2からの完了通知を情報処理装置CPU_CHIPが受け取って後に、リクエスト出力回路RQOUTはメモリ装置M2へ、次のリクエストを発行する。さらに、情報処理装置CPU_CHIPがメモリ装置M2からの完了通知を待っている間に、リクエスト出力回路RQOUTは、他のメモリ装置M0やM1へのリクエストを発行できることは言うまでもない。
まず、リクエスト出力回路RQOUTは、リクエストキューREQQ2にリクエストが保持されているかをチェックする(図21:Step12)。リクエストキューREQQ2にリクエストが保持されていれば、そのリクエストがリードリクエストあるいは完了通知を必要とするリクエストであるかをチェックする(図21:Step13)。
アクティブリクエストReqACID2Seq10は完了通知を必要としないリクエストであり、さらにリードリクエストではないので、アクティブ・リクエストReqACID2Seq10の識別番号ID値は2のため、リクエスト出力回路RQOUTは、メモリ装置M1に関するタイミングレジスタM1TREGに設定されているタイミング情報をチェックし、アクティブ・リクエストReqACID2Seq10が発行できるかを判断する(図21:Step16)。
次に、リクエスト出力回路RQOUTは、アクティブ・リクエストReqACID2Seq10が発行できる状態であれば、すぐに、アクティブ・リクエストReqACID2Seq10をメモリモジュールMEMへ発行する(図21:Step17)。メモリ装置M0のリクエストキュー回路RqQIに空き状態のリクエストキューがない場合、発行したアクティブ・リクエストReqACID2Seq10を、メモリ装置M0が受信できない。このように、発行したアクティブ・リクエストReqACID2Seq10を、メモリ装置M0が受信できない場合は、アクティブ・リクエストReqACID2Seq10の発行直後に、メモリ装置M0はレスポンス信号RsMux0を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID2Seq10をメモリ制御回路DCMCのレスポンス入力回路RSINへ送信する(図21:Step18)。レスポンスResNoAccID2Seq10はレスポンス開始フラグResStFlag値1、識別番号ID値2、バンクアクティブ命令ACm1、マスター番号MID値2、レスポンス番号RESN値10(リクエスト番号REQN値10と等しい値)および受信不可能情報NOACCから構成される。レスポンス入力回路RSINは、入力されたレスポンスResNoAccID2Seq10をリクエスト出力回路RQOUTへ送信する。リクエスト出力回路RQOUTは、レスポンスResNoAccID2Seq10に含まれる識別番号ID値2、バンクアクティブ命令AC、マスター番号MID値2、レスポンス番号ResN値10および受信不可能情報NOACCによって、再度、アクティブ・リクエストReqACID2Seq10を発行する(図21:Step17)。発行したアクティブ・リクエストReqACID2Seq10を、メモリ装置M0が受信した場合は、メモリ装置M0からの受信不可能情報NOACCという情報を含んだレスポンスが送信されない(図21:Step18)。
アクティブ・リクエストReqACID2Seq10が発行され、メモリ装置M0が受信した後、リクエスト出力回路RQOUTは、リクエストキューREQQ2にリクエストが保持されているかをチェックする(図21:Step12)。リクエストキューREQQ2にリクエストが保持されていれば、そのリクエストがリードリクエストであるか、あるいは完了通知を必要とするリクエストであるかをチェックする(図21:Step13)。リクエストReqRD32ID2Seq11はリードリクエストのため、リクエスト出力回路RQOUTは、キュー管理回路QMGTを通じてレスポンスキューRESQ1が装備している複数のレスポンスキューの中で、予約されていない空き状態のレスポンスキューがあるかどうかをチェックする(図21:Step14)。
レスポンスキューRESQ1内に予約されていない空き状態のレスポンスキューが無ければ、予約されていない空き状態のレスポンスキューができるまで待つ(図21:Step14)。レスポンスキューRESQ1内に予約されていない空き状態のレスポンスキューがあれば、キュー管理回路QMGTを通じてレスポンスキューRESQ1の空き状態のレスポンスキューの一部へリードリクエストReqRD32ID2Seq11内の識別番号ID値2とリクエスト番号ReqN値11をコピーし、リードリクエストReqRD32ID2Seq11に対応したレスポンスを受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する(図21:Step15)。
キュー管理回路QMGTは、メモリ制御回路DCMCが持つレスポンスキュー回路RESQ1内のレスポンスキュー数、予約されていない空き状態のレスポンスキュー数、予約された空き状態のレスポンスキュー数、すでにレスポンスが格納されている占有状態のレスポンスキュー数を管理している。さらに、キュー管理回路QMGTは、メモリ装置M0、M1およびM2が持つレスポンスキュー回路RsQoとレスポンスキュー回路RsQp内のレスポンスキュー数、予約されていない空き状態のレスポンスキュー数、予約された空き状態のレスポンスキュー数、すでにレスポンスが格納されている占有状態のレスポンスキュー数を管理している。
キュー管理回路QMGTは、予約されていない空き状態のレスポンスキューが前もって確保された場合は、特に限定しないがレスポンスキューRESQ1内の予約されていない空き状態のレスポンスキュー数を1つ減らし、予約された空き状態のレスポンスキュー数を1つ増やす。さらに、キュー管理回路QMGTは識別番号ID値2に対応するレスポンスキュー回路RsQoの予約されていない空き状態のレスポンスキュー数を1つ減らし、予約された空き状態のレスポンスキュー数を1つ増やし、識別番号ID値1に対応するメモリ装置M0のレスポンスキュー回路RsQp内の予約されていない空き状態のレスポンスキュー数を1つ減らし、予約された空き状態のレスポンスキュー数を1つ増やす(図21:Step14)。
リードリクエストReqRD32ID2Seq11の識別番号ID値は2のため、リクエスト出力回路RQOUTは、メモリ装置M1に関するタイミングレジスタM1TREGに設定されているタイミング情報をチェックし、リードリクエストReqRD32ID2Seq11が発行できるかを判断する(図21:Step16)。次に、リクエスト出力回路RQOUTは、リードリクエストReqRD32ID2Seq11が発行できる状態であれば、リードリクエストReqRD32ID2Seq11を発行することをレイテンシ調整回路LCHCKへ通達し、リードリクエストReqRD32ID2Seq11をメモリモジュールMEMへ発行する(図21:Step17)。
レイテンシ調整回路LCHCKは、リクエスト出力回路RQOUTからのリードリクエストReqRD32ID2Seq11発行の通達を受けて、レイテンシの測定を開始する。メモリ装置M0のリクエストキュー回路RqQIに空き状態のリクエストキューがない場合、発行したリードリクエストReqRD32ID2Seq11を、メモリ装置M0が受信できない。このように、発行したリードリクエストReqRD32ID2Seq11を、メモリ装置M0が受信できない場合は、リードリクエストReqRD32ID2Seq11の発行直後に、メモリ装置M0はレスポンス信号RsMux0を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID2Seq11をメモリ制御回路DCMCのレスポンス入力回路RSINへ送信する(図21:Step18)。
レスポンスResNoAccID2Seq11はレスポンス開始フラグResStFlag値1、識別番号ID値2、リード命令RD32、マスター番号MID値2、レスポンス番号ResN値11(リクエスト番号ReqN値11と等しい値)および受信不可能情報NOACCから構成される。レスポンス入力回路RSINは、入力されたレスポンスResNoAccID2Seq11をリクエスト出力回路RQOUTへ送信する。リクエスト出力回路RQOUTは、レスポンスResNoAccID2Seq11に含まれる識別番号ID値2、リード命令RD32マスター番号MID値2、レスポンス番号ResN値11および受信不可能情報NOACCによって、再度、リードリクエストReqRD32ID2Seq11を発行することをレイテンシ調整回路LCHCKへ通達し、リードリクエストReqRD32ID2Seq11をメモリモジュールMEMへ発行する(図21:Step17)。
レイテンシ調整回路LCHCKは、リクエスト出力回路RQOUTからのリードリクエストReqRD32ID2Seq11の再発行の通達を受けて、今まで測定したレイテンシの値をすべて無効にし、再度、最初からレイテンシの測定を開始する。発行したリードリクエストReqRD32ID2Seq11を、メモリ装置M0が受信した場合は、メモリ装置M0からの受信不可能情報NOACCという情報を含んだレスポンスが送信されない(図21:Step18)。
リクエストReqRD32ID2Seq11に対する読み出しデータを含んだレスポンスResRD32ID2Seq11がメモリ制御回路DCMCのレスポンス入力回路RSINへ入力され、レスポンスキューRESQ1へ格納されると、キュー管理回路QMGTは、レスポンスキューRESQ1内のレスポンスが格納されている占有状態のレスポンスキュー数、レスポンスキューRESQ1内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する。
さらに、レスポンスキューRESQ1に格納されているレスポンスResRD32ID2Seq11が、情報処理回路CPU2へ送信されると、キュー管理回路QMGTは、レスポンスキューRESQ1へ保持されているレスポンスResRD32ID2Seq11を削除し、再度、レスポンスキューRESQ1内のレスポンスが格納されている占有状態のレスポンスキュー数、レスポンスキューRESQ1内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する。
次に、リクエストキューREQQ2へ完了通知を必要とするアクティブリクエストReqACwithCompletionID3Seq10とリードリクエストReqRD32ID3Seq11が保持されている場合の動作の一例を示す。アクティブリクエストReqACwithCompletionID3Seq10には、リクエスト開始フラグReqStFlg値1、識別番号ID値3、完了通知を必要とするバンクアクティブ命令ACwithCompletion、マスター番号MID値2、可変部リクエスト長VREQL値3、リクエスト番号ReqN値10、アドレス(バンクアドレスおよびページアドレス)が含まれる。リードリクエストReqRD32ID3Seq11には、リクエスト開始フラグReqStFlg値1、識別番号ID値3、リード命令RD32、マスター番号MID値2、可変部リクエスト長VREQL値3、リクエスト番号ReqN値11、リクエスト番号ReqN値11、アドレス(バンクアドレスおよびカラムアドレス)、リードデータサイズRSIZE値32が含まれる。
まず、リクエスト出力回路RQOUTは、リクエストキューREQQ2にリクエストが保持されているかをチェックする(図21:Step12)。リクエストキューREQQ2にリクエストが保持されていれば、そのリクエストがリードリクエストあるいは完了通知を必要とするリクエストであるかをチェックする(図21:Step13)。
アクティブリクエストReqACwithCompletionID3Seq10は完了通知を必要とするリクエストのため、リクエスト出力回路RQOUTは、キュー管理回路QMGTを通じてレスポンスキューRESQ1が装備している複数のレスポンスキューの中で、予約されていない空き状態のレスポンスキューがあるかどうかをチェックする(図21:Step14)。
レスポンスキューRESQ1内に予約されていない空き状態のレスポンスキューが無ければ、予約されていない空き状態のレスポンスキューができるまで待つ(図21:Step14)。レスポンスキューRESQ1内に予約されていない空き状態のレスポンスキューがあれば、キュー管理回路QMGTを通じてレスポンスキューRESQ1の空き状態のレスポンスキューの一部へアクティブリクエストReqACwithCompletionID3Seq10内の識別番号ID値3とリクエスト番号ReqN値10をコピーし、アクティブリクエストReqACwithCompletionID3Seq10に対する完了通知情報を含んだレスポンスACwithCompletionResID3Seq10を受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する(図21:Step15)。
アクティブリクエストReqACwithCompletionID3Seq10の識別番号ID値は3のため、リクエスト出力回路RQOUTは、メモリ装置M2に関するタイミングレジスタM2TREGに設定されているタイミング情報をチェックし、アクティブ・リクエストReqACwithCompletionID3Seq10が発行できるかを判断する(図21:Step16)。
次に、リクエスト出力回路RQOUTは、アクティブリクエストReqACwithCompletionID3Seq10が発行できる状態であれば、すぐに、アクティブ・リクエストアクティブリクエストReqACwithCompletionID3Seq10をメモリモジュールMEMへ発行する(図21:Step17)。
メモリ装置M0のリクエストキュー回路RqQIに空き状態のリクエストキューがない場合、発行したアクティブ・リクエストReqACwithCompletionID3Seq10を、メモリ装置M0が受信できない。このように、発行したアクティブ・リクエストReqACID2Seq10を、メモリ装置M0が受信できない場合は、アクティブ・リクエストReqACwithCompletionID3Seq10の発行直後に、メモリ装置M0はレスポンス信号RsMux0を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID3Seq10をメモリ制御回路DCMCのレスポンス入力回路RSINへ送信する(図21:Step18)。レスポンスResNoAccID3Seq10はレスポンス開始フラグResStFlag値1、識別番号ID値2、バンクアクティブ命令ACwithCompletion、マスター番号MID値3、レスポンス番号ResN値10(リクエスト番号ReqN値10と等しい値)および受信不可能情報NOACCから構成される。レスポンス入力回路RSINは、入力されたレスポンスResNoAccID3Seq10をリクエスト出力回路RQOUTへ送信する。リクエスト出力回路RQOUTは、レスポンスResNoAccID3Seq10に含まれる識別番号ID値3、バンクアクティブ命令ACwithCompletion、マスター番号MID値3、レスポンス番号ResN値10および受信不可能情報NOACCによって、再度、アクティブ・リクエストReqACwithCompletionID3Seq10を発行する(図21:Step17)。発行したアクティブ・リクエストReqACwithCompletionID3Seq10を、メモリ装置M0が受信した場合は、メモリ装置M0からの受信不可能情報NOACCという情報を含んだレスポンスが送信されない(図21:Step18)。
アクティブ・リクエストReqACwithCompletionID3Seq10が発行され、メモリ装置M0が受信した後、リクエスト出力回路RQOUTは、リクエストキューREQQ2にリクエストが保持されているかをチェックする(図21:Step12)。リクエストキューREQQ2にリクエストが保持されていれば、そのリクエストがリードリクエストであるか、あるいは完了通知を必要とするリクエストであるかをチェックする(図21:Step13)。リードリクエストReqRD32ID3Seq11はリードリクエストのため、リクエスト出力回路RQOUTは、キュー管理回路QMGTを通じてレスポンスキューRESQ1が装備している複数のレスポンスキューの中で、予約されていない空き状態のレスポンスキューがあるかどうかをチェックする(図21:Step14)。
レスポンスキューRESQ1内に予約されていない空き状態のレスポンスキューが無ければ、予約されていない空き状態のレスポンスキューができるまで待つ(図21:Step14)。レスポンスキューRESQ1内に予約されていない空き状態のレスポンスキューがあれば、キュー管理回路QMGTを通じてレスポンスキューRESQ1の空き状態のレスポンスキューの一部へリードリクエストReqRD32ID2Seq11内の識別番号ID値2とリクエスト番号ReqN値11をコピーし、リードリクエストReqRD32ID2Seq11に対応したレスポンスを受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する(図21:Step15)。
リードリクエストReqRD32ID3Seq11の識別番号ID値は3のため、リクエスト出力回路RQOUTは、メモリ装置M2へのアクティブリクエストReqACwithCompletionID3Seq10に対する完了通知情報を含んだレスポンスACwithCompletionResID3Seq10がレスポンス入力回路RSINへ入力され、レスポンスキューRESQ1へ保持されているかをチェックする(図21:Step16)。
レスポンスキューRESQ1へレスポンスACwithCompletionResID3Seq10が保持されていれば、リクエスト出力回路RQOUTはリードリクエストReqRD32ID3Seq11を発行することをレイテンシ調整回路LCHCKへ通達し、リードリクエストReqRD32ID3Seq11をメモリモジュールMEMへ発行する(図21:Step17)。さらに、リクエスト出力回路RQOUTはリードリクエストReqRD32ID3Seq11をメモリモジュールMEMへ発行したことをキュー管理回路QMGTへ通達する。その後、キュー管理回路QMGTは、レスポンスキューRESQ1へ保持されているレスポンスACwithCompletionResID3Seq10を削除し、再度、レスポンスキューRESQ1内のレスポンスが格納されている占有状態のレスポンスキュー数、予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する。
レイテンシ調整回路LCHCKは、リクエスト出力回路RQOUTからのリードリクエストReqRD32ID3Seq11発行の通達を受けて、レイテンシの測定を開始する。メモリ装置M0のリクエストキュー回路RqQIに空き状態のリクエストキューがない場合、発行したリードリクエストReqRD32ID3Seq11を、メモリ装置M0が受信できない。このように、発行したリードリクエストReqRD32ID3Seq11を、メモリ装置M0が受信できない場合は、リードリクエストReqRD32ID3Seq11の発行直後に、メモリ装置M0はレスポンス信号RsMux0を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID3Seq11をメモリ制御回路DCMCのレスポンス入力回路RSINへ送信する(図21:Step18)。
レスポンスResNoAccID3Seq11はレスポンス開始フラグResStFlag値1、識別番号ID値3、リード命令RD32、マスター番号MID値3、レスポンス番号ResN値11(リクエスト番号ReqN値11と等しい値)および受信不可能情報NOACCから構成される。レスポンス入力回路RSINは、入力されたレスポンスResNoAccID3Seq11をリクエスト出力回路RQOUTへ送信する。リクエスト出力回路RQOUTは、レスポンスResNoAccID3Seq11に含まれる識別番号ID値3、リード命令RD32、マスター番号MID値3、レスポンス番号ResN値11および受信不可能情報NOACCによって、再度、リードリクエストReqRD32ID3Seq11を発行することをレイテンシ調整回路LCHCKへ通達し、リードリクエストReqRD32ID2Seq11をメモリモジュールMEMへ発行する(図21:Step17)。
レイテンシ調整回路LCHCKは、リクエスト出力回路RQOUTからのリードリクエストReqRD32ID3Seq11の再発行の通達を受けて、今まで測定したレイテンシの値をすべて無効にし、再度、最初からレイテンシの測定を開始する。発行したリードリクエストReqRD32ID3Seq11を、メモリ装置M0が受信した場合は、メモリ装置M0からの受信不可能情報NOACCという情報を含んだレスポンスが送信されない(図21:Step18)。
<情報処理装置CPU_CHIPとメモリモジュールMEM間のデータ転送>
情報処理装置CPU_CHIPとメモリモジュールMEM間のデータ転送について、図1から図8および図22から図23を利用し説明する。
図22は情報処理装置CPU_CHIPからメモリモジュールMEMへのリクエストに対する動作の一例を示すフローチャートである。図23はメモリモジュールMEMから情報処理装置CPU_CHIPへのレスポンスに対する動作の一例を示すフローチャートである。
まず、本実施の形態の動作を説明する前に、動作の前提となる各レジスタの状態等について説明する。メモリ装置M0、M1、M2のそれぞれのIDレジスタIDR値が1、2及び3に設定されている。コンフィグレーション回路CONFIG内の各レジスタは図10から図18に示した値に設定されている。メモリ制御回路DCMCのリクエストキュー回路REQQ2のリクエストキュー数は12で、このリクエストキューはすべて空き状態である。また、メモリ制御回路DCMCのレスポンスキュー回路RESQ1のリクエストキュー数は24で、このレスポンスキューはすべて空き状態である。また、メモリ装置M0のリクエストキュー回路RqQIのリクエストキュー数は12で、リクエストキュー回路RqQXIのリクエストキュー数は4で、リクエストキュー回路RqQXOのリクエストキュー数は8で、これらのリクエストキューはすべて空き状態である。また、メモリ装置M0のレスポンスキュー回路RsQoのリクエストキュー数は8で、レスポンスキュー回路RsQpのレスポンスキュー数は16で、これらのレスポンスキューはすべて空き状態である。また、メモリ装置M1のリクエストキュー回路RqQIのリクエストキュー数は8で、リクエストキュー回路RqQXIのリクエストキュー数は4で、リクエストキュー回路RqQXOのリクエストキュー数は4で、これらのリクエストキューにはリクエストがエントリされていない。また、メモリ装置M1のレスポンスキュー回路RsQoのリクエストキュー数は8で、レスポンスキュー回路RsQpのレスポンスキュー数は8で、これらのレスポンスキューはすべて空き状態である。また、メモリ装置M2のリクエストキュー回路RqQIのリクエストキュー数は4で、リクエストキュー回路RqQXIのリクエストキュー数は4で、リクエストキュー回路RqQXOのリクエストキュー数は4で、これらのリクエストキューにはリクエストがエントリされていない。また、メモリ装置M2のレスポンスキュー回路RsQoのリクエストキュー数は8で、レスポンスキュー回路RsQpのレスポンスキュー数は8で、これらのレスポンスキューはすべて空き状態である。また、メモリ装置M0、M1およびM2の全メモリバンクは非活性となっている。また、メモリ装置M0、M1およびM2へのリクエストは、情報処理装置CPU_CHIPの情報処理回路CPU3からのリクエストである。情報処理装置CPU_CHIPからメモリ装置M0、M1およびM2へのリクエストは、4バイトの共通リクエスト部CMNREQFと、最大36バイトの可変リクエスト部VBREQFから構成される。共通リクエスト部CMNREQFはリクエスト開始フラグReqStFlg、識別番号ID、命令、マスター番号MID、可変部リクエスト長VREQL、リクエスト番号REQNから構成される。可変リクエスト部VBREQFは、4バイトのアドレスおよび最大32バイトのライトデータから構成される。可変部リクエスト長VREQLは可変リクエスト部VBREQFの長さをバイト単位で表している。メモリ装置M0、M1およびM2が装備する1つのリクエストキューは、4バイトの共通リクエスト部CMNREQFと、最大36バイトの可変リクエスト部VBREQFを格納できる。また、メモリ装置M0、M1およびM2から情報処理装置CPU_CHIPへのレスポンスは、4バイトの共通レスポンス部CMNRESFと、最大32バイトのリードデータから構成される。共通レスポンス部CMNRESFはレスポンス開始フラグResStFlag、識別番号ID、命令、マスター番号MID、リードデータ長RDL、レスポンス番号ResNから構成される。リードデータ長RDLはリードデータの長さをバイト単位で表している。メモリ装置M0、M1およびM2が装備する1つのレスポンスキューは、4バイトの共通レスポンス部CMNRESFと、最大32バイトのリードデータを格納できる。
先ず、情報処理装置CPU_CHIPとメモリ装置M0のデータ転送について説明する。情報処理装置CPU_CHIPのメモリ制御回路DCMCは、リクエスト信号RqMux0を通じて、リクエスト開始フラグReqStFlag値1、識別番号ID値1、完了通知情報が不要のバンクアクティブ命令AC、マスター番号MID値3(情報処理回路CPU3のマスター番号ID)、可変部リクエスト長VREQL値4、リクエスト番号ReqN値15、バンクアドレスBK0、ロウアドレスRow63を多重化したリクエストReqACID1SEQ15をクロック信号RqCK0に同期させ、メモリ装置M0へ転送する(図22:Step1)。
リクエストReqACID1SEQ15がメモリ装置M0へ入力するとキューチェック回路RQQMは、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在するかをチェックする(図22:Step2)。リクエストキュー回路RqQI内で空き状態のリクエストキューが存在する場合は、メモリ装置M0は、情報処理装置CPU_CHIPからのリクエストReqACID1SEQ15を自身のリクエストキュー回路RqQIのリクエストキューへ格納する(図22:Step3)。また、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在しない場合は、リクエストReqACID1SEQ15をメモリ装置M0が受信できないので、リクエストReqACID1SEQ15の発行直後に、メモリ装置M0はレスポンス信号RsMux0を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID1Seq15をメモリ制御回路DCMCのレスポンス入力回路RSINへ送信する。
レスポンスResNoAccID1Seq15はレスポンス開始フラグResStFlag値1、識別番号ID値1、バンクアクティブ命令AC、マスター番号MID値3、レスポンス番号ResN値15(リクエスト番号ReqN値15と等しい値)および受信不可能情報NOACCから構成される。レスポンス入力回路RSINは、入力されたレスポンスResNoAccID1Seq15をリクエスト出力回路RQOUTへ送信する。リクエスト出力回路RQOUTは、レスポンスResNoAccID1Seq15に含まれる識別番号ID値1、バンクアクティブ命令AC、マスター番号MID値3、レスポンス番号ResnN値15および受信不可能情報NOACCによって、再度、リクエストReqACID1SEQ15を発行する(図22:Step1)。
その後、ID比較回路CPQは、リクエストキュー回路RqQIのリクエストキューへエントリされたリクエストReqACID1SEQ15に含まれるID値1と、IDレジスタ回路IDRに保持されているID値1を比較する(図22:Step4)。比較結果が一致したため、リクエストReqACID1SEQ15は、リクエストキュー回路RqQXIへ転送される(図22:Step5)。次に、リクエストキュー回路RqQXIは格納しているリクエストがリード命令を含むか、あるいは完了通知情報を必要とするリクエストかどうかをチェックする(図22:Step6)。リクエストReqACID1SEQ15はリード命令を含んでおらず、さらに完了通知情報が不要のリクエストであるため、リクエストキュー回路RqQXIは格納しているリクエストReqACID1SEQ15をメモリ回路Mem0へ転送する(図22:Step11)。メモリ回路Mem0はリクエストReqACID1SEQ15に従って動作する(図22:Step12)。具体的には、メモリ回路Mem0のコマンドデコーダCmdDecはバンクアクティブ命令BAを解読し、制御回路Cont LogicによってメモリバンクBANK0が選択され、メモリバンクBANK0のロウアドレスバッファRadLatへロウアドレス63が格納され、ロウデコーダRowDecへ入力される。その後メモリ回路MBank0内のロウアドレス63に接続されているメモリセルが活性化され、1kByte分のデータがセンスアンプSenseAmpへ転送される(図22:Step12)。
情報処理装置CPU_CHIPのメモリ制御回路DCMCは、タイミングレジスタM0TREGに設定されているtm0RCD(バンクアクティブ命令とリードおよびライト命令の最小時間間隔)の値8に従い、リクエストReqACID1SEQ15転送後の8クロックサイクル以降に、32バイトデータのリード命令RD32を含むリクエストReqRD32ID1SEQ16(リクエスト開始フラグReqStFlag値1、識別番号ID値1、32バイトデータのリード命令RD32、マスター番号MID値3(情報処理回路CPU3のマスター番号ID)、可変部リクエスト長VREQL値4、リクエスト番号ReqN値16、バンクアドレスBK0およびカラムアドレスCol32から構成される)をメモリ装置M0へ転送するための動作を行う。
先ず、メモリ制御回路DCMCのリクエスト出力回路RQOUTはレスポンスキューRESQ1内の予約されていない空き状態のレスポンスキューがあるかをチェックし、この空き状態のレスポンスキューがあれば、リクエストReqRD32ID1SEQ16内の識別番号ID値1とリクエスト番号ReqN値16と等しいレスポンス番号ResN値16を、この空き状態のレスポンスキューへコピーし、リクエストReqRD32ID1SEQ16に対応したレスポンスResRD32ID1SEQ16を受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する。次にリクエスト出力回路RQOUTは、リクエスト信号RqMux0を通じて、ReqRD32ID1SEQ16をクロック信号RqCK0に同期させ、メモリ装置M0へ転送する(図22:Step1)。また、リクエスト出力回路RQOUTはリクエストReqRD32ID1SEQ16内の識別番号ID値1とリクエスト番号ReqN値16をレイテンシ調整回路LCHCKへ転送し、保持させる。次に、リクエストReqRD32ID1SEQ16の転送と同時に、レイテンシ調整回路LCHCKはリクエストReqRD32ID1SEQ16に対応したレスポンスResRD32ID1SEQ16に関するレイテンシの測定を開始する(図22:Step2)。
リクエストReqRD32ID1SEQ16がメモリ装置M0へ入力するとキューチェック回路RQQMは、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在するかをチェックする(図22:Step2)。リクエストキュー回路RqQI内で空き状態のリクエストキューが存在する場合は、メモリ装置M0は情報処理装置CPU_CHIPからのリクエストReqRD32ID1SEQ16を自身のリクエストキュー回路RqQIのリクエストキューへ格納する(図22:Step3)。
また、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在しない場合は、リクエストReqRD32ID1SEQ16をメモリ装置M0が受信できないため、リクエストReqRD32ID1SEQ16の発行直後に、メモリ装置M0はレスポンス信号RsMux0を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID1Seq16をメモリ制御回路DCMCのレスポンス入力回路RSINへ送信する。レスポンスResNoAccID1Seq16はレスポンス開始フラグResStFlag値1、識別番号ID値1、リード命令RD、マスター番号MID値3、レスポンス番号RESN値16(リクエスト番号REQN値16と等しい値)および受信不可能情報NOACCから構成される。レスポンス入力回路RSINは、入力されたレスポンスResNoAccID1Seq16をリクエスト出力回路RQOUTへ送信する。リクエスト出力回路RQOUTは、レスポンスResNoAccID1Seq16に含まれる識別番号ID値1、リード命令RD、マスター番号MID値3、レスポンス番号RESN値16および受信不可能情報NOACCによって、再度、リクエストReqRD32ID1SEQ16を発行することをレイテンシ調整回路LCHCKへ通達し、リクエストReqRD32ID1SEQ16を発行する(図22:Step1)。
レイテンシ調整回路LCHCKは、リクエスト出力回路RQOUTからのリクエストReqRD32ID1SEQ16の再発行の通達を受けて、今まで測定したレイテンシの値をすべて無効にし、再度、最初からレイテンシの測定を開始する。その後、ID比較回路CPQは、リクエストキュー回路RqQIのリクエストキューへエントリされたリクエストReqRD32ID1SEQ16に含まれるID値1と、IDレジスタ回路IDRに保持されているID値1を比較する(図22:Step4)。比較結果が一致したため、リクエストReqRD32ID1SEQ16は、リクエストキュー回路RqQXIへ転送される(図22:Step5)。
次に、リクエストキュー回路RqQXIは格納しているリクエストがリード命令を含むか、あるいは完了通知情報を必要とするリクエストかどうかをチェックする(図22:Step6)。リクエストReqRD32ID1SEQ16はリード命令を含んでいるため、リクエストキュー回路RqQXIは、レスポンスキュー回路RsQo内に、予約されていない空き状態のレスポンスキューがあるかをチェックする(図22:Step7)。レスポンスキュー回路RsQo内に予約されていない空き状態のレスポンスキューがなければ、予約されていない空き状態のレスポンスキューができるまでリクエストキュー回路RqQXIは、リクエストReqRD32ID1SEQ16の転送を中断する。レスポンスキュー回路RsQoに予約されていない空き状態のレスポンスキューがあれば、リクエストキュー回路RqQXIは、レスポンスキュー回路RsQoの予約されていない空き状態のレスポンスキューへリクエストReqRD32ID1SEQ16内の識別番号ID値1とリクエスト番号ReqN値16をコピーし、リクエストReqRD32ID1SEQ16に対応したメモリ回路Mem0からのリードデータを受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する(図22:Step8)。
また、メモリ装置M0のキューチェック回路RSQMは、メモリ装置M0のレスポンスキュー回路RsQoとレスポンスキュー回路RsQp内のレスポンスキュー数、予約されていない空き状態のレスポンスキュー数、予約された空き状態のレスポンスキュー数、すでにレスポンスが格納されている占有状態のレスポンスキュー数を管理している。リクエストキュー回路RqQXIがレスポンスキュー回路RsQoの予約されていない空き状態のレスポンスキューを予約した場合、キューチェック回路RSQMは、レスポンスキュー回路RsQo内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する(図22:Step8)。
次に、リクエストキュー回路RqQXIは格納しているリクエストReqRD32ID1SEQ16をメモリ回路Mem0へ転送する(図22:Step9)。メモリ回路Mem0はリクエストReqRD32ID1SEQ16に従って動作する(図22:Step10)。具体的には、32バイトデータリード命令RD32がコマンド信号Commandから、バンクアドレス0およびカラムアドレス32が、アドレス信号Addressよりメモリ回路Mem0へ送信される。
コマンドデコーダCmdDecは32バイトデータリード命令RD32を解読し、制御回路Cont LogicによってメモリバンクMBANK0が選択され、メモリバンクMBANK0のカラムアドレスバッファCAddLatへカラムアドレス32が格納され、カラムデコーダColDecへ入力される。その後、カラムアドレス32を開始アドレスとして、32バイト分のデータがセンスアンプSenseAmpから読み出され、データ制御回路DataContを介してリードデータバッファRDataLatへ格納される(図22:Step10)。その後、リードデータバッファRDataLatより読み出された32バイト分のデータは、レスポンス開始フラグResStFlag値1、識別番号ID値1(IDレジスタ値1と等しい値)、32バイトデータのリード命令RD32、マスター番号MID値3、リードデータ長RDL値32、レスポンス番号REQN値16(リクエスト番号ReqN値16と等しい値)から構成される共通レスポンス部CMNRESFが付加されて、レスポンスキュー制御回路RsCT内のレスポンスキューRsQoの予約された空き状態のレスポンスキューへレスポンスResRD32ID1SEQ16としてエントリされる(図23:Step17)。
メモリ装置M0のキューチェック回路RSQMは、メモリ装置M0のレスポンスキュー回路RsQoへレスポンスResRD32ID1SEQ16がエントリされると、レスポンスキュー回路RsQo内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step18)。次にレスポンススケジュール回路SCHは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスに対するレスポンス優先順位を決定する(図23:Step19)。レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスはResRD32ID1SEQ16のみのため、レスポンスResRD32ID1SEQ16のレスポンス優先順位が最も高い(図23:Step19)のでレスポンススケジュール回路SCHはレスポンスResRD32ID1SEQ16を、レスポンス信号RsMux0を通じて情報処理装置CPU_CHIPへ送信する(図23:Step20)。
メモリ制御回路DCMCは、レスポンスキューRESQ1内にレスポンスResRD32ID1SEQ16を受け取るための空き状態のレスポンスキューを前もって確保しているため、レスポンスResRD32ID1SEQ6はレスポンスキューRESQ1へ格納される。
メモリ装置M0のレスポンスキュー回路RsQo内のレスポンスResRD32ID1SEQ16が情報処理装置CPU_CHIPへ送信されると、キューチェック回路RSQMは、レスポンスキュー回路RsQo内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step21)。また、メモリ装置M0のレスポンスキュー回路RsQo内のレスポンスResRD32ID1SEQ16が情報処理装置CPU_CHIPへ送信される(図23:Step22)と、情報処理装置CPU_CHIPとメモリ装置M0間のデータ転送は完了する(図23:Step23)。
また、メモリ装置M0のレスポンスキュー回路RsQo内のレスポンスResRD32ID1SEQ1が情報処理装置CPU_CHIPへ送信されると、メモリ制御回路DCMCのレスポンス入力回路RSINがレスポンスResRD32ID1SEQ1を受け取り、レスポンスResRD32ID1SEQ1に含まれている識別番号ID値1とレスポンス番号ResN値16を取り出し、レイテンシ調整回路LCHCKへ送付する。レイテンシ調整回路LCHCKは、これらの識別番号ID値1とレスポンス番号ResN値16によってリクエストReqRD32ID1SEQ1のレスポンスResRD32ID1SEQ1が返ってきたことを知り、レイテンシの測定を終了する。レイテンシ調整回路LCHCKは、レイテンシの測定結果とコンフィグレーション回路CONFIG内のレイテンシレジスタLTREGへ設定されている識別番号ID値1に対応するレイテンシLatBank値8クロックサイクルと比較する。比較した結果、その差分が許容範囲を超えていれば、レイテンシ調整回路LCHCKは、今後、発生するリードリクエストに対する測定したレイテンシがレイテンシLatBank値8クロックサイクルと等しくなるようにレイテンシ補正動作を行う。また、比較した結果、その差分が許容範囲以内であればレイテンシ調整回路LCHCKは、レイテンシ補正動作を行わない。なお、レイテンシ補正動作については後述する。
また、レスポンスキューRESQ1へレスポンスResRD32ID1SEQ6が格納されると、キュー管理回路QMGTは、再度、レスポンスキューRESQ1内のレスポンスが格納されている占有状態のレスポンスキュー数、レスポンスキューRESQ1内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する。
さらに、レスポンスキューRESQ1に格納されているレスポンスResRD32ID1SEQ16が、情報処理回路CPU3へ送信されると、キュー管理回路QMGTは、レスポンスキューRESQ1へ保持されているレスポンスResRD32ID1SEQ16を削除し、再度、レスポンスキューRESQ1内のレスポンスが格納されている占有状態のレスポンスキュー数、レスポンスキューRESQ1内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する。
次に、情報処理装置CPU_CHIPとメモリ装置M1間のデータ転送の一例について説明する。情報処理装置CPU_CHIPのメモリ制御回路DCMCは、リクエスト信号RqMux0を通じて、リクエスト開始フラグReqStFlag値1、識別番号ID値2、完了通知が不要のバンクアクティブ命令AC、マスター番号MID値3(情報処理回路CPU3のマスター番号ID)、可変部リクエスト長VREQL値4、リクエスト番号ReqN値15、バンクアドレスBK0、ページアドレスRow63を多重化したリクエストReqACID2SEQ15をクロック信号RqCK0に同期させ、メモリ装置M0へ転送する(図22:Step1)。リクエストReqACID2SEQ15がメモリ装置M0へ入力するとキューチェック回路RQQMは、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在するかをチェックする(図22:Step2)。リクエストキュー回路RqQI内で空き状態のリクエストキューが存在する場合は、メモリ装置M0は、情報処理装置CPU_CHIPからのリクエストReqACID2SEQ15を自身のリクエストキュー回路RqQIのリクエストキューへ格納する(図22:Step3)。また、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在しない場合は、リクエストReqACID2SEQ15をメモリ装置M0が受信できないので、リクエストReqACID2SEQ15の発行直後に、メモリ装置M0はレスポンス信号RsMux0を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID2Seq15をメモリ制御回路DCMCのレスポンス入力回路RSINへ送信する。レスポンスResNoAccID2Seq15はレスポンス開始フラグResStFlag値1、識別番号ID値2、バンクアクティブ命令AC、マスター番号MID値3、レスポンス番号RESN値15(リクエスト番号REQN値15と等しい値)および受信不可能情報NOACCから構成される。
レスポンス入力回路RSINは、入力されたレスポンスResNoAccID2Seq15をリクエスト出力回路RQOUTへ送信する。リクエスト出力回路RQOUTは、レスポンスResNoAccID2Seq15に含まれる識別番号ID値2、バンクアクティブ命令AC、マスター番号MID値3、レスポンス番号RESN値15および受信不可能情報NOACCによって、再度、リクエストReqACID2SEQ15を発行する(図22:Step1)。その後、ID比較回路CPQは、リクエストキュー回路RqQIのリクエストキューへエントリされたリクエストReqACID2SEQ15に含まれるID値2と、IDレジスタ回路IDRに保持されているID値1を比較する(図22:Step4)。比較結果が不一致のため、リクエストReqACID2SEQ15は、リクエストキュー回路RqQXOへ転送される(図22:Step13)。
次に、リクエストキュー回路RqQXOは格納しているリクエストがリード命令を含むか、あるいは完了通知情報を必要とするリクエストかどうかをチェックする(図22:Step14)。リクエストReqACID2SEQ15はリード命令を含んでおらず、さらに完了通知情報が必要ないリクエストのため、メモリ装置M0はリクエスト信号RqMux1を通じて、リクエストReqACID2SEQ15をメモリ装置M1へ転送する(図22:Step1)。リクエストReqACID2SEQ15がメモリ装置M1へ入力するとメモリ装置M1のキューチェック回路RQQMは、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在するかをチェックする(図22:Step2)。
リクエストキュー回路RqQI内で空き状態のリクエストキューが存在する場合は、メモリ装置M1は、メモリ装置M0からのリクエストReqACID2SEQ15を自身のリクエストキュー回路RqQIのリクエストキューへ格納する(図22:Step3)。また、メモリ装置M1のリクエストキュー回路RqQI内で空き状態のリクエストキューが存在しない場合は、リクエストReqACID2SEQ15をメモリ装置M1が受信できないので、リクエストReqACID2SEQ15の発行直後に、メモリ装置M1はレスポンス信号RsMux1を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID2Seq15をメモリ装置M0へ送信する。
メモリ装置M0は、レスポンスResNoAccID2Seq15に含まれる識別番号ID値2、バンクアクティブ命令AC、マスター番号MID値3、レスポンス番号RESN値15および受信不可能情報NOACCによって、再度、リクエストReqACID2SEQ15を発行する(図22:Step1)。
その後、メモリ装置M1のID比較回路CPQは、リクエストキュー回路RqQIのリクエストキューへエントリされたリクエストReqACID2SEQ15に含まれるID値2と、IDレジスタ回路IDRに保持されているID値2を比較する(図22:Step4)。比較結果が一致したため、リクエストReqACID2SEQ15は、リクエストキュー回路RqQXIへ転送される(図22:Step5)。次に、リクエストキュー回路RqQXIは格納しているリクエストがリード命令を含むか、あるいは完了通知情報を必要とするリクエストかどうかをチェックする(図22:Step6)。リクエストReqACID2SEQ15はリード命令を含んでおらず、さらに完了通知情報が必要ないリクエストのため、リクエストキュー回路RqQXIは格納しているリクエストReqACID2SEQ15をメモリ回路Mem1へ転送する(図22:Step11)。メモリ回路Mem1はリクエストReqACID2SEQ15に従って動作する(図22:Step12)。具体的には、メモリ回路Mem1のコマンドデコーダCmdDecはバンクアクティブ命令BAを解読し、制御回路Cont LogicによってメモリバンクNV1BANK0が選択され、メモリバンクNV1BANK0のページアドレスバッファPadLatへページアドレス63が格納され、ページデコーダPageDecへ入力される。その後メモリアレイ回路NV1Bk0内のページアドレス63に接続されているメモリセルが活性化され、特に限定しないが1kByte分のデータがデータバッファDataLatへ転送される(図22:Step12)。
情報処理装置CPU_CHIPのメモリ制御回路DCMCは、タイミングレジスタM1TREGに設定されているtm1RCD(バンクアクティブ命令とリードおよびライト命令の最小時間間隔)の値16に従い、リクエストReqACID2SEQ15転送後の16クロックサイクル以降に、32バイトデータのリード命令RD32を含むリクエストReqRD32ID2SEQ16(リクエスト開始フラグReqStFlag値1、識別番号ID値2、32バイトデータのリード命令RD32、マスター番号MID値3(情報処理回路CPU3のマスター番号ID)、可変部リクエスト長VREQL値4、リクエスト番号ReqN値16、バンクアドレスBK0およびカラムアドレスCol32から構成される)をメモリ装置M0へ転送するための動作を行う。
先ず、レスポンスキューRESQ1内の空き状態のレスポンスキューの一部へリクエストReqRD32ID2SEQ16内の識別番号ID値2とリクエスト番号ReqN値16と等しいレスポンス番号ResN値16をコピーし、リクエストReqRD32ID2SEQ16に対応したレスポンスResRD32ID2SEQ16を受け取るために必要な空き状態のレスポンスキューを前もって確保する。
次にリクエスト出力回路RQOUTは、リクエスト信号RqMux0を通じて、ReqRD32ID2SEQ16をクロック信号RqCK0に同期させ、メモリ装置M0へ転送する(図22:Step1)。また、リクエスト出力回路RQOUTはリクエストReqRD32ID2SEQ16内の識別番号ID値2とリクエスト番号ReqN値16をレイテンシ調整回路LCHCKへ転送し、保持させる。次に、リクエストReqRD32ID2SEQ16の転送と同時に、レイテンシ調整回路LCHCKはリクエストReqRD32ID2SEQ16に対応したレスポンスResRD32ID2SEQ16に関するレイテンシの測定を開始する(図22:Step1)。リクエストReqRD32ID2SEQ16がメモリ装置M0へ入力するとキューチェック回路RQQMは、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在するかをチェックする(図22:Step2)。
リクエストキュー回路RqQI内で空き状態のリクエストキューが存在する場合は、メモリ装置M0は情報処理装置CPU_CHIPからのリクエストReqRD32ID2SEQ16を自身のリクエストキュー回路RqQIのリクエストキューへ格納する(図22:Step3)。また、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在しない場合は、リクエストReqRD32ID2SEQ16をメモリ装置M0が受信できないため、リクエストReqRD32ID2SEQ16の発行直後に、メモリ装置M0はレスポンス信号RsMux0を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID1Seq16をメモリ制御回路DCMCのレスポンス入力回路RSINへ送信する。
レスポンス入力回路RSINは、入力されたレスポンスResNoAccID1Seq16をリクエスト出力回路RQOUTへ送信する。リクエスト出力回路RQOUTは、レスポンスResNoAccID1Seq16に含まれる識別番号ID値2、リード命令RD、マスター番号MID値3、レスポンス番号RESN値16および受信不可能情報NOACCによって、再度、リクエストReqRD32ID2SEQ16を発行することをレイテンシ調整回路LCHCKへ通達し、リクエストReqRD32ID2SEQ16を発行する(図22:Step1)。
その後、メモリ装置M0のID比較回路CPQは、リクエストキュー回路RqQIのリクエストキューへエントリされたリクエストReqRD32ID1SEQ16に含まれるID値2と、IDレジスタ回路IDRに保持されているID値1を比較する(図22:Step4)。比較結果は不一致のためリクエストReqRD32ID2SEQ16はリクエストキュー回路RqQXOへ転送される(図22:Step13)。次に、リクエストキュー回路RqQXOは格納しているリクエストReqRD32ID2SEQ16がリード命令を含むリクエストか、あるいは完了通知情報を必要とするリクエストかどうかをチェックする(図22:Step14)。リクエストReqRD32ID2SEQ16はリード命令を含んでいるため、リクエストキュー回路RqQXOはレスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューがあるかをチェックする(図22:Step15)。レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューが無ければ、予約されていない空き状態のレスポンスキューができるまで待つ。
レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューがあれば、リクエストキュー回路RqQXOはリクエストReqRD32ID2SEQ16内の識別番号ID値2とリクエスト番号ReqN値16を、レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューへコピーし、リクエストReqRD32ID2SEQ16に対応したレスポンスResRD32ID2SEQ16を受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する(図22:Step16)。リクエストキュー回路RqQXOがレスポンスキュー回路RsQpの予約されていない空き状態のレスポンスキューを予約した場合、キューチェック回路RSQMは、レスポンスキュー回路RsQo内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する(図22:Step16)。
次に、メモリ装置M0はリクエスト信号RqMux1を通じて、リクエストReqRD32ID2SEQ16をメモリ装置M1へ転送する(図22:Step1)。リクエストReqRD32ID2SEQ16がメモリ装置M1へ入力するとメモリ装置M1のキューチェック回路RQQMは、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在するかをチェックする(図22:Step2)。メモリ装置M1のリクエストキュー回路RqQI内で空き状態のリクエストキューが存在する場合は、メモリ装置M1は、メモリ装置M0からのリクエストReqRD32ID2SEQ16を自身のリクエストキュー回路RqQIのリクエストキューへ格納する(図22:Step3)。
また、メモリ装置M1のリクエストキュー回路RqQI内で空き状態のリクエストキューが存在しない場合は、リクエストReqRD32ID2SEQ16をメモリ装置M1が受信できないので、リクエストReqRD32ID2SEQ16の発行直後に、メモリ装置M1はレスポンス信号RsMux1を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID2Seq16をメモリ装置M0へ送信する。メモリ装置M0は、レスポンスResNoAccID2Seq16に含まれる識別番号ID値2、リード命令RD32、マスター番号MID値3、レスポンス番号RESN値16および受信不可能情報NOACCによって、再度、リクエストReqRD32ID2SEQ16を発行する(図22:Step1)。その後、メモリ装置M1のID比較回路CPQは、リクエストキュー回路RqQIのリクエストキューへエントリされたリクエストReqRD32ID2SEQ16に含まれるID値2と、IDレジスタ回路IDRに保持されているID値2を比較する(図22:Step4)。
比較結果が一致したため、リクエストReqRD32ID2SEQ16は、リクエストキュー回路RqQXIへ転送される(図22:Step5)。次に、リクエストキュー回路RqQXIは格納しているリクエストReqRD32ID2SEQ16がリード命令を含むリクエストか、あるいは完了通知情報を必要とするリクエストかどうかをチェックする(図22:Step6)。リクエストReqRD32ID2SEQ16はリード命令を含んでいるため、リクエストキュー回路RqQXIは、レスポンスキュー回路RsQo内に、予約されていない空き状態のレスポンスキューがあるかをチェックする(図22:Step7)。レスポンスキュー回路RsQo内に予約されていない空き状態のレスポンスキューがなければ、予約されていない空き状態のレスポンスキューができるまでリクエストキュー回路RqQXIは、リクエストReqRD32ID2SEQ16の転送を中断する。レスポンスキュー回路RsQoに予約されていない空き状態のレスポンスキューがあれば、リクエストキュー回路RqQXIは、レスポンスキュー回路RsQoの予約されていない空き状態のレスポンスキューへリクエストReqRD32ID2SEQ16内の識別番号ID値2とリクエスト番号ReqN値16をコピーし、リクエストReqRD32ID2SEQ16に対応したメモリ回路Mem1からのリードデータを受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する(図22:Step8)。
リクエストキュー回路RqQXIがレスポンスキュー回路RsQoの予約されていない空き状態のレスポンスキューを予約した場合、キューチェック回路RSQMは、レスポンスキュー回路RsQo内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する(図22:Step8)。次に、リクエストキュー回路RqQXIは格納しているリクエストReqRD32ID2SEQ16をメモリ回路Mem1へ転送する(図22:Step9)。メモリ回路Mem1はリクエストReqRD32ID2SEQ16に従って動作する(図22:Step10)。具体的には、32バイトデータリード命令RD32がコマンド信号Commandから、バンクアドレス0およびカラムアドレス32が、アドレス信号Addressよりメモリ回路Mem1へ送信される。コマンドデコーダCmdDecは32バイトデータリード命令RD32を解読し、制御回路Cont LogicによってメモリバンクNV1BANK0が選択され、メモリバンクNV1BANK0のカラムアドレスバッファCAddLatへカラムアドレス32が格納され、カラムデコーダColDecへ入力される。
その後、カラムアドレス32を開始アドレスとして、32バイト分のデータがメモリバンクNV1BANK0のデータバッファDataLatから読み出され、データ制御回路DataContを介してリードデータバッファRDataLatへ格納される。その後、リードデータバッファRDataLatより読み出された32バイト分のデータは、レスポンス開始フラグResStFlag値1、識別番号ID値2(IDレジスタ値2と等しい値)、32バイトデータのリード命令RD32、マスター番号MID値3(情報処理回路CPU3のマスター番号ID)、リードデータ長RDL値32、レスポンス番号ResN値16(リクエスト番号ReqN値16と等しい値)から構成される共通レスポンス部CMNRESFが付加されて、レスポンスキュー制御回路RsCT内のレスポンスキュー回路RsQoのレスポンスキューへレスポンスResRD32ID2SEQ16としてエントリされる(図23:Step17)。
メモリ装置M1のキューチェック回路RSQMは、メモリ装置M1のレスポンスキュー回路RsQoへレスポンスResRD32ID2SEQ16がエントリされると、レスポンスキュー回路RsQo内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step18)。次にメモリ装置M1のレスポンススケジュール回路SCHは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスに対するレスポンス優先順位を決定する(図23:Step19)。レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスはResRD32ID2SEQ16のみのため、レスポンスResRD32ID2SEQ16のレスポンス優先順位が最も高い(図23:Step19)ので、レスポンススケジュール回路SCHはレスポンスResRD32ID2SEQ16を、レスポンス信号RsMux1を通じてメモリ装置M0へ送信する(図23:Step20)。
その後、メモリ装置M1のキューチェック回路RSQMは、再度、レスポンスキュー回路RsQo内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step21)。また、メモリ装置M1のレスポンスキュー回路RsQo内のレスポンスResRD32ID2SEQ1は、情報処理装置CPU_CHIPへ送信される前に(図23:Step22)、メモリ装置M0のレスポンスキュー回路RsQpへ転送される(図23:Step17)。
メモリ装置M0は、レスポンスキュー回路RsQp内にレスポンスResRD32ID2SEQ16を受け取るための空き状態のレスポンスキューを前もって確保しているため、レスポンスResRD32ID2SEQ16はメモリ装置M0のレスポンスキュー回路RsQpへ格納される(図23:Step17)。メモリ装置M0のレスポンスキュー回路RsQoへレスポンスResRD32ID2SEQ16がエントリされると、メモリ装置M0のキューチェック回路RSQMは、レスポンスキュー回路RsQp内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step18)。次にメモリ装置M0のレスポンススケジュール回路SCHは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスに対するレスポンス優先順位を決定する(図23:Step19)。レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスはResRD32ID2SEQ16のみのため、レスポンスResRD32ID2SEQ16のレスポンス優先順位が最も高い(図23:Step19)ので、レスポンススケジュール回路SCHはレスポンスResRD32ID2SEQ16を、レスポンス信号RsMux0を通じて情報処理装置CPU_CHIPへ送信する(図23:Step20)。メモリ装置M0のレスポンスキュー回路RsQp内のレスポンスResRD32ID2SEQ16が情報処理装置CPU_CHIPへ完全に送信されると、キューチェック回路RSQMは、レスポンスキュー回路RsQp内の、すでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step21)。
情報処理装置CPU_CHIPはレスポンスキュー回路RsQp内にレスポンスResRD32ID2SEQ16を受け取るための空き状態のレスポンスキューを前もって確保しているため、レスポンスResRD32ID2SEQ16はレスポンス入力回路RSINへ格納される。メモリ装置M0のレスポンスキュー回路RsQo内のレスポンスResRD32ID2SEQ16が情報処理装置CPU_CHIPへ送信される(図23:Step22)と、情報処理装置CPU_CHIPとメモリ装置M0間のデータ転送は完了する(図23:Step23)。メモリ制御回路DCMCのレスポンス入力回路RSINがレスポンスResRD32ID2SEQ16を受け取ると、レスポンスResRD32ID2SEQ16に含まれている識別番号ID値2とレスポンス番号ResN値16を取り出し、レイテンシ調整回路LCHCKへ送付する。レイテンシ調整回路LCHCKは、これらの識別番号ID値2とレスポンス番号ResN値16によってリクエストReqRD32ID2SEQ16のレスポンスResRD32ID2SEQ16が返ってきたことを知り、レイテンシの測定を終了する。
レイテンシ調整回路LCHCKは、レイテンシの測定結果とコンフィグレーション回路CONFIG内のレイテンシレジスタLTREGへ設定されている識別番号ID値2に対応するレイテンシLatBank値12クロックサイクルと比較する。比較した結果、その差分が許容範囲を超えていれば、レイテンシ調整回路LCHCKは、今後のリードリクエストに対する測定したレイテンシがレイテンシLatBank値12クロックサイクルと等しくなるようにレイテンシ補正動作を行う。また、比較した結果、その差分が許容範囲以内であればレイテンシ調整回路LCHCKは、レイテンシ補正動作を行わない。
また、レスポンスキューRESQ1へレスポンスResRD32ID2SEQ16が格納されると、キュー管理回路QMGTは、再度、レスポンスキューRESQ1内のレスポンスが格納されている占有状態のレスポンスキュー数、レスポンスキューRESQ1内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する。
さらに、レスポンスキューRESQ1に格納されているレスポンスResRD32ID2SEQ16が、情報処理回路CPU3へ送信されると、キュー管理回路QMGTは、レスポンスキューRESQ1へ保持されているレスポンスResRD32ID2SEQ16を削除し、再度、レスポンスキューRESQ1内のレスポンスが格納されている占有状態のレスポンスキュー数、レスポンスキューRESQ1内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する。
次に、情報処理装置CPU_CHIPとメモリ装置M2間のデータ転送の一例について説明する。情報処理装置CPU_CHIPのメモリ制御回路DCMCは、リクエスト信号RqMux0を通じて、リクエスト開始フラグReqStFlag値1、識別番号ID値3、完了通知が必要なバンクアクティブ命令ACwithCompletion、マスター番号MID値3(情報処理回路CPU3のマスター番号ID)、可変部リクエスト長VREQL値4、リクエスト番号ReqN値15、バンクアドレスBK0、ページアドレスRow63を多重化した完了通知が必要なリクエストReqACwithCompletionID3SEQ15をメモリ装置M0へ送信する前に、先ず、レスポンスキューRESQ1内の空き状態のレスポンスキューの一部へリクエストReqACwithCompletionID3SEQ15内の識別番号ID値3とリクエスト番号ReqN値15と等しいレスポンス番号ResN値15をコピーし、リクエストReqACwithCompletionID3SEQ15に対応した完了通知情報を含んだレスポンスResACwithCompletionID3SEQ15を受け取るために必要な空き状態のレスポンスキューを前もって確保する。
次に、メモリ制御回路DCMCはリクエストReqACwithCompletionID3SEQ15をクロック信号RqCK0に同期させ、メモリ装置M0へ転送する(図22:Step1)。リクエストReqACwithCompletionID3SEQ15がメモリ装置M0へ入力するとキューチェック回路RQQMは、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在するかをチェックする(図22:Step2)。リクエストキュー回路RqQI内で空き状態のリクエストキューが存在する場合は、メモリ装置M0は、情報処理装置CPU_CHIPからのリクエストReqACwithCompletionID3SEQ15を自身のリクエストキュー回路RqQIのリクエストキューへ格納する(図22:Step3)。また、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在しない場合は、リクエストReqACwithCompletionID3SEQ15をメモリ装置M0が受信できないので、リクエストReqACwithCompletionID3SEQ15の発行直後に、メモリ装置M0はレスポンス信号RsMux0を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID3Seq15をメモリ制御回路DCMCのレスポンス入力回路RSINへ送信する。レスポンスResNoAccID3Seq15はレスポンス開始フラグResStFlag値1、識別番号ID値3、バンクアクティブ命令ACwithCompletion、マスター番号MID値3、レスポンス番号RESN値15(リクエスト番号ReqN値15と等しい値)および受信不可能情報NOACCから構成される。
レスポンス入力回路RSINは、入力されたレスポンスResNoAccID2Seq15をリクエスト出力回路RQOUTへ送信する。リクエスト出力回路RQOUTは、レスポンスResNoAccID2Seq15に含まれる識別番号ID値2、バンクアクティブ命令ACwithCompletion、マスター番号MID値3、レスポンス番号ResN値15および受信不可能情報NOACCによって、再度、リクエストReqACwithCompletionID3SEQ15を発行する(図22:Step1)。
その後、メモリ装置M0のID比較回路CPQは、リクエストキュー回路RqQIのリクエストキューへエントリされたリクエストReqACwithCompletionID3SEQ15に含まれるID値3と、IDレジスタ回路IDRに保持されているID値1を比較する(図22:Step4)。比較結果が不一致のため、リクエストReqACwithCompletionID3SEQ15は、外部リクエストキュー回路RqQXOへ転送される(図22:Step13)。次に、リクエストキュー回路RqQXOは格納しているリクエストReqACwithCompletionID3SEQ15がリード命令を含むリクエストか、あるいは完了通知情報が必要なリクエストかどうかをチェックする(図22:Step14)。
リクエストReqACwithCompletionID3SEQ15は完了通知が必要なバンクアクティブ命令ACwithCompletionを含んでいるため、リクエストキュー回路RqQXOはレスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューがあるかをチェックする(図22:Step15)。レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューが無ければ、予約されていない空き状態のレスポンスキューができるまで待つ。
レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューがあれば、リクエストキュー回路RqQXOはリクエストReqACwithCompletionID3SEQ15内の識別番号ID値3とリクエスト番号ReqN値15を、レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューへコピーし、リクエストReqACwithCompletionID3SEQ15に対応した完了通知情報を含んだレスポンスResACwithCompletionID3SEQ15を受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する(図22:Step16)。リクエストキュー回路RqQXOのレスポンスキュー回路RsQpの予約されていない空き状態のレスポンスキューを予約した場合、キューチェック回路RSQMは、レスポンスキュー回路RsQp内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する(図22:Step16)。
次に、メモリ装置M0はリクエスト信号RqMux1を通じて、リクエストReqACwithCompletionID3SEQ15をメモリ装置M1へ転送する(図22:Step1)。リクエストReqACwithCompletionID3SEQ15がメモリ装置M1へ入力するとメモリ装置M1のキューチェック回路RQQMは、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在するかをチェックする(図22:Step2)。メモリ装置M1のリクエストキュー回路RqQI内で空き状態のリクエストキューが存在する場合は、メモリ装置M1は、メモリ装置M0からのリクエストReqACwithCompletionID3SEQ15を自身のリクエストキュー回路RqQIのリクエストキューへ格納する(図22:Step3)。
また、メモリ装置M1のリクエストキュー回路RqQI内で空き状態のリクエストキューが存在しない場合は、リクエストReqACwithCompletionID3SEQ15をメモリ装置M1が受信できないので、リクエストReqACwithCompletionID3SEQ15の発行直後に、メモリ装置M1はレスポンス信号RsMux1を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID3Seq15をメモリ装置M0へ送信する。メモリ装置M0は、レスポンスResNoAccID3Seq15に含まれる識別番号ID値3、バンクアクティブ命令ACwithCompletion、マスター番号MID値3、レスポンス番号ResN値15および受信不可能情報NOACCによって、再度、リクエストReqACwithCompletionID3SEQ15をメモリ装置M1へ発行する(図22:Step1)。その後、メモリ装置M1のID比較回路CPQは、自身のリクエストキュー回路RqQIのリクエストキューへエントリされたリクエストReqACwithCompletionID3SEQ15に含まれるID値3と、IDレジスタ回路IDRに保持されているID値2を比較する(図22:Step4)。
比較結果が不一致のため、リクエストReqACwithCompletionID3SEQ15は、リクエストキュー回路RqQXOへ転送される(図22:Step13)。次に、リクエストキュー回路RqQXOは格納しているリクエストReqACwithCompletionID3SEQ15がリード命令を含むか、あるいは完了通知が必要な命令を含むかどうかをチェックする(図22:Step14)。
リクエストReqACwithCompletionID3SEQ15は完了通知が必要なバンクアクティブ命令ACwithCompletionを含んでいるため、リクエストキュー回路RqQXOはレスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューがあるかをチェックする(図22:Step15)。レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューが無ければ、予約されていない空き状態のレスポンスキューができるまで待つ。
レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューがあれば、リクエストキュー回路RqQXOはリクエストReqACwithCompletionID3SEQ15内の識別番号ID値3とリクエスト番号ReqN値15を、レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューへコピーし、リクエストReqACwithCompletionID3SEQ15に対応した完了通知情報を含んだレスポンスResACwithCompletionID3SEQ15を受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する(図22:Step16)。
リクエストキュー回路RqQXOのレスポンスキュー回路RsQpの予約されていない空き状態のレスポンスキューを予約した場合、キューチェック回路RSQMは、レスポンスキュー回路RsQp内の、すでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する(図22:Step16)。
次に、メモリ装置M1はリクエスト信号RqMux2を通じて、リクエストReqACwithCompletionID3SEQ15をメモリ装置M2へ転送する(図22:Step1)。リクエストReqACwithCompletionID3SEQ15がメモリ装置M2へ入力するとメモリ装置M2のキューチェック回路RQQMは、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在するかをチェックする(図22:Step2)。メモリ装置M2のリクエストキュー回路RqQI内で空き状態のリクエストキューが存在する場合は、メモリ装置M2は、メモリ装置M0からのリクエストReqACwithCompletionID3SEQ15を自身のリクエストキュー回路RqQIのリクエストキューへ格納する(図22:Step3)。
また、メモリ装置M2のリクエストキュー回路RqQI内で空き状態のリクエストキューが存在しない場合は、リクエストReqACwithCompletionID3SEQ15をメモリ装置M2が受信できないので、リクエストReqACwithCompletionID3SEQ15の発行直後に、メモリ装置M2はレスポンス信号RsMux2を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID3Seq15をメモリ装置M1へ送信する。メモリ装置M1は、レスポンスResNoAccID3Seq15に含まれる識別番号ID値3、バンクアクティブ命令ACwithCompletion、マスター番号MID値3、レスポンス番号ResN値15および受信不可能情報NOACCによって、再度、リクエストReqACwithCompletionID3SEQ15をメモリ装置M2へ発行する(図22:Step1)。
その後、メモリ装置M2のID比較回路CPQは、リクエストキュー回路RqQIのリクエストキューへエントリされたリクエストReqACwithCompletionID3SEQ15に含まれるID値3と、IDレジスタ回路IDRに保持されているID値3を比較する(図22:Step4)。比較結果が一致したため、リクエストReqACwithCompletionID3SEQ15は、リクエストキュー回路RqQXIへ転送される(図22:Step5)。次に、リクエストキュー回路RqQXIは格納しているリクエストがリード命令を含むか、あるいは完了通知が必要な命令を含むかどうかをチェックする(図22:Step6)。リクエストReqACwithCompletionID3SEQ15は完了通知が必要なバンクアクティブ命令ACwithCompletionを含んでいるため、リクエストキュー回路RqQXIは、レスポンスキュー回路RsQo内に、予約されていない空き状態のレスポンスキューがあるかをチェックする(図22:Step7)。レスポンスキュー回路RsQo内に予約されていない空き状態のレスポンスキューがなければ、予約されていない空き状態のレスポンスキューができるまでリクエストキュー回路RqQXIは、リクエストReqACwithCompletionID3SEQ15の転送を中断する。レスポンスキュー回路RsQoに予約されていない空き状態のレスポンスキューがあれば、リクエストキュー回路RqQXIは、レスポンスキュー回路RsQoの予約されていない空き状態のレスポンスキューへリクエストReqACwithCompletionID3SEQ15内の識別番号ID値3とリクエスト番号ReqN値15をコピーし、リクエストReqACwithCompletionID3SEQ15に対応した完了通知情報を含んだレスポンスResACwithCompletionID3SEQ15を受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する(図22:Step8)。
リクエストキュー回路RqQXIがレスポンスキュー回路RsQoの予約されていない空き状態のレスポンスキューを予約した場合、キューチェック回路RSQMは、レスポンスキュー回路RsQo内の、すでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する(図22:Step8)。
次に、リクエストキュー回路RqQXIは格納しているリクエストReqACwithCompletionID3SEQ15をメモリ回路Mem2へ転送する(図22:Step11)。メモリ回路Mem2はリクエストReqACwithCompletionID3SEQ15に従って動作する(図22:Step12)。具体的には、メモリ回路Mem2のコマンドデコーダCmdDecはバンクアクティブ命令ACwithCompletionを解読し、制御回路Cont LogicによってメモリバンクNV2BANK0が選択され、メモリバンクNV2BANK0のページアドレスバッファPadLatへページアドレス63が格納され、ページデコーダPageDecへ入力される。その後メモリアレイ回路NV2Bk0内のページアドレス63に接続されているメモリセルが活性化され、特に限定しないが1kByte分のデータが25μsec後にデータバッファDataLatへ転送される(図22:Step12)。1kByte分のデータがデータバッファDataLatへ転送されると、バンクアクティブ命令ACwithCompletionが完了したことを示す完了通知情報Completionへレスポンス開始フラグResStFlag値1、識別番号ID値3(IDレジスタIDR値3と等しい値)、バンクアクティブ命令ACwithCompletion、マスター番号MID値3(情報処理回路CPU3のマスター番号ID)、レスポンス番号ResN値15(リクエスト番号ReqN値15と等しい値)から構成される共通レスポンス部CMNRESFが付加されて、レスポンスキュー制御回路RsCT内のレスポンスキューRsQoのレスポンスキューへレスポンスResACwithCompletionID3SEQ15としてエントリされる(図23:Step17)。
メモリ装置M2のキューチェック回路RSQMは、メモリ装置M2のレスポンスキュー回路RsQoへレスポンスResACwithCompletionID3SEQ15がエントリされると、レスポンスキュー回路RsQo内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step18)。次にメモリ装置M2のレスポンススケジュール回路SCHは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスに対するレスポンス優先順位を決定する(図23:Step19)。レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスはResACwithCompletionID3SEQ15のみのため、レスポンスResACwithCompletionID3SEQ15のレスポンス優先順位が最も高い(図23:Step19)ので、レスポンススケジュール回路SCHはレスポンスResACwithCompletionID3SEQ15を、レスポンス信号RsMux2を通じてメモリ装置M1へ送信する(図23:Step20)。メモリ装置M2のレスポンスキュー回路RsQo内のレスポンスResACwithCompletionID3SEQ15がメモリ装置M1へ送信されると、メモリ装置M1のキューチェック回路RSQMは、レスポンスキュー回路RsQo内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step21)。
メモリ装置M1は、レスポンスキュー回路RsQp内にメモリ装置M2からのレスポンスResACwithCompletionID3SEQ15を受け取るための空き状態のレスポンスキューを前もって確保しており、情報処理装置CPU_CHIPへ送信される前に(図23:Step22)、メモリ装置M1のレスポンスキュー回路RsQpへ転送される(図23:Step17)。
メモリ装置M1のレスポンスキュー回路RsQpへレスポンスResACwithCompletionID3SEQ15がエントリされると、メモリ装置M1のキューチェック回路RSQMは、レスポンスキュー回路RsQp内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step18)。次にメモリ装置M1のレスポンススケジュール回路SCHは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスに対するレスポンス優先順位を決定する(図23:Step19)。レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスResACwithCompletionID3SEQ15のみのため、レスポンResACwithCompletionID3SEQ15のレスポンス優先順位が最も高い(図23:Step19)ので、レスポンススケジュール回路SCHはレスポンResACwithCompletionID3SEQ15をレスポンス信号RsMux1からメモリ装置M0へ送信する(図23:Step20)。
メモリ装置M1のレスポンスキュー回路RsQo内のレスポンスレスポンスResACwithCompletionID3SEQ15がメモリ装置M1へ送信されると、メモリ装置M1のキューチェック回路RSQMは、レスポンスキュー回路RsQo内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step21)。
メモリ装置M0は、レスポンスキュー回路RsQp内にメモリ装置M1からのレスポンスResACwithCompletionID3SEQ15を受け取るための空き状態のレスポンスキューを前もって確保しており、レスポンスResACwithCompletionID3SEQ15は情報処理装置CPU_CHIPへ送信される前に(図23:Step22)、メモリ装置M0のレスポンスキュー回路RsQpへ転送される(図23:Step17)。メモリ装置M0のレスポンスキュー回路RsQpへレスポンスResACwithCompletionID3SEQ15がエントリされると、メモリ装置M0のキューチェック回路RSQMは、レスポンスキュー回路RsQp内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step18)。次にメモリ装置M0のレスポンススケジュール回路SCHは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスに対するレスポンス優先順位を決定する(図23:Step19)。レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスResACwithCompletionID3SEQ15のみのため、レスポンResACwithCompletionID3SEQ15のレスポンス優先順位が最も高い(図23:Step19)ので、レスポンススケジュール回路SCHはレスポンスResACwithCompletionID3SEQ15を、レスポンス信号RsMux0を通じて情報処理装置CPU_CHIPへ送信する(図23:Step20)。
メモリ装置M0のレスポンスキュー回路RsQp内のレスポンスResACwithCompletionID3SEQ15が情報処理装置CPU_CHIPへ完全に送信されると、メモリ装置M0のキューチェック回路RSQMは、レスポンスキュー回路RsQp内の、すでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step21)。
情報処理装置CPU_CHIPはレスポンスキュー回路RESQ1内にレスポンスResACwithCompletionID3SEQ15を受け取るための空き状態のレスポンスキューを前もって確保しているため、レスポンスResACwithCompletionID3SEQ15は情報処理装置CPU_CHIPのレスポンス入力回路RSINへ入力し、レスポンスキュー回路RESQ1へ格納される(図23:Step22、Step23)。
メモリ制御回路DCMCのレスポンス入力回路RSINがレスポンスResACwithCompletionID3SEQ15を受け取ると、レスポンスResACwithCompletionID3SEQ15に含まれている識別番号ID値3とレスポンス番号ResN値15と、完了通知情報Completionを取り出し、リクエスト出力回路RQOUTへ送付する。リクエスト出力回路RQOUTは、これらの情報識別番号ID値3とレスポンス番号ResN値15と、完了通知情報CompletionによりリクエストReqACwithCompletionID3SEQ15が完了したことを確認する。
リクエスト出力回路RQOUTはリクエストReqACwithCompletionID3SEQ15が完了したことを確認した後、32バイトデータのリード命令RD32を含むリクエストReqRD32ID3SEQ16(リクエスト開始フラグReqStFlag値1、識別番号ID値3、32バイトデータのリード命令RD32、マスター番号MID値3(情報処理回路CPU3のマスター番号ID)、可変部リクエスト長VREQL値4、リクエスト番号ReqN値16、バンクアドレスBK0およびカラムアドレスCol32から構成される)をメモリ装置M0へ転送するための動作を行う。
先ず、レスポンスキューRESQ1内の空き状態のレスポンスキューの一部へリクエストReqRD32ID3SEQ16内の識別番号ID値3とリクエスト番号ReqN値16と等しいレスポンス番号ResN値16をコピーし、リクエストReqRD32ID3SEQ16に対応したレスポンスResRD32ID3SEQ16を受け取るために必要な空き状態のレスポンスキューを前もって確保する。
次にリクエスト出力回路RQOUTは、リクエスト信号RqMux0を通じて、ReqRD32ID3SEQ16をクロック信号RqCK0に同期させ、メモリ装置M0へ転送する(図22:Step1)。また、リクエスト出力回路RQOUTはリクエストReqRD32ID3SEQ16内の識別番号ID値3とリクエスト番号ReqN値16をレイテンシ調整回路LCHCKへ転送し、保持させる。次に、リクエストReqRD32ID3SEQ16の転送と同時に、レイテンシ調整回路LCHCKはリクエストReqRD32ID3SEQ16に対応したレスポンスResRD32ID3SEQ16に関するレイテンシの測定を開始する(図22:Step1)。
また、リクエスト出力回路RQOUTはリードリクエストReqRD32ID3Seq16をメモリ装置M0へ発行したことをキュー管理回路QMGTへ通達すると、キュー管理回路QMGTは、レスポンスキューRESQ1へ保持されているレスポンスACwithCompletionResID3Seq10を削除し、再度、レスポンスキューRESQ1内のレスポンスが格納されている占有状態のレスポンスキュー数、予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する。
リクエストReqRD32ID3SEQ16がメモリ装置M0へ入力するとキューチェック回路RQQMは、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在するかをチェックする(図22:Step2)。リクエストキュー回路RqQI内で空き状態のリクエストキューが存在する場合は、メモリ装置M0は情報処理装置CPU_CHIPからのリクエストReqRD32ID3SEQ16を自身のリクエストキュー回路RqQIのリクエストキューへ格納する(図22:Step3)。また、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在しない場合は、リクエストReqRD32ID3SEQ16をメモリ装置M0が受信できないため、リクエストReqRD32ID3SEQ16の発行直後に、メモリ装置M0はレスポンス信号RsMux0を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID3Seq16をメモリ制御回路DCMCのレスポンス入力回路RSINへ送信する。
レスポンス入力回路RSINは、入力されたレスポンスResNoAccID3Seq16をリクエスト出力回路RQOUTへ送信する。リクエスト出力回路RQOUTは、レスポンスResNoAccID1Seq16に含まれる識別番号ID値3、リード命令RD32、マスター番号MID値3、レスポンス番号ResN値16および受信不可能情報NOACCによって、再度、リクエストReqRD32ID3SEQ16を発行することをレイテンシ調整回路LCHCKへ通達し、リクエストReqRD32ID3SEQ16を発行する(図22:Step1)。
その後、メモリ装置M0のID比較回路CPQは、リクエストキュー回路RqQIのリクエストキューへエントリされたリクエストReqRD32ID3SEQ16に含まれるID値3と、IDレジスタ回路IDRに保持されているID値1を比較する(図22:Step4)。比較結果は不一致のためリクエストReqRD32ID3SEQ16はリクエストキュー回路RqQXOへ転送される(図22:Step13)。次に、リクエストキュー回路RqQXOは格納しているリクエストReqRD32ID3SEQ16がリード命令を含むか、あるいは完了通知が必要な命令を含むかどうかをチェックする(図22:Step14)。リクエストReqRD32ID3SEQ16はリード命令を含んでいるため、リクエストキュー回路RqQXOはレスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューがあるかをチェックする(図22:Step15)。レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューが無ければ、予約されていない空き状態のレスポンスキューができるまで待つ。
レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューがあれば、リクエストキュー回路RqQXOはリクエストReqRD32ID3SEQ16内の識別番号ID値3とリクエスト番号ReqN値16を、レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューへコピーし、リクエストReqRD32ID3SEQ16に対応したレスポンスResRD32ID3SEQ16を受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する(図22:Step16)。リクエストキュー回路RqQXOがレスポンスキュー回路RsQp内の予約されていない空き状態のレスポンスキューを予約した場合、キューチェック回路RSQMはレスポンスキュー回路RsQp内のレスポンスが格納されている占有状態のレスポンスキュー数、レスポンスキュー回路RsQp内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する(図22:Step16)。
次に、メモリ装置M0はリクエスト信号RqMux1を通じて、リクエストReqRD32ID3SEQ16をメモリ装置M1へ転送する(図22:Step1)。リクエストReqRD32ID3SEQ16がメモリ装置M1へ入力するとメモリ装置M1のキューチェック回路RQQMは、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在するかをチェックする(図22:Step2)。メモリ装置M1のリクエストキュー回路RqQI内で空き状態のリクエストキューが存在する場合は、メモリ装置M1は、メモリ装置M0からのリクエストReqRD32ID3SEQ16を自身のリクエストキュー回路RqQIのリクエストキューへ格納する(図22:Step3)。
また、メモリ装置M1のリクエストキュー回路RqQI内で空き状態のリクエストキューが存在しない場合は、リクエストReqRD32ID3SEQ16をメモリ装置M1が受信できないので、リクエストReqRD32ID3SEQ16の発行直後に、メモリ装置M1はレスポンス信号RsMux1を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID3Seq16をメモリ装置M0へ送信する。メモリ装置M0は、レスポンスResNoAccID3Seq16に含まれる識別番号ID値3、リード命令RD32、マスター番号MID値3、レスポンス番号ResN値16および受信不可能情報NOACCによって、再度、リクエストReqRD32ID3SEQ16を発行する(図22:Step1)。その後、メモリ装置M1のID比較回路CPQは、リクエストキュー回路RqQIのリクエストキューへエントリされたリクエストReqRD32ID2SEQ16に含まれるID値3と、IDレジスタ回路IDRに保持されているID値2を比較する(図22:Step4)。比較結果は不一致のためリクエストReqRD32ID3SEQ16はリクエストキュー回路RqQXOへ転送される(図22:Step13)。次に、リクエストキュー回路RqQXOは格納しているリクエストReqRD32ID3SEQ16がリード命令を含むか、あるいは完了通知が必要な命令を含むかどうかをチェックする(図22:Step14)。リクエストReqRD32ID3SEQ16はリード命令を含んでいるため、リクエストキュー回路RqQXOはレスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューがあるかをチェックする(図22:Step15)。レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューが無ければ、予約されていない空き状態のレスポンスキューができるまで待つ。
レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューがあれば、リクエストキュー回路RqQXOはリクエストReqRD32ID3SEQ16内の識別番号ID値3とリクエスト番号ReqN値16を、レスポンスキュー回路RsQp内に予約されていない空き状態のレスポンスキューへコピーし、リクエストReqRD32ID3SEQ16に対応したレスポンスResRD32ID3SEQ16を受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する(図22:Step16)。リクエストキュー回路RqQXOがレスポンスキュー回路RsQp内の予約されていない空き状態のレスポンスキューを予約した場合、キューチェック回路RSQMは、レスポンスキュー回路RsQp内のレスポンスが格納されている占有状態のレスポンスキュー数、レスポンスキュー回路RsQp内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する(図22:Step16)。次に、メモリ装置M1はリクエスト信号RqMux1を通じて、リクエストReqRD32ID3SEQ16をメモリ装置M2へ転送する(図22:Step1)。リクエストReqRD32ID3SEQ16がメモリ装置M2へ入力するとメモリ装置M1のキューチェック回路RQQMは、リクエストキュー回路RqQI内で空き状態のリクエストキューが存在するかをチェックする(図22:Step2)。メモリ装置M1のリクエストキュー回路RqQI内で空き状態のリクエストキューが存在する場合は、メモリ装置M2は、メモリ装置M1からのリクエストReqRD32ID2SEQ16を自身のリクエストキュー回路RqQIのリクエストキューへ格納する(図22:Step3)。
また、メモリ装置M2のリクエストキュー回路RqQI内で空き状態のリクエストキューが存在しない場合は、リクエストReqRD32ID2SEQ16をメモリ装置M1が受信できないので、リクエストReqRD32ID2SEQ16の発行直後に、メモリ装置M2はレスポンス信号RsMux1を介して受信不可能情報NOACCという情報を含んだレスポンスResNoAccID2Seq16をメモリ装置M1へ送信する。メモリ装置M1は、レスポンスResNoAccID2Seq16に含まれる識別番号ID値2、リード命令RD32、マスター番号MID値3、レスポンス番号RESN値16および受信不可能情報NOACCによって、再度、メモリ装置M2へリクエストReqRD32ID2SEQ16を発行する(図22:Step1)。その後、メモリ装置M2のID比較回路CPQは、リクエストキュー回路RqQIのリクエストキューへエントリされたリクエストReqRD32ID2SEQ16に含まれるID値2と、IDレジスタ回路IDRに保持されているID値2を比較する(図22:Step4)。
比較結果が一致したため、リクエストReqRD32ID3SEQ16は、リクエストキュー回路RqQXIへ転送される(図22:Step5)。次に、リクエストキュー回路RqQXIは格納しているリクエストReqRD32ID3SEQ16がリード命令を含むか、あるいは完了通知情報を必要とする命令を含むかどうかをチェックする(図22:Step6)。リクエストReqRD32ID3SEQ16はリード命令を含んでいるため、リクエストキュー回路RqQXIは、レスポンスキュー回路RsQo内に、予約されていない空き状態のレスポンスキューがあるかをチェックする(図22:Step7)。レスポンスキュー回路RsQo内に予約されていない空き状態のレスポンスキューがなければ、予約されていない空き状態のレスポンスキューができるまでリクエストキュー回路RqQXIは、リクエストReqRD32ID3SEQ16の転送を中断する。レスポンスキュー回路RsQoに予約されていない空き状態のレスポンスキューがあれば、リクエストキュー回路RqQXIは、レスポンスキュー回路RsQoの予約されていない空き状態のレスポンスキューへリクエストReqRD32ID3SEQ16内の識別番号ID値3とリクエスト番号ReqN値16をコピーし、リクエストReqRD32ID3SEQ16に対応したメモリ回路Mem2からのリードデータを受け取るために必要な空き状態のレスポンスキューを前もって、予約し、確保する(図22:Step8)。
リクエストキュー回路RqQXIがレスポンスキュー回路RsQoの予約されていない空き状態のレスポンスキューを予約した場合、キューチェック回路RSQMは、レスポンスキュー回路RsQo内のレスポンスが格納されている占有状態のレスポンスキュー数、レスポンスキュー回路RsQo内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する(図22:Step8)。
次に、リクエストキュー回路RqQXIは格納しているリクエストReqRD32ID3SEQ16をメモリ回路Mem1へ転送する(図22:Step9)。メモリ回路Mem2はリクエストReqRD32ID3SEQ16に従って動作する(図22:Step10)。具体的には、32バイトデータリード命令RD32がコマンド信号Commandから、バンクアドレス0およびカラムアドレス32が、アドレス信号Addressよりメモリ回路Mem2へ送信される。コマンドデコーダCmdDecは32バイトデータリード命令RD32を解読し、制御回路Cont LogicによってメモリバンクNV2BANK0が選択され、メモリバンクNV2BANK0のカラムアドレスバッファCAddLatへカラムアドレス32が格納され、カラムデコーダColDecへ入力される。
その後、カラムアドレス32を開始アドレスとして、32バイト分のデータがメモリバンクNV2BANK0のデータバッファDataLatから読み出され、データ制御回路DataContを介してリードデータバッファRDataLatへ格納される。その後、リードデータバッファRDataLatより読み出された32バイト分のデータは、レスポンス開始フラグResStFlag値1、識別番号ID値3(IDレジスタ値3と等しい値)、32バイトデータのリード命令RD32、マスター番号MID値3(情報処理回路CPU3のマスター番号ID)、リードデータ長RDL値32、レスポンス番号ResN値16(リクエスト番号ReqN値16と等しい値)から構成される共通レスポンス部CMNRESFが付加されて、レスポンスキュー制御回路RsCT内のレスポンスキュー回路RsQoのレスポンスキューへレスポンスResRD32ID3SEQ16としてエントリされる(図23:Step17)。
メモリ装置M2のキューチェック回路RSQMは、メモリ装置M2のレスポンスキュー回路RsQoへレスポンスResRD32ID3SEQ16がエントリされると、レスポンスキュー回路RsQo内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step18)。次にメモリ装置M2のレスポンススケジュール回路SCHは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスに対するレスポンス優先順位を決定する(図23:Step19)。レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスはResRD32ID3SEQ16のみのため、レスポンスResRD32ID3SEQ16のレスポンス優先順位が最も高い(図23:Step19)ので、レスポンススケジュール回路SCHはレスポンスResRD32ID3SEQ16を、レスポンス信号RsMux1を通じてメモリ装置M1へ送信する(図23:Step20)。その後、メモリ装置M2のキューチェック回路RSQMは、レスポンスキュー回路RsQp内の、すでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step21)。
メモリ装置M1は、レスポンスキュー回路RsQp内にレスポンスResRD32ID3SEQ16を受け取るための空き状態のレスポンスキューを前もって確保しているため、レスポンスResRD32ID3SEQ1は、情報処理装置CPU_CHIPへ送信される前に(図23:Step22)、メモリ装置M1のレスポンスキュー回路RsQpへ転送される(図23:Step17)。メモリ装置M1のレスポンスキュー回路RsQpへレスポンスResRD32ID3SEQ16がエントリされると、メモリ装置M1のキューチェック回路RSQMは、レスポンスキュー回路RsQp内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step18)。次にメモリ装置M1のレスポンススケジュール回路SCHは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスに対するレスポンス優先順位を決定する(図23:Step19)。レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスはResRD32ID3SEQ16のみのため、レスポンスResRD32ID3SEQ16のレスポンス優先順位が最も高い(図23:Step19)ので、レスポンススケジュール回路SCHはレスポンスResRD32ID3SEQ16を、レスポンス信号RsMux1からメモリ装置M0へ送信する(図23:Step20)。その後、メモリ装置M1のキューチェック回路RSQMは、レスポンスキュー回路RsQp内の、すでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step21)。
メモリ装置M0は、レスポンスキュー回路RsQp内にレスポンスResRD32ID3SEQ16を受け取るための空き状態のレスポンスキューを前もって確保しているため、レスポンスResRD32ID3SEQ1は、情報処理装置CPU_CHIPへ送信される前に(図23:Step22)、メモリ装置M0のレスポンスキュー回路RsQpへ転送される(図23:Step17)。
メモリ装置M0のレスポンスキュー回路RsQpへレスポンスResRD32ID3SEQ16がエントリされると、メモリ装置M0のキューチェック回路RSQMは、レスポンスキュー回路RsQp内のすでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step18)。次にメモリ装置M0のレスポンススケジュール回路SCHは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスに対するレスポンス優先順位を決定する(図23:Step19)。レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスはResRD32ID3SEQ16のみのため、レスポンスResRD32ID3SEQ16のレスポンス優先順位が最も高い(図23:Step19)ので、レスポンススケジュール回路SCHはレスポンスResRD32ID3SEQ16を、レスポンス信号RsMux0を通じて情報処理装置CPU_CHIPへ送信する(図23:Step20)。
メモリ装置M0のレスポンスキュー回路RsQp内のレスポンスResRD32ID3SEQ16が情報処理装置CPU_CHIPへ送信されると、メモリ装置M0のキューチェック回路RSQMは、レスポンスキュー回路RsQp内の、すでにレスポンスが格納されている占有状態のレスポンスキュー数、予約されている空き状態のレスポンスキュー数および予約されていない空き状態のレスポンスキュー数を計算し、更新する(図23:Step21)。
情報処理装置CPU_CHIPはレスポンスキュー回路RESQ1内にレスポンスResRD32ID3SEQ16を受け取るための空き状態のレスポンスキューを前もって確保しているため、メモリ装置M0からのレスポンスResRD32ID3SEQ16はレスポンス入力回路RSINを介して、レスポンスキュー回路RESQ1内へ格納され、情報処理装置CPU_CHIPとメモリ装置M2間のデータ転送は完了する(図23:Step22、Step23)。メモリ制御回路DCMCのレスポンス入力回路RSINがレスポンスResRD32ID3SEQ16を受け取ると、レスポンスResRD32ID3SEQ16に含まれている識別番号ID値3とレスポンス番号ResN値16を取り出し、レイテンシ調整回路LCHCKへ送付する。レイテンシ調整回路LCHCKは、これらの識別番号ID値3とレスポンス番号ResN値16によってリクエストReqRD32ID3SEQ16のレスポンスResRD32ID3SEQ16が返ってきたことを知り、レイテンシの測定を終了する。
レイテンシ調整回路LCHCKは、レイテンシの測定結果とコンフィグレーション回路CONFIG内のレイテンシレジスタLTREGへ設定されている識別番号ID値3に対応するレイテンシLatBank値16クロックサイクルと比較する。比較した結果、その差分が許容範囲LatRange値を超えていれば、レイテンシ調整回路LCHCKは、今後のリードリクエストに対する測定したレイテンシがレイテンシLatBank値16クロックサイクルと等しくなるようにレイテンシ補正動作を行う。また、比較した結果、その差分が許容範囲以内であればレイテンシ調整回路LCHCKは、レイテンシ補正動作を行わない。
また、レスポンスキューRESQ1へレスポンスResRD32ID3SEQ16が格納されると、キュー管理回路QMGTは、再度、レスポンスキューRESQ1内のレスポンスが格納されている占有状態のレスポンスキュー数、レスポンスキューRESQ1内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する。
さらに、レスポンスキューRESQ1に格納されているレスポンスResRD32ID3SEQ16が、情報処理回路CPU3へ送信されると、キュー管理回路QMGTは、レスポンスキューRESQ1へ保持されているレスポンスResRD32ID3SEQ16を削除し、再度、レスポンスキューRESQ1内のレスポンスが格納されている占有状態のレスポンスキュー数、レスポンスキューRESQ1内の予約されていない空き状態のレスポンスキュー数と予約された空き状態のレスポンスキュー数を計算し、更新する。
以上説明したように、リクエストへ識別番号IDおよびリクエスト番号を付加することで、情報処理装置CPU_CHIPから各メモリ装置へリクエストが確実に転送される。また、レスポンスへ識別番号IDおよびレスポンス番号を付加することで、各メモリから正しくデータ転送が行えたことを確認でき、情報処理装置CPU_CHIPおよびメモリ装置M0、M1、M2の直列接続によって、接続信号数を減少させながらも、情報処理装置CPU_CHIPは所望の処理を実行することができる。また、情報処理装置CPU_CHIPがメモリモジュールMEMからデータを読み出すために、情報処理装置CPU_CHIPからリード命令を含むリクエストReqRDをメモリ装置M0へ転送する際は、前もって、情報処理装置CPU_CHIPのレスポンスキューRESQ1内で、まだ予約されていない空き状態のレスポンスキューを予約し、リクエストReqRDに対するレスポンスResRDを受け取るために必要な空き状態のレスポンスキューを、確保する。また、メモリ装置M0がリクエストReqRDをメモリ装置M1へ転送する際は、前もって、メモリ装置M0のレスポンスキューResQp内で予約されていない空き状態のレスポンスキューを予約し、リクエストReqRDに対するレスポンスResRDを受け取るために必要な空き状態のレスポンスキューを、確保する。また、メモリ装置M1がリクエストReqRDをメモリ装置M2へ転送する際は、前もって、メモリ装置M1のレスポンスキューResQp内で予約されていない空き状態のレスポンスキューを予約し、リクエストReqRDに対するレスポンスResRDを受け取るために必要な空き状態のレスポンスキューを、確保する。このような動作を行うことで、本実施の形態の情報処理システムは、常に、情報処理装置CPU_CHIPからのリクエストReqRDに対するレスポンスResRDを転送するために必要な空き状態のレスポンスキューを確保でき、レスポンスResRDは最短レイテンシで情報処理装置CPU_CHIPへ転送される。
さらに、レイテンシを実測し、レイテンシの期待値と比較することで、本実施の形態の情報処理システムが正常に動作しているか判断できる。さらに、レイテンシの実測値とレイテンシの期待値との差分が許容範囲を超えた場合はレイテンシ補正動作を行うことで、常に許容範囲内の低レイテンシで動作させることができる。
<読み出しおよび書き込み動作>
図24はメモリ制御回路DCMCのレイテンシレジスタLTREG内のメモリ装置M0のレイテンシLatBank値を8へ、メモリ装置M1のレイテンシLatBank値を18へ、メモリ装置M2のレイテンシLatBank値を28へ設定し、メモリ装置M0に関するタイミングレジスタM0TREGのtm0RCD値を3へ、メモリ装置M1に関するタイミングレジスタM1TREGのtm1RCD値を3へ設定し、メモリ装置M2に関するタイミングレジスタM2TREGのtm2RCD値を1000へ設定した場合の、メモリ装置M0およびメモリ装置M1からのデータの読み出し動作と、メモリ装置M0へのデータの書き込み動作に関する動作波形の一例を示す。また、メモリ制御回路DCMCからのリクエストに対する実測レイテンシは、レイテンシレジスタLTREGで設定されたレイテンシLatBankと等しく、レイテンシ補正動作は行われない場合の動作波形の一例を示す。
リクエスト出力回路RQOUTはメモリ装置M0に関するカウンタC0dsとカウンタC0deを装備し、メモリ装置M1に関するカウンタC1dsとカウンタC1deを装備し、メモリ装置M2に関するカウンタC2dsとカウンタC2deを装備している。カウンタC0dsはメモリ装置M0へのリード命令を含むリクエストに対するレスポンスが、レスポンス信号RsMux0を通じて、メモリ制御回路DCMCへ入力される際の、レスポンスの先頭の時間位置RTlat0であり、また、カウンタC0deは、メモリ装置M0へのリード命令を含むリクエストに対するレスポンスが、レスポンス信号RsMux0を通じて、メモリ制御回路DCMCへ入力される際の、レスポンスの最後尾の時間位置RBlat0を示すためのカウンタである。つまり、カウンタC0dsの値からカウンタC0deの値までの期間は、メモリ装置M0へのリード命令を含むリクエストに対するレスポンスがレスポンス信号RsMux0上へ現れる相対的な時間帯m0RsDrを示している。
また、リクエスト出力回路RQOUTはカウンタC0dsおよびC0deへ、メモリ装置M0へのリード命令を含むリクエストを転送すると同時に、それぞれのカウンタへ、レスポンスの先頭の初期時間位置Tlat0および最後尾の初期時間位置RBlat0を設定し、後に、クロックRqCK0の立ち上がりで、カウンタC0dsおよびC0deへ設定されている値を1つずつ減らしていき、レスポンス信号RsMux0へ現れる相対的な時間帯m0RsDrを更新する。カウンタC1dsはメモリ装置M1へのリード命令を含むリクエストに対するレスポンスが、レスポンス信号RsMux0を通じて、メモリ制御回路DCMCへ入力される際の、レスポンスの先頭の時間位置Rtlat1であり、また、カウンタC1deは、メモリ装置M1へのリード命令を含むリクエストに対するレスポンスが、レスポンス信号RsMux0を通じて、メモリ制御回路DCMCへ入力される際の、レスポンスの最後尾の時間位置Rblat1を示すためのカウンタである。つまり、カウンタC1dsの値からカウンタC1deの値までの期間は、メモリ装置M1へのリード命令を含むリクエストに対するレスポンスがレスポンス信号RsMux0上へ現れる相対的な時間帯m1RsDrを示している。
また、リクエスト出力回路RQOUTはカウンタC1dsおよびC1deへ、メモリ装置M1へのリード命令を含むリクエストを転送すると同時に、それぞれのカウンタへ、レスポンスの先頭の初期時間位置Tlat1および最後尾の初期時間位置Rblat1を設定し、後に、クロックRqCK0の立ち上がりで、カウンタC1dsおよびC1deへ設定されている値を1つずつ減らしていき、レスポンス信号RsMux0へ現れる相対的な時間帯m1RsDrを更新する。カウンタC2dsはメモリ装置M2へのリード命令を含むリクエストに対するレスポンスが、レスポンス信号RsMux0を通じて、メモリ制御回路DCMCへ入力される際の、レスポンスの先頭の時間位置Rtlat2であり、また、カウンタC2deは、メモリ装置M2へのリード命令を含むリクエストに対するレスポンスが、レスポンス信号RsMux0を通じて、メモリ制御回路DCMCへ入力される際の、レスポンスの最後尾の時間位置Rblat2を示すためのカウンタである。つまり、カウンタC2dsの値からカウンタC2deの値までの期間は、メモリ装置M2へのリード命令を含むリクエストに対するレスポンスがレスポンス信号RsMux0上へ現れる相対的な時間帯m2RsDrを示している。
また、リクエスト出力回路RQOUTはカウンタC2dsおよびC2deへ、メモリ装置M2へのリード命令を含むリクエストを転送すると同時に、それぞれのカウンタへ、レスポンスの先頭の初期時間位置Tlat2および最後尾の初期時間位置Rblat2を設定し、後に、クロックRqCK0の立ち上がりで、カウンタC2dsおよびC2deへ設定されている値を1つずつ減らしていき、レスポンス信号RsMux0へ現れる相対的な時間帯m2RsDrを更新する。カウンタC0dsおよびカウンタC0deは、特に限定されないが、パワーアップシーケンスの際に、情報処理装置CPU0によって0へ初期設定される。
メモリ制御回路DCMCのリクエスト出力回路RQOUTは、リクエスト信号RqMux0を通じて、メモリ装置M0へのリクエストReqACID1SEQ10をクロック信号RqCK0に同期させ、メモリ装置M0へ転送する。リクエストReqACID1SEQ10はリクエスト開始フラグReqStFlag値1、識別番号ID値1、バンクアクティブ命令AC、マスター番号MID値3、可変部リクエスト長VREQL値4、リクエスト番号ReqN値10、バンクアドレスBK0、ページアドレスRow63から構成される。
メモリ装置M0へバンクアクティブ命令ACを含むリクエストReqACID1SEQ10が転送された後、メモリ装置M0へリードおよびライト命令を含んだリクエストを転送する場合には、最小でtm0RCD値3クロックサイクルの時間間隔trcd0が必要である。リクエスト出力回路RQOUT内のメモリ装置M0のカウンタC0trcdは、この時間間隔trcd0をチェックするためのカウンタである。カウンタC0trcdは、パワーアップシーケンスの際に、情報処理装置CPU0によってtm0RCD値3へ初期設定される。リクエストReqACID1SEQ10を転送した際に、カウンタC0trcdは、クロックRqCK0の立ち上がりで、その値を1つずつ減らし、カウンタC0trcdの値が0になった場合、リクエスト出力回路RQOUTは、メモリ装置M0へリードおよびライト命令を含んだリクエストを転送することができる。
メモリ装置M0は、リクエスト出力回路RQOUTからのリクエストReqACID1SEQ10に含まれるID値1と、自身のIDレジスタ回路IDRに保持されているID値1が一致したことによって、自身へのリクエストであることを確認する。次に、メモリ装置M0はリクエストReqACID1SEQ10に含まれるバンクアクティブ命令AC、バンクアドレスBK0、ページアドレスRow63を利用し、メモリ回路MBank0内のロウアドレス63に接続されているメモリセルを活性化し、1kByte分のデータをセンスアンプSenseAmpへ転送する。次に、リクエスト出力回路RQOUTがリクエストReqACID1SEQ10に続いて、メモリ装置M1へのリクエストReqACID2SEQ11をメモリ装置M0へ転送する。リクエストReqACID2SEQ11は、リクエスト開始フラグReqStFlag値1、識別番号ID値2、バンクアクティブ命令AC、マスター番号MID値2、可変部リクエスト長VREQL値4、リクエスト番号ReqN値11、バンクアドレスBK0、ページアドレスRow63から構成される。
メモリ装置M1へのバンクアクティブ命令ACを含むリクエスReqACID2SEQ11が転送された後、メモリ装置M1へリードおよびライト命令を含んだリクエストを転送する場合には、最小でtm1RCD値3クロックサイクルの時間間隔trcd1が必要である。リクエスト出力回路RQOUT内のメモリ装置M0のカウンタC1trcdは、この時間間隔trcd1をチェックするためのカウンタである。カウンタC1trcdは、特に限定されないが、パワーアップシーケンスの際に、情報処理装置CPU0によってtm0RCD値3へ初期設定される。リクエストReqACID2SEQ11を転送した際に、カウンタC1trcdは、クロックRqCK0の立ち上がりで、その値を1つずつ減らし、カウンタC1trcdの値が0になった場合、リクエスト出力回路RQOUTは、メモリ装置M1へリードおよびライト命令を含んだリクエストを転送することができる。
メモリ装置M0は、リクエスト出力回路RQOUTからのリクエストReqACID2SEQ11に含まれるID値2と自身のIDレジスタ回路IDRに保持されているID値1を比較し、不一致によって、リクエストReqACID2SEQ11をメモリ装置M1へ転送する。メモリ装置M1は、メモリ装置M0からのリクエストReqACID2SEQ11に含まれるID値2と、自身のIDレジスタ回路IDRに保持されているID値2が一致したことによって、自身へのリクエストであることを確認する。次に、メモリ装置M1は、リクエストReqACID2SEQ11に含まれるバンクアクティブ命令AC、バンクアドレスBK0、ページアドレスRow63を利用し、メモリ回路NV1BK0内のロウアドレス63に接続されているメモリセルを活性化し、1kByte分のデータをデータ制御回路DataContへ転送する。
次に、リクエスト出力回路RQOUTから、リクエストReqACID2SEQ11に続いて、メモリ装置M0への8バイトデータのリード命令RD8を含むリクエストReqRD8ID1SEQ12が出力される際の動作を説明する。リクエストReqRD8ID1SEQ12は、リクエスト開始フラグReqStFlag値1、識別番号ID値1、8バイトデータのリード命令RD8、マスター番号MID値3、可変部リクエスト長VREQL値4、リクエスト番号ReqN値12、バンクアドレスBK0およびカラムアドレスCol32から構成される。リクエスト出力回路RQOUTは、メモリ装置M0への直近のリクエストがリクエストReqRD8ID1SEQ12であると判定した際に、リクエストReqRD8ID1SEQ12に対するレスポンスResRD8ID1SEQ12の先頭の初期時間位置Tlat0および最後尾の初期時間位置Blat0を計算し、それぞれレジスタRegTlat0およびReg Blat0へ保存する。
特に限定しないが、リクエストReqRD8ID1SEQ12に対するレスポンスResRD8ID1SEQ12の時間位置Tlat0は、初期時間位置Tlat0=レイテンシm0Lat値=8となり、時間位置Blat0は、以下の様に表すことができる。
時間位置Blat0
=(レイテンシm0Lat値)+{(((共通レスポンス部CMNRESFのバイト数CMNBL+リードデータのバイト数RDBL)÷レスポンス信号数RsBL(バイト換算))÷2)−1}
ここで、レイテンシm0Lat値=8、共通レスポンス部CMNRESFのバイト数CMNBL=4、リードデータのバイト数RDBL=8、レスポンス信号数RsBL=1、のとき、初期時間位置Blat0=8+{(((4+8)÷1)÷2)−1}=13となる。よって、レジスタRegTlat0には初期時間位置Tlat0の値8が、レジスタReg Blat0には初期時間位置Blat0の値13が保存される。
次に、リクエスト出力回路RQOUTは、メモリ装置M0へのリクエストReqRD8ID1SEQ12を出力する前に、カウンタC0ds値とカウンタC0de値がレジスタRegTlat0値とレジスタReg Blat0値の間に存在するか(RegTlat0≦C0ds≦RegBlat0、RegTlat0≦C0es≦RegBlat0)をチェックし、カウンタC1ds値とカウンタC1de値がレジスタRegTlat0値とレジスタReg Blat0値の間に存在するか(RegTlat0≦C1ds≦RegBlat0、RegTlat0≦C1es≦RegBlat0)をチェックし、カウンタC2ds値とカウンタC2de値がレジスタRegTlat0値とレジスタReg Blat0値の間に存在するか(RegTlat0≦C2ds≦RegBlat0、RegTlat0≦C2es≦RegBlat0)をチェックする。
カウンタC0ds値と、カウンタC0es値と、カウンタC1ds値と、カウンタC1es値と、カウンタC2ds値と、カウンタC2es値のすべてが、初期時間位置Tlat1と初期時間位置Blat1の間に存在しない場合は、メモリ装置M0へのリクエストReqRD8ID1SEQ12に対するレスポンスResRD8ID1SEQ12がレスポンス信号RsMux0上へ現れる時間帯m0RsDrと重なる他のレスポンスは存在しないことを示す。一方、カウンタC0ds値と、カウンタC0es値と、カウンタC1ds値と、カウンタC1es値と、カウンタC2ds値と、カウンタC2es値のいずれかが初期時間位置Tlat0と初期時間位置Blat0の間に存在する場合は、メモリ装置M0へのリクエストReqRD8ID1SEQ12に対するレスポンスResRD8ID1SEQ12がレスポンス信号RsMux0上へ現れる時間帯m0RsDrと重なる他のレスポンスは存在することを示す。
図24では、リクエストReqRD8ID1SEQ12を出力する直前において、カウンタC0ds値と、カウンタC0es値と、カウンタC1ds値と、カウンタC1es値と、カウンタC2ds値と、カウンタC2es値の値はすべて0であり、レスポンスResRD8ID1SEQ12のレジスタRegTlat0値は8、レジスタRegBlat0値は13のため、レスポンスResRD8ID1SEQ12は他のレスポンスと重ならないことがわかる。リクエスト出力回路RQOUTは、レスポンスResRD8ID1SEQ12が他のレスポンスへ重ならず、且つ、カウンタC1trcdの値が0であることを確認し、リクエストReqRD8ID1EQ12を出力する。また、レスポンスResRD8ID1SEQ12が他のレスポンスと重なった場合は、リクエスト出力回路RQOUTは、リクエストReqRD8ID1EQ12を出力せず、リクエストの出力待ち状態となる。また、リクエスト出力回路RQOUTはリクエストReqRD8ID1EQ12を出力すると同時に、カウンタC0dsへレジスタRegTlat0値8を設定し、カウンタC0deへレジスタReg Blat0値13を設定する。その後、リクエスト出力回路RQOUTはクロックRqCK0の立ち上がりで、カウンタC0dsおよびC0deへ設定されている値を1つずつ減らしていき、レスポンス信号RsMux0へ現れる相対的な時間帯m0RsDrを更新する。
メモリ装置M0は、リクエストReqRD8ID1EQ12を受け取り、このリクエストReqRD8ID1EQ12に含まれるID値1と、自身のIDレジスタ回路IDRに保持されているID値1が一致したことによって、自身へのリクエストであることを確認する。次に、メモリ装置M0はリクエストReqRD8ID1EQ12に含まれるリード命令RD8、バンクアドレスBK0およびカラムアドレスCol32を利用し、メモリ回路Mem0のメモリバンクMBank0のセンスアンプSenseAmpから、カラムアドレス32を開始アドレスとして、8バイト分のデータを読み出す。
読み出された8バイト分のデータへは、レスポンス開始フラグResStFlag値1、識別番号ID値1、8バイトデータのリード命令RD8、マスター番号MID値3、リードデータ長RDL値8、レスポンス番号ResN値12(リクエスト番号ReqN値12と等しい値)から構成される共通レスポンス部CMNRESFが付加されたレスポンスResRD8ID1SEQ12が生成され、レスポンスキューRsQoを介して、レスポンス信号RsMux0からメモリ制御回路DCMCのレスポンス入力回路RSINへ入力される。この際の、レスポンスResRD8ID1SEQ12のレイテンシはレイテンシm0Lat値8クロックサイクルとなる。
次に、リクエスト出力回路RQOUTから、リクエストReqRD8ID1SEQ12に続いて、メモリ装置M1へのリード命令を含んだリクエストReqRD8ID2SEQ13が出力される際の動作を説明する。リクエストReqRD8ID2SEQ13は、8バイトデータのリード命令RD8を含むリクエストであり、リクエスト開始フラグReqStFlag値1、識別番号ID値2、8バイトデータのリード命令RD8、マスター番号MID値3、可変部リクエスト長VREQL値4、リクエスト番号ReqN値13、バンクアドレスBK0およびカラムアドレスCol32から構成される。
リクエスト出力回路RQOUTは、メモリ装置M1への直近のリクエストがリクエストReqRD8ID2SEQ13であると判定した際に、リクエストReqRD8ID2SEQ13に対するレスポンスResRD8ID2SEQ13の先頭の初期時間位置Tlat1および最後尾の初期時間位置Blat1を計算し、それぞれレジスタRegTlat1およびReg Blat1へ保存する。リクエストReqRD8ID2SEQ13に対するレスポンスResRD8ID2SEQ13の時間位置Tlat1は、初期時間位置Tlat1=レイテンシm1Lat値=18となり、時間位置Blat1は、以下の様に表すことができる。
時間位置Blat1
=レイテンシm1Lat値+{(((共通レスポンス部CMNRESFのバイト数CMNBL+リードデータのバイト数RDBL)÷レスポンス信号数RsBL(バイト換算))÷2)−1}
ここで、レイテンシm1Lat値=18、共通レスポンス部CMNRESFのバイト数CMNBL=4、リードデータのバイト数RDBL=8、レスポンス信号数RsBL=1、のとき、初期時間位置Blat1=18+{(((4+8)÷1)÷2)−1}=23となる。従って、レジスタRegTlat1には初期時間位置Tlat1の値18が、レジスタReg Blat1には初期時間位置Blat1の値23が保存される。
次に、リクエスト出力回路RQOUTは、メモリ装置M1へのリクエストReqRD8ID2SEQ13を出力する前に、カウンタC0ds値とカウンタC0de値がレジスタRegTlat1値とレジスタReg Blat1値の間に存在するか(RegTlat1≦C0ds≦RegBlat1、RegTlat1≦C0es≦RegBlat1)をチェックし、カウンタC1ds値とカウンタC1de値がレジスタRegTlat1値とレジスタReg Blat1値の間に存在するか(RegTlat1≦C1ds≦RegBlat1、RegTlat1≦C1es≦RegBlat1)をチェックし、カウンタC2ds値とカウンタC2de値がレジスタRegTlat1値とレジスタReg Blat1値の間に存在するか(RegTlat1≦C2ds≦RegBlat1、RegTlat1≦C2es≦RegBlat1)をチェックする。
カウンタC0ds値と、カウンタC0es値と、カウンタC1ds値と、カウンタC1es値と、カウンタC2ds値と、カウンタC2es値のすべてが、初期時間位置Tlat1と初期時間位置Blat1の間に存在しない場合は、メモリ装置M1へのリクエストReqRD8ID2SEQ13に対するレスポンスResRD8ID2SEQ13がレスポンス信号RsMux0上へ現れる時間帯m1RsDrと重なる他のレスポンスは存在しないことを示す。一方、カウンタC0ds値と、カウンタC0es値と、カウンタC1ds値と、カウンタC1es値と、カウンタC2ds値と、カウンタC2es値のいずれかが初期時間位置Tlat1と初期時間位置Blat1の間に存在する場合は、メモリ装置M1へのリクエストReqRD8ID2SEQ13に対するレスポンスResRD8ID2SEQ13がレスポンス信号RsMux0上へ現れる時間帯m1RsDrと重なる他のレスポンスは存在することを示す。
図24では、リクエストReqRD8ID2SEQ13を出力する直前において、カウンタC0ds値は5、カウンタC0es値は10、カウンタC1ds値、カウンタC1es値、カウンタC2ds値およびカウンタC2es値の値はすべて0であり、レスポンスResRD8ID2SEQ13のレジスタRegTlat1値は18、レジスタRegBlat1値は23のため、レスポンスResRD8ID2SEQ13は他のレスポンスと重ならないことがわかる。
リクエスト出力回路RQOUTは、レスポンスResRD8ID2SEQ13が他のレスポンスへ重ならず、且つ、カウンタC1trcdの値が0であることを確認し、リクエストReqRD8ID2EQ13をメモリ装置M0へ出力する。また、レスポンスResRD8ID2SEQ13が他のレスポンスと重なった場合は、リクエスト出力回路RQOUTは、リクエストReqRD8ID2EQ13を出力せず、リクエストの出力待ち状態となる。また、リクエスト出力回路RQOUTはリクエストReqRD8ID2EQ13を出力すると同時に、カウンタC1dsへレジスタRegTlat1値18を設定し、カウンタC1deへレジスタReg Blat1値23を設定する。その後、リクエスト出力回路RQOUTはクロックRqCK0の立ち上がりで、カウンタC1dsおよびC1deへ設定されている値を1つずつ減らしていき、レスポンス信号RsMux0へ現れる相対的な時間帯m1RsDrを更新する。
メモリ装置M0は、リクエストReqRD8ID2EQ13を受け取り、このリクエストReqRD8ID2EQ13に含まれるID値2と、自身のIDレジスタ回路IDRに保持されているID値1を比較する。両者は一致していないので、メモリ装置M0はリクエストReqRD8ID2EQ13をメモリ装置M1へ送信する。メモリ装置M1は、リクエストReqRD8ID2EQ13を受け取り、このリクエストReqRD8ID2EQ13に含まれるID値2と、自身のIDレジスタ回路IDRに保持されているID値2が一致したことによって、自身へのリクエストであることを確認する。
次に、メモリ装置M1はリクエストReqRD8ID2EQ13に含まれるリード命令RD8、バンクアドレスBK0およびカラムアドレスCol32を利用し、メモリ回路Mem1のメモリバンクNV1Bk0のデータバッファDataLatから、カラムアドレス32を開始アドレスとして、8バイト分のデータを読み出す。読み出された8バイト分のデータへは、レスポンス開始フラグResStFlag値1、識別番号ID値2、8バイトデータのリード命令RD8、マスター番号MID値3、リードデータ長RDL値8、レスポンス番号ResN値13(リクエスト番号ReqN値13と等しい値)から構成される共通レスポンス部CMNRESFが付加されたレスポンスResRD8ID2SEQ13が生成され、メモリ装置M1のレスポンスキューRsQoを介して、レスポンス信号RsMux1からメモリ装置M0へ送信される。
レスポンスResRD8ID2SEQ13は、メモリ装置M0のレスポンスキュー回路RsQpへ格納され、レスポンス信号RsMux0を介してメモリ制御回路DCMCのレスポンス入力回路RSINへ入力される。この際の、レスポンスResRD8ID1SEQ12のレイテンシはレイテンシm1Lat値18クロックサイクルとなる。
次に、リクエスト出力回路RQOUTから、リクエストReqRD8ID2SEQ13に続いて、メモリ装置M0へのリード命令を含んだリクエストReqRD8ID1SEQ14が出力される際の動作を説明する。リクエストReqRD8ID1SEQ14は、リクエスト開始フラグReqStFlag値1、識別番号ID値1、8バイトデータのリード命令RD8、マスター番号MID値3、可変部リクエスト長VREQL値4、リクエスト番号ReqN値14、バンクアドレスBK0およびカラムアドレスCol32から構成される。リクエスト出力回路RQOUTは、メモリ装置M0への直近のリクエストがリクエストReqRD8ID1SEQ14であると判定した際に、リクエストReqRD8ID1SEQ14に対するレスポンスResRD8ID1SEQ14の先頭の初期時間位置Tlat0および最後尾の初期時間位置Blat0を計算し、それぞれレジスタRegTlat0およびReg Blat0へ保存するリクエストReqRD8ID1SEQ14に対するレスポンスResRD8ID1SEQ14の時間位置Tlat0は、初期時間位置Tlat0=レイテンシm0Lat値=8となり、時間位置Blat0は、以下の様に表すことができる。
時間位置Blat0
=レイテンシm0Lat値+{(((共通レスポンス部CMNRESFのバイト数CMNBL+リードデータのバイト数RDBL)÷レスポンス信号数RsBL(バイト換算))÷2)−1}
ここで、レイテンシm0Lat値=8、共通レスポンス部CMNRESFのバイト数CMNBL=4、リードデータのバイト数RDBL=8、レスポンス信号数RsBL=1、のとき、初期時間位置Blat0=8+{(((4+8)÷1)÷2)−1}=13となる。従って、レジスタRegTlat0には初期時間位置Tlat0の値8が、レジスタReg Blat0には初期時間位置Blat0の値13が保存される。
次に、リクエスト出力回路RQOUTは、メモリ装置M0へのリクエストReqRD8ID1SEQ14を出力する前に、カウンタC0ds値とカウンタC0de値がレジスタRegTlat0値とレジスタReg Blat0値の間に存在するか(RegTlat0≦C0ds≦RegBlat0、RegTlat0≦C0es≦RegBlat0)をチェックし、カウンタC1ds値とカウンタC1de値がレジスタRegTlat0値とレジスタReg Blat0値の間に存在するか(RegTlat0≦C1ds≦RegBlat0、RegTlat0≦C1es≦RegBlat0)をチェックし、カウンタC2ds値とカウンタC2de値がレジスタRegTlat0値とレジスタReg Blat0値の間に存在するか(RegTlat0≦C2ds≦RegBlat0、RegTlat0≦C2es≦RegBlat0)をチェックする。
カウンタC0ds値と、カウンタC0es値と、カウンタC1ds値と、カウンタC1es値と、カウンタC2ds値と、カウンタC2es値のすべてが、初期時間位置Tlat1と初期時間位置Blat1の間に存在しない場合は、メモリ装置M0へのリクエストReqRD8ID1SEQ14に対するレスポンスResRD8ID1SEQ14がレスポンス信号RsMux0上へ現れる時間帯m0RsDrと重なる他のレスポンスは存在しないことを示す。一方、カウンタC0ds値と、カウンタC0es値と、カウンタC1ds値と、カウンタC1es値と、カウンタC2ds値と、カウンタC2es値のいずれかが初期時間位置Tlat0と初期時間位置Blat0の間に存在する場合は、メモリ装置M0へのリクエストReqRD8ID1SEQ14に対するレスポンスResRD8ID1SEQ14がレスポンス信号RsMux0上へ現れる時間帯m0RsDrと重なる他のレスポンスは存在することを示す。
図24では、リクエストReqRD8ID1SEQ14を出力する直前において、カウンタC0ds値は1、カウンタC0es値は6、カウンタC1ds値は15、カウンタC1es値は20、カウンタC2ds値は0、カウンタC2es値は0であり、レスポンスResRD8ID1SEQ14のレジスタRegTlat0値は8、レジスタRegBlat0値は13のため、レスポンスResRD8ID1SEQ14は他のレスポンスと重ならないことがわかる。リクエスト出力回路RQOUTは、レスポンスResRD8ID1SEQ14が他のレスポンスへ重ならず、且つ、カウンタC1trcdの値が0であることを確認し、リクエストReqRD8ID1EQ14を出力する。また、レスポンスResRD8ID1SEQ14が他のレスポンスと重なった場合は、リクエスト出力回路RQOUTは、リクエストReqRD8ID1EQ14を出力せず、リクエストの出力待ち状態となる。また、リクエスト出力回路RQOUTはリクエストReqRD8ID1EQ14を出力すると同時に、カウンタC0dsへレジスタRegTlat0値8を設定し、カウンタC0deへレジスタReg Blat0値13を設定する。その後、リクエスト出力回路RQOUTはクロックRqCK0の立ち上がりで、カウンタC0dsおよびC0deへ設定されている値を1つずつ減らしていき、レスポンス信号RsMux0へ現れる相対的な時間帯m0RsDrを更新する。
メモリ装置M0は、リクエストReqRD8ID1EQ14を受け取り、このリクエストReqRD8ID1EQ14に含まれるID値1と、自身のIDレジスタ回路IDRに保持されているID値1が一致したことによって、自身へのリクエストであることを確認する。次に、メモリ装置M0はリクエストReqRD8ID1EQ14に含まれるリード命令RD8、バンクアドレスBK0およびカラムアドレスCol32を利用し、メモリ回路Mem0のメモリバンクMBank0のセンスアンプSenseAmpから、カラムアドレス32を開始アドレスとして、8バイト分のデータを読み出す。読み出された8バイト分のデータへは、レスポンス開始フラグResStFlag値1、識別番号ID値1、8バイトデータのリード命令RD8、マスター番号MID値3、リードデータ長RDL値8、レスポンス番号ResN値14(リクエスト番号ReqN値12と等しい値)から構成される共通レスポンス部CMNRESFが付加されたレスポンスResRD8ID1SEQ14が生成され、レスポンスキューRsQoを介して、レスポンス信号RsMux0からメモリ制御回路DCMCのレスポンス入力回路RSINへ入力される。
レスポンスResRD8ID1SEQ14は、レスポンスResRD8ID1SEQ12に続いて、レスポンスResRD8ID1SEQ13より早くレスポンス入力回路RSINへ入力される。この際の、レスポンスResRD8ID1SEQ14のレイテンシはレイテンシm0Lat値8クロックサイクルとなる。
次に、リクエスト出力回路RQOUTから、リクエストReqWT16ID2SEQ15に続いて、メモリ装置M0へのライト命令を含んだリクエストReqWT16ID1SEQ15が出力される際の動作を説明する。リクエストReqWT8ID1SEQ15は、リクエスト開始フラグReqStFlag値1、識別番号ID値1、16バイトデータのライト命令RD8、マスター番号MID値3、可変部リクエスト長VREQL値12、リクエスト番号ReqN値15、バンクアドレスBK1およびカラムアドレスCol32から構成される。メモリ装置M0のリクエストキュー制御回路RqCTにて、リクエストReqWT16ID1SEQ14を受け取り、このリクエストReqWT16ID1SEQ14に含まれるID値1と、自身のIDレジスタ回路IDRに保持されているID値1が一致したことによって、自身へのリクエストであることを確認する。次に、メモリ装置M0のリクエストキュー制御回路RqCTはリクエストReqWT16ID1SEQ15に含まれるライト命令WT16、バンクアドレスBK0およびカラムアドレスCol32を利用し、メモリ回路Mem0のメモリバンクMbank1のセンスアンプSenseAmpを介して、カラムアドレス32を開始アドレスとした16バイト分のデータをメモリバンクMbank1へ書き込む。
リクエストキュー制御回路RqCTとレスポンスキュー制御回路RsCTはそれぞれ独立に動作するため、レスポンスResRD8ID1SEQ14およびレスポンスResRD8ID2SEQ13が情報処理装置CPU_CHIPへ転送されている最中でもリクエストReqWT16ID1SEQ15の書き込み動作を実行することができる。
以上説明したように、各メモリ装置へのリクエストに対するレスポンスの時間帯を予測し、管理し、リクエストを発行することにより、低レイテンシを実現しつつ、レスポンス信号RsMux0上を、隙間無く、それぞれのレスポンスが重ならないように、送信されるため、高速データ転送レートも達成できる。さらに、リクエストインターフェース回路ReIFとレスポンスインターフェース回路は独立に動作可能なため、データの読み出し動作と書き込み動作を同時に実行でき、データ転送性能を向上させることができる。上記では、メモリ装置M0でのデータの読み出し及び書き込みについて説明したが、他のメモリ装置M1及びM2においても同様の動作が実行できることは言うまでもない。さらに、それぞれのメモリ装置においてリクエストインターフェース回路ReIFとレスポンスインターフェース回路は独立に動作可能なため、異なるメモリ装置へのデータ読み出し及び書き込みリクエストが生じた場合でも、それぞれのリクエストを独立に並列に処理でき、データ転送性能を向上できることは言うまでもない。
<レイテンシ補正動作:許容レイテンシLatRange値0>
図25は、メモリ制御回路DCMCのレイテンシレジスタLTREG内のメモリ装置M0のレイテンシLatExpID1値は6へ、許容レイテンシLatRange値は0へ、タイムアウトレイテンシLatTimeOut値は60へ設定され、メモリ装置M0からのレスポンスの実測レイテンシが、他のメモリ装置からのレスポンスによって、レイテンシLatExpID1値6より大きくなった際の、レイテンシ調整回路LCHCKが行うレイテンシ補正動作の一例を示す。また、図29はレイテンシ調整回路LCHCKがレイテンシ補正動作を行うために装備しているカウンタの動作の一例を示すフローチャートの一例である。
レイテンシ調整回路LCHCKは、カウンタDCounterとカウンタUCounterとカウンタUPCounter1と、許容レイテンシレジスタRegLatRangeと、タイムアウトレイテンシレジスタRegLatRangeを装備する。メモリ装置M0に関するカウンタC0dsおよびカウンタC0deは、特に限定されないが、パワーアップシーケンスの際に、情報処理装置CPU0によって0へ初期設定される。カウンタDCounterとカウンタUCounterとUPCounter1は、特に限定されないが、パワーアップシーケンスの際に、情報処理装置CPU0によって0へ初期設定される。また、許容レイテンシレジスタRegLatRangeは、特に限定されないが、パワーアップシーケンスの際に、許容レイテンシLatRange値0へ設定され、タイムアウトレイテンシレジスタRegLatToutは、特に限定されないが、パワーアップシーケンスの際に、タイムアウトレイテンシLatTimeOut値60へ初期設定される。
リクエスト出力回路RQOUTから、メモリ装置M0への8バイトデータのリード命令RD8を含むリクエストReqRD8ID1SEQ12と、リクエストReqRD8ID1SEQ13と、リクエストReqRD8ID1SEQ14と、リクエストReqRD8ID1SEQ15が出力される際の動作を説明する。リクエストReqRD8ID1EQ12を出力する(図25:Departure=High)と同時に、カウンタDCounterへレジスタRegTlat0値6を設定し(図29:Step1)、カウンタC0dsへレジスタRegTlat0値6を設定し、カウンタC0deへレジスタReg Blat0値11を設定する。リクエスト出力回路RQOUTは、カウンタC0dsおよびC0deへ設定されている値を1つずつ減らしていき、レスポンス信号RsMux0へ現れる相対的な時間帯m0RsDrを更新する。レイテンシ調整回路LCHCKは、リクエストReqRD8ID1EQ12に対するレスポンスResRD8ID1EQ12が返ってきたかをチェック(図29:Step2)し、未だ返ってこない場合(図25:Arrival=Low)は、カウンタDCounterが0より大きい場合(図29:Step3)、クロックRqCK0の立ち上がりで、その値を1つずつ減らす(図29:Step4)。また、リクエストReqRD8ID1EQ12に続いて、カウンタC0ds値が1およびC0de値が6になった際に、リクエストReqRD8ID1EQ13を出力し(図25:Departure=High)、同時に、カウンタDCounterへレジスタRegTlat0値6を設定し(図29:Step1)、カウンタC0dsへレジスタRegTlat0値6を設定し、カウンタC0deへレジスタReg Blat0値11を設定する。
カウンタDCounterが0になっても、レスポンスResRD8ID1EQ12が返ってこない場合(図25:Arrival=Low)は、カウンタUPCounter1に設定されている値を1つずつ増加させ(図29:Step5)、許容レイテンシレジスタRegLatRange値0とカウンタUCounter値0を比較する(図29:Step6)。カウンタUCounter値0は許容レイテンシレジスタRegLatRange値0以上のため、レイテンシ調整回路LCHCKはNotifyStatus信号をCorrectionとし(図25:Notify Status=Correction)、レイテンシ補正の開始をリクエスト出力回路RQOUTへ通達する(図29:Step7)。
リクエスト出力回路RQOUTは、NotifyStatus信号値Correctionを受けて、カウンタC0dsとカウンタC0deを停止させる(図25:Stop Count)。レスポンスResRD8ID1EQ12が、レイテンシLatExpID1値6より3サイクル遅れて返ってくると、カウンタUPCounter1値3とタイムアウトレイテンシレジスタRegLatTout値60を比較する(図29:Step9)。カウンタUPCounter1値3はタイムアウトレイテンシレジスタRegLatTout値60より小さいので、カウンタUPCounter1値を0にクリアする(図29:Step10)。次にカウンタDCounter値が0より大きいかを比較し(図29:Step11)、カウンタDCounter値は0のため、カウンタUCounter値が0より大きいかを比較する(図29:Step12)。カウンタUCounter値は0のため、レイテンシ補正動作を行っているかをチェックする(図29:Step13)。レイテンシ調整回路LCHCKは、レイテンシ補正動作を行っているので、NotifyStatus信号をNOCorrectionとし、レイテンシ補正の終了をリクエスト出力回路RQOUTへ通達する(図29:Step17)。
リクエスト出力回路RQOUTは、NotifyStatus信号値NoCorrectionを受けて、カウンタC0dsとカウンタC0deを動作させ、それらの値をひとつずつ減らす。レイテンシ補正動作によって、カウンタC0dsとカウンタC0deは、レスポンスResRD8ID1EQ12がレイテンシLatExpID1値6より遅れた3サイクル分停止する。リクエストReqRD8ID1EQ13に続いて、カウンタC0ds値が1およびC0de値が6になった際に、リクエストReqRD8ID1EQ14を出力し(図25:Departure=High)、同時に、カウンタDCounterへレジスタRegTlat0値6を設定し(図29:Step1)、カウンタC0dsへレジスタRegTlat0値6を設定し、カウンタC0deへレジスタReg Blat0値11を設定する。レイテンシ調整回路LCHCKは、リクエストReqRD8ID1EQ14に対するレスポンスResRD8ID1EQ14が返ってきたかをチェック(図29:Step2)し、未だ返ってこない場合(図25:Arrival=Low)は、カウンタDCounterが0より大きい場合(図29:Step3)、クロックRqCK0の立ち上がりで、その値を1つずつ減らす(図29:Step4)。
レスポンスResRD8ID1EQ14が、6サイクル後に返ってくると、カウンタUPCounter1値0とタイムアウトレイテンシレジスタRegLatTout値60を比較する(図29:Step9)。カウンタUPCounter1値0はタイムアウトレイテンシレジスタRegLatTout値60より小さいので、カウンタUPCounter1値を0にクリアする(図29:Step10)。次にカウンタDCounter値が0より大きいかを比較し(図29:Step11)、カウンタDCounter値は0のため、カウンタUCounter値が0より大きいかを比較する(図29:Step12)。カウンタUCounter値は0のため、レイテンシ補正動作を行っているかをチェックする(図29:Step13)。
レイテンシ調整回路LCHCKは、レイテンシ補正動作を行っていないので、NotifyStatus信号をMETとし、リクエスト出力回路RQOUTへ通達する(図29:Step17)。NotifyStatus信号はMET、リクエストReqRD8ID1EQ14に対するレスポンスResRD8ID1EQ14が、LatExpID1値6サイクル後に返ってきたことを示す。リクエスト出力回路RQOUTは、NotifyStatus信号値METNoを受けて、カウンタC0dsとカウンタC0deを動作させ、それらの値を1つずつ減らす。
以上説明したように、レイテンシを計測し、レイテンシLatExpID1値6より遅れた3サイクル分に対して、カウンタC0dsとカウンタC0deを3サイクル分停止させるレイテンシ補正動作を行うことで、その後のリクエストに対するレスポンスを、期待値レイテンシLatExpID1値6と等しくすることができる。
<レイテンシ補正動作:許容レイテンシLatRange値1>
図26は、メモリ制御回路DCMCのレイテンシレジスタLTREG内のメモリ装置M0のレイテンシLatExpID1値は6へ、許容レイテンシLatRange値は1へ、タイムアウトレイテンシLatTimeOut値は60へ設定され、メモリ装置M0からのレスポンスの実測レイテンシが、他のメモリ装置からのレスポンスによって、レイテンシLatExpID1値6+許容レイテンシLatRange値1、より大きくなった際の、レイテンシ調整回路LCHCKが行うレイテンシ補正動作の一例を示す。また、図29はレイテンシ調整回路LCHCKがレイテンシ補正動作を行うために装備しているカウンタの動作の一例を示すフローチャートの一例である。
レイテンシ調整回路LCHCKは、カウンタDCounterとカウンタUCounterとカウンタUPCounter1と、許容レイテンシレジスタRegLatRangeと、タイムアウトレイテンシレジスタRegLatRangeを装備する。メモリ装置M0に関するカウンタC0dsおよびカウンタC0deは、特に限定されないが、パワーアップシーケンスの際に、情報処理装置CPU0によって0へ初期設定される。カウンタDCounterとカウンタUCounterとUPCounter1は、特に限定されないが、パワーアップシーケンスの際に、情報処理装置CPU0によって0へ初期設定される。また、許容レイテンシレジスタRegLatRangeは、特に限定されないが、パワーアップシーケンスの際に、許容レイテンシLatRange値0へ設定され、タイムアウトレイテンシレジスタRegLatToutは、特に限定されないが、パワーアップシーケンスの際に、タイムアウトレイテンシLatTimeOut値60へ初期設定される。
リクエスト出力回路RQOUTから、メモリ装置M0への8バイトデータのリード命令RD8を含むリクエストReqRD8ID1SEQ12と、リクエストReqRD8ID1SEQ13と、リクエストReqRD8ID1SEQ14と、リクエストReqRD8ID1SEQ15が出力される際の動作を説明する。
リクエストReqRD8ID1EQ12を出力する(図26:Departure=High)と同時に、カウンタDCounterへレジスタRegTlat0値6を設定し(図29:Step1)、カウンタC0dsへレジスタRegTlat0値6を設定し、カウンタC0deへレジスタReg Blat0値11を設定する。リクエスト出力回路RQOUTは、カウンタC0dsおよびC0deへ設定されている値を1つずつ減らしていき、レスポンス信号RsMux0へ現れる相対的な時間帯m0RsDrを更新する。レイテンシ調整回路LCHCKは、リクエストReqRD8ID1EQ12に対するレスポンスResRD8ID1EQ12が返ってきたかをチェック(図29:Step2)し、未だ返ってこない場合(図26:Arrival=Low)は、カウンタDCounterが0より大きい場合(図29:Step3)、クロックRqCK0の立ち上がりで、その値を1つずつ減らす(図29:Step4)。また、リクエストReqRD8ID1EQ12に続いて、カウンタC0ds値が1およびC0de値が6になった際に、リクエストReqRD8ID1EQ13を出力し(図26:Departure=High)、同時に、カウンタDCounterへレジスタRegTlat0値6を設定し(図29:Step1)、カウンタC0dsへレジスタRegTlat0値6を設定し、カウンタC0deへレジスタReg Blat0値11を設定する。
カウンタDCounterが0になっても、レスポンスResRD8ID1EQ12が返ってこない場合(図26:Arrival=Low)は、カウンタUPCounter1に設定されている値を1つずつ増加させ(図29:Step5)、許容レイテンシレジスタRegLatRange値1とカウンタUCounter値0を比較する(図29:Step6)。カウンタUCounter値0は許容レイテンシレジスタRegLatRange値1より小さいので、レイテンシ調整回路LCHCKはカウンタUCounterを1つ増加させ、カウンタUCounter値を1とする(図29:Step8)。再度、レスポンスResRD8ID1EQ12が返ってきたかをチェック(図29:Step2)し、未だ返ってこない場合(図26:Arrival=Low)は、カウンタDCounterが0より大きい場合(図29:Step3)、クロックRqCK0の立ち上がりで、その値を1つずつ減らす(図29:Step4)。
カウンタDCounterが0になっても、レスポンスResRD8ID1EQ12が返ってこない場合(図26:Arrival=Low)は、カウンタUPCounter1に設定されている値を1つずつ増加させ(図29:Step5)、許容レイテンシレジスタRegLatRange値1とカウンタUCounter値0を比較する(図29:Step6)。カウンタUCounter値1は許容レイテンシレジスタRegLatRange値1以上の時、レイテンシ調整回路LCHCKはNotifyStatus信号をCorrectionとし(図26:Notify Status=Correction)、レイテンシ補正の開始をリクエスト出力回路RQOUTへ通達する(図29:Step7)。リクエスト出力回路RQOUTは、NotifyStatus信号値Correctionを受けて、カウンタC0dsとカウンタC0deの動作を停止させる(図26:Stop Count)。その際の、カウンタC0ds値は4、カウンタC0de値は9となる。レスポンスResRD8ID1EQ12が、レイテンシLatExpID1値6より3サイクル遅れて返ってくると、カウンタUPCounter1値3とタイムアウトレイテンシレジスタRegLatTout値60を比較する(図29:Step9)。カウンタUPCounter1値3はタイムアウトレイテンシレジスタRegLatTout値60より小さいので、カウンタUPCounter1値を0にクリアする(図29:Step10)。
次にカウンタDCounter値が0より大きいかを比較し(図29:Step11)、カウンタDCounter値は0のため、カウンタUCounter値が0より大きいかを比較する(図29:Step12)。カウンタUCounter値は0のため、レイテンシ補正動作を行っているかをチェックする(図29:Step13)。レイテンシ調整回路LCHCKは、レイテンシ補正動作を行っているので、NotifyStatus信号をNOCorrectionとし、レイテンシ補正の終了をリクエスト出力回路RQOUTへ通達する(図29:Step17)。リクエスト出力回路RQOUTは、NotifyStatus信号値NoCorrectionを受けて、カウンタC0dsとカウンタC0deを動作させ、それらの値を1つずつ減らす。
レイテンシ補正動作によって、カウンタC0dsとカウンタC0deは、レスポンスResRD8ID1EQ12がレイテンシLatExpID1値6より遅れた3サイクル分停止する。リクエストReqRD8ID1EQ13に続いて、カウンタC0ds値が1およびC0de値が6になった際に、リクエストReqRD8ID1EQ14を出力し(図26:Departure=High)、同時に、カウンタDCounterへレジスタRegTlat0値6を設定し(図29:Step1)、カウンタC0dsへレジスタRegTlat0値6を設定し、カウンタC0deへレジスタReg Blat0値11を設定する。レイテンシ調整回路LCHCKは、リクエストReqRD8ID1EQ14に対するレスポンスResRD8ID1EQ14が返ってきたかをチェック(図29:Step2)し、未だ返ってこない場合(図26:Arrival=Low)は、カウンタDCounterが0より大きい場合(図29:Step3)、クロックRqCK0の立ち上がりで、その値を1つずつ減らす(図29:Step4)。レスポンスResRD8ID1EQ14が、6サイクル後に返ってくると、カウンタUPCounter1値0とタイムアウトレイテンシレジスタRegLatTout値60を比較する(図29:Step9)。カウンタUPCounter1値0はタイムアウトレイテンシレジスタRegLatTout値60より小さいので、カウンタUPCounter1値を0にクリアする(図29:Step10)。
次にカウンタDCounter値が0より大きいかを比較し(図29:Step11)、カウンタDCounter値は0のため、カウンタUCounter値が0より大きいかを比較する(図29:Step12)。カウンタUCounter値は0のため、レイテンシ補正動作を行っているかをチェックする(図29:Step13)。レイテンシ調整回路LCHCKは、レイテンシ補正動作を行っていないので、NotifyStatus信号をMETとし、リクエスト出力回路RQOUTへ通達する(図29:Step17)。NotifyStatus信号はMET、リクエストReqRD8ID1EQ14に対するレスポンスResRD8ID1EQ14が、LatExpID1値6サイクル後に返ってきたことを示す。リクエスト出力回路RQOUTは、NotifyStatus信号値METを受けて、カウンタC0dsとカウンタC0deを動作させ、それらの値を1つずつ減らす。
以上説明したように、レイテンシを計測し、レイテンシLatExpID1値6サイクルから、さらに許容レイテンシLatRange値1サイクル分遅れた場合、レイテンシLatExpID1値6より遅れた3サイクル分に対して、カウンタC0dsとカウンタC0deを3サイクル分停止させるレイテンシ補正動作を行うことで、その後のリクエストに対するレスポンスを、期待値レイテンシLatExpID1値6と等しくすることができる。
<レイテンシ:タイムアウトエラー>
図27は、メモリ制御回路DCMCのレイテンシレジスタLTREG内のメモリ装置M0のレイテンシLatExpID1値は6へ、許容レイテンシLatRange値は0へ、タイムアウトレイテンシLatTimeOut値は60へ設定され、メモリ装置M0からのレスポンスの実測レイテンシが、タイムアウトレイテンシLatTimeOut値60より大きくなった際の、レイテンシ調整回路LCHCKが行う動作の一例を示す。また、図29はレイテンシ調整回路LCHCKがレイテンシ補正動作を行うために装備しているカウンタの動作の一例を示すフローチャートの一例である。
レイテンシ調整回路LCHCKは、カウンタDCounterとカウンタUCounterとカウンタUPCounter1と、許容レイテンシレジスタRegLatRangeと、タイムアウトレイテンシレジスタRegLatRangeを装備する。メモリ装置M0に関するカウンタC0dsおよびカウンタC0deは、特に限定されないが、パワーアップシーケンスの際に、情報処理装置CPU0によって0へ初期設定される。カウンタDCounterとカウンタUCounterとUPCounter1は、特に限定されないが、パワーアップシーケンスの際に、情報処理装置CPU0によって0へ初期設定される。
また、許容レイテンシレジスタRegLatRangeは、パワーアップシーケンスの際に、許容レイテンシLatRange値0へ設定され、タイムアウトレイテンシレジスタRegLatToutは、特に限定されないが、パワーアップシーケンスの際に、タイムアウトレイテンシLatTimeOut値60へ初期設定される。リクエスト出力回路RQOUTから、メモリ装置M0への8バイトデータのリード命令RD8を含むリクエストReqRD8ID1SEQ12が出力される際の動作を説明する。リクエストReqRD8ID1EQ12を出力する(図27:Departure=High)と同時に、カウンタDCounterへレジスタRegTlat0値6を設定し(図29:Step1)、カウンタC0dsへレジスタRegTlat0値6を設定し、カウンタC0deへレジスタReg Blat0値11を設定する。リクエスト出力回路RQOUTは、カウンタC0dsおよびC0deへ設定されている値を1つずつ減らしていき、レスポンス信号RsMux0へ現れる相対的な時間帯m0RsDrを更新する。
レイテンシ調整回路LCHCKは、リクエストReqRD8ID1EQ12に対するレスポンスResRD8ID1EQ12が返ってきたかをチェック(図29:Step2)し、未だ返ってこない場合(図27:Arrival=Low)は、カウンタDCounterが0より大きい場合(図29:Step3)、クロックRqCK0の立ち上がりで、その値を1つずつ減らす(図29:Step4)。カウンタDCounterが0になっても、レスポンスResRD8ID1EQ12が返ってこない場合(図27:Arrival=Low)は、カウンタUPCounter1に設定されている値を1つずつ増加させ(図29:Step5)、許容レイテンシレジスタRegLatRange値0とカウンタUCounter値0を比較する(図29:Step6)。カウンタUCounter値0は許容レイテンシレジスタRegLatRange値0以上なので、レイテンシ調整回路LCHCKはNotifyStatus信号をCorrectionとし(図27:Notify Status=Correction)、レイテンシ補正の開始をリクエスト出力回路RQOUTへ通達する(図29:Step7)。
リクエスト出力回路RQOUTは、NotifyStatus信号値Correctionを受けて、カウンタC0dsとカウンタC0deの動作を停止させる(図27:Stop Count)。その際の、カウンタC0ds値は0、カウンタC0de値は3となる。また、カウンタUPCounter1値とタイムアウトレイテンシLatTimeOut値60を比較する(図29:Step9)。カウンタUPCounter1値がタイムアウトレイテンシLatTimeOut値60以下の場合は、再度レスポンスResRD8ID1EQ12が返ってきたかをチェック(図29:Step2)し、カウンタUPCounter1値がタイムアウトレイテンシLatTimeOut値60より大きい場合は、レイテンシ調整回路LCHCKはNotifyStatus信号をErrorとし(図27:Notify Status=Error)、レイテンシタイムアウトエラーが生じたことをリクエスト出力回路RQOUTへ通達する(図29:Step9)。さらに、レイテンシエラーが生じたリクエストのID値1とリクエスト番号ReqN値12をリクエスト出力回路RQOUTへ通達する(図29:Step9)。次にリクエスト出力回路RQOUTは、カウンタC0ds値とカウンタC0de値を0にクリアし、エラー発生時のエラーシーケンス動作を行い、再度、リクエストReqRD8ID1EQ12を出力する。
以上説明したように、計測したレイテンシがタイムアウトレイテンシLatTimeOut値60より大きい場合、レイテンシ調整回路LCHCKはレイテンシタイムアウトエラーをリクエスト出力回路RQOUTへ通達し、これによって、リクエスト出力回路RQOUTはレイテンシタイムアウトエラーが生じたリクエストを、再度出力することができる。
<レイテンシ:修正>
図28は、メモリ制御回路DCMCのレイテンシレジスタLTREG内のメモリ装置M0のレイテンシLatExpID1値は6へ、許容レイテンシLatRange値は0へ、タイムアウトレイテンシLatTimeOut値は60へ設定され、メモリ装置M0からのレスポンスの実測レイテンシが、タイムアウトレイテンシLatTimeOut値60より大きくなった際の、レイテンシ調整回路LCHCKが行う動作の一例を示す。また、図29はレイテンシ調整回路LCHCKがレイテンシ補正動作を行うために装備しているカウンタの動作の一例を示すフローチャートの一例である。
レイテンシ調整回路LCHCKは、カウンタDCounterとカウンタUCounterとカウンタUPCounter1と、許容レイテンシレジスタRegLatRangeと、タイムアウトレイテンシレジスタRegLatRangeを装備する。メモリ装置M0に関するカウンタC0dsおよびカウンタC0deは、パワーアップシーケンスの際に、情報処理装置CPU0によって0へ初期設定される。カウンタDCounterとカウンタUCounterとUPCounter1は、特に限定されないが、パワーアップシーケンスの際に、情報処理装置CPU0によって0へ初期設定される。また、許容レイテンシレジスタRegLatRangeは、特に限定されないが、パワーアップシーケンスの際に、許容レイテンシLatRange値0へ設定され、タイムアウトレイテンシレジスタRegLatToutは、パワーアップシーケンスの際に、タイムアウトレイテンシLatTimeOut値60へ初期設定される。
リクエスト出力回路RQOUTから、メモリ装置M0への8バイトデータのリード命令RD8を含むリクエストReqRD8ID1SEQ12が出力される際の動作を説明する。リクエストReqRD8ID1EQ12を出力する(図28:Departure=High)と同時に、カウンタDCounterへレジスタRegTlat0値6を設定し(図29:Step1)、カウンタC0dsへレジスタRegTlat0値6を設定し、カウンタC0deへレジスタReg Blat0値11を設定する。リクエスト出力回路RQOUTは、カウンタC0dsおよびC0deへ設定されている値を1つずつ減らしていき、レスポンス信号RsMux0へ現れる相対的な時間帯m0RsDrを更新する。
レイテンシ調整回路LCHCKは、リクエストReqRD8ID1EQ12に対するレスポンスResRD8ID1EQ12が返ってきたかをチェック(図29:Step2)し、未だ返ってこない場合(図28:Arrival=Low)は、カウンタDCounterが0より大きい場合(図29:Step3)、クロックRqCK0の立ち上がりで、その値を1つずつ減らす(図29:Step4)。レスポンスResRD8ID1EQ12が返ってきたら(図29:Step2)、カウンタUPCounter1値を0にクリアする(図29:Step10)。つぎに、カウンタDCounter値が0より大きいかどうかをチェックする(図29:Step11)。カウンタDCounter値が0より大きければ、レイテンシLatExpID1値より早くレスポンスが返ってきたことを意味し、レイテンシ調整回路LCHCKはNotifyStatus信号をModify latencyとし、実測レイテンシ値4とともに、レイテンシLatExpID1値の修正要求をリクエスト出力回路RQOUTへ通達する(図29:Step18)。リクエスト出力回路RQOUTは、レイテンシLatExpID1値の修正要求を受けて、レイテンシレジスタLTREG内のメモリ装置M0のレイテンシLatExpID1の値を4へ修正する(図28:Modify LTREG)。レイテンシLatExpID1の値を4へ修正した後のリクエストReqRD8ID1EQ13に対するレスポンスResRD8ID1EQ13の実測レイテンシは4となり、LatExpID1の値4と等しくなる。
以上説明したように、計測したレイテンシがレイテンシレジスタLTREG内のメモリ装置M0のレイテンシLatExpID1値より小さい場合、レイテンシ調整回路LCHCKはレイテンシLatExpID1値の修正要求をリクエスト出力回路RQOUTへ通達し、これによって、リクエスト出力回路RQOUTはレイテンシLatExpID1値を正しい値に修正することができる。
<レスポンススケジュール回路SCHの動作>
レスポンススケジュール回路SCHの動作について説明する。図30は、各メモリ装置が装備するレスポンススケジュール回路SCHの動作の一例を示すフローチャートである。レスポンススケジュール回路SCHでは、先ず、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへレスポンスがエントリされているかをチェックする(図30:Step1)。レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpのいずれにもレスポンスがエントリされていなければ、再度、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへのエントリをチェックする。
レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpのいずれかにレスポンスがエントリされていれば、レスポンスの優先順位をチェックし、最高位のレスポンス優先順位を持つレスポンスの送信準備を行う(図30:Step2)。次に、レスポンスイネーブル信号RsEn0をチェックし(図30:Step3)、Lowの際はレスポンスを出力せず、レスポンスイネーブル信号RsEn0がHighを待つ。レスポンスイネーブル信号RsEn0がHighの際は、最高位のレスポンス優先順位を持つレスポンスを出力する(図30:Step4)。レスポンスが出力された後は、各メモリ装置に設定されているレスポンスに関する出力優先順位の制御方式をチェックする(図30:Step5)。レスポンスに関する出力優先順位の制御方式が順位固定方式であれば、レスポンスに関する出力優先順位を変更せず、順位変更方式であればレスポンスに関する出力優先順位を変更させる(図30:Step6)。順位固定方式では、各メモリ装置が装備しているレスポンスキュー回路RsQp内のレスポンスをレスポンスキュー回路RsQo内のレスポンスより優先させる設定や、レスポンスキュー回路RsQo内のレスポンスをレスポンスキュー回路RsQp内のレスポンスより優先させる設定などが可能である。また、順位変更方式では、各メモリ装置が装備しているレスポンスキュー回路RsQp内のレスポンスとレスポンスキュー回路RsQo内のレスポンスの優先順位をラウンドロビン方式で変更することが可能である。
<第1の実施の形態の効果>
以下、上述の実施の形態について、構成とその効果についてまとめる。
(1)電源投入直後や、新たにメモリ装置が装着された場合や脱着された場合に、直列接続の確認動作を行うことで、確実にメモリ装置同士が接続されていることが確認できる。さらに、電源投入時や、新たにメモリ装置が装着された場合や取り外された場合に、自動的に各メモリ装置へのID付けが行われることで、容易に、必要な分だけメモリ装置を接続し、メモリ容量を拡張することができる。
(2)リクエストへメモリ装置の識別番号IDを付加することで、情報処理装置CPU_CHIPから各メモリ装置M0、M1およびM2へリクエストが確実に転送される。また、情報処理装置CPU_CHIPへのレスポンスへIDを付加することで、各メモリ装置から正しくデータ転送が行えたことを確認でき、情報処理装置CPU_CHIPおよびメモリ装置M0、M1、M2の直列接続によって、接続信号数を減少させながらも、情報処理装置CPU_CHIPは所望の処理を実行することができる。
(3)リクエストへリクエスト番号を付加し、またレスポンスへレスポンス番号を付加することで、データ転送性能の向上を図るためリクエストの入力順とは異なる順番で、レスポンスが送信された場合でも、情報処理装置CPU_CHIPは、どのリクエストに対するレスポンスがメモリ装置より送信されたかを知ることができ、所望の処理を高速に実行することができる。
(4)リクエストインターフェース回路ReIFとレスポンスインターフェース回路は独立に動作可能なため、データの読み出し動作と書き込み動作を同時に実行でき、データ転送性能を向上させることができる。
(5)リクエストの入力順序に関わらず、早く読み出せるデータは、読み出しが遅いデータを待つことなく、すぐに読み出すことができるため、高速化が可能となる。
(6)メモリ装置M2からの読み出し時は、エラー検出と訂正を行い、書き込み時は、書き込みが正しく行われなかった不良アドレスに対して代替処理を行うため、信頼性を保つことができる。
(7)各メモリ装置へのリクエストに対するレスポンスの時間帯を予測し、管理し、リクエストを発行することにより、低レイテンシと高速データ転送レートを達成できる。
(8)情報処理装置CPU_CHIPは、各メモリ装置M0、M1およびM2にリード命令を含むリクエストを送信する際には、このリクエストに対するレスポンスを受信するために必要な空き状態のレスポンスキューを確保した後に、リード命令を含むリクエストを送信するため、レスポンスは低レイテンシで送信可能となり、高速データ転送を実現できる。
(9)レイテンシを実測し、レイテンシの期待値と比較することで、本実施の形態の情報処理システムが正常に動作しているか判断できる。さらに、レイテンシの実測値とレイテンシの期待値との差分が許容範囲を超えた場合はレイテンシ補正動作を行うことで、常に許容範囲内の低レイテンシで動作させることができる。
(10)各メモリ装置のレイテンシを実測し、この実測レイテンシ値をレイテンシレジスタLTREGへ更新することで、情報処理装置CPU_CHPは正確なレイテンシを用いた制御を行い、低レイテンシと高速データ転送を実現することができる。
(11)コンフィグレーション回路CONFIG内の各レジスタの値はプログラム可能なため、様々な情報処理システムの構成や性能に合わせて最適なレジスタ値を設定でき、柔軟に対応できる。
(12)各メモリ装置内のメモリバンク毎のセンスアンプSenseAmpやデータバッファDataLatをキャッシュメモリとして利用するだけではなく、各メモリ装置のレスポンスキューRsQoまでもキャッシュメモリとして利用するので、キャッシュメモリサイズを増やし、キャッシュメモリのヒット率を上げることができ、低レイテンシ且つ高速かつ低電力で各メモリ装置を動作させることが出来る。
また、本実施の形態では、メモリモジュールMEMには1つの揮発性メモリ、1つのNOR型フラッシュメモリ、1つのNAND型フラッシュメモリが含まれている例について説明しているが、メモリモジュールMEMに複数個の揮発性メモリ及び複数個のNOR型フラッシュメモリ及びNAND型フラッシュメモリが含まれる場合であっても本発明を実現できるのは言うまでもない。
(第2の実施の形態)
本発明を適用した第2の実施の形態である情報処理システムについて、図31〜図35を用いて説明する。図31は本発明を適用した第2の実施の形態である情報処理装置CPU_CHIP1とメモリモジュールMEM1とから構成される情報処理システムにおいて、その構成の一例を示すブロック図である。また、図32は前記情報処理装置CPU_CHIP1の構成の一例を示すブロック図である。メモリモジュールMEM1は、メモリ装置M10、M11、M12から構成される。また、情報処理装置CPU_CHIP1とメモリ装置M10、M11、M12は直列に接続されている。また、図33はメモリ装置M10の構成の一例を示すブロック図であり、図34はメモリ装置M11の構成の一例を示すブロック図であり、図35はメモリ装置M12の構成の一例を示すブロック図である。
また、情報処理装置CPU_CHIP1とメモリモジュールMEM1を動作させるクロック方式として、コモンクロック方式、ソースシンクロナスクロック方式、エンベデッドクロック方式などがあり、本発明には全てのクロック方式を利用することができる。本実施の形態では、エンベデッドクロック方式による動作を一例として説明する。以下におのおのについて説明する。
情報処理装置CPU_CHIP1は、情報処理回路CPU0、CPU1、CPU2、CPU3と、調停回路CARMとメモリ制御回路DCMC1から構成されている。メモリモジュールMEM1は、メモリ装置M10、M11、M12から構成される。また、情報処理装置CPU_CHIP1とメモリ装置M10、M11、M12は直列に接続されている。情報処理回路CPU0はマスター番号レジスタMID0を装備し、情報処理回路CPU1はマスター番号レジスタMID1を装備し、情報処理回路CPU2はマスター番号レジスタMID2を装備し、情報処理回路CPU3はマスター番号レジスタMID3を装備している。
情報処理回路CPU0、CPU1、CPU2、CPU3は、図1と同様の情報処理回路であり、調停回路CARMおよびメモリ制御回路DCMC1を通じて、メモリモジュールMEMより、OSやアプリケーションプログラムおよびアプリケーションプログラムにて処理を行うデータを読み出し、実行する。メモリ制御回路DCMCは、特に限定しないがコンフィグレーション回路CONFIG、リクエストキューREQQ1、ヒット判定回路IDHT、リクエストキューREQQ2、コマンド生成回路COMGEN、リクエスト出力回路RQOUT1、リフレッシュ要求回路REF、キュー管理回路QMGT、レイテンシ調整回路LCHCK、レスポンス入力回路RSIN1、レスポンスキューRESQ1を含む。また、コンフィグレーション回路CONFIGは、図1と同様のレジスタから構成され、同様の機能を持つ。
リクエストキューREQQ1、ヒット判定回路IDHT、リクエストキューREQQ2、コマンド生成回路COMGEN、リフレッシュ要求回路REF、キュー管理回路QMGT、レイテンシ調整回路LCHCK、レスポンスキューRESQ1は、図1と同様の機能を持つ。リクエスト出力回路RQOUT1は、出力回路OUTBLKとシリアルデータ回路SDBLKから構成される。出力回路OUTBLKは図1で示すリクエスト出力回路RQOUTと同じ機能を持っており、リクエストキューREQQ2から送信されたリクエストを、シリアルデータ回路SDBLKへ転送する回路である。
シリアルデータ回路SDBLKでは、出力回路OUTBLKから送信されたリクエストへクロック情報を埋め込み、さらにシリアルデータへ変換し、リクエスト信号RqMux0を通じて、メモリモジュールMEM1へ発行する回路である。また、シリアルデータ回路SDBLKは、メモリモジュールMEM1へ参照クロックRefCkを送信する。レスポンス入力回路RSIN1は、入力回路INBLKとパラレルデータ回路PDBLKから構成される。パラレルデータ回路PDBLKは、レスポンス信号RsMux0から送信されたシリアルデータ化されたレスポンスを受信し、参照クロックRefCkを利用し、このレスポンスに埋め込まれているクロック情報を取り出し、シリアルデータ化されたレスポンスをパラレルデータへ変換し、入力回路INBLKへ送信する。入力回路INBLKは、図3で示したリクエスト入力回路RSINと同じ機能を持ち、同様の動作を行う。
メモリ装置M10は、初期化回路INIT、メモリ回路Mem0、リクエストインターフェース回路ReqIF、レスポンスインターフェース回路ResIFから構成される。リクエストインターフェース回路ReqIFはリクエスト信号変換回路RqCおよびリクエストキュー制御回路RqCTから構成される。リクエスト変換回路RqCはパラレルデータ回路RQPDおよびシリアルデータ回路RQSDから構成される。レスポンスインターフェース回路ResIFはレスポンスキュー制御回路RsCTおよびレスポンス信号変換回路RsCから構成される。レスポンス信号変換回路RsCはパラレルデータ回路RSPDおよびシリアルデータ回路RSSDから構成される。パラレルデータ回路RQPDは、リクエスト信号RqMux0から入力されたシリアルデータ化されたリクエストを受信し、参照クロックRefCkを利用し、このリクエストに埋め込まれているクロック情報を取り出し、シリアルデータ化されたリクエストをパラレルデータへ変換し、リクエストキュー制御回路RqCTのリクエストキュー回路RqQIへ送信する。シリアルデータ回路RQSDはリクエストキュー制御回路RqCTのリクエストキュー回路RqQXOから送信されたリクエストへクロック情報を埋め込み、さらにシリアルデータへ変換し、リクエスト信号RqMux1を通じて、メモリ装置M11へ送信する回路である。
パラレルデータ回路RSPDは、レスポンス信号RqMux1から入力されたシリアルデータ化されたレスポンスを受信し、参照クロックRefCkを利用し、このレスポンスに埋め込まれているクロック情報を取り出し、シリアルデータ化されたレスポンスをパラレルデータへ変換し、レスポンスキュー制御回路RsCTのレスポンスキュー回路RsQpへ送信する。シリアルデータ回路RSSDはレスポンスキュー制御回路RsCTのレスポンススケジュール回路SCHから送信されたレスポンスへクロック情報を埋め込み、さらにシリアルデータへ変換し、レスポンス信号RsMux0を通じて、レスポンス入力回路RSIN1へ送信する回路である。
初期化回路INIT、メモリ回路Mem0、リクエストキュー制御回路RqCT、レスポンスキュー制御回路RsCTは図3に示されているメモリ装置M0と同様の構成および機能を持つ。したがって、メモリ装置M10の機能および役割は図3および図4に示されているメモリ装置M0と同様である。
メモリ装置M11は、初期化回路INIT1、メモリ回路Mem1、リクエストインターフェース回路ReqIF、レスポンスインターフェース回路ResIFから構成される。リクエストインターフェース回路ReqIFはリクエスト信号変換回路RqCおよびリクエストキュー制御回路RqCTから構成される。リクエスト変換回路RqCはパラレルデータ回路RQPDおよびシリアルデータ回路RQSDから構成される。レスポンスインターフェース回路ResIFはレスポンスキュー制御回路RsCTおよびレスポンス信号変換回路RsCから構成される。レスポンス信号変換回路RsCはパラレルデータ回路RSPDおよびシリアルデータ回路RSSDから構成される。パラレルデータ回路RQPDは、リクエスト信号RqMux1から入力されたシリアルデータ化されたリクエストを受信し、参照クロックRefCkを利用し、このリクエストに埋め込まれているクロック情報を取り出し、シリアルデータ化されたリクエストをパラレルデータへ変換し、リクエストキュー制御回路RqCTのリクエストキュー回路RqQIへ送信する。
シリアルデータ回路RQSDはリクエストキュー制御回路RqCTのリクエストキュー回路RqQXOから送信されたリクエストへクロック情報を埋め込み、さらにシリアルデータへ変換し、リクエスト信号RqMux2を通じて、メモリ装置M12へ送信する回路である。パラレルデータ回路RSPDは、レスポンス信号RqMux2から入力されたシリアルデータ化されたレスポンスを受信し、参照クロックRefCkを利用し、このレスポンスに埋め込まれているクロック情報を取り出し、シリアルデータ化されたレスポンスをパラレルデータへ変換し、レスポンスキュー制御回路RsCTのレスポンスキュー回路RsQpへ送信する。
シリアルデータ回路RSSDはレスポンスキュー制御回路RsCTのレスポンススケジュール回路SCHから送信されたレスポンスへクロック情報を埋め込み、さらにシリアルデータへ変換し、レスポンス信号RsMux1を通じて、メモリ装置M10へ送信する回路である。初期化回路INIT1、メモリ回路Mem1、リクエストキュー制御回路RqCT、レスポンスキュー制御回路RsCTは図3に示されているメモリ装置M1と同様の構成および機能を持つ。したがって、メモリ装置M11の機能および役割は図5および図6に示されているメモリ装置M1と同様である。
メモリ装置M12は、初期化回路INIT2、メモリ回路Mem2、リクエストインターフェース回路ReqIF、レスポンスインターフェース回路ResIFから構成される。リクエストインターフェース回路ReqIFはリクエスト信号変換回路RqCおよびリクエストキュー制御回路RqCTから構成される。リクエスト変換回路RqCはパラレルデータ回路RQPDおよびシリアルデータ回路RQSDから構成される。レスポンスインターフェース回路ResIFはレスポンスキュー制御回路RsCTおよびレスポンス信号変換回路RsCから構成される。レスポンス信号変換回路RsCはパラレルデータ回路RSPDおよびシリアルデータ回路RSSDから構成される。
パラレルデータ回路RQPDは、リクエスト信号RqMux2から入力されたシリアルデータ化されたリクエストを受信し、参照クロックRefCkを利用し、このリクエストに埋め込まれているクロック情報を取り出し、シリアルデータ化されたリクエストをパラレルデータへ変換し、リクエストキュー制御回路RqCTのリクエストキュー回路RqQIへ送信する。メモリ装置M2は最端のメモリ装置のため、リクエスト信号RqMux3は未接続状態となり、シリアルデータ回路RQSDおよびパラレルデータ回路RSPDは動作しない。シリアルデータ回路RSSDはレスポンスキュー制御回路RsCTのレスポンススケジュール回路SCHから送信されたレスポンスへクロック情報を埋め込み、さらにシリアルデータへ変換し、レスポンス信号RsMux2を通じて、メモリ装置M11へ送信する回路である。
初期化回路INIT2、メモリ回路Mem1、リクエストキュー制御回路RqCT、レスポンスキュー制御回路RsCTは図3に示されているメモリ装置M1と同様の機能を持つ。したがって、メモリ装置M12の機能および役割は図7および図8に示されているメモリ装置M2と同様である。
以上説明したように、本実施の形態のエンベデッドクロック方式では、パラレルデータであるリクエストやレスポンスはシリアルデータ回路SDBLK、RQSDおよびRSSDによってクロック情報を埋め込まれ、シリアルデータへ変換され送信される。本実施の形態によって、第1の実施の形態の効果に加えて、リクエスト送信用のクロック信号と、レスポンス送信用のクロック信号を削除でき、更なる低電力動作を可能とする。さらにリクエストやレスポンス信号数を最小の1ビットまで削減することができ、最少の信号数にて、情報処理装置CPU_CHIP1とメモリモジュールMEM1から構成される情報処理システムを構成することができる。
(第3の実施の形態)
図36は、本発明の第3の実施の形態である。情報処理装置CPU_CHIPとメモリモジュールMEM3から構成される情報処理システムを示した実施の形態である。本実施の形態では、ソースシンクロナスクロック方式による情報処理システムの一例を示す。情報処理装置CPU_CHIPは、図1および図2で示したものと同等である。メモリモジュールMEM3は、メモリ装置M31と、メモリ装置M32と、メモリ装置M33から構成される。RqCk0、RqCK1およびRqCk2は、リクエストクロックであり、RsCk0、RsCK1およびRsCk2はレスポンスクロックである。RqMux0、RqMux1およびRqMux2は、リクエスト信号であり、RsMux0、RsMux1およびRsMux2はレスポンス信号である。PNSとCNSは情報処理装置CPU_CHIPとメモリ装置M33間の接続確認信号である。
メモリ装置M31はインターフェース回路チップRQRSIF31と複数の揮発性メモリチップVLM31から構成される。インターフェース回路チップRQRSIF31は、図3で説明したメモリ装置の中でメモリ回路Mem0を除いた他の全ての回路と同等の機能を装備している。揮発性メモリチップVLM31には、図3で説明したメモリ装置の中のメモリ回路Mem0と同等の機能を持っているメモリチップや汎用のダイナミックランダムアクセスメモリチップDRAMを利用することができる。
メモリ装置M32は、インターフェース回路チップRQRSIF32と複数の不揮発性メモリチップNVM32から構成される。インターフェース回路チップRQRSIF32は、図5で説明したメモリ装置の中でメモリ回路Mem1を除いた他の全ての回路と同等の機能を装備している。不揮発性メモリチップNVM32には、図5で説明したメモリ装置の中のメモリ回路Mem1と同等機能を持っているメモリチップや汎用の不揮発性メモリチップを利用することができる。
メモリ装置M33は、コントローラ回路チップNVCT33と、複数の不揮発性メモリチップNVM33から構成される。コントローラ回路チップNVCT33はインターフェース回路RQRSIF33とエラー訂正回路ECC、代替処理回路REP、書き込み回数平準化回路WLVから構成される。
インターフェース回路RQRSIF33は、図7で説明したメモリ装置の中でメモリ回路Mem2を除いた他の全ての回路と同等の機能を装備している。不揮発性メモリチップNVM33には、図7で説明したメモリ装置の中のメモリ回路Mem2と同等の機能を持っておりメモリチップや汎用の不揮発性メモリチップを利用することができる。
不揮発性メモリチップNVM33は、書き換えを繰り返すことによって、信頼性が低下し、書き込み時に書いたデータが、読み出し時には異なるデータとなったり、書き換え時にデータが書き込まれなかったりすることが稀にある。エラー訂正回路ECCはインターフェース回路RQRSIF33が不揮発性メモリNANDから読み出したデータにエラーがあるかどうかをチェックし、エラーがあれば訂正を行う。エラー訂正されたデータがインターフェース回路RQRSIF33を介してレスポンス信号RsMux2から送信される。エラー訂正回路ECCによって、メモリ装置M33の信頼性を向上できる。
代替処理回路REPはインターフェース回路RQRSIF33から不揮発性メモリNANDへのデータの書き込みが正しく行われたかをチェックし、正しく行われなかった場合は不揮発性メモリNANDへあらかじめ用意されている代替用の新たなアドレスに対して書き込みを行う。代替処理回路REPによって、メモリ装置M33の信頼性を向上できる。
書き込み回数平準化回路WLVは、インターフェース回路RQRSIF33から不揮発性メモリNANDへデータを書き込む際に、不揮発性メモリNANDの一部のアドレスへのデータの書き込み回数を集中させずに、書き込み回数を平準化させる。これによって、メモリ装置M33の製品寿命を延ばすことができる。
また、メモリ装置M33は脱着可能なメモリ装置であって、メモリカードやSSD(Solid State Drive)などのメモリ装置であり、インターフェース回路RQRSIF33には接続状態を確認するための接続確認信号CNSを装備している。メモリ装置M33が装着されると、メモリ装置M33の接続確認信号CNSと情報処理装置CPU_CHIPの接続確認信号PNSとが接続され、情報処理装置CPU_CHIPはメモリ装置M33が装着されていることを確認できる。また、メモリ装置M33が取り外されると、メモリ装置M33の接続確認信号CNSと情報処理装置CPU_CHIPの接続確認信号PNSは開放状態(OPEN)となり、情報処理装置CPU_CHIPはメモリ装置M33が取り外されたことを確認できる。
情報処理装置CPU_CHIPはメモリ装置M33の脱着を確認すると、自動的に各メモリ装置への認識番号ID付けが行われる。本実施の形態では、第1の実施の形態の効果に加えて、汎用メモリを複数個利用し、容易にワーク領域やコピー領域やプログラム領域やデータ領域を拡張できるため、携帯機器のシステム構成に合わせて柔軟に対応できる。さらに、新たにメモリ装置が装着された場合や取り外された場合に、自動的に各メモリ装置へのID付けが行われることで、容易に、必要な分だけメモリ装置を接続し、メモリ容量を拡張することができる。
(第4の実施の形態)
図37は、本発明の第4の実施の形態である。情報処理装置CPU_CHIP1とメモリモジュールMEM4から構成される情報処理システムを示した実施の形態である。本実施の形態では、エンベデッドクロック方式による情報処理システムの一例を示す。情報処理装置CPU_CHIP1は、図31および図32で示したものと同等である。メモリモジュールMEM4は、メモリ装置M41と、メモリ装置M42と、メモリ装置M43から構成される。RefCkは参照クロックである。RqMux0、RqMux1およびRqMux2は、リクエスト信号であり、RsMux0、RsMux1およびRsMux2はレスポンス信号である。PNSとCNSは情報処理装置CPU_CHIP1とメモリ装置M43間の接続確認信号である。メモリ装置M41はインターフェース回路チップRQRSIF41と複数の揮発性メモリチップVLM41から構成される。インターフェース回路チップRQRSIF41は、図33で説明したメモリ装置の中でメモリ回路Mem0を除いた他の全ての回路と同等の機能を装備している。揮発性メモリチップVLM41には、図33で説明したメモリ装置の中のメモリ回路Mem0と同等の機能を持っているメモリチップや汎用のダイナミックランダムアクセスメモリチップDRAMを利用することができる。
メモリ装置M42はインターフェース回路チップRQRSIF42と複数の不揮発性メモリチップNVM42から構成される。インターフェース回路チップRQRSIF42は、図34で説明したメモリ装置の中でメモリ回路Mem1を除いた他の全ての回路と同等の機能を装備している。不揮発性メモリチップNMV42には、図34で説明したメモリ装置の中のメモリ回路Mem1と同等の機能を持っているメモリチップや汎用の不揮発性メモリチップを利用することができる。
メモリ装置M43はコントローラ回路チップNVCT43と、複数の不揮発性メモリチップNVM43から構成される。コントローラ回路チップNVCT43はインターフェース回路RQRSIF43とエラー訂正回路ECC、代替処理回路REP、書き込み回数平準化回路WLVから構成される。
インターフェース回路RQRSIF43は、図35で説明したメモリ装置の中でメモリ回路Mem2を除いた他の全ての回路と同等の機能を装備している。不揮発性メモリチップNVM43には、図35で説明したメモリ装置の中のメモリ回路Mem2と同等の機能を持っているメモリチップや汎用の不揮発性メモリチップを利用することができる。不揮発性メモリチップNVM43は、書き換えを繰り返すことによって、信頼性が低下し、書き込み時に書いたデータが、読み出し時には異なるデータとなったり、書き換え時にデータが書き込まれなかったりすることが稀にある。エラー訂正回路ECCはインターフェース回路RQRSIF33が不揮発性メモリNANDから読み出したデータにエラーがあるかどうかをチェックし、エラーがあれば訂正を行う。エラー訂正されたデータがインターフェース回路RQRSIF33を介してレスポンス信号RsMux2から送信される。エラー訂正回路ECCによって、メモリ装置M43の信頼性を向上できる。代替処理回路REPはインターフェース回路RQRSIF33から不揮発性メモリNANDへのデータの書き込みが正しく行われたかをチェックし、正しく行われなかった場合は不揮発性メモリNANDへあらかじめ用意されている代替用の新たなアドレスに対して書き込みを行う。代替処理回路REPによって、メモリ装置M43の信頼性を向上できる。書き込み回数平準化回路WLVは、インターフェース回路RQRSIF33から不揮発性メモリNANDへデータを書き込む際に、不揮発性メモリNANDの一部のアドレスへのデータの書き込み回数を集中させずに、書き込み回数を平準化させる。これによって、メモリ装置M43の製品寿命を延ばすことができる。
また、メモリ装置M43は脱着可能なメモリ装置であって、メモリカードやSSD(Solid State Drive)などのメモリ装置であり、インターフェース回路RQRSIF43には接続状態を確認するための接続確認信号CNSを装備している。メモリ装置M43が装着されると、メモリ装置M33の接続確認信号CNSと情報処理装置CPU_CHIPの接続確認信号PNSとが接続され、情報処理装置CPU_CHIPはメモリ装置M43が装着されていることを確認できる。また、メモリ装置M43が取り外されると、メモリ装置M43の接続確認信号CNSと情報処理装置CPU_CHIPの接続確認信号PNSは開放状態(OPEN)となり、情報処理装置CPU_CHIPはメモリ装置M43が取り外されたことを確認できる。情報処理装置CPU_CHIPはメモリ装置M43の脱着を確認すると、自動的に各メモリ装置への認識番号ID付けが行われる。
本実施の形態では、第1および第2の実施の形態の効果に加えて、汎用メモリチップを複数個利用し、容易にワーク領域やコピー領域やプログラム領域やデータ領域を拡張できるため、低コスト化を図りながら携帯機器のシステム構成に合わせて柔軟に対応できる。さらに、新たにメモリ装置が装着された場合や取り外された場合に、自動的に各メモリ装置へのID付けが行われることで、容易に、必要な分だけメモリ装置を接続し、メモリ容量を拡張することができる。
(第5の実施の形態)
図38は、本発明の第5の実施の形態である。図38(A)は、情報処理装置CPU_CHIPとメモリモジュールMEM500から構成されるソースシンクロナスクロック方式による情報処理システムを示した実施の形態である。図38(B)は、情報処理装置CPU_CHIP1とメモリモジュールMEM501から構成されるエンベデッドクロック方式による情報処理システムを示した実施の形態である。RefCkは参照クロックである。RqMux0、RqMux1およびRqMux2は、リクエスト信号であり、RsMux0、RsMux1およびRsMux2はレスポンス信号である。情報処理装置CPU_CHIPは、図1および図2で示したものと同等である。また、情報処理装置CPU_CHIP1は、図31および図32で示したものと同等である。メモリモジュールMEM500はダイナミックランダムアクセスメモリDRAM00およびDRAM01、NOR型フラッシュメモリNOR0およびNAND型フラッシュメモリNAND0から構成される。ダイナミックランダムアクセスメモリDRAM00およびDRAM01は、図3で示したメモリと同等である。NOR型フラッシュメモリNOR0は図5で示したメモリと同等である。NAND型フラッシュメモリNAND0は図7で示したメモリと同等である。メモリモジュールMEM501はダイナミックランダムアクセスメモリDRAM10およびDRAM11、NOR型フラッシュメモリNOR1およびNAND型フラッシュメモリNAND1から構成される。ダイナミックランダムアクセスメモリDRAM10およびDRAM11は、図33で示したメモリと同等である。NOR型フラッシュメモリNOR1は図34で示したメモリと同等である。NAND型フラッシュメモリNAND1は図35で示したメモリと同等である。
本実施の形態では、容易に、ダイナミックランダムアクセスメモリDRAMを複数接続することができ、情報処理装置CPU_CHIPが必要とするワーク領域やコピー領域を容易に拡張できる。ダイナミックランダムアクセスメモリDRAMにてワーク領域やコピー領域を拡張することで、ダイナミックランダムアクセスメモリDRAMへ格納されるプログラムやデータのサイズが増え、最も情報処理装置に近いダイナミックランダムアクセスメモリDRAMへのアクセス頻度が高くなるため高速処理が可能となる。
本実施の形態では、ダイナミックランダムアクセスメモリの複数接続について説明したが、NOR型フラッシュメモリNORや、NAND型フラッシュメモリNANDは、必要に応じて複数個接続でき、容易にプログラム領域やデータ領域を拡張でき、携帯機器のシステム構成に合わせて柔軟に対応できる。
(第6の実施の形態)
図39は、本発明の第6の実施の形態である。図39(A)は、情報処理装置CPU_CHIPとメモリモジュールMEM600から構成されるソースシンクロナスクロック方式による情報処理システムを示した実施の形態である。図39(B)は、情報処理装置CPU_CHIP1とメモリモジュールMEM601から構成されるエンベデッドクロック方式による情報処理システムを示した実施の形態である。RefCkは参照クロックである。RqMux0、RqMux1およびRqMux2は、リクエスト信号であり、RsMux0、RsMux1およびRsMux2はレスポンス信号である。情報処理装置CPU_CHIPは、図1および図2で示したものと同等である。また、情報処理装置CPU_CHIP1は、図31および図32で示したものと同等である。メモリモジュールMEM600はNOR型フラッシュメモリNOR0、ダイナミックランダムアクセスメモリDRAM0、およびNAND型フラッシュメモリNAND0から構成される。ダイナミックランダムアクセスメモリDRAM0は、図3で示したメモリと同等である。NOR型フラッシュメモリNOR0は図5で示したメモリと同等である。NAND型フラッシュメモリNAND0は図7で示したメモリと同等である。メモリモジュールMEM601はNOR型フラッシュメモリNOR1、ダイナミックランダムアクセスメモリDRAM1、およびNAND型フラッシュメモリNAND1から構成される。ダイナミックランダムアクセスメモリDRAM1は、図33で示したメモリと同等である。NOR型フラッシュメモリNOR1は図34で示したメモリと同等である。NAND型フラッシュメモリNAND1は図35で示したメモリと同等である。
メモリモジュールMEM601およびMEM601は、それを構成するメモリの接続の順番が、情報処理装置CPU_CHIPから近い順に、NOR型フラッシュメモリセルを利用したNOR型フラッシュメモリNOR、ダイナミックメモリセルを利用したダイナミックランダムアクセスメモリDRAM、NAND型フラッシュメモリセルを利用したNAND型フラッシュメモリNANDである。携帯電話機では、電話やメールの待ち受け時は、OSや通信用プログラムなどが格納されるNOR型フラッシュメモリNORへの間欠的なアクセスが支配的となる。したがって、不揮発性メモリであるNOR型フラッシュメモリNORを、情報処理装置CPU_CHIPから最も近くに接続する本実施の形態では、ダイナミックランダムアクセスメモリDRAMをセルフリフレッシュ状態にし、NOR型フラッシュメモリNORのみを動作させることができ、電話やメールの待ち受け時の消費電力を低減することができる。
(第7の実施の形態)
図40は、本発明の第7の実施の形態である。図40(A)は、情報処理装置CPU_CHIPとメモリモジュールMEM700とMEM710から構成されるソースシンクロナスクロック方式による情報処理システムを示した実施の形態である。図40(B)は、情報処理装置CPU_CHIP1とメモリモジュールMEM701とMEM711から構成されるエンベデッドクロック方式による情報処理システムを示した実施の形態である。RefCk0およびRefCk1は参照クロックである。RqMux0、RqMux1、RqMux2、およびRqMux3はリクエスト信号であり、RsMux0、RsMux1、RsMux2およびRsMux3はレスポンス信号である。情報処理装置CPU_CHIPは、図1および図2で示したものと同等である。また、情報処理装置CPU_CHIP1は、図31および図32で示したものと同等である。メモリモジュールMEM700はNOR型フラッシュメモリNOR0およびNAND型フラッシュメモリNAND0から構成される。メモリモジュールMEM710はダイナミックランダムアクセスメモリDRAM00およびDRAM01から構成される。ダイナミックランダムアクセスメモリDRAM00およびDRAM01には、図3で示したメモリ装置M0や、図36で示したメモリ装置M31のいずれのメモリ装置も適用できる。NOR型フラッシュメモリNOR0には、図5で示したメモリ装置M1や、図36で示したメモリ装置M32のいずれのメモリ装置も適用できる。NAND型フラッシュメモリNAND0には、図7で示したメモリ装置M2や、図36で示したメモリ装置M33のいずれのメモリ装置も適用できる。メモリモジュールMEM701はNOR型フラッシュメモリNOR1およびNAND型フラッシュメモリNAND1から構成される。メモリモジュールMEM711はダイナミックランダムアクセスメモリDRAM10およびDRAM11から構成される。ダイナミックランダムアクセスメモリDRAM10およびDRAM11には、図33で示したメモリ装置M10や、図37で示したメモリ装置M41のいずれのメモリ装置も適用できる。NOR型フラッシュメモリNOR0には、図34で示したメモリ装置M11や、図37で示したメモリ装置M42のいずれのメモリ装置も適用できる。NAND型フラッシュメモリNAND0には、図35で示したメモリ装置M12や、図37で示したメモリ装置M43のいずれのメモリ装置も適用できる。
本実施の形態では、ダイナミックランダムアクセスメモリから構成されるメモリモジュールと、不揮発性メモリから構成されるメモリモジュールが、別々に情報処理装置へ接続される。携帯電話機では、電話やメールの待ち受け時は、OSや通信用プログラムなどが格納されるNOR型フラッシュメモリへの間欠的なアクセスが支配的となる。したがって、不揮発性メモリであるNOR型フラッシュメモリを、情報処理装置CPU_CHIPから最も近くに接続する本実施の形態では、ダイナミックランダムアクセスメモリから構成されるメモリモジュールをセルフリフレッシュ状態にし、さらにリクエストクロックRqCk2およびRqCk3や、レスポンスクロックRsCk2やRsCk3や参照クロックRefCk1を停止し、NOR型フラッシュメモリのみを動作させることができ、電話やメールの待ち受け時の消費電力を低減することができる。
(第8の実施の形態)
図41は、本発明の第8の実施の形態である。図41(A)は、情報処理装置CPU_CHIPとメモリモジュールMEM900から構成されるソースシンクロナスクロック方式による情報処理システムを示した実施の形態である。図41(B)は、情報処理装置CPU_CHIP1とメモリモジュールMEM901から構成されるエンベデッドクロック方式による情報処理システムを示した実施の形態である。RefCkは参照クロックである。RqMux0、RqMux1およびRqMux2はリクエスト信号であり、RsMux0、RsMux1およびRsMux2はレスポンス信号である。情報処理装置CPU_CHIPは、図1および図2で示したものと同等である。また、情報処理装置CPU_CHIP1は、図31および図32で示したものと同等である。メモリモジュールMEM900はダイナミックランダムアクセスメモリDRAM0とNAND型フラッシュメモリNAND00とNAND01から構成される。ダイナミックランダムアクセスメモリDRAM0には、図3で示したメモリ装置M0や、図36で示したメモリ装置M31のいずれのメモリ装置も適用できる。NAND型フラッシュメモリNAND0には、図7で示したメモリ装置M2や、図36で示したメモリ装置M33のいずれのメモリ装置も適用できる。メモリモジュールMEM901はダイナミックランダムアクセスメモリDRAM1とNAND型フラッシュメモリNAND10とNAND11から構成される。ダイナミックランダムアクセスメモリDRAM1には、図33で示したメモリ装置M10や、図37で示したメモリ装置M41のいずれのメモリ装置も適用できる。NAND型フラッシュメモリNAND10およびNAND11には、図35で示したメモリ装置M12や、図37で示したメモリ装置M43のいずれのメモリ装置も適用できる。
NAND型フラッシュメモリはNOR型フラッシュメモリより大容量かつ低コストを実現できるメモリである。NOR型フラッシュメモリの代わりにNAND型フラッシュメモリを利用することでNAND型フラッシュメモリNAND0へ、OSやアプリケーションプログラムを格納でき、大容量かつ低コストの情報処理システムが実現できる。さらに、NAND型フラッシュメモリNAND0へ格納しているOSやアプリケーションプログラムをあらかじめダイナミックランダムアクセスメモリDRAMへ転送することで、情報処理システムの高性能化が図れる。
(第9の実施の形態)
図42は、本発明の第9の実施の形態である。図42(A)は、情報処理装置CPU_CHIPとメモリモジュールMEM1000から構成されるソースシンクロナスクロック方式による情報処理システムを示した実施の形態である。図42(B)は、情報処理装置CPU_CHIP1とメモリモジュールMEM1001から構成されるエンベデッドクロック方式による情報処理システムを示した実施の形態である。RefCkは参照クロックである。RqMux0、RqMux1およびRqMux2は、リクエスト信号であり、RsMux0、RsMux1およびRsMux2はレスポンス信号である。情報処理装置CPU_CHIPは、図1および図2で示したものと同等である。また、情報処理装置CPU_CHIP1は、図31および図32で示したものと同等である。メモリモジュールMEM1000はダイナミックランダムアクセスメモリDRAM0、NOR型フラッシュメモリNOR0、NAND型フラッシュメモリNAND0およびハードディスクドライブHDD0から構成される。ダイナミックランダムアクセスメモリDRAM0には、図3で示したメモリ装置M0や、図36で示したメモリ装置M31のいずれのメモリ装置も適用できる。NOR型フラッシュメモリNOR0には、図5で示したメモリ装置M1や、図36で示したメモリ装置M32のいずれのメモリ装置も適用できる。NAND型フラッシュメモリNAND0には、図7で示したメモリ装置M2や、図36で示したメモリ装置M33のいずれのメモリ装置も適用できる。メモリモジュールMEM1001はダイナミックランダムアクセスメモリDRAM1、NOR型フラッシュメモリNOR1、NAND型フラッシュメモリNAND1およびハードディスクドライブHDD1から構成される。ダイナミックランダムアクセスメモリDRAM1には、図33で示したメモリ装置M10や、図37で示したメモリ装置M41のいずれのメモリ装置も適用できる。NOR型フラッシュメモリNOR0には、図34で示したメモリ装置M1や、図37で示したメモリ装置M32のいずれのメモリ装置も適用できる。NAND型フラッシュメモリNAND10およびNAND11には、図35で示したメモリ装置M12や、図37で示したメモリ装置M43のいずれのメモリ装置も適用できる。
ハードディスクHDDは、NAND型フラッシュメモリNANDより大容量かつ低コストを実現できるメモリである。データの読み出し単位や、アドレス管理方法や、エラー検出訂正方法に関していえば、もともとハードディスクHDDで実現していたデータの読み出し単位や、アドレス管理方法や、エラー検出訂正方法などをフラッシュメモリが引き継いでいるため、ハードディスクHDDを容易に追加接続し、大容量かつ低コストのメモリモジュールを実現できる。
(第10の実施の形態)
図43は、本発明の第10の実施の形態である。図43(A)は、情報処理装置CPU_CHIPとメモリモジュールMEM1100から構成されるソースシンクロナスクロック方式による情報処理システムを示した実施の形態である。図43(B)は、情報処理装置CPU_CHIP1とメモリモジュールMEM1101から構成されるエンベデッドクロック方式による情報処理システムを示した実施の形態である。RefCkは参照クロックである。RqMux0、RqMux1およびRqMux2は、リクエスト信号であり、RsMux0、RsMux1およびRsMux2はレスポンス信号である。情報処理装置CPU_CHIPは、図1および図2で示したものと同等である。また、情報処理装置CPU_CHIP1は、図31および図32で示したものと同等である。
メモリモジュールMEM1100は、第1の不揮発性メモリMRAM0、第2の不揮発性メモリNVM20、第3の不揮発性メモリNVM30から構成される。第1の不揮発性メモリMRAM0は、図3で示したメモリ装置M0のメモリ回路Mem0が、不揮発性のマグネティックメモリセルで構成されているマグネティックランダムアクセスメモリMRAMであっても、図36で示したメモリ装置M31のダイナミックランダムアクセスメモリDRAMがマグネティックランダムアクセスメモリMRAMに置き換わったメモリ装置であっても良い。第2の不揮発性メモリNVM20には、図5で示したメモリ装置M1や、図34で示したメモリ装置M11のいずれのメモリ装置も適用できる。第3の不揮発性メモリNVM30には、図7で示したメモリ装置M2や、図35で示したメモリ装置M11のいずれのメモリ装置も適用できる。メモリモジュールMEM1101は、第1の不揮発性メモリMRAM1、第2の不揮発性メモリNVM21、第3の不揮発性メモリNVM31から構成される。第1の不揮発性メモリMRAM1は、図33で示したメモリ装置M10のメモリ回路Mem0が、不揮発性のマグネティックメモリセルで構成されているマグネティックランダムアクセスメモリMRAMであっても、図37で示したメモリ装置M31のダイナミックランダムアクセスメモリDRAMがマグネティックランダムアクセスメモリMRAMに置き換わったメモリ装置であっても良い。第2の不揮発性メモリNVM21には、図34で示したメモリ装置M1や、図37で示したメモリ装置M32のいずれのメモリ装置も適用できる。第3の不揮発性メモリNVM31には、図35で示したメモリ装置M12や、図37で示したメモリ装置M43のいずれのメモリ装置も適用できる。
揮発性のダイナミックランダムアクセスメモリDRAMの代わりに不揮発性のマグネティックランダムアクセスメモリMRAMを用いることで、メモリ回路内のデータ保持動作を定期的に行う必要がないため、低電力化が可能となる。また、第2の不揮発性メモリNVM20は、図5で示したメモリ回路Mem1が不揮発性の相変化メモリセルから構成される相変化メモリPCMであっても、図36で示したメモリ装置M32のNOR型フラッシュメモリNORが相変化メモリPCMに置き換わったメモリ装置であっても良い。また、第2の不揮発性メモリNVM21は、図34で示したメモリ回路Mem1が不揮発性の相変化メモリセルから構成される相変化メモリPCMであっても、図37で示したメモリ装置M42のNOR型フラッシュメモリNORが相変化メモリPCMに置き換わったメモリ装置であっても良い。
(第11の実施の形態)
図44は本発明に係る情報処理システムの第11の実施の形態を示したものである。図44(A)は上面図であり、図44(B)は上面図に示したA−A’線に沿った部分の断面図である。本実施の形態のメモリモジュールは、ボールグリッドアレイ(BGA)によって装置に実装する基盤(例えばガラスエポキシ基板でできたプリント回路ボード)PCB上に、CHIPM1、CHIPM2、CHIPM3、CHIPM4が搭載されている。特に限定しないが、CHIPM1およびCHIPM2は不揮発性メモリ、およびCHIPM3はランダムアクセスメモリである。CHIPM4は情報処理装置CPU_CHIPである。CHIPM1とCHIPM2とCHIPM3とCHIPM4は、それぞれのチップを貫通しているチップ貫通配線TSVによって接続されている。また、CHIPM1と基盤PCBはチップ貫通配線TSVによって接続されており、CHIPM2と基盤PCBはチップ貫通配線TSVによって接続されており、CHIPM3と基盤PCBはチップ貫通配線TSVによって接続されており、CHIPM4と基盤PCBはチップ貫通配線TSV、ボールグリッドアレイ(BGA)によって接続されている。
本実装方法では、図1で示す情報処理システム、図31で示す情報処理システム、図39で示す情報処理システム、図40で示す情報処理システム、図41で示す情報処理システムおよび図43で示す情報処理システムを1つの封止体に集積できる。
本実施の形態ではプリント回路ボードPCB上にベアチップを積層し、各チップはチップ貫通配線TSVによって配線ができ、ボンディング配線を利用する必要がないため実装面積の小さなメモリモジュールを構成することができる。さらに、チップ貫通配線TSVによってチップ間配線長を短くすることができるため、より高性能でより信頼性の高いマルチチップモジュールが実現できる。
(第12の実施の形態)
図45に、本発明に係る情報処理システムを利用した携帯電話の第12の実施の形態を示す。携帯電話は、アンテナANT、無線ブロックRF、音声コーデックブロックSP、スピーカーSK、マイクロホンMK、情報処理装置CPU、液晶表示部LCD、キーボードKEYおよび本発明のメモリモジュールMSMで構成される。情報処理装置CPU_MAINは複数の情報処理回路を持ち、その中の1つの情報処理回路CPU0はベースバンド処理回路BBとして、他の中の少なくとも1つの情報処理回路CPU1はアプリケーションプロセッサAPとして動作する。
通話時の動作を説明する。アンテナANTを通って受信された音声は無線ブロックRFで増幅され、情報処理装置CPU0へ入力される。情報処理装置CPU0では、音声のアナログ信号をデジタル信号に変換し、エラー訂正と復号処理を行い、音声コーデックブロックSPへ出力する。音声コーデックブロックがデジタル信号をアナログ信号に変換しスピーカーSKに出力すると、スピーカーから相手の声が聞こえる。携帯電話から、インターネットのホームページにアクセスし、音楽データをダウンロードし、再生して聞き、最後にダウンロードした音楽データを保存するという一連の作業を行うときの動作を説明する。
メモリモジュールMEMには、OS、アプリケーションプログラム(メール、Webブラウザ、音楽再生プログラム、動作再生プログラム、ゲームプログラムなど)、音楽データ、静止画データ、動画データなどが格納されている。キーボードより、Webブラウザの起動を指示すると、メモリモジュールMSM内のNOR型フラッシュメモリへ格納されているWebブラウザのプログラムは情報処理回路CPU1によって読み出され、実行され、液晶表示LCDにWebブラウザが表示される。所望のホームページにアクセスし、気に入った音楽データのダウンロードをキーボードKEYより指示すると、音楽データは、アンテナANTを通って受信され、無線ブロックRFで増幅され、情報処理装置CPU0へ入力される。情報処理装置CPU0では、アナログ信号である音楽データをデジタル信号に変換し、エラー訂正と復号処理を行う。デジタル信号化された音楽データはメモリモジュールMSM内のダイナミックランダムアクセスメモリDRAMへ一旦、保持され、最終的に、メモリモジュールMEMのNAND型フラッシュメモリへと転送され格納される。
次に、キーボードKEYより、音楽再生プログラムの起動を指示するとメモリモジュールMSM内のNOR型フラッシュメモリへ格納されている音楽再生プログラムが、情報処理回路CPU1によって読み出され、実行され、液晶表示LCDに音楽再生プログラムが表示される。キーボードKEYより、メモリモジュール内NAND型フラッシュメモリへダウンロードした音楽データを聞くための指示を行うと、情報処理回路CPU1は音楽再生プログラムを実行し、NAND型フラッシュメモリへ保持している音楽データを処理し、最終的にスピーカーSKから音楽が聞こえてくる。本実施の形態のメモリモジュールMSM内のNOR型フラッシュメモリには、Webブラウザと音楽再生プログラムや、電子メールプログラムなどの複数のプログラムが格納され、情報処理装置CPU_MAINは複数の情報処理回路CPU0〜3を持つため、同時に複数のプログラムを実行することができる。電話や電子メールの待ち受け時には、情報処理装置CPU_MAINは、メモリモジュールMSMへのクロックを必要最小限の周波数で動作させることができ消費電力を極端に小さくできる。
このように、本発明に係るメモリモジュールを用いることにより、大量のメール、音楽再生、アプリケ−ションプログラムや音楽データ、静止画像データ、動画データなどを格納でき、さらに複数のプログラムを同時に実行できる。
(第13の実施の形態)
図46に、本発明に係る情報処理システムを利用した携帯電話の第13の実施の形態を示す。携帯電話は、アンテナANT、無線ブロックRF、音声コーデックブロックSP、スピーカーSK、マイクロホンMK、液晶表示部LCD、キーボードKEYおよび、メモリモジュールMSMと情報処理装置CPU_MAINを1つの封止体に集積した本発明の情報処理システムSLPで構成される。
本発明の情報処理システムSLPを用いることによって、部品点数を削減できるため、低コスト化ができ、携帯電話の信頼性が向上する、携帯電話を構成する部品の実装面積を小さくでき、携帯電話の小型化ができる。
(第14の実施の形態)
図47は、本発明の第14の実施の形態である。情報処理装置CPU_CHIP0、CPU_CHIP1、CPU_CHIP2、CPU_CHIP3とメモリモジュールMEM30、MEM31、MEM32、MEM33から構成される情報処理システムを示した実施の形態である。情報処理装置CPU_CHIP0、CPU_CHIP1、CPU_CHIP2、CPU_CHIP3は、図1で示した情報処理装置CPU_CHIPと同等である。メモリモジュールMEM30、MEM31、MEM32、MEM33は、図1で示したメモリモジュールMEMと同等である。RqC0からRqC7はリクエストクロックであり、RsC0からRsC7はレスポンスクロックである。RqM0からRqM7はリクエスト信号であり、RsM0からRsM1はレスポンス信号である。本実施の形態では、容易に情報処理装置を複数接続することができ、高速処理が可能となる。さらに、携帯機器のシステム構成や、必要とする性能に合わせて、柔軟に情報処理装置やメモリモジュールを接続することができる。
(第15の実施の形態)
図48は、本発明の第15の実施の形態である。情報処理装置CPU_CHIP0、CPU_CHIP1、CPU_CHIP2、CPU_CHIP3とメモリモジュールMEM40、MEM41、MEM42、MEM43から構成される情報処理システムを示した実施の形態である。情報処理装置CPU_CHIP0、CPU_CHIP1、CPU_CHIP2、CPU_CHIP3は、図31で示した情報処理装置CPU_CHIP1と同等である。メモリモジュールMEM40、MEM41、MEM42、MEM43は、図31で示したメモリモジュールMEM1と同等である。RefCk40、RefCk41、RefCk42、RefCk43、RefCk01、RefCk02、RefCk13およびRefCk23は参照クロックであり、RqM0からRqM7はリクエスト信号であり、RsM0からRsM1はレスポンス信号である。本実施の形態では、容易に情報処理装置を複数接続することができ、高速処理が可能となる。さらに、携帯機器のシステム構成や、必要とする性能に合わせて、柔軟に情報処理装置やメモリモジュールを接続することができる。
<各実施の形態に示される発明の効果のまとめ>
以上説明したように本明細書に開示される発明によって得られる主な効果は以下の通りである。
第1に、電源投入直後や、新たにメモリ装置が装着された場合や脱着された場合に、直列接続の確認動作を行うことで、確実にメモリ装置同士が接続されていることが確認できる。さらに、電源投入時や、新たにメモリ装置が装着された場合や取り外された場合に、自動的に各メモリ装置へのID付けが行われることで、容易に、必要な分だけメモリ装置を接続し、メモリ容量を拡張することができる。
第2に、リクエストへメモリ装置の識別番号IDを付加することで、情報処理装置CPU_CHIPから各メモリ装置M0、M1およびM2へリクエストが確実に転送される。また、情報処理装置CPU_CHIPへのレスポンスへIDを付加することで、各メモリ装置から正しくデータ転送が行えたことを確認でき、情報処理装置CPU_CHIPおよびメモリ装置M0、M1、M2の直列接続によって、接続信号数を減少させながらも、情報処理装置CPU_CHIPは所望の処理を実行することができる。
第3に、リクエストへリクエスト番号を付加し、またレスポンスへレスポンス番号を付加することで、データ転送性能の向上を図るためリクエストの入力順とは異なる順番で、レスポンスが送信された場合でも、情報処理装置CPU_CHIPは、どのリクエストに対するレスポンスがメモリ装置より送信されたかを知ることができ、所望の処理を高速に実行することができる。
第4に、リクエストインターフェース回路ReIFとレスポンスインターフェース回路は独立に動作可能なため、データの読み出し動作と書き込み動作を同時に実行でき、データ転送性能を向上させることができる。
第5に、リクエストの入力順序に関わらず、早く読み出せるデータは、読み出しが遅いデータを待つことなく、すぐに読み出すことができるため、高速化が可能となる。
第6に、メモリ装置M2からの読み出し時は、エラー検出と訂正を行い、書き込み時は、書き込みが正しく行われなかった不良アドレスに対して代替処理を行うため、信頼性を保つことができる。
第7に、各メモリ装置へのリクエストに対するレスポンスの時間帯を予測し、管理し、リクエストを発行することにより、低レイテンシと高速データ転送レートを達成できる。
第8に、情報処理装置CPU_CHIPや、各メモリ装置M0、M1およびM2がリード命令を含むリクエストを送信する際には、このリクエストに対するレスポンスを受信するために必要な空き状態のレスポンスキューを確保した後に、リード命令を含むリクエストを送信するため、レスポンスは低レイテンシで送信可能となり、高速データ転送を実現できる。
第9に、レイテンシを実測し、レイテンシの期待値と比較することで、本実施の形態の情報処理システムが正常に動作しているか判断できる。さらに、レイテンシの実測値とレイテンシの期待値との差分が許容範囲を超えた場合はレイテンシ補正動作を行うことで、常に許容範囲内の低レイテンシで動作させることができる。
第10に、各メモリ装置のレイテンシを実測し、この実測レイテンシ値をレイテンシレジスタLTREGへ更新することで、情報処理装置CPU_CHPは正確なレイテンシを用いた制御を行い、低レイテンシと高速データ転送を実現することができる。
第11に、コンフィグレーション回路CONFIG内の各レジスタの値はプログラム可能なため、様々な情報処理システムの構成や性能に合わせて最適なレジスタ値を設定でき、柔軟に対応できる。
第12に、各メモリ装置内のメモリバンク毎のセンスアンプSenseAmpやデータバッファDataLatをキャッシュメモリとして利用するだけではなく、各メモリ装置のレスポンスキューRsQoまでもキャッシュメモリとして利用するので、キャッシュメモリサイズを増やし、キャッシュメモリのヒット率を上げることができ、低レイテンシ且つ高速かつ低電力で各メモリ装置を動作させることが出来る。
第13に、複数の半導体チップを一つの封止体に実装することによって実装面積の小さなシステムメモリ・モジュールや、情報処理システムを提供できる。