(57)【要約】      （修正有）【課題】暗号化演算のハードウェアアクセラレータを提供する。【解決手段】ベクトルレジスタからの第１入力及び第２入力に結合される第１モジュラ加算器６１０、及び、第１モジュラ加算器とベクトルレジスタからの第２データパスとに結合される第２モジュラ加算器６１２を含む第１データパス、並びに、第２入力とベクトルレジスタからの第３データパスとに結合される第１論理ＸＯＲ回路６１４、第１論理ＸＯＲ回路に結合される第１ローテート回路６１６、第１ローテート回路及び第３データパスに結合される第２論理ＸＯＲ回路６１８、及び、第２論理ＸＯＲ回路に結合される第２ローテート回路６２０を含む第２データパスを含む回路と、第１データパスの第１及び第２モジュラ加算器、並びに、第２データパスの第１及び第２論理ＸＯＲ回路、第１及び第２ローテート回路に、１又は複数の制御値に従ってラウンドの一部を実行させる。【選択図】図６
2019207393.tif 000002
【特許請求の範囲】
【請求項１】
暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、
前記ベクトルレジスタからの第１の入力及び前記ベクトルレジスタからの第２の入力に結合される第１のモジュラ加算器と、前記第１のモジュラ加算器、及び、前記ベクトルレジスタからの第２のデータパスに結合される第２のモジュラ加算器とを有する第１のデータパス、及び、
前記第２の入力、及び、前記ベクトルレジスタからの第３のデータパスに結合される第１の論理ＸＯＲ回路と、前記第１の論理ＸＯＲ回路に結合される第１のローテート回路と、前記第１のローテート回路及び前記第３のデータパスに結合される第２の論理ＸＯＲ回路と、前記第２の論理ＸＯＲ回路に結合される第２のローテート回路とを有する前記第２のデータパス
を有する回路と、
前記第１のデータパスの前記第１のモジュラ加算器及び前記第２のモジュラ加算器、並びに、前記第２のデータパスの前記第１の論理ＸＯＲ回路、前記第２の論理ＸＯＲ回路、前記第１のローテート回路及び前記第２のローテート回路に、１又は複数の制御値に従って前記ラウンドの一部を実行させ、前記一部に対する前記第１のデータパスからの第１の結果と、前記一部に対する前記第２のデータパスからの第２の結果とを前記ベクトルレジスタに格納させる制御回路と
を備える装置。
【請求項２】
初回のサイクルにおいて、前記入力ベクトルは、第１の要素に格納される第１の定数値及び前記第１の要素に隣接する第２の要素に格納される第２の定数値を有し、前記制御回路は、前記初回のサイクルにおける前記回路への入力として前記第１の定数値又は前記第２の定数値を供給するように、前記ベクトルレジスタと前記回路との間に結合されるマルチプレクサを制御する、請求項１に記載の装置。
【請求項３】
初回のサイクルにおいて、前記入力ベクトルは、隣接要素に格納される第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を有し、前記制御回路は、前記初回のサイクルにおける前記回路への入力として、前記第１の定数値、前記第１のキー値、前記第２のキー値及び前記第１のブロックカウンタ値を提供する、請求項１又は２に記載の装置。
【請求項４】
前記制御回路は、前記回路の前記第１のデータパスのための、前記ベクトルレジスタからの前記第１の入力に前記第１の定数値を提供し、前記初回のサイクルにおける前記回路の前記第２のデータパスのための、前記ベクトルレジスタからの前記第２の入力に前記第１のキー値を提供する、請求項３に記載の装置。
【請求項５】
前記第１の定数値、前記第１のキー値、前記第２のキー値及び前記第１のブロックカウンタ値は、前記初回のサイクルにおいて、前記ベクトルレジスタの第１の端部における隣接要素に格納され、前記制御回路は、前記第１の定数値、前記第１のキー値、前記第２のキー値及び前記第１のブロックカウンタ値を前記回路に入力して出力値を生成し、前記ラウンドの次のサイクルのために、前記ベクトルレジスタの第２の端部の隣接要素に前記出力値を格納する、請求項３又は４に記載の装置。
【請求項６】
前記制御回路は、前記第１の定数値、前記第１のキー値、前記第２のキー値及び前記第１のブロックカウンタ値以外の前記初回のサイクルの前記入力ベクトルを、前記ラウンドの前記次のサイクルのために前記ベクトルレジスタの前記第１の端部において開始する要素にシフトし、前記出力値は、前記ラウンドの前記次のサイクルのために、前記ベクトルレジスタの前記第２の端部の前記隣接要素に格納される、請求項５に記載の装置。
【請求項７】
前記制御回路は、前記ベクトルレジスタの前記第１の端部における複数の隣接要素からの前記ラウンドの追加のサイクルのための値を前記回路に入力して前記ラウンドの前記追加のサイクルのための出力値を生成し、前記ラウンドの前記追加のサイクルのための前記出力値、及び、前記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、前記複数の隣接要素以外の前記ベクトルレジスタの要素からの値を前記ベクトルレジスタに格納させる、請求項６に記載の装置。
【請求項８】
前記制御回路は、前記ベクトルレジスタの前記第１の端部における複数の隣接要素からの前記ラウンドの追加のサイクルのための値を前記回路に入力して前記ラウンドの前記追加のサイクルのための出力値を生成し、前記ラウンドの前記追加のサイクルのための前記出力値のサブセットからの値、及び、前記複数の隣接要素以外の前記ベクトルレジスタの要素からの値を、前記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で前記ベクトルレジスタの前記第１の端部における隣接要素に格納させ、前記追加のサイクルの後の前記次のサイクルのために部分的にアラインされた状態で、前記第１の端部以外の前記ベクトルレジスタの要素に前記サブセット以外の値を格納させる、請求項６又は７に記載の装置。
【請求項９】
暗号化演算のラウンドの入力ベクトルをベクトルレジスタに格納する段階と、
前記ベクトルレジスタからの第１の入力及び前記ベクトルレジスタからの第２の入力に結合される第１のモジュラ加算器と、前記第１のモジュラ加算器、及び、前記ベクトルレジスタからの回路の第２のデータパスに結合される第２のモジュラ加算器とを有する前記回路の第１のデータパスにおいて、前記第１のモジュラ加算器を用いて、前記入力ベクトルからの前記第１の入力からの第１の値と、前記ベクトルレジスタからの前記第２の入力からの第２の値とを加算して第１の中間結果を生成すること、及び、前記第２のモジュラ加算器を用いて、前記第１の中間結果と、前記第２のデータパスからの第３の中間結果とを加算して第１の結果を生成すること、並びに、
前記第２の入力、及び、前記ベクトルレジスタからの前記回路の第３のデータパスに結合される第１の論理ＸＯＲ回路と、前記第１の論理ＸＯＲ回路に結合される第１のローテート回路と、前記第１のローテート回路及び前記第３のデータパスに結合される第２の論理ＸＯＲ回路と、前記第２の論理ＸＯＲ回路に結合される第２のローテート回路とを有する前記回路の前記第２のデータパスにおいて、前記第１の論理ＸＯＲ回路を用いて、前記ベクトルレジスタからの前記第２の入力からの前記第２の値と、前記第３のデータパスからの第３の結果との論理ＸＯＲをとって第２の中間結果を生成すること、前記第１のローテート回路を用いて、１又は複数の制御値に従って前記第２の中間結果をローテートさせて第３の中間結果を生成すること、前記第３の中間結果と前記第３のデータパスからの第４の結果との論理ＸＯＲをとって第５の中間結果を生成すること、及び、前記第２のローテート回路を用いて、１又は複数の制御値に従って前記第５の中間結果をローテートさせて第２の結果を生成すること
により、前記回路を用いて前記入力ベクトルに対する前記ラウンドの一部を実行する段階と、
前記一部に対する前記第１のデータパスからの前記第１の結果と、前記一部に対する前記第２のデータパスからの前記第２の結果とを前記ベクトルレジスタに格納する段階と
を備える方法。
【請求項１０】
前記入力ベクトルを前記格納する段階は、初回のサイクルにおいて、第１の要素内の第１の定数値及び前記第１の要素に隣接する第２の要素内の第２の定数値を格納する段階を有し、さらに、前記ベクトルレジスタと前記回路との間に結合されるマルチプレクサをスイッチングして、前記初回のサイクルにおける前記回路への入力として前記第１の定数値又は前記第２の定数値を供給する段階を有する、請求項９に記載の方法。
【請求項１１】
前記入力ベクトルを前記格納する段階は、初回のサイクルにおいて、前記入力ベクトルの隣接要素に格納される第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を格納する段階を有し、さらに、前記初回のサイクルにおける前記回路への入力として、前記第１の定数値、前記第１のキー値、前記第２のキー値及び前記第１のブロックカウンタ値を送信する段階を有する、請求項９又は１０に記載の方法。
【請求項１２】
前記送信する段階は、前記回路の前記第１のデータパスのための、前記ベクトルレジスタからの前記第１の入力に前記第１の定数値を前記第１の値として送信する段階、及び、前記初回のサイクルにおける前記回路の前記第２のデータパスのための、前記ベクトルレジスタからの前記第２の入力に前記第１のキー値を前記第２の値として送信する段階を有する、請求項１１に記載の方法。
【請求項１３】
前記入力ベクトルを前記格納する段階は、初回のサイクルにおいて、前記第１の定数値、前記第１のキー値、前記第２のキー値及び前記第１のブロックカウンタ値を前記ベクトルレジスタの第１の端部における隣接要素に格納する段階を有し、前記送信する段階は、前記第１の定数値、前記第１のキー値、前記第２のキー値及び前記第１のブロックカウンタ値を前記回路に送信して、前記第１の結果及び前記第２の結果を含む出力値を生成する段階、及び、前記ラウンドの次のサイクルのために、前記ベクトルレジスタの第２の端部の隣接要素に前記出力値を格納する段階を有する、請求項１１又は１２に記載の方法。
【請求項１４】
前記実行する段階は、前記第１の定数値、前記第１のキー値、前記第２のキー値及び前記第１のブロックカウンタ値以外の前記初回のサイクルの前記入力ベクトルを、前記ラウンドの前記次のサイクルのために前記ベクトルレジスタの前記第１の端部において開始する要素にシフトする段階、及び、前記ラウンドの前記次のサイクルのために、前記ベクトルレジスタの前記第２の端部の前記隣接要素に前記出力値を格納する段階を有する、請求項１３に記載の方法。
【請求項１５】
前記ベクトルレジスタの前記第１の端部における複数の隣接要素からの前記ラウンドの追加のサイクルのための入力値を前記回路に送信して前記ラウンドの前記追加のサイクルのための出力値を生成する段階と、前記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、前記ラウンドの前記追加のサイクルのための前記出力値、及び、前記複数の隣接要素以外の前記ベクトルレジスタの要素からの値を前記ベクトルレジスタに格納する段階とをさらに備える、請求項１４に記載の方法。
【請求項１６】
前記ベクトルレジスタの前記第１の端部における複数の隣接要素からの前記ラウンドの追加のサイクルのための入力値を前記回路に送信して前記ラウンドの前記追加のサイクルのための出力値を生成する段階と、前記ラウンドの前記追加のサイクルのための前記出力値のサブセットからの値、及び、前記複数の隣接要素以外の前記ベクトルレジスタの要素からの値を、前記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で前記ベクトルレジスタの前記第１の端部における隣接要素に格納する段階と、前記追加のサイクルの後の前記次のサイクルのために部分的にアラインされた状態で、前記第１の端部以外の前記ベクトルレジスタの要素に前記サブセット以外の値を格納する段階とをさらに備える、請求項１４又は１５に記載の方法。
【請求項１７】
スレッドを実行し、暗号化演算をオフロードするハードウェアプロセッサと、
前記暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、
ハードウェアアクセラレータであって、
前記ベクトルレジスタからの第１の入力及び前記ベクトルレジスタからの第２の入力に結合される第１のモジュラ加算器と、前記第１のモジュラ加算器、及び、前記ベクトルレジスタからの第２のデータパスに結合される第２のモジュラ加算器とを有する第１のデータパス、及び
前記第２の入力、及び、前記ベクトルレジスタからの第３のデータパスに結合される第１の論理ＸＯＲ回路と、前記第１の論理ＸＯＲ回路に結合される第１のローテート回路と、前記第１のローテート回路及び前記第３のデータパスに結合される第２の論理ＸＯＲ回路と、前記第２の論理ＸＯＲ回路に結合される第２のローテート回路とを有する前記第２のデータパス
を含む回路、並びに、
前記第１のデータパスの前記第１のモジュラ加算器及び前記第２のモジュラ加算器、並びに、前記第２のデータパスの前記第１の論理ＸＯＲ回路、前記第２の論理ＸＯＲ回路、前記第１のローテート回路及び前記第２のローテート回路に、１又は複数の制御値に従って前記ラウンドの一部を実行させ、前記一部に対する前記第１のデータパスからの第１の結果と、前記一部に対する前記第２のデータパスからの第２の結果とを前記ベクトルレジスタに格納させる制御回路
を有するハードウェアアクセラレータと
を備えるシステム。
【請求項１８】
初回のサイクルにおいて、前記入力ベクトルは、第１の要素に格納される第１の定数値及び前記第１の要素に隣接する第２の要素に格納される第２の定数値を有し、前記制御回路は、前記初回のサイクルにおける前記回路への入力として前記第１の定数値又は前記第２の定数値を供給するように、前記ベクトルレジスタと前記回路との間に結合されるマルチプレクサを制御する、請求項１７に記載のシステム。
【請求項１９】
初回のサイクルにおいて、前記入力ベクトルは、隣接要素に格納される第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を有し、前記制御回路は、前記初回のサイクルにおける前記回路への入力として、前記第１の定数値、前記第１のキー値、前記第２のキー値及び前記第１のブロックカウンタ値を提供する、請求項１７又は１８に記載のシステム。
【請求項２０】
前記制御回路は、前記回路の前記第１のデータパスのための、前記ベクトルレジスタからの前記第１の入力に前記第１の定数値を提供し、前記初回のサイクルにおける前記回路の前記第２のデータパスのための、前記ベクトルレジスタからの前記第２の入力に前記第１のキー値を提供する、請求項１９に記載のシステム。
【請求項２１】
前記第１の定数値、前記第１のキー値、前記第２のキー値及び前記第１のブロックカウンタ値は、前記初回のサイクルにおいて、前記ベクトルレジスタの第１の端部における隣接要素に格納され、前記制御回路は、前記第１の定数値、前記第１のキー値、前記第２のキー値及び前記第１のブロックカウンタ値を前記回路に入力して出力値を生成し、前記ラウンドの次のサイクルのために、前記ベクトルレジスタの第２の端部の隣接要素に前記出力値を格納する、請求項１９又は２０に記載のシステム。
【請求項２２】
前記制御回路は、前記第１の定数値、前記第１のキー値、前記第２のキー値及び前記第１のブロックカウンタ値以外の前記初回のサイクルの前記入力ベクトルを、前記ラウンドの前記次のサイクルのために前記ベクトルレジスタの前記第１の端部において開始する要素にシフトし、前記出力値は、前記ラウンドの前記次のサイクルのために、前記ベクトルレジスタの前記第２の端部の前記隣接要素に格納される、請求項２１に記載のシステム。
【請求項２３】
前記制御回路は、前記ベクトルレジスタの前記第１の端部における複数の隣接要素からの前記ラウンドの追加のサイクルのための値を前記回路に入力して、前記ラウンドの前記追加のサイクルのための出力値を生成し、前記ラウンドの前記追加のサイクルのための前記出力値、及び、前記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、前記ベクトルレジスタに、前記複数の隣接要素以外の前記ベクトルレジスタの要素からの値を格納させる、請求項２２に記載のシステム。
【請求項２４】
前記制御回路は、前記ベクトルレジスタの前記第１の端部における複数の隣接要素からの前記ラウンドの追加のサイクルのための値を前記回路に入力して前記ラウンドの前記追加のサイクルのための出力値を生成し、前記ラウンドの前記追加のサイクルのための前記出力値のサブセットからの値、及び、前記複数の隣接要素以外の前記ベクトルレジスタの要素からの値を、前記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で前記ベクトルレジスタの前記第１の端部における隣接要素に格納させ、前記追加のサイクルの後の前記次のサイクルのために部分的にアラインされた状態で、前記第１の端部以外の前記ベクトルレジスタの要素に前記サブセット以外の値を格納させる、請求項２２又は２３に記載のシステム。
【請求項２５】
暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、
回路であって、
前記ベクトルレジスタからの第１の入力及び前記ベクトルレジスタからの第２の入力に結合される第１のモジュラ加算器と、前記第１のモジュラ加算器、及び、前記ベクトルレジスタからの第２のデータパスに結合される第２のモジュラ加算器とを有する第１のデータパス、及び、
前記第２の入力、及び、前記ベクトルレジスタからの第３のデータパスに結合される第１の論理ＸＯＲ回路と、前記第１の論理ＸＯＲ回路に結合される第１のローテート回路と、前記第１のローテート回路及び前記第３のデータパスに結合される第２の論理ＸＯＲ回路と、前記第２の論理ＸＯＲ回路に結合される第２のローテート回路とを有する前記第２のデータパス
を有する回路と、
前記第１のデータパスの前記第１のモジュラ加算器及び前記第２のモジュラ加算器、並びに、前記第２のデータパスの前記第１の論理ＸＯＲ回路、前記第２の論理ＸＯＲ回路、前記第１のローテート回路及び前記第２のローテート回路に、１又は複数の制御値に従って前記ラウンドの一部を実行させ、前記一部に対する前記第１のデータパスからの第１の結果と、前記一部に対する前記第２のデータパスからの第２の結果を前記ベクトルレジスタに格納させる手段と
を備える装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して電子工学に関し、より具体的には、本開示の実施形態は、暗号化演算を実行するハードウェアアクセラレータに関する。
【背景技術】
【０００２】
プロセッサ又はプロセッサのセットは、命令セット、例えば、命令セットアーキテクチャ（ＩＳＡ）からの命令を実行する。命令セットは、プログラミングに関するコンピュータアーキテクチャの一部であり、概して、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み及び例外処理、並びに、外部入力及び出力（Ｉ／Ｏ）を含む。本明細書において命令という用語は、マクロ命令、例えば、実行のためにプロセッサに提供される命令、又は、マイクロ命令、例えば、マクロ命令をデコードするプロセッサのデコーダに起因する命令を指し得ることに留意されたい。
【図面の簡単な説明】
【０００３】
本開示は、例示の目的で示されており、添付の図面の図に限定されることはなく、図内の同様の参照符号は同様の要素を示す。
【０００４】
【図１】本開示の実施形態に係る複数のコア及びハードウェアアクセラレータを含むハードウェアプロセッサを示す。
【０００５】
【図２】本開示の実施形態に係るハードウェアプロセッサ及びハードウェアアクセラレータを含むシステムを示す。
【０００６】
【図３】本開示の実施形態に係るＣｈａＣｈａハードウェアアクセラレータを示す。
【０００７】
【図４】本開示の実施形態に係るＢｌａｋｅハードウェアアクセラレータを示す。
【０００８】
【図５】本開示の実施形態に係るデュアルモード（ＣｈａＣｈａ／Ｂｌａｋｅ）ハードウェアアクセラレータを示す。
【０００９】
【図６】本開示の実施形態に係るＣｈａＣｈａクウォータラウンド回路を示す。
【００１０】
【図７】本開示の実施形態に係る統合されたＣｈａＣｈａクウォータラウンド及びＢｌａｋｅラウンド回路を示す。
【００１１】
【図８】本開示の実施形態に係るハードウェアアクセラレータの回路を示す。
【００１２】
【図９】本開示の実施形態に係るハードウェアアクセラレータの暗号化演算についてのラウンドの複数サイクルを示す。
【００１３】
【図１０】本開示の実施形態に係る図９におけるハードウェアアクセラレータのクリティカルデータパスを示す。
【００１４】
【図１１】本開示の実施形態に係るハードウェアアクセラレータの回路を示す。
【００１５】
【図１２】本開示の実施形態に係る図１１のハードウェアアクセラレータの暗号化演算についてのラウンドの複数サイクルを示す。
【００１６】
【図１３】本開示の実施形態に係る図１２におけるハードウェアアクセラレータのクリティカルデータパスを示す。
【００１７】
【図１４】本開示の実施形態に係るハードウェアアクセラレータの回路を示す。
【００１８】
【図１５】本開示の実施形態に係る図１４のハードウェアアクセラレータの暗号化演算についてのラウンドの複数サイクルを示す。
【００１９】
【図１６】本開示の実施形態に係る図１５におけるハードウェアアクセラレータのクリティカルデータパスを示す。
【００２０】
【図１７】本開示の実施形態に係るフロー図を示す。
【００２１】
【図１８Ａ】本開示の実施形態に係る汎用的なベクトルに適した命令フォーマット及びこれらのクラスＡの命令テンプレートを示すブロック図である。
【００２２】
【図１８Ｂ】本開示の実施形態に係る汎用的なベクトルに適した命令フォーマット及びこれらのクラスＢの命令テンプレートを示すブロック図である。
【００２３】
【図１９Ａ】本開示の実施形態に係る図１８Ａ及び図１８Ｂにおける汎用的なベクトルに適した命令フォーマットに対するフィールドを示すブロック図である。
【００２４】
【図１９Ｂ】本開示の一実施形態に係るフルオペコードフィールドを作成する図１９Ａにおける特定のベクトルに適した命令フォーマットのフィールドを示すブロック図である。
【００２５】
【図１９Ｃ】本開示の一実施形態に係るレジスタインデックスフィールドを作成する図１９Ａにおける特定のベクトルに適した命令フォーマットのフィールドを示すブロック図である。
【００２６】
【図１９Ｄ】本開示の一実施形態に係る拡張オペレーションフィールド１８５０を作成する図１９Ａにおける特定のベクトルに適した命令フォーマットのフィールドを示すブロック図である。
【００２７】
【図２０】本開示の一実施形態に係るレジスタアーキテクチャのブロック図である。
【００２８】
【図２１Ａ】本開示の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【００２９】
【図２１Ｂ】本開示の実施形態に係るプロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【００３０】
【図２２Ａ】本開示の実施形態に係る、オンダイ相互接続ネットワークへのその接続、及び、レベル２（Ｌ２）キャッシュのローカルサブセットと共に示すシングルプロセッサコアのブロック図である。
【００３１】
【図２２Ｂ】本開示の実施形態に係る図２２Ａにおけるプロセッサコアの一部の拡大図である。
【００３２】
【図２３】本開示の実施形態に係る１より多いコアを有し得る、統合メモリコントローラを有し得る、及び、統合グラフィックスを有し得るプロセッサのブロック図である。
【００３３】
【図２４】本開示の一実施形態に係るシステムのブロック図である。
【００３４】
【図２５】本開示の実施形態に係るより具体的で例示的なシステムのブロック図である。
【００３５】
【図２６】本開示の実施形態に係る第２のより具体的で例示的なシステムのブロック図が示される。
【００３６】
【図２７】本開示の実施形態に係るシステムオンチップ（ＳｏＣ）のブロック図が示される。
【００３７】
【図２８】本開示の実施形態に係るソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令変換器の使用を対比したブロック図である。
【発明を実施するための形態】
【００３８】
以下の説明において、多数の具体的な詳細が示される。しかしながら、本開示の実施形態は、これらの具体的な詳細がなくても実施され得ることが理解される。他の例において、周知の回路、構造及び技術は、本説明の理解を曖昧にしないために、詳細に示されてはいない。
【００３９】
本明細書において、「一実施形態」、「実施形態」、「例示的な実施形態」などへの言及は、説明される実施形態が、特定の機能、構造又は特性を含み得るが、すべての実施形態が、その特定の機能、構造又は特性を必ずしも含んでいなくてもよいことを示す。さらに、そのような表現は必ずしも同じ実施形態を指しているわけではない。さらに、実施形態と関連して特定の機能、構造又は特性が説明される場合、明示に説明されるか否かに関わらず、他の実施形態と関連してそのような機能、構造又は特性に影響を及ぼすことが当業者の知識の範囲内であることが考えられる。
【００４０】
（例えば、ハードウェア）プロセッサ（例えば、１又は複数のコアを有する）は、例えば算術、論理又は他の機能を実行するために、データに対する演算を行うように命令（例えば、命令のスレッド）を実行し得る。例えば、ソフトウェアは、オペレーションを要求し得、ハードウェアプロセッサ（例えば、それの１つのコア又は複数のコア）は、要求に応答してオペレーションを実行し得る。一実施形態において、プロセッサは、例えば、（例えば、オンダイ又はオフダイ）アクセラレータ（例えば、オフロードエンジン）に結合され、１又は複数のオペレーションがプロセッサ上のみで実行される代わりに、これらの（例えば、オフロードされた）オペレーションを実行する。一実施形態において、プロセッサは、例えば、１又は複数のオペレーションがプロセッサ上のみで実行される代わりに、これらのオペレーションを実行する（例えば、オンダイ）アクセラレータ（例えば、オフロードエンジン）を含む。
【００４１】
オペレーションの非限定的な例は、（例えば、暗号化及び／又は復号のための）暗号化演算である。暗号化演算は、復号された場合のみ読み出され得る暗号化テキストを生成するために、（例えば、暗号化暗号と称され得る）暗号化規格を用いて、（例えば、平文と称され得る）対象とする情報又はメッセージを暗号化することを含んでよい。暗号化規格は、暗号化規格に従って生成される擬似乱数暗号キーを利用し得る。暗号化規格は、（例えば、ガロアカウンタモード（ＧＣＭ））において実装される）高度な暗号化規格（ＡＥＳ）、ＣｈａＣｈａ（例えば、ＣｈａＣｈａＸ、Ｘはラウンド数であり、例えば、ＣｈａＣｈａ２０は２０ラウンド、すなわち、８０クウォータラウンドである）暗号化規格（例えば、ストリーム暗号）、Ｐｏｌｙ１３０５ＡＥＡＤ、Ｂｌａｋｅ（例えば、Ｂｌａｋｅ２、Ｂｌａｋｅ２ｂ又はＢｌａｋｅ２ｓ）又はこれらの規格のいずれかに基づく（例えば、将来の）暗号化規格のうちの１つ又は複数を含んでよい。暗号化規格は、例えば、１又は複数のインターネットブラウザにより用いられるトランスポート層セキュリティ（ＴＬＳ）プロトコルにおいて、追加のデータを有する認証付き暗号（ＡＥＡＤ）に用いられ暗号化規格（例えば、暗号（ｃｉｐｈｅｒ））であってよい。暗号化演算は、暗号化演算に関する（例えば、ＣｈａＣｈａ）暗号キー及び／又は（例えば、Ｂｌａｋｅ）状態を決定することを含んでよい。ハッシングアルゴリズムのＰｏｌｙ又はＢｌａｋｅタイプは、ある実施形態に用いられてよく、例えば、Ｂｌａｋｅタイプは、ＣｈａＣｈａストリーム暗号を用いて、ハッシュを実行してよく、及び／又は、Ｐｏｌｙタイプは、認証付き暗号のためにＣｈａＣｈａと共に用いられてよい。
【００４２】
一実施形態において、アクセラレータは、例えば、暗号化演算を実行するプロセッサ（例えば、中央処理装置（ＣＰＵ））への及び／又はプロセッサのための要求に応答して、暗号化演算を実行してよい。アクセラレータは、データ、例えば、入力データ及び／又は出力データを格納する（例えば、アクセラレータを有するオンダイの、又は、オフダイの）１又は複数のストレージデバイスに結合されてよい。一実施形態において、アクセラレータは、（例えば、入力キーを含む）暗号化入力データを受信し、成果（例えば、出力キー（例えば、キーストリーム）又は状態）を出力する。プロセッサは、１つのオペレーション又は複数のオペレーション（例えば、命令、命令スレッド又は他のワーク）をアクセラレータにオフロードする命令を実行してよい。プロセッサは、アクセラレータから成果（例えば、出力キー又は状態）を受け取って、例えば、暗号化メッセージ（例えば、暗号化テキスト）を生成するために、当該成果を用いて、さらなるアクションを実行してよい。一実施形態において、出力キー（例えば、キーストリーム）は、暗号化メッセージ（例えば、暗号化テキスト）を成果として生成するために、平文を用いて排他的なＯＲがとられ（ＸＯＲがとられ）る。
【００４３】
本明細書におけるある実施形態では、認証付き暗号の性能を大幅に向上させるために、（例えば、１又は複数の暗号化演算（例えば、ＣｈａＣｈａ及び／又はＢｌａｋｅストリーム暗号化規格に従う加速オペレーションを含む）のアクセラレーションハードウェアを介した）アクセラレーションを可能にする。本明細書におけるある実施形態では、例えば、ソフトウェア及び／又はマイクロコードを用いて暗号化演算を実行することと比較して、性能が最適化された（例えば、ＣｈａＣｈａ）暗号化規格に従って、暗号化演算を実行するための（例えば、構成可能な）ハードウェアアクセラレータを対象にする。本明細書におけるある実施形態では、例えば、遅延型の列／対角線状態アラインメント技術を用いない場合と比較して、遅延型の列／対角線状態アラインメント技術を用いて（例えば、１５％）性能が最適化された（例えば、ＣｈａＣｈａ）暗号化規格に従って、暗号化演算を実行するための（例えば、構成可能な）ハードウェアアクセラレータを対象にする。ある実施形態において、例えば、（例えば、ＣｈａＣｈａ）ラウンドの変数などの追加機能をサポートする、及び／又は、ハードウェアアクセラレータは、（例えば、共有回路を用いる）（例えば、Ｂｌａｋｅ）暗号化ハッシュ関数をサポートするように拡張される。
【００４４】
本明細書におけるある実施形態では、ソフトウェア又はマイクロコードを用いる代わりに、ハードウェアアクセラレータを用いて暗号化演算を実行する。本明細書におけるある実施形態では、ソフトウェア及び／又はマイクロコード実装を用いることができない所望のスループットを有する（例えば、複数の（例えば、直列）加算を含む）暗号化演算のアクセラレーションを提供する。本明細書におけるある実施形態では、クロックサイクル毎に暗号化規格（例えば、ＣｈａＣｈａ暗号化規格）のラウンドの一部（例えば、１クウォータラウンド（Ｑラウンド））を実行する最適化されたデータパスを有する構成可能なハードウェアアクセラレータを対象にする。ある実施形態において、ハードウェアアクセラレータは、ラウンドの変数、例えば、（ＣｈａＣｈａ２０モード）におけるデフォルトである２０用に構成される。ある実施形態において、例えば、ハードウェアアクセラレータは、ＣｈａＣｈａ  Ｑラウンド操作にＢｌａｋｅラウンド関数との類似性を活用することにより、（例えば、Ｂｌａｋｅ）ハッシュ関数を加速するように構成される。ＣｈａＣｈａ２０暗号化規格用のハードウェアアクセラレータの一実施形態において、当該ハードウェアアクセラレータは、約８０サイクルより小さいレイテンシ与えるだけであり、及び／又は、（例えば、ソフトウェア実装上の性能を１０倍向上させる）約５．３Ｇｂｐｓの暗号化スループットを提供し、顕著な性能向上をもたらす。本明細書の開示に係るハードウェアアクセラレータのある実施形態では、ＣｈａＣｈａ暗号化規格用の専用のＱラウンド計算回路を使用し、これは、さらに性能を向上させるために、列／対角線状態アラインメント技術と共に用いられ得る。本明細書におけるある実施形態では、スループットのさらなる向上を得るために、並列（例えば、Ｑラウンド）演算に対してスケーリングされ得る完全に合成可能なハードウェアアクセラレータ設計を提供する。ハードウェアアクセラレータのある実施形態では、増加又は減少されたラウンド数で、ＣｈａＣｈａ暗号化規格とはわずかに異なるものを実行するために用いられてよく、低レベルソフトウェア実装に対してハードウェアを柔軟にする。わずかな変更を伴って、本明細書におけるある実施形態では、ソフトウェア実装にわたるＢｌａｋｅハッシュ関数を実装する際に１０倍の性能改善を得るようにＢｌａｋｅラウンド計算に対するサポートを提供する。
【００４５】
図１は、本開示の実施形態に係る複数のコア（０からＮ、Ｎは１又はそれより大きくてよい）を含むハードウェアプロセッサ１００及びハードウェアアクセラレータ１０４を示す。ハードウェアプロセッサ１００（例えば、アクセラレータ１０４及び／又はこれらのコア）は、データストレージデバイス１０６（例えば、メモリ）に結合されてよい。一実施形態において、メモリは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、プライベート（例えば、アクセラレータに対してプライベート）なランダムアクセスメモリ（ＲＡＭ）、キャッシュメモリ又はシステムメモリであってよい。単一のハードウェアアクセラレータ１０４が示されているが、複数のハードウェアアクセラレータ（例えば、０からＭ）が用いられてもよい。複数のコアが示されているが、単一のコア、例えば、コア０（１０２）が用いられてもよい。ハードウェアアクセラレータは、ハードウェア暗号化及び／又は復号回路であってよい。
【００４６】
プロセッサ１００（例えば、コア１０２）は、（例えば、ソフトウェアから）要求を受信して、（復号を含み得る）暗号化演算を実行してよく、（例えば、少なくとも一部の）暗号化演算（例えば、スレッド）をハードウェアアクセラレータ１０４にオフロードしてよい。コア、アクセラレータ及びデータストレージデバイス１０６は、互いに通信して（例えば、結合されて）よい。矢印は、２方向の通信（例えば、コンポーネント間）を示すが、一方向の通信が用いられてもよい。一実施形態において、（例えば、各）コアは、例えば、データ１０８にアクセスするために、データストレージデバイス１０６と通信して（例えば、結合されて）よい。一実施形態において、（例えば、各）アクセラレータは、例えば、データ１０８にアクセスするために、データストレージデバイス１０６と通信して（例えば、結合されて）よい。データ１０８は、（例えば、図５に関して説明されるような）暗号化データであってよい。示される実施形態において、ハードウェアアクセラレータ１０４は、ハードウェアプロセッサ１００内にある。ハードウェアアクセラレータ１０４は、本明細書で説明される回路のいずれかを含んでよい。ハードウェアプロセッサ１００は、１又は複数のレジスタ（例えば、ハードウェアアクセラレータ１０４から分離したレジスタ１１０）を含んでよい。レジスタ１１０は、（例えば、図５に関して説明されるような）暗号化データを格納してよい。ハードウェアアクセラレータ１０４は、１又は複数のレジスタ（例えば、コアから分離したレジスタ１１２）を含んでよい。レジスタ１１２は、（例えば、図５に関して説明されるような）暗号化データを格納してよい。ハードウェアアクセラレータ１０４のレジスタ１１２は、例えば、ハードウェアアクセラレータ１０４が暗号化演算を実行する前に、（例えば、ハードウェアプロセッサ１００の１つのコア又は複数のコアにより）暗号化データを用いてロードされてよい。
【００４７】
図２は、本開示の実施形態に係るハードウェアプロセッサ２０１及びハードウェアアクセラレータ２０４を含むシステム２００を示す。一実施形態において、ハードウェアアクセラレータ２０４は、ハードウェアプロセッサ２０１と共にオンダイである。一実施形態において、ハードウェアアクセラレータ２０４は、ハードウェアプロセッサ２０１のオフダイである。一実施形態において、少なくともハードウェアプロセッサ２０１及びハードウェア解凍アクセラレータ２０４を含むシステム２００はシステムオンチップ（ＳＯＣ）である。ハードウェアプロセッサ２０１（例えば、コア２０２）は、（例えば、ソフトウェアから）要求を受信して、解凍（例えば、デフレート）スレッド（例えば、オペレーション）を実行してよく、（例えば、少なくとも一部の）解凍（例えば、デフレート）スレッド（例えば、オペレーション）をハードウェアアクセラレータ（例えば、ハードウェア解凍アクセラレータ２０４）にオフロードしてよい。ハードウェアプロセッサ２０１は、１又は複数のコア（０からＮ）を含んでよい。一実施形態において、各コアは、ハードウェアアクセラレータ２０４と通信して（例えば、結合されて）よい。一実施形態において、各コアは、複数のハードウェア解凍アクセラレータのうちの１つと通信して（例えば、結合されて）よい。コア、アクセラレータ及びデータストレージデバイス２０６は、互いに通信して（例えば、結合されて）よい。矢印は、２方向の通信（例えば、コンポーネント間）を示すが、一方向の通信が用いられてもよい。一実施形態において、（例えば、各）コアは、例えば、（例えば、ロード及び／又はストア）データ２０８にアクセスするために、データストレージデバイス２０６と通信して（例えば、結合されて）よい。一実施形態において、（例えば、各）アクセラレータ２０４は、例えば、（例えば、ロード及び／又はストア）データ２０８にアクセスするために、データストレージデバイス２０６と通信して（例えば、結合されて）よい。データ２０８は、（例えば、図５に関して説明されるような）暗号化データであってよい。ハードウェアアクセラレータ２０４は、本明細書に説明される回路のいずれかを含んでよい。ハードウェアプロセッサ２０１は、１又は複数のレジスタ（例えば、レジスタ２１０）を含んでよい。レジスタ２１０は、（例えば、図５に関して説明されるような）暗号化データを格納してよい。ハードウェアアクセラレータ２０４は、１又は複数のレジスタ（例えば、レジスタ２１２）を含んでよい。レジスタ２１２は、（例えば、図５に関して説明されるような）暗号化データを格納してよい。ハードウェアアクセラレータ２０４のレジスタ２１２は、例えば、ハードウェアアクセラレータ２０４が暗号化演算を実行する前に、（例えば、ハードウェアプロセッサ２０１により）暗号化データを用いてロードされてよい。ハードウェアアクセラレータは、特定の暗号化規格又は規格のために提供されてよい。
【００４８】
図３は、本開示の実施形態に係るＣｈａＣｈａハードウェアアクセラレータ３０４を示す。示されるハードウェアアクセラレータ３０４は、ＣｈａＣｈａ入力値を受信する複数の入力３０１（例えば、入力ポート）を含み、ＣｈａＣｈａハードウェアアクセラレータ３０４により操作される場合に出力３０３（例えば、出力ポート）に対するＣｈａＣｈａキー出力値を生成する。一実施形態において、入力３０１に対する入力値は、（例えば、２５６ビット）キー、（例えば、９６ビット）ノンス（例えば、初期化）値、（例えば、３２ビット）初期のカウント値（例えば、定数値）及びハードウェアアクセラレータ３０４が実行するラウンド数を示す（例えば、６ビット）値のうちの１つ又は複数を含む。ハードウェアアクセラレータ３０４は、以下の図に示される回路を含んでよい。
【００４９】
図４は、本開示の実施形態に係るＢｌａｋｅハードウェアアクセラレータ４０４を示す。示されるハードウェアアクセラレータ４０４は、Ｂｌａｋｅ入力値を受信する複数の入力４０１（例えば、入力ポート）を含み、Ｂｌａｋｅハードウェアアクセラレータ４０４により操作される場合に、出力４０３（例えば、出力ポート）に対するＢｌａｋｅ状態出力値を生成する。一実施形態において、入力４０１に対する入力値は、（例えば、５１２ビット）Ｂｌａｋｅ状態値、第１のメッセージプラス定数値及び第２のメッセージプラス定数値のうちの１つ又は複数を含む。ハードウェアアクセラレータ４０４は、以下の図に示される回路を含んでよい。
【００５０】
図５は、本開示の実施形態に係るデュアルモード（ＣｈａＣｈａ／Ｂｌａｋｅ）ハードウェアアクセラレータ５０４を示す。示されるハードウェアアクセラレータ５０４は、ＣｈａＣｈａ入力値を受信する複数の入力５０１（例えば、入力ポート）を含み、ＣｈａＣｈａモードにおけるハードウェアアクセラレータ５０４により操作される場合に、出力５０３（例えば、出力ポート）に対するＣｈａＣｈａキー出力値を生成する。一実施形態において、入力５０１に対する入力値は、（例えば、２５６ビット）キー、（例えば、９６ビット）ノンス（例えば、初期化）値、（例えば、３２ビット）初期のカウント値（例えば、定数値）及びハードウェアアクセラレータ５０４が実行するラウンド数を示す（例えば、６ビット）値のうちの１つ又は複数を含む。ハードウェアアクセラレータ５０４は、以下の図に示される回路を含んでよい。示されるハードウェアアクセラレータ５０４はまた、Ｂｌａｋｅ入力値を受信する複数の入力５０５（例えば、入力ポート）を含み、Ｂｌａｋｅモードにおいてハードウェアアクセラレータ５０４により操作される場合に、出力５０７（例えば、出力ポート）に対するＢｌａｋｅ状態出力値を生成する。一実施形態において、入力５０５に対する入力値は、（例えば、５１２ビット）Ｂｌａｋｅ状態値、第１のメッセージプラス定数値及び第２のメッセージプラス定数値のうちの１つ又は複数を含む。ハードウェアアクセラレータ５０４は、ＣｈａＣｈａモードとＢｌａｋｅモードとの間を切り替えるために、（例えば、プロセッサから）値を受信する入力５０９（例えば、入力ポート）をさらに含む。２つの別個の入力５０１、５０５（例えば、入力ポート）を用いる代わりに、ハードウェアアクセラレータは、単一の統合された入力５１１（例えば、入力ポート）を用いてよい。２つの別個の出力５０３、５０７（例えば、出力ポート）を用いる代わりに、ハードウェアアクセラレータは、単一の統合された出力５１３（例えば、出力ポート）を用いてよい。ハードウェアアクセラレータ５０４は、以下の図（例えば、図７）に示される回路を含んでよい。
【００５１】
一実施形態において、入力５０９に対する単一の構成ビットは、ＣｈａＣｈａ（例えば、ストリーム暗号）モードとＢｌａｋｅ（例えば、ハッシュ関数）モードとからオペレーションのモードを選択する。ＣｈａＣｈａモードの一実施形態において、入力は、（例えば、２５６ビット）キー、（例えば、９６ビット）ノンス及び（例えば、３２ビット）初期のカウント値を含む。ある実施形態において、（例えば、６ビット）（例えば、構成）値は、ハードウェアアクセラレータ５０４がＣｈａＣｈａ暗号化規格に従って実行するラウンド数を示す。したがって、特定のハードウェアアクセラレータは、あらゆる脆弱性を克服するために、ラウンド数を変更する（例えば、増やす又は減らす）ように柔軟性を提供する。一実施形態において、ハードウェアアクセラレータは、ＣｈａＣｈａ暗号化規格オペレーションの２０ラウンドを実行することがデフォルトで設定されている。以下の表１は、ＣｈａＣｈａ状態機構の実施形態を説明する。
【００５２】
一実施形態において、ＣｈａＣｈａ（例えば、ＣｈａＣｈａ２０）は、暗号化の２０ラウンドごとに、（例えば、図３におけるアクセラレータ３０４の出力３０３から、又は、図５におけるアクセラレータ５０４の出力５０３（又は５１３）から）（例えば、５１２ビット）キーストリームを生成するストリーム暗号である。ある実施形態において、キーストリームは、暗号化テキストを取得するために、平文を用いてＸＯＲがとられる。ある実施形態において、キーストリームの計算は、以下の表１に示されるように、複数の要素（例えば、１６×３２ビットワード）に分割され、４×４行列のデータ（例えば、３２ビットワード）として編成される（例えば、５１２ビット）状態に対して作用する。
【表１】
2019207393.tif 000003
一実施形態において、ＣｈａＣｈａ状態の開始要素は、
１．定数（「Ｃ０、Ｃ１、Ｃ２及びＣ３」）−Ｃ０からＣ３は、暗号化の２０ラウンド毎の後の初期化された（例えば、３２ビット）定数である、
２．キー（「Ｎ」）−（例えば、２５６ビット）秘密キー、
３．ブロックカウンタ（「ＢＣ」）−暗号化の２０ラウンド毎にインクリメントされる（例えば、３２ビット）ブロックカウンタ、
４．ノンス（「Ｎ」）−（例えば、９６ビット）ノンス又は初期化ベクトル
を含む。
【００５３】
一実施形態において、表１からのデータは、例えば、データを用いるオペレーションをハードウェアアクセラレータにオフロードしているハードウェアコンポーネントにより、（例えば、単一の）パックドデータ（例えば、ベクトル）レジスタにロードされる。表１は、各データ要素に対する例示的な要素の位置を含む。２次元マトリクスにおいて示されるが、データは、単一次元のアレイ（例えば、ベクトル）に格納されてよい。マトリクス表記は、ここでは、なぜ一部のラウンド（例えば、クウォータラウンド）が、（例えば、表１のマトリクスの列からのデータのサブセットを用いる）列ラウンドと称されており、一方、その他が、（例えば、表１のマトリクスの対角線からのデータのサブセットを用いる）対角線ラウンドと称されるかを示すために用いられている。ハードウェアアクセラレータは、そのオペレーションを実行するために、上記のデータ（例えば、ハードウェアアクセラレータに結合されたベクトルレジスタにロードされるデータ）を用いてよい。ハードウェアアクセラレータは、ラウンド（又は、ラウンドの一部、例えば、ラウンドの４分の１（クウォータラウンド））を実行する（例えば、特化型）回路、例えば、図６に示すようなＣｈａＣｈａクウォータラウンド回路、又は、図７に示すような統合されたＣｈａＣｈａクウォータラウンド／Ｂｌａｋｅラウンド回路を用いてよい。
【００５４】
ＣｈａＣｈａ暗号化規格に関する（例えば、主な）オペレーションは、クウォータラウンド（Ｑラウンド）操作である。Ｂｌａｋｅ暗号化ハッシュ関数の実施形態では、ＣｈａＣｈａクウォータラウンド操作と同様のラウンド操作を有するＣｈａＣｈａ暗号化規格に基づいてもよい。構成可能なアクセラレータは、（例えば、図５における入力５０１及び入力５０５により示されるように、）（例えば、５１２ビット）Ｂｌａｋｅ入力値及び（例えば、３８４ビット）ＣｈａＣｈａ入力値に対して２つの別個の入力ポートを有することができる、又は、代わりに、（例えば、図５における統合された入力５１１により示されるような）共通の（例えば、５１２ビット）入力を共有することができ、例えば、キー、ノンス、初期カウンタ値はＣｈａＣｈａモードの間に共通の入力から抽出される。同様に、アクセラレータは、（例えば、図５における出力５０３及び出力５０７により示されるような）２つのモードに対して２つの別個の出力ポートを有してよい、又は、代わりに、（例えば、図５における統合された出力５１３により示されるような）共通の５１２ビットの出力ポートを共有してもよい。ある実施形態において、アクセラレータ（例えば、共通の５１２ビット入力／出力（Ｉ／Ｏ）バス）に対する結合（例えば、入力及び出力）は、選択されたモードへの入力と同様に、例えば、オペレーションの終了時のサンプリングされた出力を提供する。Ｑラウンドに関する例示的な論理回路の実装は、図６に示されるようなものである。
【００５５】
図６は、本開示の実施形態に係るＣｈａＣｈａクウォータラウンド回路６００を示す。示される回路６００は、（例えば、ここでは、値Ａ、Ｂ、Ｃ、Ｄと称される）４つの入力値をそれぞれ受信する４つの入力（例えば、入力ポート）（６０２、６０４、６０６及び６０８）を含む。示される回路６００は、（例えば、本明細書において値Ａｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗと称される）４つの出力値をそれぞれ出力する４つの出力（例えば、出力ポート）（６５２、６５４、６５６及び６５８）を含む。一実施形態において、回路６００は、単一のサイクル（例えば、アクセラレータのサイクル）において、（例えば、暗号化標準に従う）その計算を実行する。回路６００は、入力６０２から出力６５２へのデータパスＡ、入力６０４から出力６５４へのデータパスＢ、入力６０６から出力６５６へのデータパスＣ及び入力６０８から出力６５８へのデータパスＤを含む。データパスＡは、値Ａと値Ｂとを加算してその出力上に成果としてそれを提供するように入力６０２及び入力６０４に結合される加算器６１０（例えば、モジュラ加算器）を含む。加算器６１０の出力は、加算器６１２（例えば、モジュラ加算器）の第１の入力に結合され、加算器６１２の第２の入力は、これらの入力値を加算してその出力６５２上に成果Ａｎｅｗとしてそれを提供するように、データパスＢのローテート回路６１６の出力に結合される。データパスＢは、これらの値のＸＯＲをとり、その出力上に成果としてそれを提供するように、入力６０４とデータパスＣにおける加算器６２２からの出力とに結合される論理ＸＯＲ回路６１４を含む。論理ＸＯＲ回路６１４の出力は、その値を（例えば、１２ビット左に）ローテートさせてその出力上に成果としてそれを提供する（例えば、１２ビット、左）ローテート回路６１６の入力に結合される。ローテート回路６１６の出力は、論理ＸＯＲ回路６１８の第１の入力に結合され、論理ＸＯＲ回路６１８の第２の入力は、これらの値を加算してその出力上に成果としてそれを提供するデータパスＣにおける加算器６２４の出力に結合される。論理ＸＯＲ回路６１８の出力は、その値を（例えば、７ビット左に）ローテートさせてその出力６５４上に成果Ｂｎｅｗとしてそれを提供する（例えば、７ビット、左）ローテート回路６２０の入力に結合される。データパスＣは、これらの値を加算してその出力上に成果としてそれを提供するように、入力６０６とデータパスＤのローテート回路６２８の出力とに結合される加算器６２２（例えば、モジュラ加算器）を含む。加算器６２２の出力は、加算器６２４（例えば、モジュラ加算器）の第１の入力に結合され、加算器６２４の第２の入力は、これらの入力値を加算して、その出力６５６上に成果Ｃｎｅｗとしてそれを提供するようにデータパスＤのローテート回路６３２の出力に結合される。データパスＤは、これらの値のＸＯＲをとり、その出力上に成果としてそれを提供するように、入力６０８とデータパスＡにおける加算器６１０からの出力とに結合される論理ＸＯＲ回路６２６を含む。論理ＸＯＲ回路６２６の出力は、その値を（例えば、１６ビット左に）ローテートさせてその出力上に成果としてそれを提供する（例えば、１６ビット、左）ローテート回路６２８に結合される。ローテート回路６２８の出力は、論理ＸＯＲ回路６３０第１の入力に結合され、論理ＸＯＲ回路６３０の第２の入力は、これらの値を加算してその出力上に成果としてそれを提供するデータパスＡにおける加算器６１２の出力に結合される。論理ＸＯＲ回路６３０の出力は、その値を（例えば、８ビット左に）ローテートさせてその出力６５８上に成果Ｄｎｅｗとしてそれを提供する（例えば、８ビット、左）ローテート回路６３２の入力に結合される。
【００５６】
ある実施形態において、モジュラ加算器は、成果Ｘがモジュラス（例えば、２３２又は２６４のモジュラス）より小さい（又は、これに等しい）場合、成果Ｘに対する実際の成果を出力し、そうでない場合は、出力Ｘ＝Ｘモジュラス（例えば、２３２又は２６４のモジュラス）である。ある実施形態において、論理ＸＯＲ回路は、その入力が異なる（一方が真であり、他方が偽である）場合のみ真値（例えば、１）を出力し、そうでない場合、偽値（例えば、ゼロ）を出力する。一実施形態において、論理ＸＯＲ回路は、ＸＯＲゲート又は他の論理回路実装である。ある実施形態において、ローテート回路は、いずれのビットも破棄することなく、その入力値（例えば、複数のビット）に対する循環シフト（例えば、破棄される代わりに、一端から他端へのラップアラウンド）を実行する。ローテート回路は、所与のビット数に対する右ローテート又は左ローテートを実行してよく、例えば、図６におけるローテート回路６１６は、例えば、制御回路からの制御値に基づいて１２ビットの左ローテートを実行する。ある実施形態において、シフト回路は、その入力値（例えば、複数のビット）に対するシフトを実行して、端部から落ちるいずれかのビットを破棄する。
【００５７】
ある実施形態において、Ｑラウンド回路６００は、Ａ、Ｂ、Ｃ、Ｄという名称の４つの（例えば、それぞれ３２ビット）入力に対して演算を行い、４直列加算（モジュロ２３２）、ＸＯＲ及びローテート操作から構成される。本実施形態におけるＱラウンド回路６００の出力は、ＣｈａＣｈａ状態の入力要素を更新するために用いられる４つの新たに算出された（例えば、３２ビット）値Ａｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗである。一実施形態において、制御回路は図８における制御回路８０６である。
【００５８】
図７は、本開示の実施形態に係る統合されたＣｈａＣｈａクウォータラウンド及びＢｌａｋｅラウンド回路７００を示す。示される回路７００は、（例えば、ここでは、値Ａ、Ｂ、Ｃ、Ｄと称される）４つの入力値をそれぞれ受信する４つの入力（例えば、入力ポート）（７０２、７０４、７０６及び７０８）を含む。図６における回路６００とは対照的に、示される回路７００は、さらに、マルチプレクサ７０１、加算器７０３（例えば３つ又はそれより多くの入力を加算するための桁上げ保存加算器）、マルチプレクサ７０５、加算器７０７（例えば、３つ又はそれより多くの入力を加算するための桁上げ保存加算器）及びマルチプレクサを制御する制御線を含む。示されるマルチプレクサ７０１は、Ｂｌａｋｅ状態（例えば、３２'ｂ０）の第１のサブセット（例えば、３２ビット）及び第１のメッセージ＋定数値のうちの一方をその出力として選択する、例えば、図５を参照。制御線（Ｂｌａｋｅ選択）は、例えば、制御回路（例えば、図８における制御回路８０６）により提供される値によって、これらの入力から選択する。示されるマルチプレクサ７０１は、Ｂｌａｋｅ状態（例えば、３２'ｂ０）の第１のサブセット（例えば、３２ビット）及び第２のメッセージ＋定数値のうちの一方をその出力として選択する、例えば、図５を参照。制御線（Ｂｌａｋｅ選択）は、例えば、制御回路（例えば、図８における制御回路８０６）により提供される値により、これらの入力から選択する。示される回路７００は、（例えば、ここでは、値Ａｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗと称される）４つの出力値をそれぞれ出力する４つの出力（例えば、出力ポート）（７５２、７５４、７５６及び７５８）を含む。一実施形態において、回路７００は、単一のサイクル（例えば、アクセラレータのサイクル）において、（例えば、暗号化標準に従う）その計算を実行する。回路７００は、入力７０２から出力７５２へのデータパスＡ、入力７０４から出力７５４へのデータパスＢ、入力７０６から出力７５６へのデータパスＣ及び入力７０８から出力７５８へのデータパスＤを含む。データパスＡは、その出力として、Ｂｌａｋｅ状態（例えば、３２'ｂ０）の第１のサブセット（例えば、３２ビット）及び第１のメッセージ＋定数値のうちの一方を選択するマルチプレクサ７０１を含む。マルチプレクサ７０１の出力は、第１の入力として、加算器７０３（例えば、３つ又はより多くの入力を加算するための桁上げ保存加算器（ＣＳＡ））に結合され、入力７０２及び入力７０４も、これらの値を加算して成果としてそれを提供する加算器７０３に結合される。ＣＳＡ加算器７０３の桁上げ及び保存出力は、加算器７１０（例えば、モジュラ加算器）に入力されてよく、加算器７１０は、その出力上に成果としてそれを提供する。
【００５９】
一実施形態において、ＣｈａＣｈａモードでは、２つの値（Ａ及びＢ）のみが加算されるが、Ｂｌａｋｅモードでは、３つの値が加算されることになる。ある実施形態において、回路７００は、これら３つの値の項を加算して、合計値及び桁上げ値の両方を生成する桁上げ保存加算器（例えば、ＣＳＡ加算器７０３）を含む。合計値及び桁上げ値は、加算を完了し、最終的な合計を得るように加算器７１０により加算されてよい。ある実施形態において、ＣｈａＣｈａモードでは、ＣＳＡ加算器７０３への３つの入力のうちの１つがゼロであり、したがって、ＣＳＡ加算器７０３の出力は、Ａ＋Ｂの合計値／桁上げ値であり、それらは、ＡをＢに加算した値を得るように、加算器７１０により共に加算される。
【００６０】
データパスＡはまた、Ｂｌａｋｅ状態（例えば、３２'ｂ０）の第１のサブセット（例えば、３２ビット）及び第２の異なるメッセージ＋定数値のうちの一方をその出力として選択するマルチプレクサ７０５を含む。マルチプレクサ７０５の出力は、第１の入力として、加算器７０７（例えば、３つ又はより多くの入力を加算するための桁上げ保存加算器）に結合され、加算器７０７の第２の入力は、加算器７１０からの出力に結合され、加算器７０７の第３の入力は、これらの値を加算して成果としてそれを提供する（例えば、１２ビット、左又は右）ローテート回路７１６の出力に結合される。
【００６１】
【００６２】
一実施形態において、ＣｈａＣｈａモードでは、２つの値（Ａ及びＢ）のみが加算されるが、Ｂｌａｋｅモードでは、３つの値が加算されることなる。ある実施形態において、回路７００は、３つの値の項を加算して、合計値及び桁上げ値の両方を生成する別の桁上げ保存加算器（例えば、ＣＳＡ加算器７０７）を含む。合計値及び桁上げ値は、加算を完了し、最終的な合計を得るように加算器７１２により加算されてよい。ある実施形態において、ＣｈａＣｈａモードでは、ＣＳＡ加算器７０７への３つの入力のうちの１つがゼロであり、したがって、ＣＳＡ加算器７０７の出力は、Ａ＋Ｂの合計値／桁上げ値であり、それらは、ＡをＢに加算した値を得るように、加算器７１２により共に加算される。
【００６３】
加算器７１２の出力は、データパスＤ内の論理ＸＯＲ回路７３０の第１の入力に結合され、その出力７５２上に成果Ａｎｅｗとして提供される。データパスＢは、これらの値のＸＯＲをとり、その出力上に成果としてそれを提供するように入力７０４とデータパスＣにおける加算器７２２からの出力とに結合される論理ＸＯＲ回路７１４を含む。論理ＸＯＲ回路７１４の出力は、その値を（例えば、１２ビット左又は右にそれぞれ）ローテートさせてその出力上に成果としてそれを提供する（例えば、１２ビット、左又は右）ローテート回路７１６の入力に結合される。ローテート回路７１６の出力は、論理ＸＯＲ回路７１８の第１の入力に結合され、論理ＸＯＲ回路７１８の第２の入力は、これらの値を加算してその出力上に成果としてそれを提供するデータパスＣにおける加算器７２４の出力に結合される。論理ＸＯＲ回路７１８の出力は、その値を（例えば、７ビット左又は右にそれぞれ）ローテートさせてその出力７５４上に成果Ｂｎｅｗとしてそれを提供する（例えば、７ビット、左又は右）ローテート回路７２０の入力に結合される。データパスＣは、これらの値を加算してその出力上に成果としてそれを提供するように、入力７０６とデータパスＤのローテート回路７２８の出力とに結合される加算器７２２（例えば＜モジュラ加算器）を含む。加算器７２２の出力は、加算器７２４（例えば、モジュラ加算器）の第１の入力に結合され、加算器７２４の第２の入力は、これらの入力値を加算してその出力７５６上に成果Ｃｎｅｗとしてそれを提供するように、データパスＤのローテート回路７３２の出力に結合される。データパスＤは、これらの値のＸＯＲをとり、その出力上に成果としてそれを提供するように、入力７０８とデータパスＡにおける加算器７１０からの出力とに結合される論理ＸＯＲ回路７２６を含む。論理ＸＯＲ回路７２６の出力は、その値を（例えば、１６ビット左又は右にそれぞれ）ローテートさせてその出力上に成果としてそれを提供する（例えば、１６ビット、左又は右）ローテート回路７２８の入力に結合される。ローテート回路７２８の出力は、論理ＸＯＲ回路７３０の第１の入力に結合され、論理ＸＯＲ回路７３０の第２の入力は、これらの値を加算してその出力上に成果としてそれを提供するデータパスＡにおける加算器７１２の出力に結合される。論理ＸＯＲ回路７３０の出力は、その値を（例えば、８ビット左又は右にそれぞれ）ローテートさせてその出力７５８上に成果Ｄｎｅｗとしてそれを提供する（例えば、８ビット、左又は右）ローテート回路７３２の入力に結合される。
【００６４】
ある実施形態において、モジュラ加算器は、Ｘがモジュラス（例えば、２３２又は２６４のモジュラス）より小さい（又は、これに等しい）場合、成果Ｘに対する実際の成果を出力し、そうでない場合、出力Ｘ＝Ｘモジュラス（例えば、２３２又は２６４のモジュラス）である。ある実施形態において、論理ＸＯＲ回路は、その入力が異なる（一方が真であり、他方が偽である）場合のみ、真値（例えば、１）を出力し、そうでない場合、偽値（例えば、ゼロ）を出力する。一実施形態において、論理ＸＯＲ回路は、ＸＯＲゲート又は他の論理回路実装である。ある実施形態において、ローテート回路は、いずれのビットも破棄することなく、その入力値（例えば、複数のビット）に対する循環シフト（例えば、破棄される代わりに、一端から他端へのラップアラウンド）を実行する。ローテート回路は、所与のビット数に対する右ローテート又は左ローテートを実行してよく、例えば、図７におけるローテート回路７１６は、例えば、制御回路からの制御値に基づいて１２ビットの左ローテートを実行する。ある実施形態において、シフト回路は、その入力値（例えば、複数のビット）に対するシフトを実行し、端部から落ちるいずれかのビットを破棄する。
【００６５】
ある実施形態では、Ｂｌａｋｅモードにおいて、回路７００は、４つの（例えば、×３２ビット）値ＡからＤの入力を含み、Ｑラウンドと同様の操作を経る。しかしながら、ある実施形態において、ハッシュ関数への入力メッセージ及びラウンド定数はまた、ラウンド操作中に、ラウンド関数の状態Ａに２回加算され、及び／又は、ＣｈａＣｈａにおけるすべての左ローテート操作は、Ｂｌａｋｅラウンド関数における右ローテート操作により置き換えられる。
【００６６】
Ｂｌａｋｅモードにおいて、（例えば、５１２ビット）状態及び２つの追加のメッセージ＋定数項は、（例えば、回路７００を含む）ハードウェアアクセラレータから（例えば、プロセッサコアにより）外部で算出され、一次入力としてアクセラレータに提供されてよい。したがって、ＣｈａＣｈａ  Ｑラウンド回路は、図７に示されるように、Ｂｌａｋｅラウンド関数をサポートするように拡張されてよい。一実施形態において、統合されたデータパスは、オペレーションのモードに応じて、３２'ｂ０とメッセージ＋定数とから選択する。ある実施形態において、ローテート回路は、各ＸＯＲ関数の出力時に２：１マルチプレクサを導入することにより、左又は右ローテートを実行するように構成される。図７に関して説明した追加のコンポーネントのうちの１つ又は複数の結果として、構成可能なアクセラレータの実施形態では、データパスにわずかな変更を伴って、ＣｈａＣｈａ暗号及びＢｌａｋｅハッシュ関数の両方をサポートできる。
【００６７】
表１を再び参照すると、ある実施形態において、ＣｈａＣｈａ暗号化規格（例えば、単一の）ラウンド操作は、例えば、直列加算、ＸＯＲ及びシフト演算を有する４つのクウォータラウンド（Ｑラウンド）を含む。一実施形態において、各Ｑラウンドは、表１の列要素又は対角要素の中から選択された４つの値（例えば、３２ビット値、すなわち、ワード）を操作して、４つの新たな値（例えば、３２ビット値）を生成して、Ｑラウンド入力を置き換える。ある実施形態において、ＣｈａＣｈａ演算の第１ラウンドは、表１の列データに沿って演算が行われ、第１ラウンドの４つのＱラウンドは、
１．Ｑラウンド（０、４、８、１２）（例えば、表１の左から１列目）
２．Ｑラウンド（１、５、９、１３）（例えば、表１の左から２列目）
３．Ｑラウンド（２、６、１０、１４）（例えば、表１の左から３列目）
４．Ｑラウンド（３、７、１１、１５）（例えば、表１の左から４列目）
である。これらの実施形態のうちのある実施形態において、ＣｈａＣｈａ演算の第２ラウンドは、表１の対角要素に対して演算を行い、４つのＱラウンドの第２ラウンドは、
５．Ｑラウンド（０、５、１０、１５）
６．Ｑラウンド（１、６、１１、１２）
７．Ｑラウンド（２、７、８、１３）
８．Ｑラウンド（３、４、９、１４）これらの実施形態のうちのある実施形態では、後続のラウンドにおいて、Ｑラウンドへの入力は、上記のＱラウンド１−８を通じて繰り返し（例えば、入力は、列及び対角要素に沿って交互に選択され）、その結果、例えば、２０ラウンドを実行するために、上記の８つのクウォータラウンドについての１０イタレーションが、その順番で実行される。ＣｈａＣｈａ暗号化規格（例えば、ＣｈａＣｈａ２０）のある実施形態では、総ラウンド数（例えば、ＣｈａＣｈａ２０に関して２０ラウンド）の終了時に、ＣｈａＣｈａ状態は、平文を用いてＸＯＲがとられる５１２ビットキーストリームを生成するために、初期状態に加えられる。ＣｈａＣｈａ演算の総ラウンド数（例えば、２０ラウンド）の完了時に、ＣｈａＣｈａ状態は、定数、キー、ノンス及びブロックカウンタ（ＢＣ）のインクリメントされた値を用いて、（例えば、表１及び関連する文章に従って）再初期化される。Ｂｌａｋｅ演算のある実施形態において、各ラウンド関数は、４つの列段階及び４つの対角線段階から構成され、２ラウンドにわたって実行されるＣｈａＣｈａにおける８つのＱラウンド操作と合致する。よって、以下のアーキテクチャの最適化はまた、アクセラレータがＢｌａｋｅモードで動作しているときのクリティカルパスを減らす。
【００６８】
図８は、本開示の実施形態に係るハードウェアアクセラレータ８００の回路を示す。一実施形態において、（例えば、ベクトル）（例えば、１６×３２ビット）レジスタ８０２は、暗号化規格（例えば、ＣｈａＣｈａ）ラウンドのワーキング状態を格納する。各暗号化（例えば、ＣｈａＣｈａ２０の各２０ラウンド）の開始時に、例えば、（例えば、表１及び関連する文章に従って）定数、秘密キー、更新されたブロックカウント及びノンスに対する暗号化規格（例えば、ＣｈａＣｈａ）状態が初期化される。一実施形態において、その状態は、入力８０８を通じて提供される。ある実施形態における暗号化に関する（例えば、各ラウンドが４回のイタレーションから成る）後続のラウンドでは、ラウンド及びイタレーション値に基づく暗号化規格（例えば、ＣｈａＣｈａ）計算のために、列又は対角要素のいずれか一方が選択される。ある実施形態において、暗号化規格（例えば、ＣｈａＣｈａ）の（例えば、４×３２ビット）出力は、更新された入力要素を用いており、一方、残り（例えば、１２×３２ビット）状態は、変化しないままである。
【００６９】
ハードウェアアクセラレータ８００は、例えば、ハードウェアアクセラレータに暗号化演算を実行させることを要求しているプロセッサ又は他のコンポーネントから入力値を受信する入力８０８（例えば、入力ポート）を含み、例えば、暗号化の第１のイタレーション（例えば、Ｑラウンド）前に、入力８０８から供給し、かつ、暗号化の他のイタレーションのためにマルチプレクサ８１６から供給する（例えば、異なる入力８０８が必要とされるまで、例えば、ＣｈａＣｈａ２０の２０ラウンドごとに）ために制御回路８０６がマルチプレクサ８１８に制御値を送信する。一実施形態において、追加のマルチプレクサ８２０（又は、並列のマルチプレクサのセット）（例えば、少なくとも１６個のデータ入力を有する）は、例えば、入力データに対するラウンド（例えば、Ｑラウンド）回路の第１のオペレーション前に、（例えば、暗号化の初期の）入力値を（例えば、任意の）所望の順序（例えば、図１２に関して以下に説明される順序）に置くために提供される。一実施形態において、マルチプレクサ８１８は、例えば、入力データに対するラウンド（例えば、Ｑラウンド）回路の第１のオペレーションの前に、入力値を（例えば、任意の）所望の順序（例えば、図１２に関して以下で説明される順序）に置くために、複数の入力（例えば、少なくとも１６個の入力）を含む。ハードウェアアクセラレータ８００は、例えば、ハードウェアアクセラレータに暗号化演算を実行させることを要求したプロセッサ又は他のコンポーネントに出力値を提供する出力８１０（例えば、出力ポート）を含む。示される出力８１０は、例えば、入力値を格納する、及び／又は、暗号化演算のワーキング状態値を格納するベクトルレジスタ８０２に結合される。示される実施形態において、制御回路８０６は、要求された暗号化演算（例えば、所望のラウンド数）が完了したことを示す準備ストレージ８１２内の準備値を送信してよく、例えば、その結果、ハードウェアアクセラレータに暗号化演算を実行させることを要求したプロセッサ又は他のコンポーネントは、準備ストレージ８１２をモニタして、（例えば、出力８１０を介して）ベクトルレジスタ８０２から値をロードできる。一実施形態において、準備ストレージ８１２内の準備値の設定することで、ハードウェアアクセラレータ８００に、（例えば、出力８１０を介して）ベクトルレジスタ８０２からの値を、ハードウェアアクセラレータに暗号化演算を実行させることを要求したプロセッサ又は他のコンポーネントへと送信させる。
【００７０】
ある実施形態において、制御回路８０６は、制御値（例えば、マルチプレクサ制御値）を提供して、暗号化標準に従って（例えば、イタレーション）を制御する（例えば、上記で説明したＱラウンド１−８を実行する）ために含まれる。一実施形態において、ハードウェアアクセラレータ８００は、ラウンド回路８０４（例えば、図６のＱラウンド回路６００又は図７の統合されたＱラウンド／Ｂｌａｋｅラウンド回路７００）を含む。制御回路８０６は、ラウンド回路８０４（例えば、ＣｈａＣｈａクウォータラウンド回路６００又は統合されたＣｈａＣｈａクウォータラウンド及びＢｌａｋｅラウンド回路７００において用いられるローテート方向及び／又は値を提供する、及び／又は、統合されたＣｈａＣｈａクウォータラウンド及びＢｌａｋｅラウンド回路７００において用いられるマルチプレクサの入力及び制御値などを提供する）制御線（点線として示される）を含んでよい。一実施形態において、（例えば、ある実施形態ではシングルマルチプレクサであり得る）マルチプレクサ８１４のセットは、例えば、制御回路８０６からの制御値に従って、データソースをベクトルレジスタ８０２からラウンド回路８０４の入力に切り替える。一実施形態において、（例えば、ある実施形態では、シングルマルチプレクサであり得る）マルチプレクサ８１６のセットは、例えば、制御回路８０６からの制御値に従って、ラウンド回路８０４から供給されたデータをベクトルレジスタ８０２に切り替える。一実施形態において、図８のマルチプレクサ８１６（例えば、デマルチプレクサ）は、例えば、マルチプレクサ９１６Ａ又はマルチプレクサ９１６Ｂが同じ（例えば、単一の）回路である場合、マルチプレクサ９１６Ａ又はマルチプレクサ９１６Ｂである。一実施形態において、制御回路８０６は、ラウンド（例えば、Ｑラウンド）操作の複数サイクルを実行するために、複数の値を含む。
【００７１】
図９は、本開示の実施形態に係るハードウェアアクセラレータ９００の暗号化演算についてのラウンドの複数サイクル（例えば、Ｑラウンド）を示す。ある実施形態において、制御回路（例えば、図８からの制御回路８０６）は、制御値（例えば、マルチプレクサ制御値）を提供して、暗号化標準に従って（例えば、イタレーション）を制御する（例えば、上記で説明したＱラウンド１−８を実行する）ために含まれる。一実施形態において、マルチプレクサ９１６Ａ及びマルチプレクサ９１６Ｂは別個の回路である。別の実施形態において、マルチプレクサ９１６Ａ及びマルチプレクサ９１６Ｂは同じ回路であり、その結果、例えば、図９では、同じ回路を通じてループされる複数のイタレーション（例えば、Ｑラウンド）を示す。マルチプレクサ９１６Ａ及びマルチプレクサ９１６Ｂが同じ（例えば、単一の）回路である実施形態において、マルチプレクサは、図８のマルチプレクサ８１６（例えば、デマルチプレクサ）として用いられてよい。一実施形態において、マルチプレクサ９１４Ａ及びマルチプレクサ９１４Ｂは別個の回路である。別の実施形態において、マルチプレクサ９１４Ａ及びマルチプレクサ９１４Ｂは同じ回路であり、その結果、例えば、図９では、同じ回路を通じてループされる複数のイタレーション（例えば、Ｑラウンド）を示す。マルチプレクサ９１４Ａ及びマルチプレクサ９１４Ｂが同じ（例えば、単一の）回路である実施形態において、マルチプレクサは、図８のマルチプレクサ８１４（例えば、デマルチプレクサ）として用いられてよい。一実施形態において、Ｑラウンド回路９０４Ａ及びＱラウンド回路９０４Ｂは別個の回路である。別の実施形態において、Ｑラウンド回路９０４Ａ及びＱラウンド回路９０４Ｂは同じ回路であり、その結果、例えば、図９では、同じ回路を通じてループされる複数のイタレーション（例えば、Ｑラウンド）を示す。実施形態において、Ｑラウンド回路９０４Ａ及びＱラウンド回路９０４Ｂは、同じ（例えば、単一の）回路であり、Ｑラウンド回路は、図８のラウンド回路８０４として用いられてよい。ベクトルレジスタ９０２Ａ、ベクトルレジスタ９０２Ｂ及びベクトルレジスタ９０２Ｃ（又は、これらの任意の組み合わせ）は、同じベクトルレジスタであってよい。ベクトルレジスタ９０２Ａ、ベクトルレジスタ９０２Ｂ及びベクトルレジスタ９０２Ｃ（又は、これらの任意の組み合わせ）が同じ（例えば、単一の）レジスタである実施形態において、ベクトルレジスタ回路は、図８のベクトルレジスタ８０２として用いられてよい。Ｒ０〜Ｒ１５は、ベクトルレジスタが１６個の要素を含む実施形態を示すことに留意する。以下の実施形態において、要素内に示される数字（例えば、サイクル０での要素Ｒ０、Ｒ１、Ｒ２及びＲ３における０、１、２及び３のそれぞれ）は、表１からの値を示し、例えば、０は定数Ｃ０であり、１２はＢＣ［ビット３１：０］であるが、ここでは、実際の値そのものではなく、分かりやすくするためだけのものであることに留意する。ある実施形態において、ベクトルレジスタは、実際の値を格納する。一実施形態において、例えば、入力データに対するラウンド（例えば、Ｑラウンド）回路の第１のオペレーションの前に、（例えば、それぞれが少なくとも１６個のデータ入力を有する）並列のマルチプレクサ９２０Ａ及び９２０Ｂの任意の追加的なセットは、（例えば、暗号化の初期の）入力値を（例えば、任意の）所望の順序（例えば、図１２に関して以下に説明される順序）に置くために提供される。一実施形態において、マルチプレクサ９２０Ａ及びマルチプレクサ９１４Ｂは別個の回路である。別の実施形態において、マルチプレクサ９２０Ａ及びマルチプレクサ９２０Ｂは同じ回路であり、その結果、例えば、図９では、同じ回路を通じてループされる複数のイタレーション（例えば、Ｑラウンド９を示す。マルチプレクサ９２０Ａ及びマルチプレクサ９２０Ｂが同じ（例えば、単一の）回路である実施形態において、マルチプレクサは、図８のマルチプレクサ８２０又はマルチプレクサ８１８として用いられてよい。一実施形態において、マルチプレクサ９２０Ａ及び／又はマルチプレクサ９２０Ｂの新しい（例えば、右端の入力）は、例えば、制御回路（例えば、図８の制御回路８０６）により、例えば、ハードウェアアクセラレータに暗号化演算を実行させることを要求したプロセッサ又は他のコンポーネントから入力値を受信し、制御回路は、制御値をマルチプレクサ９２０Ａ及び／又はマルチプレクサ９２０Ｂに送信して、（ｉ）例えば、暗号化の第１のイタレーション（例えば、Ｑラウンド）の前に、新しい入力から（例えば、図８の入力８０８から）データを供給する、及び／又は、（ｉｉ）（例えば、異なる「新たな」入力が、例えば、ＣｈａＣｈａ２０に対して２０ラウンドごとに、必要とされるまで）暗号化の他のイタレーションのために、マルチプレクサ９１６Ａ及び／又はマルチプレクサ９１６Ｂからそれぞれデータを供給する。
【００７２】
以下では、例としてＣｈａＣｈａ  Ｑラウンドについて説明するが、他の実装、例えば、Ｂｌａｋｅラウンドなどが予見される。
【００７３】
サイクルゼロにおけるＱラウンド（０、４、８、１２）（例えば、表１の左から１列目）に関する一実施形態においてＣｈａＣｈａ状態は、表１の要素０−１５の順序でベクトルレジスタ９０２Ａに格納される。Ｑラウンド回路９０４Ａは、サイクル１に関するデータ要素０、４、８及び１２に対して演算を行い、マルチプレクサは、（例えば、ＣｈａＣｈａクウォータラウンド回路６００又は統合されたＣｈａＣｈａクウォータラウンド及びＢｌａｋｅラウンド回路７００に関する値Ａ、Ｂ、Ｃ、Ｄとしてそれぞれ）値を、ベクトルレジスタ９０２ＡのＲ０、Ｒ４、Ｒ８及びＲ１２からＱラウンド回路９０４Ａへと出力する。Ｑラウンド回路９０４Ａは、次に、回路に従ってデータに対する演算を行って、新たな値（本明細書において、値Ａｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗと称される）を生成する。新たな値は、次に、（ベクトルレジスタ９０２Ａと同じ物理レジスタであり得る）ベクトルレジスタ９０２ＢのＲ０、Ｒ４、Ｒ８及びＲ１２に格納される。ベクトルレジスタ９０２Ａの（例えば、Ｒ０、Ｒ４、Ｒ８及びＲ１２からの値を含んでいない）他の値は、ベクトルレジスタ９０２Ｂ内の同じデータ要素の位置に格納されてよい（例えば、オペレーションがそれらに対してなんら実行されることなく、例えば、単に出力と同じ値入力を渡すだけである）。ベクトルレジスタ９０２ＢのＲ０、Ｒ４、Ｒ８及びＲ１２に対して値が更新されているが、要素内に示される数字（例えば、サイクル１での要素Ｒ０、Ｒ４、Ｒ８及びＲ１２における０、４、８及び１２のそれぞれ）は、その値が、表１からの各値に基づいていることを示し（例えば、ベクトルレジスタ９０２Ｂの要素０で格納される値Ａｎｅｗは、表１からＡの入力が定数Ｃ０であるということに基づいており、ベクトルレジスタ９０２Ｂの要素４で格納される値Ｂｎｅｗは、表１からＢの入力がキー［ビット２５５：２２４］であることに基づいており、ベクトルレジスタ９０２Ｂの要素８で格納される値Ｃｎｅｗは、表１からＣの入力がキー［ビット１２７：９６］であることに基づいており、ベクトルレジスタ９０２Ｂの要素１２で格納される値Ｄｎｅｗは、表１からＤの入力がＢＣ［ビット３１：０］であることに基づいている）が、ここでは、実際の値そのものではなく、分かりやすくするためだけのものであることに留意する。ある実施形態において、ベクトルレジスタは、実際の値を格納する。
【００７４】
Ｑラウンド回路９０４Ｂは、サイクル２に関するデータ要素１、５、９及び１３に対して演算子、マルチプレクサは、（例えば、ＣｈａＣｈａクウォータラウンド回路６００又は統合されたＣｈａＣｈａクウォータラウンド及びＢｌａｋｅラウンド回路７００に関する値Ａ、Ｂ、Ｃ、Ｄとしてそれぞれ）値を、ベクトルレジスタ９０２ＢのＲ１、Ｒ５、Ｒ９及びＲ１２からＱラウンド回路９０４Ｂへと出力する。Ｑラウンド回路９０４Ｂは、次に、回路に従ってデータに対する演算を行って、新たな値（本明細書において、値Ａｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗと称される）を生成する。新たな値は、次に、（ベクトルレジスタ９０２Ａ及び／又はベクトルレジスタ９０２Ｂと同じ物理レジスタであり得る）ベクトルレジスタ９０２ＣのＲ１、Ｒ５、Ｒ９及びＲ１３に格納される。ベクトルレジスタ９０２Ｂの（例えば、Ｒ１、Ｒ５、Ｒ９及びＲ１３からの値を含んでいない）他の値は、ベクトルレジスタ９０２Ｃ内の同じデータ要素の位置に格納されてよい（例えば、それらに対してオペレーションがなんら実行されることなく、例えば、単に出力と同じ値入力を渡すだけである）。ベクトルレジスタ９０２ＣのＲ１、Ｒ５、Ｒ９及びＲ１３に対して値が更新されているが、要素内に示される数字（例えば、サイクル２での要素Ｒ１、Ｒ５、Ｒ９及びＲ１３における１、５、９及び１３のそれぞれ）は、その値が、表１からの各値に基づいていることを示し（例えば、ベクトルレジスタ９０２Ｃの要素１で格納される値Ａｎｅｗは、表１からＡの入力が定数Ｃ１であることに基づいており、ベクトルレジスタ９０２Ｃの要素５で格納される値Ｂｎｅｗは、表１からＢの入力がキー［ビット２２３：１９２］であることに基づいており、ベクトルレジスタ９０２Ｃの要素９で格納される値Ｃｎｅｗは、表１からＣの入力がキー［ビット９５：６４］であることに基づいており、ベクトルレジスタ９０２Ｃの要素１３で格納される値Ｄｎｅｗは、表１からＤの入力がノンス［ビット９５：６４］であることに基づいている）が、ここでは、実際の値そのものではなく、分かりやすくするためだけのものであることに留意する。ある実施形態において、ベクトルレジスタは、実際の値を格納する。
【００７５】
これらの実施形態では、表１から要素の位置０−１５がベクトルレジスタ内の物理レジスタ要素と合致することに留意する。
【００７６】
図１０は、本開示の実施形態に係る、図９におけるハードウェアアクセラレータ９０４Ａ／９０４Ｂのクリティカルデータパス１０００を示す。クリティカルという用語は、最も長い時間を要する、例えば、横断するために最も多くのゲートステージを含むパスを指し得る。
【００７７】
図９における上記の実施例では、初期のＣｈａＣｈａ状態は、表１に示される４×４行列に適合する順序で、（例えば、１６×３２ビット）ベクトルレジスタ（９０２Ａ〜９０２Ｃ）に格納される。（例えば、サイクル１の開始時における）サイクル１において、Ｑラウンド（０、４、８、１２）に対する第１の入力は、レジスタ要素０、１、２及び３における値のサブセットから選択されており、したがって、例えば、図８におけるマルチプレクサ８１４Ａとして示されるような、（例えば、４：１）マルチプレクサ９１４Ａ（１）を用いて、ラウンド（例えば、Ｑラウンド）回路に入力を供給する。他の３つの入力はまた、９１４において、例えば、少なくとも４つのゲートステージをクリティカルパスに加える（例えば、４：１）マルチプレクサを経る。さらに、示される実施形態ではＱラウンドの出力時に、Ｑラウンドのサブセット（例えば、４つの）入力値のみが更新される一方、残りの１２の状態は変化しないままである。ある実施形態において、逆多重化オペレーションは、例えば、クリティカルパスに追加の少なくとも２ゲートステージの遅れを加える各状態レジスタの入力において、（例えば、２：１）マルチプレクサを利用する。一実施形態において、Ｑラウンド計算におけるクリティカルパスは、ベクトルレジスタ９０２Ａ（又は９０２Ｂ）からの（例えば、図６又は図７における）入力Ａ又はＢから開始し、例えば、図１０に示されるように、入力マルチプレクサ９１４Ａ（又は９１４Ｂ）、Ｑラウンド回路９０４Ａ（又は９０４Ｂ）及び出力マルチプレクサ９１６Ａ（又は９１６Ｂ）を通じて約３４ゲートステージに広がるＢｎｅｗの計算で終了する。任意選択的に、（例えば、少なくとも１６個のデータ入力を有する）並列のマルチプレクサ９２０Ａの追加セットは、例えば、入力データに対するラウンド（例えば、Ｑラウンド）回路の第１のオペレーションの前に、（例えば、暗号化の初期の）入力値を（例えば、任意の）所望の順序（例えば、図１２に関して以下に説明される順序）に置くために提供される。
【００７８】
ある実施形態において、クリティカルパスにおけるゲートステージの数を減らすことが所望され得る。例えば、ソーシングマルチプレクサ（例えば、図９のマルチプレクサ９１４及び／又は図８のマルチプレクサ８２０）は、例えば、ＣｈａＣｈａ暗号化規格に関して上述した８つのＱラウンド操作に従って、Ｑラウンド回路に要素を供給するために、入力値を（例えば、表１の０〜１５のフォーマットの順序から）、所望の順序でＱラウンド回路に供給する。本明細書におけるある実施形態では、例えば、図１１及び図１２に示されるように、複数サイクル（例えば、各ラウンドの最後のサイクルを除くすべて）における同じレジスタ内のＱラウンドの（例えば、４つ、例えば、３２ビット）入力値を集める（ｃｌｕｓｔｅｒ）列及び対角線自動アラインメント技術を推定する回路を用いる。例えば、図１１〜図１６に示される実施形態では、入力値をリオーダするために用いられるクリティカルパス内の（例えば、４：１）マルチプレクサを取り外す（例えば、図９及び図１０のマルチプレクサ９１４Ａ及び９１４Ｂを取り外す）。
【００７９】
ある実施形態において、初期化の間、（例えば、１６×３２ビット）ＣｈａＣｈａ入力値（例えば、状態）は、列配向様式で（例えば、５１２ビット）レジスタに格納され、その結果、レジスタ［例えば、ビット５１１：３８４］は、ラウンド１の第１Ｑラウンドに入る（例えば、４×３２ビット）状態を格納する。同様に、レジスタ［例えば、ビット３８３：２５６］、レジスタ［例えば、ビット２５５：１２８］及びレジスタ［１２７：０］は、ラウンド１のＱラウンド２、３及び４に対する入力ワードをそれぞれ含む。サイクル１において、Ｑラウンド１の計算の後に、出力は、レジスタ［例えば、ビット１２７：０］に格納され、残りのビットは、レジスタ［５１１：３８４］内の次の（例えば、４×３２ビット）入力を自動的にアラインするために、（例えば、同じビット量分、例えば、１２８位置分）左にシフトされる。本実施形態におけるＱラウンド論理への入力は、状態レジスタの同じ１２８ビットから常に得られるので、（例えば、４：１）ソーシングマルチプレクサの使用が除外される。第４Ｑラウンド操作の終了時に、Ｑラウンドの出力及び残りの状態は、本実施形態において、例えば、レジスタ［例えば、ビット５１１：３８４］に格納された次のＱラウンドへの入力を用いて、次の対角線に配向されたラウンド操作用にデータ全体（例えば、５１２ビット）をアラインするために、レジスタに適切にシャッフルされる。次の３つのサイクルは、例えば、図１２に示されるように、列配向ラウンドと同様のＱラウンド操作及び状態シフト／格納を実行してよい。第４Ｑラウンドの終了時に、状態レジスタのコンテンツ及びＱラウンドの出力は、列ラウンド操作用に状態をアラインするために適切にシャッフルされてよい。ある実施形態において、Ｑラウンドの入力時に、（例えば、４：１）ソーシングマルチプレクサを除外することで、クリティカルパスを１０％低減する。
【００８０】
図１１は、本開示の実施形態に係るハードウェアアクセラレータ１１００の回路を示す。図１２は、本開示の実施形態に係る図１１のハードウェアアクセラレータ１１００の暗号化演算についてのラウンドの複数サイクル１２００を示す。
【００８１】
一実施形態において、ベクトルレジスタ１１０２は、示される要素の順序、すなわち、０、４、８、１２、１、５、９、１３、２、６、１０、１４、３、７、１１、１５で、表１からの値を用いてロードされる（例えば、プロセッサにより入力される）。これらの値参照は、例えば、これら独自の各データ値を有する表１の要素への参照に過ぎない、又は、その入力データに対するＱラウンド操作により形成される新しいデータへの参照に過ぎない（例えば、値０が定数Ｃ０を記号化し、値ＡとしてＱラウンド回路に入力され、少なくともＣ０に基づいて生成されるＡｎｅｗは、回路を通じたデータフローを示すために、本図において値０とも称される）。Ｒ０〜Ｒ１５は、１６個のレジスタ要素自体への参照であり、例えば、これらの要素に格納されるデータではない。ハードウェアアクセラレータ１１００は、ベクトルレジスタ１１０２を含む。ベクトルレジスタ１１０２は、図１１において２度示されており、回路がそれ自体へとフィードバックし得ることを示す。例えば、マルチプレクサに対するＲ０〜Ｒ１５にラベリングされた入力は、（例えば、ある実施形態における図１１の下半分にあるベクトルレジスタ１１０２からデータを供給する）ベクトルレジスタ１１０２のレジスタ要素の位置を示し得る。別の実施形態において、図１１の上部における任意選択的なベクトルレジスタ１１０２は、図１１の下半分にあるベクトルレジスタ１１０２と同じハードウェアインスタンスではなく、例えば、マルチプレクサ１１２０の左側の入力は、例えば、ハードウェアアクセラレータに暗号化演算を実行させることを要求しているプロセッサ又は他のコンポーネントから新しいデータを供給するために、入力（例えば、図８の入力８０８）に結合されてよい。一実施形態において、制御回路（例えば、図８の制御回路８０６）は、制御値をマルチプレクサ１１２０に送信して、（ｉ）（例えば、暗号化の第１のイタレーション（例えば、Ｑラウンド）の前に、）それらの左側の入力から（例えば、図８の入力８０８から）新しいデータを供給し、及び／又は、（ｉｉ）（例えば、異なる「新たな」入力が、例えば、ＣｈａＣｈａ２０に対して２０ラウンドごとに、必要とされるまで）暗号化の他のイタレーションのために、図１１の下半分にあるＱラウンド回路１１０４及び／又はベクトルレジスタ１１０２から反復データを供給する。
【００８２】
図１１の上部に示されるベクトルレジスタ１１０２は、表１に関して列配向における、（例えば、図１２のサイクル０で）ベクトルレジスタへとロードされるときの初期値を示す。例えば、レジスタストレージ位置Ｒ０、Ｒ１、Ｒ２及びＲ３内の要素０、４、８及び１２はそれぞれ、サイクルゼロにおいて、表１からの値を示し、例えば、０は定数Ｃ０であり１２はＢＣ［ビット３１：０］であるが、ここでは、実際の値そのものではなく、分かりやすくするためだけのものである。本実施形態において、Ｑラウンド回路１１０４（例えば、図６からは、Ｑラウンド回路６００又は図７からは、統合されたＱラウンド／Ｂｌａｋｅラウンド回路７００）は、特定数の（例えば、すべての）Ｑラウンド（例えば、４より多いＱラウンド）のために、ベクトルレジスタ１１０２の第１の端部における隣接要素からデータ値を受信し、例えば、暗号化演算のこれらのサイクルに対して、ベクトルレジスタ１１０２のＲ０からのデータ値を入力値Ａとして、ベクトルレジスタ１１０２のＲ１からのデータ値を入力値Ｂとして、ベクトルレジスタ１１０２のＲ２からのデータ値を入力値Ｃとして、及び、ベクトルレジスタ１１０２のＲ３からのデータ値を入力値Ｄとして受信する。ある実施形態において、Ｑラウンド回路１１０４は、特定数の（例えば、列配向）Ｑラウンド（例えば、最初の３つのＱラウンド）のために、成果値Ａｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗをベクトルレジスタ１１０２の他方、反対側に出力し、例えば、出力データ値Ａｎｅｗをベクトルレジスタ１１０２のＲ１２に、出力データ値Ｂｎｅｗをベクトルレジスタ１１０２のＲ１３に、出力データ値Ｃｎｅｗをベクトルレジスタ１１０２のＲ１４に、及び、出力データ値Ｄｎｅｗをベクトルレジスタ１１０２のＲ１５に格納する。例えば、図１２のサイクル０からサイクル１への点線、サイクル１からサイクル２への点線、及び、サイクル２からサイクル３への点線で示されるように、Ｒ４〜Ｒ１５の残りの値は、同じ特定数の（例えば、列配向）Ｑラウンド（例えば、最初の３つのＱラウンド）のために、第２の端部から第１の端部へ、（例えば、Ｑラウンド回路１１０４により消費されるのと同じビット数）シフトされてよい。
【００８３】
１サイクル（例えば、サイクル３からサイクル４）において、異なるスキームが用いられる。例えば、Ｑラウンド回路１１０４は、特定数の（例えば、対角線配向）Ｑラウンド（例えば、４つのＱラウンドの最後）のために、成果値Ａｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗを、ベクトルレジスタ１１０２の特定の（例えば、隣接していない）要素に出力し、例えば、出力データ値Ａｎｅｗをベクトルレジスタ１１０２のＲ１２に、出力データ値Ｂｎｅｗをベクトルレジスタ１１０２のＲ９に、出力データ値Ｃｎｅｗをベクトルレジスタ１１０２のＲ６に、及び、出力データ値Ｄｎｅｗをベクトルレジスタ１１０２のＲ３に格納する。例えば、Ｒ４〜Ｒ１５の残りの値は、（例えば、サイクル４におけるベクトルレジスタ１１０２に示されるように）完全対角線アラインメントを得るために、示されるパターン（例えば、サイクル３からサイクル４）に従って分散されてもよい。一実施形態において、前のサイクルからのデータが（例えば、クロック信号に基づいて）ラッチされた後すぐに新たなサイクルが始まる。
【００８４】
次に、次のＱラウンド（例えば、上述した８つのラウンドのうちの５番）が始まってよく、例えば、Ｑラウンド回路１１０４（例えば、図６からは、Ｑラウンド回路６００又は図７からは、統合されたＱラウンド／Ｂｌａｋｅラウンド回路７００）は、特定数の（例えば、すべての）Ｑラウンド（例えば、上述した８つのうちのＱラウンド１〜８）のために、ベクトルレジスタ１１０２の第１の端部における隣接要素からデータ値を受信し、例えば、暗号化演算のこれらのサイクルに対して、ベクトルレジスタ１１０２のＲ０からのデータ値を入力値Ａとして、ベクトルレジスタ１１０２のＲ１からのデータ値を入力値Ｂとして、ベクトルレジスタ１１０２のＲ２からのデータ値を入力値Ｃとして、ベクトルレジスタ１１０２のＲ３からのデータ値を入力値Ｄとして受信する。ある実施形態において、Ｑラウンド回路１１０４は、特定数の（例えば、列配向）Ｑラウンド（例えば、これら次の３つのＱラウンド５−７）のために、成果値Ａｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗをベクトルレジスタ１１０２の他方、反対側に出力し、例えば、出力データ値Ａｎｅｗをベクトルレジスタ１１０２のＲ１２に、出力データ値Ｂｎｅｗをベクトルレジスタ１１０２のＲ１３に、出力データ値Ｃｎｅｗをベクトルレジスタ１１０２のＲ１４に、及び、出力データ値Ｄｎｅｗをベクトルレジスタ１１０２のＲ１５に格納する。例えば、図１２のサイクル４からサイクル５への点線で示されるように、Ｒ４〜Ｒ１５の残りの値は、同じ特定数の（例えば、列配向）Ｑラウンド（例えば、次の３つのＱラウンド５−７）のために、第２の端部から第１の端部へ、（例えば、Ｑラウンド回路１１０４により消費されるのと同じビット数）シフトされてよい。
【００８５】
マルチプレクサ１１１６のそれぞれへのＱラウンド制御値（ＱＲＮＤ）及び／又はマルチプレクサ１１２０のそれぞれへの新たな暗号化制御値（ＮＥＷ＿ＥＮＣ）は、制御回路、例えば、図８の制御回路８０６から送信されてよい。例えば、どのＱラウンドが実行されるかに従って、制御値は、それらのマルチプレクサに、入力値をそれらの各位置に出力させてよい、例えば、図１２を参照。一実施形態において、マルチプレクサ１１１６は、Ｑラウンドのサブセット（例えば、４つのＱラウンドのうちの最初の３つ）のために、（例えば、図１２のサイクル０からサイクル１、サイクル１からサイクル２、サイクル２からサイクル３へと示されるような）列配向された値を供給し、残りのＱラウンド（例えば、４つのＱラウンドの４番目）のために、（例えば、図１２のサイクル３からサイクル４へと示されるような）対角線に配向された値を供給する。一実施形態において、マルチプレクサ１１２０のそれぞれへの新たな暗号化制御値（ＮＥＷ＿ＥＮＣ）は、暗号化演算に従って入力データを供給し、例えば、実行対象のオペレーションに従って、（複数の物理レジスタ又は単一の物理レジスタであり得る）ベクトルレジスタ１１０２の示される要素からデータを提供する。例えば、示されるマルチプレクサ１１２０（１）は、ベクトルレジスタ１１０２のレジスタ要素Ｒ１に結合される第１の入力と、ベクトルレジスタ１１０２のレジスタ要素Ｒ９に結合される第２の入力とを含み、（例えば、新たな暗号化であることを示す）第１の暗号化制御値（例えば、論理０）（ＮＥＷ＿ＥＮＣ）は、マルチプレクサ１１２０（１）に、ベクトルレジスタ１１０２のレジスタ要素Ｒ１からマルチプレクサ１１１６（１）の入力へと値を出力させ、（例えば、新たな暗号化でないことを示す）第２の暗号化制御値（例えば、論理１）（ＮＥＷ＿ＥＮＣ）は、マルチプレクサ１１２０（１）に、ベクトルレジスタ１１０２のレジスタ要素Ｒ９からマルチプレクサ１１１６（１）の入力へと値を出力させる。示される実施形態において、マルチプレクサ１１１６（１）の他の入力は、ベクトルレジスタ１１０２のレジスタ要素Ｒ５に結合される。一実施形態において、第１のマルチプレクサ制御値（例えば、論理１）は、マルチプレクサ１１１６（１）に、ベクトルレジスタ１１０２のレジスタ要素Ｒ５からベクトルレジスタ１１０２のレジスタ要素Ｒ１（例えば、Ｑラウンド回路１１０４の入力Ｂ）へと入力を出力させ、第２マルチプレクサ制御値（例えば、論理０）は、マルチプレクサ１１１６（１）に、マルチプレクサ１１２０（１）からベクトルレジスタ１１０２のレジスタ要素Ｒ１（例えば、Ｑラウンド回路１１０４の入力Ｂ）へと入力を出力させる（例えば、（例えば、上述した１〜８のパターンのうちの）Ｑラウンド回路１１０４がそのデータに対して実行するＱラウンドパターンのどれかに従う）。
【００８６】
図１２において、サイクル０からサイクル１、サイクル１からサイクル２、及び、サイクル２からサイクル３に関して、Ｑラウンドの出力値（例えば、Ａｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗ）は、Ｒ０、Ｒ１、Ｒ２及びＲ３からそれぞれ生成され、Ｒ１２、Ｒ１３、Ｒ１２及びＲ１５にそれぞれ格納される。示される実施形態において、Ｑラウンド回路１１０４からの出力（例えば、Ａｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗ）は、（例えば、マルチプレクサへの入力として）アクセラレータ１１００にループバックされる。図１２における中括弧内の数字は、ハードウェアのサイクル数又は異なるインスタンスを示し得る。
【００８７】
一実施形態において、初回のサイクル（例えば、新たな暗号化）に関して、ハードウェアアクセラレータ１１００は、（例えば、制御値ＮＥＷ＿ＥＮＣとして論理１をアサートすることにより）並列のマルチプレクサ１１２０の第１のセットの左側の入力を（例えば、その順番におけるその要素０、４、８、１２、１、５、９、１３、２、６、１０、１４、３、７、１１、１５に関する表１からの値を最初に格納しているベクトルレジスタ１１０２に）供給し、（例えば、制御値ＱＲＮＤとして論理０をアサートすることにより）並列のマルチプレクサの第２のセット（存在するならば）を通じてこれらの値をベクトルレジスタ１１０２（例えば、図１１の下半分に示されるベクトルレジスタインスタンス）へと渡す（例えば、戻す）。
【００８８】
一実施形態において、Ｑラウンドの列配向された（例えば、第１、第２、第３、第５、第６又は第７）サイクルに関して、ハードウェアアクセラレータ１１００は、図１２に示されるようにデータを導き、例えば、（例えば、制御値ＮＥＷ＿ＥＮＣとして論理０をアサートすることにより）マルチプレクサ１１２０の右側の入力を選択してマルチプレクサ１１２０（０）、マルチプレクサ１１２０（４）、マルチプレクサ１１２０（８）及びマルチプレクサ１１２０（１２）に対するベクトルレジスタ１１０２に値を渡し、残りのマルチプレクサ１１２０に対するマルチプレクサ１１１６に値を渡し、及び、（例えば、制御値ＱＲＮＤとして論理１をアサートすることにより）マルチプレクサ１１１６の左側の入力を選択して、例えば、Ｑラウンド回路１１０４により演算されるこれらの値をベクトルレジスタ１１０２に提供する。論理０及び論理１は特定の機能と共に本明細書において説明されるが、それらは双方が入れ替わってもよい。
【００８９】
一実施形態において、Ｑラウンドの対角線配向された（例えば、第４又は第８）サイクルに関して、ハードウェアアクセラレータ１１００は、図１２に示されるようにデータを導き、例えば、（例えば、制御値ＮＥＷ＿ＥＮＣとして論理０をアサートすることにより）マルチプレクサ１１２０の右側の入力を選択してマルチプレクサ１１２０（０）、マルチプレクサ１１２０（４）、マルチプレクサ１１２０（８）及びマルチプレクサ１１２０（１２）に対するベクトルレジスタ１１０２に値を渡し、及び、残りのマルチプレクサ１１２０に対するマルチプレクサ１１１６に値を渡し、及び、（例えば、制御値ＱＲＮＤとして論理０をアサートすることにより）マルチプレクサ１１１６の右側の入力を選択して、例えば、Ｑラウンド回路１１０４により演算されるベクトルレジスタ１１０２にこれらの値を提供する。
【００９０】
ベクトルレジスタインスタンスは、中括弧内のサイクル数を用いて参照され得る。一実施形態において、これらは、同じベクトルレジスタ（例えば、図１１のベクトルレジスタ１１０２）である。例えば、図１２のサイクル３からサイクル４に向けて、示されるハードウェアアクセラレータ１１００は、ベクトルレジスタ１１０２（３）のＲ４からベクトルレジスタ１１０２（４）のＲ０に、ベクトルレジスタ１１０２（３）のＲ９からベクトルレジスタ１１０２（４）のＲ１に、ベクトルレジスタ１１０２（３）のＲ１４からベクトルレジスタ１１０２（４）のＲ２にデータを格納し、（値Ｄとして、ベクトルレジスタ１１０２（３）のＲ３の入力に基づいて）Ｑラウンド回路１１０４からベクトルレジスタ１１０２（４）のＲ３に、ベクトルレジスタ１１０２（３）のＲ８からベクトルレジスタ１１０２（４）のＲ４に、ベクトルレジスタ１１０２（３）のＲ１３からベクトルレジスタ１１０２（４）のＲ５にＤｎｅｗを格納し、（値Ｃとして、ベクトルレジスタ１１０２（３）のＲ２の入力に基づいて、）Ｑラウンド回路１１０４からベクトルレジスタ１１０２（４）のＲ６に、ベクトルレジスタ１１０２（３）のＲ７からベクトルレジスタ１１０２（４）のＲ７に、ベクトルレジスタ１１０２（３）のＲ１２からベクトルレジスタ１１０２（４）のＲ８にＣｎｅｗを格納し、（値Ｂとして、ベクトルレジスタ１１０２（３）のＲ１の入力に基づいて）Ｑラウンド回路１１０４からベクトルレジスタ１１０２（４）のＲ９に、ベクトルレジスタ１１０２（３）のＲ６からベクトルレジスタ１１０２（４）のＲ１０に、ベクトルレジスタ１１０２（３）のＲ１１からベクトルレジスタ１１０２（４）のＲ１１にＢｎｅｗを格納し、（値Ａとして、ベクトルレジスタ１１０２（３）のＲ０の入力に基づいて）Ｑラウンド回路１１０４からベクトルレジスタ１１０２（４）のＲ１２に、ベクトルレジスタ１１０２（３）のＲ５からベクトルレジスタ１１０２（４）のＲ１３に、ベクトルレジスタ１１０２（３）のＲ１０からベクトルレジスタ１１０２（４）のＲ１４に、及び、ベクトルレジスタ１１０２（３）のＲ１５からベクトルレジスタ１１０２（４）のＲ１５にＡｎｅｗを格納する。
【００９１】
一実施形態において、図１１の上部及び下部にあるベクトルレジスタ１１０２は、別個のレジスタ（例えば、（例えば、あらゆる上書きを回避するために）出力データが生成されている間、入力データを格納する一時レジスタである）。示される実施形態において、特定のパス（例えば、マルチプレクサ１１２０のうちの一番左のマルチプレクサ）は、直列に２つのマルチプレクサではなく、直列に１つのマルチプレクサだけを含むことに留意する。
【００９２】
図１３は、本開示の実施形態に係る図１２におけるハードウェアアクセラレータのクリティカルデータパスを示す。図１０のクリティカルパス１０００との比較において、マルチプレクサ９１４Ａ又は９１４Ｂ（を、例えば、ステアリングするＱラウンド回路の入力）のいずれも存在していないため、例えば、データ生成オペレーションの最も時間のかかる速度を向上させることにより、アクセラレータの（例えば、コンピュータの）機能を改善することに留意する。クリティカルという用語は、最も長い時間を要する、例えば、横断するために最も多くのゲートステージを含むパスを指し得る。図１２の上記の実施例において、初期のＣｈａＣｈａ状態は、表１に示される４×４行列の（例えば、第１）列に適合する順序で（例えば、１６×３２ビット）ベクトルレジスタ１１０２に格納される。（例えば、ベクトルレジスタ１１０２に結合する前に）図１３のクリティカルデータパスは、（例えば、入力Ａ又はＢ上に）供給し、（例えば、図６又は図７のパスＡ又はＢ上の）Ｑラウンド回路１１０４を横断し、次に、マルチプレクサ、例えば、マルチプレクサ１１１６（９）が直列に続くマルチプレクサ１１２０（９）、及び／又は、マルチプレクサ１１１６（１３）が直列に続くマルチプレクサ１１２０（１３）を横断する。
【００９３】
図１４は、本開示の実施形態に係るハードウェアアクセラレータ１４００の回路を示す。図１５は、本開示の実施形態に係る図１４のハードウェアアクセラレータ１４００の暗号化演算についてのラウンドの複数サイクル１５００を示す。図１５における中括弧内の数字は、ハードウェアのサイクル数又は異なるインスタンスを示し得る。
【００９４】
一実施形態において、ベクトルレジスタ１４０２は、示される要素の順序、すなわち、０、４、８、１２、１、５、９、１３、２、６、１０、１４、３、７、１１、１５で、表１からの値を用いてロードされる。これらの値参照は、例えば、これら独自の各データ値を有する表１の要素への参照に過ぎない、又は、その入力データに対するＱラウンド操作により形成される新しいデータへの参照に過ぎない（例えば、値０が定数Ｃ０を記号化し、値ＡとしてＱラウンド回路に入力され、少なくともＣ０に基づいて生成されるＡｎｅｗは、回路を通じたデータフローを示すために、本図において値０とも称される）。Ｒ０〜Ｒ１５は、１６個のレジスタ要素自体への参照であり、例えば、これらの要素に格納されるデータではない。ハードウェアアクセラレータ１４００は、ベクトルレジスタ１４０２を含む。ベクトルレジスタ１４０２は、図１４において２度示されており、回路がそれ自体へとフィードバックし得ることを示す。例えば、マルチプレクサに対するＲ０〜Ｒ１５にラベリングされた入力は、（例えば、ある実施形態において図１４の下半分にあるベクトルレジスタ１４０２からデータを供給する）ベクトルレジスタ１４０２のレジスタ要素の位置を示し得る。別の実施形態において、図１４の上部における任意選択的なベクトルレジスタ１４０２は、図１４の下半分にあるベクトルレジスタ１４０２と同じハードウェアインスタンスではなく、例えば、マルチプレクサ１４２０の左側の入力は、例えば、ハードウェアアクセラレータに暗号化演算を実行させることを要求しているプロセッサ又は他のコンポーネントから新しいデータを供給するために、入力（例えば、図８の入力８０８）に結合されてよい。一実施形態において、制御回路（例えば、図８の制御回路８０６）は、制御値をマルチプレクサ１４２０に送信して、（ｉ）（例えば、暗号化の第１のイタレーション（例えば、Ｑラウンド）の前に、）それらの左側の入力から（例えば、図８の入力８０８から）新しいデータを供給し、及び／又は、（ｉｉ）（例えば、異なる「新たな」入力が、例えば、ＣｈａＣｈａ２０に対して２０ラウンドごとに、必要とされるまで）暗号化の他のイタレーションのために、図１１の下半分にあるＱラウンド回路１４０４及び／又はベクトルレジスタ１４０２から反復データを供給する。
【００９５】
図１４の上部に示されるベクトルレジスタ１４０２は、表１に関して列配向における、（例えば、図１５のサイクル０で）ベクトルレジスタへとロードされるときの初期値を示す。例えば、レジスタストレージ位置Ｒ０、Ｒ１、Ｒ２及びＲ３の要素０、４、８及び１２はそれぞれ、サイクルゼロにおいて、表１からの値を示し、例えば、０は定数Ｃ０であり、１５はＢＣ［ビット３１：０］であるが、ここでは、際の値そのものではなく、実分かりやすくするためだけのものである。本実施形態において、Ｑラウンド回路１４０４（例えば、図６からは、Ｑラウンド回路６００又は図７からは、統合されたＱラウンド／Ｂｌａｋｅラウンド回路７００）は、特定数の（例えば、すべての）Ｑラウンド（例えば、４より多いＱラウンド）のために、ベクトルレジスタ１４０２の第１の端部における隣接要素からデータ値を受信し、例えば、暗号化演算のこれらのサイクルに対して、ベクトルレジスタ１４０２のＲ０からのデータ値を入力値Ａとして、ベクトルレジスタ１４０２のＲ１からのデータ値を入力値Ｂとして、ベクトルレジスタ１４０２のＲ２からのデータ値を入力値Ｃとして、ベクトルレジスタ１４０２のＲ３からのデータ値を入力値Ｄとして受信する。ある実施形態において、Ｑラウンド回路１４０４は、特定数の（例えば、列配向）Ｑラウンド（例えば、最初の３つのＱラウンド）のために、成果値Ａｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗをベクトルレジスタ１４０２の他方、反対側に出力し、例えば、出力データ値Ａｎｅｗをベクトルレジスタ１４０２のＲ１２に、出力データ値Ｂｎｅｗをベクトルレジスタ１４０２のＲ１３に、出力データ値Ｃｎｅｗをベクトルレジスタ１４０２のＲ１４に、及び、出力データ値Ｄｎｅｗをベクトルレジスタ１４０２のＲ１５に格納する。例えば、図１５のサイクル０からサイクル１への点線、サイクル１からサイクル２への点線、及び、サイクル２からサイクル３への点線で示されるように、Ｒ４〜Ｒ１５の残りの値は、同じ特定数の（例えば、列配向）Ｑラウンド（例えば、最初の３つのＱラウンド）のために、第２の端部から第１の端部へ、（例えば、Ｑラウンド回路１４０４により消費されるのと同じビット数）シフトされてよい。
【００９６】
例えば、図１１〜図１２に示される実施形態は、対角線アラインメントが、１サイクル（例えば、サイクル３からサイクル４）に（例えば、内に）現れることを示す。しかしながら、ある実施形態では、これは、Ｑラウンド回路の出力時における、（例えば、２：１）マルチプレクサ（例えば、図１１及び図１３のマルチプレクサ１１１６（９））に対して、列配向から対角線配向ラウンド計算へと移行する場合に適切な状態レジスタ入力を選択させる。ある実施形態において、このマルチプレクサは、例えば、図１５に示されるように、１クロックサイクル分、列／対角線自動アラインメントを遅延させることにより除外される。ベクトルレジスタインスタンスは、中括弧内のサイクル数を用いて参照され得る。一実施形態において、これらは、同じベクトルレジスタ（例えば、図１４のベクトルレジスタ１４０２）である。
【００９７】
一実施形態において、ラウンド１の第４Ｑラウンドの終了時に、（例えば、クリティカルパスの一部である）ＱラウンドのＢｎｅｗの出力は、依然として、ベクトルレジスタ１４０２（４）［例えば、ビット９５：６４］に格納されている。結果として、状態（例えば、要素）４、７、９及び１１（例えば、ベクトルレジスタ１４０２（４）内のレジスタ要素Ｒ９、Ｒ１３、Ｒ６及びＲ１４のそれぞれ）を除くすべて状態（例えば、要素）は、列ラウンド操作に適切にアラインされ、例えば、ベクトル部分的にアラインされる。これら４つの状態（例えば、要素）は、次のサイクルの第１のＱラウンド操作（例えば、ラウンド２、サイクル５）に参加しないので、それらは、対角線ラウンド操作に対してすべての状態（例えば、要素）を完全にアラインするために、サイクル５に適切にシフトされ得る。Ｑラウンドのクリティカルな出力Ｂｎｅｗが常に同じレジスタに格納される本実施形態において、クリティカルパス内の（例えば、２：１）マルチプレクサ（例えば、図１１及び図１３のマルチプレクサ１１１６（９））（を例えば、ステアリングするＱラウンド回路の出力）は、したがって、除外されてよく、ある実施形態において５％の性能をさらに改善する。同様の遅延型アラインメントは、対角線配向から列配向ラウンド計算へ移行する場合に実行されてよい。一実施形態において、アクセラレータ１４００は、１８ｋゲートのセルエリアを有し、かつ、１．２ナノ秒（ｎｓ）のサイクル時間で動作する場合、５．３ギガビット毎秒（Ｇｂｐｓ）のスループットを有する。
【００９８】
例えば、図１５のサイクル３からサイクル４に向けて、示されるハードウェアアクセラレータ１４００は、ベクトルレジスタ１４０２（３）のＲ４からベクトルレジスタ１４０２（４）のＲ０に、ベクトルレジスタ１４０２（３）のＲ９からベクトルレジスタ１４０２（４）のＲ１に、ベクトルレジスタ１４０２（３）のＲ１４からベクトルレジスタ１４０２（４）のＲ２にデータを格納し、（値Ｄとして、ベクトルレジスタ１４０２（３）のＲ３の入力に基づいて）Ｑラウンド回路１４０４からベクトルレジスタ１４０２（４）のＲ３に、ベクトルレジスタ１４０２（３）のＲ８からベクトルレジスタ１４０２（４）のＲ４に、ベクトルレジスタ１４０２（３）のＲ１３からベクトルレジスタ１４０２（４）のＲ５に、ベクトルレジスタ１４０２（３）のＲ１０からベクトルレジスタ１４０２（４）のＲ６に、ベクトルレジスタ１４０２（３）のＲ７からベクトルレジスタ１４０２（４）のＲ７に、ベクトルレジスタ１４０２（３）のＲ１２からベクトルレジスタ１４０２（４）のＲ８に、ベクトルレジスタ１４０２（３）のＲ５からベクトルレジスタ１４０２（４）のＲ９に、ベクトルレジスタ１４０２（３）のＲ６からベクトルレジスタ１４０２（４）のＲ１０に、ベクトルレジスタ１４０２（３）のＲ１１からベクトルレジスタ１４０２（４）のＲ１１にＤｎｅｗを格納し、（値Ａとして、ベクトルレジスタ１４０２（３）のＲ０の入力に基づいて）Ｑラウンド回路１４０４からベクトルレジスタ１４０２（４）のＲ１２にＡｎｅｗを格納し、（値Ｂとして、ベクトルレジスタ１４０２（３）のＲ１の入力に基づいて）Ｑラウンド回路１４０４からベクトルレジスタ１４０２（４）のＲ１３にＢｎｅｗを格納し、（値Ｃとして、ベクトルレジスタ１４０２（３）のＲ２の入力に基づいて）Ｑラウンド回路１４０４からベクトルレジスタ１４０２（４）のＲ１４に、ベクトルレジスタ１４０２（３）のＲ１５からベクトルレジスタ１４０２（４）のＲ１５にＣｎｅｗを格納する。
【００９９】
マルチプレクサ１４１６及び１４１８のそれぞれへのＱラウンド制御値（ＱＲＮＤ）、及び／又は、マルチプレクサ１４２０のそれぞれへの新たな暗号化制御値（ＮＥＷ＿ＥＮＣ）は、制御回路、例えば、図８の制御回路８０６から送信されてよい。制御値は、例えば、どのＱラウンドが実行されているかに従って、（例えば、１サイクルに関して）それらのマルチプレクサに、それらの各位置へと入力値を出力させる、例えば、図１５を参照。一実施形態において、マルチプレクサ１４２０のそれぞれへの新たな暗号化制御値（ＮＥＷ＿ＥＮＣ）は、暗号化演算に従って入力データを供給し、例えば、実行対象のオペレーションに従って、（複数の物理レジスタ又は単一の物理レジスタであり得る）ベクトルレジスタ１４０２の示される要素からデータを提供する。一実施形態において、図１５のサイクル３からサイクル４に向けて、示されるハードウェアアクセラレータ１４００（例えば、これらの制御回路）は、暗号化制御値（例えば、論理０）（ＮＥＷ＿ＥＮＣ）をアサートして、マルチプレクサ１４２０（（例えば、複数のマルチプレクサ１４２０のうちの１つのマルチプレクサのそのパスにもシリアルマルチプレクサ１４１６がない場合）例えば、その独自の制御ラインＱＲＮＤ３を含み得るマルチプレクサ１４２０（９）を除く）に、それらの右側の入力の出力をベクトルレジスタ１４０２へと送信させ、Ｑラウンド制御値（例えば、論理０）（ＱＲＮＤ）をアサートして、マルチプレクサ１４１６に、それらの右側の入力の出力をベクトルレジスタ１４０２へと送信させ、別のＱラウンド制御値２（例えば、論理１）（ＱＲＮＤ２）をアサートして、マルチプレクサ１４１８に、その左側の入力（例えば、Ｒ５）の出力をダウンストリームマルチプレクサ１４２０（９）へと送信させ、別のＱラウンド制御値３（例えば、論理０）（ＱＲＮＤ３）をアサートして、マルチプレクサ１４２０（９）に、その右側の入力から（例えば、マルチプレクサ１４１８の出力から）データを供給させる。
【０１００】
本実施形態において、Ｑラウンド回路１４０４（例えば、図６からは、Ｑラウンド回路６００又は図７からは、統合されたＱラウンド／Ｂｌａｋｅラウンド回路７００）は、特定のＱラウンドのために（例えば、第４又は８Ｑラウンド後の次のＱラウンドのために）、ベクトルレジスタ１４０２の第１の端部における隣接要素からデータ値を受信し、例えば、Ｑラウンド回路１４０４への暗号化演算のこれらのサイクルに対して、ベクトルレジスタ１４０２（４）のＲ０からのデータ値を入力値Ａとして、ベクトルレジスタ１４０２（４）のＲ１からのデータ値を入力値Ｂとして、ベクトルレジスタ１４０２（４）のＲ２からのデータ値を入力値Ｃとして、及び、ベクトルレジスタ１４０２（４）のＲ３からのデータ値を入力値Ｄとして受信し、特定のＱラウンドのために（例えば、第５Ｑラウンドのために）、ベクトルレジスタ１４０２の他方、反対側に成果値Ａｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗを出力し、例えば、出力データ値Ａｎｅｗをベクトルレジスタ１４０２（５）のＲ１２に、出力データ値Ｂｎｅｗをベクトルレジスタ１４０２（５）のＲ１３に、出力データ値Ｃｎｅｗをベクトルレジスタ１４０２（５）のＲ１４に、出力データ値Ｄｎｅｗをベクトルレジスタ１４０２（５）のＲ１５に格納する。例えば、図１５のサイクル０からサイクル１への点線、サイクル１からサイクル２への点線、及び、サイクル２からサイクル３への点線で示されるように、Ｒ４〜Ｒ１５の残りの値は、特定数の（例えば、列配向）Ｑラウンド（例えば、ラウンドの最初の３つのＱラウンド）のために、第２の端部から第１の端部へ、（例えば、Ｑラウンド回路１４０４により消費されるのと同じビット数）シフトされてよい。
【０１０１】
さらなる例として、図１５のサイクル４からサイクル５に向けて、示されるハードウェアアクセラレータ１４００は、ベクトルレジスタ１４０２（４）のＲ４からベクトルレジスタ１４０２（５）のＲ０に、ベクトルレジスタ１４０２（４）のＲ５からベクトルレジスタ１４０２（５）のＲ１に、ベクトルレジスタ１４０２（４）のＲ１４からベクトルレジスタ１４０２（５）のＲ２に、ベクトルレジスタ１４０２（４）のＲ７からベクトルレジスタ１４０２（５）のＲ３に、ベクトルレジスタ１４０２（４）のＲ８からベクトルレジスタ１４０２（５）のＲ４に、ベクトルレジスタ１４０２（４）のＲ１３からベクトルレジスタ１４０２（５）のＲ５に、ベクトルレジスタ１４０２（４）のＲ１０からベクトルレジスタ１４０２（５）のＲ６に、ベクトルレジスタ１４０２（４）のＲ１１からベクトルレジスタ１４０２（５）のＲ７に、ベクトルレジスタ１４０２（４）のＲ１２からベクトルレジスタ１４０２（５）のＲ８に、のベクトルレジスタ１４０２（４）のＲ９からベクトルレジスタ１４０２（５）のＲ９に、ベクトルレジスタ１４０２（４）のＲ６からベクトルレジスタ１４０２（５）のＲ１０に、ベクトルレジスタ１４０２（４）のＲ１５からベクトルレジスタ１４０２（５）のＲ１１にデータを格納し、（値Ａとして、ベクトルレジスタ１４０２（４）のＲ０の入力に基づいて）Ｑラウンド回路１４０４からベクトルレジスタ１４０２（５）のＲ１２にＡｎｅｗを格納し、（値Ｂとして、ベクトルレジスタ１４０２（４）のＲ１の入力に基づいて）Ｑラウンド回路１４０４からベクトルレジスタ１４０２（５）のＲ１３にＢｎｅｗを格納し、（値Ｃとして、ベクトルレジスタ１４０２（４）のＲ２の入力に基づいて）Ｑラウンド回路１４０４からベクトルレジスタ１４０２（５）のＲ１４にＣｎｅｗを格納し、（値Ｄとしてベクトルレジスタ１４０２（４）のＲ３の入力に基づいて）Ｑラウンド回路１４０４からベクトルレジスタ１４０２（５）のＲ１５にＤｎｅｗを格納する。
【０１０２】
マルチプレクサ１４１６及び１４１８のそれぞれへのＱラウンド制御値（ＱＲＮＤ）、及び／又は、マルチプレクサ１４２０のそれぞれへの新たな暗号化制御値（ＮＥＷ＿ＥＮＣ）は、制御回路、例えば、図８の制御回路８０６から送信されてよい。制御値は、例えば、どのＱラウンドが実行されているかに従って、（例えば、１サイクルに関して）それらのマルチプレクサに、それらの各位置へと入力値を出力させる、例えば、図１５を参照。一実施形態において、マルチプレクサ１４２０のそれぞれへの新たな暗号化制御値（ＮＥＷ＿ＥＮＣ）は、暗号化演算に従って入力データを供給し、例えば、実行対象のオペレーションに従って、（複数の物理レジスタ又は単一の物理レジスタであり得る）ベクトルレジスタ１４０２の示される要素からデータを提供する。一実施形態において、図１５のサイクル４からサイクル５へ向けて、示されるハードウェアアクセラレータ１４００（例えば、これらの制御回路）は、暗号化制御値（例えば、論理０）（ＮＥＷ＿ＥＮＣ）をアサートして、マルチプレクサ１４２０（（例えば、複数のマルチプレクサ１４２０のうちの１つのマルチプレクサのそのパスにもシリアルマルチプレクサ１４１６がない場合）例えば、その独自の制御ラインＱＲＮＤ３を含み得るマルチプレクサ１４２０（９）を除く）に、それらの右側の入力の出力をベクトルレジスタ１４０２に送信させ、Ｑラウンド制御値（例えば、論理１）（ＱＲＮＤ）をアサートして、マルチプレクサ１４１６に、それらの左側の入力の出力をベクトルレジスタ１４０２へと送信させ、別のＱラウンド制御値２（例えば、論理１）（ＱＲＮＤ２）をアサートして、マルチプレクサ１４１８に、右側の入力（例えば、Ｒ９）の出力をダウンストリームマルチプレクサ１４２０（９）へと送信させ、別のＱラウンド制御値３（例えば、論理０）（ＱＲＮＤ３）をアサートして、マルチプレクサ１４２０（９）に、その右側の入力から（例えば、マルチプレクサ１４１８の出力から）データを供給させる。
【０１０３】
したがって、ハードウェアアクセラレータ１４００は、（例えば、制御値を介して）図１５に示されるようにデータを導いてよく、例えば、マルチプレクサ１４１８、マルチプレクサ１４２０及びマルチプレクサ１４１６のうちの対応する入力を選択して、図１５に示されるデータステアリング及びオペレーションを達成する。一実施形態において、図１４の上部及び下部にあるベクトルレジスタ１４０２は、別個のレジスタである（（例えば、あらゆる上書きを回避するために）例えば、出力データが生成されている間、一方は、入力データを格納する一時レジスタである）。示される実施形態において、特定のパス（例えば、グループ内の一番左のマルチプレクサ）は、２つのマルチプレクサではなく、１つのマルチプレクサだけを含むことに留意する。
【０１０４】
本明細書における実施形態のいずれかに関して、別個の制御線（例えば、他の制御値のうちの１つ又は複数から独立したそれら自身の制御値）が用いられてよい（例えば、制御回路が各マルチプレクサ制御線に対して一意の制御値を生成してよい）。
【０１０５】
図１６は、本開示の実施形態に係る図１５におけるハードウェアアクセラレータのクリティカルデータパス１６００を示す。図１０のクリティカルパス１０００との比較において、マルチプレクサ９１４Ａ又は９１４Ｂ（を、例えば、ステアリングするＱラウンド回路の入力）のいずれも存在していないため、例えば、データ生成オペレーションの最も時間のかかる速度を向上させることにより、アクセラレータの（例えば、コンピュータの）機能を改善することに留意する。図１３のクリティカルパス１３００との比較において、マルチプレクサ１１１６（９）又はマルチプレクサ１１２０（９）（を、例えば、ステアリングするＱラウンド回路の出力）のうちの少なくとも一方が存在していないので、例えば、データ生成オペレーションの最も時間のかかる速度を向上させることにより、アクセラレータの（例えば、コンピュータの）機能を改善することに留意する。クリティカルという用語は、最も長い時間を要する、例えば、横断するために最も多くのゲートステージを含むパスを指し得る。図１５の上記の実施例において、初期のＣｈａＣｈａ状態は、表１に示される４×４行列の（例えば、第１）列に適合する順序で（例えば、１６×３２ビット）ベクトルレジスタ１４０２に格納される。（例えば、ベクトルレジスタ１４０２に結合する前に）図１５のクリティカルデータパスは、（例えば、入力Ａ又はＢ上に）を供給し、（例えば、図６又は図７のパスＡ又はＢ上の）Ｑラウンド回路１４０４を横断し、次に、マルチプレクサ、例えば、他のマルチプレクサが直列に続くシングルマルチプレクサ１４２０（１３）を横断する。
【０１０６】
図１７は、本開示の実施形態に係るフロー図１７００を示す。示されるフロー１７００は、暗号化演算のラウンドの入力ベクトルをベクトルレジスタに格納する段階１７０２と、ベクトルレジスタからの第１の入力及びベクトルレジスタからの第２の入力に結合される第１のモジュラ加算器と、第１のモジュラ加算器、及び、ベクトルレジスタからの回路の第２のデータパスに結合される第２のモジュラ加算器とを有する回路の第１のデータパスにおいて、第１のモジュラ加算器を用いて、入力ベクトルからの第１の入力からの第１の値と、ベクトルレジスタからの第２の入力からの第２の値とを加算して第１の中間結果を生成すること、第２のモジュラ加算器を用いて、第１の中間結果と、第２のデータパスからの第３の中間結果とを加算して第１の結果を生成すること、並びに、第２の入力、及び、ベクトルレジスタからの回路の第３のデータパスに結合される第１の論理ＸＯＲ回路と、第１の論理ＸＯＲ回路に結合される第１のローテート回路と、第１のローテート回路及び第３のデータパスに結合される第２の論理ＸＯＲ回路と、第２の論理ＸＯＲ回路に結合される第２のローテート回路とを有する回路の第２のデータパスにおいて、第１の論理ＸＯＲ回路を用いて、ベクトルレジスタからの第２の入力からの第２の値と、第３のデータパスからの第３の結果との論理ＸＯＲをとって第２の中間結果を生成すること、第１のローテート回路を用いて、１又は複数の制御値に従って第２の中間結果をローテートさせて第３の中間結果を生成すること、第３の中間結果と第３のデータパスからの第４の結果との論理ＸＯＲをとって第５の中間結果を生成すること、第２のローテート回路を用いて、１又は複数の制御値に従って第５の中間結果をローテートさせて第２の結果を生成することにより、回路を用いて入力ベクトルに対するラウンドの一部を実行する段階１７０４と、一部に対する第１のデータパスからの第１の結果と、一部に対する第２のデータパスからの第２の結果とをベクトルレジスタに格納する段階１７０６とを含む。
【０１０７】
一実施形態において、装置は、暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、回路であって、ベクトルレジスタからの第１の入力及びベクトルレジスタからの第２の入力に結合される第１のモジュラ加算器と、第１のモジュラ加算器、及び、ベクトルレジスタからの第２のデータパスに結合される第２のモジュラ加算器とを含む第１のデータパス、及び、第２の入力、ベクトルレジスタからの第３のデータパスに結合される第１の論理ＸＯＲ回路と、第１の論理ＸＯＲ回路に結合される第１のローテート回路と、第１のローテート回路及び第３のデータパスに結合される第２の論理ＸＯＲ回路と、第２の論理ＸＯＲ回路に結合される第２のローテート回路とを含む第２のデータパスとを含む回路と、第１のデータパスの第１のモジュラ加算器及び第２のモジュラ加算器、並びに、第２のデータパスの第１の論理ＸＯＲ回路、第２の論理ＸＯＲ回路、第１のローテート回路及び第２のローテート回路に、１又は複数の制御値に従ってラウンドの一部（例えば、すべてより少ない）を実行させ、（例えば、回路の１又は複数のマルチプレクサに）一部に対する第１のデータパスからの第１の結果と、一部に対する第２のデータパスからの第２の結果とをベクトルレジスタに格納させる制御回路とを含む。初回のサイクルにおいて、入力ベクトルは、第１の要素に格納される第１の定数値及び第１の要素に隣接する第２の要素に格納される第２の定数値であってよく、制御回路は、初回のサイクルにおける回路への入力として第１の定数値又は第２の定数値を供給するように、ベクトルレジスタと回路との間に結合されるマルチプレクサを制御してよい。初回のサイクル（例えば、図１２及び１５のサイクル１）において、入力ベクトルは、（例えば、何も要素が介在することなく）隣接要素に格納される第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値であってよく、制御回路は、初回のサイクルにおける回路への入力（例えば、図６及び図７に関して説明されたようなＡ、Ｂ、Ｃ及びＤ）として、第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を提供してよい。制御回路は、回路の第１のデータパスのための、ベクトルレジスタからの第１の入力に第１の定数値を提供し、初回のサイクルにおける回路への第２のデータパスのための、ベクトルレジスタからの第２の入力に第１のキー値を提供してよい。第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値は、初回のサイクルにおいて、ベクトルレジスタの第１の端部における隣接要素に格納されてよく、制御回路は、第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を回路に入力して、出力値（例えば、図６及び図７に関して説明したようなＡｎｅｗ、Ｂｎｅｗ、Ｃｎｅｗ及びＤｎｅｗ）を生成し、ラウンドの次のサイクルのために、ベクトルレジスタの第２の端部の隣接要素に出力値を格納してよい。制御回路は、第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値以外の初回のサイクルの入力ベクトルを、ラウンドの次のサイクルのためにベクトルレジスタの第１の端部において開始する要素にシフトしてよく、出力値は、ラウンドの次のサイクルのために、ベクトルレジスタの第２の端部の隣接要素に格納される。制御回路は、ベクトルレジスタの第１の端部における複数の隣接要素からのラウンドの追加のサイクルのための値を回路に入力してラウンドの追加のサイクルのための出力値を生成し、ラウンドの追加のサイクルのための出力値、及び、追加のサイクルの後の（例えば、すぐ）次のサイクルのために完全にアラインされた状態で、複数の隣接要素以外のベクトルレジスタの要素からの値をベクトルレジスタに格納させてよい。制御回路は、ベクトルレジスタの第１の端部における複数の隣接要素からのラウンドの追加のサイクルのための値を回路に入力してラウンドの追加のサイクルのための出力値を生成し、ラウンドの追加のサイクルのための出力値のサブセットからの値、及び、複数の隣接要素以外のベクトルレジスタの要素からの値を、追加のサイクルの後の次のサイクルのために完全にアラインされた状態でベクトルレジスタの第１の端部における隣接要素に格納させ、追加のサイクルの後の次のサイクルのために部分的にアラインされた状態で、第１の端部以外のベクトルレジスタの要素にサブセット以外の値を格納させてよい。
【０１０８】
別の実施形態において、方法は、暗号化演算のラウンドの入力ベクトルをベクトルレジスタに格納する段階と、ベクトルレジスタからの第１の入力及びベクトルレジスタからの第２の入力に結合される第１のモジュラ加算器と、第１のモジュラ加算器、及び、ベクトルレジスタからの回路の第２のデータパスに結合される第２のモジュラ加算器とを含む回路の第１のデータパスにおいて、第１のモジュラ加算器を用いて、入力ベクトルからの第１の入力からの第１の値と、ベクトルレジスタからの第２の入力からの第２の値とを加算して第１の中間結果を生成すること、第２のモジュラ加算器を用いて、第１の中間結果と、第２のデータパスからの第３の中間結果とを加算して第１の結果を生成すること、並びに、第２の入力、及び、ベクトルレジスタからの回路の第３のデータパスに結合される第１の論理ＸＯＲ回路と、第１の論理ＸＯＲ回路に結合される第１のローテート回路と、第１のローテート回路及び第３のデータパスに結合される第２の論理ＸＯＲ回路と、第２の論理ＸＯＲ回路に結合される第２のローテート回路とを含む回路の第２のデータパスにおいて、第１の論理ＸＯＲ回路を用いて、ベクトルレジスタからの第２の入力からの第２の値と、第３のデータパスからの第３の結果との論理ＸＯＲをとって第２の中間結果を生成すること、第１のローテート回路を用いて、１又は複数の制御値に従って第２の中間結果をローテートさせて第３の中間結果を生成すること、第３の中間結果と第３のデータパスからの第４の結果との論理ＸＯＲをとって第５の中間結果を生成すること、第２のローテート回路を用いて、１又は複数の制御値に従って第５の中間結果をローテートさせて第２の結果を生成することにより、回路を用いて入力ベクトルに対するラウンドの一部を実行する段階と、一部に対する第１のデータパスからの第１の結果と、一部に対する第２のデータパスからの第２の結果とをベクトルレジスタに格納する段階とを含む。入力ベクトルを格納する段階は、初回のサイクルにおいて、第１の要素内の第１の定数値及び第１の要素に隣接する第２の要素内の第２の定数値を格納する段階を含んでよく、さらに、ベクトルレジスタと回路との間に結合されるマルチプレクサをスイッチングして、初回のサイクルにおける回路への入力として第１の定数値又は第２の定数値を供給する段階を含む。入力ベクトルを格納する段階は、初回のサイクルにおいて、入力ベクトルの隣接要素に格納される第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を格納する段階を含んでよく、さらに、初回のサイクルにおける回路への入力として、第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を送信する段階を含んでよい。送信する段階は、回路の第１のデータパスのための、ベクトルレジスタからの第１の入力に第１の値として第１の定数値を送信する段階、及び、初回のサイクルにおける回路の第２のデータパスのための、ベクトルレジスタからの第２の入力に第２の値として第１のキー値を送信する段階を含んでよい。入力ベクトルを格納する段階は、初回のサイクルにおいて、第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値をベクトルレジスタの第１の端部における隣接要素に格納する段階を含んでよく、送信する段階は、第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を回路に送信して、第１の結果及び第２の結果を含む出力値を生成する段階、及び、ラウンドの次のサイクルのために、ベクトルレジスタの第２の端部の隣接要素に出力値を格納する段階を含んでよい。実行する段階は、第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値以外の初回のサイクルの入力ベクトルを、ラウンドの次のサイクルのためにベクトルレジスタの第１の端部において開始する要素にシフトする段階、及び、ラウンドの次のサイクルのために、ベクトルレジスタの第２の端部の隣接要素に出力値を格納する段階を含んでよい。方法は、ベクトルレジスタの第１の端部における複数の隣接要素からのラウンドの追加のサイクルのための入力値を回路に送信してラウンドの追加のサイクルのための出力値を生成する段階、及び、追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、ラウンドの追加のサイクルの出力値、及び、複数の隣接要素以外のベクトルレジスタの要素からの値をベクトルレジスタに格納する段階を含んでよい。方法は、ベクトルレジスタの第１の端部における複数の隣接要素からのラウンドの追加のサイクルのための入力値を回路に送信してラウンドの追加のサイクルのための出力値を生成する段階と、ラウンドの追加のサイクルのための出力値のサブセットからの値、及び、複数の隣接要素以外のベクトルレジスタの要素からの値を、追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、ベクトルレジスタの第１の端部における隣接要素に格納する段階と、追加のサイクルの後の次のサイクルのために部分的にアラインされた状態で、第１の端部以外のベクトルレジスタの要素にサブセット以外の値を格納する段階とを含んでよい。
【０１０９】
さらに別の実施形態において、システムは、スレッドを実行し、暗号化演算をオフロードするハードウェアプロセッサと、暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、ハードウェアアクセラレータであって、ベクトルレジスタからの第１の入力及びベクトルレジスタからの第２の入力に結合される第１のモジュラ加算器と、第１のモジュラ加算器、及び、ベクトルレジスタからの第２のデータパスに結合される第２のモジュラ加算器とを含む第１のデータパス、及び、第２の入力、及び、ベクトルレジスタからの第３のデータパスに結合される第１の論理ＸＯＲ回路と、第１の論理ＸＯＲ回路に結合される第１のローテート回路と、第１のローテート回路及び第３のデータパスに結合される第２の論理ＸＯＲ回路と、第２の論理ＸＯＲ回路に結合される第２のローテート回路とを含む第２のデータパスを含む回路、並びに、第１のデータパスの第１のモジュラ加算器第２のモジュラ加算器、並びに、第２のデータパスの第１の論理ＸＯＲ回路、第２の論理ＸＯＲ回路、第１のローテート回路及び第２のローテート回路に、１又は複数の制御値に従ってラウンドの一部を実行させ、一部に対する第１のデータパスからの第１の結果と、一部に対する第２のデータパスからの第２の結果とをベクトルレジスタに格納させる制御回路とを含む。初回のサイクルにおいて、入力ベクトルは、第１の要素に格納される第１の定数値及び第１の要素に隣接する第２の要素に格納される第２の定数値を含み（例えば、含んでよく）、制御回路は、初回のサイクルにおける回路への入力として第１の定数値又は第２の定数値を供給するように、ベクトルレジスタと回路との間に結合されるマルチプレクサを制御してよい。初回のサイクルにおいて、入力ベクトルは、隣接要素に格納される第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値であってよく、制御回路は、初回のサイクルにおける回路への入力として、第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を提供してよい。制御回路は、回路の第１のデータパスのための、ベクトルレジスタからの第１の入力に第１の定数値を提供し、初回のサイクルにおける回路の第２のデータパスのための、ベクトルレジスタからの第２の入力に第１のキー値を提供してよい。第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値は、初回のサイクルにおいて、ベクトルレジスタの第１の端部における隣接要素に格納されてよく、制御回路は、第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を回路に入力して出力値を生成し、ラウンドの次のサイクルのためにベクトルレジスタの第２の端部の隣接要素に出力値を格納してよい。制御回路は、第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値以外の初回のサイクルの入力ベクトルを、ラウンドの次のサイクルのためにベクトルレジスタの第１の端部において開始する要素にシフトしてよく、出力値は、ラウンドの次のサイクルのために、ベクトルレジスタの第２の端部の隣接要素に格納される。制御回路は、ベクトルレジスタの第１の端部における複数の隣接要素からのラウンドの追加のサイクルのための値を回路に入力してラウンドの追加のサイクルのための出力値を生成し、ラウンドの追加のサイクルのための出力値、及び、追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、複数の隣接要素以外のベクトルレジスタの要素からの値をベクトルレジスタに格納させてよい。制御回路は、ベクトルレジスタの第１の端部における複数の隣接要素からのラウンドの追加のサイクルのための値を回路に入力してラウンドの追加のサイクルのための出力値を生成し、ラウンドの追加のサイクルのための出力値のサブセットからの値、及び、複数の隣接要素以外のベクトルレジスタの要素からの値を、追加のサイクルの後の次のサイクルのために完全にアラインされた状態でベクトルレジスタの第１の端部における隣接要素に格納させ、追加のサイクルの後の次のサイクルのために部分的にアラインされた状態で、第１の端部以外のベクトルレジスタの要素にサブセット以外の値を格納させてよい。
【０１１０】
別の実施形態において、装置は、暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、回路であって、ベクトルレジスタからの第１の入力及びベクトルレジスタからの第２の入力に結合される第１のモジュラ加算器と、第１のモジュラ加算器、及び、ベクトルレジスタからの第２のデータパスに結合される第２のモジュラ加算器とを含む第１のデータパス、及び、第２の入力、及び、ベクトルレジスタからの第３のデータパスに結合される第１の論理ＸＯＲ回路と、第１の論理ＸＯＲ回路に結合される第１のローテート回路と、第１のローテート回路及び第３のデータパスに結合される第２の論理ＸＯＲ回路と、第２の論理ＸＯＲ回路に結合される第２のローテート回路とを含む第２のデータパスを含む回路と、第１のデータパスの第１のモジュラ加算器及び第２のモジュラ加算器、並びに、第２のデータパスの第１の論理ＸＯＲ回路、第２の論理ＸＯＲ回路、第１のローテート回路及び第２のローテート回路に、ラウンドの一部を実行させ、一部に対する第１のデータパスからの第１の結果と、一部に対する第２のデータパスからの第２の結果とをベクトルレジスタに格納させる手段とを含む。
【０１１１】
さらに別の実施形態において、装置は、ハードウェアプロセッサにより実行されるときに、ハードウェアプロセッサに、本明細書に開示されるいずれかの方法を実行させるコードを格納するデータストレージデバイスを備える。装置は、詳細な説明に記載されたものと同じであってよい。方法は、詳細な説明に記載されたものと同じであってよい。
【０１１２】
命令セットは、１又は複数の命令フォーマットを含んでよい。所与の命令フォーマットは、数ある中でも、実行対象のオペレーション（例えば、オペコード）及びそのオペレーションが実行されるオペランド及び／又は他のデータフィールド（例えば、マスク）を指定する様々なフィールド（例えば、ビットの数、ビットの位置）を規定してよい。いくつかの命令フォーマットは、命令テンプレート（又はサブフォーマット）の定義を通じてさらに細分化される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセット（含まれるフィールドは、典型的には同じ順序であるが、より少ないフィールドが含まれているので、少なくともいくつかは、異なるビット位置を有する）を有するように定義されてよい、及び／又は、所与のフィールドが異なって解釈されるように定義されてよい。したがって、ＩＳＡの各命令は、所与の命令フォーマットを用いて（及び、定義されている場合、命令フォーマットの命令テンプレートのうちの所与の１つにおいて）表現されており、オペレーション及びオペランドを指定するためのフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコードと、そのオペコード及びオペランドフィールドを指定してオペランド（ソース１／デスティネーション及びソース２）を選択するオペコードフィールドを含む命令フォーマットとを有し、命令ストリームにおけるこのＡＤＤ命令の存在は、特定のオペランドを選択するオペランドフィールド内の特定のコンテンツを有することになる。アドバンストベクトル拡張（ＡＶＸ）（ＡＶＸ１及びＡＶＸ２）と称され、ベクトル拡張（ＶＥＸ）符号化スキームを用いるＳＩＭＤ拡張のセットがリリース及び／又は公開されている（例えば、インテル（登録商標）６４及びＩＡ−３２アーキテクチャソフトウェア開発者マニュアル、２０１８年１月を参照、及び、インテル（登録商標）アーキテクチャ命令セット拡張プログラミングリファレンス、２０１８年１月を参照）。
例示的な命令フォーマット
【０１１３】
本明細書で説明される命令の実施形態は、種々のフォーマットで具現化されてよい。さらに、例示的なシステム、アーキテクチャ及びパイプラインが以下に詳細に説明される。命令の実施形態は、当該システム、アーキテクチャ及びパイプライン上で実行されてよいが、これらの詳細に限定されるものではない。
汎用的なベクトルに適した命令フォーマット
【０１１４】
ベクトルに適した命令フォーマットは、ベクトル命令に適した命令フォーマットである（例えば、ベクトル演算に固有の特定のフィールドがある）。実施形態では、ベクトル及びスカラ演算の両方がベクトルに適した命令フォーマットを通じてサポートされることが説明されており、代替的な実施形態では、ベクトルに適した命令フォーマットをベクトル演算のみに用いる。
【０１１５】
図１８Ａ〜図１８Ｂは、本開示の実施形態に係る汎用的なベクトルに適した命令フォーマット及びこれらの命令テンプレートを示すブロック図である。図１８Ａは、本開示の実施形態に係る汎用的なベクトルに適した命令フォーマット及びこれらのクラスＡの命令テンプレートを示すブロック図であり、一方、図１８Ｂは、本開示の実施形態に係る汎用的なベクトルに適した命令フォーマット及びこれらのクラスＢの命令テンプレートを示すブロック図である。具体的には、汎用的なベクトルに適した命令フォーマット１８００は、クラスＡ命令及びクラスＢ命令テンプレートに対して定義され、その両方が非メモリアクセス１８０５の命令テンプレート及びメモリアクセス１８２０の命令テンプレートを含む。ベクトルに適した命令フォーマットとの関連で、汎用という用語は、いずれの特定の命令セットにも関係しない命令フォーマットを指す。
【０１１６】
本開示の実施形態では、ベクトルに適した命令フォーマットが、３２ビット（４バイト）又は６４ビット（８バイト）データ要素幅（又はサイズ）を有する６４バイトのベクトルオペランド長（又はサイズ）（したがって、６４バイトのベクトルは、１６個のダブルワードサイズの要素又は代替的に８クワッドワードサイズの要素のいずれか一方から構成される）、１６ビット（２バイト）又は８ビット（１バイト）データ要素幅（又はサイズ）を有する６４バイトのベクトルオペランド長（又はサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）又は８ビット（１バイト）データ要素幅（又はサイズ）を有する３２バイトのベクトルオペランド長（又はサイズ）、及び、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）又は８ビット（１バイト）データ要素幅（又はサイズ）を有する１６バイトのベクトルオペランド長（又はサイズ）をサポートすることが説明される一方、代替的な実施形態より多い、より多い、より少ない又は異なるデータ要素幅（例えば、１２８ビット（１６バイト）のデータ要素幅）を有する、より多い、より少ない及び／又は異なるベクトルオペランドサイズ（例えば、２５６バイトのベクトルオペランド）をサポートしてよい。
【０１１７】
図１８ＡのクラスＡの命令テンプレートは、１）非メモリアクセス１８０５の命令テンプレート内に非メモリアクセス・フルラウンド制御型オペレーション１８１０の命令テンプレート、及び、非メモリアクセス・データ変換型オペレーション１８１５の命令テンプレートが示される、２）メモリアクセス１８２０の命令テンプレート内に、メモリアクセス・一時的１８２５の命令テンプレート、及び、メモリアクセス・非一時的１８３０の命令テンプレートが示されることを含む。図１８ＢのクラスＢの命令テンプレートは、１）非メモリアクセス１８０５の命令テンプレート内に、非メモリアクセス・書き込みマスク制御・部分的なラウンド制御型オペレーション１８１２の命令テンプレート、及び、非メモリアクセス・書き込みマスク制御・ＶＳＩＺＥ型オペレーション１８１７の命令テンプレートが示され、２）メモリアクセス１８２０の命令テンプレート内に、メモリアクセス、書き込みマスク制御１８２７の命令テンプレートが示されることを含む。
【０１１８】
汎用的なベクトルに適した命令フォーマット１８００は、図１８Ａ〜図１８Ｂに示される順序で以下に列挙される次のフィールドを含む。
【０１１９】
フォーマットフィールド１８４０−このフィールドの特定の値（命令フォーマット識別子値）は、ベクトルに適した命令フォーマットを一意に識別し、従って、命令ストリームにおけるベクトルに適した命令フォーマット内の命令の存在を一意に識別する。このように、このフィールドは、汎用的なベクトルに適した命令フォーマットのみを有する命令セットには必要とされないという意味で任意選択的である。
【０１２０】
ベースオペレーションフィールド１８４２−そのコンテンツは、異なるベースオペレーションを区別する。
【０１２１】
レジスタインデックスフィールド１８４４−そのコンテンツは、直接的に又はアドレス生成を通じて、ソース及びデスティネーションオペランドがレジスタ内にあるか、又は、メモリ内にあるかに関わらず、それらの位置を指定する。これらは、Ｐ×Ｑ（例えば、３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）レジスタファイルからＮ個のレジスタを選択するための十分なビット数を含む。一実施形態において、Ｎは、最大で３つのソース及び１つのデスティネーションレジスタであってよく、代替的な実施形態では、より多くの又はより少ないソース及びデスティネーションレジスタをサポートしてよい（例えば、最大で２つのソースをサポートしてよく、その場合、これらのソースのうちの１つはまたデスティネーションとしての機能を果たし、最大で３つのソースをサポートしてよく、その場合、これらのソースのうちの１つはまた、デスティネーションとしての機能を果たし、最大で２つのソース及び１つのデスティネーションをサポートしてよい）。
【０１２２】
修飾子フィールド１８４６−そのコンテンツは、指定しないメモリアクセスからメモリアクセスを指定する汎用的なベクトル命令フォーマット内の命令の存在を区別する、すなわち、非メモリアクセス１８０５の命令テンプレートとメモリアクセス１８２０の命令テンプレートとを区別する。メモリアクセスオペレーションは、メモリ階層に対して読み出し及び／又は書き込みを行い（場合によっては、レジスタ内の値を用いて、ソース及び／又はデスティネーションアドレスを指定する）、一方、非メモリアクセスオペレーションは、これを行わない（例えば、ソース及びデスティネーションはレジスタである）。一実施形態において、このフィールドはまた、メモリアドレス計算を実行するために、３つの異なる態様の中から選択する一方、代替的な実施形態では、メモリアドレス計算を実行するために、より多い、より少ない又は異なる態様をサポートしてよい。
【０１２３】
拡張（ａｕｇｍｅｎｔａｔｉｏｎ）オペレーションフィールド１８５０−そのコンテンツは、様々な異なるオペレーションのうちのどれがベースオペレーションに加えて実行されるかを区別する。このフィールドは、コンテキストに固有のものである。本開示の一実施形態において、このフィールドは、クラスフィールド１８６８、アルファフィールド１８５２及びベータフィールド１８５４に分割される。拡張オペレーションフィールド１８５０は、２つ、３つ又は４つの命令ではなく、単一の命令において実行されるオペレーションの共通のグループを可能にする。
【０１２４】
スケールフィールド１８６０−そのコンテンツは、メモリアドレス生成のための（例えば、２スケール×インデックス＋ベースを用いるアドレス生成のための）インデックスフィールドのコンテンツをスケーリングすることを可能にする。
【０１２５】
変位フィールド１８６２Ａ−そのコンテンツは、（例えば、２スケール×インデックス＋ベース＋変位を用いるアドレス生成のための）メモリアドレス生成の一部として用いられる。
【０１２６】
変位ファクタフィールド１８６２Ｂ（変位ファクタフィールド１８６２Ｂのすぐ上に変位フィールド１８６２Ａを並置すること、一方又は他方が用いられることを示すことに留意する）−そのコンテンツは、アドレス生成の一部として用いられ、それは、メモリアクセス（Ｎ）のサイズによりスケーリングされる変位ファクタを指定する−ここで、Ｎは、（例えば、２スケール×インデックス＋ベース＋スケーリングされた変位を用いるアドレス生成用の）メモリアクセス内のバイト数である。冗長下位ビットは無視され、よって、有効なアドレスを算出する場合に用いられる最終的な変位を生成するために、変位ファクタフィールドのコンテンツは、メモリオペランドの合計のサイズ（Ｎ）で乗算される。Ｎの値は、フルオペコードフィールド１８７４（本明細書で後述される）及びデータ操作フィールド１８５４Ｃに基づいて、ランタイムにおいてプロセッサハードウェアにより決定される。変位フィールド１８６２Ａ及び変位ファクタフィールド１８６２Ｂは、それらが非メモリアクセス１８０５の命令テンプレートに用いられないという意味で任意選択的であり、及び／又は、異なる実施形態では、２つのうちの一方だけを実装してもよいし、どちらも実装しなくてもよい。
【０１２７】
データ要素幅フィールド１８６４−そのコンテンツは、（いくつかの実施形態では、すべての命令に対して、他の実施形態では、複数の命令のうちのいくつかのみに対して）多数のデータ要素幅のうちのどれが用いられるかを区別する。１つのデータ要素幅だけしかサポートされていない、及び／又は、オペコードのいくつかの態様を用いて、データ要素幅がサポートされている場合に必要とされないという意味で、このフィールドは任意選択的である。
【０１２８】
書き込みマスクフィールド１８７０−そのコンテンツは、データ要素の位置に基づいて、デスティネーションベクトルオペランド内のデータ要素の位置がベースオペレーション及び拡張オペレーションの結果を反映するか否かを制御する。クラスＡの命令テンプレートは、マージング−書き込みマスキングをサポートし、一方、クラスＢの命令テンプレートは、マージング及びゼロ書き込みマスキングの両方をサポートする。マージする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが、（ベースオペレーション及び拡張オペレーションにより指定される）任意のオペレーションの実行中に更新されることから保護することを可能にし、他の一実施形態において、対応するマスクビットが０を有するデスティネーションの各要素の古い値を保存する。対照的に、ゼロを書き込む場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが、（ベースオペレーション及び拡張オペレーションにより指定される）任意のオペレーションの実行中にゼロにされることを可能にし、一実施形態において、対応するマスクビットが０値を有する場合、デスティネーションの要素は０に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長（すなわち、最初のものから最後のものまでの修正される要素のスパン）を制御する能力がある。しかしながら、修正された要素が連続している必要はない。したがって、書き込みマスクフィールド１８７０は、ロード、ストア、算術、論理などを含む部分的なベクトル演算を可能にする。書き込みマスクフィールド１８７０のコンテンツが用いられる書き込みマスクを含む多数の書き込みマスクレジスタのうちの１つを選択する（したがって、書き込みマスクフィールド１８７０のコンテンツは、実行対象のそのマスキングを間接的に識別する）本開示の実施形態が説明される一方、代替的な実施形態では、代わりに又は追加的に、マスク書き込みフィールド１８７０のコンテンツが実行されるマスキングを直接指定することを可能にする。
【０１２９】
即値フィールド１８７２−そのコンテンツは、即値の指定を可能にする。このフィールドは、即値をサポートしていない汎用的なベクトルに適したフォーマットの実装において存在しておらず、かつ、即値を用いない命令にも存在していないという意味で任意選択的である。
【０１３０】
クラスフィールド１８６８−そのコンテンツは、命令の異なるクラスを区別する。図１８Ａ〜図１８Ｂを参照すると、このフィールドのコンテンツは、クラスＡ命令及びクラスＢ命令を選択する。図１８Ａ〜図１８Ｂにおいて、角が丸められた四角は、フィールド（例えば、図１８Ａ〜図１８Ｂのそれぞれにおけるクラスフィールド１８６８用のクラスＡ１８６８Ａ及びクラスＢ１８６８Ｂ）に特定の値が存在することを示すために用いられる。
クラスＡの命令テンプレート
【０１３１】
クラスＡの非メモリアクセス１８０５の命令テンプレートの場合、アルファフィールド１８５２は、ＲＳフィールド１８５２Ａとして解釈され、そのコンテンツは、異なる拡張オペレーションタイプのうちのどれが実行されるかを区別し（例えば、ラウンド１８５２Ａ．１及びデータ変換１８５２Ａ．２はそれぞれ、非メモリアクセス・ラウンドタイプオペレーション１８１０、及び、非メモリアクセスデータ変換型オペレーション１８１５の命令テンプレートに対して指定される）、一方、ベータフィールド１８５４は、指定されたタイプのオペレーションのうちどれが実行されるかを区別する。非メモリアクセス１８０５の命令テンプレートには、スケールフィールド１８６０、変位フィールド１８６２Ａ及び変位スケールフィールド１８６２Ｂが存在しない。
非メモリアクセス命令テンプレート−フルラウンド制御型オペレーション
【０１３２】
非メモリアクセス・フルラウンド制御型オペレーション１８１０の命令テンプレートにおいて、ベータフィールド１８５４は、ラウンド制御フィールド１８５４Ａとして解釈され、そのコンテンツは、静的ラウンドを提供する。説明される本開示の実施形態において、ラウンド制御フィールド１８５４Ａは、全浮動小数点例外抑制（ＳＡＥ）フィールド１８５６及びラウンド操作制御フィールド１８５８を含み、代替的な実施形態では、これらの概念の両方を同じフィールドにエンコードすることをサポートしてもよく、又は、これらの概念／フィールドの一方又は他方のみを有してよい（例えば、ラウンド操作制御フィールド１８５８のみを有してよい）。
【０１３３】
ＳＡＥフィールド１８５６−そのコンテンツは、例外イベント報告を無効化するか否かを区別し、ＳＡＥフィールド１８５６のコンテンツが、抑制が可能であることを示す場合、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、任意の浮動小数点例外ハンドラを立ち上げることもない。
【０１３４】
ラウンド操作制御フィールド１８５８−そのコンテンツは、ラウンド操作のグループのうちのどれが実行するかを区別する（例えば、切り上げ、切り捨て、０への丸め及び近似値への丸め）。したがって、ラウンド操作制御フィールド１８５８は、１命令単位でラウンド操作モードの変更を可能にする。プロセッサがラウンド操作モードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンド操作制御フィールド１８５０のコンテンツは、そのレジスタ値をオーバライドする。
非メモリアクセス命令テンプレート−データ変換型オペレーション
【０１３５】
非メモリアクセス・データ変換型オペレーション１８１５の命令テンプレートにおいて、ベータフィールド１８５４は、データ変換フィールド１８５４Ｂとして解釈され、そのコンテンツは、多数のデータ変換のうちのどれが実行されるかを区別する（例えば、非データ変換、スウィズル、ブロードキャスト）。
【０１３６】
クラスＡのメモリアクセス１８２０の命令テンプレートの場合、アルファフィールド１８５２は、エビクションヒントフィールド１８５２Ｂとして解釈され、そのコンテンツは、複数のエビクションヒントのうちのどれが用いられるかを区別し（図１８Ａにおいて、一時的１８５２Ｂ．１及び非一時的１８５２Ｂ．２はそれぞれ、メモリアクセス・一時的１８２５の命令テンプレート及びメモリアクセス・非一時的１８３０の命令テンプレートに指定される）、一方、ベータフィールド１８５４は、データ操作フィールド１８５４Ｃとして解釈され、そのコンテンツは、多数のデータ操作オペレーション（プリミティブとしても知られる）のうちのどれが実行されるかを区別する（例えば、非マニピュレーション、ブロードキャスト、ソースのアップコンバート及びデスティネーションのダウンコンバート）。メモリアクセス１８２０の命令テンプレートは、スケールフィールド１８６０を含み、任意選択的に、変位フィールド１８６２Ａ又は変位スケールフィールド１８６２Ｂを含む。
【０１３７】
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロード及びメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素の様式でメモリから／メモリへデータを転送し、実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクのコンテンツにより指示される。
メモリアクセス命令テンプレート−一時的
【０１３８】
一時的データは、キャッシュから利益を得るのに十分なほど速やかに再利用される可能性が高いデータである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含む異なる態様でそれを実装してもよい。
メモリアクセス命令テンプレート−非一時的
【０１３９】
非一時的データは、第１レベルキャッシュにキャッシュする利益を受けられるほど速やかに再利用される可能性が低いデータであり、エビクションが優先されるべきである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含む異なる態様でそれを実装してもよい。
クラスＢの命令テンプレート
【０１４０】
クラスＢの命令テンプレートの場合、アルファフィールド１８５２は、書き込みマスク制御（Ｚ）フィールド１８５２Ｃとして解釈され、そのコンテンツは、書き込みマスクフィールド１８７０により制御される書き込みマスキングがマージングであるべきか、ゼロ化（ｚｅｒｏｉｎｇ）であるべきかを区別する。
【０１４１】
クラスＢの非メモリアクセス１８０５の命令テンプレートの場合、ベータフィールド１８５４の一部は、ＲＬフィールド１８５７Ａとして解釈され、そのコンテンツは、異なる拡張オペレーションタイプのうちのどれが実行されるかを区別し（例えば、ラウンド１８５７Ａ．１及びベクトル長（ＶＳＩＺＥ）１８５７Ａ．２はそれぞれ、非メモリアクセス・書き込みマスク制御・部分的なラウンド制御型オペレーション１８１２の命令テンプレート、及び、非メモリアクセス・書き込みマスク制御・ＶＳＩＺＥ型オペレーション１８１７の命令テンプレートに指定される）、一方、ベータフィールド１８５４の残りは、指定されたタイプのオペレーションのうちどれが実行されるかを区別する。非メモリアクセス１８０５の命令テンプレートには、スケールフィールド１８６０、変位フィールド１８６２Ａ及び変位スケールフィールド１８６２Ｂが存在しない。
【０１４２】
非メモリアクセス・書き込みマスク制御・部分的なラウンド制御型オペレーション１８１０の命令テンプレートにおいて、ベータフィールド１８５４の残りは、ラウンド操作フィールド１８５９Ａとして解釈され、例外イベント報告が無効化される（所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、任意の浮動小数点例外ハンドラを立ち上げることもない）。
【０１４３】
ラウンド操作制御フィールド１８５９Ａ−ラウンド操作制御フィールド１８５８と同じように、そのコンテンツは、ラウンド操作のグループのうちのどれが実行するかを区別する（例えば、切り上げ、切り捨て、０への丸め及び近似値への丸め）。したがって、ラウンド操作制御フィールド１８５９Ａは、１命令単位でラウンド操作モードの変更を可能にする。プロセッサがラウンド操作モードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンド操作制御フィールド１８５０のコンテンツは、そのレジスタ値をオーバライドする。
【０１４４】
非メモリアクセス・書き込みマスク制御・ＶＳＩＺＥ型オペレーション１８１７の命令テンプレートにおいて、ベータフィールド１８５４の残りは、ベクトル長フィールド１８５９Ｂとして解釈され、そのコンテンツは、多数のベクトル長のうちのどれが、実行されるかを区別する（例えば、１２８、２５６又は５１２バイト）。
【０１４５】
クラスＢのメモリアクセス１８２０の命令テンプレートの場合、ベータフィールド１８５４の一部は、ブロードキャストフィールド１８５７Ｂとして解釈され、そのコンテンツは、ブロードキャストタイプのデータ操作オペレーションが実行されるか否かを区別し、一方、ベータフィールド１８５４の残りは、ベクトル長フィールド１８５９Ｂとして解釈される。メモリアクセス１８２０の命令テンプレートは、スケールフィールド１８６０を含み、任意選択的に、変位フィールド１８６２Ａ又は変位スケールフィールド１８６２Ｂを含む。
【０１４６】
汎用的なベクトルに適した命令フォーマット１８００に関して、フルオペコードフィールド１８７４は、フォーマットフィールド１８４０、ベースオペレーションフィールド１８４２及びデータ要素幅フィールド１８６４を含むことが示される。一実施形態では、フルオペコードフィールド１８７４がこれらのフィールドのすべてを含むことが示される一方、それらのすべてをサポートしていない実施形態では、フルオペコードフィールド１８７４がこれらのフィールドの一部を含むことが示される。フルオペコードフィールド１８７４は、オペレーションコード（オペコード）を提供する。
【０１４７】
拡張オペレーションフィールド１８５０、データ要素幅フィールド１８６４及び書き込みマスクフィールド１８７０は、汎用的なベクトルに適した命令フォーマットにおいて１命令単位で、これらの機能が指定されることを可能にする。
【０１４８】
書き込みマスクフィールド及びデータ要素幅フィールドの結合は、異なるデータ要素幅に基づいて、マスクが適用されることを可能にする型付き命令を作成する。
【０１４９】
クラスＡ及びクラスＢ内で見つけられる様々な命令テンプレートは、異なる状況で有益である。本開示のいくつかの実施形態において、異なるプロセッサ又はプロセッサ内の異なるコアは、クラスＡのみ、クラスＢのみ、又は両方のクラスをサポートしてよい。例えば、汎用コンピューティング用の高性能汎用アウトオブオーダコアは、クラスＢのみをサポートしてよく、主にグラフィックス及び／又は科学（スループット）コンピューティング向けのコアは、クラスＡのみをサポートしてよく、両方用のコアは、両方をサポートしてよい（もちろん、コアは、両方のクラスからのテンプレート及び命令のいくつかの混合を有するが、両方のクラスからのすべてのテンプレート及び命令が開示の範囲内にあるわけではない）。また、単一のプロセッサは、複数のコアを含んでよく、そのすべてが同じクラスをサポートする、又は、異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックス及び汎用コアを有するプロセッサにおいて、主に、グラフィックス及び／又は科学コンピューティング用の複数のグラフィックスコアは、クラスＡのみをサポートしてよく、一方、複数の汎用コアのうちの１つ又は複数は、クラスＢのみをサポートする汎用コンピューティング用のアウトオブオーダ実行及びレジスタリネーミングを有する高性能な汎用コアであってよい。別個のグラフィックスコアを有していない別のプロセッサは、クラスＡ及びクラスＢの両方をサポートするもう１つの汎用インオーダ又はアウトオブオーダコアを含んでよい。もちろん、１つのクラスからの機能は、異なる本開示の実施形態において他のクラスに実装されてもよい。高水準言語に書き込まれるプログラムは、１）実行のターゲットプロセッサによりサポートされるクラスの命令のみを有する形式、又は、２）すべてのクラスの命令を有する異なる結合を用いて書き込まれた代替的なルーチンを有し、かつ、コードを現在実行しているプロセッサによりサポートされる命令に基づいて実行するルーチンを選択する制御フローコードを有する形式を含む様々な異なる実行可能な形式に置き換えられる（例えば、ジャストインタイムでコンパイルされる又は静的にコンパイルされる）であろう。
例示的な特定のベクトルに適した命令フォーマット
【０１５０】
図１９は、本開示の実施形態に係る例示的な特定のベクトルに適した命令フォーマットを示すブロック図である。図１９は、フィールドの位置、サイズ、解釈及び順序と同様に、これらのフィールドの一部の値も指定するという意味で固有である特定のベクトルに適した命令フォーマット１９００を示す。特定のベクトルに適した命令フォーマット１９００は、ｘ８６命令セットを拡張するために用いられてよく、したがって、フィールドのいくつかは、既存のｘ８６命令セット及びこれらの拡張版（例えば、ＡＶＸ）において用いられるものと同様又は同じである。このフォーマットは、拡張を伴う既存のｘ８６命令セットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド及び即値フィールドとの整合性を保つ。図１８からのフィールドが図１９のどのフィールドにマッピングされるかが示される。
【０１５１】
本開示の実施形態では、例示の目的で汎用的なベクトルに適した命令フォーマット１８００との関連で特定のベクトルに適した命令フォーマット１９００を参照して説明されているが、本開示は、特許請求の範囲に記載されたものを除いて、特定のベクトルに適した命令フォーマット１９００に限定されるものではないことを理解されたい。例えば、汎用的なベクトルに適した命令フォーマット１８００は、様々フィールドに対する様々な可能性のあるサイズを検討し、一方、特定のベクトルに適した命令フォーマット１９００は、特定のサイズのフィールドを有するように示される。具体的な例として、データ要素幅フィールド１８６４は、特定のベクトルに適した命令フォーマット１９００において、１ビットフィールドとして示されているが、本開示は、そこまで限定されることはない（すなわち、汎用的なベクトルに適した命令フォーマット１８００は、他のサイズのデータ要素幅フィールド１８６４を検討する）。
【０１５２】
汎用的なベクトルに適した命令フォーマット１８００は、図１９Ａに示される順序で以下に列挙される次のフィールドを含む。
【０１５３】
ＥＶＥＸプレフィックス（バイト０−３）１９０２は、４バイト形式にエンコードされる。
【０１５４】
フォーマットフィールド１８４０（ＥＶＥＸバイト０、ビット［７：０］）−第１のバイト（ＥＶＥＸバイト０）は、フォーマットフィールド１８４０であり、それは、０ｘ６２（本開示の一実施形態において、ベクトルに適した命令フォーマットを区別するために用いられる固有値）を含む。
【０１５５】
第２〜第４バイト（ＥＶＥＸバイト１−３）は、具体的な能力を提供する多数のビットフィールドを含む。
【０１５６】
ＲＥＸフィールド１９０５（ＥＶＥＸバイト１、ビット［７‐５］）−ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）及び１８５７ＢＥＸバイト１、ビット［５］−Ｂで構成される。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ及びＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能を提供し、これらは、１の補数形式を用いてエンコードされる、すなわち、ＺＭＭ０は、１１１１Ｂとしてエンコードされ、ＺＭＭ１５は、００００Ｂとしてエンコードされる。命令の他のフィールドは、当該技術分野において知られているように、レジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ及びｂｂｂ）をエンコードし、その結果、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ及びＥＶＥＸ．Ｂを加えることにより、Ｒｒｒｒ、Ｘｘｘｘ及びＢｂｂｂが形成され得る。
【０１５７】
ＲＥＸ'フィールド１８１０−これは、ＲＥＸ'フィールド１８１０の第１の部分であり、拡張３２レジスタセットの上位１６個又は下位１６個のいずれかをエンコードするために用いられるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本開示の一実施形態において、このビットは、リアルオペコードバイトが６２であるＢＯＵＮＤ命令と（周知のｘ８６  ３２ビットモードにおいて）区別するために、以下に示されるような他のものと共にビット反転フォーマットに格納されるが、ＭＯＤ  Ｒ／Ｍフィールド（以下に説明）では、ＭＯＤフィールド内の値１１を受け入れない。本開示の代替的な実施形態では、このビット及び以下に示される他のビットを反転フォーマットに格納しない。値１は、下位１６個のレジスタをエンコードするために用いられる。言い換えると、Ｒ'Ｒｒｒｒは、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ及び他のフィールドの他のＲＲＲを結合することにより形成される。
【０１５８】
オペコードマップフィールド１９１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）−そのコンテンツは、暗黙の先頭オペコードバイト（０Ｆ、０Ｆ３８又は０Ｆ３）をエンコードする。
【０１５９】
データ要素幅フィールド１８６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）−表記ＥＶＥＸ．Ｗにより表される。ＥＶＥＸ．Ｗは、データタイプの粒度（サイズ）（３２ビットデータ要素又は６４ビットデータ要素のいずれか）を規定するために用いられる。
【０１６０】
ＥＶＥＸ．ｖｖｖｖ１９２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割は、１）ＥＶＥＸ．ｖｖｖｖが、反転（１の補数）形式において指定される第１のソースレジスタオペランドをエンコードし、２又はそれより多いソースオペランドを有する命令を有効にすること、２）ＥＶＥＸ．ｖｖｖｖが、特定のベクトルシフトに対して１の補数形式で指定されるデスティネーションレジスタオペランドをエンコードすること、又は、３）ＥＶＥＸ．ｖｖｖｖは、いずれのオペランドをエンコードすることはなく、当該フィールドは予約されており、１１１１ｂを含む。したがって、ＥＶＥＸ．ＶＶＶＶフィールド１９２０は、反転（１の補数）形式で格納される第１のソースレジスタ指定子の下位ビットをエンコードする。命令に応じて、追加の異なるＥＶＥＸビットフィールドは、指定子のサイズを３２個のレジスタに拡張するために用いられる。
【０１６１】
ＥＶＥＸ．Ｕ１８６８のクラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕ＝０である場合、クラスＡ又はＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１である場合、クラスＢ又はＥＶＥＸ．Ｕ１を示す。
【０１６２】
プレフィックスエンコードフィールド１９２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）−ベースオペレーションフィールドに追加のビットを提供する。ＥＶＥＸプレフィックスフォーマットにおけるレガシＳＳＥ命令にサポートを提供することに加えて、これはまた、ＳＩＭＤプレフィックスをコンパクトにするという利点を有する（ＳＩＭＤプレフィックスを表現するバイトを必要とするのではなく、ＥＶＥＸプレフィックスが２ビットのみを必要とする）。一実施形態において、レガシフォーマット及びＥＶＥＸプレフィックスフォーマットの両方において、ＳＩＭＤプレフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を用いるレガシＳＳＥ命令をサポートするために、これらのレガシＳＩＭＤプレフィックスは、ＳＩＭＤプレフィックスエンコードフィールドへとエンコードされ、デコーダのＰＬＡに提供される前に、ランタイムにおいてレガシＳＩＭＤプレフィックスへと拡張される（そのため、ＰＬＡは、これらのレガシ命令のレガシ及びＥＶＥＸフォーマットの両方を修正することなく実行できる。より新しい命令では、オペコード拡張として、ＥＶＥＸプレフィックスエンコードフィールドのコンテンツを直接的に用いることができ、ある実施形態では、整合性を目的として同様に拡張するが、これらのレガシＳＩＭＤプレフィックスにより異なる意味が指定されることを可能にする。代替的な実施形態は、２ビットのＳＩＭＤプレフィックスエンコーディングをサポートするようにＰＬＡを再設計してよく、したがって、拡張する必要がない。
【０１６３】
アルファフィールド１８５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ、ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．ｗｒｉｔｅ  ｍａｓｋ  ｃｏｎｔｒｏｌ及びＥＶＥＸ．Ｎとしても知られ、また、αを用いて示される）−前述したように、このフィールドは、コンテキストに固有のものである。
【０１６４】
ベータフィールド１８５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ、ｒｒｌ、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られ、また、βββを用いて示される）−前述したように、このフィールドは、コンテキストに固有のものである。
【０１６５】
ＲＥＸ'フィールド１８１０−これは、ＲＥＸ'フィールドの残りであり、拡張３２レジスタセットの上位１６個又は下位１６個のいずれかをエンコードするために用いられ得るＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ'）である。このビットは、ビット反転フォーマットに格納される。値１は、下位１６個のレジスタをエンコードするために用いられる。言い換えると、Ｖ'ＶＶＶＶは、ＥＶＥＸ．Ｖ'、ＥＶＥＸ．ｖｖｖｖを結合することにより形成される。
【０１６６】
書き込みマスクフィールド１８７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−そのコンテンツは、前述したように書き込みマスクレジスタ内のレジスタインデックスを指定する。本開示の一実施形態において、特定の値ＥＶＥＸ．ｋｋｋ＝０００は、特定の命令に用いられる書き込みマスクが存在しないことを示唆する特別な挙動を有する（これは、すべてのものに対してハードウェアに組み込まれる書き込みマスク、又は、マスキングハードウェアをバイパスするハードウェアの使用を含む様々な態様で実装され得る）。
【０１６７】
リアルオペコードフィールド１９３０（バイト４）はオペコードバイトとしても知られる。オペコードの一部は、このフィールドにおいて指定される。
【０１６８】
ＭＯＤ  Ｒ／Ｍフィールド１９４０（バイト５）は、ＭＯＤフィールド１９４２、Ｒｅｇフィールド１９４４及びＲ／Ｍフィールド１９４６を含む。前述したように、ＭＯＤフィールド１９４２のコンテンツは、メモリアクセスと非メモリアクセスオペレーションとを区別する。Ｒｅｇフィールド１９４４の役割は、デスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかをエンコーディングする、又は、オペコード拡張として取り扱われ、かつ、任意の命令オペランドをエンコードするのに用いられない、という２つの状況に要約され得る。Ｒ／Ｍフィールド１９４６の役割は、メモリアドレスを参照する命令オペランドをエンコーディングすること、又は、デスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかをエンコーディングすることを含んでよい。
【０１６９】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）−前述したように、スケールフィールド１８５０のコンテンツは、メモリアドレス生成に用いられる。ＳＩＢ．ｘｘｘ１９５４及びＳＩＢ．ｂｂｂ１９５６−これらのフィールドのコンテンツは、レジスタインデックスＸｘｘｘ及びＢｂｂｂに関して前に言及されている。
【０１７０】
変位フィールド１８６２Ａ（バイト７〜１０）−ＭＯＤフィールド１９４２が１０を含む場合、バイト７〜１０は、変位フィールド１８６２Ａであり、それは、レガシ３２ビット変位（ｄｉｓｐ３２）と同じく機能し、バイト粒度で機能する。
【０１７１】
変位ファクタフィールド１８６２Ｂ（バイト７）−ＭＯＤフィールド１９４２が０１を含む場合、バイト７は変位ファクタフィールド１８６２Ｂである。このフィールドの位置は、バイト粒度で機能するレガシｘ８６命令セットの８ビット変位（ｄｉｓｐ８）の位置と同じである。ｄｉｓｐ８は符号拡張されるので、−１２８から１２７バイトオフセット間のみでアドレスを指定することができ、６４バイトのキャッシュラインに関して、ｄｉｓｐ８は、４つの実際に有用な値、−１２８、−６４、０及び６４のみに設定され得る８ビットを用いる。多くの場合、より広い範囲が必要とされることから、ｄｉｓｐ３２が用いられる。しかしながら、ｄｉｓｐ３２には４バイトが必要である。ｄｉｓｐ８及びｄｉｓｐ３２とは対照的に、変位ファクタフィールド１８６２Ｂは、ｄｉｓｐ８を再解釈したものであり、変位ファクタフィールド１８６２Ｂを用いる場合、実際の変位は、メモリオペランドアクセス（Ｎ）のサイズで乗算された変位ファクタフィールドのコンテンツにより決定される。このタイプの変位は、ｄｉｓｐ８＊Ｎと称される。これは、平均命令長を縮小する（変位に用いられるが範囲がはるかに広くなる単一バイト）。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であるという前提に基づいており、よって、アドレスオフセットの冗長下位ビットはエンコードされる必要がない。言い換えると、変位ファクタフィールド１８６２Ｂは、レガシｘ８６命令セットの８ビット変位に置き換わる。したがって、変位ファクタフィールド１８６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎにオーバーロードされるという例外のみで、ｘ８６命令セットの８ビット変位と同じ態様でエンコードされる（そのため、ＭｏｄＲＭ／ＳＩＢエンコーディングルールに変更はない）。言い換えると、エンコーディングのルール又はエンコーディングの長さに変更はないが、（メモリオペランドのサイズにより変位をスケーリングして、バイトに関するアドレスオフセットを取得する必要がある）ハードウェアによる変位値の解釈のみに変更がある。即値フィールド１８７２は、前述したように操作する。
フルオペコードフィールド
【０１７２】
図１９Ｂは、本開示の一実施形態に係るフルオペコードフィールド１８７４を作成する特定のベクトルに適した命令フォーマット１９００のフィールドを示すブロック図である。具体的には、フルオペコードフィールド１８７４は、フォーマットフィールド１８４０、ベースオペレーションフィールド１８４２及びデータ要素幅（Ｗ）フィールド１８６４を含む。ベースオペレーションフィールド１８４２は、プレフィックスエンコードフィールド１９２５、オペコードマップフィールド１９１５及びリアルオペコードフィールド１９３０を含む。
レジスタインデックスフィールド
【０１７３】
図１９Ｃは、本開示の一実施形態に係るレジスタインデックスフィールド１８４４を作成する特定のベクトルに適した命令フォーマット１９００のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド１８４４は、ＲＥＸフィールド１９０５、ＲＥＸ'フィールド１９１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド１９４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド１９４６、ＶＶＶＶフィールド１９２０、ｘｘｘフィールド１９５４及びｂｂｂフィールド１９５６を含む。
拡張オペレーションフィールド
【０１７４】
図１９Ｄは、本開示の一実施形態に係る拡張オペレーションフィールド１８５０を作成する特定のベクトルに適した命令フォーマット１９００のフィールドを示すブロック図である。クラス（Ｕ）フィールド１８６８が０を含む場合、ＥＶＥＸ．Ｕ０（クラスＡ１８６８Ａ）を表し、１を含む場合は、ＥＶＥＸ．Ｕ１（クラスＢ１８６８Ｂ）を表す。Ｕ＝０、かつＭＯＤフィールド１９４２が１１を含む（非メモリアクセスオペレーションを意味する）場合、アルファフィールド１８５２（ＥＶＥＸバイト３、ビット［７］）−ＥＨ）は、ＲＳフィールド１８５２Ａとして解釈される。ＲＳフィールド１８５２Ａが１（ラウンド１８５２Ａ．１）を含む場合、ベータフィールド１８５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ラウンド制御フィールド１８５４Ａとして解釈される。ラウンド制御フィールド１８５４Ａは、１ビットのＳＡＥフィールド１８５６及び２ビットのラウンド操作フィールド１８５８を含む。ＲＳフィールド１８５２Ａが０（データ変換１８５２Ａ．２）を含む場合、ベータフィールド１８５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ変換フィールド１８５４Ｂとして解釈される。Ｕ＝０、かつＭＯＤフィールド１９４２が００、０１又は１０を含む（メモリアクセスオペレーションを意味する）場合、アルファフィールド１８５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、エビクションヒント（ＥＨ）フィールド１８５２Ｂとして解釈され、ベータフィールド１８５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ操作フィールド１８５４Ｃとして解釈される。
【０１７５】
Ｕ＝１である場合、アルファフィールド１８５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、書き込みマスク制御（Ｚ）フィールド１８５２Ｃとして解釈される。Ｕ＝１、かつＭＯＤフィールド１９４２が１１を含む（非メモリアクセスオペレーションを意味する）場合、ベータフィールド１８５４の一部（ＥＶＥＸバイト３、ビット［４］−Ｓ０）は、ＲＬフィールド１８５７Ａとして解釈され、１（ラウンド１８５７Ａ．１）を含む場合、ベータフィールド１８５４の残り（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）は、ラウンド操作フィールド１８５９Ａとして解釈され、一方、ＲＬフィールド１８５７Ａが０（ＶＳＩＺＥ１８５７．Ａ２）を含む場合、ベータフィールド１８５４の残り（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）は、ベクトル長フィールド１８５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）として解釈される。Ｕ＝１、かつＭＯＤフィールド１９４２が００、０１又は１０を含む（メモリアクセスオペレーションを意味する）場合、ベータフィールド１８５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド１８５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）及びブロードキャストフィールド１８５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。
例示的なレジスタアーキテクチャ
【０１７６】
図２０は、本開示の一実施形態に係るレジスタアーキテクチャ２０００のブロック図である。図示される実施形態において、５１２ビット幅である３２個のベクトルレジスタ２０１０があり、これらのレジスタは、ｚｍｍ０からｚｍｍ３１と称される。下位１６個のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０〜１６上にオーバーレイされる。下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜１５上にオーバーレイされる。以下の表に示されるように、特定のベクトルに適した命令フォーマット１９００は、これらのオーバーレイされたレジスタファイルに対して操作する。
【表２】
2019207393.tif 000004
【０１７７】
言い換えると、ベクトル長フィールド１８５９Ｂは、最大長から１又は複数の他のより短い長さまでの範囲内から選択し、そのようなより短い長さはそれぞれ、先行する長さの半分の長さであり、ベクトル長フィールド１８５９Ｂなしの命令テンプレートは、最大のベクトル長に対して操作する。さらに、一実施形態において、特定のベクトルに適した命令フォーマット１９００のクラスＢの命令テンプレートは、パックド又はスカラ単／倍精度浮動小数点データ及びパックド又はスカラ整数データに対して操作する。スカラ演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ内の最下位のデータ要素の位置に対して実行されるオペレーションであり、実施形態に応じて、上位のデータ要素の位置は、それらが命令前と同じままであるか、又は、ゼロにされるかのいずれかである。
【０１７８】
書き込みマスクレジスタ２０１５−図示される実施形態において、８つの書き込みマスクレジスタ（ｋ０からｋ７）があり、それぞれ６４ビットのサイズである。代替的な実施形態において、書き込みマスクレジスタ２０１５は、１６ビットのサイズである。前述したように、本開示の一実施形態において、ベクトルマスクレジスタｋ０は、書き込みマスクとして用いられることができず、通常ｋ０を示すエンコーディングが書き込みマスクに用いられる場合、０ｘＦＦＦＦのハードウェアに組み込まれる書き込みマスクを選択することで、その命令に対する書き込みマスキングを効果的に無効にする。
【０１７９】
汎用レジスタ２０２５−図示される実施形態において、メモリオペランドにアドレスを指定するために、既存のｘ８６アドレス指定モードと共に用いられる１６個の６４ビット汎用レジスタがある。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ及びＲ８からＲ１５という名称により参照される。
【０１８０】
ＭＭＸパックド整数フラットレジスタファイル２０５０がエイリアスされるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）２０４５−図示される実施形態において、ｘ８７スタックは、ｘ８７命令セット拡張を用いて、３２／６４／８０ビットの浮動小数点データに対するスカラ浮動小数点演算を実行するために用いられる８要素スタックであり、一方、ＭＭＸレジスタは、６４ビットのパックド整数データに対するオペレーションを実行するために用いられ、同様に、ＭＭＸとＸＭＭレジスタとの間で実行される一部の演算に対するオペランドを保持するために用いられる。
【０１８１】
本開示の代替的な実施形態では、より広い又はより狭いレジスタを用いてよい。さらに、本開示の代替的な実施形態では、より多い、より少ない又は異なるレジスタファイル及びレジスタを用いてよい。
例示的なコアアーキテクチャ、プロセッサ及びコンピュータアーキテクチャ
【０１８２】
プロセッサコアは、異なる態様で、異なる目的で、かつ、異なるプロセッサにおいて実装されてよい。例えば、そのようなコアの実装は、１）汎用コンピューティング用の汎用インオーダコア、２）汎用コンピューティング用の高性能汎用アウトオブオーダコア、３）主にグラフィックス及び／又は科学（スループット）コンピューティング向けの専用コアを含んでよい。異なるプロセッサの実装は、１）汎用コンピューティング用の１又は複数の汎用インオーダコア、及び／又は、汎用コンピューティング用の１又は複数の汎用アウトオブオーダコアを含むＣＰＵ、及び、２）主にグラフィックス及び／又は科学（スループット）用の１又は複数の特別用途コアを含むコプロセッサを含んでよい。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、それは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内の別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、場合によっては、例えば、統合グラフィックス及び／又は科学（スループット）論理などの特別用途論理と称され、又は、特別用途コアと称される）、及び、４）説明されたＣＰＵと同じダイ上に含まれ得るシステムオンチップ（場合によっては、アプリケーションコア又はアプリケーションプロセッサ、上述のコプロセッサ及び追加的な機能性と称される）を含んでよい。例示的なコアアーキテクチャが説明されているが、次に、例示的なプロセッサ及びコンピュータアーキテクチャの説明が続く。
例示的なコアアーキテクチャ
インオーダ及びアウトオブオーダコアのブロック図
【０１８３】
図２１Ａは、本開示の実施形態に係る、例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図２１Ｂは、本開示の実施形態に係るプロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図２１Ａ〜図２１Ｂ内の実線の枠は、インオーダパイプライン及びインオーダコアを示し、一方、任意選択的な追加の破線の枠は、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様が、アウトオブオーダ態様のサブセットであることを前提に、アウトオブオーダ態様が説明される。
【０１８４】
図２１Ａにおいて、プロセッサパイプライン２１００は、フェッチステージ２１０２、長さデコードステージ２１０４、デコードステージ２１０６、割り当てステージ２１０８、リネームステージ２１１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ２１１２、レジスタ読み出し／メモリ読み出しステージ２１１４、実行ステージ２１１６、ライトバック／メモリ書き込みステージ２１１８、例外処理ステージ２１２２及びコミットステージ２１２４を含む。
【０１８５】
図２１Ｂは、実行エンジンユニット２１５０に結合されるフロントエンドユニット２１３０を含むプロセッサコア２１９０を示し、両方ともメモリユニット２１７０に結合される。コア２１９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア又はハイブリッド若しくは代替的なコアタイプであってよい。さらに別のオプションとして、コア２１９０は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ）コア又はグラフィックスコアなどの特別用途コアであってよい。
【０１８６】
フロントエンドユニット２１３０は、命令キャッシュユニット２１３４に結合される分岐予測ユニット２１３２を含み、命令キャッシュユニット２１３４は命令変換ルックアサイドバッファ（ＴＬＢ）２１３６に結合され、命令変換ルックアサイドバッファ（ＴＬＢ）２１３６は命令フェッチユニット２１３８に結合され、命令フェッチユニット２１３８はデコードユニット２１４０に結合される。デコードユニット２１４０（又は、デコーダ若しくはデコーダユニット）は、命令（例えば、マクロ命令）をデコードし、１又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は、他の制御信号を出力として生成してよく、これらは、元の命令からデコードされ、そうでなければ、元の命令を反映し、又は、元の命令から導出される。デコードユニット２１４０は、様々な異なるメカニズムを用いて実装されてよい。適切なメカニズムの例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）などを含む。一実施形態において、コア２１９０は、マイクロコードＲＯＭ、又は、特定のマクロ命令に対するマイクロコードを格納する（例えば、デコードユニット２１４０における、そうでなければ、フロントエンドユニット２１３０内の）他の媒体を含む。デコードユニット２１４０は、実行エンジンユニット２１５０内のリネーム／割り当てユニット２１５２に結合される。
【０１８７】
実行エンジンユニット２１５０は、リタイアメントユニット２１５４に結合されるリネーム／割り当てユニット２１５２、及び、１又は複数のスケジューラユニット２１５６のセットを含む。スケジューラユニット２１５６は、予約ステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット２１５６は、物理レジスタファイルユニット２１５８に結合される。物理レジスタファイルユニット２１５８のそれぞれは、１又は複数の物理レジスタファイル、１又は複数の異なるデータタイプを格納する異なるいくつか、例えば、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行対象の次の命令のアドレスである命令ポインタ）などを表す。一実施形態において、物理レジスタファイルユニット２１５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット及びスカラレジスタユニットを有する。これらのレジスタユニットは、アーキテクチャのベクトルレジスタ、ベクトルマスクレジスタ及び汎用レジスタを提供し得る。物理レジスタファイルユニット２１５８は、（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、将来のファイル、履歴バッファ及びリタイアメントレジスタファイルを用いる、レジスタマップ及びレジスタのプールを用いるなどして）レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な態様を示すために、リタイアメントユニット２１５４により重ね合わせられている。リタイアメントユニット２１５４及び物理レジスタファイルユニット２１５８は、実行クラスタ２１６０に結合される。実行クラスタ２１６０は、１又は複数の実行ユニット２１６２のセット、及び、１又は複数のメモリアクセスユニット２１６４のセットを含む。実行ユニット２１６２は、様々なオペレーション（例えば、シフト、加算、減算、乗算）を、様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行してよい。いくつかの実施形態では、特定の機能又は機能のセットに専用の多数の実行ユニットを含んでよく、一方、他の実施形態では、１つの実行ユニットのみ、又は、すべての機能をすべてが実行する複数の実行ユニットを含んでよい。ある実施形態では、特定のタイプのデータ／オペレーションに対して別個のパイプライン（例えば、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又は、メモリアクセスパイプラインは、独自のスケジューラユニット、物理レジスタファイルユニット、及び／又は、実行クラスタをそれぞれが有する−別個のメモリアクセスパイプラインの場合、ある実施形態では、このパイプラインの実行クラスタのみがメモリアクセスユニット２１６４を有する実施形態において実装される）を作成するので、スケジューラユニット２１５６、物理レジスタファイルユニット２１５８及び実行クラスタ２１６０は、場合によっては複数のものとして示されている。別個のパイプラインが用いられる場合、これらのパイプラインのうちの１つ又は複数はアウトオブオーダ発行／実行であってよく、残りはインオーダであってよいことも理解されたい。
【０１８８】
メモリアクセスユニット２１６４のセットは、メモリユニット２１７０に結合され、メモリユニット２１７０は、レベル２（Ｌ２）キャッシュユニット２１７６に結合されるデータキャッシュユニット２１７４に結合されるデータＴＬＢユニット２１７２を含む。一つの例示的な実施形態において、メモリアクセスユニット２１６４は、ロードユニット、格納アドレスユニット及び格納データユニットを含んでよく、それぞれが、メモリユニット２１７０内のデータＴＬＢユニット２１７２に結合される。命令キャッシュユニット２１３４は、メモリユニット２１７０内のレベル２（Ｌ２）キャッシュユニット２１７６にさらに結合される。Ｌ２キャッシュユニット２１７６は、１又は複数の他のレベルのキャッシュに結合されて、最終的にメインメモリに結合される。
【０１８９】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン２１００を実装してよい。１）命令フェッチ２１３８がフェッチ及び長さデコードステージ２１０２及び２１０４を実行し、２）デコードユニット２１４０がデコードステージ２１０６を実行し、３）リネーム／割り当てユニット２１５２が割り当てステージ２１０８及びリネームステージ２１１０を実行し、４）スケジューラユニット２１５６がスケジューリングステージ２１１２を実行し、５）物理レジスタファイルユニット２１５８及びメモリユニット２１７０がレジスタ読み出し／メモリ読み出しステージ２１１４を実行して、実行クラスタ２１６０が実行ステージ２１１６を実行し、６）メモリユニット２１７０及び物理レジスタファイルユニット２１５８がライトバック／メモリ書き込みステージ２１１８を実行し、７）様々なユニットが例外処理ステージ２１２２に関連してよく、８）リタイアメントユニット２１５４及び物理レジスタファイルユニット２１５８がコミットステージ２１２４を実行する。
【０１９０】
コア２１９０は、本明細書で説明された命令を含む、１又は複数の命令セット（例えば、（より新しいバージョンで追加されたいくつかの拡張を伴う）ｘ８６命令セット）、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスの（例えば、ＮＥＯＮなどの任意選択的な追加の拡張を伴う）ＡＲＭ命令セットをサポートしてよい。一実施形態において、コア２１９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートする論理を含み、これによって、多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
【０１９１】
コアは、（２又はそれより多くのオペレーション又はスレッドの並列セットを実行する）マルチスレッディングをサポートしてよく、タイムスライス型マルチスレッディング、同時マルチスレッディング（物理コアが同時にマルチスレッディングするスレッドのそれぞれに対して、単一の物理コアが論理的なコアを提供する）、又は、これらの組み合わせ（例えば、インテル（登録商標）ハイパースレッディング・テクノロジーにおける、例えば、タイムスライス型フェッチング及びデコーディング、並びに、その後の同時マルチスレッディング）を含む様々な態様で行われてよいことを理解されたい。
【０１９２】
レジスタリネーミングがアウトオブオーダ実行との関連で説明されているが、レジスタリネーミングはインオーダアーキテクチャにおいて用いられ得ることに理解されたい。プロセッサの図示される実施形態ではまた、別個の命令及びデータキャッシュユニット２１３４／２１７４、並びに、共有型Ｌ２キャッシュユニット２１７６を含むが、代替的な実施形態では、命令及びデータ両方のために、例えば、レベル１（Ｌ１）内部キャッシュ又はマルチレベルの内部キャッシュなどの単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、キャッシュのすべては、コア及び／又はプロセッサの外部にあってよい。
具体的な例示的インオーダコアアーキテクチャ
【０１９３】
図２２Ａ〜図２２Ｂは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、そのコアは、チップ内の（同じタイプ及び／又は異なるタイプの他のコアを含む）いくつかの論理ブロックのうちの１つであろう。論理ブロックは、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を通じて、アプリケーションに応じて、いくつかの固定機能論理、メモリＩ／Ｏインタフェース及び他の必要なＩ／Ｏ論理と通信する。
【０１９４】
図２２Ａは、本開示の実施形態に係る、オンダイ相互接続ネットワーク２２０２へのその接続、及び、レベル２（Ｌ２）キャッシュ２２０４のローカルサブセットと共に示すシングルプロセッサコアのブロック図である。一実施形態において、命令デコードユニット２２００は、パックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ２２０６は、スカラ及びベクトルユニットへのキャッシュメモリに対する低レイテンシなアクセスを可能にする。一実施形態では、（設計を単純化するために）、スカラユニット２２０８及びベクトルユニット２２１０は、別個のレジスタセット（それぞれ、スカラレジスタ２２１２及びベクトルレジスタ２２１４）を用いており、それらの間を転送されるデータは、メモリに書き込まれ、次に、レベル１（Ｌ１）キャッシュ２２０６からリードバックされるが、一方、本開示の代替的な実施形態では、異なるアプローチ（例えば、単一のレジスタセットを用いる、又は、書き込まれることもリードバックされることもなく２つのレジスタファイル間でデータが転送されることを可能にする通信パスを含む）を用いてよい。
【０１９５】
Ｌ２キャッシュのローカルサブセット２２０４は、プロセッサコア毎に１つずつ、別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュの独自のローカルサブセット２２０４へのダイレクトアクセスパスを有する。プロセッサコアにより読み出されるデータは、そのＬ２キャッシュサブセット２２０４に格納され、これら自身のローカルＬ２キャッシュサブセットにアクセスする他のプロセッサコアと並列して、迅速にアクセスされ得る。プロセッサコアにより書き込まれるデータは、独自のＬ２キャッシュサブセット２２０４に格納され、必要な場合、他のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを確保する。リングネットワークは、例えば、プロセッサコア、Ｌ２キャッシュ及び他の論理ブロックなどのエージェントがチップ内で互いに通信を行うことを可能にするために双方向である。各リングデータパスは一方向あたり１０１２ビット幅である。
【０１９６】
図２２Ｂは、本開示の実施形態に係る図２２Ａにおけるプロセッサコアの一部の拡大図である。図２２Ｂは、Ｌ１キャッシュ２２０４のＬ１データキャッシュ２２０６Ａ部分、並びに、ベクトルユニット２２１０及びベクトルレジスタ２２１４に関するさらなる詳細を含む。具体的には、ベクトルユニット２２１０は、１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ２２２８を参照）であり、これは、整数、単精度浮動及び倍精度浮動命令のうちの１つ又は複数を実行する。ＶＰＵは、スウィズルユニット２２２０を用いたレジスタ入力のスウィズル、数値変換ユニット２２２２Ａ−Ｂを用いた数値変換、及び、メモリ入力に対する複製ユニット２２２４を用いた複製をサポートする。書き込みマスクレジスタ２２２６は、結果としてもたらすベクトル書き込みをプレディケートすることを可能にする。
【０１９７】
図２３は、本開示の実施形態に係る１より多いコアを有し得る、統合メモリコントローラを有し得る、及び、統合グラフィックスを有し得るプロセッサ２３００のブロック図である。図２３内の実線の枠は、シングルコア２３０２Ａと、システムエージェント２３１０と、１又は複数のバスコントローラユニット２３１６のセットとを有するプロセッサ２３００を示し、一方、任意選択的な追加の破線の枠は、複数のコア２３０２Ａ−Ｎと、システムエージェントユニット２３１０内の１又は複数の統合メモリコントローラユニット２３１４のセットと、特別用途論理２３０８とを有する代替的なプロセッサ２３００を示す。
【０１９８】
したがって、プロセッサ２３００の異なる実装は、１）（１又は複数のコアを含み得る）統合グラフィックス及び／又は科学（スループット）論理である特別用途論理２３０８を有するＣＰＵ、及び、１又は複数の汎用コアであるコア２３０２Ａ−Ｎ（例えば、汎用インオーダコア、汎用アウトオブオーダコア、この２つの組み合わせ）、２）主にグラフィックス及び／又は科学（スループット）用の多数の特別用途コアであるコア２３０２Ａ−Ｎを有するコプロセッサ、及び、３）多数の汎用インオーダコアであるコア２３０２Ａ−Ｎを有するコプロセッサを含んでよい。したがって、プロセッサ２３００は、汎用プロセッサ、コプロセッサ又は特別用途プロセッサ、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットの多集積コア（ＭＩＣ）コプロセッサ（３０又はそれより多いコアを含む）、埋め込み型プロセッサなどであってよい。プロセッサは、１又は複数のチップ上に実装されてよい。プロセッサ２３００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ又はＮＭＯＳなどの多数の処理技術のうちのいずれかを用いる１又は複数の基板の一部であってよい、及び／又は、１又は複数の基板上に実装されてよい。
【０１９９】
メモリ階層は、コア内の１又は複数のレベルのキャッシュ、１又は複数の共有キャッシュユニット２３０６のセット、及び、統合メモリコントローラユニット２３１４のセットに結合される外部メモリ（図示されていない）を含む。共有キャッシュユニットのセット２３０６は、例えば、レベル２（Ｌ２、レベル３（Ｌ３）、レベル４（Ｌ４）又は他のレベルのキャッシュなどの１又は複数の中間レベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）及び／又はこれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット２３１２は、統合グラフィックス論理２３０８、共有キャッシュユニットのセット２３０６及びシステムエージェントユニット２３１０／統合メモリコントローラユニット２３１４を相互接続し、代替的な実施形態では、そのようなユニットを相互接続するための任意の数の周知技術を用いてよい。一実施形態において、コヒーレンシは、１又は複数のキャッシュユニット２３０６とコア２３０２−Ａ−Ｎとの間で維持される。
【０２００】
いくつかの実施形態において、コア２３０２Ａ−Ｎのうちの１つ又は複数は、マルチスレッディングが可能である。システムエージェント２３１０は、コア２３０２Ａ−Ｎを調整及び動作させるこれらのコンポーネントを含む。システムエージェントユニット２３１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでよい。ＰＣＵは、コア２３０２Ａ−Ｎ及び統合グラフィックス論理２３０８の電力状態を調整するために必要な論理及びコンポーネントであってよい、又は、これらを含んでよい。ディスプレイユニットは、１又は複数の外部に接続されたディスプレイを駆動させるためのものである。
【０２０１】
コア２３０２Ａ−Ｎは、アーキテクチャ命令セットに関して同種又は異種であってよい、すなわち、コア２３０２Ａ−Ｎの２又はそれより多くは、同じ命令セットを実行することが可能であり得る一方、他のものは、その命令セットのサブセット又は異なる命令セットのみを実行することが可能であり得る。
例示的なコンピュータアーキテクチャ
【０２０２】
図２４〜図２７は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込み型プロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス及び様々な他の電子デバイスに関して当該技術分野で知られる他のシステム設計及び構成にも適している。概して、本明細書で開示されるようなプロセッサ及び／又は他の実行論理を組み込むことが可能な多様なシステム又は電子デバイスが概して適している。
【０２０３】
ここで図２４を参照すると、本開示の一実施形態に係るシステム２４００のブロック図が示される。システム２４００は、１又は複数のプロセッサ２４１０、２４１５を含んでよく、これらはコントローラハブ２４２０に結合される。一実施形態において、コントローラハブ２４２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）２４９０及び入出力ハブ（ＩＯＨ）２４５０（別個のチップにあってよい）を含み、ＧＭＣＨ２４９０は、メモリ２４４０及びコプロセッサ２４４５に結合されるメモリ及びグラフィックスコントローラを含み、ＩＯＨ２４５０は、入力／出力（Ｉ／Ｏ）デバイス２４６０をＧＭＣＨ２４９０に結合する。代替的に、メモリ及びグラフィックスコントローラの一方又は両方は、（本明細書で説明されたように）プロセッサ内に統合され、メモリ２４４０及びコプロセッサ２４４５は、プロセッサ２４１０、及びＩＯＨ２４５０を有する単一のチップ内のコントローラハブ２４２０に直接的に結合される。メモリ２４４０は、暗号化モジュール２４４０Ａを含んでよく、例えば、実行されるときに、プロセッサに、本開示のいずれかの方法を実行させるコードを格納する。
【０２０４】
追加のプロセッサ２４１５の任意選択的な特性が図２４に破線で示されている。各プロセッサ２４１０、２４１５は、本明細書で説明される処理コアのうちの１つ又は複数を含んでよく、プロセッサ２３００のいくつかのバージョンであってよい。
【０２０５】
メモリ２４４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）又はその２つの組み合わせであってよい。少なくとも１つの実施形態に関して、コントローラハブ２４２０は、マルチドロップバス、例えば、フロントサイドバス（ＦＳＢ）、Ｑｕｉｃｋｐａｔｈ相互接続（ＱＰＩ）などのポイントツーポイントインタフェース、又は、同様の接続２４９５を介してプロセッサ２４１０、２４１５と通信する。
【０２０６】
一実施形態において、コプロセッサ２４４５は、特別用途プロセッサ、例えば、ハイスループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、埋め込み型プロセッサなどである。一実施形態において、コントローラハブ２４２０は、統合グラフィックスアクセラレータを含んでよい。
【０２０７】
アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性及び電力消費特性などを含む広範な評価基準の利点の観点から、物理リソース２４１０、２４１５間には様々な違いあり得る。
【０２０８】
一実施形態において、プロセッサ２４１０は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。命令内に埋め込まれるものはコプロセッサ命令であり得る。プロセッサ２４１０は、取り付けられたコプロセッサ２４４５により実行されるべきタイプのものとしてこれらのコプロセッサ命令を認識する。したがって、プロセッサ２４１０は、これらのコプロセッサ命令（又は、コプロセッサ命令を表す制御信号）をコプロセッサ２４４５に向けてコプロセッサバス又は他の相互接続上に発行する。コプロセッサ２４４５は、受信したコプロセッサ命令を受け入れて実行する。
【０２０９】
ここで図２５を参照すると、本開示の実施形態に係る第１のより具体的で例示的なシステム２５００のブロック図が示される。図２５に示されるように、マルチプロセッサシステム２５００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続２５５０を介して結合される第１のプロセッサ２５７０及び第２のプロセッサ２５８０を含む。プロセッサ２５７０及び２５８０のそれぞれは、プロセッサ２３００のいくつかのバージョンであってよい。本開示の一実施形態において、プロセッサ２５７０及び２５８０はそれぞれ、プロセッサ２４１０及び２４１５であり、一方、コプロセッサ２５３８はコプロセッサ２４４５である。別の実施形態において、プロセッサ２５７０及び２５８０はそれぞれ、プロセッサ２４１０及びコプロセッサ２４４５である。
【０２１０】
プロセッサ２５７０及び２５８０は、統合メモリコントローラ（ＩＭＣ）ユニット２５７２及び２５８２をそれぞれ含むことが示されている。プロセッサ２５７０はまた、そのバスコントローラユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インタフェース２５７６及び２５７８を含み、同様に、第２のプロセッサ２５８０は、Ｐ−Ｐインタフェース２５８６及び２５８８を含む。プロセッサ２５７０、２５８０Ｐ−Ｐインタフェース回路２５７８、２５８８を用いてポイントツーポイント（Ｐ−Ｐ）インタフェース２５５０を介して情報を交換し得る。図２５に示されるように、ＩＭＣ２５７２及び２５８２は、プロセッサをメモリ、すなわち、メモリ２５３２及びメモリ２５３４にそれぞれ結合し、これらは、それぞれのプロセッサにローカルに取り付けられるメインメモリの一部であってよい。
【０２１１】
プロセッサ２５７０、２５８０はそれぞれ、ポイントツーポイントインタフェース回路２５７６、２５９４、２５８６、２５９８を用いて、個々のＰ−Ｐインタフェース２５５２、２５５４を介してチップセット２５９０と情報を交換し得る。チップセット２５９０は、高性能インタフェース２５３９を介してコプロセッサ２５３８と情報を任意選択的に交換してよい。一実施形態において、コプロセッサ２５３８は、特別用途プロセッサ、例えば、ハイスループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ又は埋め込み型プロセッサなどである。
【０２１２】
共有キャッシュ（図示されていない）は、プロセッサ又は両方のプロセッサの外部のいずれかに含まれてよく、さらに、Ｐ−Ｐ相互接続を介してプロセッサと接続されてよく、その結果、プロセッサが低電力モードに置かれている場合、プロセッサのローカルキャッシュ情報のいずれか又は両方は、共有キャッシュに格納されてよい。
【０２１３】
チップセット２５９０は、インタフェース２５９６を介して第１のバス２５１６に結合されてよい。一実施形態において、第１のバス２５１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、若しくは、ＰＣＩ  Ｅｘｐｒｅｓｓバス又は別の第３世代Ｉ／Ｏ相互接続バスのようなバスであってよいが、本開示の範囲はそこまで限定されることはない。
【０２１４】
図２５に示されるように、様々なＩ／Ｏデバイス２５１４は、第１のバス２５１６と共に、第１のバス２５１６を第２のバス２５２０に結合するバスブリッジ２５１８に結合されてよい。一実施形態において、１又は複数の追加のプロセッサ２５１５、例えば、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィックスアクセラレータ又はデジタル信号処理（ＤＳＰ）ユニット）、フィールドプログラマブルゲートアレイ、又は、任意の他のプロセッサが第１のバス２５１６に結合される。一実施形態において、第２のバス２５２０はローピンカウント（ＬＰＣ）バスであってよい。一実施形態において、例えば、キーボード及び／又はマウス２５２２、通信デバイス２５２７及びストレージユニット２５２８、命令／コード及びデータ２５３０などを含み得るディスクドライブ又は他の大容量ストレージデバイスを含む様々なデバイスが、第２のバス２５２０に結合されてよい。さらに、オーディオＩ／Ｏ２５２４は、第２のバス２５２０に結合されてよい。他のアーキテクチャが可能であることに留意する。例えば、図２５のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のそのようなアーキテクチャを実装してよい。
【０２１５】
ここで図２６を参照すると、本開示の実施形態に係る第２のより具体的で例示的なシステム２６００のブロック図が示される。図２５及び図２６の同様の要素には同様の参照符号を付しており、図２５の特定の態様は、図２６の他の態様を曖昧になることを回避するために、図２６から省略されている。
【０２１６】
図２６は、プロセッサ２５７０、２５８０が統合メモリ及びＩ／Ｏ制御論理（「ＣＬ」）２５７２及び２５８２をそれぞれ含み得ることを示す。したがって、ＣＬ２５７２、２５８２は統合メモリコントローラユニットを含み、Ｉ／Ｏ制御論理を含む。図２６は、メモリ２５３２、２５３４がＣＬ２５７２、２５８２に結合されるだけでなく、Ｉ／Ｏデバイス２６１４もまた、制御論理２５７２、２５８２に結合されることを示す。レガシＩ／Ｏデバイス２６１５がチップセット２５９０に結合される。
【０２１７】
ここで図２７を参照すると、本開示の実施形態に係るＳｏＣ２７００のブロック図が示される。図２３の同様の要素には同様の参照符号を付している。また、破線の枠は、より高度なＳｏＣ上の任意選択的な機能である。図２７において、相互接続ユニット２７０２は、１又は複数のコア２０２Ａ−Ｎのセット及び共有キャッシュユニット２３０６を含むアプリケーションプロセッサ２７１０と、システムエージェントユニット２３１０と、バスコントローラユニット２３１６と、統合メモリコントローラユニット２３１４と、統合グラフィックス論理と、イメージプロセッサと、オーディオプロセッサ及びビデオプロセッサを含み得る１又は複数のコプロセッサ２７２０のセットと、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット２７３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット２７３２と、１又は複数の外部ディスプレイに結合するためのディスプレイユニット２７４０とに結合される。一実施形態において、コプロセッサ２７２０は、特別用途プロセッサ、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ又は埋め込み型プロセッサなどを含む。
【０２１８】
本明細書に開示される（例えば、メカニズムの）実施形態は、ハードウェア、ソフトウェア、ファームウェア又はそのような実装アプローチの組み合わせで実装されてよい。本開示の実施形態では、少なくとも１つのプロセッサ、ストレージシステム（揮発性及び不揮発性メモリ及び／又はストレージ要素を含む）、少なくとも１つの入力デバイス及び少なくとも１つの出力デバイスを有するプログラマブルシステム上で実行するコンピュータプログラム又はプログラムコードとして実装されてよい。
【０２１９】
プログラムコード、例えば、図２５に示されるコード２５３０は、本明細書で説明される機能を実行して、出力情報を生成するための入力命令に適用され得る。出力情報は、既知の様式で、１又は複数の出力デバイスに適用されてよい。本願の目的のために、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０２２０】
プログラムコードは、処理システムと通信するために、高水準手順型又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリ言語又は機械言語で実装されてよい。実際に、本明細書で説明されるメカニズムは、任意の特定のプログラミング言語の範囲に限定されるものではない。いずれの場合であっても、言語は、コンパイラ型言語又はインタプリタ型言語であってよい。
【０２２１】
少なくとも１つの実施形態の１又は複数の態様では、プロセッサ内の様々な論理を表す機械可読媒体に格納される代表的な命令により実装されてよく、これは、マシンにより読み出される場合、本明細書で説明される技術を実行させる論理をマシンに構築させる。「ＩＰコア」として知られるそのような代表的なものは、有形の機械可読媒体に格納され、論理又はプロセッサを実際に作成する製造機械にロードするために、様々な顧客又は製造施設に供給されてよい。
【０２２２】
そのような機械可読記憶媒体は、例えば、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）及び磁気−光ディスク、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、例えばダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気又は光カード又は電子命令を格納するのに適したその他のタイプの媒体などの半導体デバイスを含む任意のその他のタイプのディスクなどの記憶媒体を含む、マシン又はデバイスにより製造又は形成される非一時的な有形の構成をした物品を限定することなく含み得る。
【０２２３】
したがって、本開示の実施形態はまた、命令を含む又は設計データ、例えば、本明細書で説明される構造、回路、装置、プロセッサ及び／又はシステムの機能を規定するハードウェア記述言語（ＨＤＬ）を含む非一時的な有形の機械可読媒体を含む。そのような実施形態では、プログラム製品とも称され得る。
エミュレーション（バイナリ変換、コードモーフィングなどを含む）
【０２２４】
場合によっては、命令変換器は、命令セットを供給からターゲット命令セットに命令を変換するために用いられてよい。例えば、命令変換器は、命令を、コアにより処理される１又は複数の他の命令に、（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）翻訳、モーフィング、エミュレート又はそうでなければ、変換してよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェア又はこれらの組み合わせで実装されてよい。命令変換器は、プロセッサ上、プロセッサ外、又は、プロセッサ上の一部及びプロセッサ外の一部であってよい。
【０２２５】
図２８は、本開示の実施形態に係る、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令変換器の使用を対比したブロック図である。図示される実施形態において、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア又はこれらの様々な組み合わせで実装されてよい。図２８は、高水準言語２８０２におけるプログラムを示し、少なくとも１つのｘ８６命令セットコアを有するプロセッサ２８１６によりネイティブに実行され得るｘ８６バイナリコード２８０６を生成するために、ｘ８６コンパイラ２８０４を用いてコンパイルされてよい。少なくとも１つのｘ８６命令セットコアを有するプロセッサ２８１６は、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサと同じ結果を実質的に達成するために、（１）インテル（登録商標）ｘ８６命令セットコアの命令セットの大部分、又は、（２）少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサを実行する対象のアプリケーション又は他のソフトウェアのオブジェクトコードのバージョンを互換的に実行することにより、そうでなければ、処理することにより、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサと同じ機能を実質的に実行できる任意のプロセッサを表す。ｘ８６コンパイラ２８０４は、追加のリンケージ処理を用いて又は用いることなく、少なくとも１つのｘ８６命令セットコアを有するプロセッサ２８１６上で実行され得るｘ８６バイナリコード２８０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図２８は、少なくとも１つのｘ８６命令セットコアのないプロセッサ２８１４（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット実行する、及び／又は、カリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行するコアを有するプロセッサ）によりネイティブに実行され得る代替的な命令セットのバイナリコード２８１０を生成するために、高水準言語２８０２内のプログラムが代替的な命令セットコンパイラ２８０８を用いてコンパイルされ得ることを示す。命令変換器２８１２は、ｘ８６バイナリコード２８０６を、ｘ８６命令セットコアなしのプロセッサ２８１４によりネイティブに実行され得るコードに変換するために用いられる。これを可能にする命令変換器が作成するのは難しいので、この変換されたコードは、代替的な命令セットのバイナリコード２８１０と同じである可能性は低い。しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットからの命令で構成される。したがって、命令変換器２８１２は、エミュレーション、シミュレーション又はその他の処理を通じてｘ８６命令セットプロセッサ又はコアを有していないプロセッサ又は他の電子デバイスが、ｘ８６バイナリコード２８０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア又はそれらの組み合わせを表す。
［項目１］
暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、
上記ベクトルレジスタからの第１の入力及び上記ベクトルレジスタからの第２の入力に結合される第１のモジュラ加算器と、上記第１のモジュラ加算器、及び、上記ベクトルレジスタからの第２のデータパスに結合される第２のモジュラ加算器とを有する第１のデータパス、及び、
上記第２の入力、及び、上記ベクトルレジスタからの第３のデータパスに結合される第１の論理ＸＯＲ回路と、上記第１の論理ＸＯＲ回路に結合される第１のローテート回路と、上記第１のローテート回路及び上記第３のデータパスに結合される第２の論理ＸＯＲ回路と、上記第２の論理ＸＯＲ回路に結合される第２のローテート回路とを有する上記第２のデータパス
を有する回路と、
上記第１のデータパスの上記第１のモジュラ加算器及び上記第２のモジュラ加算器、並びに、上記第２のデータパスの上記第１の論理ＸＯＲ回路、上記第２の論理ＸＯＲ回路、上記第１のローテート回路及び上記第２のローテート回路に、１又は複数の制御値に従って上記ラウンドの一部を実行させ、上記一部に対する上記第１のデータパスからの第１の結果と、上記一部に対する上記第２のデータパスからの第２の結果とを上記ベクトルレジスタに格納させる制御回路と
を備える装置。
［項目２］
初回のサイクルにおいて、上記入力ベクトルは、第１の要素に格納される第１の定数値及び上記第１の要素に隣接する第２の要素に格納される第２の定数値を有し、上記制御回路は、上記初回のサイクルにおける上記回路への入力として上記第１の定数値又は上記第２の定数値を供給するように、上記ベクトルレジスタと上記回路との間に結合されるマルチプレクサを制御する、項目１に記載の装置。
［項目３］
初回のサイクルにおいて、上記入力ベクトルは、隣接要素に格納される第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を有し、上記制御回路は、上記初回のサイクルにおける上記回路への入力として、上記第１の定数値、上記第１のキー値、上記第２のキー値及び上記第１のブロックカウンタ値を提供する、項目１に記載の装置。
［項目４］
上記制御回路は、上記回路の上記第１のデータパスのための、上記ベクトルレジスタからの上記第１の入力に上記第１の定数値を提供し、上記初回のサイクルにおける上記回路の上記第２のデータパスのための、上記ベクトルレジスタからの上記第２の入力に上記第１のキー値を提供する、項目３に記載の装置。
［項目５］
上記第１の定数値、上記第１のキー値、上記第２のキー値及び上記第１のブロックカウンタ値は、上記初回のサイクルにおいて、上記ベクトルレジスタの第１の端部における隣接要素に格納され、上記制御回路は、上記第１の定数値、上記第１のキー値、上記第２のキー値及び上記第１のブロックカウンタ値を上記回路に入力して出力値を生成し、上記ラウンドの次のサイクルのために、上記ベクトルレジスタの第２の端部の隣接要素に上記出力値を格納する、項目３に記載の装置。
［項目６］
上記制御回路は、上記第１の定数値、上記第１のキー値、上記第２のキー値及び上記第１のブロックカウンタ値以外の上記初回のサイクルの上記入力ベクトルを、上記ラウンドの上記次のサイクルのために上記ベクトルレジスタの上記第１の端部において開始する要素にシフトし、上記出力値は、上記ラウンドの上記次のサイクルのために、上記ベクトルレジスタの上記第２の端部の上記隣接要素に格納される、項目５に記載の装置。
［項目７］
上記制御回路は、上記ベクトルレジスタの上記第１の端部における複数の隣接要素からの上記ラウンドの追加のサイクルのための値を上記回路に入力して上記ラウンドの上記追加のサイクルのための出力値を生成し、上記ラウンドの上記追加のサイクルのための上記出力値、及び、上記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、上記複数の隣接要素以外の上記ベクトルレジスタの要素からの値を上記ベクトルレジスタに格納させる、項目６に記載の装置。
［項目８］
上記制御回路は、上記ベクトルレジスタの上記第１の端部における複数の隣接要素からの上記ラウンドの追加のサイクルのための値を上記回路に入力して上記ラウンドの上記追加のサイクルのための出力値を生成し、上記ラウンドの上記追加のサイクルのための上記出力値のサブセットからの値、及び、上記複数の隣接要素以外の上記ベクトルレジスタの要素からの値を、上記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で上記ベクトルレジスタの上記第１の端部における隣接要素に格納させ、上記追加のサイクルの後の上記次のサイクルのために部分的にアラインされた状態で、上記第１の端部以外の上記ベクトルレジスタの要素に上記サブセット以外の値を格納させる、項目６に記載の装置。
［項目９］
暗号化演算のラウンドの入力ベクトルをベクトルレジスタに格納する段階と、
上記ベクトルレジスタからの第１の入力及び上記ベクトルレジスタからの第２の入力に結合される第１のモジュラ加算器と、上記第１のモジュラ加算器、及び、上記ベクトルレジスタからの回路の第２のデータパスに結合される第２のモジュラ加算器とを有する上記回路の第１のデータパスにおいて、上記第１のモジュラ加算器を用いて、上記入力ベクトルからの上記第１の入力からの第１の値と、上記ベクトルレジスタからの上記第２の入力からの第２の値とを加算して第１の中間結果を生成すること、及び、上記第２のモジュラ加算器を用いて、上記第１の中間結果と、上記第２のデータパスからの第３の中間結果とを加算して第１の結果を生成すること、並びに、
上記第２の入力、及び、上記ベクトルレジスタからの上記回路の第３のデータパスに結合される第１の論理ＸＯＲ回路と、上記第１の論理ＸＯＲ回路に結合される第１のローテート回路と、上記第１のローテート回路及び上記第３のデータパスに結合される第２の論理ＸＯＲ回路と、上記第２の論理ＸＯＲ回路に結合される第２のローテート回路とを有する上記回路の上記第２のデータパスにおいて、上記第１の論理ＸＯＲ回路を用いて、上記ベクトルレジスタからの上記第２の入力からの上記第２の値と、上記第３のデータパスからの第３の結果との論理ＸＯＲをとって第２の中間結果を生成すること、上記第１のローテート回路を用いて、１又は複数の制御値に従って上記第２の中間結果をローテートさせて第３の中間結果を生成すること、上記第３の中間結果と上記第３のデータパスからの第４の結果との論理ＸＯＲをとって第５の中間結果を生成すること、及び、上記第２のローテート回路を用いて、１又は複数の制御値に従って上記第５の中間結果をローテートさせて第２の結果を生成すること
により、上記回路を用いて上記入力ベクトルに対する上記ラウンドの一部を実行する段階と、
上記一部に対する上記第１のデータパスからの上記第１の結果と、上記一部に対する上記第２のデータパスからの上記第２の結果とを上記ベクトルレジスタに格納する段階と
を備える方法。
［項目１０］
上記入力ベクトルを上記格納する段階は、初回のサイクルにおいて、第１の要素内の第１の定数値及び上記第１の要素に隣接する第２の要素内の第２の定数値を格納する段階を有し、さらに、上記ベクトルレジスタと上記回路との間に結合されるマルチプレクサをスイッチングして、上記初回のサイクルにおける上記回路への入力として上記第１の定数値又は上記第２の定数値を供給する段階を有する、項目９に記載の方法。
［項目１１］
上記入力ベクトルを上記格納する段階は、初回のサイクルにおいて、上記入力ベクトルの隣接要素に格納される第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を格納する段階を有し、さらに、上記初回のサイクルにおける上記回路への入力として、上記第１の定数値、上記第１のキー値、上記第２のキー値及び上記第１のブロックカウンタ値を送信する段階を有する、項目９に記載の方法。
［項目１２］
上記送信する段階は、上記回路の上記第１のデータパスのための、上記ベクトルレジスタからの上記第１の入力に上記第１の定数値を上記第１の値として送信する段階、及び、上記初回のサイクルにおける上記回路の上記第２のデータパスのための、上記ベクトルレジスタからの上記第２の入力に上記第１のキー値を上記第２の値として送信する段階を有する、項目１１に記載の方法。
［項目１３］
上記入力ベクトルを上記格納する段階は、初回のサイクルにおいて、上記第１の定数値、上記第１のキー値、上記第２のキー値及び上記第１のブロックカウンタ値を上記ベクトルレジスタの第１の端部における隣接要素に格納する段階を有し、上記送信する段階は、上記第１の定数値、上記第１のキー値、上記第２のキー値及び上記第１のブロックカウンタ値を上記回路に送信して、上記第１の結果及び上記第２の結果を含む出力値を生成する段階、及び、上記ラウンドの次のサイクルのために、上記ベクトルレジスタの第２の端部の隣接要素に上記出力値を格納する段階を有する、項目１１に記載の方法。
［項目１４］
上記実行する段階は、上記第１の定数値、上記第１のキー値、上記第２のキー値及び上記第１のブロックカウンタ値以外の上記初回のサイクルの上記入力ベクトルを、上記ラウンドの上記次のサイクルのために上記ベクトルレジスタの上記第１の端部において開始する要素にシフトする段階、及び、上記ラウンドの上記次のサイクルのために、上記ベクトルレジスタの上記第２の端部の上記隣接要素に上記出力値を格納する段階を有する、項目１３に記載の方法。
［項目１５］
上記ベクトルレジスタの上記第１の端部における複数の隣接要素からの上記ラウンドの追加のサイクルのための入力値を上記回路に送信して上記ラウンドの上記追加のサイクルのための出力値を生成する段階と、上記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、上記ラウンドの上記追加のサイクルのための上記出力値、及び、上記複数の隣接要素以外の上記ベクトルレジスタの要素からの値を上記ベクトルレジスタに格納する段階とをさらに備える、項目１４に記載の方法。
［項目１６］
上記ベクトルレジスタの上記第１の端部における複数の隣接要素からの上記ラウンドの追加のサイクルのための入力値を上記回路に送信して上記ラウンドの上記追加のサイクルのための出力値を生成する段階と、上記ラウンドの上記追加のサイクルのための上記出力値のサブセットからの値、及び、上記複数の隣接要素以外の上記ベクトルレジスタの要素からの値を、上記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で上記ベクトルレジスタの上記第１の端部における隣接要素に格納する段階と、上記追加のサイクルの後の上記次のサイクルのために部分的にアラインされた状態で、上記第１の端部以外の上記ベクトルレジスタの要素に上記サブセット以外の値を格納する段階とをさらに備える、項目１４に記載の方法。
［項目１７］
スレッドを実行し、暗号化演算をオフロードするハードウェアプロセッサと、
上記暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、
ハードウェアアクセラレータであって、
上記ベクトルレジスタからの第１の入力及び上記ベクトルレジスタからの第２の入力に結合される第１のモジュラ加算器と、上記第１のモジュラ加算器、及び、上記ベクトルレジスタからの第２のデータパスに結合される第２のモジュラ加算器とを有する第１のデータパス、及び
上記第２の入力、及び、上記ベクトルレジスタからの第３のデータパスに結合される第１の論理ＸＯＲ回路と、上記第１の論理ＸＯＲ回路に結合される第１のローテート回路と、上記第１のローテート回路及び上記第３のデータパスに結合される第２の論理ＸＯＲ回路と、上記第２の論理ＸＯＲ回路に結合される第２のローテート回路とを有する上記第２のデータパス
を含む回路、並びに、
上記第１のデータパスの上記第１のモジュラ加算器及び上記第２のモジュラ加算器、並びに、上記第２のデータパスの上記第１の論理ＸＯＲ回路、上記第２の論理ＸＯＲ回路、上記第１のローテート回路及び上記第２のローテート回路に、１又は複数の制御値に従って上記ラウンドの一部を実行させ、上記一部に対する上記第１のデータパスからの第１の結果と、上記一部に対する上記第２のデータパスからの第２の結果とを上記ベクトルレジスタに格納させる制御回路
を有するハードウェアアクセラレータと
を備えるシステム。
［項目１８］
初回のサイクルにおいて、上記入力ベクトルは、第１の要素に格納される第１の定数値及び上記第１の要素に隣接する第２の要素に格納される第２の定数値を有し、上記制御回路は、上記初回のサイクルにおける上記回路への入力として上記第１の定数値又は上記第２の定数値を供給するように、上記ベクトルレジスタと上記回路との間に結合されるマルチプレクサを制御する、項目１７に記載のシステム。
［項目１９］
初回のサイクルにおいて、上記入力ベクトルは、隣接要素に格納される第１の定数値、第１のキー値、第２のキー値及び第１のブロックカウンタ値を有し、上記制御回路は、上記初回のサイクルにおける上記回路への入力として、上記第１の定数値、上記第１のキー値、上記第２のキー値及び上記第１のブロックカウンタ値を提供する、項目１７に記載のシステム。
［項目２０］
上記制御回路は、上記回路の上記第１のデータパスのための、上記ベクトルレジスタからの上記第１の入力に上記第１の定数値を提供し、上記初回のサイクルにおける上記回路の上記第２のデータパスのための、上記ベクトルレジスタからの上記第２の入力に上記第１のキー値を提供する、項目１９に記載のシステム。
［項目２１］
上記第１の定数値、上記第１のキー値、上記第２のキー値及び上記第１のブロックカウンタ値は、上記初回のサイクルにおいて、上記ベクトルレジスタの第１の端部における隣接要素に格納され、上記制御回路は、上記第１の定数値、上記第１のキー値、上記第２のキー値及び上記第１のブロックカウンタ値を上記回路に入力して出力値を生成し、上記ラウンドの次のサイクルのために、上記ベクトルレジスタの第２の端部の隣接要素に上記出力値を格納する、項目１９に記載のシステム。
［項目２２］
上記制御回路は、上記第１の定数値、上記第１のキー値、上記第２のキー値及び上記第１のブロックカウンタ値以外の上記初回のサイクルの上記入力ベクトルを、上記ラウンドの上記次のサイクルのために上記ベクトルレジスタの上記第１の端部において開始する要素にシフトし、上記出力値は、上記ラウンドの上記次のサイクルのために、上記ベクトルレジスタの上記第２の端部の上記隣接要素に格納される、項目２１に記載のシステム。
［項目２３］
上記制御回路は、上記ベクトルレジスタの上記第１の端部における複数の隣接要素からの上記ラウンドの追加のサイクルのための値を上記回路に入力して、上記ラウンドの上記追加のサイクルのための出力値を生成し、上記ラウンドの上記追加のサイクルのための上記出力値、及び、上記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、上記ベクトルレジスタに、上記複数の隣接要素以外の上記ベクトルレジスタの要素からの値を格納させる、項目２２に記載のシステム。
［項目２４］
上記制御回路は、上記ベクトルレジスタの上記第１の端部における複数の隣接要素からの上記ラウンドの追加のサイクルのための値を上記回路に入力して上記ラウンドの上記追加のサイクルのための出力値を生成し、上記ラウンドの上記追加のサイクルのための上記出力値のサブセットからの値、及び、上記複数の隣接要素以外の上記ベクトルレジスタの要素からの値を、上記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で上記ベクトルレジスタの上記第１の端部における隣接要素に格納させ、上記追加のサイクルの後の上記次のサイクルのために部分的にアラインされた状態で、上記第１の端部以外の上記ベクトルレジスタの要素に上記サブセット以外の値を格納させる、項目２２に記載のシステム。
【図１】
2019207393.tif 000005
【図２】
2019207393.tif 000006
【図３】
2019207393.tif 000007
【図４】
2019207393.tif 000008
【図５】
2019207393.tif 000009
【図６】
2019207393.tif 000010
【図７】
2019207393.tif 000011
【図８】
2019207393.tif 000012
【図９】
2019207393.tif 000013
【図１０】
2019207393.tif 000014
【図１１】
2019207393.tif 000015
【図１２】
2019207393.tif 000016
【図１３】
2019207393.tif 000017
【図１４】
2019207393.tif 000018
【図１５】
2019207393.tif 000019
【図１６】
2019207393.tif 000020
【図１７】
2019207393.tif 000021
【図１８Ａ】
2019207393.tif 000022
【図１８Ｂ】
2019207393.tif 000023
【図１９Ａ】
2019207393.tif 000024
【図１９Ｂ】
2019207393.tif 000025
【図１９Ｃ】
2019207393.tif 000026
【図１９Ｄ】
2019207393.tif 000027
【図２０】
2019207393.tif 000028
【図２１Ａ】
2019207393.tif 000029
【図２１Ｂ】
2019207393.tif 000030
【図２２Ａ】
2019207393.tif 000031
【図２２Ｂ】
2019207393.tif 000032
【図２３】
2019207393.tif 000033
【図２４】
2019207393.tif 000034
【図２５】
2019207393.tif 000035
【図２６】
2019207393.tif 000036
【図２７】
2019207393.tif 000037
【図２８】
2019207393.tif 000038
【外国語明細書】
2019207393000001.pdf