8085 CPU在ALU中是否有一个额外的寄存器?


11

从8085 CPU架构来看,当ALU完成计算后,结果将在下一个时钟沿返回到累加器A。但是累加器A直接连接为ALU输入,如果时钟沿的上升速度不够快而导致A被添加两次或多次,那将很难检测到这样的错误,这样的设计非常“脆弱”对我来说。

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

https://zh.wikipedia.org/wiki/英特尔_8085#/ media / File:英特尔_8085_arch.svg

https://zh.wikipedia.org/wiki/英特尔_8085


2
这看起来像是@KenShirriff的问题…
duskwuff -inactive

1
您为什么认为将ALU结果计时到中间寄存器与将其计时到累加器不会有相同的可能问题?无论哪种方式,您最好都知道您的ALU会产生有效的结果,并具有相对于时钟足够的建立时间和保持时间。
光子

Answers:


17

正如@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的详细信息,请参见此处


1
不知何故,我知道您对此有话要说。:3
duskwuff -inactive

2
太棒了〜(都是Ken Shirriff的博客和8085)!
starx

5

在同步设计中,确保这种情况不会发生是设计人员的重要任务。具有数据“计时”功能的寄存器具有特定的动态属性,例如时钟上升时间,时钟保持时间,时钟信号更改前后数据稳定。如果违反时序,则无法保证结果状态。

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

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

5

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

8085具有两相时钟。单时钟指令(如NOP)需要2个时钟周期。与原始IBM PC中使用的8088相似,8088具有4Mhz的四相时钟并以1Mhz的速率执行指令。

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

在内部,为了计时,可以使用任一时钟的任意边沿。时钟是反相的,因此实际上有四个时钟可用于计时。

然后,您有透明的锁存器可在下降沿锁存,而D型触发器则可在上升的时钟沿锁存。

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

在避免传播竞争条件时,8085有许多选择。

在此处输入图片说明


“ 8088具有一个4Mhz的四相时钟,并以1Mhz的速率执行了指令”-8088仅具有一个时钟输入引脚(尽管它确实希望使用非对称时钟,其高态持续时间大约是时钟的两倍)。低状态,这表明内部显然在这些状态下正在做不同的事情,这不同于大多数现代处理器始终在同一时钟沿上为所有时钟提供时钟),那么此4相时钟是否以某种方式在内部生成?是否有关于它如何工作的描述?
Jules
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.