以下、本発明の実施の形態例につき添付図面を参照しながら詳細に説明する。実施の形態例において各ブロックを構成する回路素子は、特に制限されないが、公知のCMOS(相補型MOSトランジスタ)等の集積回路技術によって、単結晶シリコンのような1個の半導体基板上に形成される。
図1は本発明を適用した第1の実施の形態例である情報処理装置CPU_CHIPとメモリモジュールMEMとから構成される情報処理システムを示したものである。以下におのおのについ説明する。
情報処理装置CPU_CHIPは、情報処理回路CPU0、CPU1、CPU2、CPU3とメモリ制御回路CONから構成されている。メモリ制御回路CONは、リクエストキューRqQ、レスポンスキューRsQ、ブートデバイスIDレジスタBotID、最端デバイスIDレジスタEndIDを含む。CPU0、CPU1、CPU2、CPU3では、メモリ制御回路CONを通じて、メモリモジュールMEM0より、OSやアプリケーションプログラムおよびアプリケーションプログラムにて処理を行うデータを読みだし実行する。
リクエストキューRqQは、メモリモジュールMEM0へ出力するためのCPU0、CPU1、CPU2およびCPU3で実行しているアプリケーションプログラムの結果などを格納する。レスポンスキューRsQは、CPU0、CPU1、CPU2およびCPU3へ出力するためのメモリモジュールMEM0から読み出したアプリケーションプログラムなどを格納する。
メモリモジュールMEM0は、メモリチップM0、M1、M2から構成される。また、情報処理装置CPU_CHIPとメモリチップM0、M1、M2は直列に接続されている。メモリチップM0は揮発性メモリであり、メモリチップM1およびM2は不揮発性メモリである。代表的な揮発性メモリには、メモリアレイにダイナミックランダムアクセスメモリセルを用いたDRAM及び疑似スタティックランダムアクセスメモリPSRAM、スタティックランダムアクセスメモリセルを用いたSRAM等があり、本発明には全ての揮発性メモリセルを利用することができる。本実施例ではメモリアレイにダイナミックランダムアクセスメモリセルを用いた例を説明する。
不揮発性メモリにはROM(リードオンリーメモリ)、EEPROM(エレクトリカリイレーサブルアンドプログラマブルROM)、フラッシュメモリ、相変化メモリ、マグネティック・ランダムアクセスメモリMRAM、抵抗スイッチング型ランダムアクセスメモリReRAM等を用いることができる。本実施の形態例ではフラッシュメモリを例に説明する。
また、代表的なフラッシュメモリには、NOR型フラッシュメモリと、AND型フラッシュメモリと、NAND型フラッシュメモリと、ORNAND型フラッシュメモリがあり、本発明には全てのフラッシュメモリを利用することができる。本実施例では、NOR型フラッシュメモリとNAND型フラッシュメモリを例に説明する。
特に限定しないが、メモリチップM0として用いられる典型的な揮発性メモリは、ダイナミックメモリセルを利用したダイナミックランダムアクセスメモリであり、読み出し時間が15ns程度で、約1Gbitの記憶容量を持っている。特に限定しないがメモリチップM0は情報処理装置CPU_CHIPにてアプリケーションプログラムを実行するための一時的なワークメモリとして利用される。
特に限定しないが、メモリチップM1として用いられる典型的なフラッシュメモリは、NOR型フラッシュメモリセルを利用し、読み出し時間が80ns程度であり、約1Gbitの大きな記憶容量を持っている。特に限定しないが、メモリチップM1には情報処理装置CPU_CHIPにて実行するOS、ブートコード、ブートデバイスID値、最端デバイスID値およびアプリケーションプログラムなどが格納される。
特に限定しないが、メモリチップM2として用いられる典型的なフラッシュメモリはNAND型フラッシュメモリセルを利用し、読み出し時間が25μs程度であり、約4Gbit記憶容量を持っている。特に限定しないが、メモリチップM1には主に情報処理装置CPU_CHIPにて再生、録音および録画処理を行うために必要な音声データ、静止画像データや動画像データなどが格納される。
メモリチップM0は、初期設定回路INIT、リクエストインターフェース回路ReqIFと、レスポンスインターフェース回路ResIFと、メモリ回路MemVLから構成されている。リクエストインターフェース回路ReqIFは、リクエストクロック制御回路RqCkCおよび、リクエストキュー制御回路RqCTから構成される。レスポンスインターフェース回路ResIFは、レスポンスクロック制御回路RsCkCおよび、レスポンスキュー制御回路RqCTから構成される。メモリ回路MemVLは、特に限定しないが、揮発性メモリであり、ダイナミックランダムアクセスメモリセルを利用したダイナミックランダムアクセスメモリである。リクエストクロック制御回路RqCkCは、クロックドライバ回路Drv1およびクロック分周回路Div1から構成される。メモリチップM1は、初期設定回路INIT、リクエストインターフェース回路ReqIFと、レスポンスインターフェース回路ResIFと、メモリ回路MemNV1から構成されている。リクエストインターフェース回路ReqIFは、リクエストクロック制御回路RqCkCおよび、リクエストキュー制御回路RqCTから構成される。レスポンスインターフェース回路ResIFは、レスポンスクロック制御回路RsCkCおよび、レスポンスキュー制御回路RqCTから構成される。
メモリ回路MemNV1は、特に限定しないが、不揮発性メモリであり、NOR型フラッシュメモリセルを利用したNOR型フラッシュメモリである。メモリ回路MemNV1には、ブートデバイスID値および最端デバイスID値が格納される。
リクエストクロック制御回路RqCkCは、クロックドライバ回路Drv1およびクロック分周回路Div1から構成される。
メモリチップM2は、初期設定回路INIT、リクエストインターフェース回路ReqIFと、レスポンスインターフェース回路ResIFと、メモリ回路MemNV2から構成されている。メモリチップM2は、直列的に接続しているメモリチップの中で、最も終端のメモリチップであることを示すため、特に限定しないがRqEn3、RsMux3、RqCk3を接地(gnd)している。
リクエストインターフェース回路ReqIFは、リクエストクロック制御回路RqCkCおよび、リクエストキュー制御回路RqCTから構成される。レスポンスインターフェース回路ResIFは、レスポンスクロック制御回路RsCkCおよび、レスポンスキュー制御回路RqCTから構成される。メモリ回路MemNV2は、特に限定しないが、不揮発性メモリであり、NAND型フラッシュメモリセルを利用したNAND型フラッシュメモリである。リクエストクロック制御回路RqCkCは、クロックドライバ回路Drv1およびクロック分周回路Div1から構成される。
メモリチップM0、M1及びM2の初期設定回路INITは電源投入直後に、それぞれのメモリチップに対し初期設定を行う。メモリチップM0、M1及びM2のリクエストキュー制御回路RqCTには、それぞれのメモリチップのID番号を格納するIDレジスタが設けられている。電源投入直後に先ず、初期設定回路INITによって初期設定され、次に、情報処理装置CPU_CHIPによってメモリチップM0、M1、M2のID番号が決定され、それぞれのメモリチップ内のIDレジスタへID番号が格納される。
メモリチップM0、M1及びM2は、特に限定しないが、それぞれブートデバイス認識信号Bsigを持っており、このブートデバイス認識信号Bsigが接地(gnd)されている場合は、そのメモリチップが電源投入直後の動作を行うためのブートプログラムを格納しているブートデバイスであることを示す。ブートデバイス認識信号Bsigが電源(vdd)に接続されている場合は、そのメモリチップがブートデバイスではないことを示す。特に限定しないが、メモリチップM1がブートデバイスであり、メモリチップM0およびM2はブートデバイスに設定されていない。また、ブートデバイス認識信号Bsigによって、どのチップをブートデバイスにするかをプログラムすることができる。
RqCk0、RqCK1およびRqCk2は、リクエストクロックであり、RsCk0、RsCK1およびRsCk2はレスポンスクロックである。RqEN0、RqEN1およびRqEN2は、リクエストイネーブル信号であり、RsEN0、RsEN1およびRsEN2はレスポンスイネーブル信号である。RqMux0、RqMux1およびRqMux2は、リクエスト信号であり、RsMux0、RsMux1およびRsMux2はレスポンス信号である。
メモリチップM0は、特に限定しないが、情報処理装置CPU_CHIPからのリクエストを受け付けることが可能であればRqEN0をHighにし、受け付けることが不可能であればRqEN0をLowにする。メモリチップM1は、特に限定しないが、メモリチップM0からのリクエストを受け付けることが可能であればRqEN1をHighにし、受け付けることが不可能であればRqEN1をLowにする。メモリチップM2は、特に限定しないが、メモリチップM1からのリクエストを受け付けることが可能であればRqEN2をHighにし、受け付けることが不可能であればRqEN2をLowにする。
RqMux0、RqMux1およびRqMux2は、リクエスト信号であり、これらリクエスト信号を通じて送信されるリクエストは、特に限定しないがID値、コマンド、アドレス及び書き込みデータなどが、多重化され、それぞれのリクエストクロックRqCk0、RqCk1およびRqCk2に同期して送信される。RsMux0、RsMux1およびRsMux2のレスポンス信号であり、これらレスポンス信号を通じて送信されるレスポンスは、特に限定しないがID値及び読み出したデータなどが、多重化され、それぞれのレスポンスクロックRsCk0、RsCk1、RsCk2に同期して送信される。
以下に本メモリシステムの動作を説明する。先ず、電源投入直後の動作について説明する。
<電源投入直後の動作説明>
先ず、電源投入直後の本メモリシステムの動作について説明する。
情報処理装置CPU_CHIPへ電源が投入されると、ブートデバイスIDレジスタBotIDを1へ、最端デバイスIDレジスタEndIDを0へ設定する。
メモリチップM0へ電源が投入されると、自身の初期設定回路INITが、自身のリクエストキュー制御回路RqCT、レスポンスキュー制御回路RsCT、リクエスト制御回路RqCkc、レスポンスクロック制御回路RsCkC、クロック分周回路Div1、Div2およびメモリ回路MemVLを初期設定する。リクエストキュー制御回路RqCTが持っているIDレジスタを0へ、ID有効ビットをLowへ設定する。レスポンスキュー制御回路RsCTが持つレスポンス調停回路のレスポンス優先順位に関して、メモリチップM0のレスポンス優先順位は1へ、メモリチップM1のレスポンス優先順位は2へ、メモリチップM2のレスポンス優先順位は3へ初期設定される。クロック分周回路Div1およびDiv2の分周比は1に設定される。
メモリチップM1へ電源が投入されると、自身の初期設定回路INITが、自身のリクエストキュー制御回路RqCT、レスポンスキュー制御回路RsCT、リクエスト制御回路RqCkc、レスポンスクロック制御回路RsCkC、クロック分周回路Div1、Div2およびメモリ回路MemNV1を初期設定する。リクエストキュー制御回路RqCTが持っているIDレジスタを0へ、ID有効ビットをLowへ設定する。メモリチップM1のレスポンスキュー制御回路RsCTが持つレスポンス調停回路のレスポンス優先順位に関して、メモリチップM1のレスポンス優先順位は1へ、メモリチップM2のレスポンス優先順位は2へ初期設定される。クロック分周回路Div1およびDiv2の分周比は1に設定される。
メモリチップM2へ電源が投入されると、自身の初期設定回路INITが、自身のリクエストキュー制御回路RqCT、レスポンスキュー制御回路RsCT、リクエスト制御回路RqCkc、レスポンスクロック制御回路RsCkC、クロック分周回路Div1、Div2およびメモリ回路MemNV2を初期設定する。メモリチップM2のリクエストキュー制御回路RqCTが持っているIDレジスタを0へ、ID有効ビットをLowへ設定する。メモリチップM2のレスポンスキュー制御回路RsCTが持つレスポンス調停回路のレスポンス優先順位に関してメモリチップM2のレスポンス優先順位は1へ初期設定される。クロック分周回路Div1およびDiv2の分周比は1に設定される。次に、メモリチップM2は、ブートデバイス認識信号Bsigが電源に接続されているので、自分自身はブートデバイスではないことを認識する。
また、情報処理装置CPU_CHIPからリクエストクロックRqCk0がメモリチップM0へ入力され、メモリチップM0のクロックドライバDrv1を通じてクロック分周回路Div1およびクロック信号ck1としてクロック分周回路Div2へ出力される。クロック分周回路Div1へ入力したクロックは、リクエストクロックRqCk1を通じてメモリチップM1へ出力する。クロック分周回路Div1へ入力したクロックは、クロック信号ck2から出力され、また、リクエストクロックRqCk1を通じてメモリチップM2へ出力する。クロック分周回路Div2へ入力したクロックはクロック信号ck3から出力され、また、レスポンスクロックRsCk0を通じて情報処理装置CPU_CHIPへ出力する。メモリチップM1のクロックドライバDrv1へ入力されたクロックは、クロック分周回路Div1およびクロック信号ck1としてクロック分周回路Div2へ出力される。クロック分周回路Div1へ入力したクロックは、クロック信号ck2から出力され、また、リクエストクロックRqCk1を通じてメモリチップM2へ出力する。クロック分周回路Div2へ入力したクロックは、クロック信号ck3から出力され、また、レスポンスクロックRsCk1を通じてメモリチップM0へ出力する。レスポンスクロックRsCk1を通じてメモリチップM0のクロックドライバDrv2へ入力されたクロックはクロック信号ck4へ出力される。メモリチップM2のクロックドライバDrv1へ入力されたクロックはクロック分周回路Div1およびおよびクロック信号ck1としてクロック分周回路Div2へ出力される。クロック分周回路Div2へ入力したクロックはクロック信号ck3から出力され、またリクエストクロックRqCk1を通じてメモリチップM2へ出力する。レスポンスクロックRsCk2を通じてメモリチップM1のクロックドライバDrv2へ入力されたクロックはクロック信号ck4へ出力される。
次に、メモリチップM0は、ブートデバイス認識信号Bsigが電源vddに接続されているので、自分自身はブートデバイスではないことを認識する。メモリチップM1は、ブートデバイス認識信号Bsigが接地gndされているので、自分自身がブートデバイスであることを認識し、自らのメモリ回路MemNV1が保持しているブートデバイスID値1をIDレジスタへ設定し、ID有効ビットをHighにする。メモリチップM2は、ブートデバイス認識信号Bsigが電源に接続されているので、自分自身はブートデバイスではないことを認識する。さらに、メモリチップM2は、RqEn3、RsMux3、RqCk3を接地(gnd)していることによって、直列接続しているメモリチップの最も終端のメモリチップであることを認識し、リクエストイネーブル信号RqEn2をHighにする。
次に、メモリチップM1はリクエストイネーブル信号RqEn2がHighになったことを確認し、レスポンスイネーブル信号RsEn2及びリクエストイネーブル信号RqEn1をHighにする。次に、メモリチップM0はリクエストイネーブル信号RqEn1がHighになったことを確認し、レスポンスイネーブル信号RsEn1及びリクエストイネーブル信号RqEn0をHighにする。最後に、情報処理装置CPU_CHIPは、リクエストイネーブル信号RqEn0がHighになったことを確認し、各メモリチップの信号接続が確認されたことを知り、レスポンスイネーブル信号RsEn0をHighにする。これによって、情報処理装置CPU_CHIPおよびメモリチップM0、M1、M2が直列接続されていることが正しく確認できる。
次に、各メモリチップの信号接続の確認後に行われるブートデータの読み出し方法について説明する。
情報処理装置CPU_CHIPは、ブートデバイスIDレジスタBotIDの値1を読み出し、リクエスト信号RqMux0を通じて、メモリチップM1のID値1、読みだし命令、転送データサイズおよびアドレスを多重化したリクエストReqBRD1をクロック信号RqCK0に同期させ、メモリチップM0へ転送する。メモリチップM0のID有効ビットがLowのため、メモリチップM0は、情報処理装置CPU_CHIPからのリクエストReqBRD1はメモリチップM0へのリクエストではないと判断し、リクエスト信号RqMux1を通じて、リクエストReqBRD1をクロック信号RqCK1に同期させメモリチップM1へ転送する。
メモリチップM1は、メモリチップM0からのリクエストReqBRD1を、自身のリクエストキュー制御回路RqCTへ格納する。その後、リクエストキュー制御回路RqCTはリクエストに含まれるID値1と自身のIDレジスタの値1を比較する。双方は一致しており、ID有効ビットがHighのため、メモリチップM1は、メモリチップM0からのリクエストを自身へのリクエストであると判断する。
その後、リクエストReqBRD1に含まれる読み出し命令、転送データサイズおよびアドレスによって、メモリ回路MemNV1からブートデータが、最終端デバイスIDレジスタから番号3が読み出され、レスポンスキュー制御回路RsCTへ転送される。また同時に、リクエストキュー制御回路RqCTが格納しているIDレジスタ値1もレスポンスキュー制御回路RsCTへ転送される。
メモリチップM1のレスポンスキュー制御回路RsCTはレスポンス信号RqMux1を通じて、メモリチップM1のID値1、ブートプログラムおよび最終端デバイスIDを多重化したレスポンスResBRD1をクロック信号RqCK1に同期させ、メモリチップM0へ転送する。
最後に、メモリチップM0のレスポンスキュー制御回路RsCTはレスポンス信号RqMux0を通じて、レスポンスResBRD1をクロック信号RqCK0に同期させ、情報処理装置CPU_CHIPへ転送する。
情報処理装置CPU_CHIPは、レスポンスResBRD1をレスポンスキューRsQへ格納する。レスポンスResBRD1に含まれるID値1により、ブートデータおよび最終端デバイスID値3が、メモリチップM1から送信されたことを知ることができる。最終端デバイスID値3はメモリ制御回路CON内の最終端デバイスIDレジスタへ保存される。
情報処理装置CPU_CHIPは、ブートプログラムによって自らを立ち上げ、次に各メモリチップM0、M1、M2へID番号の割り当てを行う。
次に、各メモリチップへのID番号付けについて説明する。情報処理装置CPU_CHIPはブートコードに従い、先ず、各メモリチップへのID番号付けを行う。情報処理装置CPU_CHIPは、リクエスト信号RqMux0を通じて、ID番号2とID設定命令をメモリチップM0へ転送する。メモリチップM0では、ID有効ビットがLowのため、まだID番号付けが行われていない。そこで、メモリチップM0は、ID番号2とID設定命令によってIDレジスタへID番号2を設定し、ID有効ビットをHighにする。ID有効ビットがHighとなることで、ID番号付けが完了したことを示す。メモリチップM0のID番号付けが完了すると、メモリチップM0はレスポンス信号RsMux0を通じて、メモリチップM0のID値2およびID番号付け完了情報を出力する。情報処理装置CPU_CHIPは、メモリチップM0のID値2およびID番号付け完了情報を受け取り、メモリチップM0のID番号付けが完了したことを知る。
次に、情報処理装置CPU_CHIPは、リクエスト信号RqMux0を通じてID番号3とID設定命令を多重化したリクエストReqID3をメモリチップM0へ転送する。メモリチップM0は自身のID番号2とリクエストReqID3に含まれるID番号3とを比較し、不一致のため、リクエストReqID3をメモリチップM1へ転送する。
メモリチップM1は自身のID番号1とリクエストReqID3に含まれるID番号3とを比較し、不一致のため、リクエストReqID3をメモリチップM2へ転送する。メモリチップM2では、ID有効ビットがLowのため、まだID番号付けが行われていない。そこで、メモリチップM2は、リクエストReqID3に含まれるID番号3とID設定命令によってメモリチップM2のIDレジスタへID番号3を設定し、ID有効ビットをHighにする。最終端のメモリチップM2のID番号付けが完了すると、メモリチップM2はレスポンス信号RqMux2を通じて、メモリチップM2のID値3およびID番号付け完了情報を多重化したレスポンスResID3をメモリチップM1へ出力する。メモリチップM1はレスポンス信号RqMux1を通じてレスポンスResID3をメモリチップM0へ出力する。メモリチップM0はレスポンス信号RqMux0を通じてレスポンスResID3を情報処理装置CPU_CHIPへ転送する。情報処理装置CPU_CHIPは、レスポンスResID3を受け取り、このレスポンスResID3に含まれるメモリチップM2のID値3およびID番号付け完了情報を受け取り、メモリチップM2のID番号付けが完了したことを知る。さらに、情報処理装置CPU_CHIPは、転送されたメモリチップM2のID値3と、メモリ制御回路CON内の最終端デバイスIDレジスタに設定されている最終端デバイスID値3とを比較し、双方が一致したことで、最終端のメモリチップまでID番号付けが行われたことを確認する。この後、メモリモジュールMEM0は情報処理装置CPU_CHIPからのリクエストを待つアイドル状態となる。
このように、電源投入直後に、直列接続の確認動作を行うことで、確実にメモリ同士が接続されていることが確認できる。さらに、ブートデバイスおよび、最端のメモリチップを明示し、自動的に各メモリへのID付けが行われることで、容易に、必要な分だけメモリチップを接続し、メモリ容量を拡張することができる。
<通常動作の説明>
電源投入時のパワーオンシーケンスが終了した後のメモリモジュールMEM0と情報処理装置CPU_CHIP間のデータ転送について説明する。
特に限定しないが、メモリチップM0、M1、M2のそれぞれのIDレジスタ値が2、1及び3に設定された場合の、メモリモジュールMEM0と情報処理装置CPU_CHIP間のデータ転送について説明する。特に限定しないが、メモリチップM0、M1、M2のリクエストキュー制御回路RqCTにはリクエストキューは2つ存在し、リクエストがエントリされていない状態であり、レスポンスキュー制御回路RsCTにはレスポンスキューが4つ存在し、レスポンスがエントリされていない空の状態である場合のデータ転送について説明する。特に限定しないが、1つのリクエストキューは1バイトのID値、1バイトの命令、2バイトのアドレス、32バイトの読み出しデータを格納でき、1つのレスポンスキューは1バイトのID値、32バイトの読み出しデータを格納できる。
また、特に限定しないが、メモリチップM0、M1、M2のそれぞれのメモリ回路MemVL、MemNV1、MemNV2は4つのメモリバンクから構成されており、1つのメモリバンクには1つのセンスアンプ回路が装置されている。
メモリチップM0は、自身のリクエストキューに情報処理装置CPU_CHIPからのリクエストがエントリされていないため、リクエストイネーブル信号RqEn0をHighにし、リクエストを受け付けることができることを情報処理装置CPU_CHIPへ知らせる。
情報処理装置CPU_CHIPは、リクエスト信号RqMux0を通じて、ID値2、バンクアクティブ命令BA、バンクアドレスBK0、ロウアドレスRow0を多重化したリクエストReqBAm01をクロック信号RqCK0に同期させ、メモリチップM0へ転送する。
続いて、リクエスト信号RqMux0を通じて、ID値2、4バイト読み出し命令RD、バンクアドレスBK0、カラムアドレスCol3を多重化したリクエストReqRDm04をクロック信号RqCK0に同期させ、メモリチップM0へ転送する。
メモリチップM0は、情報処理装置CPU_CHIPからのリクエストReqBAm01とリクエストReqRDm04を順に、自身のリクエストキュー制御回路RqCTへ格納する。
これで、リクエストキュー制御回路RqCT内の全てのリクエストキューはエントリされ、情報処理装置CPU_CHIPからの新たなリクエストを受け付けることができないため、リクエストイネーブル信号RqEn0をLowにする。リクエストイネーブル信号RqEn0がLowになったことで、情報処理装置CPU_CHIPは、メモリチップM0が、リクエストを受け付けられなくなったことを知ることができる。
その後、リクエストキュー制御回路RqCTはリクエストReqBAm01に含まれるID値2と自身のIDレジスタの値2を比較する。リクエストReqBA1に含まれるID値2とメモリチップM0のIDレジスタ値2は一致しているため、リクエストキュー制御回路RqCTはリクエストReqBA1をメモリ回路MemVLへ送信する。メモリ回路MemVLは、リクエストReqBAm01にバンクアクティブ命令BA、バンクアドレスBK0、ロウアドレスRow0によって、バンク0内のロウ0に接続されている8192ビット分のメモリセルが活性化されセンスアンプへ転送される。
リクエストReqBAm01が処理されたことによって、リクエストキュー制御回路RqCT内のリクエストキューがひとつ分空いたため、メモリチップM0はリクエストイネーブル信号RqEn0をHighにし、新たなリクエストを受け付け可能であることを情報処理装置CPU_CHIPへ知らせる。
次に、リクエストキュー制御回路RqCTはリクエストReqRDm04に含まれるID値2と自身のIDレジスタの値2を比較する。リクエストReqRDm04に含まれるID値2とメモリチップM0のIDレジスタ値2はまた一致しているため、リクエストキュー制御回路RqCTはリクエストReqRDm04をメモリ回路MemVLへ送信する。メモリ回路MemVLは、リクエストReqRDm04に含まれる4バイト読み出し命令RD4、バンクアドレスBK0、カラムアドレスCol3によって、メモリ回路MemVLのバンク0のセンスアンプに保持されているデータのなかで、カラムアドレス3を開始アドレスとした4バイト分のデータが読み出し、IDレジスタ値2を含めて、レスポンスキュー制御回路RsCTへレスポンスResRDm04として転送される。リクエストReqRDm04がメモリ回路MemNV1へ送信されてから、所望のデータが読み出されレスポンスキュー制御回路RsCTへレスポンスResRDm04として入力されるまでの時間は、特に限定しないが、15ns程度である。
レスポンスキュー制御回路RsCTは、レスポンス信号RsMux0を通じて、レスポンスRsRDm04を情報処理装置CPU_CHIPへ出力する。情報処理装置CPU_CHIPのメモリ制御回路CONはレスポンスRsRDm04を、レスポンスキューRsQへ受け取る。情報処理装置CPU_CHIPは、レスポンスキューRsQ送信されたレスポンスRsRDm04に含まれるID値2によって、リクエストRqRDm04に対応するデータが正しくメモリチップM0から送信されたことを確認できる。
特に限定しないが、レスポンスキューRsQへ入力したデータは情報処理回路CPU0、CPU1、CPU2およびCPU3のいずれかでデータ処理が行われる。上記では、メモリチップM0でのデータの読み出しについて説明したが、データの書込みについても同様の動作を実行できることは言うまでもない。
以上説明したように、情報処理装置CPU_CHIPからメモリモジュールMEM0へのリクエスト及びメモリモジュールMEM0から情報処理装置CPU_CHIPへのレスポンスにID情報を含むことで、正しくデータ転送が行えたことを確認でき、情報処理装置CPU_CHIPおよびメモリチップM0、M1、M2の直列接続によって、接続信号数を減少させながらも、情報処理装置CPU_CHIPは所望の処理を実行することができる。
次に、情報処理装置CPU_CHIPとメモリチップM1とのデータ転送について説明する。情報処理装置CPU_CHIPは、リクエスト信号RqMux0を通じて、ID値1、4バイトデータ読み出し命令NRD4、アドレスAdd31を多重化したリクエストReqNRD4m1をメモリチップM0へ転送する。メモリチップM0は、情報処理装置CPU_CHIPからのリクエストReqNRD4m1を自身のリクエストキュー制御回路RqCTへ格納し、リクエストReqNRD4m1に含まれるID値1と自身のIDレジスタの値2を比較する。比較結果は不一致のため、メモリチップM0はリクエストReqNRD4m1を自身へのリクエストではないと判断し、リクエスト信号RqMux1を通じて、メモリチップM1へ転送する。
メモリチップM1は、メモリチップM0からのリクエストReqNRD4m1を自身のリクエストキュー制御回路RqCTへ格納し、リクエストReqNRD4m1に含まれるID値1と自身のIDレジスタの値1を比較する。リクエストキュー制御回路RqCTはリクエストReqNRD4m1に含まれるID値1と自身のIDレジスタの値1を比較し、一致しているため、リクエストReqNRD4m1をメモリ回路MemNV1へ送信する。リクエストReqNRD4m1に含まれる4バイト読み出し命令NRD4、アドレスAdd31によって、アドレス31を開始アドレスとした4バイト分のデータがメモリ回路MemNV1から読み出され、IDレジスタ値1を含めて、レスポンスキュー制御回路RsCTへレスポンスResNRD4m1として転送される。 リクエストReqNRD4m1がメモリ回路MemNV1へ送信されてから、所望のデータが読み出されるまでの時間は、特に限定しないが、80ns程度である。
レスポンスキュー制御回路RsCTは、レスポンス信号RsMux1を通じて、レスポンスResNRD4m1をメモリチップM0ヘ出力する。メモリチップM0のレスポンスキュー制御回路RsCTは受け取ったレスポンスResNRD4m1をレスポンス信号RsMux0から情報処理装置CPU_CHIPへ出力する。上記では、メモリチップM1でのデータの読み出しについて説明したが、データの書込みについても同様の動作を実行できることは言うまでもない。
以上説明したように、リクエストへIDを付加することで、情報処理装置CPU_CHIPからメモリチップM0を介して、メモリチップM1へリクエストが確実に転送される。また、レスポンスへIDを付加することで、メモリチップM1から読み出されメモリチップM0を介して情報処理装置CPU_CHIPが受け取ったデータは、メモリチップM1へのリクエストに対応したメモリチップM1から読み出されたデータであることを確認でき、情報処理装置CPU_CHIPおよびメモリチップM0、M1、M2の直列接続によって、接続信号数を減少させながらも、情報処理装置CPU_CHIPは所望の処理を実行することができる。
次に、情報処理装置CPU_CHIPとメモリチップM2とのデータ転送について説明する。特に限定しないがメモリチップM2はNAND型のフラッシュメモリセルを利用したNAND型フラッシュメモリである。NAND型フラッシュメモリは書き換えを繰り返すことによって、信頼性が低下し、書き込み時に書いたデータが、読み出し時には異なるデータとなったり、書き換え時にデータが書き込まれなかったりすることが稀にあるため、512Byte分のデータと、この512Byte分のデータにエラーが発生した際に、そのエラーを訂正するための16Byte分のECCコードが1ページ分のデータとして管理されている。
情報処理装置CPU_CHIPは、リクエスト信号RqMux0を通じて、ID値3、1ページ(512Byte+16Byte)データ読み出し命令NDRDp1、ページアドレスPadd1を多重化したリクエストReqNDRDp1m2をメモリチップM0へ転送する。メモリチップM0は、情報処理装置CPU_CHIPからのリクエストReqNDRDp1m2を自身のリクエストキュー制御回路RqCTへ格納し、リクエストReqNRDp1m2に含まれるID値3と自身のIDレジスタの値2を比較する。比較結果は不一致のため、メモリチップM0はリクエスト信号RqMux1からリクエストReqNDRDp1m2をメモリチップM1へ転送する。
メモリチップM1は、メモリチップM0からのリクエストReqNDRDp1m2を自身のリクエストキュー制御回路RqCTへ格納し、リクエストReqNDRDp1m2に含まれるID値3と自身のIDレジスタの値1を比較する。比較結果は不一致のため、メモリチップM1はリクエスト信号RqMux2からリクエストReqNDRDp1m2をメモリチップM2へ転送する。メモリチップM2は、メモリチップM1からのリクエストReqNDRDp1m2を自身のリクエストキュー制御回路RqCTへ格納し、リクエストReqNDRDp1m2に含まれるID値3と自身のIDレジスタの値3を比較する。比較結果は一致しているため、リクエストReqNDRDp1m2をメモリ回路MemNV2へ送信する。
リクエストReqNDRDp1m2に含まれる1ページ読み出し命令NDRDp1、ページアドレスPadd1によって、ページアドレス1を開始アドレスとした1ページ(512Byte)分のデータ及びECCコード(16Byte)がメモリ回路MemNV2から読み出され、メモリ回路MemNV2内のデータレジスタへ転送される。次に、レスポンスキュー制御回路RsCTは、データレジスタ内のデータを32Byte単位で、IDレジスタ値3を含めて、レスポンスResNDRDp1m2-0〜レスポンスResNDRDp1m2-7として順に読み出し、メモリチップM1へ転送する。最後に、ページアドレス1内の16Byte分のECCコードを読み出し、IDレジスタ値3を含めてレスポンスResNDRDp1m2ECCとして、レスポンス信号RsMux2を通じてM1へ転送する。リクエストReqNDRDp1m2がメモリ回路MemNV2へ送信されてから、所望のデータがメモリ回路MemNV2内のデータレジスタへ読み出されるまでの時間は特に限定しないが、25usec程度である。
レスポンスResNDRDp1m2-0、ResNDRDp1m2-1、ResNDRDp1m2-2、ResNDRDp1m2-3、ResNDRDp1m2-4、ResNDRDp1m2-5、ResNDRDp1m2-6、レスポンスResNDRDp1m2-7及び、レスポンスResNDRDp1m2ECCは、順にメモリチップM1へ転送された後、レスポンス信号RsMux1通じてメモリチップM0へ転送され、さらに、レスポンス信号RsMux0を通じて、報処理装置CPU_CHIPへ転送される。
情報処理装置CPU_CHIPのメモリ制御回路CONは順に、レスポンスResNDRDp1m2-0、ResNDRDp1m2-1、ResNDRDp1m2-2、ResNDRDp1m2-3、ResNDRDp1m2-4、ResNDRDp1m2-5、ResNDRDp1m2-6、レスポンスResNDRDp1m2-7及び、レスポンスResNDRDp1m2ECCを、レスポンスキューRsQへ受け取る。情報処理装置CPU_CHIPは、レスポンスキューRsQ送信されたこれらレスポンスに含まれるID値2によって、これらレスポンスがメモリチップM2から送信されたことを確認できる。
情報処理装置CPU_CHIPは、メモリチップM2から送信されたデータに対し、情報処理回路CPU0、CPU1、CPU2、CPU3のいずれかにて、ECCコードを利用しエラー検出を行う。エラーがなければ、そのデータに対し情報処理回路CPU0、CPU1、CPU2、CPU3のいずれかがデータ処理を行う。エラーがあれば情報処理回路CPU0、CPU1、CPU2、CPU3のいずれかにてエラー訂正を行った後、エラー訂正が行われたデータに対し情報処理回路CPU0、CPU1、CPU2、CPU3のいずれかデータ処理を行う。上記では、メモリチップM2でのデータの読み出しについて説明したが、データの書込みについても同様の動作を実行できることは言うまでもない。
以上説明したように、リクエストへIDを付加することで、情報処理装置CPU_CHIPからメモリチップM0およびM1を介して、メモリチップM2へリクエストが確実に転送される。また、レスポンスへIDを付加することで、メモリチップM2から読み出され、メモリチップM0およびM1を介して情報処理装置CPU_CHIPが受け取ったデータは、メモリチップM2へのリクエストに対応したメモリチップM2から読み出されたデータであることを確認でき、情報処理装置CPU_CHIPおよびメモリチップM0、M1、M2の直列接続によって、接続信号数を減少させながらも、情報処理装置CPU_CHIPは所望の処理を実行することができる。
次に、情報処理装置CPU_CHIPがデータ読み出しリクエストに続いてデータ書込みリクエストをメモリモジュールMEM0へ送信した場合のデータ転送について説明する。
情報処理装置CPU_CHIPがリクエスト信号RqMux0を通じて、ID値2、8バイトデータ読み出し命令RD8、バンクアドレスBK1、カラムアドレスCol15を多重化したリクエストReqRD8b1m0をメモリチップM0へ転送する。続いて、リクエスト信号RqMux0を通じて、ID値2、8バイトデータ書き込み命令WT8、バンクアドレスBK1、カラムアドレスCol31、及び8バイト分の書き込みデータを多重化したリクエストReqWT8b1m0をメモリチップM0へ転送する。
メモリチップM0は、情報処理装置CPU_CHIPからのリクエストReqRD8b1m0とリクエストReqWT8b1m0を順に、自身のリクエストキュー制御回路RqCTへ格納する。リクエストキュー制御回路RqCTはリクエストReqRD8b1m0に含まれるID値2と自身のIDレジスタの値2を比較し、一致しているため、リクエストReqRD8b1m0をメモリ回路MemVLへ送信する。
メモリ回路MemVLはリクエストReqRD8b1m0に含まれる8バイト読み出し命令RD8、バンクアドレスBK1、カラムアドレスCol31によって、メモリ回路MemVLのバンク1のセンスアンプに保持されているデータのなかで、カラムアドレス15を開始アドレスとした8バイト分のデータを読み出し、IDレジスタ値2を含めて、レスポンスキュー制御回路RsCTへレスポンスRsRD8b1m0として転送する。
レスポンスキュー制御回路RsCTは、レスポンス信号RsMux0を通じて、IDレジスタ値2および8バイトデータを含むレスポンスRsRD8b1m0を情報処理装置CPU_CHIPへ出力する。
リクエストReqRD8b1m0が処理されたことによって、リクエストキュー制御回路RqCTはリクエストReqWT8b1m0に含まれるID値2と自身のIDレジスタの値2を比較し、一致しているため、リクエストReqWT8b1m0をメモリ回路MemVLへ送信する。
メモリ回路MemVLはリクエストReqWT8b1m0に含まれる8バイト書き込み命令WT8、バンクアドレスBK1、カラムアドレスCol31によって、メモリ回路MemVLのバンク1のセンスアンプへカラムアドレス31を開始アドレスとした8バイト分のデータが書き込まれ、さらにメモリバンク1へ書き込まれる。
リクエストキュー制御回路RqCTとレスポンスキュー制御回路RsCTはそれぞれ独立に動作するため、、リクエストReqRD8b1m0に対応するレスポンスRsRD8b1m0が情報処理装置CPU_CHIPへ出力されている最中でもリクエストReqWT8b1m0の書込み動作を実行することができる。
以上説明したように、リクエストインターフェース回路ReqIFとレスポンスインターフェース回路は独立に動作可能なため、データの読み出し動作と書込み動作を同時に実行でき、データ転送性能を向上させることができる。上記では、メモリチップM0でのデータの読み出し及び書込みについて説明したが、他のメモリチップM1及びM2においても同様の動作が実行できることは言うまでもない。さらに、それぞれののメモリチップにおいてリクエストインターフェース回路ReqIFとレスポンスインターフェース回路は独立に動作可能なため、異なるメモリチップへのデータ読み出し及び書込みリクエストが生じた場合でも、それぞれのリクエストを独立に並列に処理でき、データ転送性能を向上できることは言うまでもない。
次に、情報処理装置CPU_CHIPからメモリチップM1へ読み出しリクエストが生じ、その後、連続してメモリチップM0へ読み出しリクエストが生じた場合のデータ転送について説明する。情報処理装置CPU_CHIPは、最初にリクエスト信号RqMux0を通じて、ID値1、4バイトデータ読み出し命令NRD4、アドレスAdd63を多重化したリクエストReqNRD4m1をメモリチップM0へ転送する。
次に、リクエスト信号RqMux0を通じて、ID値2、4バイト読み出し命令RD4、バンクアドレスBK3、カラムアドレスCol15を多重化したリクエストReqRD4b3m0をメモリチップM0へ転送する。メモリチップM0は、情報処理装置CPU_CHIPからのリクエストReqNRD4m1とリクエストReqRD4b3m0を順に、自身のリクエストキュー制御回路RqCTへ格納する。
メモリチップM0のリクエストキュー制御回路RqCTは、リクエストReqNRD4m1に含まれるID値1と自身のIDレジスタの値2を比較し、一致していないため、リクエストReqNRD4m1をリクエスト信号RqMux1からメモリチップM1へ転送する。
次に、メモリチップM0のリクエストキュー制御回路RqCTは、リクエストReqRD4b3m0に含まれるID値2と自身のIDレジスタの値2を比較し、一致するため、リクエストReqRD4b3m0はメモリ回路MemVLへ転送される。リクエストReqRD4b3m0によって、約15ns後にメモリ回路MemVLから4バイトのデータが読み出され、レスポンスキュー制御回路RsCTへレスポンスResRD4b3m0として入力される。レスポンスキュー制御回路RsCTは、レスポンス信号RsMux0を通じて、レスポンスResRD4b3m0を情報処理装置CPU_CHIPへ送信する。
メモリチップM0が、リクエストReqRD4b3m0に対する読み出し動作を行っているのと平行に、メモリチップM1のリクエストキュー制御回路RqCTは、リクエストReqNRD4m1に含まれるID値1と自身のIDレジスタの値1を比較し、一致するため、リクエストReqNRD4m1はメモリ回路MemNV1へ転送される。リクエストReqNRD4m1によって約80ns後にメモリ回路MemNV1から4バイトのデータが読み出され、レスポンスキュー制御回路RsCTへレスポンスResNRD4m1として入力される。メモリチップM1のレスポンスキュー制御回路RsCTは、レスポンスResNRD4m1をレスポンス信号RsMux1よりメモリチップM0へ送信し、さらに、レスポンス信号RsMux0より情報処理装置CPU_CHIPへ送信する。
情報処理装置CPU_CHIPが、メモリチップM1に対するリクエストReqNRD4m1をメモリモジュールMEM0へ発行してからメモリチップM1のリクエストキュー制御回路RqCTへリクエストがReqNRD4m1完全に格納されるまでの時間は10ns程度、リクエストキュー制御回路RqCTがメモリ回路MemNV1へリクエストReqNRD4m1を送信する時間は1ns程度、メモリ回路MemNV1から4バイトのデータが読み出され、レスポンスキュー制御回路RsCTへレスポンスResNRD4m1として入力されまでの時間が80ns程度、レスポンスResNRD4m1が情報処理装置CPU_CHIPへ到達するまでの時間が10ns程度である。したがって、情報処理装置CPU_CHIPが、メモリチップM1に対するリクエストReqNRD4m1を発行してからレスポンスをResNRD4m1受け取るまでの時間は、101ns程度となる。
情報処理装置CPU_CHIPが、メモリチップM0に対するリクエストReqRD4b3m0をメモリモジュールMEM0へ発行してからメモリチップM0のリクエストキュー制御回路RqCTへリクエストReqRD4b3m0が完全に格納されるまでの時間は5ns程度、リクエストキュー制御回路RqCTがメモリ回路MemVLへリクエストReqRD4b3m0を送信する時間は1ns程度、メモリ回路MemVLから4バイトのデータが読み出され、レスポンスキュー制御回路RsCTへレスポンスResRD4b3m0として入力されまでの時間が15ns程度、レスポンスResRD4b3mが情報処理装置CPU_CHIPへ到達するまでの時間が5ns程度である。したがって、情報処理装置CPU_CHIPが、メモリチップM0に対するリクエストReqRD4b3m0を発行してからレスポンスResRD4b3m0を受け取るまでの時間は、26ns程度となる。
このように、リクエストの入力順序に関わらず、早く読み出せるデータは、読み出しが遅いデータを待つことなく、すぐに読み出すことができるため、高速化が可能となる。さらに、リクエストへIDを付加することで、確実に要求先へリクエストが転送され、また、レスポンスへIDを付加することで、リクエストの入力順序と、読み出しデータの順番が異なった場合でも、情報処理装置CPU_CHIPは転送元のメモリチップを知ることができるため、情報処理装置CPU_CHIPおよびメモリチップの直列接続によって、接続信号数を少なくしながらも、情報処理装置CPU_CHIPは所望の処理を実行することができる。
本実施例ではデータ読み出しを中心に説明したが、データの書き込み動作においても同様の動作を行うことができるのは言うまでもない。また、本実施例では、メモリチップM0とM1とのデータ転送動作を説明したが、その他のメモリチップの場合についても同様のデータ転送動作を行うことは言うまでもない。
<クロック制御>
次に、メモリモジュールMEMに関するクロック制御について説明する。メモリモジュールMEMが特に限定しないが携帯機器に利用された場合、常にメモリモジュールMEM内のメモリチップM0、M1及びM2の全てが同時に動作するわけではない。そこで、携帯機器の低電力化を図るために、本メモリモジュールMEMはデータ転送に必要な場合に、必要な周波数でクロックを発生したり、データ転送が生じない場合はクロックを停止したりできる。
メモリチップM0から出力するレスポンスクロック信号RsCk0の周波数制御について説明する。先ず、メモリチップM0から出力するレスポンスクロック信号RsCk0のクロック周波数を、特に限定しないが2分の1にする場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM0のID値2とレスポンスクロック分周コマンド2を入力する。
メモリチップM0はクエストキュー制御回路RqCTを介して、レスポンスクロック分周コマンド2をメモリチップM0のクロック分周回路Div2へ送信すると、レスポンスクロック信号RsCk0の周波数は2分の1となる。クロックの動作周波数を低くする際は、ノイズによる誤動作を防ぐために徐々に周波数を落とし、最後に所望の周波数で動作させることが良い。
次に、メモリチップM0から出力するレスポンスクロック信号RsCk0を停止する場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM0のID値2とレスポンスクロック停止コマンドを入力する。メモリチップM0はリクエストキュー制御回路RqCTを介して、レスポンスクロック停止コマンドをメモリチップM0内のクロック分周回路Div2へ送信すると、レスポンスクロック信号RsCk0は停止する。クロックを停止する際は、ノイズによる誤動作を防ぐために徐々に周波数を落とし、最後に停止させることが良い。
次に、停止しているレスポンスクロック信号RsCk0を再度動作させる場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM0のID値2とレスポンスクロック再開コマンドを入力する。メモリチップM0はクエストキュー制御回路RqCTを介して、レスポンスクロック再開コマンドをメモリチップM0内のクロック分周回路Div2へ送信すると、停止しているレスポンスクロック信号RsCk0は再度、動作を開始する。クロックを再動作させる際は、ノイズによる誤動作を防ぐために、徐々に周波数を上げ、最後に所望の周波数で動作させることが良い。
メモリチップM1から出力するレスポンスクロック信号RsCk1の周波数制御について説明する。先ず、メモリチップM1から出力するレスポンスクロック信号RsCk1のクロック周波数を、特に限定しないが4分の1にする場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM1のID値1とレスポンスクロック分周コマンド4を入力すると、メモリチップM0を通じて、メモリチップM1へID値1とレスポンスクロック分周コマンド4が送信される。メモリチップM1がクエストキュー制御回路RqCTを介して、レスポンスクロック分周コマンド4をメモリチップM1内のクロック分周回路Div2へ送信すると、レスポンスクロック信号RsCk1の周波数は4分の1となる。クロックの動作周波数を低くする際は、ノイズによる誤動作を防ぐために徐々に周波数を落とし、最後に所望の周波数で動作させることが良い。
次に、メモリチップM1から出力するレスポンスクロック信号RsCk1を停止する場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM1のID値1とレスポンスクロック停止コマンドを入力すると、メモリチップM0を通じて、メモリチップM1へID値1とレスポンスクロック分周コマンド4が送信される。メモリチップM1がクエストキュー制御回路RqCTを介して、レスポンスクロック停止コマンドをメモリチップM1内のクロック分周回路Div2へ送信すると、レスポンスクロック信号RsCk1は停止する。クロックを停止する際は、ノイズによる誤動作を防ぐために徐々に周波数を落とし、最後に停止させることが良い。
次に、停止しているレスポンスクロック信号RsCk1を再度動作させる場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM1のID値1とレスポンスクロック再開コマンドを入力すると。メモリチップM0を通じて、メモリチップM1へID値1とレスポンスクロック再開コマンドが送信される。メモリチップM1が、クエストキュー制御回路RqCTを介して、レスポンスクロック再開コマンドをメモリチップM1内のクロック分周回路Div2へ送信すると、停止しているレスポンスクロック信号RsCk1は再度動作を開始する。クロックを再動作させる際は、ノイズによる誤動作を防ぐために、徐々に周波数を上げ、最後に所望の周波数で動作させることが良い。
メモリチップM2から出力するレスポンスクロック信号RsCk2の周波数制御について説明する。先ず、メモリチップM2から出力するレスポンスクロック信号RsCk2のクロック周波数を、特に限定しないが8分の1にする場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM2のID値3とレスポンスクロック分周コマンド8を入力すると、メモリチップM0及びM1を通じて、メモリチップM2へID値3とレスポンスクロック分周コマンド8が送信される。メモリチップM2が自身のクエストキュー制御回路RqCTを介して、レスポンスクロック分周コマンド8をメモリチップM2内のクロック分周回路Div2へ送信すると、レスポンスクロック信号RsCk2の周波数は8分の1となる。クロックの動作周波数を低くする際は、ノイズによる誤動作を防ぐために徐々に周波数を落とし、最後に所望の周波数で動作させることが良い。
次に、メモリチップM2から出力するレスポンスクロック信号RsCk2を停止する場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM2のID値3とレスポンスクロック停止コマンドを入力すると、メモリチップM0及びM1を通じて、メモリチップM2へID値3とレスポンスクロック停止コマンドが送信される。メモリチップM2が自身のクエストキュー制御回路RqCTを介して、レスポンスクロック停止コマンドをメモリチップM2内のクロック分周回路Div2へ送信すると、レスポンスクロック信号RsCk2は停止する。クロックを停止する際は、ノイズによる誤動作を防ぐために徐々に周波数を落とし、最後に停止させることが良い。
次に、停止しているレスポンスクロック信号RsCk2を再度動作させる場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM2のID値3とレスポンスクロック再開コマンドを入力すると。メモリチップM0及びM1を通じて、メモリチップM2へID値3とレスポンスクロック再開コマンドが送信される。メモリチップM2が、クエストキュー制御回路RqCTを介して、レスポンスクロック再開コマンドをメモリチップM2のクロック分周回路Div2へ送信すると、停止しているレスポンスクロック信号RsCk2は再度、動作を開始する。クロックを再動作させる際は、ノイズによる誤動作を防ぐために、徐々に周波数を上げ、最後に所望の周波数で動作させることが良い。
メモリチップM0から出力するリクエストクロック信号RsCk1の周波数制御について説明する。先ず、メモリチップM0から出力するリクエストクロック信号RqCk1のクロック周波数を、特に限定しないが2分の1にする場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM0のID値2とリクエストクロック分周コマンド2を入力する。メモリチップM0が、リクエストキュー制御回路RqCTを介して、リクエストクロック分周コマンド2をメモリチップM0のクロック分周回路Div1へ送信すると、このクロック分周回路Div1はリクエストクロック信号RqCk0のクロック周波数の2分の1の周波数を持つクロックを発生させ、リクエストクロック信号RqCk1から出力する。リクエストクロック信号RqCk1は、メモリチップM1へ入力し、メモリチップM1のクロックドライバDrv2およびクロック分周回路Div2を介してレスポンスクロック信号RsCk1として出力する。クロックの動作周波数を低くする際は、ノイズによる誤動作を防ぐために徐々に周波数を落とし、最後に所望の周波数で動作させることが良い。
次に、メモリチップM0から出力するリクエストクロック信号RqCk1を停止する場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM0のID値2とリクエストクロック停止コマンドを入力する。メモリチップM0が、リクエストキュー制御回路RqCTを介して、リクエストクロック停止コマンドをメモリチップM0のクロック分周回路Div1へ送信すると、このクロック分周回路Div1はリクエストクロック信号RqCk1を停止する。リクエストクロック信号RqCk1は、メモリチップM1へ入力し、メモリチップM1のクロックドライバDrv2およびクロック分周回路Div2を介してレスポンスクロック信号RsCk1として出力するためレスポンスクロック信号RsCk1も停止する。クロックを停止する際は、ノイズによる誤動作を防ぐために徐々に周波数を落とし、最後に停止させることが良い。
次に、停止しているリクエストクロック信号RsCk1を再度動作させる場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM0のID値2とリクエストクロック再開コマンドを入力する。メモリチップM0が、リクエストキュー制御回路RqCTを介して、リクエストクロック再開コマンドをメモリチップM0のクロック分周回路Div1へ送信すると、このクロック分周回路Div1は停止しているリクエストクロック信号RqCk1を再度、動作させる。リクエストクロック信号RqCk1は、メモリチップM1へ入力し、メモリチップM1のクロックドライバDrv2およびクロック分周回路Div2を介してレスポンスクロック信号RsCk1として出力するため、レスポンスクロック信号RsCk1も再度、動作する。クロックを再動作させる際は、ノイズによる誤動作を防ぐために、徐々に周波数を上げ、最後に所望の周波数で動作させることが良い。
メモリチップM1から出力するリクエストクロック信号RsCk2の周波数制御について説明する。先ず、メモリチップM1から出力するリクエストクロック信号RqCk2のクロック周波数を、特に限定しないが4分の1にする場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM1のID値1とリクエストクロック分周コマンド4を入力すると、メモリチップM0を通じてID値1とリクエストクロック分周コマンド4がメモリチップM1へ送信される。メモリチップM1が、リクエストキュー制御回路RqCTを介して、リクエストクロック分周コマンド4を自身のクロック分周回路Div1へ送信すると、このクロック分周回路Div1はリクエストクロック信号RqCk0のクロック周波数の4分の1の周波数を持つクロックを発生させ、リクエストクロック信号RqCk2から出力する。リクエストクロック信号RqCk2は、メモリチップM2へ入力し、メモリチップM2のクロックドライバDrv2およびクロック分周回路Div2を介してレスポンスクロック信号RsCk2として出力する。クロックの動作周波数を低くする際は、ノイズによる誤動作を防ぐために徐々に周波数を落とし、最後に所望の周波数で動作させることが良い。
次に、メモリチップM1から出力するリクエストクロック信号RqCk2を停止する場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM1のID値1とリクエストクロック停止コマンドを入力するとメモリチップM0を通じてID値1とリクエストクロック停止コマンドがメモリチップM1へ送信される。メモリチップM1は、自身のリクエストキュー制御回路RqCTを介して、リクエストクロック停止コマンドを自身のクロック分周回路Div1へ送信すると、このクロック分周回路Div1はリクエストクロック信号RqCk2を停止する。リクエストクロック信号RqCk2は、メモリチップM2へ入力し、メモリチップM2のクロックドライバDrv2およびクロック分周回路Div2を介してレスポンスクロック信号RsCk2として出力するためレスポンスクロック信号RsCk2も停止する。
クロックを停止する際は、ノイズによる誤動作を防ぐために徐々に周波数を落とし、最後に停止させることが良い。
次に、停止しているリクエストクロック信号RsCk2を再度動作させる場合について説明する。情報処理装置CPU_CHIPが、リクエスト信号RqMux0よりメモリチップM1のID値1とリクエストクロック再開コマンドを入力すると、メモリチップM0を通じてID値1とリクエストクロック再開コマンドがメモリチップM1へ送信される。メモリチップM1が、自身のリクエストキュー制御回路RqCTを介して、リクエストクロック再開コマンドを自身のクロック分周回路Div1へ送信すると、このクロック分周回路Div1は停止しているリクエストクロック信号RqCk2を再度、動作させる。リクエストクロック信号RqCk2は、メモリチップM2へ入力し、メモリチップM2のクロックドライバDrv2およびクロック分周回路Div2を介してレスポンスクロック信号RsCk1として出力するため、レスポンスクロック信号RsCk2も再度、動作する。クロックを再動作させる際は、ノイズによる誤動作を防ぐために、徐々に周波数を上げ、最後に所望の周波数で動作させることが良い。
<実施例1の効果>
以下、上述の実施の形態について、構成とその効果についてまとめる。
(1)電源投入直後に、直列接続の確認動作を行うことで、確実にメモリ同士が接続されていることが確認できる。さらに、ブートデバイスおよび、最端のメモリチップを明示し、自動的に各メモリへのID付けが行われることで、容易に、必要な分だけメモリチップを接続し、メモリ容量を拡張することができる。
(2)リクエストへIDを付加することで、情報処理装置CPU_CHIPから各メモリチップM0、M1およびM2へリクエストが確実に転送される。また、情報処理装置CPU_CHIPへのレスポンスへIDを付加することで、各メモリから正しく正しくデータ転送が行えたことを確認でき、情報処理装置CPU_CHIPおよびメモリチップM0、M1、M2の直列接続によって、接続信号数を減少させながらも、情報処理装置CPU_CHIPは所望の処理を実行することができる。
(3)リクエストインターフェース回路ReqIFとレスポンスインターフェース回路は独立に動作可能なため、データの読み出し動作と書き込み動作を同時に実行でき、データ転送性能を向上させることができる。
(4)リクエストの入力順序に関わらず、早く読み出せるデータは、読み出しが遅いデータを待つことなく、すぐに読み出すことができるため、高速化が可能となる。さらに、リクエストへIDを付加することで、確実に要求先へリクエストが転送され、また、レスポンスへIDを付加することで、リクエストの入力順序と、読み出しデータの順番が異なった場合でも、情報処理装置CPU_CHIPは転送元のメモリチップを知ることができる。
(5)各メモリチップM0、M1およびM2のクロックを必要に応じて、低速動作させたり、停止させたり、復帰させたりできるため、低電力化を図ることができる。
(6)メモリチップM2からの読み出し時は、エラー検出と訂正を行い、書きこみ時は、書きこみが正しく行われなかった不良アドレスに対して代替処理を行うため、信頼性を保つことができる。
また、本実施例では、メモリモジュールMEM0には1つの揮発性メモリ、1つのNOR型フラッシュメモリ、1つのNAND型フラッシュメモリがが含まれているを例について説明しているが、メモリモジュールMEM0に複数個の揮発性メモリ及び複数個のNOR型フラッシュメモリ及びNAND型フラッシュメモリが含まれる場合であっても本発明を実現できるのは言うまでもない。
<メモリマップの説明>
図2は、情報処理装置CPU_CHIPが管理するメモリモジュールMEM0に対するメモリマップの一例を示したものである。本実施の形態例では、特に限定されないが、メモリチップM0の記憶領域は1Gbit、メモリチップM1の記録領域は1Git、メモリチップM2の記憶領域は4Gbit+128Mbit(128Mbitは代替領域)であるメモリモジュールを例に代表的なメモリマップを説明する。
特に限定しないが、メモリチップM0は揮発性メモリでダイナミックランダムアクセスメモリセルを利用したダイナミックランダムアクセスメモリであり、読み出し時間が15ns程度である。特に限定しないが、メモリチップM1は不揮発性メモリでNOR型フラッシュメモリセルを利用したNOR型フラッシュメモリであり、読み出し時間が80ns程度である。特に限定しないが、メモリチップM2は不揮発性メモリでNAND型フラッシュメモリセルを利用したNAND型フラッシュメモリであり、読み出し時間が25usec程度である。特に限定しないが、メモリチップM1は、ブートデバイスID格納領域BotID-AREA、最終端デバイスID格納領域EndID-AREA、初期プログラム領域InitPR-AREA、プログラム格納領域OSAP-AREAに分かれている。
ブートデバイスID格納領域BotID-AREAには、ブートデバイスのID情報が格納される。最終端デバイスID格納領域EndID-AREAには、直列接続されているメモリモジュールMEM0に関する最終端メモリデバイスID情報が格納される。初期プログラム領域InitPR-AREAには、特に限定しないが、ブートプログラムが格納される。プログラム格納領域OSAP-AREAには、特に限定しないが、オペレイティングシステムやアプリケーションプログラムなどが格納される。特に限定しないが、メモリチップM0はコピー領域COPY-AREA、ワーク領域WORK-AREAに分かれている。ワーク領域WORK-AREAはプログラム実行時のワークメモリとして、コピー領域COPY-AREAはメモリチップM1及びM2からのプログラムやデータをコピーするためのメモリとして利用される。特に限定しないが、メモリチップM2は、データ領域DATA-AREA、代替領域REP-AREAに分かれている。データ領域DATA-AREAには、特に限定しないが、音楽データ、音声データ、動画データ、静止画データなどのデータが格納される。
また、FLASHは書き換えを繰り返すことによって、信頼性が低下し、書き込み時に書いたデータが、読み出し時には異なるデータとなったり、書き換え時にデータが書き込まれなかったりすることが稀にある。代替領域REP-AREAは、このように不良となったデータを新たな領域へ置き換えるために設けられている。代替領域REP-AREAの大きさは、特に限定しないがメモリチップM2が保証する信頼性が確保できるように決めると良い。
<電源投入直後の動作>
電源投入直後のメモリチップM1から情報処理装置CPU_CHIPへのデータ転送について説明する。電源投入後、情報処理装置CPU_CHIPは自身の持つブートデバイスIDレジスタBotIDを1へ設定する。メモリチップM1はブートデバイスID格納領域BotID-AREAからブートデバイスのID情報1を読み出し、自身のIDレジスタへ1を設定する。これにより、ブートデバイスがメモリチップM1に確定する。
次に、情報処理装置CPU_CHIPはブートデバイスであるメモリチップM1に格納されているブートプログラム及び最終端メモリデバイスID情報を読み出すため、メモリチップM1のID番号1と読み出し命令をメモリモジュールMEM0へ送信する。メモリモジュールMEM0は、ID番号1と読み出し命令に従って、メモリチップM1の初期プログラム領域InitPR-AREAからブートプログラムを読み出し、最終端デバイスID格納領域EndID-AREAから最終端メモリデバイスID情報を読み出し、情報処理装置CPU_CHIPへ送信する。このように、電源投入直後に、ブートデバイスのIDを初期設定することで、メモリチップの直列接続によって実現されるメモリモジュールMEM0内のブートデバイスを特定することができ、情報処理装置CPU_CHIPとメモリモジュールMEM0間の接続信号数を大幅に少なくした上で、情報処理装置CPU_CHIPは、すばやく確実にブートデバイスよりブートプログラムおよび最終端メモリデバイスIDを読み出し、情報処理装置CPU_CHIP及びメモリモジュールMEM0を立ち上げることができる。
<データコピー動作の説明>
メモリチップM0のデータ読み出し時間は、メモリチップM2の読み出し時間と比較し、大幅に短い。そこで、前もって必要な画像データをメモリチップM2からメモリチップM0へ転送すれば、情報処理装置CPU_CHIPにて高速に画像処理を行うことができる。特に限定しないが、メモリチップM0、M1、M2のそれぞれのIDレジスタ値が2、1及び3に設定された場合の、メモリチップM2からのメモリチップM0のへのデータ転送について説明する。
情報処理装置CPU_CHIPはメモリチップM2のデータ領域DATA-AREAからデータを読み出すため、メモリチップM2のID番号3と1ページ(512Byteのデータ+16ByteのECCコード)データ読み出し命令をメモリモジュールMEM0へ送信する。メモリモジュールMEM0は、ID番号3と1ページデータ読み出し命令に従って、メモリチップM2のデータ領域DATA-AREAから1ページ分のデータを読み出し、ID番号3を付加し、情報処理装置CPU_CHIPへ送信する。
情報処理装置CPU_CHIPでは、メモリチップM2から送信された1ページ分のデータに対しエラー検出を行う。エラーがなければ、1ページ分のデータをメモリチップM0のコピー領域COPY-AREAへデータを転送するため、情報処理装置CPU_CHIPはメモリチップM0のID番号2と1ページデータ読み出し命令をメモリモジュールMEM0へ送信する。エラーがあれば修正を行った後、1ページ分のデータをメモリチップM0のコピー領域COPY-AREAへデータを転送するため、情報処理装置CPU_CHIPはメモリチップM0のID番号2と1ページデータ読み出し命令をメモリモジュールMEM0へ送信する。メモリモジュールMEM0は、ID番号2と1ページデータ読み出し命令に従って、メモリチップM0のコピー領域COPY-AREAデータ領域へ1ページ分のデータを書き込む。
次に、情報処理装置CPU_CHIPからメモリチップM0へ高速に画像データが書き込まれ、必要に応じてメモリチップM2へこの画像データを保存する際の、メモリチップM0からのメモリチップM2へのデータ転送について説明する。情報処理装置CPU_CHIPはメモリチップM0のコピー領域COPY-AREAからデータを読み出すため、メモリチップM0のID番号2と1ページ(512Byte)データ読み出し命令をメモリモジュールMEM0へ送信する。メモリモジュールMEM0は、ID番号0と1ページデータ読み出し命令に従って、メモリチップM0のコピー領域COPY-AREAから1ページ分のデータを読み出し、ID番号2を付加し、情報処理装置CPU_CHIPへ送信する。情報処理装置CPU_CHIPは、メモリチップM0から送信された1ページ分のデータをメモリチップM2のデータ領域DATA-AREAへデータを転送するため、メモリチップM2のID番号2と1ページデータ書き込み命令をメモリモジュールMEM0へ送信する。
メモリモジュールMEM0が、メモリチップM0及びM1を通じてメモリチップM2へID番号2と1ページデータ書込み命を送信すると、メモリチップM2は自身のデータ領域DATA-AREAへ1ページ分のデータを書き込む。メモリチップM2はデータの書き込みが成功したかどうかをチェックし、成功すれば書き込み処理を終了する。書き込みが失敗した時には、メモリチップM2は、ID番号2と書込エラー情報を送信し、メモリチップM1及びメモリチップM0を介して、情報処理装置CPU_CHIPへ書込みエラーを通達する。情報処理装置CPU_CHIPは、ID番号2と書込エラー情報を受け取ると、メモリチップM2にあらかじめ用意されている代替領域REP-AREAの新たなアドレスに対して書き込みを行うために、メモリチップM2のID番号2と1ページデータ書き込み命令をメモリモジュールMEM0へ送信する。メモリモジュールMEM0がメモリチップM0及びM1を通じてID番号2と1ページデータ書込み命令をメモリチップM2へ送信すると、メモリチップM2は自身の代替領域REP-AREAへ1ページ分のデータを書き込む。また、情報処理装置CPU_CHIPは、代替え処理を行った際は、不良アドレスと、不良アドレスに対して、どのアドレスに代替え処理を行ったかというアドレス情報を保持し管理する。
以上説明したように、メモリチップM2の一部のデータをコピーできる領域をメモリチップ内に確保し、あらかじめメモリチップM2からメモリチップM0へデータを転送しておくことで、メモリチップM0と同等の速度でメモリチップM2のデータを読み出すことができ、情報処理装置CPU_CHIPでの高速処理が可能となる。また、メモリチップM2へデータを書く際は、いったんデータをメモリチップM0へ書き込み、必要に応じてメモリチップM2へ書き戻すことができるため、データの書き込みも高速化することができる。さらに、メモリチップM2からの読み出し時は、エラー検出と訂正を行い、書きこみ時は、書きこみが正しく行われなかった不良アドレスに対して代替処理を行うため、高信頼性を保つことができる。
<電源投入時の初期シーケンス>
図3は、情報処理装置CPU_CHIPとメモリモジュールMEM0とから構成される情報システム装置の電源投入時の初期シーケンスを示す。T1の期間(PwON)で情報処理装置CPU_CHIPと、メモリモジュールMEM0内のメモリチップM0、M1及びM2へ電源投入を行い、T2の期間(RESET)でリセットを行う。リセットの方法は特に限定しないが、それぞれの内蔵回路で自動的にリセットを行う方法でも、あるいは、外部にリセット端子を持ち、このリセット信号によってリセット動作を行うこととしても良い。T2のリセット期間には、情報処理装置CPU_CHIPはブートデバイスIDレジスタBotIDを1へ、最端デバイスIDレジスタEndIDを0へ設定する。メモリチップM0、M1、M2は各々が持っているIDレジスタの値を0へ、ID有効ビットをLowへ初期設定する。また、メモリチップM0、M1、M2は、おのおのが持っているレスポンスキューの優先順位、優先順位を変えるレスポンス実行回数値の初期設定を行う。さらに、メモリチップM0、M1、M2は、各々の動作クロック周波数の分周比の初期設定を行う。
リセットが解除されたT3の期間(BootIDSet)でブートデバイスがブートデバイスIDをIDレジスタへセットする。メモリチップM0、M1およびM2は、ブートデバイス認識信号Bsigが電源に接続されているので、自分自身がブートデバイスではないことを認識し、それぞれのIDレジスタの値を0のままにする。メモリチップM1のブートデバイス認識信号Bsigが接地gndされているので、自分自身がブートデバイスであることを認識し、自らのメモリ回路MemNV1が保持しているブートデバイスID値1を読み出し、IDレジスタへ設定し、ID有効ビットをHighにする。T3の期間が終了した後のT4の期間(LinkEn)では、各メモリチップM0,M1およびM2の信号の接続確認を行う。メモリチップM2は、直列接続しているメモリチップの最も終端のメモリチップであることを認識し、リクエストイネーブル信号RqEn2をHighにする。
次に、メモリチップM1はリクエストイネーブル信号RqEn2がHighになったことを確認し、レスポンスイネーブル信号RsEn2及びリクエストイネーブル信号RqEn1をHighにする。次に、メモリチップM0はリクエストイネーブル信号RqEn1がHighになったことを確認し、レスポンスイネーブル信号RsEn1及びリクエストイネーブル信号RqEn0をHighにする。最後に、情報処理装置CPU_CHIPは、リクエストイネーブル信号RqEn0がHighになったことを確認し、各メモリチップの信号接続が確認されたことを知り、レスポンスイネーブル信号RsEn0をHighにする。T4の期間が終了した後のT5の期間(BootRD)では、情報処理装置CPU_CHIPがメモリチップM1よりブートデータを読み出す。
情報処理装置CPU_CHIPは、リクエスト信号RqMux0を通じて、メモリチップM1のID値1、読みだし命令、アドレスを多重化したリクエストNRDm1をクロック信号RqCK0に同期させ、メモリチップM0へ転送する。メモリチップM0のID有効ビットがLowのため、メモリチップM0はリクエスト信号RqMux1yよりリクエストReqNRDm1をクロック信号RqCK1に同期させ、をメモリチップM1へ転送する。メモリチップM1は、メモリチップM0からのリクエストリクエストReqNRDm1を、自身のリクエストキュー制御回路RqCTへ格納する。メモリチップM1のID有効ビットがHighのため、リクエストReqNRDm1に含まれるID値1と自身のIDレジスタの値1を比較する。比較結果は一致しているため、リクエストReqNRDm1をメモリ回路MemNV1へ転送する。リクエストReqNRDm1によってメモリ回路MemNV1からブートデータと最終端デバイスID番号3が読み出され、IDレジスタ値1とともに、レスポンスResNRDm1としてレスポンスキュー制御回路RsCTへ転送される。メモリチップM1のレスポンスキュー制御回路RsCTはレスポンス信号RqMux1より、レスポンスResNRDm1をメモリチップM0へ転送する。最後に、メモリチップM0のレスポンスキュー制御回路RsCTはレスポンス信号RqMux0よりレスポンスResNRDm1を情報処理装置CPU_CHIPへ転送する。情報処理装置CPU_CHIPは、レスポンスResNRDm1を受け取り、最終端デバイスID値3をメモリ制御回路CON内の最終端デバイスIDレジスタENDIDへ保存する。次に、受け取ったブートプログラムによって自らを立ち上げる。T5の期間が終了した後のT6の期間(InitID)では、ブートコードに従い、情報処理装置CPU_CHIPが各メモリチップへID番号を設定する。
情報処理装置CPU_CHIPは、先ず、リクエスト信号RqMux0を通じて、ID値2とID設定命令をメモリチップM0へ転送する。メモリチップM0では、ID有効ビットがLowにより、まだID番号付けが行われていないため、ID番号2とID設定命令によってIDレジスタへID番号2を設定し、ID有効ビットをHighにする。ID有効ビットがHighとなることで、ID番号付けが完了したことを示す。メモリチップM0は、ID番号付けが完了したため、ID値2とID番号付け完了情報をレスポンス信号RsMux0を通じて情報処理装置CPU_CHIPへ知らせる。
情報処理装置CPU_CHIPはメモリチップM0のID番号付けが完了したことを知ると、次にリクエスト信号RqMux0よりID番号3とID設定命令をメモリチップM0へ転送する。メモリチップM0は自身のID番号2とID番号3とを比較し、不一致のため、ID番号3とID設定命令をメモリチップM1へ転送する。メモリチップM1dではすでにID番号付けがなされているいるため、自身のID番号1とID番号3とを比較し、不一致のため、ID番号3とID設定命令をリクエスト信号RqMux2より、メモリチップM2へ転送する。
メモリチップM2では、まだID番号付けが行われていないため、メモリチップM2は、ID番号3とID設定命令によってIDレジスタへID番号3を設定し、ID有効ビットをHighにする。ID有効ビットがHighとなることで、ID番号付けが完了したことを示す。メモリチップM2は、ID番号付けが完了したため、ID値3とID番号付け完了情報を、メモリチップM1及びメモリチップM0を介して、情報処理装置CPU_CHIPへ送信する。情報処理装置CPU_CHIPは、送信されたID値3とメモリ制御回路CON内の最終端デバイスIDレジスタEndIDへ設定されている最終端デバイスID値3とを比較する。双方の値が一致することで、最終端のメモリチップまでID番号付けが行われたことを確認する。
T6の期間が終了した後のT7の期間(Idle)以降は、メモリモジュールMEM0はアイドル状態となり、情報処理装置CPU_CHPからのリクエストを待つ状態となる。
<メモリチップM0の説明>
図4は、メモリチップM0の構成図の一例である。図5はメモリチップM0へのリクエストが発生した際の、動作の一例を示すフローチャートである。図6はメモリチップM0のメモリ回路MemVLからのレスポンスが発生した際の、動作の一例を示すフローチャートである。図7はメモリチップM1からメモリチップM0へレスポンスが発生した際の、動作の一例を示すフローチャートである。以下で各回路ブロックの動作を説明する。
メモリチップM0は、リクエストインターフェース回路ReqIFと、レスポンスインターフェース回路ResIFと、初期化回路INIT、メモリ回路MemVLから構成されている。リクエストインターフェース回路ReqIFはリクエストクロック制御回路RqCkCおよび、リクエストキュー制御回路RqCTから構成される。リクエストクロック制御回路RqCkCはクロックドライバDrv1およびクロック分周回路Div1から構成される。リクエストキュー制御回路RqCTはリクエストキュー回路RqQI、リクエストキュー回路RqQXI、リクエストキュー回路RqQXO、IDレジスタ回路dstID、ID比較回路CPQから構成される。特に限定しないが、リクエストキュー回路RqQIは2つのリクエストキューから構成され、リクエストキュー回路RqQXIは1つのリクエストキューから構成され、リクエストキュー回路RqQXOは2つのリクエストキューから構成される。レスポンスインターフェース回路ResIFはレスポンスクロック制御回路RsCkCおよび、レスポンスキュー制御回路RsCTから構成される。レスポンスクロック制御回路RsCkCはクロックドライバDrv2およびクロック分周回路Div2から構成される。レスポンスキュー制御回路RsCTは、レスポンスキュー回路RsQo、レスポンスキュー回路RsQp、ステータスレジスタ回路STReg、レスポンススケジュール回路SCHから構成される。特に限定しないが、レスポンスキュー回路RsQoは4つのレスポンスキューから構成され、スポンスキュー回路RsQpは4つのレスポンスキューから構成される。
メモリ回路MemVLは、特に限定しないが、揮発性メモリであり、ダイナミックランダムアクセスメモリセルを利用したダイナミックランダムアクセスメモリである。初期化回路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値、命令、アドレス及び書き込みデータが多重化されメモリチップM0へ入力したリクエストを格納する。IDレジスタ回路dstIDは、メモリチップM0のID値およびID有効信号を格納する。ID比較回路CPQは、リクエストキュー回路RqQIに格納されているID値と、IDレジスタ回路dstIDに格納されているID値を比較する。
リクエストキュー回路RqQXI及びリクエストキュー回路RqQXOは、リクエストキュー回路RqQIから転送されたリクエストを格納する。レスポンスキュー回路RsQoは、メモリチップM0のメモリ回路MemVLから読み出されたデータ及びIDレジスタ回路dstIDから読み出されたID値を格納する。レスポンスキュー回路RsQpは、レスポンス信号RsMux1を通じて、入力されるID値、読み出しデータおよびエラー情報およびステータス情報を格納する。
ステータスレジスタ回路STRRegは、特に限定しないがレスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへレスポンスが格納されていることを示す未処理レスポンス情報などが格納される。レスポンススケジュール回路SCHは、ンスキュー回路RsQoへ格納されているレスポンスと、レスポンスキュー回路RsQpへ格納されているレスポンスとのレスポンス優先順位を決め、優先順位の高いレスポンスを、レスポンス信号RsMux0から出力するための調停を行う。レスポンス優先順位は、レスポンスキュー回路RsQoから出力されたレスポンスの回数と、レスポンスキュー回路RsQpから出力されたレスポンスの回数によってレスポンススケジュール回路SCHが動的に変化させる。
次に、本メモリチップM0の動作を説明する。まず、電源投入時の動作について説明する。メモリチップM0へ電源が投入されると初期化回路INITはメモリチップM0の初期化を行う。先ず、IDレジスタ回路dstIDの持つIDレジスタの値を0へ、ID有効ビットをLowへ初期設定する。次にレスポンススケジュール回路SCHが持つレスポンスキュー回路RsQoに入力するレスポンスの優先順位を1へ、レスポンスキュー回路RsQpに入力するメモリチップM1からのレスポンスの優先順位を2へ、メモリチップM2からのレスポンスの優先順位を3へ設定する。初期化回路INITによる初期設定が終了すると、メモリチップM0は、情報処理装置CPU_CHIPとメモリチップM1との間で通信できることを確認する通信確認動作を行う。メモリチップM0はリクエストイネーブル信号RqEn1がHighになったことを確認し、レスポンスイネーブル信号RsEn1及びリクエストイネーブル信号RqEn0をHighにする。
次に、情報処理装置CPU_CHIPは、リクエストイネーブル信号RqEn0がHighになったことを確認し、各メモリチップの信号接続が確認されたことを知り、レスポンスイネーブル信号RsEn0をHighにする。通信確認動作が終了すると、情報処理装置CPU_CHIPよりリクエスト信号RqMux0を通じて、ID番号2とID設定命令がメモリチップM0へ転送される。。メモリチップM0では、ID有効ビットがLowのため、まだID番号付けが行われていないと判断し、IDレジスタへID番号2を、ID有効ビットをHighに設定し、ID番号付けを完了する。次に、メモリチップM0はレスポンス信号RsMux0を通じて、メモリチップM0のID値2およびID番号付け完了情報を出力し、情報処理装置CPU_CHIPへ、メモリチップM0のID番号付けが完了したことを通達する。
次に、電源投入直後の動作が終了した後に、情報処理装置CPU_CHIPからリクエストがメモリチップM0へ生じた場合の動作を説明する。メモリチップM0のリクエストキュー回路RqQIは、特に限定しないが2つのリクエストキューRqQI-0及びRqQI-1から構成されている。また、メモリチップM0は、リクエストキューRqQI-0及びRqQI-1へリクエストがエントリされていないため、リクエストイネーブル信号RqEn0をHighにし、リクエストが受け付け可能であることを情報処理装置CPU_CHIPへ知らせる。メモリチップM0のレスポンスキュー回路RqQoは、特に限定しないが2つのレスポンスキューRqQo-0及びRqQo-1から構成されている。メモリチップM0のレスポンスキュー回路RqQpは、特に限定しないが2つのレスポンスキューRqQp-0及びRqQp-1から構成されている。情報処理装置CPU_CHIPは、レスポンスイネーブル信号RsEn0をHighにし、レスポンスが受け付け可能であることをメモリチップM0へ知らせる。情報処理装置CPU_CHIPは、リクエスト信号RqMux0を通じて、ID値2、バンクアクティブ命令BA、バンクアドレスBK1、ロウアドレスRowを多重化したリクエストReqBAb0m0をクロック信号RqCk0に同期させ、メモリチップM0へ転送する(図5:Step1)。
次に、リクエスト信号RqMux0を通じて、ID値2、32バイトデータ読み出し命令RD4、バンクアドレスBK0、カラムアドレスCol255を多重化したリクエストReqRD32b0m0をクロック信号RqCK0に同期させ、メモリチップM0へ転送する(図5:Step1)。リクエストイネーブル信号RqEn0がLowであれば(図5:Step2)、情報処理装置CPU_CHIPからのリクエストはメモリチップM0のリクエストキュー回路RqQIへ格納されない。リクエストイネーブル信号RqEn0がHighであれば(図5:Step2)、メモリチップM0へ、情報処理装置CPU_CHIPからのリクエストReqBAb0m0とリクエストReqRD32b0m0は順に、メモリチップM0の、リクエストキュー回路RqQIのリクエストキューRqQI-0およびRqQI-1へ格納される(図5:Step3)。これで、リクエストキュー回路RqQIの全リクエストキューはエントリされ、情報処理装置CPU_CHIPからの新たなリクエストを受け付け不可能なため、リクエストイネーブル信号RqEn0をLowにする。リクエストイネーブル信号RqEn0がLowになったことで、情報処理装置CPU_CHIPは、メモリチップM0がリクエストを受け付けられなくなったことを知ることができる。
その後、ID比較回路CPQは、リクエストキューRqQI-0へエントリされたリクエストReqBAb0m0に含まれるID値2と、IDレジスタ回路dstIDに保持されているID値2を比較する(図5:Step4)。比較結果が一致したため、リクエストReqBAb0m0は、リクエストキュー回路RqQXIへ転送される(図5:Step5)。比較結果が不一致の場合は、リクエストReqBAb0m0は、リクエストキュー回路RqQXOへ転送され、メモリチップM1へ転送される(図5:Step12)。
次に、リクエストキュー回路RqQXIは格納しているレスポンスが読み出し命令を含むかどうかチェックする(図5:Step6)。読み出し命令を含んでいる場合は、リクエストキュー回路RqQXIは、レスポンスキュー回路RsQoのレスポンスキューRqQp-0及びRqQp-1に空きがあるかをチェックする(図5:Step7)。リクエストReqBAb0m0は読み出し命令を含んでいないため、リクエストキュー回路RqQXIは格納しているリクエストReqBAb0m0をメモリ回路MemVLへ転送する(図5:Step10)。メモリ回路MemVLはリクエストReqBAb0m0に従って動作する(図5:Step11)。具体的には、メモリ回路MemVLはリクエストReqBAb0m0に含まれるバンクアクティブ命令BA、バンクアドレスBK0、ロウアドレスRow63によって、バンク0内のロウ63に接続されている1kByte分のメモリセルを活性化し、バンク0内のセンスアンプへ転送する(図5:Step11)。
リクエストReqBAb0m0が処理されたことによって、リクエストキューRqQI-0がひとつ分空いたため、メモリチップM0は、リクエストイネーブル信号RqEn0をHighにし、新たなリクエストを受け付け可能であることを情報処理装置CPU_CHIPへ知らせる。情報処理装置CPU_CHIPは、メモリチップM0のリクエストイネーブル信号RqEn0がHighになったことを確認し、新たなリクエストとしてリクエスト信号RqMux0を通じて、ID値2、32バイト書き込み命令WT、バンクアドレスBK0、カラムアドレスCol127、32バイト分の書き込みデータを多重化したリクエストReqWT23b0m0をクロック信号RqCK0に同期させ、メモリチップM0へ転送する(図5:Step1)。
リクエストイネーブル信号RqEn0をチェックし(図5:Step2)、リクエストイネーブル信号RqEn0がHighのため、メモリチップM0は、情報処理装置CPU_CHIPからのリクエストReqWT23b0m0を自身のリクエストキュー制御回路RqCT内のリクエストキューRqQI-0へ格納する(図5:Step3)。
メモリチップM0は、新たなリクエストReqWT23b0m0を、自身のリクエストキュー回路RqQI内のリクエストキューRqQI-0へ格納すること(図5: Step3)とは独立して並行に、すでにリクエストキューRqQI-1に格納されているリクエストReqRD32b0m0に対する処理を行うことができる(図5:Step4以降)。
次に、すでにリクエストキューRqQI-1に格納されているリクエストReqRD32b0m0についての動作を説明するID比較回路CPQは、リクエストキューRqQI-1へエントリされたリクエストReqRD32b0m0に含まれるID値2と、IDレジスタ回路dstIDに保持されているID値2を比較する(図5:Step4)。比較結果が一致したため、リクエストReq RD32b0m0は、リクエストキュー回路RqQXIへ転送される(図5:Step5)。比較結果が不一致の場合は、リクエストReqRD32b0m0は、リクエストキュー回路RqQXOへ転送され、メモリチップM1へ転送される(図5:Step12)。次に、リクエストキュー回路RqQXIは格納しているレスポンスが読み出し命令を含むかどうかチェックする(図5:Step6)。リクエストReqRD32b0m0読み出し命令を含んでいるため、リクエストキュー回路RqQXIは、レスポンスキュー回路RsQoのレスポンスキューRqQp-0及びRqQp-1に空きがあるかをチェックする(図5:Step7)。レスポンスキュー回路RsQoのレスポンスキューRqQp-0及びRqQp-1に空きがなければ、空きができるまで、リクエストキュー回路RqQXIは、リクエストReq RD32b0m0の転送を中断する。レスポンスキュー回路RsQoのレスポンスキューRqQp-0及びRqQp-1に空きがあれば、リクエストキュー回路RqQXIは格納しているリクエストReq RD32b0m0をメモリ回路MemVLへ転送する(図5:Step8)。メモリ回路MemVLはリクエストReq RD32b0m0に従って動作する(図5:Step9)。具体的には、メモリ回路MemVLはリクエストReqRD32b0m0に含まれる、ID値2、32バイトデータ読み出し命令RD、バンクアドレスBK0、カラムアドレスCol255によって、バンク0のセンスアンプに保持されているデータのなかで、カラムアドレス255を開始アドレスとした32バイト分のデータが読み出だし(図5:Step9)、IDレジスタ値2を含めて、レスポンスキュー制御回路RsCT内のレスポンスキューRsQoのレスポンスキューRsQo-0へレスポンスResRD32b0m0としてエントリされる(図6:Step13)。
レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへレスポンスがエントリされると、レスポンススケジュール回路SCHは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンス数を、ステータスレジスタSTRegへ保存する(図6:Step14)。さらに、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスに対するレスポンス優先順位を決定する(図6:Step15)。次に、レスポンスイネーブル信号RsEn0をチェックし(図6:Step16)、スポンスイネーブル信号RsEn0がHighの際に、レスポンス優先順位の最も高いレスポンスをレスポンス信号RsMux0を通じて、情報処理装置CPU_CHIPへ送信する(図6:Step17)。レスポンスイネーブル信号RsEn0がLowであれば、情報処理装置CPU_CHIPへ送信は行わない。
レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpの1つのレスポンスが情報処理装置CPU_CHIPへ完全に送信されると、レスポンススケジュール回路SCHは、スポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンス数をチェックし、最新のレスポンス数をステータスレジスタSTRegへ保存する(図6:Step18)。ここでは、レスポンスイネーブル信号RsEn0がHighであり、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスが、レスポンスResRD32b0m0のみのため、レスポンススケジュール回路SCHは、ステータスレジスタSTRegへレスポンス数1を保存し、さらにレスポンスeRsRD32b0m0のレスポンス優先順位を最高位に設定し、レスポンスeRsRD32b0m0を情報処理装置CPU_CHIPへ送信する。レスポンスResRD32b0m0が情報処理装置CPU_CHIPへ送信されると、レスポンススケジュール回路SCHは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスが存在しないため、ステータスレジスタSTRegへレスポンス数0を保存する。
リクエストReqRD32b0m0に対応するレスポンスResRD32b0m0がレスポンスキュー回路RsQoへエントリされると、レスポンスResRD32b0m0が情報処理装置CPU_CHIPへ出力されている最中でも、リクエストReqWT23b0m0に対する処理を行うことができる(図5:Step4以降)。
次に、すでにリクエストキューRqQI-0に格納されているリクエストReq WT23b0m0についての動作を説明する。ID比較回路CPQは、リクエストキューRqQI-0へエントリされたリクエストReq WT23b0m0に含まれるID値2と、IDレジスタ回路dstIDに保持されているID値2を比較する(図5:Step4)。比較結果が一致したため、リクエストReq WT23b0m0は、リクエストキュー回路RqQXIへ転送される(図5:Step5)。比較結果が不一致の場合は、リクエストReqWT23b0m0は、リクエストキュー回路RqQXOへ転送され、メモリチップM1へ転送される(図5:Step12)。
次に、リクエストキュー回路RqQXIは格納しているレスポンスが読み出し命令を含むかどうかチェックする(図5:Step6)。読み出し命令を含んでいる場合は、リクエストキュー回路RqQXIは、レスポンスキュー回路RsQoのレスポンスキューRqQp-0及びRqQp-1に空きがあるかをチェックする(図5:Step7)。リクエストReqWT23b0m0は読み出し命令を含んでいないため、リクエストキュー回路RqQXIは格納しているリクエストReqWT23b0m0をメモリ回路MemVLへ転送する(図5:Step10)。メモリ回路MemVLはリクエストReqWT23b0m0に従って動作する(図5:Step11)。具体的には、メモリ回路MemVLはリクエストReqWT23b0m0に含まれるID値2、32バイト書き込み命令WT、バンクアドレスBK0、カラムアドレスCol127および32バイト分の書き込みデータによって、メモリバンク0のセンスアンプへ、カラムアドレス127を開始アドレスとした32バイト分のデータを書き込む。
図7はメモリチップM1からメモリチップM0へレスポンスが発生した際の、動作の一例を示すフローチャートである。レスポンス信号RsMux1より、レスポンスクロック信号RqCK1に同期し、メモリチップM0へレスポンスが送信される(図7:Step1)と、レスポンスイネーブル信号ResEn1がLowであれば(図7:Step2)、メモリチップM0のレスポンスキュー回路RsQpへ格納されない。レスポンスイネーブル信号ResEn1がHighであれば(図7:Step2)、メモリチップM0のレスポンスキュー回路RsQpへ格納される(図7:Step3)。レスポンスキュー回路RsQpへレスポンスがエントリされると、レスポンススケジュール回路SCHは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンス数を、ステータスレジスタSTRegへ保存する(図6:Step4)。さらに、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスに対するレスポンス優先順位を決定する(図6:Step5)。次に、レスポンスイネーブル信号RsEn0をチェックし(図6:Step6)、スポンスイネーブル信号RsEn0がHighの際に、レスポンス優先順位の最も高いレスポンスをレスポンス信号RsMux0より、情報処理装置CPU_CHIPへ送信する(図6:Step7)。レスポンスイネーブル信号RsEn0がLowであれば、情報処理装置CPU_CHIPへ送信は行わない。
レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpの1つのレスポンスが情報処理装置CPU_CHIPへ完全に送信されると、レスポンススケジュール回路SCHは、スポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンス数をチェックし、最新のレスポンス数をステータスレジスタSTRegへ保存する(図6:Step8)。
レスポンススケジュール回路SCHの動作について説明する。図8はレスポンススケジュール回路SCHの動作を示すフローチャートである。レスポンススケジュール回路SCHでは、先ず、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへレスポンスがエントリされているかをチェックする(Step1)。レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpのいずれにもレスポンスがエントリされていなければ、再度、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへのエントリをチェックする。レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpのいずれかにレスポンスがエントリされていれば、レスポンスの優先順位をチェックし、最高位のレスポンス優先順位を持つレスポンスの送信準備を行う(Step2)。
次に、レスポンスイネーブル信号RsEn0をチェックし(Step3)、Lowの際はレスポンスを出力せず、レスポンスイネーブル信号RsEn0がHighを待つレスポンスイネーブル信号RsEn0がHighを待つ。レスポンスイネーブル信号RsEn0がHighの際は、最高位のレスポンス優先順位を持つレスポンスを出力する(Step4)。その、レスポンスが出力された後は、レスポンスに関する出力優先順位を変化させる(Step5)。
メモリチップM0のレスポンススケジュール回路SCHで行うレスポンス優先順位の変更動作の一例について説明する。図9では、メモリチップM0が装備するレスポンススケジュール回路SCHが行う動的レスポンス優先順位の制御を示す。
先ず、メモリチップM0での、レスポンス優先順位の制御を説明する。電源投入直後の初期設定(Initial)にて、レスポンスキュー回路RsQoへエントリされるメモリチップM0のレスポンスの優先順位(PRsQo(M0))は1、レスポンスキュー回路RsQpエントリされるメモリチップM1のレスポンスの優先順位(PRsQp(M1))は2に、レスポンスキュー回路RsQpエントリされるメモリチップM2のレスポンスの優先順位(PRsQp(M2))は3に設定される。特に限定しないが、レスポンスの順位の小さい方がレスポンスの順位が高いとする。レスポンスキュー回路RsQoへエントリしたメモリチップM0のレスポンス(RsQo(M0))がNtime回分出力すると、レスポンスキュー回路RsQoへエントリされるメモリチップM0のレスポンスの優先順位(PRsQo(M0))は最も低い3となり、メモリチップM1のレスポンスの優先順位(PRsQp(M1))は最も高い1となり、レスポンスキュー回路RsQPエントリされるメモリチップM2のレスポンスの優先順位(PRsQp(M2))は2となる。
レスポンスキュー回路RsQpへエントリされるメモリチップM1のレスポンスPRsQp(M1))が、Mtime回分出力するとレスポンスキュー回路RsQpへエントリされるメモリチップM1のレスポンスの優先順位(PRsQp(M1))は最も低い3となり、レスポンスキュー回路RsQPエントリされるメモリチップM2のレスポンスの優先順位(PRsQp(M1))は最も高い1となり、レスポンスキュー回路RsQPoへエントリされるメモリチップM0のレスポンスの優先順位(PrsQo(M0))は2となる。
次に、レスポンスキュー回路RsQpへエントリされるメモリチップM2のレスポンスPRsQp(M2))が、Ltime回分出力するとレスポンスキュー回路RsQPへエントリされるメモリチップM2のレスポンスの優先順位(PRsQp(M2))は最も低い3となり、レスポンスキュー回路RsQPoへエントリされるメモリチップM0のレスポンスの優先順位(PrsQo(M0))は最も高い1となる。レスポンスキュー回路RsQPエントリされるメモリチップM2のレスポンスの優先順位(PRsQp(M1))は2となる。レスポンスキュー回路RsQoへエントリされるメモリチップM0からのレスポンスのレスポンス優先順位を変更するためのレスポンス出力回数Ntime、レスポンスキュー回路RsQpへエントリされるメモリチップM1からのレスポンスのレスポンス優先順位を変更するためのレスポンス出力回数Mtimeおよびレスポンスキュー回路RsQpへエントリされるメモリチップM2からのレスポンスのレスポンス優先順位を変更するためのレスポンス出力回数Ltimeは、電源投入直後の初期設定(Initial)にて、特に限定しないが、それぞれ、10回、2回、1回に設定される。
さらに、レスポンス出力回数Ntime、Mtime、Ltimeは、情報処理装置CPU_CHIPから設定可能であり、本発明が利用される携帯機器などのシステム構成にあわせて、高性能化が図れるように、それぞれを設定することができる。
<クロック制御>
図10(a)は、メモリチップM0から出力するレスポンスクロック信号RsCk0を停止する動作の一例である。情報処理装置CPU_CHIPは、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンス数ResNを確認するために、リクエスト信号RqMux0よりメモリチップM0のID値2とレスポンス数確認命令を多重化したリクエストReqRNoを入力する(Step2)。メモリチップM0のリクエストキュー回路RqQIはリクエストReqRNoを格納する。次に、ID比較回路CPQは、リクエストキュー回路RqQIへ格納されているリクエストReqRNoに含まれるID値2とIDレジスタ回路dstIDに保持されているID値2を比較し、一致したため、リクエストReqBAb0m0は、リクエストキュー回路RqQXIへ転送される。
リクエストキュー回路RqQXIは、リクエストReqBAb0m0を、ステータスレジスタ回路STRegへする。ステータスレジスタ回路STRegは、ID値2含めて、レスポンス数ResNをレスポンスキュー回路RsQoへ送信し、レスポンスキュー回路RsQoは、レスポンス信号RsMux0を通じて、ID値2およびレスポンス数ResNを情報処理装置CPU_CHIPへ送信する(Step3)。つぎに、ID値2およびレスポンス数ResNを受け取った情報処理装置CPU_CHIPは、レスポンス数ResNが0であるかどうかチェックを行う(Step4)。レスポンス数ResNが0では無い場合、未だ、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスが存在するので、再度、レスポンス数確認命令をメモリチップM0へ送信する(Step2)。
レスポンス数ResNが0の場合は、レスポンスキュー回路RsQoおよびレスポンスキュー回路RsQpへエントリされているレスポンスが存在しないため、リクエスト信号RqMux0より、レスポンスクロック信号RsCk0の停止命令を、メモリチップM0へ送信する(Step5)。リクエスト信号RqMux0よりリクエストとしてID値2、レスポンスクロック停止コマンドが多重化されたリクエストReqStop2がメモリチップM0へ入力する。メモリチップM0はリクエストReqStop2を自身のリクエストキュー制御回路RqCT内のリクエストキューへ格納する。その後、リクエストキュー制御回路RqCT内のID比較回路はリクエストReqStop2に含まれるID値2と自身のIDレジスタの値2を比較する。比較結果は一致しており、リクエストキュー制御回路RqCTはレスポンスクロック制御回路RsCkC内のクロック分周回路Div2へリクエストReqStop2を送信する(Step5)。
クロック分周回路Div2は、リクエストReqStop2に従い、レスポンスクロック信号RsCK0のクロック周波数を徐々に低下させ、レスポンスクロック信号RsCK0の停止準備が整った時点で、レスポンススケジュール回路SCHを通じて、レスポンス信号RsMux0より、ID値2およびレスポンスクロック停止通達情報を情報処理装置CPU_CHIPへ送信する(Step6)。その後、クロック分周回路Div2は、クロック信号ck3およびレスポンスクロック信号RsCK0を停止する(Step7)。
図10(b)は、メモリチップM0から出力するレスポンスクロック信号RsCk0のクロック周波数を低下させるための動作の一例である。図10(b)のStep1からStep4までの動作は、図11(a)と同等であるため、Step5より説明する。リクエスト信号RqMux0よりリクエストとしてID値2、レスポンスクロック分周コマンド、および分周比8が多重化されたリクエストReqDIV8がメモリチップM0へ送信される(Step5)。メモリチップM0は、自身のリクエストキュー制御回路RqCT内のID比較回路にて、リクエストReqDIV8に含まれるID値2と自身のIDレジスタの値2を比較する。比較結果は、一致のため、リクエストReqDIV8は、リクエストクロック制御回路RqCkC内のクロック分周回路Div2へ送信される(Step5)。
クロック分周回路Div2は、リクエストReqDIV8に従い、レスポンスクロック信号RsCK0のクロック周波数を徐々に低下させ、最終的に、リクエストクロック信号RqC2を8分の1分周したクロックを、クロックCK3およびレスポンスクロック信号RsCk2から出力する(Step6)。レスポンスクロック信号RsCK0のクロック周波数が、所望の周波数へ変更された後、クロック分周回路Div2はレスポンススケジュール回路SCHを通じて、レスポンス信号RsMux0より、ID値2およびレスポンスクロック分周完了情報を情報処理装置CPU_CHIPへ送信する(Step7)。
図10(c)は、周や停止されたレスポンスクロック信号RsCk0を再度リクエストクロック信号RqCk0と同等の周波数で動作させ場合の動作の一例である。メモリチップM0から出力するレスポンスクロック信号RsCk0のクロック周波数を低下させるための動作の一例である。リクエスト信号RqMux0よりリクエストとしてID値2、レスポンスクロック再開コマンドが多重化されたリクエストReqStart2がメモリチップM0入力する。
メモリチップM0はリクエストReqStart2を自身のリクエストキュー制御回路RqCT内のリクエストキューへ格納する(Step2)。その後、リクエストキュー制御回路RqCT内のID比較回路はリクエストReqStart2に含まれるID値2と自身のIDレジスタの値2を比較する。比較結果は一致するため、リクエストReqDIV4を自身へのリクエストであると判断する。リクエストキュー制御回路RqCTはレスポンスクロック制御回路RsCkC内のクロック分周回路Div2へリクエストReqStart2を送信する(Step2)。クロック分周回路Div3は、リクエストReqStart2に従い、徐々にクロック周波数を上げ、最終的に、リクエストクロック信号RqCk0と同等の周波数を持つのクロックを、クロックck3およびレスポンスクロック信号RsCK0より出力する(Step3)。
レスポンスクロック信号RsCK0のクロック周波数が、所望の周波数へ変更された後、クロック分周回路Div2はレスポンススケジュール回路SCHを通じて、レスポンス信号RsMux0より、ID値2およびレスポンスクロック再開完了情報を情報処理装置CPU_CHIPへ送信する(Step4)。上記はレスポンスクロック信号RsCk0についてのクロック制御方法について説明したが、リクエストクロック信号RqCk1についてのクロック制御も同様に行うことができることは言うまでもない。
図11は、メモリチップM0が装備するメモリ回路MemVLの回路ブロック図の一例である。メモリ回路MemVLは、コマンドデコーダCmdDec、制御回路Cont Logic、ロウアドレスバッファRAdd Lat、カラムアドレスバッファCAdd Lat、リフレッシュカウンタRefC、温度計Thmo、ライトデータバッファWdata Lat、リードデータバッファRDataLat、ロウデコーダRowDec、カラムデコーダColDec、センスアンプSenseAmp、データ制御回路DataCont、メモリバンクBank0〜Bank7から構成されている。メモリ回路MemVLの読み出し動作を説明する。
リクエストキューRqQXIへバンクアドレス7、ロウアドレス5格納されており、バンクアクティブ命令BAがコマンド信号Commandから、バンクアドレス7およびロウアドレス5が、アドレス信号Addressよりメモリ回路MemVLへ送信される。コマンドデコーダCmdDecはバンクアクティブ命令BAを解読し、制御回路Cont LogicがロウアドレスバッファRaddLatへバンクアドレス7およびロウアドレス5を格納するように指示する。バンクアドレス7およびロウアドレス5は、制御回路Cont Logicの指示によりロウアドレスバッファRaddへ格納される。ロウアドレスバッファRaddへ格納されたバンクアドレス7によってメモリバンクBank7が選択され、ロウアドレス5はメモリバンクBank7のロウデコーダRowDecへ入力される。その後メモリバンクBank7内のロウアドレス5に接続されているメモリセルが活性化され、1kByte分のデータがメモリバンクBank7内のセンスアンプSenseAmpへ転送される。
つぎに、リクエストキューRqQXIへ8バイトデータリード命令RD8、バンクアドレス7、カラムアドレス63が格納されており、8バイトデータリード命令RD8がコマンド信号Commandから、バンクアドレス7およびカラムアドレス63が、アドレス信号Addressよりメモリ回路MemVLへ送信される。コマンドデコーダCmdDecは8バイトデータリード命令RD8を解読し、制御回路Cont LogicがカラムアドレスバッファCAddLatへバンクアドレス7およびカラムアドレス63を格納するように指示する。バンクアドレス7およびカラムアドレス63は、制御回路Cont Logicの指示によりカラムアドレスバッファCAddLatへ格納される。
カラムアドレスバッファCaddLatへ格納されたバンクアドレス7によってメモリバンクBank7が選択され、カラムアドレス63はメモリバンクBank7のカラムデコーダColDecへ入力される。その後メモリバンクBank7内のカラムアドレス63を開始アドレスとして、8バイト分のデータが、データ制御回路DataContを介してリードデータバッファRdataLatへ転送され格納される。その後読み出された8バイト分のデータはレスポンスキュー回路RsQoへ転送される。
次に、メモリ回路MemVLの書込み動作を説明する。リクエストキューRqQXIへ8バイトデータライト命令WT8、バンクアドレス7、カラムアドレス127が格納されており、8バイトデータライト命令RD8がコマンド信号Commandから、バンクアドレス7およびカラムアドレス127が、アドレス信号Addressより、8バイトデータがライトデータ信号WDataよりメモリ回路MemVLへ送信される。コマンドデコーダCmdDecは8バイトデータライト命令WT8を解読し、制御回路Cont LogicがカラムアドレスバッファCAddLatへバンクアドレス7およびカラムアドレス127を格納するように、ライトデータバッファWdata Latへ8バイト分のライトデータを格納するように指示する。バンクアドレス7およびカラムアドレス127は、制御回路Cont Logicの指示によりカラムアドレスバッファCAddLatへ格納される。8バイト分のライトデータは制御回路Cont Logicの指示によりライトデータバッファWdata Latへ格納される。
カラムアドレスバッファCaddLatへ格納されたバンクアドレス7によってメモリバンクBank7が選択され、カラムアドレス127はメモリバンクBank7のカラムデコーダColDecへ入力される。その後メモリバンクBank7内のカラムアドレス127を開始アドレスとして、8バイト分のデータが、ライトデータバッファWdata Latから、データ制御回路DataContを介して、メモリバンクBank7内のセンスアンプSenseAmpへ転送され、モリバンクBank7内のロウアドレス5に接続され活性化されているメモリセルへ書き込まれる。
つぎに、リフレッシュ動作について説明する。メモリ回路MemVLは揮発性メモリのため、データ保持のために定期的にリフレッシュ動作を行う必要がある。リクエストキューRqQXIへ格納されているリフレッシュ命令REFが、コマンド信号Commandより入力する。コマンドデコーダCmdDecは、リフレッシュ命令REFを解読し、制御回路Cont LogicがリフレッシュカウンタRefCへリフレッシュ動作を行うように指示する。リフレッシュカウンタRefCは制御回路Cont Logicの指示により、リフレッシュ動作を行う。
つぎに、セルフリフレッシュ動作について説明する。メモリ回路MemVLへのリクエストが長期間生じないときは、セルフリフレッシュ状態へ動作モードを切り替え、メモリ回路MemVL自らがリフレッシュ動作を行うことができる。
リクエストキューRqQXIへ格納されているセルフリフレッシュ・エントリ命令SREFが、コマンド信号Commandより入力する。コマンドデコーダCmdDecは、セルフリフレッシュ・エントリ命令SREFを解読し、制御回路Cont Logicは全回路をセルフリフレッシュ状態へ動作モードを切り替える。さらに、リフレッシュカウンタRefCへ、自動的に、定期的にセルフリフレッシュ動作を行うように指示する。リフレッシュカウンタRefCは制御回路Cont Logicの指示により、自動的に、定期的にセルフリフレッシュ動作を行う。
この際のセルフリフレッシュ動作では、温度によってセルフリフレッシュの頻度を変化させることができる。
一般的に、揮発性メモリでは、温度が高い場合はデータ保持時間が短くなり、低い場合は長くなるという性質がある。そこで、温度計で温度を検知し、温度が高い場合が、セルフリフレッシュの周期を短くし、温度が低い場合はセルフリフレシュの周期を長くし、セルフリフレッシュ動作を行う。これによって、無駄なセルフリフレシュ動作を削減でき低電力化が図れる。
セルフリフレッシュ状態を抜け出すには、セルフリフレッシュ・解除命令SREFXを、コマンド信号Commandより入力することで実現できる。セルフリフレッシュ状態を抜け出した後の、データ保持動作はリフレッシュ命令REFによって行われる。
<メモリチップM1の説明>
図12は、メモリチップM1の構成図の一例である。メモリチップM1は、リクエストインターフェース回路ReqIFと、レスポンスインターフェース回路ResIFと、初期化回路INIT1、メモリ回路MemNV1から構成されている。リクエストインターフェース回路ReqIFはリクエストクロック制御回路RqCkCおよび、リクエストキュー制御回路RqCTから構成される。リクエストクロック制御回路RqCkCはクロックドライバDrv1およびクロック分周回路Div1から構成される。リクエストキュー制御回路RqCTはリクエストキュー回路RqQI、リクエストキュー回路RqQXI、リクエストキュー回路RqQXO、IDレジスタ回路dstID、ID比較回路CPQから構成される。レスポンスインターフェース回路ResIFはレスポンスクロック制御回路RsCkCおよび、レスポンスキュー制御回路RsCTから構成される。
レスポンスクロック制御回路RsCkCはクロックドライバDrv2およびクロック分周回路Div2から構成される。レスポンスキュー制御回路RsCTは、レスポンスキュー回路RsQo、レスポンスキュー回路RsQp、ステータスレジスタ回路STReg、レスポンススケジュール回路SCHから構成される。メモリ回路MemNV1は、特に限定しないが、不揮発性メモリであり、NOR型フラッシュメモリセルを利用したNOR型フラッシュメモリである。メモリ回路MemNV1には、ブートデバイスID値BotIDおよび終端デバイスID値EndIが格納される。メモリ回路MemNV1および初期化回路INIT1以外の、メモリチップ1を構成する回路および動作は、図4のメモリチップM0と同等である。
次に、本メモリチップM1の動作を説明する。まず、電源投入時の動作について説明する。メモリチップM1へ電源が投入されると初期化回路INIT1はメモリチップM1の初期化を行う。メモリチップM1は、ブートデバイス認識信号Bsigが接地gndされているので、自分自身がブートデバイスであることを認識し、自らのメモリ回路MemNV1が保持しているブートデバイスID値1をIDレジスタdstIDへ設定し、ID有効ビットをHighにする。
次にレスポンススケジュール回路SCHが持つレスポンスキュー回路RsQoに入力するレスポンスの優先順位を1へ、レスポンスキュー回路RsQpに入力するメモリチップM2からのレスポンスの優先順位を2へ設定する。クロック分周回路Div1およびDiv2の分周比は1に設定される。初期化回路INIT1による初期設定が終了すると、メモリチップM1はメモリチップM1とメモリチップM2との間で通信できることを確認する通信確認動作を行う。メモリチップM1はリクエストイネーブル信号RqEn2がHighになったことを確認し、レスポンスイネーブル信号RsEn2及びリクエストイネーブル信号RqEn1をHighにする。
次に、メモリチップM0は、リクエストイネーブル信号RqEn1がHighになったことを確認し、レスポンスイネーブル信号RsEn1をHighにする。通信確認動作が終了すると、メモリ回路MemNV1よりブートデータが読み出され、メモリチップM0を介して、情報処理装置CPU_CHIPへ送信される。次に、メモリチップM1での、レスポンス優先順位の制御を説明する。
図13ではメモリチップM1が装備するレスポンススケジュール回路SCHが行う動的レスポンス優先順位の制御を示す。
図1に示すように、メモリチップM1へは、メモリチップM0のレスポンスは生じない接続構成になっている場合は、メモリチップM1のレスポンスおよびメモリチップM2のレスポンスについてのみレスポンスの優先順位が付けられる。電源投入直後の初期設定(Initial)にて、レスポンスキュー回路RsQoへエントリされるメモリ回路MemNV1からのレスポンスの優先順位(PRsQo(M1))は1、レスポンスキュー回路RsQpエントリされるメモリチップM2からのレスポンスの優先順位(PRsQp(M2))は2に設定される。特に限定しないが、レスポンスの順位の小さい方がレスポンスの順位が高いとする。
次に、レスポンスキュー回路RsQoへエントリしたメモリ回路MemNV1のレスポンス(RsQo(M1))がM1time回分出力すると、レスポンスキュー回路RsQoへエントリされるレスポンスの優先順位(PRsQo(M1))は最も低い2となり、メモリチップM2のレスポンスの優先順位(PRsQp(M2))は最も高い1となる。
次に、レスポンスキュー回路RsQpへエントリされるメモリチップM2からのレスポンスPRsQp(M2))が、L1time回分出力するとレスポンスキュー回路RsQpへエントリされるメモリチップM2からのレスポンスの優先順位(PRsQp(M2))は最も低い2となり、レスポンスキュー回路RsQoエントリされるレスポンスの優先順位(PrsQp(M1))は最も高い1となる。レスポンスキュー回路RsQoへエントリされるメモリ回路MemNV1からのレスポンスのレスポンス優先順位を変更するためのレスポンス出力回数M1time、レスポンスキュー回路RsQpへエントリされるメモリチップM2からのレスポンスのレスポンス優先順位を変更するためのレスポンス出力回数L1timeは、電源投入直後の初期設定(Initial)にて、特に限定しないが、それぞれ、10回、1回に設定される。さらに、レスポンス出力回数M1time、L1timeは、情報処理装置CPU_CHIPから設定可能であり、本発明が利用される携帯機器などのシステム構成にあわせて、高性能化が図れるように、それぞれを設定することができる。
また、メモリチップM1が装備するレスポンススケジュール回路SCHが行う動的レスポンス優先順位の制御は、図8で示した動作と同等である。また、リクエストクロック信号RqCk2およびレスポンスクロック信号RsCk1ののクロック制御方法は、図10で示したクロック制御方法と同様である。
<メモリチップM2の説明>
図14は、メモリチップM2の構成図の一例である。メモリチップM2は、リクエストインターフェース回路ReqIFと、レスポンスインターフェース回路ResIFと、初期化回路INIT2、メモリ回路MemNV2から構成されている。リクエストインターフェース回路ReqIFはリクエストクロック制御回路RqCkCおよび、リクエストキュー制御回路RqCTから構成される。リクエストクロック制御回路RqCkCはクロックドライバDrv1およびクロック分周回路Div1から構成される。リクエストキュー制御回路RqCTはリクエストキュー回路RqQI、リクエストキュー回路RqQXI、リクエストキュー回路RqQXO、IDレジスタ回路dstID、ID比較回路CPQから構成される。レスポンスインターフェース回路ResIFはレスポンスクロック制御回路RsCkCおよび、レスポンスキュー制御回路RsCTから構成される。レスポンスクロック制御回路RsCkCはクロックドライバDrv2およびクロック分周回路Div2から構成される。
レスポンスキュー制御回路RsCTは、レスポンスキュー回路RsQo、レスポンスキュー回路RsQp、ステータスレジスタ回路STReg、レスポンススケジュール回路SCHから構成される。メモリ回路MemNV2は、特に限定しないが、不揮発性メモリであり、NAND型フラッシュメモリセルを利用したNAND型フラッシュメモリである。メモリ回路MemNV2および初期化回路INIT2以外の、メモリチップ1を構成する回路および動作は、図4のメモリチップM0と同等である。
次に、本メモリチップM2の動作を説明する。まず、電源投入時の動作について説明する。メモリチップM2へ電源が投入されると初期化回路INIT2はメモリチップM2の初期化を行う。先ず、IDレジスタ回路dstIDの持つIDレジスタの値を0へ、ID有効ビットをLowへ初期設定する。次にレスポンススケジュール回路SCHが持つレスポンスキュー回路RsQoへ入力するレスポンスの優先順位を1へ設定する。クロック分周回路Div1およびDiv2の分周比は1に設定される。初期化回路INIT2による初期設定が終了すると、メモリチップM2はメモリチップM1との間で通信できることを確認する通信確認動作を行う。メモリチップM2は、RqEn3、RsMux3、RqCk3を接地(gnd)していることによって、直列接続しているメモリチップの最も終端のメモリチップであることを認識し、リクエストイネーブル信号RqEn2をHighにする。
次に、メモリチップM1はリクエストイネーブル信号RqEn2がHighになったことを確認し、レスポンスイネーブル信号RsEn2及びリクエストイネーブル信号RqEn1をHighにする。次に、メモリチップM2での、レスポンス優先順位の制御を説明する。図15ではメモリチップM2が装備するレスポンススケジュール回路SCHが行う動的レスポンス優先順位の制御を示す。図1に示すように、メモリチップM2が直列接続の最終チップである場合は、メモリチップM2へはメモリチップM0およびメモリチップM1のレスポンスは生じない。
そのため、メモリチップM2のレスポンスについてのみレスポンスの優先順位が付けられる。したがって、電源投入直後の初期設定(Initial)にて、レスポンスキュー回路RsQOへエントリされるメモリチップM2のレスポンスの優先順位(PRsQO(M2))は1に設定された後は、変化しない。レスポンスキュー回路RsQoへエントリされるメモリ回路NV2のレスポンスの優先順位(PRsQO(M2))を変更することが無いため、レスポンスキュー回路RsQoへエントリされるメモリチップM2からのレスポンスのレスポンス優先順位を変更するためのレスポンス出力回数は、電源投入直後の初期設定(Initial)にて、特に限定しないが、0回に設定され、変更する必要がない。また、レスポンスクロック信号RsCk2のクロック制御方法は、図10で示したクロック制御方法と同様である。
図16は、情報処理装置CPU_CHIPからメモリモジュールMEMへ送信されたリクエストに含まれるID値がメモリチップM0、M1およびM2のIDレジスタ値のいずれにも一致せず、エラーが発生した場合の動作の一例を示すフローチャートである。情報処理装置CPU_CHIPからリクエストとID値がメモリモジュールMEMへ送信される(Step1)。リクエストイネーブル信号RqEn0がLowであれば(Step2)、情報処理装置CPU_CHIPからのリクエストはメモリチップM0のリクエストキュー回路RqQIへ格納されない。リクエストイネーブル信号RqEn0がHighであれば(Step2)、メモリチップM0の、リクエストキュー回路RqQIへ格納される(Step3)。
その後、ID比較回路CPQは、リクエストキュー回路RqQIへエントリされたリクエストに含まれるID値とIDレジスタ回路dstIDに保持されているID値を比較する(Step4)。比較結果が一致すれば、リクエストキュー回路RqQIへエントリされたリクエストはリクエストキュー回路RqQXIへ転送される(Step5)。比較結果が不一致の場合は、メモリチップM0が最終端のメモリチップかどうかをチェックする(Step6)。メモリチップM0が最終端のデバイスではないので、リクエストキュー回路RqQIへエントリされたリクエストはリクエストキュー回路RqQXOへ転送され、さらに、次のメモリチップM1へ転送される(Step9)。メモリチップM1では、Step1からStep9を繰り返す。メモリチップM2では、Step1からStep4を行う。Step4での比較結果が一致すれば、リクエストキュー回路RqQIへエントリされたリクエストはリクエストキュー回路RqQXIへ転送される(Step5)。比較結果が不一致の場合は、メモリチップM0が最終端のメモリチップかどうかをチェックする(Step6)。
メモリチップM2は最終端のメモリチップであるため、情報処理装置CPU_CHIPからメモリモジュールMEMへ送信されたリクエストに含まれるID値がメモリチップM0、M1およびM2のIDレジスタ値のいずれにも一致せず、IDエラーとなる(Step7)。IDエラーは、最終端のメモリチップM2からメモリチップM1およびM2と経由して情報処理装置CPU_CHIPへ送信される。
次に、メモリモジュールMEMへ入力するリクエストの動作波形について説明する。図17および図18は、情報処理装置CPU_CHIPが、メモリモジュールMEMへ送信するリクエストの動作波形およびメモリモジュールMEMから情報処理装置CPU_CHIPへのレスポンスの動作波形の一例である。
図17(a)は、メモリチップM0へのバンクアクティブ命令BAを含むバンクアクティブリクエストである。特に限定しないが、バンクアクティブリクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、バンクアクティブ命令BA、アドレスAD20およびAD21が多重化されメモリチップM0へ入力される。アドレスAD20およびAD21には、バンクアドレスおよびロウアドレスが含まれる。本バンクアクティブリクエストによって、メモリチップM0内のメモリバンクの1つが活性化される。
図17(b)は、メモリチップM0への4バイトデータリード命令RD4を含むリードリクエストである。特に限定しないが、リードリクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、リード命令RD4、アドレスAD22およびAD22が多重化されメモリチップM0へ入力される。アドレスAD22およびAD23には、バンクアドレスおよびカラムアドレスが含まれる。本リードリクエストによって、メモリチップM0内の活性化されているメモリバンクからデータが読み出される。
図17(c)は、メモリチップM0のID値およびメモリチップM0から読み出されたデータを含むリードレスポンスである。特に限定しないが、リードレスポンスは、レスポンスイネーブル信号RsEN0がHighの際に、レスポンスクロック信号RsCk0に同期して、メモリチップM0のID値ID2、4バイト分のデータD0、D1、D2およびD3が多重化され、情報処理装置CPU_CHIPへ入力される。
図17(d)は、メモリチップM0への2バイトデータの書込み命令WT2を含むライトリクエストである。特に限定しないが、ライトリクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、ライト命令WT2、アドレスAD24およびAD25が多重化されメモリチップM0へ入力される。アドレスAD22およびAD23には、バンクアドレスおよびカラムアドレスが含まれる。本ライトリクエストによって、メモリチップM0内の活性化されているメモリバンクへデータが書き込まれる。
図17(e)は、メモリチップM0へのプリチャージ命令PREを含むプリチャージリクエストである。特に限定しないが、プリチャージリクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、プリチャージ命令PRE、アドレスAD28が多重化されメモリチップM0へ入力される。アドレスAD28には、バンクアドレスが含まれる。本プリチャージリクエストによって、メモリチップM0内のメモリバンクの1つが非活性化される。
図18(a)は、メモリチップM0へのオートリフレッシュ命令REFを含むリフレッシュリクエストである。特に限定しないが、リフレッシュリクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、リフレッシュ命令REFが多重化されメモリチップM0へ入力される。本リフレッシュリクエストREFによって、メモリチップM0に対してリフレッシュ動作が行われる。図18(b)は、メモリチップM0へのセルフリフレッシュ命令SREFを含むセルフリフレッシュエントリリクエストである。特に限定しないが、セルフリフレッシュエントリリクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID値ID2、セルフリフレッシュエントリ命令SREFおよび全メモリバンク指定ALL、自動温度補償無効指定ATInvが多重化され、メモリチップM0へ入力される。本セルフリフレッシュエントリリクエストによって、メモリチップM0は、セルフリフレッシュ状態となり、メモリチップM0自信が内部で自動的に、全メモリバンクに対するリフレシュ動作を行う。
図18(c)は、メモリチップM0へのセルフリフレッシュ命令SREFを含むセルフリフレッシュエントリリクエストである。特に限定しないが、セルフリフレッシュエントリリクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、セルフリフレッシュエントリ命令SREFおよび全メモリバンク指定BK7および自動温度補償無効指定ATInvが多重化されメモリチップM0へ入力される。本セルフリフレッシュエントリリクエストによって、メモリチップM0は、セルフリフレッシュ状態となり、メモリチップM0自信が内部で自動的に、メモリバンク7のみに対するリフレシュ動作を行う。
図18(d)は、メモリチップM0へのセルフリフレッシュ命令SREFを含むセルフリフレッシュエントリリクエストである。特に限定しないが、セルフリフレッシュエントリリクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、セルフリフレッシュエントリ命令SREFおよび全メモリバンク指定BK7および自動温度補償有効指定ATVldが多重化されメモリチップM0へ入力される。本セルフリフレッシュエントリリクエストによって、メモリチップM0は、セルフリフレッシュ状態となり、メモリチップM0自信が内部で自動的に、メモリバンク7のみに対するリフレシュ動作を行う。また、自動温度補償有効指定ATVldがあるため、特に限定しないがメモリチップM0の内部に組み込んだ温度センサーで周囲温度を検知し、温度に応じてセルフリフレッシュの頻度を自動的に調節することができる。
図18(e)は、メモリチップM0へのセルフリフレッシュ解除命令SREXを含むセルフリフレッシュExitリクエストである。特に限定しないが、セルフリフレッシュExitリクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID値ID2、セルフリフレッシュ解除命令SREXが多重化され、メモリチップM0へ入力される。本セルフリフレッシュExitリクエストによって、メモリチップM0は、セルフリフレッシュ状態から抜け出す。
図19(a)は、メモリチップM0へのパワーダウンエントリ命令PDEを含むパワーダウンエントリリクエストである。特に限定しないが、パワーダウンエントリリクエストPDEは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、パワーダウンエントリ命令PDEが多重化されメモリチップM0へ入力される。本パワーダウンエントリリクエストによって、メモリチップM0は、パワーダウン状態となり、メモリチップM0の内部クロックを非活性にする。本実施例では、メモリチップM0へのパワーダウンエントリリクエストを説明したが、パワーダウンエントリ命令は、メモリチップのID値を変えることで、メモリモジュールMEM内の全てのメモリチップに対して適用できることは言うまでもない。
特に限定しないが、メモリチップM1のID値ID1およびパワーダウンエントリ命令PDEを多重化したリクエストは、メモリチップM0を介してメモリチップM1へ送信され、メモリチップM1の内部クロックを非活性にする。また、特に限定しないが、メモリチップM2のID値ID2およびパワーダウンエントリ命令PDEを多重化したリクエストは、メモリチップM0およびM1を介してメモリチップM2へ送信され、メモリチップM2の内部クロックを非活性にする。
図19(b)は、メモリチップM0へのパワーダウン解除命令PDXを含むパワーダウン解除リクエストである。特に限定しないが、パワーダウン解除リクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、パワーダウン解除命令PDXが多重化されメモリチップM0へ入力される。本パワーダウン解除リクエストによって、メモリチップM0は、パワーダウン状態から解除する。本実施例では、メモリチップM0へのパワーダウン解除リクエストを説明したが、パワーダウン解除リクエストに含まれるID値を変えることでメモリモジュールMEM内の全てのメモリチップに対して適用できることは言うまでもない。
図19(c)は、メモリチップM0へのディープパワーダウンエントリ命令DPDEを含むディープパワーダウンエントリリクエストである。特に限定しないが、ディープパワーダウンエントリリクエストDPDEは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、ディープパワーダウンエントリ命令PDEが多重化されメモリチップM0へ入力される。本ディープパワーダウンエントリリクエストによって、メモリチップM0は、ディープパワーダウン状態となり、メモリチップM0の内部クロックを非活性にした上でさらに、リフレッシュ用の内部クロック回路をも停止する。本実施例では、メモリチップM0へのパワーダウンエントリリクエストを説明したが、パワーダウンエントリリクエストに含まれるメモリチップのID値を変えることで、メモリモジュールMEM内のそれぞれのメモリチップに対して適用できることは言うまでもない。
図19(d)は、メモリチップM0へのディープパワーパワーダウン解除命令DPDXを含むディープパワーパワーダウン解除リクエストである。特に限定しないが、ディープパワーダウン解除リクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、ディープパワーダウン解除命令PDXが多重化されメモリチップM0へ入力される。本ディープパワーダウン解除リクエストによって、メモリチップM0は、ディープパワーダウン状態から解除する。本実施例では、メモリチップM0へのディープパワーダウン解除リクエストを説明したが、ディープパワーダウン解除リクエストに含まれるID値を変えることでメモリモジュールMEM内それぞれのメモリチップに対して適用できることは言うまでもない。
図19(e)は、メモリチップM0へのステータスレジスタリード命令STRDを含むステータスレジスタリードリクエストである。特に限定しないが、ステータスレジスタリードリクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、ステータスレジスタリード命令STRD、レスポンスエントリ数指定情報QCHが多重化されメモリチップM0へ入力される。本ステータスレジスタリード命令STRDおよびレスポンスエントリ数指定情報QCHによって、メモリチップM0は、レスポンスキューへエントリされているれレスポンス数を情報処理装置CPUへ送信する。
図20(a)は、メモリチップM1への4バイトデータリード命令RD4を含むリードリクエストである。特に限定しないが、リードリクエストは、メモリチップM0を介して、リクエストイネーブル信号RqEN1がHighの際に、リクエストクロック信号RqCk1に同期して、メモリチップM1のID値ID1、リード命令RD4、アドレスAD10、AD11,AD12およびAD13が多重化されメモリチップM1へ入力される。本リードリクエストによって、メモリチップM1内のメモリ回路NV1からデータが読み出される。
図20(b)は、メモリチップM1のID値およびメモリチップM1から読み出されたデータを含むリードレスポンスである。特に限定しないが、リードレスポンスは、レスポンスイネーブル信号RsEN1がHighの際に、レスポンスクロック信号RsCk1に同期して、メモリチップM1のID値ID1、4バイト分のデータD0、D1、D2およびD3が多重化され、メモリチップM0へ送信され、さらに情報処理装置CPU_CHIPへ送信される。
図20(c)は、メモリチップM2への512バイトデータリード命令RD512を含むリードリクエストである。特に限定しないが、リードリクエストは、メモリチップM0およびM1を介して、リクエストイネーブル信号RqEN2がHighの際に、リクエストクロック信号RqCk2に同期して、メモリチップM2のID値ID3、リード命令RD512、アドレスAD30、AD31,AD32およびAD33が多重化されメモリチップM3へ入力される。本リードリクエストによって、メモリチップM3内のメモリ回路NV2から512バイト分のデータが読み出される。
図20(d)は、メモリチップM2のID値ID3およびメモリチップM2から読み出されたデータを含むリードレスポンスである。特に限定しないが、リードレスポンスは、レスポンスイネーブル信号RsEN2がHighの際に、レスポンスクロック信号RsCk2に同期して、32バイト分のデータ毎にメモリチップM2のID値ID1が多重化され、順々に、メモリチップM1へ送信され、さらにM0へ送信され、最後に情報処理装置CPU_CHIPへ送信される。最終的に512バイト分のデータが情報処理装置CPU_CHIPへ送信される。
図21(a)は、メモリチップM1への1バイトデータの書込み命令WT1を含むライトリクエストである。特に限定しないが、ライトリクエストは、メモリチップM0を介して、リクエストイネーブル信号RqEN1がHighの際に、リクエストクロック信号RqCk1に同期して、メモリチップM1のID値ID1、ライト命令WT1、アドレスAD10,AD11,AD12およびAD13、書込みデータD0が多重化されメモリチップM1へ入力される本ライトリクエストによって、メモリチップM1内のメモリ回路NV1へ1バイト分のデータが書き込まれる。
図21(b0)および(b1)は、メモリチップM2への512バイトデータの書込み命令WT512を含むライトリクエストである。特に限定しないが、ライトリクエストは、メモリチップM0およびM1を介して、リクエストイネーブル信号RqEN2がHighの際に、リクエストクロック信号RqCk2に同期して、メモリチップM2のID値ID3、ライト命令WT512、アドレスAD30,AD31,AD32およびAD33、512バイト分の書き込みデータD0〜D511が多重化されメモリチップM2へ入力される。本ライトリクエストによって、メモリチップM2内のメモリ回路NV2へ512バイト分のデータが書き込まれる。
図22(a)は、メモリチップM0のレスポンスクロックRsCk0のドライブ能力を変更するためのレスポンスクロックドライブ能力指定命令DPDEを含むレスポンスクロックドライブ能力指定リクエストである。特に限定しないが、レスポンスクロックドライブ能力指定リクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、レスポンスクロックドライブ能力指定命令DPDEおよびドライブ能力値DrvC4が多重化されメモリチップM0へ入力される。本リクエストによって、メモリチップM0のレスポンスクロック信号RsCk0のドライブ能力が、基準ドライブ能力の4分の1に設定される。本実施例では、メモリチップM0のレスポンスクロックRsCk0のドライブ能力を変更する場合について説明したが、レスポンスクロックドライブ能力指定リクエストに含まれるメモリチップのID値を変えることで、メモリモジュールMEM内のそれぞれのメモリチップのレスポンスクロックに対するドライブ能力を変更できることは言うまでもない。
図22(b)は、メモリチップM0から出力するレスポンスクロック信号RsCk0以外の信号で、レスポンスクロック信号RsCk0と同一出力方向の信号(RsMux0およびRqEN1)のドライブ能力を変更するためのアップストリーム信号ドライブ能力指定命令Updrを含むアップストリーム信号ドライブ能力指定リクエストである。特に限定しないが、アップストリーム信号ドライブ能力指定リクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、アップストリーム信号ドライブ能力指定命令Updrおよびドライブ能力値DrvC2が多重化されメモリチップM0へ入力される。本リクエストによって、メモリチップM0から出力されるレスポンスクロック信号RsCk0以外の信号で、レスポンスクロック信号RsCk0と同一出力方向の信号(RsMux0およびRqEN1)レスポンス信号のドライブ能力が、基準ドライブ能力の2分の1に設定される。本実施例では、メモリチップM0の場合について説明したが、アップストリーム信号ドライブ能力指定リクエストに含まれるメモリチップのID値を変えることで、メモリモジュールMEM内のそれぞれのメモリチップのアップストリーム信号に対するドライブ能力を変更できることは言うまでもない。
図22(c)は、メモリチップM0のリクエストクロックRqCk1のドライブ能力を変更するためのリクエストクロックドライブ能力指定命令Rsckdrを含むリクエストクロックドライブ能力指定リクエストである。特に限定しないが、リクエストクロックドライブ能力指定リクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、リクエストクロックドライブ能力指定命令Rsckdrおよびドライブ能力値DrvC8が多重化され、メモリチップM0へ入力される。本リクエストによって、メモリチップM0のリクエストクロック信号RsCk1のドライブ能力が、基準ドライブ能力の8分の1に設定される。本実施例では、メモリチップM0のリクエストクロックRsCk1のドライブ能力を変更する場合について説明したが、リクエストクロックドライブ能力指定リクエストに含まれるメモリチップのID値を変えることで、メモリモジュールMEM内のそれぞれのメモリチップのリクエストクロックに対するドライブ能力を変更できることは言うまでもない。
図22(d)は、メモリチップM0から出力するリクエストクロック信号RsCk0以外の信号で、リクエストクロック信号RqCkqと同一出力方向の信号(RqMux1およびRsEN0)のドライブ能力を変更するためのダウントリーム信号ドライブ能力指定命令Dwndrを含むダウンストリーム信号ドライブ能力指定リクエストである。特に限定しないが、ダウンストリーム信号ドライブ能力指定リクエストは、リクエストイネーブル信号RqEN0がHighの際に、リクエストクロック信号RqCk0に同期して、メモリチップM0のID2、ダウンストリーム信号ドライブ能力指定命令Updrおよびドライブ能力値DrvC2が多重化されメモリチップM0へ入力される。本リクエストによって、メモリチップM0から出力されるリクエストクロック信号RqCk1以外の信号で、リクエストクロック信号RqCk1と同一出力方向の信号(RqMux1およびRsEN0)リクエスト信号のドライブ能力が、基準ドライブ能力と同等に設定される。本実施例では、メモリチップM0の場合について説明したが、ダウンストリーム信号ドライブ能力指定リクエストに含まれるメモリチップのID値を変えることで、メモリモジュールMEM内のそれぞれのメモリチップのダウンストリーム信号に対するドライブ能力を変更できることは言うまでもない。
図23は情報処理装置CPU_CHIPからメモリチップM1へ読み出しリクエストが生じ、連続して、メモリチップM0へ読み出しリクエストが生じた場合のデータ転送波形を示す。情報処理装置CPU_CHIPは、リクエスト信号RqMux0を通じて、ID値1、2バイトデータ読み出し命令NRD2およびアドレスAD0、AD1を多重化したリクエストReqNRD2をメモリチップM0へ転送する。続いて、リクエスト信号RqMux0を通じて、ID値2、2バイトデータ読み出し命令RD2、アドレスAD0、AD1を多重化したリクエストReqRD2をメモリチップM0へ転送する。メモリチップM0のリクエストキューRqQIへリクエストReqNRD2およびリクエストReqRD2が入力される。リクエストReqNRD2はメモリチップM1へのリクエストのため、メモリチップM0のリクエストキューRqQXOへ転送される。また、リクエストReqNRD2はリクエスト信号RqMux1を通じてメモリチップM1へ転送される。リクエストReqNRD2はメモリチップM1のリクエストキューRqQIへ入力され、次にリクエストキューRqQXIへ転送される。リクエストReqNRD2に対応するデータがメモリチップM1のメモリ回路MemNV1から読み出され、IDレジスタ値1も含めて、レスポンスRsNRD2としてレスポンスキューRsQoへ入力される。レスポンスキューRsQoへ入力されたレスポンスRsNRD2は、レスポンス信号RqMux1を通じて転送され、メモリチップM0のレスポンスキューRsQpへ格納される。レスポンスキューRsQpへ格納されたレスポンスRsNRD2は、レスポンス信号ResMux0を通じて、ID値1と読み出しデータとして出力される。
リクエストReqRD2はメモリチップM0へのリクエストのため、メモリチップM0のリクエストキューRqQXIへ転送される。リクエストReqRD2に対応するデータがメモリチップM0のメモリ回路MemVLから読み出され、IDレジスタ値2も含めて、レスポンスRsRD2としてレスポンスキューRsQoへ入力される。レスポンスキューRsQoへ入力されたレスポンスRsRD2は、レスポンス信号RqMux0を通じて、ID値2と読み出しデータとして出力される。リクエストReqRD2がメモリチップM0のリクエストキューRqQIへ入力され、このリクエストに対するレスポンスResRD2がレスポンス信号ResMux0から出力される時間は、約15nsである。一方、リクエストReqNRD2がメモリチップM1のリクエストキューRqQIへ入力され、このリクエストに対するレスポンスResRD2がレスポンス信号ResMux0から出力される時間は、約70nsである。そのため、リクエストReqRD2がリクエストReqNRD2の後に入力されたにもかかわらず、先に出力できる。本実施例ではデータ読み出しを中心に説明したが、データの書込み動作においても同様の動作を行うことができるのは言うまでもない。また、本実施例では、メモリチップM0とM1とのデータ転送動作を説明したが、M1とその他のメモリチップについても同様のデータ転送動作を行うことは言うまでもない。
以上説明したように、リクエストの入力順序によらず、メモリチップの読み出し時間が異なる場合でも、早く読み出せるデータは、遅く読み出すデータを待つことなく、すぐに読み出すことができるため、高速化が可能となる。さらに、リクエストへIDを付加することで、確実に要求先へリクエストが転送され、また、レスポンスへIDを付加することで、リクエストの入力順序と、読み出しデータの順番が異なった場合でも、情報処理装置CPU_CHIPは転送元のメモリチップを知ることができるため、情報処理装置CPU_CHIPおよびメモリチップの直列接続によって、接続信号数を少なくしながらも、情報処理装置CPU_CHIPは所望の処理を実行することができる。