Skip to content

Commit 4af6db3

Browse files
authored
Add requirements to Queue class (#1176)
FIRRTL barfs on negative and zero-sized memories
1 parent 1450396 commit 4af6db3

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

src/main/scala/chisel3/util/Decoupled.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,8 @@ class Queue[T <: Data](gen: T,
191191
flow: Boolean = false)
192192
(implicit compileOptions: chisel3.CompileOptions)
193193
extends Module() {
194-
194+
require(entries > -1, "Queue must have non-negative number of entries")
195+
require(entries != 0, "Use companion object Queue.apply for zero entries")
195196
val genType = if (compileOptions.declaredTypeMustBeUnbound) {
196197
requireIsChiselType(gen)
197198
gen
@@ -283,7 +284,6 @@ object Queue
283284
enq.ready := deq.ready
284285
deq
285286
} else {
286-
require(entries > 0)
287287
val q = Module(new Queue(chiselTypeOf(enq.bits), entries, pipe, flow))
288288
q.io.enq.valid := enq.valid // not using <> so that override is allowed
289289
q.io.enq.bits := enq.bits
@@ -302,9 +302,9 @@ object Queue
302302
enq: ReadyValidIO[T],
303303
entries: Int = 2,
304304
pipe: Boolean = false,
305-
flow: Boolean = false): IrrevocableIO[T] = {
306-
require(entries > 0) // Zero-entry queues don't guarantee Irrevocability
305+
flow: Boolean = false): IrrevocableIO[T] = {
307306
val deq = apply(enq, entries, pipe, flow)
307+
require(entries > 0, "Zero-entry queues don't guarantee Irrevocability")
308308
val irr = Wire(new IrrevocableIO(deq.bits))
309309
irr.bits := deq.bits
310310
irr.valid := deq.valid

0 commit comments

Comments
 (0)