next up previous
Next: test_srams.c Up: Práctica 11. Memorias SRAM Previous: srams.h

srams.c

/*
 * srams.c -- Implementación de las SRAMs.
 * Ultima modificación: 8-11-00.
 * gse.
 */

#include "defs.h"
#include "gates.h"
#include "decods.h"
#include "muxs.h"
#include "latches.h"
#include "srams.h"

void SRAM_BIT::run(WIRE &in, WIRE &select, WIRE &write, WIRE &out) {
  n.run(nin,in);
  a0.run(r,3,write,nin,select);
  a1.run(s,3,write,in,select);
  f.run(s,r,q,qn);
  b.run(out,q,select);
}

void BIT_4x4_Array::run(WIRE in[4], WIRE &blksel,
                        WIRE sel[4], WIRE &write, WIRE out[4]) {
  int i,r,c;
  for(i=0;i<4;i++)
    a[i].run(s[i],blksel,sel[i]);
  for(r=0;r<4;r++)
    for(c=0;c<4;c++)
      b[r][c].run(in[c],s[r],write,out[c]);
}

void SRAM_16x4::run(WIRE &select, WIRE &write, WIRE addr[4],
                    WIRE in[4], WIRE out[4]) {
  dec_sel.run(addr+2,select,blksel);
  dec.run(addr,sel);
  for(int i=0;i<4;i++) {
    blk[i].run(in,blksel[i],sel,write,out);
  }
}

void SRAM_16x32::run(WIRE &select, WIRE &write, WIRE addr[4],
                     WIRE in[32], WIRE out[32]) {
  for(int i=0;i<8;i++) {
    blk[i].run(select,write,addr,in+i*4,out+i*4);
  }
}

void SRAM_64x32::run(WIRE &select, WIRE &write, WIRE addr[6],
                     WIRE in[32], WIRE out[32]) {
  dec.run(addr+4,select,this->select);
  for(int i=0;i<4;i++) {
    blk[i].run(this->select[i],write,addr,in,out);
  }
}




2000-11-08