8桁比較器

一桁の比較器を手続きにして、それを8個使用します 。

logicname sample

{ -------------------------------------- }
{    手続き譜                            }
{ -------------------------------------- }
procedure cmp
input  ci,di;
input  a,b;
output q[2];
bitn   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

   q.0=c;
   q.1=d;
endp

{ -------------------------------------- }
{    実効譜                              }
{ -------------------------------------- }
entity cmp8
input  a[8],b[8];
output q[2];
bitn   q0p[2];
bitn   q1p[2];
bitn   q2p[2];
bitn   q3p[2];
bitn   q4p[2];
bitn   q5p[2];
bitn   q6p[2];
bitn   q7p[2];

   q7p=cmp(1,0,a.7,b.7);
   q6p=cmp(q7p.0,q7p.1,a.6,b.6);
   q5p=cmp(q6p.0,q6p.1,a.5,b.5);
   q4p=cmp(q5p.0,q5p.1,a.4,b.4);
   q3p=cmp(q4p.0,q4p.1,a.3,b.3);
   q2p=cmp(q3p.0,q3p.1,a.2,b.2);
   q1p=cmp(q2p.0,q2p.1,a.1,b.1);
   q0p=cmp(q1p.0,q1p.1,a.0,b.0);
   
   q.0=q0p.0;
   q.1=q0p.1;
ende

{ -------------------------------------- }
{    機能実行譜                          }
{ -------------------------------------- }
entity sim
output a[8],b[8];
output q[2];
bitr   tc[16];

   part cmp8(a,b,q)

   tc=tc+1;

   a=tc.0:7;
   b=tc.8:15;;

ende

endlogic

機能実行は6万ステップを超えているので LSIM .OUT と LSIM .LBL を 圧縮ファイル にしました。 これを展開して LSIM View で見てください。

8桁以上の比較器は手続きの使用個数を必要分増やせ ばできます。