自己动手写CPU之第七阶段(5) |
您所在的位置:网站首页 › 流水线程序怎么写好看又简单 › 自己动手写CPU之第七阶段(5) |
将陆续上传本人写的新书《自己动手写CPU》,今天是第28篇。我尽量每周四篇
China-pub的预售地址例如以下(有文件夹、内容简单介绍、前言): http://product.china-pub.com/3804025 亚马逊的预售地址例如以下,欢迎大家围观呵。 http://www.amazon.cn/dp/b00mqkrlg8/ref=cm_sw_r_si_dp_5kq8tb1gyhja4 7.5 流水线暂停机制的设计与实现 7.5.1 流水线暂停机制设计 由于OpenMIPS设计乘累加、乘累减、除法指令在流水线运行阶段占用多个时钟周期,因此须要暂停流水线,以等待这些多周期指令运行完成。一种直观的实现方法是:要暂停流水线,仅仅需保持取指令地址PC的值不变。同一时候保持流水线各个阶段的寄存器(也就是IF/ID、ID/EX、EX/MEM、MEM/WB模块的输出)不变。 OpenMIPS採用的是一种改进的方法:假如位于流水线第n阶段的指令须要多个时钟周期,进而请求流水线暂停,那么需保持取指令地址PC的值不变。同一时候保持流水线第n阶段、第n阶段之前的各个阶段的寄存器不变,而第n阶段后面的指令继续执行。 比方:流水线执行阶段的指令请求流水线暂停,那么保持PC不变,同一时候保持取指、译码、执行阶段的寄存器不变。可是能够同意訪存、回写阶段的指令继续执行。 为此,设计加入CTRL模块。其作用是接收各个阶段传递过来的流水线暂停请求信号,从而控制流水线各个阶段的执行。 为了实现流水线暂停机制,对系统结构做如图7-10所看到的的改动。 CTRL模块的输入来自ID、EX模块的请求暂停信号stallreq。对于OpenMIPS教学版而言,仅仅有译码、运行阶段可能会有暂停请求。取指、訪存阶段都没有暂停请求。由于指令读取、数据存储器的读写操作都能够在一个时钟周期完毕。 CTRL模块对暂停请求信号进行推断,然后输出流水线暂停信号stall。从图7-10中可知,stall输出到PC、IF/ID、ID/EX、EX/MEM、MEM/WB等模块。从而控制PC的值,以及流水线各个阶段的寄存器。 7.5.2 流水线暂停机制实现 1、CTRL模块的实现 CTRL模块的接口如图7-10中所看到的,各接口作用如表7-1所看到的。
读者须要注意:输出信号stall是一个宽度为6的信号。其含义例如以下。 stall[0]表示取指地址PC是否保持不变。为1表示保持不变 stall[1]表示流水线取指阶段是否暂停,为1表示暂停 stall[2]表示流水线译码阶段是否暂停。为1表示暂停 stall[3]表示流水线运行阶段是否暂停,为1表示暂停 stall[4]表示流水线訪存阶段是否暂停,为1表示暂停 stall[5]表示流水线回写阶段是否暂停,为1表示暂停CTRL模块的代码例如以下。源文件是本书附带光盘Code\Chapter7_2文件夹下的ctrl.v。 module ctrl( input wire rst, input wire stallreq_from_id, // 来自译码阶段的暂停请求 input wire stallreq_from_ex, // 来自运行阶段的暂停请求 output reg[5:0] stall ); always @ (*) begin if(rst == `RstEnable) begin stall |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |