clash-protocols
Safe HaskellNone
LanguageGHC2021

Protocols.Experimental.DfConv

Description

Experimental DfConv support.

Import this module instead of DfConv when working with experimental protocols that rely on experimental DfConv instances.

Synopsis

Documentation

Simulation functions

drive :: (DfConv dfA, HiddenClockResetEnable (Dom dfA)) => Proxy dfA -> SimulationConfig -> [Maybe (FwdPayload dfA)] -> Circuit () dfA Source #

Emit values given in list. Emits no data while reset is asserted. Not synthesizable.

sample :: (DfConv dfB, HiddenClockResetEnable (Dom dfB)) => Proxy dfB -> SimulationConfig -> Circuit () dfB -> [Maybe (FwdPayload dfB)] Source #

Sample protocol to a list of values. Drops values while reset is asserted. Not synthesizable.

For a generalized version of sample, check out sampleC.

stall Source #

Arguments

:: (DfConv dfA, DfConv dfB, Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA), FwdPayload dfA ~ FwdPayload dfB, HasCallStack) 
=> Proxy dfA 
-> Proxy dfB 
-> SimulationConfig 
-> StallAck

Acknowledgement to send when LHS does not send data. Stall will act transparently when reset is asserted.

-> [Int] 
-> Circuit dfA dfB 

Stall every valid Df packet with a given number of cycles. If there are more valid packets than given numbers, passthrough all valid packets without stalling. Not synthesizable.

For a generalized version of stall, check out stallC.

simulate Source #

Arguments

:: (DfConv dfA, DfConv dfB, Dom dfA ~ Dom dfB, KnownDomain (Dom dfA), HasCallStack) 
=> Proxy dfA 
-> Proxy dfB 
-> SimulationConfig

Simulation configuration. Use def for sensible defaults.

-> (Clock (Dom dfA) -> Reset (Dom dfA) -> Enable (Dom dfA) -> Circuit dfA dfB)

Circuit to simulate.

-> [Maybe (FwdPayload dfA)]

Inputs

-> [Maybe (FwdPayload dfB)]

Outputs

Simulate a single domain protocol. Not synthesizable.

For a generalized version of simulate, check out simulateC.

You may notice that things seem to be "switched around" in this function compared to others (the Circuit has Reverse applied to its right side, rather than its left, and we take the FwdPayload of dfA rather than dfB). This is because we are taking a Circuit as a parameter, rather than returning a Circuit like most other functions do.

dfConvTestBench :: (DfConv dfA, DfConv dfB, NFDataX (BwdPayload dfB), ShowX (BwdPayload dfB), Show (BwdPayload dfB), Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA)) => Proxy dfA -> Proxy dfB -> [Bool] -> [Maybe (BwdPayload dfB)] -> Circuit dfA dfB -> Circuit (Df (Dom dfA) (FwdPayload dfA)) (Df (Dom dfB) (FwdPayload dfB)) Source #

Given behavior along the backward channel, turn an arbitrary DfConv circuit into an easily-testable Df circuit representing the forward channel. Behavior along the backward channel is specified by a [Bool] (a list of acknowledges to provide), and a [Maybe (BwdPayload dfB)] (a list of data values to feed in).

dfConvTestBenchRev :: (DfConv dfA, DfConv dfB, NFDataX (FwdPayload dfA), ShowX (FwdPayload dfA), Show (FwdPayload dfA), Dom dfA ~ Dom dfB, HiddenClockResetEnable (Dom dfA)) => Proxy dfA -> Proxy dfB -> [Maybe (FwdPayload dfA)] -> [Bool] -> Circuit dfA dfB -> Circuit (Df (Dom dfB) (BwdPayload dfB)) (Df (Dom dfA) (BwdPayload dfA)) Source #

Given behavior along the forward channel, turn an arbitrary DfConv circuit into an easily-testable Df circuit representing the backward channel. Behavior along the forward channel is specified by a [Maybe (FwdPayload dfA)] (a list of data values to feed in), and a [Bool] (a list of acknowledges to provide).

Orphan instances

(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

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 #

(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

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 #