architecture - (Nand2tetris CPU)每个时钟周期发生(什么/多少)?

标签 architecture cpu cpu-architecture nand2tetris

基于Nand2tetris CPU,如下图,我想了解一下:

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

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


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

IMG_1

enter image description here


IMG_2

enter image description here

最佳答案

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/

相关文章:

wcf - 3 层 nhibernate + wcf + Silverlight

architecture - 说服公司在其标准体系中添加新技术和技巧?

javascript - 使用 React 和 Redux 的分形项目结构 - 优点/缺点

Java 架构 - 自管理类与管理类

java - 使用 Java 检测 CPU 速度/内存/互联网速度?

multithreading - 原子操作有多昂贵?

performance - 在大多数现代 64 位处理器上, `mulq` 的速度是否取决于操作数?

x86 - i9 处理器采用什么内存访问架构?

c++ - 在 Linux 上以编程方式获取准确的 CPU 缓存层次结构信息

c - 提高缓存命中率