RISC处理器指令和变量数目非常少但结构复杂,因此RISC处理器可实现更高的并行性。本文设计的RISC处理机的特点如下:
(1)指令简单且数量较少
通过对程序的静态指令进行静态分析,最终只将最常见的指令在RISC处理器中实现,其他指令由编译器综合实现。要实现这一特性以及减少诸如数据相关或程序跳转引起的流水线冲突较少,主要依赖于合适的编译器和特殊硬件来实现。指令集的简单也带来了相对简单的指令传送机制,可以减少对存储器进行指令的读和写操作。
(2)格式固定而且指令长度简短
简单指令基本上字长是固定的,且刚好是一个处理器字,格式较少。这些指令可以支持高效率的定点控制操作和实现结构简单的快速流水线,以及高效率的Cache和寄存器堆。但是只能通过编译器来实现传统的CISC计算机变字长指令和其他复杂指令的功能。
(3)Load/Store特性
对主存储器的读写,速度慢且价格昂贵。RISC指令仅对处理器片内的寄存器堆进行操作,只有Load/Store指令直接访问存储器。除此之外,指令的装载都来自于主存储器。这种指令装载操作在运行Cache的情况下可以大大减少。减少速度慢的存储器访问操作,可以使得流水线平滑的运行,从而获得较高的吞吐率。高效的编译器可以减少Load/Store指令,并且避免流水线冲突。CISC指令直接将存储器和寄存器的内容组合起来使用。
(4)流水线
把指令按完成任务的不同分割成等长的时间段来运行。
(5)可消除流水线冲突
通常情况下,当流水线第二级的指令需要读取寄存器R中的内容,而同时已处于第三级的前一条指令要向存储器R中写入执行结果时,就会产生数据相关。数据相关可以通过硬件电路的数据前推机制或编译器的调整来解决。
由于Load指令访问主存储器通常需要超过1个时钟周期的时间,它的执行结果也不能被后续的指令所使用。通过编译器调度技术可以消除这种延迟装载的流水线冲突。
无效的或者错误的指令进入了流水线导致的相同情况,在执行分子跳转指令时也将打乱流水线的平稳执行状态。通过编译器对延迟跳转进行优化,甚至为分子跳转指令准备Cache,可以达到较高的流水线吞吐率。
(6)高吞吐率
通过灵活高效的指令组合,使得指令的执行时间平均起来小于机器时钟频率。
(7)处理器内无微程序
拥有固定格式的简单指令,使得译码的过程仅需要硬件连接,而且逻辑简单,只用单级就可以实现,以节省执行时间和芯片面积。高效率的编译器可以通过一个简单指令序列的执行来代替复杂的指令执行,从而消除微程序。
(8)Cache和寄存器堆
多端口存储器堆,以及作为主存储器和处理器之间的中间存储器的各种片上Cache(指令Cache、通用指令Cache和条件转移目标Cache),及其合理的替换策略是加速流水线执行的关键模块。它们的使用避免了流水线的冲突,而且大大提高了流水线使用效率。
处理器体系结构的选择:
(1)动态寄存器模块
多窗口的概念是基于线索窗口的概念提出的。高达1024个通用寄存器设计成大小固定的模块。在程序执行中,这些寄存器模块动态地按照需要分配。没有了Berkerley RISC处理器中的循环缓冲器,可以大大减少寄存器存储和读取操作。这种技术的优点还包括:处理程序流变换和处理中断的灵活性。
(2)伪哈佛结构和通用指令Cache
在处理器内部使用分立的指令和数据总线,然而,从外部看,处理器仍然保持一套32位的总线和另一套用于给出地址的总线。对于这样的“伪哈佛”结构,集成一个片内的指令Cache是很有意义的。这样做的优点在于,控制逻辑与数据Cache相比要容易的多,而且通过提高并行度可以提升处理器性能。
在这种指令Cache中,并不是将每一个存储器对应地址中的变量都保存在其中,而只是将哪些有Load/Store指令访存导致总线冲突的指令存储到Cache中。当下一次再访问这样一条指令时,IF级就从Cache中取出指令,而不需要等待。Cache的这一特性非常简单高效,在提高了处理器性能的同时,还没有增加太多额外的电路。将多种模式的Cache组合起来,就构成了通用指令Cache—MPC。
(3)条件转移目标Cache
在地址总线上,用于存储跳转指令和跳转目标地址,以及延迟指令的Cache。称之为跳转目的Cache。当再次执行这样的跳转时,对延迟指令的装载即可以被忽略。在性能提高的同时,需要增加复杂的控制逻辑。
(4)中断、虚拟地址和内核/用户模式
在中断发生后流水线的状态必须被保存下来。中断有不同的优先级别。中断机制是处理器运行所必须的。中断是虚拟地址以及处理器内核/用户模式的基础。虚拟地址通常需要在Cache中存储虚拟的而不是物理的地址,而且,需要外部存储器的控制单元对于存储器表和触发的中断进行管理。
内核/用户模式区别在于,在内核模式下,所有的指令集都有效;在用户模式下,仅有有限的地址单元可用,并且不允许Cache操作指令的执行。
(5)超标量流水线和更高效存储器管理
现代的存储器部分通常包含有一个快速的爆发模式,用于加速平均数据传输的速度。这需要高效的存储器接口。这使得存储器在单时钟周期内一次可以装载两条指令。这样,就需要并行的两个流水级共同执行指令。
(6)高效的ALU
除了执行时间主要取决于访存时延的取值级,ALU部件的执行也是流水线的瓶颈。因此需要更快速的ALU,还需要在ALU中加入高性能的桶形位移器。
(7)异步流水线
流水线的每一级执行时间在每一级之间各不相同,而且在不同的应用条件下,每一级的执行时间也各不相同。同步流水线控制器运行时需要等待运算最慢的时间执行完成,而如果采用与时钟无关的事件驱动机制进行控制的异步流水线控制机,可以大大提高性能。