PageRenderTime 373ms CodeModel.GetById 191ms app.highlight 1ms RepoModel.GetById 180ms app.codeStats 0ms

/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
 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/1/RAM64.hdl
 5
 6/**
 7 * Memory of 64 registers, each 16-bit wide.  
 8 * The chip facilitates read and write operations, as follows:
 9 *     Read:  out(t) = RAM64[address(t)](t)
10 *     Write: If load(t-1) then RAM64[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
17CHIP RAM64 {
18
19    IN in[16], load, address[6];
20    OUT out[16];
21
22    PARTS:
23
24    DMux8Way(in=load, sel=address[0..2],
25             a=load0,
26             b=load1,
27             c=load2,
28             d=load3,
29             e=load4,
30             f=load5,
31             g=load6,
32             h=load7);
33
34    RAM8(in=in, load=load0, address=address[3..5], out=out0);
35    RAM8(in=in, load=load1, address=address[3..5], out=out1);
36    RAM8(in=in, load=load2, address=address[3..5], out=out2);
37    RAM8(in=in, load=load3, address=address[3..5], out=out3);
38    RAM8(in=in, load=load4, address=address[3..5], out=out4);
39    RAM8(in=in, load=load5, address=address[3..5], out=out5);
40    RAM8(in=in, load=load6, address=address[3..5], out=out6);
41    RAM8(in=in, load=load7, address=address[3..5], out=out7);
42
43
44    Mux8Way16(a=out0,
45              b=out1,
46              c=out2,
47              d=out3,
48              e=out4,
49              f=out5,
50              g=out6,
51              h=out7,
52              sel=address[0..2], out=out);
53
54}