The Flow interface is a simple valid/payload protocol which mean the slave can’t halt the bus.
It could be used, for example, to represent data coming from an UART controller, requests to write an on-chip memory, etc.

Signal Type Driver Description Don’t care when
valid Bool Master When high => payload present on the interface -
payload T Master Content of the transaction valid is low


Syntax Description Return Latency
Flow(type : Data) Create a Flow of a given type Flow[T]  
master/slave Flow(type : Data) Create a Flow of a given type
Initialized with corresponding in/out setup
x.m2sPipe() Return a Flow drived by x
through a register stage that cut valid/payload paths
Flow[T] 1
x « y
y » x
Connect y to x   0
x <-< y
y >-> x
Connect y to x through a m2sPipe   1
x.throwWhen(cond : Bool) Return a Flow connected to x
When cond is high, transaction are dropped
Flow[T] 0
x.toReg() Return a register which is loaded with payload when valid is high T