andy-yang-1 / RISC-V-simulator

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

README

文件结构

  • all_header / main -> 顺序执行
  • pipeline_header / pipeline_main -> 五级流水
  • tomasulo_header / tomasulo_main -> Tomasulo

五级流水

  • 五种操作:IF ID EX MEM WB
  • 同步1:synchronize
    • pc 判断:抹除中间层,等待输入标记,pc 修改在 MEM 阶段
    • 读写判断:中间层拒绝被写入,所有操作等待 WB 写完
  • 中间层:前一层的输出,后一层的输入
    • 状态:空 / 满 / 不可修改
    • 若前一层为空,指令不执行;后一层为不可修改,指令不执行,同时前一层为不可修改
    • WB 满指令执行完前一层变空,IF 拒绝写入不跳 pc
  • 中间夹层:数据元素与中间层相同
    • 当前指令的结果输入到中间夹层,同步合法则将中间夹层结果给中间层
    • bool status npc IR rs1 rs2 rd reg_rs1 reg_rs2 immediate ALUOutput
  • 气泡停滞 stall
  • 分支预测:
    • 4096 个 2 bit 饱和分支计数器 hashmap -> 下标
    • 根据 pc 来获得下标,直接在 synchronize 时覆写 Layer
    • 两个 bool 作为计数器

以下内容就当笑话看吧,80%写假了 😅

Tomasulo

  • 三种操作:issue execute commit
  • status: valid / invalid / empty
  • 类封装 ( 和 layer 差不多 )
    • RS 元素:status npc read_pc rs1 rs2 reg_rs1 reg_rs2 immediate ALUOutput ROB_ID
    • ROB 元素:同 RS RS_ID / SLB_ID
    • SLB 元素:同 RS ROB_ID
    • register -> Q / V 依赖关系 与 具体值
  • 循环队列处理 ROB / SLB
  • 跳 pc 算出结果后清空 RS / SLB 其后的内容

About


Languages

Language:C++ 99.8%Language:CMake 0.2%