From: Wesley W. Terpstra Date: Sat, 3 Dec 2016 01:48:17 +0000 (-0800) Subject: RegMapFIFO: amoor.w can do thread-safe TX X-Git-Url: https://git.libre-soc.org/?p=sifive-blocks.git;a=commitdiff_plain;h=ca7555bd4d868c39cd2d92395c985e57dd3a197a RegMapFIFO: amoor.w can do thread-safe TX --- diff --git a/src/main/scala/util/RegMapFIFO.scala b/src/main/scala/util/RegMapFIFO.scala index aaeba59..3e45482 100644 --- a/src/main/scala/util/RegMapFIFO.scala +++ b/src/main/scala/util/RegMapFIFO.scala @@ -8,18 +8,24 @@ import regmapper._ object NonBlockingEnqueue { def apply(enq: DecoupledIO[UInt], regWidth: Int = 32): Seq[RegField] = { val enqWidth = enq.bits.getWidth + val quash = Wire(Bool()) require(enqWidth > 0) require(regWidth > enqWidth) Seq( RegField(enqWidth, RegReadFn(UInt(0)), RegWriteFn((valid, data) => { - enq.valid := valid + enq.valid := valid && !quash enq.bits := data Bool(true) })), RegField(regWidth - enqWidth - 1), - RegField.r(1, !enq.ready)) + RegField(1, + !enq.ready, + RegWriteFn((valid, data) => { + quash := valid && data(0) + Bool(true) + }))) } }