
/* Cascading D-latches --- NOT a shift register */

#include "Sim.h"

void D_Latch(const SD &coord,
               const Signal &D, const Signal &Clk, 
	       const Signal &q0, const Signal &n_q0)
{
   Module( coord, "D-latch", (D, Clk), (q0, n_q0));

   Signal n_D, set, reset;

   Not( SD(coord,"bc"), D, n_D);
   And( SD(coord,"ad"), (D, Clk),   set);
   And( SD(coord,"bd"), (n_D, Clk), reset);

   Nor( SD(coord,"ae"), (set,  q0),   n_q0);
   Nor( SD(coord,"be"), (reset,n_q0), q0);
}



void simnet()
{
   Signal sw_1, sw_2;
   Signal q11, q12, q21, q22, q31, q32, q41, q42, q51, q52, q61, q62;

   Switch("ba", sw_1, '0', Zero);
   Switch("da", sw_2, '1', Zero);

   D_Latch("bb", sw_1, sw_2, q11, q12);
   Probe("ab", q11);

   D_Latch("bc", q11,  sw_2, q21, q22);
   Probe("ac", q21);

   D_Latch("bd", q21,  sw_2, q31, q32);
   Probe("ad", q31);

   D_Latch("be", q31,  sw_2, q41, q42);
   Probe("ae", q41);

   D_Latch("bf", q41,  sw_2, q51, q52);
   Probe("af", q51);

   D_Latch("bg", q51,  sw_2, q61, q62);
   Probe("ag", q61);
}



