(57)【要約】【課題】半導体集積回路本来のデータ処理を妨げたり、半導体集積回路内のＣＰＵに高い処理負荷を掛けたりすることなく、外部の不揮発性メモリから半導体集積回路の内部メモリへダウンロードしたデータのチェックを常時行うことを可能にする。【解決手段】外部メモリ２からダウンロードされたプログラムデータを記憶するＲＡＭ１２０と、ＲＡＭ１２０に記憶されたプログラムデータにしたがって処理を実行するＣＰＵ１００とを内蔵する半導体集積回路１Ａに、ＲＡＭ１２０に記憶されたプログラムデータの正当性のチェックを行うチェック演算器１３０と、チェック対象とプログラムデータをＲＡＭ１２０から周期的に読み出してチェック演算器１３０にＤＭＡ転送するＤＭＡコントローラ１６０とを実装する。【選択図】図１
2014071543.tif 000002
【特許請求の範囲】
【請求項１】
外部メモリからダウンロードされるデータを記憶するメモリと、
前記メモリに記憶されたデータにしたがって処理を実行するプロセッサと、
前記メモリに記憶されたデータを読み出して正当性をチェックする処理を繰り返し実行するチェック回路と、
を有することを特徴とする半導体集積回路。
【請求項２】
前記チェック回路は、前記メモリに記憶されたデータのうち、チェック対象として指定された１または複数のデータを対象として正当性をチェックする処理を繰り返し実行することを特徴とする請求項１に記載の半導体集積回路。
【請求項３】
前記チェック回路は、前記プロセッサが実行中の処理に応じて前記チェック対象のデータを切り替えることを特徴とする請求項２に記載の半導体集積回路。
【請求項４】
前記メモリからのデータの読み出しを第１の周期で繰り返し実行する第１の動作モードと、前記第１の周期よりも長い第２の周期で前記メモリからのデータの読み出しを繰り返し実行する第２の動作モードの少なくとも２つの動作モードを有し、前記チェック回路は指定された動作モードで動作することを特徴とする請求項１〜３の何れか１項に記載の半導体集積回路。
【請求項５】
前記チェック回路は、前記メモリにアクセスするためのバスにバスマスタとして接続されることを特徴とする請求項１〜４の何れか１項に記載の半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、外部メモリから内部のメモリへデータをダウンロードして処理する半導体集積回路に関する。
【背景技術】
【０００２】
ＣＰＵを搭載するシステムＬＳＩなどの半導体集積回路には、ＣＰＵに実行させるプログラムデータ（プログラムの実行形式コード）の記憶された不揮発性メモリが外部に設けられているものと、当該不揮発性メモリを内蔵したものの２種類がある。前者の半導体集積回路では、外部の不揮発性メモリに記憶されたプログラムデータが内蔵ＲＡＭ等の内部メモリへダウンロードされ、ＣＰＵは内部メモリにダウンロードされたプログラムデータにしたがって各種処理を実行する。
【０００３】
外部の不揮発性メモリから内部メモリへプログラムデータをダウンロードする構成の半導体集積回路では、静電気等の影響によってビット誤り等の生じた誤ったプログラムデータが内部メモリにダウンロードされることがある。誤ったプログラムデータが内部メモリにダウンロードされると、当該誤ったプログラムデータにしたがってＣＰＵが誤動作する虞がある。そこで、この種の半導体集積回路では、例えばブート時の初期化の際などの予め定められたタイミングで、内部メモリへダウンロードしたプログラムデータに誤りがないこと（正当性、或いは完全性と呼ばれる。本願では「正当性」という用語を用いる）のチェックが行われることが多い（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−２１０２７８号公報
【特許文献２】特開２０１０−２８２２９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
半導体集積回路の組み込み先がパチンコ台などの遊技機である場合、遊技中のパチンコ玉同士の衝突或いはパチンコ玉と釘の衝突によりノイズが多発し、正常に内部メモリへダウンロードされたプログラムデータに事後的に誤りが生じる場合がある。このため、遊技機における場合のようにノイズが多発する環境下では、内部メモリにダウンロードしたプログラムデータの正当性のチェックを常時行うようにすることが好ましい。しかし、従来、この種のチェックはＣＰＵのソフトウェア処理により実現されており、正当性のチェックを常時行うようにすると、ＣＰＵにかかる処理負荷が高くなり過ぎて半導体集積回路の性能に悪影響を及ぼしかねない。また、ＣＰＵのソフトウェア処理による正当性のチェックでは、ＣＰＵの誤動作が発生した場合にはチェックの信頼性そのものに疑問が生じる。
【０００６】
一方、プログラムデータを記憶した不揮発性メモリを内蔵した半導体集積回路では、これらの問題が生じることはない。このため、例えば車載システムのように高い信頼性を要求されるシステムでは、この種の半導体集積回路が採用される傾向があった。しかし、この種の半導体集積回路には、不揮発性メモリを内蔵させることに起因する問題、具体的には、不揮発性メモリ混在のプロセスはコストが高く、動作速度が遅いといった問題や、不揮発性メモリのプロセスに他の回路も縛られるため相対的に性能が低く、回路密度の低い実装となるといった問題、がある。
【０００７】
本発明は上記課題に鑑みて為されたものであり、半導体集積回路本来のデータ処理を妨げたり、半導体集積回路内のＣＰＵに高い処理負荷を掛けたりすることなく、外部メモリから内部メモリへダウンロードしたデータの正当性のチェックを常時行うことを可能にする技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために本発明は、外部メモリからダウンロードされるデータを記憶するメモリと、前記メモリに記憶されたデータにしたがって処理を実行するプロセッサと、前記メモリに記憶されたデータを読み出して正当性をチェックする処理を繰り返し実行するチェック回路と、を有することを特徴とする半導体集積回路、を提供する。本発明の半導体集積回路では、外部メモリから当該半導体集積回路内のメモリへダウンロードされたデータの正当性のチェックを行うチェック回路がプロセッサとは別個のハードウェアとして実装されている。このため、上記正当性のチェックを周期的に繰り返し実行したとしても、プロセッサに余分な処理負荷がかかることはなく、半導体集積回路本来のデータ処理が上記正当性のチェックによって妨げられることはない。なお、メモリからのチェック対象のデータの読み出しおよびチェック回路への転送については、ＤＭＡ（Direct Memory Access）コントローラを用い、プロセッサがメモリへアクセスする際の帯域を圧迫しない程度にＤＭＡアクセス周期および一周期当たりのデータ転送量を調整すれば良い。
【０００９】
特許文献２には、外部メモリ（特許文献２では、シリアルフラッシュメモリ１１）からシステムＬＳＩ内の内部メモリ（特許文献２では、ＳＲＡＭ２０）へダウンロードしたプログラムデータのチェックをＣＰＵ５０とは別個のデータチェック回路５２に実行させる発明が記載されている。しかし、特許文献２に記載の発明ではＳＲＡＭ２０からのチェック対象のプログラムデータの読み出しおよびチェックの実行はＣＰＵ５０からデータチェック回路５２への指示を契機として実行され（特許文献２：段落００１７）、ＣＰＵ５０はチェック対象のデータの読み出しおよびチェックの実行タイミングの制御に関与している。したがって、特許文献２に記載の発明は本願発明と異なる技術である。
【００１０】
より好ましい態様においては、前記チェック回路は、前記メモリに記憶されたデータのうち、チェック対象として指定された１または複数のデータを対象として前記正当性をチェックする処理を繰り返し実行することを特徴とする。一般に、内部メモリに記憶されている全てのデータの正当性をチェックすることは必ずしも必要ではなく、このような態様によれば正当性のチェックを要するデータのみを効率的にチェックすることが可能になる。また、プロセッサの実行中の処理においてアクセスされないデータについては当該処理の実行中は正当性のチェックを行う必要はないのであるから、プロセッサに実行させる処理毎にチェック対象とするデータを定めておき、実行中の処理に対してチェック対象として定められたデータについてのみ正当性をチェックする（すなわち、プロセッサの実行中の処理に応じてチェック対象を切り替える）ようにしても良い。このような態様によっても、チェックを要するデータのみを効率的にチェックすることが可能になる。
【００１１】
さらに別の好ましい態様においては、正当性のチェックを第１の周期で繰り返し実行する第１の動作モードと、第１の周期よりも長い第２の周期で正当性のチェックを繰り返し実行する第２の動作モードの少なくとも２つの動作モードを有し、前記チェック回路は指定された動作モードで動作することを特徴とする。例えば、ブート直後は第１の動作モードで動作させ、ブートから所定時間が経過して動作が安定した以降は、第２の動作モードで動作させる（すなわち、ブートからの経過時間に応じて動作モードを切り替えさせる）のである。
【図面の簡単な説明】
【００１２】
【図１】本発明の第１実施形態の半導体集積回路１Ａの構成例を示すブロック図である。
【図２】同半導体集積回路１Ａにおけるチェック処理の流れを示すフローチャートである。
【図３】同半導体集積回路１Ａの動作を説明するための図である。
【図４】本発明の第２実施形態の半導体集積回路１Ｂにおけるチェック処理の流れを示すフローチャートである。
【図５】同半導体集積回路１Ｂの動作を説明するため図である。
【図６】変形例（１）の半導体集積回路１Ｃの構成例を示すブロック図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照しつつ本発明の実施形態を説明する。
（Ａ：第１実施形態）
図１は、本発明の第１実施形態の半導体集積回路１Ａの構成例を示すブロック図である。この半導体集積回路１Ａは、ＣＰＵ１００を内蔵したシステムＬＳＩである。図１に示すように、半導体集積回路１Ａは、ＣＰＵ１００の他に、外部メモリインタフェース１１０、ＲＡＭ（Random Access Memory）１２０、チェック演算器１３０、リセット制御部１４０、割り込み制御部１５０、ＤＭＡコントローラ１６０、およびこれら構成要素間のデータ授受を仲介するバス１７０を含んでいる。
【００１４】
図１では、半導体集積回路１Ａの機能の理解を容易にするため、同半導体集積回路１Ａに接続された外部メモリ２が同半導体集積回路１Ａとともに図示されている。外部メモリ２は、例えばフラッシュメモリなどの不揮発性メモリであり、ＣＰＵ１００に各種処理を実行させるためのプログラムデータを記憶している。図１に示す半導体集積回路１Ａでは、外部メモリ２に記憶されたプログラムデータを内部メモリ（本実施形態では、ＲＡＭ１２０）へダウンロードし、当該ダウンロードしたプログラムデータにしたがってＣＰＵ１００を作動させることで当該半導体集積回路１Ａ本来の機能が実現される。図１に示すように外部メモリ２は外部メモリインタフェース１１０に接続されている。外部メモリ２からＲＡＭ１２０へのプログラムデータのダウンロードは、ＣＰＵ１００による制御の下、外部メモリインタフェース１１０を介して行われる。
【００１５】
チェック演算器１３０は、ＲＡＭ１２０にダウンロードされたプログラムデータにビット誤り等の誤りが発生していないかを検証するためのチェック演算（すなわち、正当性をチェックするためのチェック演算）を行う回路である。チェック演算器１３０に実行させるチェック演算の一例としては、チェックサムやＣＲＣ、或いはハッシュの算出演算が挙げられる。これら各種のチェック演算の何れを採用するのかについては半導体集積回路１Ａに対して要求される信頼性との関係で決めれば良い。例えば、要求される信頼性の程度がさほど高くない場合には、チェックサムの算出演算を採用し、高い信頼性を要求される場合にはハッシュの算出演算を採用する、といった具合である。本実施形態では、チェック演算器１３０に実行させるチェック演算としてチェックサムの算出演算が採用されている。
【００１６】
チェック演算器１３０は、チェック対象のプログラムデータのチェックサムを算出し、当該プログラムデータについての期待値（チェック対象のプログラムデータに誤りがない場合に算出されるチェックサムの値）と比較する。なお、期待値についてはプログラムデータと対にして外部メモリ２に予め格納しておき、外部メモリ２からのプログラムデータのダウンロードの際にそのプログラムデータに対応する期待値をダウンロードしてチェック演算器１３０にセットする処理をＣＰＵ１００に実行させるようにすれば良い。チェック演算器１３０は、ＲＡＭ１２０から読み出したプログラムデータから算出したチェックサムと上記期待値とが異なる場合には、誤りの発生を通知する誤り通知信号をリセット制御部１４０および割り込み制御部１５０に与える。従来、このようなチェック演算はＣＰＵ１００にチェック演算用のプログラムを実行させることで実現されることが多かったが、このようなチェック演算を実行するチェック演算器１３０をＣＰＵ１００とは別個のハードウェアとして実装したことに本実施形態の特徴の１つががある。また、詳細については後述するが、本実施形態では、ＲＡＭ１２０からのチェック対象のプログラムデータの読み出しはＣＰＵ１００を介さずにＤＭＡコントローラ１６０によって行われる。
【００１７】
リセット制御部１４０は、誤り通知信号を受け取ったことを契機として半導体集積回路１Ａのリセットを行う回路であり、割り込み制御部１５０は誤り通知信号を受け取ったことを契機としてＣＰＵ１００に割り込み指令を与える回路である。つまり、リセット制御部１４０および割り込み制御部１５０は、外部メモリ２からＲＡＭ１２０へダウンロードしたプログラムデータに誤りが発生した場合であっても、その誤りに起因する誤動作が生じないようにするためのものである。なお、プログラムデータの誤りを検出した場合のエラー処理としては、上述した割り込み制御やシステムリセットの他に、フラグ表示やビープ音出力などが考えられる。また、システム全体のリセットを行うのではなく、誤りの発見されたプログラムデータにより実現される機能のみのリセット（初期化および当該プログラムデータの再ダウンロード）を行う態様であっても良く、また、いわゆるウオッチドッグタイマ処理であっても良い。
【００１８】
ＤＭＡコントローラ１６０は、チェック対象のプログラムデータをＤ（Ｄは任意の自然数）バイトなどの所定データサイズ分ずつＲＡＭ１２０から読み出してチェック演算器１３０へＤＭＡ転送する処理を周期的に実行する回路である。ＤＭＡコントローラ１６０は、ＲＡＭ１２０からチェック演算器１３０へのチェック対象のプログラムデータの転送を行う際にバス１７０の使用権を調停するバスマスタとして機能し、ＣＰＵ１００を介することなくＲＡＭ１２０からチェック演算器１３０へのチェック対象のプログラムデータの転送を実現する。このＤＭＡコントローラ１６０は、チェック演算器１３０とともに、ＲＡＭ１２０に記憶されたデータを読み出してチェックする処理を繰り返し実行するチェック回路を形成する。
【００１９】
ＤＭＡコントローラ１６０による１回の読み出し処理における読み出しデータのデータサイズや読み出し周期の長さについては、ＣＰＵ１００によるＲＡＭ１２０へのアクセスの妨げとならない範囲で適宜定めるようにすれば良い。本実施形態では、ＣＰＵ１００は、チェック対象のプログラムデータの指定（ＲＡＭ１２０において当該プログラムデータの記憶されている記憶領域の先頭アドレスと最終アドレスの指定、若しくは同先頭アドレスと当該記憶領域のデータ量の指定）やＤＭＡ転送の実行周期（バスリクエストの発生周期）の指定を行うものの、チェック対象のプログラムデータのＲＡＭ１２０からの読み出しおよびチェック演算器１３０への転送には関与しない。このため、本実施形態では、外部メモリ２からＲＡＭ１２０へダウンロードしたプログラムデータのチェックを一定周期で繰り返し行っても、ＣＰＵ１００に余分な処理負荷がかかることはない。
以上が半導体集積回路１Ａの構成である。
【００２０】
次いで、図２を参照しつつ、本実施形態の半導体集積回路１Ａの動作を説明する。図２は、半導体集積回路１Ａにおけるチェック処理の流れを示すフローチャートである。図２に示すように、本実施形態のチェック処理には、ステップＳＡ１００〜ステップＳＡ１３０の処理、およびステップＳＢ１００〜ステップＳＢ１７０の処理が含まれている。本実施形態のチェック処理を構成する各処理のうち、ステップＳＡ１００〜ステップＳＡ１３０の処理はＣＰＵ１００にて実行される処理であり、ステップＳＢ１００〜ステップＳＢ１７０の各処理はチェック回路（すなわち、チェック演算器１３０およびＤＭＡコントローラ１６０）にて実行される処理である。
【００２１】
半導体集積回路１Ａのリセットが解除され、半導体集積回路１Ａのシステムが起動されると、ＣＰＵ１００は内蔵ＲＯＭ（図示略）等からブートローダを読み出して実行し（ステップＳＡ１００）、このブートローダにしたがって外部メモリ２からＲＡＭ１２０へのプログラムデータのダウンロードを実行する（ステップＳＡ１１０）。次いで、ＣＰＵ１００は、ＲＡＭ１２０にてチェック対象のプログラムデータを記憶した記憶領域（以下、チェック領域）の先頭アドレスおよび最終アドレス若しくはチェック領域のデータ量、ＤＭＡコントローラ１６０によるデータの読み出し周期を示す値、および期待値をチェック回路に与え、チェック回路の初期化を行う（ステップＳＡ１２０）。そして、ＣＰＵ１００は、チェック回路の初期化を完了すると、チェック回路に対して動作開始を指示する（ステップＳＡ１３０）。以降、ＣＰＵ１００はＲＡＭ１２０にダウンロードしたプログラムデータにしたがって半導体集積回路１Ａ本来の機能を実現する。
【００２２】
ＣＰＵ１００から動作開始の指示を受け取ったことを契機として、チェック回路では、ＲＡＭ１２０からのデータの読み出し位置を示すアドレスレジスタ（図１では図示略）にチェック領域の先頭アドレスがセットされ（ステップＳＢ１００）、チェックサムの算出に用いるチェックサムレジスタ（図１では図示略）が初期化（ゼロクリア）される（ステップＳＢ１１０）。次いで、チェック回路は、アドレスレジスタに格納されているアドレスから所定データサイズ分のデータを読み出してチェックサムを算出する処理（ＳＢ１２０）を実行する。より詳細に説明すると、このステップＳＢ１２０の処理では、ＤＭＡコントローラ１６０は、アドレスレジスタの示すアドレスから所定データサイズ分のデータを読み出してチェック演算器１３０にＤＭＡ転送する。一方、チェック演算器１３０はＤＭＡコントローラ１６０から受け取ったデータを対象としてチェックサムを算出し、その時点のチェックサムレジスタの格納内容に加算する。
【００２３】
ステップＳＢ１２０に後続するステップＳＢ１３０では、ＤＭＡコントローラ１６０は、チェック領域のデータを全て読み出したか否かを判定する。具体的には、ＤＭＡコントローラ１６０は、アドレスレジスタに記憶されているアドレスにステップＳＢ１２０にてＲＡＭ１２０から読み出したデータサイズの値を加算した値がチェック対象の記憶領域の最終アドレスに達したかどうかを判定し、達した場合は、チェック対象のデータを全てチェック演算器１３０に転送したと判定する。ステップＳＢ１３０の判定結果が“Ｙｅｓ”である場合には、チェック回路ではステップＳＢ１６０以降の処理が実行され、逆に、ステップＳＢ１３０の判定結果が“Ｎｏ”である場合には、チェック回路ではステップＳＢ１４０以降の処理が実行される。
【００２４】
ステップＳＢ１３０の判定結果が“Ｎｏ”である場合に実行されるステップＳＢ１４０では、図示せぬタイマによる計時が開始され、データ読み出し周期分の時間が計時されるまで（ステップＳＢ１４０：Ｙｅｓ）、当該ステップＳＢ１４０の処理が繰り返し実行される。データ読み出し周期分の時間が計時され、当該周期が満了すると、ＤＭＡコントローラ１６０は、アドレスレジスタに格納されているアドレスに上記所定データサイズを加算することでアドレスレジスタの格納内容を更新し（ステップＳＢ１５０）、ステップＳＢ１２０以降の処理を繰り返し実行する。
【００２５】
これに対して、ステップＳＢ１３０の判定結果が“Ｙｅｓ”である場合に実行されるステップＳＢ１６０では、チェック演算器１３０によって、チェックサムレジスタに記憶されているチェックサムが期待値と一致するか否かの判定が行われる。そして、ステップＳＢ１６０の判定結果が“Ｙｅｓ”である場合（すなわち、チェックサムと期待値が一致する場合）には、ステップＳＢ１００以降の処理が再度実行される。一方、ステップＳＢ１６０の判定結果が“Ｎｏ”である場合には、誤り通知信号をリセット制御部１４０および割り込み制御部１５０に与えるエラー処理がチェック演算器１３０により実行され（ステップＳＢ１７０）、その後、ステップＳＢ１００以降の処理が再度実行される。
【００２６】
例えば、一回のデータ読み出しのデータサイズがＤバイトである一方、チェック対象のプログラムデータのデータサイズがＡ（Ａは２以上の自然数）×Ｄバイトであり、ＲＡＭ１２０においてアドレスａｄｄ０を先頭アドレスとするチェック領域０に当該プログラムデータが格納されているとする。この場合、チェック回路は、ＣＰＵ１００から動作開始を指示されると、チェック領域０の先頭アドレスａｄｄ０をアドレスレジスタに設定し（ステップＳＢ１００）、ステップＳＢ１１０以降の処理を実行する。チェック領域０に格納されているデータはデータ読み出し周期Ｔ毎にＤバイトずつ読み出され、Ａ回目の読み出し（図３における「最後」の読み出し）の際にステップＳＢ１３０の判定結果は“Ｙｅｓ”となってステップＳＢ１６０以降の処理が実行される。そして、ステップＳＢ１６０の判定結果が“Ｙｅｓ”であれば即座にステップＳＢ１００以降の処理が再度実行され、ステップＳＢ１６０の判定結果が“Ｎｏ”であればエラー処理（ステップＳＢ１７０）を実行した後にステップＳＢ１００以降の処理が再度実行される。つまり、チェック領域０に記憶されたプログラムデータの正当性のチェックは（Ａ×Ｔ）周期で繰り返し実行される（図３参照）。一回のデータ読み出しサイズＤバイトと周期Ｔの値を適切に設定することにより、バス１７０の帯域をデータ転送により圧迫しないようにできるので、ＣＰＵ１００によるＲＡＭ１２０へのアクセスが妨げられないようにすることが可能である。例えば、バス１７０の全帯域からＣＰＵ１００がＲＡＭ１２０にフルにアクセスした場合の帯域を除いた帯域にチェック用の帯域が含まれるようにすれば良い。
【００２７】
以上説明したように、本実施形態の半導体集積回路１Ａでは、外部メモリ２からＲＡＭ１２０へダウンロードしたプログラムデータの正当性のチェックがチェック回路によって一定の周期で繰り返し実行される。このため、ダウンロード完了後にノイズ等によってプログラムデータの誤りが発生した場合であっても、その誤りがチェック回路による正当性のチェックによって検出され、システムリセット等の適切な対応をとることができる。また、本実施形態では、チェック演算器１３０がＣＰＵ１００とは別個のハードウェアとして実装されているため、上記正当性のチェックを周期的に行ったとしてもＣＰＵ１００に余分な処理負荷がかかることはない。加えて、本実施形態では、ＲＡＭ１２０からチェック演算器１３０へのチェック対象のプログラムデータの転送はＣＰＵ１００を介さずにＤＭＡコントローラ１６０によって行われるので、このデータ転送に起因した処理負荷がＣＰＵ１００にかかることもなく、また、上記データ転送によってＣＰＵ１００によるＲＡＭ１２０のアクセスが妨げられることもない。つまり、ＣＰＵ１００本来の処理の実行が妨げられることはない。
【００２８】
このように、本実施形態によれば、半導体集積回路１Ａ本来のデータ処理を妨げたり、ＣＰＵ１００に高い処理負荷を掛けたりすることなく、外部メモリ２からＲＡＭ１２０へダウンロードしたプログラムデータの正当性のチェックを常時行うことが可能になる。このように、本実施形態によれば、外部メモリ２からＲＡＭ１２０へダウンロードしたプログラムデータの正当性のチェックを、半導体集積回路１Ａ本来のデータ処理を妨げたり、ＣＰＵ１００に高い処理負荷を掛けたりすることなく、常時行うことが可能になるため、高い信頼性を要求されるシステムＬＳＩ（例えば、車載システム用のシステムＬＳＩ）や、ノイズの多発する環境下で使用されるシステムＬＳＩ（例えば、遊技機の組み込みシステム用のシステムＬＳＩ）に特に好適である。また、遊技機の組み込みシステム用のシステムＬＳＩに本実施形態を適用した場合には、遊技中にプログラムデータを改竄する等の不正にも適切に対処することができると期待される。
【００２９】
（Ｂ：第２実施形態）
図４は、本発明の第２実施形態の半導体集積回路１Ｂにおけるチェック処理の流れを示すフローチャートである。なお、半導体集積回路１Ｂのハードウェア構成は第１実施形態の半導体集積回路１Ａのハードウェア構成と同一であり、チェック処理の流れのみが異なっているため、半導体集積回路１Ｂのハードウェア構成についての説明および図示は省略する。
【００３０】
図４では、図２におけるものと同一の処理には、同一の符号が付されている。図４と図２とを対比すれば明らかように、本実施形態のチェック処理はステップＳＡ１２０の処理に代えてステップＳＣ１２０の処理を設けた点と、ステップＳＢ１００の処理に代えてステップＳＤ１００の処理を設けた点と、ステップＳＤ１８０およびステップＳＤ１９０の新たな処理を設けた点が図２に示すチェック処理と異なる。以下では、第１実施形態との相違点であるステップＳＣ１２０、ステップＳＤ１００、ステップＳＤ１８０およびステップＳＤ１９０の処理を中心に説明する。
【００３１】
ステップＳＣ１２０の処理は、第１実施形態におけるステップＳＡ１２０の処理に対応しており、ステップＳＡ１２０の処理と同様にＣＰＵ１００によって実行される。このステップＳＣ１２０では、ＣＰＵ１００は、外部メモリ２からＲＡＭ１２０へダウンロードされたＮ（Ｎは２以上の整数）個のプログラムデータをチェック対象として指定する。より詳細に説明すると、ＣＰＵ１００は、上記Ｎ個のデータの各々を記憶した記憶領域の各々をチェック領域とし、各チェック領域の先頭アドレスおよび最終アドレスをチェック回路に設定するとともに、それらＮ個のプログラムデータの各々についての期待値をチェック回路に設定する。つまり、本実施形態では、外部メモリ２からＲＡＭ１２０へダウンロードされたＮ種類のプログラムデータの各々がチェック対象とされるのである。なお、以下では、上記Ｎ個のチェック領域を、先頭アドレスが若い順に、チェック領域０、チェック領域１・・・チェック領域Ｎ−１とし、チェック領域０を「最初のチェック領域」、チェック領域Ｎ−１を「最後のチェック領域」と呼ぶ。
【００３２】
図４のステップＳＤ１００では、Ｎ個のチェック領域のうちの最初のチェック領域の先頭アドレスがアドレスレジスタに設定される。図４に示すように、ステップＳＤ１８０およびステップＳＤ１９０の各処理は、ステップＳＢ１６０の判定結果が“Ｙｅｓ”である場合には即座に、ステップＳＢ１６０の判定結果が“Ｎｏ”である場合にはステップＳＢ１７０に後続して実行される処理である。このステップＳＤ１８０では、上記Ｎ個のチェック領域の全てをチェックしたか否かの判定が行われる。具体的には、アドレスレジスタに格納されているアドレスが最後のチェック領域の最終アドレス以降の値となっている場合にステップＳＤ１８０の判定結果は“Ｙｅｓ”となる。そして、ステップＳＤ１８０の判定結果が“Ｙｅｓ”である場合には、図４に示すように、ステップＳＤ１００以降の処理が再度実行される。逆にステップＳＤ１８０の判定結果が“Ｎｏ”であれば、前述したステップＳＢ１６０と同様にアドレスレジスタの格納内容を更新する処理（ステップＳＤ１９０）が実行された後に、ステップＳＢ１１０以降の処理が実行される。
【００３３】
例えば、図５に示すチェック領域０〜チェック領域Ｎ−１のＮ個のチェック領域の各々に記憶されたプログラムデータがチェック対象であり、一回のデータ読み出し量はＤバイト、各チェック領域のデータサイズはＡ×Ｄバイトであるとする。この場合、図４に示すステップＳＤ１００ではチェック領域０の先頭アドレスがアドレスレジスタに設定され、ステップＳＤ１９０の処理が実行される毎にアドレスレジスタの格納内容はチェック領域１の先頭アドレス→チェック領域２の先頭アドレス→・・・→チェック領域Ｎ−１の先頭アドレスと更新される。そして、ステップＳＤ１８０の判定結果が“Ｙｅｓ”になると再度ステップＳＤ１００の処理が実行される。つまり、本実施形態の半導体集積回路１Ｂでは、図５に示すように、チェック領域０→チェック領域１→チェック領域２・・・チェック領域Ｎ−１→チェック領域０といった具合に上記Ｎ個のチェック領域の各々の正当性のチェックが巡回的に実行される。そして、各チェック領域については、前述した第１実施形態と同様に、データ読み出し周期Ｔ毎にＤバイトずつデータが読み出され、Ａ×Ｄバイトのデータの読み出しを契機としてチェックサムによる正当性のチェックが行われる。なお、本実施形態では、チェック領域０〜チェック領域Ｎ−１の各チェック領域のデータサイズが同一である場合について説明したが、全てのチェック領域のデータサイズが同一でなくても勿論良い。例えば、チェック領域０のデータサイズがＡ０×Ｄバイトであり、チェック領域１のデータサイズがＡ１×Ｄバイト（Ａ０≠Ａ１）である場合には、チェック領域０についてはＡ０回目のデータの読み出しの際に正当性のチェックが行われ、チェック領域１についてはＡ１回目のデータの読み出しの際に正当性のチェックが行われる、といった具合である。本実施形態においても、前述した第１実施形態と同様に、一回のデータ読み出しサイズＤバイトと周期Ｔの値を適切に設定することにより、バス１７０の帯域をデータ転送により圧迫しないようにできるので、ＣＰＵ１００によるＲＡＭ１２０へのアクセスが妨げられないようにすることが可能である。
【００３４】
本実施形態においてもチェック演算器１３０がＣＰＵ１００とは別個のハードウェアとして実装されていること、およびＲＡＭ１２０からチェック演算器１３０へのチェック対象のプログラムデータの転送にＣＰＵ１００が関与しないことは前述した第１実施形態と同じである。したがって、本実施形態によっても、半導体集積回路１Ｂ本来のデータ処理を妨げたり、ＣＰＵ１００に高い処理負荷を掛けたりすることなく、外部メモリ２からＲＡＭ１２０へダウンロードしたデータの正当性のチェックを常時行うことが可能になる。
【００３５】
（Ｃ：変形）
以上本発明の各実施形態について説明したが、これら実施形態に以下の変形を加えても勿論良い。
（１）上記各実施形態では、チェック演算を行うチェック演算器１３０とチェック対象のプログラムデータのＤＭＡ転送を行うＤＭＡコントローラ１６０とを別個の回路として半導体集積回路を構成した。しかし、図６に示すように、チェック演算器１３０と同一のチェック演算を行うとともに、ＤＭＡコントローラを内蔵しバスマスタとして機能するチェック演算器１３２をチェック回路として用いて半導体集積回路１Ｃを構成しても良い。また、上記実施形態では、チェック演算器１３０によるチェック演算としてチェックサムの算出演算が採用されていたが、ＣＲＣ、或いはハッシュの算出演算などの他の演算を採用しても良い。
【００３６】
（２）上記各実施形態では、チェック対象として指定された１または複数のプログラムデータの正当性のチェックをチェック回路に実行させた。しかし、ＣＰＵ１００が実行中の処理の処理内容等に応じてチェック対象を切り替えても良い。例えば、ＣＰＵ１００が実行中の処理ではアクセスされないデータをチェック対象から除外するといった具合である。
【００３７】
（３）上記各実施形態では、ＲＡＭ１２０に記憶されたデータの正当性のチェックを一定周期でチェック回路に実行させた。しかし、チェック周期の長さを切り替えても良い。例えば、チェックを第１の周期で繰り返し実行する第１の動作モードと、チェックを第１の周期よりも長い第２の周期で繰り返し実行する第２の動作モードの２つの動作モードを予め用意しておき、ブート時には第１の動作モードで動作させ、ブート後、動作が安定した以降は第２の動作モードで動作させるようにしても良い。また、動作モードの数は２つには限定されず、各々メモリからのデータ読み出し周期が異なる３種類以上の動作モードを定めても良い。
【００３８】
（４）上記各実施形態では、外部メモリ２からＲＡＭ１２０へダウンロードされるプログラムデータの正当性のチェックを行う場合について説明したが、外部メモリ２からＲＡＭ１２０へダウンロードされるデータであって、プログラムの実行過程でＣＰＵ１００によって参照されるデータ（例えばテーブルなど）の正当性のチェックに本発明を適用しても勿論良い。また、外部メモリ２からＲＡＭ１２０へダウンロードされるデータではなく、プログラムの実行過程でＣＰＵ１００によって参照されるレジスタのチェックに本発明を適用しても良い。
【００３９】
（５）上記各実施形態では、外部メモリ２からＲＡＭ１２０へダウンロードしたプログラムデータにしたがって処理を実行するＣＰＵを内蔵した半導体集積回路への適用例を説明した。しかし、外部メモリ２からＲＡＭ１２０へダウンロードしたプログラムデータにしたがって処理を実行するプロセッサはＣＰＵには限定されず、ＤＳＰであっても勿論良く、ＣＰＵとＤＳＰの両者を内蔵した半導体集積回路に本発明を適用しても勿論良い。また、本発明の適用対象として車載システム用のシステムＬＳＩや遊技機用のシステムＬＳＩが好適であることは前述した通りであるが、所謂情報家電やオーディオ機器用のシステムＬＳＩ、或いはゲーム機用のシステムＬＳＩに本発明を適用しても勿論良い。これらシステムＬＳＩにおいても、外部メモリから内部メモリへダウンロードしたデータ等の正当性のチェックを常時行えることが好ましいことに変わりはないからである。
【符号の説明】
【００４０】
１Ａ，１Ｂ，１Ｃ…半導体集積回路、２…外部メモリ、１００…ＣＰＵ、１１０…外部メモリインタフェース、１２０…ＲＡＭ、１３０，１３２…チェック演算器、１４０…リセット制御部、１５０…割り込み制御部、１６０…ＤＭＡ、１７０…バス。
【図１】
2014071543.tif 000003
【図２】
2014071543.tif 000004
【図３】
2014071543.tif 000005
【図４】
2014071543.tif 000006
【図５】
2014071543.tif 000007
【図６】
2014071543.tif 000008