説明

データ処理装置

【課題】 顧客プログラムの保護の強化を図る。
【解決手段】 命令コードを実行可能な中央処理装置(1600)と、暗号化された命令コードを保持可能な命令キャッシュ(100)と、上記中央処理装置と上記命令キャッシュとの間に配置され、上記暗号化された命令コードを、上記命令キャッシュを介して取り込み、それを復号化して上記中央処理装置に供給するための命令コード復号化論理(300)と、を含んでデータ処理装置を構成することにより、上記命令キャッシュの内容を暗号化された命令コードとし、復号化された命令コードが命令キャッシュに格納されるのを回避することで、顧客プログラムの保護の強化を達成する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理技術、特に顧客プログラムの保護強化を図るための技術に関する。
【背景技術】
【0002】
ソフトウエア及びデータの保護に関する技術として、中央処理装置に暗号化・復号部及び鍵格納部を付加して、記憶装置に格納されている暗号化された機械語命令及びデータを復号部によって復号して中央処理装置で実行させ、また中央処理装置から記憶装置にデータを格納する時は暗号化部によってデータを暗号化して格納するようにした技術が知られている(例えば特許文献1参照)。
【0003】
また、情報処理装置においてソフトウエア等の機密保護を図る際に、暗号強度と計算機のスループットがトレードオフにならないようにし、もって機密保護と高速処理とをともに実現できるようにすることを目的とした技術として、第2の記憶手段に格納されている暗号化された命令及びデータを復号して第1の記憶手段に格納してデータ処理手段で実行及び処理し、データ処理手段から第2の記憶手段にデータを出力する時は一旦第1の記憶手段に格納した後、暗号化手段で暗号化して第2の記憶手段に格納する技術が知られている(例えば特許文献2参照)。
【0004】
【特許文献1】特開平2−155034号公報(図1)
【特許文献2】特開平9−259044号公報(図1)
【発明の開示】
【発明が解決しようとする課題】
【0005】
従来はメモリ上の暗号化された命令コードを一旦復号化して命令キャッシュやユーザRAM(ランダム・アクセス・メモリ)に置いてから中央処理装置によって命令が処理されていた。この方式では、命令キャッシュやユーザRAMには復号化された命令コードが存在するため、デバッグツールや悪意を持ったプログラムにより顧客プログラムの機密保護が守られないことがあり得る。そこで、命令キャッシュやユーザRAMとCPUの間で命令コードの復号化を実施することが必要となる。それについて本願発明者が検討したところ、中央処理装置で命令が処理される直前に復号化すると、復号化に要する処理時間が大きいため、命令の処理性能が大幅に劣化してしまうことが見いだされた。
【0006】
本発明の目的は、顧客プログラムの保護の強化を図ることにある。
【0007】
本発明の別の目的は、命令の処理性能を劣化させることなく、顧客プログラムの保護の強化を図るための技術を提供することにある。
【0008】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【0009】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【0010】
すなわち、命令コードを実行可能な中央処理装置と、暗号化された命令コードを保持可能な命令キャッシュと、上記中央処理装置と上記命令キャッシュとの間に配置され、上記暗号化された命令コードを、上記命令キャッシュを介して取り込み、それを復号化して上記中央処理装置に供給するための命令コード復号化論理と、を含んでデータ処理装置を構成する。
【0011】
上記の手段によれば、命令キャッシュと中央処理装置との間に命令コード復号化論理が設けられているため、命令キャッシュの内容は暗号化された命令コードとされ、復号化された命令コードが命令キャッシュに格納されることがない。このことが、顧客プログラムの保護の強化を達成する。
【0012】
このとき、命令の逐次読み出し時や分岐命令発生時の命令実行処理においてオーバヘッドが生じないようにするには、上記命令コード復号化論理において、上記暗号化された命令コードをパイプライン処理によって復号化すると良い。
【0013】
また、分岐命令発生時の分岐先命令コードの復号化処理によるオーバヘッドを隠蔽化するには、分岐先命令アドレスに対応して、分岐先命令コードの復号化後の命令を、上記分岐命令アドレスに関連付けて保持可能な信号変換バッファを上記中央処理装置内に設けると良い。
【0014】
そして、命令コード復号化によるオーバヘッドと分岐命令発生時の分岐先命令読み出しに関するオーバヘッドとの双方の隠蔽化を可能とするには、命令フェッチアドレスをキーとして当該命令の分岐先アドレスを出力可能な動的分岐予測機構としての分岐先アドレスバッファを上記中央処理装置内に設け、上記分岐先アドレスバッファを介して投機的に命令フェッチを実行するようにすると良い。
【0015】
さらに、上記構成のデータ処理装置は、マイクロコンピュータとして一つの半導体基板に形成することができる。
【発明の効果】
【0016】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【0017】
すなわち、顧客プログラムの保護の強化を図るための技術を提供することができる。
【発明を実施するための最良の形態】
【0018】
図10には、本発明にかかるデータ処理装置の一例であるマイクロコンピュータが示される。
【0019】
図10に示されるデータ処理装置は、特に制限されないが、命令キャッシュ(INS−CACHE)100、命令コード復号化論理(INS−DEC)300、中央処理装置(CPU)1600、及びメモリ(MEM)1500とを含み、公知の半導体集積回路製造技術により、例えば単結晶シリコン基板などの一つの半導体基板に形成される。暗号化された命令コードは、上記命令キャッシュ100を介して上記命令コード復号化論理300に伝達される。上記命令コード復号化論理300は、暗号化された命令コードを上記CPU1600の直前で復号化してから上記CPU1600に供給する。上記CPU1600は、上記命令コード復号化論理300によって復号化された命令を実行する。例えば、上記暗号化された命令コードは、上記CPU1600や図示しないコプロセッサで暗号化し、上記MEM1500に格納されていてもよいし、上記MEM1500に予め格納されていてもよいし、上記データ処理装置の外部から暗号化された命令コードが伝達されるものであってもよい。
【0020】
図1には、上記CPU1600の詳細な構成例が示される。
【0021】
図1に示されるようにCPU1600は、命令キュー500、命令デコーダ(DEC)600、オペランドアドレス加算器(OP−ADR−ADD)700、オペランドキャッシュ(OP−CACHE)800、オペランドデータ復号化論理(OP−DEC)900、命令実行部(INS−PRA)1000、オペランドデータ暗号化論理(OP−COD)1100、命令アドレス加算器(INS−ADR−ADD)1200、逐次命令フェッチアドレス生成論理(ADR−CRE)1300、及びセレクタ90−1,90−2,90−3を含んで成る。
【0022】
上記命令キュー500は、上記命令コード復号化論理300から伝達された32バイトの命令を格納する。上記セレクタ90−1は、上記命令コード復号化論理300の出力と、上記命令キュー500の出力とを選択的に命令デコーダ600に伝達する。命令デコーダ600は、上記セレクタ90−1を介して伝達された命令の解読を行う。オペランドアドレス加算器700は命令のオペランドアドレスを生成する。オペランドキャッシュ800は、上記オペランドアドレスによって生成される。オペランドデータ復号化論理900は、上記オペランドキャッシュ800から出力された暗号化データを復号化する。命令実行部1000は、上記命令デコーダ600でデコードされた命令を実行する。この命令実行部1000での命令実行結果はセレクタ90−3及びオペランドデータ暗号化論理1100に伝達される。上記命令アドレス加算器1200は分岐命令の分岐先アドレスを計算する。上記逐次命令フェッチアドレス生成論理1300は逐次命令読み出し時のアドレスを計算する。セレクタ90−2は、命令をフェッチするため、上記命令アドレス加算器1200と上記逐次命令フェッチアドレス生成論理1300の出力とを選択的に上記命令キャッシュ100に伝達する。フェッチすべき命令が命令キャッシュ100内に存在する場合には、当該命令が命令コード復号化論理300に伝達される。しかし、フェッチすべき命令が命令キャッシュ100内に存在しない場合には、対応する命令がメモリ1500から読出される。このとき、当該命令は命令キャッシュ100に記憶される。
【0023】
図1において、I1,I2,I−DC〜WB、及びO−DCなどは命令の処理におけるパイプライン処理との対応を示している。I1,I2は命令キャッシュ参照ステージを示し、I−DCは命令キャッシュ100から読み出された命令コードの復号化ステージを示し、IQは命令キューに滞留しているステージを示し、IDは命令の解読ステージを示し、E1はレジスタリード及び分岐先命令アドレス加算、オペランドアドレス加算ステージを示し、E2,E3は演算実行ステージ又はオペランドキャッシュ参照ステージを示し、O−ECはオペランドストアデータの暗号化ステージを示し、O−DCはオペランドキャッシュ800からのロードデータの復号化ステージを示し、WBは命令実行結果の書き込み(ライトバック)を示す。I−DCステージ、O−ECステージ、及びO−DCステージは通常数サイクル以上必要である。
【0024】
一つの命令の命令長は2バイトで、一度の命令フェッチで命令キャッシュからフェッチする命令コードは4命令(8バイト)と仮定する。命令コードはメモリから読み出されるとバス200を通して命令キャッシュ100に格納される。逐次命令処理の場合、逐次命令フェッチアドレス生成論理1300で生成されたアドレスにより命令キャッシュ100を参照する。命令キャッシュ100から読み出された命令コードは命令コード復号化論理300に転送され復号化される。命令コード復号化論理300によって復号化された命令コードは、命令キュー500に格納され、また、命令デコーダ600に転送されて命令の解読が行われる。命令デコーダ600で解読された命令がロード型命令の場合、オペランドアドレス加算器700によりオペランドアドレスが生成され、そのアドレスに基づいてオペランドキャッシュ800が参照される。オペランドキャッシュ800から読み出されたオペランドは、オペランドデータ復号化論理900で復号化され、CPU1600内の図示されないレジスタに格納される。命令デコーダ600で解読された命令がストア型命令の場合、図示されないレジスタから読み出されたデータは命令実行部1000を経由し、オペランドデータ暗号化論理1100で暗号化された後に、上記メモリ1500に書き込まれる。命令デコーダ600で解読された命令が演算型命令の場合、命令実行部1000で演算が行われ、その演算結果は、セレクタ90−3を介して、図示されないレジスタに書き込まれる。
【0025】
図2には、上記構成における命令処理タイミングが示される。
【0026】
図2において命令1から命令4までの8バイトはサイクル1からサイクル2で命令キャッシュ100から読み出される。読み出された8バイトの命令コードはサイクル3からサイクル8の間で復号化される。復号化された命令コードは命令キュー500に転送するとともに、先頭の命令1は命令デコーダ600に転送される。命令1はサイクル9で命令の解読が行われる。説明の便宜上、命令1乃至命令9及び命令10乃至命令17は演算型命令と仮定する。以降命令1はパイプライン処理され、サイクル13で結果の書き込みが行われる。命令2は命令キュー500から命令デコーダ600に転送され、サイクル10で命令の解読が行われる。同様に命令3はサイクル11で命令の解読が行われ、命令4はサイクル12で命令の解読が行われる。次に命令5から命令8までの8バイトはサイクル2からサイクル3で命令キャッシュ100から読み出される。しかし、サイクル4では、命令コード復号化論理300が未だ命令1から命令4の復号化処理を行っているため、命令5から命令8の復号化処理の開始はサイクル9まで待たされる。命令5から命令8の復号化処理はサイクル9に開始され、サイクル14で完了する。復号化された命令コードは命令キュー500に転送するとともに、命令5は命令デコーダ600に転送される。従って命令5はサイクル15で命令の解読が行われ、サイクル19で結果の書き込みが行われる。このように命令4の終了(サイクル16)と命令5の終了(サイクル19)の間に2サイクルのオーバヘッド(処理の遅れ)が生じる。同様に命令8と命令9の間にも2サイクルのオーバヘッドが生じる。分岐命令はサイクル22で命令の解読が行われ、サイクル23で命令アドレス加算器1200により分岐先命令アドレスが求まる。その分岐先命令アドレスにより、サイクル24及びサイクル25で命令キャッシュ100を参照する。分岐先命令の命令コード(命令10から命令13)の復号化処理はサイクル26に開始され、サイクル31で完了する。分岐先命令である命令10はサイクル32で命令の解読が行われ、サイクル36で結果の書き込みが行われる。
【0027】
上記例によれば、以下の作用効果を得ることができる。
【0028】
命令キャッシュ100と命令キュー500との間に命令コード復号化論理300が配置されたことにより、命令キャッシュ100の内容は暗号化された命令コードとなり、復号化された命令コードが命令キャッシュ100に格納されることが無いため、顧客プログラムの保護を強化することができる。すなわち、デバッグ機構により命令キャッシュ100の内容を表示したり、命令キャッシュ100の中の命令コードを他の記憶装置に転送しても、その命令コードを解読することはできないため、顧客プログラムの保護が実現できる。
【0029】
図3には、上記CPU1600の別の構成例が示される。
【0030】
図3に示されるCPU1600が図1に示されるのと大きく相違するのは、命令コード復号化論理300において暗号化された命令コードの復号化がパイプライン処理によって行われる点、及び分岐先命令のアドレスに対応させてその分岐先の8命令分の暗号化された命令コードに対応する復号化後の命令コードを連想して保持するための復号変換バッファ(DTB)400が設けられている点である。
【0031】
図3において、I1,I2は命令キャッシュ参照ステージを示し、I−dc1乃至I−dc6は命令キャッシュ100から読み出された命令コードの復号化ステージを示し、IQは命令キューに滞留しているステージを示し、IDは命令の解読ステージを示し、E1はレジスタリード及び分岐先命令アドレス加算、オペランドアドレス加算ステージを示し、E2,E3は演算実行ステージまたはオペランドキャッシュ参照ステージを示し、O−ec1乃至O−ec6はオペランドストアデータの暗号化ステージを示し、O−dc1乃至O−dc6はオペランドキャッシュ800からのロードデータの復号化ステージを示し、WBは命令実行結果の書き込み(ライトバック)を示す。I−dc1〜I−dc6ステージO−ec1〜O−ec6ステージ及びO−dc1〜O−dc6ステージは通常数サイクル以上必要な復号化や暗号化の処理をパイプライン処理化したステージである。
【0032】
命令キャッシュ100から読み出された命令コードは、セレクタ90−4を介して、命令コード復号化論理300に転送され復号化される。命令コード復号化論理300から出力される復号化された命令コードは命令キュー500に格納されるとともに、命令デコーダ600に転送されて命令の解読が行われる。また、分岐命令の分岐先の8命令については命令コード復号化論理300で復号化された後に、対応する分岐先命令アドレスと対にして信号変換バッファ400に格納される。命令デコーダ600で解読された命令がロード型命令の場合、オペランドアドレス加算器700によりオペランドアドレスが生成され、オペランドキャッシュ800が参照される。オペランドキャッシュ800から読み出されたオペランドはオペランドデータ復号化論理900で復号化されてCPU1600内の図示されないレジスタに格納される。命令デコーダ600で解読された命令がストア型命令の場合、図示されないレジスタから読み出されたデータは命令実行部1000を経由してオペランドデータ暗号化論理1100で暗号化された後に、メモリ1500に書き込まれる。命令デコーダ600で解読された命令が演算型命令の場合、命令実行部1000で演算が行われ、その演算結果は、図示されないレジスタに書き込まれる。
【0033】
図4には、上記構成における命令処理タイミングが示される。
【0034】
命令1から命令4までの8バイトはサイクル1からサイクル2で命令キャッシュ100から読み出される。読み出された8バイトの命令コードはサイクル3からサイクル8の間で復号化される。復号化された命令コードはセレクタ90−47を介して命令キュー500に転送される。尚、復号化された先頭の命令1は命令デコーダ600に転送される。命令1はサイクル9で命令の解読が行われる。説明の便宜上、命令1乃至命令9及び命令10乃至命令21は演算型命令と仮定する。以降命令1はパイプライン処理され、サイクル13で結果の書き込みが行われる。命令2は命令キュー500から命令デコーダ600に転送され、サイクル10で命令の解読が行われる。同様に命令3はサイクル11で命令の解読が行われ、命令4はサイクル12で命令の解読が行われる。次に命令5から命令8までの8バイトはサイクル2からサイクル3で命令キャッシュ100から読み出される。命令5から命令8の復号化処理はサイクル4に開始され、サイクル9で完了する。復号化された命令コードは命令キュー500に転送される。従って命令5はサイクル13で命令の解読が行われ、サイクル17で結果の書き込みが行われる。以降、命令9まで同様に処理される。分岐命令はサイクル18で命令の解読が行われ、サイクル19で命令アドレス加算器1200により分岐先命令アドレスが求まる。その分岐先命令アドレスにより、サイクル20及びサイクル21で命令キャッシュ100を参照する。分岐先命令の命令コード(命令10から命令13)の復号化処理はサイクル22で開始され、サイクル27で完了する。一方、分岐先命令アドレスと「分岐先命令アドレス+8」のアドレスは信号変換バッファ400にも送られ、サイクル20で信号変換バッファ400内に当該分岐先アドレスに対応する復号化された分岐先命令コードが存在するか否か判定される。所望の分岐先命令コードが信号変換バッファ400に存在する場合、サイクル21で復号化された後の分岐先命令コードが信号変換バッファ400から読み出される。読み出された命令コードはセレクタ90−4を介して命令キュー500に転送される。先頭の命令10は命令デコーダ600に転送される。また、サイクル21で信号変換バッファ400内に、「分岐先命令アドレス+8」に対応する、復号化された分岐先命令コードが存在するか否か判定される。所望の命令コードが符号化変換バッファ400に存在する場合、サイクル22で復号化された後の分岐先命令コードが信号変換バッファ400から読み出される。読み出された命令コードは、セレクタ90−4を介して命令キュー500に転送される。分岐先命令である命令10はサイクル22で命令の解読が行われ、サイクル26で結果の書き込みが行われる。このように分岐命令と命令10の間には命令アドレス加算器1200で分岐先アドレスを計算して、信号変換バッファ400から分岐先命令コードを読み出すまでの3サイクルのオーバヘッドが生じる。尚、信号変換バッファ400に分岐先命令の命令コードが存在しない場合は、サイクル27で分岐先命令コードの復号化処理が完了するので、サイクル28で命令10の命令の解読を行うことができる。以降、命令11から命令17までは同様に命令が実行される。命令10から命令13までの命令コードはサイクル21に命令キャッシュ100から読み出され、命令14から命令17までの命令コードはサイクル22で命令キャッシュ100から読み出されるため、命令18から命令21までの命令コードはサイクル23で読み出される。読み出された命令コードはサイクル24から命令コード復号化処理され、サイクル29で復号化処理が完了する。復号化された命令コード(命令18から命令21)は命令キュー500に転送されるとともに、先頭の命令18は命令デコーダ600に転送される。命令18はサイクル30で命令の解読が行われ、サイクル34で結果の書き込みが行われる。このような処理によれば、命令10から命令21の命令処理についてオーバヘッドが生じることはない。
【0035】
上記の例によれば、命令キャッシュ100と命令キューの間に命令コードの復号化論理300を有することにより、命令キャッシュ100の内容は暗号化された命令コードとなり、復号化された命令コードが命令キャッシュ100に格納されることが無いため、顧客プログラムの保護を強化することができる。また、命令コード復号化論理300での復号化がパイプライン処理されることにより、逐次命令読み出し時のオーバヘッドを隠蔽化することができる。さらに、信号変換バッファ400を設けることにより、分岐先アドレスに対応して分岐先の命令コードの復号化後の命令を記憶するようにしているため、分岐命令発生時の復号化処理によるオーバヘッドを隠蔽化することが可能となる。
【0036】
図5には、上記復号変換バッファ400の構成例が示される。
【0037】
図5に示される復号変換バッファ400はタグ部とデータ部とを含む。特に制限されないが、ダイレクトマッピング方式が採用され、タグ部は704バイト構成とされ、データ部は2Kバイト構成とされる。尚、復号変換バッファ400は、2−wayや4−wayのセットアソシアティブ方式であっても良いし、フルアソシアティブ方式であっても良い。
【0038】
図6には、図5に示される復号変換バッファ400において参照(Read)及び書き込み(Write)についての動作が示される。
【0039】
参照時は分岐先命令アドレスの[10:3]の8ビットにより256カラムの中からタグ及びデータを読み出す。読み出されたタグには、復号変換バッファに登録されている命令コードに対応する命令アドレスの[31:11]とその内容が有効であることを示すバリッドビット[V]が含まれる。コンパレータ(Cmp.)では、分岐先アドレスの[31:11]と読み出されたタグの[31:11]との比較が行われる。バリッドビットが論理値“1”で、かつ分岐先アドレスの[31:11]と読み出されたタグの[31:11]が一致した場合、復号変換バッファ400に復号後の命令コードが存在するため、復号変換バッファ400から読み出された命令コードが命令キュー500及び命令デコーダ600に転送される。復号変換バッファ400に復号後の命令コードが存在しない場合は、命令コード復号化論理300で復号化された命令コードが命令キュー500及び命令デコーダ600に転送されるとともに、復号変換バッファ400にも転送されて復号変換バッファ400への書き込みが行われる。このとき、復号後の命令コードに対応する命令アドレスの[10:3]の8ビットにより256カラムの中の一つのカラムに書き込まれる。そしてタグには命令アドレスの[31:11]が書き込まれるとともに、バリッドビットに論理値“1”が書き込まれる。また、復号後の命令コードも同じカラムに書き込まれる。
【0040】
図7には、上記CPU1600の別の構成例が示される。
【0041】
図7に示されるのが、図1に示されるのと大きく相違するのは、暗号化された命令コードの復号化がパイプライン処理によって行われる点、さらには、動的分岐予測機構などによる投機的命令フェッチ方式を併用し、命令フェッチアドレスをキーとして当該命令フェッチする命令コードの中に以前に分岐成功した分岐命令が存在するときにその分岐命令の分岐先アドレスを出力可能な分岐先アドレスバッファ(BTB)1400を備える点である。そして上記分岐先アドレスバッファ1400が設けられたことに対応して、セレクタ90−2は、上記命令アドレス加算器1200の出力と、上記分岐先アドレスバッファ1400の出力信号と、上記逐次命令フェッチアドレス生成論理1300の出力とを選択的に上記命令キャッシュ100及び上記分岐先アドレスバッファ1400に伝達可能に構成される。
【0042】
図7において、I1,I2,I−dc1などは命令の処理におけるパイプライン処理との対応を示している。I1,I2は命令キャッシュ参照ステージを示し、I−dc1乃至I−dc6は命令キャッシュ100から読み出された命令コードの復号化ステージを示し、IQは命令キューに滞留しているステージを示し、IDは命令の解読ステージを示し、E1はレジスタリード及び分岐先命令アドレス加算、オペランドアドレス加算ステージを示し、E2,E3は演算実行ステージまたはオペランドキャッシュ参照ステージを示し、O−ec1乃至O−ec6はオペランドストアデータの暗号化ステージを示し、O−dc1乃至O−dc6はオペランドキャッシュ800からのロードデータの復号化ステージを示し、WBは命令実行結果の書き込み(ライトバック)を示す。I−dc1〜I−dc6ステージO−ec1〜O−ec6ステージ及びO−dc1〜O−dc6ステージは通常数サイクル以上必要な復号化や暗号化の処理をパイプライン処理化したステージである。
【0043】
ここで、図3に示される構成によれば、図8に示されるように、命令の逐次読み出し時及び分岐命令発生時での命令コードの復号化処理オーバヘッドは隠蔽化されるものの、分岐命令発生時の分岐先命令読み出しに関するオーバヘッドは矢印で示されるように隠蔽化されない。これに対して図7に示される構成によれば、以下に詳述するように、命令コードの復号化によるオーバヘッドと、分岐命令発生時の分岐先命令読み出しに関するオーバヘッドとの両方を隠蔽化することができる。
【0044】
図9には、図7に示される構成における命令処理タイミングが示される。
【0045】
命令1と分岐命令1はサイクル1及びサイクル2で命令キャッシュ100から読み出される。同時にサイクル1では分岐先アドレスバッファ1400が参照され、サイクル2では分岐命令1の分岐先アドレス(すなわち命令2の命令アドレス)が分岐先アドレスバッファ1400から出力される。サイクル3及びサイクル4では分岐先アドレスバッファ1400から出力された分岐命令1の分岐先アドレスにより命令2及び分岐命令2を命令キャッシュ100から読み出すとともに分岐先アドレスバッファ1400を参照し、サイクル4では分岐命令2の分岐先アドレス(すなわち命令3の命令アドレス)が分岐先アドレスバッファ1400から出力される。サイクル5及びサイクル6では分岐先アドレスバッファ1400から出力された分岐命令2の分岐先アドレスにより命令3及び分岐命令3が命令キャッシュ100から読み出されて分岐先アドレスバッファ1400が参照され、サイクル6では分岐命令3の分岐先アドレス(すなわち命令4の命令アドレス)が分岐先アドレスバッファ1400から出力される。サイクル7及びサイクル8では分岐先アドレスバッファ1400から出力された分岐命令3の分岐先アドレスにより命令4から命令7までが命令キャッシュ100から読み出される。一方、命令1及び分岐命令1はサイクル3からサイクル8の間で復号化され、命令1はサイクル9に命令の解読が行われ、分岐命令1はサイクル10で解読される。命令2及び分岐命令2はサイクル4で命令キャッシュ100から読み出されているため、サイクル5からサイクル10の間で復号化され、命令2はサイクル11で命令の解読が行われ、分岐命令2はサイクル12で命令が解読される。命令3及び分岐命令3はサイクル6で命令キャッシュ100から読み出されているため、サイクル7からサイクル12の間で復号化され、命令3はサイクル13で命令の解読が行われ、分岐命令3はサイクル14で解読される。命令4から命令7はサイクル8で命令キャッシュ100から読み出されているため、サイクル9からサイクル14の間で復号化され、命令4はサイクル15で解読され、命令5はサイクル16で解読され、命令6はサイクル17で解読され、命令7はサイクル18で解読される。このように分岐先アドレスバッファ1400などの動的分岐予測機構によって投機的に命令フェッチを実行することにより、命令コードの復号化によるオーバヘッドと、分岐命令発生時の分岐先命令読み出しに関するオーバヘッドとの両方を隠蔽化することができる。
【0046】
以上本発明者によってなされた発明を具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【0047】
例えば、命令キャッシュ100、命令コード復号化論理300、及びCPU1600をそれぞれ別個の半導体チップにより形成することができる。
【0048】
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であるマイクロコンピュータに適用した場合について説明したが、本発明はそれに限定されるものではなく、各種データ処理装置に広く適用することができる。
【0049】
本発明は、CPU(中央処理装置)を含むことを条件に適用することができる。
【図面の簡単な説明】
【0050】
【図1】本発明にかかるデータ処理装置の一例であるマイクロコンピュータにおけるCPUの構成例ブロック図である。
【図2】図1に示される構成の動作タイミング図である。
【図3】上記マイクロコンピュータにおけるCPUの別の構成例ブロック図である。
【図4】図3に示される構成の動作タイミング図である。
【図5】図3における主要部の構成例説明図である。
【図6】図3における主要部の別の構成例説明図である。
【図7】上記マイクロコンピュータにおけるCPUの別の構成例ブロック図である。
【図8】図7に示される構成の比較対象とされる構成の動作タイミング図である。
【図9】図7に示される構成の動作タイミング図である。
【図10】上記マイクロコンピュータの全体的な構成例ブロック図である。
【符号の説明】
【0051】
90−1〜90−3 セレクタ
100 命令キャッシュ
200 バス
300 命令コード復号化論理
500 命令キュー
600 命令デコーダ
700 オペランドアドレス加算器
800 オペランドキャッシュ
900 オペランドデータ復号化論理
1000 命令実行部
1100 オペランドデータ暗号化論理
1200 命令アドレス加算器
1300 逐次命令フェッチアドレス生成論理
1400 分岐先アドレスバッファ
1500 メモリ
1600 CPU

【特許請求の範囲】
【請求項1】
命令コードを実行可能な中央処理装置と、
暗号化された命令コードを保持可能な命令キャッシュと、
上記中央処理装置と上記命令キャッシュとの間に配置され、上記暗号化された命令コードを、上記命令キャッシュを介して取り込み、それを復号化して上記中央処理装置に供給するための命令コード復号化論理と、を含んで成るデータ処理装置。
【請求項2】
上記命令コード復号化論理は、上記暗号化された命令コードをパイプライン処理によって順次復号化する請求項1記載のデータ処理装置。
【請求項3】
上記中央処理装置は、分岐先命令アドレスに対応して、分岐先命令コードの復号化後の命令を、上記分岐命令アドレスに関連付けて保持可能な信号変換バッファを含み、上記信号変換バッファ内に分岐先アドレスに対応する分岐先命令コードが存在する場合には、それを読み出して実行する請求項2記載のデータ処理装置。
【請求項4】
上記中央処理装置は、命令フェッチアドレスをキーとして当該命令の分岐先アドレスを出力可能な動的分岐予測機構としての分岐先アドレスバッファを備え、上記分岐先アドレスバッファを介して投機的に命令フェッチを実行する請求項2記載のデータ処理装置。
【請求項5】
マイクロコンピュータとして一つの半導体基板に形成された請求項3又は4記載のデータ処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2006−227777(P2006−227777A)
【公開日】平成18年8月31日(2006.8.31)
【国際特許分類】
【出願番号】特願2005−38760(P2005−38760)
【出願日】平成17年2月16日(2005.2.16)
【出願人】(503121103)株式会社ルネサステクノロジ (4,790)
【Fターム(参考)】