小编hel*_*eet的帖子

nand2俄罗斯方块。内存实现

我在nand2tetris课程中实现了数据存储器的实现。但我真的不明白我的实现的某些部分:

CHIP Memory {
    IN in[16], load, address[15];
    OUT out[16];

    PARTS:

    DMux4Way(in=load, sel=address[13..14], a=RAM1, b=RAM2, c=scr, d=kbr);
    Or(a=RAM1, b=RAM2, out=RAM);

    RAM16K(in=in, load=RAM, address=address[0..13], out=RAMout);
    Screen(in=in, load=scr, address=address[0..12], out=ScreenOut);
    Keyboard(out=KeyboardOut);

    Mux4Way16(a=RAMout, b=RAMout, c=ScreenOut, d=KeyboardOut, sel=address[13..14], out=out);
}
Run Code Online (Sandbox Code Playgroud)
  1. 这里负责什么负载。我知道如果负载为 0 - 在任何情况下 Dmux4Way 的输出都将为 0 0 0 0。但我不明白在这种情况下它是如何工作的。即它如何允许不将数据加载到内存中。
  2. 至少无法理解为什么在屏幕中我们输入地址[0..12]而不是地址[0..14] - 完整地址。在我看来,我们应该使用第二个,因为屏幕内存映射位于 RAM 内存映射之后,如果我们想要请求屏幕内存映射 - 我们应该使用范围 (16 384 - 24 575) - 十进制或 (100000000000000 - 101111111111111) - 二进制。但是我们如何仅使用 13 宽度总线(地址[0..12])来表示该范围???不可能。

    因此,如果我们想表示屏幕内存映射,我们应该使用上面介绍的范围。该范围具有 15 宽度或地址[0..14],但不是地址[0..12](宽度 13)。但为什么只工作地址[0..12]而不起作用地址[0..14](完整地址)

DMux4Way(in=加载,sel=地址[13..14],a=RAM1,b=RAM2,c=scr,d=kbr);

memory hdl nand2tetris

1
推荐指数
1
解决办法
7364
查看次数

标签 统计

hdl ×1

memory ×1

nand2tetris ×1