平方根

Versal ACAP DSP エンジン アーキテクチャ マニュアル (AM004)

Document ID
AM004
Release Date
2022-09-11
Revision
1.2.1 日本語

整数の平方根は、乗算と減算を繰り返すことによって計算できます。これは、2 つの数の除算に使用する減算法に類似しています。N ビットの数の平方根は N/2 (端数切り上げ) ビットとなります。平方根が小数の場合、結果の整数部を得るために N/2 クロックが必要で、その後は 1 クロックごとに小数部が 1 ビットずつ得られます。次の図に、平方根の計算に必要なロジックを示します。ここに示す計算は、乗算器の入力に 1 段のパイプライン処理があるという前提に基づいています。

図 1. 平方根ロジック

平方根は次のように求めます。



Y は平方根の整数部で、Z は小数部です。レジスタ A および B は、それぞれ DSP58 の A 入力と B 入力にあるレジスタを表し、レジスタ C は DSP58 の C 入力にあるレジスタを表します。計算手順は次のとおりです。

  1. 値をレジスタ C に読み込みます。外部プログラマブル ロジック (PL_FF) のレジスタを 10000000 に設定します。
  2. レジスタ C – (PL_FF × PL_FF) を計算します。C は、0000000C00000000 の形式の 16 ビット値です。
    • 手順 2 の結果が正の場合、PL_FF[(8-clock)] = 1PL_FF[(8-clock) – 1] = 1 にセットします。
    • 手順 2 の結果が負の場合、PL_FF[(8-clock)] = 0PL_FF[(8-clock) – 1] = 1 にセットします。
  3. 小数部が必要な精度に達するまで、手順 2 および 3 を繰り返します。

乗算器の入力に 1 段のパイプライン処理しかない場合、値の整数部 Y の計算には 4 クロック サイクルが必要です。小数部 Z に必要なクロック サイクル数は、必要な精度により異なります。整数部が 4 ビットで小数部が 4 ビットの 8 ビット値の場合、8 クロック サイクル後の PL_FF の値には、最上位 4 ビットに整数部、最下位 4 ビットに小数部が格納されます。このユースケースのデザインでは、タイミングを向上するために 1 ビット値ごとに 4 段のパイプライン処理が追加されています。

このユース ケースに関連するリファレンス デザイン ファイルは、デザイン アーカイブ ファイル am004-versal-dsp-engine.zipsquare_root ディレクトリにあります。