基于Nand2tetris CPU,如下图,我想了解一下:
每个时钟周期发生(什么/多少)? (参见 IMG_1 和 IMG_2)
作为问题 1 的后续问题,程序计数器何时应更改?
请注意,我知道时钟是什么以及何时
IMG_1
IMG_2
最佳答案
DFF 将在滴答阶段“锁定”输入。然后在tock阶段输出。
假设您有一条 A 指令。在滴答阶段,A 寄存器锁存指令中的值。但旧的 A 寄存器值仍然是输出。在tock阶段,A寄存器最终输出新值。您可以在硬件模拟器中验证这一点。
我们需要滴答声的原因是电路反馈。
假设你想做 A=A+D。并且您已经有了 A 和 D 值。时钟上没有滴答声:
- A寄存器值冲入ALU
- D 寄存器值的作用相同
- ALU 输出返回到 A 寄存器
- 我们再次从顶部开始使用新的 A 值...
...直到我们决定读取该值。因此,您无法确定 add ALU 指令将执行多少次。
但是对于滴答时钟,在滴答阶段,A 值离开 A 寄存器并进入 ALU,然后 ALU 值返回到 A 寄存器。但只有在“tock”时,A 寄存器才开始输出这个新值。因此,您可以使用时钟的滴答声来确定 CPU 的状态。
程序计数器也是 DFF。因此,在刻度中它将锁定一个新值(增量或跳转到的位置)。并且只有在 tock 中才会将其输出到 ROM。
我必须使用 YouTube 教程和电子产品堆栈溢出的一些答案来研究触发器,才能理解这一切。
关于architecture - (Nand2tetris CPU)每个时钟周期发生(什么/多少)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57171635/