Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/main/scala/nutcore/NutCoreTrap.scala
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ object NutCoreTrap extends HasInstrType {
def StateInvOpcode = 2.U
def StateRunning = 3.U

// custom-trap: opcode=1101011, funct3=000. Matches NEMU nemu_trap (e.g. 0x0005006b).
// DUT executes it as add (typically rd=x0). DiffTest uses a0 to tell control
// markers (0x100/0x101, keep running) from exit codes (0/1, stop the sim).
def TRAP = BitPat("b????????????_?????_000_?????_1101011")
val table = Array(TRAP -> List(InstrI, FuType.alu, ALUOpType.add))
}
Expand Down
3 changes: 2 additions & 1 deletion src/main/scala/nutcore/backend/ooo/ROB.scala
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,8 @@ class ROB(implicit val p: NutCoreConfig) extends NutCoreModule with HasInstrType
difftest_commit.valid := (if (i == 0) retireATerm else retireMultiTerms)
difftest_commit.pc := SignExt(decode(ringBufferTail)(i).cf.pc, AddrBits)
difftest_commit.instr := decode(ringBufferTail)(i).cf.instr
difftest_commit.skip := isMMIO(ringBufferTail)(i) && valid(ringBufferTail)(i)
// DiffTest still stops the sim on a0=0/1; otherwise skip comparison.
difftest_commit.skip := (isMMIO(ringBufferTail)(i) || decode(ringBufferTail)(i).ctrl.isNutCoreTrap) && valid(ringBufferTail)(i)
difftest_commit.isRVC := decode(ringBufferTail)(i).cf.isRVC
difftest_commit.rfwen := io.wb(i).rfWen && io.wb(i).rfDest =/= 0.U // && valid(ringBufferTail)(i) && commited(ringBufferTail)(i)
difftest_commit.fpwen := false.B
Expand Down
1 change: 1 addition & 0 deletions src/main/scala/nutcore/backend/seq/EXU.scala
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ class EXU(implicit val p: NutCoreConfig) extends NutCoreModule {
o.rfWen := i.rfWen && (!lsuTlbPF && !lsu.io.loadAddrMisaligned && !lsu.io.storeAddrMisaligned || !fuValids(FuType.lsu)) && !(csr.io.wenFix && fuValids(FuType.csr))
o.rfDest := i.rfDest
o.fuType := i.fuType
o.isNutCoreTrap := i.isNutCoreTrap
}
io.out.bits.decode.cf.pc := io.in.bits.cf.pc
io.out.bits.decode.cf.instr := io.in.bits.cf.instr
Expand Down
3 changes: 2 additions & 1 deletion src/main/scala/nutcore/backend/seq/WBU.scala
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ class WBU(implicit val p: NutCoreConfig) extends NutCoreModule{
difftest_commit.valid := io.in.valid
difftest_commit.pc := SignExt(io.in.bits.decode.cf.pc, AddrBits)
difftest_commit.instr := io.in.bits.decode.cf.instr
difftest_commit.skip := io.in.bits.isMMIO
// DiffTest still stops the sim on a0=0/1; otherwise skip comparison.
difftest_commit.skip := io.in.bits.isMMIO || io.in.bits.decode.ctrl.isNutCoreTrap
difftest_commit.isRVC := io.in.bits.decode.cf.instr(1,0)=/="b11".U
difftest_commit.rfwen := io.wb.rfWen && io.wb.rfDest =/= 0.U // && valid(ringBufferTail)(i) && commited(ringBufferTail)(i)
difftest_commit.fpwen := false.B
Expand Down
Loading