/* 2-bit adder */

#include "Sim.h"

void simnet()
{
   Sig(a0,1); Sig(a1,1); Sig(b0,1); Sig(b1,1);
   Sig(na0,1); Sig(na1,1); Sig(nb0,1); Sig(nb1,1);
   Sig(Carry,1); Sig(s1,1); Sig(s0,1);
   Signal c1, c2, c3, c4, c5, c6;
   Signal s01, s02, s03, s04, s05, s06, s07, s08;
   Signal s11, s12, s13, s14, s15, s16, s17, s18;

   Switch("ba",a0,'0',Zero); Not("ba",a0,na0);
   Switch("aa",a1,'1',Zero); Not("aa",a1,na1);

   Switch("da",b1,'2',Zero); Not("da",b1,nb1);
   Switch("ea",b0,'3',Zero); Not("ea",b0,nb0);

   Probe("bd",Carry);
   Probe("cd",s1);
   Probe("dd",s0);
   
   And("bb", (nb1,b0,a1,a0), c1);
   And("bb", (b1,nb0,a1,na0), c2);
   And("bb", (b1,nb0,a1,a0), c3);
   And("bb", (b1,b0,na1,a0), c4);
   And("bb", (b1,b0,a1,na0), c5);
   And("bb", (b1,b0,a1,a0), c6);
   
   And("cb", (nb1,nb0,a1,na0), s11);
   And("cb", (nb1,nb0,a1,a0), s12);
   And("cb", (nb1,b0,na1,a0), s13);
   And("cb", (nb1,b0,a1,na0), s14);
   And("cb", (b1,nb0,na1,na0), s15);
   And("cb", (b1,nb0,na1,a0), s16);
   And("cb", (b1,b0,na1,na0), s17);
   And("cb", (b1,b0,a1,a0), s18);
   
   And("db", (nb1,nb0,na1,a0), s01);
   And("db", (nb1,nb0,a1,a0), s02);
   And("db", (nb1,b0,na1,na0), s03);
   And("db", (nb1,b0,a1,na0), s04);
   And("db", (b1,nb0,na1,a0), s05);
   And("db", (b1,nb0,a1,a0), s06);
   And("db", (b1,b0,na1,na0), s07);
   And("db", (b1,b0,a1,na0), s08);
   
   Or("bc", (c1,c2,c3,c4,c5,c6), Carry);
   Or("cc", (s11,s12,s13,s14,s15,s16,s17,s18), s1);
   Or("dc", (s01,s02,s03,s04,s05,s06,s07,s08), s0);
   
}
