next up previous
Next: decods.c Up: Práctica 5. Descodificadores Previous: Práctica 5. Descodificadores

decods.h

Implementa las clases de los descodificadores implementados.

/*
 * 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
};



Vicente González Ruiz 2001-10-17