system: [SYSTEM]

user: 5. 最小指令周期写回法 上文中已经对数据相关问题的本质、成因，及解决问题的关键进行了分析和总结，同时也比较了两种常用的解决方案，流水线暂停法和数据前推法的特点，并对这两种方法出现较大的时间、空间代价的原因作了简要分析。综合已有结论，并结合两种常用方案的优点，我们提出一种用于避免数据相关问题的折衷方案——最小指令周期写回法，以为解决嵌入式设备中RISC微处理器的数据相关冲突提供新的思路。 这种方法具有实现方式灵活简单，硬件资源消耗小等特点，并非常适用于解决RISC处理器流水线中的RAW相关问题。 5.1. 最小指令周期写回法的基本原理及实现原则 与流水线暂停法和数据前推法相同，最小指令周期写回法解决数据相关问题的入手点也是在于减小前后两条指令之间访问操作数时所存在的时间差 。仍以RAW相关为例，其产生 的原因是指令的运算结果产生后不能被立即被下一条指令所使用，而是要按时钟节拍在流水线中继续流动，直到被写回部件写回到目标寄存器中为止。运算结果在流水线中流动的时间越长，可能造成的数据相关也就越严重。实际上，对于运算指令来说，其正确的运算结果和连带的状态产生后，这条指令主要任务基本上已经完成，而在被写回部件写回之前，这些结果和状态在流水线中的流动并不会引起处理机状态的变化。最小指令周期写回法就是依据类似的思想，以“结果得出即写回”为原则，尽可能缩短每条需要进行结果反馈的指令的指令周期，避免运算结果在流水线中不必要的流动，从而实现 这样的效果。但仅仅将指令周期控制到最短也只能削弱数据相关问题的严重性，减小其出现概率，要完全消除数据相关冲突，必须在提前结束前序指令的指令周期同时，延迟后续指令访问操作数的时间，也就是要实现 的效果，此时的 将会明显小于仅采用流水线暂停法时因暂停流水线而消耗掉的处理器时钟周期数。这就是最小指令周期写回法的基本原理，从中我们不难发现，此种方法结合了流水线暂停法和数据前推法两者的特点。 设计和实现最小指令周期写回法，并使其发挥真正的功效，必须遵循以下4点原则： 1) 通过在产生反馈结果的部件(如ALU、Data Memory等)与通用寄存器堆之间建立专用数据路径，实现结果得出即写回的效果。 2) 对于有必要做延迟处理的指令，通过软件的方式推迟其访问源操作数的时间。 3) 对流水线中用于写回运算结果的路径进行集中控制。 4) 其余由于流水线结构造成的WAR、WAW相关，以及因采用本方法而造成的WAW相关，采用软件方式实现的流水线暂停法进行处理。 在实际操作中应注意，由于进行结果反馈的指令其最小指令周期可能不同，如Load指令和ALU指令，因此可能造成WAW相关。但对于RISC处理器来说，绝大多数非控制类指令都为ALU指令，Load指令出现的频率相当小，所以即使采用以软件方式实现流水线暂停法来解决这种WAW相关，处理器在性能上的损失也非常小。同时，通常RICS微处理器流水线中的指令在访问源操作数之前不会出现乱序流动的情况，因而也就不会出现WAR相关，即便某些RISC处理器中出现WAR相关，也可以依据上述4点原则，同RAW，WAW相关进行统一处理。 5.2. 最小指令周期写回法的硬件设计 依据最小指令周期写回法的基本原理和实现原则可知，在硬件层面上，实现此种方法包含两大要点，一是建立专用数据路径，二是对这些路径进行集中控制，因此必须根据指令实际的执行情况设计一个专用的数据路径控制器，其结构如图6所示。 数据路径控制器将对所有运算指令及存储器访问指令的执行结果的写回进行集中控制，除接收指令运算结果及其自身所需要的控制信号外，还需接收流水线执行级中正在进行运算的指令的标识。控制器内部包含数据通路控制逻辑以及一条由若干个寄存器组成的寄存器队列。此寄存器队列用于接收指令标识，并在统一的处理器时钟周期的驱动下形成一条流水线，其中的每一个寄存器可以称为指令标识寄存器。进入这个队列的指令标识信号的流动将与其对应指令的执行时序同步，也就是说，当某一条指令的指令标识进入队列中相应指令标识寄存器的同时，这条指令的执行结果已生成并稳定，此时，数据通路控制逻辑开放该指令执行结果的写回路径，完成写回操作。 图7简要描述了写回Load指令执行结果的时序，数据路径控制器在第二个时钟周期接收到Load指令标识信号“Loadmarker”，随即，该信号按时钟节拍在寄存器队列中流动，直到第四个时钟周期，“Loadmarker”信号进入指令标志寄存器LoadmarkReg中。而在第四个时钟周期，数据存储器中的数据刚好被取出，此时数据通路控制逻辑发送“writebackLR”信号，开放数据存储器到通用寄存器堆之间的专用路径，完成执行结果的写回。 整个控制过程可作如下描述： if (insmarkReg == insmark ) then writeback insResult; else block data path; 当流水线的执行级中包含多个运算时，对每个运算部件产生结果的写回路径做相同控制，即可实现“结果得出即写回”的效果。同时，配合流水线暂停法对后续指令访问源操作数的延迟，则可以避免数据相关冲突。 5.3. 最小指令周期写回法的实际应用 为了验证最小指令周期写回法的可行性及其在实际应用中的效果，我们使用该方法来解决处理器Rewrite1060525流水线中的数据相关。Rewrite1060525中流水线的结构如图8中所示。 Rewrite1060525是一款用于SOPC平台教学实验的32位RISC微处理器，采用指令与数据分开存储 图6. 数据路径控制器 图7. Load指令执行时序 图8. Rewrite1060525体系结构 的哈佛结构，具有5级流水线结构。这五级依次为IF取指令级，用于将指令从指令存储器中取出；PID指令预处理级，用于读取指令所需源操作数，并分析出运算指令的目标存储单元的地址信息；ID译码级，对指令进行译码，同时处理所有控制类指令；EX执行级，执行指令所需完成的运算操作，运算部件除算 Table 1 Comparison of the number of stall cycles under worst cas 使用最小指令周期写回法 不使用最小指令周期写回法 ALU指令数据相关引起的流水线暂停时钟周期 2 4 乘法指令数据相关引起的流水线暂停时钟周期 6 8 Load指令数据相关引起的流水线暂停时钟周期 4 6 表1. 最坏情况下流水线暂停占用的时钟周期数比较 Table 2 Consumption of hardware resources (without on chip RAM Total logic elements Total registers Rewrite1060525 8091 2877 Datapath controller 226 40 表2. 硬件资源消耗比较(无片上 RAM情况下) 数逻辑运算器外还包含一个带有4级流水线结构的32位整数乘法器；MEM存储器访问级，完成对数据存储器的访问。由于使用了最小指令周期写回法，流水线中不再设置写回级，所有执行结果的写回操作由数据路径控制器集中控制。 Rewrite1060525将采用Verilog-HDL进行描述，并由QuartusII进行综合。硬件环境选用Cyclone II：EP2C35F672C8。实验将在采用和不采用最小指令周期写回法的情况下分别进行，对比由ALU指令、乘法指令和Load指令引起的最坏情况下的数据相关导致流水线暂停所占用的时钟周期数的差异。具体数据如表1所示。 从中可以看出，因为使用了最小指令周期写回法，由ALU指令引起数据相关时，流水线暂停所占用的时钟周期减少了50%；乘法指令引起数据相关时，流水线暂停所占用的时钟周期数减少了25%；Load指令则减少了33.3%。表2给出了硬件资源消耗的情况。 用于实现最小指令周期写回法的部件数据路径控制器，在逻辑单元的消耗中只占Rewrite1060525整体的2.8%，寄存器资源的消耗只占1.4%。通过上面数据的对比可以看出，最小指令周期写回法一方面有效地解决数据相关问题，另一方面又充分节省了硬件资源的消耗。