(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-08-14
(54)【発明の名称】除算/平方根パイプライン及び方法
(51)【国際特許分類】
G06F 7/552 20060101AFI20240806BHJP
G06F 7/535 20060101ALI20240806BHJP
G06F 9/38 20180101ALI20240806BHJP
【FI】
G06F7/552 B
G06F7/535
G06F9/38 310J
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023574634
(86)(22)【出願日】2022-05-26
(85)【翻訳文提出日】2023-12-27
(86)【国際出願番号】 GB2022051339
(87)【国際公開番号】W WO2023275504
(87)【国際公開日】2023-01-05
(32)【優先日】2021-07-02
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ブルゲラ、ハビエル ディアス
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013AA18
(57)【要約】
除算/平方根パイプラインを備える装置を提供し、装置は、複数の除算/平方根反復パイプラインステージであって、各々が、デジット漸化除算又は平方根演算のそれぞれの反復を実行するためである、複数の除算/平方根反復パイプラインステージと、デジット漸化除算又は平方根演算の後続の反復を実行するために、除算/平方根パイプラインの後続の除算/平方根反復パイプラインステージへの入力として、1回の反復で1つの除算/平方根反復パイプラインステージによって生成された出力を供給するための信号パスと、を備える、除算/平方根パイプラインを備え、除算/平方根パイプラインは、浮動小数点オペランドに対してデジット漸化除算又は平方根演算を実行して浮動小数点結果を生成することができる。
【特許請求の範囲】
【請求項1】
装置であって、
除算/平方根パイプラインであって、
複数の除算/平方根反復パイプラインステージであって、各々が、デジット漸化除算又は平方根演算のそれぞれの反復を実行するためである、複数の除算/平方根反復パイプラインステージと、
前記デジット漸化除算又は平方根演算の後続の反復を実行するために、前記除算/平方根パイプラインの後続の除算/平方根反復パイプラインステージへの入力として、1回の反復で1つの除算/平方根反復パイプラインステージによって生成された出力を供給するための信号パスと、を備える、除算/平方根パイプラインを備え、
前記除算/平方根パイプラインが、浮動小数点オペランドに対して前記デジット漸化除算又は平方根演算を実行して浮動小数点結果を生成することができる、装置。
【請求項2】
制御回路であって、前記除算/平方根パイプラインを制御して、第1のデジット漸化除算又は平方根演算と、第2のデジット漸化除算/平方根演算の前の反復を実行する前の除算/平方根反復パイプラインステージと並行して、前記第1のデジット漸化除算又は平方根演算の後の反復を実行している、前記除算/平方根パイプラインの後の除算/平方根反復パイプラインステージで、前記第2のデジット漸化除算又は平方根演算を実行させる、制御回路を備える、請求項1に記載の装置。
【請求項3】
各除算/平方根反復パイプラインステージが、除算命令に応答してデジット漸化除算演算の所与の反復を実行し、平方根命令に応答してデジット漸化平方根演算の所与の反復を実行するための組み合わせた除算/平方根処理回路を備える、請求項1又は2に記載の装置。
【請求項4】
前記組み合わせた除算/平方根処理回路が、前記デジット漸化除算演算の前記所与の反復と前記デジット漸化平方根演算の前記所与の反復との両方に使用される同じデータパス上に少なくとも1つの出力値を生成するための共有回路を備える、請求項3に記載の装置。
【請求項5】
前記除算/平方根パイプラインが、前記デジット漸化除算演算及び前記デジット漸化平方根演算の両方について、同じ基数を用いて、処理サイクルごとに同じ数の反復を実行するように構成されている、請求項3又は4に記載の装置。
【請求項6】
所与の結果精度について、前記除算/平方根パイプラインが、前記デジット漸化平方根演算と同じ数の処理サイクルで前記デジット漸化除算演算を処理するように構成されている、請求項1から5のいずれか一項に記載の装置。
【請求項7】
前記除算/平方根パイプラインが、前記デジット漸化除算又は平方根演算のための少なくとも2つの異なる結果精度をサポートするように構成されている、請求項1から6のいずれか一項に記載の装置。
【請求項8】
前記除算/平方根パイプラインが、より高い精度で結果を生成するときよりも、より低い精度で結果を生成するときに、より少ない処理サイクルで前記デジット漸化除算又は平方根演算を実行するように構成されている、請求項7に記載の装置。
【請求項9】
制御回路であって、より高い精度の結果を生成するときに前記デジット漸化除算演算又は平方根演算の少なくとも1回の反復を実行するために使用される少なくとも1つの除算/平方根反復パイプラインステージを、より低い精度の結果を生成するために前記デジット漸化除算演算又は平方根演算を実行するときにバイパスさせるように、前記除算/平方根パイプラインを制御する、制御回路を備える、請求項7又は8のいずれか一項に記載の装置。
【請求項10】
前記除算/平方根パイプラインが、前記デジット漸化除算又は平方根演算の最終反復の出力に対して後処理演算を実行するための少なくとも1つの後処理ステージを備え、
前記装置が、制御回路であって、より高い精度の結果を生成するために実行されるより高い精度のデジット漸化除算/平方根演算の後に、より低い精度の結果を生成するために実行されるより低い精度のデジット漸化除算/平方根演算が所定のサイクル数を開始することを防止し、前記所定のサイクル数が、前記より高い精度のデジット漸化除算/平方根演算のために前記少なくとも1つの後処理ステージに到達するのに要したサイクル数と、前記より低い精度のデジット漸化除算/平方根演算のために前記少なくとも1つの後処理ステージに到達するのに要したサイクル数との差に対応する、制御回路を備える、請求項7から9のいずれか一項に記載の装置。
【請求項11】
各除算/平方根反復パイプラインステージが、
前の剰余値と比較定数のセットとの間の比較に基づいて、前記デジット漸化除算又は平方根演算のパーシャル結果値のための次の結果デジットを選択するデジット選択回路と、
剰余調整値と、前記デジット選択回路によって選択された次の結果デジットとに基づいて、前記前の剰余値を更新する剰余更新回路と、を備える、請求項1から10のいずれか一項に記載の装置。
【請求項12】
前記複数の除算/平方根反復パイプラインステージが、同じデジット漸化除算又は平方根演算内で実行されるそれぞれの反復ごとに同じ比較定数のセットを使用するように構成されている、請求項11に記載の装置。
【請求項13】
前記除算/平方根パイプラインが、前記除算/平方根パイプラインの第1の除算/平方根反復パイプラインステージの前に、前記除算/平方根パイプラインの前処理ステージで前記比較定数のセットを取得するためにテーブルルックアップを実行するように構成されており、前記比較定数のセットが、同じデジット漸化除算又は平方根演算内の各除算/平方根反復パイプラインステージで前記テーブルルックアップを繰り返すことを回避するためにステージからステージに渡される、請求項11又は12に記載の装置。
【請求項14】
前記除算/平方根パイプラインが、前記除算/平方根パイプラインの第1の除算/平方根反復パイプラインステージの前にオペランド前処理を実行するための少なくとも1つの前処理ステージを備え、前記オペランド前処理が、前記デジット漸化除算又は平方根演算の結果に対する少なくとも1つの初期結果デジットの選択を含む、請求項1から13のいずれか一項に記載の装置。
【請求項15】
前記除算/平方根パイプラインが、デジット漸化除算演算及びデジット漸化平方根演算の両方をサポートするように構成されており、
前記オペランド前処理において、前記少なくとも1つの前処理ステージが、前記デジット漸化平方根演算の初期結果デジットの数を、前記デジット漸化除算演算の初期結果デジットの数よりも多く生成するように構成されている、
請求項14に記載の装置。
【請求項16】
前記除算/平方根パイプラインを制御して、前記デジット漸化除算演算が実行されるときに少なくとも1つの反復を実行するために使用される少なくとも1つの除算/平方根反復パイプラインステージに、前記デジット漸化平方根演算を実行するときに、その結果出力の一部のビットを完全に若しくは部分的にスキップさせるか、又は破棄させる制御回路を備える、請求項15に記載の装置。
【請求項17】
前記デジット漸化除算演算を実行するとき、前記少なくとも1つの前処理ステージが、選択されたビット位置がダミービット値に設定されるパーシャル結果値を前記第1の除算/平方根反復パイプラインステージに提供するように構成されており、前記選択されたビット位置が、前記少なくとも1つの前処理ステージが、デジット漸化平方根演算を実行するときに、前記デジット漸化除算演算のために生成されない少なくとも1つの追加の結果デジットを挿入するビット位置に対応し、
前記除算/平方根パイプラインの所与の除算/平方根反復パイプラインステージが、前記デジット漸化除算演算と前記デジット漸化平方根演算の両方について、同じビット位置で、次の結果デジットを前記パーシャル結果値に挿入するように構成されており、
前記除算/平方根パイプラインが、前記デジット漸化除算演算を実行するときに、最終結果値から前記ダミービット値を除去するための後処理ステージを含む、請求項15又は16に記載の装置。
【請求項18】
前記デジット漸化除算又は平方根演算が、基数64のデジット漸化除算又は平方根演算である、請求項1から17のいずれか一項に記載の装置。
【請求項19】
各除算/平方根反復パイプラインステージは、同じ処理サイクルで複数の基数nの部分反復を実行することによって、基数rのデジット漸化除算又は平方根演算のそれぞれの基数rの反復を実行するように構成され、n<rである、請求項1から18のいずれか一項に記載の装置。
【請求項20】
r=64及びn=8である、請求項19に記載の装置。
【請求項21】
データ処理方法であって、
除算/平方根パイプラインの複数の除算/平方根反復パイプラインステージを使用して、デジット漸化除算又は平方根演算のそれぞれの反復を実行することと、
1つの除算/平方根反復パイプラインステージによって生成された出力を入力として、前記除算/平方根パイプラインの後続の除算/平方根反復パイプラインステージに供給することと、を含み、
前記除算/平方根パイプラインが、浮動小数点オペランドに対して前記デジット漸化除算又は平方根演算を実行して浮動小数点結果を生成することができる、データ処理方法。
【請求項22】
装置の製造のためのコンピュータ可読コードを記憶するためのコンピュータ可読媒体であって、
除算/平方根パイプラインであって、
複数の除算/平方根反復パイプラインステージであって、各々が、デジット漸化除算又は平方根演算のそれぞれの反復を実行するためである、複数の除算/平方根反復パイプラインステージと、
前記デジット漸化除算又は平方根演算の後続の反復を実行するために、除算/平方根パイプラインの後続の除算/平方根反復パイプラインステージへの入力として、1回の反復で1つの除算/平方根反復パイプラインステージによって生成された出力を供給するための信号パスと、を備える、除算/平方根パイプラインを備え、
前記除算/平方根パイプラインが、浮動小数点オペランドに対して前記デジット漸化除算又は平方根演算を実行して浮動小数点結果を生成することができる、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、データ処理分野に関する。
【0002】
デジット漸化アルゴリズムを使用して、除算又は平方根などの処理演算を実行することができる。デジット漸化は、反復アルゴリズムを使用して計算を実行する。各反復において、結果値の次のデジットが生成される。各デジットは、いくつかのビットを使用して表される。デジット漸化アルゴリズムの基数rの実施態様では、各デジットはlog2(r)ビットを有する。例えば、4の基数を使用する実装は、各デジットを2ビットで表し、そのため、各反復において、結果の2つの更なるビットが生成され、そのため、特定の数のビットを有する結果値を生成することは、反復回数を要し得る。より高い基数を使用する実装では、所与のサイズの結果をより少ない反復で生成して性能を向上させることができるが、単一の反復を実行するための回路はより複雑になる。そのようなデジット漸化方法を実行するように回路を設計する場合、性能、回路面積、及び電力消費の競合する要求を満たすことに課題があり得る。
【0003】
少なくともいくつかの例は、除算/平方根パイプラインを備える装置であって、複数の除算/平方根反復パイプラインステージであって、各々が、デジット漸化除算又は平方根演算のそれぞれの反復を実行するためである、複数の除算/平方根反復パイプラインステージと、デジット漸化除算又は平方根演算の後続の反復を実行するために、除算/平方根パイプラインの後続の除算/平方根反復パイプラインステージへの入力として、1回の反復で1つの除算/平方根反復パイプラインステージによって生成された出力を供給するための信号パスと、を備える、除算/平方根パイプラインを備え、除算/平方根パイプラインは、浮動小数点オペランドに対してデジット漸化除算又は平方根演算を実行して浮動小数点結果を生成することができる、装置を提供する。
【0004】
少なくともいくつかの例は、データ処理方法であって、除算/平方根パイプラインの複数の除算/平方根反復パイプラインステージを使用して、デジット漸化除算又は平方根演算のそれぞれの反復を実行することと、1つの除算/平方根反復パイプラインステージによって生成された出力を入力として、除算/平方根パイプラインの後続の除算/平方根反復パイプラインステージに供給することと、を含み、除算/平方根パイプラインが、浮動小数点オペランドに対してデジット漸化除算又は平方根演算を実行して浮動小数点結果を生成することができる、データ処理方法を提供する。
【0005】
少なくともいくつかの例は、装置の製造のためのコンピュータ可読コードを記憶するためのコンピュータ可読媒体であって、複数の除算/平方根反復パイプラインステージであって、各々が、デジット漸化除算又は平方根演算のそれぞれの反復を実行するためである、複数の除算/平方根反復パイプラインステージと、デジット漸化除算又は平方根演算の後続の反復を実行するために、除算/平方根パイプラインの後続の除算/平方根反復パイプラインステージへの入力として、1回の反復で1つの除算/平方根反復パイプラインステージによって生成された出力を供給するための信号パスと、を備える、除算/平方根パイプラインを備え、除算/平方根パイプラインが、浮動小数点オペランドに対してデジット漸化除算又は平方根演算を実行して浮動小数点結果を生成することができる、コンピュータ可読媒体を提供する。
【図面の簡単な説明】
【0006】
本技術の更なる態様、特徴、及び利点は、添付の図面と併せて読まれる以下の例の説明から明らかとなる。
【
図1】除算/平方根処理回路を有するデータ処理演算の一例を概略的に示す図である。
【
図2】同じ処理サイクルで実行される、より高い基数のデジット漸化平方根又は除算演算を、複数のより低い基数の部分反復に分割する例を概略的に示す図である。
【
図3】平方根演算の所与の基数rの反復を実行するための回路を示す図である。
【
図7-1】同じ処理サイクルで2つの基数8の部分反復を実行することによって平方根演算の所与の基数64の反復を実行するための平方根処理回路をより詳細に示す図である。
【
図7-2】同じ処理サイクルで2つの基数8の部分反復を実行することによって平方根演算の所与の基数64の反復を実行するための平方根処理回路をより詳細に示す図である。
【
図8-1】除算演算と平方根演算の両方を実行することができる組み合わせた除算/平方根処理回路を示し、共有回路は、除算演算と平方根演算の両方に使用される同じデータパス上で少なくとも1つの出力値を生成する。
【
図8-2】除算演算と平方根演算の両方を実行することができる組み合わせた除算/平方根処理回路を示し、共有回路は、除算演算と平方根演算の両方に使用される同じデータパス上で少なくとも1つの出力値を生成する。
【
図9-1】除算/平方根パイプラインの一例を示す図である。
【
図9-2】除算/平方根パイプラインの一例を示す図である。
【
図10】第2の演算が第1の演算よりも低精度浮動小数点表現を使用する場合に、第2の演算が第1の演算の後に所定のサイクル数を開始することを禁止される、連続する除算演算又は平方根演算のパイプライン化を示す図である。
【
図12】オンザフライ変換の実施例を示す図である。
【
図13】3Xデジットのオンザフライ変換を示す図である。
【
図14】3Xオンザフライ変換の実施例を示す図である。
【
図15-1】3倍のオンザフライ変換を実行するための回路を示す図である。
【
図15-2】3倍のオンザフライ変換を実行するための回路を示す図である。
【
図16】部分ルート値を再構築するための選択を示す図である。
【
図17】除算演算の基数8の部分反復の比較定数を示す図である。
【
図18】平方根演算の基数8の部分反復の比較定数を示す図である。
【
図19】除算比較定数に対する平方根比較定数のオフセットを表すオフセットを示す図である。
【
図20-1】除算及び平方根演算の比較定数を判定するための除算及びオフセットルックアップテーブルを示す図である。
【
図20-2】除算及び平方根演算の比較定数を判定するための除算及びオフセットルックアップテーブルを示す図である。
【
図21-1】除算及び平方根演算のための比較定数セットを取得するための回路を示す。
【
図21-2】除算及び平方根演算のための比較定数セットを取得するための回路を示す。
【0007】
平方根処理
平方根処理回路は、同じ処理サイクルにおいて2つ以上の基数nの部分反復を実行することによって、基数rの平方根演算の所与の基数r反復を実行してもよく、n<rである。これは、基数rの反復をより低い基数の部分反復に細分化しない実装形態と比較して、性能と回路オーバーヘッドとの間のより良好な妥協を提供することができる。1サイクルで実行される全体的な演算は基数rのより高い基数の演算であるため、これは、結果のlog2(r)ビットが処理サイクルごとに生成され得ることを意味し、これはより小さい基数が使用される場合よりも高い性能を提供し得るが、基数rの反復を同じ処理サイクルでいくつかの基数nの部分反復に分割し、ここで各部分反復についてnはrより小さいが、これによって、回路の全体的なサイズは、基数rの反復が単一演算として実行された場合よりも小さくなり得、これは、基数nを用いる各部分反復の次のデジットとして選択に利用可能な代替オプションの数が、平方根演算の基数rの反復が単一演算として実行された場合に必要とされる基数rデジットの代替オプションの数よりも少ないためである。しかしながら、基数rの反復をより小さい基数の部分反復に分割すると、それらの基数nの部分反復を単一の処理サイクルに適合させることができるという点でタイミングの課題が生じる可能性がある。
【0008】
所与の基数nの部分反復について、平方根処理回路は、前の剰余推定値に基づいて、平方根結果の次の基数n結果デジットを選択するデジット選択回路と、更新された剰余値を生成するために、デジット選択回路によって選択された次の基数nの結果デジットに応じた剰余調整値に基づいて、前の剰余値を調整する剰余更新回路と、更新された剰余値の一部の推定値を示す更新された剰余推定値を生成する剰余推定回路と、所与の基数rの反復の後続の基数nの部分反復、又は基数r平方根演算の更なる基数rの反復の第1の基数nの部分反復において、前の剰余値及び前の剰余推定値として使用するために、更新された剰余値及び更新された剰余推定値を供給するための出力信号パスと、を含み得る。サイクルごとに複数の部分反復が実行されているので、デジット選択回路、剰余更新回路、剰余推定回路、及び出力信号パスの複数のインスタンスが、平方根演算の同じ基数rの反復内のそれぞれの基数nの部分反復に対して提供され得る。
【0009】
所与の基数rの反復の最後の基数nの部分反復において、剰余推定回路は、更新された剰余値を生成する剰余更新回路と並列に更新された剰余推定値を生成し得る。更新された剰余推定値は更新された剰余値の一部を表すので、最初に剰余値が利用可能であり、次に剰余推定値が順次計算されることを期待することがあるため、これは直感に反する。しかしながら、本発明者は、より高い基数の反復をより小さい基数の部分反復に分割する実施態様では、所与の基数rの反復のその最後の部分反復の更新された剰余値を生成する剰余更新回路と並行して、最後の部分反復の更新された剰余推定値を生成することが可能であることを認識した。これは、最後の基数nの部分反復のための剰余推定値の計算に関連する遅延を、平方根処理回路を通るクリティカルタイミングパスから少なくとも部分的に除去することができることを意味し、平方根演算の所与の基数rの反復を実行するのにかかる全体的な時間を短縮し、従って全体的な性能を改善する。
【0010】
剰余更新回路は、更新された剰余値を冗長表現で生成し得る。例えば、剰余値は、更新された剰余値の数値を共に表す2つの項として表されてもよいが、同じ数値を表すことができる第1の項及び第2の項の値の2つ以上の組み合わせがあってもよい。冗長表現で更新された剰余値を生成することは、1つのビットから別のビットにキャリーを伝播する必要がある更新された剰余値の計算を回避することができるため、有用であり得る。従って、剰余更新回路は、キャリー保留加算回路を備えてもよい。
【0011】
しかしながら、平方根結果の次の基数n結果デジットを選択する目的のために、デジット選択回路は、非冗長表現の剰余の表現を使用してデジット選択を実行することができ、従って、剰余推定回路は、更新された剰余値の少なくとも一部の推定値を示す非冗長表現の更新された剰余推定値を生成することができる(非冗長表現は、推定値が単一の項で表現できることを意味し、更新された剰余推定値の任意の所与の数値について、その数値に対応する非冗長表現の単一のビットパターン(それ以外はない)がある)。更新された剰余値のフル精度がデジット選択に必要とされない可能性があるため、更新された剰余推定値は、更新された剰余値よりも少ないビットを有することができ(より具体的には、更新された剰余推定値は、2つの冗長項を含むことができる冗長に表された剰余値の単一の項のビット数よりも少ないビットを有することができる)、推定値のビット数を制限することにより、非冗長剰余推定値を計算する際の遅延が低減される。例えば、更新された剰余推定値は、より低いビットがデジット選択の精度に著しく影響を与えない場合があるため、更新された剰余値の最も重要な部分の推定値を表すことができる。
【0012】
従って、非冗長表現における剰余推定値の計算は、キャリーを1つのビット位置から別のビット位置デジットに伝播することができ、キャリー保留加算器よりも遅くてもよいキャリー伝播加算回路を使用することができる。従って、典型的な手法では、剰余推定値に使用されるキャリー伝播加算回路は、平方根演算の特定の反復の全体的な処理を大幅に遅くする可能性がある。
【0013】
しかしながら、本発明者は、基数rの平方根反復が同じ処理サイクル内で実行される基数nの複数のより小さい部分反復に分割される手法では、最後の基数nの部分反復の更新された剰余推定値が更新された剰余値の計算と並行して計算され得ることを認識し、これは、最後の基数nの部分反復内の剰余更新回路への入力として提供される情報及び/又は所与の基数rの反復内の以前の部分反復からの他の情報を使用して、最後の基数nの部分反復の更新された剰余推定値を計算することができ、最後の基数nの部分反復の更新された剰余推定値の計算を開始する前に、最後の基数nの部分反復内の更新された剰余値が利用可能になるのを待つ必要性を回避するためである。これは、所与の基数rの反復の最後の基数nの部分反復において更新された剰余推定値を計算するための比較的遅いキャリー伝播加算のクリティカルタイミングパスからの除去に起因して、性能において比較的有意な利得を提供する。
【0014】
剰余更新では、デジット選択回路によって選択された次の結果デジットに依存する値を取る剰余調整値に基づいて、前の剰余値が更新される。最後の基数nの部分反復における剰余推定回路は、この剰余調整値及び前の剰余推定値を使用して、最後の基数nの部分反復のための更新された剰余推定値を生成することができる。剰余調整値は、最後の基数nの部分反復において剰余推定回路への入力として使用されるため、これにより、更新された剰余値を待つ必要がなくなり、更新された剰余推定値をより迅速に利用することができる。
【0015】
剰余推定回路は、最後の基数nの部分反復が同じサイクル内で実行されている少なくとも1つの以前の部分反復に続くという事実を利用することができ、その結果、その以前の部分反復で計算されたいくつかの情報は、更新された剰余値が取得された後に剰余推定値が連続して計算された場合よりも早く更新された剰余推定値を計算するために、最後の部分反復において剰余推定回路によって使用され得る。
【0016】
例えば、最後の基数nの部分反復以外の所与の基数r反復の先行基数nの部分反復において、剰余推定回路は、所与の基数r反復の最後の基数nの部分反復において次の基数n結果デジットを選択するのに不要である、更新された剰余推定値の少なくとも1つの追加ビットを計算してもよく、所与の基数r反復の最後の基数nの部分反復において、剰余推定回路は、先行基数nの部分反復で判定された少なくとも1つの追加ビットを使用して、更新された剰余推定値を判定してもよい。先行する基数nの部分反復において更新された剰余推定値に必要とされるよりも多くのビットを計算することにより、追加のビット(複数可)を使用して、最後の基数nの部分反復においてより早く更新された剰余推定値を計算することができ、なぜなら、先行する部分反復において計算された追加のビットは、更新された剰余値が利用可能になるのを待つことなく、最後の部分反復における更新された剰余推定値を計算することを可能にするからである。
【0017】
所与の基数rの反復の第1の基数nの部分反復において、剰余推定回路は、第1の基数nの部分反復における剰余更新回路によって生成された更新された剰余値に基づいて、更新された剰余推定値を判定できる。従って、更新された剰余推定値が全ての部分反復において更新された剰余値と並列に計算されることは必須ではない。所与の基数rの反復の第1の部分反復では、更新された剰余値が冗長形式で利用可能になるまで、剰余推定値を計算できるのに十分な情報が利用できない場合がある。しかしながら、複数の基数nの部分反復が同じ処理サイクル内で重複しているため、回路設計者は、後続の部分反復の部分が以前の部分反復の部分に対して開始する相対タイミングを変更する自由度があり、前の部分反復からの情報を使用して後の部分反復でパラメータを計算することができ、少なくとも最終部分反復のために更新された剰余値及び更新された剰余推定値の計算を並列化することを実現可能にする。
【0018】
平方根演算の所与の基数rの反復を実施するために同じサイクル内で少なくとも3つの部分反復が実行される実装態様では、更新された剰余推定値が、第1の部分反復と最後の部分反復との間の1つ以上の中間部分反復の更新された剰余値と並列に計算されることも可能である。
【0019】
平方根処理回路は、所与の基数nの部分反復に対して、複製回路の1つ以上のインスタンスを備え、複製回路の各インスタンスは、デジット選択回路による次の基数n結果デジットの選択と並行して、デジット選択回路によって次の基数n結果デジットとして選択されることが可能な異なる結果デジットに対応する2つ以上の候補出力値を判定するための2つ以上の複製回路ユニットと、異なる結果デジットのうちのどれが次の基数n結果デジットとして選択されるかを示すデジット選択回路に応答して、複数の候補出力値のうちの1つを選択する選択回路とを含み、複数の候補出力値は、2つ以上の複製回路ユニットによって生成された2つ以上の候補出力値を少なくとも含む。この手法では、候補出力値を生成するための計算を開始する前に、次の基数nの結果デジットがデジット選択回路によって実際に選択されるのを待つ必要がないため、性能をより高速にすることができる。
【0020】
選択回路による選択に利用可能な候補出力値の数は、2つ以上の複製回路ユニットによって生成された候補出力値の数よりも多くてもよいことに留意されたい。例えば、選択に利用可能な結果デジットのうちの1つは0に等しくてもよく、場合によっては、次の結果デジットが0である場合に選択される候補出力値は、部分反復に提供される入力値と同一であり得るため、結果デジット0の候補出力値を明示的に計算する必要はない場合がある。従って、選択回路は、複製回路ユニットのうちの1つによって明示的に生成されない候補出力値、ならびに2つ以上の複製回路ユニットによって生成された候補出力値を入力として取得することができる。
【0021】
次の結果デジットが既知である時間の前に複数の候補出力値を推測的に計算するために複製回路ユニットを提供することは、性能に優れている可能性があるが、必要な複製回路ユニットの数は基数の増加と共に増加し、より高い基数演算をサポートするために、回路面積コスト及び電力消費を増加させる可能性がある。
【0022】
回路面積及び電力コストを制限するための1つの技術は、2つ以上の複製回路ユニットのうちの少なくとも1つを、所与の大きさを有する正の結果デジットと、同じ所与の大きさを有する負の結果デジットとの両方の間で共有される共有回路ユニットとして提供することであり得る。共有回路ユニットは、共有候補出力値を共有信号パス上の選択回路に出力するように構成されており、選択回路は、次の基数n結果デジットが所与の大きさを有する正及び負の結果デジットのいずれかであるとき、共有信号パスから共有候補出力値を選択してもよい。従って、これにより、同じ大きさを共有する正及び負の結果デジットのそれぞれに2つの別個の複製回路ユニットを提供する必要がなくなる。これにより、必要な複製回路ユニットの総数を減らすことができ、従って回路面積を節約し、電力消費を減らすことができる。
【0023】
複製回路の少なくとも1つのインスタンスについて、同じ大きさの正及び負の結果デジット間で共有される出力を提供する共有回路ユニットは、前の剰余推定値の符号に基づいて、共有信号パス上の共有候補出力値として出力されるべき値を選択することができる。従って、同じ大きさを有するが符号が異なる2つの結果デジット値の間で共通の信号パスが共有されるが、その共有信号パス上に出力される実際の数値は、前の剰余推定値の符号に応じて異なり得る。
【0024】
複製回路の少なくとも1つのインスタンスについて、共有回路ユニットは、所与の大きさを有する正及び負の結果デジットの共有候補出力値を判定するための共有追加回路を含んでもよい。同じ大きさの正負両方のデジットの共有候補出力値を生成するための共有回路ユニットを提供する技術は、その回路ユニットが加算回路を含む場合に特に有用であり得、これは、加算回路が回路面積の点で比較的コストがかかるためである。
【0025】
基数nの部分反復の場合、通常、選択回路による選択に利用可能な候補出力値の数はn+1でなければならないと予想される。しかしながら、同じ大きさを有する正及び負の結果デジット間で共有回路ユニットを共有することによって、選択回路による選択に利用可能な候補出力値の総数をn/2+1に減らすことができ、これは、提供される複製回路ユニットの数を減らすことができることを意味するため、回路面積を大幅に削減することができる。
【0026】
平方根処理回路内に複製回路のいくつかのインスタンスが存在し得る。平方根処理回路の様々な部分は各々この手法を使用することができ、複製回路ユニットが複数の可能な結果デジットの候補出力値を推測的に判定し、次いで、次の結果デジットが選択されると、正しい候補出力値を選択回路によって選択することができる。
【0027】
例えば、剰余更新回路は、複製回路のそのようなインスタンスのうちの1つを備えることができる。剰余更新回路が推測的複製及び選択手法を使用する場合、選択回路によって選択されている候補出力値は、候補の更新された剰余値であり得る。
【0028】
同様に、剰余推定回路は、この推測的複製を使用し、上述の複製回路のインスタンスの1つを含むこともできる。剰余推定回路が複製回路を含む場合、候補出力値は、候補の更新された剰余推定値であってもよい。
【0029】
デジット漸化方法の別の部分は、オンザフライ変換を実行することであり得る。平方根演算の場合、更新された剰余値を生成するための前の剰余値の調整は、(次の結果デジットに基づいて選択された)剰余調整値に依存するだけでなく、前に選択された一連の結果デジットに対応する数値である部分ルート値にも依存し得る。結果デジットが符号付きデジットとしてデジット選択回路によって選択され得るので、次に、更新された剰余値を生成するために前の剰余値を調整するために剰余更新回路によって使用され得る非冗長表現で部分ルート値を提供するために、部分ルート値を非冗長表現に変換するためにオンザフライ変換回路が提供され得る。以下に説明するように、加算を必要としないが、単に前の部分ルート値と、最新の基数nの結果デジットに基づいて選択されたいくつかの追加ビットとを連結することによって行うことができる方法でオンザフライ変換を行うことが可能である。
【0030】
従って、(非冗長表現において、前に選択された一連の基数nの結果デジットに対応する数値を示す部分ルート値を生成するための)オンザフライ変換回路はまた、上述の複製回路のインスタンスを含むことができ、その結果、複製回路ユニットは、いくつかの候補部分ルート値を生成し、選択回路による選択に利用可能な候補出力値は、部分ルート値のいくつかの候補値を含む。
【0031】
従って、平方根処理回路のどの部分が複製を実施するかにかかわらず、複製は性能を向上させるのに役立つことができ、実施される場合、同じ大きさの正及び負の結果デジットに対する複製回路ユニットの共有は、回路規模全体を縮小するのに役立つことができる。
【0032】
いくつかの実装形態は、平方根処理回路の上記の構成要素の1つのみ又はサブセットで複製回路を実装することができ、他の構成要素は複製された手法を使用せず、剰余更新回路、剰余推定回路、及びオンザフライ変換回路の各々が複製回路のインスタンスを提供する場合、性能は最大になり得る。
【0033】
一般に、所与の基数rの反復が同じ処理サイクルでいくつかの背中合わせ又は重複する基数nの部分反復に分割される場合、rの値は、1サイクルで使用される部分反復の各々についてのnのそれぞれの値の積に対応し得る。
【0034】
以下に説明する特定の例では、各基数64反復に2つの基数8の部分反復があるように、部分反復の各々についてr=64及びn=8である。この手法は、性能(基数64は、処理サイクルごとに6ビットを生成できることを意味する)と、回路面積及びタイミングの複雑さ(部分反復に基数8を使用することは、2つの部分反復のみが必要とされることを意味し、これは、3つ以上の部分反復を使用する実装と比較して、低いタイミング圧力を課すが、基数を64を超えて増加させると、タイミングを満たしながら回路規模を管理することを実現不可能にする可能性がある)との間の良好なバランスを提供することができる。従って、r=64及びn=8は、特に有用な組み合わせであり得る。
【0035】
それにもかかわらず、他の選択肢も可能である。例えば、平方根演算の基数64反復を、各々基数4の3つの部分反復として実行することが可能である(64=4×4×4であるため)。
【0036】
同じ基数nで部分反復の各々を実施することは、回路全体の面積に関してより効率的であり、各部分反復で同じ基数を使用する設計の複雑さの点でより単純であり得るため、有用であり得る。
【0037】
それにもかかわらず、同じ基数rの反復内の異なる部分反復が、異なる基数を使用することも可能である。例えば、デジット漸化平方根演算の基数64の反復は、1つの基数4の部分反復、1つの基数8の部分反復、及び1つの基数2の部分反復に分割することができる。従って、nが各部分反復について等しいことは必須ではない。
【0038】
上述した技術は、異なる設計の平方根処理回路で実施することができる。一例では、平方根処理回路は、反復平方根処理回路であってもよく、出力信号パスは、反復平方根処理回路の出力から最後の基数nの部分反復において生成された更新された剰余値及び更新された剰余推定値を、平方根演算の更なる基数rの反復の第1の基数nの部分反復において前の剰余値及び前の剰余推定値として使用するための、同じ反復平方根処理回路の入力に供給してもよい。従って、平方根演算を全体として実行するために、反復平方根処理回路を通る複数のパスが複数の処理サイクルにわたって実行され、1つのサイクルにおける反復平方根処理回路の出力は、後続のサイクルにおける同じユニットへの入力としてフィードバックされる。
【0039】
しかしながら、以下でより詳細に説明するように、平方根処理回路は、いくつかの平方根反復パイプラインステージを含むパイプライン平方根処理ユニットの一部であってもよく、各ステージは、上述した平方根処理回路のそれぞれのインスタンスを含む。この場合、所与のパイプラインステージの出力信号パスは、次の処理サイクルにおける後続の基数rの反復の処理のために、所与の基数rの反復の最後の基数nの部分反復において生成された更新された剰余値及び更新された剰余推定値を、1つの平方根反復パイプラインステージにおける平方根処理回路の出力から後続の平方根反復パイプラインステージにおける平方根処理回路(平方根処理回路の異なるインスタンス)の入力に供給することができる。この手法により、複数の平方根演算を互いにパイプライン化することが可能になり、その結果、前の平方根演算がパイプライン平方根処理ユニットの後のステージで処理されている間、後の平方根演算が、前の基数rの反復が実行されている前のパイプラインステージにあり得、平方根演算の全体的なスループットを改善するのに役立ち得る。
【0040】
組み合わせた除算/平方根処理回路
市販のプロセッサマイクロアーキテクチャには、通常、除算演算及び平方根演算のための別個の回路論理がそれぞれ設けられているので、これらの演算は完全に別個の回路論理ユニットで実行され、平方根結果を計算するために使用されるデータパスと比較して、除算結果を計算するために使用されるデータパスの共有はない。これは、除算演算のタイミングに影響を与えるために平方根演算において余分な複雑さを必要としないため、構築がより簡単であり得る。しかしながら、サイクルごとにより多くのビット数の除算又は平方根結果を計算できるようにすることによって、パフォーマンスを向上させるために、除算及び平方根演算に使用される基数を増やすことが望ましい場合がある。例えば、現在市販のプロセッサでは利用できない基数64の除算又は平方根演算を用いて、6ビットの結果をサイクルごとに計算することができる。しかしながら、基数の増加は、より低い基数を必要とする実施態様と比較して、より複雑な回路が必要とされることを意味する。従って、より高い基数で動作するときに別個の除算及び平方根処理回路を有することは、回路規模、従ってプロセッサの電力消費を増加させる可能性がある。
【0041】
以下に説明する例では、除算命令に応答して、基数64の除算演算の所与の基数64の反復を実行し、平方根命令に応答して、基数64の平方根演算の所与の基数64の反復を実行するための組み合わせた除算/平方根処理回路が提供される。組み合わせた除算/平方根処理回路は、基数64の除算演算と基数64の平方根演算の両方に使用される同じデータパス上で所与の基数64の反復のための少なくとも1つの出力値を生成するための共有回路を有する。例えば、少なくとも1つの出力値は、更新された剰余値、選択された結果デジット、更新された剰余推定値、及び/又はオンザフライ変換された部分結果値のうちの任意の1つ以上を含むことができる。除算演算と平方根演算の両方の出力に同じデータパスが使用される共有回路を使用することにより、除算及び平方根ユニットを有する実装形態と比較して、回路の総量を削減することができる。これは、市販のプロセッサマイクロアーキテクチャによってサポートされるより低い基数演算と比較して基数64に必要な回路規模が増大していることを考慮すると、基数64演算に特に有用である。
【0042】
組み合わせた除算/平方根処理回路は、基数64の除算演算と基数64の平方根演算の両方について、処理サイクルごとに同じ数の基数64の反復を実行することができる。これは、平方根演算と除算演算との間で回路を共有することができる程度を増加させ、組み合わせた除算/平方根処理回路の全体的な回路面積を制限するのに役立つことができる。
【0043】
基数64の除算演算と基数64の平方根演算の両方について、組み合わせた除算/平方根処理回路は、同じ処理サイクルで1つ以上の基数mの部分反復を実行することによって所与の基数64の反復を実行することができ、m≦64である。
【0044】
いくつかの例では、m=64であり、この場合、基数64反復は、基数64反復を別個の部分反復に分割することなく、次の結果デジットの6ビットを一度に生成する単一の一体演算として実行されてもよい。この手法はより高速であり得るが、基数64の反復が単一の演算として実行されると、可能な結果デジットが-32から+32に拡張され得るため、より多数の候補結果デジットに対応するために追加の回路論理を必要とし得る。
【0045】
しかしながら、いくつかの例では、m<64であるため、組み合わせた除算/平方根処理回路は、同じ処理サイクルで複数の基数mの部分反復を実行することによって所与の基数64の反復を実行することができる。例えば、以下に示す具体例のmは8に等しいので、各基数64の反復には2つの基数8の部分反復がある。別の選択肢は、処理サイクルごとに1つの基数64の反復に3つの基数4の部分反復があるように、m=4の場合であり得る。部分反復基数mは、平方根処理回路の例について上述したように、異なる部分反復間で異なる値を取ることができるが、mが各部分反復において同じである場合、回路実装の観点からより効率的であり得る。
【0046】
従って、「基数mの部分反復」という用語は、より小さい基数の複数の部分反復への細分化がない場合には、基数64の反復全体を指すか、又はそのような細分化が実施される場合には、より小さい基数の個々の部分反復を指すために使用される。
【0047】
組み合わせた除算/平方根処理回路の異なる部分が存在してもよく、これは上述の共有回路として機能してもよい。
【0048】
一例では、共有回路は、所与の基数mの部分反復において、前の剰余推定値と比較定数のセットとの比較に基づいて、除算結果又は平方根結果の次の基数mのデジットを選択する共有デジット選択回路を備える。m=64であり、従って基数64の反復を複数の部分反復に分割することがない実装形態では、デジット選択に使用される前の剰余推定値は、前の基数64の反復から来てもよい。一方、基数64の反復が複数の基数mの部分反復に分割されるようにm<64である場合、所与の基数64の反復の第1の基数mの部分反復では、前の剰余推定値は、前の基数64の反復の最後の基数mの部分反復から来てもよく、所与の基数64の反復の第1の基数mの部分反復以外の後の基数mの部分反復では、共有デジット選択回路は、所与の基数64の反復の前の基数mの部分反復で計算された前の剰余推定値に基づいて次の基数mのデジットを選択してもよい。
【0049】
従って、除算演算及び平方根演算の結果デジットをそれぞれ選択するための別個の回路と比較して、回路面積を節約するために共有デジット選択回路を設けることができる。例えば、共有デジット選択回路は、除算及び平方根演算の両方について前の剰余推定値と比較定数との間の比較を実行するために使用される同じ比較器回路のセットを備えることができる。
【0050】
除算演算と平方根演算の両方を実行するときに使用される比較器回路は同じであってもよいが、共有デジット選択回路は、基数64の除算演算と基数64の平方根演算とにそれぞれ異なるセットの比較定数を使用してもよい。比較定数のセットは、演算タイプに基づいて選択することができる。
【0051】
しかしながら、1つの問題は、除算演算のための比較定数が平方根演算のための比較定数と同じサイズでない可能性があることである。除算演算は、十分な精度のデジット選択を提供するために、平方根演算に使用される比較定数ほど多くのビットを比較定数に必要としない場合があることがエラー分析によって判明している。従って、除算比較定数は、平方根比較定数よりも少ないビットを有すると予想され得る。しかしながら、回路の共有を容易にするために、基数64の除算演算の前の剰余推定値と比較される比較定数は、基数64の平方根演算の前の剰余推定値と比較される比較定数と同じ幅にパディングするために、0に設定された少なくとも1つの最下位ビットを有することができる。少なくとも1つの0を最下位ビット位置に配置することによって、除算のための比較定数を平方根演算に使用されるものと同じビット幅に拡張することにより、これにより、デジット選択回路内の同じ比較器と剰余推定値のための同じデータパスとを、平方根演算と除算演算の両方に使用することが可能になり、回路面積を削減することが可能になる。
【0052】
共有回路の別の例は、冗長表現内の更新された剰余値を生成するために、所与の基数mの部分反復において、剰余調整値に基づいて前の剰余値を調整する共有剰余更新回路であってもよい。冗長表現を使用することにより、キャリー伝播加算の遅延の増加を回避するために、キャリー保留加算を使用して剰余更新を実行することができる。従って、共有回路は、キャリー保留加算を実行して更新された剰余値を生成する共有キャリー保留加算回路を備えることができる。剰余値のデータパスが除算演算と平方根演算との間で共有されるため、これにより、除算演算と平方根演算とにそれぞれ2つの別個のキャリー保留加算器を設ける必要がなくなる。
【0053】
しかしながら、剰余調整値は、平方根演算と比較して除算演算について異なっていてもよい。従って、共有剰余更新回路は、剰余調整値として、基数64の除算演算の一部として所与の基数mの部分反復を実行するときに、除数値から導出される値、及び基数64の平方根演算の一部として所与の基数mの部分反復を実行するときに、一連の前に選択された基数mのルートデジットに応じて部分ルート値から導出される値を選択する選択回路を備えることができる。従って、選択回路内の少量の追加論理により、剰余の更新を生成するときに、平方根及び除算の両方の演算に共有データパスを使用することができる。
【0054】
共有回路の別の例は、所与の基数mの部分反復において、基数64の除算演算又は基数64の平方根演算の所与の基数mの部分反復において、冗長表現で生成された更新された剰余値の一部の非冗長推定値を示す更新された剰余推定値を生成するための共有剰余推定回路であってもよい。例えば、共有剰余推定回路は、非冗長推定値を生成するためにキャリー伝播加算を実行するためのキャリー伝播加算回路を備えることができるため、除算演算と平方根演算との間でこれを共有することにより、2つの別個のキキャリー伝播加算器を設ける必要はない。
【0055】
mが64未満である実装形態において、所与の基数64の反復の最後の基数mの部分反復において、共有剰余推定回路は、更新された剰余値を生成する共有剰余更新回路と並列に更新された剰余推定値を生成し得る。これは、平方根処理回路について上述したのと同じ理由で、クリティカルタイミングパスの待ち時間を低減することによって性能を改善する。
【0056】
共有回路の別の例は、所与の基数mの部分反復において、オンザフライ変換を実行して非冗長表現における部分結果値を生成するためのオンザフライ変換回路で共有されてもよい。やはり、オンザフライ変換回路は、比較的複雑なハードウェア回路論理を必要とする場合があり、従って、除算及び平方根演算のためにこれを複製することを回避することによって、より多くの量の回路面積を節約することができる。
【0057】
しかしながら、1つの問題は、典型的な方式では、オンザフライ変換回路が平方根演算と比較して除算演算に対して異なって実行されることである。オンザフライ変換回路は、次の結果デジットに基づいて選択された値を部分結果値に挿入して、そのサイクル及び任意の以前のサイクルで選択された結果デジットのシーケンスに対応する部分結果を表すオンザフライ変換値を生成することができる。しかしながら、典型的なスキームでは、オンザフライ変換中に部分結果値に次のデジットが挿入される位置は、除算演算と平方根演算とで異なり、除算演算は、前に挿入された全てのビットをより上位のビット位置にシフトアップするために、左シフトで最下位ビット位置に次のデジットから導出された値を挿入するように実行される。対照的に、部分結果値が平方根演算におけるデジット選択及び剰余更新演算に影響を及ぼすという事実により(従って、各処理サイクルにおいて、部分ルート結果値の最上位ビットが部分結果の格納された表現内の一貫したビット位置に留まる場合、より便利である)、平方根演算の場合、次の結果デジットから導出された値は、次の平方根結果デジットが挿入される部分結果値内の位置を表すために使用されるマスクを用いて、部分結果内の可変ビット位置に挿入される。このマスクは、次の結果デジットが挿入される位置を部分結果値のより下位のビットに向かって徐々に移動させるために、反復又は部分反復の間で調整され得る。
【0058】
部分結果値を維持するこれらの対照的な方法を考えると、オンザフライ変換回路のための共有回路論理を有することは困難であると考えるかもしれない。
【0059】
しかしながら、本発明者は、共有オンザフライ変換回路を提供することが可能であることを認識した。所与の基数nの部分反復において、共有オンザフライ変換回路は、基数64の除算演算と基数64の平方根演算の両方について、マスク値に基づいて部分結果値に次のデジットを挿入するための位置を選択する。従って、除算演算のために、共有オンザフライ変換回路は、全てのデジットをシフトアップして最下位ビット位置に次のデジットを挿入する代わりに、基数64の除算演算のためにマスクを使用して、除算演算のための部分結果値に次のデジットが挿入される位置を選択するように、従来とは異なる挙動をする。これにより、除算演算のためのオンザフライ変換が平方根演算のための変換をミラーリングして、共有回路論理及び共有データパスを使用することができる。これは、全体的な回路面積効率を改善するのに役立つ。
【0060】
上述の平方根処理回路の様々な回路ユニットと同様に、共有除算/平方根回路内の共有回路は、複製回路の1つ以上のインスタンスを備えることができ、複製回路の各インスタンスは、除算結果又は平方根結果の次の基数mデジットの選択と並行して、次の基数mデジットとして選択されることができる異なるデジットに対応する2つ以上の候補出力値を判定するための2つ以上の複製回路ユニットと、異なるデジットのうちのどれが次の基数mデジットとして選択されたかのインジケーションに応答して、複数の候補出力値のうちの1つを選択するための選択回路とを備え、複数の候補出力値は、2つ以上の複製回路ユニットによって生成された少なくとも2つ以上の候補出力値を含む。これは、平方根の例について上述したのと同じ理由で性能を向上させるのに役立つ。ここでも、基数mの部分反復を処理するために必要な複製回路ユニットの総数を減らすために、複製回路ユニットの少なくとも1つは、等しい大きさの正及び負のデジット間で共有される共有回路ユニットであってもよい。組み合わせた除算/平方根回路の様々な構成要素は、そのような複製回路、例えば、剰余更新回路、剰余推定回路、及びオンザフライ変換回路のうちの任意の1つ以上を使用することができる。
【0061】
前述の平方根処理回路と同様に、組み合わせた除算/平方根処理回路の場合、これは、1つの基数64の反復の出力が除算又は平方根演算の更なる基数64の反復で使用するために同じ反復除算/平方根処理回路に入力される反復除算/平方根処理回路として、又はそれぞれが組み合わせた除算/平方根処理回路の各々のインスタンスを有するいくつかのパイプラインステージを有するパイプライン除算/平方根処理ユニットとして実施することができ、信号パスは、パイプライン内の次のステージへの入力として1つのステージで生成された出力を提供する。
【0062】
除算/平方根パイプライン
多くのプログラムでは、浮動小数点形式で表されたオペランドに対して算術演算を実行する必要があることが一般的である。IEEE-754技術規格は、浮動小数点表現のための様々な形式、例えば、半精度(HP)、単精度(SP)及び倍精度(DP)を定義する(他の形式も利用可能である)。除算又は平方根演算のオペランド及び結果に使用される特定の浮動小数点精度は、結果に対して生成される必要があるビット数を制御することができ、これは、デジット漸化除算又は平方根演算に必要な反復回数に影響を及ぼし得る。
【0063】
従来、浮動小数点レベルの精度を有する結果を生成することができるデジット漸化除算演算又は平方根演算を実行するための回路ユニットは、反復回路ユニットとして実装されているため、ハードウェアで提供される回路論理は、デジット漸化除算演算又は平方根演算の単一の反復に対応し、1つの反復の出力は、その同じ回路ユニットが次の反復を実行する準備ができている、前の反復を実行したまさに同じ回路論理ユニットへの入力としてフィードバックされる。
【0064】
対照的に、以下に説明する例では、各々がデジット漸化除算又は平方根演算のそれぞれの反復を実行することができるいくつかの除算/平方根反復パイプラインステージを含む除算/平方根パイプラインが提供される。デジット漸化除算又は平方根演算の後続の反復を実行するために、除算/平方根パイプラインの後続のパイプラインステージへの入力として、1回の反復で1つのパイプラインステージによって生成された出力を供給するために信号パスが提供される。除算/平方根パイプラインは、浮動小数点オペランドに対してデジット漸化除算又は平方根演算を実行して浮動小数点結果を生成することができる。
【0065】
従って、浮動小数点形式に必要な精度レベルをサポートしながら、除算又は平方根演算は、反復ユニットとしてではなくパイプライン方式で実施される。これは、単一の除算又は平方根演算の処理のために、それぞれの反復が異なるパイプラインステージによって実行され、1つのパイプラインステージからの出力が次のパイプラインステージに入力され、その結果、演算が最後に達するまでパイプラインを移動し、結果を出力することができることを意味する。
【0066】
この手法は直管に反するものとして考えられることができ、一般に命令のパイプライン化は知られているが、他の形式の演算と比較して除算/平方根演算の複雑さがはるかに大きいことは、デジット漸化除算演算又は平方根演算の単一の反復を実行するための単一の回路ユニットの全体的な回路面積が比較的大きいことを意味しており、従って、浮動小数点処理に必要な結果精度を生成するのに十分なステージ数を含むパイプラインに反復ユニットを拡張すると、除算/平方根ユニットに必要な全体的な回路面積が、除算又は平方根演算に必要な最大反復回数に対応する係数だけ大きく増加すると考えるであろう。
【0067】
しかしながら、本発明者は、実際には、反復除算/平方根処理回路を有するプロセッサマイクロアーキテクチャは、利用可能な全帯域幅を増加させるために多数の並列除算/平方根ユニットを実際に提供することができ、それにより、例えば、複数の除算機能ユニット及び/又は複数の平方根機能ユニットが存在することができ、2つ以上の除算又は平方根演算を同時に処理することができることを認識した。パイプライン方式では、除算/平方根ユニット全体を複製する必要性は排除され、これは、除算/平方根パイプラインが、第1のデジット漸化除算又は平方根演算と、第2のデジット漸化除算/平方根演算の前の反復を実行する前の除算/平方根反復パイプラインステージと並行して、第1のデジット漸化除算又は平方根演算の後の反復を実行している、除算/平方根パイプラインの後の除算/平方根反復パイプラインステージで、第2のデジット漸化除算又は平方根演算を実行する、パイプライン方式で複数の演算を処理することができるためである。
【0068】
従って、パイプラインは回路論理を大幅に増加させるように見えるが、実際には、複数の並列除算/平方根ユニットを有する市販のプロセッサと比較して、追加の回路はそれほど重要ではない可能性があり、特に、除算及び平方根演算に共有データパスを使用し、前に説明したのと同じ大きさの正及び負のデジットに対して同じ複製回路ユニットを共有することによって複製回路ユニットの数を減らすなど、回路面積を削減するための本出願で説明した様々な技術を適用することができる。
【0069】
従って、パイプライン全体は、回路面積に関して競合できる可能性があり、そして性能を向上させるのに役立つ可能性があり、なぜなら、演算のパイプライン処理を用いて、パイプライン方式は、デジット漸化除算又は平方根演算を実行するために使用されるサイクルの総数に対して反復回路ユニットがブロックされることを回避することができるので、それらの間でより少ないサイクルで連続の除算又は平方根演算をスケジューリングできるため、より高いスループットが可能になる可能性があるからである。
【0070】
除算/平方根パイプラインが除算又は平方根演算の一方を実行することができるが両方を実行することはできないように、パイプラインが除算又は平方根演算の一方のみを実行することが可能である。
【0071】
しかしながら、パイプラインは、組み合わせた除算/平方根処理回路が両方の演算に使用される共有データパスを提供される場合に特に有用であり得る。従って、各除算/平方根反復パイプラインステージは、除算命令に応答してデジット漸化除算演算の所与の反復を実行し、平方根命令に応答してデジット漸化平方根演算の所与の反復を実行するための組み合わせた除算/平方根処理回路を備える。組み合わせた除算/平方根処理回路は、デジット漸化除算演算の所与の反復とデジット漸化平方根演算の所与の反復との両方に使用される同じデータパス上に少なくとも1つの出力値を生成するための共有回路を備える。組み合わせた除算/平方根処理回路を提供することは、単一の反復ユニットをパイプラインに拡張する全体的な面積コストを制限するのに役立ち(別個の除算ユニット及び平方根ユニットに前に提供された面積予算がパイプラインの実装に利用可能であるため)、回路面積に関してパイプラインが現在のマイクロアーキテクチャと競合できるのに役立つ。先に述べたように、除算/平方根の組み合わせ回路が使用される場合、除算/平方根パイプラインが、デジット漸化除算演算とデジット漸化平方根演算の両方に対して、同じ基数で、処理サイクルごとに同じ回数の反復を実行することは、これが共有回路ユニットのより大きな共有を容易にするので有用であり得る。
【0072】
所与の結果精度について、除算/平方根パイプラインは、デジット漸化平方根演算と同じ数の処理サイクルでデジット漸化除算演算を処理することができる。これは、パイプライン内の回路タイミングの制御を単純化し、除算演算と平方根演算との間の共通回路論理の共有を容易にするのに役立つ。
【0073】
除算又は平方根演算に入力されるオペランド(複数可)及び除算又は平方根演算で生成される浮動小数点結果について、様々な浮動小数点形式をサポートすることができる。例えば、オペランド(複数可)及び結果は、半精度(HP)、単精度(SP)又は倍精度(DP)浮動小数点値であり得る。除算/平方根パイプラインは、これらの形式のうちの少なくとも1つをサポートすることができ、又は他のタイプの浮動小数点形式をサポートすることもできる。しかしながら、除算/平方根パイプラインがSP及びDP浮動小数点値の少なくとも一方をサポートする場合に特に有用である。DP浮動小数点精度で書かれたプログラムは特に一般的である可能性があるため、場合によっては、結果がDP浮動小数点表現である演算をサポートする除算/平方根パイプラインにとって有用であり得る。除算/平方根パイプラインのパイプラインステージは、浮動小数点オペランドの仮数部を処理して浮動小数点結果の仮数部を生成するために使用され得る。浮動小数点値の指数を処理するための別個の回路論理が存在してもよい。指数処理論理は、仮数部を生成するための論理よりも単純であってもよく、除算/平方根結果の指数を生成するための任意の既知の技術を使用することができる。
【0074】
いくつかの例では、除算/平方根パイプラインは、デジット漸化除算又は平方根演算のための少なくとも2つの異なる結果精度をサポートすることができる。例えば、除算/平方根パイプラインは、HP、SP、及びDP浮動小数点値のうちの任意の2つ以上をサポートすることができる。
【0075】
より低い精度の浮動小数点結果精度の場合、除算/平方根パイプラインは、より高い精度の結果を生成するときよりも少ない処理サイクルで除算又は平方根演算を実行することができる(結果のために生成される必要があるビットがより少ないので、デジット漸化法の反復回数がより少なくて済む)。装置は、より高い精度の結果を生成するときにデジット漸化除算演算又は平方根演算の少なくとも1回の反復を実行するために使用される少なくとも1つの除算/平方根反復パイプラインステージを、より低い精度の結果を生成するためにデジット漸化除算演算又は平方根演算を実行するときにバイパスさせるように、除算/平方根パイプラインを制御する制御回路を有することができる。これは、より少ないビットを計算する必要があるときに演算の結果をより早く利用できるようにすることによって性能を向上させる。
【0076】
しかしながら、パイプラインのいくつかのステージをこのようにバイパスさせることを可能にすると、パイプライン方式の高精度演算の後に低精度演算が実行される場合、両方の演算が、デジット漸化除算又は平方根演算の最終反復の出力に対して後処理演算を実行することができる後処理ステージに到達したときに衝突する可能性が生じる可能性がある。例えば、後処理ステージは、除算又は平方根演算の結果の丸めを実行して丸められた浮動小数点結果を提供することができ、及び/又はIEEE規格に従って結果を生成するために右シフトすることによる非正規(部分正規)結果処理を実行することができる(除算又は平方根演算の結果が、通常の浮動小数点数として表すことができる最小数未満である場合)。後処理演算がサイクルごとに単一の演算の最後の反復の出力のみを受信することを保証するために、制御回路は、より精度の高い結果を生成するために実行されるより精度の高いデジット漸化除算/平方根演算の後に、より精度の低い結果を生成するために実行されるより精度の低いデジット漸化除算/平方根演算が所定のサイクル数を開始することを防止することができ、所定のサイクル数は、より精度の高いデジット漸化除算/平方根演算のために少なくとも1つの後処理ステージに到達するのに要したサイクル数と、より精度の低いデジット漸化除算/平方根演算のために少なくとも1つの後処理ステージに到達するのに要したサイクル数との差に対応する。従って、前の高精度演算と後の低精度演算との精度の差によっては、衝突を回避するために、高精度演算の後に低精度演算の開始が禁止されるサイクルが一定回数存在する場合がある。所定のサイクル数は、精度形式の異なる対に対して異なり得る。
【0077】
各除算/平方根反復パイプラインステージは、前の剰余値と比較定数のセットとの間の比較に基づいて、デジット漸化除算又は平方根演算の部分結果値に対して次の結果デジットを選択するためのデジット選択回路を備えることができ、剰余更新回路は、剰余調整値及びデジット選択回路によって選択された次の結果デジットに基づいて前の剰余値を更新する。各パイプラインステージはまた、冗長表現で剰余更新回路によって生成された更新された剰余値の一部の非冗長推定値を生成するための、剰余推定回路などの他の要素を有することができる。また、各パイプラインステージは、デジット漸化法の全ての先行する反復からの前に選択された一連の結果デジットに対応する部分結果値の非冗長バージョンをオンザフライで維持するためのオンザフライ変換回路を有することができる。
【0078】
パイプラインの除算/平方根反復パイプラインステージは全て、同じデジット漸化除算又は平方根演算内で実行されるそれぞれの反復ごとに同じ比較定数のセットを使用することができる。比較定数は、演算ごとに異なる可能性があるが、同じ演算のそれぞれの反復内で、同じ比較定数のセットを使用することができる。従って、除算/平方根パイプラインは、除算/平方根パイプラインの第1の除算/平方根反復パイプラインステージの前に除算/平方根パイプラインの前処理ステージで比較定数のセットを取得するためにテーブルルックアップを実行することができ、比較定数のセットは、同じデジット漸化除算又は平方根演算内の各除算/平方根反復パイプラインステージでテーブルルックアップを繰り返すことを回避するためにステージからステージに渡される。この手法では、各ステージでテーブルルックアップを実行する必要がなく、各ステージで必要とされる回路論理の全体量を減らすことができるため、個々のパイプラインステージごとのタイミングを短くすることができる。各パイプラインステージに設けられたフリップフロップのセットが存在することができ、これらのフリップフロップは、それらの比較定数を更新する必要なく、前のパイプラインステージから受信した比較定数を単に取り込む。これにより、パイプラインが大幅に簡素化され、回路全体の面積が減少する。
【0079】
この手法は、デジット漸化除算又は平方根演算の比較定数は反復ごとに同じであるべきではなく、特に典型的な除算/平方根演算の第1の反復のように、後のステージで使用される定数と比較して異なる比較定数のセットが必要とされ得ると考えられる可能性があるため驚くべきことであり得る。しかしながら、以下に説明する例では、除算/平方根パイプラインは、除算/平方根パイプラインの第1の除算/平方根反復パイプラインステージの前にオペランド前処理を実行するための少なくとも1つの前処理ステージを備え、オペランド前処理は、デジット漸化除算又は平方根演算の結果に対する少なくとも1つの初期結果デジットの選択を含む。初期結果デジットがパイプラインの本体内で選択されないように、前処理ステージで除算又は平方根演算の結果に対して少なくとも1つの初期結果デジットを選択することにより、これはパイプラインの主反復部分の異なるステージで異なる比較定数を必要とすることを回避するために、その結果デジットに対して異なる選択基準のセットを使用できることを意味する。これは、残りの除算/平方根反復パイプラインステージが各々、同じ除算又は平方根演算内で同じ比較定数のセットを使用して、上述したように回路タイミングを改善し、回路面積を削減できることを意味する。
【0080】
しかしながら、除算/平方根パイプラインが、(上述のように除算/平方根回路の組み合わせが提供されている)デジット漸化除算演算とデジット漸化平方根演算の両方をサポートする実装形態における1つの問題は、後続の反復と比較して異なる比較定数のセットを必要とする初期デジットの数が除算演算と平方根演算とで異なり得ることである。例えば、誤差分析により、平方根演算のために十分な精度のデジット選択を得るために、基数8が所与の反復又は部分反復における数字選択に使用される場合、最初の2つの平方根数字の選択は、残りの平方根数字の選択とは異なる比較定数を使用し得ることが分かった。使用される基数が8以外の基数である場合、残りの反復に対して異なる比較定数を使用して選択される初期ルートデジットの数は、2以外の数であってもよい。それにもかかわらず、基数に関係なく、一般に、平方根演算は、特定の数の初期ルートデジットを選択するために異なる比較定数を使用し、それらの初期ルートデジットが選択された後の後続の反復又は部分反復のために同じ比較定数のセットを使用することができる。対照的に、除算演算では、(使用される基数に関係なく)全ての結果デジットの選択に同じ比較定数を使用することができる。しかしながら、性能上の理由から、除算演算に必要な後続のパイプラインステージの数を減らし、従って待ち時間を減らすために、前処理ステージ中に少なくとも1つの結果デジットを選択することが望ましい場合がある。例えば、以下に説明する基数8の例では、第1の除算デジットは前処理ステージで選択されてもよい。
【0081】
従って、前処理ステージで選択される初期のデジットの数は、平方根及び除算演算に対して異なる可能性がある。例えば、少なくとも1つの前処理ステージは、デジット漸化平方根演算の初期結果デジットの数を、デジット漸化除算演算の初期結果デジットの数よりも多く生成することができる。これは明らかに2つの演算間に何らかの非対称性を導入する可能性があるが、実際には、これは、平方根演算の場合、残りのステージの比較定数を各パイプラインステージで別個のテーブルルックアップを必要とせずに1つのステージから次のステージに簡単にラッチすることができることを意味するため、回路全体の面積を削減し、パイプラインの性能を向上させるのに大きく役立つ。
【0082】
しかしながら、少なくとも1つの前処理ステージで除算演算よりも平方根演算の方が多くの初期結果デジットが生成されるため、これは、同じ精度の結果を生成する場合でも、除算演算と比較して平方根演算の前処理ステージの後に必要な残りの反復回数が少なくなることを意味し、そのため、平方根演算の結果は、除算演算と比較して平方根演算のより早い除算/平方根反復パイプラインステージで利用可能であり得る。共有パイプラインが使用されることを可能にするために、制御回路は、少なくとも1つの除算/平方根反復パイプラインステージを引き起こすように除算/平方根パイプラインを制御することができ、これは、デジット漸化除算演算が実行されるときに少なくとも1つの反復を実行するために使用され、デジット漸化平方根演算を実行するときに、結果出力の一部のビットを完全に若しくは部分的にスキップするか、又は破棄する。場合によっては、パイプラインのパイプラインステージ全体を平方根演算のためにスキップすることができるが、他の場合では、使用される浮動小数点精度及びデジット漸化演算に使用される基数に応じて、廃棄する必要がある所与のパイプラインステージで生成されたビットの一部のみであってもよい。例えば、上述した例のいくつかのように、デジット漸化法の所与の反復がより小さい基数の複数の部分反復に分割される場合には、平方根演算のいくつかの結果精度について、ステージ全体をスキップするのではなく、所与の除算/平方根反復パイプラインステージ内の個々の部分反復のみをスキップすることが可能であり得る。また、場合によっては、平方根演算の所与の結果精度に必要な総ビット数が、反復又は部分反復ごとに生成されるビット数の正確な倍数ではない場合、結果の切り捨ては、所与の反復又は部分反復を完全に実行するが、最後に実行された反復又は部分反復で生成された結果デジットの他のビットが依然として必要な場合には、結果の一部のビットを破棄することによって得ることができる。
【0083】
これは、パイプラインの本体を考慮すると、平方根演算の結果を除算演算の結果よりも早く利用できる場合があることを意味するが、演算にかかるサイクルの総数は、平方根演算と除算演算の両方で同じであり得る。例えば、平方根演算の結果がより早く利用可能であっても、値が次のサイクルに変更されずに渡されるときに少なくとも1つのサイクルが存在して、全体の演算タイミングが除算演算のタイミングを反映することを可能にすることができる。これにより、例えば、後処理が実行されている動作に関係なく同じタイミングになる可能性があるため、後処理演算のスケジューリングをより簡単に実施することができる。
【0084】
パイプラインにおいて組み合わせた除算/平方根データパスを使用する場合の別の複雑さは、前に選択された一連の結果デジットに対応する数値の表現を提供する部分結果値の維持にある。共有データパスが使用されるべきである場合、パイプラインの所与のパイプラインステージでデジット漸化法の所与の反復を実行するときに、除算演算と平方根演算の両方について同じビット位置で次の結果デジットを部分結果値に挿入できることが望ましい場合がある。しかしながら、前処理ステージが除算及び平方根演算のために異なる数の初期結果デジットを生成する場合、これは、所与の反復において次の結果デジットが挿入される位置が反復ごとに異なり得ると考えられるため、残りのパイプラインステージで共有回路論理を使用することをより複雑にする可能性がある。
【0085】
従って、デジット漸化除算演算を実行するとき、少なくとも1つの前処理ステージは、選択されたビット位置がダミービット値に設定される部分結果値を第1の除算/平方根反復パイプラインステージに提供することができ、それらの選択されたビット位置は、少なくとも1つの前処理ステージが、デジット漸化平方根演算を実行するときに、デジット漸化除算演算のために生成されない少なくとも1つの追加の結果デジットを挿入するビット位置に対応する。これにより、除算/平方根パイプラインの所与の除算/平方根反復パイプラインステージは、デジット漸化除算演算とデジット漸化平方根演算の両方について、同じビット位置で次の結果デジットを部分結果値に挿入することができる。除算/平方根パイプラインは、デジット漸化除算演算を実行するときに最終結果値からダミービット値を除去するための後処理ステージを含むことができる。
【0086】
これは、除算演算のための部分結果に追加のダミービット値を挿入することは、部分結果値が除算演算における剰余更新又はデジット選択演算に使用されないため、除算演算の全体結果に影響を与えないことを認識する。部分結果値が剰余の更新及びデジット選択動作を制御するために使用されるのは、平方根演算のためだけである。除算演算の場合、部分結果値は、パイプラインの終わりに結果の冗長表現を非冗長形式に変換する必要がないことによって性能を改善するために単に「オンザフライ」で維持されているので、部分結果値が、後処理ステージで除去されるいくつかのダミービット値を一時的に含むことは問題ではない。除算演算に使用される部分結果値にダミービット値を含めることによって、次の結果デジットの挿入が両方の演算について同じ位置にあることを可能にし、両方の演算について回路論理の共有を改善する。
【0087】
上述したような除算/平方根パイプラインは、任意の基数を有するデジット漸化除算又は平方根演算に使用することができる。
【0088】
しかしながら、より低い基数と比較して基数64の演算においてサイクルごとに生成される結果の余分なビット数がパイプラインに必要なパイプラインステージの総数を減らすのに役立つため、除算/平方根パイプラインを使用することは、基数64のデジット漸化除算又は平方根演算に特に有用であり得、その結果、パイプラインは、反復実装と比較した場合に回路面積に関して競合できるようになり得る。
【0089】
一例では、各除算/平方根反復パイプラインステージは、同じ処理サイクルで複数の基数nの部分反復を実行することによって、基数rのデジット漸化除算又は平方根演算のそれぞれの基数rの反復を実行するように構成され、n<rである。より高い基数の反復をより低い基数の複数の部分反復に分割することにより、各パイプラインステージにおける回路の量を低減し、その結果、パイプラインの全体的な回路面積は、性能を改善しながら現在の反復実装と競合することができる。特定の一例では、r=64及びn=8であるが、より一般的には、基数rの反復は、平方根処理回路の例について前述したように、より低い基数の部分反復の異なる組み合わせに分割することができる。
【0090】
オンザフライ変換
入力値を表す複数の符号付きデジットを冗長表現で変換するデータ処理装置であって、複数の反復の各々において、複数の符号付きデジットからの符号付きデジット、及び前の反復からの前の中間データを受信する受信回路と、符号付きデジットに対応するビットと前の中間データのビットとの連結を実行して更新された中間データを生成する連結回路と、更新された中間データを次の反復の前の中間データとして提供する出力回路と、を含み、前の中間データは、非冗長表現でS3[i]を含み、これは非冗長表現で入力値の少なくとも一部に3を乗じたものである、データ処理装置。
【0091】
これらの例では、個々のデジットは符号付きである。従って、入力値(正又は負とすることができる)は個々のデジットで構成され、各デジットは個別に符号が付けられている。このようにして、例えば、入力値の第1のデジットは正であり得、入力値の第2のデジットは負であり得る。これは、入力値を表すために一対のワードが使用される冗長表現として知られる表現形式を提供するために使用することができる。これは、数字が単一のワードを使用して表される非冗長表現とは対照的である。非冗長表現及び冗長表現は各々、特定のタイプの演算に最適であり、従って異なる表現形式間の変換が有用であり得る。変換は、入力値の各デジットが受信されるときにオンザフライで実行され、それによって、全てのデジットが受信された後に全てのデジットが一度に変換される場合に発生し得る大きな待ち時間が回避される。変換プロセスは、迅速に実行することができるビットの連結を使用して達成される。連結されるビットは、符号付きデジットから導出される。中間データのセットは、反復間で維持され、各反復で更新される。実行される連結は、新たに受信された現在のデジットに依存する。特に、中間データはS3[i]を含み、これはS[i](部分結果)に3を乗じたものである。S3[i]の値は、単にS[i]に3を乗算することなく達成され、これは、エネルギー集約的であることは言うまでもなく、新たな符号付きデジットの到着に遅れないようにするには時間がかかりすぎる。ここでは「反復」という用語が使用されているが、参照されている反復は、前述の「部分反復」とすることができることに留意されたい。
【0092】
いくつかの例では、前の中間データはS3[i-1]を含む。これらの例では、前の反復からのS3の値であるS3[i-1]も中間データに維持される。この値は計算する必要はなく、前の反復から持ち越すことができる。このようなデータを提供することにより、変換処理中にいつキャリーが行われるかを調整することができる。
【0093】
いくつかの例では、前の中間データはS3M[i]を含み、これは非冗長表現で入力値の少なくとも一部に3とマイナス1を乗じたものである。言い換えると、S3M[i]=(S[i]×3)-1である。SM3[i]の値は、S3[i]の値から1を減じた値と等価である。
【0094】
いくつかの例では、前の中間データはS3M[i-1]を含む。これらの例では、前の反復からのS3Mの値も中間データに維持される。この値は計算する必要はなく、前の反復から持ち越すことができる。このようなデータを提供することにより、変換処理中にいつキャリーが行われるかを調整することができる。
【0095】
いくつかの例では、連結回路によって実行される連結は、S3[i+1]及びS3M[i+1]を含む更新された中間データを生成するために、S3[i]及びS3M[i]の各々に対する連結を含む。従って、4つの値の各々は、各反復(又は部分反復)で実行される連結を有する。連結は、4つの値の各々について異なり得る。
【0096】
いくつかの例では、符号なしデジットに対応するビットは、S3[i]及びS3M[i]の一方に連結されてS3[i+1]を生成し、S3[i]及びS3M[i]の他方はS3M[i]を生成する。S3[i]及びS3M[i]の一方は、符号なしデジットが0より大きいか0より小さいかに基づいて判定される。これらの例では、符号なしデジットが0より大きいか、0である、又は0より小さいかは、S3[i]又はS3M[i]がS3[i+1]を生成するために使用されるかどうかに影響し、S3[i]及びS3M[i]の他方がS3M[i+1]を生成するために使用される。
【0097】
いくつかの例では、データ処理装置は、符号付きデジットの大きさ及び符号付きデジットが正であるか負であるかに基づいて、連結の前にS3[i]及びS3M[i]のうちの少なくとも1つに対して選択的調整を実行するように構成された調整回路を備える。選択的調整は、例えば、出力値の列間のキャリーを達成するために使用することができる。
【0098】
いくつかの例では、3を乗じた符号付きデジットの大きさが、符号付きデジットが表される基数を超えるときに選択的調整が実行される。選択的調整は、3を乗じた連結されるデジットが変換に使用されている基数よりも大きい状況を処理するために使用することができ、従って、他の位置でデジットをインクリメント又はデクリメントする必要がある。例えば、ベース10と同様に、部分結果S[i]=512を有し、この数(数千)6にデジットを追加することが望ましい場合、これは数S[i+1]=6512を達成するために行うことができる。しかしながら、S3[i]=1536を維持しており、この数(数千)6にデジットを追加することが望ましい場合、3*6=18を追加する必要がある。しかしながら、基数が10であり、18が10より大きいため、これは単一の位置を変更することによって行うことはできない。代わりに、千の数に8を足して9536を与え、次に「1」を1万の数としてキャリーして、19536を与える。
【0099】
いくつかの例では、データ処理装置は、加算回路を使用せずに冗長表現で入力値を表す複数の符号付きデジットを変換するように構成される。特に、S3M[i]の値は、単にS3[i]を取り、(例えば、加算回路を使用して)1を減算することによって導出されるのではない。代わりに、i回の反復にわたる連結(S3[i]及びSM3[i]の各々について異なる数を連結する)を使用してこれらの値を計算することによって、1の減算を実行するために加算回路を使用することによって達成されるよりも低い待ち時間で、これらの数を判定することが可能である。
【0100】
いくつかの例では、データ処理装置は、複数の符号付きデジットを生成するためにデジット漸化演算を実行するためのデジット漸化回路を備え、複数の反復の各々において、複数の符号付き数字のうちの1つが受信回路に提供される。デジット漸化回路を使用して、入力値を構成する一連のデジットを提供することができ、デジットのサブセットは反復(又は部分反復)、例えば各クロックサイクルで提供される。
【0101】
いくつかの例では、デジット漸化回路は、デジット漸化演算が平方根演算である平方根演算モードで動作するように構成される。平方根を計算するためのデジット漸化アルゴリズムは、部分ルートSの乗算を実行し、乗算は加算されるデジットに依存する。部分ルートSは各反復で変化するため、この乗算は反復ごとに実行される。0を乗算すると常に0になる。1を乗算することは、単に恒等関数である。一方、ビットシフトを実行することにより、2の累乗(例えば2又は4)を乗算することができる。同様に、1、2、4の乗算をそれぞれネゲートすることで、-1、-2、-4の乗算を行うことができる。しかしながら、3の乗算は著しく複雑である。3による実際の乗算を実行する乗算回路は、遅すぎる数プロセッササイクルを要する可能性がある。3Xを判定するためのX及び2Xの追加でさえ追加回路を必要とし、これも実行するには時間がかかりすぎる可能性がある。従って、連結を介して達成されるS3の値を維持することにより、効率的に平方根デジット漸化を行うことができる。
【0102】
いくつかの例では、デジット漸化回路は、デジット漸化演算が除算演算である除算演算モードで動作するように構成され、前の中間データは、非冗長表現における入力値の少なくとも一部であるS[i]と、非冗長表現における入力値から1を引いた少なくとも一部であるSM[i]とを含み、複数回の反復の後に、出力回路は、S[i]を出力するように更に構成される、従って、入力値から出力値への変換を実行する同じデータ処理装置を、平方根演算及び除算演算の両方で使用することができる。計算はまた、非冗長表現に変換された入力値の少なくとも一部であるS[i]、ならびにその値マイナス1であるSM[i]の生成を含むことができる。
【0103】
いくつかの例では、連結回路は、除算演算モードにおいて、S3[i]の生成を抑制するように構成される。先に説明したように、S3の値(拡張すると、S3M)は、平方根デジット漸化を実行するときに特に関連性がある。また、デジット漸化除算を行う場合には、部分ルートの乗算を反復ごとに行う必要がないため、S3及びS3Mの生成を行わなくてもよい。従って、除算演算モードにおいてS3及びS3Mの発生を抑制することにより、電力消費を低減することができる。
【0104】
いくつかの例では、デジット漸化演算は、少なくとも8の基数を有する。少なくとも8の基数の場合、利用可能なデジットは、+3と-3の両方ではないにしても少なくとも一方を含む。従って、平方根のデジット漸化アルゴリズムの間、最新のデジットに応じて部分ルートに3又は-3のいずれかを乗算する必要がある場合がある。前述したように、3による乗算は時間がかかる可能性があるため、連結を介してS3及びS3Mを維持することにより、回路のタイミング制約を満たしながら8の基数に対して平方根デジット漸化を効率的に実行することが可能である。
【0105】
いくつかの例では、符号付きデジットの可能な値は、+3及び-3の少なくとも一方を含む。前述のように、符号付きデジットの使用は、2の累乗を伴う乗算よりも実行が困難な3による乗算を必要とする可能性がある。
【0106】
選択定数
いくつかの例では、入力値に対してデジット漸化演算を実行するためのデータ処理装置であって、デジット漸化演算の前の反復の剰余値を受信するように構成された受信回路と、比較回路であって、デジット漸化演算の結果の次のデジットの利用可能なデジットに関連付けられた複数の選択定数の各々と、デジット漸化演算の前の反復の剰余値の最上位ビットとの比較を実行し、比較に基づいてデジット漸化演算の結果の次のデジットを出力する、ように構成され、選択定数の各々は、利用可能なデジットのうちの1つ及び入力パラメータに関連付けられている、比較回路と、選択定数のサブセットを格納するように構成された記憶回路であって、選択定数のサブセットは、利用可能なデジットから除外されたデジットに関連付けられた、選択定数から除外された選択定数を除外する、記憶回路と、を含む、データ処理装置が提供される。
【0107】
デジット漸化プロセスの間、デジット反復演算の次のデジット、すなわち出力される次のデジットを判定するために、前の反復の剰余値の最上位ビットといくつかの選択定数との間で比較が実行される。選択定数の数は、剰余値の最上位ビットの取り得る値の数と、出力デジットが有し得る可能な値の数との積に相当する。例えば、剰余値の6つの最上位ビットが考慮され、各出力デジットに対して8つの可能な値がある場合、選択定数テーブルは8×32=256個の値を保持する。各値はまた、いくつかのビットを占有し得る。また、通常、平方根デジット漸化と除算デジット漸化の両方に対応するためには、複数のテーブルを設ける必要がある。従って、格納される値の数は多い。上記の例では、必要となる選択定数の少なくとも一部が格納されていない。すなわち、サポートされているデジット漸化演算の範囲(考慮される基数及び最上位ビット数に基づく)について、デジット選択処理に必要な選択定数の少なくとも一部は、データ処理装置内のどこにも格納されない。これにより、必要な記憶空間の量を削減することができる。これにより、より小型で低電力の回路が得られる。
【0108】
いくつかの例では、データ処理装置は、記憶回路に格納された選択定数から除外された選択定数を生成するように構成された変換回路を備える。これらの実施例では、データ処理装置に格納されていない欠落又は省略された選択定数は、代わりに、データ処理装置に格納されている他の選択定数から推測又は生成される。
【0109】
いくつかの例では、変換回路は、記憶回路に格納された選択定数のうちの1つの符号に対して選択的反転を実行することによって、除外される選択定数を生成するように構成される。これらの実施例では、省略された選択定数のいくつかは、別の選択定数を取得し、その符号を反転させることによって生成され得る。数(例えば、2の補数を取ることによって)の符号の反転は、効率的に実行することができるため、選択動作を実行するのにかかる時間に影響を与える必要はない。
【0110】
いくつかの例では、選択定数のうちの1つは、同じ入力パラメータと、除外された選択定数として利用可能なデジットのうちの異なるものと、に関連付けられている。従って、選択定数表の2列は、「マージ」され得る。すなわち、剰余値の最上位ビットの所与のセットについて、2つの異なるデジットの選択定数は同じである(符号は、選択定数が生成される数字に従って変化する)。例えば、剰余のビット0.100010の選択定数は、可能な出力デジット+4及び-3に対して「2」であり得る。しかしながら、デジット+4の場合、選択定数は負(-2)であり得、デジット-3の場合、選択定数は負(+2)であり得る。従って、これらの2つの列は、定数が正であるか負であるかに関する規則を用いて1つにマージすることができる。
【0111】
いくつかの例では、記憶回路は、選択定数に対して、除外される選択定数を生成するために選択的反転が行われるべきかどうかを示す例外フラグを格納するように構成される。これらの例では、反転するか否かは例外フラグの値に依存する。反転はまた、例えば選択定数が生成されているデジットに応じて、他の因数にも依存し得る。例えば、剰余のビット0.100010についての前述の例を考慮すると、選択定数は、あるデジット(+4)については正(+2)であり、別のデジット(-3)については負(-2)であり得る。しかしながら、例外フラグはこれをオーバーライドする(両方のデジットが同じ選択定数を有するようにする)か、又はそれを反転する(デジット+4の場合は-2、デジット+3の場合は+2)。
【0112】
いくつかの例では、デジット漸化演算は、平方根デジット漸化演算である。入力パラメータは部分ルートである。
【0113】
いくつかの例では、デジット漸化演算は除算デジット漸化演算であり、入力パラメータは除数である。
【0114】
いくつかの例では、除算演算モードでは、デジット漸化演算は除算デジット漸化演算であり、入力パラメータは除数であり、平方根演算モードでは、デジット漸化演算は平方根デジット漸化演算であり、入力パラメータは部分ルートである。従って、これらの例では、演算モードに応じて、除算デジット漸化と平方根デジット漸化の両方を行う装置を使用することができる。
【0115】
いくつかの例では、除算演算モードでは、デジット漸化演算は除算デジット漸化演算であり、入力パラメータは除数である。平方根演算モードでは、デジット漸化演算は平方根デジット漸化演算であり、入力パラメータは部分ルートであり、各選択定数は、除算デジット漸化演算選択定数であるか、又は、平方根のデジットのデジット漸化演算選択定数である。このようなデータ処理装置は、除算と平方根の両方のデジット漸化を実行することができるが、格納される選択定数は、これら2つの演算モード(除算又は平方根)のうちの1つに固有のものである。2つの演算モードの一方のみに固有の選択定数を格納することにより、データ処理装置の記憶要件を低減することができる。
【0116】
いくつかの例では、選択定数の各々は除算デジット漸化演算選択定数である。これは、除算デジット漸化のための選択定数の全てが格納されているということではなく、単に、格納されている定数が、平方根デジット漸化選択定数を生成するプロセスの一部として使用され得る除算デジット漸化選択定数であるということである。
【0117】
いくつかの例では、変換回路は、除算デジット漸化演算選択定数のうちの1つの符号の選択的反転を実行することによって、除算演算モードにおいて除外選択定数を生成するように構成される。すなわち、除算デジット漸化定数の1つが使用され、いくつかの基準(例えば、定数が関連付けられているデジットの値)に基づいて反転される。
【0118】
いくつかの例では、変換回路は、除算デジット漸化演算選択定数のうちの1つを参照することによって、平方根モードの演算において除外される選択定数を生成するように構成される。
【0119】
いくつかの例では、記憶回路は、平方根演算モードにおける除外される選択定数と除算デジット漸化演算選択定数のうちの1つとの間の複数のマッピングを格納するように構成される。マッピングは、平方根デジット漸化演算選択定数を作成するための基礎としてどの除算デジット漸化演算選択定数を使用するか、及び/又は対応する平方根デジット漸化演算選択定数を生成するために除算デジット漸化演算選択定数の1つをどのように修正するかを示すために使用される。
【0120】
いくつかの例では、記憶回路は、選択定数に対して、除外される選択定数を生成するために選択的反転が行われるべきかどうかを示す例外フラグを格納するように構成される。例外フラグは、除外される選択定数を生成するために反転が発生する状況を示すフラグのセットの一部(又はより大きな値の一部として格納される)とすることができる。
【0121】
いくつかの例では、デジット漸化演算は基数8である。例えば、利用可能なデジットは{-4,-3,-2,-1,0,1,2,3,4}に制限される場合がある。
【0122】
データ処理装置の例
図1は、特定の命令セットアーキテクチャ(ISA)に従って定義された命令の実行をサポートするデータ処理装置2、例えばプロセッサの一例を示す。装置は、命令キャッシュ又はメモリ(
図1には示されていない)からアーキテクチャに従って定義されたプログラム命令をフェッチするための命令フェッチ回路4を有する。フェッチされた命令は、実行されるべき演算を識別するために復号回路6によって復号される。所与の命令に応答して、復号回路6は、その命令によって表される処理演算を実行するように実行ユニット8を制御する制御信号を生成する。所与の処理演算のオペランドをレジスタ10から読み出すことができ、動作の処理結果をレジスタ10に書き戻すことができる。実行ユニット8は、加算器20、乗算器22、除算/平方根ユニット24などの算術ユニットを含む各種の実行ユニットを含んでもよい。実行ユニットはまた、実行されているプログラム内のプログラムフローの非連続的な変更をトリガし得る分岐命令の結果を判定するための分岐ユニット26、及びキャッシュ若しくはメモリからレジスタ10にデータをロードするためのロード命令を実行するか、又はレジスタ10からキャッシュ若しくはメモリにデータを格納するための記憶命令を実行するためのロード/記憶ユニット28などの他のタイプの機能ユニットを含むことができる。
【0123】
以降の例では、処理装置2の除算平方根実行ユニット24の回路論理設計を示す。復号ステージ6により除算命令が復号されると、復号ステージ6は、除算/平方根実行ユニット24を制御して、デジット漸化方式の除算演算を行う。復号ステージ6により平方根命令が復号されると、復号ステージ6は、除算/平方根実行ユニット24を制御して、デジット漸化法による平方根演算を実行させる。
【0124】
後続の例は、除算/平方根実行ユニット24に焦点を当てているが、処理装置2の残りの部分は、任意の既知のプロセッサ設計技術に従って構築されてもよいことが理解されよう。
図1は、データプロセッサの構成要素の簡略化された表現であり、実際には、
図1に示されていない多くの他の構成要素も提供され得ることが理解されよう。
【0125】
デジット漸化除算及び平方根の理論的基礎
デジット漸化は、反復ごとに基数rの結果デジットp(i+1)及び剰余rem[i]を計算する反復アルゴリズムのクラスである。剰余は、次の基数rデジットを取得するために使用される。基数rは2のべき乗であり、各基数rデジットは結果のlog2(r)ビットを表す。除算(x/d)及び平方根
【0126】
【数1】
の計算には、デジット漸化アルゴリズムを使用することができる。
【0127】
反復iの前の部分結果は、以下のように定義される。
【0128】
【数2】
式中、デジットは値p
i∈{-r/2,...,-1,0,+1,...+r/2}を取ることができる。各反復は以下の式によって記述され、
【0129】
【0130】
【数4】
は剰余rem[i]の数ビットの推定値であり、
【0131】
【数5】
はそれぞれ除数d(除算の場合)又は部分結果S[i]の数ビットの推定値である(S[i]は平方根演算の特定の場合の部分結果P[i]である)。選択関数SELに必要な推定のビット数は、基数及び演算に依存する。項F[i+1]は演算ごとに異なり、
【0132】
【0133】
高速反復の場合、剰余はキャリー保留又は符号付きデジット冗長表現に保持される。以下に説明する実装形態では、キャリー保留のような表現を使用して剰余を表すために既知の手法が使用され、ここで、剰余は正のワード及び負のワードで表される(剰余に対応する非冗長2進値は、正のワードから負のワードを減算することによって得ることができる)。
【0134】
一方、式(3)のアルゴリズム収束条件及び乗算時間rのために、剰余は整数部分に数ビットを有する。整数ビット数は基数、デジットセット、及び演算に依存する。
【0135】
次に、反復ごとに、現在の剰余から結果の基数rデジットが取得され、次の反復に対して新しい剰余が計算され、部分結果が更新される。
【0136】
次の結果デジットを選択するための選択関数は、剰余推定値
【0137】
【0138】
【数8】
依存選択定数のセットとの比較を含む。よって、
【0139】
【数9】
ここで、ct(k)及びct(k+1)は、それぞれデジット値k及びk+1の選択定数であり、k∈{-(r/2)+1,...,-1,0,+1,...,+r/2}である。
【0140】
【数10】
の場合、選択されるべきデジットはk=-r/2であると判定され得るので、デジット値k=-r/2に対して選択定数を維持する必要はない。推定に必要なrem[i]及びT[i]のビット数は基数及び演算に依存し、基数が大きいほど推定のビット数が大きくなる。
【0141】
部分的な結果は、基数rの符号付きデジットの冗長表現であり、最上位デジット優先(MSDF)で生成される。これは、反復ごとに非冗長表現に変換される。最も効率的な変換技術は、周知のオンザフライ変換である。基本的に、オンザフライ変換は、デジットpi+1を部分結果P[i]に加算する(式(1)参照)。しかしながら、デジットは負であり得るので、この加算は、キャリー伝搬を生成し得る。この遅いキャリー伝搬を防止するために、結果の別の形式が維持され、PM[i]は以下の値を有し、
PM[i]=P[i]-r-i (6)
この第2の形式を使用すると、連結に関する変換アルゴリズムは次のようになる。
【0142】
【0143】
このようにして、変換に関与する算術演算はなく、P[i]及びPM[i]への値の連結のみであり、連結される値は選択されたデジットpi+1に依存する。
【0144】
デジット漸化アルゴリズムの反復回数は、
it=[n/log2(r)] (9)
nは、丸めに必要なビットを含む結果のビット数である。[...]は、天井関数であるので、[n/(log2(r)]は、n/(log2(r)以上の最小の整数である。
【0145】
サイクル数は、反復回数及びサイクルごとに実行される反復回数に直接関連する。次に、1サイクル当たりm回の反復を考慮すると、サイクル数は次のようになる。
cycles=[it/m] (10)
【0146】
式(1)~(10)は、任意の基数に細分化することができる。次の2つのセクションでは、これらの式は、r=8、除算及び平方根について特殊化される。より高い基数r=64は、2つの基数8の部分反復を重ねることによって得られる。部分反復基数は8である。
【0147】
基数8除算
被除数x及び除数dの浮動小数点除算は、商q=x/dを生成する。基数8の場合、反復iの前の部分商(部分結果)及び反復iで取得されたデジットはそれぞれQ[i]及びqi+1と呼ばれ、式(1)は以下のように書き直すことができる。
【0148】
【数12】
T[i]=dであることを考慮して、デジット計算及び剰余更新は、
【0149】
【数13】
なお、F[i+1]=dであり、剰余の初期値はrem[0]=x/8である。
【0150】
選択関数に関しては、デジット選択に十分な精度の剰余推定を得るために、剰余の10の最上位ビットのみが同化される必要があることが分かった。前述のように、選択定数は除数にも依存する。除数の6つの最上位ビットは、現在の除算の全ての反復に対して8つの選択定数のセットを取り出すために使用される。異なる除数値は、異なるセットを取り出すことができる。なお、定数を選択する前にオペランドが正規化されるため、除数の最上位ビットは常に1である。選択定数はルックアップテーブル(LUT)に格納されている。
【0151】
この実装形態では、式(12)で次の商デジットを選択するために、剰余の10個の最上位ビット(MSB)、3つの整数ビット及び7つの分数ビットのみが必要とされることが判定されている。
【0152】
基数8平方根
オペランドxの浮動小数点平方根は、ルート
【0153】
【数14】
を生成する。反復iの前の部分ルート及び反復iで取得されたデジットは、それぞれS[i]及びs
i+1と呼ばれ(これらは、先に示した一般式においてそれぞれP[i]及びp
i+1に対応する)、基数8の場合、式(1)は次のように書き換えることができる。
【0154】
【数15】
平方根反復は、以下の式によって定義され、
【0155】
【数16】
及び
d[i+1]=F[i+1]=2×S[i]+s
i+1×8
-(i+1) (17)
次いで、
rem[i+1]=8×rem[i]-s
i+1×F[i+1] (18)
(表記d[i+1]は、以下のいくつかの例で使用され、これはF[i+1]と同じ値である)。
【0156】
剰余及び部分ルートの初期値は、それぞれrem[0]=x-1及びS[0]=1.0である。
【0157】
選択関数は、剰余推定値と、デジット値につき1つの定数である8つの部分ルート依存選択定数のセットとの比較を含む。よって、
【0158】
【数17】
cte(k)及びcte(k+1)は、それぞれデジット値k及びk+1の選択定数であり、k∈{-3,-2,-1,0,+1,+2,+3,+4}である。なお、デジット値-4に対して選択定数を維持する必要はない。デジット選択に十分な精度の剰余推定を得るために、剰余の11の最上位ビットのみが同化される必要があることが分かった。
【0159】
選択定数は、部分ルートに依存する。部分ルートの7つの最上位ビットは、8つの11ビット選択定数のセットを取り出すために使用される。異なる部分ルート値は、異なるセットを選び出すことができる。部分ルートは区間[0.5,1]にある;値S[i]=1は、非ゼロデジットが生成されるまで可能であることに留意されたい。従って、部分ルートが1整数ビット(第1の非ゼロ及び負のデジットが生成された後に0である)及び6小数ビットを有し、部分ルートの最小値が0.5であることを考慮に入れると、選択定数は、S[i]∈[0.5,1]についての32個のエントリ及びS[i]=1についての1個のエントリを有する33×88ビットのルックアップテーブル(LUT)に格納することができる(ただし、いくつかの手法で以下に説明するように、オフセットLUTを使用して平方根比較定数の記憶装置のサイズを縮小することができる)。
【0160】
2つの基数8反復を有する基数64の平方根の簡単な実装形態
基数8の反復ごとに、結果の3ビットが生成される。次いで、2つの基数8反復を重ねて、基数64の平方根に相当するサイクル当たり6結果ビットを得ることができる。簡略化した実施態様を
図2に示す。2つの同一の基数8の部分反復が基数64の反復を得るために接続される。剰余の最上位ビットのみが商デジットを選択するために使用されることに留意されたい。11ビットの剰余推定値
【0161】
【数18】
が12ビット加算器30で得られ、剰余推定値を生成する目的で剰余の最下位ビットを廃棄することができる。ルートデジットが取得されると、次の剰余が式(18)で計算され、デジットは実際の部分ルートに連結されて次の部分ルートを取得する。
【0162】
従って、各部分反復において、
● キャリー伝播加算器30は、冗長表現で表される、前の部分反復で生成された剰余値rem[i]31を受け取る。キャリー保留加算器30は、剰余値31の2つのワードの上位ビットのキャリー伝播加算を行うことによって、剰余値31の最上位ビットの一部の非冗長な剰余推定値を生成する(例えば、上述した正及び負のワードを有する表現が使用される場合、負のワードは、正のワードから減算される。)。
● デジット選択比較器32は、剰余推定値を比較定数34のセットの各々と比較して、次のルートデジット33を判定する。
● 剰余調整値生成回路36は、上記の式17に示す「dベクトル」又はd[i+1]項に対応する剰余調整値39を生成する。従って、平方根演算の場合、剰余調整値は、前の部分反復から受信した部分ルート値37と、デジット選択比較器32によって選択された次のルートデジット33とに依存する。「dベクトル」という用語は、単に値のビット数がいくつかの実装形態でベクトルオペランドに使用されるビット数に見合っているため、d[i+1]という用語のラベルとして使用されるが、この用語は、「dベクトル」が複数の独立したデータ要素を含む単一命令複数データ(SIMD)ベクトルオペランドであることを意味するものではなく、「dベクトル」は複数の独立したデータ値のベクトルではなく単一のデータ値であることに留意されたい。
● 剰余更新回路38(3:2キャリー保留加算器を含む)は、その部分反復の前の剰余31になるように次の部分反復に供給される更新された剰余40(まだ冗長表現にある)を生成するために、前の剰余31の正負のワードと剰余調整値39とを加算することによって、剰余調整値39に基づいて、前の部分反復から受信した前の剰余31を更新する。ある部分反復で更新された剰余40を出力することと、次の部分反復の剰余更新回路38内のキャリー保留加算器に前の剰余31を入力することとの間のパスでは、3ビットの左シフトが上記の式18の8×rem[i]項を表すために適用される。
● オンザフライ変換回路42は、選択されたルートデジット33に基づいて判定された値を部分ルート値37に挿入して、後続の部分反復において部分ルート値37になるように出力される更新された部分ルート値43を生成する。オンザフライ変換は、上記の式6~式8に従って行うことができる。従って、簡潔にするために
図2には示されていないが、部分ルート値は、後に連結として行うことができるオンザフライ変換を単純化するために、先に説明したように、2つの別個の形式P及びPMとして表すことができる。
【0163】
ある部分反復からの更新された剰余40及び更新された部分ルート値43は、次の部分反復の前の剰余31及び部分ルート値37になる。同様に、ある反復における最後の部分反復からの更新された剰余40及び更新された部分ルート値43は、次の反復における第1の部分反復の前の剰余31及び部分ルート値37になる。
【0164】
しかしながら、この単純な実装形態は遅すぎる。サイクルを高速化するために、次のセクションで説明するいくつかの技術が使用されている。
【0165】
基数64の平方根反復
図3は、単一の基数64の平方根反復に対応する、デジット反復サイクルを実施するための平方根処理回路を示す。この例では、平方根処理回路は、1つの反復の出力が後続の反復において同じユニットへの入力としてフィードバックされる反復ユニットであり、フリップフロップ50は、サイクルごとに渡される値をラッチする。しかしながら、
図9に関して以下で更に説明するように、平方根処理回路は、パイプライン実装で使用することもできる。
【0166】
平方根処理回路は、いくつかの部分、すなわち(1)剰余更新回路34、(2)デジット選択回路(ルートデジット計算)32、(3)剰余推定回路30を含む。これらの部品間の接続も示されている。以下、これらの各部について詳細に説明する。平方根処理回路はまた、後でより詳細に説明するオンザフライ変換回路42を含む。オンザフライ部分ルート変換は、2つの部分ルート形式S[i]及びSM[i]を保持し、SM[i]は部分ルートS[i]から1を引いたものであり、
SM[i]=S[i]-8
-i (20)
これらの2つの形態は、基数64反復のいくつかの部分で使用される。加えて、
S3[i]=3×S[i]
S3M[i]=S3[i]-8
-i
図13~
図16に関して以下により詳細に説明するように、オンザフライ部分ルート変換にも必要とされる。S3[i]及びS3M[i]を使用すると、±3ルートデジットの乗算の処理が簡単になる。
【0167】
図3に示すように、基数64の反復が2つの基数8の部分反復に分割されると、それぞれの基数8の部分反復に対応する、剰余推定回路30、デジット選択回路32、及び剰余更新回路34の各々の2つのインスタンスが存在するが、以下で更に説明するように、それぞれの部分反復に使用される回路間にいくつかの重複が存在し得る。各基数8の部分反復で得られた基数8のルートデジットを使用してオンザフライ変換を実行するためのオンザフライ変換回路42の2つのインスタンスも存在することができるが、
図3では簡潔にするために、これは単一のブロックとして示されている。
【0168】
剰余の更新
図4は、単一の基数8の部分反復(基数64の反復内の第1又は第2の基数8の部分反復のいずれかであり得る)において剰余更新を実行するための剰余更新回路30をより詳細に示す。サイクルの反復ごとの剰余更新(式16参照)は、推測的に行われる。すなわち、ルートデジットの全ての可能な値に対する更新された剰余値rem[i+1]が計算され、ルートデジットs
i+1が既知になると、正しい剰余が選択される。従って、剰余更新回路30は、次のルートデジットs
i+1の異なるオプションに対応する、更新された剰余の各々の候補出力値をそれぞれ生成するいくつかの複製回路ユニット60を有する。s
i+1=0に対して提供される複製回路ユニット60は存在せず、その理由は、上記の式18は、更新された剰余rem[i+1]が加算なしに以前の剰余値rem[i]から直接取得され得ることを意味するからである。前の剰余推定値の符号は、推測的剰余の数を減らすために使用される。剰余推定が正である場合、ルートデジットは{+4,+3,+2,+1,0}のみとすることができる。一方、剰余推定が負である場合、ルートデジットは{-4,-3,-2,-1,0}のみとすることができる。
【0169】
従って、各複製回路ユニット60は、キャリー保留加算器38と、以前の部分反復又は反復から受信された以前の剰余推定値の符号に応じて、同等の大きさの正及び負のルートデジットについて論理ブロック64内で計算された代替値の間で選択するための選択マルチプレクサ62とを有する。これにより、必要な複製されたユニットの数が減少する(4つの複製回路ユニット60は、各正/負のデジットを別々に処理するために8を必要とする代わりに、デジット±1、±2、±3、±4にそれぞれ対応するのに十分である)。
【0170】
複製回路ユニット60は、0以外の全てのルートデジット値、正値及び負値の両方についてベクトルd[i+1](F[i+1]と呼ばれることもある)を構成する。
【0171】
【数19】
式21は加算を示しているが、これは実際には、各大きさ1、2、4のそれぞれの正負デジットに必要な剰余調整値の値を形成するための論理64への入力に示されているように、2
*S[i]又は2
*SM[i]と、ビット0001,1111,0010,1110,0100,1100のパターンとの連結として実施できることに留意されたい。
【0172】
従って、
図4には、各可能なd[i+1]ベクトルのオンザフライ計算で連結されるデジットのビットが示されている。マスクmask[i]は、ルートデジットが連結されなければならない位置をシグナリングする(マスクは、各連続する基数8のルートデジットが、前の基数8のルートデジットが挿入された位置よりも3ビット低い位置で連結されるように、部分反復間で3ビットだけシフトされる)。
【0173】
x=1,2,3,4である、fda_pos及びfda_negとラベル付けされたブロック64は、それぞれ|si+1=a|である正又は負のデジットに対応する値を有する2*S[i]又は2*SM[i]の連結を実行して、式21に従ってdベクトルd[i+1]を表し、また、-a×d[i+1](上記の式18における項-si+1×F[i+1]に対応する)を評価して、dベクトルfd1、fd2、fd3、fd4を生成する。
【0174】
なお、漸化式では、d[i+1]にsi+1を乗算する。3X乗算を防止するために、si+1=±3の場合は異なって処理され、3×d[i+1]は、次のように3×S[i]を直接使用してブロックfd3_pos又はfd3_negによって構築される。
3×d[i+1]=2×(3×S[i])+(3×si+1)×8-(i+1) (22)
【0175】
この場合、|3×si+1|=9を連結し、これは表示に4ビットを必要とする。これは、3×S[i]の1ビット左シフトが追加ビットの余地を残すため、問題ではない。次いで、
【0176】
【数20】
S3[i]及びS3M[i]のメンテナンスについては、
図14及び
図15に関して以下で更に説明する。s
i+1=±3の候補値について、連結するビットパターンは、s
i+1=+3については1001、s
i+1=-3については0111として示される。ここでも、マスクは、連結されたビットを挿入する位置をシグナリングする。
【0177】
剰余推定符号は、3対2のキャリー保留加算器38の前に設定された正又は負のd[i+1]を選択するために使用される。このようにして、結果として、9の代わりに5つの推測的剰余のみが計算される。
【0178】
剰余推定符号の逆数は、推測的剰余キャリーワードの最下位ビットに配置されるため、剰余推定符号が1である場合、推測的剰余キャリーワードの最下位ビットは0であり、剰余推定符号が0である場合、推測的剰余キャリーワードの最下位ビットは1である。これは、式(18)に示すように、デジットが正である(剰余推定符号が0である)場合、項s
i+1×F[i+1]を減算する必要があるためである。減算は、s
i+1×F[i+1]の2の補数を計算しなければならないことを意味する。2の補数は、項s
i+1×F[i+1]をビット補数をとり、1を加算することによって得られる。例えば、11100010の2の補数は00011101+1=00011110である。従って、この項は、
図4のfd1_pos、fd2_pos、fd3_pos、及びfd4_posモジュールにおいてビット補数がとれら、「+1」は、定義上0であるキャリーワードの最下位ビットを1に変更することによって追加される。このようにして、2の補数の計算を終了するために追加の加算器を必要としない。デジットが負である(剰余推定符号が1である)場合、式(18)の演算は加算であるため、2の補数を行う必要はないため、キャリーワードの最下位ビットは0に保たれる。従って、要約すると、剰余推定符号の逆数は、キャリーワードの最下位ビットに配置される。
【0179】
複製回路ユニット60によって提供されるこれらの推測的剰余の中には、追加のハードウェアを必要としないので、デジットsi+1=0のブロックfda_pos及びfda_negに相当するものはなく、次のルートデジットsi+1がデジット選択回路68によって判定されると、正しい候補出力値を選択するための選択回路として機能するマルチプレクサ32における追加の入力のみである。
【0180】
各キャリー保留加算器38は、冗長に表された以前の剰余rem[i]の正のワード及び負のワードである2つの項と、fd1-fd4で表される式(18)の-si+1×F[i+1]の項である第3の項との3つの項のキャリー保留加算を行う。各キャリー保留加算器38の出力は、更新された剰余rem[i+1]として選択するための候補値であり、これは依然として冗長表現にあり、従って正及び負の2つの項を含む。ルートデジット=0の場合のように、候補値が単に8*rem[i]に等しい場合のように、キャリー保留加算器38は存在しないので、加算は不要である。選択回路として機能する5:1マルチプレクサ68は、ルートデジット選択回路32によって選択されたルートデジットsi+1に応じて候補出力値の間で選択して、更新された剰余rem[i+1]を提供する。
【0181】
剰余推定値
図5は、第1及び第2の部分反復の剰余推定回路30を示す。剰余推定は、ルートデジット選択に用いるための剰余の11の最上位ビットの早期の推測的計算である。これにより、剰余推定がルートデジット計算を通るクリティカルパスから除去されるため、より良いタイミングを得ることができる。
【0182】
2つの異なる状況が示されている。
1. サイクル内の第2の部分反復におけるデジット選択に使用される剰余推定値を生成するための、第1の部分反復における剰余推定値。これは、
図4に示すように、第1の部分反復の剰余更新回路34によって取得された推測的剰余に基づいて、第1の反復中に行われる。従って、5つのキャリー伝播加算器70は、合計の最上位ビットと、第1の部分反復の剰余更新回路34によって取得された推測的剰余(rem
d4[i+1]からrem
d1[i+1]、及びrem[i])のキャリーワードを加算する。ルートデジットs
i+1が既知である場合、サイクルの第2の部分反復におけるルートデジット選択のための適切な剰余推定値がマルチプレクサ72によって選択される。従って、これは、複製回路ユニット70及び選択回路72を含む複製回路の別の例である。
2. 次のサイクルの第1の部分反復でデジット選択に使用される剰余推定値を生成するための、第2の部分反復における剰余推定値(第2の反復で剰余推定回路30によって出力される値は、
図3に示すように、次のサイクルで使用する準備ができているフリップフロップ50でフロップさせることができる)。第2の部分反復で剰余推定回路30によって生成される剰余推定値は、8×rem[i+2]の最上位ビットの同化であり、これは、第1の部分反復での前の剰余値として入力されたrem[i]から以下のように導き出すことができる(式18を使用してrem[i+2]からrem[i+1]の関係でrem[i+1]を、rem[i+1]をrem[i]に関係付ける式18の別のインスタンスで置き換えることに基づいて)。
【0183】
【0184】
これは、サイクルにおける第1及び第2の反復中に次のように計算される。
msb-first=64×(8×rem[i]-si+1×d[i+1]) (25)
及び
msb-rem[i+2]=msb-first-8×si+2×d[i+2] (26)
式中、式(25)は第1の部分反復中に評価され、式(26)は第2の部分反復中に評価される。両式は、5つの剰余候補について推測的に評価される。
【0185】
なお、式(18)と式(25)との差は、64X因子であり、6ビットの左シフトである。次に、17ビット加算器が2つの12ビット加算器の代わりに使用される場合、両方の式を同じ論理で評価することができ、11の最上位ビットは、サイクルの第2の部分反復でデジット選択に使用するために第1の部分反復で計算された剰余推定であり、13の最下位ビットは、式(26)の次のサイクルの第1の部分反復でデジット選択に使用される剰余推定値を取得するために、第2の部分反復中に剰余推定計算を完了するために使用される。
【0186】
従って、この手法では、第1の部分反復における加算器70は、第2の部分反復におけるデジット選択に使用される剰余推定値において実際には必要とされないいくつかの追加の(最下位の)ビットを計算するが、これらの追加のビットを計算することによって、これは、上に示した項msb_firstが第1の部分反復において計算されることを可能にし、別個の加算器が第2の部分反復においてこれらのビットを計算した場合と比較して回路全体の面積を減少させる。
【0187】
第2の部分反復のための剰余推定回路内の加算器74は、方程式26を評価し、これはmsb_firstと、d-vectors 0,fd1[i+2]~fd4[i+2]に依存し、これはs
i+2=0,s
i+2=±1~s
i+2=±4である方程式内の項8×s
i+2×d[i+2]にそれぞれ対応する。これらのベクトルは、サイクルの第2の部分反復において剰余更新回路34の一部として生成される(
図4のfd1~fd4参照)。この手法は、第2の部分反復のために剰余推定回路34内のキャリー伝播加算器74によって加算を開始する前に、第2の部分反復の剰余更新回路30内のキャリー保留加算器38がそれらの加算を実行するのを待つ必要がないことを意味する。代わりに、第2の部分反復における更新された剰余推定値の計算は、クリティカルタイミングパスから待ち時間を除去するために、第2の部分反復における剰余更新と並行して実行することができる。これにより、性能が向上する。
【0188】
ルートデジット選択
図6は、デジット選択回路32(基数64の反復内の第1又は第2の基数8の部分反復のいずれかであり得る)によって実行されるルートデジット計算を示す。ルートデジットの計算は前に概説されており、剰余推定値は、8つの比較定数の各々と比較され、数字は、式(19)に従って選択される。ルートデジットは、1-hot 9ビットベクトs[i],i=8,...,0として格納され、デジット=i-4の場合、s[i]=1であり、例えば、ルートデジットが-1である場合、s[3]=1であり、9ビットベクトルはs={0,0,0,0,0,1,0,0,0}である。
【0189】
これを
図6に示す。剰余推定値を各比較定数と比較するための11ビット比較器80のセットが存在する。各比較器のキャリー出力ge-outputは、剰余推定値が比較定数よりも大きい場合に1に設定される。次に、剰余推定値のge出力及び符号が、1hot 9ビットのベクトルの各ビットを生成するために、nand及びorゲートのセットに入力される。
【0190】
ルート選択に必要な選択定数は、ルックアップテーブル(LUT)に格納されている値から導出される。各基数8の反復の選択定数は、各部分反復が異なる比較定数のセットを使用するように、その部分反復の前の部分ルート値に依存する。しかしながら、最初の2つの部分反復を除く全ての部分反復に対して同じ選択定数のセットを使用できることが導出されている。
図9のパイプライン化された例に関して以下で更に説明するように、最初の数ルートデジットの選択は、前処理ステージで行うことができ、これにより、同じ選択定数を各反復に使用することができるため、別個のLUTルックアップを行う必要がある主反復サイクルを回避することができる。
【0191】
統合する
デジット漸化平方根処理サイクルのブロック図を
図7に示す。異なる部分(剰余更新回路34、剰余推定回路30、ルートデジット選択回路32、及びオンザフライルート変換42)は、点線で識別される。また、これらの各部の関係も図示している。
【0192】
より詳細に先に示したように、サイクル論理のいくつかの部分は、タイミング制約を満たすために推測及び複製を使用する。従って、複製はいくつかの場所で使用され、各デジット値の推測的な結果が得られる。ほとんどの場合、正のデジット値及びその負の対応するものに対して同じ論理を有するように、剰余の符号を使用することによって複製が削減される。このようにして、論理は9回ではなく5回複製され、大幅な面積削減が得られる。ルートデジットが分かれば、9又は5個の推測的な値の中から正しい値が選択される。
【0193】
いくつかの部分では、第1及び第2の部分反復における剰余更新ならびに第2の部分反復における剰余推定値と同様に、論理は4回だけ複製されるが、選択は5対1のmuxで行われる。これは、muxへの入力の1つが、複製された論理への入力の1つであるためである(従って、推測的候補値の新しい値を計算するために複製回路ユニットを必要としない)。
【0194】
従って、
図7は、
図1の除算/平方根ユニット24に使用することができる平方根処理回路の一例を示す。いくつかの例では、除算/平方根ユニット24はまた、平方根処理回路と除算処理回路との間で回路及びデータパスを共有することなく、除算命令に応答して除算演算を実行する除算処理回路の別個のインスタンスを備えることもできる。
【0195】
しかしながら、
図8に関して以下で更に説明するように、いくつかの例では、平方根処理回路について上述した技術は、除算演算を実行することもできる組み合わせた除算/平方根処理回路で使用することができ、この場合、組み合わせた除算/平方根処理回路は、前述の「平方根処理回路」としても機能する。
【0196】
共有除算及び平方根反復のための基数64の組み合わせた除算/平方根処理回路
図8は、基数64除算/平方根反復を実行するための組み合わせた除算/平方根処理回路の一例を示し、これは
図1の除算/平方根ユニット24の一部として提供することができる。組み合わせた除算/平方根処理回路は、共有回路及び共有データパスを使用して、両方とも同じ基数64で除算及び平方根演算の両方を実行する。除算及び平方根演算の両方について、サイクルごとに同じ数の基数64の反復が実行される(この例では、除算演算と平方根演算の両方について、1サイクルごとにデジット漸化法の単一の基数64の反復が実行される。)。上記の平方根の例に関して、この例では、基数64の反復は、2つの重複する基数8の部分反復に分割される。組み合わせた除算/平方根処理回路は、現在の演算が除算演算であるか平方根演算であるかを示す信号「div/sqrt」を入力として受信する。この信号は、処理されている命令が除算命令であるか平方根命令であるかに基づいて、命令デコーダ6によって制御することができる。
【0197】
組み合わせた除算/平方根処理回路は、平方根の例について
図3~
図7に関して前述した全ての構成要素を含み、従って、前述と同じ方法で平方根演算を実行する。この回路の多くは除算演算にも再利用することができるため、平方根演算のための更新された剰余rem[i+1]、rem[i+2]、剰余推定値rem_est[i+1]、rem_est[i+2]、及び部分結果値S[i]、SM[i]を生成するためのデータパスはまた、除算演算のための対応する値を生成するために使用される(除算演算が行われるときに部分結果値にQ[i]、QM[i]という表記が使用されるが、これは平方根演算のために生成された部分ルート値S[i]、SM[i]と同じデータパス上にある)。
【0198】
図8は、基数64除算/平方根反復のマイクロアーキテクチャを示す。基数64の反復を形成する2つの基数8の部分反復は分離され、最上部の第1の部分反復及び最下部の第2の部分反復である。2つの反復は非常に類似しているが、後で対処されるいくつかの違いがある。
【0199】
上記の式(1)及び(3)で述べたように、反復i後の結果は、部分結果P[i](部分商Q[i]又は部分ルートS[i]であり得る)及び剰余rem[i]によって定義される。次に、各反復はいくつかのステップを含む。
【0200】
1. デジット選択
フル精度値の代わりに低精度推定値を使用して、剰余及び除数(除算における)又は部分ルート(平方根における)から新しい結果デジットが生成される(式(2)を参照)。従って、組み合わせた除算/平方根ユニット24は、各基数8の部分反復について、前の剰余推定値rem_est[i]、rem_est[i+1]と比較定数のセットとの比較に基づいて、除算/平方根結果の次の基数8のデジットを選択する共有デジット選択回路32を含む。剰余推定ワード長は、除算及び平方根で異なる。
【0201】
図6の平方根の例について既に上述したように、デジット選択は、剰余推定値を8つの選択定数のセットと比較することによって行われる。このセットは、除数又は部分ルートの最上位ビットに依存する。比較定数セットは、(以下で更に説明するように)除数又は部分平方根の最上位ビットでアドレス指定されるルックアップテーブル(LUT)に格納される。基数8の除算及び平方根アルゴリズムの誤差分析は、比較定数のビット数及び剰余推定値が、2つの演算、すなわち、平方根で11ビット及び除算で10ビットにおいて異なることを示している。しかしながら、11ビットの剰余推定値が除算と平方根の両方に使用される場合、両方の演算を同じ論理に配置することができる。この場合、除算用の比較定数は、最下位ビット位置に0を配置することで11ビットに拡張される。このようにして、第1及び第2の部分反復における剰余推定論理30及びデジット選択回路32は、除算と平方根との間で共有される。
【0202】
従って、デジット選択のための比較は、除算演算及び平方根演算の両方のために同じセットの比較器80を用いて実行される。デジット選択回路32の演算は、11ビット剰余推定値と比較するために異なる比較定数のセットを受信することを除いて、(平方根について
図6に関して前述したように)除算及び平方根演算の両方について同じである。
【0203】
2. 剰余の更新
そのように生成された結果デジットは、剰余及び部分結果を更新するために使用される(式(1)及び(3))。従って、共有剰余更新回路34は、所与の基数8の部分反復において、剰余調整値に基づいて以前の剰余値rem[i]、rem[i+1]を調整して、冗長表現内の更新された剰余値rem[i+1]、rem[i+2]を生成するために、各部分反復において提供される。
【0204】
図4で前述した平方根の例に関して、複製回路ユニットは、選択された結果デジットの異なる可能な値の候補剰余値を生成するために提供され(必要な複製量を減らすために、前述したのと同じ大きさの正/負のデジット間で回路を共有して)、次いで、5:1マルチプレクサ68は、デジット選択回路32によって選択された次の結果デジットに応じて候補値のうちの1つを選択する。キャリー保留加算器38及びfd計算ユニット64は、
図4と同じである。
【0205】
しかし、式(4)に示すように、剰余更新で用いられる剰余調整値(F[i+1]項)は、除算と平方根とで異なる。平方根の場合、F[i+1]は、ルートデジットsi+1をシフトされた部分ルートに連結することによって得られる。これは、F[i+1]がfd計算ユニット64によって反復ごとに計算されることを意味する。しかしながら、除算F[i+1]の場合、反復間で変化しない除数dである。
【0206】
そこで、XORゲート90を加算することで、(式4に示すようにF[i+1]=dとした場合に)除算演算を行ったときに生じる式(3)の-pi+1×d項を生成する。1つのXORゲートは、-1による乗算を提供するために、除数dを前の剰余推定値rem_est[i]、rem_est[i+1]の符号の逆とXORする。言い換えれば、除算の場合と同様に、剰余更新は、+d又は-dの倍数を使用する。正の剰余の場合、除数は、除数の負の倍数を得るために補数がとられる。±2及び±4のルートデジットに対応する候補剰余値を計算する複製されたユニットについて、1ビット又は2ビットの左シフトがXORゲートからのパスに適用されて、式(3)で必要とされるpi+1による乗算を表す。平方根に関しては、3倍(高速反復を有するために、反復の前に3×d乗算が事前計算される)を行う必要性を回避するために、除数3xdの3倍の別個の表現が使用され、そのため、第2のXORゲートは、同様に、±3ルートデジットの候補剰余を計算している複製回路ユニットに入力を提供するために、前の剰余推定値の符号の逆で3xdをXORする。
【0207】
平方根の例について
図4に示す2対1マルチプレクサ62は、除算又は平方根の適切なF[i+1]値を選択するために、
図8の3対1マルチプレクサ62のセットで置き換えられる。各3:1マルチプレクサ62は、演算種別信号div/sqrtが除算演算を行うことを示している場合には、XORゲート90から受け取った対応する値を、その除数に基づいて選択する。演算タイプ信号div/sqrtが、平方根演算が実行されることを示す場合、
図4について先に説明したように、fd1~fd4計算ブロック64によって生成されたdベクトル値のうちの関連するものが、前の剰余推定値の符号に基づいて選択される。従って、3:1マルチプレクサ62は、基数64の除算演算の一部として所与の基数8の部分反復を実行するときに除数値dから導出される値、又は基数64の平方根演算の一部として所与の基数8の部分反復を実行するときに、前に選択された一連の基数8のルートデジットに依存する部分ルート値から導出される値のいずれかを剰余調整値として選択する選択回路として機能する。両方の動作の間のキャリー保留加算器38及び5:1マルチプレクサ68の共有は、回路面積の節約を提供する。
【0208】
3. 剰余推定値
剰余推定値は、次の部分反復におけるデジット計算に使用されるように取得される。従って、所与の基数8の部分反復において、所与の基数8の部分反復において剰余更新回路30によって冗長表現で生成された更新された剰余値rem[i+1]、rem[i+2]の一部の非冗長推定値である更新された剰余推定値rem_est[i+1]、rem_est[i+2]を生成する共有剰余推定回路34がある。剰余推定回路30は、平方根演算について
図5で前述したものと同じである。再び、第2の基数8の部分反復において、剰余推定回路30は、更新された剰余値rem[i+2]を生成する剰余更新回路34と並列に、更新された剰余推定値rem_est[i+2]を判定する。
【0209】
4. オンザフライ変換
部分結果P[i](商Q又はルートS)は、オンザフライ変換(式(7)及び(8))を使用して、符号付きデジット冗長表現から従来の2進非冗長表現に変換される。典型的なオンザフライ変換方式では、部分ルートは平方根演算のための次のデジット選択及び剰余更新で使用されるが、部分商は除算演算のためのものではないという事実は、異なる部分商更新及び部分ルート更新方法に導かれる。この差を以下に示す(デジット
【0210】
【0211】
【0212】
除算の場合、新しいデジット(基数8の3ビット)が生成されるたびに、典型的な方式では、実際の部分商は左シフトされ、新しいデジットは3つの最下位ビットとして配置される。このようにして、実際の部分商は常に左有意部分にある。前に挿入されたビットは、より上位のビット位置に左にシフトされる。一方、平方根の場合、部分ルートの最上位ビットが常に格納されたデータ値の最上位部分にあるように、新しいルートデジットが実際の部分ルートに連結され、マスクmask[i]、mask[i+1]が、平方根演算について前述したように次のデジットを連結しなければならない位置の記録を保持するために使用される。
【0213】
除算と平方根との間でオンザフライ変換論理を共有するために、部分ルート更新に対して行われるように部分商更新を実行することが判定されている。すなわち、マスクを使用して新しい商デジットを連結して、デジットが連結されなければならない位置を示す。これは従来とは異なるが、データパス及び回路論理の共有の増加が可能であることを意味する。
【0214】
従って、第1の部分反復では、共有オンザフライ変換回路42は、除算演算と平方根演算の両方について、マスクmask[i]に基づいて部分結果値Q[i]、QM[i]、S[i]、SM[i]に次のデジットを挿入するための位置を選択する。同様に、第2の部分反復では、共有オンザフライ変換回路42は、除算演算と平方根演算の両方について、マスクmask[i+1]に基づいて、部分結果値Q[i+1]、QM[i+1]、S[i+1]、SM[i+1]に次のデジットを挿入するための位置を選択する。マスクは、各結果デジットが前のものの右に3ビット挿入されるように、部分反復ごとに3ビットだけ右にシフトされる。
【0215】
図7について前述した平方根の例に関して、組み合わせた除算/平方根処理回路は、1回の反復で生成された「i+2」とラベル付けされた出力が、平方根又は除算演算の次の反復のために「i」とラベル付けされた入力としてフィードバックされる反復ユニット、又は
図9に関して以下で更に説明するようなパイプラインユニットのいずれかで使用することができる。
【0216】
除算/平方根パイプライン
従来の除算及び平方根の実装の長い待ち時間、ならびに除算及び平方根のための別々の論理を有するその各ステージの複雑さは、市販のプロセッサにおけるパイプライン化された浮動小数点除算及び平方根ユニットの使用を妨げる。代わりに、市販のプロセッサは、論理の一部が数サイクルにわたって使用される反復ユニットを有し、低帯域幅設計をもたらす。典型的な方式では、反復論理は、除算反復及び平方根反復の2つの分離された部分で構成され、両方の演算間で共有される論理は、存在するとしてもごくわずかである。帯域幅を増加させるために、並列に動作するいくつかの反復div/sqrtユニットが配置される。例えば、1つの設計は、倍精度、単精度及び半精度演算を行う2つの反復浮動小数点div/sqrtユニットと、単精度及び半精度演算を行う2つの他のより小さい反復ユニットとを有する。このようにして、倍精度のdiv/sqrt帯域幅は2倍になり、一方、単精度及び半精度の除算及び平方根の帯域幅は、div/sqrt反復ユニットのみを有する構成に対して4倍になる。
【0217】
図9に示す手法では、代わりに単一のパイプライン式div/sqrtユニット24が提供される。そのようなユニットの使用を妨げる欠点を克服するために、本発明者らは、両方の演算間で共有されるいくつかの他の論理に加えて、低待ち時間除算及び平方根の実装ならびに除算及び平方根の共通ステージを開発した。低待ち時間は、1サイクル当たり2回の基数8反復で基数64のデジット漸化除算及び平方根アルゴリズムを実装することによって達成される。このようなアルゴリズムは、先に説明したようにサイクルごとに6ビットの結果を生成する。一方、手落ちのないステージ設計と共に、除算及び平方根のための同じアルゴリズムを有することにより、面積要件を低減することが可能になる。その結果、我々は、相対的に小さい面積で、倍精度、単精度、半精度のパイプライン式浮動小数点div/sqrtユニットを設計することができた。2つの倍精度/単精度/半精度ユニット及び2つの単精度/半精度ユニットを用いて上述した代替構成と比較して、帯域幅は、倍精度及び単精度については大幅に改善され、半精度についてはより緩やかに改善されるが、パイプラインユニットの回路面積は、代替構成の総面積よりも小さくすることができる。従って、パイプライン式ユニットは、低待ち時間と高帯域幅とを組み合わせて、高性能div/sqrtユニット24を得ることを可能にする。
【0218】
図9に示すように、パイプラインユニット24は、前処理回路100と、デジット漸化反復を実行するためのパイプラインの本体102と、後処理回路104とを含む。前処理及び後処理論理は、ほとんどが除算と平方根との間で共有され、反復部分、デジット反復は、いくつかのパイプライン化された基数64の共有ステージ110に展開される。
【0219】
前処理回路100は、オペランドのアンパッキング、オペランドの正規化(必要な場合)、及び初期化(例えば、比較定数を検索し、1つ以上の初期結果デジットを選択する)を含む様々な前処理動作を実行する。
【0220】
パイプラインの本体102は、デジット漸化アルゴリズムの反復部分であるデジット反復を実行する。パイプラインの本体102は、いくつかの除算/平方根パイプラインステージ100を備え、その各々は、
図8に示す組み合わせた除算/平方根処理回路のインスタンスを含む。従って、本体102内の各パイプラインステージ110は、基数64のデジット漸化浮動小数点除算演算、q=x/d、又は基数64のデジット漸化平方根演算、
【0221】
【数23】
の単一反復を実行する。除算/平方根のエネルギー及びタイミング効率の良い実装を得るために、基数64の反復は、前述のように2つのより単純な基数8の反復を重ねることによって得られる。
【0222】
後処理回路104は、丸め論理と、部分正規結果(除算のみ)の場合の右シフトとを含む。
【0223】
パイプラインユニットは、それぞれ倍精度、単精度、及び半精度(DP、SP、HP)の3つの異なる浮動小数点精度を処理し、異なる精度の演算に対して除算又は平方根演算の異なる待ち時間をもたらす。それにもかかわらず、所与の精度では、待ち時間は、後処理ステージのタイミングの単純なスケジューリングのために、除算及び平方根の両方について同じである。
【0224】
結果を生成するための入力オペランドx、dの仮数部の処理に焦点を当てたパイプラインのより詳細な説明を以下に説明する。入力オペランドx、dの指数も処理されることが理解されよう。これは任意の既知の技法に従って行うことができる。例えば、除算の場合、結果指数は、部分正規表現処理に必要な後処理ステージでの任意の右シフトに対して調整された、入力オペランドx、dの真の指数間の差に対応し得る。平方根演算の場合、結果指数は、入力オペランドxの真の指数の半分に対応することができ、これも適用される任意の正規化に対して調整される。ここで、「真の指数」とは、(使用されている浮動小数点精度に従って適用される指数バイアスを除去した)浮動小数点数の指数によって表される2の有効べき乗を指す。
【0225】
前処理(V1,V2)
前処理回路100は、符号、仮数部及び指数を抽出するための浮動小数点オペランドのアンパッキング、特別な条件(部分正規、0,...)の判定、オペランドの正規化(例えば、部分正規を処理する)、及びデジット選択に必要な選択定数を取得するためのルックアップテーブル(LUT)アドレス指定を含む前処理を実行する。2つの部分正規オペランドで除算する場合、両方のオペランドは同じサイクルで正規化される。
【0226】
更に、第1の基数8のデジットが取得される。浮動小数点除算では、第1のデジットは値{+1、+2}のみを取ることができ、商の整数デジットである。浮動小数点数の平方根では、第1の基数8のデジットは値{-4,-3,-2,-1,0}を取ることができ、その計算は剰余及び部分ルートの初期化と容易に融合される。
【0227】
平方根の場合、第2のデジットも取得される。前述したように、LUTは、デジット選択に必要な選択定数を格納する。しかしながら、平方根の場合、各基数8の反復の選択定数は、各反復が異なる比較定数のセットを使用するように、その反復の前の部分ルート値に依存する。これは、反復論理がLUTを含むべきであり、新しい反復が開始するたびにそれを読み取るべきであるため、タイミング及び領域に厳しい制限を課す。しかしながら、(誤差解析により)基数8の平方根において、最初の2回の反復を除く全ての反復に対して同じ選択定数のセットを使用できることが導出されている(最初の2回の反復後に同じ選択定数のセットが使用されても、結果に十分な精度を与える)。従って、このステージで第2のルートデジットが取得され、その後LUTが読み取られ、そのようにして取得された選択定数のセットは、残りの反復におけるデジット選択に使用されるためにフロップされる。
【0228】
除算の場合、いくつかの他の動作が実行される。単精度での反復を節約するために、商qはq∈[1,2)であるように強制される。なお、q<1はx<dの場合のみである。この状況は、q=2×x/dかつq∈[1,2)となるように1ビット左シフトされた場合に、前処理及び被除数において検出される。もちろん、仮数はx/dと同じであるが、指数はデクリメントされる必要がある。最後に、3×d=2×d+dが基数8の反復で使用されるように計算され、各反復で計算される3x倍数が必要とされることを回避し、時間を節約する。
【0229】
前処理ステージは、オペランドのアンパッキング、分類及び正規化、ならびに第1のルートデジット(平方根)がV1で行われるように、V1及びV2の2つのサイクルに除算される。一方、V2では、以下の動作が実行される:第2のルートデジット計算(平方根)、第1の商デジット計算(除算)、商のx及びdの比較及び条件付きシフト(除算)、3×d計算(除算)、ならびに残りの反復(除算及び平方根)の比較定数を取得するためのLUTアドレス指定。
【0230】
第1の除算デジット選択及び第1の2つの平方根デジット選択
以下は、前処理回路100において第1の基数8除算結果デジット及び第1の2つの基数8平方根結果デジットをどのように選択するかについてのより多くの情報を提供する。
【0231】
コンテキスト
● 基数64の除算及び平方根
● 各基数64の反復は、2つの基数8の反復で構成される。
● 除算:
○ 反復部分の前に第1の反復が行われる
○ 理由:
■ 反復部分の前に、定数ルックアップテーブル(LUT)は、基数8の反復ごとに商デジット選択に必要な比較定数を得るためにアドレス指定される。
● LUTは、除数の最上位ビットでアドレス指定される。
■ 全ての反復は、同じ比較定数のセットを使用する。
■ 第1の基数8の商デジットは、+2又は+1の値のみを取ることができる。これは、第1の反復が残りの反復よりもはるかに単純であることを意味する。
■ LUTがアドレス指定される同じサイクルには、第1の除算反復を実行する時間がある。
■ LUTサイクルの第1の反復を有することにより、最終待ち時間は、いくつかの精度で1サイクル短縮することができた。
● 平方根:
○ LUTは部分ルートの最上位ビットでアドレス指定される
○ 反復部分の前に第1及び第2の反復が行われる
○ 理由:
■ 基数8の平方根アルゴリズムは、第1の反復、第2の反復、及び残りの反復に対して異なる比較定数セットを必要とする。
■ 平方根計算の反復部分において共通の平方根反復論理を有し、反復論理においてLUTアドレス指定を行わないようにするために、反復部分の前に第1及び第2の反復を実行することが判定されている。
■ 第1の反復は、オペランドのアンパッキング及び特殊オペランドの判定と共に、第1のサイクルV1で行われる。
■ 第2の反復は、LUTアドレス指定と同じサイクルV2で行われ、残りの反復の比較定数を取得する。このサイクルは、アルゴリズムの反復部分の前である。
【0232】
除算:第1の基数8デジット(V2における)
● 第1の基数8の除算デジットは、反復の残りと同じ定数のセットを使用して選択されるため、この第1のデジット選択及び後続の反復におけるデジット選択のための定数はLUTから取得される。
● このサイクルでは
○ LUTがアドレス指定され、
○ 第1の反復を実行するために、デジット=+2の定数が使用される
○ 比較定数のセットは、残りの反復で使用されるためにフロップされる。
● 次に、第1の反復は、残りの反復と同じ定数のセットを使用するが、制限されたデジット値のため、デジット=+2の定数のみが必要である。
【0233】
平方根:第1の基数8デジット(V1における)
● 基数8の反復の場合、考え方は同じであるが、基数4の場合と同じ論理ではない。
○ 部分ルートが1(初期値)
○ 第1の基数8デジットは、値-4、-3、-2、-1、又は0を取ることができる
○ 部分ルートが与えられると、これら5つの数値の比較定数は既知であり、第1のデジット選択論理に配線される(4つの値のみが格納される必要がある)。従って、このためにLUTアドレス指定は必要ない。
○ これら4つの値は(比較cte*64、すなわち、以下に引用される値は、実際に格納された定数の64倍である):
デジットの定数=0:-64
デジットの定数=-1:-176
デジットの定数=-2:-272
デジットの定数=-3:-352。
【0234】
平方根:第2の基数8デジット(V2における)
● 第1の反復後の部分ルートの値の範囲は制限され、5つの値のみが可能である(第1のデジットの各値に対して異なる部分ルート値):
○ 最初のデジット=0=>次の部分ルートは1.00_000
○ 最初のデジット=-1=>次の部分ルートは0.11_000
○ 最初のデジット=-2=>次の部分ルートは0.10_000
○ 最初のデジット=-3=>次の部分ルートは0.01_000
○ 最初のデジット=-4=>次の部分ルートは0.00_000
● これら5つの比較定数セットを格納するために小さなLUTが使用される。
● このLUTのサイズは5×88である。
○ 5列
○ 8つの11ビット比較定数を格納するための8ビット/列
○ 上記の部分ルートでアドレス指定
○ LUTに格納されている値(ここでも、示されている定数値は、格納されている値よりも64倍大きい比較cte*64である):
部分ルートは、1.00_000=>461、326、191、61、-62、-192、-317、-442である。
【0235】
部分ルートは0.11_000=>406、281、171、61、-62、-172、-277、-377
部分ルートは0.10_000=>351、241、141、46、-47、-142、-232、-322
部分ルートは0.01_000=>291、206、121、41、-42、-122、-192、-267
部分ルートは、0.00_000=>236、161、96、31、-32、-97、-152、-212である
上記の定数の順序は、デジット=+4、デジット=+3、デジット=+2、デジット=+1、デジット=0、デジット=-1、デジット=-2、デジット=-3で一定である。
【0236】
これは、前処理回路の初期のデジット選択を説明する。後続のステージにおけるデジット選択は、
図17~
図20において以下で更に説明されるLUTに示される比較定数を参照して、
図6において先に説明した通りである。
【0237】
パイプライン除算/平方根ユニットのデジット反復
一般的基数r及び結果のビット数への呼び出しnの場合、反復回数は、
【0238】
【0239】
基数64(r=64)、2つの演算(除算及び平方根)、及び3つの浮動小数点精度(DS、SP、HP)について詳しく説明する。精度ごとの小数部ビット数は、それぞれ52、23、及び10である。1つの基数64の反復がサイクルごとに実行される、前述のように、手軽な実装を得るために、基数64の反復は、サイクルごとに2つのより単純な基数8の反復を重ねることによって得られる。しかしながら、反復回数は依然として基数64のアルゴリズムの反復回数である。
【0240】
浮動小数点除算:最終商の整数ビットを生成する最初のデジットは、前処理で選択される。加えて、商が[1;2)に強制される場合、丸めにはガードビットのみが必要であり、丸めビットは使用されない。次に、倍精度、単一精度、及び半精度でそれぞれn=53、24、11である。これには、分数及びガードビットが含まれる。次いで、3つの精度の反復回数が、
【0241】
【数25】
DP及びHPでは、反復は、結果ビットの目標数よりも1つ多いビットを生成し、倍精度では54、半精度では12である。この追加のビットは、商から廃棄され、丸め前に剰余に組み込まれなければならない。
【0242】
浮動小数点平方根:入力オペランドが[0:25;1)であるため、結果は[0:5;1)、であり、従って、結果は、最終的な浮動小数点結果[1;2)を得るために左シフトされなければならない。除算のように、1つの追加ビットのみ、ガードビットは丸める必要がある。従って、ルートアルゴリズムのビット数は、それぞれDP、SP、及びHPのために、54、25、及び12である必要がある。これには、整数ビット、分数ビット、及びガードビットが含まれる。
【0243】
一方、最初の2つの基数8のデジットは、反復前に前処理で取得される。第1のデジット選択は、スキップされ、剰余の部分ルートの初期化に統合され、第2のデジットの選択は、剰余の全ての反復に対する単一のLUTを有するように、V2で行われる。これらの2回の反復は、最終ルートの6ビットを生成し、その後、反復部分のサイクル数は、
【0244】
【数26】
単一精度では、4回の反復後に生成されたビット数は30、前処理において6ビットであり、更にデジット反復で24ビットであり、従って、5つの余分なビットがある。これらの余分なビットを取り除くために、最後のデジット反復サイクルにおける第2の基数8の反復がスキップされ、2つの追加のビットがルートから除去され、丸めの前に剰余に組み込まれる。
【0245】
従って、パイプラインの本体102には、いくつかのマルチプレクサが追加され、
● ステージD2の2:1マルチプレクサ120が、ステージD1及びD2の出力の間で選択するために追加され、HP平方根演算が実行されるときにステージD2をスキップすることを可能にする。これは、式(28)、(29)に示すように、除算に必要な2サイクルと平方根に必要な1との差を反映している。
● マルチプレクサ(
図9には示されていない)が、組み合わせた除算/平方根処理回路内に追加されて、SP平方根演算が実行されるときに、ステージD4の第1の部分反復の出力が選択されて反復結果として出力されることを可能にする(ステージD4の第2の部分反復をスキップする)。これにより、第2の部分反復の余分な3ビットが生成されることが回避され、第1の部分反復で生成された2つの更なるビットも上述のように破棄することができる。
● ステージD9で2:1マルチプレクサ122が、ステージD8及びD9の出力の間で選択するために追加され、DP平方根演算が実行されるときにステージD9をスキップすることを可能にする。これは、除算に必要な9サイクルと平方根に必要な8サイクルとの間の差を反映している。
● ステージ9における3:1マルチプレクサ124は、(上記の平方根のスキップの有無にかかわらず)ステージD2、D4、及びD9から受信された出力の間で選択し、マルチプレクサ124による選択は、除算/平方根演算を制御するために復号された命令のタイプに応じて命令デコーダ6によって制御される、現在の演算の浮動小数点精度を示す制御信号に基づいて行われる。
【0246】
従って、命令デコーダ6は、より高い精度の結果を生成するときにデジット漸化除算演算又は平方根演算の少なくとも1回の反復を実行するために使用される少なくとも1つの除算/平方根反復パイプラインステージを、より低い精度の結果を生成するためにデジット漸化除算演算又は平方根演算を実行するときにバイパスさせるように、パイプラインを制御する制御回路として動作する(マルチプレクサ124を制御してバイパスが適用されるとき、より早いステージの出力を選択させる)。
【0247】
また命令デコーダ6は、少なくとも1つの除算/平方根反復パイプラインステージを引き起こすように除算/平方根パイプラインを制御することができ、これは、デジット漸化除算演算が実行されるときに少なくとも1つの反復を実行するために使用され、デジット漸化平方根演算を実行するときに、結果出力の一部のビットを完全に若しくは部分的にスキップするか、又は破棄する(マルチプレクサ120、122及びステージD4内の図示されていない内部マルチプレクサを制御することによって、ステージD4の第2の部分反復がスキップされ、ビットが廃棄されることを可能にする)。
【0248】
後処理(W0)
前述のように、後処理は、部分正規の場合、結果の丸め及び右シフトである。ここでは、任意の既知の浮動小数点丸め技術を使用することができる。なお、結果は除算においてのみ部分正規とすることができ、平方根において部分正規の結果は存在しない。後処理は、除算と平方根の両方で1サイクルで行われる。
【0249】
2つの演算及び3つの精度を同じパイプラインに収容する-オンザフライ変換
上述したように、除算よりも1小さいDP及びHPの平方根におけるデジット反復サイクル数は除算よりも1つ少ない(式(28)及び(29)を参照)。同じ待ち時間を維持し、両方の演算において同じサイクルで結果を収集するために、平方根に空のサイクルが追加されている。すなわち、D2及びD9への入力は、それ以上変換することなく出力に渡される。更に、SP平方根において、D4サイクルにおける第2の基数8の反復はスキップされる。また、待ち時間は精度ごとに異なる。DPの丸められていない結果はD9で得られるが、丸められていないHP及びSPの結果はそれぞれサイクルD2及びD4で得られる。次に、W0サイクルの演算は、精度に応じてD2、D4、又はD9から出てくる信号を保存する。
【0250】
効率的なデジット反復サイクルを実現するために、2つの演算は、
部分商又はルートを更新するためのオンザフライ変換回路42を含むほとんどの論理を共有する。しかしながら、第1のデジットサイクルD1の前に、前処理は、平方根の場合は6つの分数ビット、除算の場合は整数デジットを既に生成している。共有商/ルート更新論理は、除算及び平方根のための同じ新しい分数デジット連結位置を有する必要がある。
【0251】
従って、除算の場合、前処理ステージV2で商Q[i]、QM[i]の小数部に6個のゼロが加算される。その後、後続の反復ごとに生成される新しい分数ビットqiは、これらのゼロの後に連結される(マスクによって示されるように、対応するビットが平方根演算のために連結される同じ位置で)。
1:000 000 q1q2q3 q4q5q6...
後処理ステージW0では、丸めの前にこれらのゼロが除去されて、丸められていない商を有する。
1:q1q2q3 q4q5q6...
これらのゼロの加算は、最終商精度に影響を与えない。これは、式(4)に示すように、部分ルートは、デジット漸化除算方程式で使用されないためである。
【0252】
従って、除算演算の場合、前処理ステージV2は、選択されたビット位置がダミービット値(この例では0)に設定される部分結果値を第1の除算/平方根反復パイプラインステージD1に提供し、それらの選択されたビット位置は、少なくとも1つの前処理ステージV1、V2が、デジット漸化平方根演算を実行するときに、デジット漸化除算演算のために生成されない少なくとも1つの追加の結果デジットを挿入するビット位置に対応する。後処理ステージW0では、これらのダミービット値が除去される。
【0253】
タイミング制御、待ち時間及びスループット
パイプラインユニットの微細構造を
図9に示す。ユニットは12ステージで構成されている。これは、2つの前処理サイクル(V1,V2)、9つのデジット反復サイクル(D1-D9)、及び1つの後処理サイクル(W0)という、より遅い演算、倍精度除算の待ち時間である。所与の浮動小数点精度の場合、除算及び平方根演算は同じ待ち時間を有する。
● 半精度、5サイクル:V1-V2-D1-D2-W0
● 単精度、7サイクル:V1-V2-D1-D2-D3-D4-W0
● 倍精度、12サイクル:V1-V2-D1-D2-D3-D4-D5-D6-D7-D8-D9-W0
(D2又はD9において平方根のためにサイクルがスキップされる場合であっても、待ち時間は依然として、ステージD2又はD9への入力におけるフリップフロップの後に来る3:1マルチプレクサ124への入力と同じであることに留意されたい)。両方の動作について同じ待ち時間を有することにより、タイミング制御を単純化することができる。
【0254】
加えて、待ち時間は、部分正規オペランド又は結果が存在するか否かにかかわらず同じであり、正規化(必要な場合)はV1で実行され、部分正規商右シフトは丸め後にW0で行われる。
【0255】
タイミング制御回路130は、除算及び平方根演算を開始することができるタイミングを制御するために設けられる。タイミング制御回路130は
図9では別個のユニットとして示されているが、他の例では、デコーダ6はタイミング制御回路130として機能することができる。
【0256】
除算/平方根ユニット24は、完全にパイプライン式である。これは、全ての動作が同じ精度である場合に、スループット1のサイクルごとに新しい動作を開始できることを意味し、これは最も一般的なケースである。従って、制御回路130は、除算/平方根パイプラインを制御して、第1のデジット漸化除算又は平方根演算と、第2のデジット漸化除算/平方根演算の前の反復を実行する前の除算/平方根反復パイプラインステージと並行して、第1のデジット漸化除算又は平方根演算の後の反復を実行している、除算/平方根パイプラインの後の除算/平方根反復パイプラインステージで、第2のデジット漸化除算又は平方根演算を実行させることができる。
【0257】
しかしながら、混合精度除算又は平方根がある場合、制約が現れ、2つの演算を同時に同じステージにすることはできない。
図10に示すように、待ち時間は精度に依存するため、SP動作及びHP動作にはいくつかの禁止された開始サイクルがある。例えば、SP div/sqrtは、DPの5サイクル後に開始することができなが、これは、その場合、両方の動作がW0で衝突するためである。
【0258】
従って、タイミング制御回路130は、
図10に示すように、回路を制御して、より精度の高い結果を生成するために実行されるより精度の高いデジット漸化除算/平方根演算の後に、より精度の低い結果を生成するために実行されるより精度の低いデジット漸化除算/平方根演算が所定のサイクル数を開始することを防止することができ、所定のサイクル数は、より精度の高いデジット漸化除算/平方根演算のために少なくとも1つの後処理ステージに到達するのに要したサイクル数と、より精度の低いデジット漸化除算/平方根演算のために少なくとも1つの後処理ステージに到達するのに要したサイクル数との差に対応させてもよい。
【0259】
所定のサイクル数は、使用する精度によって異なる。
図10に示すように、所定の数は、以下の通りである。
-低精度をSP、高精度をDPとしたとき5サイクル、
-低精度をHP、高精度をDPとしたとき7サイクル、
-低精度をHP、高精度をSPとしたとき2サイクル。
【0260】
この場合、後処理ステージW0で衝突が発生しない場合と同様に、動作間のサイクル数が所定数よりも多い場合、高精度動作の後に低精度動作を開始しても問題はない。
【0261】
この手法では、共有パイプライン除算/平方根演算を使用することによって大幅な帯域幅改善を提供することができ、共通論理の共有による面積削減により、性能と回路面積との間のより良いバランスが提供される。
【0262】
それにもかかわらず、平方根及び除算ユニットの一方又は両方に対して、別々の平方根及び除算ユニットを有する実装にパイプライン方式を使用することもできる。
【0263】
また、
図9は、基数64のデジット漸化除算及び平方根にパイプライン方式を適用しているが、基数の他の値にもパイプライン方式を使用することができる。
【0264】
また、
図9は、HP、DP、SPの全てをサポートするパイプライン方式を示しているが、他の例は、これらの精度のサブセットのみをサポートすることができ、又は他の浮動小数点精度をサポートすることができるため、異なる数のパイプラインステージを使用することができる。
【0265】
オンザフライ変換
前述したように、デジット漸化法の一部は、冗長表現から通常のバイナリ表現(非冗長表現)への変換を含み得る。デジット漸化法からの出力デジットは一度に1つずつ生成されるため、全てのデジットを一度に変換しなければならない場合に発生し得る待ち時間を回避するために、変換を一度に1つのデジットずつ実行することができれば有用である。この変換は、オンザフライ変換回路42を使用して実行される。
【0266】
簡単に言えば、平方根のためのオンザフライ変換は、2つの部分ルートワード、S[i]及びSM[i](S[0]=1.0かつSM[0]=0.0)を保持し、SM[i]=S[i]-r-iであり、また以下に示す更新規則を用いて、
【0267】
【0268】
式中、(X、Y)は、XとYの連結、すなわちXYを意味する。なお、実際には、SM[i](2進数)は、最下位ビット位置から1を減算したS[i](2進数)と等価である。従って、S[0]=111の場合、SM[0]=110である。
【0269】
図11は、基数8の演算において各デジットについてS[i]及びSM[i]がどのように更新されるかを要約している。図{Sx[i]、aaa}は、S[i]又はSM[i]の実際の値へのaaaビットの連結を意味する。なお、算術演算は行われず、連結のみが行われる。
【0270】
図12は、基数8のルートのオンザフライ変換の例を示す。一連のデジットは、-1、1、-2、-4、2、0、-1である。なお、SM[i]の最終値はS[i]-1である。
【0271】
先に示したように、平方根演算の場合、次の剰余rem[i+1]の計算は、si+1×S[i]乗算を伴う(式(3)参照)。基数8の実施態様では、si+1={+4,+3,+2,+1,0,-1,-2,-3,-4}であり、従って、S[i]の2X倍数、3X倍数及び4X倍数が必要である。2X項及び4X項は、S[i]を1又は2ビットだけ左シフトすることによって容易に取得されるが、3×S[i]の計算ははるかに複雑であり、これは基数8の平方根アルゴリズムの実用的な利用の制限要因であった。
【0272】
基数がより小さい他の実施態様では、デジットセット、基数2の{+1,0,-1}及び基数4の{+2,+1,0,-1,-2}のため、項3Xは必要ないことに留意されたい。
【0273】
本発明は、S3[i]及びS3M[i]を表す追加の部分ルートワードを保持し、それによって、3を乗算することによって、又はSを2で乗算してSを加算することによって、計算が3×S[i]として行われることを防止する。S3及びS3Mの各々の場合、実行される連結は以下の通りである。
3×si+1∈{+12,+9,+6,+3,0,-3,-6,-9,-12}
【0274】
図13は、連結がどのように行われるかを示す。なお、3×s
i+1={+12,+9,-9,-12}を表すためには、4ビットが必要である。これは、これらのデジット値の連結が前のデジットに伝搬されるキャリーを生成することを意味する。従って、4ビットの3×s
i+1は、3ビットのデジット(3×s[i+1])mod8に分解され、{+6,+4,+3,+1,0,-1,-3,-4,-6}の値及び正又は負のキャリーc
i+1={+1,-1}を取る。
【0275】
図13から、s
i+1={+4,+3,+2,+1,0,-1,-2,-3,-4}の場合、3×S[i]を得るために連結される3ビットデジットは、それぞれ(3×s{i+1])mod8={+4,+1,+6,+3,0,-3,-6,-1,-4}である。従って、S3[i]及びS3M[i]を得るための連結プロセスは以下の通りである。
【0276】
1. |si+1|={4,3}の場合、実際の部分ルートをインクリメント/デクリメントする。部分ルートの実際の3X倍数S3[i]及びそのデクリメントされた対応部分S3M[i]は、キャリーに応じて前のデジットsiをsi+1又はsi-1に変更することによって再構築され、
S3_inc[i]=S3[i]+8-i
S3M_dec[i]=S3M[i]-8-i
連結される各デジットを表現するために3ビットが使用されるが、これらの3ビットによって表現され得る値の全範囲は使用されず、+6の最大値のみがデジットとして追加されるため、キャリーは前のデジットsiを超えて伝搬される必要はないことに留意されたい。
【0277】
2. 3ビットデジットの連結。3ビットのデジット連結は、
【0278】
【数28】
上記の式では、インクリメントされた実際のルートS3_inc[i]がデジット+3及び+4に使用され、デクリメントされた実際のルートマイナス1、S3M_dec[i]がデジット-3及び-4に使用される。残りのデジット値には、実際のルートS3[i]又は実際のルートマイナス1、S3M[i]が使用される。ここで、モジュロ演算x modyは、xをyで除算したときの剰余を与える。例えば、5mod8=5、11mod8=3、-5mod8=-5、-12mod8=-4である。
【0279】
図14は、3Xルート倍数のオンザフライ変換の一例を示す。一連のデジットは、-1、+1、-2、-4、+2、0、-1である。表の最終S3[i]結果は、
図12の最終S[i]結果の3X倍である。部分反復i=0では、S3の初期値は11(3にS[0]=1の初期値を乗算したもの)であり、S3Mの初期値は10(3-1=2)である。部分反復i=1では、デジット-1が追加される。3に-1を乗じたものは-3であり、これはS3のデジット-3とS3Mのデジット-2との連結に等しい。式(32)及び(33)を参照すると、S3[i+1]の値はS3M[i]と101(すなわち5)との連結であり、S3M[i+1]の値はS3M[i]と100(すなわち4)との連結であることが分かる。
【0280】
部分反復i=2では、1のデジットが追加される。3に1を乗じたものが3である。再び、式(32)及び(33)を参照すると、s
i+1=1の場合のS3[i+1]は、S3[i]と011(すなわち3)との連結によって生成され、S3M[i+1]は、S3[i]と010(すなわち2)との連結によって生成され、それによってS3[2]=10.101011及びS3M[2]=10.101010が得られることが分かる。部分反復i=3では、-2のデジットが追加される。3を-2で乗算すると-6である。S3の場合、連結はS3Mの前の値に対して行われる。基数8で演算しているため、S3M[i]を使用してS3[i+1]を作成することは、S3[i+1]の値が本来よりも8低いことを意味する。6を減算しようとしているので、これはここで+2を加えなければならないことを意味する(8-6=+2)。従って、
図14に示すように、連結はS3M及び2(010)である。同様に、S3Mの場合、連結はS3Mの前の値に対して行われる。従って、
図14に示すように、連結はS3及び1(2進数で001)である。部分反復i=4では、連結されるデジットは-4である。3を-4で乗算すると-12である。これは、-12を3デジットだけで表現することができないため、より複雑な状況であり、従って負のキャリーが行われる。負のキャリーを行った後、実行されるべき残りの減算は-4である(-12=-8-4)。従って、S3M_decの値を使用し、これは本質的に16を減算する(8はデクリメントされた値であり、8はS3Mから導出される)。実行されるべき結果としての加算は4(16-12=4)であるため、実行される連結はS3M_dec及び100の値(バイナリで4である)に対して行われ、010 000 100が得られる。S3Mの値の場合、同じ値が使用されるが、連結は1小さい値(すなわち、4-1=3である。)に対するものであるため、連結はS3M_decと011との間で実行される(2進数で3である)。反復5、6、及び7で使用されるデジット2、0、及び-1のプロセスは、上記の説明から明らかであるはずである。
【0281】
図15は、オンザフライ変換回路42の一部を形成する3X部分ルート倍数オンザフライ変換の実施態様を示す。部分ルート値S[i]及びSM[i]を生成するための回路は示されていないが、これは、例えば米国特許出願公開第2020-0293281号明細書に示されている回路の簡単な調整(図に示されている表を使用する)によって達成することができるためである。各部分反復(第1のサブ反復を除く)において、前の部分反復からのS3[i]、S3M[i]、AUX[i]、及びAUXM[i]の値が受信機回路202によって受信される。実装には3つの部分がある。
● 調整回路204を使用した実際の3X部分ルートS3[i]、S3M[i]のインクリメント/デクリメント、
● 次の3X部分ルートS3[i+1]、S3M[i+1]の計算、及び
● 新しい補助3X部分ルートAUX[i+1]、AUXM[i+1]の計算。
【0282】
補助3X部分ルートは、以下のように定義される。
【0283】
【数29】
3X部分ルートのインクリメント/デクリメントがどのように実行されるかに起因して提供される。なお、前デジットへのキャリーがない場合、AUX[i+1]=S3[i]、AUXM[i+1]=S3M[i]となる。しかしながら、いくつかの特定の一連のデジットに対して、デクリメント/インクリメントされたS3[i]及びSM3[i]が提供される。特に、値AUX及びAUXMは、直前のビットのセットを超える拡張されたキャリーを可能にする。例えば、以下を考える。
S3[i]=001 111 100
S3M[i]=001 111 011
ここで、s
i+1=-3、s
i+2=+3である。
【0284】
すなわち、実際の3X部分ルートへのキャリー伝搬がある。式(32)及び(33)によれば、3×si+1の連結は、以下を生成する。
S3[i+1]=001 111 010 111
S3M[i+1]=001 111 010 110
【0285】
次に、3×si+2の連結は、以下を生成する。
【0286】
【0287】
すなわち、デジット+3によってキャリーが行われるため、先行するデジットのセットがインクリメントされる。しかしながら、これらのデジットが既に飽和している場合(この場合、S3の対象デジットは111である。)、次のビットセットへの更なるキャリーが行われる。すなわち、S3[i+2]は、インクリメントされたS3[i+1]に(3×si+2)mod8を連結したものである。ただし、S3[i+1]をインクリメントさせると、最後の連結されたデジット値111→000が増加するだけでなく、S3M[i]_decも001 111 010から001 111 011にインクリメントするか、又は同等にS3M[i]は依然としてS3[i+2]を生成する必要があることに留意されたい。なお、この例では、これ以上キャリーバックする必要はない。これは、111がS[i](デジットsi+1=-3)に連結されてS[i+1]が得られ、次のデジットsi+2の変換によって正のキャリー(si+2=+4,+3)が生じるためである。このキャリーは1デジットを伝播する。理論的には、「111」のいくつかのブロックが一列に存在し、部分ルートをインクリメントしなければならない場合、キャリーは2デジットを超えて伝播する。例えば、S3[i]=0001 011 111 111であり、次のデジットが+3であった場合。そのような場合、キャリーは3つ前のデジットに伝播する。しかしながら、そのようなパターンは、ここで説明されている連結プロセスによって生成することができない。
【0288】
従って、前のデジットまで伝搬したキャリーがcarry=+1の場合にはS3[i+2]、S3M[i+2]の計算のためにS3_inc[i]、S3M_inc[i]が保存され、carry=-1の場合にはS3_dec[i]、S3M_dec[i]が保存される。この状況は、2つの連続するルートデジットの連結において、及び3X部分ルート内の特定の値に対して、キャリー+1又は-1があるときに発生する。
【0289】
図15に戻ると、調整回路204は、AUX[i]又はAUXM[i]からS3
inc[i]、S3
dec[i]、S3M
inc[i]、及びS3M
dec[i]を生成するために使用される。AUX[i]又はAUXM[i]が選択されるかどうかは、
図16に示すように前のデジットs
iに依存する。従って、復号回路206は、前のデジットs
iを考慮し、AUX[i]とAUXM[i]との間で選択するための信号をマルチプレクサ208a、208b、208c、208dに提供する。次に、前のデジットs
iの値は、S3_inc[i]及びS3M_dec[i]の補正値を与えるために、デジットx3回路からの出力と連結される。デジットx3回路は、以下のように4つの出力値を生成する。
s
i>=0の場合:
● 3s
i mod8+1
● 3s
i mod8
● 3s
i mod8-1
● 3s
i mod8-2
そして、s
i<0の場合:
● 8-(|3s
i|mod8)+1
● 8-(|3s
i|mod8)
● 8-(|3s
i|mod8)-1
● 8-(|3s
i|mod8)-2
【0290】
例えば、si=+1の場合、出力は4、3、2、及び1であり、si=-2の場合、出力は3、2、1、及び0である。
【0291】
次に、新しい3X部分ルートS3[i+1]及びS3M[i+1]は、新しい符号付きデジットs
i+1~S3[i]、S3M[i]又はS3_inc[i]又はS3_dec[i]に対応するビットを連結することによって生成される。これは、連結回路210を使用して達成される。剰余の符号は、
図4を参照して説明したものと同様に、その出力が連結回路210に供給される2:1マルチプレクサの数を減らすために使用されることに留意されたい。すなわち、剰余の符号は、正と負のデジットの間で選択するために使用され、例えば、1つのマルチプレクサ内のS[i]についてはデジット+3と-3との間で選択が行われ、別のマルチプレクサ内のSM[i]についてはデジット+3と-3との間で選択が行われる。正の剰余は正又は0のルートデジットを選択し、負の剰余は負又は0のルートデジットを選択する。各デジットに連結するデジットは、式(32)と式(33)で与えられる。例えば、デジット+3の場合、(3×3)mod8である001を連結する。一方、-1の場合、111を連結し、これは8-|3×-3|=-1(又は2進値で111)である。
【0292】
連結回路を実行した後、マルチプレクサのセットの形態の出力回路212は、更新されたAUXルート値AUX[i+1]及びAUXM[i+1]と共にS3[i+1]及びS3M[i+1]の選択された値を出力し、更新されたAUXルート値AUX[i+1]及びAUXM[i+1]はAUX生成回路214によって生成され、最新の新しいデジットsi+1を復号してキャリーがあるか否かを判定し、次いでその情報を使用して適切な値を選択し、
図16に示すようにAUX[i+1]及びAUXM[i+1]として出力する。AUX[i+1]、AUXM[i+1]、S3[i+1]、S3M[i+1]の各々は、更なる反復又は部分反復において受信回路202によって受信し返される。
【0293】
選択定数のLUT
デジット漸化演算の各ステージでは、デジット選択演算SEL(式2参照)が行われる。基数8の除算又は平方根デジット漸化アルゴリズムにおけるデジット選択関数は、実際の剰余(又はその一部)と8つの選択定数又は係数のセットとの比較を実行する。係数セットは、除数又は部分平方根の最上位部分を使用して選択される。選択されたセット内の8つの係数は、剰余の最上位部分と比較され、8つの比較の結果は、次の商又はルートデジットを判定するために使用される。
【0294】
これらの係数セットは、除算演算における除数の最上位ビット又は平方根演算における部分ルートの最上位部分によってアドレス指定されるルックアップテーブル(LUT)に格納される。基数8の除算のLUTサイズは32×72ビットであり、基数8の平方根のサイズは33×80ビットである。除算及び平方根をサポートするユニットでは、2つの異なるLUTが必要であり、1つは除算用であり、もう1つは平方根用である。従って、このようなユニットでのLUTサイズの合計は、32×72+33×80=4944ビットとなる。
【0295】
これらの例では、全LUTのサイズを縮小するいくつかの方法が提案されている。一部の列の併合を行うことができる。更に、平方根係数は、除算係数に小さなオフセットを加えることによって計算することができる。その結果、平方根LUTは、より小さいテーブル及び何らかの論理によって置き換えることができる。更に、除算LUTサイズを更に低減するためにいくつかの最適化が行われる。従って、LUTサイズの合計は、33×42+33×18=1980ビットに縮小することができ、これは、必要な記憶空間の約60%の縮小を表す。
【0296】
選択関数は、剰余推定値(剰余の最上位ビット)と、デジットpi+1の可能な値ごとに1つの定数である8つの選択定数又は係数のセットとの比較を含む。よって、
【0297】
【数31】
ここで、cte(k)及びcte(k+1)は、それぞれデジット値k及びk+1の選択定数であり、k∈{-3,-2,-1,0,+1,+2,+3,+4}(基数8)である。実際には、剰余推定値が他のデジット(-3から+4)の選択定数と対応しない場合、選択されたデジットは-4でなければならないため、デジット値-4の選択定数を保持する必要はない。剰余の10(除算)又は11(平方根)の最上位ビットのみが、デジット選択に十分に正確な剰余の推定を得るために考慮される必要があることが分かっている。
【0298】
除算デジット漸化では、次のデジットを取得するために使用される選択定数のセットは、除数に依存する。一方、平方根では、部分的な結果に依存する。除数の6つの最上位ビット又は部分ルートの7つの最上位ビットは、現在の除算の全ての反復に対して8つの選択定数のセットを取り出すために使用される。異なる除数又は部分ルート値は、異なる定数セットを抽出する。
【0299】
除算の場合、選択定数は10ビット幅であるが、最上位ビットは0である。一方、定数を選択する前にオペランドが正規化されているため、除数の最上位ビットは常に1であることに留意されたい。従って、選択定数は、32×72ビット除算ルックアップテーブル(LUT)に格納される。
【0300】
平方根の場合、選択定数は11ビット幅である。部分平方根は[0.5,1]である。従って、部分ルート推定が1つの整数ビット及び6つの分数ビットを有し、部分ルートの最小値が0.5であることを考慮して、選択定数は、R[i]∈[0.5,1)についての32個のエントリ及びR[i]=1についての1個のエントリを有する33×80ビットの平方根LUTに記憶される。
【0301】
従って、除算及び平方根に対応したユニット(fdivsqrtユニット)では、典型的には、32×72ビットの除算LUT及び33×80ビットの平方根LUTの2つのLUTが使用される。LUTサイズの合計は、32×72+33×80=4944ビットである。
【0302】
この技術では、fdivsqrtユニットの総LUTサイズを低減する方法が提案される。LUT低減は、以下の2つの項目に基づいている。
【0303】
1. 平方根定数sqrt_ctは、基本定数base_ct=[2×div_ct/16]×16に4ビットのオフセットを加えることで、除算定数div_ctから求めることができることが分かった。なお、base_ctは、4つの最下位ビットを0としたdiv_ctである。4ビットオフセットは、負又は正であり得る。このようにして、平方根定数を格納する代わりに、オフセットLUTにオフセットを格納するだけでよい。
【0304】
2. 除算LUT及びオフセットLUTにおけるいくつかの対称性は、LUT総サイズの更なる低減を可能にする。
【0305】
図17及び
図18は、生の除算及び平方根LUTを示す。図は、除数及び部分ルート推定の各値に対して設定された定数を示す。各集合は、デジットp
i={+4,+3,+2,+1,0,-1,-2,-3}を選択するための定数から構成され、集合内の合計8つの定数について、除算についてはdiv_ct={md(4),md(3),md(2),md(1),md(0),md(-1),md(-2),md(-3)}、平方根についてはsqrt_ct={ms(4),ms(3),ms(2),ms(1),ms(0),ms(-1),ms(-2),ms(-3)}である。
【0306】
各比較定数の値は、狭い間隔から選択することができる。これらの例では、値は各LUTを対称にするように慎重に選択されており、これはデジット+4及び-3、+3及び-2、+2及び-1、ならびに+1及び0の列の定数の絶対値が同じであることを意味する(いくつかの例外を除く)。後に示すように、この選択はLUTサイズを小さくするのに役立つ。
【0307】
最初の2つの除数間隔定数md(4)及びmd(-3)は、範囲外である。すなわち、最初の2デジットは4又は-3とすることができない。これは、除数間隔の数を2倍にすることによって固定することができるが、そのような手法は、LUTサイズを2倍にすることを意味するため、非常に高価である。代わりに、除数の第6の分数ビットは、部分間隔を選択し、md(4)及びmd(-3)の2つの最下位ビットを補正するために使用される。
【0308】
LUTのサイズについては、除算LUTの最大値及び最小値はそれぞれ222及び-222である。従って、除算定数の値は、範囲[222;-222]、また9ビットは、そのような範囲内の全ての値を表すために必要である。同様に、平方根の場合、定数は[447;-446]、従って10ビットが必要である。
【0309】
オフセットLUT
図17及び
図18に示す除算定数と平方根比較定数とを比較すると、次のように平方根比較定数を得ることができる。
【0310】
【0311】
すなわち、除算定数md(k)を2で乗算し、4つの最下位ビットを0にクリアし、4ビットのオフセット、オフセット(k)を加算する。
【0312】
【数33】
と呼ぶことにする。
ms(k)=m_base(k)+offset(k),with k=4,3,2,1,0,-1,-2,-3 (38)
【0313】
なお、オフセットが基本定数m_base(k)と同符号の場合、加算は、m_base(k)の4つの最下位ビットを4ビットのオフセットに置き換えることを含む。オフセットが基本定数と同じ符号でない場合、加算が行われる。
【0314】
別の例として、
【0315】
【数34】
に対するms(2)の計算を考える(
図17の行4)。
図17及び
図18の行4の定数を考えると、
【0316】
【数35】
である。この場合、offset(2)は12となる。なお、m_base(2)とoffset(2)の符号が等しい場合、平方根定数は、4つの最下位ビットをoffset:m_base(2)=000110_0000、offset(2)=1100に置き換えて、ms(2)=000110_1100=108とする。
【0317】
しかし、m_base(k)とoffset(k)の符号が異なる場合もある。例えば、
【0318】
【数36】
、
図17及び
図18の行3を用いたms(3)の計算の場合、
【0319】
【数37】
であり、次いでms(3)=176-1=175である。オフセットは負、すなわちオフセット(3)=-1であるため、平方根定数は減算(又は負の数の加算)によって得られる。
【0320】
図19は、平方根定数の計算のためのオフセットを示す。オフセットの符号と除算定数の符号とが異なる場合を強調する。平方根及び除算比較定数は、この表を列に対して対称にするように慎重に選択されており、これは列+4及び-3、+3及び-2、+2及び-1、ならびに+1及び0の定数の絶対値が同じ(反対の符号を有する)ことを意味する。この規則が破られるケースは2つあり、行4及び13では、デジット+4及び-3のオフセットは同じ絶対値を持たない。これらの場合は別々に処理され、例えば、オフセット補正指示回路252を介して検出され得る。
【0321】
対称性
第1の除算LUTを使用して、以下の通りである。
1. 定数の絶対値は、符号付き値の代わりに格納することができる。これは、LUTサイズを低減するのに役立つ。
2. デジット数pi=+1及びpi=0の定数の絶対値は同じであるため(反対の符号、具体的には、デジットpi=+1が正であり、pi=0が負である)、これらの2つの列は1列だけで置き換えることができる。
3. デジット数pi=+2及びpi=-1の定数の絶対値は、行0及び17を除いて同じ(反対の符号、具体的には、デジットpi=+2が正であり、pi=-1が負である)である。これらの2つの列は1列のみとして記憶され、行0及び17の値は、例えば除算補正指示回路250及び除算定数補正回路248において後に補正される。なお、行0では、m(2)=50,m(-1)=-48であり、行17では、m(2)=73,m(-1)=-72である。これらの2つの列を融合するために、保存された値は、行0の48及び行17の72であり、最終的なm(2)値は、最下位ビット(行17)又は最下位ビット(行0)の左のビットを変更することによって補正される。
4. デジットpi=+2及びpi=-1の定数の絶対値の最上位ビットは0である。このビットはLUTに格納される必要はない。
5. デジットpi=+1及びpi=0の定数の絶対値の最上位2ビットは0である。これらのビットはLUTに格納されない。
6. デジットpi=+3、pi=+2、pi=+1、pi=0、及びpi=-1の定数は偶数であるため、最下位ビットはLUTに格納されない。
7. その結果、上記項目2及び3に示された列融合のために、最適化された除算LUTは6列しか有さない。また、列当たりのビット数も削減されている。
【0322】
オフセットLUTを
図19に示す。この表も最適化することができる。
1. デジットp
i={+2,+1,0,-1}に対するオフセットは、m_baseと同じ符号を有する。すなわち、オフセットは、デジット+2及び+1に対して正であり、デジット0及び-1に対して負である(適切な場合には負又は正として0を含む)。
2. LUTは列に関して対称であり、デジット+4及び-3のオフセット絶対値、デジット+3及び-2のオフセット絶対値、デジット+2及び-1のオフセット絶対値、ならびにデジット+1及び0のオフセット絶対値は、前述の2つの場合を除いて同じである。その結果、オフセットの絶対値のみがLUTに記憶され、オフセットが平方根比較定数を取得するために使用されるとき、その符号は、オフセット符号がm_base符号(
図19で強調表示された値)と異なる場合を除いて、デジット値に従って設定される。
3. これらの例外値の符号は、LUTの新しい列に格納される。
次に、オフセットLUTは、項目1及び2の列融合の結果として5列、4列、及び符号のための追加の列のみを有する。
【0323】
上記の代わりに、平方根LUTを提供することができ、除算LUT内の値を検索し、オフセットを実行することによって除算演算の定数が導出されることが理解されよう。そのような状況では、浮動小数点LUT又は除算オフセットテーブルのいずれかのサイズを縮小するために、上述したのと同じ技術の多くを適用することができる。例えば、
図18から、デジット+4及び-3の定数の大きさは同じであることが明らかである(デジットは反対の符号を有し、一般に+4デジットは正であり、-3デジットは負である)。同様に、デジット+3及び-2の定数の大きさは同じである(これも反対のデジットであり、典型的には+3に対して正であり、-2に対して負である)。同様に、デジット+2及び-1の定数の大きさは同じである(同様に反対の符号であり、典型的には+2に対して正であり、-1に対して負である)。
【0324】
前のセクションで説明した最適化を伴う最終的な除算及びオフセット表を
図20に示す。テーブルは、除算LUTを左に、平方根オフセットLUTを右に、部分に分割される。カラム融合により、カラム数が削減されていることに留意されたい。得られた融合したカラムは、関連する2デジットの値でラベル付けされる。従って、例えば、(+2、-1)とラベル付けされた列は、生テーブル内のデジットp
i=+2及びp
i=-1に対応する列の融合を意味する。
【0325】
一方、
図20の表の最後の行は、平方根(
図19の行32)のみのものであることに留意されたい。
【0326】
アドレス(テーブルの最左列)は、除算及び平方根のために異なってアクセスされる。除算では、除数の6つの最上位ビットがアドレスを形成するが、最初のビットは1になる。平方根の場合、部分ルートR[i]の7つの最上位ビットは、0.5(バイナリで0.100000)から1.0(バイナリで1.000000)の範囲の値でテーブルをアドレス指定するために使用される。なお、平方根LUTは33行であるため、アドレスには6ビットが用いられる。
【0327】
LUTの内容は、16進値の値として示される。各列に実際に必要とされるビット数が表に指定されており、16進値が示されているが、値の全範囲は可能ではない可能性があることに留意されたい。例えば、この除算LUTにおけるデジットpi=+3の定数値は、最上位16進デジットが2進値{0010,0011,0100}に対応する{2,3,4}の値のみを取るので、7ビットのみを必要とし、従って最上位ビットを記憶する必要はない。列(+2,-1)及び(+1,0)についても同様である。
【0328】
図20のオフセットLUT(右部)は、列(+4,-3)、(+3,-2)、(+2,-1)、及び(+1,0)にオフセット絶対値を格納し、列符号の2ビット値は、列(+4,-3)及び(+3,-2)のオフセットのオフセット符号である。列(+2,-1)及び(+1,0)のオフセットは正であることに留意されたい。符号ビット1は、オフセットとそれに対応するm_baseの符号が異なることを意味する。
【0329】
前述したように、アドレス100000を有するテーブルの最後の行は、平方根に対してのみ意味がある。行011111と同じベースを使用して、この部分ルート推定のための比較定数が、表に示されたオフセットで取得される。
【0330】
除算及び平方根の比較定数の計算について、以下の例を考える。除算のために、定数セットは、先行する0を加算することによってLUTから取得される。例えば、除数=1.00110x...xの除算演算では、LUTアドレスは01_00110であり、LUTは以下を返す。
【0331】
【0332】
セット内の各定数のビット数は、その定数が何デジット用かに依存することに留意されたい。そのため、除算のために先に列挙したLUTサイズ削減のための規則を考慮すると、この特定の除数値の比較定数のセットは次のようになる。
【0333】
【0334】
最終定数を得るために追加されたビットが強調表示される。なお、LUTから定数の絶対値を求める。後のステップで、m(0)、m(-1)、m(-2)、及びm(-3)の符号が2の補数がとられて最終定数セットが得られる。
【0335】
この同じ行の平方根定数については、符号フィールドは01であることに留意されたい。これは、ms(+3)及びms(-2)の計算のためのオフセットの符号が基本定数符号と異なることを意味し、従って、これらの2つの定数の計算は減算を必要とする。テーブルから、
LUT_offset(01_00110)={1,a,e,2,6}
オフセットは以下の通りである。基本定数符号と異なる符号を有するオフセットが強調表示される
【0336】
【0337】
基本定数は、
【0338】
【0339】
【0340】
sqrt LUTの正及び負の部分は対称であるため、残りの定数は、上記の定数を2の補数をとることによって得られる。
{ms(0),ms(-1),ms(-2),ms(-3)}={-38,-114,-192,-266}
【0341】
図21は、例えばデジット選択比較器32によって使用される選択定数を生成するために使用される選択定数生成器238を示す。除数及び部分ルートのビットは、マルチプレクサ240によって受信される。除算のための選択定数が必要とされるときに除数を選択し、平方根のための選択定数が必要とされるときに部分ルートを選択するdiv/sqrt選択信号が提供される。その後、選択されたビットは、除算LUT及び(平方根)オフセットLUTで構成される記憶回路242内の関連値にアクセスするために使用される。
【0342】
除算LUTからの出力はパディング回路246に渡され、パディング回路は出力される定数に0を加算することによってビットをパディングする。実行されるパディングは、例えば、上記の除算LUTに関してポイント2~6で説明されている。得られた定数は、後述する変換回路244に送られ、また、除算定数補正回路248にも送られる。除算定数補正回路248は、パディングされた(拡張された)除算選択定数、ならびに除算補正指示回路250からの出力を受信し、除算補正指示回路は、除算LUTから取得されているデータが、定数の絶対値が同じでない例外的なケース(上記の除算LUTに関する点3)の1つであるかどうかを示す。すなわち、(i)除数推定値が0又は1である場合の定数md(4)及びmd(-3)、ならびに(ii)除数推定値が0又は17である場合のデジットpi=+2及びpi=-1の定数絶対値の差をチェックする。これらの補正は、選択された定数セット内のビット70、50、1、及び0を設定し、ビット71及び21をクリアすることを必要とする。補正は、除算定数補正回路248によって実行される。
オフセットLUTからの出力は、オフセット補正指示回路252からの出力と共に変換回路244に渡され、これは、アクセスされている定数がLUTオフセットが同じ値を有さない例外のうちの1つであるかどうかを示す(例えば、行4及び13)。そうであれば、変換回路244内で正しい値への補正が行われる。補正回路244はまた、パディング回路246からパディングされた(拡張された)除算定数を受信する。置換回路254は、前述のように連結又は減算を使用してオフセットを追加するために使用される。特に、オフセット符号と定数ベース符号とが異なる場合、減算が実行される。減算は、オフセットLUT内の符号フィールドをチェックすることによって可能になる。4ビットオフセットの4つの最下位ビットの置換は、符号が等しい場合にのみ行われる。
【0343】
除算定数及びLUT定数の両方について、絶対値をデジットpi=0、-1、-2、-3の符号付き値に変換するための署名回路256が設けられている。
【0344】
製造のためのコンピュータ可読コード
本明細書に記載された概念は、記載された概念を具現化する装置の製造のためのコンピュータ可読コードで具現化され得る。例えば、コンピュータ可読コードは、概念を具現化する装置を備える集積回路を製造するために、電子設計自動化(EDA)ステージを含む半導体設計及び製造プロセスの1つ以上のステージで使用することができる。上記のコンピュータ可読コードは、追加的又は代替的に、本明細書に記載の概念を具現化する装置の定義、モデリング、シミュレーション、検証及び/又は試験を可能にすることができる。
【0345】
例えば、本明細書に記載の概念を具現化する装置を製造するためのコンピュータ可読コードは、概念のハードウェア記述言語(HDL)表現を定義するコードで具現化することができる。例えば、コードは、概念を具現化する装置を定義するための1つ以上の論理回路のレジスタ転送レベル(RTL)抽象化を定義することができる。コードは、Verilog、SystemVerilog、Chisel、又はVHDL(超高速集積回路ハードウェア記述言語)における装置を具現化する1つ以上の論理回路のHDL表現、ならびにFIRRTLなどの中間表現を定義することができる。コンピュータ可読コードは、SystemC及びSystemVerilogなどのシステムレベルモデリング言語又は概念のシミュレーション、機能的及び/又は形式的な検証、及び概念のテストを可能にするためにコンピュータによって解釈され得る概念の他の行動表現を使用して概念を具現化する定義を提供することができる。
【0346】
追加的又は代替的に、コンピュータ可読コードは、1つ以上のネットリストのコンピュータ可読表現を具現化することができる。1つ以上のネットリストは、1つ以上の論理合成プロセスをRTL表現に適用することによって生成することができる。代替的又は追加的に、1つ以上の論理合成プロセスは、記載された概念を具現化するようにFPGAを構成するためにフィールドプログラマブルゲートアレイ(FPGA)にロードされるべきビットストリームをコンピュータ可読コードから生成することができる。FPGAは、集積回路での製造前に概念の検証及び試験の目的で展開されてもよく、又はFPGAは製品に直接展開されてもよい。
【0347】
コンピュータ可読コードは、例えば、本発明を実施する装置を製造するための半導体設計及び製造プロセスで使用されるRTL表現、ネットリスト表現、又は別のコンピュータ可読定義のうちの1つ以上の混合を含む、装置の製造のためのコード表現の混合を含むことができる。代替的又は追加的に、概念は、装置を製造するために半導体設計及び製造プロセスで使用されるコンピュータ可読定義と、製造されると定義された装置によって実行される命令を定義するコンピュータ可読コードとの組み合わせで定義されてもよい。
【0348】
そのようなコンピュータ可読コードは、任意の既知の一時的なコンピュータ可読媒体(ネットワークを介したコードの有線又は無線送信など)、又は半導体、磁気ディスク、若しくは光ディスクなどの非一時的なコンピュータ可読媒体に配置することができる。コンピュータ可読コードを使用して製造された集積回路は、中央処理装置、グラフィック処理装置、ニューラル処理装置、デジタル信号プロセッサ、又は概念を個別に又は集合的に具現化する他の構成要素のうちの1つ以上などの構成要素を備えることができる。
【0349】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することができる構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配置又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスが、機能を行うようにプログラムされてもよい。「ように構成された」は、装置要素が、定義された動作を提供するためにある方法で変更される必要があることを意味しない。
【0350】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されているが、本発明はこれらの正確な実施形態に限定されないこと、及び様々な変更及び修正が、当業者によって、添付の特許請求の範囲によって定義されている本発明の範囲から逸脱することなく、実施形態に行われ得ることが理解されよう。
【国際調査報告】