Use auto-generated CAUSE constants
This commit is contained in:
		| @@ -433,13 +433,13 @@ class Control(implicit conf: RocketConfiguration) extends Module | ||||
|  | ||||
|   val (id_xcpt, id_cause) = checkExceptions(List( | ||||
|     (id_interrupt,                                    id_interrupt_cause), | ||||
|     (io.imem.resp.bits.xcpt_ma,                       UInt(0)), | ||||
|     (io.imem.resp.bits.xcpt_if,                       UInt(1)), | ||||
|     (!id_int_val || id_csr_invalid,                   UInt(2)), | ||||
|     (id_privileged && !io.dpath.status.s,             UInt(3)), | ||||
|     ((id_fp_val || id_csr_fp) && !io.dpath.status.ef, UInt(4)), | ||||
|     (id_syscall,                                      UInt(6)), | ||||
|     (id_rocc_val && !io.dpath.status.er,              UInt(12)))) | ||||
|     (io.imem.resp.bits.xcpt_ma,                       UInt(Causes.misaligned_fetch)), | ||||
|     (io.imem.resp.bits.xcpt_if,                       UInt(Causes.fault_fetch)), | ||||
|     (!id_int_val || id_csr_invalid,                   UInt(Causes.illegal_instruction)), | ||||
|     (id_privileged && !io.dpath.status.s,             UInt(Causes.privileged_instruction)), | ||||
|     ((id_fp_val || id_csr_fp) && !io.dpath.status.ef, UInt(Causes.fp_disabled)), | ||||
|     (id_syscall,                                      UInt(Causes.syscall)), | ||||
|     (id_rocc_val && !io.dpath.status.er,              UInt(Causes.accelerator_disabled)))) | ||||
|  | ||||
|   ex_reg_xcpt_interrupt := id_interrupt && !take_pc && io.imem.resp.valid | ||||
|   when (id_xcpt) { ex_reg_cause := id_cause } | ||||
| @@ -496,7 +496,7 @@ class Control(implicit conf: RocketConfiguration) extends Module | ||||
|  | ||||
|   val (ex_xcpt, ex_cause) = checkExceptions(List( | ||||
|     (ex_reg_xcpt_interrupt || ex_reg_xcpt, ex_reg_cause), | ||||
|     (ex_reg_fp_val && io.fpu.illegal_rm,   UInt(2)))) | ||||
|     (ex_reg_fp_val && io.fpu.illegal_rm,   UInt(Causes.illegal_instruction)))) | ||||
|    | ||||
|   mem_reg_replay := replay_ex && !take_pc_wb | ||||
|   mem_reg_xcpt_interrupt := ex_reg_xcpt_interrupt && !take_pc_wb && !mem_reg_replay_next | ||||
| @@ -533,10 +533,10 @@ class Control(implicit conf: RocketConfiguration) extends Module | ||||
|  | ||||
|   val (mem_xcpt, mem_cause) = checkExceptions(List( | ||||
|     (mem_reg_xcpt_interrupt || mem_reg_xcpt, mem_reg_cause), | ||||
|     (mem_reg_mem_val && io.dmem.xcpt.ma.ld,  UInt( 8)), | ||||
|     (mem_reg_mem_val && io.dmem.xcpt.ma.st,  UInt( 9)), | ||||
|     (mem_reg_mem_val && io.dmem.xcpt.pf.ld,  UInt(10)), | ||||
|     (mem_reg_mem_val && io.dmem.xcpt.pf.st,  UInt(11)))) | ||||
|     (mem_reg_mem_val && io.dmem.xcpt.ma.ld,  UInt(Causes.misaligned_load)), | ||||
|     (mem_reg_mem_val && io.dmem.xcpt.ma.st,  UInt(Causes.misaligned_store)), | ||||
|     (mem_reg_mem_val && io.dmem.xcpt.pf.ld,  UInt(Causes.fault_load)), | ||||
|     (mem_reg_mem_val && io.dmem.xcpt.pf.st,  UInt(Causes.fault_store)))) | ||||
|  | ||||
|   val dcache_kill_mem = mem_reg_wen && io.dmem.replay_next.valid // structural hazard on writeback port | ||||
|   val fpu_kill_mem = mem_reg_fp_val && io.fpu.nack_mem | ||||
|   | ||||
| @@ -5,14 +5,14 @@ import Node._ | ||||
|  | ||||
| /* Automatically generated by parse-opcodes */ | ||||
| object Instructions { | ||||
|   def JAL                = Bits("b?????????????????????????1101111") | ||||
|   def JALR               = Bits("b?????????????????000?????1100111") | ||||
|   def BEQ                = Bits("b?????????????????000?????1100011") | ||||
|   def BNE                = Bits("b?????????????????001?????1100011") | ||||
|   def BLT                = Bits("b?????????????????100?????1100011") | ||||
|   def BGE                = Bits("b?????????????????101?????1100011") | ||||
|   def BLTU               = Bits("b?????????????????110?????1100011") | ||||
|   def BGEU               = Bits("b?????????????????111?????1100011") | ||||
|   def JALR               = Bits("b?????????????????000?????1100111") | ||||
|   def JAL                = Bits("b?????????????????????????1101111") | ||||
|   def LUI                = Bits("b?????????????????????????0110111") | ||||
|   def AUIPC              = Bits("b?????????????????????????0010111") | ||||
|   def ADDI               = Bits("b?????????????????000?????0010011") | ||||
| @@ -185,6 +185,36 @@ object Instructions { | ||||
|   def CUSTOM3_RD_RS1     = Bits("b?????????????????110?????1111011") | ||||
|   def CUSTOM3_RD_RS1_RS2 = Bits("b?????????????????111?????1111011") | ||||
| } | ||||
| object Causes { | ||||
|   val misaligned_fetch = 0x0 | ||||
|   val fault_fetch = 0x1 | ||||
|   val illegal_instruction = 0x2 | ||||
|   val privileged_instruction = 0x3 | ||||
|   val fp_disabled = 0x4 | ||||
|   val syscall = 0x6 | ||||
|   val breakpoint = 0x7 | ||||
|   val misaligned_load = 0x8 | ||||
|   val misaligned_store = 0x9 | ||||
|   val fault_load = 0xa | ||||
|   val fault_store = 0xb | ||||
|   val accelerator_disabled = 0xc | ||||
|   val all = { | ||||
|     val res = collection.mutable.ArrayBuffer[Int]() | ||||
|     res += misaligned_fetch | ||||
|     res += fault_fetch | ||||
|     res += illegal_instruction | ||||
|     res += privileged_instruction | ||||
|     res += fp_disabled | ||||
|     res += syscall | ||||
|     res += breakpoint | ||||
|     res += misaligned_load | ||||
|     res += misaligned_store | ||||
|     res += fault_load | ||||
|     res += fault_store | ||||
|     res += accelerator_disabled | ||||
|     res.toArray | ||||
|   } | ||||
| } | ||||
| object CSRs { | ||||
|   val fflags = 0x1 | ||||
|   val frm = 0x2 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user