/3/2/RAM16K.hdl

http://github.com/happy4crazy/elements_of_computing_systems · Unknown · 40 lines · 33 code · 7 blank · 0 comment · 0 complexity · 433a8a5332c97624aeec2d6e044788cc MD5 · raw file

  1. // This file is part of the materials accompanying the book
  2. // "The Elements of Computing Systems" by Nisan and Schocken,
  3. // MIT Press. Book site: www.idc.ac.il/tecs
  4. // File name: projects/03/2/RAM16K.hdl
  5. /**
  6. * Memory of 16K registers, each 16-bit wide.
  7. * The chip facilitates read and write operations, as follows:
  8. * Read: out(t) = RAM16K[address(t)](t)
  9. * Write: If load(t-1) then RAM16K[address(t-1)](t) = in(t-1)
  10. * In words: the chip always outputs the value stored at the memory
  11. * location specified by address. If load=1, the in value is loaded
  12. * into the memory location specified by address. This value becomes
  13. * available through the out output starting from the next time step.
  14. */
  15. CHIP RAM16K {
  16. IN in[16], load, address[14];
  17. OUT out[16];
  18. PARTS:
  19. DMux4Way(in=load, sel=address[0..1],
  20. a=load0,
  21. b=load1,
  22. c=load2,
  23. d=load3);
  24. RAM4K(in=in, load=load0, address=address[2..13], out=out0);
  25. RAM4K(in=in, load=load1, address=address[2..13], out=out1);
  26. RAM4K(in=in, load=load2, address=address[2..13], out=out2);
  27. RAM4K(in=in, load=load3, address=address[2..13], out=out3);
  28. Mux4Way16(a=out0,
  29. b=out1,
  30. c=out2,
  31. d=out3,
  32. sel=address[0..1], out=out);
  33. }