(57)【特許請求の範囲】
【請求項１】
半導体集積回路に内蔵された不揮発性メモリへの書き込みを行う方法であって、
（ａ）前記不揮発性メモリへの書き込みを行うためのインストラクションコードを同期シリアル通信によって外部から前記半導体集積回路の通信インタフェースに送信するステップと、
（ｂ）前記通信インタフェースが受信した前記インストラクションコードを前記半導体集積回路の中央演算処理装置（ＣＰＵ）へ送るとともに、同期シリアル通信によって受信したシリアルクロックを前記ＣＰＵへ送るステップと、
（ｃ）前記ＣＰＵにおいて、前記シリアルクロックを動作クロックとして受け取った前記インストラクションコードを実行し、前記シリアルクロックに同期して前記不揮発性メモリへデータの書き込みを行うステップと、を具備し、
前記ステップ（ｃ）において、前記インストラクションコードを実行するクロック数が、前記通信インタフェースが前記インストラクションコードの転送を行うクロック数よりも短い場合、前記ステップ（ｂ）の前記インストラクションコードの転送と前記ステップ（ｃ）の前記インストラクションの実行との間でサイクルが合うようにダミー命令を挿入することを特徴とする書き込み方法。
【請求項２】
半導体集積回路に内蔵された不揮発性メモリへの書き込みを行う方法であって、
第１の動作モードの場合は、
（ａ）中央演算処理装置（ＣＰＵ）からインストラクションアドレスを前記不揮発性メモリへ送信するステップと、
（ｂ）前記不揮発性メモリの前記インストラクションアドレスに対応する第１のインストラクションコードを前記ＣＰＵへ送信するステップと、
（ｃ）前記ＣＰＵが前記第１のインストラクションコードを実行するステップと、を含み、
第２の動作モードの場合は、
（ｄ）前記不揮発性メモリへの書き込みを行うための第２のインストラクションコードを同期シリアル通信によって外部から前記半導体集積回路の通信インタフェースに送信するステップと、
（ｅ）前記通信インタフェースが受信した前記第２のインストラクションコードを前記半導体集積回路の中央演算処理装置（ＣＰＵ）へ送るとともに、同期シリアル通信によって受信したシリアルクロックを前記ＣＰＵへ送るステップと、
（ｆ）前記ＣＰＵにおいて、前記シリアルクロックを動作クロックとして受け取った前記第２のインストラクションコードを実行し、前記シリアルクロックに同期して前記不揮発性メモリへデータの書き込みを行うステップと、を具備し、
前記ステップ（ｆ）において、前記第２のインストラクションコードを実行するクロック数が、前記通信インタフェースが前記第２のインストラクションコードの転送を行うクロック数よりも短い場合、前記ステップ（ｄ）の前記第２のインストラクションコードの転送と前記ステップ（ｆ）の前記第２のインストラクションの実行との間でサイクルが合うようにダミー命令を挿入することを特徴とする書き込み方法。
【請求項３】
請求項１のステップ（ｃ）において、
前記ＣＰＵが前記インストラクションコードを実行後、外部から前記通信インタフェースへのシリアル通信が中断され、前記不揮発性メモリへの書き込みを行う制御信号がアクティブに遷移し、
所定期間経過後、外部から前記インタフェースへのシリアル通信が再開され、前記ＣＰＵが前記インストラクションコードを実行し、
前記ＣＰＵが前記インストラクションコードを実行後、前記制御信号が非アクティブに遷移することを特徴とする請求項１に記載の書き込み方法。
【請求項４】
請求項２のステップ（ｆ）において、
前記ＣＰＵが前記第２のインストラクションコードを実行後、外部から前記通信インタフェースへのシリアル通信が中断され、前記不揮発性メモリへの書き込みを行う制御信号がアクティブに遷移し、
所定期間経過後、外部から前記インタフェースへのシリアル通信が再開され、前記ＣＰＵが前記第２のインストラクションコードを実行し、
前記ＣＰＵが前記第２のインストラクションコードを実行後、前記制御信号が非アクティブに遷移することを特徴とする請求項２に記載の書き込み方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、フラッシュメモリ、ＥＥＰＲＯＭ、ＥＰＲＯＭ、ＦｅＲＡＭ等の不揮発性メモリと、中央演算処理装置（以下「ＣＰＵ」という）とを内蔵したシングルチップ・マイクロコンピュータ（以下、「マイコン」という）やゲートアレイ等の半導体集積回路に関し、特に、プログラム実行可能でワーク用のＲＡＭを持たない半導体集積回路に関する。さらに、本発明は、そのような半導体集積回路に内蔵された不揮発性メモリへの書き込み方法に関する。
【従来の技術】
【０００２】
従来より、ＣＰＵ及び不揮発性メモリを内蔵した半導体集積回路をボードに実装した後で、ＲＯＭライタからシリアルインターフェースを介してＣＰＵに通信を行い、ＣＰＵを動作させて不揮発性メモリにプログラムを書き込んだり更新したりすることが行われていた。これを、「オンボード（インサーキット）書き込み」という。例として、従来のオンボード書き込みのための回路構成例を図６に示す。
【０００３】
図６において、マイコン３００は、ＣＰＵコア３０１と、制御レジスタ３０２と、同期シリアル通信インタフェース３０３と、マルチプレクサ３０４と、フラッシュメモリ３０５と、マスクＲＯＭ３０７とにより構成されている。ＣＰＵコア３０１は、インストラクションアドレスバスＢ３１及びインストラクションバスＢ３２を介して、マスクＲＯＭ３０７及びマルチプレクサ３０４と接続されている。また、ＣＰＵコア３０１は、データアドレスバスＢ３３及びデータバスＢ３４を介して、制御レジスタ３０２、同期シリアル通信インタフェース３０３及びマルチプレクサ３０４と接続されている。
マルチプレクサ３０４は、バスＢ３５を介して、フラッシュメモリ３０５に接続されている。フラッシュメモリ３０５は、ＣＰＵコア３０１が実行すべきインストラクションコードや、ＣＰＵコア３０１が使用するデータ等を記憶するための不揮発性メモリである。
【０００４】
フラッシュメモリ３０５にプログラムを書き込む際には、同期シリアル通信インタフェース３０３にＲＯＭライタ４００が接続される。ＲＯＭライタ４００は、同期シリアル通信により、操作コマンドやアドレス情報やデータ等の転送を行う。一方、マイコン３００に内蔵されたマスクＲＯＭ３０７は、フラッシュメモリ３０５をオンボード書き込みするためにＣＰＵコア３０１が実行するプログラムを記憶する読み出し専用メモリであり、通信とシーケンサーのために使用される。ＲＯＭライタ４００からマイコン３００に転送された操作コマンドは、マスクＲＯＭ３０７に記憶されたオンボード書き込みプログラムにより実行され、アドレス情報に基づいて消去やデータの書き込み等を行う。書き込み時間や消去時間の管理も、マスクＲＯＭ３０７に記憶されたプログラムにより行われる。
【０００５】
この同期シリアル通信においては、ＲＯＭライタ４００からマイコン３００へクロックを送信するためのＣＬＫ信号線４０４と、ＲＯＭライタ４００からマイコン３００へデータを送信するためのＲＸＤ信号線４０１と、マイコン３００からＲＯＭライタ４００へデータを送信するためのＴＸＤ信号線４０２と、ＲＯＭライタ４００とマイコン３００との間でシリアルクロックを送受信するためのＳＣＬＫ信号線４０３とが少なくとも用いられる。
【０００６】
制御レジスタ３０２は、前述したようにＣＰＵコア３０１と接続されているほか、フラッシュメモリ書き込みアドレスバスＢ３６、フラッシュメモリ書き込みデータバスＢ３７及び制御信号バスＢ３８を介して、マルチプレクサ３０４とも接続されている。制御レジスタ３０２は、ＣＰＵコア３０１から書き込まれたデータを保持するとともに、そのデータをフラッシュメモリ書き込みアドレスバスＢ３６、フラッシュメモリ書き込みデータバスＢ３７及び制御信号バスＢ３８へ出力する。
【０００７】
マルチプレクサ３０４は、前述したようにＣＰＵコア３０１及びフラッシュメモリ３０５と接続されているほか、フラッシュメモリ書き込みモード指示線３０６を介して、スイッチ３０８とも接続されている。スイッチ３０８は、オンボード書き込みを行う時はオンにされてフラッシュ・メモリ書き込みモード指示線３０６を接地し、オンボード書き込みを行わない時はオフにされてフラッシュ・メモリ書き込みモード指示線３０６をプルアップする。マルチプレクサ３０４は、フラッシュメモリ書き込みモード指示線３０６がプルアップされている時にバスＢ３１〜Ｂ３４とバスＢ３５とを接続し、フラッシュメモリ書き込みモード指示線３０６が接地されている時にバスＢ３６〜Ｂ３８とバスＢ３５とを接続する。
【０００８】
次に、図６に示すマイコン３００の通常の動作（オンボード書き込み以外の動作）について説明する。尚、通常の動作の場合、スイッチ３０８はオフであり、フラッシュ・メモリ書き込みモード指示線３０６はプルアップされている。
【０００９】
まず、ＣＰＵコア３０１は、インストラクションアドレスをインストラクションアドレスバスＢ３１上に出力する。マルチプレクサ３０４は、インストラクションアドレスバスＢ３１上に出力されたインストラクションアドレスを、バスＢ３５に伝達する。フラッシュメモリ３０５は、バスＢ３５よりインストラクションアドレスを受け、当該アドレスに対応するインストラクションコードをバスＢ３５へ出力する。マルチプレクサ３０４は、バスＢ３５上に出力されたインストラクションコードを、インストラクションバスＢ３２に伝達する。ＣＰＵコア３０１は、インストラクションバスＢ３２よりインストラクションコードを受け、当該インストラクションコードを実行する。このように、ＣＰＵコア３０１によって、フラッシュメモリ３０５に記憶されたインストラクションコード列（プログラム）が実行される。
【００１０】
次に、本従来例におけるオンボード書き込み動作について説明する。オンボード書き込みを行う場合、オンボード書き込み作業者は、スイッチ３０８をオンにするとともにマイコン３００の電源をオンにし、更にＲＯＭライタ４００の電源をオンにして操作を開始する。
【００１１】
オンボード書き込み動作が開始されると、ＣＰＵコア３０１は、インストラクションアドレスバスＢ３１へ、マスクＲＯＭ３０７中のオンボード書き込み用プログラムに対応するアドレスを出力する。次に、ＣＰＵコア３０１は、インストラクションバスＢ３２を介して、マスクＲＯＭ３０７からオンボード書き込みのためのインストラクションコードを読み込む。そして、ＣＰＵコア３０１は、読み込んだオンボード書き込みのためのインストラクションコードを実行する。更に、ＣＰＵコア３０１は、オンボード書き込みに必要なデータ等を、同期シリアル通信線４０１〜４０４及び同期シリアル通信インタフェース３０３を介して、ＲＯＭライタ４００から受信する。このようにして、ＣＰＵコア３０１がマスクＲＯＭ３０７中に記憶されたオンボード書き込みのためのインストラクションコード列（プログラム）を実行することにより、フラッシュメモリ３０５への書き込みが行われる。
【発明が解決しようとする課題】
【００１２】
このように、従来は、オンボード書き込みのための通信及びシーケンスを実行するプログラムを記憶する為にマスクＲＯＭを必要としていたため、回路規模が増大していた。特に、マイコンの場合には、マスクＲＯＭを内蔵するためチップ面積が増大するとともに端子数も増えてしまうという問題があった。
【００１３】
また、オンボード書き込み時の各制御信号のパルス幅やリトライ回数等を変更するには、マスクＲＯＭ中に記憶されたプログラムを変更する必要があった。これに対し、各制御信号を複数種類のパルス幅で出力するように予めマスクＲＯＭ中のプログラムを作成しておくことも考えられるが、プログラム・サイズが増大するとともにマスクＲＯＭのサイズも増大してしまうという問題があった。
【００１４】
このような課題を解決する方法として、オンボード書き込みのためのプログラムをＲＡＭ上に記憶して実行することも考えられる。しかし、４ビットマイコンの場合には、ワーク用のＲＡＭを持たない構成が一般的である。また、ＲＡＭを搭載したとしても、４ビットマイコン等においてはデータ幅とインストラクション幅とが異なるため、オンボード書き込みのためのプログラムをＲＡＭ上に記憶し実行することは困難であった。
【００１５】
ところで、日本国特許出願公開公報（特開）平１１−１４９３７６号に掲載されているＢＯＯＴローダー回路においては、外部通信インタフェースを使ってＲＯＭの書き込みをすることができるが、前述したようなＲＯＭ書き込みのための各制御信号のパルス幅を確保することが出来なかった。
【００１６】
そこで、上記の点に鑑み、本発明は、半導体集積回路に内蔵された不揮発性メモリにオンボード書き込みを行う場合に、マスクＲＯＭを不要とし、更に不揮発性メモリの書き込みに必要な各種制御信号のパルス幅を容易に変更することを目的とする。
【課題を解決するための手段】
【００１７】
以上の課題を解決するため、本発明に係る半導体集積回路は、中央演算処理装置（ＣＰＵ）と、不揮発性メモリと、不揮発性メモリへの書き込みを行うためにＣＰＵが実行するプログラムを通信によって外部から受信し、受信したプログラムをＣＰＵへ送る通信インタフェースとを具備する。
【００１８】
ここで、通信インタフェースが、不揮発性メモリへの書き込みを行うため にＣＰＵが実行するプログラムを同期シリアル通信によって外部から受信し、受信したプログラムをＣＰＵへ送るとともに、同期シリアル通信によって受信したシリアルクロックをＣＰＵへ送るようにしても良い。
【００１９】
また、本発明に係る書き込み方法は、半導体集積回路に内蔵された不揮発性メモリへの書き込みを行う方法であって、（ａ）不揮発性メモリへの書き込みを行うためのプログラムを通信によって外部から半導体集積回路の通信インタフェースに送信するステップと、（ｂ）通信インタフェースが受信したプログラムを半導体集積回路の中央演算処理装置（ＣＰＵ）へ送るステップと、（ｃ）ＣＰＵにおいて受け取ったプログラムを実行し、不揮発性メモリへの書き込みを行うステップとを具備する。
【００２０】
ここで、ステップ（ａ）が、不揮発性メモリへの書き込みを行うためのプログラムを同期シリアル通信によって外部から受信するステップを含み、ステップ（ｂ）が、通信インタフェースが受信したプログラムをＣＰＵへ送るとともに、同期シリアル通信によって受信したシリアルクロックをＣＰＵへ送るステップを含み、ステップ（ｃ）が、ＣＰＵにおいて、受け取ったプログラムをシリアルクロックを動作クロックとして実行し、不揮発性メモリへの書き込みを行うステップを含むようにしても良い。
【００２１】
以上の様に構成した本発明によれば、不揮発性メモリの書き込みプログラムを通信によって送信するので、不揮発性メモリの書き込みプログラムを記憶するためのマスクＲＯＭ等を無くすことができ、回路の簡単化やチップ面積の縮小を図ることができる。これにより、マスクＲＯＭ用のクロック端子も不要となる。
【００２２】
また、マスクＲＯＭ等に記憶されたプログラムのように固定されたプログラムを持たないので、プログラムの不具合の修正が容易となる。
【００２３】
更に、不揮発性メモリの書き込みプログラムの送信に同期シリアル通信を用いて、そのシリアルクロックをＣＰＵへ供給するとともに不揮発性メモリの書き込みプログラムの送信タイミングを調整することにより、不揮発性メモリの書き込みに必要な各制御信号のパルス幅を確保するとともに、パルス幅の変更を容易に行うことができる。
【発明の実施の形態】
【００２４】
以下、図面に基づいて本発明の実施の形態について説明する。なお、同一の要素には同一の参照番号を付して説明を省略する。
【００２５】
図１は、本発明の一実施形態に係るオンボード書き込みのための回路構成を示すブロック図である。本実施形態は、本発明をシングルチップ・マイクロコンピュータ（以下、「マイコン」という）に適用したものである。
【００２６】
図１において、マイコン１００は、ＣＰＵコア１０１と、制御レジスタ１０２と、同期シリアル通信インタフェース１０３と、マルチプレクサ１０４と、フラッシュメモリ１０５とにより構成されている。ＣＰＵコア１０１は、インストラクションアドレスバスＢ１１及びインストラクションバスＢ１２を介して、マルチプレクサ１０４と接続されている。また、ＣＰＵコア１０１は、データアドレスバスＢ１３及びデータバスＢ１４を介して、制御レジスタ１０２、同期シリアル通信インタフェース１０３及びマルチプレクサ１０４と接続されている。
【００２７】
マルチプレクサ１０４は、バスＢ１５を介してフラッシュメモリ１０５に接続されている。フラッシュ・メモリ１０５は、ＣＰＵコア１０１が実行すべきインストラクションコードや、ＣＰＵコア１０１が使用するデータ等を記憶するための不揮発性メモリである。尚、本発明の説明に不要なその他のペリフェラル、インタフェース等は、図示を省略する。
【００２８】
フラッシュメモリ１０５にプログラムを書き込む際には、同期シリアル通信インタフェース１０３にＲＯＭライタ２００が接続される。ＲＯＭライタ２００には、予めパーソナル・コンピュータ等（図示せず）から、フラッシュメモリ１０５に書き込みを行うためにＣＰＵコア１０１に実行させるためのインストラクション・コード列（プログラム）がダウンロードされ記憶されている。ＲＯＭライタ２００は、同期シリアル通信により、ＣＰＵコア１０１の動作クロックやオンボード書き込みのためのインストラクションコードの転送を行う。このインストラクションコードには、制御コード及び書き込みデータも含まれる。
【００２９】
同期シリアル通信インタフェース１０３は、シリアルクロック供給線１０９を介して、ＣＰＵコア１０１と接続されている。同期シリアル通信インタフェース１０３は、受信したシリアルデータをパラレルデータに変換し、これにより得られた複数の連続するインストラクションコード（プログラム）をＣＰＵコア１０１が実行することにより、フラッシュメモリ１０５のオンボード書き込みが行われる。ここで、転送するプログラムにおいては、ジャンプ命令を使用せず、複数の連続するインストラクションをステップ毎に実行する。
【００３０】
この同期シリアル通信においては、ＲＯＭライタ２００からマイコン１００へデータを送信するためのＲＸＤ信号線２０１と、マイコン１００からＲＯＭライタ２００へデータを送信するためのＴＸＤ信号線２０２と、ＲＯＭライタ２００とマイコン１００との間でシリアルクロックを送受信するためのＳＣＬＫ信号線２０３とが少なくとも用いられる。
【００３１】
制御レジスタ１０２は、前述したようにＣＰＵコア１０１と接続されているほか、フラッシュメモリ書き込みアドレスバスＢ１６、フラッシュメモリ書き込みデータバスＢ１７及び制御信号バスＢ１８を介して、マルチプレクサ１０４とも接続されている。制御レジスタ１０２は、ＣＰＵコア１０１から書き込まれたデータを保持するとともに、そのデータをフラッシュメモリ書き込みアドレスバスＢ１６、フラッシュメモリ書き込みデータバスＢ１７及び制御信号バスＢ１８へ出力する。制御レジスタ１０２は、ＣＰＵコア１０１のアドレス空間にマップされており、データアドレスバスＢ１３及びデータバスＢ１４に接続されて、ＣＰＵコア１０１からアクセスされる。また、制御レジスタ１０２の出力は、マルチプレクサ１０４を介して、フラッシュメモリ１０５に接続されている。
【００３２】
マルチプレクサ１０４は、前述したようにＣＰＵコア１０１及びフラッシュメモリ１０５と接続されているほか、フラッシュメモリ書き込みモード指示線１０６を介して、スイッチ１０８とも接続されている。スイッチ１０８は、オンボード書き込みを行う時はオンにされフラッシュ・メモリ書き込みモード指示線１０６を接地し、オンボード書き込みを行わない時はオフにされフラッシュ・メモリ書き込みモード指示線１０６をプルアップする。マルチプレクサ１０４は、フラッシュメモリ書き込みモード指示線１０６がプルアップされている時にバスＢ１１〜Ｂ１４とバスＢ１５とを接続し、フラッシュメモリ書き込みモード指示線１０６が接地されている時にバスＢ１６〜 Ｂ１８とバスＢ１５とを接続する。
【００３３】
次に、本実施形態におけるマイコン１００の通常の動作（オンボード書き込み動作以外の動作）について説明する。尚、通常の動作の場合、スイッチ１０８はオフであり、フラッシュ・メモリ書き込みモード指示線１０６はプルアップされている。
【００３４】
まず、ＣＰＵコア１０１は、インストラクションアドレスをインストラクションアドレスバスＢ１１上に出力する。マルチプレクサ１０４は、インストラクションアドレスバスＢ１１上に出力されたインストラクション・アドレスを、バスＢ１５に伝達する。フラッシュメモリ１０５は、バスＢ１５よりインストラクションアドレスを受け、当該アドレスに対応するインストラクションコードをバスＢ１５へ出力する。マルチプレクサ１０４は、バスＢ１５上に出力されたインストラクションコードを、インストラクションバスＢ１２に伝達する。ＣＰＵコア１０１は、インストラクションバスＢ１２よりインストラクションコードを受け、当該インストラクションコードを実行する。このように、ＣＰＵコア１０１によって、フラッシュメモリ１０５に記憶されたインストラクションコード列（プログラム）が実行される。
【００３５】
次に、本実施形態におけるオンボード書き込み動作について説明する。オンボード書き込みを行う場合、オンボード書き込み作業者は、スイッチ１０８をオンにするとともにマイコン１００の電源をオンにし、更にＲＯＭライタ２００の電源をオンにし操作を開始する。作業者がＲＯＭライタ２００の操作を開始すると、ＲＯＭライタ２００は、図２のフローチャートに基づく処理を開始する。
【００３６】
ステップＳ２０１において、ＲＯＭライタ２００が、記憶されたインストラクション・コード列からインストラクションコード（データを含む）を一つ取り出す。
【００３７】
次のステップＳ２０２において、ＲＯＭライタ２００は、ステップＳ２０１において取り出されたインストラクションコードをシリアル変換する。そして、ＲＯＭライタ２００は、シリアル変換されたインストラクションコードを、同期シリアル通信線２０１〜２０３を介して、マイコン１００内の同期シリアル通信インタフェース１０３へ送信する。
【００３８】
一方、マイコン１００内の同期シリアル通信インタフェース１０３は、ＲＯＭライタ２００からシリアルデータを受信すると、受信したデータをパラレル変換する。そして、同期シリアル通信インタフェース１０３は、パラレル変換したデータ、即ちインストラクションコードを、インストラクションバスＢ１２へ出力する。それとともに、同期シリアル通信インタフェース１０３は、ＳＣＬＫ信号線２０３を介して受信したシリアルクロックを、シリアルクロック供給線１０９を介してＣＰＵコア１０１へ出力する。
【００３９】
一方、シリアルクロック供給線１０９を介して同期シリアル通信インタフェース１０３からシリアルクロックを受け取ると、マイコン１００中のＣＰＵコア１０１が、図３のフローチャートを開始する。
【００４０】
最初のステップＳ１０１において、マイコン１００のＣＰＵコア１０１は、同期シリアル通信インタフェース１０３からインストラクションコードを受け取るのを待つ。
【００４１】
同期シリアル通信インタフェース１０３によって出力されたインストラクションコードをインストラクションバスＢ１２から受け取ると、ステップＳ１０１にて待機していたＣＰＵコア１０１は、処理をステップＳ１０２へ移す。
【００４２】
ステップＳ１０２において、ＣＰＵコア１０１は、ステップＳ１０１において受け取ったインストラクションコードに基づいて、フラッシュメモリ１０５に書き込むべきデータと、当該データを書き込むべきフラッシュメモリ１０５中のアドレスと、フラッシュメモリ１０５に書き込みを行うために必要な制御信号を発生させるためのデータとを、制御レジスタ１０２へ出力する。その後、ＣＰＵコア１０１は、処理をステップＳ１０１へ戻す。
【００４３】
制御レジスタ１０２は、ＣＰＵコア１０１からフラッシュメモリ１０５に書き込むべきデータと、当該データを書き込むべきフラッシュメモリ１０５中のアドレス、及びフラッシュメモリ１０５に書き込みを行うために必要な制御信号を発生させるためのデータを受け取ると、受け取ったデータに基づいて、フラッシュメモリ１０５に書き込むべきデータをフラッシュメモリ書き込みデータバスＢ１７へ出力し、当該データを書き込むべきフラッシュメモリ１０５中のアドレスをフラッシュメモリ書き込みアドレスバスＢ１６へ出力し、フラッシュメモリ１０５に書き込みを行うために必要な制御信号を制御信号バスＢ１８へ出力する。
【００４４】
このように、フラッシュメモリ１０５に書き込むべきデータがフラッシュメモリ書き込みデータバスＢ１７へ出力され、当該データを書き込むべきフラッシュメモリ１０５中のアドレスがフラッシュメモリ書き込みアドレスバスＢ１６へ出力され、フラッシュメモリ１０５に書き込みを行うために必要な制御信号が制御信号バスＢ１８へ出力されると、マルチプレクサ１０４及びバスＢ１５を介してフラッシュメモリ１０５へ伝達されて、フラッシュメモリ１０５への書き込みが行われる。
【００４５】
一方、ＲＯＭライタ２００は、ステップＳ２０２にてインストラクションコードを送信すると、次のステップＳ２０３において、ステップＳ２０２にて送信したインストラクションコードのＣＰＵコア１０１での実行後にウエイト時間が必要であるか否か、即ち制御信号バスＢ１８に出力された制御信号にホールド時間を確保する必要があるか否かをチェックする。そしてもしウエイト時間が必要であれば、ＲＯＭライタ２００は処理をステップＳ２０４へ移し、そうでなければ処理をステップＳ２０５へ移す。
【００４６】
ステップＳ２０３にてウエイト時間が必要であると判断した場合、ＲＯＭライタ２００は、ステップＳ２０４において、必要なウエイト時間の間、インストラクションコードの送信を中断する。
【００４７】
ステップＳ２０４にて必要な時間が経過した後及びステップＳ２０３にてウエイト時間が必要でないと判断された場合、ＲＯＭライタ２００は、ステップＳ２０５において、送信すべきインストラクションコードが未だ残っているか否かをチェックする。そして、もし送信すべきインストラクションコードが未だ残っていると判断した場合には処理をステップＳ２０１へ戻し、送信すべきインストラクションコードが残っていないと判断した場合には処理を終了する。
【００４８】
次に、本実施形態におけるインストラクションコードを転送する原理について、図４のタイミングチャートを用いて説明する。
【００４９】
シリアルクロックに同期してインストラクションコードを転送する場合に、インストラクションコードのビット幅（インストラクションコードを転送するためのクロック数）と、そのインストラクションを実行するためのクロック数が等しい場合には問題はないが、これらが等しくない場合には、以下の方法により両者のサイクルを合わせる必要がある。例えば、図４に示すように、インストラクションコードＡ、Ｂが１２ビット幅である場合には、各々をシリアル転送するために少なくとも１２クロックが必要である。しかし、インストラクションコードＡの実行サイクルが７クロックである場合には、インストラクションコードの転送とインストラクションの実行との間でサイクルが合わなくなる。そこで、本実施形態においては、次のインストラクションコードＢが転送されるまでの５クロック（＝１２クロック−７クロック）の間に、ダミーの命令ＮＯＰを挿入している。これにより、インストラクションコードの転送とインストラクションの実行との間でサイクルを合わせることができる。
【００５０】
次に、本実施形態における制御信号のパルス幅を変更する原理について、図５のタイミングチャートを用いて説明する。
【００５１】
図５において、上段の信号はＳＬＣＫ信号線２０３から入力されるシリアルクロック信号であり、中段の信号はＲＸＤ信号線２０１から入力されるデータ信号であり、下段の信号は制御信号バスＢ１８に出力される制御信号の一つであるＰＲＯＧ信号である。ここで、ＰＲＯＧ信号は、フラッシュメモリ１０５に書き込みを行うための信号であり、例えば、１ｍｓのパルス幅が必要であるものとする。即ち、図５において、区間Ｄは１ｍｓであるとする。
【００５２】
まず、ＲＯＭライタ２００は、ＰＲＯＧ信号を“１”にするためにＣＰＵコア１０１が実行するインストラクションコードを、同期シリアル通信によって送信する（区間Ａ）。このインストラクションコードがＣＰＵコア１０１によって実行されると、ＰＲＯＧ信号は“１”となる。次に、ＲＯＭライタ２００は、ＰＲＯＧ信号のパルス幅を確保するために、同期シリアル通信を中断する（区間Ｂ）。必要なパルス幅を確保するための期間が経過した後で、ＲＯＭライタ２００は、ＰＲＯＧ信号を“０”にするためにＣＰＵコア１０１が実行するインストラクションコードを、同期シリアル通信によって送信する（区間Ｃ）。このインストラクションコードがＣＰＵコア１０１によって実行されると、ＰＲＯＧ信号は“０”となる。このように、同期シリアル通信を中断することにより制御信号のパルス幅を確保することができ、また中断の長さを変更することにより制御信号のパルス幅を容易に変更することができる。
【００５３】
以上述べた様に、本発明によれば、不揮発性メモリの書き込みプログラムを通信によって送信するので、不揮発性メモリの書き込みプログラムを記憶するためのマスクＲＯＭ等を無くすことができ、回路の簡単化やチップ面積の縮小を図ることができる。これにより、マスクＲＯＭ用のクロック端子も不要となる。
【００５４】
また、マスクＲＯＭ等に記憶されたプログラムのように固定されたプログラムを持たないので、プログラムの不具合の修正が容易となる。更に、不揮発性メモリの書き込みプログラムの送信に同期シリアル通信を用いて、そのシリアルクロックをＣＰＵへ供給するとともに不揮発性メモリの書き込みプログラムの送信タイミングを調整することにより、不揮発性メモリの書き込みに必要な各制御信号のパルス幅を確保するとともに、パルス幅の変更を容易に行うことができる。
【図面の簡単な説明】
【００５５】
【図１】本発明の一実施形態に係るオンボード書き込みのための回路構成を示すブロック図である。
【図２】図１におけるＲＯＭライタの動作を示すフローチャートである。
【図３】図１におけるＣＰＵコアの動作を示すフローチャートである。
【図４】本発明の一実施形態におけるインストラクションコードを転送する原理を説明するためのタイミングチャートである。
【図５】本発明の一実施形態における制御信号のパルス幅を変更する原理を説明するためのタイミングチャートである。
【図６】従来のオンボード書き込みのための回路構成例を示すフローチャートである。
【図１】
0004663210.tif 000002
【図２】
0004663210.tif 000003
【図３】
0004663210.tif 000004
【図４】
0004663210.tif 000005
【図５】
0004663210.tif 000006
【図６】
0004663210.tif 000007