コンピュータアーキテクチャにおけるMACの実現を分析する

乗算演算は、数学における重要な基本的な算術演算です。乗算および累積演算(MAC)は、FFT、DFT、畳み込み計算などのデジタル信号処理、さらにはマイクロコンピュータのALUでも広く使用されています。目的のコンピューティングユニット。DSPアプリケーションでは、MACの設計は汎用プロセッサよりも重視されます。MACの論理的な実装は、通常、デジタル回路設計のクリティカルパスの主な要因です。設計の品質がPPAを決定します。この記事では、ソフトウェアの観点からMACとは何か、そしてそれがどのように機能するかを説明します。

設計原理

MACのトップレベル実装のブロック図は次のとおりです。Operand_1とoperand_2は32ビットの入力オペランドです。MAC操作の結果は64ビットの結果ピンを介して出力されます。内部64ビット加算器は出力を使用します。 2番目の加算オペランドは内部で加算されます。2番目のオペランドのソースは通常、前のサイクルの結果結果であり、結果出力とキャリー信号キャリーが取得されます。

VHDLで実装されたMACユニットロジック:

  1 LIBRARY ieee;
  2 USE ieee.std_logic_1164.ALL;
  3 USE ieee.numeric_std.ALL;
  4
  5 ENTITY mac IS
  6         GENERIC (n   :   INTEGER := 4); --define X and Y size
  7         PORT (
  8                 ck  : IN  STD_LOGIC;
  9                 rst : IN  STD_LOGIC;
 10                 X   : IN  SIGNED (n-1 DOWNTO 0); --n
 11                 Y   : IN  SIGNED (n-1 DOWNTO 0); --n
 12                 A   : OUT SIGNED ((2+2*n)-1 DOWNTO 0)  --2+2n (include two leading bits for overflow)
 13         );
 14 END mac;
 15
 16 ARCHITECTURE hdl OF mac IS
 17         SIGNAL acc : SIGNED ((2+2*n)-1 DOWNTO 0) := (OTHERS => '0'); --2+2n
 18
 19 BEGIN
 20
 21         PROCESS (ck)
 22         BEGIN
 23                 IF rising_edge(ck) THEN
 24                         IF rst ='0' THEN --reset accumulator at low
 25                                 acc <= (OTHERS => '0');
 26                         ELSE
 27                                 acc <= acc + shift_left(X * Y, 1);
 28                         END IF;
 29                 END IF;
 30         END PROCESS;
 31
 32         A <= acc;
 33 END hdl;

このコードに対応する回路ロジックを下図に示します。accは出力として使用されますが、フィードバックループを介して加算器に供給され、次の累積計算のオペランドの1つとして使用されるため、アキュムレータと呼ばれます。 -MAC。

VedicMultiplier回路の実装

デジタル回路の設計には、再帰と同型の深い考えがあります。問題が異なるレベルで同じ構造を持っている場合、複雑な問題を層ごとに再帰的に分解して、問題を解決できる最小の構造を見つけ、次に最小の構造を見つけることができます。問題をレベルで解き、それを基礎として使用し、分解の逆プロセスに従って高レベルの問題を徐々に解決し、最終的に問題全体の解決策を取得します。同様に、構造32 \ times 32 MACは次のことができます。最も単純な2 \ times 2乗数から構築さます。

ヴェーダアルゴリズムを使用し乗数原理2 \ times 2次のとおりです。

対応するデジタル回路の実装を次の図に示します。

ベースの2 \ times 2 乗数は、の4 \ times 4verdic乗数を達成することができます

ベースの4 \ times 4 乗数は、の8 \ times 8verdic乗数を達成することができます

ベースの8 \ times 8 乗数は、の16 \ times 16verdic乗数を達成することができます

ベースの16 \ times 16 乗数は、の32 \ times 32verdic乗数を達成することができます

この時点32 \ times 32で、乗数の構造が完成し、加算器を以下に構築する必要があります。


多くの加算器があります。次のブロック図は、フォワードビット加算器を使用した完全なMACユニットの実装を示しています。

アキュムレータの一般的なアプリケーションは行列乗算です。乗数、加算器、およびアキュムレータの機能を説明するために、例としてドット乗算を取り上げます。

計算されたベクトル\ vec\ vec {b}内積、結果は結果を示します

\ vec {a} = \ begin {bmatrix} a_1 \\ a_2 \\ \ vdots \\ a_n \ end {bmatrix}

\ vec {b} = \ begin {bmatrix} b_1 \\ b_2 \\ \ vdots \\ b_n \ end {bmatrix}

結果= \ vec {a} ^ T \ vec {b} = a_1b_1 + a_2b_2 + \ cdots + a_nb_n

プログラムの意味:

u64 adder(u64 m, u64 n)
{
     return m + n;
}

u64 multiplier(u32 m, u32 n)
{
    return m*n;
}

u64 macs(u32 operand_1, u32 operand_2)
{
    accumulator = 0;
    result = 0;
    
    temp1 = multiplier(operand_1, operand_2);
    carrier, accumulator = adder(temp1, accumulator);
    
    result = accumulator;

    return result, carrier;
}

void dotproduct(u32*a, u32*b)
{
    for(i = 0; i < n; i ++)
    {
        result = macs(a[i], b[i]);
    } 
}

一部のDSPチップでよく見られるスペックメトリック(すべてのクロックサイクル8 32 \ times 32MAC操作16番目の32 \ times 16MAC操作など)は、本質的に、DSPMACのいくつかのそのようなユニットのマイクロアーキテクチャ実装を表します。

MIPSプロセッサMAC命令の実現:

MIPSには、madd、maddu、msub、msubuを含む4つの積和命令と積和命令があります。

その中で

マッドrs、rt。

コマンド機能は次のとおりです。

\ mathbf {\ {HI、LO \} \ leftarrow \ {HI、LO \} + rs \ times rt}

汎用レジスタの値にアドレスrsを乗算し、汎用レジスタの値にアドレスrtを符号付き数値として乗算します。演算の結果は{HI、LO}に加算され、加算の結果は{HI、 LO}、ここで{HI、LO}は、HI、LOレジスタが連結されて64桁の数値を形成することを意味します。

maddu rs、rt。

maddとの唯一の違いは、rsとrtの値が符号なしの数値として扱われることです。

msub rs、rt

\ mathbf {\ {HI、LO \} \ leftarrow \ {HI、LO \}-rs \ times rt}

汎用レジスタの値にアドレスrsを乗算し、汎用レジスタの値にアドレスrtを符号付き数値として乗算し、{HI、LO}を使用して乗算の結果を減算し、減算の結果を{HI、LOに保存します。 }。

msubu rs、rt

msub rs、rtとの唯一の違いは、レジスタの値が符号なしの数値であることです。


終わり!

おすすめ

転載: blog.csdn.net/tugouxp/article/details/113832291