/*
 * user.cpp - Biblioteca de m'odulos definidos por el usuario.
 * 'Ultima modificaci'on: 20-02-2002
 *
 * Antonio G'omez Muriana (correo@senco.net)
 * Miguel Montero G'amez
 */

#include "sdlc++/defs.h"
#include "sdlc++/gates.h"
#include "sdlc++/latches.h"
#include "sdlc++/flip-flops.h"
#include "leds.h"
#include "user.h"

void D_LATCH_ENABLE::run(WIRE &D, WIRE &E, WIRE &Q, WIRE &Qn) {
	no.run(n, D);
	na0.run(a, D, E);
	na1.run(b, n, E);
	na2.run(Q, a, Qn);
	na3.run(Qn, b, Q);
}

void REG_48_EN::run(WIRE &EN, WIRE i[48], WIRE o[48]) {
	for (int n = 0; n < 48; n++)
		dl[n].run(i[n], EN, o[n], Qn[n]);
}

void BC_SU_INB_COUNTER::run(WIRE &ck, WIRE &m, WIRE &a, WIRE &b, WIRE &c, WIRE &d, WIRE &e) {
	n.run(mn,m);
	and3.run(abm,3,a,b,mn);
	and2.run(me,m,e);
	or.run(c,abm,me);
	xor.run(cxk,c,m);
	ff.run(c,cxk,ck,d,Qn);
}

void SENCOUNTER5::run(WIRE &ck, WIRE &m, WIRE Q[5], WIRE E[5]) {
	WIRE Vcc=VCC;
	
	c[0].run(ck,m,Vcc ,Vcc ,a[0],Q[0],E[0]);
	c[1].run(ck,m,a[0],Q[0],a[1],Q[1],E[1]);
	c[2].run(ck,m,a[1],Q[1],a[2],Q[2],E[2]);
	c[3].run(ck,m,a[2],Q[2],a[3],Q[3],E[3]);
	c[4].run(ck,m,a[3],Q[3],a[4],Q[4],E[4]);
}