我听说过“单周期 CPU”这个词,并试图理解单周期 CPU 的实际含义。是否有明确一致的定义和共识,是什么意思?
我遇到的一些自制“单周期 CPU”似乎同时使用时钟的上升沿和下降沿来完成一条指令。通常,上升沿用作获取/解码,下降沿用作执行。
然而,在我的阅读中,我遇到了这里提出的合理观点......
https://zipcpu.com/blog/2017/08/21/rules-for-newbies.html
"Do not transition on any negative (falling) edges.
Falling edge clocks should be considered a violation of the one clock principle,
as they act like separate clocks.".
这对我来说很真实。
同时需要上升沿和下降沿(或高相位和低相位)实际上与需要以两倍速度运行的单个时钟的两个周期的上升沿相同;这将是一个“双周期”CPU,不是吗。
那么,当上升沿和下降沿都被主动用于状态更改时,可以诚实地说设计是“单周期 CPU”吗?
看起来真正的单周期 CPU 必须在单个时钟周期的单个时钟沿执行所有状态更改操作。
如果数据存储都是同步的,我可以想象这样的事情是可能的。如果我们有一个已经稳定的同步系统,那么在下一个时钟沿,我们可以将结果计时到同步数据存储中,同时将程序计数器计时到下一个地址。
但是,如果目标数据存储是例如异步 RAM,那么在存储数据时控制线肯定会发生变化,从而导致意外行为。
我错了吗,是否有任何包含异步存储的“单周期 CPU”示例?
在一个设计中使用异步 RAM 似乎意味着必须使用至少两个逻辑时钟周期来实现状态更改。
当然,如果更复杂一些,也许可以添加一个使用单个边缘的 CPU,其中指令仅使用同步输出组件,但在存储到异步数据时依赖于一个额外的周期;但是那仍然不是单周期cpu,而是主要是单周期cpu。
因此,任何写入异步 RAM(或其他异步组件)的 CPU 都不能真正被视为单周期 CPU,因为整个指令不能在单个时钟沿执行。RAM 写入需要两个边沿(即下降沿和上升沿),这打破了单时钟原则。
那么是否存在普遍接受的单周期 CPU,我们是否一致地应用该术语?
来龙去脉是什么?
(也发布在我的 hackaday 日志https://hackaday.io/project/166922-spam-1-8-bit-cpu/log/181036-single-cycle-cpu-confusion以及 hackaday 的私人群组中)
=====
更新:看看简单的 MIP,模型似乎使用同步内存,因此可能可以在单个边缘广告上运行,也许它确实如此 - 因此保证“单周期”类别。也许FPGA内存总是同步的——我不知道。
但是该术语在其他地方的使用不一致吗?即像大多数 Homebrew TTL 计算机一样?
还是我完全错了?
====
更新 :
有些人可能误解了我的观点。
许多自制的 TTL cpu 声称“单周期 CPU”状态(出于本次讨论的目的,对更复杂的流水线或其他方式的野兽不感兴趣)。
通过单周期这些 CPU,它们通常意味着它们执行一些操作,例如在时钟的一个边沿上推进 PC,然后使用时钟的相反边沿来更新触发器的结果。或者,他们将使用时钟的另一个阶段来更新锁存器和 sram 等异步组件。
但是,我提供的 ZipCPU 参考建议使用相反的时钟边沿类似于使用第二个时钟周期甚至第二个时钟。顺便说一句,Ben Eater 在他的视频中甚至将他用来更新 SRAM 的倒置时钟比作第二个时钟。
我反对将“单周期 CPU”与此类 CPU 一起使用(基本上我见过的大多数/所有家庭培育的 TTL CPU,因为它们都以这种方式工作)是我同意 ZipCPU 使用相反的边缘(或相位)提交的时钟实际上与使用第二个时钟相同,这对“单周期”声明是一种嘲弄。
如果使用反对边缘实际上与使用单个边缘但使用双时钟周期相同,那么我认为使用该术语是有问题的。因此,我将 ZipCPU 的观点牢记在心,并将该术语收紧为使用单个边缘。
另一方面,似乎完全有可能构建一个仅使用同步组件(即边沿触发触发器)并且仅使用单个边沿的 CPU,在每个边沿上,我们将总线上的任何内容计时到选择的任何设备中写入并同时推进 PC。在一个边缘和下一个相同方向的边缘之间,会发生沉降。
以这种方式,我们最终得到 CPI=1 并且仅使用单个边沿 - 这与使用时钟的两个边沿的常见 TTL CPU 模式截然不同。
顺便说一句,我对 FPGA 的印象(我在这里没有提到)是 FPGA 中的存储元件都是同步触发器。我不知道,但这就是我的阅读所暗示的。无论如何,如果这是真的,那么基于 FPGA 的普通 CPU 可能具有 CPI=1 并且仅使用 +ve 边缘,因此这些很可能符合我对“单周期 CPU”的狭义定义。此外,我的阅读表明,各种 MIP 的 impls(可能是教育努力)可能符合我的定义。