1

我在 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);
}
  1. 负责这里的负载。我知道如果负载为 0 - Dmux4Way 在任何情况下都是 0 0 0 0。但我不明白在那之后它是如何工作的。即它如何允许不要在内存中加载数据。
  2. 至少无法理解为什么在 Screen 中我们提供 address[0..12] 而不是 address[0..14] - 完整地址。在我看来,我们应该使用第二个,因为屏幕内存映射位于 RAM 内存映射之后,如果我们想要请求屏幕内存映射 - 我们应该使用范围 (16 384 - 24 575) - 十进制或 (100000000000000 - 101111111111111) - 二进制。但是我们如何才能表示该范围仅使用 13 宽度总线(地址 [0..12])?不可能。

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

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

4

1 回答 1

4

很抱歉一开始就批评了你,但你提出的问题表明你没有自己做这个练习,或者没有从头开始整个课程。

回答您的问题:
Ad.1。
您将单个位(加载位)解复用到正确的内存部分。此后,您将输入数据同时提供给所有内存部分。

它比其他方式更容易和更整洁,即,将 16 位输入引导到正确的部分(RAM16K、屏幕或键盘),同时在所有部分的每个寄存器上都有一个连接并处于活动状态的加载位。

澄清。写入数据时有 2 个可能的目的地:RAM 和屏幕。您拥有的最小的解复用器是 4 路复用器,这就是您正在使用的。写入内存时,需要同时提供 2 条信息:数据和目标。您可以使用 DMux4Way16 对输入数据进行解复用,并使用 DMux4Way 单独加载单个加载位,但这需要 2 个解复用器,我们可以做得更好。这就是这里所做的,您将数据输入直接输入到 RAM 和屏幕,然后只使用一个解复用器:DMux4Way 选择 2 个可能的目的地之一,只有所选的一个将加载新数据,而另一个数据输入将被忽略。知道了,你需要学习A指令格式:当 A 指令(或 A 寄存器中的数据)的第 14 位和第 13 位具有二进制值00or01时,目标是 RAM。当第 14 位和第 13 位为二进制值10时,表示屏幕是目标。

当您注意到您选择这 2 位作为解复用器的 sel 时。选择 0 和 1 具有相同的含义,因此您可以对它们进行 OR 运算并将输出作为负载馈送到 RAM。选择 2 意味着 Screen 将加载一个新值,因此加载位会在那里。选择 3 从未使用过,所以我们不关心它 - 解复用器的输出d不会连接到任何地方。我们利用解复用器的特性:选定的输出将具有值 1,所有其他输出将产生 0 作为结果。这意味着只会加载 1 个内存目标。
广告 2。
屏幕是独立设备,这里与 RAM、ROM 或键盘存储设备无关。你,也只有你,赋予了比特对这个特定设备意味着什么的意义。要回答您的问题,当您在 Screen 中寻址某个寄存器时,您可以在其自己的内部地址空间中对其进行寻址。在其内部地址空间中,第一个地址将为 0,但在整个内存中它将为 16384。进行此转换是您的工作。在这种特殊情况下,屏幕存储设备的大小不必使用 14 位地址总线,您只需要 13 位即可。在这种情况下,第 14 位意味着什么?它不会增加任何价值。此外,您是 Screen 的用户而非设计者,您只查看并遵循其界面描述。

希望它能回答你的问题,如果没有,我敦促你回去更仔细地学习之前课程中与硬件相关的章节。

于 2018-04-09T07:18:29.483 回答