Skip to content
This repository was archived by the owner on Nov 9, 2020. It is now read-only.

Data Link

Navid Rahimi edited this page Oct 19, 2018 · 3 revisions

What is DecoupledIO?

An I/O Bundle containing valid and ready signals that handshake the transfer of data stored in the 'bits' subfield. The base protocol implied by the directionality is that the consumer uses the flipped interface.


test

Note: ready/valid are enforced via use of concrete subclasses.

DecoupledIO

A concrete subclass of ReadyValidIO signaling that the user expects a "decoupled" interface: 'valid' indicates that the producer has put valid data in 'bits', and 'ready' indicates that the consumer is ready to accept the data this cycle. No requirements are placed on the signaling of ready or valid.

DecoupledIO

Note 1: data transfer is deemed to occur whenever the 'valid' signal is asserted.

Note 2: Internal 'Producer.State' signal is for illustrative purposes only. Internal logic will vary.

IrrevocableIO

A concrete subclass of ReadyValidIO that promises: Not change the value of 'bits' after a cycle where 'valid' is high and 'ready' is low. Additionally, once 'valid' is raised it will never be lowered until after 'ready' has also been raised.

IrrevocableIO

Note 1: data transfer is deemed to occur only when both the 'valid' and 'ready' signals are asserted.

Note 2: Internal 'Producer.State' signal is for illustrative purposes only. Internal logic will vary.

Note 3: Only safe to cast consumed Decoupled bits to Irrevocable. It means IrrevocableIO restrication apply on producer and it doesn't effect the consumer logic.

Source Code: https://github.com/ucb-bar/chisel3/blob/36718cf6040990f2be9ab143adb1d3c519e9d983/src/main/scala/chisel3/util/Decoupled.scala

Clone this wiki locally