RISCV decode 總結

RISCV decode 總結


// 總結如下:

   // define  AMO : AMOADD_W,AMOXOR_W,AMOSWAP_W,AMOAND_W,AMOOR_W,AMOMIN_W,AMOMINU_W,AMOMAX_W,AMOMAXU_W;
   //               AMOADD_D,AMOXOR_D,AMOSWAP_D,AMOAND_D,AMOOR_D,AMOMIN_D,AMOMINU_D,AMOMAX_D,AMOMAXU_D;
   // define  LR  : LR_W,LR_D
   // define  SC  : SC_W,SC_D
   // define  L   : LW,LD,LWU,LH,LHU,LB,LBU
   // define  S   : SD,SW,SH,SB
   // define  CSR : CSRRW,CSRRS,CSRRC; CSRRWI,CSRRSI,CSRRCI; 

   // define  FL  : FLW,FLD;
   // define  FS  : FSW,FSD;

iq-type IQT_MEM :  L,S,AMO,LR,SC; FL,FS;
iq-type IQT_INT :  OTHER_ALL;
func unit FU_MEM:  L,S,AMO,LR,SC,FENCE;

br/jmp          :  BEQ,BNE,BGE,BGEU,BLT,BLTU; JAL; JALR;
is_load         :  L; FL
is_store        :  S; FS; AMOO; LR,SC; FENCE;                                                      // 任何進入STQ的東西,包括fence和AMOs

is_amo          :  AMOO,LR,SC;
is_fence        :  FENCE;
is_fence_i      :  FENCE_I;

// NOTE: 雖然 AUIPC,JAL,JALR 的 wakeup_delay = 1,但是它們卻不能 bypass
bypassable      :  LUI; ADDI,ANDI,ORI,XORI,SLTI,SLTIU,SLLI,SRAI,SRLI; ADDIW,SLLIW,SRAIW,SRLIW; 
                   SLL,ADD,SUB,SLT,SLTU,AND,OR,XOR,SRA,SRL; ADDW,SUBW,SLLW,SRAW,SRLW;
 
// NOTE: RISCV 指令集只有小於(<),沒有大於(>),只有大於等於(>=),沒有小於等於(<=),交換兩個源操作數可實現同等功能
allocate_brtag  :  BEQ,BNE,BGE,BGEU,BLT,BLTU;                                                        // 分配brtag

is_unique       :  CSR; SCALL,SBREAK,SRET,MRET,DRET,SFENCE_VM; WFI; FENCE; FENCE_I; AMO; LR,SC;      // 只允許這條指令在管道中,等待STQ耗盡,然後清空fetch(告訴ROB直到清空爲止)
flush on commit :  CSR; WFI; FENCE; FENCE_I; AMO; LR,SC;                                             // 一些指令需要刷新後面的管道

frs3_en         :  FMADD_S,FMSUB_S,FNMADD_S,FNMSUB_S,FMADD_D,FMSUB_D,FNMADD_D,FNMSUB_D;              // 只有浮點的乘加會使用到第三個源操作數

wakeup_delay = 3: L

wakeup_delay = 1: LUI; ADDI,ANDI,ORI,XORI,SLTI,SLTIU,SLLI,SRAI,SRLI; ADDIW,SLLIW,SRAIW,SRLIW;
                   SLL,ADD,SUB,SLT,SLTU,AND,OR,XOR,SRA,SRL; ADDW,SUBW,SLLW,SRAW,SRLW; AUIPC; JAL,JALR;

wakeup_delay = 1: OTHER_ALL;




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章