package Communication.FDDI.Binary;

module Adder8( bool ?a7, ?a6, ?a5, ?a4, ?a3, ?a2, ?a1, ?a0,
        ?b7, ?b6, ?b5, ?b4, ?b3, ?b2, ?b1, ?b0, ?cry0,
        !cry8, !sum7, !sum6, !sum5, !sum4, !sum3, !sum2, !sum1, !sum0)
{

  bool cry7, cry6, cry5, cry4, cry3, cry2, cry1;

  cry1 = ((a0 & b0) | ((a0 & cry0) | (b0 & cry0)));
  cry2 = ((a1 & b1) | ((a1 & cry1) | (b1 & cry1)));
  cry3 = ((a2 & b2) | ((a2 & cry2) | (b1 & cry2)));
  cry4 = ((a3 & b3) | ((a3 & cry3) | (b1 & cry3)));
  cry5 = ((a4 & b4) | ((a4 & cry4) | (b1 & cry4)));
  cry6 = ((a5 & b5) | ((a5 & cry5) | (b1 & cry5)));
  cry7 = ((a6 & b6) | ((a6 & cry6) | (b1 & cry6)));
  cry8 = ((a7 & b7) | ((a7 & cry7) | (b1 & cry7)));

  sum0 = !(!(a0 <-> b0) <-> cry0);
  sum1 = !(!(a1 <-> b1) <-> cry1);
  sum2 = !(!(a2 <-> b2) <-> cry2);
  sum3 = !(!(a3 <-> b3) <-> cry3);
  sum4 = !(!(a4 <-> b4) <-> cry4);
  sum5 = !(!(a5 <-> b5) <-> cry5);
  sum6 = !(!(a6 <-> b6) <-> cry6);
  sum7 = !(!(a7 <-> b7) <-> cry7);
}