Merge pull request #933 from freechipsproject/cinst
Print out the compressed instruction when executing one
This commit is contained in:
commit
6d1d285464
@ -16,6 +16,7 @@ class Instruction(implicit val p: Parameters) extends ParameterizedBundle with H
|
|||||||
val rvc = Bool()
|
val rvc = Bool()
|
||||||
val inst = new ExpandedInstruction
|
val inst = new ExpandedInstruction
|
||||||
val raw = UInt(width = 32)
|
val raw = UInt(width = 32)
|
||||||
|
val cinst = UInt(width = 32)
|
||||||
require(coreInstBits == (if (usingCompressed) 16 else 32))
|
require(coreInstBits == (if (usingCompressed) 16 else 32))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,6 +96,7 @@ class IBuf(implicit p: Parameters) extends CoreModule {
|
|||||||
exp.io.in := curInst
|
exp.io.in := curInst
|
||||||
io.inst(i).bits.inst := exp.io.out
|
io.inst(i).bits.inst := exp.io.out
|
||||||
io.inst(i).bits.raw := curInst
|
io.inst(i).bits.raw := curInst
|
||||||
|
io.inst(i).bits.cinst := Mux(exp.io.rvc, curInst & 0xFFFF, curInst)
|
||||||
|
|
||||||
if (usingCompressed) {
|
if (usingCompressed) {
|
||||||
val replay = ic_replay(j) || (!exp.io.rvc && (btbHitMask(j) || ic_replay(j+1)))
|
val replay = ic_replay(j) || (!exp.io.rvc && (btbHitMask(j) || ic_replay(j+1)))
|
||||||
|
@ -136,6 +136,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
|||||||
val ex_reg_replay = Reg(Bool())
|
val ex_reg_replay = Reg(Bool())
|
||||||
val ex_reg_pc = Reg(UInt())
|
val ex_reg_pc = Reg(UInt())
|
||||||
val ex_reg_inst = Reg(Bits())
|
val ex_reg_inst = Reg(Bits())
|
||||||
|
val ex_reg_cinst = Reg(Bits())
|
||||||
|
|
||||||
val mem_reg_xcpt_interrupt = Reg(Bool())
|
val mem_reg_xcpt_interrupt = Reg(Bool())
|
||||||
val mem_reg_valid = Reg(Bool())
|
val mem_reg_valid = Reg(Bool())
|
||||||
@ -152,6 +153,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
|||||||
val mem_reg_sfence = Reg(Bool())
|
val mem_reg_sfence = Reg(Bool())
|
||||||
val mem_reg_pc = Reg(UInt())
|
val mem_reg_pc = Reg(UInt())
|
||||||
val mem_reg_inst = Reg(Bits())
|
val mem_reg_inst = Reg(Bits())
|
||||||
|
val mem_reg_cinst = Reg(Bits())
|
||||||
val mem_reg_wdata = Reg(Bits())
|
val mem_reg_wdata = Reg(Bits())
|
||||||
val mem_reg_rs2 = Reg(Bits())
|
val mem_reg_rs2 = Reg(Bits())
|
||||||
val take_pc_mem = Wire(Bool())
|
val take_pc_mem = Wire(Bool())
|
||||||
@ -165,6 +167,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
|||||||
val wb_reg_sfence = Reg(Bool())
|
val wb_reg_sfence = Reg(Bool())
|
||||||
val wb_reg_pc = Reg(UInt())
|
val wb_reg_pc = Reg(UInt())
|
||||||
val wb_reg_inst = Reg(Bits())
|
val wb_reg_inst = Reg(Bits())
|
||||||
|
val wb_reg_cinst = Reg(Bits())
|
||||||
val wb_reg_wdata = Reg(Bits())
|
val wb_reg_wdata = Reg(Bits())
|
||||||
val wb_reg_rs2 = Reg(Bits())
|
val wb_reg_rs2 = Reg(Bits())
|
||||||
val take_pc_wb = Wire(Bool())
|
val take_pc_wb = Wire(Bool())
|
||||||
@ -175,6 +178,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
|||||||
// decode stage
|
// decode stage
|
||||||
val ibuf = Module(new IBuf)
|
val ibuf = Module(new IBuf)
|
||||||
val id_expanded_inst = ibuf.io.inst.map(_.bits.inst)
|
val id_expanded_inst = ibuf.io.inst.map(_.bits.inst)
|
||||||
|
val id_nonexpanded_inst = ibuf.io.inst.map(_.bits.cinst)
|
||||||
val id_inst = id_expanded_inst.map(_.bits)
|
val id_inst = id_expanded_inst.map(_.bits)
|
||||||
ibuf.io.imem <> io.imem.resp
|
ibuf.io.imem <> io.imem.resp
|
||||||
ibuf.io.kill := take_pc
|
ibuf.io.kill := take_pc
|
||||||
@ -340,6 +344,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
|||||||
when (!ctrl_killd || csr.io.interrupt || ibuf.io.inst(0).bits.replay) {
|
when (!ctrl_killd || csr.io.interrupt || ibuf.io.inst(0).bits.replay) {
|
||||||
ex_reg_cause := id_cause
|
ex_reg_cause := id_cause
|
||||||
ex_reg_inst := id_inst(0)
|
ex_reg_inst := id_inst(0)
|
||||||
|
ex_reg_cinst := id_nonexpanded_inst(0)
|
||||||
ex_reg_pc := ibuf.io.pc
|
ex_reg_pc := ibuf.io.pc
|
||||||
ex_reg_btb_resp := ibuf.io.btb_resp
|
ex_reg_btb_resp := ibuf.io.btb_resp
|
||||||
}
|
}
|
||||||
@ -400,6 +405,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
|||||||
|
|
||||||
mem_reg_cause := ex_cause
|
mem_reg_cause := ex_cause
|
||||||
mem_reg_inst := ex_reg_inst
|
mem_reg_inst := ex_reg_inst
|
||||||
|
mem_reg_cinst := ex_reg_cinst
|
||||||
mem_reg_pc := ex_reg_pc
|
mem_reg_pc := ex_reg_pc
|
||||||
mem_reg_wdata := alu.io.out
|
mem_reg_wdata := alu.io.out
|
||||||
|
|
||||||
@ -447,6 +453,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
|||||||
}
|
}
|
||||||
wb_reg_cause := mem_cause
|
wb_reg_cause := mem_cause
|
||||||
wb_reg_inst := mem_reg_inst
|
wb_reg_inst := mem_reg_inst
|
||||||
|
wb_reg_cinst := mem_reg_cinst
|
||||||
wb_reg_pc := mem_reg_pc
|
wb_reg_pc := mem_reg_pc
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -660,6 +667,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
|||||||
val pc = Wire(SInt(width=xLen))
|
val pc = Wire(SInt(width=xLen))
|
||||||
pc := wb_reg_pc.asSInt
|
pc := wb_reg_pc.asSInt
|
||||||
val inst = wb_reg_inst
|
val inst = wb_reg_inst
|
||||||
|
val cinst = wb_reg_cinst
|
||||||
val rd = RegNext(RegNext(RegNext(id_waddr)))
|
val rd = RegNext(RegNext(RegNext(id_waddr)))
|
||||||
val wfd = wb_ctrl.wfd
|
val wfd = wb_ctrl.wfd
|
||||||
val wxd = wb_ctrl.wxd
|
val wxd = wb_ctrl.wxd
|
||||||
@ -668,16 +676,16 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
|||||||
|
|
||||||
when (wb_valid) {
|
when (wb_valid) {
|
||||||
when (wfd) {
|
when (wfd) {
|
||||||
printf ("%d 0x%x (0x%x) f%d p%d 0xXXXXXXXXXXXXXXXX\n", priv, pc, inst, rd, rd+UInt(32))
|
printf ("%d 0x%x (0x%x) f%d p%d 0xXXXXXXXXXXXXXXXX\n", priv, pc, cinst, rd, rd+UInt(32))
|
||||||
}
|
}
|
||||||
.elsewhen (wxd && rd =/= UInt(0) && has_data) {
|
.elsewhen (wxd && rd =/= UInt(0) && has_data) {
|
||||||
printf ("%d 0x%x (0x%x) x%d 0x%x\n", priv, pc, inst, rd, rf_wdata)
|
printf ("%d 0x%x (0x%x) x%d 0x%x\n", priv, pc, cinst, rd, rf_wdata)
|
||||||
}
|
}
|
||||||
.elsewhen (wxd && rd =/= UInt(0) && !has_data) {
|
.elsewhen (wxd && rd =/= UInt(0) && !has_data) {
|
||||||
printf ("%d 0x%x (0x%x) x%d p%d 0xXXXXXXXXXXXXXXXX\n", priv, pc, inst, rd, rd)
|
printf ("%d 0x%x (0x%x) x%d p%d 0xXXXXXXXXXXXXXXXX\n", priv, pc, cinst, rd, rd)
|
||||||
}
|
}
|
||||||
.otherwise {
|
.otherwise {
|
||||||
printf ("%d 0x%x (0x%x)\n", priv, pc, inst)
|
printf ("%d 0x%x (0x%x)\n", priv, pc, cinst)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -691,7 +699,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
|||||||
Mux(rf_wen && !(wb_set_sboard && wb_wen), rf_waddr, UInt(0)), rf_wdata, rf_wen,
|
Mux(rf_wen && !(wb_set_sboard && wb_wen), rf_waddr, UInt(0)), rf_wdata, rf_wen,
|
||||||
wb_reg_inst(19,15), Reg(next=Reg(next=ex_rs(0))),
|
wb_reg_inst(19,15), Reg(next=Reg(next=ex_rs(0))),
|
||||||
wb_reg_inst(24,20), Reg(next=Reg(next=ex_rs(1))),
|
wb_reg_inst(24,20), Reg(next=Reg(next=ex_rs(1))),
|
||||||
wb_reg_inst, wb_reg_inst)
|
wb_reg_cinst, wb_reg_cinst)
|
||||||
}
|
}
|
||||||
|
|
||||||
def checkExceptions(x: Seq[(Bool, UInt)]) =
|
def checkExceptions(x: Seq[(Bool, UInt)]) =
|
||||||
|
Loading…
Reference in New Issue
Block a user