几天前,我对处理器架构/指令集/编译器/编程语言有所了解。 (是)
我只是想知道处理器复杂的内部工作原理。
这里是: 在ALU内部(实际执行指令的位是什么?)是每个都有一个功能的工作组件(例如一组用于添加的加法器,另一个用于AND操作的电路)或者是它们的多个'通用单位'可以执行任何操作(添加,和,或,子,Mul),具体取决于操作码。
想法是创建一组能够进行任何操作的晶体管/电路。将有一个单独的晶体管层来控制通过主要多用途单元的信息流。
对不起,我真的没有很好的理解,很难解释。任何能帮助我更好地理解的资源或书籍都会很棒。
提前感谢您的帮助。
答案 0 :(得分:2)
你绝对可以用4,8,16或更多相同单位构建一个通用ALU,这些单元由'操作码'编程。
从Full Adder开始:
(c_out, sum) = FA(a_in,b_in,c_in) ==
c_out = true, iff a_in + b_in + c_in >=2 or...
c_out == (a & b) | (a & c) | (b & c)
sum = parity of (a_in, b_in, c_in) == xor (a_in, b_in, c_in)
要添加8位寄存器,可以从寄存器组中选择(或多路复用)位,以便在矢量(a_0,a_1,a_2,... a_N)上馈送,并且类似地在矢量b_x上输入另一个(或相同的)寄存器。
然后,全加器0的输出c_out作为第1位的c_in的输入。 但如果没有这样的联系怎么办? (即,c_in = c_out_previous AND C ?,其中C = 0?
这将执行按位XOR运算而不传播进位。同样,通过使c_in = 0,c_out将包含AND操作的结果,只需要多路复用输出。
子表达式(a& c)| (b& c)包含(a | b)iff c == 1.
类似地,可以有条件地反转宏小区内的一些比特,添加从左到右的传播(>> 1)添加对sub,subs,adc,rol,ror或和的支持。带有反馈的全加器称为进位保存加法器,可以执行位串行乘法(阶段)。
我非常确信大多数早期的处理器设计都使用了这些“技巧”。
历史上有很多设计范例 - ALU所做的所有工作的“马克思主义”时代已被“后现代”公司模式所取代,其中有多层经理人试图让工人保持忙碌 - - 与专用于高速缓存,分支预测,寄存器重命名,乱序执行,超线程等的裸片区域相比,ALU大小非常小,因此不会浪费“工作者”的时钟周期。然后GPUGP的想法使ALU更加接近内存,可能有成千上万的工作人员在管理能力越来越差的情况下做非常简单的事情......
答案 1 :(得分:1)
问题: ALU内部有各自的组件,每个组件都有一个功能,或者是可以执行任何操作的多个“通用单元”[...] 。]取决于操作码?
这两种方法都是可行的。一些ALU根据给定输入计算所有函数,并使多路复用器根据指令操作码选择正确的输出。还有一些基于切片的ALU。 Ken Shirriff在这篇blog post中解释了8085的ALU是如何用这种方法实现的。 在帖子的最后,作者注意到6502使用了使用多路复用器的并行方法。
图书:有很多。我喜欢 Morris Mano:Digital Design 和 Hennessy& Patterson:计算机组织与设计,硬件/软件接口。