From fd29e00db03e765ccfcc3d73c59421d8ccac0a12 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Tue, 13 Mar 2012 01:56:10 -0700 Subject: [PATCH] support non-power-of-2 queue sizes need to manually wrap queue pointers. --- rocket/src/main/scala/queues.scala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rocket/src/main/scala/queues.scala b/rocket/src/main/scala/queues.scala index 823a031b..0d92ddfc 100644 --- a/rocket/src/main/scala/queues.scala +++ b/rocket/src/main/scala/queues.scala @@ -24,12 +24,13 @@ class queue[T <: Data](entries: Int, pipe: Boolean = false, flushable: Boolean = { enq_ptr = Reg(resetVal = UFix(0, log2up(entries))) deq_ptr = Reg(resetVal = UFix(0, log2up(entries))) + val pow2 = Bool((entries & (entries-1)) == 0) when (do_deq) { - deq_ptr := deq_ptr + UFix(1) + deq_ptr := Mux(!pow2 && deq_ptr === UFix(entries-1), UFix(0), deq_ptr + UFix(1)) } when (do_enq) { - enq_ptr := enq_ptr + UFix(1) + enq_ptr := Mux(!pow2 && enq_ptr === UFix(entries-1), UFix(0), enq_ptr + UFix(1)) } if (flushable) { when (io.flush) {