clash-protocols
Safe HaskellNone
LanguageGHC2021

Protocols.Experimental.Avalon.Stream

Description

Types and instance declarations for the Avalon Stream protocol.

Synopsis

Documentation

data AvalonStreamConfig Source #

Configuration for the Avalon Stream protocol. Determines the width of some fields in AvalonStreamM2S, and toggles some others. Also sets the ready latency (see specs for more info on this).

type family ChannelWidth (conf :: AvalonStreamConfig) :: Nat where ... Source #

Grab _channelWidth at the type level.

Equations

ChannelWidth ('AvalonStreamConfig a _1 _2 _3 _4 _5) = a 

type family ErrorWidth (conf :: AvalonStreamConfig) :: Nat where ... Source #

Grab _errorWidth at the type level.

Equations

ErrorWidth ('AvalonStreamConfig _1 a _2 _3 _4 _5) = a 

type family KeepStartOfPacket (conf :: AvalonStreamConfig) :: Bool where ... Source #

Grab _keepStartOfPacket at the type level.

Equations

KeepStartOfPacket ('AvalonStreamConfig _1 _2 a _3 _4 _5) = a 

type family KeepEndOfPacket (conf :: AvalonStreamConfig) :: Bool where ... Source #

Grab _keepEndOfPacket at the type level.

Equations

KeepEndOfPacket ('AvalonStreamConfig _1 _2 _3 a _4 _5) = a 

type family EmptyWidth (conf :: AvalonStreamConfig) :: Nat where ... Source #

Grab _emptyWidth at the type level.

Equations

EmptyWidth ('AvalonStreamConfig _1 _2 _3 _4 a _5) = a 

type family ReadyLatency (conf :: AvalonStreamConfig) :: Nat where ... Source #

Grab _readyLatency at the type level.

Equations

ReadyLatency ('AvalonStreamConfig _1 _2 _3 _4 _5 a) = a 

type KnownAvalonStreamConfig (conf :: AvalonStreamConfig) = (KnownNat (ChannelWidth conf), KnownNat (ErrorWidth conf), KeepTypeClass (KeepStartOfPacket conf), KeepTypeClass (KeepEndOfPacket conf), KnownNat (EmptyWidth conf), KnownNat (ReadyLatency conf)) Source #

Shorthand for a "well-behaved" config, so that we don't need to write out a bunch of type constraints later. Holds for every configuration; don't worry about implementing this class.

data AvalonStreamM2S (conf :: AvalonStreamConfig) dataType Source #

Data sent from manager to subordinate. The tvalid field is left out: messages with tvalid = False should be sent as a Nothing.

Instances

Instances details
Bundle (AvalonStreamM2S conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

bundle :: forall (dom :: Domain). Unbundled dom (AvalonStreamM2S conf dataType) -> Signal dom (AvalonStreamM2S conf dataType) #

unbundle :: forall (dom :: Domain). Signal dom (AvalonStreamM2S conf dataType) -> Unbundled dom (AvalonStreamM2S conf dataType) #

(KnownAvalonStreamConfig conf, NFDataX dataType) => NFDataX (AvalonStreamM2S conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

deepErrorX :: String -> AvalonStreamM2S conf dataType #

hasUndefined :: AvalonStreamM2S conf dataType -> Bool #

ensureSpine :: AvalonStreamM2S conf dataType -> AvalonStreamM2S conf dataType #

rnfX :: AvalonStreamM2S conf dataType -> () #

(KnownAvalonStreamConfig conf, ShowX dataType) => ShowX (AvalonStreamM2S conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

showsPrecX :: Int -> AvalonStreamM2S conf dataType -> ShowS #

showX :: AvalonStreamM2S conf dataType -> String #

showListX :: [AvalonStreamM2S conf dataType] -> ShowS #

(KnownAvalonStreamConfig conf, NFData dataType) => NFData (AvalonStreamM2S conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

rnf :: AvalonStreamM2S conf dataType -> () #

Generic (AvalonStreamM2S conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Associated Types

type Rep (AvalonStreamM2S conf dataType) 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type Rep (AvalonStreamM2S conf dataType) = D1 ('MetaData "AvalonStreamM2S" "Protocols.Experimental.Avalon.Stream" "clash-protocols-0.1-inplace" 'False) (C1 ('MetaCons "AvalonStreamM2S" 'PrefixI 'True) ((S1 ('MetaSel ('Just "_data") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dataType) :*: (S1 ('MetaSel ('Just "_channel") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Unsigned (ChannelWidth conf))) :*: S1 ('MetaSel ('Just "_error") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Unsigned (ErrorWidth conf))))) :*: (S1 ('MetaSel ('Just "_startofpacket") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (KeepType (KeepStartOfPacket conf) Bool)) :*: (S1 ('MetaSel ('Just "_endofpacket") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (KeepType (KeepEndOfPacket conf) Bool)) :*: S1 ('MetaSel ('Just "_empty") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Unsigned (EmptyWidth conf)))))))

Methods

from :: AvalonStreamM2S conf dataType -> Rep (AvalonStreamM2S conf dataType) x #

to :: Rep (AvalonStreamM2S conf dataType) x -> AvalonStreamM2S conf dataType #

(KnownAvalonStreamConfig conf, Show dataType) => Show (AvalonStreamM2S conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

showsPrec :: Int -> AvalonStreamM2S conf dataType -> ShowS #

show :: AvalonStreamM2S conf dataType -> String #

showList :: [AvalonStreamM2S conf dataType] -> ShowS #

(KnownAvalonStreamConfig conf, Eq dataType) => Eq (AvalonStreamM2S conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

(==) :: AvalonStreamM2S conf dataType -> AvalonStreamM2S conf dataType -> Bool #

(/=) :: AvalonStreamM2S conf dataType -> AvalonStreamM2S conf dataType -> Bool #

(KnownAvalonStreamConfig conf, Hashable dataType) => Hashable (AvalonStreamM2S conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

hashWithSalt :: Int -> AvalonStreamM2S conf dataType -> Int #

hash :: AvalonStreamM2S conf dataType -> Int #

type Unbundled dom (AvalonStreamM2S conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type Unbundled dom (AvalonStreamM2S conf dataType) = Signal dom (AvalonStreamM2S conf dataType)
type Rep (AvalonStreamM2S conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type Rep (AvalonStreamM2S conf dataType) = D1 ('MetaData "AvalonStreamM2S" "Protocols.Experimental.Avalon.Stream" "clash-protocols-0.1-inplace" 'False) (C1 ('MetaCons "AvalonStreamM2S" 'PrefixI 'True) ((S1 ('MetaSel ('Just "_data") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dataType) :*: (S1 ('MetaSel ('Just "_channel") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Unsigned (ChannelWidth conf))) :*: S1 ('MetaSel ('Just "_error") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Unsigned (ErrorWidth conf))))) :*: (S1 ('MetaSel ('Just "_startofpacket") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (KeepType (KeepStartOfPacket conf) Bool)) :*: (S1 ('MetaSel ('Just "_endofpacket") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (KeepType (KeepEndOfPacket conf) Bool)) :*: S1 ('MetaSel ('Just "_empty") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Unsigned (EmptyWidth conf)))))))

newtype AvalonStreamS2M (readyLatency :: Nat) Source #

Data sent from subordinate to manager. A simple acknowledge message. Manager can only send AvalonStreamM2S when _ready was true readyLatency clock cycles ago.

Constructors

AvalonStreamS2M 

Fields

Instances

Instances details
Bundle (AvalonStreamS2M readyLatency) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

bundle :: forall (dom :: Domain). Unbundled dom (AvalonStreamS2M readyLatency) -> Signal dom (AvalonStreamS2M readyLatency) #

unbundle :: forall (dom :: Domain). Signal dom (AvalonStreamS2M readyLatency) -> Unbundled dom (AvalonStreamS2M readyLatency) #

NFDataX (AvalonStreamS2M readyLatency) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

deepErrorX :: String -> AvalonStreamS2M readyLatency #

hasUndefined :: AvalonStreamS2M readyLatency -> Bool #

ensureSpine :: AvalonStreamS2M readyLatency -> AvalonStreamS2M readyLatency #

rnfX :: AvalonStreamS2M readyLatency -> () #

ShowX (AvalonStreamS2M readyLatency) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

showsPrecX :: Int -> AvalonStreamS2M readyLatency -> ShowS #

showX :: AvalonStreamS2M readyLatency -> String #

showListX :: [AvalonStreamS2M readyLatency] -> ShowS #

NFData (AvalonStreamS2M readyLatency) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

rnf :: AvalonStreamS2M readyLatency -> () #

Generic (AvalonStreamS2M readyLatency) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Associated Types

type Rep (AvalonStreamS2M readyLatency) 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type Rep (AvalonStreamS2M readyLatency) = D1 ('MetaData "AvalonStreamS2M" "Protocols.Experimental.Avalon.Stream" "clash-protocols-0.1-inplace" 'True) (C1 ('MetaCons "AvalonStreamS2M" 'PrefixI 'True) (S1 ('MetaSel ('Just "_ready") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)))

Methods

from :: AvalonStreamS2M readyLatency -> Rep (AvalonStreamS2M readyLatency) x #

to :: Rep (AvalonStreamS2M readyLatency) x -> AvalonStreamS2M readyLatency #

Show (AvalonStreamS2M readyLatency) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

showsPrec :: Int -> AvalonStreamS2M readyLatency -> ShowS #

show :: AvalonStreamS2M readyLatency -> String #

showList :: [AvalonStreamS2M readyLatency] -> ShowS #

Eq (AvalonStreamS2M readyLatency) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

(==) :: AvalonStreamS2M readyLatency -> AvalonStreamS2M readyLatency -> Bool #

(/=) :: AvalonStreamS2M readyLatency -> AvalonStreamS2M readyLatency -> Bool #

type Unbundled dom (AvalonStreamS2M readyLatency) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type Unbundled dom (AvalonStreamS2M readyLatency) = Signal dom (AvalonStreamS2M readyLatency)
type Rep (AvalonStreamS2M readyLatency) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type Rep (AvalonStreamS2M readyLatency) = D1 ('MetaData "AvalonStreamS2M" "Protocols.Experimental.Avalon.Stream" "clash-protocols-0.1-inplace" 'True) (C1 ('MetaCons "AvalonStreamS2M" 'PrefixI 'True) (S1 ('MetaSel ('Just "_ready") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)))

data AvalonStream (dom :: Domain) (conf :: AvalonStreamConfig) dataType Source #

Type for Avalon Stream protocol.

Instances

Instances details
(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 #

(ReadyLatency conf ~ 0, KnownAvalonStreamConfig conf, NFDataX dataType, NFData dataType, ShowX dataType, Show dataType, Eq dataType, KnownDomain dom) => Test (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

expectN :: (HasCallStack, MonadTest m) => Proxy (AvalonStream dom conf dataType) -> ExpectOptions -> SimulateFwdType (AvalonStream dom conf dataType) -> m (ExpectType (AvalonStream dom conf dataType)) Source #

ReadyLatency conf ~ 0 => Backpressure (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

boolsToBwd :: Proxy (AvalonStream dom conf dataType) -> [Bool] -> Bwd (AvalonStream dom conf dataType) Source #

(ReadyLatency conf ~ 0, KnownAvalonStreamConfig conf, NFDataX dataType, KnownDomain dom) => Drivable (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Associated Types

type ExpectType (AvalonStream dom conf dataType) 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type ExpectType (AvalonStream dom conf dataType) = [AvalonStreamM2S conf dataType]

Methods

toSimulateType :: Proxy (AvalonStream dom conf dataType) -> ExpectType (AvalonStream dom conf dataType) -> SimulateFwdType (AvalonStream dom conf dataType) Source #

fromSimulateType :: Proxy (AvalonStream dom conf dataType) -> SimulateFwdType (AvalonStream dom conf dataType) -> ExpectType (AvalonStream dom conf dataType) Source #

driveC :: SimulationConfig -> SimulateFwdType (AvalonStream dom conf dataType) -> Circuit () (AvalonStream dom conf dataType) Source #

sampleC :: SimulationConfig -> Circuit () (AvalonStream dom conf dataType) -> SimulateFwdType (AvalonStream dom conf dataType) Source #

(ReadyLatency conf ~ 0, KnownAvalonStreamConfig conf, NFDataX dataType, KnownDomain dom) => Simulate (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Associated Types

type SimulateFwdType (AvalonStream dom conf dataType) 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type SimulateFwdType (AvalonStream dom conf dataType) = [Maybe (AvalonStreamM2S conf dataType)]
type SimulateBwdType (AvalonStream dom conf dataType) 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type SimulateBwdType (AvalonStream dom conf dataType) = [AvalonStreamS2M 0]
type SimulateChannels (AvalonStream dom conf dataType) 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type SimulateChannels (AvalonStream dom conf dataType) = 1

Methods

simToSigFwd :: Proxy (AvalonStream dom conf dataType) -> SimulateFwdType (AvalonStream dom conf dataType) -> Fwd (AvalonStream dom conf dataType) Source #

simToSigBwd :: Proxy (AvalonStream dom conf dataType) -> SimulateBwdType (AvalonStream dom conf dataType) -> Bwd (AvalonStream dom conf dataType) Source #

sigToSimFwd :: Proxy (AvalonStream dom conf dataType) -> Fwd (AvalonStream dom conf dataType) -> SimulateFwdType (AvalonStream dom conf dataType) Source #

sigToSimBwd :: Proxy (AvalonStream dom conf dataType) -> Bwd (AvalonStream dom conf dataType) -> SimulateBwdType (AvalonStream dom conf dataType) Source #

stallC :: SimulationConfig -> Vec (SimulateChannels (AvalonStream dom conf dataType)) (StallAck, [Int]) -> Circuit (AvalonStream dom conf dataType) (AvalonStream dom conf dataType) Source #

IdleCircuit (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Methods

idleFwd :: Proxy (AvalonStream dom conf dataType) -> Fwd (AvalonStream dom conf dataType) Source #

idleBwd :: Proxy (AvalonStream dom conf dataType) -> Bwd (AvalonStream dom conf dataType) Source #

Protocol (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

Associated Types

type Fwd (AvalonStream dom conf dataType) 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type Fwd (AvalonStream dom conf dataType) = Signal dom (Maybe (AvalonStreamM2S conf dataType))
type Bwd (AvalonStream dom conf dataType) 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type Bwd (AvalonStream dom conf dataType) = Signal dom (AvalonStreamS2M (ReadyLatency conf))
type BwdPayload (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

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

Defined in Protocols.Experimental.Avalon.Stream

type Dom (AvalonStream dom conf dataType) = dom
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 ExpectType (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type ExpectType (AvalonStream dom conf dataType) = [AvalonStreamM2S conf dataType]
type SimulateBwdType (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type SimulateBwdType (AvalonStream dom conf dataType) = [AvalonStreamS2M 0]
type SimulateChannels (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type SimulateChannels (AvalonStream dom conf dataType) = 1
type SimulateFwdType (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type SimulateFwdType (AvalonStream dom conf dataType) = [Maybe (AvalonStreamM2S conf dataType)]
type Bwd (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type Bwd (AvalonStream dom conf dataType) = Signal dom (AvalonStreamS2M (ReadyLatency conf))
type Fwd (AvalonStream dom conf dataType) Source # 
Instance details

Defined in Protocols.Experimental.Avalon.Stream

type Fwd (AvalonStream dom conf dataType) = Signal dom (Maybe (AvalonStreamM2S conf dataType))

forceResetSanity :: forall (dom :: Domain) (conf :: AvalonStreamConfig) dataType. (KnownDomain dom, HiddenReset dom) => Circuit (AvalonStream dom conf dataType) (AvalonStream dom conf dataType) Source #

Force a nack on the backward channel and no data on the forward channel if reset is asserted.

Orphan instances

Hashable (Unsigned n) Source # 
Instance details

Methods

hashWithSalt :: Int -> Unsigned n -> Int #

hash :: Unsigned n -> Int #