clash-protocols
Safe HaskellNone
LanguageGHC2021

Protocols.DfConv

Description

This module implements a type class DfConv which serves as a generalization of the Df protocol. Similar protocols can provide an instance for it and subsequently expose all the functionality implemented in this module.

Synopsis

Typeclass and its associated types/fns

class Protocol df => DfConv df Source #

Class for protocols that are "similar" to Df, i.e. they can be converted to and from a pair of Df ports (one going Fwd, one going Bwd), using a Circuit (see toDfCircuit and fromDfCircuit). This is for protocols that carry some "interesting" data, as well as some "uninteresting" data (e.g. address, burst length). The Circuit should abstract away the complexities of each protocol, so that they can be dealt with uniformly using Df. For pipelined protocols, which can carry both in the same cycle, the Circuit should pass along the interesting parts but not the uninteresting parts.

Minimal complete definition

toDfCircuit, fromDfCircuit

Instances

Instances details
NFDataX dat => DfConv (Df dom dat) Source # 
Instance details

Defined in Protocols.DfConv

Associated Types

type Dom (Df dom dat) 
Instance details

Defined in Protocols.DfConv

type Dom (Df dom dat) = dom
type BwdPayload (Df dom dat) 
Instance details

Defined in Protocols.DfConv

type BwdPayload (Df dom dat) = ()
type FwdPayload (Df dom dat) 
Instance details

Defined in Protocols.DfConv

type FwdPayload (Df dom dat) = dat

Methods

toDfCircuit :: Proxy (Df dom dat) -> Circuit (Df (Dom (Df dom dat)) (FwdPayload (Df dom dat)), Reverse (Df (Dom (Df dom dat)) (BwdPayload (Df dom dat)))) (Df dom dat) Source #

fromDfCircuit :: Proxy (Df dom dat) -> Circuit (Df dom dat) (Df (Dom (Df dom dat)) (FwdPayload (Df dom dat)), Reverse (Df (Dom (Df dom dat)) (BwdPayload (Df dom dat)))) Source #

(KnownManagerConfig config, config ~ RemoveNonDfManager config) => DfConv (AvalonMmManager dom config) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

Associated Types

type Dom (AvalonMmManager dom config) 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

type Dom (AvalonMmManager dom config) = dom
type BwdPayload (AvalonMmManager dom config) 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

type BwdPayload (AvalonMmManager dom config) = AvalonReadImpt (MShared config)
type FwdPayload (AvalonMmManager dom config) 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

Methods

toDfCircuit :: Proxy (AvalonMmManager dom config) -> Circuit (Df (Dom (AvalonMmManager dom config)) (FwdPayload (AvalonMmManager dom config)), Reverse (Df (Dom (AvalonMmManager dom config)) (BwdPayload (AvalonMmManager dom config)))) (AvalonMmManager dom config) Source #

fromDfCircuit :: Proxy (AvalonMmManager dom config) -> Circuit (AvalonMmManager dom config) (Df (Dom (AvalonMmManager dom config)) (FwdPayload (AvalonMmManager dom config)), Reverse (Df (Dom (AvalonMmManager dom config)) (BwdPayload (AvalonMmManager dom config)))) Source #

DfConv a => DfConv (Reverse a) Source # 
Instance details

Defined in Protocols.DfConv

Associated Types

type Dom (Reverse a) 
Instance details

Defined in Protocols.DfConv

type Dom (Reverse a) = Dom a
type BwdPayload (Reverse a) 
Instance details

Defined in Protocols.DfConv

type FwdPayload (Reverse a) 
Instance details

Defined in Protocols.DfConv

DfConv (Df dom a, Reverse (Df dom b)) Source # 
Instance details

Defined in Protocols.DfConv

Associated Types

type Dom (Df dom a, Reverse (Df dom b)) 
Instance details

Defined in Protocols.DfConv

type Dom (Df dom a, Reverse (Df dom b)) = dom
type BwdPayload (Df dom a, Reverse (Df dom b)) 
Instance details

Defined in Protocols.DfConv

type BwdPayload (Df dom a, Reverse (Df dom b)) = b
type FwdPayload (Df dom a, Reverse (Df dom b)) 
Instance details

Defined in Protocols.DfConv

type FwdPayload (Df dom a, Reverse (Df dom b)) = a

Methods

toDfCircuit :: Proxy (Df dom a, Reverse (Df dom b)) -> Circuit (Df (Dom (Df dom a, Reverse (Df dom b))) (FwdPayload (Df dom a, Reverse (Df dom b))), Reverse (Df (Dom (Df dom a, Reverse (Df dom b))) (BwdPayload (Df dom a, Reverse (Df dom b))))) (Df dom a, Reverse (Df dom b)) Source #

fromDfCircuit :: Proxy (Df dom a, Reverse (Df dom b)) -> Circuit (Df dom a, Reverse (Df dom b)) (Df (Dom (Df dom a, Reverse (Df dom b))) (FwdPayload (Df dom a, Reverse (Df dom b))), Reverse (Df (Dom (Df dom a, Reverse (Df dom b))) (BwdPayload (Df dom a, Reverse (Df dom b))))) Source #

(KnownAxi4ReadAddressConfig confAR, KnownAxi4ReadDataConfig confR, NFDataX userR, NFDataX dat, ARIdWidth confAR ~ RIdWidth confR) => DfConv (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) Source # 
Instance details

Defined in Protocols.Experimental.DfConv

Associated Types

type Dom (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) 
Instance details

Defined in Protocols.Experimental.DfConv

type Dom (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) = dom
type BwdPayload (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) 
Instance details

Defined in Protocols.Experimental.DfConv

type BwdPayload (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) = (dat, userR, ResponseType (RKeepResponse confR))
type FwdPayload (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) 
Instance details

Defined in Protocols.Experimental.DfConv

type FwdPayload (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) = Axi4ReadAddressInfo confAR dataAR

Methods

toDfCircuit :: Proxy (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) -> Circuit (Df (Dom (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat))) (FwdPayload (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat))), Reverse (Df (Dom (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat))) (BwdPayload (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat))))) (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) Source #

fromDfCircuit :: Proxy (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) -> Circuit (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) (Df (Dom (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat))) (FwdPayload (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat))), Reverse (Df (Dom (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat))) (BwdPayload (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat))))) Source #

(KnownSubordinateConfig config, config ~ RemoveNonDfSubordinate config) => DfConv (AvalonMmSubordinate dom 0 config) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

Associated Types

type Dom (AvalonMmSubordinate dom 0 config) 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

type Dom (AvalonMmSubordinate dom 0 config) = dom
type BwdPayload (AvalonMmSubordinate dom 0 config) 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

type BwdPayload (AvalonMmSubordinate dom 0 config) = AvalonReadImpt (SShared config)
type FwdPayload (AvalonMmSubordinate dom 0 config) 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

type FwdPayload (AvalonMmSubordinate dom 0 config) = Either (AvalonReadReqImpt (KeepAddr config) (SShared config)) (AvalonWriteImpt (KeepAddr config) (SShared config))

Methods

toDfCircuit :: Proxy (AvalonMmSubordinate dom 0 config) -> Circuit (Df (Dom (AvalonMmSubordinate dom 0 config)) (FwdPayload (AvalonMmSubordinate dom 0 config)), Reverse (Df (Dom (AvalonMmSubordinate dom 0 config)) (BwdPayload (AvalonMmSubordinate dom 0 config)))) (AvalonMmSubordinate dom 0 config) Source #

fromDfCircuit :: Proxy (AvalonMmSubordinate dom 0 config) -> Circuit (AvalonMmSubordinate dom 0 config) (Df (Dom (AvalonMmSubordinate dom 0 config)) (FwdPayload (AvalonMmSubordinate dom 0 config)), Reverse (Df (Dom (AvalonMmSubordinate dom 0 config)) (BwdPayload (AvalonMmSubordinate dom 0 config)))) Source #

(KnownAvalonStreamConfig conf, NFDataX dataType) => DfConv (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Associated Types

type Dom (AvalonStream dom conf dataType) 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type Dom (AvalonStream dom conf dataType) = dom
type BwdPayload (AvalonStream dom conf dataType) 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type BwdPayload (AvalonStream dom conf dataType) = ()
type FwdPayload (AvalonStream dom conf dataType) 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type FwdPayload (AvalonStream dom conf dataType) = AvalonStreamM2S conf dataType

Methods

toDfCircuit :: Proxy (AvalonStream dom conf dataType) -> Circuit (Df (Dom (AvalonStream dom conf dataType)) (FwdPayload (AvalonStream dom conf dataType)), Reverse (Df (Dom (AvalonStream dom conf dataType)) (BwdPayload (AvalonStream dom conf dataType)))) (AvalonStream dom conf dataType) Source #

fromDfCircuit :: Proxy (AvalonStream dom conf dataType) -> Circuit (AvalonStream dom conf dataType) (Df (Dom (AvalonStream dom conf dataType)) (FwdPayload (AvalonStream dom conf dataType)), Reverse (Df (Dom (AvalonStream dom conf dataType)) (BwdPayload (AvalonStream dom conf dataType)))) Source #

(KnownAxi4StreamConfig conf, NFDataX userType) => DfConv (Axi4Stream dom conf userType) Source # 
Instance details

Defined in Protocols.Experimental.Axi4.Stream

Associated Types

type Dom (Axi4Stream dom conf userType) 
Instance details

Defined in Protocols.Experimental.Axi4.Stream

type Dom (Axi4Stream dom conf userType) = dom
type BwdPayload (Axi4Stream dom conf userType) 
Instance details

Defined in Protocols.Experimental.Axi4.Stream

type BwdPayload (Axi4Stream dom conf userType) = ()
type FwdPayload (Axi4Stream dom conf userType) 
Instance details

Defined in Protocols.Experimental.Axi4.Stream

type FwdPayload (Axi4Stream dom conf userType) = Axi4StreamM2S conf userType

Methods

toDfCircuit :: Proxy (Axi4Stream dom conf userType) -> Circuit (Df (Dom (Axi4Stream dom conf userType)) (FwdPayload (Axi4Stream dom conf userType)), Reverse (Df (Dom (Axi4Stream dom conf userType)) (BwdPayload (Axi4Stream dom conf userType)))) (Axi4Stream dom conf userType) Source #

fromDfCircuit :: Proxy (Axi4Stream dom conf userType) -> Circuit (Axi4Stream dom conf userType) (Df (Dom (Axi4Stream dom conf userType)) (FwdPayload (Axi4Stream dom conf userType)), Reverse (Df (Dom (Axi4Stream dom conf userType)) (BwdPayload (Axi4Stream dom conf userType)))) Source #

DfConv (PacketStream dom dataWidth meta) Source # 
Instance details

Defined in Protocols.PacketStream.Base

Associated Types

type Dom (PacketStream dom dataWidth meta) 
Instance details

Defined in Protocols.PacketStream.Base

type Dom (PacketStream dom dataWidth meta) = dom
type BwdPayload (PacketStream dom dataWidth meta) 
Instance details

Defined in Protocols.PacketStream.Base

type BwdPayload (PacketStream dom dataWidth meta) = ()
type FwdPayload (PacketStream dom dataWidth meta) 
Instance details

Defined in Protocols.PacketStream.Base

type FwdPayload (PacketStream dom dataWidth meta) = PacketStreamM2S dataWidth meta

Methods

toDfCircuit :: Proxy (PacketStream dom dataWidth meta) -> Circuit (Df (Dom (PacketStream dom dataWidth meta)) (FwdPayload (PacketStream dom dataWidth meta)), Reverse (Df (Dom (PacketStream dom dataWidth meta)) (BwdPayload (PacketStream dom dataWidth meta)))) (PacketStream dom dataWidth meta) Source #

fromDfCircuit :: Proxy (PacketStream dom dataWidth meta) -> Circuit (PacketStream dom dataWidth meta) (Df (Dom (PacketStream dom dataWidth meta)) (FwdPayload (PacketStream dom dataWidth meta)), Reverse (Df (Dom (PacketStream dom dataWidth meta)) (BwdPayload (PacketStream dom dataWidth meta)))) Source #

(KnownAxi4WriteAddressConfig confAW, KnownAxi4WriteDataConfig confW, KnownAxi4WriteResponseConfig confB, NFDataX userAW, NFDataX userB, AWIdWidth confAW ~ BIdWidth confB) => DfConv (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) Source # 
Instance details

Defined in Protocols.Experimental.DfConv

Associated Types

type Dom (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) 
Instance details

Defined in Protocols.Experimental.DfConv

type Dom (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) = dom
type BwdPayload (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) 
Instance details

Defined in Protocols.Experimental.DfConv

type BwdPayload (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) = (ResponseType (BKeepResponse confB), userB)
type FwdPayload (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) 
Instance details

Defined in Protocols.Experimental.DfConv

type FwdPayload (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) = (Axi4WriteAddressInfo confAW userAW, BurstLengthType (AWKeepBurstLength confAW), BurstType (AWKeepBurst confAW), StrictStrobeType (WNBytes confW) (WKeepStrobe confW), userW)

Methods

toDfCircuit :: Proxy (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) -> Circuit (Df (Dom (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB))) (FwdPayload (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB))), Reverse (Df (Dom (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB))) (BwdPayload (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB))))) (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) Source #

fromDfCircuit :: Proxy (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) -> Circuit (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) (Df (Dom (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB))) (FwdPayload (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB))), Reverse (Df (Dom (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB))) (BwdPayload (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB))))) Source #

type family Dom df :: Domain Source #

Domain that messages are being sent over. In general, it should be true that Fwd df ~ Signal dom [something] and that Bwd df ~ Signal dom [something].

Instances

Instances details
type Dom (Df dom dat) Source # 
Instance details

Defined in Protocols.DfConv

type Dom (Df dom dat) = dom
type Dom (AvalonMmManager dom config) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

type Dom (AvalonMmManager dom config) = dom
type Dom (Reverse a) Source # 
Instance details

Defined in Protocols.DfConv

type Dom (Reverse a) = Dom a
type Dom (Df dom a, Reverse (Df dom b)) Source # 
Instance details

Defined in Protocols.DfConv

type Dom (Df dom a, Reverse (Df dom b)) = dom
type Dom (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) Source # 
Instance details

Defined in Protocols.Experimental.DfConv

type Dom (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) = dom
type Dom (AvalonMmSubordinate dom 0 config) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

type Dom (AvalonMmSubordinate dom 0 config) = dom
type Dom (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type Dom (AvalonStream dom conf dataType) = dom
type Dom (Axi4Stream dom conf userType) Source # 
Instance details

Defined in Protocols.Experimental.Axi4.Stream

type Dom (Axi4Stream dom conf userType) = dom
type Dom (PacketStream dom dataWidth meta) Source # 
Instance details

Defined in Protocols.PacketStream.Base

type Dom (PacketStream dom dataWidth meta) = dom
type Dom (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) Source # 
Instance details

Defined in Protocols.Experimental.DfConv

type Dom (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) = dom

type family BwdPayload df Source #

Information being sent in the Bwd direction, along Reverse (Df (Dom df) (BwdPayload df)). This is the information being carried over the protocol, not the messages being carried over the protocol, so it doesn't include auxiliary information like address or burst length. If no data is sent in this direction, set this to ().

Instances

Instances details
type BwdPayload (Df dom dat) Source # 
Instance details

Defined in Protocols.DfConv

type BwdPayload (Df dom dat) = ()
type BwdPayload (AvalonMmManager dom config) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

type BwdPayload (AvalonMmManager dom config) = AvalonReadImpt (MShared config)
type BwdPayload (Reverse a) Source # 
Instance details

Defined in Protocols.DfConv

type BwdPayload (Df dom a, Reverse (Df dom b)) Source # 
Instance details

Defined in Protocols.DfConv

type BwdPayload (Df dom a, Reverse (Df dom b)) = b
type BwdPayload (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) Source # 
Instance details

Defined in Protocols.Experimental.DfConv

type BwdPayload (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) = (dat, userR, ResponseType (RKeepResponse confR))
type BwdPayload (AvalonMmSubordinate dom 0 config) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

type BwdPayload (AvalonMmSubordinate dom 0 config) = AvalonReadImpt (SShared config)
type BwdPayload (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type BwdPayload (AvalonStream dom conf dataType) = ()
type BwdPayload (Axi4Stream dom conf userType) Source # 
Instance details

Defined in Protocols.Experimental.Axi4.Stream

type BwdPayload (Axi4Stream dom conf userType) = ()
type BwdPayload (PacketStream dom dataWidth meta) Source # 
Instance details

Defined in Protocols.PacketStream.Base

type BwdPayload (PacketStream dom dataWidth meta) = ()
type BwdPayload (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) Source # 
Instance details

Defined in Protocols.Experimental.DfConv

type BwdPayload (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) = (ResponseType (BKeepResponse confB), userB)

type family FwdPayload df Source #

Information being sent in the Fwd direction, along Df (Dom df) (FwdPayload df). This is the information being carried over the protocol, not the messages being carried over the protocol, so it doesn't include auxiliary information like address or burst length. If no data is sent in this direction, set this to ().

Instances

Instances details
type FwdPayload (Df dom dat) Source # 
Instance details

Defined in Protocols.DfConv

type FwdPayload (Df dom dat) = dat
type FwdPayload (AvalonMmManager dom config) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

type FwdPayload (Reverse a) Source # 
Instance details

Defined in Protocols.DfConv

type FwdPayload (Df dom a, Reverse (Df dom b)) Source # 
Instance details

Defined in Protocols.DfConv

type FwdPayload (Df dom a, Reverse (Df dom b)) = a
type FwdPayload (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) Source # 
Instance details

Defined in Protocols.Experimental.DfConv

type FwdPayload (Axi4ReadAddress dom confAR dataAR, Reverse (Axi4ReadData dom confR userR dat)) = Axi4ReadAddressInfo confAR dataAR
type FwdPayload (AvalonMmSubordinate dom 0 config) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.MemMap

type FwdPayload (AvalonMmSubordinate dom 0 config) = Either (AvalonReadReqImpt (KeepAddr config) (SShared config)) (AvalonWriteImpt (KeepAddr config) (SShared config))
type FwdPayload (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type FwdPayload (AvalonStream dom conf dataType) = AvalonStreamM2S conf dataType
type FwdPayload (Axi4Stream dom conf userType) Source # 
Instance details

Defined in Protocols.Experimental.Axi4.Stream

type FwdPayload (Axi4Stream dom conf userType) = Axi4StreamM2S conf userType
type FwdPayload (PacketStream dom dataWidth meta) Source # 
Instance details

Defined in Protocols.PacketStream.Base

type FwdPayload (PacketStream dom dataWidth meta) = PacketStreamM2S dataWidth meta
type FwdPayload (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) Source # 
Instance details

Defined in Protocols.Experimental.DfConv

type FwdPayload (Axi4WriteAddress dom confAW userAW, Axi4WriteData dom confW userW, Reverse (Axi4WriteResponse dom confB userB)) = (Axi4WriteAddressInfo confAW userAW, BurstLengthType (AWKeepBurstLength confAW), BurstType (AWKeepBurst confAW), StrictStrobeType (WNBytes confW) (WKeepStrobe confW), userW)

toDfCircuit :: DfConv df => Proxy df -> Circuit (Df (Dom df) (FwdPayload df), Reverse (Df (Dom df) (BwdPayload df))) df Source #

Circuit which converts Df into this protocol's messages. This should deal with all the complexities of your protocol such as addresses, bursts, pipelining, etc. so that a circuit connected to the Df end doesn't have to worry about all that. There are two Df channels, one for fwd data and one for bwd data, so data can be sent both ways at once. This circuit is expected to follow all of the conventions of Df; for example, data on the fwd channel should stay the same between clock cycles unless acknowledged.

fromDfCircuit :: DfConv df => Proxy df -> Circuit df (Df (Dom df) (FwdPayload df), Reverse (Df (Dom df) (BwdPayload df))) Source #

toDfCircuit, but in reverse: the df port is on the left side instead of the right side.

Helper functions

toDfCircuitHelper :: forall (dom :: Domain) df inpMsg otpMsg state fwdPayload bwdPayload. (HiddenClockResetEnable dom, Protocol df, Bwd df ~ Unbundled dom inpMsg, Fwd df ~ Unbundled dom otpMsg, NFDataX state, Bundle inpMsg, Bundle otpMsg) => Proxy df -> state -> otpMsg -> (inpMsg -> Bool -> Maybe fwdPayload -> State state (otpMsg, Maybe bwdPayload, Bool)) -> Circuit (Df dom fwdPayload, Reverse (Df dom bwdPayload)) df Source #

Helper function to make it easier to implement toDfCircuit in DfConv. tAcks are automatically converted to and from Bools. A default otpMsg value is given for if reset is currently on. The State machine is run every clock cycle. Parameters: initial state, default otpMsg, and State machine function

fromDfCircuitHelper :: forall (dom :: Domain) df inpMsg otpMsg state bwdPayload fwdPayload. (HiddenClockResetEnable dom, Protocol df, Fwd df ~ Unbundled dom inpMsg, Bwd df ~ Unbundled dom otpMsg, NFDataX state, Bundle inpMsg, Bundle otpMsg) => Proxy df -> state -> otpMsg -> (inpMsg -> Bool -> Maybe bwdPayload -> State state (otpMsg, Maybe fwdPayload, Bool)) -> Circuit df (Df dom fwdPayload, Reverse (Df dom bwdPayload)) Source #

Helper function to make it easier to implement fromDfCircuit in DfConv. tAcks are automatically converted to and from Bools. A default otpMsg value is given for if reset is currently on. The State machine is run every clock cycle. Parameters: initial state, default otpMsg, and State machine function

dfToDfConvInp :: (DfConv df, HiddenClockResetEnable (Dom df)) => Proxy df -> Circuit df (Df (Dom df) (FwdPayload df)) Source #

Convert DfConv into a one-way Df port, at the data input end

dfToDfConvOtp :: (DfConv df, HiddenClockResetEnable (Dom df)) => Proxy df -> Circuit (Df (Dom df) (FwdPayload df)) df Source #

Convert DfConv into a one-way Df port, at the data output end

vecToDfConv :: forall df (n :: Nat). (DfConv df, HiddenClockResetEnable (Dom df), KnownNat n) => Proxy df -> Circuit (Vec n (Df (Dom df) (FwdPayload df)), Vec n (Reverse (Df (Dom df) (BwdPayload df)))) (Vec n df) Source #

toDfCircuit, but the DfConv is inside a Vec

vecFromDfConv :: forall df (n :: Nat). (DfConv df, HiddenClockResetEnable (Dom df), KnownNat n) => Proxy df -> Circuit (Vec n df) (Vec n (Df (Dom df) (FwdPayload df)), Vec n (Reverse (Df (Dom df) (BwdPayload df)))) Source #

fromDfCircuit, but the DfConv is inside a Vec

tupToDfConv :: (DfConv dfA, DfConv dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA)) => (Proxy dfA, Proxy dfB) -> Circuit ((Df (Dom dfA) (FwdPayload dfA), Df (Dom dfB) (FwdPayload dfB)), (Reverse (Df (Dom dfA) (BwdPayload dfA)), Reverse (Df (Dom dfB) (BwdPayload dfB)))) (dfA, dfB) Source #

toDfCircuit, but on a pair of DfConvs

tupFromDfConv :: (DfConv dfA, DfConv dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA)) => (Proxy dfA, Proxy dfB) -> Circuit (dfA, dfB) ((Df (Dom dfA) (FwdPayload dfA), Df (Dom dfB) (FwdPayload dfB)), (Reverse (Df (Dom dfA) (BwdPayload dfA)), Reverse (Df (Dom dfB) (BwdPayload dfB)))) Source #

fromDfCircuit, but on a pair of DfConvs

Df functions generalized to Dflike

convert :: (DfConv dfA, DfConv dfB, FwdPayload dfA ~ FwdPayload dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA)) => Proxy dfA -> Proxy dfB -> Circuit dfA dfB Source #

Preserves Df data unmodified. Potentially useful for converting between protocols.

const :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA)) => Proxy dfA -> Proxy dfB -> FwdPayload dfB -> Circuit dfA dfB Source #

Acknowledge but ignore data from LHS protocol. Send a static value b.

void :: (DfConv df, HiddenClockResetEnable (Dom df)) => Proxy df -> Circuit df () Source #

Ignore incoming data

pure :: (DfConv df, HiddenClockResetEnable (Dom df)) => Proxy df -> FwdPayload df -> Circuit () df Source #

Drive a constant value composed of a.

map :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA)) => Proxy dfA -> Proxy dfB -> (FwdPayload dfA -> FwdPayload dfB) -> Circuit dfA dfB Source #

Like map

mapS :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA)) => Proxy dfA -> Proxy dfB -> Signal (Dom dfA) (FwdPayload dfA -> FwdPayload dfB) -> Circuit dfA dfB Source #

Like mapS

bimap :: forall dfA dfB (p :: Type -> Type -> Type) a c b d. (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), Bifunctor p, FwdPayload dfA ~ p a c, FwdPayload dfB ~ p b d) => Proxy dfA -> Proxy dfB -> (a -> b) -> (c -> d) -> Circuit dfA dfB Source #

Like bimap

fst :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ (a, b), FwdPayload dfB ~ a) => Proxy dfA -> Proxy dfB -> Circuit dfA dfB Source #

Like fst

snd :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ (a, b), FwdPayload dfB ~ b) => Proxy dfA -> Proxy dfB -> Circuit dfA dfB Source #

Like fst

mapMaybe :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), NFDataX (FwdPayload dfB)) => Proxy dfA -> Proxy dfB -> (FwdPayload dfA -> Maybe (FwdPayload dfB)) -> Circuit dfA dfB Source #

catMaybes :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ Maybe (FwdPayload dfB)) => Proxy dfA -> Proxy dfB -> Circuit dfA dfB Source #

filter :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfB) => Proxy dfA -> Proxy dfB -> (FwdPayload dfA -> Bool) -> Circuit dfA dfB Source #

Like filter

filterS :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfB) => Proxy dfA -> Proxy dfB -> Signal (Dom dfA) (FwdPayload dfA -> Bool) -> Circuit dfA dfB Source #

Like filterS

either :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ Either a b) => Proxy dfA -> Proxy dfB -> (a -> FwdPayload dfB) -> (b -> FwdPayload dfB) -> Circuit dfA dfB Source #

Like either

first :: forall dfA dfB (p :: Type -> Type -> Type) a c b. (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), Bifunctor p, FwdPayload dfA ~ p a c, FwdPayload dfB ~ p b c) => Proxy dfA -> Proxy dfB -> (a -> b) -> Circuit dfA dfB Source #

Like first

mapLeft :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ Either a c, FwdPayload dfB ~ Either b c) => Proxy dfA -> Proxy dfB -> (a -> b) -> Circuit dfA dfB Source #

Like mapLeft

second :: forall dfA dfB (p :: Type -> Type -> Type) a b c. (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), Bifunctor p, FwdPayload dfA ~ p a b, FwdPayload dfB ~ p a c) => Proxy dfA -> Proxy dfB -> (b -> c) -> Circuit dfA dfB Source #

Like second

mapRight :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ Either a b, FwdPayload dfB ~ Either a c) => Proxy dfA -> Proxy dfB -> (b -> c) -> Circuit dfA dfB Source #

zipWith :: (DfConv dfA, DfConv dfB, DfConv dfC, BwdPayload dfA ~ BwdPayload dfC, BwdPayload dfB ~ BwdPayload dfC, Dom dfA ~ Dom dfB, Dom dfA ~ Dom dfC, HiddenClockResetEnable (Dom dfA)) => (Proxy dfA, Proxy dfB) -> Proxy dfC -> (FwdPayload dfA -> FwdPayload dfB -> FwdPayload dfC) -> Circuit (dfA, dfB) dfC Source #

Like zipWith. Any data not in Payload is copied from stream A.

zip :: (DfConv dfA, DfConv dfB, DfConv dfC, BwdPayload dfA ~ BwdPayload dfC, BwdPayload dfB ~ BwdPayload dfC, Dom dfA ~ Dom dfB, Dom dfA ~ Dom dfC, HiddenClockResetEnable (Dom dfA), FwdPayload dfC ~ (FwdPayload dfA, FwdPayload dfB)) => (Proxy dfA, Proxy dfB) -> Proxy dfC -> Circuit (dfA, dfB) dfC Source #

Like zip

partition :: (DfConv dfA, DfConv dfB, DfConv dfC, BwdPayload dfA ~ BwdPayload dfB, BwdPayload dfA ~ BwdPayload dfC, Dom dfA ~ Dom dfB, Dom dfA ~ Dom dfC, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfB, FwdPayload dfA ~ FwdPayload dfC) => Proxy dfA -> (Proxy dfB, Proxy dfC) -> (FwdPayload dfA -> Bool) -> Circuit dfA (dfB, dfC) Source #

route :: forall dfA dfB (n :: Nat). (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ (Index n, FwdPayload dfB), KnownNat n, 1 <= n) => Proxy dfA -> Proxy dfB -> Circuit dfA (Vec n dfB) Source #

Route a DfConv stream to another corresponding to the index

select :: forall dfA dfB dfC (n :: Nat). (DfConv dfA, DfConv dfB, DfConv dfC, BwdPayload dfA ~ BwdPayload dfC, BwdPayload dfB ~ BwdPayload dfC, Dom dfA ~ Dom dfB, Dom dfA ~ Dom dfC, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfC, FwdPayload dfB ~ Index n, KnownNat n) => (Proxy dfA, Proxy dfB) -> Proxy dfC -> Circuit (Vec n dfA, dfB) dfC Source #

Select data from the channel indicated by the DfConv stream carrying Index n.

selectN :: forall dfA dfB dfC (n :: Nat) (selectN :: Nat). (DfConv dfA, DfConv dfB, DfConv dfC, BwdPayload dfA ~ BwdPayload dfC, BwdPayload dfB ~ BwdPayload dfC, Dom dfA ~ Dom dfB, Dom dfA ~ Dom dfC, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfC, FwdPayload dfB ~ (Index n, Index selectN), KnownNat n, KnownNat selectN) => (Proxy dfA, Proxy dfB) -> Proxy dfC -> Circuit (Vec n dfA, dfB) dfC Source #

Select selectN samples from channel n.

selectUntil :: forall dfA dfB dfC (n :: Nat). (DfConv dfA, DfConv dfB, DfConv dfC, BwdPayload dfA ~ BwdPayload dfC, BwdPayload dfB ~ BwdPayload dfC, Dom dfA ~ Dom dfB, Dom dfA ~ Dom dfC, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfC, FwdPayload dfB ~ Index n, KnownNat n) => (Proxy dfA, Proxy dfB) -> Proxy dfC -> (FwdPayload dfA -> Bool) -> Circuit (Vec n dfA, dfB) dfC Source #

Selects samples from channel n until the predicate holds. The cycle in which the predicate turns true is included.

fanin :: forall dfA dfB (numA :: Nat) (decNumA :: Natural). (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfB, NFDataX (FwdPayload dfA), KnownNat numA, numA ~ (decNumA + 1)) => Proxy dfA -> Proxy dfB -> (FwdPayload dfA -> FwdPayload dfA -> FwdPayload dfA) -> Circuit (Vec numA dfA) dfB Source #

Merge data of multiple streams using a user supplied function

mfanin :: forall dfA dfB (numA :: Nat) (decNumA :: Natural). (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfB, NFDataX (FwdPayload dfA), Monoid (FwdPayload dfA), KnownNat numA, numA ~ (decNumA + 1)) => Proxy dfA -> Proxy dfB -> Circuit (Vec numA dfA) dfB Source #

Merge data of multiple streams using Monoid's <>.

fanout :: forall dfA dfB (numB :: Nat). (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfB, NFDataX (FwdPayload dfA), KnownNat numB, 1 <= numB) => Proxy dfA -> Proxy dfB -> Circuit dfA (Vec numB dfB) Source #

Copy data of a single DfConv stream to multiple. LHS will only receive an acknowledgement when all RHS receivers have acknowledged data.

bundleVec :: forall dfA dfB (n :: Nat) (decN :: Natural). (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), Vec n (FwdPayload dfA) ~ FwdPayload dfB, KnownNat n, n ~ (decN + 1)) => Proxy dfA -> Proxy dfB -> Circuit (Vec n dfA) dfB Source #

Bundle a vector of DfConv streams into one.

unbundleVec :: forall dfA dfB (n :: Nat). (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ Vec n (FwdPayload dfB), NFDataX (FwdPayload dfB), KnownNat n, 1 <= n) => Proxy dfA -> Proxy dfB -> Circuit dfA (Vec n dfB) Source #

Split up a DfConv stream of a vector into multiple independent DfConv streams.

roundrobin :: forall dfA dfB (n :: Nat) (decN :: Natural). (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfB, KnownNat n, n ~ (decN + 1)) => Proxy dfA -> Proxy dfB -> Circuit dfA (Vec n dfB) Source #

Distribute data across multiple components on the RHS. Useful if you want to parallelize a workload across multiple (slow) workers. For optimal throughput, you should make sure workers can accept data every n cycles.

data CollectMode Source #

Collect modes for dataflow arbiters.

Constructors

NoSkip

Collect in a round-robin fashion. If a source does not produce data, wait until it does. Use with care, as there is a risk of starvation if a selected source is idle for a long time.

Skip

Collect in a round-robin fashion. If a source does not produce data, skip it and check the next source on the next cycle.

Parallel

Check all sources in parallel. Biased towards the first source. If the number of sources is high, this is more expensive than other modes.

roundrobinCollect :: forall dfA dfB (n :: Nat) (decN :: Natural). (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfB, KnownNat n, n ~ (decN + 1)) => Proxy dfA -> Proxy dfB -> CollectMode -> Circuit (Vec n dfA) dfB Source #

Opposite of roundrobin. Useful to collect data from workers that only produce a result with an interval of n cycles.

registerFwd :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfB, NFDataX (FwdPayload dfA)) => Proxy dfA -> Proxy dfB -> Circuit dfA dfB Source #

Place register on forward part of a circuit.

registerBwd :: (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfB, NFDataX (FwdPayload dfA)) => Proxy dfA -> Proxy dfB -> Circuit dfA dfB Source #

Place register on backward part of a circuit. This is implemented using a in-logic two-element shift register.

fifo :: forall dfA dfB (depth :: Nat). (DfConv dfA, DfConv dfB, BwdPayload dfA ~ BwdPayload dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), KnownNat depth, 1 <= depth, FwdPayload dfA ~ FwdPayload dfB, NFDataX (FwdPayload dfA)) => Proxy dfA -> Proxy dfB -> SNat depth -> Circuit dfA dfB Source #

A fifo buffer with user-provided depth. Uses blockram to store data