next up previous
Next: Sobre este documento... Up: Práctica 2. Simulación de Previous: >Por qu'e hacen falta

Implementaci'on del cerrojo SR usando objetos

La declaraci'on de la clase que define un objeto del tipo NAND se realiza en C++ con el siguiente c'odigo:
class NAND {
 public:
  void run(unsigned char in0,
           unsigned char in1,
           unsigned char &out) {
    out = ~(in0 & in1);
  }
};

La clase que declara un objeto del tipo SR_latch podr'ia ser:

class SR_latch {
  NAND g0,g1;
 public:
  void run(unsigned char S,
           unsigned char R,
           unsigned char &Q,
           unsigned char &Qn) {
    g0.run(S,Q,Qn);
    g1.run(R,Qn,Q);
  }
};
N'otese que en la zona privada de la clase, se indica que cada cerrojo SR se compone de dos puertas NAND llamadas internamente g0 y g1. El cerrojo SR puede ser usado como una caja negra, de la que no es necesario conocer su interior para usarla. Esta es la gran ventaja del desarrollo jer'arquico de programas mediante objetos.

Por 'ultimo, el simulador del cerrojo podr'ia implementarse como:

#include <stdio.h>

void main() {
  int iter;
  unsigned char S=255, R=0, Q, Qn;
  SR_latch latch;
  for(iter=0; iter<10; iter++) {
    latch.run(S,R,Q,Qn);
    printf("S=%3d R=%3d Q=%3d Qn=%3d\n",S,R,Q,Qn);
  }
  S=0; R=255;
  for(iter=0; iter<10; iter++) {
    latch.run(S,R,Q,Qn);       
    printf("S=%3d R=%3d Q=%3d Qn=%3d\n",S,R,Q,Qn);
  }
  S=0; R=0;
  for(iter=0; iter<10; iter++) {
    latch.run(S,R,Q,Qn);       
    printf("S=%3d R=%3d Q=%3d Qn=%3d\n",S,R,Q,Qn);
  }
  S=255; R=255;
  for(iter=0; iter<10; iter++) {
    latch.run(S,R,Q,Qn);         
    printf("S=%3d R=%3d Q=%3d Qn=%3d\n",S,R,Q,Qn);
  }
}

La salida es:

S=255 R=  0 Q=255 Qn=211
S=255 R=  0 Q=255 Qn=  0
S=255 R=  0 Q=255 Qn=  0
S=255 R=  0 Q=255 Qn=  0
S=255 R=  0 Q=255 Qn=  0
S=255 R=  0 Q=255 Qn=  0
S=255 R=  0 Q=255 Qn=  0
S=255 R=  0 Q=255 Qn=  0
S=255 R=  0 Q=255 Qn=  0
S=255 R=  0 Q=255 Qn=  0
S=  0 R=255 Q=  0 Qn=255
S=  0 R=255 Q=  0 Qn=255
S=  0 R=255 Q=  0 Qn=255
S=  0 R=255 Q=  0 Qn=255
S=  0 R=255 Q=  0 Qn=255
S=  0 R=255 Q=  0 Qn=255
S=  0 R=255 Q=  0 Qn=255
S=  0 R=255 Q=  0 Qn=255
S=  0 R=255 Q=  0 Qn=255
S=  0 R=255 Q=  0 Qn=255
S=  0 R=  0 Q=255 Qn=255
S=  0 R=  0 Q=255 Qn=255
S=  0 R=  0 Q=255 Qn=255
S=  0 R=  0 Q=255 Qn=255
S=  0 R=  0 Q=255 Qn=255
S=  0 R=  0 Q=255 Qn=255
S=  0 R=  0 Q=255 Qn=255
S=  0 R=  0 Q=255 Qn=255
S=  0 R=  0 Q=255 Qn=255
S=  0 R=  0 Q=255 Qn=255
S=255 R=255 Q=255 Qn=  0
S=255 R=255 Q=255 Qn=  0
S=255 R=255 Q=255 Qn=  0
S=255 R=255 Q=255 Qn=  0
S=255 R=255 Q=255 Qn=  0
S=255 R=255 Q=255 Qn=  0
S=255 R=255 Q=255 Qn=  0
S=255 R=255 Q=255 Qn=  0
S=255 R=255 Q=255 Qn=  0
S=255 R=255 Q=255 Qn=  0

Como puede apreciarse, ambas simulaciones son id'enticas. Comprobar adem'as que el orden en el que las puertas son llamadas es irrelevante.



Vicente González Ruiz 2001-10-03