clash-protocols
Copyright(C) 2024 QBayLogic B.V.
LicenseBSD2 (see the file LICENSE)
MaintainerQBayLogic B.V. <devops@qbaylogic.com>
Safe HaskellNone
LanguageGHC2021

Protocols.PacketStream.Hedgehog

Description

Provides Hedgehog generators, models and utility functions for testing PacketStream circuits.

Synopsis

Utility functions

chopBy :: Int -> [a] -> [[a]] Source #

Partition a list into groups of given size

chopPacket :: forall (dataWidth :: Natural) meta. (1 <= dataWidth, KnownNat dataWidth) => PacketStreamM2S dataWidth meta -> [PacketStreamM2S 1 meta] Source #

Split a single PacketStream transfer with data width dataWidth to a list of PacketStream transfers with data width 1.

chunkByPacket :: forall (dataWidth :: Nat) meta. [PacketStreamM2S dataWidth meta] -> [[PacketStreamM2S dataWidth meta]] Source #

Partition a list of PacketStream transfers into complete packets.

chunkToPacket :: forall (dataWidth :: Nat) meta. KnownNat dataWidth => [PacketStreamM2S 1 meta] -> PacketStreamM2S dataWidth meta Source #

Merge a list of PacketStream transfers with data width 1 to a single PacketStream transfer with data width dataWidth.

fullPackets :: forall (dataWidth :: Nat) meta. KnownNat dataWidth => [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S dataWidth meta] Source #

Set _last of the last transfer in the list to Just 1

smearAbort :: forall (dataWidth :: Nat) meta. [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S dataWidth meta] Source #

If a packet contains a transfer with _abort set, set the _abort of all following transfers in the same packet.

Models

dropAbortedPackets :: forall (dataWidth :: Nat) meta. [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S dataWidth meta] Source #

Drops packets if one of the transfers in the packet has _abort set.

downConvert :: forall (dataWidth :: Natural) meta. (1 <= dataWidth, KnownNat dataWidth) => [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S 1 meta] Source #

Splits a list of PacketStream transfers with data width 1 into a list of PacketStream transfers with data width dataWidth

upConvert :: forall (dataWidth :: Natural) meta. (1 <= dataWidth, KnownNat dataWidth) => [PacketStreamM2S 1 meta] -> [PacketStreamM2S dataWidth meta] Source #

Merges a list of PacketStream transfers with data width dataWidth into a list of PacketStream transfers with data width 1

depacketizerModel :: forall (dataWidth :: Nat) (headerBytes :: Nat) metaIn header metaOut. (KnownNat dataWidth, KnownNat headerBytes, 1 <= dataWidth, 1 <= headerBytes, NFDataX metaIn, BitPack header, BitSize header ~ (headerBytes * 8)) => (header -> metaIn -> metaOut) -> [PacketStreamM2S dataWidth metaIn] -> [PacketStreamM2S dataWidth metaOut] Source #

Model of the generic depacketizerC.

depacketizeToDfModel :: forall (dataWidth :: Nat) (headerBytes :: Nat) a header metaIn. (KnownNat dataWidth, KnownNat headerBytes, 1 <= dataWidth, 1 <= headerBytes, BitPack header, BitSize header ~ (headerBytes * 8)) => (header -> metaIn -> a) -> [PacketStreamM2S dataWidth metaIn] -> [a] Source #

Model of the generic depacketizeToDfC.

dropTailModel :: forall (dataWidth :: Nat) meta (n :: Natural). (KnownNat dataWidth, 1 <= dataWidth, 1 <= n) => SNat n -> [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S dataWidth meta] Source #

Model of dropTailC.

packetizerModel :: forall (dataWidth :: Nat) (headerBytes :: Nat) metaIn header metaOut. (KnownNat dataWidth, KnownNat headerBytes, 1 <= dataWidth, 1 <= headerBytes, BitPack header, BitSize header ~ (headerBytes * 8)) => (metaIn -> metaOut) -> (metaIn -> header) -> [PacketStreamM2S dataWidth metaIn] -> [PacketStreamM2S dataWidth metaOut] Source #

Model of the generic packetizerC.

packetizeFromDfModel :: forall (dataWidth :: Nat) (headerBytes :: Nat) a header metaOut. (KnownNat dataWidth, KnownNat headerBytes, 1 <= dataWidth, 1 <= headerBytes, BitPack header, BitSize header ~ (headerBytes * 8)) => (a -> metaOut) -> (a -> header) -> [a] -> [PacketStreamM2S dataWidth metaOut] Source #

Model of the generic packetizeFromDfC.

Hedgehog generators

data AbortMode Source #

Abort generation options for packet generation.

Constructors

Abort 

Fields

NoAbort 

data PacketOptions Source #

Various configuration options for packet generation.

Constructors

PacketOptions 

Fields

defPacketOptions :: PacketOptions Source #

Default packet generation options:

  • Allow the generation of a zero-byte packet;
  • Allow the generation of a trailing zero-byte transfer;
  • 50% chance to generate aborted transfers. If aborts are generated, 10% of transfers will be aborted.

genValidPacket Source #

Arguments

:: forall (dataWidth :: Nat) meta. (1 <= dataWidth, KnownNat dataWidth) 
=> PacketOptions

Configuration options for packet generation.

-> Gen meta

Generator for the metadata.

-> Range Int

The amount of transfers with _last = Nothing to generate. This function will always generate an extra transfer with _last = Just i.

-> Gen [PacketStreamM2S dataWidth meta] 

Generate a valid packet, i.e. a packet of which all transfers carry the same _meta and with all bytes in _data that are not enabled set to 0x00.

genPackets Source #

Arguments

:: forall (dataWidth :: Nat) meta. (1 <= dataWidth, KnownNat dataWidth) 
=> Int

Minimum amount of packets to generate.

-> Int

Maximum amount of packets to generate.

-> Gen [PacketStreamM2S dataWidth meta]

Packet generator.

-> Gen [PacketStreamM2S dataWidth meta] 

Generate packets with a user-supplied generator and a linear range.