《cpu整体结构以及各模块详解》由会员分享,可在线阅读,更多相关《cpu整体结构以及各模块详解(14页珍藏版)》请在金锄头文库上搜索。
1、五级流水结构总体框架介绍五级流水结构总体框架介绍 该处理器设计基于 MIPS64 位架构,采用经典的 MIPS 五级流水结构,其总 体结构设计如图 1 所示。 图 1五级流水线架构图 1五级流水线架构 该流水结构共划分为 5 级流水,初步定义需要拟定 6 个大模块。各模块名称 和功能如表 1 所示。 表表 1各模块列表各模块列表 模块模块功能功能 IF取指 DE译码 EX执行 MEM访存 WB写回 Control_bus外设 除此之外,在设计中还要涉及三个存储的部分(即结构中的绿色标明的部 分) , 其中一个用于存储指令, 即 ins_rom, 另外一个用于存储数据, 即 data_ram,
2、第三个就是寄存器堆 reg_file(包含 32 个通用寄存器) ,我们将其放置在 DE 阶 段。 在结构中,目前外设的作用主要是用于在访存阶段流水线中出现往特殊地址 存储数据的操作,在之后的 Control_bus 部分会有具体的介绍。 以下对该设计的各个模块进行具体分析。 1 IF1 IF 1.1 模块端口1.1 模块端口 1.2 输入输出列表1.2 输入输出列表 端口端口位宽位宽意义意义 输入输入 clk1时钟信号 rst_n1复位信号 BJ_bus65跳转类指令的有效信号和目标地址 stall1流水寄存器堵塞信号 输出输出ins_o32从指令内存中取出的指令码 pc64指令地址 内部变
3、量内部变量 变量名称变量名称 位宽位宽意义意义 pc_nextpc_next64pc 的临时变量,由逻辑 产生, 在 clk 上升沿来临 通过流水寄存器传出去 instr(CODE_MEM_SIZE-1):0instr(CODE_MEM_SIZE-1):0CODE_MEM_SIZE寄存器变量类型的指令 内存数组, 通过读文件的 形式初始化 1.3 模块实现流程图1.3 模块实现流程图 将要运行的指令存放在 code_rom 文件中,初始化时读取文件到指令内存。 指令码是 32 位的,内存按字节存储,所以相邻指令的 pc 地址相差 4。根据当前 pc 向指令内存中取指令。模块的输入 stall
4、来自译码模块的输出,用于判断流 水线是否需要堵(由于流水线的数据冲突) ,如果 stall 为 1,则将上一周期的 pc 赋给当前 pc,否则再判断 BJ_valid。模块的输入 BJ_bus 来自执行模块的输 出,包含跳转标志位 BJ_valid 和跳转 pc 地址,判断 BJ_valid,如果为 1,则当 前 pc 为 BJ_pc,如果为 0,则 pc+4。 2 Decode2 Decode 2.1 模块端口2.1 模块端口 2.2 输入输出列表2.2 输入输出列表 信号位宽意义 输入 ins32IF 阶段取得的正确指令 pc_in64输入 pc Ex_desti5执行阶段返回的目的寄存器
5、号 Mem_desti5访存阶段返回的目的寄存器号 Wb_bus70写回信号 输出 pc_out64输出 pc Op8自定义操作码 Rs64从目的寄存器中取出的源操作数 Rt64从目的寄存器中取出的源操作数 rd5目的寄存器号 Imm64立即数 Stall1堵塞信号 2.3 模块实现流程图2.3 模块实现流程图 在译码模块中,主要有三部分逻辑:译码,将数据写回寄存器堆,和产生 stall 信号。接下来 将对这三个部分做详细介绍。 2.3.1 译码 译码是将取值模块取出的正确结果按指令手册进行拆分, 将对应的部分放入对应的寄存 器,在时钟到来时输出给执行模块。具体流程图见下图。 2.3.2 St
6、all 信号的产生 stall 信号是在进入 DE 阶段指令的源寄存器 rs 或 rt(根据指令的不同,源寄存器为 rs、 rt 或者只有 rs)与正在执行阶段指令的目的寄存器号 ex_desti 与写回阶段的指令的目的寄存 器号 mem_desti 相等时产生的,此时需要停止流水线(stall=1),等待数据写回(wb_bus 有效)。 当 wb_bus 有效时,传入 DE 的数据在逻辑部分可以立即使用,但需在下一时钟周期到来时 将其数据写回相应寄存器。具体操作及信号判断见下图。 2.3.3 写回寄存器堆的操作相对简单,在写回信号有效时(wb_bus69=1),将其低 64 位数 据 赋 给
7、 写 回 数 据 (wb_data = wb_bus63:0) , 其 6468 位 为 目 的 寄 存 号 (wb_desti = wb_bus68:64)。其数据在获得后可以立即使用,但写回寄存器堆需在下一时钟。 3 EX3 EX 3.1 模块端口3.1 模块端口 本模块主要是根据 DE 模块对指令的分解,完成指令对应的特定功能,并输 出计算结果给 MEM 模块或者跳转地址给 IF 模块,代码主要分为逻辑部分和寄存 器部分。模块图如下: 3.2 输入输出端口列表3.2 输入输出端口列表 输入输入输出输出 OP_inOP_out rs_data,rt_dataRe rst_n,clkDES_
8、out DES_inBJ_Bus Immstore_addr PCS_data 端口解释: Input Port: OP_in :DE 阶段操作码的输出作为 EX 阶段操作码的输入; rs_data,rt_data:源寄存器数据; DES_in:指令中的目的寄存器地址; Imm:指令操作所需立即数; rst_n:复位信号 clk: 时钟信号 PC:当前指令对应 pc; Output Port: OP_out: 操作码的输出端口; Re:普通类指令计算结果输出端口; S_data:store 数据端口 DES_out:目的寄存器地址输出; BJ_bus:跳转总线,输出跳转信号和跳转地址; sto
9、re_addr : store 和 load 指令时,存取数据的内存地址 4 MEM4 MEM 4.1 模块端口4.1 模块端口 4.2 输入输出端口列表4.2 输入输出端口列表 端口端口位宽位宽意义意义 输入输入clk1时钟信号 rst_n1复位信号 op8指令标识码 result_i64非访存类指令的计算结果 desti_i5目的寄存器号,原值输出给 desti_o store_data64store 类指令要存储的数据 mem_addr16访存类指令要访问的数据存储器地址 输出输出result_o64计算结果 desti_o5目的寄存器号 wb_valid1写回标志位 control_b
10、us81用于控制外设的接口 内部变量内部变量 变量名称变量名称位宽位宽意义意义 rd_en1读存储器使能 wr_en1写存储器使能 wb_valid_temp1临时变量,根据 op 计算出来的写回标志,为 FF 的输入变量, 时钟上升沿赋值给 FF 的输 wb_valid control_bus_temp81控制线的临时变量 result_temp64计算结果临时变量 control_bus_valid1控制线的标志位,只有在对存储器地址 0x03000x0320 写数时置 1 mem_addr_i16数据存储器的地址标号 4.3 模块实现流程图4.3 模块实现流程图 该级主要处理存储加载类指
11、令,对于普通类指令,则不需做处理,只需计算 出写回标志位并传递给下一级。该模块初始化读取外部一个文件到数据内存。如 果是 store 类指令, 就根据输入的内存地址 mem_addr 和数据 store_data 对内存 进行写操作; 如果是 load 类指令, 就根据输入的内存地址 mem_addr 取出该数据, 在后级写回寄存器堆。 5 WB5 WB 5.1 模块端口5.1 模块端口 5.2 输入输出列表5.2 输入输出列表 端口端口位宽位宽意义意义 输入输入clk1时钟信号 rst_n1复位信号 result64需要写回寄存器堆的计算结果数据 desti5目的寄存器号 Wb_valid1
12、写回标志位 输出输出Wb_bus70写回线, wb_bus69:0=wb_valid,desti4:0,re sult63:0 该级实现的逻辑是计算结果的位拼接,得到写回数据线,包括写回标志位, 目的寄存器号及结果数据。具体的写回寄存器堆过程是在 DE 阶段中。 6Control_bus 6.1 模块端口模块端口 6.2 输入输出端口列表输入输出端口列表 端口端口位宽位宽意义意义 输入输入Control_bus valid1 1标志位 addr16存储地址 data64存储数据 6.3 模块实现流程图模块实现流程图 该模块相当于一个自定义的外设, 只有输入, 没有输出。 Control_bus
13、 是 MEM 的输出,将其作为该模块的输入,由 valid,address,data 三部分组成。该模块 Control_bus 也分为三个部分,一个寄存器,两个地址不同的外设。 当在 MEM 阶段判断是存储类指令的时候, 并且是需要往一个特殊的地址存 储数据,这个时候就将 Control_bus 从 MEM 输出,进入该模块后现将其寄存一 次,然后输入到每个外设中,再在外设中将其拆分成 valid,address,data 三部 分。首先判断 valid 是否有效,valid 无效不进行任何操作;valid 有效后,判断给 出的 addr 是否和该外设的 addr 相等,如果不等则不操作,如果相等,就将其给 出的 data 存储到该外设中。 该模块只是一个类似于总线的功能,但并不是用总线实现的,可以在后期的 开发中进行拓展。