现代处理器架构风格:
Pipelined, single issue 流水线、单发射
Pipelined, hardware controlled multiple issue – superscalar 流水线、硬件控制的多发射,即超标量处理器
Pipelined, software controlled multiple issue – VLIW 流水线、软件控制的多发射,即 VLIW 超长指令字架构
Pipelined, multiple issue from multiple process threads – multithreaded流水线、来自多个进程线程的多发射,即多线程处理器
数据通路是处理器的核心
处理器基本构建模块
数据通路 Datapath
执行单元:加法器、乘法器、除法器、移位器等
寄存器堆和流水线寄存器
多路选择器、译码器
控制器 Control:有限状态机:PLA、ROM、随机逻辑等
互连 Interconnect:开关、仲裁器、总线
存储器 Memory:Cache、TLB、DRAM、缓冲器等
数据通路常常组织成位片式结构(bit-sliced)。例如一个32位处理器对一个32位宽的数据字进行操作时,处理器有32个位片,每一个对一位进行操作,位片之间完全相同或结构类似。
A、B 是加法器的输入,
全加器设计 I:根据公式进行“暴力式”直接实现,需要32个晶体管
全加器设计 II:静态互补 CMOS 全加器
核心思路;为了减少实现全加器的晶体管数量,希望 S 和
在进位产生与和产生电路中堆叠着许多 PMOS 管。
在进位产生电路中信号传播通过两个反相级。正如前面提到的,最小化进位路径的延时是高速加法器电路设计者的首要目标。如果进位链输出上的负载(扇出)很小,那么有两个逻辑级就显得太多,因而引起额外的延时。
和的产生要求一个额外的逻辑级,但这并不那么重要,因为这一项在逐位进位加法器的传播延时公式中只出现一次。
这一电路尽管慢,但却体现了某些聪明的设计技巧。注意,在进位产生电路第一个门的设计中
定义三个只依赖于
将 和 与 进位 表示为
也可以推导出
分析镜像加法器的进位产生电路:
取消了进位反相门
门的 PDN 和 PUN 网络不再是对偶的,而是镜像对称的。巧妙地实现了进位传播/产生/取消功能
当
该全加器单元仅需要 24 个晶体管。
NMOS 和 PMOS 链完全对称,由于求和与进位功能的自对偶性(self-duality),它同样能产生正确的功能。但这一结果使在进位产生电路中最多只有两个晶体管串联。
连接
只有在进位电路中的晶体管才需要优化尺寸以改善速度。在求和电路中的所有晶体管都可以采用最小尺寸。当设计该单元的版图时,最关键的问题是使节点
在静态互补CMOS加法器中,可以独立确定反相器的尺寸来驱动下一级加法器的
传输门加法器的和与进位产生具有近似的延时
根据表达式,进位传播信号
注意,这里进位产生电路直接接了
CPL:Complementary Pass Transistor Logic 互补传输管逻辑来实现全加器
速度略快;但是面积更大
The Ripple-Carry Adder 行波进位加法器,也叫串行进位加法器
串行进位加法器的延时与所加的输入信号有关,对于有些输入,完全不会发生行波进位效应,而对于另一些信号,进位必须从最低有效位(lsb)一直波动到最高有效位(msb)
最坏情况下的延迟与位数 N 成线性关系
其中:
全加器的一个逻辑性质(也称为全加器的反向性质):把一个全加器的所有输入反相,它的所有输出也反向
可以理解为:
应用:减少不必要的反相器级数,提高全加器速度
利用加法器的反相特性,即把一个全加器单元的所有输入反相则它的所有输出也反相,这可以减少进位路径中反相级的数目。如上图所示,这一特性允许我们在一个进位链中消除反相器。
这里的 FA 的进位路径中没有反相器,从而减少关键路径上的逻辑级数,降低延迟
第 0 级:输入正常的
第 1 级:输入
最简单的设计方式:将多个全加器级联
关键路径从
因此全加器设计时应重点优化进位延迟。
关键路径会经过“Majority Gate”(注意,这里的“多数门”是指进位逻辑本质上是一个Majority 函数)
“多数门”由“少数门”加反相器构成。
可以去掉反相器,并使用反相全加器。
简化传输门型加法器中的进位电路:如果进位传播信号 (
动态实现甚至可以使电路更加简单。由于动态电路中的晶体管是单方向工作的,所以可以只用 NMOS 传输管来代替传输门。预充电输出使电路不再需要进位取消信号(对于进位链,传播的是进位信号的反信号时的情形)。
在预充电阶段 (
假设
如果 (
因此,当
关键路径:最坏情况下进位产生于第 0 位的位置,逐位通过第一个模块,跃过
每一旁路模块的最优化位数是由工艺参数来决定的,如旁路选择多路开关的额外延时、在进位链中的缓冲要求以及通过逐位进位和通过旁路的延时的比值。
上述公式是性能下限(延时上限),关于中间路径的旁路问题:可以理解为,为了让一条进位路径变得最长,它就必须走旁路;如果它不走旁路,也就意味着这条路径在中间就被“截断”了。
例如,
消除(Delete):至少有一个比特的
产生(Generate):至少有一个比特的
尽管 进位旁路加法器的延时 与位数
在进位选择加法器中,预先考虑进位输入两种可能的值,并提前计算出针对这两种可能性的结果。一旦输入进位的确切值已知,正确的结果就可以通过一个简单的多路开关级很容易地选出。
核心是利用硬件冗余(两套进位链)思想
注意 0-Carry和 1-Carry 是并行计算的。
"0" carry 和 "1" carry 同时计算完成
观察得到,最后一级的进位链的结果在多路开关信号到达之前很久就已经稳定下来,平方根进位选择加法器,选择让这两个路径的延时相等。
平方根进位选择加法器中:逐渐增加后续各级的位数来实现每一级的两个进位链信号以及来自前一级模块的多路开关信号到达时间相等。
实际上,这一加法器逐级加长的简单方法使加法器结构具有亚线性延时特性。这可以通过以下分析来说明:假设一个
如果
所以,对于大的加法器 (
可以看到,平方根进位选择加法器中,当
(a) 树形结构 (Tree Structure)
(b)不对称结构 (Asymmetric Structure) —— 应对信号到达时间的差异。最晚到达的
(c) 伪 NMOS 结构 (Pseudo-NMOS) ——用功耗换取面积
相等比较器检查每一位是否相等(同或门 + 与门)
数值比较器(magnitude comparator)决定两个二进制数中哪个较大。为了比较两个无符号数
一个零检测器可以用来指明这两个数是否相等。当且仅当 4 个加法结果全为 0 时,输出
图 11.45 为一个 4 位的无符号数比较器,它由一个串行进位加法器及 2 的补码构成。两个数值的相对大小可以由进位输出 (
上图中,A 转化成补码,最低位的加法器进位输入(
二进制计数器和线性反馈移位寄存器。
一个
一个
左图:同步计数器 |右图:带复位、加载和使能功能的同步加 / 减计数器
一般的同步双向(递增/递减)计数器(synchronous up/down counter)显示在图 11.49(a)中,它的每位位置上采用可复位的寄存器及全加器,它的周期时间受串行进位延时的限制。当只需要递增计数器(up counter)(也称为增量器,即 incrementer)时,全加器可以简化为半加器,如图 11.49(b)所示。
当增加一个输入多路开关时可以使计数器装入初始值。另外,还常常在每个寄存器上增加一个时钟使能端以实现有条件计数。终止计数(TC)输出信号表明计数器已上溢或下溢。
考虑两个没有符号的二进制数
二进制乘法
展开后:
乘法可以看作重复加法:对于
部分积是被乘数
仔细地优化部分积的产生能够显著减少延时和面积。注意,大多数情况下部分积阵列中有许多行全部是 0,它们对运算结果没有任何影响,因而在进行相加时是一种浪费。当一个乘数全部由 1 构成时,所有部分积都存在,而在乘数全部为零时则一个部分积也没有
Booth 重编码
一种用于减少乘法阶段数量的编码方案。
每次完成两位乘法,因此所需阶段数量约减少一半。
每一级比简单乘法器稍微复杂一些,但加 / 减法器几乎可以做到和普通加法器一样小、一样快。
上图是一个无符号数 4 *4 位阵列乘法器的组成。它的硬件结构与图 11.28 中的手工乘法之间在拓扑结构上一一对应。产生
乘数
上图中阵列乘法器的部分和加法器用逐位进位结构实现。为了优化性能,首先需要识别关键的时序路径。这一任务并不简单。事实上,可以看到这里有许多长度几乎一致的路径。
关键路径 2的传播延时的近似表达式为
注意:不能直接通过最左侧的进位线往下掉,因为只会累加
为了寻找最慢的路径,信号选择从第一行最左侧加法器的 Sum(求和端) 掉入第二行,耗时
信号到达最底层最左侧,再累加一个
由于在这里所有的关键路径都具有同样的长度,所以从设计的角度来看,只加速它们其中的一条(例如,通过用一个进位选择加法器这样的较快的加法器来代替一个加法器)并没有太大的意义。因此,必须同时考虑所有的关键路径。要使
由于阵列乘法器中有许多几乎相同的关键路径,通过调整晶体管的尺寸来提高这一结构的性能效果非常有限。但若注意到,当使进位输出位如图 11.32 所示向下沿对角线通过而不只是向左通过时乘法的结果并不改变,就可以得到一个更有效的实现。我们加入一个额外的加法器来产生最终的结果,这个加法器称为向量合并(vector-merging)加法器。由此所得到的乘法器称为进位保留乘法器
当把图 11.32 的进位保留乘法器映射到硅片上时,还必须考虑其他一些拓扑问题。为了便于把乘法器集成到芯片的其余部分,建议使这一模块的外形近似于矩形。有利于自动化生成。
基于进位保存加法器的阵列乘法器
CSA Array:进位保存加法器阵列
CPA:进位传播加法器
矩形阵列
将阵列压缩,使其适应矩形版图规划。
部分和加法器也可以安排成树形,这可以同时减少关键路径和所需的加法器单元数目。考虑四个部分积的一个简单例子,每一个部分积都是四位宽,如图 11.34(a) 所示。可以看到在阵列中只有第三列必须加四位,所以可以减少这一操作所需的加法器数目。其他所有的列则稍微简单些。
这显示在图 11.34(b) 中,图中原来的部分积矩阵重新安排成树形以直观地说明它的不同深度。困难在于如何用最小的深度和最少数量的加法元件来实现整个矩阵。
可以“覆盖”该矩阵的第一类运算器是全加器 (FA),它有三个输入并产生两个输出:位于同一列的“和”与位于相邻一列的“进位”。因此全加器又称 3-2 压缩器。它用包含三个位的圈表示。另一类运算器是半加器 (HA),它在一列中取两个输入位并产生两个输出。半加器用一个包含两个位的圈表示。
全加器 (FA / 3:2 Compressor): 它的输入是 3 个相同权重的 bit(同一列的 3 个点),输出是 1 个 Sum(留在这一列)和 1 个 Carry(进位到左边一列)。物理意义:把同一列的 3 个点,变成了 2 个点(一个在原列,一个在左列)。
半加器 (HA / 2:2 Compressor): 输入是同一列的 2 个点,输出同样是 1 个 Sum 和 1 个 Carry。物理意义:把同一列的 2 个点,变成了 2 个点(一个原列,一个左列)。
为了得到面积最小的实现,我们从树结构最密的部分开始,反复地用全加器和半加器来“覆盖”树。第一步,在第 4 列和第 3 列引入半加器,如图 11.34(b) 所示。缩减后的树如图 11.34(c) 所示。第二轮的缩减产生了一个深度为 2 的树,如图 11.34(d) 所示。这两步缩减过程只用了三个全加器和三个半加器,而图 11.32 中的进位保留乘法器则需要 6 个全加器和 6 个半加器!最后一级由一个简单的两输入加法器构成,可以采用任何类型的加法器。
以上介绍的结构称为 Wallace 树形乘法器
完成乘法的最后一步是在最终加法器中合并结果。这一“向量合并”操作的性能至关重要。加法器类型的选择取决于累加阵列的结构。如果加法器的所有输入位同时到达,则最好选择一个超前进位加法器,因为它产生最小可能的延时。当一个流水线级正好放在最终相加的前面时就是这种情况。流水线是高性能乘法器经常采用的技术。在非流水线乘法器中,由于乘法器树逻辑深度不同,最终加法器输入到达的时间非常不一致。这时,采用其他加法器结构,如进位选择加法器,常常能达到与超前进位加法器类似的性能指标,而硬件的成本却低得多
上图是一个简单的一位左右移位器。根据不同的控制信号,输入字或者左移或者右移,或者维持不变。多位移位器可以通过串联许多这样的单元来实现。
当移位的位数较多时,这一方法很快变得太复杂、不实用和速度极慢,因此应当采用更为结构化的方法。
上一页介绍的可编程二进制移位器的具体工作模式:
nop = 1 ,
rgt = 1 ,
left = 1 ,
桶形移位器:它由一个晶体管阵列构成,其行数等于数据的字长,而列数则等于最大的移位宽度。在本例中,二者均为 4。控制线沿对角线布置通过该阵列。
优点是信号最多只需通过一个传输门。传播延时在理论上是常数,与移位的位数或移位器的规模无关。但在实际中并不是这样,因为缓冲器输入端的电容随最大移位宽度线性地增加。
这一电路的一个重要特点是它的版图尺寸并不是像其他运算电路那样由有源晶体管来决定,而是由通过该单元的布线数目来决定。更具体地说,移位单元的尺寸由金属线的节距来确定。
选择移位器时另一个重要的考虑是移位值必须表示为何种形式。从图 11.37 的电路图中可以看到,桶形移位器的每个移位都需要一条控制线。例如,一个四位的移位器需要四条控制信号。为了移三位,信号
桶形移位器把整个移位器实现为传输管的单个阵列,而对数移位器则采用分级的方法。总的移位值被分解成几个 2 的指数值。一个具有最大移位宽度
对数移位器的速度以对数方式取决于移位宽度,因为一个
一般来说我们的结论是,桶形移位器适用于较小的移位器,而对于较大的移位值,采用对数移位器在面积和速度方面都更为有效。而且对数移位器很容易参数化,便于自动生成设计。
最大移位宽度为右移7位的对数移位器(只显示了 4 个最低有效位)
最右边应该是
除法器、计数器、译码器、多路选择器
ALU,算术逻辑单元