提交 667ec483 编写于 作者: W William Wang

Merge remote-tracking branch 'origin/master' into dev-difftest

......@@ -90,8 +90,8 @@ class DispatchQueue(size: Int, enqnum: Int, deqnum: Int, name: String) extends X
XSDebug(num_deq > 0.U, name + ": num_deq = %d, head = (%d -> %d)\n",
num_deq, head, (head + num_deq) % size.U)
XSDebug(num_enq > 0.U, name + "] num_enq = %d, tail = (%d -> %d)\n",
XSDebug(num_enq > 0.U, name + ": num_enq = %d, tail = (%d -> %d)\n",
num_enq, tail, (tail + num_enq) % size.U)
XSDebug(valid_entries > 0.U, name + "] valid_entries = %d, head = (%d, %d), tail = (%d, %d), \n",
XSDebug(valid_entries > 0.U, name + ": valid_entries = %d, head = (%d, %d), tail = (%d, %d), \n",
valid_entries, head_direction, head, tail_direction, tail)
}
\ No newline at end of file
}
......@@ -4,6 +4,7 @@ import chisel3._
import chisel3.util._
import xiangshan._
import xiangshan.FuType._
import xiangshan.utils.XSInfo
case class ExuConfig
(
......@@ -127,4 +128,10 @@ class WriteBackArbMtoN(m: Int, n: Int) extends XSModule {
io.out(i).bits := io.in(i).bits
io.in(i).ready := true.B
}
for (i <- 0 until n) {
XSInfo(io.out(i).valid, "out(%d) pc(0x%x) writebacks 0x%x to pdest(%d) ldest(%d)\n", i.U, io.out(i).bits.uop.cf.pc,
io.out(i).bits.data, io.out(i).bits.uop.pdest, io.out(i).bits.uop.ctrl.ldest)
}
}
......@@ -65,20 +65,20 @@ class Roq(implicit val p: XSConfig) extends XSModule {
}
// Writeback
val firedWriteback = VecInit((0 until exuConfig.ExuCnt).map(io.exeWbResults(_).fire())).asUInt
XSInfo(PopCount(firedWriteback) > 0.U, "writebacked %d insts\n", PopCount(firedWriteback))
for(i <- 0 until exuConfig.ExuCnt){
when(io.exeWbResults(i).fire()){
writebacked(io.exeWbResults(i).bits.uop.roqIdx) := true.B
exuData(io.exeWbResults(i).bits.uop.roqIdx) := io.exeWbResults(i).bits.data
exuDebug(io.exeWbResults(i).bits.uop.roqIdx) := io.exeWbResults(i).bits.debug
XSInfo(io.exeWbResults(i).valid, "writebacked pc 0x%x wen %d data 0x%x\n",
microOp(io.exeWbResults(i).bits.uop.roqIdx).cf.pc,
microOp(io.exeWbResults(i).bits.uop.roqIdx).ctrl.rfWen,
io.exeWbResults(i).bits.data
)
}
}
val firedWriteback = VecInit((0 until exuConfig.ExuCnt).map(io.exeWbResults(_).fire())).asUInt
when(PopCount(firedWriteback) > 0.U){
XSInfo("writebacked %d insts\n", PopCount(firedWriteback))
}
for(i <- 0 until exuConfig.ExuCnt){
XSInfo(io.exeWbResults(i).fire(), "writebacked pc %x wen %d data %x\n", microOp(io.exeWbResults(i).bits.uop.roqIdx).cf.pc, microOp(io.exeWbResults(i).bits.uop.roqIdx).ctrl.rfWen, io.exeWbResults(i).bits.data)
}
// Commit uop to Rename
for(i <- 0 until CommitWidth){
......@@ -86,7 +86,7 @@ class Roq(implicit val p: XSConfig) extends XSModule {
val canCommit = if(i!=0) io.commits(i-1).valid else true.B
io.commits(i).valid := valid(ringBufferTail+i.U) && writebacked(ringBufferTail+i.U) && canCommit
io.commits(i).bits.uop := microOp(ringBufferTail+i.U)
when(io.commits(ringBufferTail+i.U).valid && microOp(ringBufferTail+i.U).ctrl.rfWen){ archRF(microOp(ringBufferTail+i.U).ctrl.ldest) := exuData(ringBufferTail+i.U) }
when(io.commits(i).valid && microOp(ringBufferTail+i.U).ctrl.rfWen){ archRF(microOp(ringBufferTail+i.U).ctrl.ldest) := exuData(ringBufferTail+i.U) }
when(io.commits(i).valid){valid(ringBufferTail+i.U) := false.B}
}.otherwise{//state === s_walk
io.commits(i).valid := valid(ringBufferWalk+i.U) && writebacked(ringBufferWalk+i.U)
......@@ -113,20 +113,16 @@ class Roq(implicit val p: XSConfig) extends XSModule {
io.scommit := PopCount(validScommit.asUInt)
XSInfo(retireCounter > 0.U, "retired %d insts\n", retireCounter)
XSInfo("")
XSInfo(){
printf("retired pcs are: ")
for(i <- 0 until CommitWidth){
when(io.commits(i).valid){ printf("%d:0x%x ", ringBufferTail+i.U, microOp(ringBufferTail+i.U).cf.pc) }
}
printf("\n")
for(i <- 0 until CommitWidth) {
XSInfo(io.commits(i).valid, "retired pc at commmit(%d) is: %d 0x%x\n",
i.U, ringBufferTail+i.U, microOp(ringBufferTail+i.U).cf.pc)
}
val walkFinished = (0 until CommitWidth).map(i => (ringBufferWalk + i.U) === ringBufferWalkTarget).reduce(_||_)
when(state===s_walk){
when(state===s_walk) {
//exit walk state when all roq entry is commited
when(walkFinished){
when(walkFinished) {
state := s_idle
}
ringBufferWalkExtended := ringBufferWalkExtended + CommitWidth.U
......
......@@ -39,7 +39,6 @@ void difftest_skip_dut() {
void init_difftest(uint64_t *reg) {
void *handle;
handle = dlopen(REF_SO, RTLD_LAZY | RTLD_DEEPBIND);
printf("REF_SO\n");
assert(handle);
ref_difftest_memcpy_from_dut = (void (*)(paddr_t, void *, size_t))dlsym(handle, "difftest_memcpy_from_dut");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册