next up previous
Next: Desarrollo de la práctica Up: Práctica 11. Memorias SRAM Previous: srams.c

test_srams.c

#include "defs.h"
#include "gates.h"
#include "decods.h"
#include "muxs.h"
#include "latches.h"
#include "srams.h"
#include <stdio.h>

#ifdef _SRAM_BIT_
#include "clock.h"
void main() {
  FILE *data=fopen("data","w");
  FILE *data_sdl=fopen("data.sdl","w");
   int iters = 500;
  WIRE
    in = GND,
    select = GND,
    write = GND,
    out = GND;
  SRAM_BIT sbit;
  fprintf(data,"in write select out");
  while(iters--) {
    Clock(iters,7,in);
    Clock(iters,200,write);
    Clock(iters,33,select);
    sbit.run(in,select,write,out);
    fprintf(data_sdl,"%3d %3d %3d %3d\n",in,write,select,out);
  }
}
#endif

#ifdef _SRAM_16x4_
#include "clock.h"
#include "random.h"
void main() {
  FILE *data=fopen("data","w");
  FILE *data_sdl=fopen("data.sdl","w");
  int
    iters = 1000,
    i;
  WIRE
    select  = GND,
    write   = GND,
    addr[4] = {GND,GND,GND,GND},
    in[4]   = {GND,GND,GND,GND},
    out[4]  = {GND,GND,GND,GND};
    SRAM_16x4 sram;
  fprintf(data,"select write addr[0] addr[1] addr[2] addr[3] in[0] \
in[1] in[2] in[3] out[0] out[1] out[2] out[3]");
  while(iters--) {
    Clock(iters,256,select);
    Clock(iters,128,write);
    for(i=0;i<4;i++) Clock(iters,1<<(i+5),addr[i]);
    for(i=0;i<4;i++) Random(iters,15,in[i]);
    sram.run(select,write,addr,in,out);
    fprintf(data_sdl,"%4d%4d",select,write);
    for(i=0;i<4;i++) fprintf(data_sdl,"%4d",addr[i]);
    for(i=0;i<4;i++) fprintf(data_sdl,"%4d",in[i]);
    for(i=0;i<4;i++) fprintf(data_sdl,"%4d",out[i]);
    fprintf(data_sdl,"\n");
  }
}
#endif
#ifdef _SRAM_16x4_B_
void main() {
  int
    iters = 1000,
    i;
  WIRE
    select,
    write,
    addr[4],
    in[4],
    out[4];
  SRAM_16x4 sram;
  select=VCC; // Habilitamos la memoria para ser leida o escrita
  write =GND; // Vamos a leer la memoria, no a escribir
  // Direccionamos la posición 15
  addr[3] = VCC; addr[2] = VCC; addr[1] = VCC; addr[0] = VCC;
  printf("Simulación de una memoria SRAM con 16 palabras de 4 bits.\n");
  printf("La memoria ha sido configurada para ser leida (select=1 y write=0).\n");
  printf("Van a ser mostrados 25 iteraciones de simulación.\n");
  printf("La dirección de memoria seleccionada es la 15.\n");
  printf("El contenido de esta dirección es (memoria no inicializada):\n");
  for(i=0;i<25;i++) {
    printf("%5d",i);
    sram.run(select,write,addr,in,out);
    for(int j=3;j>=0;j--)
      printf("%4d",out[j]);
    printf("\n");
  }
  printf("Como se aprecia, la lectura de la memoria se produce en ... qué ciclo?\n");
  printf("Ahora vamos a escribir sobre la dirección 15 la palabra 1010.\n");
  printf("Usaremos 25 iteraciones de simulación para asegurarnos ");
  printf("que la escritura se produce.\n");
  printf("Como la memoria siempre se está leyendo pues está selecionada, ");
  printf("presentaremos también el contenido del bus de salida.\n");
  printf("Cuando este valga lo mismo que hay a la entrada, diremos que la ");
  printf("memoria se ha escrito ...\n Cuántos ciclos tarda en escribirse?\n");
  write = VCC;
  in[3] = VCC; in[2] = GND; in[1] = VCC; in[0] = GND;
  for(i=0;i<50;i++) {
    printf("%5d",i);
    sram.run(select,write,addr,in,out);
    for(int j=3;j>=0;j--)
      printf("%4d",in[j]);
    printf(" |");
    for(int j=3;j>=0;j--)
      printf("%4d",out[j]);
    printf("\n");
  }
  printf("Ahora vamos a tratar de modificar la palabra de la dirección \
de memoria\n");
  printf("15, escribiendo ahora 0000. Sin embargo, haremos que la \
entrada \"write\"=0\n");
  printf("para que la memoria no se habilitada para escritura.\n");
  printf("Es de esperar en este caso el valor almacenado (1010) \
permanezca inalterable.\n");
  printf("Esperamemos a ver si se produce la escritura durante 50 iteraciones.\n");
  write = GND;
  in[3] = GND; in[2] = GND; in[1] = GND; in[0] = GND;
  for(i=0;i<50;i++) {
    printf("%5d",i);
    sram.run(select,write,addr,in,out);
    for(int j=3;j>=0;j--)
      printf("%4d",in[j]);
    printf(" |");
    for(int j=3;j>=0;j--)
      printf("%4d",out[j]);
    printf("\n");
  }
  printf("Simulación finalizada.\n");
}
#endif




2000-11-08