(57)【要約】本発明は、プロセッサ（６０３）から集積回路に埋め込まれた不揮発性メモリ（６０２）にデータ（ＤＡＴＡ）を書き込む方法及び回路である。主な目的は、前記埋め込み不揮発性メモリの使用を最適化することである。本発明の方法は、多くのステップを含む：不揮発性メモリ（６０２）に書き込まれるデータは、最初に揮発性メモリ（６０１）に転送される。この後、待機信号（ｗａｉｔ）がプロセッサ（６０３）に送られる。次いで、データ（ＤＡＴＡ）は揮発性メモリ（６０１）から不揮発性メモリ（６０２）に転送される。最後に、待機信号（ｗａｉｔ）が解除される。従って、不揮発性メモリ（６０２）は、命令メモリ及びＲＡＭとして使用することができ、これにより本発明の主な目的が達せられる。対応する回路は、上述の機能を実行するように装備された複合集積回路である。
2005529399.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサから集積回路に埋め込まれた不揮発性メモリにデータを書き込む方法であって、
（ａ） 前記不揮発性メモリに書き込まれる前記データの少なくとも一部が揮発性メモリに転送され、
（ｂ）前記データが前記揮発性メモリに転送されると、前記プロセッサに待機信号が送られ、
（ｃ）前記データが前記揮発性メモリから前記不揮発性メモリに転送され、
（ｄ）前記待機信号が解除されること、を含む方法。
【請求項２】
データの転送がインターフェースによって制御される、請求項１に記載のデータを書き込む方法。
【請求項３】
揮発性メモリから不揮発性メモリへのデータの転送の開始時に、前記不揮発性メモリが書き込みモードにセットされる、請求項１又は２に記載のデータを書き込む方法。
【請求項４】
揮発性メモリから不揮発性メモリへのデータの転送中に、前記不揮発性メモリがプログラムモードにセットされる、先行する請求項の何れかに記載のデータを書き込む方法。
【請求項５】
揮発性メモリから不揮発性メモリへのデータ転送の終了時に、前記不揮発性メモリが読取りモードにセットされる、先行する請求項の何れかに記載のデータを書き込む方法。
【請求項６】
データの全てが最初に揮発性メモリに転送される、先行する請求項の何れかに記載のデータを書き込む方法。
【請求項７】
不揮発性メモリに書き込まれるデータに対応するアドレスが中間的に格納される、先行する請求項の何れかに記載のデータを書き込む方法。
【請求項８】
データが揮発性メモリに書き込まれる前に待機信号がプロセッサに送られ、前記データが前記揮発性メモリに完全に書き込まれた後に待機信号が解除される、先行する請求項の何れかに記載のデータを書き込む方法。
【請求項９】
プロセッサと、揮発性メモリと、不揮発性メモリと、前記プロセッサを前記揮発性メモリに接続すると共に、前記不揮発性メモリを前記揮発性メモリに接続するインターフェースと、を有する集積回路であって、前記インターフェースが、
前記不揮発性メモリに書き込まれるデータを最初に前記揮発性メモリに転送し、
前記データが前記揮発性メモリに転送された後、前記プロセッサに待機信号を送り、
前記揮発性メモリから前記不揮発性メモリへと前記データを転送し、
前記待機信号を解除する、ように装備されている集積回路。
【請求項１０】
前記不揮発性メモリがフラッシュメモリである、請求項９に記載の集積回路。
【請求項１１】
前記揮発性メモリがランダムアクセスメモリ又は静的ランダムアクセスメモリである、請求項９又は１０に記載の集積回路。
【請求項１２】
揮発性メモリが埋め込み揮発性メモリである、請求項９、１０又は１１に記載の集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサから集積回路に埋め込まれた不揮発性メモリにデータを書き込む方法と、該方法の実行に特に適応する、該方法に対応する集積回路とに関する。
【背景技術】
【０００２】
このような集積回路は、ポータブルデバイス、例えばワイヤレスモジュール、携帯電話、デジタルコードレスデバイス、あるいはパーソナルデジタルアシスタント（ＰＤＡ）等に広く使用されている。この市場では、サイズと消費電力が決定的な要因であるため、区域指数が小さいことが第一に求められる。従って、ベースバンドシステムのメモリ制御ユニット（ＭＣＵ）を有する不揮発性メモリの集積化が、構成要素及びピン配列の数を減らすための、そしてルーティング可能性を改良して全体的なシステムコストを減少させるための、適切な選択であると思われる。
【０００３】
一方、ベースバンドシステムオンチップ（ＳＯＣ）のパフォーマンス／コスト比の向上に寄与する特徴は、他にもいくつか存在する。
【０００４】
最も効果的な特徴の１つは、適切に選択されたメモリ階層である。異なるアクセス能力と異なるコスト及びサイズを有する階層を通してメモリ資源を分配することが、結果的にシステムパフォーマンスの全体的な向上につながる。
【０００５】
図１は、典型的ないわゆるハーバードアーキテクチャを示している。ブリッジ１０１は、３２ビットバス１０４上で、高度システムバス（ＡＳＢ）モジュール１０５、メモリマネージメントユニット（ＭＭＵ）１０６、ＲＡＭ１０７及びフラッシュメモリ１０２に接続される。高度ＲＩＳＣマシン（ＡＲＭ）１０３は、ＭＭＵ１０６に接続される。１６ビットバス１０８上で、ブリッジ１０１は高度周辺バス（ＡＰＢ）モジュール１０９に接続される。これらは、例えばユニバーサルシリアルバス（ＵＳＢ）モジュールであってよい。エリアに関する主なコストが、メモリの階層において生じることは明らかであるため、必要とするパフォーマンスに厳密に依存して、メモリのサイズとタイプを賢く選択することが、設計を成功させる上での基本である。
【０００６】
多くのアプリケーションでは、ハーバードアーキテクチャ内のマイクロコントローラに対してソフトウェアの所定の層が必要であるため、一般的には読取り専用メモリ（ＲＯＭ）が命令メモリ（ＩＭＥＭ）に対して使用され、一方データメモリに対しては、例えばＤＲＡＭやＳＲＡＭ等の揮発性メモリが主に選択されている。これにより、ダイ上のブートコードメモリスペースを命令メモリとしても使用することができ、従ってスペースが節約されると共に、システムの堅牢性と安全性が増すこととなる。ベースラインプロセスと統合された埋め込みＲＯＭは、特別な技術の選択肢を必要としないことが利点である。
【０００７】
しかし、このような手法には安定したソフトウェアが必要であるため、最終的な大量生産に対してのみ適切である。大抵のアプリケーションでは、いくつかのソフトウェアの改良が必要であるので、ＲＯＭの手法は、ＩＭＥＭには適していない。従って、ＩＭＥＭとして使用される埋め込みフラッシュメモリが、サイズとパフォーマンスの点で最も良い手法と言える。
【０００８】
さらに、マイクロプロセッサは、メモリ中にデータをロードしてセルをプログラミングすることによる、より複雑な書き込み手順を処理しなければならない。
【０００９】
システムは、フラッシュメモリ１０２を命令メモリとして使用するように設計されているため、マイクロプロセッサ１０３は、ＲＡＭ１０７への書き込みを行う一方で、フラッシュメモリ１０２への時間読取りアクセスの大部分を実行する。
【００１０】
残念ながら、ソフトウェアがいくつかのデータを永久に格納することを必要とする場合、フラッシュメモリ１０２への書き込み操作が必要である。この場合には、データをプログラミングするための実行コードは、フラッシュメモリ１０２内から出てはならない。何故なら、フラッシュメモリ１０２は、読取りアクセス−マイクロプロセッサからの命令のフェッチ−プログラムアクセス−を同時に行うことができないからである。
【００１１】
ＲＡＭに対する読取り／書き込み／読取りシーケンスとは異なり、書き込み操作は自己リセットされるため、同一シーケンスの操作は競合を生じさせ、フラッシュメモリには認められない。
【００１２】
フラッシュメモリは、読取り又はプログラムモードにセットされなければならない。これは、ソフトウェアコードを介して適切なコマンドを実行することによって行われる。従って、上述のシーケンスを実行するコマンドの一般的なシーケンスは、以下のようになる。
（１）フラッシュメモリをプログラムモードにセットする。
（２）プログラムされるＤＡＴＡ−１をフラッシュＡＤＤＲＥＳＳ−１に書き込む。
（３）プログラムされるＤＡＴＡ−２をフラッシュＡＤＤＲＥＳＳ−２に書き込む。
【００１３】
命令（１）が実行されるとすぐに、フラッシュメモリ１０２は、読取りを実行しなくなる。したがって、他の命令をフェッチし、実行することができない。さらに、また決定的なこととして、図２に示されるフラッシュメモリ１０２は、新たな命令により再び読取りモードにセットされるまで、このモードであり続ける。しかし、プロセッサ１０３は、フラッシュメモリ１０２から命令をフェッチすることができないため、このようなことは決して起こらない。このことが、システムのデッドロックを引き起こすのは明らかである。
【００１４】
Ｃａｃｅｒｅｓらによる米国特許第5,802,554号では、ブロック転送と同時にフラッシュメモリに頻繁なダイレクトアクセスを提供することによって、メモリアクセスの待ち時間を減少させる方法及びシステムが開示されている。メモリ管理ユニットは、メモリ階層の第１レベル又はメモリ階層の第２レベルの何れかからのデータを用いてキャッシュのコンテンツを制御する。しかし、この方法は、フラッシュメモリをＩＭＥＭとして使用することができない。
【発明の開示】
【発明が解決しようとする課題】
【００１５】
本発明の第１の主要な目的は、プロセッサから集積回路に埋め込まれた不揮発性メモリにデータを書き込む方法と、これに対応する集積回路を提供することであり、前記方法において、プロセッサは不揮発性メモリを命令メモリ及び揮発性メモリと見なす。
【００１６】
換言すれば、本発明は、埋め込みフラッシュメモリへの書き込みアクセスを隠し、全てのデータがマイクロプロセッサから送られるまで、ダイレクトメモリアクセス（ＤＭＡ）方法によってＲＡＭにデータをそらす方法、及びハードウェアの実装からなる。このように、マイクロプロセッサは命令メモリとして作用するフラッシュメモリから連続的に命令をフェッチすることができる。それにもかかわらず、フラッシュメモリは、最終のプログラムコマンドを受け取るまで、読取りモードで利用可能である。
【課題を解決するための手段】
【００１７】
本発明により、マイクロプロセッサは、埋め込みフラッシュメモリを命令メモリとして使用することができると共に、プログラムされる同メモリのパーツ／スペースに書き込みを行うことができる。
【００１８】
本発明によるアーキテクチャは、マイクロコントローラにメモリスペースを単に標準的な揮発性メモリスペースと見なすようにさせるメカニズムを埋め込むことによって、ソフトウェアの開発時間を大幅に減少させることができる。
【００１９】
本方法に関する独立請求項に記載の特徴を有し、プロセッサから集積回路に埋め込まれた不揮発性メモリにデータを書き込む方法と、装置に関する独立請求項による特徴を有する集積回路とにより、問題は解決される。
【００２０】
本発明によるプロセッサから集積回路に埋め込まれた不揮発性メモリにデータを書き込む方法は、以下のステップを含む。
【００２１】
不揮発性メモリに書き込まれるデータを、最初に揮発性メモリに転送する。
【００２２】
データが揮発性メモリに転送されるとすぐに、待機信号をプロセッサに送る。
【００２３】
その後、揮発性メモリから不揮発性メモリにデータを転送する。
【００２４】
最後に、待機信号を解除する。
【００２５】
本発明による集積回路は、プロセッサと、揮発性メモリと、不揮発性メモリと、インターフェースとを含み、該インターフェースは、プロセッサを揮発性メモリに接続し、不揮発性メモリを揮発性メモリに接続する。インターフェースは、
不揮発性メモリに書き込まれるデータを最初に揮発性メモリに転送し、
揮発性メモリにデータが転送されるとすぐに、プロセッサに待機信号を送り、
揮発性メモリから不揮発性メモリにデータを転送し、
最後に、待機信号を解除する、
ように装備されている。
【００２６】
本発明のさらなる利点は、従属請求項に示す特徴から生じる。
【００２７】
本発明の１つの実施形態では、データの転送はインターフェースにより制御される。
【００２８】
本発明の別の実施形態では、揮発性メモリから不揮発性メモリへのデータの転送の開始時に、不揮発性メモリは書き込みモードにセットされる。
【００２９】
本発明のさらなる実施形態では、揮発性メモリから不揮発性メモリへのデータの転送中に、不揮発性メモリはプログラムモードにセットされる。
【００３０】
本発明のさらなる実施形態では、揮発性メモリから不揮発性メモリへのデータの転送の終了時に、不揮発性メモリは読取りモードにセットされる。
【００３１】
有利なことに、データの全ては最初に揮発性メモリに転送される。この種のブロック型のデータ転送を用いれば、システム全体を加速化できる。
【００３２】
本発明の別の実施形態では、不揮発性メモリに書き込まれるデータに対応するアドレスが中間的に格納される。
【００３３】
デッドロックのリスクを回避するために、揮発性メモリにデータが書き込まれる前にプロセッサに待機信号が送られ、揮発性メモリにデータが書き込まれた後に待機信号が解除される。
【００３４】
本発明のさらなる実施形態では、集積回路の不揮発性メモリがフラッシュメモリであること、及び揮発性メモリが埋め込みＲＡＭであること、の少なくとも一方である。
【００３５】
続いて、本発明を、図面を参照してさらに説明する。
【発明を実施するための最良の形態】
【００３６】
図１によるアーキテクチャにおいて生じるデッドロックの問題は、ＲＡＭ１０７へプログラム操作を実行するコードの部分をダウンロードし、次いでＲＡＭ１０７においてこのプログラムルーチンの最初の命令に分岐し、ＲＡＭ１０７内からプログラム操作を実行し、最後に、フラッシュメモリ１０２のプログラミング後に、フラッシュメモリ１０２におけるコードに再びジャンプすることにより解決する。このことは図３に示される。
【００３７】
このソフトウェアアプローチの主な限界は、コードとアドレスを適切に管理することが困難である点にある。コードが、例えばＣ言語のような高級言語で書かれている場合には、ソフトウェアエンジニアは、フラッシュメモリ１０２内からではなくＲＡＭ１０７内からのプログラムルーチンを実行するために、ポインタとポインタを通してのファンクションコールとを大量に使用しなければならない。
【００３８】
さらに、図４で示されるプログラムルーチンは、フラッシュメモリアドレススペースに格納された幾つかの変数を使用している。これは一般的な状況であるが、これではコンパイラにはルーチンがどこで実行されるのか分らない。プログラムルーチンの実行中にこのような変数が呼び出されると、すぐに例外エラーが発生する。何故なら、フラッシュメモリ１０２は読取りモードでアクセスできないからである。
【００３９】
最後に、フラッシュメモリ１０２からＲＡＭ１０７へとプログラムルーチンをコピーすべきコピールーチンを書き込むために、ソフトウェアエンジニアは、開始アドレス、終了アドレス、及び転送するコードの部分のサイズ等のプログラムルーチンに関する情報が必要である。しかし、これらは、ソフトウェア書き込みの時には利用できない。従って、完全なコードの最初のドラフトバージョンをコンパイルし、次いでコンパイルされたコードのアセンブリバージョンから、必要な情報を抽出し、コードを書き換え、それを再コンパイルするしかない。コードについてさらなる任意の修正を行うことで、命令の相対的なアドレッシングが変更され、反復近似に対するこのようなアプローチが再び必要となる。
【００４０】
フラッシュメモリ１０２からではなくＲＡＭ１０７から高級言語法を通して実行されなければならないルーチンのダンピングを管理する方法の一例を以下に述べる。メムコピーコマンドがＲＡＭ１０７においてルーチンをコピーすると、適切なポインタ割当を通して、このＲＡＭアドレスから実行されるべきルーチンを呼び出すことが可能である。残念なことに、これでも、変数呼び出しがフラッシュメモリアドレススペースにアクセスしようとする場合に、エラーの発生は回避できない。
【００４１】
メムコピーコマンドは、コピーされるべきルーチンの開始アドレスとサイズを必要とする。従って、最初のドラフトのコンパイルは、ルーチンの開始アドレスとサイズを得るように実行されなければならない。何故なら、これらはコンパイル後にのみ利用可能となるからである。正確な情報がコードに挿入され、再びコンパイルされることが可能である。コードにおいて修正を行う毎に、コンパイルされたコードにおいて命令のアドレスが変更されることになるので、これまで述べた手順を再度実行しなければならない。
【００４２】
ユーザには利用しやすくはないが、より正確な方法は、アセンブリ言語で直接コードの部分を書き込むことである。そのシーケンスは：
（１）ＲＡＭにおいてフラッシュプログラムルーチンをコピーする；
（２）ＲＡＭから実行されるべきフラッシュプログラムルーチンを呼び出す；
（３）フラッシュメモリにジャンプして戻る；
である。このシーケンスは、メムコピーのようなライブラリコマンドや、ポインタを通してのファンクションコールを介して管理されるのではなく、２つのルーチンに分割される。上記シーケンスを達成するために、主にＣコードで以下のアセンブリルーチンが呼び出される：
（ａ）アセンブリルーチン
（ａ．１）フラッシュメモリからＲＡＭにコードをコピーする
（ａ．２）ルーチンがコピーされたＲＡＭの第１の命令アドレスにプロセッサのプログラムカウンタを合わせる。
ＲＡＭから、フラッシュプログラムルーチンが実行される。
（ｂ）ＲＡＭからフラッシュプログラムルーチンを起動する：
（ｂ．１）フラッシュメモリをプログラムする
（ｂ．２）他のアセンブリルーチンを呼び出して、フラッシュメモリのアドレススペースにおけるコードの残りの第１の命令アドレスにプロセッサのプログラムカウンタを合わせる。
【００４３】
これから先も、フラッシュメモリからの実行が続く。
【００４４】
このように、ＲＡＭ１０７から実行しているルーチンは、最初にフラッシュメモリ１０２をプログラムし、ついでフラッシュメモリのアドレススペースにおいてプログラムカウンタを合わせるアセンブルルーチンを呼び出し、コードを実行し続けるが、これはフラッシュメモリ１０２からである。
【００４５】
上述の解決法と比較してこのアプローチの利点は、命令のアドレスを直接制御することであり、コピーとＲＡＭ１０７へのジャンプとＲＡＭ１０７からのジャンプにコンパイラが関与しないので、プログラム動作中にフラッシュメモリ１０２に誤ってアクセスする可能性はほとんどない。
【００４６】
この場合ではまた、ＲＡＭ１０７におけるジャンプ先とフラッシュメモリ１０２にジャンプして戻る先を知るために、コードの修正毎に第１のドラフトコンパイルが必要である。
【００４７】
最後に、ＲＡＭ１０７からのコードの実行中に誤ってフラッシュメモリ１０２にアクセスしようとすることを防止するために、最も安全な方法は、ＲＡＭ１０７にプログラムルーチンだけではなく、コードの残りもコピーすることである。この方法の不利な点は、ＲＡＭ領域の消費が大きいことである。
【００４８】
低レベル言語法を通して、フラッシュメモリ１０２からではなくＲＡＭ１０７から実行されなければならないルーチンのダンピングを管理する方法の一例を以下に示す。
（ａ）Ｃメインプログラムが第１アセンブリルーチンを呼び出す。
（ｂ）第１アセンブリルーチンは、フラッシュメモリコンテンツの対象とするブロックをＲＡＭ１０７にコピーし、次いで、ＲＡＭ１０７にコピーされたプログラムの第１の命令にプログラムカウンタを合わせる。
（ｃ）この後、ＲＡＭ１０７からのコードが実行され、フラッシュメモリ１０２をプログラムすることが可能である。
（ｄ）プログラム操作が完了すると、Ｃ−コードの次の有効な命令にプログラムカウンタを合わせるために、第２のアセンブリルーチンが呼び出されるが、今回はフラッシュメモリ１０２においてであり、フラッシュメモリ１０２はこの時点では再び利用可能となっている。以前のように、ＲＡＭ１０７への及びフラッシュメモリ１０２へのジャンプ先に関する全ての情報は、第１のドラフトコンパイル後にのみ利用可能となり、コード修正毎にチェックされなければならない。
【００４９】
以下に述べるアーキテクチャの目的は、不揮発性命令メモリをプログラムすることを可能にする手段をソフトウェアの開発に提供することであり、他のメモリからそれを実行するのではなく、ＲＡＭとしてそれをインターフェースするため、必要なプログラム時間を待つだけでよい。
【００５０】
以下の定義を用いる。インターフェースは、データラッチの埋め込みレジスタにおいてプログラムされるデータを適切なload_commandを通して書き込むことを可能にする。これをロード操作と呼ぶ。適切なprogram_commandを用いて、それ自体のプログラミングが開始される。両操作には、フラッシュメモリを書き込みモードにセットすることが必要である。フラッシュメモリを書き込みモードにセットした後は、これら２つのコマンドをフラッシュメモリ内から実行することができない。
【００５１】
本発明は、特別な種類の埋め込みフラッシュメモリに限定されることはなく、任意の不揮発性メモリとともに使用されうる。
【００５２】
アーキテクチャは、ロード操作中に、フラッシュメモリの埋め込みレジスタにおいてではなく、一種のダイレクトメモリアクセス（ＤＭＡ）を介してＲＡＭにおいて、プログラムされるデータを転送するインターフェースを含み、該インターフェースは、このデータがフラッシュメモリ内で書き込まれるアドレスを追跡するが、フラッシュメモリを書き込みモードにセットせずに、命令を読み取ることが可能な状態にしておく。プログラムされる全てのデータがマイクロプロセッサから送られるとすぐに、フラッシュメモリの実際のプログラミングに対する次のコマンドが出される。この場合、インターフェースはマイクロプロセッサに待機信号を送り返すので、マイクロプロセッサは、フラッシュメモリからの命令をフェッチしようとしない。フラッシュメモリを書き込みモードにセットした後、インターフェースは、実際のロード操作に対してＲＡＭからフラッシュメモリ内の埋め込みレジスタへと転送を開始する。ロード操作の終了時に、インターフェースはフラッシュメモリにプログラムコマンドを送り、プログラム操作の終了時に、インターフェースは、マイクロプロッサバスから待機信号を解除する。
【００５３】
プロセッサの視点から、単純な書き込み操作が行なわれた。フラッシュメモリのプログラム時間により、書き込み操作はＲＡＭに対する書き込み操作よりも長く続くが、コピー／ジャンピング／プログラミング／ジャンピングの操作に必要な特別に時間のかかる作業はない。
【００５４】
以下に、図６ａ及び図６ｂのブロック線図とともに、図５ａ及び図５ｂのフローチャートで示される、インターフェース６０５により実行される操作について述べる。図５ａ及び図５ｂのフローチャートでは、６つの異なるセクションが点線で分けられている。
【００５５】
セクション１：マイクロプロセッサ６０３は、ロードを要求する命令であるload/prog命令を実行すると共に、フラッシュコントローラレジスタであるshadow fctr reg６０８において適切な値を書き込んでいる。この後、インターフェース６０５は、フラッシュメモリ６０２にロードされるデータＤＡＴＡを待っている。
【００５６】
セクション２：マイクロプロセッサ６０３は、書き込みモードでフラッシュメモリ６０２を選択し、バス６０４上でデータＤＡＴＡとアドレスＡＤＤＲを送る。インターフェース６０５は、フラッシュメモリ６０２に対する書き込みモードをマスクし、データＤＡＴＡ及びアドレスＡＤＤＲをキャッチする。インターフェース６０５は、マイクロプロセッサ６０３に対する待機信号ｗａｉｔを生成し、ＲＡＭ６０１にデータＤＡＴＡを格納する。インターフェース６０５は、マイクロプロセッサ６０３に対する待機信号ｗａｉｔを解除する。フラッシュメモリ６０２はまだ書き込みモードではなく、マイクロプロセッサ６０３は、例えばデータＤＡＴＡをロードするための命令をフェッチする。
【００５７】
セクション３：マイクロプロセッサ６０３は、プログラムを要求する命令であるload/prog命令を実行している。マイクロプロセッサ６０３は、フラッシュコントローラレジスタであるshadow fctr reg６０８において適切な値を書き込んでいる。その後、インターフェース６０５は、マイクロプロセッサ６０３に対する待機信号ｗａｉｔを再び生成する。インターフェース６０５は、マイクロプロセッサ６０３が待機状態にある間フラッシュメモリ６０２を書き込みモードにセットする。インターフェース６０５は、ＲＡＭ６０１からのデータＤＡＴＡを読み取る。
【００５８】
セクション４：インターフェース６０５は、フラッシュメモリデータラッチにおいてデータＤＡＴＡをロードする。
【００５９】
セクション５：最後のデータＤＡＴＡがＲＡＭ６０１からフラッシュメモリ６０２にロードされた後、インターフェース６０５はフラッシュメモリ６０２に対するプログラムコマンドを生成し、フラッシュメモリ６０２からのレディ信号をプールするが、この信号は、フラッシュメモリ６０２のプログラミングが終了したことを示している。
【００６０】
セクション６：フラッシュメモリ６０２がレディ信号を生成すると、インターフェース６０５はフラッシュメモリ６０２を再び読取りモードにセットし、マイクロプロセッサ６０３に対する待機信号ｗａｉｔを解除する。
【００６１】
ＲＡＭ６０１及びフラッシュメモリ６０２の両方に対するアドレスの管理について以下に述べる。
【００６２】
主な解決すべき問題は、以下の通りである：
１．  ＲＡＭ６０１内でデータＤＡＴＡを一時的にどこに格納するか。
２．  その後、ＲＡＭ６０１からのデータＤＡＴＡの検索を可能にするためにＲＡＭアドレスを保持すること。
３．  フラッシュメモリ６０２において、ＤＡＴＡをどこでプログラムすべきかに関する情報を保持すること。
【００６３】
第１の問題は、インターフェース６０５内に埋め込まれたダイレクトメモリアクセス（ＤＭＡ）方法により管理されるが、第２及び第３の問題は、インターフェース６０５内に埋め込まれたアルゴリズムによって解決される。
【００６４】
ダイレクトメモリアクセス（ＤＭＡ）を管理するために、インターフェース６０５にはＤＭＡエンジン６１０が埋め込まれている。一般に、ＤＭＡコントローラとマイクロプロセッサがメモリへの信号ワイヤを共有する場合、どちらのデバイスがメモリへアクセスするべきかを調整するメカニズムが存在しなければならない。ここで述べる本発明の実施形態では、インターフェース６０５は、マイクロプロセッサ６０３を一般的な待機信号ｗａｉｔを通して待機状態にした後だけに、メモリ６０１及び６０２にアクセスする。信号ｗａｉｔは、システムバス上では常に利用可能であるので、他の調停機能は必要でない。一方、マイクロプロセッサ６０３は、ＲＡＭ６０１における開始アドレスをＤＭＡエンジン６１０に転送しなければならない。この情報を用いて、インターフェース６０５は、マイクロプロセッサ６０３によって送られたデータＤＡＴＡをＲＡＭ６０１に再び送り、ＲＡＭ開始アドレスを格納し、送信されるワードの数を追跡することができる。さらに、間違った場所で書き込みを行っているＲＡＭ６０１においてデータを破壊するリスクがない。ＤＭＡエンジン６１０の目的は、適切なデバイス、即ちＲＡＭ６０１又はフラッシュメモリ６０２を選択し、適切なデバイスへデータを送り又はこのデバイスからデータを読み取り、デバイスからのレディ情報を待ち、インターフェース６０５における主状態マシン６１７へとアクノリッジとしてレディ情報を転送することである。
【００６５】
図６ａ、図６ｂ、図７及び図８において、インターフェース６０５のアーキテクチャの実装を示す。図６ａ及び図６ｂで示すブロック線図において、インターフェース６０５、マイクロプロセッサ６０３及びＲＡＭ６０１は、制御信号ｗａｉｔ、ｎＲＥＡＤ／ＷＲＩＴＥ、データ信号ＤＡＴＡ、及びアドレス信号ＡＤＤＲとともに、システムバス６０４に接続される。さらに、インターフェース６０５は、SEL_FLASHと呼ばれるフラッシュメモリ６０２のチップセレクトと、SEL_RAMと呼ばれるＲＡＭ６０１のチップセレクトにアクセスする必要がある。インターフェース６０５は、主に主状態マシン（ＭＳＭ）６１７と、ＤＭＡエンジン６１０と、カウンタ６０６とに基づいている。主状態マシン６０６は、マイクロプロセッサ６０３からの要求をチェックし、アドレス及びデータレジスタに対する入力を制御する。カウンタ６０６は、ＲＡＭ６０１に書き込まれたワードの数を追跡して、フラッシュメモリのローディングに対してそれらを検索する。
【００６６】
レジスタは、以下の通りである：
フラッシュメモリ開始アドレスレジスタ６１１は、フラッシュメモリ６０２をどこでプログラムすべきかを示す開始アドレスであるflash start addrを格納する。
【００６７】
ＲＡＭ開始アドレスレジスタ６１２は、ＲＡＭ６０１においてデータＤＡＴＡをどこに一時的に保存すべきかを示す開始アドレスであるRAM start addrを格納する。この開始アドレスは、データＤＡＴＡを送る前に、マイクロプロセッサ６０３からインターフェース６０５に送信されなければならない。
【００６８】
データバッファ６１３は、ＲＡＭ６０１又はフラッシュメモリ６０２にデータＤＡＴＡを送る前にロードサイクル毎にデータＤＡＴＡを格納する。
【００６９】
最終カウントレジスタ６０７は、実行される最大数のＲＡＭ書き込みステップを格納する。このレジスタは、コンパレータ６１６を介する連続したフラッシュメモリのローディングの終了をチェックするために使用される。
【００７０】
フラッシュ現行アドレスレジスタ６１４は、フラッシュメモリ６０２にアクセスするためにＤＭＡエンジン６１０によって現在使用されているアドレスを格納する。これは：
−  最初のローディングに対するフラッシュメモリ開始アドレスflash start addr；
−  連続するローディングサイクル中の（フラッシュメモリ開始アドレスflash start addr）＋（現在のカウンタ値）；である。
ＲＡＭ現行アドレスレジスタ６１５は、ＲＡＭ６０１にアクセスするためにＤＭＡエンジン６１０によって現在使用されているＲＡＭアドレスRAM current addrを格納する。これは：
−  最初の書き込み又は読取り操作に対するＲＡＭ開始アドレスRAM start addr；
−  連続する書き込み又は読取り操作中の（ＲＡＭ開始アドレスRAM start addr）＋（現在のカウンタ値）；である。
【００７１】
シャドウフラッシュ制御レジスタshadow_fctr_reg６０８は、マイクロプロセッサ６０３によって送られ、インターフェース６０５によって格納されるロードコマンドとプログラムコマンドを格納する。
【００７２】
実際のフラッシュ制御レジスタであるreal_fctr_reg６０９は、インターフェース６０５によってフラッシュメモリ６０２に送られるプログラムコマンド及びロードコマンドを格納する。
【００７３】
図７は、主状態マシン（ＭＳＭ）６１７の動作、即ち、ＭＳＭによって実行される操作、及びダイレクトメモリアクセス状態マシン（ＤＭＡ  ＳＭ）６１０との共同動作を示す。
【００７４】
状態０：ＭＳＭはアイドル状態にある。
【００７５】
状態１：ＭＳＭはマイクロプロセッサ（以下μＰと示す）からのロード要求を検出した。μＰ６０３は、インターフェース６０５のシャドウフラッシュ制御レジスタshadow fctr reg内に特定のロード命令を書き込んだ。
ａ）  ＭＳＭは、バス６０４からRAM_start_addrレジスタ及びRAM_current_addrレジスタへの転送が可能なように、イネーブル信号en_data_inと信号update_addr及びdata_in_selをセットする。ここで、μＰは、バッファとして使用されるＲＡＭスペースの開始アドレスをＭＳＭに送らなければならない。ＭＳＭは、ＤＡＴＡバスからこの値を受け取り、RAM_start_addrレジスタとRAM_current_addrレジスタにその値を格納する。さらに、ＭＳＭは増分アドレス計算に使用されるカウンタ６０６をリセットする。
【００７６】
状態２：ここでμＰは、バッファとして使用されるＲＡＭスペースの開始アドレスをＭＳＭに送らなければならない。ＭＳＭは、データバスからこの値を受け取り、RAM_start_addrレジスタに格納する。
【００７７】
状態３：ＭＳＭは、μＰがフラッシュメモリ６０２を書き込みモードに選択したことを検出した（バスシステムレベルで利用できるｎＲＥＡＤ／ＷＲＩＴＥ信号及びSEL_FLASH信号のチェックを通して検出が行われる−図６ｂ参照）。さらに、μＰは、バスにＤＡＴＡ及びＡＤＤＲを送った。
ａ）  ＭＳＭは、μＰに対して待機信号ＷＡＩＴを生成する。
ｂ）  ＭＳＭは、イネーブル信号en_addr_inとen_data_inをセットし、ＤＡＴＡ及びＡＤＤＲシステムバスから受け取る。DATA_bufferレジスタとFLASH_start_addrレジスタに格納されるべき値が存在する。
【００７８】
状態４：ここで、ＭＳＭは、受け取ったデータをＲＡＭ６０１に再度書き込まなければならない。
ａ）  ＲＡＭに対するアドレスは以下のように計算される：
（レジスタRAM_current_addrの値）＋（カウンタの値）
第１のループに対しては、RAM_current_addr＝RAM_start_addr、カウンタの値＝０（状態１．ａ参照）
ｂ）  ここで、ＭＳＭは、ＤＭＡ  ＳＭに、アドレスRAM_current_addrとデータDATA bufferと共にRAM_write要求を送る。
【００７９】
状態５：ＭＳＭは、ＲＡＭ書き込み操作が実行されたというＤＭＡ  ＳＭからのアクノリッジを待つ。
【００８０】
状態６：ＭＳＭがＤＭＡ  ＳＭからのアクノリッジを検出すると、μＰに対する信号ＷＡＩＴが解除され得る。なお、フラッシュメモリは書き込みモードになく、μＰはＤＡＴＡをローディングすることに対する命令をフェッチすることができる。
【００８１】
ここで、μＰは、プログラムされるＤＡＴＡを実際にフラッシュメモリにローディングしているかのように、システムバスにＤＡＴＡ及びＡＤＤＲを送り続ける。ＭＳＭは、状態４〜状態６間をループし、ＤＡＴＡをＲＡＭに逸らして、読取りモードにあるフラッシュメモリに対してロード操作をマスクする。μＰがロードされ且つ実行される全てのデータ、あるいは他の操作を必要とするデータ全てを送った後、μＰは最後のプログラム命令Prog Instructionをインターフェースのshadow_fctr_regに送る。
【００８２】
状態７：ＭＳＭは、μＰからProg Instructionを検出した。
ａ）ＭＳＭは、μＰを待機状態にする。何故なら、これ以降、フラッシュメモリは読取りモードで利用されないことにより、μＰに命令を送ることがないからである。
ｂ）ＭＳＭは、最終カウントレジスタにFlash_current_addrを格納する。
ｃ）ＭＳＭは、Flash_start_addrとRAM_start_addr（状態３．ｂで格納される）をそれぞれ、Flash_current_addrとRAM_current_addrに転送する。さらに、ＭＳＭはカウンタをリセットする。
ｄ）ＭＳＭは、アドレスとしてのRAM_current_addrとともにRAM_read requestをＤＭＡに送り、ＤＭＡのアクノリッジであるＤＭＡ  Ａｃｋを待つ。
【００８３】
状態８：ＭＳＭはＤＭＡ  ＳＭからのＤＭＡ  Ａｃｋがセットされる（RAM_read操作が実行された）まで、ループを行う。インターフェースは、フラッシュメモリデータラッチにＤＡＴＡをロードする。
【００８４】
状態９：ＭＳＭは、フラッシュメモリデータラッチに対して、ＲＡＭによって検索されたＤＡＴＡとFlash_current_addr中のアドレスを実際にロードする。これは、ＭＳＭによって要求されたflash_loadを通してＤＭＡ  ＳＭによって実行される。さらにＭＳＭは、ロードされる最終のＤＡＴＡであるかどうかをチェックするために、（状態７．ｂで格納された）Last_count 値とFlash_current_addrを比較する。
【００８５】
Flash_current_addrがLast_countと等しい場合には、ＭＳＭは状態１１に進む。
ｂ）Flash_current_addrがLast_countと違う場合には、ＭＳＭは状態１０に進む。
【００８６】
状態１０：ＭＳＭはカウンタを増分し、レジスタを更新する。
ａ）Flash_current_addr＝Flash_current_addr＋Counter
ｂ）RAM_current_addr＝RAM_current_addr＋Counter
ｃ）ＭＳＭは、アドレスとしてのRAM_current_addrとともにram_read要求をＤＭＡ  ＳＭに送り、再び状態８に進んでＤＭＡのアクノリッジを待つ。
【００８７】
状態１１：Flash_current_addr = Last_countの場合には、全てのデータはフラッシュメモリにロードされており、今度はフラッシュメモリをプログラムするタイミングであり、フラッシュメモリに実際のプログラムコマンドを送る。
【００８８】
状態１２：ここで、フラッシュメモリアーキテクチャ（これはフラッシュメモリモジュールから独立している）によって、ＭＳＭはフラッシュメモリに対して特定されたプログラム時間によってクロックサイクルを一定回数ループするか、あるいはプログラム時間の終了時にフラッシュメモリから潜在的レディ信号が送られてくるまでループする（この信号が存在すればＤＭＡ  ＳＭに進むことができ、ＭＳＭは通常通りＤＭＡ  ＳＭからのＤＭＡ  Ａｃｋを待つ）。
【００８９】
状態１３：ＤＭＡ  ＳＭからＤＭＡ  Ａｃｋを受け取る、即ちプログラム時間に達すると、ＭＳＭはフラッシュメモリを読取りモードに戻すことができる（ロード及びプログラムに対して、ＭＳＭはReal_fctr_regに適切なビットの書き込みを行う）。ＭＳＭは、μＰに対する待機信号を解除し、アイドル状態（状態０）になる。
【００９０】
図８は、本発明による、埋め込みダイレクトメモリアクセス（ＤＭＡ）状態マシン６１０の動作を示す。ＤＭＡ  ＳＭの機能を以下により詳細に記載する。
【００９１】
状態０：ＤＭＡ  ＳＭは、アイドル状態にある。
【００９２】
状態１：ＤＭＡ  ＳＭは、ＭＳＭからのRAM_write要求を検出した。
ａ）ＤＭＡ  ＳＭはアクノリッジとしてＭＳＭにより使用される信号 dma_ackをリセットする。
ｂ）ＤＭＡ  ＳＭは、RAM_current_addrの値をアドレスシステムバスに送るように信号addr_out_selをセットする。
【００９３】
ＤＭＡ  ＳＭは、アドレス及びデータシステムバスに、RAM_current_addrの値とDATA_BUFFER レジスタの値を送るために、信号enable_addr_outとenable_data_outをセットすることが可能である。
ｄ）ＲＡＭアーキテクチャによって、書き込み操作は一定数のクロックサイクルを行うか、あるいはＲＡＭから戻ったレディ信号によって管理されることができる。いずれの場合も、書き込みサイクルの終了時にＤＭＡ  ＳＭは状態４に進む。
【００９４】
状態２：ＤＭＡ  ＳＭは、ＭＳＭからのRAM_read要求を検出した。
ａ）ＤＭＡ  ＳＭは、ＭＳＭによってアクノリッジとして使用される信号dma_ackをリセットする。
ｂ）ＤＭＡ  ＳＭは、RAM_current_addrの値をアドレスシステムバスに送るために、信号addr_out_selをセットする。
ｃ）ＤＭＡ  ＳＭは、RAM_current_addrの値をアドレスシステムバスに送るために、ここで信号enable_addr_outをセットすることができる。
ｄ）ＲＡＭアーキテクチャによって、読取り操作は一定数のクロックサイクルを行うか、あるいはＲＡＭから戻ったレディ信号によって管理されることができる。いずれの場合も、読取りサイクルの終了時にＤＭＡ  ＳＭは状態４に進む。
【００９５】
状態３：ＤＭＡ  ＳＭはＭＳＭからのFLASH_load要求を検出した。
ａ）ＤＭＡ  ＳＭは、ＭＳＭによってアクノリッジとして使用される信号dma_ackをリセットする。
ｂ）ＤＭＡ  ＳＭは、FLASH_current_addrの値をアドレスシステムバスに送るために、信号addr_out_selをセットする。
ｃ）ＤＭＡ  ＳＭは、Flash_current_addrの値とDATA_BUFFERレジスタの値とをアドレスシステムバスに送るために、ここで信号enable_addr_outとenable_data_outをセットすることができる。
ｄ）フラッシュメモリアーキテクチャによって、ロード操作は一定数のクロックサイクルを行うか、あるいはフラッシュメモリから戻ったレディ信号によって管理されることができる。いずれの場合も、ロードサイクルの終了時にＤＭＡ  ＳＭは状態４に進む。
【００９６】
状態４：メモリ操作が完了すると、ＤＭＡ  ＳＭはＭＳＭに対して信号dma_ackを１にセットし、アイドル状態、即ち状態０に戻る。
【００９７】
ここで、主状態マシン（ＭＳＭ）及びダイレクトメモリアクセス状態マシン（ＤＭＡ  ＳＭ）の両方の操作の記載を終了する。
【００９８】
ここに記載したアーキテクチャは、いくつかの利点を有している。ソフトウェア開発時間が減少し、再使用可能アプリケーションコードを有する強力なシステムが開発される−このコードはアプリケーションに焦点を当てているが、ハードウェアの制限に焦点を当てていない。
【００９９】
本発明のアーキテクチャを実行する本発明による方法は、マイクロプロセッサが埋め込みフラッシュメモリを命令メモリとして使用する、全てのアプリケーションに非常に適している。
【図面の簡単な説明】
【０１００】
【図１】最新の技術による埋め込みフラッシュメモリを有する拡張ＲＩＳＣマシンに基づくサブシステム。
【図２】フラッシュメモリとプロセッサとの間の通信のブロック線図。
【図３】第１の実施形態のデッドロックを回避するための命令のシーケンスを示す図。
【図４】第２の実施形態のデッドロックを回避するための命令のシーケンスを示す図。
【図５ａ】本発明による集積回路の対応するブロック線図と合わせた、オペレーションのフローチャートの第１の部分を示す図。
【図５ｂ】図５aで示されるフローチャートの第２の部分を示す図。
【図６ａ】本発明による集積回路の実装を示すブロック線図の第１の部分を示す図。
【図６ｂ】図６ａで示されるブロック線図の第２の部分を示す図。
【図７】本発明による主状態マシンの図。
【図８】本発明による埋め込みダイレクトメモリアクセス（ＤＭＡ）エンジンの動作を示す図。
【符号の説明】
【０１０１】
６０１  揮発性メモリ
６０２  不揮発性メモリ
６０３  プロセッサ
６０４  バス
６０５  インターフェース
６０６  カウンタ
６０７  最終カウントレジスタ
６０８  シャドウフラッシュ制御レジスタ
６０９  フラッシュ制御レジスタ
６１０  ＤＭＡエンジン
６１１  フラッシュ開始アドレス
６１２  ＲＡＭ開始アドレス
６１３  データバッファ
６１４  フラッシュ現行アドレス
６１５  ＲＡＭ現行アドレス
６１６  コンパレータ
６１７  主状態マシン（ＭＳＭ）
【図１】
2005529399.tif 000003
【図２】
2005529399.tif 000004
【図３】
2005529399.tif 000005
【図４】
2005529399.tif 000006
【図５ａ】
2005529399.tif 000007
【図５ｂ】
2005529399.tif 000008
【図６ａ】
2005529399.tif 000009
【図６ｂ】
2005529399.tif 000010
【図７】
2005529399.tif 000011
【図８】
2005529399.tif 000012
【国際調査報告】
2005529399.tif 000013
2005529399.tif 000014
2005529399.tif 000015