(57)【要約】      （修正有）【課題】ＲＯＭのプログラムを修正することが可能な半導体集積回路を提供する。【解決手段】半導体集積回路１０は、マスクＲＯＭ１２と、マスクＲＯＭに格納された複数のプログラムを実行するプロセッサ１１と、不揮発性メモリ１４と、不揮発性メモリに格納されたデータが転送されるＲＡＭ１３とを含む。マスクＲＯＭは、ＲＡＭ上の第１アドレスに格納されたデータをロードするためのロード命令と、分岐命令とを格納する。プロセッサは、ロード命令を実行することにより、ＲＡＭの第１アドレスからフラグを読み出し、分岐命令を実行することにより、読み出されたフラグの内容に応じて、ＲＡＭに格納された第１プログラムとマスクＲＯＭに格納された第２プログラムとのいずれかを実行する。【選択図】図１
2018028819.tif 000002
【特許請求の範囲】
【請求項１】
マスクＲＯＭと、
前記マスクＲＯＭに格納された複数のプログラムを実行するプロセッサと、
不揮発性メモリと、
前記不揮発性メモリに格納されたデータが転送されるＲＡＭと
を具備し、
前記マスクＲＯＭは、前記ＲＡＭ上の第１アドレスに格納されたデータをロードするためのロード命令と、分岐命令とを格納し、
前記プロセッサは、
前記ロード命令を実行することにより、前記ＲＡＭの前記第１アドレスからフラグを読み出し、
前記分岐命令を実行することにより、前記読み出されたフラグの内容に応じて、前記ＲＡＭに格納された第１プログラムと前記マスクＲＯＭに格納された第２プログラムとのいずれかを実行する
ことを特徴とする半導体集積回路。
【請求項２】
前記プロセッサは、前記ロード命令及び前記分岐命令を実行した後に、前記ＲＡＭに転送されたジャンプ命令を実行することにより、前記マスクＲＯＭの第２アドレスに格納されたプログラムを実行することを特徴とする請求項１に記載の半導体集積回路。
【請求項３】
マスクＲＯＭと、
前記マスクＲＯＭに格納された複数のプログラムを実行するプロセッサと、
第１アドレスに格納されたフラグと、第１プログラムとを格納する不揮発性メモリと、
前記不揮発性メモリに格納されたデータが転送されるＲＡＭと
を具備し、
前記マスクＲＯＭは、前記ＲＡＭ上の第１アドレスに格納されたデータをロードするためのロード命令と、分岐命令とを格納し、
前記プロセッサは、
前記ロード命令を実行することにより、前記ＲＡＭの前記第１アドレスから前記フラグを読み出し、
前記分岐命令を実行することにより、前記読み出されたフラグの内容に応じて、前記ＲＡＭに格納された前記第１プログラムと前記マスクＲＯＭに格納された第２プログラムとのいずれかを実行することを特徴とする半導体集積回路。
【請求項４】
前記不揮発性メモリは、前記マスクＲＯＭ上の第２アドレスにジャンプするためのジャンプ命令をさらに格納し、
前記プロセッサは、前記ロード命令及び前記分岐命令を実行した後に、前記ＲＡＭに転送された前記ジャンプ命令を実行することにより、前記マスクＲＯＭの前記第２アドレスに格納されたプログラムを実行することを特徴とする請求項３に記載の半導体集積回路。
【請求項５】
前記プロセッサのリセットに応じて、前記不揮発性メモリに格納されたデータを前記ＲＡＭに転送する転送回路をさらに具備することを特徴とする請求項１乃至４のいずれかに記載の半導体集積回路。
【請求項６】
外部から受けたデータを前記不揮発性メモリに書き込む書き込み回路をさらに具備することを特徴とする請求項１乃至５のいずれかに記載の半導体集積回路。
【請求項７】
前記不揮発性メモリは、１回のみデータの書き込み可能なＲＯＭからなることを特徴とする請求項１乃至６のいずれかに記載の半導体集積回路。
【請求項８】
前記マスクＲＯＭに格納されたプログラムは、起動プログラムであることを特徴とする請求項１乃至７のいずれかに記載の半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は、半導体集積回路に関する。
【背景技術】
【０００２】
従来から、ＣＰＵが実行するプログラムの常時格納場所としては、ＬＳＩに内蔵するメモリに格納しておく方法と、外付けメモリに格納しておく方法との２通りが存在する。このうち内蔵メモリに格納しておく方法は、外部メモリに格納しておく方法に比べて一般的にプログラムのローディング時間が短い、プログラムに対するセキュリティ性が高いなどの利点がある反面、ＬＳＩの電源を切ってもプログラムが消えないよう主にＲＯＭなどの不揮発性メモリを使用するため、一度ＬＳＩを製造した後はプログラムの書き換えが不可能になるという欠点がある。よって、不具合や機能的な向上のためにプログラムを更新したい場合は、ＬＳＩのマスクを再作成して製造し直す必要があるため、コスト的に問題がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−４９９０６号公報
【特許文献２】特開平５−９４３０９号公報
【特許文献３】特開２００４−２５８９４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
実施形態は、ＲＯＭのプログラムを修正することが可能な半導体集積回路を提供する。
【課題を解決するための手段】
【０００５】
実施形態に係る半導体集積回路は、マスクＲＯＭと、前記マスクＲＯＭに格納された複数のプログラムを実行するプロセッサと、不揮発性メモリと、前記不揮発性メモリに格納されたデータが転送されるＲＡＭとを具備する。前記マスクＲＯＭは、前記ＲＡＭ上の第１アドレスに格納されたデータをロードするためのロード命令と、分岐命令とを格納する。前記プロセッサは、前記ロード命令を実行することにより、前記ＲＡＭの前記第１アドレスからフラグを読み出し、前記分岐命令を実行することにより、前記読み出されたフラグの内容に応じて、前記ＲＡＭに格納された第１プログラムと前記マスクＲＯＭに格納された第２プログラムとのいずれかを実行する。
【０００６】
実施形態に係る半導体集積回路は、マスクＲＯＭと、前記マスクＲＯＭに格納された複数のプログラムを実行するプロセッサと、第１アドレスに格納されたフラグと、第１プログラムとを格納する不揮発性メモリと、前記不揮発性メモリに格納されたデータが転送されるＲＡＭとを具備する。前記マスクＲＯＭは、前記ＲＡＭ上の第１アドレスに格納されたデータをロードするためのロード命令と、分岐命令とを格納する。前記プロセッサは、前記ロード命令を実行することにより、前記ＲＡＭの前記第１アドレスから前記フラグを読み出し、前記分岐命令を実行することにより、前記読み出されたフラグの内容に応じて、前記ＲＡＭに格納された前記第１プログラムと前記マスクＲＯＭに格納された第２プログラムとのいずれかを実行する。
【図面の簡単な説明】
【０００７】
【図１】第１実施形態に係る半導体集積回路のブロック図。
【図２】書き込み回路の書き込み動作を示すフローチャート。
【図３】半導体集積回路の動作を示すフローチャート。
【図４】プロセッサの動作を説明する図。
【図５】実施例に係るプロセッサの動作を説明する図。
【図６】第２実施形態に係るプロセッサの動作を説明する図。
【発明を実施するための形態】
【０００８】
以下、実施形態について図面を参照して説明する。以下に示す幾つかの実施形態は、本発明の技術思想を具体化するための装置および方法を例示したものであって、構成部品の形状、構造、配置等によって、本発明の技術思想が特定されるものではない。各機能ブロックは、ハードウェア、ソフトウェアのいずれかまたは両者を組み合わせたものとして実現することができる。各機能ブロックが以下の例のように区別されていることは必須ではない。例えば、一部の機能が例示の機能ブロックとは別の機能ブロックによって実行されてもよい。さらに、例示の機能ブロックがさらに細かい機能サブブロックに分割されていてもよい。なお、以下の説明において、同一の機能及び構成を有する要素については同一符号を付し、重複説明は必要な場合にのみ行う。
【０００９】
［１］第１実施形態
［１−１］半導体集積回路の構成
図１は、第１実施形態に係る半導体集積回路１０のブロック図である。半導体集積回路１０は、ＬＳＩ（Large-Scale Integration）、又はシステムＬＳＩともいう。半導体集積回路１０は、プロセッサ（ＣＰＵ：Central Processing Unit）１１、マスクＲＯＭ（Read Only Memory）１２、ＲＡＭ（Random Access Memory）１３、不揮発性メモリ１４、データ転送回路（ブートローダー）１５、書き込み回路１６、バス１７、及び外部インターフェース（入出力インターフェース）１８を備える。
【００１０】
プロセッサ１１は、ＣＰＵとも呼ばれ、半導体集積回路１０全体の動作を制御する。プロセッサ１１は、命令（instruction）を解釈及び実行し、また、メモリに記憶されたプログラムを実行する。特に、プロセッサ１１は、半導体集積回路１０が起動（又はリセット）された場合に、起動プログラム（ブートストラッププログラム）を実行し、半導体集積回路１０を所望の初期状態に設定する。また、プロセッサ１１は、半導体集積回路１０がさらに備える周辺回路（図示せず）の動作を制御する。半導体集積回路１０が備える周辺回路は、半導体集積回路１０の機能や仕様によって適宜選定され、この周辺回路には、ＧＰＩＯ（General Purpose Input/Output）などが含まれる。
【００１１】
マスクＲＯＭ１２は、不揮発性メモリであり、製造段階でデータが書き込まれる。マスクＲＯＭ１２は、物理構造の変化でデータを固定化しているので、製造後にデータを書き込んだり、記憶内容を書き換えたりすることはできない。一方で、マスクＲＯＭ１２は、量産に向いているため、製造コストを低減できるというメリットがある。マスクＲＯＭ１２は、半導体集積回路１０用の起動プログラムなどを格納する。
【００１２】
ＲＡＭ１３は、揮発性メモリであり、ＤＲＡＭ（Dynamic Random Access Memory）などから構成される。ＲＡＭ１３は、プロセッサ１１のワークエリアとして使用される。ＲＡＭ１３は、不揮発性メモリ１４からロードされたデータ（プログラム）を一時的に格納し、また、プロセッサ１１が計算したデータなどを一時的に格納する。
【００１３】
不揮発性メモリ１４は、例えばＯＴＰ−ＲＯＭ（one time programmable ROM）から構成される。ＯＴＰ−ＲＯＭ１４は、半導体集積回路１０に実装された後、１回のみデータの書き込みが可能である。ＯＴＰ−ＲＯＭ１４は、例えば、電気的にプログラム可能なヒューズ素子であるｅ−ｆｕｓｅ（electrical fuse）から構成される。ＯＴＰ−ＲＯＭ１４は、半導体集積回路１０に実装された後、起動プログラム用の修正プログラムなどを格納する。不揮発性メモリ１４は、ＯＴＰ−ＲＯＭに限定されず、フラッシュメモリ（例えば、ＮＡＮＤ型フラッシュメモリ）、又はＭＲＡＭ（Magnetoresistive Random Access Memory）などを用いてもよい。なお、不揮発性メモリ１４としてＯＴＰ−ＲＯＭを用いた場合、コストの面で有利である。
【００１４】
データ転送回路１５は、半導体集積回路１０の起動（又はリセット）時、ＯＴＰ−ＲＯＭ１４に格納されたデータをＲＡＭ１３に転送（ロード）する。
【００１５】
書き込み回路１６は、外部インターフェース１８を介して外部装置とアクセス可能なように構成される。書き込み回路１６は、外部インターフェース１８からデータを受け、このデータをＯＴＰ−ＲＯＭ１４に書き込む。書き込み回路１６の機能により、半導体集積回路１０が製造された後、ＯＴＰ−ＲＯＭ１４は、マスクＲＯＭ１２に格納されたプログラム（起動プログラムを含む）用の修正プログラムを格納することが可能となる。
【００１６】
バス１７は、半導体集積回路１０内の複数のモジュールを相互に接続する。外部インターフェース１８は、所定のプロトコルに従って、外部装置との間でデータの受け渡しを行う。
【００１７】
［１−２］動作
次に、上記のように構成された半導体集積回路１０の動作について説明する。
【００１８】
［１−２−１］ＯＴＰ−ＲＯＭ１４へのデータ書き込み動作
まず、ＯＴＰ−ＲＯＭ１４へのデータ書き込み動作について説明する。図２は、書き込み回路１６の書き込み動作を示すフローチャートである。
【００１９】
書き込み回路１６は、外部インターフェース１８にデータが入力されたか否かを監視している（ステップＳ１００）。外部インターフェース１８にデータが入力された場合、書き込み回路１６は、外部インターフェース１８からデータを受ける（ステップＳ１０１）。
【００２０】
続いて、書き込み回路１６は、ＯＴＰ−ＲＯＭ１４にデータ書き込む（ステップＳ１０２）。例えばＯＴＰ−ＲＯＭ１４がｅ−ｆｕｓｅで構成されている場合、ヒューズ素子の切断前の初期状態は、データ“０”もしくはデータ“１”として扱われる。ヒューズ素子の初期状態をデータ“０”と扱うことにすると、書き込み回路１６は、データ“１”を記憶させるヒューズ素子に所定の電流を供給することで、このヒューズ素子を電気的に切断する。このようにして、半導体集積回路１０の製造後に、例えば起動プログラム用の修正プログラムを、ＯＴＰ−ＲＯＭ１４に不揮発に記憶させることができる。
【００２１】
［１−２−２］起動時の全体動作
次に、半導体集積回路１０の起動時の全体動作について説明する。図３は、半導体集積回路１０の動作を示すフローチャートである。
【００２２】
まず、半導体集積回路１０に対して、ユーザーによる電源投入、及びユーザーによるリセット操作を含むリセット事象が行われる（ステップＳ２００）。このリセット事象に応答して、半導体集積回路１０は、リセット処理を実行する（ステップＳ２０１）。このリセット処理において、半導体集積回路１０内の各モジュールがリセット、すなわち初期状態（予め決められた状態）に設定される。例えば、プロセッサ１１は、リセット事象に起因してリセット信号を受ける。例えば、半導体集積回路１０がパワーオンリセット回路（図示せず）を備え、このパワーオンリセット回路が半導体集積回路１０内の各モジュールにリセット信号を供給するようにしてもよい。また、半導体集積回路１０の外部からリセット信号を受けるようにしてもよい。
【００２３】
続いて、リセット処理に応答して、データ転送回路１５は、ＯＴＰ−ＲＯＭ１４に格納されたデータを、バス１７を介してＲＡＭ１３に転送する（ステップＳ２０２）。
【００２４】
続いて、プロセッサ１１は、マスクＲＯＭ１２に格納されたプログラム（起動プログラム）を実行する（ステップＳ２０３）。具体的には、プロセッサ１１は、起動プログラムに含まれる複数の命令を所定の順序で実行する。一連の起動プログラムの実行が全て完了することで、半導体集積回路１０は、所望の状態に設定され、以後、図示しない周辺回路を制御したり、外部装置からの命令に応じた処理を実行することが可能となる。
【００２５】
［１−２−３］起動プログラムの実行動作
次に、プロセッサ１１が起動プログラムに含まれる複数の命令を実行する動作について説明する。図４は、プロセッサ１１の動作を説明する図である。図４には、マスクＲＯＭ１２に格納されたプログラム（マスクＲＯＭ空間と表記）と、ＲＡＭ１３に格納されたデータ、すなわちＯＴＰ−ＲＯＭ１４からＲＡＭ１３に転送されたデータ（ＲＡＭ空間と表示）とを模式的に示している。
【００２６】
マスクＲＯＭ１２は、複数のブロックＢＫ_ｍに区分けされた複数のプログラムを格納している。図４には、４つのブロックＢＫ_ｍ１〜ＢＫ_ｍ４を例示している。ブロックＢＫ_ｍ２の先頭領域には、ロード命令（Load1）、及び条件分岐命令（Branch1）が格納されている。さらに、ブロックＢＫ_ｍ２の先頭領域に続く領域には、起動プログラムの一部が格納されている。ブロックＢＫ_ｍ３、ＢＫ_ｍ４についても、ブロックＢＫ_ｍ２と同様の構成である。なお、図４では、最初のブロックＢＫ_ｍ１に起動プログラムの一部のみが格納される例を示しているが、最初のブロックＢＫ_ｍ１にも、ロード命令及び条件分岐命令（conditional branch instruction）が格納されていてもよい。
【００２７】
ブロックＢＫ_ｍ１〜ＢＫ_ｍ４のサイズは、個別に設定することが可能であり、例えば、１つの纏まったプログラムごとにブロックが割り当てられる。よって、ブロックＢＫ_ｍ１〜ＢＫ_ｍ４のサイズが全て異なっていてもよいし、全て同じでもよいし、一部が異なっていてもよい。
【００２８】
ＲＡＭ１３は、複数のブロックＢＫ_ｒに区分けされた複数のプログラムを格納している。図４には、３つのブロックＢＫ_ｒ１〜ＢＫ_ｒ３を例示している。ＲＡＭ空間上の複数のフラグ（Flag1、Flag2、Flag3）が配置される位置はマスクＲＯＭ１２のプログラムが確定した時点で決まっており、ＯＴＰ−ＲＯＭ１４内の各ブロックの先頭アドレスを、予めマスクＲＯＭ１２に格納することができる。また、ブロックＢＫ_ｒ１〜ＢＫ_ｒ３のサイズは全て異なっていてもよいし、全て同じでもよいし、一部が異なっていてもよい。
【００２９】
ブロックＢＫ_ｒ１の先頭領域には、フラグが格納され、先頭領域に続く領域には、修正プログラムが格納され、修正プログラムに続く領域には、ジャンプ命令（Jump1）が格納される。ブロックＢＫ_ｒ２、ＢＫ_ｒ３についても、ブロックＢＫ_ｒ１と同様の構成である。図４の斜線部分は、データが格納されていない領域の一例を示しており、これの意味するところは、ブロックＢＫ_ｒ１〜ＢＫ_ｒ３にそれぞれ格納される修正プログラムは互いにサイズが異なっていてもよい。なお、ＯＴＰ−ＲＯＭ１４のデータがＲＡＭ１３に転送されるので、図４に示したＲＡＭ１３のデータ構造は、ＯＴＰ−ＲＯＭ１４のデータ構造と言い換えることができる。
【００３０】
まず、プロセッサ１１は、マスクＲＯＭ１２のブロックＢＫ_ｍ１に格納されたプログラムを実行する（ステップＳ３００）。続いて、プロセッサ１１は、ブロックＢＫ_ｍ２に格納されたロード命令（Load1）を実行する（ステップＳ３０１）。ロード命令は、ＲＡＭ１３上の所定のアドレスを含み、このアドレスが指定する領域のデータをロードするための命令である。ロード命令に含まれるアドレスは、マスクＲＯＭ１２が製造される時点で予め決められている。ロード命令によって指定される領域には、フラグ（Flag１）が格納されている。よって、プロセッサ１１は、ロード命令（Load1）を実行することで、ＲＡＭ１３からフラグ（Flag１）を読み出す。
【００３１】
続いて、プロセッサ１１は、ブロックＢＫ_ｍ２に格納された条件分岐命令（Branch1）を実行する（ステップＳ３０２）。条件分岐命令は、ロードしたフラグが真（例えばデータ“１”）であるか偽（例えばデータ“０”）であるかに応じて、実行すべきプログラムを選択するための命令である。フラグのデータサイズは任意に設定可能であり、１ビットであってもよいし、複数ビットであってもよい。フラグが複数ビットである場合は、同じデータで構成される。よって、プロセッサ１１は、フラグのいずれか１ビットのみを判定すればよい。
【００３２】
プロセッサ１１は、フラグが偽である場合、マスクＲＯＭ１２のブロックＢＫ_ｍ２に格納されたプログラムを実行する（ステップＳ３０３）。すなわち、ステップＳ３０３では、ＯＴＰ−ＲＯＭ１４を利用した修正プログラムの置き換えは行われない。なお、フラグが偽である場合、該フラグを含むブロックＢＫ_ｒには有効なデータが書き込まれていない（ブランク領域である）。
【００３３】
一方、プロセッサ１１は、フラグが真である場合、ＲＡＭ１３のブロックＢＫ_ｒ１に格納されたプログラム（修正プログラム）を実行する（ステップＳ４００）。すなわち、ステップＳ４００では、ＯＴＰ−ＲＯＭ１４を利用した修正プログラムの置き換えが行われる。続いて、プロセッサ１１は、ブロックＢＫ_ｒ１に格納されたジャンプ命令（Jump1）を実行する（ステップＳ４０１）。ジャンプ命令は、マスクＲＯＭ１２の次のブロックＢＫ_ｍの先頭アドレスを含み、このアドレスが指定する領域にジャンプするための命令である。
【００３４】
続いて、プロセッサ１１は、ロード命令（Load2）及び条件分岐命令（Branch2）を実行する（ステップＳ３０４、Ｓ３０５）。続いて、プロセッサ１１は、フラグ（Flag2）が偽である場合、マスクＲＯＭ１２のブロックＢＫ_ｍ３に格納されたプログラムを実行し（ステップＳ３０６）、一方、フラグ（Flag2）が真である場合、ＲＡＭ１３のブロックＢＫ_ｒ２に格納された修正プログラムを実行する（ステップＳ４０２、Ｓ４０３）。
【００３５】
同様に、プロセッサ１１は、マスクＲＯＭ１２のブロックＢＫ_ｍ４に格納されたプログラム（ステップＳ３０７〜Ｓ３０９）と、ＲＡＭ１３のブロックＢＫ_ｒ３に格納されたプログラム（ステップＳ３０７、Ｓ３０８、Ｓ４０４、及びＳ４０５）とのいずれかを実行する。
【００３６】
以上のような処理により、マスクＲＯＭ１２に格納された起動プログラムを部分的に修正することが可能となる。すなわち、半導体集積回路１０の製造後に、半導体集積回路１０用の起動プログラムを修正することが可能となる。
【００３７】
［１−２−４］実施例
次に、より具体的な起動プログラムの実行動作について説明する。図５は、実施例に係るプロセッサ１１の動作を説明する図である。
【００３８】
図５には、プロセッサ１１のアドレス空間（ＣＰＵアドレス空間と表記）、マスクＲＯＭ空間、及びＲＡＭ空間を示している。例えば、マスクＲＯＭ１２の記憶領域が１６ＫＢ、ＲＡＭ１３の記憶領域が１ＭＢである。１ワードは、例えば３２ビット（４バイト）である。図５のペリフェラル空間は、図示しない周辺回路のレジスタ領域に対応するアドレス空間である。図５の各空間の左に付記された数値がアドレスを表しており、アドレスに含まれる“０ｘ”は１６進数を意味する。
【００３９】
プロセッサ１１は、マスクＲＯＭ１２に格納されたロード命令を実行する。このロード命令は、ＲＡＭ１３上のアドレス0x00102000を含み、プロセッサ１１は、ＲＡＭ１３上のアドレス0x00102000に格納されたフラグをロードする。
【００４０】
続いて、プロセッサ１１は、マスクＲＯＭ１２のうちロード命令に続く領域に格納された条件分岐命令（図５の“Ｉｆ”）を実行する。続いて、プロセッサ１１は、フラグが真（データ“１”）である場合、ＲＡＭ１３上のアドレス0x00102004にジャンプし、アドレス0x00102004から始まる修正プログラム（例えば１ＫＢ）を実行する。これにより、マスクＲＯＭ１２のアドレス0x00001000から始まるプログラム（例えば５１２Ｂ）が、ＲＡＭ１３の修正プログラム（例えば１ＫＢ）に置き換えられる。図５の例では、マスクＲＯＭ空間上の置き換えられる領域（５１２Ｂ）とＲＡＭ空間上の修正プログラム（１ＫＢ）とのサイズが異なっている。このように、マスクＲＯＭ空間上の置き換えられる領域とＲＡＭ空間上の修正プログラムとは同じサイズである必要はない。
【００４１】
続いて、プロセッサ１１は、ＲＡＭ１３上のアドレス0x00102404に格納されたジャンプ命令を実行する。このジャンプ命令は、マスクＲＯＭ１２上のアドレス0x00001200に格納されたデータをロードするための命令である。その後、プロセッサ１１は、マスクＲＯＭ１２上のアドレス0x00001200から始まるプログラムを実行する。
【００４２】
［１−３］第１実施形態の効果
以上詳述したように第１実施形態では、半導体集積回路１０は、起動プログラム用の修正プログラムを格納するＯＴＰ−ＲＯＭ１４を備える。システムリセットの後、ＯＴＰ−ＲＯＭ１４のデータは、ＲＡＭ１３にロードされる。プロセッサ１１は、マスクＲＯＭ１２の複数のプログラムを順次実行する過程で、ロード命令と条件分岐命令とを実行する。ロード命令を実行することにより、プロセッサ１１は、ＲＡＭ１３の予め決められたアドレスにアクセスしてフラグを読み出す。その後、条件分岐命令を実行することにより、プロセッサ１１は、読み出されたフラグの内容に応じて、ＲＡＭ１３に格納された第１プログラムとマスクＲＯＭ１２に格納された第２プログラムとを選択的に実行するようにしている。
【００４３】
従って第１実施形態によれば、マスクＲＯＭ１２に格納された起動プログラムを部分的に修正することが可能となる。すなわち、半導体集積回路１０の製造後に、半導体集積回路１０用の起動プログラムを修正することが可能となる。これにより、より柔軟かつ迅速に、プログラムの修正、変更、及び追加に対応することができる。
【００４４】
また、マスクＲＯＭ１２に格納されたプログラムを有する半導体集積回路１０においてプログラム更新のためにリファインするコストの削減が可能になる。本実施形態に類似した手法として、起動毎に代替コードを半導体集積回路の外部から内蔵メモリに転送して使用する方法も考えられるが、内蔵するＯＴＰ−ＲＯＭを用いることにより起動時に代替コードを外部から転送するシーケンスを省略でき、かつ半導体集積回路の外部の部品点数削減にもつながる。
【００４５】
また、内蔵するＯＴＰ−ＲＯＭ１４と、ＯＴＰ−ＲＯＭ１４のデータが転送されるＲＡＭ１３とを用いることにより、修正プログラムの置き換えとその処理とを高速に行うことができる。
【００４６】
また、マスクＲＯＭ１２に格納されるプログラムがシステムの起動に使用される起動プログラムである場合、半導体集積回路１０の起動時間を短縮することができる。
【００４７】
なお、前述したように、不揮発性メモリ１４は、ＯＴＰ−ＲＯＭに限定されず、複数回の書き換えが可能な不揮発性メモリを用いてもよい。この場合、修正プログラムを複数回書き換えることが可能である。
【００４８】
［２］第２実施形態
第２実施形態は、マスクＲＯＭ１２の１つのブロックＢＫ_ｍのうち一部の領域（一部のプログラム）を、ＲＡＭ１３のブロックＢＫ_ｒに格納されたプログラムで置き換えるようにしている。図６は、第２実施形態に係るプロセッサ１１の動作を説明する図である。
【００４９】
ステップＳ３００〜Ｓ３０２の動作は、第１実施形態と同じである。プロセッサ１１は、フラグが真である場合、ＲＡＭ１３のブロックＢＫ_ｒ１に格納されたプログラムを実行する（ステップＳ４００）。続いて、プロセッサ１１は、ジャンプ命令（Jump1）を実行する（ステップＳ４０１）。ジャンプ命令（Jump1）に含まれるアドレスは、マスクＲＯＭ１２のブロックＢＫ_ｍ２のうち、条件分岐命令（Branch2）を指定するアドレスとブロックＢＫ_ｍ２の最終アドレスとの間の位置を指定する。
【００５０】
続いて、プロセッサ１１は、ジャンプ命令（Jump1）で指定されたアドレス、すなわちブロックＢＫ_ｍ２の途中から、プログラムを実行する（ステップＳ３０３）。
【００５１】
以上詳述したように第２実施形態によれば、第１実施形態に比べてより小さい単位でプログラムの置換動作を行うことができる。その他の効果は、第１実施形態と同じである。
【００５２】
なお、上記各実施形態では、マスクＲＯＭ１２が格納するプログラムとして、ＬＳＩシステムを起動させるために起動プログラムを例に挙げて説明しているが、これに限定されず、他の種類のプログラム（ＯＳ（operating system）を含む）に適用することも可能である。
【００５３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５４】
１０…半導体集積回路、１１…プロセッサ、１２…マスクＲＯＭ、１３…ＲＡＭ、１４…不揮発性メモリ、１５…データ転送回路、１６…書き込み回路、１７…バス、１８…外部インターフェース。
【図１】
2018028819.tif 000003
【図２】
2018028819.tif 000004
【図３】
2018028819.tif 000005
【図４】
2018028819.tif 000006
【図５】
2018028819.tif 000007
【図６】
2018028819.tif 000008