比較器

比較には、同じかどうかの比較と大小を比べる比較の 2種類があります。

同じかどうかを比較するには 1桁の場合は

  • 0 と 0 同じ
  • 0 と 1 違う
  • 1 と 0 違う
  • 1 と 1 同じ

L譜にすると下になります。
logicname sample

entity cmp
input  a,b;
output c;

   switch(a,b)
      case 0,0: c=1;
      case 0,1: c=0;
      case 1,0: c=0;
      case 1,1: c=1;
   endswitch

ende
endlogic

「同じ」か「違う」かだけでなく、「違う」の場合は a と b の大小をつけることができます。

a b c d 意味
0 0 1 0 同じ
0 1 0 0 aが小さい
1 0 0 1 aが大きい
1 1 1 0 同じ

L譜にすると下になります。
logicname sample

entity cmp
input  a,b;
output c,d;

   switch(a,b)
      case 0,0: c=1; d=0;
      case 0,1: c=0; d=0;
      case 1,0: c=0; d=1;
      case 1,1: c=1; d=0;
   endswitch

ende
endlogic

2桁以上の比較をする場合は上の桁の比較が全桁同じの ときは当桁の比較結果を出力します。 上の桁で大小がついているときは、当桁の出力は使わ ず、上の桁の比較結果を出力に送ります。

logicname sample

{ -------------------------------------- }
{    実効譜                              }
{ -------------------------------------- }
entity cmp
input  ci,di;
input  a,b;
output c,d;

   if (ci & di)
      c=1;
      d=1;
   else
      if (ci)
         switch(a,b)
            case 0,0: c=1; d=0;
            case 0,1: c=0; d=0;
            case 1,0: c=0; d=1;
            case 1,1: c=1; d=0;
         endswitch
      else
         c=ci;
         d=di;
      endif
   endif

ende

{ -------------------------------------- }
{    機能実行譜                          }
{ -------------------------------------- }
entity sim
output ci,di;
output a,b;
output c,d;
bitr   tc[4];

   part cmp(ci,di,a,b,c,d)

   tc=tc+1;

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

ende

endlogic

L譜にすると上になります。 機能実行は下の様になります。