在Nand2tetris CPU的基础上,如下图,想知道以下几点:
(什么/多少)在每个时钟周期内发生? (见 IMG_1 和 IMG_2)
作为问题 1 的后续问题,程序计数器应该何时更改?
请注意,我知道时钟是什么以及何时
在Nand2tetris CPU的基础上,如下图,想知道以下几点:
(什么/多少)在每个时钟周期内发生? (见 IMG_1 和 IMG_2)
作为问题 1 的后续问题,程序计数器应该何时更改?
请注意,我知道时钟是什么以及何时
Nand2Tetris 仿真掩盖了时钟的许多细微之处。没有滴答/滴答阶段。相反,有一个特殊的 DFF(数据触发器)组件可以满足对内存的需求。
可视化它的方法是将组件划分为没有内部状态的组件(那些是其输入的纯函数,例如没有 DFF 构建的任何组件)。当它们的输入发生变化时,它们会立即改变它们的输出状态。
DFF 基本上将其新状态计算为其输入的纯函数,但将输出该状态延迟一个周期。所以它有一个内部记忆,它在前一个周期中的状态。事实证明,这就是实现相当于滴答/滴答时钟所需的全部内容。
有关更多详细信息,请参阅https://docs.wixstatic.com/ugd/56440f_e458602dcb0c4af9aaeb7fdaa34bb2b4.pdf 。
DFF 将在滴答阶段“锁定”输入。然后在 tock 阶段输出。
假设你有一个 A 指令。在滴答阶段,A 寄存器锁存到指令中的值。但是旧的 A 寄存器值仍然是输出。在 tock 阶段,A 寄存器最终输出新值。您可以在硬件模拟器中验证这一点。
我们需要滴答声的原因是电路反馈。
假设你想做 A=A+D。你已经有了 A 和 D 值。时钟上没有滴答声:
...直到我们决定读取该值。因此,您无法确定 add ALU 指令将执行多少次。
但是对于滴答时钟,在滴答阶段,A 值离开 A 寄存器并进入 ALU,然后 ALU 值回到 A 寄存器。但只有在“tock”中,A 寄存器才开始输出这个新值。因此,您可以使用时钟的滴答声来确定 CPU 的状态。
程序计数器也是一个 DFF。因此,在滴答声中,它将锁定一个新值(增量或跳转到的位置)。并且只有在 tock 中才会将其输出到 ROM。
我必须使用 youtube 教程和一些堆栈溢出的答案来研究人字拖,以便电子设备了解这一切。