Source: decods.h


Annotated List
Files
Globals
Hierarchy
Index
/*
 * decods.h -- Descodificadores para SDLC++.
 * Ultima modificaci'on: 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'on.
 * 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'on. Este tipo de descodificador es muy 'util en la
 * construcci'on 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~no variable.
 */
class DECOD {
  WIRE *nin;
  NOT *not;
  AND *and;
  int num_sels; // N'umero de entradas de selecci'on (no hardware)
  int num_outs; /* N'umero de salidas del descodificador */
  WIRE *aux;    // Array auxiliar que no forma parte de la descripci'on
                // real del descodificador (no hardware). Se usa para
 public:
  DECOD();      /* Declara un descodificador pero no asigna memoria.
		   Se usa cuando es necesario declarar el
		   descodificador y en tiempo de compilaci'on no se
		   conoce su tama~no. */
  DECOD(int num_sels);  /* Declara el descodificador de tama~no
			   variable. Esta declaraci'on se usa cuando
			   su tama~no es conocido en tiempo de
			   compilaci'on. */
  ~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
};

Generated by: root@localhost.localdomain on Sat Dec 2 02:26:22 200.