提交 199ec2e4 编写于 作者: A Allen

FakeTLLLC: Don't let ReleaseAck mess up with Grant's resp counter.

上级 865a2c87
......@@ -204,23 +204,29 @@ class FakeTLLLC(params: TLParameters) extends XSModule
}
}
// send acquire response
val resp_fire = in.d.fire() && needs_memory_access
val (resp_cnt, resp_done) = Counter(resp_fire, innerDataBeats)
// only trigger counter when state === s_send_acquire_resp
// s_send_release_resp also use channel D
// do not let it mess up with our own counter
val resp_fire = in.d.fire() && state === s_send_acquire_resp
val resp_data_fire = resp_fire && needs_memory_access
val resp_not_data_fire = resp_fire && !needs_memory_access
val (resp_cnt, resp_done) = Counter(resp_data_fire, innerDataBeats)
val resp_data = Wire(Vec(split, UInt(outerBeatSize.W)))
for (i <- 0 until split) {
resp_data(i) := data_buf((resp_cnt << splitBits) + i.U)
}
// send acquire response
when (state === s_send_acquire_resp) {
in.d.valid := Y
val grantData = TLSlaveUtilities.Grant(params, 0.U, acquire_req.source, acquire_req.size, new_param, resp_data.asUInt, N, N)
val grant = TLSlaveUtilities.Grant(params, 0.U, acquire_req.source, acquire_req.size, new_param, N)
in.d.bits := Mux(needs_memory_access, grantData, grant)
val grantDataDone = in.d.fire() && needs_memory_access && resp_done
val grantDone = in.d.fire() && !needs_memory_access
val grantDataDone = resp_data_fire && resp_done
val grantDone = resp_not_data_fire
when (grantDataDone || grantDone) {
state := s_wait_e
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册