微体系结构层

MIC-1的数据通路与微指令

IJVM与MIC-1 微体系结构层夹在数字逻辑层和指令系统层之间。设计CPU时通常先大致确定指令系统,然后设计微体系结构实现它,或是两者是并行设计的。通常RISC(精简指令集)的很多指令可在单个时钟周期完成。而Intel酷睿的x86指令集属于CISC(复杂指令集),一条指令可能需要多个时钟周期,会被分为多个操作步骤,其控制方式和简单的指令系统有较大区别。 微体系结构层没有太多一般性原理,很多都是特例。所以在学习微体系结构层时,需要预先引入一种具体的指令系统,然后再考虑怎么构建微体系结构层实现指令系统。这里将要引入的指令系统是JVM的一种子集IJVM,其仅包含部分整数指令,并且不包含面向对象特性。IJVM指令通常只有1-2个字段,第1个字段都是操作码(opcode),用于标识指令,有的包含操作数(operand)字段,用于提供额外信息。… 阅读全文

完整的MIC-1微体系结构

MIC-1的组成完整的MIC-1微体系结构如上图所示,其由数据通路和控制部分组成。这里需要说明一下控制部分所引入的部件,以及之前没讨论到的一部分数据通路上的信号: 1) 控制存储器:计做CS,图中512*36位的只读存储器,是控制部分最重要的电路,其固化了用于实现ISA指令的所有微指令,其至多能存储512条微指令,其功能和只读内存相似,其中的每条微指令都有自己的地址,微指令的地址也叫微地址。该CS接受的输入是微地址,输出是微指令。由于实现指令系统类似于在CS中写程序(填微指令),所以也把整个CS中的微地址和微指令统一称为微程序; 2) 微程序计数器:图中MPC,功能类似MAR,是微地址的寄存器; 3) 微指令寄存器:图中MIR,存储将要执行的微指令。上图MIR画的很像微指令; 4) N与Z连接的方框:两个1位触发器,其数据写入时机和“内存写入寄存器”、“C总线写入寄存器”一样,也是时钟上升沿的边沿触发;… 阅读全文

IJVM的内存模型与指令集

栈内存模型通常编程语言支持过程(procedure)和方法(method)。过程就像编程里的函数调用,有自己的局部变量,中间结果等。过程在返回后,其局部变量消失。这意味着需要对局部变量有效的管理,容易想到给每个局部变量固定地址,但这是不行的,因为过程支持自己调用自己(递归),这将导致地址冲突。这里引入基于栈的局部变量管理,简单来说就是划分内存区域放局部变量,用数据结构栈的形式管理。 上图给出了一种编程语言执行算术表达式a1=a2+a3的栈内存的活动情况。在执行表达式前通常会声明a1,a2,a3变量,所以栈底的3个元素为a1,a2,a3。在执行算术计算时,第一步是前后将a2,a3入栈,然后通过算数指令弹出栈顶两个元素,得到其和,然后把和入栈,最后把和赋值给a1(图d在原来a1的位置写了a2+a3,目的是表示a1被赋值)。… 阅读全文

用MIC-1微指令实现IJVM

MIC-1的寄存器功能 之前陆陆续续讨论过大部分寄存器的作用,这里统一的明确和汇总一下: 1) MAR:32位内存地址寄存器。为read/write内存操作提供内存字地址。用于IJVM方法区以外的区域的内存地址,这些地址对应的数据都是1个字的长度; 2) MDR:32位内存数据寄存器。存放read从内存取回的32位数据、write要写入内存的32位数据; 3) PC:32位程序计数器。为fetch内存操作提供内存字节地址。通常每次fetch取的是IJVM方法区的IJVM指令的1个字节,并且通常是顺序读取的,即下次fetch的地址是PC+1; 4) MBR:8位内存缓冲寄存器。存放fetch操作从内存取回的8位数据。其作为输出时必然会按符号扩展或无符号扩展中的一种方式,把32位数据送上B总线; 5) SP:32位寄存器,指向IJVM栈的栈顶的内存地址;… 阅读全文

优化MIC-1微体系结构

速度与价格 商用CPU的优化问题主要集中在对速度(性能)与价格(成本)这对矛盾的权衡,更高的性能往往意味着复杂的电路和更多的部件,进而需要更大面积,这又会导致功耗和散热难度的增加和芯片良品率的降低,也就是成本的增加。而且面积并不能无限增大,这会导致部件的电气性能变差,反而降低性能。所以如何合理利用面积也是个重要衍生问题,比如加法器曾有千种设计,速度快的往往面积大,盲目选最快的加法器会占用其他部件的面积,最后整体性能可能下降,这在工业上也有过案例。目前的商用CPU市场中,还没有一种完备的精确定价策略,目前定价所依据的是部件数量、晶体管数量这样的指标。 CPU在“速度与价格”上的进步(每代INTEL加速不加价),其实主要靠集成电路技术的发展,但这部分不是计算机系统的内容。那么,对于确定的指令系统层和集成电路技术,有如下几种提高速度的策略:… 阅读全文

使用预取技术的MIC-2

取指单元(IFU)回顾MIC-1微体系结构,可发现两个导致占用过多时钟周期的问题点: 1) 需要一次一字节的取操作数,并且还16位操作属还需要拼接。其中每取一个字节都对应于一次ALU的占用(一个时钟周期),因为其需要PC自增来提供内存地址。拼接过程同样如此; 2) ALU在很多时候并未用作“复杂”的算术逻辑计算,比如最简单的是让数据“直通”,其次是自增。其相对于ALU的面积是种浪费,且和复杂的ALU计算占用相同时间; 基于上述原因,可以考虑在MIC-1加一个面积小且能力弱的ALU,其“位置”和ALU类似,能和ALU并行工作于同一时刻。该方法能平衡面积(价格)与速度的矛盾,因为其用较少面积“分摊”了一部分的ALU占用时间。这种思路下的具体方案就是在MIC-1加入IFU(取指单元)。IFU通常基于2种预取策略:… 阅读全文

使用流水线技术的MIC-3

MIC-3的数据通路前面讨论了比MIC-1更快的MIC-2,但由于使用了IFU,MIC-2的成本比MIC-1更高。接下来继续讨论如何把MIC-2改进成速度更快的MIC-3,改进基于如下2个方面: 1) 缩短时钟周期:通过改进电路缩短周期,虽然集成电路技术对这方面作用更大,前面提过这点; 2) 提高并行度: MIC-2虽然比MIC-1有更大的并行度(IFU并行取指),但其并行度仍可继续提升; 集成电路水平给定时,MIC-2允许的最短时钟周期很大程度由3部分延迟的和决定: 1) 寄存器数据通过A、B总线的延迟; 2) 数据通过ALU、移位器的延迟; 3) 数据通过他总线(写寄存器)的延迟; 上图为了MIC-3的数据通路,相比MIC-2仅多了3条总线上的3个锁存器。这可以让数据分3个时钟周期通过数据通路,第1个周期寄存器把数据送入A、B锁存器,第2个周期把计算结果送入C锁存器,第3个周期让C锁存器写入寄存器。表面上看,数据通过数据通路的时间扩大到3个时钟周期,但由于这3个步骤的总延迟与之前1个步骤的延迟差不多,所以可认为MIC-3能使用快3倍的时钟(理想状态)。… 阅读全文

七段流水线的MIC-4

MIC-4的流水线MIC-4是对MIC-3的改进,其具有更深的流水线。其使用和MIC-3相似的数据通路和IFU,并引入新功能单元。上图是MIC-4的结构,图中没太多细节,简单了解各功能单元即可: 1) 译码单元:用于划分出包括操作数和操作码的整条指令。其组成包括一个内部ROM,其索引为操作码,数据为指令长度与队列单元的微操作ROM的索引。记录指令长度可能是为了避免误把操作数当操作码。有了译码单元处理WIDE指令就会更方便,可以直接把WIDE ILOAD作为整体映射到微操作ROM; 2) 队列单元:其组成包括1个ROM表和1个RAM队列,前者存储微程序,后者暂存微操作; 2.1) 微程序: MIC-4的微程序结构不同,每个ISA指令对应ROM表的一些顺序的行,这些行称为微操作,其类似于微指令,但微操作大都不含“下个微操作的索引”,所以对于ILOAD和WIDE… 阅读全文

高速缓存技术

高速缓存在计算机发展的过程中,一直存在一个有挑战性的问题:如何设计与CPU速度匹配的内存系统。尤其是过去十几年来,内存系统和CPU的“相对速度”是越来越慢的。现代CPU对内存的延迟和带宽有高的要求,但是内存系统在这两方面通常是矛盾的,如果增大带宽会导致延迟的升高。比如说可以通过流水线技术来让多个内存访问“重叠”,从而增大总的带宽,但这会让每个单次内存访问的延迟更大。 解决内存慢的主流方案是在内存系统中使用高速缓存技术(cache),其中分离式高速缓存是种能有效解决带宽和延迟的矛盾的方案,其分别为数据和指令提供缓存,并允许在这2种缓存并行的进行访问。并行能让带宽翻倍,而这种带宽翻倍并不增加延迟。比如MIC-1就提供了用于指令和数据的两种内存访问端口,如果让这两个端口各有自己的缓存模块,那这两个缓存模块可独立的访问内存。… 阅读全文
滚动至顶部