(57)【要約】【課題】ＮＡＮＤフラッシュ等のシーケンシャル・メモリデバイスにブートコードを格納したシステムのブートアップ方法を提供する。【解決手段】少なくともリセット開放直後においてＲＡＭ２３にリセットアドレスを割り当て、シーケンシャルアクセスの必要な不揮発性メモリデバイス（ＮＡＮＤフラッシュ）２２にブートコードを格納する。リセット開放直後、ＮＡＮＤフラッシュ２２に格納したブートコードを、主記憶／ＮＡＮＤフラッシュ転送ユニット２０により、ＲＡＭ２３に転送する。ウエイト生成ユニット１３は、転送ユニット２０の進捗に従い、必要に応じてＣＰＵ１１のリセットアドレスへの命令フェッチ、およびそれに続く命令フェッチに対してウエイトを生成する。ＣＰＵ１１の命令フェッチに先立って、ＮＡＮＤフラッシュ２２からＲＡＭ２３へブートコードを転送することを実現し、ブートＲＯＭを別途必要としないブートアップを可能にする。【選択図】  図１
2005010942.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、
少なくともリセット開放時においてリセットアドレスが割り当てられているランダムアクセス・メモリと、
ブートコードを格納した不揮発性のシーケンシャルアクセス・メモリと、
リセット開放後、前記シーケンシャルアクセス・メモリに格納されたブートコードをシーケンシャルに前記ランダムアクセス・メモリに転送するブートコード転送ユニットと、
前記ブートコード転送ユニットによる転送の進捗に従い、前記ＣＰＵのリセットアドレスへの命令フェッチに対するウエイト挿入を行うとともに、必要に応じて他の命令フェッチに対してもウエイト挿入を行うウエイト生成ユニットと、
を備える装置。
【請求項２】
前記ウエイト生成ユニットは、所定量のブートコードの転送が完了するまで、前記ＣＰＵのリセットアドレスへの命令フェッチに対してウエイト挿入を行う、請求項１に記載の装置。
【請求項３】
前記ウエイト生成ユニットは、前記ＣＰＵの発行する命令フェッチのアドレスと、前記ブートコード転送ユニットが転送するアドレスを監視し、
前記ＣＰＵの発行する命令フェッチのアドレスが、前記ブートコード転送ユニットによる転送が完了していないブートコードのアドレスである場合に、前記アドレスのブートコードの転送が完了するまで、前記ＣＰＵに対してウエイト挿入を行う請求項１に記載の装置。
【請求項４】
前記ランダムアクセス・メモリは、前記ＣＰＵと同一のＬＳＩパッケージに封じられているオンチップメモリである請求項１に記載の装置。
【請求項５】
前記ランダムアクセス・メモリは、前記ＣＰＵのキャッシュメモリとして使用するように構成されたメモリである請求項１に記載の装置。
【請求項６】
前記ウエイト生成ユニットは、前記ＣＰＵと外部バスとを接続するバス制御ユニット内に設けられている、請求項１から４のいずれかに記載の装置。
【請求項７】
前記シーケンシャルアクセス・メモリは、前記外部バスに接続されている請求項６に記載の装置。
【請求項８】
前記シーケンシャルアクセス・メモリは、ＮＡＮＤ型フラッシュメモリである請求項７に記載の装置。
【請求項９】
前記ランダムアクセス・メモリは、前記外部バスとは異なるバスに接続されている請求項７または８に記載の装置。
【請求項１０】
前記シーケンシャルアクセス・メモリは、前記ブートコードに加え、装置の動作を制御するファームウェアを格納している請求項１から９のいずれかに記載の装置。
【請求項１１】
前記ランダムアクセス・メモリに転送されたブートコードを実行することにより、前記シーケンシャルアクセス・メモリに格納されていたファームウェアを前記ランダムアクセス・メモリに転送する、請求項１０に記載の装置。
【請求項１２】
前記シーケンシャルアクセス・メモリに格納されているブートコードは、
前記ファームウェアを前記シーケンシャルアクセス・メモリから前記ランダムアクセス・メモリに転送するローダーを含んでおり、
前記ウエイト生成ユニットは、前記ローダーが前記ランダムアクセス・メモリに転送されるまで、前記ＣＰＵのリセットアドレスへの命令フェッチに対してウエイト挿入を行う、請求項１１に記載の装置。
【請求項１３】
前記シーケンシャルアクセス・メモリに格納されているブートコードは、
前記ファームウェアを前記シーケンシャルアクセス・メモリから前記ランダムアクセス・メモリに転送するメインローダーと、
前記メインローダーを前記シーケンシャルアクセス・メモリから前記ランダムアクセス・メモリに転送する初期ローダーと、
を含んでおり、
前記ウエイト生成ユニットは、前記初期ローダーが前記ランダムアクセス・メモリに転送されるまで、前記ＣＰＵのリセットアドレスへの命令フェッチに対してウエイト挿入を行う、請求項１１に記載の装置。
【請求項１４】
前記ランダムアクセス・メモリは、前記ＣＰＵのキャッシュメモリとして使用するように構成された第１のランダムアクセス・メモリであり、
前記シーケンシャルアクセス・メモリに格納されていたファームウェアを格納する第２のランダムアクセス・メモリを更に備えている、請求項７に記載の装置。
【請求項１５】
前記第１のランダムアクセス・メモリに転送されたブートコードを実行することにより、前記シーケンシャルアクセス・メモリに格納されていたファームウェアを前記第２のランダムアクセス・メモリを転送する、請求項１４に記載の装置。
【請求項１６】
ＣＰＵと、リセットアドレスに配置されたランダムアクセス・メモリと、ブートコードを格納した不揮発性のシーケンシャルアクセス・メモリとを備えた装置の起動方法であって、
前記シーケンシャルアクセス・メモリに格納されたブートコードを前記ランダムアクセス・メモリに転送するとき、前記ブートコードの転送の進捗状況に従い、前記ＣＰＵのリセットアドレスへの命令フェッチに対するウエイト挿入を行うとともに、必要に応じて他の命令フェッチに対してもウエイト挿入を行う起動方法。
【請求項１７】
前記シーケンシャルアクセス・メモリに格納された所定量のブートコードが前記ランダムアクセス・メモリに転送されるまで、前記ＣＰＵのリセットアドレスへの命令フェッチに対してウエイト挿入を行う、請求項１６に記載の起動方法。
【請求項１８】
前記ＣＰＵの発行する命令フェッチのアドレスが、前記ブートコードのうち、転送の完了していない部分のアドレスである場合に、前記アドレスのブートコードの転送が完了するまで、前記ＣＰＵに対してウエイト挿入を行う請求項１７に記載の起動方法。
【請求項１９】
前記ブートコードを前記シーケンシャルアクセス・メモリから前記ランダムアクセス・メモリに転送した後、前記シーケンシャルアクセス・メモリに格納されているファームウェアを前記ランダムアクセス・メモリまたは他のランダムアクセス・メモリに転送する請求項１６から１８のいずれかに記載の起動方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＣＰＵ（中央演算処理ユニット）を内蔵したマイクロコントローラやシステムＬＳＩなどの装置の起動（ブートアップ）に関する。特に、ＮＡＮＤ型フラッシュメモリ（以下、「ＮＡＮＤフラッシュ」と称する。）のようにセクタ構成を有し、シーケンシャルアクセスを必要とするメモリデバイスにブートアップ命令コード（本明細書において「ブートコード」と称する。）を格納した装置およびその起動方法に関する。
【０００２】
【従来の技術】
デジタルＡＶ（オーディオ・ビジュアル）機器の急速な普及に伴い、機器の機能・性能の向上が著しい。このため、これらの機器を制御するためのソフトウェア・プログラム（以下、「ファームウェア」と称する。）の大規模化が急速に進んでいる。一方、システムコストを削減するために、ＣＰＵ（中央演算処理ユニット）、ＡＶコーデック機能、および周辺ＩＯ機能などを集積した大規模システムＬＳＩが開発されつつある。
【０００３】
このように機能・性能の向上した機器では、ＣＰＵによる直接的アクセスが可能な記憶装置（主記憶：メインメモリ）を備えるとともに、この主記憶とは別に、機器の制御に必要なファームウェアを格納した不揮発性メモリが必要である。
【０００４】
従来、このような不揮発性メモリとしては、ランダムアクセスが可能なＮＯＲ型フラッシュメモリ（以下、「ＮＯＲフラッシュ」と称する）が用いられてきた。しかし、ＮＯＲフラッシュは、ＮＡＮＤフラッシュに比べると、ビット単価が高いという問題がある。このため、ＮＯＲフラッシュに代えて、ＮＡＮＤフラッシュを採用することがシステムコストを低減する上で好ましい。
【０００５】
しかしながら、ＮＡＮＤフラッシュはセクタ構成を有しており、アクセスはシーケンシャルに実行する必要がある。このため、ＮＡＮＤフラッシュは、ＣＰＵがファームウェアを実行するときに必要なメモリへのランダムアクセスに対応することができない。従って、ＮＯＲフラッシュの代わりにＮＡＮＤフラッシュを用いる場合は、ＮＡＮＤフラッシュに格納されていたファームウェアを、いったん、ランダムアクセスの可能な主記憶へ転送し、その後にファームウェアの実行を行う必要がある。このような主記憶には、例えば、ＳＤＲＡＭ（シンクロナス・ダイナミック・ＲＡＭ）などのＲＡＭ（ランダムアクセス・メモリ）が用いられ得る。
【０００６】
以上のようなシステム構成を実現するためには、マスクＲＯＭ（リード・オンリー・メモリ）やＮＯＲフラッシュなどのメモリ容量の小さな小型記憶装置（以下、「ブートＲＯＭ」と称する。）を備え、ＮＡＮＤフラッシュに格納されていたファームウェアを主記憶に転送して実行するために必要な前処理を行うソフトウェアを、そのブートＲＯＭに格納しておく必要がある。
【０００７】
一般に、ブートＲＯＭのコストは、メモリ容量が小さいほど低くなるため、ブートＲＯＭに格納するソフトウェアは必要最低限に限定される。多くの場合は、ブートＲＯＭには、外部バス制御ユニットやメモリ制御ユニットの初期設定を行う命令コード、およびＮＡＮＤフラッシュに格納されているファームウェアを主記憶に転送する命令コードのみが格納される。
【０００８】
本明細書では、ＮＡＮＤフラッシュなどのシーケンシャルアクセス・メモリに格納されたファームウェアを主記憶に転送するために必要な命令コードを「ローダー」と称する。上記の従来技術においては、装置の電源がオン状態になると、ブートＲＯＭに格納されている「ローダー」を実行することにより、ＮＡＮＤフラッシュに格納されているファームウェアがＮＡＮＤフラッシュから主記憶に転送されることになる。
【０００９】
近年、ＯＳ（オペレーティング・システム）を含む機器の動作に必要なファームウェアは非常に大規模になってきているため、ＮＡＮＤフラッシュ内のファームウェアは、圧縮されていたり、セキュリティを高める目的で暗号化されている場合がある。これらの状況に対応するため、ローダーの容量も増大してきている。
【００１０】
ローダーの容量増加に応じてブートＲＯＭを大型化することは、コストの上昇を招くため、好ましくない。ブートＲＯＭの大型化を避ける目的で、ローダーをイニシャルプログラムローダ（ＩＰＬ）と、セカンドプログラムローダ（ＳＰＬ）に分け、ブートＲＯＭにはＩＰＬだけを格納しておくことが行われている。この場合、ブートＲＯＭのＩＰＬは、ＮＡＮＤフラッシュ内のＳＰＬを主記憶に転送する役割を担い、ＮＡＮＤフラッシュ内のＳＰＬは、主記憶に転送された後、ＮＡＮＤフラッシュ内に残るファームウェアを主記憶に転送する役割を担う。ＳＰＬによって主記憶に転送されるファームウェアは、ＯＳを含むような大規模なものであり得るため、ＳＰＬは「メインローダー」と称される場合がある。
【００１１】
このようにして、ＮＡＮＤフラッシュから主記憶へのファームウェアの転送を２段階にわけて行うことは、ブートＲＯＭに格納する命令コードのサイズの抑制とローダーの柔軟性を向上させるのに有利である。
【００１２】
以下、図５を参照しながら、ブートＲＯＭを備えた従来のマイクロコントローラのブートアップ動作を説明する。図５に示すマイクロコントローラ１は、ＣＰＵ１１とバス制御ユニット１２とを内蔵しており、ＣＰＵ１１は、このバス制御ユニット１２を介して外部バスと接続されている。バス制御ユニット１２の内部には、ＣＰＵ１１に対してウエイトを挿入するための信号（ウエイト信号）を生成する生成ユニット１３が設けられている。
【００１３】
外部バスには、ＮＡＮＤフラッシュ２２、主記憶２３、ブートＲＯＭ２１、およびＮＡＮＤフラッシュ制御ユニット２９が接続されている。
【００１４】
ブートＲＯＭ２１は、リセットアドレスが割り当てられたランダムアクセス可能なＲＯＭまたはフラッシュメモリであり、装置の初期設定の一部を行うコードとＩＰＬとを格納している。ここで、「リセットアドレス」とは、リセットベクタとしてＣＰＵのレジスタに格納されたアドレス値である。ブートＲＯＭ２１にリセットアドレスが割り当てられていることにより、リセット直後のＣＰＵ１１は、ブートＲＯＭ２１にアクセスする。
【００１５】
ＮＡＮＤフラッシュ２２は、不揮発性のシーケンシャルアクセス・メモリであり、この例では、ＳＰＬと装置の動作に必要なファームウェアとを格納している。主記憶２３は、ランダムアクセス・メモリであり、主記憶装置として機能する。ＮＡＮＤフラッシュ制御ユニット２９は、バス制御ユニット１２からＮＡＮＤフラッシュ２２へのアクセスを補助する。ＮＡＮＤフラッシュ制御ユニット２９は、マイクロコントローラ１に内蔵されていても良い。
【００１６】
図６は、図５のシステムにおけるブートアップ動作の概略を示すフローチャートである。図６に示すように、まず、リセットが開放されると、ブートＲＯＭ２１に格納されたコードが実行される。そして、ステップ５１において、ＮＡＮＤフラッシュ２２や主記憶２３にアクセスするために必要なハードウェア設定などの最低限の初期設定が行われる。この後、ステップ５２で、ＮＡＮＤフラッシュ２２に格納されていたＳＰＬが主記憶２３に転送される。ＳＰＬの主記憶２３への展開（転送）が完了すると、主記憶２３に展開されたＳＰＬの先頭アドレスにジャンプし、装置の制御が主記憶２３に移される（ステップ５３）。その後、ＳＰＬによってファームウェアがＮＡＮＤフラッシュ２２から主記憶２３へ転送される（ステップ５４）。
【００１７】
ステップ５５では、ステップ５１で実行できなかった残りの初期設定（入出力やＯＳの初期化など）が実行される。ステップ５６では、ＯＳに制御が移され、ブートアップが完了する。
【００１８】
ステップ５１からステップ５３が完了するまでの間に実行される命令コードは、ブートＲＯＭ２１に格納されている。これに対して、ステップ５４およびそれ以降のステップで実行される命令コードは、当初、ＮＡＮＤフラッシュ２２に格納されていたものが、ステップ５２およびステップ５４の処理により、ＮＡＮＤフラッシュ２２から主記憶２３に転送されたものである。なお、ＮＡＮＤフラッシュにＳＰＬを格納せず、ブートＲＯＭのローダーでファームウェアの全体を主記憶に転送する場合には、ステップ５４の処理が省略される。
【００１９】
次に、再び図５を参照しながら、リセット開放直後のハードウェアの動作をさらに詳細に説明する。
【００２０】
まず、図５の装置で電源がオンすると、リセット信号が生成され、ＣＰＵ１１や図示されている各デバイスが、このリセット信号を受け取る。電源がオンした直後において、各デバイスは不安定な状態にあるが、前記リセット信号を受け取ると、安定した既知状態をとるに至る。各デバイスが安定した既知状態になると、リセット信号が無効化（ネゲート）される。リセット信号がネゲートされるまで、各デバイスに対するアクセスは不能な状態にあるが、ネゲート後はアクセス可能になる。
【００２１】
ＣＰＵ１１は、リセット信号がネゲートされると、リセットアドレスの命令フェッチ（読出し命令）を発行する。本明細書では、リセット信号がネゲートされた時を「リセットが開放された時」と称することとする。また、リセット開放直後とは、リセットが開放された時からブートアップが完了するまでの間を意味するものとする。
【００２２】
リセットが開放された後、バス制御ユニット１２は、リセットアドレスが割り当てられているブートＲＯＭ２１に対して、命令読出しのためのリードプロトコルを外部バス上に発行する。リセット開放直後のバス制御ユニット１２は、どのような種類のＲＯＭからでもブートコードが読み出せるように、比較的長いバスアクセスタイミングを生成する固定ウエイトのリードプロトコルを発行するのが一般的である。バス制御ユニット１２は、ブートＲＯＭ２１からのリードデータが読み込まれるのに充分な時間を与えるため、ウエイト生成ユニット１３にウエイト信号を生成させ、ＣＰＵ１１にウエイトを挿入する。このとき、外部ウエイト信号は使用しない。
【００２３】
リセットアドレスには、ブートアップ処理を実際に行う命令コードの先頭が配置されているアドレス（以下、「ブート先頭アドレス」と称する）へのジャンプ命令が格納されている。
【００２４】
このため、ＣＰＵ１１は、ウエイトの後、ブート先頭アドレスの命令フェッチを発行することになる。そのため、バス制御ユニット１２は、リセットアドレスとは不連続となる前記ブート先頭アドレスのリードプロトコルを発行する。以降、順次ブートコードが実行されるのであるが、それに従い、バス制御ユニット１２の生成するリードプロトコルは、ブートＲＯＭ２１に対するランダムアクセスを必要とする。このような構成を有する装置は、例えば特許文献１に記載されている。
【００２５】
ブートＲＯＭを必須とする上記の装置に対して、非特許文献１には、ブートＲＯＭを必要としないデバイス（商品名「ＤｉｓｋＯｎＣｈｉｐ」）が開示されている。図９は、このデバイス９０を含む装置の構成を示している。デバイス９０は、ブートコードやファームウェアを格納するＮＡＮＤフラッシュ９１と、ＮＡＮＤフラッシュ９１内のブートコードが転送されて格納される小型ＲＡＭ９２と、転送制御ユニット９３と、これらの動作を制御するコントローラ９４とを内蔵している。デバイス９０は、ＣＰＵ１００およびＲＡＭ１１０とバス１２０を介して接続される。
【００２６】
図９に示す構成の装置が起動するとき、リセット開放前において、デバイス９０の内部で先行的にＮＡＮＤフラッシュ９１から小型ＲＡＭ９２へブートコード（ＩＰＬなど）が転送される。そして、このブートコードの転送が完了した後、リセットが開放される。リセット解放後は、デバイス９０の小型ＲＡＭ９２がブートアップに必要なＣＰＵ１００からのランダムアクセスに対応することになる。具体的には、ＩＰＬが実行され、ＳＰＬなどのファームウェアがＮＡＮＤフラッシュ９１からＲＡＭ１１０に転送される。
【００２７】
【特許文献１】
特開２００２−２７８７８１号公報
【非特許文献１】
Ｄｅｓｉｇｎｉｎｇ  Ｔｈｅ  ＤｉｓｋＯｎＣｈｉｐ  ａｓ  ａ  Ｆｌａｓｈ  Ｄｉｓｋ  ＆  Ｂｏｏｔ  Ｄｅｖｉｃｅ  Ｒｅｐｌａｃｅｍｅｎｔ、ＡＰ−ＤＯＣ−０４７  Ｍ−Ｓｙｓｔｅｍｓ社
【００２８】
【発明が解決しようとする課題】
特許文献１に記載されている従来の装置によれば、ＮＡＮＤフラッシュなどのシーケンシャル・メモリデバイスにファームウェアを格納したシステムのブートアップが実現できるが、ブートＲＯＭが別途必要になるため、コストが上昇する。
【００２９】
また、非特許文献１に開示されている図９のデバイス９０によれば、標準のＮＡＮＤフラッシュに比べて、内部ＲＡＭ９２や転送制御ユニット９３などの追加回路をデバイス９０の内部に設ける必要がある。このため、デバイス９０の構造が複雑になり、デバイス９０のコストが単体のＮＡＮＤフラッシュに比べて上昇するともに、デバイス９０のセカンドソースを確保することが難しいという問題もある。
【００３０】
本発明は、上記の課題を解決するためになされたものであり、本発明の目的とするところは、ＮＡＮＤフラッシュなどのシーケンシャル・メモリデバイスを用いながら、追加のブートＲＯＭを必要とせずにブートアップできる方法および装置を提供する。
【００３１】
【課題を解決するための手段】
本発明の装置は、ＣＰＵと、少なくともリセット開放時においてリセットアドレスが割り当てられているランダムアクセス・メモリと、ブートコードを格納した不揮発性のシーケンシャルアクセス・メモリと、リセット開放後、前記シーケンシャルアクセス・メモリに格納されたブートコードをシーケンシャルに前記ランダムアクセス・メモリに転送するブートコード転送ユニットと、前記ブートコード転送ユニットによる転送の進捗に従い、前記ＣＰＵのリセットアドレスへの命令フェッチに対するウエイト挿入を行うとともに、必要に応じて他の命令フェッチに対してもウエイト挿入を行うウエイト生成ユニットとを備える。
【００３２】
好ましい実施形態において、前記ウエイト生成ユニットは、所定量のブートコードの転送が完了するまで、前記ＣＰＵのリセットアドレスへの命令フェッチに対してウエイト挿入を行う。
【００３３】
好ましい実施形態において、前記ウエイト生成ユニットは、前記ＣＰＵの発行する命令フェッチのアドレスと、前記ブートコード転送ユニットが転送するアドレスを監視し、前記ＣＰＵの発行する命令フェッチのアドレスが、前記ブートコード転送ユニットによる転送が完了していないブートコードのアドレスである場合に、前記アドレスのブートコードの転送が完了するまで、前記ＣＰＵに対してウエイト挿入を行う。
【００３４】
好ましい実施形態において、前記ランダムアクセス・メモリは、前記ＣＰＵと同一のＬＳＩパッケージに封じられているオンチップメモリである。
【００３５】
好ましい実施形態において、前記ランダムアクセス・メモリは、前記ＣＰＵのキャッシュメモリとして使用するように構成されたメモリである。
【００３６】
好ましい実施形態において、前記ウエイト生成ユニットは、前記ＣＰＵと外部バスとを接続するバス制御ユニット内に設けられている。
【００３７】
好ましい実施形態において、前記シーケンシャルアクセス・メモリは、前記外部バスに接続されている。
【００３８】
好ましい実施形態において、前記シーケンシャルアクセス・メモリは、ＮＡＮＤ型フラッシュメモリである。
【００３９】
好ましい実施形態において、前記ランダムアクセス・メモリは、前記外部バスとは異なるバスに接続されている。
【００４０】
好ましい実施形態において、前記シーケンシャルアクセス・メモリは、前記ブートコードに加え、装置の動作を制御するファームウェアを格納している。
【００４１】
好ましい実施形態において、前記ランダムアクセス・メモリに転送されたブートコードを実行することにより、前記シーケンシャルアクセス・メモリに格納されていたファームウェアを前記ランダムアクセス・メモリに転送する。
【００４２】
好ましい実施形態において、前記シーケンシャルアクセス・メモリに格納されているブートコードは、前記ファームウェアを前記シーケンシャルアクセス・メモリから前記ランダムアクセス・メモリに転送するローダーを含んでおり、前記ウエイト生成ユニットは、前記ローダーが前記ランダムアクセス・メモリに転送されるまで、前記ＣＰＵのリセットアドレスへの命令フェッチに対してウエイト挿入を行う。
【００４３】
好ましい実施形態において、前記シーケンシャルアクセス・メモリに格納されているブートコードは、前記ファームウェアを前記シーケンシャルアクセス・メモリから前記ランダムアクセス・メモリに転送するメインローダーと、前記メインローダーを前記シーケンシャルアクセス・メモリから前記ランダムアクセス・メモリに転送する初期ローダーとを含んでおり、前記ウエイト生成ユニットは、前記初期ローダーが前記ランダムアクセス・メモリに転送されるまで、前記ＣＰＵのリセットアドレスへの命令フェッチに対してウエイト挿入を行う。
【００４４】
好ましい実施形態において、前記ランダムアクセス・メモリは、前記ＣＰＵのキャッシュメモリとして使用するように構成された第１のランダムアクセス・メモリであり、前記シーケンシャルアクセス・メモリに格納されていたファームウェアを格納する第２のランダムアクセス・メモリを更に備えている。
【００４５】
好ましい実施形態において、前記第１のランダムアクセス・メモリに転送されたブートコードを実行することにより、前記シーケンシャルアクセス・メモリに格納されていたファームウェアを前記第２のランダムアクセス・メモリを転送する。
【００４６】
本発明の起動方法は、ＣＰＵと、リセットアドレスに配置されたランダムアクセス・メモリと、ブートコードを格納した不揮発性のシーケンシャルアクセス・メモリとを備えた装置の起動方法であって、前記シーケンシャルアクセス・メモリに格納されたブートコードを前記ランダムアクセス・メモリに転送するとき、前記ブートコードの転送の進捗状況に従い、前記ＣＰＵのリセットアドレスへの命令フェッチに対するウエイト挿入を行うとともに、必要に応じて他の命令フェッチに対してもウエイト挿入を行う。
【００４７】
好ましい実施形態において、前記シーケンシャルアクセス・メモリに格納された所定量のブートコードが前記ランダムアクセス・メモリに転送されるまで、前記ＣＰＵのリセットアドレスへの命令フェッチに対してウエイト挿入を行う。
【００４８】
好ましい実施形態において、前記ＣＰＵの発行する命令フェッチのアドレスが、前記ブートコードのうち、転送の完了していない部分のアドレスである場合に、前記アドレスのブートコードの転送が完了するまで、前記ＣＰＵに対してウエイト挿入を行う。
【００４９】
好ましい実施形態において、前記ブートコードを前記シーケンシャルアクセス・メモリから前記ランダムアクセス・メモリに転送した後、前記シーケンシャルアクセス・メモリに格納されているファームウェアを前記ランダムアクセス・メモリまたは他のランダムアクセス・メモリに転送する。
【００５０】
【発明の実施の形態】
以下、添付の図面を参照しながら、本発明の好適な実施形態を説明する。なお、添付の図面において同一の構成要素には同一の参照符号を付し、重複する部分の詳細な説明は繰り返さない。
【００５１】
（実施形態１）
まず、図１を参照しながら、本発明の第１の実施形態を説明する。
【００５２】
図１に示す本実施形態の装置は、ＣＰＵ１１を内蔵したマイクロコントローラ１と、外部バスを介してマイクロコントローラ１に接続された主記憶／ＮＡＮＤフラッシュ制御ユニット２０、ＮＡＮＤフラッシュ２２、および主記憶２３とを備えている。
【００５３】
マイクロコントローラ１にはバス制御ユニット１２も内蔵されており、ＣＰＵ１１は、このバス制御ユニット１２を介して外部バスと接続されている。バス制御ユニット１２の内部には、ＣＰＵ１１に対してウエイトを挿入するための信号（ウエイト信号）を生成するウエイト生成ユニット１３が設けられている。
【００５４】
ＮＡＮＤフラッシュ２２は、前述のように不揮発性のシーケンシャルアクセス・メモリであり、装置の起動に必要なブートコードおよびＯＳを含むファームウェアを格納している。本実施形態のＮＡＮＤフラッシュに格納されるブートコードは、具体的には、装置の初期化を行うコード、ＩＰＬおよびＳＰＬを含む。なお、本明細書におけるＩＰＬは、ＳＰＬの転送前に行う最低限の初期設定（図６のステップ５１）のコードを含むものとし、ＳＰＬは、ＯＳに制御を移す前に行う残りの初期設定（図６のステップ５５）のコードを含むものとする。また、本明細書における「ブートコード」の用語は、装置の電源をオンしてから制御がＯＳに移るまでの期間における装置の初期動作を規定するプログラムを指すものとする。
【００５５】
主記憶２３は、少なくともリセット開放直後においてリセットアドレスが割り当てられているランダムアクセス・メモリであり、主記憶装置として機能する。リセットアドレスの値は、ＣＰＵ１１のリセットベクタに規定されており、リセット開放後、ＣＰＵ１１が最初にアクセスしようとするメモリ位置を示している。
【００５６】
主記憶／ＮＡＮＤフラッシュ制御ユニット２０は、バス制御ユニット１２からのアクセス信号を受けて、ＮＡＮＤフラッシュ２２および主記憶２３を制御する。また、主記憶／ＮＡＮＤフラッシュ制御ユニット２０は、必要に応じて、外部ウエイト信号を生成し、バス制御ユニット１２内のウエイト生成ユニット１３を介して、ＣＰＵ１１にウエイト信号として入力する。
【００５７】
本発明では、図５に示す従来例とは異なり、シーケンシャルアクセスが必要なＮＡＮＤフラッシュにブートコードやファームウェアを格納するとともに、少なくともリセット開放直後において、ランダムアクセス・メモリ（ＲＡＭ）をリセットアドレスに割り当てている点に主要な特徴を有している。
【００５８】
本発明では、ブートコードをＮＡＮＤフラッシュからＲＡＭに転送する処理を行う際、この処理の少なくとも初期の段階をＣＰＵ１１から隠蔽することにより、ＣＰＵ１１によるＲＡＭへのアクセスを停止し、その間に必要な量のブートコードを転送する。ここで、「必要な量」とは、ブートコードが転送される先のメモリの種類／容量やせクタによって規定される。転送先のメモリとして、後述する実施形態のようにキャッシュメモリを用いる場合、このキャッシュメモリの容量（例えば４ｋＢ〜１６ｋＢ）よりも少ない量のブートコードが転送されることになる。また、転送先としてオンチップメモリを用いる場合、オンチップメモリの容量（例えば１ｋＢ以上）よりも少ない量のブートコードが転送されることになる。
【００５９】
ＣＰＵ１１にウエイトを挿入しながらブートコードを転送するために必要なハードウェアの構成を考えると、最初にＮＡＮＤフラッシュから読み出されて転送されるブートコードの量は、できるだけ少なく設定することが好ましい。これらのことを総合的に勘案すると、ＣＰＵ１１から隠蔽しつつ転送されるブートコードの量は１ｋＢ〜４ｋＢ程度の範囲内に設定され、好ましくは１ｋＢ〜２ｋＢの範囲内に設定される。
【００６０】
本発明において、少なくともリセット開放直後にリセットアドレスが割り当てられるＲＡＭは、装置内に備えられている主記憶、オンチップＲＡＭ、キャッシュメモリなどの既存のリソースを用いて実現することができるため、コストの増加を抑えることができる。前述の非特許文献１に開示されているデバイスによれば、装置が備えるＲＡＭとは別にデバイス内部に別の小型ＲＡＭが必須になるが、本発明によれば、特別のＲＡＭを備える必要がなく、コスト上昇を抑えることができる。
【００６１】
以下、ブートコードの転送先として外部バスに接続された主記憶２３を用いる本実施形態の装置におけるリセット動作を詳細に説明する。
【００６２】
図１のＣＰＵ１１は、図示されていないリセット信号がネゲートされると、バス制御ユニット１２に対してリセットアドレスの命令フェッチを発行する。バス制御ユニット１２は、前記リセットアドレスに格納された命令データの読出しのためのリードプロトコルを外部バス上に発行する。
【００６３】
上記のように、リセット信号がネゲートされると、ＣＰＵ１１は、リセットアドレスが割り当てられているメモリ位置にアクセスして当該メモリ位置に格納されている命令を読み出そうとするが、その時点における本実施形態の装置において、前記メモリ位置には、どのような命令もまだ格納されてはいない。
【００６４】
本実施形態では、主記憶／ＮＡＮＤフラッシュ制御ユニット２０が上記のリードプロトコルを受けとると、ＮＡＮＤフラッシュ２２に格納されたブートコードを、リセットアドレスが割り当てられている主記憶２３へ転送する動作を開始し、それによって、バス制御ユニット１２から主記憶２３へのランダムアクセスに対する準備を行う。
【００６５】
この時、本実施形態では、バス制御ユニット１２に対してウエイトを挿入するために外部ウエイト信号を使用する。この外部ウエイト信号は、データの確定のタイミングを示すデータアクノレッジ信号などのマイクロコントローラ１の外部バスにおけるハンドシェーク信号を使用することで実現できる。このことは、後述する他の実施形態でも同様に行うことができる。
【００６６】
ウエイト信号の挿入により、ＣＰＵ１１は、リセットアドレスに対するアクセスを実行できず、待機させられ、その間にブートコードの少なくとも一部が転送されることになる。最初にウエイトが解除されるのは、リセットアドレスおよびブート先頭アドレスを含むアドレスに「所定量」のブートコードが転送されたときである。ここで「所定量」の値とは、前述したように、転送先のメモリ容量などに基づいて適宜決定される量である。
【００６７】
主記憶／ＮＡＮＤフラッシュ制御ユニット２０が生成する外部ウエイト信号の生成ストラテジには、以下の２通りの方法が考えられる。
【００６８】
第１の方法は、少なくともＩＰＬを含む「所定量」のブートコードをＮＡＮＤフラッシュ２２から主記憶２３へ転送完了するまでバス制御ユニット１２に対しウエイトを挿入しつづける方法である。この場合、ＣＰＵ１１は、上記所定量のブートコードが主記憶２３にすべて格納されるまで待たされるため、ＣＰＵ１１がブートコードの実行を開始した後は、主記憶／ＮＡＮＤフラッシュ制御ユニット２０がＮＡＮＤフラッシュ２２から主記憶２３への命令データの転送を継続する必要はない。このため、バス制御ユニット１２から主記憶２３へのブートコード読出しのリードプロトコルは、固定ウエイトで実行できる。
【００６９】
第２の方法は、バス制御ユニット１２の発行する各々のリードプロトコルに従って読み出されるべき命令データが主記憶２３にあるかどうかを逐次判定し、主記憶２３にある場合には即座に主記憶２３の読出しを行う方法である。この方法によれば、読み出されるべき命令データが主記憶２３に無い場合（未転送の場合）のみ、ＮＡＮＤフラッシュ２２から主記憶２３へのブートコードの転送を優先的に実行し、読み出されるべき命令データが転送完了した時点で外部ウエイト信号を解除し、ＣＰＵ１１の動作を継続させる。
【００７０】
この第２の方法によれば、主記憶／ＮＡＮＤフラッシュ制御ユニット２０は、ＮＡＮＤフラッシュ２２から主記憶２３へのブートコードの転送を継続させながら、バス制御ユニット１２が発行するリードプロトコルの要求アドレスを監視する。そして、要求アドレスが転送アドレスより小さければ（すなわち転送済み）であれば、即座に主記憶を読み出す。一方、要求アドレスが転送アドレスより大きければ（すなわち未転送）であれば、ブートコードの転送を継続し、要求アドレスに一致する命令コードが転送されるまでバス制御ユニットに対してウエイトをかけ続ける。
【００７１】
第１および第２の方法のいずれにせよ、外部ウエイト信号を使用することによってＣＰＵ１１を待機させることができるため、ＮＡＮＤフラッシュ２２から主記憶２３へのブートコードの転送をＣＰＵ１１から隠蔽することができる。
【００７２】
ＮＡＮＤフラッシュ２２から主記憶２３へのブートコードの転送が完了すると、次は、ブートコードを実行することにより、ＮＡＮＤフラッシュ２２に格納されていたファームウェアを主記憶２３に転送することになる。
【００７３】
ブートコードの転送は、従来技術について説明したように、２段階で行なうことができる。具体的には、ブートコードを、ＳＰＬ（ＮＡＮＤフラッシュ２２に格納しているファームウェアを主記憶２３に転送するメインローダー）と、ＩＰＬ（メインローダーをＮＡＮＤフラッシュ２２から主記２３に転送する初期ローダー）とに分け、まずはＩＰＬを主記憶２３に転送し、その後にＳＰＬを主記憶２３に転送するようにしてもよい。この場合、ウエイト生成ユニット１３は、ＩＰＬが主記憶２３に転送されるまでＣＰＵ１１を待機させ、ＩＰＬの転送をＣＰＵ１１から隠蔽する。この場合、ＳＰＬの主記憶２３への転送は、主記憶２３に格納されたＩＰＬを実行することによって行うことになり、ＩＰＬの実行は、ＣＰＵ１１による主記憶２３へのランダムアクセスによって進行する。
【００７４】
なお、本実施形態によれば、メモリ容量の大きな主記憶２３にブートコードを転送するため、ブートＲＯＭを用いる従来技術に比較して、ブートコードをＩＰＬとＳＰＬとに分ける必要性は小さい。したがって、ローダーをＩＰＬとＳＰＬとに分けることなく、１つのローダーとして扱い、このローダーの全体がＮＡＮＤフラッシュ２２から主記憶２３に転送されるまでの間、ＣＰＵ１１のリセットアドレスへの命令フェッチに対してウエイト挿入を行うようにしてもよい。
【００７５】
ＮＡＮＤフラッシュ２２から主記憶２３へのブートコードおよびファームウェアの転送は、ＮＡＮＤフラッシュ２２に対するシーケンシャルなアクセスによって行われる。
【００７６】
ＣＰＵ１１がウエイト信号によって待機している間、本実施形態では、主記憶／ＮＡＮＤフラッシュ制御ユニット２０がＣＰＵ１１に代わってＮＡＮＤフラッシュ２２からの命令データの読み出しおよび主記憶２３への書き込みを制御する。読み出し／書き込みは、例えば２５６ワード毎にシーケンシャルに実行される。本実施形態における主記憶／ＮＡＮＤフラッシュ制御ユニット２０は、このような制御をハードウェア的に実行するように構成されている。
【００７７】
このように本実施形態によれば、標準のＮＡＮＤフラッシュを用いてブートコードの格納を行うため、追加のブートＲＯＭなどが不要になり、低コストで機能・性能の向上した装置が提供可能になる。
【００７８】
なお、リセットアドレスが主記憶２３に割り当てられるのは、少なくともリセット開放直後の所定の期間であれば良く、リセットアドレスがどのメモリに割り当てられるかは、装置の起動後に、動的に変更され得る。
【００７９】
（実施形態２）
以下、図２を参照しながら本発明の装置の第２の実施形態を説明する。
【００８０】
近年のシステムＬＳＩおよびマイクロコントローラでは、ＳＤＲＡＭを主記憶に採用した場合、主記憶とファームウェアを格納する各種不揮発性メモリとが別々のバスに配置されていることが多い。
【００８１】
図２の装置では、マイクロコントローラ１に内蔵されたＣＰＵ１１は、バス制御ユニット１２を通して外部バスおよび主記憶２３と接続されている。外部バスには、ＮＡＮＤフラッシュ２２が接続されている。本実施形態でも、少なくともリセット開放直後において、リセットアドレスは主記憶２３に割り当てられている。主記憶２３に対するアドレスの割り当ては、装置の起動後に、動的に変更され得る。この点、後述する他の実施形態でも同様である。
【００８２】
ＣＰＵ１１は、リセット信号がネゲートされると、バス制御ユニット１２に対し、リセットアドレスの命令フェッチを発行する。バス制御ユニット１２は、リセット開放直後のリセットアドレスへの命令フェッチを検出すると、ウエイト生成ユニット１３を用いてＣＰＵ１１へのウエイト信号を生成し、ＣＰＵ１１にウエイトをかけるとともに、ＮＡＮＤフラッシュ制御ユニット１９を起動して、ＮＡＮＤフラッシュ２２から主記憶２３へ所定量のブートコードの転送を開始する。つまり、図２の構成の装置によれば、ＮＡＮＤフラッシュ２２から主記憶２３へのブートコードを転送する場合において、少なくともＩＰＬの転送は、バス制御ユニット１２によって制御される。
【００８３】
本実施形態においても、バス制御ユニット１２がＣＰＵ１１にウエイトをかける生成ストラテジは、図１に示す第１の実施形態における構成と同様に、「所定量」のブートコードをＮＡＮＤフラッシュ２２から主記憶２３へ転送完了するまでウエイトをかける方法と、ＣＰＵ１１の発行するそれぞれの命令フェッチで読み出されるべき命令データが主記憶２３に転送済みかを判定し、未転送の場合のみＣＰＵ１１にウエイトをかけ、逐次ＣＰＵ１１を動作させる方法の２通りが可能となる。
【００８４】
このように本実施形態によっても、ＮＡＮＤフラッシュ２２から主記憶２３へのブートコードの転送をＣＰＵ１１から隠蔽することができる。なお、ＮＡＮＤフラッシュ２２に格納していたファームウェアの主記憶２３への転送は、第１の実施形態について説明したとおりである。
【００８５】
（実施形態３）
以下、図３を参照しながら本発明の装置の第３の実施形態を説明する。
【００８６】
本実施形態と第２の実施形態との主要な相違点は、本実施形態において、ブートコードの転送先として主記憶２３（図２）の代わりにオンチップメモリ２４を使用している点にある。
【００８７】
本実施形態でも、マイクロコントローラ１に内蔵されたＣＰＵ１１は、バス制御ユニット１２を通して外部バスおよびオンチップメモリ２４と接続されており、外部バスには、ＮＡＮＤフラッシュ２２が接続されている。オンチップメモリ２４は、少なくともリセット開放直後において、リセットアドレスに配置されている。
【００８８】
ＣＰＵ１１は、他の実施形態と同様に、リセット信号がネゲートされると、バス制御ユニット１２に対してリセットアドレスの命令フェッチを発行する。バス制御ユニット１２は、リセット開放直後のリセットアドレスへの命令フェッチを検出すると、ウエイト生成ユニット１３を用いてＣＰＵ１１へのウエイト信号を生成してＣＰＵ１１にウエイトを挿入するとともに、ＮＡＮＤフラッシュ制御ユニット１９を起動して、ＮＡＮＤフラッシュ２２からオンチップメモリ２４への所定量のブートコードの転送を開始する。言い換えると、本実施形態では、図２に示す実施形態と同様に、ＮＡＮＤフラッシュ２２からオンチップメモリ２４へのブートコードの転送を行うに際して、バス制御ユニット１２がブートコードの少なくとも最初の部分の転送を制御することになる。
【００８９】
本実施形態においても、バス制御ユニット１２がＣＰＵ１１にウエイトを挿入する生成ストラテジは、前述の２通りある。すなわち、上記所定量のブートコードをＮＡＮＤフラッシュ２２からオンチップメモリ２４へ転送完了するまでウエイトを挿入する方法と、ＣＰＵ１１の発行する各々の命令フェッチで読み出されるべき命令データがオンチップメモリ２４に転送済みかを判定し、未転送の場合のみＣＰＵ１１にウエイトを挿入し、逐次ＣＰＵ１１を動作させる方法である。
【００９０】
こうして、本実施形態の場合でも、ＮＡＮＤフラッシュ２２からオンチップメモリ２４へのブートコードの転送の少なくとも最初の段階をＣＰＵ１１から隠蔽することができる。なお、ＮＡＮＤフラッシュ２２に格納していたファームウェアのオンチップメモリ２４への転送は、第１の実施形態について説明したとおりである。ただし、オンチップメモリ２４の容量が小さい場合には、ローダーをＩＰＬとＳＰＬに分け、ＩＰＬだけをオンチップメモリ２４に転送し、ＳＰＬおよびファームウェアの転送先は、主記憶（不図示）を選択することが好ましい。
【００９１】
（実施形態４）
本実施形態では、ブートコードの転送先としてマイクロコントローラ内のキャッシュメモリを用いる。キャッシュメモリは、本発明の動作に必要なウエイト生成機能などを備えているため、比較的簡単な構成により、本発明の装置を実現することが可能になる。ただし、ＮＡＮＤフラッシュに格納していたファームウェアの転送先は、キャッシュメモリではなく、主記憶などが選択され得る。
【００９２】
以下、図４を参照しながら本発明の装置の第４の実施形態を説明する。
【００９３】
本実施形態では、マイクロコントローラ１に内蔵されたＣＰＵ１１がキャッシュメモリユニット２５を介してバス制御ユニット１２に接続されており、さらにその先の外部バスを通してＮＡＮＤフラッシュ２２に接続されている。ここで、キャッシュメモリユニット２５は、少なくともリセット開放直後はリセットアドレスに配置されている。
【００９４】
ＣＰＵ１１は、リセット信号がネゲートされると、キャッシュメモリユニット２５に対してリセットアドレスの命令フェッチを発行する。キャッシュメモリユニット２５は、リセット開放直後のリセットアドレスへの命令フェッチを検出すると、ウエイト生成ユニット１４を用いてＣＰＵ１１へのウエイト信号を生成しＣＰＵ１１にウエイトをかけるとともに、ＮＡＮＤフラッシュ２２からブートコードを読み出すべく、バス制御ユニット１２に対してＮＡＮＤフラッシュ２２からの読出しを要求する。
【００９５】
バス制御ユニット１２は、ＮＡＮＤフラッシュ２２の読出し要求を受け、ＮＡＮＤフラッシュ制御ユニット１９を起動して、ＮＡＮＤフラッシュ２２から所定のデータの転送を開始する。つまり、図４の構成では、ＮＡＮＤフラッシュ２２からキャッシュメモリユニット２５への最低限のブートコード（例えばＩＰＬ）の転送に対する制御をキャッシュメモリユニット２５が担う。なお、バス制御ユニット１２のウエイト生成ユニット１３は、外部バスからのデータ転送のタイミング調整に必要なウエイトを随時発生する。
【００９６】
本実施形態においても、キャッシュメモリユニット２５がＣＰＵ１１にウエイトをかける方法は、他の実施形態と同様、所定量のブートコードをＮＡＮＤフラッシュ２２からキャッシュメモリユニット２５へ転送するまでウエイトをかける方法と、ＣＰＵ１１の発行するそれぞれの命令フェッチで読み出されるべき命令データがキャッシュメモリ２５に転送済みかを判定し、未転送の場合のみＣＰＵ１１にウエイトをかけ、逐次ＣＰＵ１１を動作させる方法の２通りが可能となる。
【００９７】
このようにして本実施形態によっても、ＮＡＮＤフラッシュ２２からキャッシュメモリユニット２５へのブートコードの転送をＣＰＵ１１から隠蔽することができる。
【００９８】
次に、図７および図８を参照して、従来のキャッシュメモリユニットの動作と本実施形態におけるキャッシュメモリユニットの動作との違いを説明する。
【００９９】
まず、図７を参照しながら、従来のキャッシュメモリユニット２５の動作を説明する。図７に示すキャッシュメモリユニット２５では、（命令）データを格納するメモリブロック２６を例えば６４バイト程度の小さい領域（以下、「キャッシュライン」と称する）に区切っている。そして、キャッシュラインごとに格納されているデータが有効であるか、無効であるかを判定し、必要に応じてバス制御ユニット側へのアクセスを行う。また、外部メモリのデータを読み込み、あるいは、外部メモリにキャッシュメモリのデータを書き出して、外部メモリを更新する。
【０１００】
図７に示すように、メモリブロック２６が未使用、または全部のキャッシュラインが無効の状態において、ＣＰＵ１１から実線と破線で示す命令フェッチが順に起きた場合を考える。この場合、キャッシュメモリユニット２５は、それぞれの命令フェッチに応じて、実線および破線で示す２つのキャッシュラインを外部メモリから読み込むための要求を、バス制御ユニット１２に対して順次発行する。その結果、メモリブロック２５では、斜線で示された２つのキャッシュラインに有効データが格納される。ウエイト生成ユニット１４は、該当するキャッシュラインへの読み込みが完了するまでＣＰＵ１１に対してウエイトを挿入する。
【０１０１】
次に、図８を参照して、本実施形態におけるキャッシュメモリユニット２５の動作を説明する。
【０１０２】
図８のＣＰＵ１１から出ている２本のアクセスは、実線で示すリセットアドレスに対する命令フェッチと、破線で示すブートコードへのジャンプ先に対する命令フェッチを表しており、図８は、これらの命令フェッチが順次発行されている様子を示している。
【０１０３】
キャッシュメモリユニット２５は、リセット開放直後のリセットアドレスへの命令フェッチを検出すると、キャッシュメモリユニット２５内のウエイト生成ユニット１４により、ＣＰＵ１１からのリセットアドレスへの命令フェッチにウエイトを挿入するとともに、図示されていないＮＡＮＤフラッシュからブートコードを読み込むために、バス制御ユニット１２に対してＮＡＮＤフラッシュ２２（図４）からの読み込み要求を発行する。
【０１０４】
ＮＡＮＤフラッシュ２２（図４）からの読み込みは、シーケンシャルに実行する必要がある。このため、読み込むべきブートコードの全体をメモリブロック２６に読み込むようにバス制御ユニット１２に対して、ＮＡＮＤフラッシュからの読み込み命令を継続して発行する。
【０１０５】
ウエイト生成ユニット１４がＣＰＵ１１にウエイトを挿入する仕方は、前述の通り、２通りある。第１の方法は、ブートコードの全体をメモリブロック２６に転送し終わるまでＣＰＵ１１にウエイトを挿入し続ける方法であり、第２の方法は、ＣＰＵ１１が要求しているキャッシュラインへの読み込みが完了しているか否かを判定し、読み込みが完了していればウエイトを生成せず、読み込みが未完了であれば該当キャッシュラインの読み込みが完了するまでウエイトを挿入する方法である。
【０１０６】
こうして、本実施形態の場合でも、ＮＡＮＤフラッシュ２２からキャッシュメモリユニット２５内のメモリブロック２６へのブートコードの転送の少なくとも最初の段階をＣＰＵ１１から隠蔽することができる。
【０１０７】
なお、キャッシュメモリユニット２５のメモリブロック２６の容量が十分に大きくない場合は、ローダーをＩＰＬとＳＰＬに分け、ＩＰＬだけをメモリブロック２６に転送し、ＳＰＬおよびファームウェアの転送先は、主記憶（不図示）などの他のランダムアクセス・メモリを選択することが好ましい。また、メモリブロック２６の容量が充分であれば、ブートコードのすべてをメモリブロック２６に転送し、ファームウェアについては主記憶（不図示）に転送する構成を採用してもよい。
【０１０８】
【発明の効果】
このように本発明によれば、リセット開放直後におけるＣＰＵのリセットアドレスに対する命令フェッチに先立って、ＮＡＮＤフラッシュなどの不揮発性シーケンシャルアクセス・メモリからランダムアクセス・メモリへブートコードを転送するため、ブートＲＯＭなどを別途必要としない起動が可能になる。
【０１０９】
本発明によれば、マイクロコントローラやシステムＬＳＩにおけるＳＤＲＡＭなどの主記憶、オンチップメモリ、またはキャッシュメモリなどのランダムアクセス・メモリをブートアップメモリとして活用できるため、プログラムコードをＮＡＮＤフラッシュのように安価なシーケンシャルアクセス・メモリデバイスに格納し、システムのコストを低減できる。特に、公知の装置に備えられているキャッシュメモリは、本発明の動作に必要なウエイト生成機能などを備えているため、このキャッシュメモリをブートアップメモリとして活用すれば、キャッシュメモリユニット内のメモリブロックをリセットアドレスに配置し、ＮＡＮＤフラッシュからブートコードを転送する手段を設けるだけで、本発明の構成を実現できる。
【図面の簡単な説明】
【図１】本発明による装置の第１の実施形態の構成を示すブロック図である。
【図２】本発明による装置の第２の実施形態の構成を示すブロック図である。
【図３】本発明による装置の第３の実施形態の構成を示すブロック図である。
【図４】本発明による装置の第４の実施形態の構成を示すブロック図である。
【図５】ブートＲＯＭを備えた従来の装置の構成を示すブロック図である。
【図６】図５の装置のブートアップ（起動）動作を示すフローチャートである。
【図７】従来の装置におけるキャッシュメモリユニットの動作を示す図である。
【図８】図４の装置におけるキャッシュメモリユニットの動作を示す図である。
【図９】非特許文献１に記載されている従来の装置を示す図である。
【符号の説明】
１      マイクロコントローラ
１１    ＣＰＵ
１２    バス制御ユニット
１３    ウエイト生成ユニット
１４    ウエイト生成ユニット（キャッシュメモリユニット内）
２０    主記憶／ＮＡＮＤフラッシュ制御ユニット
２１    ブートＲＯＭ
２２    ＮＡＮＤフラッシュ
２３    主記憶
２４    オンチップメモリ
２５    キャッシュメモリユニット
２６    メモリブロック
２９    ＮＡＮＤフラッシュ制御ユニット
【図１】
2005010942.tif 000003
【図２】
2005010942.tif 000004
【図３】
2005010942.tif 000005
【図４】
2005010942.tif 000006
【図５】
2005010942.tif 000007
【図６】
2005010942.tif 000008
【図７】
2005010942.tif 000009
【図８】
2005010942.tif 000010
【図９】
2005010942.tif 000011