nand2tetri講座でデータメモリ実装を実現しました。しかし、実装のいくつかの部分が本当にわかりません:
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);
}
- ここで何をロードするかを担当します。load が 0 の場合 - いずれにしても Dmux4Way から 0 0 0 0 になることを理解しています。つまり、メモリにデータをロードしない方法です。
少なくとも、Screen で address[0..14] の代わりに address[0..12] を入力した理由は理解できません - 完全なアドレスです。私の意見では、スクリーン メモリ マップは RAM メモリ マップの後にとどまるため、秒を使用する必要があります。また、スクリーン メモリ マップを要求する場合は、範囲 (16 384 - 24 575) - 10 進数または (100000000000000 - 101111111111111) - バイナリを使用する必要があります。しかし、その範囲を 13 幅のバス (アドレス [0..12]) だけで表現するにはどうすればよいでしょうか??? それは不可能だ。
したがって、画面のメモリ マップを表現したい場合は、上に示した範囲を使用する必要があります。そして、その範囲には15の幅またはアドレス[0..14]がありますが、アドレス[0..12]ではありません(幅13)。しかし、なぜ address[0..12] だけで機能し、address[0..14](full address) が機能しないのですか?
DMux4Way(in=ロード、sel=アドレス[13..14]、a=RAM1、b=RAM2、c=scr、d=kbr);