1

Nand2tetris CPU的基础上,如下图,想知道以下几点:

  1. (什么/多少)在每个时钟周期内发生? (见 IMG_1 和 IMG_2)

  2. 作为问题 1 的后续问题,程序计数器应该何时更改?


请注意,我知道时钟是什么以及何时

IMG_1

在此处输入图像描述


IMG_2

在此处输入图像描述

4

2 回答 2

1

Nand2Tetris 仿真掩盖了时钟的许多细微之处。没有滴答/滴答阶段。相反,有一个特殊的 DFF(数据触发器)组件可以满足对内存的需求。

可视化它的方法是将组件划分为没有内部状态的组件(那些是其输入的纯函数,例如没有 DFF 构建的任何组件)。当它们的输入发生变化时,它们会立即改变它们的输出状态。

DFF 基本上将其新状态计算为其输入的纯函数,但将输出该状态延迟一个周期。所以它有一个内部记忆,它在前一个周期中的状态。事实证明,这就是实现相当于滴答/滴答时钟所需的全部内容。

有关更多详细信息,请参阅https://docs.wixstatic.com/ugd/56440f_e458602dcb0c4af9aaeb7fdaa34bb2b4.pdf 。

于 2019-07-23T21:36:33.723 回答
1

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 教程和一些堆栈溢出的答案来研究人字拖,以便电子设备了解这一切。

于 2020-04-01T11:45:45.323 回答