第3章 言語による論理設計 3.4 乗算器

| | コメント(0) | トラックバック(0)

3.4 乗算器

 2桁以上の乗算は筆算で図3.27 のように行われます。この中でも乗算がありますが、これは1 桁の乗算で九九の表を使います。乗算結果のところで乗算をしていますが, これは桁位置を変えるだけで実際に計算する必要はありません。

FIG38.jpg
図3.27 筆算の乗算

 桁位置をずらして加算するだけで乗算の結果が得られます。たくさんの加算器を使う非記憶の方法と加算器をひとつだけ使う記憶の方法があります。どちらの場合も2 進数で計算しますから、1 桁の計算は次の4 種類です。

  •  0 × 0=0
  •  0 × 1=0
  •  1 × 0=0
  •  1 × 1=1
 これを真理値表と見ると論理積と同じ結果になっていますから、2 進数の1 桁の乗算にはとくに論理を作る必要はありません。図3.27 の乗算結果は10 進数の場合ですから10 倍から100 倍,1000 倍・・・・となりますが、2 進数では2 倍から4 倍,8 倍・・・・となります。これらは、10 進数の場合でも2 進数の場合でも1 桁上位にずらすことでできますが、2 進数の場合は1 ビット上位にずらすことで行えます。

3.4.1 非記憶方式
 図3.27 と同じ方法で、2 進数の8 ビットどうしを乗算して16 ビットの結果を得る非記憶の乗算器をリスト21に作りました。

リスト21 8 ビットの乗算器(非記憶)
entity main
input A[8];
input B[8];
output C[16];

bitn n0p[16];
bitn n1p[16];
bitn n2p[16];
bitn n3p[16];
bitn n4p[16];
bitn n5p[16];
bitn n6p[16];
bitn n7p[16];

  n0p.0=B.0&A.0;
  n0p.1=B.0&A.1;
  n0p.2=B.0&A.2;
  n0p.3=B.0&A.3;
  n0p.4=B.0&A.4;
  n0p.5=B.0&A.5;
  n0p.6=B.0&A.6;
  n0p.7=B.0&A.7;

  n1p.1=B.1&A.0;
  n1p.2=B.1&A.1;
  n1p.3=B.1&A.2;
  n1p.4=B.1&A.3;
  n1p.5=B.1&A.4;
  n1p.6=B.1&A.5;
  n1p.7=B.1&A.6;
  n1p.8=B.1&A.7;

  n2p.2=B.2&A.0;
  n2p.3=B.2&A.1;
  n2p.4=B.2&A.2;
  n2p.5=B.2&A.3;
  n2p.6=B.2&A.4;
  n2p.7=B.2&A.5;
  n2p.8=B.2&A.6;
  n2p.9=B.2&A.7;

  n3p.3 =B.3&A.0;
  n3p.4 =B.3&A.1;
  n3p.5 =B.3&A.2;
  n3p.6 =B.3&A.3;
  n3p.7 =B.3&A.4;
  n3p.8 =B.3&A.5;
  n3p.9 =B.3&A.6;
  n3p.10=B.3&A.7;

  n4p.4 =B.4&A.0;
  n4p.5 =B.4&A.1;
  n4p.6 =B.4&A.2;
  n4p.7 =B.4&A.3;
  n4p.8 =B.4&A.4;
  n4p.9 =B.4&A.5;
  n4p.10=B.4&A.6;
  n4p.11=B.4&A.7;

  n5p.5 =B.5&A.0;
  n5p.6 =B.5&A.1;
  n5p.7 =B.5&A.2;
  n5p.8 =B.5&A.3;
  n5p.9 =B.5&A.4;
  n5p.10=B.5&A.5;
  n5p.11=B.5&A.6;
  n5p.12=B.5&A.7;

  n6p.6 =B.6&A.0;
  n6p.7 =B.6&A.1;
  n6p.8 =B.6&A.2;
  n6p.9 =B.6&A.3;
  n6p.10=B.6&A.4;
  n6p.11=B.6&A.5;
  n6p.12=B.6&A.6;
  n6p.13=B.6&A.7;

  n7p.7 =B.7&A.0;
  n7p.8 =B.7&A.1;
  n7p.9 =B.7&A.2;
  n7p.10=B.7&A.3;
  n7p.11=B.7&A.4;
  n7p.12=B.7&A.5;
  n7p.13=B.7&A.6;
  n7p.14=B.7&A.7;

  C=n0p+n1p+n2p+n3p+n4p+n5p+n6p+n7p;
ende
 図3.27 のJ . M に相当する部分がn0p~n7pです、8 ビットなので8 段になります、これを全部加算するとC=A×B の乗算結果が得られます。
 図3.28 がリスト21 を実行したものです。
 乗算器は言語の演算子でも提供されていますが、必要なビット数よりも大きな乗算器を使わないように自分で作ったものを使用すると論理の大きさを適切なものにできます。筆算方式を使う場合には非記憶の場合も記憶の場合も論理がわかっておりビット数に応じた構成にすることも簡単です。

FIG39.jpg
図3.28  リスト21の実行 

3.4.2 記憶方式
 記憶方式の乗算器は加算器とシフトレジスタで作ることができます、計算の方法は筆算の方法と同じです。リスト22 でC=A×B の計算をしています。論理の構成は図3.29 のようになっています。

 記憶方式の乗算器は非記憶の乗算器のリスト21 のn0p~n7p の計算を時分割で行ってacc に累算していきます。8 ビットの乗算器なら累算は8 回で終了しますが入力値によってはそれより短くなり ます、それはb の上位8 ビットが0 になったことでわかります。
 
FIG36.jpg
図3.29 乗算器の構成
 
リスト22 8ビットの乗算器(記憶)
entity main
input RESET; 
input A[8]; 
input B[8]; 
output C[16];
output READY; 

bitr a[16],b[16]; 
bitr acc[16]; 

  C=acc; 

  switch(b.8:15)
    case 0: READY=1;
  endswitch

  if (RESET) 
    a.0:7=A; {下8 ビットに設置} 
    b.8:15=B; { 上8 ビットに設置}
  else
    a.1:15=a.0:14; { 上桁移動} 
    b.0:14=b.1:15; { 下桁移動}
  endif  
  
  if (RESET)
    acc=0;
  else
    if (b.8)
      acc=acc+a; { 累算}
    else
      acc=acc;
    endif
  endif
ende
 図3.30 はリスト22 を実行したものです。

FIG37.jpg
図3.30 リスト22 の実行

渕上賢二

 

トラックバック(0)

このブログ記事を参照しているブログ一覧: 第3章 言語による論理設計 3.4 乗算器

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/2099

コメントする

このブログ記事について

このページは、yoshidaが2008年10月 8日 15:13に書いたブログ記事です。

ひとつ前のブログ記事は「第3章 言語による論理設計 3.3 記憶」です。

次のブログ記事は「第3章 言語による論理設計 3.5 除算器」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.1