(57)【要約】【課題】外部スイッチ等を新たに設ける必要がなく、簡単に起動すべきプログラムを切り替えることができるプロセッサを提供する。【解決手段】プロセッサは、リセット信号の入力の状態に応じて、複数のプログラムの中から起動すべきプログラムを選択するプログラム選択部１２と、プログラム選択部１２の選択結果を記憶するレジスタ１３と、選択結果に基づいて、起動するプログラムを切り替える処理を行うCPUコア１１とを有する。【選択図】図１
2011008432.tif 000002
【特許請求の範囲】
【請求項１】
リセット信号の入力の状態に応じて、複数のプログラムの中から起動すべきプログラムを選択するプログラム選択部と、
前記プログラム選択部の選択結果を記憶する記憶部と、
前記選択結果に基づいて、前記起動するプログラムを切り替える処理を行うCPUと、
を有することを特徴とするプロセッサ。
【請求項２】
前記選択結果は、前記記憶部から前記CPUへ、外部入力信号として供給されることを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記CPUは、前記記憶部に記憶された前記選択結果を読み出すことによって、前記選択結果を得ることを特徴とする請求項１に記載にプロセッサ。
【請求項４】
前記入力の状態は、前記リセット信号の入力回数、入力時間間隔あるいは継続入力時間であることを特徴とする請求項１から３のいずれか１つに記載にプロセッサ。
【請求項５】
前記選択結果に基づく前記起動すべきプログラムへの切り替えを禁止する禁止部を有することを特徴とする請求項１から４のいずれか１つに記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関し、特に、起動するプログラムを切り替えることができるプロセッサに関する。
【背景技術】
【０００２】
従来より、中央処置装置（CPU）を利用した製品用プログラム開発において、その製品に必要となる全てあるいは一部の機能を搭載した半導体チップを搭載した開発用ボードが用いられている。このボードおよびその開発を支援するプログラムを用い、開発対象プログラムの動作が試験され、その結果が検討されて、製品用プログラムが修正されながら開発される。
【０００３】
開発対象プログラムは、未完成の段階である開発中に、デバッグのために書き換えが必要となることもある。そのため、開発対象である製品用プログラム（以下、製品プログラムという）と開発支援プログラムといった複数のプログラムがボード上でそれぞれ動作可能である状態となっているだけでなく、製品プログラムに不具合がある場合に備えて、書き換え機能を担う開発支援プログラムを製品プログラムに優先して起動させる選択の手段が必要である。開発支援プログラムは、例えば、製品プログラムのダウンロード機能、メモリダンプ機能等を提供し、製品プログラムの開発を支援するためのプログラムである。
【０００４】
複数のプログラムは書き換え可能なフラッシュメモリ等に記憶される。そして、例えば、開発支援プログラムを起動して、その開発支援プログラムから開発中の製品プログラムを実行したり、開発支援プログラムは起動しないで製品プログラムだけを実行させたりしながら、製品プログラムの動作確認、修正等が行われる。よって、複数のプログラムがメモリ内に共存した状態のままで必要に応じて実行すべきプログラムを選択して処理を切り替えるために、プログラムの選択が必要となる。
【０００５】
実行プログラムを選択するためすなわちボード上でプログラムの処理フローを切り替えるための方法としては、ボード上にディップスイッチ等の外部スイッチを設け、その外部スイッチの状態に応じてプログラムを選択する方法がある。例えば、外部スイッチからの入力信号に応じてボード上でデコードされるアドレスを切り替えることによって、外付けのプログラムメモリを選択する方法がある。しかし、この方法では、ボード上におけるメモリの実装方法に依存するために、CPUチップ内蔵のプログラムメモリの場合には対応できない。
【０００６】
また、同様に外部スイッチからの入力信号を用いて、CPUのアドレス空間を切り替える方法があるが、切替えスイッチあるいはピンを設けなければならないので実装面積及びコストが増大するという問題がある。さらにまた、過去の製品とのピン互換の半導体デバイスを用いる場合は、この切り替え信号のためにピンに割り当てることが困難な場合がある。
【０００７】
別な方法として、電源の立ち上げ時に、EEPROM内の識別データをCPUが読み出して、処理を切り替える方法がある（例えば、特許文献１参照）。  
さらにその方法に類似する方法として、開発支援プログラムによる製品プログラムのダウンロード時に、CPUがアクセス可能な不揮発性メモリ中の所定の記憶領域に所定のフラグを設定し、ブート時にCPUによりそのフラグを読み出してそのフラグの状態に応じて、処理フローを切り替える方法がある。その方法によれば、例えば、製品プログラムがダウンロードされていれば、そのフラグが設定されるので、製品プログラムが単独で実行され、製品プログラムがダウンロードされていなければそのフラグは設定されていないので、開発支援プログラムが起動される。
【０００８】
しかし、この方法の場合、ダウンロードして起動した製品プログラムにエラーがあると、開発支援プログラムを起動することが出来なくなってしまう場合がある。その結果、不揮発メモリが半導体チップ内蔵の場合には、不揮発メモリのフラグを、開発支援プログラムを用いて未ダウンロードを示す値に書き換えることが不可能となり、半導体装置そのものがそのまま使用できなくなるという問題があった。
【０００９】
また、CPUが内蔵するUART等の通信機能を利用し、外部からの通信入力の有無によってソフトウェアにより処理を切り替える方法もある。この通信機構を用いた方法では、通信用デバイスの初期化及び送受信プロトコル制御が必要となるため、切り替え判定のために大きな遅延が発生する場合がある。さらにまた、外部及び開発用ボードに通信を行うためのアプリケーションプログラムが必要なだけでなく、その通信性能によって処理の切り替え判定に必要な時間が、開発環境で一定にならないという問題もある。
【００１０】
JTAG機能を持つ半導体チップでは、このJTAGを利用したICEによりデバッグプログラム等と製品プログラムそのものを書き換えることも出来る。しかし、セキュリティが重視されるJTAG機能非搭載の半導体チップでは、ICEによるプログラム書き換えも不可能であるため、複数のプログラムを切り替える有効な手段がなかった。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開平７−２３４７０６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
そこで、本発明は、外部スイッチ等を新たに設ける必要がなく、簡単に起動すべきプログラムを切り替えることができるプロセッサを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明の一態様によれば、リセット信号の入力の状態に応じて、複数のプログラムの中から起動すべきプログラムを選択するプログラム選択部と、前記プログラム選択部の選択結果を記憶する記憶部と、前記選択結果に基づいて、前記起動するプログラムを切り替える処理を行うCPUとを有するプロセッサを提供することができる。
【発明の効果】
【００１４】
本発明によれば、外部スイッチ等を新たに設ける必要がなく、簡単に起動すべきプログラムを切り替えることができるプロセッサを実現することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施の形態に係わるプログラム開発時のボードの構成を示すブロック図である。
【図２】本発明の第１の実施の形態に係わる、ボード１のハードウェアとソフトウェアの構成を示す図である。
【図３】本発明の第１の実施の形態に係わるプログラム選択部１２の構成例を示すブロック図である。
【図４】本発明の第１の実施の形態の変形例に係わる、レジスタ１３の内容をデータとして読み出す場合のプログラム選択部の構成例を示すブロック図である。
【図５】本発明の第２の実施の形態に係るプログラム選択部の構成例を示すブロック図である。
【図６】本発明の第２の実施の形態に係る各プログラムに対応したリセットベクタが記憶される記憶領域の切り替えを説明するための図である。
【図７】本発明の第２の実施の形態に係るリセットベクタの値そのものの書き換えを説明するための図である。
【図８】本発明の第３の実施の形態に係るプログラム選択部の構成例を示すブロック図である。
【図９】図８のプログラム選択部１２Cの動作を説明するための図である。
【図１０】本発明の第４の実施の形態に係るプログラム選択部の構成例を示すブロック図である。
【図１１】図１０のプログラム選択部１２Dの動作を説明するための図である。
【図１２】図１０のプログラム選択部１２Dの動作を説明するための図である。
【図１３】開発支援プログラムSPが起動されることが無いようにするための回路構成を示す図である。
【発明を実施するための形態】
【００１６】
以下、図面を参照して本発明の実施の形態を説明する。  
（第１の実施の形態）
まず図１に基づき、本発明の第１の実施の形態に係わる開発用のボードの構成を説明する。図１は、本実施の形態に係わるプログラム開発時のボードの構成を示すブロック図である。
【００１７】
図１において、開発用のボード１上には、プロセッサである中央処理装置（CPU）２と、不揮発性メモリであるフラッシュメモリ３と、メインメモリとしてのRAM４とが搭載されている。CPU２、フラッシュメモリ３及びRAM４のそれぞれは、半導体装置すなわち半導体チップである。さらに、ボード１上には、CPU２のコールドスタートを実行するための操作部としてのリセットボタン５も搭載されている。リセットボタン５は、CPU２のリセット信号入力ポートに接続され、ユーザによって操作される。
【００１８】
フラッシュメモリ３には、開発対象プログラムである製品プログラムPPと、デバッグ等のための開発支援プログラムSPとが記憶されている。プログラム開発者であるユーザは、ボード１上で、製品プログラムPPのみを起動させたり、あるいは開発支援プログラムSPを起動させて、その開発支援プログラムSPを利用して製品プログラムPPをシリアル通信等の通信機能によるダウンロードして実行させることによって、製品プログラムPPのデバッグ等を行うことができる。
【００１９】
また、ユーザは、リセットボタン５を押下すると、CPU２へのリセット信号RSTを供給することができる。CPU２は、リセット信号RSTが入力されると、初期状態からブート処理を行い、コールドスタート処理を実行する。
【００２０】
CPU２は、CPUコア１１と、プログラム選択部１２と、レジスタ１３とを含む。CPUコア１１は、さらに、リセット信号RSTを受け付けるためのリセット信号受付部１４を含む。CPUコア１１は、実行すべきプログラムをフラッシュメモリ３から読み出し、RAM４を利用しながら、実行する。CPUコア１１は、リセット信号RSTを受け付けると、初期状態に戻り、実行すべきプログラムを起動する。
【００２１】
リセット信号RSTは、プログラム選択部１２にも入力される。プログラム選択部１２は、入力されたリセット信号RSTの入力の状態に応じて、複数のプログラムの中から起動すべきプログラムを選択し、その選択結果データDRをレジスタ１３に書き込む回路である。その選択方法については、後述する。
【００２２】
レジスタ１３は、プログラム選択部１２の選択結果データDRを記憶する記憶部であり、リセット信号RSTによるリセット時にも、データが消去されないように構成されている。通常は、リセット時、電源は落ちないので、CPU２がリセットされても、レジスタ１３に記憶されたデータは保持される。よって、レジスタ１３は、CPU２のリセットがあった場合に、選択結果データDRあるいは値を保持する回路である。レジスタ１３のデータあるいは値は、外部入力信号GSとして、外部信号入力端子TからCPUコア１１に入力される。  
なお、レジスタ１３は、リセット時にデータが消去されなければ通常のレジスタでもよいが、不揮発性のメモリでもよい。
【００２３】
フラッシュメモリ３には、複数のプログラムが、ここでは製品プログラムPPと開発支援プログラムSPの少なくとも２つが記憶され、ユーザは、後述するように、リセットボタン５に対して所定の操作をすることによって、記憶された複数のプログラムの中からどのプログラムを実行させるかを選択することができる。なお、説明を簡単にするために、以下は、製品プログラムPPと開発支援プログラムSPの２つのプログラムのいずれか一方を選択する場合で説明する。
【００２４】
図２は、ボード１のハードウェアとソフトウェアの構成を示す図である。ボード１は、ハードウェア（H/W）として、基板上のCPU２，フラッシュメモリ３、RAM４及びリセットボタン５を含み、ソフトウェアとして、フラッシュメモリ３に記憶された製品プログラムPPと開発支援プログラムSPを含む。製品プログラムPPと開発支援プログラムSPは、ハードウェアからの指示に基づいて、実行される。
【００２５】
図１に示すボード１を利用して、ユーザは、開発支援プログラムSPをボード１上で起動させて、その開発支援プログラムSPから製品プログラムPPを実行させることによって、開発支援プログラムSPのデバッグ等の機能を利用して、製品プログラムPPをデバッグすることができる。また、ユーザは、有る程度まで完成した製品プログラムPPの全体あるいは一部を単独でボード１上で起動させて、その機能、性能等を評価することもできる。
【００２６】
本実施の形態では、ユーザは、リセットボタン５に対する所定の操作により、製品プログラムPPと開発支援プログラムSPのいずれのプログラムを起動させるかを選択することができる。すなわち、ユーザは、そのリセットボタン５を操作して、起動時における、ボード１上で実行される処理のフローを切り替えることができる。
【００２７】
図３は、プログラム選択部１２の構成例を示すブロック図である。図３に示すように、プログラム選択回路１２は、１ビットのカウンタ２１を含む。リセット信号RSTは、カウンタ２１に入力される。CPU２へのリセット信号RSTが入力されると、そのリセット信号RSTをトリガ信号として、カウンタ２１のカウンタ値が更新される。初期値として、カウンタ２１は「０」であるが、その後リセット信号RSTが入力されると「１」になり、さらにリセット信号RSTが入力されると「０」になるように、プログラム選択回路１２は、リセット信号RSTの入力の状態あるいは入力パターンに応じて、起動すべきプログラムを選択する回路である。
【００２８】
従って、カウンタ２１は、リセット信号RSTが入力される度に、そのカウンタ値が「０」と「１」の間で交互に変化する。カウンタ２１の値は、選択結果データDRとして出力されて、レジスタ１３に保持され、CPUコア１１への外部信号入力GSとして供給される。
【００２９】
CPUコア１１は、レジスタ１３の値に基づいて、起動すべきプログラムを切り替える処理を行う。すなわちプログラム選択部１２のカウンタ値の更新後、CPUの処理コア１１は、ブートプログラムにおけるフロー選択処理を実行し、この更新されたカウンタ値に対応する外部信号入力GSに基づいて、実行すべきプログラムが選択される。CPUコア１１は、外部信号入力GSが「０」（すなわちLOW）のときは、開発支援プログラムSPを起動し、外部信号入力GSが「１」（すなわちHIGH）のときは、製品プログラムPPを起動するように構成されている。
【００３０】
よって、リセットボタン５が操作される度に、レジスタ１３の値は「０」と「１」の間で交互に変更されるので、ユーザは、リセットボタン５を操作するだけで、起動させたいプログラムを簡単に交互に選択することができる。
【００３１】
上述したプロセッサによれば、リセット信号RSTを用いて起動するプログラムを切り替えるため、ディップスイッチ等の外部デバイスの追加が不要である。また、通信デバイスによる制御側アプリケーションプログラムとのやりとりも必要なく、通信デバイスによる通信時間が発生しないために、処理の起動速度も通信アプリケーションに依存することがなくなるという利点もある。さらに、複数のプログラムの搭載されるメモリがプロセッサの半導体装置内に混載される場合、あるいはリセットベクタに置かれるべきブートプログラムが複数存在した場合も、プログラム選択のための新たな入力ピンを用意せず済むため、コスト削減にも繋がる。
【００３２】
以上のように、本実施の形態のプロセッサによれば、外部スイッチ等を新たに設ける必要がなく、リセットボタンの操作だけで、起動時のプログラムを簡単に切り替えることができるプロセッサを提供することができる。
【００３３】
上述した実施の形態では、レジスタ１３の値は、外部入力信号GSとしてCPUコア１１に供給されているが、本実施の変形例として、図１において点線で示すように、レジスタ１３の内容が、データ（DATA）として、CPUコア１１によって読み出されるようにしてもよい。CPUコア１１は、読み出したレジスタ値、すなわち「１」か「０」、に応じて、起動時のプログラムを切り替える、すなわち処理フローを制御するようにしてもよい。
【００３４】
また、レジスタ１３の内容をデータ（DATA）として読み出す場合の他の例として、プログラム選択部のカウンタを複数ビットのカウンタを利用するようにしてもよい。図４は、レジスタ１３の内容をデータとして読み出す場合のプログラム選択部の構成例を示すブロック図である。
【００３５】
リセット信号RSTは複数ビットのカウンタ２１Aに入力される。カウンタ２１Aの値は、リセット信号RSTが入力される度にインクリメントし、所定のカウント値になると初期値に戻る。カウンタ２１Aの値は、剰余回路２２へ入力される。剰余回路２２は、所定の値で入力されたカウント値を除算して余り値を出力する剰余演算を行う回路である。剰余回路２２の出力は、データ（DATA）としてレジスタ１３に設定されて、CPUコア１１により読み出される。CPUコア１１は、入力された値に応じて、複数のプログラムのいずれを起動させるかが予め決められている。
【００３６】
例えば、カウンタ２１Aが４ビットのカウンタで、カウンタ値が剰余回路２２により「４」で除算されるとすれば、剰余回路２２の出力は、「０」から「３」の値を取り得る。よって、剰余回路２２の出力に応じて、４つのパターンの処理フローが選択可能となり、ユーザは、所定の周期で処理フローを切り替えるようにすることができる。  
以上のようにリセット操作の回数を保持し、ソフトウェアによる判定処理によって処理を分岐させてもよいが、ハードウェアのみで分岐処理を実現すれば、プロセッサに実装されるソフトウェアに分岐に関連する処理を導入する必要が無くなるため、製品プログラムPPを開発終了後に、必要の無くなったソフトウェアによる判定処理が残らないことになり、そのまま最適な製品用プログラムとして使用できる利点がある。
【００３７】
よって、図４の構成によれば、ユーザは、リセットボタン５の押下回数あるいは入力パターンに応じて、処理フローを周期的に変更することができる。  
なお、上述した本実施の形態及び変形例では、CPU２とフラッシュメモリ３とRAM４のそれぞれは、ボード１上に搭載されているが、１つの半導体装置であるプロセッサが、CPU２とフラッシュメモリ３とRAM４とを内蔵するような構成でもよい。
【００３８】
また、上述した本実施の形態及び変形例では、製品プログラムPPと開発支援プログラムSP等の複数のプログラムを記憶しているのはフラッシュメモリ３であるが、プログラムの変更が必要ないのであれば、通常のROMを用いてもよい。
【００３９】
（第２の実施の形態）
第２の実施の形態のプロセッサは、第１の実施の形態とは、プログラム選択部の回路構成だけが異なる。第２の実施の形態では、プログラム選択部は、複数ビットのカウンタと、カウンタ値が設定された値と一致するか否かを比較する比較回路とを有する。
【００４０】
図５は、本発明の第２の実施の形態に係るプログラム選択部の構成例を示すブロック図である。なお、図５に示すプログラム選択部以外の構成は、第１の実施の形態と同じであるので、同じ構成についての説明は省略する。
【００４１】
プログラム選択部１２Bは、複数ビットのカウンタ２１Bと、設定値が設定される設定回路２３と、カウンタ２１Bのカウンタ値と設定回路２３に設定された設定値とを比較し、比較結果を出力する比較回路２４とを含む。カウンタ２１Bには、リセット信号RSTが入力される。カウンタ２１Bのカウント値は、比較回路２４に入力される。設定回路２３に設定された設定値は、比較回路２４に入力される。比較回路２４は、例えば、カウンタ値が設定値と一致すると、レジスタ１３に「１」を書き込み、不一致のときは、レジスタ１３に「０」を書き込むように、選択結果データDRを出力する。
【００４２】
例えば、カウンタ２１Bは２ビットのカウンタであり、設定回路２３には、設定値として「０」が設定されているとする。その場合、２ビットのカウンタ２１Bのカウンタ値は、リセット信号RSTが入力される度に、１つずつインクリメントして周期的に変更しながら、更新されていき、４回のリセット信号毎にカウンタ値が「０」になる。その結果、比較回路２４は、４回に１回の割合で一致信号を出力する。一致信号が出力される度に、レジスタ１３には「１」が書き込まれる。
【００４３】
よって、リセットボタン５が操作される度に、カウンタ２１Bのカウンタ値は更新され、比較回路２４は、所定の周期でCPUコア１１に対して外部入力信号GSを出力するので、ユーザは、リセットボタン５を操作するだけで、起動させたいプログラムを簡単に周期的に選択することができる。すなわち、ユーザは、リセットボタンを押下した回数に応じて、すなわちリセット信号RSTの入力回数に応じて、開発支援プログラムSPと製品プログラムPPの処理の分岐を簡単に行うことができる。
【００４４】
なお、CPUコア１１における起動プログラムの切り替えの方法としては、各プログラムに対応したリセットベクタが記憶される記憶領域を切り替えるようにしてもよいし、リセットベクタのアドレス値そのものを切り替えるようにしてもよい。CPUコア１１は、入力された外部入力信号GSあるいは読み出したデータ（DATA）に応じて、記憶領域の切り替え、あるいはリセットベクタの値の切り替えを行う。言い換えると、外部入力信号GSあるいはデータ（DATA）は、リセットベクタのアドレス空間の切り替え信号として利用される。
【００４５】
図６は、各プログラムに対応したリセットベクタが記憶される記憶領域の切り替えを説明するための図である。図６に示すように、リセットベクタのアドレス空間を、製品プログラムPP用と、開発支援プログラムSP用とに分け、レジスタ１３の出力に応じて、いずれかが選択される。選択結果が「０」ならば、開発支援プログラムSP用の処理RV1がリセットベクタに配置され、選択結果が「１」ならば、製品プログラムPP用の処理RV2がリセットベクタに配置される。
【００４６】
図７は、リセットベクタの値そのものの書き換えを説明するための図である。図７に示すように、リセットベクタが記憶される領域のデータを、製品プログラムPPが選択されるときは、製品プログラムPPが起動されるように、開発支援プログラムSPが選択されるとは、開発支援プログラムSPが起動されるように、リセットベクタのアドレス値をRV(PP)かRV(SP)に切り替える。
【００４７】
なお、図６及び図７で説明したリセットベクタに関する処理方法は、上述した第１の実施の形態でも、利用可能であり、かつ以下に説明する第３の実施の形態以降の実施の形態においても適用可能である。
【００４８】
以上のように、本実施の形態のプロセッサによれば、外部スイッチ等を新たに設ける必要がなく、リセットボタンの操作だけで、リセット信号の入力回数に応じて、起動時のプログラムを簡単に切り替えることができるプロセッサを提供することができる。
【００４９】
なお、本実施の形態においても、レジスタ１３の値は、CPUコア１１によってデータとして読み出されるようにしてもよい。ただし、リセットベクタの配置またはアドレスの変更に関わる形態では、レジスタ１３の値は外部信号GSとしてCPU11に入力される。
【００５０】
（第３の実施の形態）
第３の実施の形態のプロセッサは、第１の実施の形態とは、プログラム選択部の回路構成だけが異なる。第３の実施の形態では、プログラム選択部は、タイマと、判定回路とを有する。  
図８は、本発明の第３の実施の形態に係るプログラム選択部の構成例を示すブロック図である。なお、図８に示すプログラム選択部１２C以外の構成は、第１の実施の形態と同じであるので、同じ構成についての説明は省略する。
【００５１】
プログラム選択部１２Cは、所定の時間を計時し、その所定の時間が経過すると出力を変更するタイマ２５と、２回目のリセット信号RSTの入力がその所定の時間内に入力されたか、あるいは所定の時間を超えてから入力されたかを判定して、その判定結果に応じた出力信号を生成して、起動すべきプログラムの選択結果として、レジスタ１３へ出力する判定回路２６とを含む。判定回路２６には、リセット信号RSTも入力されている。
【００５２】
図９は、図８のプログラム選択部１２Cの動作を説明するための図である。計時回路としてのタイマ２５には、予め設定された所定の時間TS1が設定されている。タイマ２５は、リセット信号が入力されると、内部のカウント値をクリアして、計時を開始して「０」（LOW）の出力を開始し、所定の時間TS1が経過すると、「１」（HIGH）を出力するように構成されている。なお、タイマ２５の内部のカウント値は、リセット信号RSTが入力された時点でのカウント値を、判定回路にラッチするために必要な時間が経過した後にクリアされる。
【００５３】
判定回路２６は、２回目のリセット信号RSTの入力が、タイマ２５の出力がLOWのときにあったか、あるいはHIGHのときにあったかを判定し、その判定結果に応じた出力信号をレジスタ１３に出力する。
【００５４】
例えば、図９において、時刻t0で１回目のリセット信号RSTが入力された後に、時刻t0からの所定の時間TS1内のある時刻t1に、２回目のリセット信号RSTが入力されると、判定回路２６は、「１」の出力信号をレジスタ１３に出力する。また、時刻t0で１回目のリセット信号RSTが入力された後に、時刻t0から所定の時間TS1を経過した後のある時刻t2に、２回目のリセット信号RSTが入力されると、判定回路２６は、「０」の出力信号をレジスタ１３に出力する。
【００５５】
レジスタ１３に書き込まれた値が、CPUコア１１へ供給されてから後の処理は、上述した第１及び第２の実施の形態と同じである。
【００５６】
本実施の形態は、リセット信号の入力時間間隔を利用している。所定の時間内における再リセットの有無によって起動時のプログラムの切り替えが行われる。製品プログラムPPの開発時に、開発者であるユーザが、デバッグをするために開発支援プログラムSPを実行させる、あるいは修正した製品プログラムPPを実行させるために、リセットボタン５を再操作することは容易である。すなわち、ユーザは、リセット信号入力の間隔を、常に同じ操作感で指示できるので、効率の良い、起動プログラムの切り替え操作を実現することができる。
【００５７】
以上のように、プログラム選択部１２Cは、リセットボタン５を押下してから、所定の時間内にリセットボタン５の押下が再びあったか否かによって、レジスタ１３への出力信号を変化させる。よって、ユーザは、そのリセットボタン５の操作時間間隔によって、開発支援プログラムSPと製品プログラムPPの処理の分岐を簡単に行うことができる。例えば、電源投入時は、製品用プログラムPPが動作するようにしておけば、ユーザが所定の時間内でのリセット操作を行うことにより、開発支援プログラムSPに切り替えることができる。
【００５８】
（第４の実施の形態）
第４の実施の形態のプロセッサは、第１の実施の形態とは、プログラム選択部の回路構成だけが異なる。第４の実施の形態では、プログラム選択部は、計時回路と、設定回路と、判定回路とを有する。  
図１０は、本発明の第４の実施の形態に係るプログラム選択部の構成例を示すブロック図である。なお、図１０に示すプログラム選択部１２D以外の構成は、第１の実施の形態と同じであるので、同じ構成についての説明は省略する。
【００５９】
プログラム選択部１２Dは、リセットボタン５が押下されている間だけ計時する計時回路２７と、所定の時間が設定される設定回路２８と、リセットボタン５の押下されていた時間（すなわちリセット信号RSTの継続入力時間）が所定の時間以下であるか否かを判定する判定回路２９とを含む。本実施の形態では、リセット信号RSTのアサート時間が、所定の時間以上か否かによって、処理の分岐を実現する。
【００６０】
図１１と図１２は、図１０のプログラム選択部１２Dの動作を説明するための図である。ここでは、所定の時間TS2は、メインクロックであるクロック信号CLKのクロック数により設定されている。図１１と図１２の場合、所定の時間TS2は、設定回路２８においてクロック数が４と設定されている。
【００６１】
リセットボタン５が押下されている間、リセット信号RSTは、「１」（すなわちHIGH）である。リセットボタン５が押下されていた時間が、すなわちリセット信号RSTが「１」になってから「０」になるまでの時間が、所定の時間TS2以上であったか否かが、判定回路２９により判定される。図１１と図１２は、リセット信号RSTが入力されてから選択されたプログラムの実行を開始するまでに、判定クロック数が「４」（すなわち４クロックカウント)の遅延を必要とする例である。判定回路２９は、リセット信号RSTの入力開始から判定クロック数の間、毎クロックのアップエッジごとにリセット信号RSTの状態を取得する。そして、判定回路２９は、判定クロック数経過時TTの判定値PRGSELを、選択結果データDRとしてレジスタ１３に出力する。
【００６２】
図１１は、４クロックカウントの間、リセット信号RSTがアサートされており、時点TTにおいてリセット信号RSTが「１」である場合を示す。言い換えると、図１１は、リセット信号RSTの継続入力時間が４クロックカウントの所定の時間TS2以上である場合である。図１２は、４クロックカウント目の前に「０」（LOW）に戻っており、時点TTにおいてリセット信号RSTが「０」である場合を示す。言い換えると、図１２は、リセット信号RSTの継続入力時間が４クロックカウントの所定の時間TS2以内である場合である。従って、判定回路２９は、その状態に応じて、レジスタ１３に選択結果データDRを出力する。
【００６３】
レジスタ１３に書き込まれた値が、CPUコア１１へ供給されてから後の処理は、上述した第１から第３の実施の形態と同じである。
【００６４】
従って、ユーザは、リセットボタン５の継続押下げ時間（すなわちリセット信号RSTのアサート時間）を変更することにより、処理を分岐することが出来る。なお、ここでは判定クロック数が４クロックである場合で説明したが、実際にはボード１の実装やリセットボタン５の構造に合わせて、人間であるユーザの操作に必要な十分多いクロック数が判定クロック数として設定される。
【００６５】
本実施の形態も、第３の実施の形態と同様に、ユーザは、リセットボタン５の操作を複数回行うことなく、リセット信号RSTの入力時間を、すなわちリセットボタン５の押下時間を、常に同じ操作感で指示できるので、効率の良い、起動プログラムの切り替え操作を実現することができる。
【００６６】
よって、プログラム選択部１２Dは、リセットボタン５の押下継続時間が所定の時間より長いか否かによって、レジスタ１３への出力信号を変化させる。よって、ユーザは、そのリセットボタン５の押下継続時間によって、開発支援プログラムSPと製品プログラムPPの処理の分岐を簡単に行うことができる。
【００６７】
以上のように、上述した各実施の形態のプロセッサによれば、外部スイッチ等を新たに設ける必要がなく、リセットボタンの操作により、簡単に起動すべきプログラムの切り替えを簡単に行うことができる。  
さらに、製品プログラムPPが完成した場合に、フラッシュメモリあるいはROMに製品プログラムPPと開発支援プログラムSPが記憶されたまま、半導体製品となる場合がある。製品プログラムPPのソフトウェア開発が終了し開発支援プログラムSPの使用をする必要がなくなっても、リセット信号RSTの入力により処理が分岐可能なままであると、製品が実使用の状態で、必要としない処理分岐の発生の虞がある。
【００６８】
そこで、製品としての実使用中に開発支援プログラムSPが起動されることが無いようにするために、以下のような手段を付加しておくことは、必須ではないが、安全のために重要である。
【００６９】
図１３は、開発支援プログラムSPが起動されることが無いようにするための回路構成を示す図である。図１３に示すように、プログラム選択部とレジスタ１３の間に、フューズ３１と、インバータ３２と、OR回路３３を含む、開発支援プログラムSPの起動を禁止する禁止部としての禁止回路３４が設けられる。
【００７０】
フューズ３１は、一端が所定の電源に接続され、他端がインバータ３２に接続されている。フューズ３１は、フューズブローによりフューズを物理的に切断することによって、インバータ３２への出力をLOWに固定することができる。OR回路３３には、インバータ３２の出力と、プログラム選択回路１２、１２A、１２B、１２C、１２Dの出力が入力されている。OR回路３３は、２つの入力のいずれかが「１」（HIGH）であれば、「１」（HIGH）をレジスタ１３へ出力する。
【００７１】
フューズ３１は、製品プログラムPPの開発中は切断されておらず繋がっているので、インバータ３２の出力は、「０」（LOW）である。よって、OR回路３３の出力は、プログラム選択回路の出力に応じた値となる。
【００７２】
開発支援プログラムSPの使用をする必要がなくなると、フューズ３１は、フューズブローにより切断される。その結果、インバータ３２の出力は、すなわちOR回路３３の２つの入力の一方は、「１」（HIGH）となる。よって、OR回路３３の出力は、常に「１」（HIGH）に固定されるので、リセット信号RSTの入力によって、開発支援プログラムSPが起動されることはない。禁止回路３４は、プログラム選択部の選択結果に基づく、起動すべきプログラムへの切り替えを禁止する禁止部である。言い換えると、禁止回路３４は、開発支援プログラム実行禁止回路ということができる。
【００７３】
フューズの切断という物理的な変更による永久的な処理分岐の禁止のため、ブート処理プログラム自体の書き換え等の必要がない。この方法は、プログラムの内容書き換えによる分岐停止が不可能な半導体装置の内蔵マスクROMのプログラムの場合に、特に有効である。
【００７４】
以上のように、図１３の禁止回路３４を付加することによって、開発終了後には必要の無くなる開発支援プログラム実行の禁止が可能になり、製品プログラムPPのセキュリティを向上することが出来る。
【００７５】
さらに、図１３において点線で示すように、フューズ３１とインバータ３２間のP点の電位を検出する電位検出回路３５を設け、そのＰ点の電位が「０」（LOW）であるときには、開発支援プログラムSPのメモリ領域からの命令フェッチを禁止するソフトウェア処理部が実行されるようにしてもよい。すなわち、ソフトウェア処理部は、フィーズ３１の切断に応じて、起動が禁止されるプログラムのメモリ領域からの命令フェッチを禁止する。開発支援プログラムSPのメモリ領域からの命令フェッチを禁止する方法は、悪意のある者による開発支援プログラムSPの起動に対して、有効である。
【００７６】
以上の例は、フューズを利用した、開発終了後に必要の無い開発支援プログラムの実行禁止方法であるが、フューズを用いないで、プログラムの追加により、開発支援プログラムの実行禁止を行うようにしてもよい。
【００７７】
例えば、リセット後に実行されるブート処理の前に実行されるプログラムが追加される。追加されたプログラムは、ブート処理の前に実行され、半導体チップ内の所定のレジスタに所定の値を設定することにより、処理の分岐を禁止する。
【００７８】
この方法によれば、開発が終了した最終的な製品用プログラムの冒頭に、このような追加のプログラムを追加することにより、フロー分岐の停止を行うことが可能となる。この方法は、上述したフューズを用いた方法に比べて、フューズブロー等の機械的な処理が省略されるので、半導体装置の製造コストの削減を図りながら、製品用プログラムのセキュリティ向上を図ることができる。ここで、リセット直後に実行される分岐禁止の命令列を比較検出し、この分岐禁止命令が実行される間は分岐の発生を禁止する機能をCPUに組み込むようにしてもよい。この方法によると、リセット直後の分岐禁止判定中の誤分岐の発生を防止することができる。
【００７９】
以上のように、上述した本発明の各実施の形態によれば、外部スイッチ等を新たに設ける必要がなく、簡単に起動すべきプログラムを切り替えることができるプロセッサを提供することができる。
【００８０】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【符号の説明】
【００８１】
１  ボード、２  CPU、３  フラッシュメモリ、４  RAM、５  リセットボタン、１１  CPUコア、１２、１２A、１２B、１２C、１２D  プログラム選択部、１３  レジスタ、１４  リセット信号受付部、２１、２１A、２１B、２２  剰余回路、２３、２８  設定回路、２４  比較回路、２５  タイマ、２６、２９  判定回路、２７  計時回路、３１  フューズ、３２  インバータ、３３  OR回路、３４  禁止回路
【図１】
2011008432.tif 000003
【図２】
2011008432.tif 000004
【図３】
2011008432.tif 000005
【図４】
2011008432.tif 000006
【図５】
2011008432.tif 000007
【図６】
2011008432.tif 000008
【図７】
2011008432.tif 000009
【図８】
2011008432.tif 000010
【図９】
2011008432.tif 000011
【図１０】
2011008432.tif 000012
【図１１】
2011008432.tif 000013
【図１２】
2011008432.tif 000014
【図１３】
2011008432.tif 000015