从8085 CPU架构来看,当ALU完成计算后,结果将在下一个时钟沿返回到累加器A。但是累加器A直接连接为ALU输入,如果时钟沿的上升速度不够快而导致A被添加两次或多次,那将很难检测到这样的错误,这样的设计非常“脆弱”对我来说。
除非在ALU中有一个额外的寄存器来临时保存ALU结果?
https://zh.wikipedia.org/wiki/英特尔_8085#/ media / File:英特尔_8085_arch.svg
从8085 CPU架构来看,当ALU完成计算后,结果将在下一个时钟沿返回到累加器A。但是累加器A直接连接为ALU输入,如果时钟沿的上升速度不够快而导致A被添加两次或多次,那将很难检测到这样的错误,这样的设计非常“脆弱”对我来说。
除非在ALU中有一个额外的寄存器来临时保存ALU结果?
https://zh.wikipedia.org/wiki/英特尔_8085#/ media / File:英特尔_8085_arch.svg
Answers:
正如@duskwuff所怀疑的那样,我已经对此进行了调查。为了回答这个问题,8085在ALU中有两个额外的寄存器。
8085具有几个“隐藏”寄存器:一个16位WZ对和两个8位ALU帮助寄存器:ACT和TMP。WZ是寄存器文件的一部分,而ACT,A(累加器)和TMP位于ALU电路本身中。
这是ALU工作原理的图:
ACT寄存器具有几个重要功能。首先,它将输入保存到ALU。这样就可以将ALU的结果写回到累加器,而不会干扰输入,这会导致不稳定。其次,ACT可以保持恒定值(例如,递增或递减或十进制调整),而不会影响累加器。最后,ACT允许不使用累加器的ALU操作。
8085的ALU设置的一个有趣的结果是,只有在通过ALU之后,才可以将值加载到累加器中。
累加器是ALU的输出寄存器。
8085具有两相时钟。单时钟指令(如NOP)需要2个时钟周期。与原始IBM PC中使用的8088相似,8088具有4Mhz的四相时钟并以1Mhz的速率执行指令。
使用两相时钟,每个指令周期有两个振荡器周期。
在内部,为了计时,可以使用任一时钟的任意边沿。时钟是反相的,因此实际上有四个时钟可用于计时。
然后,您有透明的锁存器可在下降沿锁存,而D型触发器则可在上升的时钟沿锁存。
透明锁存器允许输入数据从时钟的上升沿开始传播到输出,而值在时钟的下降沿被锁存。
在避免传播竞争条件时,8085有许多选择。