(57)【要約】  【課題】  外部からＳｏＣ内部への侵入があった場合にメモリの保護領域へのアクセスを確実に防止し、かつバウンダリスキャンテストによるデバッグを実行可能とする。  【解決手段】  プロセッサ１１１に対する外部からの入力を監視するＴＡＰコントローラ１２０及びインストラクションデコーダ１３１と、プロセッサ１１１によるＲＯＭ１１３及びＳＲＡＭ１１４へのアクセスのアクセス先アドレスが予め設定された保護領域内か否かを監視する内部レジスタ１４１、１４２及び比較器１４３、１４４と、アクセス制御手段である内部レジスタ１４５、１４６及び多重化器１４７、１４９とを備え、プロセッサ１１１への制御命令が検知され、かつプロセッサ１１１から保護領域へのアクセスが行われたことが検知された場合に、そのアクセス先アドレスを開発者にて用意された付加回路ブロック２００のＲＯＭ２０１及びＳＲＡＭ２０２のアドレスに置き換える。  【選択図】  図１
2005182434.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、
メモリと、
前記プロセッサに対する外部からの入力を監視する第１の監視手段と、
前記プロセッサによる前記メモリへのアクセスのアクセス先アドレスが予め当該メモリに設定された保護領域内か否かを監視する第２の監視手段と、
前記第１の監視手段において特定の命令が検知され、前記第２の監視手段において前記プロセッサから前記保護領域内のアドレスをアクセス先とする前記メモリへのアクセスが行われたことが検知された場合に、当該アクセスのアクセス先アドレスを前記保護領域以外のアドレスに置き換えるアクセス制御手段と
を備えることを特徴とするマイクロコンピュータ。
【請求項２】
前記アクセス制御手段は、前記第１の監視手段が前記プロセッサに対する制御命令を検知した場合に、前記プロセッサからのアクセスにおけるアクセス先アドレスの置き換えを行うことを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項３】
前記第１の監視手段は、
マイクロコンピュータのデバッグ用に設けられたポートからの入力を取得するポートコントローラと、
前記ポートコントローラにて取得された入力の種類を判別するインストラクションデコーダと
を備えることを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項４】
前記第２の監視手段は、
前記メモリの保護領域のアドレスを保存した記憶装置と、
前記プロセッサによるアクセス先アドレスと前記記憶装置に保存されたアドレスとを比較する比較器と
を備えることを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項５】
前記アクセス制御手段は、
置き換えるべきアドレスを保存した記憶装置と、
前記プロセッサによるアクセス先アドレスと前記記憶装置に保存されたアドレスとを入力し、前記第１の監視手段及び第２の監視手段の検知結果に応じていずれか一方を出力する多重化器と
を備えることを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項６】
前記メモリと同一の内容を含む記憶内容を持つ外部記憶装置をさらに備え、
前記アクセス制御手段は、前記プロセッサによるアクセス先アドレスを、前記外部記憶装置における前記保護領域に対応するアドレスに置き換えることを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項７】
前記プロセッサと、前記メモリと、前記第１の監視手段と、前記第２の監視手段と、前記アクセス制御手段とが、単一の集積回路上に実装されたことを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項８】
プロセッサと、
第１のメモリと、
前記第１のメモリと同一の内容を含む記憶内容を持つ第２のメモリと、
前記プロセッサに対する外部からの入力を監視する監視手段と、
前記監視手段において特定の命令が検知された場合に、前記プロセッサから前記第１のメモリへのアクセスを前記第２のメモリへのアクセスに強制的に切り替えるアクセス制御手段と
を備えることを特徴とするマイクロコンピュータ。
【請求項９】
前記アクセス制御手段は、前記監視手段が前記プロセッサに対する制御命令を検知した場合に、前記プロセッサからのアクセス先を切り替えることを特徴とする請求項８に記載のマイクロコンピュータ。
【請求項１０】
前記第１のメモリには、前記プロセッサからのアクセスを禁止する保護領域が設定されており、
前記アクセス制御手段は、前記特定の命令が検知されると共に、前記プロセッサから前記保護領域内のアドレスをアクセス先とする前記第１のメモリへのアクセスが行われた場合に、当該アクセスのアクセス先アドレスを前記第２のメモリにおける前記保護領域に対応するアドレスに置き換えることを特徴とする請求項８に記載のマイクロコンピュータ。
【請求項１１】
前記プロセッサと、前記第１のメモリと、前記監視手段と、前記アクセス制御手段とが、単一の集積回路上に実装され、
前記第２のメモリは、前記集積回路に対して着脱自在に設けられたことを特徴とする請求項８に記載のマイクロコンピュータ。
【請求項１２】
少なくともプロセッサとメモリとを単一の集積回路上に実装したマイクロコンピュータにおいて、
所定のデバッガにてデバッグを行うためのデバッグポートと、
前記メモリと同一の内容を含む記憶内容を持つ外部記憶装置を接続するための外部バスとを備え、
前記外部バスに前記外部記憶装置を接続して前記プロセッサから前記外部記憶装置へのアクセスを可能とした場合に、前記デバッグポートを介して入力される当該プロセッサの制御命令を実行可能であることを特徴とするマイクロコンピュータ。
【請求項１３】
前記メモリには、前記特定の命令に基づく前記プロセッサからのアクセスを禁止する保護領域が設定されており、
前記デバッグポートから入力される前記プロセッサの制御命令により当該プロセッサが前記メモリの前記保護領域に対してアクセスしようとする場合に、当該保護領域に代えて前記外部記憶装置にアクセスすることを特徴とする請求項１２に記載のマイクロコンピュータ。
【請求項１４】
前記デバッグポートがＪＴＡＧポートであることを特徴とする請求項１２に記載のマイクロコンピュータ。
【請求項１５】
少なくともプロセッサとメモリとを実装したマイクロコンピュータにおける当該メモリの保護方法であって、
前記プロセッサが外部からの制御命令の入力を受け付け、当該命令に基づいて当該プロセッサから前記メモリへのアクセスを行うステップと、
前記プロセッサによる前記メモリへのアクセスのアクセス先アドレスが予め前記メモリに設定された保護領域内である場合に、当該アクセスのアクセス先アドレスを当該保護領域以外のアドレスに置き換えて当該アクセスを実行するステップと
を含むことを特徴とするメモリの保護方法。
【請求項１６】
前記アドレスを置き換えてアクセスを実行するステップでは、前記アクセス先アドレスを、前記メモリと同一の内容を含む記憶内容を持つ外部記憶装置の前記保護領域に対応するアドレスに置き換えることを特徴とする請求項１５に記載のメモリの保護方法。
【請求項１７】
少なくともプロセッサとメモリとを実装したマイクロコンピュータに対してデバッグを行うデバッグ方法であって、
前記メモリと同一の内容を含む記憶内容を持つ外部記憶装置を前記マイクロコンピュータに接続するステップと、
前記プロセッサに対してデバッグのために前記メモリへアクセスするための制御命令を入力するステップと、
前記マイクロコンピュータが、前記メモリへのアクセスを前記外部記憶装置へのアクセスに切り替えて実行するステップと
を含むことを特徴とするデバッグ方法。
【請求項１８】
前記制御命令を入力するステップでは、前記メモリに対して設定されている保護領域内のアドレスをアクセス先としてアクセスを行う制御命令を入力し、
前記アクセスを切り替えて実行するステップでは、前記メモリにおける前記アクセス先に対応する前記外部記憶装置のアドレスにアクセス先アドレスを置き換えることを特徴とする請求項１７に記載のデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳｏＣ（System on Chip）のメモリ保護に関し、特にデバッグ等でのメモリアクセスに対する保護の方法およびその機構に関する。
【背景技術】
【０００２】
プロセッサ、メモリ、周辺装置などのコンピュータの主要機能を集積し１チップに搭載したマイクロコンピュータであるＳｏＣは、実装に必要な面積が劇的に縮小し、消費電力も同等の機能を持つ複数チップによるシステムと比べて格段に抑えられることから、組み込み機器等で利用されている。
一般に、ＳｏＣでは、プロセッサと予めデータを書き込んだＲＯＭやＲＡＭを同じチップ内に組み込むことができるため、外部からこの組み込まれたＲＯＭやＲＡＭのデータ・バスに直接的にアクセスすること（例えば、ロジックアナライザ等を使い、ＲＯＭやＲＡＭのデータ・バスにプローブを接続しデータを電気的に読み込むこと）が困難であり、セキュリティの観点からは優れている。
【０００３】
一方、ＳｏＣに対してデバッグ等のテストを行う場合、ボード上の素子のように端子にプローブを当てる検査を行うことができない。そのため、バウンダリスキャンテスト（BST：Boundary Scan Test：境界走査試験）と呼ばれる、外部からテストコードを入力してチップの挙動を調査するテストが広く行われている（例えば、特許文献１参照）。
バウンダリスキャンテストの標準方式がＪＴＡＧであり、ＪＴＡＧに対応したＳｏＣは、チップのデバッグおよびソフトウェアの開発を容易にできるように、本来の機能を果たす回路のほかに、テストデータの入出力や制御に用いられるＪＴＡＧポートまたはＴＡＰ（Test Access Port）と呼ばれるインターフェイスとＴＡＰコントローラとを内蔵する。そして、このＪＴＡＧポートを使ってプロセッサの制御を行い、ＪＴＡＧポートを介して任意の命令をプロセッサに実行させることができるように設計されている。例えば、米国ＩＢＭ社が開発したＰｏｗｅｒＰＣでは、RISC Watchというデバッガ（デバッグツール）をプロセッサのＪＴＡＧポートに接続してプロセッサの制御を行うことができる。
【０００４】
【特許文献１】特開２００１−１４７８３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上述したように、ＳｏＣには通常、バウンダリスキャンテストを行うためのポートおよびコントローラが設けられているが、これらにより提供されるデバッグ機能を使えば、ＳｏＣ内部に侵入してメモリにアクセスし、内容を読み取ることができてしまう。
すなわち、上述したRISC Watch等のデバッガを用いると、自由にＳｏＣの内部レジスタの内容を読み込みこんだり、書き込んだりするこが可能である。また、この機能を使い、メモリに蓄えられたデータを読み込み、内容を内部レジスタに保管することができる。そしてさらに、そのレジスタの内容をＪＴＡＧのＴＤＯ（テストデータ出力）端子を介してＳｏＣ外部に自由に取り出すことができる。このようにすれば、ＭＭＵ（Memory Management Unit）等でアクセス禁止しているメモリ領域（以下、保護領域と称す）からデータを自由に読み取ることが可能となる。
【０００６】
このような、デバッガを用いたＳｏＣ内部への侵入を禁止する手段としては、例えばＪＴＡＧをプロセッサに接続しない（配線を行わない）という方法が考えられる。
ＪＴＡＧをプロセッサに接続しなければ、デバッガをプロセッサに接続できなくなり、データの保護の観点からは十分である。しかし、チップのデバッグやソフトウェアの開発が全く行うことができないか、製品とは別にデバッグ用のチップを開発してデバッグを行うことになり、コストがかかってしまう。
【０００７】
また、特定の手順を経ないとメモリにアクセスできないようにＳｏＣを設計し、メモリへのアクセスを困難にすることが考えられるが、これはその手順を見破られるとメモリのアクセスを防止できないため、十分な保護とは言えない。
【０００８】
そこで本発明は、上記の課題を解決し、外部からＳｏＣ内部への侵入があった場合にメモリの保護領域へのアクセスを確実に防止し、かつ従来と同様のバウンダリスキャンテストによるデバッグを実行できるようにするＳｏＣの仕組みおよびその制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記の目的を達成する本発明は、次のように構成されたＳｏＣとして実現される。このＳｏＣは、プロセッサとメモリとを備えると共に、プロセッサに対する外部からの入力を監視する第１の監視手段と、プロセッサによるメモリへのアクセスのアクセス先アドレスが予めメモリに設定された保護領域内か否かを監視する第２の監視手段と、第１の監視手段においてプロセッサへの制御命令が検知され、第２の監視手段においてプロセッサから保護領域内のアドレスをアクセス先とするメモリへのアクセスが行われたことが検知された場合に、そのアクセス先アドレスを保護領域以外のアドレスに置き換えるアクセス制御手段とを備えることを特徴とする。
【００１０】
より詳しくは、この第１の監視手段は、マイクロコンピュータのデバッグ用に設けられたポートからの入力を取得するポートコントローラと、このポートコントローラにて取得された入力の種類を判別するインストラクションデコーダとを備える構成とすることができる。
また第２の監視手段は、メモリの保護領域のアドレスを保存した記憶装置と、プロセッサによるアクセス先アドレスと記憶装置に保存されたアドレスとを比較する比較器とを備える構成とすることができる。
さらにアクセス制御手段は、置き換えるべきアドレスを保存した記憶装置と、プロセッサによるアクセス先アドレスと記憶装置に保存されたアドレスとを入力し、第１の監視手段及び第２の監視手段の検知結果に応じていずれか一方を出力する多重化器とを備える構成とすることができる。
【００１１】
また本発明は、上記のＳｏＣに対し、メモリと同一の内容を含む記憶内容を持つ外部記憶装置をさらに備えた構成とすることができる。この場合、アクセス制御手段は、プロセッサによるアクセス先アドレスを、外部記憶装置における保護領域に対応するアドレスに置き換えることができる。
【００１２】
上記の目的を達成する他の本発明は、次のように構成されたＳｏＣとしても実現される。このＳｏＣは、プロセッサと、第１のメモリと、この第１のメモリと同一の内容を含む記憶内容を持つ第２のメモリと、プロセッサに対する外部からの入力を監視する監視手段と、この監視手段においてプロセッサへの制御命令が検知された場合に、プロセッサから第１のメモリへのアクセスを第２のメモリへのアクセスに強制的に切り替えるアクセス制御手段とを備えることを特徴とする。
より好ましくは、第１のメモリには、プロセッサからのアクセスを禁止する保護領域が設定されており、アクセス制御手段は、プロセッサへの制御命令が検知されると共に、プロセッサから第１のメモリの保護領域内のアドレスをアクセス先とするアクセスが行われた場合に、そのアクセス先アドレスを第２のメモリにおける保護領域に対応するアドレスに置き換える。
【００１３】
上記の目的を達成するさらに他の本発明は、少なくともプロセッサとメモリとを単一の集積回路上に実装した、次のようなＳｏＣとしても実現される。このＳｏＣは、所定のデバッガにてデバッグを行うためのデバッグポートと、メモリと同一の内容を含む記憶内容を持つ外部記憶装置を接続するための外部バスとを備え、この外部バスに外部記憶装置を接続してプロセッサから外部記憶装置へのアクセスを可能とした場合に、デバッグポートを介して入力されるプロセッサの制御命令を実行可能であることを特徴とする。
【００１４】
また本発明は、少なくともプロセッサとメモリとを実装したマイクロコンピュータにおけるメモリの保護方法として実現される。この保護方法では、プロセッサが外部からの制御命令の入力を受け付け、この制御命令に基づいてプロセッサからメモリへのアクセスを行うステップと、プロセッサによるメモリへのアクセスのアクセス先アドレスが予めメモリに設定された保護領域内である場合に、そのアクセス先アドレスを保護領域以外のアドレスに置き換えてアクセスを実行するステップとを含むことを特徴とする。
さらにまた本発明は、少なくともプロセッサとメモリとを実装したマイクロコンピュータに対してデバッグを行う、次のようなデバッグ方法としても実現される。このデバッグ方法は、メモリと同一の内容を含む記憶内容を持つ外部記憶装置をマイクロコンピュータに接続するステップと、プロセッサに対してデバッグのためにメモリへアクセスするための制御命令を入力するステップと、マイクロコンピュータが、メモリへのアクセスを外部記憶装置へのアクセスに切り替えて実行するステップとを含むことを特徴とする。
【発明の効果】
【００１５】
以上のように構成された本発明によれば、プロセッサが外部からの制御命令に基づいてメモリへのアクセスを行ったことを認識してアクセス先を切り替えることによって、外部からＳｏＣ内部への侵入があった場合にもメモリの保護領域を確実に保護することができる。一方、メモリを代替する外部記憶装置をＳｏＣに装着することによって、メモリへのアクセスの目的は達成されるため、従来と同様のバウンダリスキャンテストによるデバッグを何ら支障なく実行することができる。
【発明を実施するための最良の形態】
【００１６】
以下、添付図面を参照して、本発明を実施するための最良の形態（以下、実施形態）について詳細に説明する。
図１は、本実施形態による保護機構を備えたＳｏＣ（System on Chip）の構成を示す図である。
図１に示すように、本実施形態のＳｏＣ１００は、プロセッサ１１１、バスインターフェイスユニット１１２、ＲＯＭ１１３、ＳＲＡＭ１１４を備えると共に、プロセッサ１１１に対する外部入力の監視手段としてＴＡＰコントローラ１２０と、インストラクションデコーダ１３１と、プロテクトレジスタ１３２とを備え、プロセッサ１１１からメモリ（ＲＯＭ１１３及びＳＲＡＭ１１４）へのアクセスの監視手段として内部レジスタ１４１、１４２と、比較器（Compare）１４３、１４４とを備え、プロセッサ１１１からメモリへのアクセスに対する制御を行うアクセス制御手段として内部レジスタ１４５、１４６と、多重化器（Multiplexer）１４７、１４９と、２入力加算器（AND）１４８とを備える。ＳＲＡＭ１１４は、バッテリ１１５にてバックアップされている。
【００１７】
図１において、プロセッサ１１１は、アドレス・バス及びデータ・バスを介してバスインターフェイスユニット１１２と接続され、ＲＯＭ１１３及びＳＲＡＭ１１４からなるメモリ（記憶素子）にアクセスする。また、比較器１４３、１４４はアドレス・バスに接続し、プロセッサ１１１からメモリへのアクセスがあった場合のアクセス先アドレスを取得できるようになっている。さらに、バスインターフェイスユニット１１２は、多重化器１４９を介してアドレス・バスに接続されており、外部バスを介してＲＯＭ１１３及びＳＲＡＭ１１４に接続されている。
【００１８】
また本実施形態では、後述するように、ＳｏＣ１００に対してデバッグを行う際に、ＳｏＣ１００に装着される外部記憶装置の付加回路ブロック２００が用意される。図１に示すように、付加回路ブロック２００は、ＲＯＭ２０１と、ＳＲＡＭ２０２と、ＳＲＡＭ２０２のバックアップ用のバッテリ２０３とを備える。ここで、ＲＯＭ２０１には、ＳｏＣ１００のＲＯＭ１１３と同一の内容が記憶されており、ＳＲＡＭ２０２には、ＳｏＣ１００のＳＲＡＭ１１４と同一の内容が格納されている。
この付加回路ブロック２００は、ＳｏＣ１００に装着されると、ＲＯＭ２０１及びＳＲＡＭ２０２が、ＲＯＭ１１３及びＳＲＡＭ１１４と同様に外部バスを介してバスインターフェイスユニット１１２に接続され、プロセッサ１１１からアクセス可能となる。
【００１９】
本実施形態では、ＳｏＣにおけるバウンダリスキャンテストによるデバッグの機能を損なうことなく、メモリ（ＲＯＭ１１３及びＳＲＡＭ１１４）上のデータを保護するため、次のことを実現する。
１．通常の動作では、プロセッサは全てのメモリ領域をアクセスできる。
２．デバッガがＪＴＡＧポートに接続され、プロセッサがデバッガによりコントロールされた場合、これを検出する機能を有する。
３．デバッガによるプロセッサのコントロールが検出された場合、メモリにおける保護すべきメモリ領域へのアクセスを禁止する手段を有する。
４．メモリ内の保護すべきメモリ領域へのアクセスが禁止されたとしても、デバッグ及びソフトウェア開発を実現する手段を持つ。
【００２０】
図２は、ＳｏＣ１００におけるＴＡＰコントローラ１２０とプロセッサ１１１との関係を示す図である。
プロセッサ１１１の内部にもＪＴＡＧ用のＴＡＰコントローラが内蔵されていて、このＴＡＰコントローラのステートマシンはＪＴＡＧに準拠したものであり、外部（ＳｏＣ１００上）のＴＡＰコントローラ１２０と全く同じ動作を行う。一般にプロセッサ１１１は、パフォーマンス向上とＩＰ（Intellectual Property：知的財産）の保護の観点からハードマクロになっている場合が多く、プロセッサ１１１内部の信号を直接操作することはできない。したがって、プロセッサ１１１内部のＴＡＰコントローラの状態は、外部からはわからないが、ＳｏＣ１００上のＴＡＰコントローラ１２０の状態から推測することが可能である。
【００２１】
ＪＴＡＧのＴＡＰコントローラ１２０に与えることができる命令は、パブリック命令とプライベート命令とに分けることができ、プロセッサ１１１の制御や命令（Instruction）の実行には、プライベート命令が使用される。このプライベート命令コードは、ＴＡＰコントローラ１２０の設計時に予め決められている。したがって、ＴＡＰコントローラ１２０に入力される命令コードをモニタリングしていれば、プロセッサ１１１を制御する命令が入力されたかどうか調べることができる。図２に示す例では、インストラクションデコーダ１３１にてプロセッサ１１１を制御するデバッグ命令が発行されたかどうかを調べることができる。なお、ＪＴＡＧ機能を有しないＳｏＣにおいても、ＳｏＣ内にＪＴＡＧのステートマシンを内蔵することにより、容易にデバッガのアクセス状況を把握することが可能である。
【００２２】
図３は、ＴＡＰコントローラ１２０とインストラクションデコーダ１３１による入力命令のモニタリングを説明する図である。
図３に示すように、ＴＡＰコントローラ１２０は、ＪＴＡＧのステートマシン１２１とＪＴＡＧのＴＤＩ（テストデータ入力）の入力信号を保持するインストラクションレジスタ１２２とを備える。
インストラクションデコーダ１３１は、ＴＡＰコントローラ１２０のインストラクションレジスタ１２２の保持内容をデコードする。インストラクションレジスタ１２２の値をモニターすることで、ＪＴＡＧにおいてプロセッサの制御を行うプライベート命令が実行されているかどうかを判別できる。
【００２３】
具体的には、ＴＡＰコントローラ１２０に入力された命令がプロセッサ１１１の制御命令であるならば、インストラクションデコーダ１３１の出力であるDBG_CMD信号が‘１’に立ち上がる。
プロテクトレジスタ１３２は、初期的にはシステムリセット信号（RESET）により‘０’にクリアされているが、DBG_CMD信号が‘１’に立ち上がることによって、‘１’が書き込まれる。このプロテクトレジスタ１３２の入力データは、ＶＤＤ（電源電圧）に接続されているので、一度‘１’にセットされると、システムリセット信号が入力されるまで、‘０’にクリアされることはない。
【００２４】
図４は、ＪＴＡＧポートのモニタリング動作の流れを示すフローチャートである。
図４に示すように、プロテクトレジスタ１３２の出力信号（以下、プロテクトデータ：Protect_Data）は、ＳｏＣ１００を搭載したシステムの電源投入時等の適当なタイミングでリセットされ、０となっている（ステップ４０１、４０２）。そして、ＪＴＡＧポートを介してアクセスがあった場合に、インストラクションデコーダ１３１により、ＴＡＰコントローラ１２０のインストラクションレジスタ１２２に保持された入力信号（インストラクション）がデコードされる（ステップ４０３、４０４）。そして、デコードされた命令がプロセッサ１１１へのアクセス命令（プロセッサ１１１の制御命令）であった場合は、プロテクトデータが１にセットされる（ステップ４０５、４０６）。
このようにして、プロセッサ１１１がデバッグポート（ＪＴＡＧポート）を介して外部からの制御命令の入力を受け付け、この制御命令に基づいてプロセッサ１１１からメモリへのアクセスを行った場合には、これをプロテクトデータによって認識することが可能となる。
【００２５】
本実施形態のＳｏＣ１００は、このプロテクトレジスタ１３２の出力信号であるプロテクトデータの値が‘０’（すなわち、通常の動作）の場合、本実施形態にて提供されるメモリ保護機能を動作させない。したがって、プロセッサ１１１は、自由に任意のメモリ領域のメモリ・データにアクセスできる。
一方、プロテクトデータの値が‘１’の場合（すなわち、デバッグ命令等のプロセッサ１１１の制御命令がＴＤＩに入力された場合）、本実施形態にて提供されるメモリ保護機能を動作させ、プロセッサ１１１によるメモリ（ＲＯＭ１１３及びＳＲＡＭ１１４）へのアクセスを禁止する。
以上のようにプロテクトデータをフラグとして用い、本実施形態にて保護されるメモリ領域のアドレスへのアクセスを制御することにより、上述した「１．通常の動作では、プロセッサは全てのメモリ領域をアクセスできる。」と「２．デバッガがＪＴＡＧポートに接続され、プロセッサがデバッガによりコントロールされた場合、これを検出する機能を有する。」とが実現される。
【００２６】
次に、このプロテクトレジスタ１３２の出力信号であるプロテクトデータを使って、どのように、ＳｏＣ１００内部のメモリのデータを保護するかを説明する。
図５は、ＳｏＣ１００におけるメモリ・マップの例を示す図である。
図５において、グレーで表示した領域を保護領域、すなわちデバッガを用いたアクセスを禁止する領域とする。この領域は、
0x8000_0000番地から0x807F_FFFF番地まで
と
0xE000_0000番地から0xE03F_FFFF番地まで
とし、この例では、0x8000_0000番地から0x807F_FFFF番地はＳＲＡＭ１１４に格納され、0xE000_0000番地から0xE03F_FFFF番地はＲＯＭ１１３に格納されているものとする（図１を参照）。以下、図５に示すメモリ・マップの保護領域をどのように保護するかを説明する。
【００２７】
図１に示したＳｏＣ１００において、内部レジスタ１４１は、保護すべきメモリ領域（Mem_Area1）の番地を保持し、内部レジスタ１４２は、保護すべきメモリ領域（Mem_Area2）の番地を保持している。内部レジスタ１４１、１４２に保持されている番地のビット長は、保護すべきメモリの記憶容量を表す。すなわち、ビット長が１０ビットの場合は、残りの２２ビットがこのメモリに対するアドレス信号となり、４メガバイトの記憶容量を表す。同様に、ビット長が８ビットの場合は、残りの２４ビットがこのメモリに対するアドレス信号となり、１６メガバイトの記憶容量を表す。ここでは、内部レジスタ１４１には、‘1000_0000_0’が保持されているとする。ビット長は９ビットであり、これは、ＳＲＡＭ１１４のメモリ領域のアドレスである0x8000_0000番地から0x807F_FFFF番地の８メガバイトを表していることになる。同様に、内部レジスタ１４２には、‘1110_0000_00’が保持されているとする。ビット長は１０ビットであり、これは、ＲＯＭ１１３のメモリ領域のアドレスである0xE000_0000番地から0xE03F_FFFF番地の４メガバイトを表していることになる。
【００２８】
プロセッサ１１１がメモリのデータにアクセスする場合、比較器１４３、１４４において、プロセッサ１１１から出力されるアドレス・バスが、この内部レジスタ１４１、１４２に保持されている番地と比較される。比較器１４３において、アドレス・バスが内部レジスタ１４１で保持されている番地内であるとき、すなわち、アドレス・バスの上位９ビットと内部レジスタ１４１に保持されている番地の上位９ビットとを比較して同じであれば、比較器１４３の出力は１となる。同様に、比較器１４４において、アドレス・バスが内部レジスタ１４２で保持されている番地内であるとき、すなわち、アドレス・バスの上位１０ビットと内部レジスタ１４２に保持されている番地の上位１０ビットとを比較し同じであれば、比較器１４４の出力は１となる。
【００２９】
２入力加算器１４８の出力（以下、マスクデータ：MASK_DATA）は、比較器１４３、１４４の出力のどちらか一方が１であり、かつプロテクトレジスタ１３２から出力されるプロテクトデータが１のときにのみ１になる。上述したように、プロテクトデータが１になるのは、ＪＴＡＧポートを使ってプロセッサ１１１を制御する命令をＴＡＰコントローラ１２０に入力した場合のみである。ＳｏＣ１００を通常使用する場合は、このプロテクトデータは０であり、マスクデータが１になることはない。すなわち、マスクデータが１になるのは、ＪＴＡＧのＴＡＰコントローラ１２０にプロセッサ制御命令が入力され、かつデータを保護すべきメモリ領域に対してプロセッサ１１１がアクセスを行った場合である。図５の例では、アドレス番地0x8000_0000から0x807F_FFFF、または、0xE000_0000から0xE03F_FFFFにアクセスがあった場合にのみマスクデータは１になる。
【００３０】
内部レジスタ１４５は、付加回路ブロック２００におけるＳＲＡＭ２０２のメモリ領域（Alt_1）のアドレスを保持している。また、内部レジスタ１４６は、付加回路ブロック２００におけるＲＯＭ２０１のメモリ領域（Alt_2）のアドレスを保持している。なお、内部レジスタ１４５に保持されるアドレスは９ビット、内部レジスタ１４６に保持されるアドレスは１０ビットであるため、図１に示すように、内部レジスタ１４５に保持されるアドレスにプロセッサ１１１のアドレス・バスの上位１０ビット目のアドレスデータＡ（９）が入力されて１０ビットにビット長をそろえている。
【００３１】
多重化器１４７は、内部レジスタ１４５、１４６の切り替えを行うための論理（Logic）であり、比較器１４４の出力を切り替え信号として入力する。具体的には、比較器１４４の出力が１のとき、内部レジスタ１４６の保持内容が選択され、それ以外は内部レジスタ１４５の保持内容が選択される。
多重化器１４９は、内部レジスタ１４１、１４２の出力と内部レジスタ１４５、１４６の出力とを切り替える論理（Logic）である。上述したマスクデータは、多重化器１４９の切り替え信号となっていて、マスクデータが１のとき、プロセッサ１１１から出力されるアドレス・バスの上位１０ビットは、内部レジスタ１４５または内部レジスタ１４６に保持されているアドレス情報に置き換わる。
【００３２】
この切り替え動作について、具体的に説明する。
内部レジスタ１４１には、‘1000_0000_0’が保持されているとする。図１の内部レジスタ１４１には、保護している上位アドレス0x800が記述されている。一方、内部レジスタ１４５には、0x800が置き換わるアドレス、具体的には、‘1010_0000_0’が保持されている。上述したように、このビット長は９ビットであるため、プロセッサ１１１のアドレス・バスのアドレスデータＡ（９）を加えて１０ビットとしている。
また、内部レジスタ１４２には、‘1110_0000_00’が保持されているとする。図１の内部レジスタ１４２には、保護している上位アドレス0xE00が記述されている。一方、内部レジスタ１４６には、0x800が置き換わるアドレス、具体的には、‘1011_0000_00’が保持されている。
【００３３】
さて、上記の構成において、デバッガのRISC Watchをプロセッサ１１１のＪＴＡＧポートに接続し、メモリにおける保護されたデータを読み出そうとする場合を仮定する。
まず、プロセッサ１１１及びＴＡＰコントローラ１２０には、プロセッサの制御命令が入力される。このとき、インストラクションデコーダ１３１は、この制御命令の入力を検出し、DBG_CMD信号を出力してプロテクトデータを１にする。ここで、この制御命令により、プロセッサ１１１が保護されているデータにアクセスする場合、具体的には、例えば0xE001_6800番地をリードしようとする場合を考える。
【００３４】
ここで、この制御命令により、プロセッサ１１１が保護されているデータにアクセスする場合、具体的には、例えば0xE001_6800番地をリードしようとする場合を考える。
この番地の上位１０ビット（‘1110_0000_00’）は、内部レジスタ１４２が保持する値と同じである。そのため、比較器１４４の出力は１となり、この結果、２入力加算器１４８の出力であるマスクデータが１となる。これにより、多重化器１４７、１４９の切り替え操作が行われ、内部レジスタ１４６の値‘1011_0000_00’がバスインターフェイスユニット１１２に与えられるアドレスの上位１０ビットとなる。この結果、プロセッサ１１１のアクセス先である、バスインターフェイスユニット１１２に与えられるアドレスは、0xE001_6800番地から0xB001_6800番地に変更される。
【００３５】
図６は、本実施形態によるメモリ保護機能の動作の流れを示すフローチャートである。
ＳｏＣ１００の動作時に、プロセッサ１１１からメモリ（ＲＯＭ１１３またはＳＲＡＭ１１４）へのアクセスがあった場合（ステップ６０１でＹｅｓ）、プロテクトデータが１にセットされており（ステップ６０２でＹｅｓ）、かつアクセス先のアドレスがメモリの保護領域内であるならば（ステップ６０３でＹｅｓ）、多重化器１４９により、アドレス・バスにおけるアクセス先の上位アドレスが、内部レジスタ１４５、１４６に保持されているアドレスに置き換えられる（ステップ６０４）。そして、置き換えられたアドレスへのアクセスが実行される（ステップ６０５）。
内部レジスタ１４５、１４６のいずれに保持されているアドレスが用いられるかは、比較器１４３、１４４の比較結果に応じて多重化器１４７にて決定される。
【００３６】
一方、プロテクトデータが０である場合（ステップ６０２でＮｏ）、またはプロセッサ１１１のアクセス先アドレスがメモリの保護領域以外である場合（ステップ６０３でＮｏ）は、ステップ６０４でのアドレスの置き換えは行われずに、プロセッサ１１１によるアクセス先アドレスへのアクセスが実行される（ステップ６０５）。これは、プロテクトデータが０である場合は、デバッガによるプロセッサ１１１の制御命令を用いたアクセスではないので、保護領域に対するアクセスを禁止する必要がなく、プロセッサ１１１のアクセス先アドレスがメモリの保護領域以外である場合は、そもそも保護領域へのアクセスではないので、本実施形態によるメモリ保護機能を動作させる必要がないためである。
【００３７】
このように、本実施形態によって保護されるメモリ領域のアドレスは、デバッガを用いてアクセスしようとする際に、別のアドレスに強制的に変換されるため、全くアクセスすることが不可能となる。
これに対し、デバッガ（上記の例ではRISC Watch）をプロセッサ１１１に接続しない場合は、プロテクトデータは０のままであり、上記のようなアドレスの置き換えは行われない。このため、プロセッサ１１１自身の本来の機能によって、本実施形態で保護されるメモリ領域にアクセスすることは可能である。
以上のようにメモリの保護領域に対するアクセス制御を行うことにより、上述した「３．デバッガによるプロセッサのコントロールが検出された場合、メモリにおける保護すべきメモリ領域へのアクセスを禁止する手段を有する。」が実現される。
【００３８】
さて、上述したように本実施形態のＳｏＣ１００では、デバッガによるプロセッサ１１１の制御命令を用いてメモリの保護領域に対するアクセスが行われた場合には、アクセス先アドレスが強制的に変更されて保護領域へのアクセスができなくなるが、ＳｏＣ１００に対するデバッグやソフトウェアの開発を実施するためには、デバッガによるプロセッサ１１１の制御命令を用いたアクセスでメモリの保護領域の内容を取得できなくてはならない。そこで、本実施形態では、ＳｏＣ１００のＲＯＭ１１３、ＳＲＡＭ１１４と同一内容を含む記憶内容を持つＲＯＭ２０１、ＳＲＡＭ２０２を備えた付加回路ブロック２００を用意する。
ＳｏＣ１００内部のＲＯＭ１１３及びＳＲＡＭ１１４に書き込まれたデータは、開発者には既知であるので、デバッグやソフトウェア開発を実施するために、開発者がこのような付加回路ブロック２００を用意することは可能である。
【００３９】
ＳｏＣ１００のデバッグやソフトウェア開発のためにRISC Watch等のデバッガを用いる場合、付加回路ブロック２００がＳｏＣ１００に接続される。上述したように、付加回路ブロック２００のＲＯＭ２０１、ＳＲＡＭ２０２の記憶内容は、ＳｏＣ１００のＲＯＭ１１３、ＳＲＡＭ１１４の記憶内容と同一である。そして、内部レジスタ１４５にＲＯＭ２０１のメモリ領域（Alt_2）のアドレスを保持し、内部レジスタ１４６にＳＲＡＭ２０２のメモリ領域（Alt_1）のアドレスを保持しており、本実施形態のメモリ保護機能により、プロセッサ１１１からのアクセス先アドレスは、内部レジスタ１４５、１４６に格納されているＳＲＡＭ２０２またはＲＯＭ２０１のアドレスに置き換えられる。
【００４０】
そのため、デバッガによるプロセッサ１１１の制御命令を用いたアクセスがなされた場合、ＳｏＣ１００内部のＲＯＭ１１３、ＳＲＡＭ１１４の保護領域の代わりに、付加回路ブロック２００のＲＯＭ２０１、ＳＲＡＭ２０２の対応するメモリ領域に対してアクセスが行われ、プロセッサ１１１は、ＲＯＭ１１３、ＳＲＡＭ１１４に格納されているデータと同じデータを読み込むことが可能となる。
これにより、デバッグやソフトウェア開発において、メモリの保護領域に記録されたデータを用いるプログラムを何ら支障なく実行することができ、上述した「４．メモリ内の保護すべきメモリ領域へのアクセスが禁止されたとしても、デバッグ及びソフトウェア開発を実現する手段を持つ。」が実現される。
【００４１】
以上のようにして、本実施形態は、デバッガ等を用いて外部からＳｏＣ１００の内部への侵入が行われた場合にもメモリの保護領域へのアクセスを確実に防止してこの保護領域を保護しながら、ＪＴＡＧによるデバッグの実行を可能としたが、本実施形態は、上述したRISC Watch以外のデバッガによるプロセッサ１１１の制御命令を用いたアクセスに対しても同様に適用することができるのは言うまでもない。
また、ＪＴＡＧ以外のデバッグポートを介して行われるアクセスに対しても、そのようなデバッグポートを介するプロセッサ１１１へのアクセスをモニタリングして、同様の操作を行うことにより、メモリの所望の領域に対して、デバッガによるプロセッサ１１１の制御命令を用いたアクセスを禁止することが可能である。
【００４２】
ＳｏＣ１００に対してデバッグを行う場合は、ＳｏＣ１００に対して付加回路ブロック２００を接続した上で、デバッガを用いる。これにより、ＳｏＣ１００内部のメモリにアクセスしようとするときは、ＳｏＣ１００がアクセス先を付加回路ブロック２００のメモリ（ＲＯＭ２０１及びＳＲＡＭ２０２）に切り替えるため、デバッガによるプロセッサ１１１の制御命令を用いたアクセスが禁止された領域を確実に保護しつつ、デバッグを行うことができる。
【図面の簡単な説明】
【００４３】
【図１】本実施形態による保護機構を備えたＳｏＣ（System on Chip）の構成を示す図である。
【図２】本実施形態のＳｏＣにおけるＴＡＰコントローラとプロセッサとの関係を示す図である。
【図３】本実施形態のＴＡＰコントローラとインストラクションデコーダによる入力命令のモニタリングを説明する図である。
【図４】本実施形態におけるＪＴＡＧポートのモニタリング動作の流れを示すフローチャートである。
【図５】ＳｏＣにおけるメモリ・マップの例を示す図である。
【図６】本実施形態によるメモリ保護機能の動作の流れを示すフローチャートである。
【符号の説明】
【００４４】
１００…ＳｏＣ（System on Chip）、１１１…プロセッサ、１１２…バスインターフェイスユニット、１１３、２０１…ＲＯＭ、１１４、２０２…ＳＲＡＭ、１１５、２０３…バッテリ、１２０…ＴＡＰコントローラ、１２１…ステートマシン、１２２…インストラクションレジスタ、１３１…インストラクションデコーダ、１３２…プロテクトレジスタ、１４１、１４２、１４５、１４６…内部レジスタ、１４３、１４４…比較器（Compare）、１４７、１４９…多重化器（Multiplexer）、１４８…２入力加算器（AND）、２００…付加回路ブロック
【図１】
2005182434.tif 000003
【図２】
2005182434.tif 000004
【図３】
2005182434.tif 000005
【図４】
2005182434.tif 000006
【図５】
2005182434.tif 000007
【図６】
2005182434.tif 000008