Skip to content
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.

DecoupledIO and streams

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.

Components

  • 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 from start with step 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 and forkB 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 the inRepCnt stream.
Clone this wiki locally