除算

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

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

2 進数の除算を実装するには、DSP58 でシフトと減算、または乗算と減算を実行します。DSP58 には、2 進数除算に必要なシフター、乗算器、加算器/減算器が含まれます。次のセクションに、減算による除算と乗算による除算のアルゴリズムを示します。これらのアルゴリズムの前提条件は、次のとおりです。

  1. N>D
  2. N と D はいずれも正の値

N と D のいずれかが負の値の場合、N と D の絶対値をとってこのアルゴリズムを実行し、結果の符号を適宜変更してください。アルゴリズムで使用する N は被除数、D は除数を表します。また、Q は商、R は剰余を表します。

減算による除算

N が 8 ビット整数、D が 8 ビット以下の値とすると、N/D = Q + R が成り立ちます。

  1. 00000000 を 8 ビット レジスタ R に代入します。
  2. R レジスタを 1 ビット左シフトし、LSB に N[8-n] を格納します。
  3. R – D を求めます。
  4. R と Q を次のようにセットします。
    • R – D が正の場合、Q[8-n] = 1、R = R – D にセットします。
    • R – D が負の場合、Q[8-n] = 0、R = R にセットします。
  5. 手順 2 ~ 4 を繰り返し、ループ実行のたびに R[0] に N[8-n] を格納します (n は反復数)。ループ実行のたびに、手順 4 で Q[8-n] に値が格納されます。n の範囲は 1 ~ 8 です。

このループを 8 回実行すると、Q[7:0] に商が格納され、R[7:0] に剰余が格納されます。

乗算による除算

乗減算法では、まず N/D = Q を N = D × (Q + R) に変形します。N/D が 8 ビットの場合、この式の答えは次の手順で求めます。

  1. Q[8-n] = 1、および Q[8-n] の右側のビットをすべて 0 に初期化します。
  2. D×Q を求めます。
  3. N – (D×Q) を求めます。
    • 手順 2 の結果が正、すなわち N > (D×Q) の場合、Q[8-n] を 1 にセットします。
    • 手順 2 の結果が負、すなわち N < (D×Q) の場合、Q[8-n] を 0 にセットします。
  4. 手順 1 ~ 3 を繰り返します。

このループを 8 回実行すると、Q[7:0] に商が格納され、N – (D×Q) が剰余となります。これを DSP58 にマップするには、N を C 入力に印加し、D を B 入力に印加し、Q (バス全体) を A に印加します。初期値 Q[8-n] は A 入力でセットされ、8 回の繰り返し後、出力レジスタ P には剰余が格納されます。これら 2 つの除算は、いずれも 1 つの DSP58 で実装でき、完全組み合わせの場合のレイテンシは 8 クロック サイクルです。DSP でレジスタを使用すると、レイテンシが長くなります。

2 つの除算のユース ケースに関連するリファレンス デザイン ファイルは、デザイン アーカイブ ファイルam004-versal-dsp-engine.zip division/division_sub および division/division_mult ディレクトリにあります。