axi4: Deinterleaver must gather R also for single ID
In order to guarantee that a complete R can be sent without sinking B, the Deinterleaver must do its job even on AXI-Lite.
This commit is contained in:
		| @@ -38,8 +38,8 @@ class AXI4Deinterleaver(maxReadBytes: Int)(implicit p: Parameters) extends LazyM | ||||
|       out.w <> in.w | ||||
|       in.b <> out.b | ||||
|  | ||||
|       if (queues == 1) { | ||||
|         // Gracefully do nothing | ||||
|       if (beats <= 1) { | ||||
|         // Nothing to do if only single-beat R | ||||
|         in.r <> out.r | ||||
|       } else { | ||||
|         // Buffer R response | ||||
| @@ -48,7 +48,7 @@ class AXI4Deinterleaver(maxReadBytes: Int)(implicit p: Parameters) extends LazyM | ||||
|  | ||||
|         // Which ID is being enqueued and dequeued? | ||||
|         val locked = RegInit(Bool(false)) | ||||
|         val deq_id = Reg(UInt(width=log2Ceil(queues))) | ||||
|         val deq_id = Reg(UInt(width=log2Up(queues))) | ||||
|         val enq_id = out.r.bits.id | ||||
|         val deq_OH = UIntToOH(deq_id, queues) | ||||
|         val enq_OH = UIntToOH(enq_id, queues) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user