(57)【要約】【課題】本発明は、安価な製造コストで、複数の会社が開発した複数のプログラムを記憶素子に書込んだ状態であても、プログラムの内容が他社（許可されない者）に分からない半導体装置、および半導体装置の開発システムを提供する。【解決手段】本発明に係る半導体装置１０は、プログラムを記憶する記憶部（記憶素子２）と、記憶部に記憶したプログラムを実行することで特定の処理を行なう処理部（ＩＰ回路３）と、記憶したプログラムを記憶部から読出し、処理部で実行することが可能な命令を生成する演算部（ＣＰＵ１）と、プログラムおよび命令を伝送するデータバス４とを備える。処理部は、データバス４を介して処理部に入力する命令に基づいて算術論理演算を行なう制御レジスタＣ＿ＲＥＧと、処理部に入力する命令を、制御レジスタで処理することが可能な命令に変換する変換回路（Ａ回路３２）とを有する。【選択図】図１
2013029998.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを記憶する記憶部と、
前記記憶部に記憶した前記プログラムを実行することで特定の処理を行なう処理部と、
記憶した前記プログラムを前記記憶部から読出し、前記処理部で実行することが可能な命令を生成する演算部と、
前記記憶部、前記処理部、および前記演算部を接続し、前記プログラムおよび前記命令を伝送するデータバスと、
を備え、
前記処理部は、
前記データバスを介して前記処理部に入力する前記命令に基づいて算術論理演算を行なう制御レジスタと、
前記処理部に入力する前記命令を、前記制御レジスタで処理することが可能な前記命令に変換する変換回路とを有する半導体装置。
【請求項２】
前記変換回路は、前記処理部に入力する前記命令と、設定値とを入力して演算することで、前記処理部に入力する前記命令を、前記制御レジスタで処理することが可能な前記命令に変換する排他的論理和回路である、請求項１に記載の半導体装置。
【請求項３】
前記処理部は、前記排他的論理和回路に入力する前記設定値を暗号化する暗号回路をさらに有する、請求項２に記載の半導体装置。
【請求項４】
前記暗号回路は、前記処理部に記憶してある鍵情報を用いて、前記設定値を暗号化する、請求項３に記載の半導体装置。
【請求項５】
前記暗号回路は、暗号化した前記設定値と、前記処理部に記憶してある鍵情報とを入力して演算することで、次に前記排他的論理和回路に入力する前記設定値を暗号化する、請求項４に記載の半導体装置。
【請求項６】
前記処理部は、特性多項式を用いた線形フィードバックシフトレジスタを用いて、前記暗号回路で暗号化した前記設定値を、前記排他的論理和回路に入力するタイミングで変更する変更回路をさらに有する、請求項４に記載の半導体装置。
【請求項７】
前記変換回路は、前記制御レジスタで処理することが可能な前記命令に変換する処理を行なう、行わないを切替える切替手段を有する、請求項１〜６のいずれか１項に記載の半導体装置。
【請求項８】
前記切替手段は、所定の方法で認証された場合に限り、前記制御レジスタで処理することが可能な前記命令に変換する処理を行なう、行わないを切替えることができる、請求項７に記載の半導体装置。
【請求項９】
前記変換回路は、鍵情報を用いて暗号化した前記命令を、前記鍵情報に対応した復号鍵を用いて復号化することで、前記処理部に入力する前記命令を、前記制御レジスタで処理することが可能な前記命令に変換する暗号回路である、請求項１に記載の半導体装置。
【請求項１０】
前記変換回路は、前記処理部に入力される前記命令を構成するビット順を、設定値に基づいて入替えることで、前記処理部に入力する前記命令を、前記制御レジスタで処理することが可能な前記命令に変換するセレクタ回路である、請求項１に記載の半導体装置。
【請求項１１】
前記変換回路は、前記処理部に入力される前記命令を構成するビットを複数のグループに分け、分けた前記グループごとに所定の演算を行なうことで、前記処理部に入力する前記命令を、前記制御レジスタで処理することが可能な前記命令に変換する演算器である、請求項１に記載の半導体装置。
【請求項１２】
請求項１〜請求項１１のいずれか１項に記載の半導体装置と、
前記制御レジスタで処理することが可能な前記命令を含む前記プログラムを生成し、前記半導体装置の前記データバスを介して前記記憶部に書込むコンパイラと
を備える半導体装置の開発システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置、および半導体装置の開発システムに関し、特に、プログラムを実行することで特定の処理を行なうＩＰ（Intellectual  Property）回路を搭載した半導体装置、および半導体装置の開発システムに関する。
【背景技術】
【０００２】
近年、半導体装置は、技術の進歩により、１つのＩＣ（Integrated  Circuit）チップ上に搭載する記憶素子の容量が増加している。半導体装置は、記憶素子の容量が増加することで、１つＩＣチップに複数プログラムを書込むことが可能になった。たとえば、半導体装置が、特許文献１に開示してあるような組込み機器用のＩＣチップの場合について説明する。ＩＣチップは、搭載する記憶素子の容量が増えると、複数の会社が開発した複数のプログラムを１つの記憶素子に書込むことが可能となる。
【０００３】
そのため、ＩＣチップは、複数の会社が開発した複数のプログラムを記憶素子に書込んだ状態で、複数の会社でプログラム開発の最終開発過程や不良解析などにおいてデバッガなどの処理が行われる。ＩＣチップは、デバッガなどの処理を行なうと、記憶素子に書込んである他社のプログラムを読出し、解析することが可能となる。
【０００４】
１つの記憶素子にプログラムを書込んだ会社が互いに協力関係にあれば問題がないが、ライバル関係にあれば、他社にプログラムを読出され、解析されることでアルゴリズムなどの情報が他社に洩れる問題があった。そこで、ＩＣチップは、複数の会社が開発した複数のプログラムを記憶素子に書込んだ状態であっても、他社（許可されない者）にプログラムを読出されない仕組みが開発されている。
【０００５】
たとえば、ＩＣチップは、記憶素子に読出することができる領域を制限することができる機能を付加することで、プログラムを書込んだ会社以外の書込んだ領域のプログラムを読出せない仕組みにすることが可能である。
【０００６】
また、ＩＣチップは、記憶素子へ書込むプログラム自体（データ）を暗号化することで、プログラムを書込んだ会社以外がプログラムを読出しても内容が分からない仕組みにすることが可能である。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１１−８５５０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、記憶素子に読出することができる領域を制限することができる機能をＩＣチップに付加して、各社にプログラムを書込む領域を割当てた場合、書込めるプログラムの容量が制限されプログラム開発の自由度が低下する。また、プログラム容量が割当てた領域を超えた場合、割当てた領域の調整を行う作業が発生し、プログラム容量が割当てた領域を超えない場合、記憶素子にプログラムを書込まない無駄な領域が増える。さらに、汎用品のＩＣチップを設計する段階で、記憶素子に読出することができる領域を制限できる機能を追加する必要があるため、製造コストが高価になる。
【０００９】
また、ＩＣチップは、記憶素子へ書込むプログラム自体を暗号化する場合、記憶素子の容量を大きくして、暗号化したプログラムを復号化するために別途演算部を設ける必要があるため、製造コストが高価になる。さらに、ＩＣチップは、暗号化したプログラムを復号化するための処理時間が必要になる。
【００１０】
それゆえに、本発明は、上記問題点を解決するためになされたものであり、安価な製造コストで、複数の会社が開発した複数のプログラムを記憶素子に書込んだ状態であっても、プログラムの内容が他社（許可されない者）に分からない半導体装置、および半導体装置の開発システムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明は、プログラムを記憶する記憶部と、記憶部に記憶したプログラムを実行することで特定の処理を行なう処理部と、記憶したプログラムを記憶部から読出し、処理部で実行することが可能な命令を生成する演算部と、記憶部、処理部、および演算部を接続し、プログラムおよび命令を伝送するデータバスとを備える半導体装置である。処理部は、データバスを介して処理部に入力する命令に基づいて算術論理演算を行なう制御レジスタと、処理部に入力する命令を、制御レジスタで処理することが可能な命令に変換する変換回路とを有する。
【発明の効果】
【００１２】
本発明に係る半導体装置は、処理部に入力する命令を、制御レジスタで処理することが可能な命令に変換する変換回路を有するので、プログラムを単に解析しても制御レジスタでどのような処理を行なうのか分からない命令として記憶部に書込むことができる。そのため、本発明に係る半導体装置は、安価な製造コストで、複数の会社が開発した複数のプログラムを記憶部に書込んだ状態であっても、プログラムの内容が他社（許可されない者）に分からない構成を提供することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施の形態１に係る半導体装置の構成を示すブロック図である。
【図２】本発明の実施の形態１に係る半導体装置のＩＰ回路の構成を示すブロック図である。
【図３】本発明の実施の形態１に係るＡ回路の設定値を説明するための模式図である。
【図４】本発明の実施の形態１に係るＡＬＵ回路の制御レジスタの仕様を示す図である。
【図５】Ａ回路を有していない従来のＩＰ回路に伝送されるコマンドの内容を説明する図である。
【図６】Ａ回路を有するＩＰ回路に伝送されるコマンドの内容を説明する図である。
【図７】Ａ社およびＢ社のＡ回路を有するＩＰ回路に伝送されるコマンドの内容を説明する図である。
【図８】本発明の実施の形態２に係る半導体装置の構成を示すブロック図である。
【図９】本発明の実施の形態２に係る半導体装置の暗号回路を説明するための模式図である。
【図１０】本発明の実施の形態２に係る半導体装置の別の構成の暗号回路を説明するための模式図である。
【図１１】図１０に示す暗号回路で暗号化した設定値を示す図である。
【図１２】暗号回路の動作を説明するための図である。
【図１３】本発明の実施の形態２の変形例に係る半導体装置の構成を示すブロック図である。
【図１４】本発明の実施の形態２に係る半導体装置のＭ系列回路を説明するための模式図である。
【図１５】本発明の実施の形態２に係る半導体装置のＭ系列回路の動作を説明するためのタイミングチャートである。
【図１６】本発明の実施の形態３に係る半導体装置のＩＰ回路の構成を示すブロック図である。
【図１７】本発明の実施の形態３に係るＡＬＵ回路の制御レジスタの仕様を示す図である。
【図１８】本発明の実施の形態３の変形例に係る半導体装置のＩＰ回路の構成を示すブロック図である。
【図１９】本発明の実施の形態３の変形例に係るＡ回路を有するＩＰ回路に伝送されるコマンドの内容を説明する図である。
【図２０】本発明の実施の形態４に係る半導体装置のＩＰ回路の構成を示すブロック図である。
【図２１】本発明の実施の形態４に係るＡ回路を有するＩＰ回路に伝送されるコマンドの内容を説明する図である。
【図２２】本発明の実施の形態４に係る半導体装置のＩＰ回路の入出力信号を詳しく説明したブロック図である。
【図２３】本発明の実施の形態４に係る半導体装置のＩＰ回路の入出力信号のタイミングチャートである。
【図２４】コンパイラと半導体装置とを組合わせた半導体装置の開発システムの構成を示すブロック図である。
【図２５】本発明の変形例に係るＡ回路の構成を示すブロック図である。
【図２６】本発明の別の変形例に係るＡ回路の構成を示すブロック図である。
【発明を実施するための形態】
【００１４】
以下、本発明に係る実施の形態について図面を参照して説明する。
（実施の形態１）
図１は、本発明の実施の形態１に係る半導体装置の構成を示すブロック図である。図１に示す半導体装置１０は、たとえばＩＣカードやＩＣカードリーダなどのように複数の会社が開発したそれぞれのプログラムを１つのＩＣチップに搭載する組込み機器用のＩＣチップである。半導体装置１０は、ＣＰＵ（Central  Processing  Unit）１、記憶素子２、ＩＰ回路３、データバス４を含んでいる。
【００１５】
ＣＰＵ１は、記憶素子２に記憶したプログラムを読出し、読出したプログラムからＩＰ回路３で実行可能なコマンド（命令）を生成する処理などを行なう演算部である。記憶素子２は、ＣＰＵ１やＩＰ回路３で実行するプログラムやデータなどを記憶する記憶部である。ＩＰ回路３は、記憶素子２に記憶したプログラムを実行することで特定の処理（たとえば画像処理など）を行なう処理部である。データバス４は、ＣＰＵ１、記憶素子２、およびＩＰ回路３を接続し、それぞれの間でプログラムおよび命令を伝送するための伝送経路である。
【００１６】
さらに、ＩＰ回路３は、ＡＬＵ（Arithmetic  Logic  Unit）回路（算術論理回路）３１、Ａ回路３２を含んでいる。ＡＬＵ回路３１は、四則演算などの特定の処理を行なうための回路である。ＡＬＵ回路３１は、特定の処理を行なうためコマンドがデータバス４を介してＣＰＵ１から伝送されてくる。ＣＰＵ１は、記憶素子２に記憶してある状態でプログラムを暗号化してあっても、コマンドとしてデータバス４を介してＡＬＵ回路３１に伝送するためにプログラムを復号化する。そのため、データバス４を伝送しているコマンドを解析すれば、ＡＬＵ回路３１で実行する特定の処理の内容が洩れる問題があった。
【００１７】
ＩＰ回路３内にＣＰＵを設け、データバス４に暗号化したプログラムを伝送する構成であれば、ＡＬＵ回路３１で実行する特定の処理の内容が洩れる可能性は低いが、ＩＰ回路３の回路規模が大きくなり、製造コストが高価になる。
【００１８】
そこで、半導体装置１０は、ＡＬＵ回路３１でどのような処理を行なうのか分からないコマンドとして記憶素子２に書込んでおき、ＩＰ回路３内に設けたＡ回路３２でＡＬＵ回路３１が特定の処理を実行できるようなコマンドに変換する。つまり、半導体装置１０は、ＩＰ回路３内に、コマンドを変換するＡ回路３２を設けることで、記憶素子２のプログラムやデータバス４を介してＣＰＵ１からＡＬＵ回路３１に伝送されるコマンドを解析しても、ＡＬＵ回路３１で実行する特定の処理の内容が理解できない構成にしてある。
【００１９】
具体的に、ＩＰ回路３の構成を説明する。図２は、本発明の実施の形態１に係る半導体装置１０のＩＰ回路３の構成を示すブロック図である。図２に示すＡＬＵ回路３１は、複数の制御レジスタＣ＿ＲＥＧ０，Ｃ＿ＲＥＧ１，Ｃ＿ＲＥＧ２，・・・（複数の制御レジスタを代表して記載する場合、制御レジスタＣ＿ＲＥＧと記載する）を含んでいる。たとえば、ＡＬＵ回路３１が画像処理を行なう場合、制御レジスタＣ＿ＲＥＧは、ＡＬＵ回路３１に伝送されるコマンドにより、画像の滑らかさを制御する制御レジスタとする。
【００２０】
Ａ回路３２は、ＥＸＯＲ回路３２１、設定値保持部３２２を有し、ＡＬＵ回路３１に伝送されたコマンドと、設定値（３２ビット）との排他的論理和を演算して、制御レジスタＣ＿ＲＥＧに演算結果を出力している。
【００２１】
設定値は、各社で異なる値にしてあり、コマンドに含まれる情報に基づいて最適な値に設定される。図３は、本発明の実施の形態１に係るＡ回路３２の設定値を説明するための模式図である。図３に示す設定値保持部３２２は、各社で値の異なる設定値を有し、コマンドが入力されるとコマンドに含まれる情報（後述するＤＥＣＤＩＮ（３１：０））に基づいてＥＸＯＲ回路３２１に設定値を出力する。
【００２２】
次に、半導体装置１０の動作を具体的に説明する。まず、図４は、本発明の実施の形態１に係るＡＬＵ回路３１の制御レジスタの仕様を示す図である。図４に示す制御レジスタＣ＿ＲＥＧの仕様には、演算するレジスタを指定するコマンドＡＬＵ＿ＯＰ２＿ＳＥＬ，ＡＬＵ＿ＯＰ１＿ＳＥＬ、演算内容を指定するコマンドＥＮＺＡＮについて記載してある。コマンドＡＬＵ＿ＯＰ２＿ＳＥＬは、“００”のときＲＥＧ２０を指定し、“０１”のときＲＥＧ２１を指定し、“１０”のときＲＥＧ２２を指定し、“１１”のときＲＥＧ２３を指定する。コマンドＡＬＵ＿ＯＰ１＿ＳＥＬは、“００”のときＲＥＧ１０を指定し、“０１”のときＲＥＧ１１を指定し、“１０”のときＲＥＧ１２を指定し、“１１”のときＲＥＧ１３を指定する。コマンドＥＮＺＡＮは、“０００”のとき加算、“００１”のとき減算、“０１０”のとき掛算、“０１１”のとき割算、“１００”のときロード、“１０１”のときストア、“１１０”のときムーブを指定する。
【００２３】
制御レジスタＭ＿ＲＥＧの仕様には、ＡＬＵ回路３１を使用するか、使用しないかを指定するコマンドＣＯＲＥ＿ＥＮについて記載してある。コマンドＣＯＲＥ＿ＥＮは、“０”のときＡＬＵ回路３１を使用しない、“１”のときＡＬＵ回路３１を使用することを指定する。設定値の仕様には、ＥＸＯＲ回路３２１に出力する設定値を指定するコマンドＤＥＣＤＩＮについて記載してある。
【００２４】
ＩＰ回路３に伝送されるコマンドを説明する前に、まずＡ回路３２を有していない場合のコマンドについて説明する。図５は、Ａ回路を有していない従来のＩＰ回路に伝送されるコマンドの内容を説明する図である。図５には、従来のＩＰ回路に伝送される５行分のコマンドが図示されており、当該コマンドの処理内容、制御レジスタＣ＿ＲＥＧの書込み値、プログラムがそれぞれ図示してある。
【００２５】
１行目の処理内容「ＡＬＵを使用する」の場合、プログラムは、制御レジスタＭ＿ＲＥＧにＡＬＵ回路３１を使用する“１”を書込む（ＷＲ）内容となるので“Ｍ＿ＲＥＧ  ＷＲ  １  ・・・０００＿００＿０１”となる。２行目の処理内容「ＲＥＧ１０＝ＲＥＧ１０＋ＲＥＧ２０」の場合、制御レジスタＣ＿ＲＥＧの書込み値が“・・・０００（加算）＿００（ＲＥＧ１０）＿００（ＲＥＧ２０）”で、プログラムは、制御レジスタＣ＿ＲＥＧに前述の書込み値を書込む（ＷＲ）内容となるので“Ｃ＿ＲＥＧ  ＷＲ  １  ・・・０００＿００＿００”となる。
【００２６】
同様に、３行目の処理内容「ＲＥＧ１１＝ＲＥＧ１１−ＲＥＧ２２」の場合、制御レジスタＣ＿ＲＥＧの書込み値が“・・・００１（減算）＿０１（ＲＥＧ１１）＿１０（ＲＥＧ２２）”で、プログラムは、制御レジスタＣ＿ＲＥＧに前述の書込み値を書込む（ＷＲ）内容となるので“Ｃ＿ＲＥＧ  ＷＲ  １  ・・・００１＿０１＿１０”となる。４行目の処理内容「ＲＥＧ１３＜＝ＲＥＧ２１」の場合、制御レジスタＣ＿ＲＥＧの書込み値が“・・・０１１（ムーブ）＿１１（ＲＥＧ１３）＿０１（ＲＥＧ２１）”で、プログラムは、制御レジスタＣ＿ＲＥＧに前述の書込み値を書込む（ＷＲ）内容となるので“Ｃ＿ＲＥＧ  ＷＲ  １  ・・・０１１＿１１＿０１”となる。５行目の処理内容「ＲＥＧ１２＝ＲＥＧ１２＋ＲＥＧ２１」の場合、制御レジスタＣ＿ＲＥＧの書込み値が“・・・０００（加算）＿１０（ＲＥＧ１２）＿０１（ＲＥＧ２１）”で、プログラムは、制御レジスタＣ＿ＲＥＧに前述の書込み値を書込む（ＷＲ）内容となるので“Ｃ＿ＲＥＧ  ＷＲ  １  ・・・０００＿１０＿０１”となる。
【００２７】
図５から分かるように、Ａ回路を有していない従来のＩＰ回路に伝送されるコマンドは、制御レジスタＣ＿ＲＥＧの書込み値の内容が、そのままプログラムの一部の内容になる。そのため、従来の半導体装置では、ＩＰ回路に伝送されるコマンドを含むプログラムを解析することで、制御レジスタＣ＿ＲＥＧにどのような処理をさせようとしているのかが容易に理解することができた。
【００２８】
そこで、半導体装置１０は、ＩＰ回路３にＡ回路３２を設けて、ＩＰ回路３２に伝送されるコマンドを含むプログラムを解析しても、制御レジスタＣ＿ＲＥＧにどのような処理をさせようとしているのかが容易に理解できないようにしてある。具体的に、Ａ回路３２が、プログラムの内容にある制御レジスタＣ＿ＲＥＧに書込む値と、設定値との排他的論理和を演算した値を、制御レジスタＣ＿ＲＥＧに書込む。
【００２９】
図６は、Ａ回路３２を有するＩＰ回路３に伝送されるコマンドの内容を説明する図である。図６には、ＩＰ回路３に伝送される６行分のコマンドが図示されており、当該コマンドの処理内容、制御レジスタＣ＿ＲＥＧの書込み値、プログラムがそれぞれ図示してある。
【００３０】
１行目の処理内容「ＡＬＵを使用する」の場合、プログラムは、制御レジスタＭ＿ＲＥＧにＡＬＵ回路３１を使用する“１”を書込む（ＷＲ）内容となるので“Ｍ＿ＲＥＧ  ＷＲ  １  ・・・０００＿００＿０１”となる。２行目の処理内容「設定値の書込み」の場合、プログラムは、設定値保持部３２２に設定値“・・・１０１＿１０＿１１”を書込む（ＷＲ）内容となるので“設定値  ＷＲ  １  ・・・１０１＿１０＿１１”となる。
【００３１】
３行目の処理内容「ＲＥＧ１０＝ＲＥＧ１０＋ＲＥＧ２０」の場合、制御レジスタＣ＿ＲＥＧの書込み値が“・・・０００（加算）＿００（ＲＥＧ１０）＿００（ＲＥＧ２０）”である。しかし、プログラムは、制御レジスタＣ＿ＲＥＧに前述の書込み値と設置値との排他的論理和を演算した値を書込む（ＷＲ）内容となる。具体的に、プログラムは、前述の書込み値“・・・０００＿００＿００”と設置値“・・・１０１＿１０＿１１”との排他的論理和を演算した値“・・・１０１＿１０＿１１”を含む“Ｃ＿ＲＥＧ  ＷＲ  １  ・・・１０１＿１０＿１１”となる。
【００３２】
同様に、４行目の処理内容「ＲＥＧ１１＝ＲＥＧ１１−ＲＥＧ２２」の場合、制御レジスタＣ＿ＲＥＧの書込み値が“・・・００１（減算）＿０１（ＲＥＧ１１）＿１０（ＲＥＧ２２）”である。しかし、プログラムは、前述の書込み値“・・・００１＿０１＿１０”と設置値“・・・１０１＿１０＿１１”との排他的論理和を演算した値“・・・１００＿１１＿０１”を含む“Ｃ＿ＲＥＧ  ＷＲ  １  ・・・１００＿１１＿０１”となる。
【００３３】
５行目の処理内容「ＲＥＧ１３＜＝ＲＥＧ２１」の場合、制御レジスタＣ＿ＲＥＧの書込み値が“・・・０１１（ムーブ）＿１１（ＲＥＧ１３）＿０１（ＲＥＧ２１）”である。しかし、プログラムは、前述の書込み値“・・・０１１＿１１＿０１”と設置値“・・・１０１＿１０＿１１”との排他的論理和を演算した値“・・・１１０＿０１＿１０”を含む“Ｃ＿ＲＥＧ  ＷＲ  １  ・・・１１０＿０１＿１０”となる。
【００３４】
６行目の処理内容「ＲＥＧ１２＝ＲＥＧ１２＋ＲＥＧ２１」の場合、制御レジスタＣ＿ＲＥＧの書込み値が“・・・０００（加算）＿１０（ＲＥＧ１２）＿０１（ＲＥＧ２１）”である。しかし、プログラムは、前述の書込み値“・・・０００＿１０＿０１”と設置値“・・・１０１＿１０＿１１”との排他的論理和を演算した値“・・・１０１＿００＿１０”を含む“Ｃ＿ＲＥＧ  ＷＲ  １  ・・・１０１＿００＿１０”となる。
【００３５】
図６から分かるように、Ａ回路３２を有するＩＰ回路３に伝送されるコマンドは、制御レジスタＣ＿ＲＥＧの書込み値の内容と、プログラムの内容とが異なる。そのため、半導体装置１０では、ＩＰ回路３に伝送されるコマンドを含むプログラムを解析しても、制御レジスタＣ＿ＲＥＧに書込む値が分からないため、制御レジスタＣ＿ＲＥＧにどのような処理をさせようとしているのかが容易に理解することができない。
【００３６】
また、半導体装置１０では、Ａ回路３２に設定する設置値を各社ごとに変更することで、複数の会社が開発した複数のプログラムを記憶素子２に記憶しても、プログラムの内容が他社（許可されない者）に分からない構成することができる。
【００３７】
図７は、Ａ社およびＢ社のＡ回路３２を有するＩＰ回路３に伝送されるコマンドの内容を説明する図である。図７には、ＩＰ回路３に伝送される６行分のコマンドが図示されており、当該コマンドの処理内容、制御レジスタＣ＿ＲＥＧの書込み値、Ａ社のプログラム内での制御レジスタＣ＿ＲＥＧの書込み値、Ｂ社のプログラム内での制御レジスタＣ＿ＲＥＧの書込み値がそれぞれ図示してある。
【００３８】
Ａ社の設定値の書込みは、“・・・１０１＿１０＿１１”で、Ｂ社の設定値の書込みは、“・・・０１０＿０１＿００”である。
【００３９】
処理内容「ＲＥＧ１０＝ＲＥＧ１０＋ＲＥＧ２０」の場合、制御レジスタＣ＿ＲＥＧの書込み値が“・・・０００（加算）＿００（ＲＥＧ１０）＿００（ＲＥＧ２０）”である。Ａ社のプログラムでの制御レジスタＣ＿ＲＥＧの書込み値は、前述の書込み値“・・・０００＿００＿００”と設置値“・・・１０１＿１０＿１１”との排他的論理和を演算した値“・・・１０１＿１０＿１１”となる。Ｂ社のプログラムでの制御レジスタＣ＿ＲＥＧの書込み値は、前述の書込み値“・・・０００＿００＿００”と設置値“・・・０１０＿０１＿００”との排他的論理和を演算した値“・・・０１０＿０１＿００”となる。
【００４０】
処理内容「ＲＥＧ１１＝ＲＥＧ１１−ＲＥＧ２２」の場合、制御レジスタＣ＿ＲＥＧの書込み値が“・・・００１（減算）＿０１（ＲＥＧ１１）＿１０（ＲＥＧ２２）”である。Ａ社のプログラムでの制御レジスタＣ＿ＲＥＧの書込み値は、前述の書込み値“・・・００１＿０１＿１０”と設置値“・・・１０１＿１０＿１１”との排他的論理和を演算した値“・・・１００＿１１＿０１”となる。Ｂ社のプログラムでの制御レジスタＣ＿ＲＥＧの書込み値は、前述の書込み値“・・・００１＿０１＿１０”と設置値“・・・０１０＿０１＿００”との排他的論理和を演算した値“・・・０１１＿００＿１０”となる。
【００４１】
処理内容「ＲＥＧ１３＜＝ＲＥＧ２１」の場合、制御レジスタＣ＿ＲＥＧの書込み値が“・・・０１１（ムーブ）＿１１（ＲＥＧ１３）＿０１（ＲＥＧ２１）”である。Ａ社のプログラムでの制御レジスタＣ＿ＲＥＧの書込み値は、前述の書込み値“・・・０１１＿１１＿０１”と設置値“・・・１０１＿１０＿１１”との排他的論理和を演算した値“・・・０１１＿０１＿１０”となる。Ｂ社のプログラムでの制御レジスタＣ＿ＲＥＧの書込み値は、前述の書込み値“・・・０１１＿１１＿０１”と設置値“・・・０１０＿０１＿００”との排他的論理和を演算した値“・・・１００＿１０＿０１”となる。
【００４２】
処理内容「ＲＥＧ１２＝ＲＥＧ１２＋ＲＥＧ２１」の場合、制御レジスタＣ＿ＲＥＧの書込み値が“・・・０００（加算）＿１０（ＲＥＧ１２）＿０１（ＲＥＧ２１）”である。Ａ社のプログラムでの制御レジスタＣ＿ＲＥＧの書込み値は、前述の書込み値“・・・０００＿１０＿０１”と設置値“・・・１０１＿１０＿１１”との排他的論理和を演算した値“・・・１０１＿００＿１０”となる。Ｂ社のプログラムでの制御レジスタＣ＿ＲＥＧの書込み値は、前述の書込み値“・・・０００＿１０＿０１”と設置値“・・・０１０＿０１＿００”との排他的論理和を演算した値“・・・０１０＿１１＿０１”となる。
【００４３】
図７から分かるように、同じ処理内容であっても、Ａ社とＢ社とで設定値が異なるので、Ａ社のプログラムでの制御レジスタＣ＿ＲＥＧの書込み値と、Ｂ社のプログラムでの制御レジスタＣ＿ＲＥＧの書込み値とが大きく異なることが分かる。そのため、Ａ社が、Ｂ社のプログラムを解析しても制御レジスタＣ＿ＲＥＧの書込み値が分からないので、制御レジスタＣ＿ＲＥＧにどのような処理をさせようとしているのかが理解できない。逆に、Ｂ社も、Ａ社のプログラムを解析しても制御レジスタＣ＿ＲＥＧの書込み値が分からないので、制御レジスタＣ＿ＲＥＧにどのような処理をさせようとしているのかが理解できない。
【００４４】
次に、半導体装置１０の具体的な動作手順は、以下のようになる。まず、Ａ回路３２に設定値（たとえば“・・・１０１＿１０＿１１”とする）を設定値保持部３２２に書込む。その後、プログラム作成者は、設定値保持部３２２に書込んだ設定値と、ＥＸＯＲ回路３２１とを考慮して、制御レジスタＣ＿ＲＥＧの処理内容を図６に示したプログラムのように作成する。作成したプログラムを、記憶素子２に記憶させる。
【００４５】
その後、ＣＰＵ１は、記憶素子２に記憶したプログラムを実行することで、ＩＰ回路３で実行することが可能なコマンドを生成し、該コマンドを含む信号ＩＰ＿ＤＩＮをデータバス４を介してＩＰ回路３に入力する。ＩＰ回路３は、信号ＩＰ＿ＤＩＮが入力されると、図６に示すプログラムの内容（ＩＰ回路３で実行するコマンド）をＡ回路３２で制御レジスタＣ＿ＲＥＧの書込み値に変換する。
【００４６】
その後、制御レジスタＣ＿ＲＥＧは、Ａ回路３２で変換された制御レジスタＣ＿ＲＥＧの書込み値を実行することで、所望の処理を実行することができる。
【００４７】
以上のように、本発明の実施の形態１に係る半導体装置１０は、ＩＰ回路３に入力するコマンドを、制御レジスタＣ＿ＲＥＧで処理することが可能なコマンドに変換するＡ回路３２を有するので、Ａ回路３２の設定値がわからないと、記憶素子２に記憶されているプログラムを読出しても、制御レジスタＣ＿ＲＥＧにどのような処理をさせようとしているのかが容易に理解することができない。また、Ａ回路３２は、ＩＰ回路３に入力するコマンド（図６に示すプログラムの内容）と、設置値との排他的論理和を演算することで制御レジスタＣ＿ＲＥＧの書込み値に変換するので、複雑な演算を処理する必要がなくＩＰ回路３に過度の負荷をかけずに、前述の構成を実現することができる。
【００４８】
なお、前述では、プログラムを解析しても、他社に制御レジスタＣ＿ＲＥＧの処理内容を理解できないようにすることについて記載した。しかし、本発明の実施の形態１に係る半導体装置１０は、他社に制御レジスタＣ＿ＲＥＧの処理内容を理解できないようにすることだけでなく、プログラムの実行制御にも効果がある。具体的に、Ａ回路を有していない従来のＩＰ回路の場合、第三者がコマンドの使用頻度解析や漏洩などの何らかの方法で図４に示したＡＬＵ回路３１の制御レジスタの仕様を理解すれば、ＩＰ回路３のＡＬＵ回路３１を使用することができる。しかし、Ａ回路３２を有するＩＰ回路３では、特定者（設定値を知る者）のみ、ＩＰ回路３のＡＬＵ回路３１を使用することができるので、サイドチャネルアタックなどの不正利用の対策を行なうことができる。
【００４９】
なお、サイドチャネルアタックとは、ＳＰＡ攻撃（Simple  Power  Analysis  attack：単純電力解析攻撃）、ＤＰＡ攻撃（Differential  Power  Analysis  attack：電力差分解析）、タイミング攻撃のような電力解析である。この電力解析は、毎回異なる入力値を用意して同じコマンドを何万回と演算させ、その演算結果や演算毎の消費電力変動を解析することでＩＰ回路３の内部情報を推定する。近年、測定機器の性能向上と低価格化でサイドチャネルアタックが容易に行える環境になっている。
【００５０】
そこで、本発明の実施の形態１に係る半導体装置１０のように、Ａ回路３２を有するＩＰ回路３では、特定者（設定値を知る者）のみ、ＩＰ回路３のＡＬＵ回路３１を使用すること（ＩＰ回路３へのコマンド入力）が可能になるので、電力解析のために何万回と同じコマンドを自由に入力することができない。つまり、本発明の実施の形態１に係る半導体装置１０に対してサイドチャネルアタックを企図する者は、ＩＰ回路３のみを実行させるような不適切なプログラムを用いることができず、半導体装置１０全体の全ての処理シーケンスを実行することが必要となり、サイドチャネルアタックを容易に行なうことができない。
【００５１】
（実施の形態２）
本発明の実施の形態２に係る半導体装置は、Ａ回路に設定する設定値を秘匿化する構成を備えている。図８は、本発明の実施の形態２に係る半導体装置の構成を示すブロック図である。図８に示す半導体装置１１は、たとえばＩＣカードやＩＣカードリーダなどのように複数の会社が開発したそれぞれのプログラムを１つのＩＣチップに搭載する組込み機器用のＩＣチップである。半導体装置１１は、ＣＰＵ１、記憶素子２、ＩＰ回路３、データバス４を含んでいる。さらに、ＩＰ回路３は、ＡＬＵ回路３１、Ａ回路３２、暗号回路３３を含んでいる。
【００５２】
なお、半導体装置１１は、ＩＰ回路３に暗号回路３３を含んでいる以外、図１に示した半導体装置１０の構成と同じであるため、同じ構成要素について同じ符号を付して詳細な説明を繰返さない。
【００５３】
Ａ回路３２は、ＥＸＯＲ回路３２１を有し、ＡＬＵ回路３１に伝送されたコマンドと、設定値（３２ビット）との排他的論理和を演算して、制御レジスタＣ＿ＲＥＧに演算結果を出力している。設定値は、各社で異なる値にしてあり、コマンドに含まれる情報に基づいて最適な値に設定される。
【００５４】
しかし、Ａ回路３２の設定値が他社に何らかの方法で知られると、記憶素子２に記憶されているプログラムを読出して、制御レジスタＣ＿ＲＥＧにどのような処理をさせようとしているのかが容易に理解することができる。
【００５５】
そこで、半導体装置１１では、ＩＰ回路３に暗号回路３３を有している。図９は、本発明の実施の形態２に係る半導体装置１１の暗号回路３３を説明するための模式図である。図９に示す暗号回路３３は、平文（暗号化されていない文）の設定値（平文）を暗号回路３３に入力するとＩＰ回路３に搭載されている秘密情報の鍵で暗号化され、暗号文の設定値（暗号文）を出力する。逆に、暗号回路３３は、暗号文の設定値（暗号文）を出力すると鍵で復号化され、平文の設定値（平文）を出力する。
【００５６】
半導体装置１１は、ＩＰ回路３に暗号回路３３を有することで、設定値を秘匿化することができる。なお、暗号回路３３が、共通鍵暗号方式であるＡＥＳ（Advanced  Encryption  Standard）暗号規格で暗号化を行なう場合、１２８ｂｉｔの平文を入力し、１２８ｂｉｔの鍵を用いて暗号化するので、出力される暗号文は１２８ｂｉｔとなる。設定値は、３２ｂｉｔであれば、暗号回路３３が出力した暗号文の一部を使用する。たとえば、暗号回路３３は、０ｂｉｔ目から３１ｂｉｔ目までの３２ｂｉｔの暗号文を使用する場合や、１ｂｉｔ目から３２ｂｉｔ目までの３２ｂｉｔの暗号文を使用する場合などがある。
【００５７】
前述の暗号回路３３では、入力する平文に対して、出力される暗号文は鍵が同じであれば常に同じであるため、使用頻度が増えることで解析される可能性がある。そこで、別の構成の暗号回路３３を説明する。図１０は、本発明の実施の形態２に係る半導体装置１１の別の構成の暗号回路を説明するための模式図である。図１０に示す暗号回路３３ａは、図９に示した暗号回路３３と異なり、出力した暗号文を平文とともに入力して暗号化する構成である。そのため、暗号回路３３ａは、鍵が同じで、同じ平文が入力されても、出力されるたびに暗号文が異なる。図１１は、図１０に示す暗号回路３３ａで暗号化した設定値を示す図である。図１１に示す設定値は、プログラムの各行で値が異なる。
【００５８】
次に、暗号回路３３の動作について説明する。図１２は、暗号回路３３の動作を説明するため図である。プログラムの実行タイミングを示すに図１２（ａ）おいて、暗号回路３３は、最初の暗号回路演算期間（プログラムの１行目を実行）で、１２８ｂｉｔの平文と１２８ｂｉｔの鍵とを演算して図１２（ｂ）に示す１２８ｂｉｔの設定値を得る。ＩＰ回路３は、得た１２８ｂｉｔの設定値を４つの３２ｂｉｔの設定値に分け、分けた３２ｂｉｔの設定値を用いて４行分のプログラムを実行する（プログラムの２行目〜５行目を実行）。次の暗号回路演算期間で、１２８ｂｉｔの平文と１２８ｂｉｔの鍵とを演算して１２８ｂｉｔの設定値を得る。ＩＰ回路３は、得た１２８ｂｉｔの設定値を４つの３２ｂｉｔの設定値に分け、分けた３２ｂｉｔの設定値を用いて次の４行分のプログラムを実行する。以降、暗号回路３３およびＩＰ回路３は、同様の処理を繰返す。なお、図１２（ａ）に示すように、暗号回路演算期間は、プログラムを実行することができない待ち時間となる。しかし、ＩＰ回路３内にバッファを搭載することで、暗号回路演算期間もプログラムを実行する構成にすることができる。
【００５９】
（変形例）
暗号回路３３から出力する設定値をプログラムの各行で異なるように構成するために、特性多項式を用いた線形フィードバックシフトレジスタ（ＬＦＳＲ：Lnear  Feedback  Shift  Register）を用いて変形例を示す。
【００６０】
図１３は、本発明の実施の形態２の変形例に係る半導体装置の構成を示すブロック図である。図１３に示す半導体装置１１ａは、ＣＰＵ１、記憶素子２、ＩＰ回路３、データバス４を含んでいる。さらに、ＩＰ回路３は、ＡＬＵ回路３１、Ａ回路３２、暗号回路３３、Ｍ系列回路３４を含んでいる。
【００６１】
なお、半導体装置１１ａは、ＩＰ回路３にＭ系列回路３４を含んでいる以外、図８に示した半導体装置１１の構成と同じであるため、同じ構成要素について同じ符号を付して詳細な説明を繰返さない。
【００６２】
Ｍ系列回路３４は、特性多項式を用いた線形フィードバックシフトレジスタであり、入力した平文の設定値、または暗号文の設定値を、実行するプログラムの各行で異なる値に変化させて出力する回路である。図１４は、本発明の実施の形態２に係る半導体装置１１ａのＭ系列回路３４を説明するための模式図である。図１４に示すＭ系列回路３４は、暗号回路３３でＩＰ回路３に搭載されている秘密情報の鍵で暗号化され平文の設定値を入力し、実行するプログラムの各行で異なる値に変化させて出力する。
【００６３】
図１５は、本発明の実施の形態２に係る半導体装置１１ａのＭ系列回路３４の動作を説明するためのタイミングチャートである。図１５のタイミングチャートに示すように、プログラムは、書込み値を制御レジスタＣ＿ＲＥＧに書込むクロック信号にあわせて１行ごとに実行される。また、Ｍ系列回路３４は、レジスタであるため暗号回路のように演算期間を考慮する必要がないので、実行するプログラムの各行にあわせて設置値を出力することができ、プログラムを実行することができない待ち時間を不要にすることができる。
【００６４】
（実施の形態３）
ＩＰ回路に含まれるＡ回路の機能をＯＮ／ＯＦＦすることができる構成について説明する。図１６は、本発明の実施の形態３に係る半導体装置のＩＰ回路の構成を示すブロック図である。図１６に示すＩＰ回路３は、ＡＬＵ回路３１、Ａ回路３２を含んでいる。Ａ回路３２は、ＥＸＯＲ回路３２１、設定値保持部３２２、切替回路３２３を有している。なお、ＩＰ回路３は、切替回路３２３を含んでいる以外、図２に示したＩＰ回路３の構成と同じであるため、同じ構成要素について同じ符号を付して詳細な説明を繰返さない。また、図１６に示すＩＰ回路３を含む半導体装置１１の構成も、図１に示した半導体装置１０の構成と同じであるため、同じ構成要素について同じ符号を付して詳細な説明を繰返さない。
【００６５】
切替回路３２３は、設定値保持部３２２で保持した設定値と、ＩＰ回路３で実行するコマンドを含む信号ＩＰ＿ＤＩＮとの排他的論理和の演算処理を行なうか否かを、信号ＳＥＣＤＩＮ＿ＭＯＤＥ（ＯＮ／ＯＦＦｂｉｔ）の入力により切替える回路である。具体的に、切替回路３２３は、信号ＳＥＣＤＩＮ＿ＭＯＤＥが「ＯＦＦｂｉｔ＝“Ｌ”」であれば、設定値がＥＸＯＲ回路３２１に入力されず、信号ＩＰ＿ＤＩＮが直接、制御レジスタＣ＿ＲＥＧに書込まれる。
【００６６】
図１７は、本発明の実施の形態３に係るＡＬＵ回路３１の制御レジスタの仕様を示す図である。図１７に示すように、制御レジスタＭ＿ＲＥＧの仕様には、実施の形態１と同様に、ＡＬＵ回路３１を使用するか、使用しないかを指定するコマンドＣＯＲＥ＿ＥＮについて記載してある。さらに、制御レジスタＭ＿ＲＥＧの仕様には、Ａ回路３２機能のＯＮ／ＯＦＦ機能なし、Ａ回路３２機能のＯＮ／ＯＦＦ機能ありを指定するコマンドＳＥＣＤＩＮ＿ＭＯＤＥについて記載してある。コマンドＣＯＲＥ＿ＥＮは、“０”のときＡＬＵ回路３１を使用しない、“１”のときＡＬＵ回路３１を使用するを指定する。コマンドＳＥＣＤＩＮ＿ＭＯＤＥは、“０”のときＡ回路３２機能のＯＮ／ＯＦＦ機能なし、“１”のときＡ回路３２機能のＯＮ／ＯＦＦ機能ありを指定する。
【００６７】
ＩＰ回路３が、Ａ回路３２機能のＯＮ／ＯＦＦ機能ありで、Ａ回路３２機能のＯＦＦとＯＮとを切替えることで、プログラム作成・デバックを効果的に行うことができる。つまり、プログラム作成時（プログラム開発初期段階）において、Ａ回路３２機能をＯＦＦとすることで、プログラム作成者は、設定値保持部３２２に書込んだ設定値と、ＥＸＯＲ回路３２１とを考慮することなく、プログラム作成・デバックを行うことが可能となる。
【００６８】
プログラム作成が完了した後に、他社へプログラムを提供するとき（自社からプログラム出す）や、ＩＣチップ全体でプログラム作成・デバッグするとき、Ａ回路３２機能をＯＮにすることで、実施の形態１、２で説明したように、他社に制御レジスタＣ＿ＲＥＧにどのような処理をさせようとしているのかが容易に理解できないようにすることができる。
【００６９】
なお、Ａ回路３２機能のＯＮ／ＯＦＦ機能なしの場合、プログラム作成者は、プログラム作成・デバックのたび、設定値保持部３２２に書込んだ設定値と、ＥＸＯＲ回路３２１とを考慮してプログラムの内容を毎回変換する必要があり、作業の負担が大きい。Ａ回路３２機能のＯＮ／ＯＦＦ機能なしの場合、プログラム作成者は、プログラム作成・デバックを十分行った後に、設定値保持部３２２に書込んだ設定値と、ＥＸＯＲ回路３２１とを考慮してプログラムの内容を１回変換するだけでよく、作業の負担が小さい。
【００７０】
（変形例）
認証した場合に、ＩＰ回路に含まれるＡ回路の機能をＯＮ／ＯＦＦすることができる構成について説明する。図１８は、本発明の実施の形態３の変形例に係る半導体装置のＡ回路の構成を示すブロック図である。図１８に示すＩＰ回路３は、ＡＬＵ回路３１、Ａ回路３２、暗号回路３３、Ｍ系列回路３４、暗号回路（認証機能）３５とを含んでいる。Ａ回路３２は、ＥＸＯＲ回路３２１、設定値保持部３２２、切替回路３２３を有している。なお、ＩＰ回路３は、暗号回路（認証機能）３５を含んでいる以外、図１３に示したＩＰ回路３の構成と同じであるため、同じ構成要素について同じ符号を付して詳細な説明を繰返さない。
【００７１】
暗号回路（認証機能）３５は、パスワード入力などで認証を行ない、認証がＯＫの場合“Ｈ”を出力し、認証がＮＧの場合“Ｌ”を出力する。暗号回路（認証機能）３５が“Ｈ”の場合、制御レジスタＣ＿ＲＥＧからの読出しが禁止される。なお、制御レジスタＣ＿ＲＥＧからの読出しを禁止した際は、ポーリングするビットを１つの制御レジスタにまとめることにより、読出せるアドレスを制限しやすくすることができる回路構成を簡単にすることができ、バグの混入を減らすことができる。
【００７２】
図１９は、本発明の実施の形態３の変形例に係るＡ回路３２を有するＩＰ回路３に伝送されるコマンドの内容を説明する図である。図１９には、ＩＰ回路３に伝送される７行分のコマンドが図示されており、当該コマンドの処理内容、制御レジスタＣ＿ＲＥＧの書込み値、プログラムがそれぞれ図示してある。
【００７３】
１行目の処理内容「ＡＬＵを使用する」の場合、プログラムは、制御レジスタＭ＿ＲＥＧにＡＬＵ回路３１を使用する“１”を書込む（ＷＲ）内容となるので“Ｍ＿ＲＥＧ  ＷＲ  １  ・・・０００＿００＿０１”となる。２行目の処理内容「Ｍ系列の初期値設定」の場合、プログラムは、暗号回路３５に鍵と平文とを入力することで設定値の結果「・・・１０１＿１０＿１１」となる。３行目の処理内容「認証」の場合、プログラムは、認証処理を行ない、結果がＯＫとなる。４行目以降は、図６の３行目以降と同じであるため、詳細な説明を繰返さない。
【００７４】
（実施の形態４）
本発明の実施の形態４に係る半導体装置は、Ａ回路に排他的論理和回路を用いるのではなく、暗号回路を用いてよりコマンドを秘匿化する構成を備えている。図２０は、本発明の実施の形態４に係る半導体装置のＩＰ回路の構成を示すブロック図である。図２０に示すＩＰ回路３は、ＡＬＵ回路３１、Ａ回路３２、暗号回路３３を含んでいる。Ａ回路３２は、ＥＸＯＲ回路３２１に代えて、暗号回路３３の出力を、制御レジスタにＣ＿ＲＥＧに書込むか否かを切替える演算回路３２４を有している。なお、ＩＰ回路３は、演算回路３２４を含んでいる以外、図２に示したＩＰ回路３の構成と同じであるため、同じ構成要素について同じ符号を付して詳細な説明を繰返さない。また、図２０に示すＩＰ回路３を含む半導体装置１１の構成も、図１に示した半導体装置１０の構成と同じであるため、同じ構成要素について同じ符号を付して詳細な説明を繰返さない。
【００７５】
実施の形態１のようにＥＸＯＲ回路３２１を用いたＡ回路３２は、入力する信号ＩＰ＿ＤＩＮを１ｂｉｔ変化させた場合、制御レジスタＣ＿ＲＥＧの書込み値が１ｂｉｔ変化するだけである。しかし、暗号回路３３を用いたＡ回路３２は、入力する信号ＩＰ＿ＤＩＮを１ｂｉｔ変化させた場合でも、制御レジスタＣ＿ＲＥＧの書込み値が多ｂｉｔ変化する。そのため、暗号回路３３を用いたＡ回路３２は、より秘匿性の高いコマンドに変更することができる。
【００７６】
図２１は、本発明の実施の形態４に係るＡ回路３２を有するＩＰ回路３に伝送されるコマンドの内容を説明する図である。図２１には、ＩＰ回路３に伝送される６行分のコマンドが図示されており、当該コマンドの処理内容、制御レジスタＣ＿ＲＥＧの書込み値、暗号文、暗号化されたプログラムがそれぞれ図示してある。
【００７７】
１行目の処理内容「ＡＬＵを使用する」の場合、プログラムは、制御レジスタＭ＿ＲＥＧにＡＬＵ回路３１を使用する“１”を書込む（ＷＲ）内容となるので“Ｍ＿ＲＥＧ  ＷＲ  １  ・・・０００＿００＿０１”となる。２行目の処理内容「復号鍵と復号モードにする」の場合、プログラムは、ＡＥＳ設定プログラムを実行する。
【００７８】
３行目の処理内容「ＲＥＧ１０＝ＲＥＧ１０＋ＲＥＧ２０」の場合、暗号回路３３は、暗号化されたプログラムの“ＡＥＳ＿ＤＷＩＮ  ＷＲ  １  ・・・１０１＿１１＿０１”から、暗号文“１０１＿１１＿０１”を復号して、制御レジスタＣ＿ＲＥＧの書込み値“・・・０００（加算）＿００（ＲＥＧ１０）＿００（ＲＥＧ２０）”とする。
【００７９】
同様に、４行目の処理内容「ＲＥＧ１１＝ＲＥＧ１１−ＲＥＧ２２」の場合、暗号回路３３は、暗号化されたプログラムの“ＡＥＳ＿ＤＷＩＮ  ＷＲ  １  ・・・００１＿１０＿００”から、暗号文“００１＿１０＿００”を復号して、制御レジスタＣ＿ＲＥＧの書込み値“・・・００１（減算）＿０１（ＲＥＧ１１）＿１０（ＲＥＧ２２）”とする。
【００８０】
５行目の処理内容「ＲＥＧ１３＜＝ＲＥＧ２１」の場合、暗号回路３３は、暗号化されたプログラムの“ＡＥＳ＿ＤＷＩＮ  ＷＲ  １  ・・・１００＿１１＿１０”から、暗号文“１００＿１１＿１０”を復号して、制御レジスタＣ＿ＲＥＧの書込み値“・・・０１１（ムーブ）＿１１（ＲＥＧ１３）＿０１（ＲＥＧ２１）”とする。
【００８１】
６行目の処理内容「ＲＥＧ１２＝ＲＥＧ１２＋ＲＥＧ２１」の場合、暗号回路３３は、暗号化されたプログラムの“ＡＥＳ＿ＤＷＩＮ  ＷＲ  １  ・・・１０１＿００＿１０”から、暗号文“１０１＿００＿１０”を復号して、制御レジスタＣ＿ＲＥＧの書込み値“・・・０００（加算）＿１０（ＲＥＧ１２）＿０１（ＲＥＧ２１）”とする。
【００８２】
図２１から分かるように、暗号回路３３を用いたＡ回路３２は、制御レジスタＣ＿ＲＥＧの書込み値に対して、暗号文が大幅に異なることになるので、コマンドの秘匿性を高めることができる。
【００８３】
本発明の実施の形態４に係るＩＰ回路３の動作について説明する。図２２は、本発明の実施の形態４に係る半導体装置のＩＰ回路３の入出力信号を詳しく説明したブロック図である。図２３は、本発明の実施の形態４に係る半導体装置のＩＰ回路３の入出力信号のタイミングチャートである。なお、暗号回路３３は、ＡＥＳ暗号のＥＣＢ（Electronic  CodeBook）を利用する場合について説明する。
【００８４】
まず、信号ＳＥＣＤＩＮ＿ＭＯＤＥを“Ｌ”にして、Ａ回路３２の機能を機能なしにしてＡＬＵ回路３１のプログラムを作成する。プログラム作成の完了後、暗号回路３３に鍵を入力して、図５に示す２行目から５行目までの制御レジスタＣ＿ＲＥＧの書込み値を、暗号回路３３の入力値として暗号化する。暗号化された制御レジスタＣ＿ＲＥＧの書込み値を、図２１に示す３行目から６行目までの暗号文とし、暗号化されたプログラムとして暗号回路３３の入力値として設定する。
【００８５】
次に、信号ＳＥＣＤＩＮ＿ＭＯＤＥを“Ｈ”にして、Ａ回路３２の機能を機能ありにし、暗号回路３３の鍵を復号鍵に設定する。図２１に示す３行目から６行目までの暗号化されたプログラムを、ＩＰ回路３に入力する。Ａ回路３２は、暗号回路３３から出力した信号ＡＥＳ＿ＲＤＲＤＹと、ＡＬＵ回路３１から出力した信号ＡＬＵ＿ＷＲＲＤＹとがともに“Ｈ”であれば、暗号回路３３で復号化した制御レジスタＣ＿ＲＥＧの書込み値を、制御レジスタＣ＿ＲＥＧに書込むように、信号ＡＬＵ＿ＣＲＥＧ＿ＷＲ＿ＥＮをＡＬＵ回路３１に出力する回路構成を含んでいる。また、Ａ回路３２は、信号ＳＥＣＤＩＮ＿ＭＯＤＥの信号レベルを反転させ、信号ＡＥＳ＿ＤＷＩＮ＿ＳＥＬとして出力するインバータ回路も含んでいる。
【００８６】
図２３のタイミングチャートに示すように、クロック信号ＣＬＫにあわせて、信号ＡＥＳ＿ＤＷＩＮに書込み、信号ＡＥＳ＿ＤＷＩＮの書込み終了後に暗号回路（ＡＥＳ）３３の演算が開始する。暗号回路（ＡＥＳ）３３の演算が終了すると、信号ＡＥＳ＿ＲＤＲＤＹ、信号ＡＬＵ＿ＷＲＲＤＹ、および信号ＡＬＵ＿ＣＲＥＧ＿ＷＲ＿ＥＮが出力される。なお、信号ＡＬＵ＿ＷＲＲＤＹ、および信号ＡＬＵ＿ＣＲＥＧ＿ＷＲ＿ＥＮの周期は、クロック信号ＣＬＫの周期の略２倍である。
【００８７】
また、暗号回路３３は、１２８ｂｉｔ単位で入力となるので、制御レジスタＣ＿ＲＥＧの書き込み値が１２８ｂｉｔ単位でない場合、ＮＯＰ（no  operation）等の処理を入れて調整を行なう。
【００８８】
実施の形態４に係るＩＰ回路３は、前述したように暗号化した制御レジスタＣ＿ＲＥＧの書込み値を１度出力した後、暗号化したプログラムを作成する作業が必要になる。この作業をプログラム作成者自身が行なってもよいが、プログラム作成者自身の負担を軽減するために、暗号化した制御レジスタＣ＿ＲＥＧの書込み値を生成するプログラムであるコンパイラ等を用いてもよい。コンパイラ等を用いることで、プログラム作成者は暗号回路３３を考慮することなく、プログラムの作成・デバックを効果的に行うことができる。
【００８９】
図２４は、コンパイラと半導体装置とを組合わせた半導体装置の開発システムの構成を示すブロック図である。図２４に示す半導体装置の開発システム１００は、半導体装置１１と、コンパイラ２０とを含んでいる。半導体装置１１は、図８に示す半導体装置１１と同じ構成であるため、同じ構成要素について同じ符号を付して詳細な説明を繰返さない。
【００９０】
コンパイラ２０は、制御レジスタＣ＿ＲＥＧで処理することが可能なコマンドを含むプログラムを生成し、半導体装置１１のデータバス４を介して記憶素子２に書込む。具体的に、コンパイラ２０は、制御レジスタＣ＿ＲＥＧの書込み値を、暗号回路３３の入力値として暗号化する変換手段２０１を有している。変換手段２０１は、ＯＮ／ＯＦＦｂｉｔの入力により、制御レジスタＣ＿ＲＥＧの書込み値を暗号化する、暗号化しないを切替えることが可能であり、Ａ回路の機能あり、なしと対応して動作する。
【００９１】
次に、半導体装置の開発システム１００の動作について説明する。まず、変換手段２０１に、ＡＥＳ暗号の鍵をセットする。図５に示す２行目から５行目までのプログラムから制御レジスタＣ＿ＲＥＧの書込み値を抜出す。抜出した制御レジスタＣ＿ＲＥＧの書込み値をＡＥＳ暗号で暗号化する。なお、変換手段２０１は、１２８ｂｉｔ単位で入力となるので、制御レジスタＣ＿ＲＥＧの書き込み値が１２８ｂｉｔ単位でない場合、ＮＯＰ（no  operation）等の処理を入れて調整を行なう。
【００９２】
暗号化した制御レジスタＣ＿ＲＥＧの書込み値を、図５に示す２行目から５行目までのプログラムの制御レジスタＣ＿ＲＥＧの書込み値と置換える。さらに、図５に示す２行目から５行目までのプログラムのコマンド名も“Ｃ＿ＲＥＧ”から“ＡＥＳ＿ＤＷＩＮ”に置換える。変換手段２０１で変換したプログラムを、データバス４を介して記憶素子２に書込む。
【００９３】
コンパイラ２０が変換手段２０１を有することで、半導体装置（ＩＣチップ）１１の提供側は、各社にコンパイラ２０を配布する際、会社ごとに異なる鍵と、共用（１種類）のするコンパイラ２０とを配布することが可能になる。配布後の鍵はプログラム開発会社が管理する。
【００９４】
そのため、半導体装置１１の提供側は、コンパイラ２０の提供先の会社が多くても、１種類共用のコンパイラ２０を配布するだけで済み、数種類のコンパイラ２０を製造（作成）する時間を短縮（コスト削減）することができる。また、コンパイラ２０のバージョン管理も容易になる。
【００９５】
なお、半導体装置１１の提供側は、会社ごとに異なる鍵と、共用（１種類）のコンパイラ２０とを別々に配布する場合に限定されるものではなく、たとえば、コンパイラ２０の提供先の会社が少なければ、コンパイラ２０に埋込んで配布してもよい。つまり、半導体装置１１の提供側は、会社ごとに異なる鍵と、共用（１種類）のコンパイラ２０とで構成した各社専用のコンパイラ２０を作成し配布することになる。コンパイラ２０に鍵を埋め込むことで、半導体装置１１の提供側は、どのように制御レジスタＣ＿ＲＥＧの書込み値を作成しているのかまで秘匿することができる。また、プログラム作成者は、Ａ回路３２の機能を知らなくても、従来どおりプログラムを作成することができる。
【００９６】
なお、コンパイラ２０は、半導体装置（ＩＣチップ）１１を取付けた基板を介して接続されたコンピュータに読込まれ、実行されるソフトウェアである。
【００９７】
（変形例）
実施の形態１〜４に係るＡ回路３２は、ＥＸＯＲ回路３２１、または暗号回路３５の出力を切替える演算回路３２４を含む構成であったが、これに限定されるものではなく、ＩＰ回路３に入力するコマンド（制御レジスタＣ＿ＲＥＧの書込み値）を、制御レジスタＣ＿ＲＥＧで処理することが可能なコマンド（制御レジスタＣ＿ＲＥＧの書込み値）に変換する変換回路であれば、いずれの回路構成であってもよい。
【００９８】
たとえば、図２５は、本発明の変形例に係るＡ回路３２の構成を示すブロック図である。図２５に示すＡ回路３２は、入力した信号ＩＰ＿ＤＩＮを、複数の制御レジスタＣ＿ＲＥＧのいずれか１つに出力するセレクタ回路３２５を有している。そのため、Ａ社には、入力した信号ＩＰ＿ＤＩＮ０が制御レジスタＣ＿ＲＥＧ１、入力した信号ＩＰ＿ＤＩＮ１が制御レジスタＣ＿ＲＥＧ０、入力した信号ＩＰ＿ＤＩＮ２が制御レジスタＣ＿ＲＥＧ２にそれぞれ出力するようにセレクタ回路３２５を設定する。Ｂ社には、入力した信号ＩＰ＿ＤＩＮ０が制御レジスタＣ＿ＲＥＧ２、入力した信号ＩＰ＿ＤＩＮ１が制御レジスタＣ＿ＲＥＧ０、入力した信号ＩＰ＿ＤＩＮ２が制御レジスタＣ＿ＲＥＧ１にそれぞれ出力するようにセレクタ回路３２５を設定する。これにより、Ａ回路３２にセレクタ回路３２５を用いて、実施の形態１〜４に係るＡ回路３２と同様、Ａ社とＢ社との間でプログラムの内容を秘匿化することができる。
【００９９】
またたとえば、図２６は、本発明の別の変形例に係るＡ回路３２の構成を示すブロック図である。図２６に示すＡ回路３２は、入力した信号ＩＰ＿ＤＩＮの複数のｂｉｔの値を演算して、複数の制御レジスタＣ＿ＲＥＧうちの１つに出力する演算器３２６を有している。そのため、Ａ社には、入力した信号ＩＰ＿ＤＩＮ０〜２が制御レジスタＣ＿ＲＥＧ０、入力した信号ＩＰ＿ＤＩＮ３〜５が制御レジスタＣ＿ＲＥＧ１にそれぞれ出力するように演算器３２６を設定する。Ｂ社には、入力した信号ＩＰ＿ＤＩＮ１〜２が制御レジスタＣ＿ＲＥＧ０、入力した信号ＩＰ＿ＤＩＮ０，４，５が制御レジスタＣ＿ＲＥＧ１にそれぞれ出力するように演算器３２６を設定する。これにより、Ａ回路３２に演算器３２６を用いて、実施の形態１〜４に係るＡ回路３２と同様、Ａ社とＢ社との間でプログラムの内容を秘匿化することができる。
【０１００】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１０１】
２  記憶素子、３  ＩＰ回路、３１  ＡＵＬ回路、３２  Ａ回路、４  データバス、１０，１１，１１ａ  半導体装置、２０  コンパイラ、３３，３３ａ，３５  暗号回路、３４  Ｍ系列回路、１００  開発システム、２０１  変換手段、３２１  ＥＸＯＲ回路、３２２  設定値保持部、３２３  切替回路、３２４  演算回路、３２５  セレクタ回路、３２６  演算器。
【図１】
2013029998.tif 000003
【図２】
2013029998.tif 000004
【図３】
2013029998.tif 000005
【図４】
2013029998.tif 000006
【図５】
2013029998.tif 000007
【図６】
2013029998.tif 000008
【図７】
2013029998.tif 000009
【図８】
2013029998.tif 000010
【図９】
2013029998.tif 000011
【図１０】
2013029998.tif 000012
【図１１】
2013029998.tif 000013
【図１２】
2013029998.tif 000014
【図１３】
2013029998.tif 000015
【図１４】
2013029998.tif 000016
【図１５】
2013029998.tif 000017
【図１６】
2013029998.tif 000018
【図１７】
2013029998.tif 000019
【図１８】
2013029998.tif 000020
【図１９】
2013029998.tif 000021
【図２０】
2013029998.tif 000022
【図２１】
2013029998.tif 000023
【図２２】
2013029998.tif 000024
【図２３】
2013029998.tif 000025
【図２４】
2013029998.tif 000026
【図２５】
2013029998.tif 000027
【図２６】
2013029998.tif 000028