/3/1/RAM64.hdl
http://github.com/happy4crazy/elements_of_computing_systems · Unknown · 54 lines · 45 code · 9 blank · 0 comment · 0 complexity · a3b0b53dd3f9c5b280aafbb093dd89f4 MD5 · raw file
- // This file is part of the materials accompanying the book
- // "The Elements of Computing Systems" by Nisan and Schocken,
- // MIT Press. Book site: www.idc.ac.il/tecs
- // File name: projects/03/1/RAM64.hdl
-
- /**
- * Memory of 64 registers, each 16-bit wide.
- * The chip facilitates read and write operations, as follows:
- * Read: out(t) = RAM64[address(t)](t)
- * Write: If load(t-1) then RAM64[address(t-1)](t) = in(t-1)
- * In words: the chip always outputs the value stored at the memory
- * location specified by address. If load=1, the in value is loaded
- * into the memory location specified by address. This value becomes
- * available through the out output starting from the next time step.
- */
-
- CHIP RAM64 {
-
- IN in[16], load, address[6];
- OUT out[16];
-
- PARTS:
-
- DMux8Way(in=load, sel=address[0..2],
- a=load0,
- b=load1,
- c=load2,
- d=load3,
- e=load4,
- f=load5,
- g=load6,
- h=load7);
-
- RAM8(in=in, load=load0, address=address[3..5], out=out0);
- RAM8(in=in, load=load1, address=address[3..5], out=out1);
- RAM8(in=in, load=load2, address=address[3..5], out=out2);
- RAM8(in=in, load=load3, address=address[3..5], out=out3);
- RAM8(in=in, load=load4, address=address[3..5], out=out4);
- RAM8(in=in, load=load5, address=address[3..5], out=out5);
- RAM8(in=in, load=load6, address=address[3..5], out=out6);
- RAM8(in=in, load=load7, address=address[3..5], out=out7);
-
-
- Mux8Way16(a=out0,
- b=out1,
- c=out2,
- d=out3,
- e=out4,
- f=out5,
- g=out6,
- h=out7,
- sel=address[0..2], out=out);
-
- }