(57)【要約】【課題】シリアル不揮発性メモリを搭載する電子機器において、システムの起動時間および起動後のデータのアクセス時間を短縮できるメモリコントローラおよび電子機器を提供する。【解決手段】メモリコントローラは、シリアル不揮発性メモリ（ＳＦＭ）から読み出されるプログラムデータを保持する２ブロック分以上のバッファと、主制御装置（ＣＰＵ）が要求するプログラムデータが、バッファに保持されている場合にはバッファから、バッファに保持されておらず、ランダムアクセスメモリ（ＲＡＭ）にも転送されていない場合には、ＳＦＭからバッファにロードしてバッファから、ＲＡＭに転送されている場合にはＲＡＭから、それぞれ読み出してＣＰＵに出力するバッファ管理ロジックと、ＳＦＭから読み出される起動プログラムをバッファに保持するプリフェッチロジックと、同じく処理プログラムをバッファに保持し、ＲＡＭに転送するダイレクト転送ロジックとを備える。【選択図】図２
2007219581.tif 000002
【特許請求の範囲】
【請求項１】
プログラムデータおよびその管理データが格納されているシリアル不揮発性メモリと、該シリアル不揮発性メモリに格納されているプログラムデータが転送されるランダムアクセスメモリと、前記プログラムデータをフェッチして実行する主制御装置とを備える電子機器で用いられるメモリコントローラであって、
前記シリアル不揮発性メモリから、所定バイト数のブロック単位で読み出されるプログラムデータを前記ブロック単位で保持する２ブロック分以上のバッファと、
前記主制御装置からのプログラムデータのフェッチ要求を受け取ると、該主制御装置が要求するプログラムデータが、前記バッファのいずれかに保持されている場合には該バッファのいずれかから、前記バッファのいずれにも保持されておらず、前記ランダムアクセスメモリにも転送されていない場合には、前記シリアル不揮発性メモリから前記バッファのいずれかに保持させて該バッファのいずれかから、もしくは、前記ランダムアクセスメモリに転送されている場合には該ランダムアクセスメモリから、それぞれ前記プログラムデータを読み出して前記主制御装置に出力するバッファ管理ロジックと、
前記バッファ管理ロジックから入力される制御信号および前記シリアル不揮発性メモリから入力される管理データに従って、前記シリアル不揮発性メモリから読み出されるプログラムデータのうち、電源投入後に前記電子機器のシステムを起動させる起動プログラムのブロックを、前記バッファのいずれかに保持するプリフェッチロジックと、
前記バッファ管理ロジックから入力される制御信号および前記シリアル不揮発性メモリから入力される管理データに従って、前記シリアル不揮発性メモリから読み出されるプログラムデータのうち、前記電子機器のシステム起動後に各種の処理を行う処理プログラムのブロックを、前記バッファのいずれかに保持し、前記バッファのいずれかから前記ランダムアクセスメモリに対して、前記バッファのいずれかに保持された処理プログラムのブロックを転送するダイレクト転送ロジックとを備えていることを特徴とするメモリコントローラ。
【請求項２】
前記管理データは、前記シリアル不揮発性メモリから読み出されるブロックの順序を指定するフェッチ／ロード順序の情報と、前記起動プログラムの最後のブロックを表し、前記電子機器のシステム起動時の状態から、前記シリアル不揮発性メモリから前記ランダムアクセスメモリへのデータ転送時の状態へのフェーズの切替えを指定するフェーズ切替えフラグとを含むことを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記バッファ管理ロジックは、電源投入後に前記主制御装置を停止状態にし、前記プリフェッチロジックにより、前記起動プログラムの最初のブロックを前記バッファのいずれかに保持させ、該保持が完了すると前記主制御装置を動作状態にし、該主制御装置により、前記保持されたバッファから前記起動プログラムのブロックをフェッチして実行させることを特徴とする請求項１または２に記載のメモリコントローラ。
【請求項４】
前記バッファ管理ロジックは、前記プリフェッチロジックにより、前記起動プログラムの所定のブロックを前記バッファのいずれかに保持させ、前記主制御装置により、前記保持されたバッファから前記起動プログラムのブロックをフェッチして実行させることを、前記起動プログラムの全てのブロックについて完了するまで繰り返し行うことを特徴とする請求項１〜３のいずれかに記載のメモリコントローラ。
【請求項５】
前記バッファ管理ロジックは、前記ダイレクト転送ロジックにより、前記処理プログラムの所定のブロックを前記バッファのいずれかに保持させ、該保持されたバッファから前記ランダムアクセスメモリに対して前記処理プログラムのブロックを転送させることを、前記処理プログラムの全てのブロックについて完了するまで繰り返し行うことを特徴とする請求項１〜４のいずれかに記載のメモリコントローラ。
【請求項６】
前記バッファ管理ロジックは、前記ダイレクト転送ロジックにより、前記処理プログラムの所定のブロックを前記バッファのいずれかに保持中に、前記主制御装置から、前記保持中の処理プログラムのブロックとは異なるブロックのフェッチ要求を受け取ると、前記保持中の処理プログラムのブロックの保持を停止して、前記主制御装置から要求された処理プログラムのブロックを前記バッファのいずれかに保持させ、前記主制御装置により、前記保持されたバッファから前記処理プログラムのブロックをフェッチして実行させ、前記ダイレクト転送ロジックにより、前記停止された処理プログラムのブロックの保持を再開させることを特徴とする請求項１〜５のいずれかに記載のメモリコントローラ。
【請求項７】
前記バッファ管理ロジックは、前記ダイレクト転送ロジックにより、前記処理プログラムの所定のブロックを前記バッファのいずれかに保持中に、前記主制御装置から、前記保持中の処理プログラムのブロックのフェッチ要求を受け取ると、前記保持中の処理プログラムのブロックの保持を続行させ、前記主制御装置により、前記保持されたバッファから前記処理プログラムのブロックをフェッチして実行させると共に、前記ダイレクト転送ロジックにより、前記保持されたバッファから前記ランダムアクセスメモリに対して、前記処理プログラムのブロックを転送させることを特徴とする請求項１〜６のいずれかに記載のメモリコントローラ。
【請求項８】
前記バッファ管理ロジックは、前記ダイレクト転送ロジックにより、全ての前記バッファに前記処理プログラムの所定のブロックが各々保持され、全ての前記バッファから前記ランダムアクセスメモリに対して、前記処理プログラムのブロックの転送が完了していない時に、前記主制御装置から、全ての前記バッファに保持されている処理プログラムのブロックとは異なるブロックのフェッチ要求があると、前記ダイレクト転送ロジックにより、前記バッファのいずれかから前記ランダムアクセスメモリに対して、前記処理プログラムのブロックを転送させ、前記主制御装置から要求された処理プログラムのブロックを前記転送が完了したバッファに保持し、前記主制御装置により、前記保持されたバッファから前記処理プログラムのブロックをフェッチして実行させることを特徴とする請求項１〜７のいずれかに記載のメモリコントローラ。
【請求項９】
前記バッファ管理ロジックは、前記ダイレクト転送ロジックにより、前記バッファのいずれかに保持された処理プログラムの所定のブロックの前記ランダムアクセスメモリへの転送が完了する前に、前記主制御装置から、前記保持された処理プログラムのブロックのフェッチ要求を受け取ると、該主制御装置により、前記保持されたバッファから前記処理プログラムのブロックをフェッチして実行させることを特徴とする請求項１〜８のいずれかに記載のメモリコントローラ。
【請求項１０】
プログラムデータとその管理データとからなる、それぞれ所定バイト数の複数のブロックのデータが格納されているシリアル不揮発性メモリと、
該電子機器のシステムが起動された後、前記シリアル不揮発性メモリに格納されているプログラムデータが転送される揮発性のランダムアクセスメモリと、
前記シリアル不揮発性メモリから、もしくは、前記ランダムアクセスメモリに転送されたプログラムデータをフェッチして動作し、該電子機器全体の動作を制御する主制御装置と、
前記主制御装置、前記シリアル不揮発性メモリおよび前記ランダムアクセスメモリと各々双方向に接続され、前記主制御装置からのフェッチ要求を受け取ると、前記シリアル不揮発性メモリもしくは前記ランダムアクセスメモリから、前記主制御装置が要求するプログラムデータを読み出して該主制御装置に出力する請求項１〜９のいずれかに記載のメモリコントローラとを備え、
前記主制御装置は、前記メモリコントローラを介して、前記シリアル不揮発性メモリもしくは前記ランダムアクセスメモリからプログラムデータをフェッチし、実行することを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シリアル不揮発性メモリを搭載する電子機器と、この電子機器において、主制御装置からシリアル不揮発性メモリへのアクセスを制御するメモリコントローラに関するものである。
【背景技術】
【０００２】
近年、大容量の不揮発性メモリとして、例えばＮＡＮＤ型フラッシュメモリ等を代表例とするシリアル不揮発性メモリが各種の電子機器に使用されている。このシリアル不揮発性メモリは、バイト単位でのランダムアクセスが可能なものではなく、例えば５１２バイト等のブロック（ページ）を単位としてデータへのアクセスがシリアルに行われる半導体メモリである。
【０００３】
従来、上記シリアル不揮発性メモリを搭載している電子機器において、ブロック単位でのアクセスしかできないシリアル不揮発性メモリの使用方法として、例えば下記特許文献１〜３などが提案されている。
【０００４】
特許文献１は、フラッシュメモリを内蔵した電子機器において、そのシステムを起動する手法に関するものである。特許文献１には、不揮発性のフラッシュメモリ部の一部にシステムの起動を行うためのブートプログラムを格納し、システムの起動を行うためのリセット信号が発生された場合、ブートプログラムを不揮発性のフラッシュメモリ部から連続的に読み出して起動することが開示されている。
【０００５】
特許文献２は、シリアルフラッシュメモリにおける直接実行のための手法に関するものである。特許文献２には、システムに電源が印加されると、フラッシュメモリにアクセスし、初期ブートのためのブートコードを読み出してバッファに格納した後、システムの主制御部からブートコードが要求されると、バッファからブートコードを読み出して伝送し、主制御部から要求される演算を処理することが開示されている。
【０００６】
特許文献３は、優先順序に基づくシリアルフラッシュメモリの制御手法に関するものである。特許文献３には、主制御部から所定の論理アドレスのデータに対する読み出し要求が受信されると、所定のアドレス変換テーブルを参照し、該当の論理アドレスのデータを検索し、検索の結果により、システムメモリまたはキャッシュメモリから該当の論理アドレスのデータを読み出して主制御部に転送することが開示されている。
【０００７】
上記従来手法のメモリコントローラのプリフェッチ機構では、シリアルフラッシュメモリ（ＳＦＭ）に格納されているプログラムを、あらかじめ決定されたブロック順でしか連続的に読み出すことができない。従って、プログラム全体をランダムアクセスメモリ（ＲＡＭ）にコピーしてから実行するか、あるいは、主制御装置にフェッチされるプログラムブロックの順序を厳密に分析し、その順序でＳＦＭに書き込む必要があった。
【０００８】
しかし、プログラム全体をＳＦＭからＲＡＭにコピーして実行する場合、電子機器のシステムの起動までに相当の時間を要するという問題があった。また、プリフェッチ順序を厳密に分析することは非常に困難であり、現実的ではなかった。
【０００９】
また、メモリコントローラのキャッシュ機構を使用する場合、主制御装置からフェッチ要求があった時点でＳＦＭの指定ブロックを読み出すため、キャッシュミスヒット時にはデータへのアクセス時間が長くなる。たとえシステムメモリへのデータ格納機構を持っていても、同様に主制御装置から読み出し要求がないと転送が開始されないため、初回のアクセスはキャッシュミスヒット時と同様アクセス時間が長くなるという問題があった。
【００１０】
【特許文献１】特開２００５−７１２３４号公報
【特許文献２】特開２００４−２２０５５７号公報
【特許文献３】特開２００５−１１５９１０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明の目的は、前記従来技術に基づく問題点を解消し、シリアル不揮発性メモリを搭載する電子機器において、システムの起動時間および起動後のデータのアクセス時間を短縮することができるメモリコントローラおよびこれを搭載する電子機器を提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するために、本発明は、プログラムデータおよびその管理データが格納されているシリアル不揮発性メモリと、該シリアル不揮発性メモリに格納されているプログラムデータが転送されるランダムアクセスメモリと、前記プログラムデータをフェッチして実行する主制御装置とを備える電子機器で用いられるメモリコントローラであって、
前記シリアル不揮発性メモリから、所定バイト数のブロック単位で読み出されるプログラムデータを前記ブロック単位で保持する２ブロック分以上のバッファと、
前記主制御装置からのプログラムデータのフェッチ要求を受け取ると、該主制御装置が要求するプログラムデータが、前記バッファのいずれかに保持されている場合には該バッファのいずれかから、前記バッファのいずれにも保持されておらず、前記ランダムアクセスメモリにも転送されていない場合には、前記シリアル不揮発性メモリから前記バッファのいずれかに保持させて該バッファのいずれかから、もしくは、前記ランダムアクセスメモリに転送されている場合には該ランダムアクセスメモリから、それぞれ前記プログラムデータを読み出して前記主制御装置に出力するバッファ管理ロジックと、
前記バッファ管理ロジックから入力される制御信号および前記シリアル不揮発性メモリから入力される管理データに従って、前記シリアル不揮発性メモリから読み出されるプログラムデータのうち、電源投入後に前記電子機器のシステムを起動させる起動プログラムのブロックを、前記バッファのいずれかに保持するプリフェッチロジックと、
前記バッファ管理ロジックから入力される制御信号および前記シリアル不揮発性メモリから入力される管理データに従って、前記シリアル不揮発性メモリから読み出されるプログラムデータのうち、前記電子機器のシステム起動後に各種の処理を行う処理プログラムのブロックを、前記バッファのいずれかに保持し、前記バッファのいずれかから前記ランダムアクセスメモリに対して、前記バッファのいずれかに保持された処理プログラムのブロックを転送するダイレクト転送ロジックとを備えていることを特徴とするメモリコントローラを提供するものである。
【００１３】
ここで、前記管理データは、前記シリアル不揮発性メモリから読み出されるブロックの順序を指定するフェッチ／ロード順序の情報と、前記起動プログラムの最後のブロックを表し、前記電子機器のシステム起動時の状態から、前記シリアル不揮発性メモリから前記ランダムアクセスメモリへのデータ転送時の状態へのフェーズの切替えを指定するフェーズ切替えフラグとを含むことが好ましい。
【００１４】
また、前記バッファ管理ロジックは、電源投入後に前記主制御装置を停止状態にし、前記プリフェッチロジックにより、前記起動プログラムの最初のブロックを前記バッファのいずれかに保持させ、該保持が完了すると前記主制御装置を動作状態にし、該主制御装置により、前記保持されたバッファから前記起動プログラムのブロックをフェッチして実行させることが好ましい。
【００１５】
また、前記バッファ管理ロジックは、前記プリフェッチロジックにより、前記起動プログラムの所定のブロックを前記バッファのいずれかに保持させ、前記主制御装置により、前記保持されたバッファから前記起動プログラムのブロックをフェッチして実行させることを、前記起動プログラムの全てのブロックについて完了するまで繰り返し行うことが好ましい。
【００１６】
また、前記バッファ管理ロジックは、前記ダイレクト転送ロジックにより、前記処理プログラムの所定のブロックを前記バッファのいずれかに保持させ、該保持されたバッファから前記ランダムアクセスメモリに対して前記処理プログラムのブロックを転送させることを、前記処理プログラムの全てのブロックについて完了するまで繰り返し行うことが好ましい。
【００１７】
また、前記バッファ管理ロジックは、前記ダイレクト転送ロジックにより、前記処理プログラムの所定のブロックを前記バッファのいずれかに保持中に、前記主制御装置から、前記保持中の処理プログラムのブロックとは異なるブロックのフェッチ要求を受け取ると、前記保持中の処理プログラムのブロックの保持を停止して、前記主制御装置から要求された処理プログラムのブロックを前記バッファのいずれかに保持させ、前記主制御装置により、前記保持されたバッファから前記処理プログラムのブロックをフェッチして実行させ、前記ダイレクト転送ロジックにより、前記停止された処理プログラムのブロックの保持を再開させることが好ましい。
【００１８】
また、前記バッファ管理ロジックは、前記ダイレクト転送ロジックにより、前記処理プログラムの所定のブロックを前記バッファのいずれかに保持中に、前記主制御装置から、前記保持中の処理プログラムのブロックのフェッチ要求を受け取ると、前記保持中の処理プログラムのブロックの保持を続行させ、前記主制御装置により、前記保持されたバッファから前記処理プログラムのブロックをフェッチして実行させると共に、前記ダイレクト転送ロジックにより、前記保持されたバッファから前記ランダムアクセスメモリに対して、前記処理プログラムのブロックを転送させることが好ましい。
【００１９】
また、前記バッファ管理ロジックは、前記ダイレクト転送ロジックにより、全ての前記バッファに前記処理プログラムの所定のブロックが各々保持され、全ての前記バッファから前記ランダムアクセスメモリに対して、前記処理プログラムのブロックの転送が完了していない時に、前記主制御装置から、全ての前記バッファに保持されている処理プログラムのブロックとは異なるブロックのフェッチ要求があると、前記ダイレクト転送ロジックにより、前記バッファのいずれかから前記ランダムアクセスメモリに対して、前記処理プログラムのブロックを転送させ、前記主制御装置から要求された処理プログラムのブロックを前記転送が完了したバッファに保持し、前記主制御装置により、前記保持されたバッファから前記処理プログラムのブロックをフェッチして実行させることが好ましい。
【００２０】
また、前記バッファ管理ロジックは、前記ダイレクト転送ロジックにより、前記バッファのいずれかに保持された処理プログラムの所定のブロックの前記ランダムアクセスメモリへの転送が完了する前に、前記主制御装置から、前記保持された処理プログラムのブロックのフェッチ要求を受け取ると、該主制御装置により、前記保持されたバッファから前記処理プログラムのブロックをフェッチして実行させることが好ましい。
【００２１】
また、本発明は、プログラムデータとその管理データとからなる、それぞれ所定バイト数の複数のブロックのデータが格納されているシリアル不揮発性メモリと、
該電子機器のシステムが起動された後、前記シリアル不揮発性メモリに格納されているプログラムデータが転送される揮発性のランダムアクセスメモリと、
前記シリアル不揮発性メモリから、もしくは、前記ランダムアクセスメモリに転送されたプログラムデータをフェッチして動作し、該電子機器全体の動作を制御する主制御装置と、
前記主制御装置、前記シリアル不揮発性メモリおよび前記ランダムアクセスメモリと各々双方向に接続され、前記主制御装置からのフェッチ要求を受け取ると、前記シリアル不揮発性メモリもしくは前記ランダムアクセスメモリから、前記主制御装置が要求するプログラムデータを読み出して該主制御装置に出力する上記のいずれかに記載のメモリコントローラとを備え、
前記主制御装置は、前記メモリコントローラを介して、前記シリアル不揮発性メモリもしくは前記ランダムアクセスメモリからプログラムデータをフェッチし、実行することを特徴とする電子機器を提供する。
【発明の効果】
【００２２】
本発明のメモリコントローラを搭載する電子機器では、ダイレクトメモリ転送機構により、あらかじめ決められた順序でシリアル不揮発性メモリ（ＳＦＭ）からランダムアクセスメモリ（ＲＡＭ）に処理プログラムを転送しつつ、主制御装置（ＣＰＵ）から、まだＲＡＭに転送されていない処理プログラムのフェッチを要求された場合には、バッファ管理機構によりバッファ状態を制御し、そのフェッチ要求のあったブロックを優先的にバッファへロードするとともに、ＲＡＭへ転送する。
【００２３】
従って、本発明のメモリコントローラを搭載する電子機器では、電源投入後、起動プログラムの最初の１ブロックがバッファにロードされた時点から、ＣＰＵは起動プログラムをフェッチし、実行を開始することができる。これにより、ＳＦＭに格納されているプログラムのフェッチ順序を厳密に分析する必要も、プログラム全体がＲＡＭにコピーされるまで実行開始を待つ必要もなく、システムの起動時間を大幅に短縮することができる。
【００２４】
また、まだＲＡＭに転送されていない処理プログラムのブロックのフェッチ時は、従来のキャッシュ機構を使用する電子機器において、キャッシュミスヒット時と同等のアクセス遅延が発生する。しかし、従来のキャッシュ機構を使用する電子機器とは異なり、本発明のメモリコントローラを搭載する電子機器では、一度フェッチした処理プログラムはＲＡＭに転送されるので、２度ミスすることはない。
【００２５】
また、ＣＰＵからのフェッチとは独立にダイレクトメモリ転送機構によりＲＡＭに転送するので、一度目のミスヒットの確率は、従来のキャッシュ機構を使用する場合と最悪でも同等であり、通常は、従来よりも小さくすることができる。
【発明を実施するための最良の形態】
【００２６】
以下に、添付の図面に示す好適実施形態に基づいて、本発明のメモリコントローラおよびこれを搭載する電子機器を詳細に説明する。
【００２７】
図１は、本発明のメモリコントローラを搭載する電子機器の構成を表す一実施形態の概略図である。同図に示す電子機器１０は、シリアル不揮発性メモリの一例としてシリアルフラッシュメモリを搭載するシステムであって、ＣＰＵ１２と、メモリコントローラ１４と、上記のシリアルフラッシュメモリ（ＳＦＭ）１６と、ランダムアクセスメモリ（ＲＡＭ）１８とによって構成されている。
【００２８】
ＣＰＵ（中央演算装置）１２は、メモリコントローラ１４を介して、ＳＦＭ１６から、もしくは、ＲＡＭ１８に転送（コピー）されたプログラムデータをフェッチして動作し、電子機器１０全体の動作を制御する主制御装置である。ＣＰＵ１２は、システムバス２０と双方向に接続されている。また、ＣＰＵ１２には、メモリコントローラ１４からＣＰＵリセット信号ＣＰＵ＿ＲＳＴおよびウェイト信号ＷＡＩＴが入力されている。
【００２９】
ここで、ＣＰＵリセット信号ＣＰＵ＿ＲＳＴは、ＣＰＵ１２をリセットする信号である。本実施形態の場合、ＣＰＵリセット信号ＣＰＵ＿ＲＳＴがアクティブ状態であるハイレベルの時、ＣＰＵ１２がリセットされる。また、ウェイト信号ＷＡＩＴは、ＣＰＵ１２を一時的に停止状態にする信号である。本実施形態の場合、ウェイト信号ＷＡＩＴがアクティブ状態であるハイレベルの時、ＣＰＵ１２は一時的に停止状態となる。
【００３０】
なお、ＣＰＵ１２とシステムバス２０との間にキャッシュコントローラを設け、キャッシュコントローラにキャッシュメモリを接続して使用する構成としても良い。このようなキャッシュ機構は従来公知であるから、その説明は省略する。
【００３１】
メモリコントローラ１４は、ＣＰＵ１２からのフェッチ要求を受け取ると、ＳＦＭ１６もしくはＲＡＭ１８から、ＣＰＵ１２が要求するプログラムデータを読み出してＣＰＵ１２に出力する。メモリコントローラ１４は、一方で、システムバス２０と双方向に接続され、他方では、ＳＦＭ１６およびＲＡＭ１８と各々双方向に接続されている。また、メモリコントローラ１４には、外部からシステムリセット信号Ｓｙｓ＿ＲＳＴが入力されている。
【００３２】
すなわち、ＣＰＵ１２とメモリコントローラ１４とは、システムバス２０を介して双方向に接続され、ＣＰＵ１２は、メモリコントローラ１４を介して、ＳＦＭ１６もしくはＲＡＭ１８からプログラムデータをフェッチし、実行する。
【００３３】
ここで、システムリセット信号Ｓｙｓ＿ＲＳＴは、メモリコントローラ１４をリセットする信号である。本実施形態の場合、システムリセット信号Ｓｙｓ＿ＲＳＴがアクティブ状態であるハイレベルの時、メモリコントローラ１４はリセットされる。
【００３４】
続いて、ＳＦＭ１６は、プログラムデータとその管理データとからなる、それぞれ所定バイト数の複数のブロックのデータが格納されているシリアル不揮発性メモリである。本実施形態の場合、ＳＦＭ１６は、５１２バイトのプログラムデータと１６バイトの管理データとからなる５２８バイトのデータによって各々のブロック（ページ）が構成されている。このＳＦＭ１６に格納されているデータによって、電子機器１０のシステムの機能が決定される。
【００３５】
上述するプログラムデータは、電源投入後に電子機器１０のシステムを起動させるプログラムデータ（起動プログラム）と、電子機器１０のシステム起動後に各種の処理を行う１ないし複数のプログラムデータ（処理プログラム）とを含む。
【００３６】
また、管理データは、ＳＦＭ１６から読み出されるプログラムデータの処理を制御する制御信号である。本実施形態の場合、管理データとして、フェッチ／ロード順序の情報と、フェーズ切替えフラグとを含む。フェッチ／ロード順序の情報は、ＳＦＭ１６から読み出されるブロックの順序を指定する。また、フェーズ切替えフラグは、起動プログラムの最後のブロックを表し、後述するフェーズの切替えを指定する。
【００３７】
なお、管理データは、上記のものに限らず、各種のデータを含めることができる。
【００３８】
最後に、ＲＡＭ１８は、この電子機器１０のシステムが起動された後、ＳＦＭ１６に格納されているプログラムデータが転送される揮発性のランダムアクセスメモリである。ＣＰＵ１２からメモリコントローラ１４に対して、ＲＡＭ１８に転送されているプログラムデータのフェッチ命令が与えられると、メモリコントローラ１４は、ＳＦＭ１６ではなく、ＲＡＭ１８をアクセスする。
【００３９】
前述の起動プログラムは、システムの起動時に１度だけ使用される。これに対して、処理プログラムは、電子機器１０の動作時に何回も繰り返し使用される。ＳＦＭ１６からＲＡＭ１８に転送されるプログラムデータは処理プログラムだけであり、起動プログラムや管理データはコピーされない。
【００４０】
次に、メモリコントローラ１４について詳細に説明する。
【００４１】
図２は、図１に示す電子機器で使用されているメモリコントローラの構成を表す概略図である。同図に示すメモリコントローラ１４は、システムバスＩ／Ｆ２２と、ＳＦＭ  Ｉ／Ｆ２４と、ＲＡＭ  Ｉ／Ｆ２６と、バッファ管理ロジック２８と、２ブロック（ページ）分のバッファ３０ａ、３０ｂと、プリフェッチロジック３２と、ダイレクト転送ロジック３４とによって構成されている。
【００４２】
なお、図２中、ＣＰＵリセット信号ＣＰＵ＿ＲＳＴ、システムリセット信号Ｓｙｓ＿ＲＳＴ、ウェイト信号ＷＡＩＴを除いて、実線の矢印はプログラムデータの流れを表し、点線の矢印は、管理データを含む制御信号の流れを表す。
【００４３】
システムバスＩ／Ｆ（インタフェイス）２２は、メモリコントローラ１４とシステムバス２０とを双方向に接続するためのインタフェイス回路である。システムバスＩ／Ｆ２２は、一方で、プログラムデータがシステムバス２０と双方向に接続されている。また、システムバスＩ／Ｆ２２は、他方では、プログラムデータおよび制御信号共にバッファ管理ロジック２８と双方向に接続されている。
【００４４】
ＳＦＭ  Ｉ／Ｆ２４は、メモリコントローラ１４とＳＦＭ１６とを双方向に接続するためのインタフェイス回路である。ＳＦＭ  Ｉ／Ｆ２４は、一方で、プログラムデータがＳＦＭ１６と双方向に接続されている。また、ＳＦＭ  Ｉ／Ｆ２４は、他方では、制御信号がプリフェッチロジック３２およびダイレクト転送ロジック３４と双方向に接続され、プログラムデータが２つのバッファ３０ａ、３０ｂに入力されている。
【００４５】
ＲＡＭ  Ｉ／Ｆ２６は、メモリコントローラ１４とＲＡＭ１８とを双方向に接続するためのインタフェイス回路である。ＲＡＭ  Ｉ／Ｆ２６は、一方で、プログラムデータがＲＡＭ１８と双方向に接続されている。また、ＲＡＭ  Ｉ／Ｆ２６は、他方では、制御信号がバッファ管理ロジック２８およびダイレクト転送ロジック３４と双方向に接続され、プログラムデータが２つのバッファ３０ａ、３０ｂから入力されると共に、バッファ管理ロジック２８と双方向に接続されている。
【００４６】
続いて、バッファ管理ロジック２８は、メモリコントローラ１４全体の動作を管理する制御装置である。バッファ管理ロジック２８には、さらに、プログラムデータが２つのバッファ３０ａ、３０ｂから入力され、制御信号がプリフェッチロジック３２およびダイレクト転送ロジック３４と各々双方向に接続されている。また、バッファ管理ロジック２８にはシステムリセット信号Ｓｙｓ＿ＲＳＴが入力され、バッファ管理ロジック２８からはＣＰＵリセット信号ＣＰＵ＿ＲＳＴおよびウェイト信号ＷＡＩＴが出力されている。
【００４７】
バッファ管理ロジック２８は、ＣＰＵ１２からのプログラムデータのフェッチ要求を受け取ると、ＣＰＵ１２が要求するプログラムデータが、バッファ３０ａ、３０ｂのいずれかに保持されている場合にはバッファ３０ａ、３０ｂのいずれかからプログラムデータをＣＰＵ１２に出力する。一方、バッファ３０ａ、３０ｂのいずれにも保持されておらず、ＲＡＭ１８にも転送されていない場合には、ＳＦＭ１６からバッファ３０ａもしくは３０ｂのいずれかにロードしてバッファ３０ａ、３０ｂのいずれかからＣＰＵ１２に出力する。また、ＲＡＭ１８に転送されている場合には、ＲＡＭ１８からプログラムデータを読み出してＣＰＵ１２に出力する。
【００４８】
２つのバッファ（バッファ１，２）３０ａ、３０ｂは、プリフェッチロジック３２もしくはダイレクト転送ロジック３４の制御に従って、ＳＦＭ１６から、ＳＦＭ  Ｉ／Ｆ２４を介して、所定バイト数のブロック単位で読み出されるプログラムデータを、それぞれブロック単位で保持する。
【００４９】
なお、バッファは、２ブロック分以上あれば良く、必要に応じて、何ブロック分のバッファを備えていても良い。
【００５０】
プリフェッチロジック３２は、バッファ管理ロジック２８から入力される制御信号およびＳＦＭ１６からＳＦＭ  Ｉ／Ｆ２４を介して入力される管理データに従って、ＳＦＭ  Ｉ／Ｆ２４およびバッファ３０ａ、３０ｂを制御し、ＳＦＭ１６からＳＦＭ  Ｉ／Ｆ２４を介して読み出されるプログラムデータのうち、起動プログラムのブロックを、新規データの書き込みが可能な状態となっているバッファ３０ａもしくはバッファ３０ｂのいずれかにロードする。
【００５１】
最後に、ダイレクト転送ロジック３４は、バッファ管理ロジック２８から入力される制御信号およびＳＦＭ１６からＳＦＭ  Ｉ／Ｆ２４を介して入力される管理データに従って、ＳＦＭ  Ｉ／Ｆ２４、ＲＡＭ  Ｉ／Ｆ２６およびバッファ３０ａ、３０ｂを制御し、ＳＦＭ１６から読み出されるプログラムデータのうち、処理プログラムのブロックをバッファ３０ａもしくはバッファ３０ｂのいずれかにロードし、バッファ３０ａ、３０ｂのいずれかからＲＡＭ１８に対して、バッファ３０ａ、３０ｂのいずれかにロードされた処理プログラムのブロックをＲＡＭ  Ｉ／Ｆ２６を介して転送（コピー）する。
【００５２】
次に、図３の状態遷移図、および、図４〜図９のタイミングチャートを参照しながら、メモリコントローラ１４を搭載する電子機器１０の動作を説明する。
【００５３】
図３の状態遷移図に示すように、電子機器１０の状態は、大別してフェーズ１〜３に分類される。フェーズ１は、電子機器１０のシステム起動時（ステートＳ０〜Ｓ３）の状態を表す。一方、フェーズ３は、ＳＦＭ１６からＲＡＭ１８へのデータ転送時（ステートＳ７〜Ｓ９）の状態を表す。そして、フェーズ２は、フェーズ１からフェーズ３への状態遷移時（ステートＳ４〜Ｓ６）の状態を表す。
【００５４】
まず、ＳＦＭ１６からバッファ３０ａ、３０ｂへのプログラムデータのロード（読み出し）に比べて、ＣＰＵ１２によるプログラムデータのフェッチ（取り込み）および実行の方が遅い場合の電子機器１０の動作を説明する。
【００５５】
フェーズ１における動作について説明する。
【００５６】
電子機器１０は、電源投入後、図３に示すように、ステートＳ０の状態になる。
【００５７】
ステートＳ０では、図４に示すように、システムリセット信号Ｓｙｓ＿ＲＳＴがアクティブ状態のハイレベルになる。この時、メモリコントローラ１４は停止状態であり、ＣＰＵリセット信号ＣＰＵ＿ＲＳＴおよびウェイト信号ＷＡＩＴは、いずれもアクティブ状態のハイレベルとなる。従って、ＣＰＵ１２もメモリコントローラ１４によって停止状態とされ、電子機器１０はアイドル状態となる。
【００５８】
続いて、システムリセット信号Ｓｙｓ＿ＲＳＴが非アクティブ状態のローレベルになると、メモリコントローラ１４は動作状態となる。メモリコントローラ１４が動作状態になると、図４に示すように、バッファ管理ロジック２８からプリフェッチロジック３２に対して最初の制御信号ＬＳが出力される。これにより、図３に示すように、電子機器１０は、ステートＳ１の状態に遷移する。
【００５９】
ここで、制御信号ＬＳは、ＳＦＭ１６から１ブロック分のデータを読み出し、そのプログラムデータを２つのバッファ３０ａ、３０ｂのいずれかにロードするように、バッファ管理ロジック２８からプリフェッチロジック３２に対して通知する信号である。
【００６０】
ステートＳ１において、プリフェッチロジック３２は、制御信号ＬＳを受け取ると、ＳＦＭ１６からＳＦＭ  Ｉ／Ｆ２４を介して最初のブロック０のデータを読み出す。そして、ブロック０の起動プログラムを２つのバッファ３０ａ、３０ｂのいずれか空いている方、例えばバッファ３０ａに格納すると共に、その管理データであるフェッチ／ロード順序の情報およびフェーズ切替えフラグを保持する。
【００６１】
すなわち、ステートＳ１では、図３に示すように、一方のバッファ３０ａはロード中で、もう一方のバッファ３０ｂはロード待機中となる。なお、以下の説明においても、図３における各ステートＳ１〜Ｓ９には、バッファ３０ａ、３０ｂの状態が示されている。ただし、図３中、上側がバッファ３０ａで、下側がバッファ３０ｂの状態を固定的に表すわけではなく、状況に応じて両者の状態は適宜入れ替わる。
【００６２】
その後、バッファ３０ａへのブロック０のロードが完了すると、図４に示すように、プリフェッチロジック３２からバッファ管理ロジック２８に対して制御信号ＬＣが出力される。これにより、電子機器１０はステートＳ２の状態に遷移する。
【００６３】
ここで、制御信号ＬＣは、起動プログラムの最後のブロックではない１ブロック分のデータをＳＦＭ１６から読み出し、バッファ３０ａ、３０ｂへのロードが完了したことを、プリフェッチロジック３２からバッファ管理ロジック２８に対して通知する信号である。
【００６４】
ステートＳ２において、バッファ管理ロジック２８は、制御信号ＬＣを受け取ると、ＣＰＵリセット信号ＣＰＵ＿ＲＳＴおよびウェイト信号ＷＡＩＴを非アクティブ状態であるローレベルにする。これにより、ＣＰＵ１２は動作状態となり、バッファ３０ａへのロードが完了したブロック０の起動プログラムを１ないし数バイト単位で順次フェッチし、実行する（図４では、この時のＣＰＵ１２の状態を下向きの矢印で示す）。
【００６５】
同時に、バッファ管理ロジック２８からプリフェッチロジック３２に対して２番目の制御信号ＬＳが与えられる。プリフェッチロジック３２は、制御信号ＬＳを受け取ると、ステートＳ１で保持されたフェッチ／ロード順序の情報を参照して、ＳＦＭ１６から２番目のブロック１を読み出す。そして、ブロック１の起動プログラムを、もう一方の空いているバッファ３０ｂにロードすると共に、その管理データを保持する。
【００６６】
すなわち、ステートＳ２では、ＣＰＵ１２がバッファ３０ａにロードされたブロック０をフェッチ（フェッチ＆実行）中で、バッファ３０ｂにブロック１をロード中である。ステートＳ１の場合と同様に、ブロック１の読み出しが完了すると、プリフェッチロジック３２からバッファ管理ロジック２８に対して制御信号ＬＣが与えられ、電子機器１０はステートＳ３の状態に遷移する。
【００６７】
なお、以下の説明では繰り返しの説明は省略するが、プリフェッチロジック３２およびダイレクト転送ロジック３４は、フェッチ／ロード順序の情報を参照して、ＳＦＭ１６から読み出すブロックの順序を決定する。
【００６８】
一方、ステートＳ２において、ＣＰＵ１２が、ブロック０のフェッチを完了した後、ＣＰＵ１２が、まだロードが完了していないブロック１のフェッチを要求すると、バッファ管理ロジック２８に対して制御信号ＭＳが与えられる。これにより、電子機器１０は、ステートＳ１の状態に遷移する。なお、ステートＳ２からＳ１の状態に遷移する時のタイミングは図５に示されている。この場合の動作説明は後述する。
【００６９】
ここで、制御信号ＭＳは、ＣＰＵ１２が、バッファ３０ａ、３０ｂへのロードが完了しておらず、かつ、ＲＡＭ１８にも転送されていないプログラムデータのフェッチを要求する時に、バッファ管理ロジック２８内で発生する信号である。
【００７０】
ステートＳ３では、引き続きＣＰＵ１２がバッファ３０ａにロードされたブロック０をフェッチ中で、バッファ３０ｂにロードされたブロック１はフェッチ待機中である。ＣＰＵ１２がバッファ３０ａにロードされたブロック０のフェッチを完了すると、バッファ管理ロジック２８からプリフェッチロジック３２に対して次の制御信号ＬＳが与えられ、電子機器１０の状態は再びステートＳ２に遷移する。
【００７１】
これ以後は、起動プログラムが格納されている最後のブロックの読み出しが完了するまで上記の動作を繰り返し、電子機器１０は、ステートＳ２とステートＳ３の状態を交互に遷移する。
【００７２】
本実施形態では、起動プログラムが格納されている最後のブロックはブロック２である。従って、ブロック２のフェーズ切替えフラグはアクティブ状態、例えばハイレベルである。図４に示すように、プリフェッチロジック３２は、ブロック２のロードが完了すると、フェーズ切替えフラグがアクティブ状態であることから、バッファ管理ロジック２８に対して、制御信号ＬＣではなく制御信号ＬＬＣを出力する。
【００７３】
ここで、制御信号ＬＬＣは、起動プログラムが格納されている最後のブロック（本実施形態の場合、ブロック２）のロードが完了したことを、プリフェッチロジック３２からバッファ管理ロジック２８に対して通知する信号である。
【００７４】
図３に示すように、ステートＳ１またはＳ２で１ブロック分の起動プログラムをロードした時に、制御信号ＬＬＣが出力されると、電子機器１０の状態はフェーズ１からフェーズ２に切り替わる。より詳しくは、電子機器１０は、制御信号ＬＬＣがステートＳ１で出力されるとフェーズ２のステートＳ４の状態に遷移し、ステートＳ２で出力されるとフェーズ２のステートＳ５の状態に遷移する。
【００７５】
なお、電子機器１０が、ステートＳ１からＳ４の状態に遷移するのは、ＳＦＭ１６からバッファ３０ａ、３０ｂへのロードに比べて、ＣＰＵ１２によるフェッチの方が早い場合である。これに対し、電子機器１０が、ステートＳ２からＳ５の状態に遷移するのは、ＳＦＭ１６からバッファ３０ａ、３０ｂへのロードに比べて、ＣＰＵ１２によるフェッチの方が遅い場合である。
【００７６】
次に、フェーズ２における動作について説明する。
【００７７】
上記の通りであるから、ここでは、電子機器１０が、ステートＳ２からＳ５の状態に遷移する場合を説明する。前述の通り、フェーズ１のステートＳ２で制御信号ＬＬＣが出力されると、電子機器１０は、フェーズ２のステートＳ５の状態に遷移する。
【００７８】
ステートＳ５では、図４に示すように、ＣＰＵ１２は、バッファ３０ｂにロードされたブロック１をフェッチ中で、バッファ３０ａにロードされた、起動プログラムの最後のブロック２はフェッチ待機中の状態である。ＣＰＵ１２が、ブロック１のフェッチを完了すると、バッファ管理ロジック２８からダイレクト転送ロジック３４に対して制御信号ＬＳが出力される。これにより、電子機器１０はステートＳ４の状態に遷移する。
【００７９】
ステートＳ４では、ＣＰＵ１２が、バッファ３０ａにロードされたブロック２をフェッチ中である。また、ダイレクト転送ロジック３４は、制御信号ＬＳを受け取って、もう一方のバッファ３０ｂに、その次のブロック３のロードを開始し、そのロードが完了すると、バッファ管理ロジック２８に対して制御信号ＬＣを出力する。これにより、電子機器１０は、ステートＳ６の状態に遷移する。
【００８０】
一方、ステートＳ４において、ＣＰＵ１２が、起動プログラムの最後のブロック２のフェッチを完了した後、バッファ管理ロジック２８内で制御信号ＭＳが発生すると、電子機器１０は、フェーズ３のステートＳ７の状態に遷移する。なお、ステートＳ４からＳ７の状態に遷移する時のタイミングは図５に示されている。ステートＳ７の動作説明は後述する。
【００８１】
続く、ステートＳ６では、ＣＰＵ１２は、引き続きバッファ３０ａにロードされたブロック２をフェッチ中である。また、ダイレクト転送ロジック３４は、バッファ３０ｂにロードされたブロック３を、ＲＡＭ  Ｉ／Ｆ２６を介してＲＡＭ１８に転送（ストア（格納））中であり、転送が完了すると、バッファ管理ロジック２８に対して制御信号ＳＣを出力する。これにより、電子機器１０は、再びステートＳ４の状態に遷移する。
【００８２】
ここで、制御信号ＳＣは、バッファ３０ａ、３０ｂにロードされたブロックの処理プログラムをＲＡＭ１８に転送することが完了したことを、ダイレクト転送ロジック３４からバッファ管理ロジック２８に対して通知する信号である。
【００８３】
一方、ステートＳ６において、ＣＰＵ１２が、ブロック２のフェッチを完了し、バッファ管理ロジック２８からダイレクト転送ロジック３４に対して次の制御信号ＬＳが与えられると、電子機器１０は、フェーズ３のステートＳ８の状態に遷移する。なお、図４では、ステートＳ６からＳ８の状態に遷移する時のタイミングは示されていない。ステートＳ８の動作説明は後述する。
【００８４】
これ以後は、ＣＰＵ１２が、起動プログラムが格納されている最後のブロック２のフェッチを完了するまで上記の動作を繰り返し、電子機器１０は、ステートＳ４とステートＳ６の状態を交互に遷移する。
【００８５】
最後に、フェーズ３における動作について説明する。
【００８６】
前述の通り、フェーズ２のステートＳ６において、バッファ管理ロジック２８からダイレクト転送ロジック３４に対して制御信号ＬＳが出力されると、電子機器１０は、フェーズ３のステートＳ８の状態に遷移する。
【００８７】
ステートＳ８において、ダイレクト転送ロジック３４は、制御信号ＬＳを受け取ると、図６に示すように、例えばバッファ３０ｂにブロック５の処理プログラムのロードを開始する。
【００８８】
また同時に、ダイレクト転送ロジック３４によって、バッファ３０ａにロードされたブロック４の処理プログラムが、ＲＡＭ  Ｉ／Ｆ２６を介してＲＡＭ１８に転送（ストア）される。そして、ＲＡＭ１８への転送が完了すると、ダイレクト転送ロジック３４からバッファ管理ロジック２８に対して制御信号ＳＣが出力される。これにより、電子機器１０は、ステートＳ７の状態に遷移する。
【００８９】
ステートＳ７では、ダイレクト転送ロジック３４によって、例えばバッファ３０ｂにブロック５の処理プログラムがロード中で、バッファ３０ａは転送が完了して次の処理プログラムのロード待機中である。ダイレクト転送ロジック３４は、バッファ３０ｂにブロック５のロードが完了すると、バッファ管理ロジック２８に対して制御信号ＬＣを出力する。これにより、電子機器１０は、再びステートＳ８の状態に遷移する。
【００９０】
これ以後は、図６に示すように、基本的に、ＳＦＭ１６に格納されている全ての処理プログラムをＲＡＭ１８に転送することを完了するまで、電子機器１０は、ステートＳ７とステートＳ８の状態を交互に遷移する。
【００９１】
ＣＰＵ１２は、メモリコントローラ１４を介して、ＲＡＭ１８に転送された処理プログラムをＲＡＭ１８からフェッチするが、ＲＡＭ１８に転送されていない処理プログラムは、ＳＦＭ１６からバッファ３０ａ、３０ｂにロードしてバッファ３０ａ、３０ｂからフェッチするか、バッファ３０ａ、３０ｂに既にロードされている処理プログラムをフェッチする。
【００９２】
ステートＳ７において、例えば図７左側に点線の楕円で示すように、ブロック６がロード中の時に、ＣＰＵ１２がブロック８のフェッチを要求して、バッファ管理ロジック２８内で制御信号ＭＳが発生すると、バッファ３０ａにロード中であるブロック６のロードが途中で停止状態とされ、ＣＰＵ１２の要求するブロック８が優先的にバッファ３０ｂにロードされる（入替え）。
【００９３】
この時、ウェイト信号ＷＡＩＴがアクティブ状態とされ、ＣＰＵ１２は停止状態になる（図７では、この時のＣＰＵ１２の状態を下向きの矢印がない状態で示す）。ダイレクト転送ロジック３４によって、バッファ３０ｂにブロック８のロードが完了すると、ダイレクト転送ロジック３４からバッファ管理ロジック２８に対して制御信号ＬＣが出力される。これにより、電子機器１０は、ステートＳ８の状態に遷移する。
【００９４】
ステートＳ８において、バッファ管理ロジック２８は、制御信号ＬＣを受け取ると、ウェイト信号ＷＡＩＴを非アクティブ状態とする。これにより、ＣＰＵ１２は動作を再開し、バッファ３０ｂにロードされたブロック８の処理プログラムのフェッチを開始する。
【００９５】
同時に、ダイレクト転送ロジック３４は、バッファ３０ｂにロードされたブロック８の処理プログラムをＲＡＭ１８に転送すると共に、バッファ３０ａへのブロック６のロードを再開する。そして、ダイレクト転送ロジック３４は、ブロック６のロードが完了すると、バッファ管理ロジック２８に対して制御信号ＬＣを出力する。これにより、電子機器１０は、ステートＳ９の状態に遷移する。
【００９６】
ステートＳ９では、バッファ３０ｂからＲＡＭ１８に対してブロック８が転送中で、ブロック３０ａにロードされたブロック６がＲＡＭ１８への転送を待機中である。ブロック８のＲＡＭ１８への転送が完了すると、ダイレクト転送ロジック３４は、バッファ管理ロジック２８に対して制御信号ＳＣを出力する。これにより、電子機器１０は、再びステートＳ８の状態に遷移する。
【００９７】
これ以後の動作は、前述の通りである。
【００９８】
また、ステートＳ７において、例えば図７右側に点線の楕円で示すように、バッファ３０ｂにブロック９をロード中の時に、ＣＰＵ１２が、そのブロック９のフェッチを要求して制御信号ＭＳが発生すると、ウェイト信号ＷＡＩＴが非アクティブ状態とされてＣＰＵ１２が停止状態とされ、バッファ３０ｂにロード中であるブロック９のロードが続行される（待機）。
【００９９】
その後、バッファ３０ｂにブロック９のロードが完了すると、ダイレクト転送ロジック３４からバッファ管理ロジック２８に対して制御信号ＬＣが出力される。これにより、電子機器１０は、ステートＳ８の状態に遷移する。
【０１００】
ステートＳ８において、バッファ管理ロジック２８は、制御信号ＬＣを受け取ると、ウェイト信号ＷＡＩＴを非アクティブ状態とする。これにより、ＣＰＵ１２は動作を再開し、バッファ３０ｂにロードされたブロック９の処理プログラムのフェッチを開始する。
【０１０１】
これ以後の動作は、前述の通りである。
【０１０２】
また、ステートＳ８において、例えば図８左側に点線の楕円で示すように、ブロック６が転送中で、ブロック７がロード中の時に、ＣＰＵ１２がブロック８のフェッチを要求して、バッファ管理ロジック２８内で制御信号ＭＳが発生すると、バッファ３０ｂにロード中であるブロック７のロードが停止状態とされ、ＣＰＵ１２の要求するブロック８が優先的にバッファ３０ａにロードされる（入替え）。
【０１０３】
この時、バッファ管理ロジック２８からＣＰＵ１２に対してアクティブ状態のハイレベルのウェイト信号ＷＡＩＴが出力され、ＣＰＵ１２は停止状態になる。ダイレクト転送ロジック３４によって、バッファ３０ａにブロック８のロードが完了すると、ダイレクト転送ロジック３４からバッファ管理ロジック２８に対して制御信号ＬＣが出力される。これにより、電子機器１０は、ステートＳ８の状態に遷移する。
【０１０４】
ステートＳ８において、バッファ管理ロジック２８は、制御信号ＬＣを受け取ると、ウェイト信号ＷＡＩＴを非アクティブ状態とする。これにより、ＣＰＵ１２は動作を再開し、バッファ３０ａにロードされたブロック８の処理プログラムのフェッチを開始する。
【０１０５】
同時に、ダイレクト転送ロジック３４は、バッファ３０ａにロードされたブロック８の処理プログラムをＲＡＭ１８に転送すると共に、バッファ３０ｂへのブロック７のロードを再開する。そして、ブロック８の転送が完了すると、ダイレクト転送ロジック３４は、バッファ管理ロジック２８に対して制御信号ＳＣを出力する。これにより、電子機器１０は、ステートＳ７の状態に遷移する。
【０１０６】
ステートＳ７において、ダイレクト転送ロジック３４は、ブロック７のロードが完了すると、バッファ管理ロジック２８に対して制御信号ＬＣを出力する。これにより、電子機器１０は、再びステートＳ８の状態に遷移する。
【０１０７】
これ以後の動作は、前述の通りである。
【０１０８】
また、ステートＳ８において、例えば図８右側に点線の楕円で示すように、ブロック９がロード中で、ブロック７が転送中の時に、ＣＰＵ１２が、ロード中のブロック９のフェッチを要求して制御信号ＭＳが発生すると、ウェイト信号ＷＡＩＴがアクティブ状態とされてＣＰＵ１２が停止状態とされ、バッファ３０ａにロード中であるブロック９のロードが続行される。
【０１０９】
その後、バッファ３０ａへのブロック９のロードが完了すると、ダイレクト転送ロジック３４からバッファ管理ロジック２８に対して制御信号ＬＣが出力される。これにより、電子機器１０は、ステートＳ８の状態に遷移する。
【０１１０】
ステートＳ８において、バッファ管理ロジック２８は、制御信号ＬＣを受け取ると、ウェイト信号ＷＡＩＴを非アクティブ状態とする。これにより、ＣＰＵ１２は動作を再開し、バッファ３０ａにロードされたブロック９の処理プログラムのフェッチを開始する。
【０１１１】
これ以後の動作は、前述の通りである。
【０１１２】
また、ステートＳ９において、例えば図９左側に点線の楕円で示すように、ブロック５が転送中で、ブロック６が転送待機中の時に、ＣＰＵ１２がブロック８のフェッチを要求して、バッファ管理ロジック２８内で制御信号ＭＳが発生すると、ウェイト信号ＷＡＩＴがアクティブ状態とされてＣＰＵ１２が停止状態とされ、転送中であるブロック５の転送が続行される。
【０１１３】
すなわち、この時点では、２つのバッファ３０ａ、３０ｂ共に処理プログラムがロードされているため、空きのバッファが存在しない。このため、転送中のブロック５の転送が続行される。
【０１１４】
ダイレクト転送ロジック３４によって、ブロック５の転送が完了すると、ダイレクト転送ロジック３４からバッファ管理ロジック２８に対して制御信号ＳＣが出力される。これにより、電子機器１０は、ステートＳ８の状態に遷移する。
【０１１５】
ステートＳ８において、ダイレクト転送ロジック３４は、バッファ３０ａにロードされたブロック６の処理プログラムをＲＡＭ１８に転送すると共に、空き状態となったバッファ３０ｂにブロック８のロードを開始する（入替え）。そして、ブロック６の転送が完了すると、ダイレクト転送ロジック３４は、バッファ管理ロジック２８に対して制御信号ＳＣを出力する。これにより、電子機器１０は、ステートＳ７の状態に遷移する。
【０１１６】
ステートＳ７において、ダイレクト転送ロジック３４は、ブロック８のロードが完了すると、バッファ管理ロジック２８に対して制御信号ＬＣを出力する。これにより、電子機器１０は、再びステートＳ８の状態に遷移する。
【０１１７】
ステートＳ８において、バッファ管理ロジック２８は、制御信号ＬＣを受け取ると、ウェイト信号ＷＡＩＴを非アクティブ状態とする。これにより、ＣＰＵ１２は動作を再開し、バッファ３０ｂにロードされたブロック８の処理プログラムのフェッチを開始する。
【０１１８】
これ以後の動作は、前述の通りである。
【０１１９】
また、ステートＳ８において、例えば図９右側に点線の楕円で示すように、ブロック８が転送中で、ブロック７が転送待機中の時に、ＣＰＵ１２が、既にバッファ３０ａへのロードが完了しているブロック７のフェッチを要求すると、ＣＰＵ１２は、バッファ３０ａにロードされているブロック７の処理プログラムをフェッチする（バッファからフェッチ）。
【０１２０】
その後、ブロック８の転送が完了すると、ダイレクト転送ロジック３４からバッファ管理ロジック２８に対して制御信号ＳＣが出力される。これにより、電子機器１０は、ステートＳ８の状態に遷移する。
【０１２１】
ステートＳ８では、バッファ管理ロジック２８は、制御信号ＳＣを受け取ると、ダイレクト転送ロジック３４に対して次の制御信号ＬＳを出力する。
【０１２２】
ダイレクト転送ロジック３４は、バッファ３０ａにロードされたブロック７の処理プログラムをＲＡＭ１８に転送すると共に、制御信号ＬＳを受け取ると、バッファ３０ｂへのブロック９のロードを開始する。そして、ブロック７の転送が完了すると、ダイレクト転送ロジック３４は、バッファ管理ロジック２８に対して制御信号ＳＣを出力する。これにより、電子機器１０は、ステートＳ７の状態に遷移する。
【０１２３】
これ以後の動作は、前述の通りである。
【０１２４】
次に、図５のタイミングチャートを参照して、ＳＦＭ１６からバッファ３０ａ、３０ｂへのプログラムデータのロードに比べて、ＣＰＵ１２によるプログラムデータのフェッチおよび実行の方が早い場合の電子機器１０の動作を簡単に説明する。
【０１２５】
ステートＳ０およびＳ１は上記と同じである。
【０１２６】
ステートＳ２では、図５に示すように、ＣＰＵ１２がバッファ３０ａに格納されたブロック０の起動プログラムをフェッチ中で、もう一方のバッファ３０ｂはブロック１をロード中である。
【０１２７】
ステートＳ２において、バッファ３０ｂにブロック１のロードが完了する前に、ＣＰＵ１２がバッファ３０ａにロードされたブロック０のフェッチを完了し、その次のバッファ３０ｂにロード中のブロック１のフェッチを要求すると、バッファ管理ロジック２８内で制御信号ＭＳが発生する。これにより、図３および図５に示すように、電子機器１０はステートＳ１の状態に遷移する。
【０１２８】
ステートＳ１において、バッファ管理ロジック２８は、制御信号ＭＳを受け取ると、ウェイト信号ＷＡＩＴをアクティブ状態とする。これにより、ＣＰＵ１２は停止状態となる。
【０１２９】
一方、プリフェッチロジック３２は、バッファ３０ｂへのブロック１のロードが完了すると、バッファ管理ロジック２８に対して制御信号ＬＣを出力する。これにより、電子機器１０は、再びステートＳ２の状態に遷移する。
【０１３０】
ステートＳ２において、バッファ管理ロジック２８は、制御信号ＬＣを受け取ると、ウェイト信号ＷＡＩＴを非アクティブ状態とする。これにより、ＣＰＵ１２は再び動作状態となり、バッファ３０ｂにロードが完了したブロック１の起動プログラムのフェッチを開始する。また同時に、バッファ管理ロジック２８は、プリフェッチロジック３２に対して次の制御信号ＬＳを出力する。
【０１３１】
これ以後は、起動プログラムが格納されている最後のブロックの読み出しが完了するまで上記の動作を繰り返し、電子機器１０は、ステートＳ１とＳ２の状態を交互に遷移する。
【０１３２】
ここで、ステートＳ１において、バッファ３０ａにブロック２のロードが完了すると、プリフェッチロジック３２からバッファ管理ロジック２８に対して制御信号ＬＬＣが出力される。これにより、電子機器１０は、フェーズ２のステートＳ４の状態に遷移する。
【０１３３】
ステートＳ４において、バッファ管理ロジック２８は、制御信号ＬＬＣを受け取ると、ウェイト信号ＷＡＩＴを非アクティブ状態とする。これにより、ＣＰＵ１２は動作状態となり、バッファ３０ａにロードが完了している起動プログラムの最後のブロック２のフェッチを開始する。また同時に、バッファ管理ロジック２８は、ダイレクト転送ロジック３４に対して制御信号ＬＳを出力する。
【０１３４】
ダイレクト転送ロジック３４は、制御信号ＬＳを受け取ると、バッファ３０ｂにブロック３のロードを開始する。バッファ３０ｂにブロック３のロードが完了する前に、ＣＰＵ１２がバッファ３０ａにロードされたブロック２のフェッチを完了し、ロード中のブロック３のフェッチを要求して、バッファ管理ロジック２８内で制御信号ＭＳが発生すると、電子機器１０は、ステートＳ７に遷移する。
【０１３５】
これ以後の動作は、前述の通りである。
【０１３６】
上記一実施形態のように、本発明のメモリコントローラを搭載する電子機器では、ダイレクトメモリ転送機構により、あらかじめ決められた順序でＳＦＭからＲＡＭに処理プログラムを転送しつつ、ＣＰＵから、まだＲＡＭに転送されていない処理プログラムのフェッチを要求された場合には、バッファ管理機構によりバッファ状態を制御し、そのフェッチ要求のあったブロックを優先的にバッファへロードするとともに、ＲＡＭへ転送する。
【０１３７】
従って、本発明のメモリコントローラを搭載する電子機器では、電源投入後、起動プログラムの最初の１ブロックがバッファにロードされた時点から、ＣＰＵは起動プログラムをフェッチし、実行を開始することができる。これにより、ＳＦＭに格納されているプログラムのフェッチ順序を厳密に分析する必要も、プログラム全体がＲＡＭにコピーされるまで実行開始を待つ必要もなく、システムの起動時間を大幅に短縮することができる。
【０１３８】
また、まだＲＡＭに転送されていない処理プログラムのブロックのフェッチ時は、従来のキャッシュ機構を使用する電子機器において、キャッシュミスヒット時と同等のアクセス遅延が発生する。しかし、従来のキャッシュ機構を使用する電子機器とは異なり、本発明のメモリコントローラを搭載する電子機器では、一度フェッチした処理プログラムはＲＡＭに転送されるので、２度ミスすることはない。
【０１３９】
また、ＣＰＵからのフェッチとは独立にダイレクトメモリ転送機構によりＲＡＭに転送するので、一度目のミスヒットの確率は、従来のキャッシュ機構を使用する場合と最悪でも同等であり、通常は、従来よりも小さくすることができる。
【０１４０】
以下、一例を挙げて、本発明のメモリコントローラと従来のメモリコントローラとの対比説明を行う。
【０１４１】
図１０は、従来の電子機器の動作を表す一例のタイミングチャートである。同図は、従来のプリフェッチ／キャッシュ機構を有するメモリコントローラを搭載する電子機器において、図６に示す本実施形態の電子機器１０と同等の動作を表したものである。図１０では、シリアルメモリコントローラは、１つのバッファ（キャッシュメモリ）と、バッファ管理ロジックと、プリフェッチロジックとを備えている。
【０１４２】
図１０に示すように、従来のメモリコントローラでは、プリフェッチロジックにより、例えばバッファにブロック４のロードが完了すると、バッファ管理ロジックに対して制御信号ＬＣが出力される。その後、ＣＰＵからブロック４のフェッチ要求があると、バッファ管理ロジックは、バッファにロードされたブロック４のプログラムをＣＰＵに対して出力し、ＣＰＵはこれをフェッチして実行する。
【０１４３】
一方、ＣＰＵから、例えばまだバッファにロードされていないブロック７のフェッチ要求があると、バッファ管理ロジックは、ＣＰＵに対してアクティブ状態のハイレベルのウェイト信号ＷＡＩＴを出力する。これにより、ＣＰＵは停止状態となる。そして、プリフェッチロジックがバッファにブロック７のロードを完了すると、バッファ管理ロジックに対して制御信号ＬＣが出力される。
【０１４４】
バッファ管理ロジックは、制御信号ＬＣを受け取ると、ウェイト信号ＷＡＩＴを非アクティブ状態であるローレベルとする。これにより、ＣＰＵは動作状態となり、バッファにロードされたブロック７のプログラムをフェッチし、実行する。
【０１４５】
このように、従来のメモリコントローラでは、ＣＰＵからフェッチ要求があった時点でＳＦＭの指定ブロックをバッファにロードする。このため、図１０に示すように、キャッシュミスヒット時にはデータへのアクセス時間が長くなる。
【０１４６】
なお、本発明のメモリコントローラおよびこれを搭載する電子機器について、一例を挙げて説明したが、本発明は、上記一実施形態に限定されない。
【０１４７】
例えば、シリアル不揮発性メモリは、ＮＡＮＤ型、ＡＮＤ型などの各種形態のフラッシュメモリに限らず、バイト単位でのランダムアクセスが可能ではなく、ブロックを単位としてデータへのアクセスがシリアルに行われる半導体メモリであればどのようなものにも適用可能である。また、シリアル不揮発性メモリのブロックサイズやその容量なども何ら制限はない。
【０１４８】
また、ＣＰＵリセット信号ＣＰＵ＿ＲＳＴ、システムリセット信号Ｓｙｓ＿ＲＳＴ、ウェイト信号ＷＡＩＴのアクティブ状態はハイレベルに限らず、逆にローレベルでも良いし、それぞれ異なるレベルであっても良い。
【０１４９】
また、本発明のメモリコントローラの構成要素である、バッファ管理ロジック、プリフェッチロジック、ダイレクト転送ロジックの具体的な構成も何ら制限はなく、同様の機能を実現する各種構成の回路が利用可能である。本発明のメモリコントローラを搭載する電子機器は、基本的に各種のプログラムが格納されたシリアル不揮発性メモリと、そのプログラムがコピーされるランダムアクセスメモリとを備えるものである。
【０１５０】
本発明は、基本的に以上のようなものである。
以上、本発明のメモリコントローラおよび電子機器について詳細に説明したが、本発明は上記実施形態に限定されず、本発明の主旨を逸脱しない範囲において、種々の改良や変更をしてもよいのはもちろんである。
【図面の簡単な説明】
【０１５１】
【図１】本発明のメモリコントローラを搭載する電子機器の構成を表す一実施形態の概略図である。
【図２】図１に示す電子機器で使用されているメモリコントローラの構成を表す概略図である。
【図３】図１に示す電子機器の動作を表す状態遷移図である。
【図４】図１に示す電子機器の動作を表す一例のタイミングチャートである。
【図５】図１に示す電子機器の動作を表す一例のタイミングチャートである。
【図６】図１に示す電子機器の動作を表す一例のタイミングチャートである。
【図７】図１に示す電子機器の動作を表す一例のタイミングチャートである。
【図８】図１に示す電子機器の動作を表す一例のタイミングチャートである。
【図９】図１に示す電子機器の動作を表す一例のタイミングチャートである。
【図１０】従来の電子機器の動作を表す一例のタイミングチャートである。
【符号の説明】
【０１５２】
１０  電子機器
１２  ＣＰＵ
１４  メモリコントローラ
１６  シリアルフラッシュメモリ（ＳＦＭ）
１８  ランダムアクセスメモリ（ＲＡＭ）
２０  システムバス
２２  システムバスＩ／Ｆ
２４  ＳＦＭ  Ｉ／Ｆ
２６  ＲＡＭ  Ｉ／Ｆ
２８  バッファ管理ロジック
３０ａ、３０ｂ  バッファ
３２  プリフェッチロジック
３４  ダイレクト転送ロジック
Ｓｙｓ＿ＲＳＴ  システムリセット信号
ＣＰＵ＿ＲＳＴ  ＣＰＵリセット信号
【図１】
2007219581.tif 000003
【図２】
2007219581.tif 000004
【図３】
2007219581.tif 000005
【図４】
2007219581.tif 000006
【図５】
2007219581.tif 000007
【図６】
2007219581.tif 000008
【図７】
2007219581.tif 000009
【図８】
2007219581.tif 000010
【図９】
2007219581.tif 000011
【図１０】
2007219581.tif 000012