図面 (/)
課題
解決手段
概要
背景
従来から、CPUが実行するプログラムの常時格納場所としては、LSIに内蔵するメモリに格納しておく方法と、外付けメモリに格納しておく方法との2通りが存在する。このうち内蔵メモリに格納しておく方法は、外部メモリに格納しておく方法に比べて一般的にプログラムのローディング時間が短い、プログラムに対するセキュリティ性が高いなどの利点がある反面、LSIの電源を切ってもプログラムが消えないよう主にROMなどの不揮発性メモリを使用するため、一度LSIを製造した後はプログラムの書き換えが不可能になるという欠点がある。よって、不具合や機能的な向上のためにプログラムを更新したい場合は、LSIのマスクを再作成して製造し直す必要があるため、コスト的に問題がある。
概要
ROMのプログラムを修正することが可能な半導体集積回路を提供する。半導体集積回路10は、マスクROM12と、マスクROMに格納された複数のプログラムを実行するプロセッサ11と、不揮発性メモリ14と、不揮発性メモリに格納されたデータが転送されるRAM13とを含む。マスクROMは、RAM上の第1アドレスに格納されたデータをロードするためのロード命令と、分岐命令とを格納する。プロセッサは、ロード命令を実行することにより、RAMの第1アドレスからフラグを読み出し、分岐命令を実行することにより、読み出されたフラグの内容に応じて、RAMに格納された第1プログラムとマスクROMに格納された第2プログラムとのいずれかを実行する。
目的
特開2015−49906号公報
特開平5−94309号公報
特開2004−258946号公報
実施形態は、ROMのプログラムを修正することが可能な半導体集積回路を提供する
効果
実績
- 技術文献被引用数
- 0件
- 牽制数
- 0件
この技術が所属する分野
請求項1
マスクROMと、前記マスクROMに格納された複数のプログラムを実行するプロセッサと、不揮発性メモリと、前記不揮発性メモリに格納されたデータが転送されるRAMとを具備し、前記マスクROMは、前記RAM上の第1アドレスに格納されたデータをロードするためのロード命令と、分岐命令とを格納し、前記プロセッサは、前記ロード命令を実行することにより、前記RAMの前記第1アドレスからフラグを読み出し、前記分岐命令を実行することにより、前記読み出されたフラグの内容に応じて、前記RAMに格納された第1プログラムと前記マスクROMに格納された第2プログラムとのいずれかを実行することを特徴とする半導体集積回路。
請求項2
前記プロセッサは、前記ロード命令及び前記分岐命令を実行した後に、前記RAMに転送されたジャンプ命令を実行することにより、前記マスクROMの第2アドレスに格納されたプログラムを実行することを特徴とする請求項1に記載の半導体集積回路。
請求項3
マスクROMと、前記マスクROMに格納された複数のプログラムを実行するプロセッサと、第1アドレスに格納されたフラグと、第1プログラムとを格納する不揮発性メモリと、前記不揮発性メモリに格納されたデータが転送されるRAMとを具備し、前記マスクROMは、前記RAM上の第1アドレスに格納されたデータをロードするためのロード命令と、分岐命令とを格納し、前記プロセッサは、前記ロード命令を実行することにより、前記RAMの前記第1アドレスから前記フラグを読み出し、前記分岐命令を実行することにより、前記読み出されたフラグの内容に応じて、前記RAMに格納された前記第1プログラムと前記マスクROMに格納された第2プログラムとのいずれかを実行することを特徴とする半導体集積回路。
請求項4
前記不揮発性メモリは、前記マスクROM上の第2アドレスにジャンプするためのジャンプ命令をさらに格納し、前記プロセッサは、前記ロード命令及び前記分岐命令を実行した後に、前記RAMに転送された前記ジャンプ命令を実行することにより、前記マスクROMの前記第2アドレスに格納されたプログラムを実行することを特徴とする請求項3に記載の半導体集積回路。
請求項5
請求項6
外部から受けたデータを前記不揮発性メモリに書き込む書き込み回路をさらに具備することを特徴とする請求項1乃至5のいずれかに記載の半導体集積回路。
請求項7
前記不揮発性メモリは、1回のみデータの書き込み可能なROMからなることを特徴とする請求項1乃至6のいずれかに記載の半導体集積回路。
請求項8
前記マスクROMに格納されたプログラムは、起動プログラムであることを特徴とする請求項1乃至7のいずれかに記載の半導体集積回路。
技術分野
0001
実施形態は、半導体集積回路に関する。
背景技術
0002
従来から、CPUが実行するプログラムの常時格納場所としては、LSIに内蔵するメモリに格納しておく方法と、外付けメモリに格納しておく方法との2通りが存在する。このうち内蔵メモリに格納しておく方法は、外部メモリに格納しておく方法に比べて一般的にプログラムのローディング時間が短い、プログラムに対するセキュリティ性が高いなどの利点がある反面、LSIの電源を切ってもプログラムが消えないよう主にROMなどの不揮発性メモリを使用するため、一度LSIを製造した後はプログラムの書き換えが不可能になるという欠点がある。よって、不具合や機能的な向上のためにプログラムを更新したい場合は、LSIのマスクを再作成して製造し直す必要があるため、コスト的に問題がある。
先行技術
0003
特開2015−49906号公報
特開平5−94309号公報
特開2004−258946号公報
発明が解決しようとする課題
0004
実施形態は、ROMのプログラムを修正することが可能な半導体集積回路を提供する。
課題を解決するための手段
0005
実施形態に係る半導体集積回路は、マスクROMと、前記マスクROMに格納された複数のプログラムを実行するプロセッサと、不揮発性メモリと、前記不揮発性メモリに格納されたデータが転送されるRAMとを具備する。前記マスクROMは、前記RAM上の第1アドレスに格納されたデータをロードするためのロード命令と、分岐命令とを格納する。前記プロセッサは、前記ロード命令を実行することにより、前記RAMの前記第1アドレスからフラグを読み出し、前記分岐命令を実行することにより、前記読み出されたフラグの内容に応じて、前記RAMに格納された第1プログラムと前記マスクROMに格納された第2プログラムとのいずれかを実行する。
0006
実施形態に係る半導体集積回路は、マスクROMと、前記マスクROMに格納された複数のプログラムを実行するプロセッサと、第1アドレスに格納されたフラグと、第1プログラムとを格納する不揮発性メモリと、前記不揮発性メモリに格納されたデータが転送されるRAMとを具備する。前記マスクROMは、前記RAM上の第1アドレスに格納されたデータをロードするためのロード命令と、分岐命令とを格納する。前記プロセッサは、前記ロード命令を実行することにより、前記RAMの前記第1アドレスから前記フラグを読み出し、前記分岐命令を実行することにより、前記読み出されたフラグの内容に応じて、前記RAMに格納された前記第1プログラムと前記マスクROMに格納された第2プログラムとのいずれかを実行する。
図面の簡単な説明
0007
第1実施形態に係る半導体集積回路のブロック図。
書き込み回路の書き込み動作を示すフローチャート。
半導体集積回路の動作を示すフローチャート。
プロセッサの動作を説明する図。
実施例に係るプロセッサの動作を説明する図。
第2実施形態に係るプロセッサの動作を説明する図。
実施例
0008
以下、実施形態について図面を参照して説明する。以下に示す幾つかの実施形態は、本発明の技術思想を具体化するための装置および方法を例示したものであって、構成部品の形状、構造、配置等によって、本発明の技術思想が特定されるものではない。各機能ブロックは、ハードウェア、ソフトウェアのいずれかまたは両者を組み合わせたものとして実現することができる。各機能ブロックが以下の例のように区別されていることは必須ではない。例えば、一部の機能が例示の機能ブロックとは別の機能ブロックによって実行されてもよい。さらに、例示の機能ブロックがさらに細かい機能サブブロックに分割されていてもよい。なお、以下の説明において、同一の機能及び構成を有する要素については同一符号を付し、重複説明は必要な場合にのみ行う。
0009
[1]第1実施形態
[1−1]半導体集積回路の構成
図1は、第1実施形態に係る半導体集積回路10のブロック図である。半導体集積回路10は、LSI(Large-Scale Integration)、又はシステムLSIともいう。半導体集積回路10は、プロセッサ(CPU:Central Processing Unit)11、マスクROM(Read Only Memory)12、RAM(Random Access Memory)13、不揮発性メモリ14、データ転送回路(ブートローダー)15、書き込み回路16、バス17、及び外部インターフェース(入出力インターフェース)18を備える。
0010
プロセッサ11は、CPUとも呼ばれ、半導体集積回路10全体の動作を制御する。プロセッサ11は、命令(instruction)を解釈及び実行し、また、メモリに記憶されたプログラムを実行する。特に、プロセッサ11は、半導体集積回路10が起動(又はリセット)された場合に、起動プログラム(ブートストラッププログラム)を実行し、半導体集積回路10を所望の初期状態に設定する。また、プロセッサ11は、半導体集積回路10がさらに備える周辺回路(図示せず)の動作を制御する。半導体集積回路10が備える周辺回路は、半導体集積回路10の機能や仕様によって適宜選定され、この周辺回路には、GPIO(General Purpose Input/Output)などが含まれる。
0011
マスクROM12は、不揮発性メモリであり、製造段階でデータが書き込まれる。マスクROM12は、物理構造の変化でデータを固定化しているので、製造後にデータを書き込んだり、記憶内容を書き換えたりすることはできない。一方で、マスクROM12は、量産に向いているため、製造コストを低減できるというメリットがある。マスクROM12は、半導体集積回路10用の起動プログラムなどを格納する。
0012
RAM13は、揮発性メモリであり、DRAM(Dynamic Random Access Memory)などから構成される。RAM13は、プロセッサ11のワークエリアとして使用される。RAM13は、不揮発性メモリ14からロードされたデータ(プログラム)を一時的に格納し、また、プロセッサ11が計算したデータなどを一時的に格納する。
0013
不揮発性メモリ14は、例えばOTP−ROM(one time programmable ROM)から構成される。OTP−ROM14は、半導体集積回路10に実装された後、1回のみデータの書き込みが可能である。OTP−ROM14は、例えば、電気的にプログラム可能なヒューズ素子であるe−fuse(electrical fuse)から構成される。OTP−ROM14は、半導体集積回路10に実装された後、起動プログラム用の修正プログラムなどを格納する。不揮発性メモリ14は、OTP−ROMに限定されず、フラッシュメモリ(例えば、NAND型フラッシュメモリ)、又はMRAM(Magnetoresistive Random Access Memory)などを用いてもよい。なお、不揮発性メモリ14としてOTP−ROMを用いた場合、コストの面で有利である。
0014
データ転送回路15は、半導体集積回路10の起動(又はリセット)時、OTP−ROM14に格納されたデータをRAM13に転送(ロード)する。
0015
書き込み回路16は、外部インターフェース18を介して外部装置とアクセス可能なように構成される。書き込み回路16は、外部インターフェース18からデータを受け、このデータをOTP−ROM14に書き込む。書き込み回路16の機能により、半導体集積回路10が製造された後、OTP−ROM14は、マスクROM12に格納されたプログラム(起動プログラムを含む)用の修正プログラムを格納することが可能となる。
0017
[1−2]動作
次に、上記のように構成された半導体集積回路10の動作について説明する。
0019
書き込み回路16は、外部インターフェース18にデータが入力されたか否かを監視している(ステップS100)。外部インターフェース18にデータが入力された場合、書き込み回路16は、外部インターフェース18からデータを受ける(ステップS101)。
0020
続いて、書き込み回路16は、OTP−ROM14にデータ書き込む(ステップS102)。例えばOTP−ROM14がe−fuseで構成されている場合、ヒューズ素子の切断前の初期状態は、データ“0”もしくはデータ“1”として扱われる。ヒューズ素子の初期状態をデータ“0”と扱うことにすると、書き込み回路16は、データ“1”を記憶させるヒューズ素子に所定の電流を供給することで、このヒューズ素子を電気的に切断する。このようにして、半導体集積回路10の製造後に、例えば起動プログラム用の修正プログラムを、OTP−ROM14に不揮発に記憶させることができる。
0022
まず、半導体集積回路10に対して、ユーザーによる電源投入、及びユーザーによるリセット操作を含むリセット事象が行われる(ステップS200)。このリセット事象に応答して、半導体集積回路10は、リセット処理を実行する(ステップS201)。このリセット処理において、半導体集積回路10内の各モジュールがリセット、すなわち初期状態(予め決められた状態)に設定される。例えば、プロセッサ11は、リセット事象に起因してリセット信号を受ける。例えば、半導体集積回路10がパワーオンリセット回路(図示せず)を備え、このパワーオンリセット回路が半導体集積回路10内の各モジュールにリセット信号を供給するようにしてもよい。また、半導体集積回路10の外部からリセット信号を受けるようにしてもよい。
0023
続いて、リセット処理に応答して、データ転送回路15は、OTP−ROM14に格納されたデータを、バス17を介してRAM13に転送する(ステップS202)。
0024
続いて、プロセッサ11は、マスクROM12に格納されたプログラム(起動プログラム)を実行する(ステップS203)。具体的には、プロセッサ11は、起動プログラムに含まれる複数の命令を所定の順序で実行する。一連の起動プログラムの実行が全て完了することで、半導体集積回路10は、所望の状態に設定され、以後、図示しない周辺回路を制御したり、外部装置からの命令に応じた処理を実行することが可能となる。
0025
[1−2−3]起動プログラムの実行動作
次に、プロセッサ11が起動プログラムに含まれる複数の命令を実行する動作について説明する。図4は、プロセッサ11の動作を説明する図である。図4には、マスクROM12に格納されたプログラム(マスクROM空間と表記)と、RAM13に格納されたデータ、すなわちOTP−ROM14からRAM13に転送されたデータ(RAM空間と表示)とを模式的に示している。
0026
マスクROM12は、複数のブロックBK_mに区分けされた複数のプログラムを格納している。図4には、4つのブロックBK_m1〜BK_m4を例示している。ブロックBK_m2の先頭領域には、ロード命令(Load1)、及び条件分岐命令(Branch1)が格納されている。さらに、ブロックBK_m2の先頭領域に続く領域には、起動プログラムの一部が格納されている。ブロックBK_m3、BK_m4についても、ブロックBK_m2と同様の構成である。なお、図4では、最初のブロックBK_m1に起動プログラムの一部のみが格納される例を示しているが、最初のブロックBK_m1にも、ロード命令及び条件分岐命令(conditional branch instruction)が格納されていてもよい。
0027
ブロックBK_m1〜BK_m4のサイズは、個別に設定することが可能であり、例えば、1つの纏まったプログラムごとにブロックが割り当てられる。よって、ブロックBK_m1〜BK_m4のサイズが全て異なっていてもよいし、全て同じでもよいし、一部が異なっていてもよい。
0028
RAM13は、複数のブロックBK_rに区分けされた複数のプログラムを格納している。図4には、3つのブロックBK_r1〜BK_r3を例示している。RAM空間上の複数のフラグ(Flag1、Flag2、Flag3)が配置される位置はマスクROM12のプログラムが確定した時点で決まっており、OTP−ROM14内の各ブロックの先頭アドレスを、予めマスクROM12に格納することができる。また、ブロックBK_r1〜BK_r3のサイズは全て異なっていてもよいし、全て同じでもよいし、一部が異なっていてもよい。
0029
ブロックBK_r1の先頭領域には、フラグが格納され、先頭領域に続く領域には、修正プログラムが格納され、修正プログラムに続く領域には、ジャンプ命令(Jump1)が格納される。ブロックBK_r2、BK_r3についても、ブロックBK_r1と同様の構成である。図4の斜線部分は、データが格納されていない領域の一例を示しており、これの意味するところは、ブロックBK_r1〜BK_r3にそれぞれ格納される修正プログラムは互いにサイズが異なっていてもよい。なお、OTP−ROM14のデータがRAM13に転送されるので、図4に示したRAM13のデータ構造は、OTP−ROM14のデータ構造と言い換えることができる。
0030
まず、プロセッサ11は、マスクROM12のブロックBK_m1に格納されたプログラムを実行する(ステップS300)。続いて、プロセッサ11は、ブロックBK_m2に格納されたロード命令(Load1)を実行する(ステップS301)。ロード命令は、RAM13上の所定のアドレスを含み、このアドレスが指定する領域のデータをロードするための命令である。ロード命令に含まれるアドレスは、マスクROM12が製造される時点で予め決められている。ロード命令によって指定される領域には、フラグ(Flag1)が格納されている。よって、プロセッサ11は、ロード命令(Load1)を実行することで、RAM13からフラグ(Flag1)を読み出す。
0031
続いて、プロセッサ11は、ブロックBK_m2に格納された条件分岐命令(Branch1)を実行する(ステップS302)。条件分岐命令は、ロードしたフラグが真(例えばデータ“1”)であるか偽(例えばデータ“0”)であるかに応じて、実行すべきプログラムを選択するための命令である。フラグのデータサイズは任意に設定可能であり、1ビットであってもよいし、複数ビットであってもよい。フラグが複数ビットである場合は、同じデータで構成される。よって、プロセッサ11は、フラグのいずれか1ビットのみを判定すればよい。
0032
プロセッサ11は、フラグが偽である場合、マスクROM12のブロックBK_m2に格納されたプログラムを実行する(ステップS303)。すなわち、ステップS303では、OTP−ROM14を利用した修正プログラムの置き換えは行われない。なお、フラグが偽である場合、該フラグを含むブロックBK_rには有効なデータが書き込まれていない(ブランク領域である)。
0033
一方、プロセッサ11は、フラグが真である場合、RAM13のブロックBK_r1に格納されたプログラム(修正プログラム)を実行する(ステップS400)。すなわち、ステップS400では、OTP−ROM14を利用した修正プログラムの置き換えが行われる。続いて、プロセッサ11は、ブロックBK_r1に格納されたジャンプ命令(Jump1)を実行する(ステップS401)。ジャンプ命令は、マスクROM12の次のブロックBK_mの先頭アドレスを含み、このアドレスが指定する領域にジャンプするための命令である。
0034
続いて、プロセッサ11は、ロード命令(Load2)及び条件分岐命令(Branch2)を実行する(ステップS304、S305)。続いて、プロセッサ11は、フラグ(Flag2)が偽である場合、マスクROM12のブロックBK_m3に格納されたプログラムを実行し(ステップS306)、一方、フラグ(Flag2)が真である場合、RAM13のブロックBK_r2に格納された修正プログラムを実行する(ステップS402、S403)。
0035
同様に、プロセッサ11は、マスクROM12のブロックBK_m4に格納されたプログラム(ステップS307〜S309)と、RAM13のブロックBK_r3に格納されたプログラム(ステップS307、S308、S404、及びS405)とのいずれかを実行する。
0036
以上のような処理により、マスクROM12に格納された起動プログラムを部分的に修正することが可能となる。すなわち、半導体集積回路10の製造後に、半導体集積回路10用の起動プログラムを修正することが可能となる。
0037
[1−2−4]実施例
次に、より具体的な起動プログラムの実行動作について説明する。図5は、実施例に係るプロセッサ11の動作を説明する図である。
0038
図5には、プロセッサ11のアドレス空間(CPUアドレス空間と表記)、マスクROM空間、及びRAM空間を示している。例えば、マスクROM12の記憶領域が16KB、RAM13の記憶領域が1MBである。1ワードは、例えば32ビット(4バイト)である。図5のペリフェラル空間は、図示しない周辺回路のレジスタ領域に対応するアドレス空間である。図5の各空間の左に付記された数値がアドレスを表しており、アドレスに含まれる“0x”は16進数を意味する。
0039
プロセッサ11は、マスクROM12に格納されたロード命令を実行する。このロード命令は、RAM13上のアドレス0x00102000を含み、プロセッサ11は、RAM13上のアドレス0x00102000に格納されたフラグをロードする。
0040
続いて、プロセッサ11は、マスクROM12のうちロード命令に続く領域に格納された条件分岐命令(図5の“If”)を実行する。続いて、プロセッサ11は、フラグが真(データ“1”)である場合、RAM13上のアドレス0x00102004にジャンプし、アドレス0x00102004から始まる修正プログラム(例えば1KB)を実行する。これにより、マスクROM12のアドレス0x00001000から始まるプログラム(例えば512B)が、RAM13の修正プログラム(例えば1KB)に置き換えられる。図5の例では、マスクROM空間上の置き換えられる領域(512B)とRAM空間上の修正プログラム(1KB)とのサイズが異なっている。このように、マスクROM空間上の置き換えられる領域とRAM空間上の修正プログラムとは同じサイズである必要はない。
0041
続いて、プロセッサ11は、RAM13上のアドレス0x00102404に格納されたジャンプ命令を実行する。このジャンプ命令は、マスクROM12上のアドレス0x00001200に格納されたデータをロードするための命令である。その後、プロセッサ11は、マスクROM12上のアドレス0x00001200から始まるプログラムを実行する。
0042
[1−3]第1実施形態の効果
以上詳述したように第1実施形態では、半導体集積回路10は、起動プログラム用の修正プログラムを格納するOTP−ROM14を備える。システムリセットの後、OTP−ROM14のデータは、RAM13にロードされる。プロセッサ11は、マスクROM12の複数のプログラムを順次実行する過程で、ロード命令と条件分岐命令とを実行する。ロード命令を実行することにより、プロセッサ11は、RAM13の予め決められたアドレスにアクセスしてフラグを読み出す。その後、条件分岐命令を実行することにより、プロセッサ11は、読み出されたフラグの内容に応じて、RAM13に格納された第1プログラムとマスクROM12に格納された第2プログラムとを選択的に実行するようにしている。
0043
従って第1実施形態によれば、マスクROM12に格納された起動プログラムを部分的に修正することが可能となる。すなわち、半導体集積回路10の製造後に、半導体集積回路10用の起動プログラムを修正することが可能となる。これにより、より柔軟かつ迅速に、プログラムの修正、変更、及び追加に対応することができる。
0044
また、マスクROM12に格納されたプログラムを有する半導体集積回路10においてプログラム更新のためにリファインするコストの削減が可能になる。本実施形態に類似した手法として、起動毎に代替コードを半導体集積回路の外部から内蔵メモリに転送して使用する方法も考えられるが、内蔵するOTP−ROMを用いることにより起動時に代替コードを外部から転送するシーケンスを省略でき、かつ半導体集積回路の外部の部品点数削減にもつながる。
0045
また、内蔵するOTP−ROM14と、OTP−ROM14のデータが転送されるRAM13とを用いることにより、修正プログラムの置き換えとその処理とを高速に行うことができる。
0046
また、マスクROM12に格納されるプログラムがシステムの起動に使用される起動プログラムである場合、半導体集積回路10の起動時間を短縮することができる。
0047
なお、前述したように、不揮発性メモリ14は、OTP−ROMに限定されず、複数回の書き換えが可能な不揮発性メモリを用いてもよい。この場合、修正プログラムを複数回書き換えることが可能である。
0048
[2]第2実施形態
第2実施形態は、マスクROM12の1つのブロックBK_mのうち一部の領域(一部のプログラム)を、RAM13のブロックBK_rに格納されたプログラムで置き換えるようにしている。図6は、第2実施形態に係るプロセッサ11の動作を説明する図である。
0049
ステップS300〜S302の動作は、第1実施形態と同じである。プロセッサ11は、フラグが真である場合、RAM13のブロックBK_r1に格納されたプログラムを実行する(ステップS400)。続いて、プロセッサ11は、ジャンプ命令(Jump1)を実行する(ステップS401)。ジャンプ命令(Jump1)に含まれるアドレスは、マスクROM12のブロックBK_m2のうち、条件分岐命令(Branch2)を指定するアドレスとブロックBK_m2の最終アドレスとの間の位置を指定する。
0050
続いて、プロセッサ11は、ジャンプ命令(Jump1)で指定されたアドレス、すなわちブロックBK_m2の途中から、プログラムを実行する(ステップS303)。
0051
以上詳述したように第2実施形態によれば、第1実施形態に比べてより小さい単位でプログラムの置換動作を行うことができる。その他の効果は、第1実施形態と同じである。
0052
なお、上記各実施形態では、マスクROM12が格納するプログラムとして、LSIシステムを起動させるために起動プログラムを例に挙げて説明しているが、これに限定されず、他の種類のプログラム(OS(operating system)を含む)に適用することも可能である。
0053
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
0054
10…半導体集積回路、11…プロセッサ、12…マスクROM、13…RAM、14…不揮発性メモリ、15…データ転送回路、16…書き込み回路、17…バス、18…外部インターフェース。