6

替代文字

好吧,我无法理解上面的冯诺依曼架构图 [引自维基百科],甚至不确定它是否正确。我有一些明显的疑问-

ALU 如何与内存通信?这不应该是CU的工作吗?

累加器如何成为 ALU 的一部分?

而且,蓄能器的工作到底是什么?

4

3 回答 3

8

从 IAS 计算机的图表(它应该与冯诺依曼所写的计算机 EDVAC 非常相似)来看,控制单元提供地址(寄存器 MAR)并通过 AS、R/W* 等信号控制总线事务。另一方面,ALU 连接到数据总线(寄存器 MDR):它从内存接收数据并将结果存储回来。该图还显示 ALU 接收指令并将它们转发给 CU(寄存器 IBR)。

例如,假设控制单元刚刚获取指令ADD $1234。然后处理过程如下:

  1. CU 放入$1234地址总线并启动读取周期
  2. 操作数由 ALU(寄存器 MDR)接收并与累加器相加(寄存器 AC)
  3. 加法的结果最终存入累加器。

回答您的问题:

  1. ALU 从内存接收数据,执行操作并存储回结果。当时所有数据都存储在内存中(没有通用寄存器),因此将 MDR 放在 ALU 中是合乎逻辑的,这意味着 ALU 应该连接到数据总线。
  2. IAS 计算机的设计方式是一个 ALU 输入和一个 ALU 输出硬连线到累加器。因此,将累加器放在 ALU 中是合乎逻辑的。
  3. 累加器被认为是存储中间结果的地方,因为具有多个内存操作数的指令更难以实现。

最后,我相信这个讨论纯粹是历史性的。没有特别的理由更喜欢将 MDR 与 ALU 而不是 CU 相关联。只是冯诺依曼在写一篇关于 EDVAC 的论文时碰巧有这种想法。为了让故事更完整,维基百科说 EDVAC 实际上是由 Eckert 和 Mauchly 设计的,而冯诺依曼只做咨询和写作。

于 2010-11-15T22:37:19.757 回答
3

累加器是暂存算术运算结果的寄存器。它比直接使用主存储器要快。由于它存储算术结果,因此成为 ALU 的一部分是有意义的。

控制单元就像一个协调器,告诉其他组件做这做那。但它没有提供如何做到这一点的方法,所以这就是 ALU 需要与内存直接通信的原因。

于 2010-11-09T16:14:27.900 回答
1

好吧,ALU 在做某事时会更改标志寄存器,这就是它与内存连接的原因(标志不在 CU 中,也不在 ALU 中,因为这些是唯一显示的组件......)。累加器存储暂时等待 ALU 处理的数据。它直接连接到 ALU,因为该寄存器被认为支持它的计算,就像 ecx 寄存器与计数器电路连接一样。当然可以添加 ecx,edx 但速度较慢。选择源寄存器和目标寄存器非常困难,因为需要在 CPU 中实现额外的电路,并且最近(相对)存档了。该图像很旧(ssegvic 是对的!),因为它表明输入/输出只能使用累加器。在我看来,这更清楚:

ALU 连接在内部总线上,但这并不意味着它将与连接到它的所有东西进行通信。最后一件事:寻找更好的图像我注意到 ALU 并不总是与内存连接,在其中一些它只与 CU 连接。

于 2010-12-01T15:15:05.367 回答