
/* D-latch */

#include "Sim.h"

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

   Signal n_D, set, reset, n_q0;

   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()
{
   Sig(in, 4);
   Sig(out, 4);
   Signal Clk;

   /* The input data to be stored */
   Switch ( "aa", in[3], '3', Zero );
   Switch ( "ba", in[2], '2', Zero );
   Switch ( "ca", in[1], '1', Zero );
   Switch ( "da", in[0], '0', Zero );

   Switch( "fa", Clk, 'a', Zero);

   D_Latch( "ab", in[3], Clk, out[3] );
   D_Latch( "bb", in[2], Clk, out[2] );
   D_Latch( "cb", in[1], Clk, out[1] );
   D_Latch( "db", in[0], Clk, out[0] );

   Probe("ac", out[3]);
   Probe("bc", out[2]);
   Probe("cc", out[1]);
   Probe("dc", out[0]);
}
