(57)【要約】【課題】一部のブートプログラムに異常が発生した場合においても、異常が発生していないブートプログラムを用いて確実に起動処理を実行することができるコンピュータ装置、アドレス変換装置及びプログラムを提供すること。【解決手段】本発明にかかるコンピュータ装置１０は、第１のブートプログラム用アドレス信号を出力する制御部１１と、複数のアドレスにブートプログラムを格納するメモリ１３と、第１のブートプログラム用アドレス信号をブートプログラムが格納されているメモリ１３のアドレスである第２のブートプログラム用アドレス信号に変換し、第２のブートプログラム用アドレス信号をメモリ１３へ出力するアドレス変換部１２と、メモリ１３から読み出された、複数のブートプログラムの誤りを検出し、誤りを修正したブートプログラムを制御部１１へ出力するプログラム読出し部１４と、を備える。【選択図】図１
2016029537.tif 000002
【特許請求の範囲】
【請求項１】
第１のブートプログラム用アドレス信号を出力する制御部と、
複数のアドレスにブートプログラムを格納するメモリと、
前記第１のブートプログラム用アドレス信号を前記ブートプログラムが格納されているメモリのアドレスである第２のブートプログラム用アドレス信号に変換し、前記第２のブートプログラム用アドレス信号を前記メモリへ出力するアドレス変換部と、
前記メモリから読み出された、複数の前記ブートプログラムの誤りを検出し、誤りを修正した前記ブートプログラムを前記制御部へ出力するプログラム読出し部と、を備えるコンピュータ装置。
【請求項２】
前記アドレス変換部は、
前記第２のブートプログラム用アドレス信号を、予め定められたタイミングに、前記ブートプログラムを格納しているアドレスに順次変換する、請求項１に記載のコンピュータ装置。
【請求項３】
前記プログラム読出し部は、
ＸＯＲ回路を用いて、複数の前記ブートプログラムの誤りを修正する、請求項１又は２に記載のコンピュータ装置。
【請求項４】
前記プログラム読出し部は、
前記メモリから読み出した複数の前記ブートプログラムのそれぞれを出力端子に設定し、出力端子に設定したそれぞれの前記ブートプログラムを前記ＸＯＲ回路へ出力する、シフトレジスタを有する、請求項３に記載のコンピュータ装置。
【請求項５】
前記シフトレジスタにおいて複数の前記ブートプログラムのそれぞれを前記出力端子に設定するタイミングを示すクロックを生成するクロック生成部をさらに備える、請求項４に記載のコンピュータ装置。
【請求項６】
制御部から出力された第１のブートプログラム用アドレス信号を、複数のブートプログラムを格納するメモリにおけるアドレスであって、前記ブートプログラムを格納する場所を示す第２のブートプログラム用アドレス信号に変換し、前記第２のブートプログラム用アドレス信号を前記メモリへ出力するアドレス変換部と、
前記メモリから読み出された、複数の前記ブートプログラムの誤りを検出し、誤りを修正した前記ブートプログラムを前記制御部へ出力するプログラム読出し部と、を備えるアドレス変換装置。
【請求項７】
前記アドレス変換部は、
前記第２のブートプログラム用アドレス信号を、予め定められたタイミングに、前記ブートプログラムを格納しているアドレスに順次変換する、請求項６に記載のアドレス変換装置。
【請求項８】
前記プログラム読出し部は、
ＸＯＲ回路を用いて、複数の前記ブートプログラムの誤りを修正する、請求項６又は７に記載のアドレス変換装置。
【請求項９】
前記プログラム読出し部は、
前記メモリから読み出した複数の前記ブートプログラムのそれぞれを出力端子に設定し、出力端子に設定したそれぞれの前記ブートプログラムを前記ＸＯＲ回路へ出力する、シフトレジスタを有する、請求項８に記載のアドレス変換装置。
【請求項１０】
制御部から出力された第１のブートプログラム用アドレス信号を、複数のブートプログラムを格納するメモリにおけるアドレスであって、前記ブートプログラムを格納する場所を示す第２のブートプログラム用アドレス信号に変換し、
前記第２のブートプログラム用アドレス信号を前記メモリへ出力し、
前記メモリから読み出された、複数の前記ブートプログラムの誤りを検出し、
誤りを修正した前記ブートプログラムを前記制御部へ出力するプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータ装置、アドレス変換装置及びプログラムに関し、例えばメモリからプログラムを読み出すコンピュータ装置、アドレス変換装置及びプログラムに関する。
【背景技術】
【０００２】
書き換え可能な不揮発性メモリは、データの書換えが可能であり、さらに無給電状態によらず長期間のデータ保存が可能である。そのため、書き換え可能な不揮発性メモリは、アプリケーションデータの保存用として、あるいは組み込み製品におけるプログラムの保存用として、今日では各分野において広く使われている。特にフラッシュメモリは、大容量品が製品化されている。
【０００３】
フラッシュメモリのうちＮＡＮＤ型フラッシュメモリ(以下ＮＡＮＤフラッシュと称す)は、デバイス内部の構造上、大容量化に向いている。しかし、ＮＡＮＤフラッシュは、データをリード時にリードディスターブと呼ばれる現象によって内部素子が劣化することが知られている。ＮＡＮＤフラッシュ内部は、ブロックという単位の集合として構成されており、正常な値が読み出せなくなったビットを含むブロックをバッドブロックとしてマーキングする。ＮＡＮＤフラッシュ内部において、マーキングされたブロックを以降の処理で使用しないようにする、といった劣化に対する対応が一般的に行われている。
【０００４】
一方、ＮＯＲ型フラッシュ(以下ＮＯＲフラッシュと称す)は、構造上前述のリードディスターブ現象による劣化がない。そのため、ＮＯＲフラッシュは、高信頼性が要求されるデータ保持用、例えばプログラム格納用として使われることが多い。この高信頼性に基づきＮＯＲフラッシュはＮＡＮＤフラッシュのようなバッドブロックというような考え方が存在しない。
【０００５】
ＮＯＲフラッシュの信頼度は高いものの、データ書き換え中に電源断が発生すると正しいデータが書き込まれていない状態となる。プログラムの書き換え中にこの事象が発生すると装置が正常動作しなくなってしまう。正常動作しなくなってしまうことを回避するために、ＮＯＲフラッシュは、フラッシュ内の別領域にプログラムの複製を格納することがある。これによって、ＮＯＲフラッシュは、チェックサム等による検証でオリジナルのプログラム及び複製プログラムの正常性を確認する。ＮＯＲフラッシュは、オリジナルのプログラムに異常があれば複製のプログラムによって装置が動くよう制御する。このようにして、ＮＯＲフラッシュにおいては、データ書き換え中の電源断による書き込み不良に対する対処をおこなっている。
【０００６】
一般的にプログラムは、ブートプログラムとシステムプログラムとに分けられる。また、システムプログラムは、ブートプログラム起動後に起動する。ＣＰＵは、起動するとブートプログラムを読み出す。さらに、ＣＰＵは、ブートプログラムの処理によって上述のようなチェックサム等によるシステムプログラムの正当性を確認し、正常なプログラムが動作するように制御している。すなわち前述の複製プログラムを持つことによるデータ書き換え中の電源断による書き込み不良対策は、システムプログラムに対して有効である。
【０００７】
ここで、ブートプログラムの複製プログラムを別のアドレスに格納することも考えられる。しかし、ＣＰＵが起動時にアクセスするアドレス(以降ブートアドレスと称す)は、決まっており、必ずそのアドレスからブートプログラムのリードをおこなう。ここでブートプログラムに異常があると、それ以降の処理ができず装置が起動しない状態に陥る。
【０００８】
一般的にブートプログラムは、ハードウェアの基本設定などをおこなう。そのため、ブートプログラムは、機能改善のための更新を必要としない。さらに、ブートプログラムは、データ書き換え中の電源断による書き込み不良という問題を誘発させないために、更新をせずに運用することが一般的である。ただし不揮発性メモリのデータ保持時間は、有限である。そのため、不揮発性メモリは、経年劣化によってデータ異常を発生する可能性がある。データ保持時間を延ばすためには一定時間ごとに不揮発性メモリ上のデータの書換えをおこなうことが半導体技術の標準化機関であるJEDEC Solid State Technology Associationでも推奨されている。しかし、書き換え中の電源断によるデータ異常の危険性があるため、不揮発性メモリ上のデータの書き換えを容易に実現することができなかった。
【０００９】
特許文献１には、不揮発性メモリ上にブートプログラムの複製を格納することが開示されている。具体的には、ブートプログラムが格納されているブート領域に異常が発生した場合、スイッチを手動で切り替えることによって、リカバリー領域に格納されている複製ブートプログラムを、ブート領域にコピーする。複製ブートプログラムをコピーすることによって、ブート領域を修復する。また、ＣＰＵから監視回路に対して一定期間内に正常に起動したことを通知するアクセス信号が通知されなかった場合に、監視回路は、ＣＰＵが正常に起動していないと判断する。この場合、監視回路は、自動的にリカバリー領域の複製ブートプログラムを、ブート領域にコピーするように制御する。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００９−１５１３８４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上述したように、特許文献１においては、ブート領域において異常が発生した場合、リカバリー領域に格納している複製ブートプログラムをブート領域にコピーする処理を行う。しかし、ブート領域における異常は、主にブート領域のデータ書き換え中の電源断等によって発生する。そのため、ブート領域に複製ブートプログラムをコピーする処理を行っている最中に電源断等の要因が発生した場合、ブート領域の異常は修復されない。そのため、ブート領域への複製ブートプログラムのコピー処理後であっても、ブート領域の正常性が保証されないという問題が発生する。
【００１２】
本発明の目的は、一部のブートプログラムに異常が発生した場合においても、異常が発生していないブートプログラムを用いて確実に起動処理を実行することができるコンピュータ装置、アドレス変換装置及びプログラムを提供することにある。
【課題を解決するための手段】
【００１３】
本発明の第１の態様にかかるコンピュータ装置は、第１のブートプログラム用アドレス信号を出力する制御部と、複数のアドレスにブートプログラムを格納するメモリと、前記第１のブートプログラム用アドレス信号を前記ブートプログラムが格納されているメモリのアドレスである第２のブートプログラム用アドレス信号に変換し、前記第２のブートプログラム用アドレス信号を前記メモリへ出力するアドレス変換部と、前記メモリから読み出された、複数の前記ブートプログラムの誤りを検出し、誤りを修正した前記ブートプログラムを前記制御部へ出力するプログラム読出し部と、を備えるものである。
【００１４】
本発明の第２の態様にかかるアドレス変換装置は、制御部から出力された第１のブートプログラム用アドレス信号を、複数のブートプログラムを格納するメモリにおけるアドレスであって、前記ブートプログラムを格納する場所を示す第２のブートプログラム用アドレス信号に変換し、前記第２のブートプログラム用アドレス信号を前記メモリへ出力するアドレス変換部と、前記メモリから読み出された、複数の前記ブートプログラムの誤りを検出し、誤りを修正した前記ブートプログラムを前記制御部へ出力するプログラム読出し部と、を備えるものである。
【００１５】
本発明の第３の態様にかかるプログラムは、制御部から出力された第１のブートプログラム用アドレス信号を、複数のブートプログラムを格納するメモリにおけるアドレスであって、前記ブートプログラムを格納する場所を示す第２のブートプログラム用アドレス信号に変換し、前記第２のブートプログラム用アドレス信号を前記メモリへ出力し、前記メモリから読み出された、複数の前記ブートプログラムの誤りを検出し、誤りを修正した前記ブートプログラムを前記制御部へ出力するものである。
【発明の効果】
【００１６】
本発明により、一部のブートプログラムに異常が発生した場合においても、異常が発生していないブートプログラムを用いて確実に起動処理を実行することができるコンピュータ装置、アドレス変換装置及びプログラムを提供することができる。
【図面の簡単な説明】
【００１７】
【図１】実施の形態１にかかるコンピュータ装置の構成図である。
【図２】実施の形態２にかかるコンピュータ装置の構成図である。
【図３】実施の形態２にかかる変換回路の構成図である。
【図４】実施の形態２にかかるフラッシュメモリにおけるプログラムの配置を示す図である。
【図５】実施の形態２にかかる信号のタイミングチャートを示す図である。
【発明を実施するための形態】
【００１８】
（実施の形態１）
以下、図面を参照して本発明の実施の形態について説明する。図１を用いて本発明の実施の形態１にかかるコンピュータ装置１０の構成例について説明する。コンピュータ装置１０は、制御部１１、アドレス変換部１２、メモリ１３及びプログラム読出部１４を有している。コンピュータ装置１０は、例えば、携帯電話端末もしくはスマートフォン端末等の移動通信装置であってもよく、パーソナルコンピュータ装置もしくはサーバ装置等であってもよい。
【００１９】
制御部１１は、例えば、ＣＰＵ等であってもよい。制御部１１は、メモリ１３に格納されているプログラムを実行することによって、様々な機能を動作させる。制御部１１は、ブートプログラム用アドレス信号をアドレス変換部１２へ出力する。一般的に、制御部１１は、ブートプログラムを読み出すために、１つのブートプログラム用アドレスを用いる。
【００２０】
メモリ１３は、複数のアドレスにブートプログラムを格納する。つまり、メモリ１３は、複数のブートプログラムを有している。それぞれのブートプログラムは、同一の内容である。メモリ１３は、例えば、ＲＯＭ（Read Only Memory）もしくはフラッシュメモリ等である。例えば、メモリ１３は、制御部１１が出力するブートプログラム用アドレス信号に設定されているブートプログラム用アドレスに、ブートプログラムを格納し、他のアドレスに、ブートプログラムの複製を格納してもよい。
【００２１】
アドレス変換部１２は、制御部１１から出力されたブートプログラム用アドレス信号を受け取る。アドレス変換部１２は、ブートプログラム用アドレス信号を、メモリ１３において、ブートプログラムが格納されているアドレスを設定したブートプログラム用アドレス信号に書き換える。ここで、制御部１１が出力するブートプログラム用アドレス信号をオリジナルブートアドレスとし、アドレス変換部１２によって変換された後の信号を、変換後ブートアドレスと称する。アドレス変換部１２は、変換後ブートアドレス信号をメモリ１３へ出力する。
【００２２】
メモリ１３は、変換後ブートアドレス信号に設定されているアドレスに格納されているブートプログラムをプログラム読出部１４へ出力する。プログラム読出部１４は、メモリ１３から出力された複数のブートプログラムの誤りを検出し、誤りを修正したブートプログラムを制御部１１へ出力する。
【００２３】
以上説明したように、本発明の実施の形態１にかかるコンピュータ装置１０は、制御部１１とメモリ１３との間にアドレス変換部１２を有している。アドレス変換部１２は、制御部１１からオリジナルアドレス信号を受け取ると、メモリ１３のブートプログラムが格納されている他のアドレス（変換後ブートアドレス）に変換することができる。
【００２４】
そのため、制御部１１が、アドレス変換部１２へオリジナルブート信号を送信することによって、プログラム読出部１４は、メモリ１３に格納されている複数のブートプログラムを読み出すことができる。そのため、プログラム読出部１４は、例えば、オリジナルブートアドレスに設定されたアドレスに格納されたブートプログラムに異常が発生していたとしても、他のアドレスに格納されたブートプログラムを読み出すことができる。プログラム読出部１４は、読み出した複数のブートプログラムのうち正しいブートプログラムを制御部１１へ出力する。制御部１１は、オリジナルブートアドレスに設定されたアドレスに格納されたブートプログラムに異常が発生していたとしても、異常が発生していない時と同様にブートプログラムを読み出すことができる。
【００２５】
（実施の形態２）
続いて、図２を用いて本発明の実施の形態２にかかるコンピュータ装置の構成例について説明する。図２のコンピュータ装置は、ＣＰＵ２０、フラッシュメモリ３０及び変換回路４０を有している。ＣＰＵ２０は、図１の制御部１１に相当する。フラッシュメモリ３０は、図１のメモリ１３に相当する。変換回路４０は、図１のアドレス変換部１２及びプログラム読出部１４に相当する。
【００２６】
ＣＰＵ２０は、変換回路４０を介してフラッシュメモリ３０へ、２０ビットのＡＤＤＲＥＳＳ[19:0]信号、ＣＳ（Chip Select）信号、ＲＤ（Read）信号及び８ビットのＤＡＴＡ[7:0]信号を出力する。ＣＰＵ２０は、ＷＲ（Write）信号を変換回路４０を介することなくフラッシュメモリ３０へ出力する。
【００２７】
ＡＤＤＲＥＳＳ[19:0]信号は、フラッシュメモリ３０において書き込みもしくは読み出しの対象となるデータが格納されているアドレスを示している。ＲＤ信号は、ＣＰＵ２０がフラッシュメモリ３０に格納されているデータを読み出す際に用いられる信号である。ＷＲ信号は、ＣＰＵ２０がフラッシュメモリ３０に格納されているデータを更新する場合、もしくは新たなデータを書き込む際に用いられる信号である。
【００２８】
ＣＳ信号は、ＣＰＵ２０が、アクセスするフラッシュメモリ等のデバイスを指定する際に用いられる信号である。ＣＰＵ２０は、フラッシュメモリ３０に対してデータの読み出しもしくは書き込みを行う場合、ＣＳ信号をフラッシュメモリ３０へ出力する。Ｄａｔａ[7:0]は、ＣＰＵ２０が、フラッシュメモリ３０から読み出す８ビットのデータである。ここでは、ＡＤＤＲＥＳＳ信号を２０ビット、ＤＡＴＡ信号を８ビットとしているが、使用するビット数については、デバイスの仕様に基づいて変更されてもよい。
【００２９】
続いて、図３を用いて本発明の実施の形態２にかかる変換回路４０の構成例について説明する。変換回路４０は、アドレス生成部４１、ＣＳ生成部４２、ＲＤ生成部４３、クロック生成部４４、セレクタ４５、セレクタ４６、インバーター４７、ＸＯＲ回路４８、シフトレジスタ４９、インバーター５０、ＸＯＲ回路５１、シフトレジスタ５２を有している。アドレス生成部４１は、図１のアドレス変換部１２に相当する。インバーター４７、ＸＯＲ回路４８、シフトレジスタ４９、インバーター５０、ＸＯＲ回路５１、シフトレジスタ５２は、図１のプログラム読出部１４に相当する。
【００３０】
アドレス生成部４１は、ＣＰＵ２０から出力されたADDRESS信号と、変換回路４０の外部から供給されたCLK（クロック）信号とを受け取る。ADDRESS信号は、オリジナルのブートプログラムが格納されているフラッシュメモリ３０のアドレスを示す信号である。アドレス生成部４１は、ADDRESS信号を、複製ブートプログラムを格納しているアドレスを示す信号へ変換する。アドレス生成部４１は、オリジナルのブートプログラムを格納しているアドレスを出力する場合、ADDRESS信号をそのまま出力してもよい。アドレス生成部４１は、CLK信号を用いて、予め定められたタイミングに、変換後のアドレスを示す信号を出力する。
【００３１】
ＣＳ生成部４２は、ＣＰＵ２０から出力されたCS信号と、CLK信号とを受け取る。CS信号は、例えば、フラッシュメモリ３０からデータを読み出すもしくはフラッシュメモリ３０へデータを書き込む際に用いられる信号である。ＣＳ生成部４２は、CLK信号を用いて、予め定められたタイミングに、変換後のCS信号を出力する。
【００３２】
ＲＤ生成部４３は、ＣＰＵ２０から出力されたRD信号と、CLK信号とを受け取る。RD信号は、フラッシュメモリ３０もしくは他のメモリからデータを読み出す際に用いられる信号である。例えば、RD信号は、フラッシュメモリ３０に格納されているブートプログラムを読み出すために用いられる。ＲＤ生成部４３は、CLK信号を用いて、予め定められたタイミングに、変換後のRD信号を出力する。
【００３３】
クロック生成部４４は、CLK信号と、RD信号とを受け取る。さらに、クロック生成部４４は、予め定められたタイミングに、シフトレジスタ４９及びインバーター５０を動作させる際に用いるSFT_CLK（シフトクロック）信号を出力する。
【００３４】
セレクタ４５は、ＣＰＵ２０から出力されたADDRESS信号と、アドレス生成部４１から出力された信号とのいずれかを選択し、選択した信号をF_ADDRESS信号としてフラッシュメモリ３０へ出力する。さらに、セレクタ４５は、ＣＰＵ２０から出力されたCS信号と、ＣＳ生成部４２から出力された変換後のCS信号とのいずれかを選択し、選択した信号をF_CS信号としてフラッシュメモリ３０へ出力する。さらに、セレクタ４５は、ＣＰＵ２０から出力されたRD信号と、ＲＤ生成部４３から出力された変換後の信号とのいずれかを選択し、選択した信号をF_RD信号としてフラッシュメモリ３０へ出力する。例えば、セレクタ４５は、SEL端子にLowレベルのRD信号が入力された場合に、アドレス生成部４１、ＣＳ生成部４２及びＲＤ生成部４３から出力されたそれぞれの信号を選択する。
【００３５】
シフトレジスタ４９は、フラッシュメモリ３０から出力されたF_DATA信号をDIN端子にて受け取る。F_DATA信号は、例えば、フラッシュメモリ３０から出力されたブートプログラムを含む信号である。さらに、シフトレジスタ４９は、CLKIN端子に入力されたSFT_CLK信号に従って、DIN端子において受け取ったF_DATAをDATA_a端子、DATA_b端子、DATA_c端子の順にシフトさせる。
【００３６】
シフトレジスタ４９におけるDATA_a端子、DATA_b端子及びDATA_c端子は、それぞれシフトされたF_DATAをＸＯＲ回路４８へ出力する。ＸＯＲ回路４８は、DATA_a端子、DATA_b端子及びDATA_c端子から出力されたデータを用いて排他的論理和の演算を実行する。ＸＯＲ回路４８は、演算の実行結果をインバーター４７へ出力する。インバーター４７は、ＸＯＲ回路４８から出力された排他的論理和演算の実行結果に関するデータを反転してセレクタ４６へ出力する。インバーター５０、ＸＯＲ回路５１及びシフトレジスタ５２も、インバーター４７、ＸＯＲ回路４８及びシフトレジスタ４９と同様の動作を実行する。また、変換回路４０は、任意の数のインバーター４７、ＸＯＲ回路４８及びシフトレジスタ４９を有してもよい。
【００３７】
セレクタ４６は、インバーター４７から出力されたデータもしくはフラッシュメモリ３０から出力されたF_DATAのいずれかを選択する。セレクタ４６は、選択したデータをＣＰＵ２０へ出力する。さらに、セレクタ４６は、インバーター５０から出力されたデータもしくはフラッシュメモリ３０から出力されたF_DATAのいずれかを選択する。セレクタ４６は、選択したデータをＣＰＵ２０へ出力する。例えば、セレクタ４６は、SEL端子にLowレベルのRD信号が入力された場合に、インバーター４７及びインバーター５０から出力されたそれぞれの信号を選択する。
【００３８】
続いて、図４を用いてフラッシュメモリ３０におけるプログラムの配置について説明する。ここでは、フラッシュメモリ３０におけるアドレスを２０ビットとしているため、フラッシュメモリ３０のアドレスは、0x00000〜0xFFFFFとなる。ここで、ＣＰＵ２０が起動直後にアクセスするアドレスは、0x00000番地とする。また、0x01000番地あるいは0x02000に配置されたブートプログラムは、0x00000番地に配置されたブートプログラムの複製である。複製のブートプログラムは、ＣＰＵ２０によってアクセスされる前に事前に書き込まれているとする。
【００３９】
続いて、図５を用いて各信号のタイミングチャートについて説明する。ＣＰＵ２０は、起動直後に、フラッシュメモリ３０に格納されているブートプログラムを読み出すために、ブートアドレス0x00000へのリードアクセスを行う。具体的には、ＣＰＵ２０は、ADDRESS=0x00000、CS=Low、RD=Lowとする信号を出力する。
【００４０】
本図においては、変換回路４０は、RD=Lowを受け取る前に、ADDRESS=0x00000、及び、CS=Lowとする信号を受け取る。CK0の前においては、変換回路４０は、Low信号に設定されたRD信号を受け取っていない。そのため、セレクタ４５は、入力されたADRESS信号及びCS信号をそのまま出力する。そのため、F_ADDRESS信号は、ADRESS信号と同じ値であり、F_CS信号は、CS信号と同じ値である。
【００４１】
次に、CK0の立ち上がりエッジにおいて、ＲＤ生成部４３は、RD=Lowを検出する。さらに、ＲＤ生成部４３は、CK1の立ち上がりエッジにおいて、CK0において検出したLowレベルの信号を出力する。また、セレクタ４５は、RD=Lowを受け取ると、アドレス生成部４１、ＣＳ生成部４２及びＲＤ生成部４３から出力された信号をフラッシュメモリ３０へ出力する。アドレス生成部４１は、ADDRESS信号をそのままセレクタ４５へ出力する。さらに、ＣＳ生成部４２も、CS信号をそのままセレクタ４５へ出力する。そのため、F_ADDRESS信号及びF_CS信号は、RD=Lowが入力される前と同様の値の信号である。ＲＤ生成部４３は、CK1の立ち上がりエッジにおいて、CK0において検出したRD=Lowを出力する。そのため、CK1の立ち上がりエッジにおいて、F_RD信号として、Lowレベルの信号を出力する。
【００４２】
フラッシュメモリ３０は、Lowレベルに設定されたF_RD信号を受け取ることによって、F_ADDRESS信号において設定されたアドレスに格納しているブートプログラムをF_DATAとして変換回路４０へ出力する。そのため、シフトレジスタ４９は、CK2の立ち上がりエッジに、F_DATA=<X>を受け取る。<X>は、0x00000に格納されているブートプログラムを示している。
【００４３】
次に、シフトレジスタ４９は、CK3においてSFT_CLKがHighレベルに変化すると、CK3の立ち上がりエッジにおいて、DATA_a端子から、<X>を出力する。
【００４４】
次に、アドレス生成部４１は、CK4において、0x00000を0x01000に変換して出力する。アドレス生成部４１が、出力するアドレスを変換するタイミングは、予め定められていてもよい。例えば、予め定められたタイミングは、0x00000を所定の期間出力したら、次に0x01000を出力する等としてもよい。アドレス生成部４１は、予め定められたタイミングに、出力するアドレスを変換する。
【００４５】
さらに、ＲＤ生成部４３は、CK4において、Highレベルに設定した信号を出力する。ＲＤ生成部４３が、出力信号をLowレベルからHighレベルに変換するタイミングは、例えば、アドレス生成部４１において、出力するアドレスを変換するタイミングと同じタイミングになるように予め定められていてもよい。ＲＤ生成部４３が、出力信号をLowレベルからHighレベルに変換することによって、フラッシュメモリ３０は、F_RD信号としてHighレベルの信号を受け取る。そのため、フラッシュメモリ３０は、0x00000に格納しているブートプログラムであるF_DATA=<X>の出力を停止する。
【００４６】
次に、CK5において、ＲＤ生成部４３は、Lowレベルに設定した信号を出力する。例えば、ＲＤ生成部４３は、出力信号をHighレベルに変換した次のクロックサイクルに再び出力信号をLowレベルに変換するとしてもよく、変換するタイミングとしてその他のタイミングを定めてもよい。これによって、フラッシュメモリ３０は、Lowレベルに設定されたF_RD信号を受け取る。さらに、フラッシュメモリ３０は、F_ADDRESS信号において設定された0x01000に格納しているブートプログラムをF_DATAとして変換回路４０へ出力する。そのため、シフトレジスタ４９は、CK6のタイミングに、F_DATA=<Y>を受け取る。<Y>は、0x01000に格納されているブートプログラムを示している。
【００４７】
次に、シフトレジスタ４９は、CK7においてSFT_CLKがHighレベルに変化すると、CK7の立ち上がりエッジにおいて、DATA_a端子から<Y>を出力し、DATA_b端子から<X>を出力する。
【００４８】
次に、アドレス生成部４１は、CK8において、0x01000を0x02000に変換して出力する。アドレス生成部４１が、出力するアドレスを変換するタイミングは、予め定められていてもよい。
【００４９】
さらに、ＲＤ生成部４３は、CK8において、Highレベルに設定した信号を出力する。ＲＤ生成部４３が、出力信号をLowレベルからHighレベルに変換することによって、フラッシュメモリ３０は、F_RD信号としてHighレベルの信号を受け取る。そのため、フラッシュメモリ３０は、0x01000に格納しているブートプログラムであるF_DATA=<Y>の出力を停止する。
【００５０】
次に、CK9において、ＲＤ生成部４３は、Lowレベルに設定した信号を出力する。これによって、フラッシュメモリ３０は、Lowレベルに設定されたF_RD信号を受け取る。さらに、フラッシュメモリ３０は、F_ADDRESS信号において設定された0x02000に格納しているブートプログラムをF_DATAとして変換回路４０へ出力する。そのため、シフトレジスタ４９は、CK10のタイミングに、F_DATA=<Z>を受け取る。<Z>は、0x02000に格納されているブートプログラムを示している。
【００５１】
次に、シフトレジスタ４９は、CK11においてSFT_CLKがHighレベルに変化すると、CK11の立ち上がりエッジにおいて、DATA_a端子から<Z>を出力し、DATA_b端子から<Y>を出力し、DATA_c端子から<X>を出力する。クロック生成部４４は、SFT_CLKを変化させるタイミングを、予め定めておいてもよい。例えば、クロック生成部４４は、F_RDがLowレベルに設定され、F_DATAにブートプログラムが設定された後に、SFT_CLKをHighレベルに設定するように定める。
【００５２】
ＸＯＲ回路４８は、CK11においてシフトレジスタ４９から出力された３つの信号を受け取ると、ＸＯＲ演算を行う。また、ＣＰＵ２０は、インバーター４７から出力された信号をDATAとして受け取る。
【００５３】
ここで、ＣＰＵ２０が受け取るDATAについて詳細に説明する。フラッシュメモリ３０が出力するブートプログラム<X>、ブートプログラム<Y>及びブートプログラム<Z>は、同一のプログラムである。しかし、ブートプログラムの書き換え中の電源断によるデータ異常を想定した場合、電源断時にアクセスしていたプログラムのみが異常となる。つまり、アドレス0x00000、0x01000及び0x02000のうち１箇所のみ誤った値の可能性がある。言い換えると、DATA_a端子、DATA_b端子及びDATA_c端子が出力する３ビットのデータのうち、１ビットのみが誤った値の可能性がある。
【００５４】
ＸＯＲ回路４８は、誤ったビットを無視して、正常に読み出すことができた値をDATAとして出力するために用いられる。
【００５５】
例えば本来１のビットが誤って０に変換されてしまったとすると、ＸＯＲ回路４８における入力３ビットは（１，１，０）であり、ＸＯＲ回路４８における演算の結果は０となる。また本来０のビットが誤って０に変換されてしまったとすると、ＸＯＲ回路４８における入力３ビットは（０，０，１）であり、ＸＯＲ回路４８における演算の結果は１となる。インバーター４７によって上記それぞれの反転値がDATAとして、ＣＰＵ２０に出力される。そのため、結果として（１，１，０）の結果は１となり、（０，０，１）の結果は０となる。これによって、ＣＰＵ２０へ、正しい値が出力される。
【００５６】
以降ＣＰＵ２０は順次アドレスを出力してフラッシュメモリ３０のデータを読むが、上記説明と同様に１回のＣＰＵ２０からのリードを３回のリードに変換してプログラムのリードを続ける。
【００５７】
以上説明したように、本発明の実施の形態２にかかるコンピュータ装置を用いることによって、次の効果を得ることができる。
【００５８】
一般的な回路構成においてブートプログラムの書き換えをおこなった場合、万一の電源断などによってブートプログラムが正常に起動しなくなるリスクがあった。そのため、ブートプログラムの更新を行うことができなかった。これに対して、本発明を利用することによって、ＣＰＵ２０は、フラッシュメモリ３０に格納された複数のブートプログラムを読み出すことができる。そのため、一部のブートプログラムに誤りが発生した場合においても、他のブートプログラムを用いることによって、正常にブートプログラムを読み出すことができる。そのため、ブートプログラムのアップグレードを行うことができるようになる。
【００５９】
さらに、一般的に、不揮発メモリのデータ保持時間はデータ書き込みからの時間で規定される。本発明でブートプログラムを消去して書き直すことが可能になるため、不揮発メモリのデータ保持時間を延ばすことができる。
【００６０】
上述の実施の形態では、本発明をハードウェアの構成として説明したが、本発明は、これに限定されるものではない。本発明は、変換回路において実行される処理を、ＣＰＵ（Central Processing Unit）にコンピュータプログラムを実行させることにより実現することも可能である。
【００６１】
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００６２】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、ＳｏＣ（System ON Chip）内のメモリコントローラ内に、予め、変換回路４０を内蔵しておいてもよい。
【符号の説明】
【００６３】
１０  コンピュータ装置
１１  制御部
１２  アドレス変換部
１３  メモリ
１４  プログラム読出部
２０  ＣＰＵ
３０  フラッシュメモリ
４０  変換回路
４１  アドレス生成部
４２  ＣＳ生成部
４３  ＲＤ生成部
４４  クロック生成部
４５  セレクタ
４６  セレクタ
４７  インバーター
４８  ＸＯＲ回路
４９  シフトレジスタ
５０  インバーター
５１  ＸＯＲ回路
５２  シフトレジスタ
【図１】
2016029537.tif 000003
【図２】
2016029537.tif 000004
【図３】
2016029537.tif 000005
【図４】
2016029537.tif 000006
【図５】
2016029537.tif 000007