PageRenderTime 7ms CodeModel.GetById 2ms app.highlight 1ms RepoModel.GetById 2ms app.codeStats 0ms

/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/**
 7 * Memory of 16K registers, each 16-bit wide.  
 8 * The chip facilitates read and write operations, as follows:
 9 *     Read:  out(t) = RAM16K[address(t)](t)
10 *     Write: If load(t-1) then RAM16K[address(t-1)](t) = in(t-1)
11 * In words: the chip always outputs the value stored at the memory 
12 * location specified by address. If load=1, the in value is loaded 
13 * into the memory location specified by address.  This value becomes 
14 * available through the out output starting from the next time step.
15 */
16
17
18CHIP RAM16K {
19
20    IN  in[16], load, address[14];
21    OUT out[16];
22
23    PARTS:
24    DMux4Way(in=load, sel=address[0..1],
25             a=load0,
26             b=load1,
27             c=load2,
28             d=load3);
29
30    RAM4K(in=in, load=load0, address=address[2..13], out=out0);
31    RAM4K(in=in, load=load1, address=address[2..13], out=out1);
32    RAM4K(in=in, load=load2, address=address[2..13], out=out2);
33    RAM4K(in=in, load=load3, address=address[2..13], out=out3);
34
35    Mux4Way16(a=out0,
36              b=out1,
37              c=out2,
38              d=out3,
39              sel=address[0..1], out=out);
40}