本节书摘来自华章计算机《计算机系统:系统架构与操作系统的高度集成》一书中的第3章,第3.6节,作者:(美)拉姆阿堪德兰(Ramachandran, U.)(美)莱希(Leahy, W. D.)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.6 控制单元设计的另一种选择
我们来考虑处理器控制单元不同风格的实现。
3.6.1 微程序控制
在3.5节中,我们给出了微程序风格的控制单元设计。这种风格的确很优雅,也很简单且易于维护。使用微程序设计的好处是,控制逻辑就像ROM中的一段程序,因此非常易于维护。但是,微程序设计有两个潜在的低效之处。第一个与时间有关。为了在某个时钟周期中产生控制信号,需要向ROM提供一个地址,然后再经过一段称为访问时间的延迟后,控制信号才在数据通路上可用。这个时间代价发生在每个时钟周期的关键路径上,因此成为了性能损失的一个原因。然而,通过预取,即在一条指令执行时提前取出下一条指令,这个时间代价可以被屏蔽。第二个与空间有关。前面小节中给出的设计属于微程序设计中的水平微码风格,在这种设计中整个控制通路中的每个控制信号都与微指令中的一位相对应。从之前讨论的情况来看,对于大多数微指令,这些位中的大部分都是0,只有少数为1,与该时钟周期所需的控制信号吻合。例如,在ifetch1中,只有DrPC、LdMAR、LdA是1,微指令中的其他位都是0。水平微码在空间上的低效可以通过采用一种称为垂直微码的技术来克服,而垂直微码与写汇编相类似。不同微指令中同一位的位置表示了不同的控制信号,这又依赖于每条垂直微指令中的操作码(OPCODE)字段。垂直编码更具技巧性,因为各条微指令中同一位的位置表示的控制信号需要互斥。
3.6.2 硬连线控制
我们仔细研究3.5节中设计的使用水平微码的ROM究竟表示了什么是有益的。它实际上是一个真值表,给出了数据通路所需要的所有控制信号。ROM的行表示状态,列表示的是函数(每一列对应一个控制信号)。基于前面对逻辑设计的介绍,读者应该知道如何合成每列所需要的最小布尔逻辑。这些逻辑函数比真值表更有效。
我们可以使用组合逻辑电路来实现控制信号对应的布尔逻辑函数。函数的功能就是在某个状态下给出的某些控制信号。
例如,DrPC的布尔函数可能是:
使用AND/OR门,或者像NAND/NOR这样的通用门,我们可以生成所有的控制信号。我们将这种类型的设计称为硬连线控制,因为控制信号都是使用组合逻辑电路来实现的(不容易修改,所以称为硬连线)。这样的设计在时间和空间上都很有效(不需要ROM查找的访问时间,也不需要为时钟周期内没有产生的控制信号浪费空间)。过去有一些反对者认为,因为使用随机逻辑来实现布尔函数,所以这将导致噩梦般的维护工作。
然而,可编程逻辑阵列(PLA)和现场可编程门阵列(FPGA)的出现使得这些反对苍白无力。例如,PLA将所需要的逻辑组织成二维阵列结构,从而让随机逻辑有了结构。我们在图3-31中给出了这种结构。
图3-31 PLA。左边的输入来自状态寄存器和影响处理器(如IR和Z寄存器)状态的数据通路元件。每个输出是输入的SUM-of-PRODUCT的结果,这些输出就是数据通路所需的控制信号
输出是驱动数据通路所需的控制信号(DrPC、DrALU等)。输入是处理器所处的状态(ifetch1、ifetch2等)和数据通路中产生的条件(IR和Z寄存器的内容等)。AND板中的每个门都获得所有的输入(在正确而完整的版本中是这样的)。类似地,OR板中的每个门也都获得AND板产生的所有结果。PLA之所以称为PLA,是因为它上面的逻辑可以通过选择哪些输入传送给AND板和OR板而“编程”。每个PLA输出都是逻辑乘的逻辑加(SUM-of-PRODUCT)的结果。逻辑乘(PRODUCT)是在AND板中实现的。逻辑加(ADD)是在OR板中实现的。这种设计将所有控制逻辑都集中在一起,就有了微程序设计的结构优势。同时,因为控制信号使用组合逻辑电路产生,所以它没有硬连线设计的不足。与随机逻辑的设计相比,它在空间的使用上稍微有些劣势,因为每个AND门的扇入数都与PLA的总输入数相同,而每个OR门的扇入数都与AND板中AND门的数量相同。无论如何,PLA的结构化优点和规则性远远超过了它的劣势,VLSI设计已经离不开它。
最近,FPGA变得非常流行,它用来为复杂的硬件设计迅速制造原型。FPGA其实是PLA的继承者,它含有逻辑元件和存储元件。这些元件之间的连接可以“现场”进行编程,FPGA正是由此得名。这样的灵活性使得设计上的缺陷更容易修正,甚至在部署之后依然如此,因此也提高了硬连线设计的可维护性。
3.6.3 在两种控制设计风格中选择
在这两种风格之间进行选择受到许多因素的影响。我们已经给出了两种控制风格的优势和劣势。也许由于FPGA的出现,许多针对硬连线控制可维护性的争论已经停止了。尽管如此,对于处理器的基本实现(即非流水线),或者对于复杂指令的实现(如x86体系结构中的那些),更倾向于使用微程序控制,因为它很灵活也很容易快速修改。另一方面,我们将在流水线处理器的有关章节中看到,高端流水线处理器的实现非常适合使用硬连线控制。表3-2总结了这两种设计思路的优劣。