一桁の加算器

一桁の加算器を作ります。 まず2進数で1桁の計算を考えると


  • 0 + 0 = 0
  • 0 + 1 = 1
  • 1 + 0 = 1
  • 1 + 1 = 0

上のようになります。 1 + 1 のときは上の桁に桁上がりしています。 下の桁からの桁上がりを考慮すると


  • 0 + 0 + 1 = 1  なし
  • 0 + 1 + 1 = 0  あり
  • 1 + 0 + 1 = 0  あり
  • 1 + 1 + 1 = 1  あり

3番目に足されている 1 は下からの桁上げです、 「あり」 とは桁上げのあること 「なし」 とは桁上げのないことです。 総合すると


  • 0 + 0 + 0 = 0  なし
  • 0 + 1 + 0 = 1  なし
  • 1 + 0 + 0 = 1  なし
  • 1 + 1 + 0 = 0  あり
  • 0 + 0 + 1 = 1  なし
  • 0 + 1 + 1 = 0  あり
  • 1 + 0 + 1 = 0  あり
  • 1 + 1 + 1 = 1  あり

になります。 これは下からの桁上がりも考慮したものなので、2桁 以上の加算が必要なときは、これを積み上げれば加算 の答えが求まります。 また2進数の一桁の加算の入力と出力の関係も分かり ました。


真理値表
入力 下位桁上げ 出力 上位桁上げ
0 0 0 0 0
0 1 0 1 0
1 0 0 1 0
1 1 0 0 1
0 0 1 1 0
0 1 1 0 1
1 0 1 0 1
1 1 1 1 1

上の真理値表になります。 入力を a ,b として下位の桁上げを ci として、出 力を q として上位への桁上げを co とすると


logicname sample

entity add
input  a,b;
input  ci;
output q;
output co;

   switch(a,b,ci)
      case 0,0,0: q=0; co=0; 
      case 0,1,0: q=1; co=0; 
      case 1,0,0: q=1; co=0; 
      case 1,1,0: q=0; co=1; 
      case 0,0,1: q=1; co=0; 
      case 0,1,1: q=0; co=1; 
      case 1,0,1: q=0; co=1; 
      case 1,1,1: q=1; co=1; 
   endswitch
ende

endlogic

実効譜だけの論理譜ができます。


logicname sample

entity add
input  a,b;
input  ci;
output q;
output co;

   switch(a,b,ci)
      case 0,0,0: q=0; co=0; 
      case 0,1,0: q=1; co=0; 
      case 1,0,0: q=1; co=0; 
      case 1,1,0: q=0; co=1; 
      case 0,0,1: q=1; co=0; 
      case 0,1,1: q=0; co=1; 
      case 1,0,1: q=0; co=1; 
      case 1,1,1: q=1; co=1; 
   endswitch
ende

entity sim
output a,b;
output ci;
output q;
output co;
bitr   tc[5];

   part add(a,b,ci,q,co)

   tc=tc+1;

   a=tc.0;
   b=tc.1;
   ci=tc.2;

ende

endlogic

機能実行譜を付けました。