/*
* decods.h -- Descodificadores para SDLC++.
* Ultima modificación: 19-10-2000.
* gse.
*/
/* Descodificador 2:4
*
* in[1] in[0] nin[1] nin[0]
* | | | |
* +-----|-not[1]-+ |
* | +-not[0]-|------+
* | | | | +---+
* | | +------|-|and|___ out[0] = nin[1] & nin[0]
* | | | +-|[0]|
* | | | | +---+
* | | | | +---+
* | +--------|------|-|and|___ out[1] = nin[1] & in[0]
* | | +------|-|[1]|
* | | | | +---+
* | | | | +---+
* +-----|--------|------|-|and|___ out[2] = in[1] & nin[0]
* | | | +-|[2]|
* | | | | +---+
* | | | | +---+
* +-----|--------|------|-|and|___ out[3] = in[1] & in[0]
* | +--------|------|-|[3]|
* | | | | +---+
*/
class DECOD_2_4 {
WIRE nin[2];
NOT not[2];
AND and[4];
public:
void run(WIRE in[2], WIRE out[4]);
};
/* in[4-0] nin[4-0]
* | | | | | | | | | |
* | | | | +-NOT-|-|-|-|-+
* | | | +-|-NOT-|-|-|-+ |
* | | +-|-|-NOT-|-|-+ | |
* | +-|-|-|-NOT-|-+ | | |
* +-|-|-|-|-NOT-+ | | | |
* | | | | | +-|-|-|-|-A
* | | | | | | +-|-|-|-N
* | | | | | | | +-|-|-D--- out[0]
* | | | | | | | | +-|-[0
* | | | | | | | | | +-]
* : : : : : : : : : :
* | | | | |
* +-|-|-|-|---------------A
* +-|-|-|---------------N
* +-|-|---------------D--- out[31]
* +-|---------------[31
* +---------------]
*/
class DECOD_5_32 {
WIRE nin[5];
NOT not[5];
AND and[32];
public:
void run(WIRE in[5], WIRE out[32]);
};
/*
* Descodificador 2:4 con entrada de selección.
* Se trata de un descodificador normal que en cada salida tiene una AND
* cuyas entradas son una de las salidas del descodificador normal y la
* entrada de selección. Este tipo de descodificador es muy útil en la
* construcción de memorias.
*/
class DECOD_2_4_SEL {
DECOD_2_4 dec;
AND and[4];
WIRE o[4];
public:
void run(WIRE in[2], WIRE &select, WIRE out[4]);
};
class DECOD_5_32_SEL {
DECOD_5_32 dec;
AND and[32];
WIRE o[32];
public:
void run(WIRE in[5], WIRE &select, WIRE out[32]);
};
/*
* Descodificador de tamaño variable.
*/
class DECOD {
WIRE *nin;
NOT *not;
AND *and;
int num_sels; // Número de entradas de selección (no hardware)
//WIRE *aux; // Array auxiliar que no forma parte de la descripción
// real del descodificador (no hardware)
public:
DECOD();
DECOD(int num_sels);
~DECOD();
void create(int num_sels); // Asigna memoria a los componentes internos
void destroy(); // Libera la memoria
void run(WIRE *in, WIRE *out); // Simula el descodificador
};