-
Notifications
You must be signed in to change notification settings - Fork 6
/
RAM512.hdl
executable file
·28 lines (25 loc) · 1.27 KB
/
RAM512.hdl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 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/b/RAM512.hdl
/**
* Memory of 512 registers, each 16 bit-wide. Out holds the value
* stored at the memory location specified by address. If load==1, then
* the in value is loaded into the memory location specified by address
* (the loaded value will be emitted to out from the next time step onward).
*/
CHIP RAM512 {
IN in[16], load, address[9];
OUT out[16];
PARTS:
RAM64(in=in, load=loadA, address=address[0..5], out=ramA);
RAM64(in=in, load=loadB, address=address[0..5], out=ramB);
RAM64(in=in, load=loadC, address=address[0..5], out=ramC);
RAM64(in=in, load=loadD, address=address[0..5], out=ramD);
RAM64(in=in, load=loadE, address=address[0..5], out=ramE);
RAM64(in=in, load=loadF, address=address[0..5], out=ramF);
RAM64(in=in, load=loadG, address=address[0..5], out=ramG);
RAM64(in=in, load=loadH, address=address[0..5], out=ramH);
DMux8Way(in=load, sel=address[6..8], a=loadA, b=loadB, c=loadC, d=loadD, e=loadE, f=loadF, g=loadG, h=loadH);
Mux8Way16(a=ramA, b=ramB, c=ramC, d=ramD, e=ramE, f=ramF, g=ramG, h=ramH, sel=address[6..8], out=out);
}