(57)【特許請求の範囲】
【請求項１】
プロセッサ及びメモリを有するコンピュータシステムであって、
前記プロセッサは、
コンピュータプログラムの次の命令を繰り返し取得するように構成された命令サイクル回路と、
前記命令サイクル回路により取得された命令をデコード及び実行するように構成された命令デコーダとを有し、
当該コンピュータシステムは、１又はそれ以上の命令の制御下で複数の算術及び／又は論理演算をサポートし、
前記メモリは、複数のテーブルを格納し、前記複数の算術及び／又は論理演算の各特定の１つは、入力の範囲のための特定の演算の結果の少なくとも部分を表す、前記メモリに格納された少なくとも１つの特定のテーブルによりサポートされ、
前記メモリは、前記コンピュータプログラムを格納し、
前記命令サイクル回路は、プログラムカウンタレジスタを有し、
前記命令サイクル回路は、プログラムカウンタレジスタの制御下で次の命令を取得するように構成され、
前記命令サイクル回路は、前記プログラムカウンタレジスタが次の命令の取得を制御するように前記プログラムカウンタレジスタを前進させるように構成されたプログラムカウンタレジスタアドバンサを有し、
前記プログラムカウンタレジスタアドバンサは、メモリとテーブルベースの加算器とを有し、
前記メモリは、アドレス指定可能メモリ位置ごとにストレージにおける次の位置をもつ加算テーブルを格納し、
前記プログラムカウンタレジスタアドバンサは、前記テーブルベースの加算器により前記加算テーブルを検索することにより前記プログラムカウンタレジスタを変更するように構成される、コンピュータシステム。
【請求項２】
前記プログラムカウンタレジスタのコンテンツのアドレスにより指数化された前記加算テーブルの入力に前記プログラムカウンタレジスタを変更するように構成される、請求項１に記載のコンピュータシステム。
【請求項３】
前記プロセッサは、テーブルトランスレータを有し、前記テーブルトランスレータは、命令レジスタから算術及び／又は論理命令を受信し、対応するテーブル検索演算をもたらすように構成される、請求項１又は請求項２に記載のコンピュータシステム。
【請求項４】
当該コンピュータシステムは、命令ポインタレジスタを含む、前記プロセッサのレジスタの内容を保存するように構成されたスタンバイデバイスを有する、請求項１〜３のうちいずれか一項に記載のコンピュータシステム。
【請求項５】
当該コンピュータシステムは、基数アドレス及び指数からテーブルにおける入力のアドレスを計算するためのアドレス計算ユニットを有し、
前記アドレス計算ユニットは、前記基数アドレス及び前記指数を連結する、請求項１〜４のうちいずれか一項に記載のコンピュータシステム。
【請求項６】
算術及び／又は論理演算は、
前記算術及び／又は論理演算をサポートする前記テーブルの前記基数アドレスを取り出すこと、
前記算術及び／又は論理演算に対する第１のオペランドから取得された指数を前記基数アドレスに加算すること、及び
前記加算された基数アドレスから結果又は更なるテーブルアドレスを取り出すこと、によりサポートされる、請求項５に記載のコンピュータシステム。
【請求項７】
前記メモリは、命令タイプテーブルを有し、
前記命令タイプテーブルは、算術及び論理関数をサポートするテーブルの基数アドレスを格納する、請求項１〜６のうちいずれか一項に記載のコンピュータシステム。
【請求項８】
前記複数の算術及び／又は論理演算は、前記複数のテーブルにより排他的にサポートされる、請求項１〜７のうちいずれか一項に記載のコンピュータシステム。
【請求項９】
前記プロセッサは、少なくとも２つのレジスタを有し、
当該コンピュータシステムは、少なくとも、前記２つのレジスタの内容を加算するための加算オペレーションと、前記２つのレジスタの内容をビット単位でＡＮＤ演算するためのＡＮＤオペレーションとをサポートし、
前記メモリは、加算テーブル及びＡＮＤテーブルを含む、請求項１〜８のうちいずれか一項に記載のコンピュータシステム。
【請求項１０】
当該コンピュータシステムは、前記プロセッサの内部バスから第１及び第２のオペランドを受信し、前記第１及び第２のオペランドから計算された内部バスに対する出力を生成する組み合わせ論理回路を含まない、請求項１〜９のうちいずれか一項に記載のコンピュータシステム。
【請求項１１】
前記命令デコーダは、
条件付きの値に対応するテーブルにおける位置にあるテーブルからアドレスを表すデータ項目を取り出すこと、及び
アドレスを命令ポインタに書き込むことにより、前記条件付きの値に対して条件付きでジャンプするように構成される、請求項１〜１０のうちいずれか一項に記載のコンピュータシステム。
【請求項１２】
請求項１〜１１のうちいずれか一項に記載のコンピュータシステムにおける、コンピュータプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ及びメモリを有するコンピュータシステムに関する。
【背景技術】
【０００２】
コンピュータシステムがいわゆるサイドチャネルを介して一部の情報を漏らすことは長い間知られている。コンピュータシステムの入出力挙動を観察することは、コンピュータシステムにより使用される秘密鍵のような、機密に関わる情報に関する任意の有益な情報を供給しないかもしれない。しかし、コンピュータシステムは、観察されてもよい他のチャネル、例えば、その出力消費又は電磁放射を有する。これらのチャネルはサイドチャネルと呼ばれる。
【０００３】
サイドチャネルを介して、コンピュータシステムは、その使用の間、秘密情報を"漏らすかもしれない"。サイドチャネルを観察及び解析することは、攻撃者に対して、入出力挙動から取得され得るものよりも良好な情報へのアクセスを与え得る。
【０００４】
サイドチャネル問題に対する現在のアプローチは、計算にランダム性を取り込もうとすることにある。これらは、満足のいくものには満たないことを証明した。これらは、計算を複雑にし、追加の出力を用いる。更に、ランダム性に基づく対策は、多くの場合、統計手段を用いて置き換えられ得る。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
コンピュータシステムの種々の異なる要素は同様にサイドチャネルに寄与しないということが発明者の洞察であった。とりわけ、ＡＬＵのエネルギ消費は、これが処理する直接データに直接依存する。とりわけ、ＡＬＵが機密情報を処理する場合には、電力消費に対する寄与は機密情報に依存する。コンピュータの他の要素の電力消費は、実際のデータ値にほとんど依存しない。
【０００６】
電力消費が機密データにほとんど依存しない改良されたコンピュータシステムを有することが有利であるだろう。
【課題を解決するための手段】
【０００７】
プロセッサ及び記憶を有するコンピュータシステムであって、前記プロセッサは、コンピュータプログラムの次の命令を取得するように構成された命令サイクル回路と、前記命令サイクル回路により取得された命令をデコード及び実行するように構成された命令デコーダとを有し、当該コンピュータシステムは、１又はそれ以上の命令の制御下で複数の算術及び／又は論理演算をサポートし、前記メモリは、複数のテーブルを格納し、複数の算術及び／又は論理演算の各特定の１つは、入力の範囲に関する特定の算術演算の結果の少なくとも部分を表す、前記メモリに格納された少なくとも１つの特定のテーブルによりサポートされる、コンピュータシステムが提供される。
【０００８】
システムからＡＬＵを除去することにより、サイドチャネルに対する全ての寄与も除去される。これは、システムをサイドチャネル攻撃に対してより立ち直りが早いものにする。
【０００９】
コンピュータシステムは、テーブル方式のプログラム又はバーチャルマシンを促進するためのハードウェアソリューションを与える。コンピュータシステムは、任意のオーダのテーブルアクセスを可能にする。コンピュータシステムを用いて、安全なバーチャルマシンが実装され得る。ホワイトボックス暗号化のように、命令を実装するテーブルが分かりにくくされてもよく、従って、テーブルの機能がリバースエンジニアリングされ得ないことに留意されたい。しかしながら、分かりにくくすることが必ずしも適用される必要があるというわけではない。
【００１０】
コンピュータシステムは、より多くの利点を供給し、これらの幾つかが以下に記載される。
−  簡略化されたプロセッサ設計。レジスタファイルとＡＬＵとの間の複雑な接続（バス）の必要性がない。
−  命令セットの自由な選択。動作のセマンティックスは、テーブル内にある。テーブルは、単純な、複雑な、又は、暗号化された演算で満たされ得る。
−  拡張可能な命令セット。新たなテーブルが他のプログラムの実行中にメモリに追加され得る。
−  電気的に全ての演算はテーブルアクセスであり、それ故、テーブル内の演算は類似の電気挙動を有する。結果として、異なる演算の電気挙動の相違を使用することによりプログラムのリバースエンジニアリングは実行不可能になる。
−  ＡＬＵがないため、低減されたＢｏＭ。
−  改良された電力効率。
−  効率的なパイプライン方式による高速実行。
−  一時的な電力不足に対する増大した回復力（近距離無線通信（ＮＦＣ；Near Field Communication）において発生し得る）。これは、中間の処理状態がメモリ内に保たれ、エネルギが再び利用可能になったときに処理が再開され得るようにすることである。
−  強化されたセキュリティ。（サイドチャネル攻撃として知られる）ＡＬＵの特性を利用する暗号攻撃は、ＡＬＵがないので実行不可能である。更に、ＡＬＵ演算を置換するテーブルが暗号化された領域内にあり得る。即ち、指数は暗号化され、及び／又は、テーブル値も同様である。
【００１１】
ＡＬＵの無いテーブル方式のプロセッサは、エネルギ消費、速度及びセキュリティが重要であるアプリケーションにとって理想的である。コンピュータシステムはＮＦＣ内に適用されてもよい。
【００１２】
従来のプロセッサを有するＡＬＵにおいて実行される演算がメモリにおけるテーブルアクセスとして実行される、ＡＬＵの無いテーブル方式のプロセッサの種々の実施形態が供給される。プロセッサ上のテーブルは高価な下位計算を含み得るが、これらは前もって計算される。
【００１３】
例えば、メモリは、複数の算術及び／又は論理演算の各特定の１つがメモリ内に格納された特定のテーブルによりサポートされる複数のテーブルを格納してもよく、各特定のテーブルは、入力の範囲に関する特定の算術演算の結果を有する。メモリ内に演算の結果をもつことは、より少ないテーブル検索しか必要とされないという利点をもつ。一方、演算を複数のテーブルに渡って分割することにより、テーブルのサイズはより小さくなる。例えば、算術及び／又は論理命令の１若しくはそれ以上又は全ては、メモリに格納された複数のテーブルによりサポートされてもよく、従って、複数のテーブルは、入力の範囲に関する特定の算術演算の結果を一緒に表す。
【００１４】
例えば、下位乗算テーブルは、乗算テーブルのルックアップテーブルサイズを低減するために用いられ得る。
【００１５】
一実施形態において、プロセッサは、テーブルトランスレータを有し、テーブルトランスレータは、命令レジスタからの算術及び／又は論理命令を受信し、対応するテーブルルックアップオペレーションを生成するように構成される。例えば、テーブルトランスレータは、プロセッサの内部バスに接続されてもよい。テーブルトランスレータは、指示を実行するためにマイクロプログラムを用いてもよい。テーブルトランスレータは、命令デコーダに含まれてもよい。
【００１６】
一実施形態において、コンピュータシステムは、命令ポインタを含むプロセッサのレジスタの内容を保存するように構成された待機デバイスを有する。本発明のコンピュータシステムは、ＡＬＵの内容が保存される必要がないので、待機演算に対して特に効率的である。命令ポインタは、命令ポインタレジスタとして実装されてもよい。
【００１７】
一実施形態において、算術及び／又は論理演算は、ルックアップテーブルにより排他的にサポートされる。一実施形態において、コンピュータシステムは、プロセッサの内部バスから第１及び第２のオペランドを受信し、第１及び第２のオペランドから計算された内部バスへの出力を生成する組み合わせ論理回路を含まない。
【００１８】
一実施形態において、命令デコーダは、条件付きの値に対応するテーブル内の位置でテーブルからアドレスを表すデータ項目を取り出し、命令ポインタへのアドレスを書き込むことにより、条件付きの値の条件を飛び越すように構成される。例えば、命令デコーダは、命令ポインタへのアドレスを書き込むためのアドレスライタ及びデータ項目を取り出すためのデータ項目レトリーバを有してもよい。データ項目は、絶対アドレス自体でもあってもよい。データ項目は、命令ポインタ内に格納される現在のアドレス対するオフセットであってもよい。この手法において、条件付きの飛び越しは、状態レジスタを必要とすることなく実装されてもよい。
【００１９】
一実施形態において、命令サイクル回路は、例えば命令サイクル回路に含まれるメモリに格納されたテーブルからのテーブルルックアップを用いた、マイクロ命令を有する。一実施形態において、命令をサポートするルックアップテーブル及び命令サイクル回路をサポートするルックアップテーブルは、同じメモリ内にある。マイクロコードもメモリ内に格納されてもよい。斯様な命令サイクル回路は実装をより簡素化するだろう。
【００２０】
一実施形態において、メモリは、テーブル処理を取り込むメモリアーキテクチャを有する。これは、メモリとプロセッサとの間の帯域幅制限接続を軽減し、密広帯域統合を可能にするという利点を有する。
【００２１】
一実施形態において、コンピュータシステムは、基数アドレス及び指数からテーブルにおける入力のアドレスを計算するためのアドレス計算ユニットを有し、アドレス計算ユニットは、基数アドレス及び指数を連結する。
【００２２】
実施形態において、メモリは、命令タイプテーブルを有し、命令タイプテーブルは、算術及び論理関数をサポートする全てのテーブルの基数アドレスを格納する。
【００２３】
一実施形態において、算術及び／又は論理演算は、例えばレトリーバにより、例えば命令タイプテーブルから、前記算術及び／又は論理演算をサポートするテーブルの基数アドレスを取り出し、例えば加算器により、前記算術及び／又は論理演算に対する第１のオペランドから取得された指数を基数アドレスに追加し、追加された基数アドレスから結果又は更なるテーブルアドレスを取り出すことによりサポートされる。加算器は、規則的に追加する代わりに、基数アドレス及び指数を連結してもよいことに留意されたい。
【００２４】
本発明の更なる態様は、コンピュータシステムのようなコンピュータプロセッサに関する。
【００２５】
本発明の更なる態様は、先行する請求項のいずれか１つのような、コンピュータシステムのための第１のコンピュータ言語においてコンピュータプログラムをコンパイルするように構成されるコンパイラに関する。例えば、ＡＬＵを有するプロセッサのための標準のコンパイラが用いられてもよく、これは、全ての算術及び論理演算コードをテーブルルックアップ演算に翻訳するために変更される。
【００２６】
コンパイラは、入力値の範囲に関する算術又は論理演算の結果を計算し、その結果をテーブルに格納することにより、必要とされるルックアップテーブルをコンパイルしてもよい。ルックアップテーブルをもつメモリのための不揮発メモリが好ましい。
【００２７】
ルックアップテーブルは、プロセッサ内のＲＯＭ内にあってもよい。
【００２８】
コンピュータシステムは、電子デバイス、とりわけモバイル電子デバイス、例えば、携帯電話機、セットトップボックス、コンピュータ等である。コンピュータシステムは、スマートカードであってもよい。
【００２９】
プロセッサ及びメモリを有するコンピュータシステムが提供される。プロセッサは、メモリから命令レジスタに次の命令を繰り返し転送するための通常の命令サイクル回路を有する。転送された命令は、命令デコーダによりデコード及び実行される。コンピュータシステムは、加算、乗算等のような、複数の算術及び論理演算をサポートし、これは、命令の制御下で実行され得る。驚くべきことに、メモリは複数のテーブルを格納する。複数の演算の各特定の１つは、メモリ内に格納された複数のテーブルによりサポートされる。テーブルは、入力の範囲に関する特定の演算の結果を含んでもよい。とりわけ、複数の算術演算は、プロセッサがＡＬＵを必要としないように、複数のテーブルにより排他的にサポートされ得る。利点は、あまり複雑でない、より安全なプロセッサにある。
【００３０】
本発明のこれらの及び他の態様は、以下で述べられる実施形態から明らかになり、これらを参照して説明されるだろう。
【図面の簡単な説明】
【００３１】
【図１】従来のコンピュータプロセッサにおけるＡＬＵを示す。
【図２】ＡＬＵを伴わないプロセッサを有するコンピュータシステムを示す。
【図３ａ】第１の命令サイクル回路を示す。
【図３ｂ】第２の命令サイクル回路を示す。
【図４】テーブルに基づく算術を示す。
【図５】テーブルに基づくプログラムの実行を示す。
【図６】テーブルに基づくプログラムの実行を示す。
【図７】テーブル制御レジスタを用いたテーブルに基づくプログラムの実行を示す。
【図８】テーブルのためのキャリーレスアドレス計算を示す。
【発明を実施するための形態】
【００３２】
異なる図面において同じ参照番号を有するアイテムは、同じ構造的特徴及び同じ機能を有するか、又は、同じ信号であることに留意されるべきである。斯様なアイテムの機能及び／又は構造が説明された場合には、詳細な説明においてその反復説明の必要はない。
【００３３】
本発明が、多くの異なる形式の実施形態を許容可能である一方で、これらは、本開示が本発明の原理で例示であり本発明を示された及び説明された特定の実施形態に限定することを意図するものではないとみなされるべきであるという理解のもとで、図面において示され、１又はそれ以上の特定の実施形態がここで詳細に説明される。
【００３４】
図１は、ＡＬＵ１２０を有する従来のプロセッサ１００を示している。例えば、ＡＬＵ１２０は、３２ビットのＡＬＵである。計算において、ＡＬＵ（Arithmetic Logic Unit；算術論理演算ユニット）は、算術及び論理演算を実行するデジタル回路である。ＡＬＵはコンピュータの中央処理ユニットの基本的な構成単位であり、最も単純なマイクロプロセッサであっても１又はそれ以上のＡＬＵを含む。プロセッサの演算のほとんどは、１又はそれ以上のＡＬＵにより実行される。ＡＬＵは、入力レジスタからのデータをロードし、その後、外部の制御ユニットは、そのデータ上でどのような演算を実行するべきかをＡＬＵに伝え、ＡＬＵは、その結果を出力レジスタに格納する。制御ユニットは、これらのレジスタ、ＡＬＵ及びメモリの間で、処理されたデータを移動させる役割を果たす。例えば、ＡＬＵは、演算に対応する出力を選択するためにマルチプレクサを用いてもよい。
【００３５】
ＡＬＵ１２０は、組合せ論理（combinational logic又はcombinatorial logic）として実装され、これは、ブール回路により実装される一種のデジタル論理回路であり、ここで、出力が現在の入力のみの純粋な機能である。組合せ論理は、一の演算から次の演算まで結果を伝えるためのメモリをもたない。
【００３６】
図１は、内部バス１１０及びＡＬＵ１２０を示している。ＡＬＵ１２０は、内部バス１１０からの入力１２２及び１２４を受信し、内部バスに出力１２８を供給する。ＡＬＵ１２０により実行された演算は、ＡＬＵ制御信号１２６の管理下にある。プロセッサ１００は、他の回路、例えば、命令サイクル回路、アドレス算出ユニット等を有してもよく、これは、コンピュータプロセッサ回路１３０により概略的に示される。プロセッサ１００は、メモリ１４０に接続されてもよい。
【００３７】
図２は、コンピュータシステム２００を示している。コンピュータシステム２００は、コンピュータプロセッサ２１０、例えばＣＰＵを有する。システム２００、とりわけプロセッサ２１０は、ＡＬＵを含まない。算術及び論理演算は、ここで述べられるルックアップテーブルを用いて実装される。
【００３８】
プロセッサはさておき、システムは、追加のコンポーネントを有し得る。図２に示されるように、メモリ２５０、メモリマッピングされたＩ／Ｏインタフェース２５５、データ及びアドレスバス２３５及び制御バス２６０は、システムの範囲内にあるがプロセッサ２１０の外部にある。メモリマッピングされたＩ／Ｏインタフェース２５５は、オプションである。Ｉ／Ｏインタフェースの他の手段が用いられてもよい。メモリ２５０は、これをプロセッサ２１０の外部にする代わりに、プロセッサ２１０において一体化されてもよい。プロセッサ２１０は、インタフェース２３０を有するアドレス計算ユニット（ＡＣＵ；address calculating unit）を有してもよい。
【００３９】
プロセッサ２１０は、内部バス２２０と、データ及びアドレスバスインターフェース２３０と、命令サイクル回路２４０と、命令デコーダ２４１と、レジスタファイル２４５とを有する。
【００４０】
プロセッサ２１０は、データ及びアドレスバスインターフェース２３０を介してメモリ２５０からデータを取り出してもよい。典型的には、データ及びアドレスバス２３５は、別々のデータバス及びアドレスバスとして実行される。アドレスは、インタフェース２３０を用いてアドレスバス上に置かれ、それに応じて、メモリ２５０は、そのアドレスを有するメモリ位置のデータ内容を取り出す。インタフェース２３０を介して、取り出されたデータは、内部バス２２０上に置かれる。メモリ又はＩ／Ｏの除外又は障害等は制御バス２６０上に置かれてもよく、これは、レジスタファイル２４５のレジスタに書き込む。除外等が要求されないか又は異なる手段において通信される場合、バス２６０は省略されてもよい。
【００４１】
レジスタファイル２４５は、複数のレジスタを有する。例えば、レジスタは、８ビット長であってもよい。例えば、プロセッサ２１０は、レジスタファイル２４５内に３つのレジスタＸ，Ｙ，Ｚを有してもよい。例えば、プロセッサ２１０は、より多くのレジスタ、例えば８，１２，１６，３２又はそれ以上を有してもよい。
【００４２】
命令デコーダ２４１は、命令サイクル回路２４０に含まれるように示されるが、これは必須というわけではない。２つの回路は、離れて実装されてもよく、例えば内部バス２２０を介して、又は、追加の内部バス等を介して通信してもよい。
【００４３】
命令サイクル回路２４０は、コンピュータプログラムの次の命令を繰り返し取得するように構成される。コンピュータプログラムは、メモリ２５０に格納されてもよく、又は他のソース（例えば、キャッシュ、外部ソース等）から来てもよい。例えば、命令サイクル回路２４０は、プログラムカウンタレジスタを有してもよく、命令サイクル回路は、プログラムカウンタレジスタの制御下で次の命令を取得するように構成される。例えば、命令サイクル回路２４０は、プログラムカウンタレジスタにより示されたメモリアドレスにおけるメモリ２５０からの命令を命令レジスタに転送してもよい。命令デコーダ２４１は、命令レジスタへのアクセスを有する。
【００４４】
命令サイクル回路は、プログラムカウンタレジスタが次の命令の取得を制御するようにプログラムカウンタレジスタを促進するように構成されたプログラムカウンタレジスタアドバンサ（図２において図示省略）を有してもよい。プログラムカウンタレジスタアドバンサは、次の命令のアドレスをメモリに含むようにプログラムカウンタレジスタを変更してもよい。とりわけ、プログラムカウンタレジスタアドバンサは、バイトにおける命令幅によりプログラムカウンタレジスタを増大させてもよい。
【００４５】
プロセッサ２１０（例えば、命令サイクル回路２４０）は、命令サイクル回路２４０により取得された命令をデコード及び実行するように構成された命令デコーダを有する。
【００４６】
プロセッサ２１０は、メモリに格納されたテーブルからデータを取り出すためのアドレス指定ユニット（図示省略）を有してもよく、アドレス指定ユニットは、プロセッサをデータ及びアドレスバスに接続するデータ及びアドレスバスインターフェース２３０を有してもよい。アドレス指定ユニットは、基数アドレス及び指数からアドレスを計算するように構成されてもよい。アドレス指定ユニットは、アドレス算出ユニット（ＡＣＵ；address calculating unit）とも呼ばれる。テーブル（例えばアレイ）アドレスの計算は、ここで述べられるように、基数アドレスを２の累乗の倍数として選ぶことにより最適化されてもよい。
【００４７】
例えば、プロセッサ２１０は、複数の命令サイクルを経験してもよい。命令サイクルは、フェッチから始めてもよく、命令サイクル回路２４０は、プログラムカウンタの値を、メモリに送るために、アドレスバス上に配置する。メモリは、そのメモリ位置の内容をデータバス上に送ることにより応答する。フェッチの後、プロセッサ２１０は実行へ進み、取得したメモリ内容に基づいて幾つかの動作をとる。このサイクルにおける幾つかのポイントで、プログラムカウンタは、実行される次の命令が異なるものになるように変更されるだろう。例えば、これは、次の命令が次の経時的なメモリアドレスのものになるようにインクリメントされる。他のプロセッサレジスタのように、プログラムカウンタは、それぞれが１ビットのプログラムカウンタの値を表す、バイナリラッチのバンクであってもよい。
【００４８】
一実施形態において、プロセッサ２１０は、アドレス指定ユニット、メモリ及びレジスタはさておき、命令ポインタに従うための（マイクロ）プログラム論理を有する。プロセッサ２１０の命令実行は、いわゆるマイクロプログラムを用いてもよい。例えば、命令デコーダ２４１は、マイクロプログラムされた制御ユニットを有してもよく、所与の時間ステップで生成されるべき制御信号は、制御語（即ち、いわゆるマイクロ命令）において、一緒に格納される。命令を実装する制御語の収集はマイクロプログラムと呼ばれ、マイクロプログラムは、制御ストアと呼ばれるメモリ要素に格納される。
【００４９】
しかしながら、プロセッサ２１０は、マイクロプログラム又は命令ポインタを含む必要はない。代わりに、命令は、ハードウェアにおいてあらかじめ決められ、格納されてもよい。更に、制御信号論理表現は、論理ゲートによって、又は、プログラムされたゲートアレイ（ＰＬＡ；programmed logic array）において、直接実装されてもよい。
【００５０】
プロセッサ２１０は、ハードウェアにおけるテーブル方式のプロセッサを実装するためのアプローチを示す。テーブル方式の実装は、ＡＬＵを有さないが、ＡＣＵ（address calculating unit；アドレス計算ユニット）を有してもよい。テーブル方式のコンピュータプログラムは、ルックアップテーブルのネットワークである。プログラムは、テーブルアクセスのチェイン（シーケンス）として実装されるテーブルのネットワークに変換される。
【００５１】
図３ａ及び３ｂは、プロセッサ２１０において用いられ得る命令サイクル回路２４０の２つの異なる実装を示している。
【００５２】
図３ａは、命令デコーダ２４１、算器２４２、命令ポインタ２４３及び命令レジスタ２４４を有する命令サイクル回路を示している。命令サイクルの開始時に、命令デコーダ２４１は、アドレスバス上の命令ポインタ２４３のアドレスをメモリに置き、命令レジスタ２４４に配置される次の命令をメモリから受信する。そして、命令デコーダ２４１は、命令レジスタ２４４に格納された命令を実行し続ける。命令の後又はその実行中に、加算器２４２は、命令ポインタ２４３のアドレスを前進させる。例えば命令ポインタのアドレスが増加される。
【００５３】
図３ｂは、命令サイクル回路２４０の代替実施形態を示しており、加算器２４２がないことを除き、図３ａと同様である。代わりに、図３ｂの命令サイクル回路は、加算ルックアップテーブル２４６及びテーブルベースの加算器２４７を含む。次のアドレスは、計算される代わりに、テーブルベースの加算器２４７によりテーブル２４６において検索される。一実施形態において、加算ルックアップテーブル２４６は、アドレス指定可能メモリ位置ごとにストレージにおける次の位置をもつＲＯＭである。他の実装は、加算を、それぞれがテーブルを有する複数の加算に分割する。例えば、加算は、３２ビットの加算を実行するために、４バイト単位の加算に分割されてもよい。桁上げが追加の入力として扱われてもよく、それ故、９ビットの出力、２つの８ビットの入力及び１つの桁上げ入力を取得する。それ故、命令サイクル回路は、プログラムカウンタレジスタコンテンツにおけるアドレスの全て又は一部を検索することによりプログラムカウンタレジスタを修正するように構成される。
【００５４】
テーブル方式の命令ポインタ促進の利点は、テーブル方式の構造による電力不足に対する改良されたセキュリティ及び回復力である。しかしながら、欠点は、より多くの計算サイクル（例えば、メモリ位置のフェッチ、検索の実行、レジスタへのフィードバック等）の導入による速度の低下である。
【００５５】
プロセッサ２１０もシステム２００もＡＬＵを含まない。それにもかかわらず、コンピュータシステムは、１又はそれ以上の命令の制御下で実行され得る複数の算術演算をサポートする。ＡＬＵにより従来通り実行される演算は、１又はそれ以上のテーブルにアクセスすることにより実行される。テーブルアクセスからの結果は、レジスタに格納され、次のテーブルアクセスにおいて用いられ得る。テーブルにより記述された演算は複雑であってもよいが、テーブルが前もって計算されるので、これは演算の速度に対する有害ではない。
【００５６】
算術及び論理演算は、主として以下の３つの演算を実行するプロセッサ２１０により実行されてもよい。
Ｚ：＝Ｘ［Ｙ］（レジスタをロードするため）
Ｘ［Ｙ］：＝Ｚ（メモリをロードするため）
Ｒ：＝一定
【００５７】
Ｘ、Ｙ、Ｚ及びＲは、レジスタを示す。大括弧は、指数化されたメモリ検索を示す。Ｚ：＝Ｘ［Ｙ］は、Ｙにより指数化された入力の値が、Ｘにより指数化されたテーブルにおいて、レジスタＺに書き込まれることを意味する。即ち、メモリ位置Ｘ＋Ｙのデータコンテンツは、レジスタＺに移される。加えて、プロセッサは、メモリに書き込んでもよく、定数をレジスタに割り当ててもよい。プロセッサは、上記の３つの演算を実行するために、命令（例えば"演算コード"）を有する。
【００５８】
前記定数は、例えば、基数アドレス、基数アドレスに対する指数又はオペランドであってもよい。とりわけ、定数は、命令タイプテーブル（Ｏ）の基数アドレスであってもよい。命令タイプテーブルは、算術及び／又は論理関数をサポートする複数のテーブルの基数アドレスを格納する。
【００５９】
一実施形態において、組合せ論理によりこのプロセッサにおいて実行される算術演算（即ち、加算、減算、乗算、除算）も論理演算（即ち、３つの状態との比較：等しい、大きい及び小さい、又は、これらの組み合わせ）も存在しない。メモリは、これらの算術及び比較演算のためのテーブルを含み得る。単項演算に関して、単一の指数を有するテーブルは十分である。例えば、レジスタ上に回転オペレーションを実装するために、例えば、８０５１の命令ＲＬ：Rotate Accumulator Left。１つは、テーブル検索Ｘ［Ｙ］を実行してもよく、Ｘは回転テーブルの基数アドレスを含み、Ｙは１ビット回転されるべきレジスタである。
【００６０】
２つの変数の関数は、２つのステップにおいて評価されてもよい。レジスタＲｔがテーブルの基数アドレスを含む場合、我々はＲｃ＝Ｒｔ［Ｒａ］及びＲｃ＝Ｒｃ［Ｒｂ］を連続的に決定することによりＲａ及びＲｂの関数を計算することができる。換言すれば、テーブルＲｔ［Ｒａ］の入力ｙは、ｆ［Ｒａ、ｙ］に等しい（テーブル関数のための基数アドレス）。
【００６１】
この手順は、メモリに格納されたテーブルＯにより簡素化される。テーブルＯは、プラス、乗算、除算等のような全てのサポートされた算術及び論理関数の基数アドレスを含む。メモリＯに格納された異なる命令タイプは、異なる数の入力及び異なる数の出力を有し得る。説明的な目的のために、我々は、２つの入力及び単一の出力を有するＯにおける演算ｆ（即ちｆ＝Ｏ［ｉ］）を考慮する。我々は、ａ及びｂの値がレジスタＲａ及びＲｂに格納されるｆ（ａ，ｂ）を取得し、レジスタＲｒにｆ（ａ，ｂ）を格納することを望む。そして、我々は以下のように進む。最初に、我々は、Ｒｔ：＝Ｏ［ｉ］を規定する。そして、我々は、Ｒｃ＝Ｒｔ［Ｒａ］及びＲｃ＝Ｒｃ［Ｒｂ］を連続的に決定する。換言すれば、テーブルＯ［ｉ］［Ｒａ］の入力ｙは、ｆ［Ｒａ，ｙ］に等しい（テーブル関数のための基数アドレス）。
【００６２】
図４は、"プラスの"演算に等しいｆにより上記のものを視覚化する。図４は、命令タイプテーブル４１０（即ち、"Ｏ"）を示している。テーブル４１０は、加算テーブル４２０のアドレスを含む。テーブル４２０において、アドレスは、＋Ｖ（４３２）を含む、関数＋０（４３０）、＋１（４３１）等のために与えられる。２＋３を計算するために、１つは、テーブル４１０における"プラスの"基数アドレスを検索する。次に、加算テーブル４２０において、＋３のためのテーブルが見つけられる。＋３テーブルにおいて、（０でカウントを開始する）入力番号２が必要とされる合計である。メモリＯは、（必ずしも連続的なアドレスではない）種々の演算を配置するためにアドレスの任意のセットを介して最適化され得る。
【００６３】
図２のプロセッサは、幾つかのタイプの命令をサポートし得る。例は以下で与えられる。
【００６４】
プロセッサ２１０は、絶対的及び相関的なジャンプをサポートしてもよい。
【００６５】
プロセッサ２１０は、条件付きのジャンプをサポートしてもよい。条件付きのジャンプは、同様にテーブルによって実装されてもよい。テーブルの指数は、条件付きのジャンプが取得されるべきレジスタである。テーブルは、ジャンプするための絶対的アドレスを与えてもよい。例えば、１バイトのレジスタは、レジスタの値に依存して条件付きのジャンプをもたらしてもよい。また、条件付きのジャンプテーブルは、ジャンプするための相対的アドレスを与えてもよい。後者は、テーブルがより多くのジャンプのために容易に再生利用され得るという利点を有する。
【００６６】
例えば、プロセッサは、指数０に対してジャンプアドレスをもつとともに全ての非ゼロ入力に対して非ジャンプアドレスを入力するテーブルを有することにより"ゼロである場合ジャンプする"をサポートしてもよい。ジャンプアドレスは、正の値であってもよく、又は、場合により、負の値であってもよい。非ジャンプアドレスは、次の命令にポイントするために＋１であってもよい。これらのタイプのジャンプは、テーブル入力の内容を命令ポインタ（即ち、Ｘ［Ｙ］の内容）に移動する特別な演算コードによりサポートされてもよい。ここで、Ｙはレジスタであり、Ｘは、レジスタ、又は、オプションとして、命令ポインタに対する直接的なオペランドでもよい。
【００６７】
プロセッサ２１０は、指数化された演算を用いて、メモリへ／からの移動オペレーションをサポートしてもよい。例えば、プロセッサ２１０は、Ｘ［Ｙ］からレジスタＺへの移動をサポートしてもよく、逆もまた同じである。
【００６８】
プロセッサ２１０は、スタックを有してもよく、例えばレジスタの、ポップ（pop）及びプッシュ（push）演算をサポートしてもよい。プロセッサ２１０は、サブルーチン呼び出しをサポートするために、命令レジスタのプッシング及びポッピングをサポートする。
【００６９】
最後に、プロセッサ２１０は、算術及び論理演算、例えば、加算、繰り上げを伴う加算、ビット単位のＡＮＤ、減算、繰り上げを伴う減算、補集合（否定）、除算、ビット単位のＯＲ、回転等をサポートしてもよい。明示的な命令が用いられ得るこれらの演算に関して、命令は、例えばマイクロコードを用いて、テーブル検索に変換されてもよい。これは、使用の容易さを可能にする。例えば、プロセッサは、８０５１の命令セットを明示的にサポートしてもよく、又は同様に、プログラムの命令が実行される際に命令をテーブル検索に変換する。例えば、プロセッサ２１０は、ＡＬＵ演算コードをテーブルルックアップに変換するために、ＡＬＵからテーブルへのトランスレータを含んでもよい。
【００７０】
しかしながら、加算、ビット単位のＡＮＤ等のようなＡＬＵ演算コードは、プロセッサ２１０上になくてもよい。この場合、コンパイラは、これらの命令をテーブル検索として直接実装するコードを生成する。
【００７１】
このプロセッサは、任意のバーチャルマシンをサポートすることができる。提案されたプロセッササポートされたＶＭにおける斯様なプログラムの命令は、レジスタ、メモリのみを操作するが、ＡＬＵ（Arithmetic Logic Unit；算術論理ユニット）を用いない。それ故、我々は、ＡＬＵ（ＣＰＵ）の状態を保存することを必要とすることなくプロセッサを構成することができ、従って、我々は、このプロセッサに基づいてＡＬＵのないＶＭを構成することができる。
【００７２】
先に述べた通りに、命令サイクル回路は、命令ポインタと命令ポインタの前進を計算するためのルックアップテーブルを有し得る。命令サイクル回路に実装されたローカルルックアップテーブル及びマイクロコード命令を用いるこの計算方法は、加算計算を実装するためのメモリにおけるプロセッサ命令セット及びルックアップテーブルに類似する。分離回路ではない命令サイクル回路を実装することが可能であるが、命令サイクル回路機能は、一般的なマシン機能を用いて部分的に又は全体的に実装され得る。これは、プロセッサ設計を簡素化し、サイドチャネル攻撃及びリバースエンジニアリング攻撃に対して回復力を増大させる。
【００７３】
図５，６及び７は、プロセッサ２１０上でのコンピュータプログラムの実行を示している。図５，６及び７は、時間が上から下へ流れる時間図である。
【００７４】
テーブル方式のプロセッサ２１０のためのコンピュータプログラムは、プログラムのセマンティックスを構成するテーブルのネットワーク基づいてもよい。プログラムは、独立したメモリアクセスのチェインを有する。プログラムのための最初の入力は、メモリバンクへのアドレスであってもよく、プログラムの最終出力は、メモリバンク又はその組み合わせに格納されたデータであってもよい。中間ステージは、メモリバンクから出力され、メモリバンクへ入力される。
【００７５】
ソフトウェア命令は、図５に示すように、１つのレジスタ−メモリ−レジスタ層として実装されてもよい。命令のオペランド（例えばＸ及びＹ）は、メモリバンクに格納され、算術又は論理演算は、メモリに格納されたテーブルを用いて実行され得る。
【００７６】
図５は、レジスタ−テーブル−レジスタ層の実装を示しており、マイクロプログラムを用いない。各ソフトウェア命令は、１つのレジスタ−メモリ−レジスタ層を用いて実装されるだろう。
【００７７】
プロセッサ２１０の構造は、テーブルのネットワークとして示されるプログラムを実装することを可能にする。（メモリにおける）テーブルが命令の部分を含む情報で満たされなければならないかもしれない点に留意されたい。
【００７８】
速度の向上は、検索のパイプライン方式により可能である。上記で規定される単純なプロセッサは、機能を実行するために比較的多くのテーブル検索を必要とする。速度が重要である場合、検索のパイプライン方式が使用され得る。
【００７９】
テーブル方式の実装において、テーブル検索の結果は、次のルックアップテーブルへの入力として用いられる。結果として、（単一のテーブル検索に対応する）あらゆるレジスタ−テーブル−レジスタ層は、その結果が次のチェイン要素に手渡されると、再び実行することができる。レジスタにおける一の値から他の値への遷移は、メモリアクセスにより実現されるだろう。それ故、プロセッサパイプラインは、テーブル及びレジスタのチェインとして特徴付けられ得る。ここで、レジスタ−テーブル−レジスタの第１の層は、（テーブルを保持する）メモリのアクセス期間内に含まれ得るアクティビティを実行し、第２のレジスタ−テーブル−レジスタは、次の部分等を行う。これは、テーブルの自然なタイミング及び効率を与える。
【００８０】
図６は、レジスタ−テーブル−レジスタ層のパイプラインを伴う、有限の命令に対するアクセスのチェインを示している。図６は、有限の数の命令を実装するレジスタ−テーブル構造（即ち、テーブルを有するハードウェアの繰り返し）のカスケードとして参照され得る。ここで、各テーブル層は、命令が行うものに相当する。また、これは、レジスタ−テーブル−レジスタがどのようにチェイン化（パイプライン化）され得るかについて説明する。レジスタが共有されることに留意されたい。
【００８１】
図７は、プロセッサ２１０におけるメモリ制御レジスタを用いた図５の更なる改良を示している。ここでは、テーブルルックアップが行われるメモリバンクを制御するために、４ビットとして示されている。この手法において、実行される演算が制御されてもよい。テーブルは、メモリの適切なバンクを選択することにより選択され得る。メモリ制御レジスタは、レジスタであり、その内容は、内部バス上のアドレスと組み合わせられる、例えば、予め付加される、連結される等か、又は、アドレス指定算出ユニットにより生成される。例えば、１つのメモリバンクは加算テーブルを有し得るのに対し、他方は、ビット単位のＡＮＤテーブルを有する。メモリ制御レジスタを用いている適切なメモリバンクを選択することにより、選択は、２つの演算（即ち、加算及びビット単位のＡＮＤ）の間で行われ得る。図７は、一例として、参照符号７１０に基づき、メモリ制御レジスタの内容を示している。
【００８２】
図８は、ＡＣＵ（Address Calculation Unit）を簡素化するための２の累乗の指数化を示している。プロセッサ２１０のようなテーブル方式の実装は、ＡＬＵを有さないが、ＡＣＵ（address calculating unit）を有し得る。斯様なＡＣＵにおいて、１つの演算は、指数アドレス及び基数アドレスの加算である。繰り上げは、多くの場合、指数及び基数アドレスの加算演算から生成され、この場合、ビットは、０から１に反転され、又はその逆になるだろう。アレイがテーブルを実装するための典型的な選択であることに留意されたい。
【００８３】
我々は、繰り上げによるビットの反転がないように繰り上げを除去することにより、これを更に最適化することができる。これは、我々のプロセッサのエネルギ消費を向上させる。また、より一定の挙動が取得され、それ故、パワー消費サイドチャンネルを介した情報漏えいを最小化する。
【００８４】
繰り上げは、２の累乗の倍数としてテーブルの基数アドレスを選ぶことにより回避される。即ち、繰り上げは生成されない。加算は指数及び基数アドレスの連結のみを含む。Ｍ［指数化する］のアドレスを計算するために、１つは、２ｋ×基数＋指数を計算してもよい。ここで、Ｍ＝２ｋ×基数である。加算は、基数及び指数を連結することにより計算されてもよい。これに関して、機能するために、最も大きな指数は、２ｋより小さくすべきである。
【００８５】
最上位部分８２０を有する基数アドレス８１０及び最下位の部分８３０が図８に示される。最下位部分８３０における全てのビットは値０を有する。また、指数８４０が示される。アレイが乗算を必要とする場合、即ち、アレイが、単一のメモリユニットより大きい、例えば１バイトより大きい要素を含むので、斯様な乗算は指数８４０において実行されたものと想定される。８３０のサイズは、最も大きな用いられた指数８４０と少なくとも同数のビットを有するように選ばれている。テーブル検索が行われるべきアドレス８１５は、基数アドレス８１０及び指数８４０の合計により与えられる。ｌｓｂ８３０がゼロだけを有するので、合計は、ｍｓｂ８２０及び指数８４０を連結することにより計算され得る。
【００８６】
アドレス計算オペレーションのこの最適化は、プログラムにおいて直接規定され得る。
【００８７】
本発明は、本発明を実現するために適合される、コンピュータプログラム、とりわけ担体上の又はそれにおけるコンピュータプログラムにも拡張することはいうまでもないだろう。プログラムは、部分的にコンパイルされた形式のような、ソースコード、オブジェクトコード、コード中間ソース及びオブジェクトコードの形式、又は、本発明の方法の実装における使用に適した任意の他の形式であってもよい。コンピュータプログラムプロダクトに関する一実施形態は、記載された方法のうち少なくとも１つの処理ステップのそれぞれに対応するコンピュータ実行可能な命令を有する。これらの命令は、サブルーチンに再分割されてもよく、及び／又は、静的又は動的に連結され得る１又はそれ以上のファイルに格納されてもよい。コンピュータプログラムプロダクトに関する他の実施形態が、記載されたシステ及び／又はプロダクトのうち少なくとも１つの手段のそれぞれに対応するコンピュータ実行可能な命令を有する。
【００８８】
上述の実施形態は、本発明を限定するよりはむしろ例示であり、当業者は、多くの代替実施形態を設計することが可能であることが留意されるべきである。
【００８９】
請求項において、括弧間に配置された任意の参照符号は、請求項を限定するものとして考慮されるべきではない。"有する"という動詞の使用及びその活用は、請求項に記載されたもの以外の要素又はステップの存在を除外するものではない。要素の単数標記は、斯様な要素の複数の存在を除外するものではない。本発明は、幾つかの異なる要素を有するハードウェアによって、及び、適切にプログラムされたコンピュータによって実装されてもよい。幾つかの手段を列挙している装置に係る請求項において、これらの手段の幾つかは、ハードウェアの全く同一のアイテムにより具現化されてもよい。特定の手段が相互に異なる従属請求項に記載されるという単なる事実は、これらの手段の組み合わせが有効に用いられ得ないことを示すものではない。
【００９０】
【符号の説明】
【００９１】
１００  コンピュータシステム
１１０  内部バス
１２０  ＡＬＵ
１２２,１２４  ＡＬＵ入力
１２６  ＡＬＵ制御信号
１２８  ＡＬＵ出力
１３０  コンピュータプロセッサ回路
１４０  メモリ
２００  コンピュータシステム
２１０  コンピュータプロセッサ
２２０  内部バス
２３０  データ及びアドレスバスインターフェース
２３５  データ及びアドレスバス
２４０  命令サイクル回路
２４１  命令デコーダ
２４２  加算器
２４３  命令ポインタ
２４４  命令レジスタ
２４６  加算ルックアップテーブル
２４７  テーブルベースの加算器
２４５  レジスタファイル
２５０  メモリ
２５５  メモリマッピングされたＩ／Ｏインタフェース
２６０  制御バス
【図１】
0006300796.tif 000002
【図２】
0006300796.tif 000003
【図３ａ】
0006300796.tif 000004
【図３ｂ】
0006300796.tif 000005
【図４】
0006300796.tif 000006
【図５】
0006300796.tif 000007
【図６】
0006300796.tif 000008
【図７】
0006300796.tif 000009
【図８】
0006300796.tif 000010