-
Notifications
You must be signed in to change notification settings - Fork 28
streams
Yaman Umuroglu edited this page Nov 15, 2015
·
1 revision
The TidbitsStreams package contains numerous components for working with streams of data. Describing computation as streams is quite practical for constructing throughput-oriented accelerators, I recommend taking a look at this presentation by Eylon Caspi if you'd like to read more on streaming abstractions for hardware design.
All components in TidbitsStreams have one or more stream inputs or outputs, represented as Chisel "DecoupledIO" interfaces (ready-valid handshakes; AXI-stream is pretty similar). The core idea here is that the stream "moves forward" only when both valid (upstream ready) and ready (downstream ready) are asserted. More on the decoupled HW design discipline here.
- StreamDownsizer and StreamUpsizer create a narrower or wider output stream from a given input stream.
- DecoupledInputMux and DecoupledOutputMux are basic stream "switches" for creating many-to-one or one-to-many stream connections. The flow/route is controlled by an external signal (like a circuit-switched network).
- StreamInterleaver and StreamDeinterleaver are also switches, but the flow control/route information is embedded in the stream (like a packet-switched network).
- SequenceGenerator generates an arithmethic sequence as a stream of
count
integers starting fromstart
withstep
increment. - StreamDelta outputs the differences between succesive elements of an input integer stream.
- StreamFilter passes elements from an input stream satisfying some filter function to an output stream.
- StreamFork splits/copies an input stream into two output streams, as described by the
forkA
andforkB
functions. StreamJoin does the opposite, merging two incoming input streams into one. - StreamLimiter copies the first
byteCount
bytes of an input stream to an output stream while enabled. - StreamMonitor provides statistics such as total number of transactions, number of downstream and upstream stalls on a stream.
- StreamReducer applies a reduction function (such as summation) on an incoming stream.
- StreamRepeatElem produces a version of the
inElem
stream with each incoming element repeated as many times as specified by theinRepCnt
stream.