Use NonBlockingEnqueue for terminal writes
This provides feedback to the programm if the last value was already printed to the terminal. If not, new values are ignored (unchanged).
This commit is contained in:
@ -10,7 +10,7 @@ import freechips.rocketchip.regmapper._
|
||||
import freechips.rocketchip.subsystem.{BaseSubsystem}
|
||||
import freechips.rocketchip.tilelink._
|
||||
import freechips.rocketchip.util.AsyncQueue
|
||||
|
||||
import sifive.blocks.util.NonBlockingEnqueue
|
||||
|
||||
case class TerminalParams (
|
||||
address: BigInt
|
||||
@ -69,18 +69,8 @@ trait TerminalRegModule extends MultiIOModule with HasRegMap {
|
||||
term.io.write_data := crossing.io.deq.bits
|
||||
crossing.io.deq.ready := Bool(true) // terminal can read at every cycle
|
||||
|
||||
val writer_fn = (valid: Bool, data: UInt) => {
|
||||
crossing.io.enq.valid := valid
|
||||
crossing.io.enq.bits := data
|
||||
Bool(true) // discards values if queue is full (see NonBlockingEnqueue)
|
||||
}
|
||||
|
||||
regmap(
|
||||
0 -> Seq (
|
||||
RegField.w(8, writer_fn, RegFieldDesc(
|
||||
"write", "Write an ASCII character to the terminal."
|
||||
))
|
||||
)
|
||||
0 -> NonBlockingEnqueue(crossing.io.enq)
|
||||
)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user