8085 CPU 在 ALU 中有额外的寄存器吗?

电器工程 8085
2022-01-13 23:07:15

从 8085 CPU 架构来看,当 ALU 完成计算时,结果会在下一个时钟沿返回到累加器 A。但是累加器A直接连线作为ALU输入,如果时钟边沿上升得不够快导致A被加了两次或更多次怎么办,这样的错误很难检测到,这样的设计非常”脆弱”对我来说。

除非,ALU 中有一个额外的寄存器来临时保存 ALU 结果?

https://en.wikipedia.org/wiki/Intel_8085#/media/File:Intel_8085_arch.svg

https://en.wikipedia.org/wiki/Intel_8085

3个回答

正如@duskwuff 所怀疑的那样,我已经对此进行了调查。为了回答这个问题,8085 在 ALU 中有两个额外的寄存器。

8085 有几个“隐藏”寄存器:一个 16 位 WZ​​ 对和两个 8 位 ALU 辅助寄存器:ACT 和 TMP。WZ 是寄存器文件的一部分,而 ACT、A(累加器)和 TMP 位于 ALU 电路本身中。

下面是 ALU 工作原理图:

8085的ALU的寄存器结构

ACT 寄存器有几个重要的功能。首先,它保存 ALU 的输入。这允许将 ALU 的结果写回累加器,而不会干扰输入,否则会导致不稳定。其次,ACT 可以保持恒定值(例如,用于递增或递减,或小数调整)而不影响累加器。最后,ACT 允许不使用累加器的 ALU 操作。

8085 的 ALU 设置的一个有趣结果是,只有在通过 ALU 之后才能将值加载到累加器中。

8085 寄存器集的详细信息在这里,ALU 的详细信息在这里

在同步设计中,确保此类事情不会发生是设计人员的一项重要任务。将数据“计时”到的寄存器具有特定的动态属性,如时钟上升时间、时钟保持时间、时钟信号变化前后的数据稳定。如果违反时序,则无法保证结果状态。

在您的特定情况下,ALU 有其传播延迟,并且添加 A 两次应该有一段时间,直到新 A 被添加到加法器中的前一个 A 并且结果出现在其输出中。很可能它被模拟和计算出在设备定义的允许时钟频率范围内不会发生这种情况这就是为什么数据表明确具有最小和最大时钟额定值的原因。对于 8085A-2,它说:

  • 最小 CLK 周期:320 ns
  • 最大 CLK 周期:2000 ns

累加器是 ALU 的输出寄存器。

8085 有一个两相时钟。像 NOP 这样的单时钟指令需要 2 个时钟周期。与最初的 IBM PC 中使用的 8088 类似,8088 具有 4Mhz 四相时钟并以 1Mhz 的速率执行指令。

使用两相时钟,每个指令周期都有两个振荡器周期。

在内部,对于时序,可以使用任一时钟的任何边沿。时钟被反转,因此实际上有四个时钟可用于计时。

然后你有在下降沿锁存的透明锁存器和在时钟上升沿锁存的 D 触发器。

透明锁存器允许输入数据从时钟的上升沿开始传播到输出,并在时钟的下降沿锁存值。

在避免传播竞争条件方面,8085 有很多选择。

在此处输入图像描述