| Copyright | (C) 2013-2016 University of Twente 2017-2019 Myrtle Software Ltd 2017 Google Inc. 2021-2023 QBayLogic B.V. |
|---|---|
| License | BSD2 (see the file LICENSE) |
| Maintainer | QBayLogic B.V. <devops@qbaylogic.com> |
| Safe Haskell | Unsafe |
| Language | Haskell2010 |
| Extensions |
|
Clash.Prelude
Description
Clash is a functional hardware description language that borrows both its syntax and semantics from the functional programming language Haskell. The merits of using a functional language to describe hardware comes from the fact that combinational circuits can be directly modeled as mathematical functions and that functional languages lend themselves very well at describing and (de-)composing mathematical functions.
This package provides:
- Prelude library containing datatypes and functions for circuit design
To use the library:
- Import Clash.Prelude; by default clock and reset lines are implicitly routed for all the components found in Clash.Prelude. You can read more about implicit clock and reset lines in Clash.Signal
- Alternatively, if you want to explicitly route clock and reset ports, for more straightforward multi-clock designs, you can import the Clash.Explicit.Prelude module. Note that you should not import Clash.Prelude and Clash.Explicit.Prelude at the same time as they have overlapping definitions.
For now, Clash.Prelude is also the best starting point for exploring the library. A preliminary version of a tutorial can be found in Clash.Tutorial. Some circuit examples can be found in Clash.Examples.
Synopsis
- mealy :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s) => (s -> i -> (s, o)) -> s -> Signal dom i -> Signal dom o
- mealyS :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s) => (i -> State s o) -> s -> Signal dom i -> Signal dom o
- mealyB :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s, Bundle i, Bundle o) => (s -> i -> (s, o)) -> s -> Unbundled dom i -> Unbundled dom o
- mealySB :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s, Bundle i, Bundle o) => (i -> State s o) -> s -> Unbundled dom i -> Unbundled dom o
- (<^>) :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s, Bundle i, Bundle o) => (s -> i -> (s, o)) -> s -> Unbundled dom i -> Unbundled dom o
- moore :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s) => (s -> i -> s) -> (s -> o) -> s -> Signal dom i -> Signal dom o
- mooreB :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s, Bundle i, Bundle o) => (s -> i -> s) -> (s -> o) -> s -> Unbundled dom i -> Unbundled dom o
- registerB :: forall (dom :: Domain) a. (HiddenClockResetEnable dom, NFDataX a, Bundle a) => a -> Unbundled dom a -> Unbundled dom a
- asyncRom :: forall (n :: Nat) addr a. (KnownNat n, Enum addr, NFDataX a) => Vec n a -> addr -> a
- asyncRomPow2 :: forall (n :: Nat) a. (KnownNat n, NFDataX a) => Vec (2 ^ n) a -> Unsigned n -> a
- rom :: forall (dom :: Domain) (n :: Nat) (m :: Nat) a. (NFDataX a, KnownNat n, KnownNat m, HiddenClock dom, HiddenEnable dom) => Vec n a -> Signal dom (Unsigned m) -> Signal dom a
- romPow2 :: forall (dom :: Domain) (n :: Nat) a. (KnownNat n, NFDataX a, HiddenClock dom, HiddenEnable dom) => Vec (2 ^ n) a -> Signal dom (Unsigned n) -> Signal dom a
- asyncRomBlob :: forall addr (n :: Nat) (m :: Nat). Enum addr => MemBlob n m -> addr -> BitVector m
- asyncRomBlobPow2 :: forall (n :: Nat) (m :: Nat). KnownNat n => MemBlob (2 ^ n) m -> Unsigned n -> BitVector m
- romBlob :: forall (dom :: Domain) addr (m :: Nat) (n :: Nat). (HiddenClock dom, HiddenEnable dom, Enum addr) => MemBlob n m -> Signal dom addr -> Signal dom (BitVector m)
- romBlobPow2 :: forall (dom :: Domain) (m :: Nat) (n :: Nat). (HiddenClock dom, HiddenEnable dom, KnownNat n) => MemBlob (2 ^ n) m -> Signal dom (Unsigned n) -> Signal dom (BitVector m)
- asyncRomFile :: forall (m :: Nat) addr (n :: Nat). (KnownNat m, Enum addr) => SNat n -> FilePath -> addr -> BitVector m
- asyncRomFilePow2 :: forall (n :: Nat) (m :: Nat). (KnownNat m, KnownNat n) => FilePath -> Unsigned n -> BitVector m
- romFile :: forall (m :: Nat) (n :: Nat) (dom :: Domain) addr. (KnownNat m, KnownNat n, HiddenClock dom, HiddenEnable dom, Enum addr) => SNat n -> FilePath -> Signal dom addr -> Signal dom (BitVector m)
- romFilePow2 :: forall (n :: Nat) (m :: Nat) (dom :: Domain). (KnownNat m, KnownNat n, HiddenClock dom, HiddenEnable dom) => FilePath -> Signal dom (Unsigned n) -> Signal dom (BitVector m)
- asyncRam :: forall addr (dom :: Domain) a (n :: Nat). (Enum addr, NFDataX addr, HiddenClock dom, HiddenEnable dom, HasCallStack, NFDataX a) => SNat n -> Signal dom addr -> Signal dom (Maybe (addr, a)) -> Signal dom a
- asyncRamPow2 :: forall (n :: Nat) (dom :: Domain) a. (KnownNat n, HiddenClock dom, HiddenEnable dom, HasCallStack, NFDataX a) => Signal dom (Unsigned n) -> Signal dom (Maybe (Unsigned n, a)) -> Signal dom a
- blockRam :: forall (dom :: Domain) a addr (n :: Nat). (HasCallStack, HiddenClock dom, HiddenEnable dom, NFDataX a, Enum addr, NFDataX addr) => Vec n a -> Signal dom addr -> Signal dom (Maybe (addr, a)) -> Signal dom a
- blockRamPow2 :: forall (dom :: Domain) a (n :: Nat). (HasCallStack, HiddenClock dom, HiddenEnable dom, NFDataX a, KnownNat n) => Vec (2 ^ n) a -> Signal dom (Unsigned n) -> Signal dom (Maybe (Unsigned n, a)) -> Signal dom a
- blockRamU :: forall (n :: Natural) (dom :: Domain) a (r :: Bool) addr. (HasCallStack, HiddenClockResetEnable dom, NFDataX a, Enum addr, NFDataX addr, 1 <= n) => ResetStrategy r -> SNat n -> (Index n -> a) -> Signal dom addr -> Signal dom (Maybe (addr, a)) -> Signal dom a
- blockRam1 :: forall (n :: Natural) (dom :: Domain) a (r :: Bool) addr. (HasCallStack, HiddenClockResetEnable dom, NFDataX a, Enum addr, NFDataX addr, 1 <= n) => ResetStrategy r -> SNat n -> a -> Signal dom addr -> Signal dom (Maybe (addr, a)) -> Signal dom a
- data ResetStrategy (r :: Bool) where
- blockRamBlob :: forall (dom :: Domain) addr (m :: Nat) (n :: Nat). (HiddenClock dom, HiddenEnable dom, Enum addr, NFDataX addr) => MemBlob n m -> Signal dom addr -> Signal dom (Maybe (addr, BitVector m)) -> Signal dom (BitVector m)
- blockRamBlobPow2 :: forall (dom :: Domain) (m :: Nat) (n :: Nat). (HiddenClock dom, HiddenEnable dom, KnownNat n) => MemBlob (2 ^ n) m -> Signal dom (Unsigned n) -> Signal dom (Maybe (Unsigned n, BitVector m)) -> Signal dom (BitVector m)
- data MemBlob (n :: Nat) (m :: Nat)
- createMemBlob :: forall a f. (Foldable f, BitPack a) => String -> Maybe Bit -> f a -> DecsQ
- memBlobTH :: forall a f. (Foldable f, BitPack a) => Maybe Bit -> f a -> ExpQ
- unpackMemBlob :: forall (n :: Nat) (m :: Nat). MemBlob n m -> [BitVector m]
- blockRamFile :: forall (m :: Nat) addr (dom :: Domain) (n :: Nat). (KnownNat m, Enum addr, NFDataX addr, HiddenClock dom, HiddenEnable dom, HasCallStack) => SNat n -> FilePath -> Signal dom addr -> Signal dom (Maybe (addr, BitVector m)) -> Signal dom (BitVector m)
- blockRamFilePow2 :: forall (dom :: Domain) (n :: Nat) (m :: Nat). (KnownNat m, KnownNat n, HiddenClock dom, HiddenEnable dom, HasCallStack) => FilePath -> Signal dom (Unsigned n) -> Signal dom (Maybe (Unsigned n, BitVector m)) -> Signal dom (BitVector m)
- readNew :: forall (dom :: Domain) a addr. (HiddenClockResetEnable dom, NFDataX a, Eq addr) => (Signal dom addr -> Signal dom (Maybe (addr, a)) -> Signal dom a) -> Signal dom addr -> Signal dom (Maybe (addr, a)) -> Signal dom a
- trueDualPortBlockRam :: forall (nAddrs :: Nat) (dom :: Domain) a. (HasCallStack, KnownNat nAddrs, HiddenClock dom, NFDataX a) => Signal dom (RamOp nAddrs a) -> Signal dom (RamOp nAddrs a) -> (Signal dom a, Signal dom a)
- data RamOp (n :: Nat) a
- window :: forall (dom :: Domain) (n :: Nat) a. (HiddenClockResetEnable dom, KnownNat n, Default a, NFDataX a) => Signal dom a -> Vec (n + 1) (Signal dom a)
- windowD :: forall (dom :: Domain) (n :: Nat) a. (HiddenClockResetEnable dom, KnownNat n, Default a, NFDataX a) => Signal dom a -> Vec (n + 1) (Signal dom a)
- isRising :: forall (dom :: Domain) a. (HiddenClockResetEnable dom, NFDataX a, Bounded a, Eq a) => a -> Signal dom a -> Signal dom Bool
- isFalling :: forall (dom :: Domain) a. (HiddenClockResetEnable dom, NFDataX a, Bounded a, Eq a) => a -> Signal dom a -> Signal dom Bool
- riseEvery :: forall (dom :: Domain) (n :: Nat). HiddenClockResetEnable dom => SNat n -> Signal dom Bool
- oscillate :: forall (dom :: Domain) (n :: Nat). HiddenClockResetEnable dom => Bool -> SNat n -> Signal dom Bool
- traceSignal1 :: forall a (dom :: Domain). (BitPack a, NFDataX a, Typeable a) => String -> Signal dom a -> Signal dom a
- traceVecSignal1 :: forall (n :: Nat) a (dom :: Domain). (KnownNat n, BitPack a, NFDataX a, Typeable a) => String -> Signal dom (Vec (n + 1) a) -> Signal dom (Vec (n + 1) a)
- traceSignal :: forall (dom :: Domain) a. (KnownDomain dom, BitPack a, NFDataX a, Typeable a) => String -> Signal dom a -> Signal dom a
- traceVecSignal :: forall (dom :: Domain) a (n :: Nat). (KnownDomain dom, KnownNat n, BitPack a, NFDataX a, Typeable a) => String -> Signal dom (Vec (n + 1) a) -> Signal dom (Vec (n + 1) a)
- dumpVCD :: forall a (dom :: Domain). NFDataX a => (Int, Int) -> Signal dom a -> [String] -> IO (Either String Text)
- fromList :: forall a (dom :: Domain). NFDataX a => [a] -> Signal dom a
- sample :: forall (dom :: Domain) a. (KnownDomain dom, NFDataX a) => (HiddenClockResetEnable dom => Signal dom a) -> [a]
- delay :: forall (dom :: Domain) a. (NFDataX a, HiddenClock dom, HiddenEnable dom) => a -> Signal dom a -> Signal dom a
- (.&&.) :: Applicative f => f Bool -> f Bool -> f Bool
- (.||.) :: Applicative f => f Bool -> f Bool -> f Bool
- data BiSignalDefault
- data Signal (dom :: Domain) a
- data InitBehavior
- (.==.) :: (Eq a, Applicative f) => f a -> f a -> f Bool
- (.>.) :: (Ord a, Applicative f) => f a -> f a -> f Bool
- (.>=.) :: (Ord a, Applicative f) => f a -> f a -> f Bool
- (.<.) :: (Ord a, Applicative f) => f a -> f a -> f Bool
- (.<=.) :: (Ord a, Applicative f) => f a -> f a -> f Bool
- register :: forall (dom :: Domain) a. (HiddenClockResetEnable dom, NFDataX a) => a -> Signal dom a -> Signal dom a
- class Bundle a where
- type HiddenClockResetEnable (dom :: Domain) = (HiddenClock dom, HiddenReset dom, HiddenEnable dom)
- type HiddenClock (dom :: Domain) = (Hidden (HiddenClockName dom) (Clock dom), KnownDomain dom)
- type HiddenReset (dom :: Domain) = (Hidden (HiddenResetName dom) (Reset dom), KnownDomain dom)
- type HiddenEnable (dom :: Domain) = (Hidden (HiddenEnableName dom) (Enable dom), KnownDomain dom)
- type Domain = Symbol
- data Clock (dom :: Domain)
- data Reset (dom :: Domain)
- data Enable (dom :: Domain)
- class (KnownSymbol dom, KnownNat (DomainPeriod dom)) => KnownDomain (dom :: Domain) where
- type KnownConf (dom :: Domain) :: DomainConfiguration
- knownDomain :: SDomainConfiguration dom (KnownConf dom)
- fromEnable :: forall (dom :: Domain). Enable dom -> Signal dom Bool
- andEnable :: forall (dom :: Domain) r. HiddenEnable dom => Signal dom Bool -> (HiddenEnable dom => r) -> r
- mux :: Applicative f => f Bool -> f a -> f a -> f a
- type System = "System"
- clockPeriod :: forall (dom :: Domain) (period :: Nat). (KnownDomain dom, DomainPeriod dom ~ period) => SNat period
- resetSynchronizer :: forall (dom :: Domain). KnownDomain dom => Clock dom -> Reset dom -> Reset dom
- resetGlitchFilter :: forall (dom :: Domain) (glitchlessPeriod :: Natural). (HasCallStack, HasDefinedInitialValues dom, 1 <= glitchlessPeriod) => SNat glitchlessPeriod -> Clock dom -> Reset dom -> Reset dom
- holdReset :: forall (dom :: Domain) (m :: Nat). HiddenClockResetEnable dom => SNat m -> Reset dom
- resetGen :: forall (dom :: Domain). KnownDomain dom => Reset dom
- resetGenN :: forall (dom :: Domain) (n :: Natural). (KnownDomain dom, 1 <= n) => SNat n -> Reset dom
- resetKind :: forall (dom :: Domain) (sync :: ResetKind). (KnownDomain dom, DomainResetKind dom ~ sync) => SResetKind sync
- systemResetGen :: Reset System
- unsafeToReset :: forall (dom :: Domain). KnownDomain dom => Signal dom Bool -> Reset dom
- unsafeFromReset :: forall (dom :: Domain). Reset dom -> Signal dom Bool
- unsafeToActiveHigh :: forall (dom :: Domain). KnownDomain dom => Reset dom -> Signal dom Bool
- unsafeToActiveLow :: forall (dom :: Domain). KnownDomain dom => Reset dom -> Signal dom Bool
- unsafeFromActiveHigh :: forall (dom :: Domain). KnownDomain dom => Signal dom Bool -> Reset dom
- unsafeFromActiveLow :: forall (dom :: Domain). KnownDomain dom => Signal dom Bool -> Reset dom
- unsafeFromHighPolarity :: forall (dom :: Domain). KnownDomain dom => Signal dom Bool -> Reset dom
- unsafeFromLowPolarity :: forall (dom :: Domain). KnownDomain dom => Signal dom Bool -> Reset dom
- unsafeToHighPolarity :: forall (dom :: Domain). KnownDomain dom => Reset dom -> Signal dom Bool
- unsafeToLowPolarity :: forall (dom :: Domain). KnownDomain dom => Reset dom -> Signal dom Bool
- data BiSignalIn (ds :: BiSignalDefault) (dom :: Domain) (n :: Nat)
- data BiSignalOut (ds :: BiSignalDefault) (dom :: Domain) (n :: Nat)
- type KnownConfiguration (dom :: Domain) (conf :: DomainConfiguration) = (KnownDomain dom, KnownConf dom ~ conf)
- data ActiveEdge
- data SActiveEdge (edge :: ActiveEdge) where
- data SInitBehavior (init :: InitBehavior) where
- data ResetKind
- data SResetKind (resetKind :: ResetKind) where
- data ResetPolarity
- data SResetPolarity (polarity :: ResetPolarity) where
- data DomainConfiguration = DomainConfiguration {}
- data SDomainConfiguration (dom :: Domain) (conf :: DomainConfiguration) where
- SDomainConfiguration :: forall (dom :: Domain) (period :: Nat) (edge :: ActiveEdge) (reset :: ResetKind) (init :: InitBehavior) (polarity :: ResetPolarity). {..} -> SDomainConfiguration dom ('DomainConfiguration dom period edge reset init polarity)
- type DomainPeriod (dom :: Domain) = DomainConfigurationPeriod (KnownConf dom)
- type DomainActiveEdge (dom :: Domain) = DomainConfigurationActiveEdge (KnownConf dom)
- type DomainResetKind (dom :: Domain) = DomainConfigurationResetKind (KnownConf dom)
- type DomainInitBehavior (dom :: Domain) = DomainConfigurationInitBehavior (KnownConf dom)
- type DomainResetPolarity (dom :: Domain) = DomainConfigurationResetPolarity (KnownConf dom)
- type HasSynchronousReset (dom :: Domain) = (KnownDomain dom, DomainResetKind dom ~ 'Synchronous)
- type HasAsynchronousReset (dom :: Domain) = (KnownDomain dom, DomainResetKind dom ~ 'Asynchronous)
- type HasDefinedInitialValues (dom :: Domain) = (KnownDomain dom, DomainInitBehavior dom ~ 'Defined)
- type XilinxSystem = "XilinxSystem"
- type IntelSystem = "IntelSystem"
- vSystem :: VDomainConfiguration
- vIntelSystem :: VDomainConfiguration
- vXilinxSystem :: VDomainConfiguration
- data VDomainConfiguration = VDomainConfiguration {}
- vDomain :: forall (dom :: Domain) (conf :: DomainConfiguration). SDomainConfiguration dom conf -> VDomainConfiguration
- createDomain :: VDomainConfiguration -> Q [Dec]
- knownVDomain :: forall (dom :: Domain). KnownDomain dom => VDomainConfiguration
- activeEdge :: forall (dom :: Domain) (edge :: ActiveEdge). (KnownDomain dom, DomainActiveEdge dom ~ edge) => SActiveEdge edge
- initBehavior :: forall (dom :: Domain) (init :: InitBehavior). (KnownDomain dom, DomainInitBehavior dom ~ init) => SInitBehavior init
- resetPolarity :: forall (dom :: Domain) (polarity :: ResetPolarity). (KnownDomain dom, DomainResetPolarity dom ~ polarity) => SResetPolarity polarity
- toEnable :: forall (dom :: Domain). Signal dom Bool -> Enable dom
- enableGen :: forall (dom :: Domain). Enable dom
- data DiffClock (dom :: Domain)
- periodToHz :: (HasCallStack, Fractional a) => Natural -> a
- hzToPeriod :: (HasCallStack, Integral a) => Ratio Natural -> a
- dflipflop :: forall (dom :: Domain) a. (HiddenClock dom, NFDataX a) => Signal dom a -> Signal dom a
- delayMaybe :: forall (dom :: Domain) a. (NFDataX a, HiddenClock dom, HiddenEnable dom) => a -> Signal dom (Maybe a) -> Signal dom a
- delayEn :: forall (dom :: Domain) a. (NFDataX a, HiddenClock dom, HiddenEnable dom) => a -> Signal dom Bool -> Signal dom a -> Signal dom a
- regMaybe :: forall (dom :: Domain) a. (HiddenClockResetEnable dom, NFDataX a) => a -> Signal dom (Maybe a) -> Signal dom a
- regEn :: forall (dom :: Domain) a. (HiddenClockResetEnable dom, NFDataX a) => a -> Signal dom Bool -> Signal dom a -> Signal dom a
- clockGen :: forall (dom :: Domain). KnownDomain dom => Clock dom
- systemClockGen :: Clock System
- data EmptyTuple = EmptyTuple
- data TaggedEmptyTuple (dom :: Domain) = TaggedEmptyTuple
- simulate :: forall (dom :: Domain) a b. (KnownDomain dom, NFDataX a, NFDataX b) => (HiddenClockResetEnable dom => Signal dom a -> Signal dom b) -> [a] -> [b]
- simulateB :: forall (dom :: Domain) a b. (KnownDomain dom, Bundle a, Bundle b, NFDataX a, NFDataX b) => (HiddenClockResetEnable dom => Unbundled dom a -> Unbundled dom b) -> [a] -> [b]
- simulateWithReset :: forall (dom :: Domain) a b (m :: Natural). (KnownDomain dom, NFDataX a, NFDataX b, 1 <= m) => SNat m -> a -> (HiddenClockResetEnable dom => Signal dom a -> Signal dom b) -> [a] -> [b]
- simulateWithResetN :: forall (dom :: Domain) a b (m :: Natural). (KnownDomain dom, NFDataX a, NFDataX b, 1 <= m) => SNat m -> a -> Int -> (HiddenClockResetEnable dom => Signal dom a -> Signal dom b) -> [a] -> [b]
- runUntil :: forall (dom :: Domain) a. (KnownDomain dom, NFDataX a, ShowX a) => (a -> Bool) -> (HiddenClockResetEnable dom => Signal dom a) -> IO ()
- simulate_lazy :: forall (dom :: Domain) a b. KnownDomain dom => (HiddenClockResetEnable dom => Signal dom a -> Signal dom b) -> [a] -> [b]
- simulateB_lazy :: forall (dom :: Domain) a b. (KnownDomain dom, Bundle a, Bundle b) => (HiddenClockResetEnable dom => Unbundled dom a -> Unbundled dom b) -> [a] -> [b]
- signalAutomaton :: forall (dom :: Domain) a b. KnownDomain dom => (HiddenClockResetEnable dom => Signal dom a -> Signal dom b) -> Automaton (->) a b
- sampleN :: forall (dom :: Domain) a. (KnownDomain dom, NFDataX a) => Int -> (HiddenClockResetEnable dom => Signal dom a) -> [a]
- sampleWithReset :: forall (dom :: Domain) a (m :: Natural). (KnownDomain dom, NFDataX a, 1 <= m) => SNat m -> (HiddenClockResetEnable dom => Signal dom a) -> [a]
- sampleWithResetN :: forall (dom :: Domain) a (m :: Natural). (KnownDomain dom, NFDataX a, 1 <= m) => SNat m -> Int -> (HiddenClockResetEnable dom => Signal dom a) -> [a]
- fromListWithReset :: forall (dom :: Domain) a. (HiddenReset dom, NFDataX a) => a -> [a] -> Signal dom a
- sample_lazy :: forall (dom :: Domain) a. KnownDomain dom => (HiddenClockResetEnable dom => Signal dom a) -> [a]
- sampleN_lazy :: forall (dom :: Domain) a. KnownDomain dom => Int -> (HiddenClockResetEnable dom => Signal dom a) -> [a]
- fromList_lazy :: forall a (dom :: Domain). [a] -> Signal dom a
- testFor :: forall (dom :: Domain). KnownDomain dom => Int -> (HiddenClockResetEnable dom => Signal dom Bool) -> Property
- (./=.) :: (Eq a, Applicative f) => f a -> f a -> f Bool
- veryUnsafeToBiSignalIn :: forall (n :: Nat) (ds :: BiSignalDefault) (d :: Domain). (HasCallStack, KnownNat n, Given (SBiSignalDefault ds)) => BiSignalOut ds d n -> BiSignalIn ds d n
- readFromBiSignal :: forall a (ds :: BiSignalDefault) (d :: Domain). (HasCallStack, BitPack a) => BiSignalIn ds d (BitSize a) -> Signal d a
- writeToBiSignal :: forall a (ds :: BiSignalDefault) (d :: Domain). (HasCallStack, BitPack a, NFDataX a) => BiSignalIn ds d (BitSize a) -> Signal d (Maybe a) -> BiSignalOut ds d (BitSize a)
- mergeBiSignalOuts :: forall (n :: Nat) (defaultState :: BiSignalDefault) (dom :: Domain) (m :: Nat). (HasCallStack, KnownNat n) => Vec n (BiSignalOut defaultState dom m) -> BiSignalOut defaultState dom m
- hideClock :: forall (dom :: Domain) r. HiddenClock dom => (Clock dom -> r) -> r
- hideEnable :: forall (dom :: Domain) r. HiddenEnable dom => (Enable dom -> r) -> r
- hideReset :: forall (dom :: Domain) r. HiddenReset dom => (Reset dom -> r) -> r
- hideClockResetEnable :: forall (dom :: Domain) r. HiddenClockResetEnable dom => (KnownDomain dom => Clock dom -> Reset dom -> Enable dom -> r) -> r
- sameDomain :: forall (domA :: Domain) (domB :: Domain). (KnownDomain domA, KnownDomain domB) => Maybe (domA :~: domB)
- exposeClock :: forall (dom :: Domain) r. (HiddenClock dom => r) -> KnownDomain dom => Clock dom -> r
- withClock :: forall (dom :: Domain) r. KnownDomain dom => Clock dom -> (HiddenClock dom => r) -> r
- hasClock :: forall (dom :: Domain). HiddenClock dom => Clock dom
- exposeReset :: forall (dom :: Domain) r. (HiddenReset dom => r) -> KnownDomain dom => Reset dom -> r
- withReset :: forall (dom :: Domain) r. KnownDomain dom => Reset dom -> (HiddenReset dom => r) -> r
- hasReset :: forall (dom :: Domain). HiddenReset dom => Reset dom
- exposeEnable :: forall (dom :: Domain) r. (HiddenEnable dom => r) -> KnownDomain dom => Enable dom -> r
- withEnable :: forall (dom :: Domain) r. KnownDomain dom => Enable dom -> (HiddenEnable dom => r) -> r
- hasEnable :: forall (dom :: Domain). HiddenEnable dom => Enable dom
- exposeClockResetEnable :: forall (dom :: Domain) r. (HiddenClockResetEnable dom => r) -> KnownDomain dom => Clock dom -> Reset dom -> Enable dom -> r
- withClockResetEnable :: forall (dom :: Domain) r. KnownDomain dom => Clock dom -> Reset dom -> Enable dom -> (HiddenClockResetEnable dom => r) -> r
- type SystemClockResetEnable = (Hidden (HiddenClockName System) (Clock System), Hidden (HiddenResetName System) (Reset System), Hidden (HiddenEnableName System) (Enable System))
- simulateN :: forall (dom :: Domain) a b. (KnownDomain dom, NFDataX a, NFDataX b) => Int -> (HiddenClockResetEnable dom => Signal dom a -> Signal dom b) -> [a] -> [b]
- type family KnownConf (dom :: Domain) :: DomainConfiguration
- type family Unbundled (dom :: Domain) a = (res :: Type) | res -> dom a
- module Clash.Signal.Delayed
- module Clash.Sized.BitVector
- module Clash.Sized.Signed
- module Clash.Sized.Unsigned
- module Clash.Sized.Index
- module Clash.Sized.Fixed
- toList :: forall (n :: Nat) a. Vec n a -> [a]
- generate :: forall (n :: Nat) a. SNat n -> (a -> a) -> a -> Vec n a
- (++) :: forall (n :: Nat) a (m :: Nat). Vec n a -> Vec m a -> Vec (n + m) a
- foldr :: forall a b (n :: Nat). (a -> b -> b) -> b -> Vec n a -> b
- map :: forall a b (n :: Nat). (a -> b) -> Vec n a -> Vec n b
- indices :: forall (n :: Nat). KnownNat n => SNat n -> Vec n (Index n)
- unfoldr :: forall (n :: Nat) s a. SNat n -> (s -> (a, s)) -> s -> Vec n a
- transpose :: forall (n :: Nat) (m :: Nat) a. KnownNat n => Vec m (Vec n a) -> Vec n (Vec m a)
- concat :: forall (n :: Nat) (m :: Nat) a. Vec n (Vec m a) -> Vec (n * m) a
- zip :: forall (n :: Nat) a b. Vec n a -> Vec n b -> Vec n (a, b)
- head :: forall (n :: Natural) a. Vec (n + 1) a -> a
- tail :: forall (n :: Natural) a. Vec (n + 1) a -> Vec n a
- last :: forall (n :: Natural) a. Vec (n + 1) a -> a
- init :: forall (n :: Natural) a. Vec (n + 1) a -> Vec n a
- length :: forall (n :: Nat) a. KnownNat n => Vec n a -> Int
- foldl :: forall b a (n :: Nat). (b -> a -> b) -> b -> Vec n a -> b
- foldl1 :: forall a (n :: Natural). (a -> a -> a) -> Vec (n + 1) a -> a
- scanl :: forall b a (n :: Nat). (b -> a -> b) -> b -> Vec n a -> Vec (n + 1) b
- scanl1 :: forall (n :: Nat) a. KnownNat n => (a -> a -> a) -> Vec (n + 1) a -> Vec (n + 1) a
- foldr1 :: forall a (n :: Natural). (a -> a -> a) -> Vec (n + 1) a -> a
- scanr :: forall a b (n :: Nat). (a -> b -> b) -> b -> Vec n a -> Vec (n + 1) b
- scanr1 :: forall (n :: Nat) a. KnownNat n => (a -> a -> a) -> Vec (n + 1) a -> Vec (n + 1) a
- maximum :: forall a (n :: Natural). Ord a => Vec (n + 1) a -> a
- minimum :: forall a (n :: Natural). Ord a => Vec (n + 1) a -> a
- iterate :: forall (n :: Nat) a. SNat n -> (a -> a) -> a -> Vec n a
- repeat :: forall (n :: Nat) a. KnownNat n => a -> Vec n a
- replicate :: forall (n :: Nat) a. SNat n -> a -> Vec n a
- take :: forall (m :: Nat) (n :: Natural) a. SNat m -> Vec (m + n) a -> Vec m a
- drop :: forall (m :: Nat) (n :: Natural) a. SNat m -> Vec (m + n) a -> Vec n a
- splitAt :: forall (m :: Nat) (n :: Natural) a. SNat m -> Vec (m + n) a -> (Vec m a, Vec n a)
- reverse :: forall (n :: Nat) a. Vec n a -> Vec n a
- concatMap :: forall a (m :: Nat) b (n :: Nat). (a -> Vec m b) -> Vec n a -> Vec (n * m) b
- (!!) :: forall (n :: Nat) i a. (KnownNat n, Enum i) => Vec n a -> i -> a
- zip3 :: forall (n :: Nat) a b c. Vec n a -> Vec n b -> Vec n c -> Vec n (a, b, c)
- zipWith :: forall a b c (n :: Nat). (a -> b -> c) -> Vec n a -> Vec n b -> Vec n c
- zipWith3 :: forall a b c d (n :: Nat). (a -> b -> c -> d) -> Vec n a -> Vec n b -> Vec n c -> Vec n d
- unzip :: forall (n :: Nat) a b. Vec n (a, b) -> (Vec n a, Vec n b)
- unzip3 :: forall (n :: Nat) a b c. Vec n (a, b, c) -> (Vec n a, Vec n b, Vec n c)
- gather :: forall i (n :: Nat) a (m :: Nat). (Enum i, KnownNat n) => Vec n a -> Vec m i -> Vec m a
- fold :: forall (n :: Natural) a. (a -> a -> a) -> Vec (n + 1) a -> a
- elemIndex :: forall (n :: Nat) a. (KnownNat n, Eq a) => a -> Vec n a -> Maybe (Index n)
- findIndex :: forall (n :: Nat) a. KnownNat n => (a -> Bool) -> Vec n a -> Maybe (Index n)
- zip4 :: forall (n :: Nat) a b c d. Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n (a, b, c, d)
- zip5 :: forall (n :: Nat) a b c d e. Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e -> Vec n (a, b, c, d, e)
- zip6 :: forall (n :: Nat) a b c d e f. Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e -> Vec n f -> Vec n (a, b, c, d, e, f)
- zip7 :: forall (n :: Nat) a b c d e f g. Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e -> Vec n f -> Vec n g -> Vec n (a, b, c, d, e, f, g)
- zipWith4 :: forall a b c d e (n :: Nat). (a -> b -> c -> d -> e) -> Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e
- zipWith5 :: forall a b c d e f (n :: Nat). (a -> b -> c -> d -> e -> f) -> Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e -> Vec n f
- zipWith6 :: forall a b c d e f g (n :: Nat). (a -> b -> c -> d -> e -> f -> g) -> Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e -> Vec n f -> Vec n g
- zipWith7 :: forall a b c d e f g h (n :: Nat). (a -> b -> c -> d -> e -> f -> g -> h) -> Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e -> Vec n f -> Vec n g -> Vec n h
- unzip4 :: forall (n :: Nat) a b c d. Vec n (a, b, c, d) -> (Vec n a, Vec n b, Vec n c, Vec n d)
- unzip5 :: forall (n :: Nat) a b c d e. Vec n (a, b, c, d, e) -> (Vec n a, Vec n b, Vec n c, Vec n d, Vec n e)
- unzip6 :: forall (n :: Nat) a b c d e f. Vec n (a, b, c, d, e, f) -> (Vec n a, Vec n b, Vec n c, Vec n d, Vec n e, Vec n f)
- unzip7 :: forall (n :: Nat) a b c d e f g. Vec n (a, b, c, d, e, f, g) -> (Vec n a, Vec n b, Vec n c, Vec n d, Vec n e, Vec n f, Vec n g)
- singleton :: a -> Vec 1 a
- mapAccumL :: forall acc x y (n :: Nat). (acc -> x -> (acc, y)) -> acc -> Vec n x -> (acc, Vec n y)
- mapAccumR :: forall acc x y (n :: Nat). (acc -> x -> (acc, y)) -> acc -> Vec n x -> (acc, Vec n y)
- merge :: forall (n :: Nat) a. KnownNat n => Vec n a -> Vec n a -> Vec (2 * n) a
- data Vec (a :: Nat) b where
- replace :: forall (n :: Nat) i a. (KnownNat n, Enum i) => i -> a -> Vec n a -> Vec n a
- interleave :: forall (n :: Nat) (d :: Nat) a. (KnownNat n, KnownNat d) => SNat d -> Vec (n * d) a -> Vec (d * n) a
- at :: forall (m :: Nat) (n :: Natural) a. SNat m -> Vec (m + (n + 1)) a -> a
- imap :: forall (n :: Nat) a b. KnownNat n => (Index n -> a -> b) -> Vec n a -> Vec n b
- ifoldl :: forall (n :: Nat) a b. KnownNat n => (a -> Index n -> b -> a) -> a -> Vec n b -> a
- ifoldr :: forall (n :: Nat) a b. KnownNat n => (Index n -> a -> b -> b) -> b -> Vec n a -> b
- select :: forall (i :: Natural) (s :: Natural) (n :: Natural) (f :: Nat) a. CmpNat (i + s) (s * n) ~ 'GT => SNat f -> SNat s -> SNat n -> Vec (f + i) a -> Vec n a
- lazyV :: forall (n :: Nat) a. KnownNat n => Vec n a -> Vec n a
- smap :: forall (k :: Nat) a b. KnownNat k => (forall (l :: Nat). SNat l -> a -> b) -> Vec k a -> Vec k b
- iterateI :: forall (n :: Nat) a. KnownNat n => (a -> a) -> a -> Vec n a
- traverse# :: forall a f b (n :: Nat). Applicative f => (a -> f b) -> Vec n a -> f (Vec n b)
- dtfold :: forall (p :: TyFun Nat Type -> Type) (k :: Nat) a. KnownNat k => Proxy p -> (a -> p @@ 0) -> (forall (l :: Nat). SNat l -> (p @@ l) -> (p @@ l) -> p @@ (l + 1)) -> Vec (2 ^ k) a -> p @@ k
- lengthS :: forall (n :: Nat) a. KnownNat n => Vec n a -> SNat n
- indicesI :: forall (n :: Nat). KnownNat n => Vec n (Index n)
- takeI :: forall (m :: Nat) (n :: Natural) a. KnownNat m => Vec (m + n) a -> Vec m a
- dropI :: forall (m :: Nat) (n :: Natural) a. KnownNat m => Vec (m + n) a -> Vec n a
- selectI :: forall (i :: Natural) (s :: Natural) (n :: Natural) (f :: Nat) a. (CmpNat (i + s) (s * n) ~ 'GT, KnownNat n) => SNat f -> SNat s -> Vec (f + i) a -> Vec n a
- splitAtI :: forall (m :: Nat) (n :: Natural) a. KnownNat m => Vec (m + n) a -> (Vec m a, Vec n a)
- unconcat :: forall (n :: Nat) (m :: Nat) a. KnownNat n => SNat m -> Vec (n * m) a -> Vec n (Vec m a)
- unconcatI :: forall (n :: Nat) (m :: Nat) a. (KnownNat n, KnownNat m) => Vec (n * m) a -> Vec n (Vec m a)
- generateI :: forall (n :: Nat) a. KnownNat n => (a -> a) -> a -> Vec n a
- unfoldrI :: forall (n :: Nat) s a. KnownNat n => (s -> (a, s)) -> s -> Vec n a
- listToVecTH :: Lift a => [a] -> ExpQ
- (+>>) :: forall (n :: Nat) a. KnownNat n => a -> Vec n a -> Vec n a
- (<<+) :: forall (n :: Nat) a. Vec n a -> a -> Vec n a
- shiftInAt0 :: forall (n :: Nat) a (m :: Nat). KnownNat n => Vec n a -> Vec m a -> (Vec n a, Vec m a)
- shiftInAtN :: forall (m :: Nat) (n :: Nat) a. KnownNat m => Vec n a -> Vec m a -> (Vec n a, Vec m a)
- shiftOutFrom0 :: forall a (m :: Nat) (n :: Natural). (Default a, KnownNat m) => SNat m -> Vec (m + n) a -> (Vec (m + n) a, Vec m a)
- shiftOutFromN :: forall a (n :: Nat) (m :: Nat). (Default a, KnownNat n) => SNat m -> Vec (m + n) a -> (Vec (m + n) a, Vec m a)
- permute :: forall i (n :: Nat) (m :: Nat) a (k :: Natural). (Enum i, KnownNat n, KnownNat m) => (a -> a -> a) -> Vec n a -> Vec m i -> Vec (m + k) a -> Vec n a
- backpermute :: forall i (n :: Nat) a (m :: Nat). (Enum i, KnownNat n) => Vec n a -> Vec m i -> Vec m a
- scatter :: forall i (n :: Nat) (m :: Nat) a (k :: Natural). (Enum i, KnownNat n, KnownNat m) => Vec n a -> Vec m i -> Vec (m + k) a -> Vec n a
- rotateLeft :: forall i (n :: Nat) a. (Enum i, KnownNat n) => Vec n a -> i -> Vec n a
- rotateRight :: forall i (n :: Nat) a. (Enum i, KnownNat n) => Vec n a -> i -> Vec n a
- rotateLeftS :: forall (n :: Nat) a (d :: Nat). KnownNat n => Vec n a -> SNat d -> Vec n a
- rotateRightS :: forall (n :: Nat) a (d :: Nat). KnownNat n => Vec n a -> SNat d -> Vec n a
- izipWith :: forall (n :: Nat) a b c. KnownNat n => (Index n -> a -> b -> c) -> Vec n a -> Vec n b -> Vec n c
- dfold :: forall (p :: TyFun Nat Type -> Type) (k :: Nat) a. KnownNat k => Proxy p -> (forall (l :: Nat). SNat l -> a -> (p @@ l) -> p @@ (l + 1)) -> (p @@ 0) -> Vec k a -> p @@ k
- vfold :: forall (k :: Nat) a b. KnownNat k => (forall (l :: Nat). SNat l -> a -> Vec l b -> Vec (l + 1) b) -> Vec k a -> Vec k b
- postscanl :: forall b a (n :: Nat). (b -> a -> b) -> b -> Vec n a -> Vec n b
- postscanr :: forall a b (n :: Nat). (a -> b -> b) -> b -> Vec n a -> Vec n b
- stencil1d :: forall (n :: Nat) (stX :: Natural) a b. KnownNat n => SNat (stX + 1) -> (Vec (stX + 1) a -> b) -> Vec ((stX + n) + 1) a -> Vec (n + 1) b
- stencil2d :: forall (n :: Nat) (m :: Nat) (stY :: Natural) (stX :: Natural) a b. (KnownNat n, KnownNat m) => SNat (stY + 1) -> SNat (stX + 1) -> (Vec (stY + 1) (Vec (stX + 1) a) -> b) -> Vec ((stY + m) + 1) (Vec ((stX + n) + 1) a) -> Vec (m + 1) (Vec (n + 1) b)
- windows1d :: forall (n :: Nat) (stX :: Natural) a. KnownNat n => SNat (stX + 1) -> Vec ((stX + n) + 1) a -> Vec (n + 1) (Vec (stX + 1) a)
- windows2d :: forall (n :: Nat) (m :: Nat) (stY :: Natural) (stX :: Natural) a. (KnownNat n, KnownNat m) => SNat (stY + 1) -> SNat (stX + 1) -> Vec ((stY + m) + 1) (Vec ((stX + n) + 1) a) -> Vec (m + 1) (Vec (n + 1) (Vec (stY + 1) (Vec (stX + 1) a)))
- bv2v :: forall (n :: Nat). KnownNat n => BitVector n -> Vec n Bit
- v2bv :: forall (n :: Nat). KnownNat n => Vec n Bit -> BitVector n
- data VCons a (f :: TyFun Nat Type)
- asNatProxy :: forall (n :: Nat) a. Vec n a -> Proxy n
- seqV :: forall (n :: Nat) a b. KnownNat n => Vec n a -> b -> b
- forceV :: forall (n :: Nat) a. KnownNat n => Vec n a -> Vec n a
- seqVX :: forall (n :: Nat) a b. KnownNat n => Vec n a -> b -> b
- forceVX :: forall (n :: Nat) a. KnownNat n => Vec n a -> Vec n a
- concatBitVector# :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m) => Vec n (BitVector m) -> BitVector (n * m)
- unconcatBitVector# :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m) => BitVector (n * m) -> Vec n (BitVector m)
- module Clash.Sized.RTree
- module Clash.Annotations.TopEntity
- class Generic a
- class Generic1 (f :: k -> Type)
- data Symbol
- data Natural
- type family (a :: Natural) - (b :: Natural) :: Natural where ...
- class KnownNat (n :: Nat) where
- class KnownSymbol (n :: Symbol) where
- symbolSing :: SSymbol n
- class KnownChar (n :: Char) where
- type family TypeError (a :: ErrorMessage) :: b where ...
- type family AppendSymbol (a :: Symbol) (b :: Symbol) :: Symbol where ...
- type family (a :: Natural) + (b :: Natural) :: Natural where ...
- type family (a :: Natural) * (b :: Natural) :: Natural where ...
- type family (a :: Natural) ^ (b :: Natural) :: Natural where ...
- type family CmpSymbol (a :: Symbol) (b :: Symbol) :: Ordering where ...
- type family CmpNat (a :: Natural) (b :: Natural) :: Ordering where ...
- type family CmpChar (a :: Char) (b :: Char) :: Ordering where ...
- type family Div (a :: Natural) (b :: Natural) :: Natural where ...
- type family Mod (a :: Natural) (b :: Natural) :: Natural where ...
- type family Log2 (a :: Natural) :: Natural where ...
- type family ConsSymbol (a :: Char) (b :: Symbol) :: Symbol where ...
- type family UnconsSymbol (a :: Symbol) :: Maybe (Char, Symbol) where ...
- type family CharToNat (a :: Char) :: Natural where ...
- type family NatToChar (a :: Natural) :: Char where ...
- data ErrorMessage
- type (<=) (x :: t) (y :: t) = Assert (x <=? y) (LeErrMsg x y :: Constraint)
- type (<=?) (m :: k) (n :: k) = OrdCond (Compare m n) 'True 'True 'False
- data OrderingI (a :: k) (b :: k) where
- data SomeNat = KnownNat n => SomeNat (Proxy n)
- type Nat = Natural
- natVal :: forall (n :: Nat) proxy. KnownNat n => proxy n -> Integer
- natVal' :: forall (n :: Nat). KnownNat n => Proxy# n -> Integer
- someNatVal :: Integer -> Maybe SomeNat
- sameNat :: forall (a :: Nat) (b :: Nat) proxy1 proxy2. (KnownNat a, KnownNat b) => proxy1 a -> proxy2 b -> Maybe (a :~: b)
- decideNat :: forall (a :: Nat) (b :: Nat) proxy1 proxy2. (KnownNat a, KnownNat b) => proxy1 a -> proxy2 b -> Either ((a :~: b) -> Void) (a :~: b)
- cmpNat :: forall (a :: Nat) (b :: Nat) proxy1 proxy2. (KnownNat a, KnownNat b) => proxy1 a -> proxy2 b -> OrderingI a b
- withKnownNat :: forall (n :: Nat) r. SNat n -> (KnownNat n => r) -> r
- withSomeSNat :: Integer -> (forall (n :: Nat). Maybe (SNat n) -> r) -> r
- data SChar (s :: Char)
- pattern SChar :: () => KnownChar c => SChar c
- data SomeChar = KnownChar n => SomeChar (Proxy n)
- data SomeSymbol = KnownSymbol n => SomeSymbol (Proxy n)
- symbolVal :: forall (n :: Symbol) proxy. KnownSymbol n => proxy n -> String
- symbolVal' :: forall (n :: Symbol). KnownSymbol n => Proxy# n -> String
- charVal :: forall (n :: Char) proxy. KnownChar n => proxy n -> Char
- charVal' :: forall (n :: Char). KnownChar n => Proxy# n -> Char
- someSymbolVal :: String -> SomeSymbol
- someCharVal :: Char -> SomeChar
- sameSymbol :: forall (a :: Symbol) (b :: Symbol) proxy1 proxy2. (KnownSymbol a, KnownSymbol b) => proxy1 a -> proxy2 b -> Maybe (a :~: b)
- decideSymbol :: forall (a :: Symbol) (b :: Symbol) proxy1 proxy2. (KnownSymbol a, KnownSymbol b) => proxy1 a -> proxy2 b -> Either ((a :~: b) -> Void) (a :~: b)
- sameChar :: forall (a :: Char) (b :: Char) proxy1 proxy2. (KnownChar a, KnownChar b) => proxy1 a -> proxy2 b -> Maybe (a :~: b)
- decideChar :: forall (a :: Char) (b :: Char) proxy1 proxy2. (KnownChar a, KnownChar b) => proxy1 a -> proxy2 b -> Either ((a :~: b) -> Void) (a :~: b)
- cmpSymbol :: forall (a :: Symbol) (b :: Symbol) proxy1 proxy2. (KnownSymbol a, KnownSymbol b) => proxy1 a -> proxy2 b -> OrderingI a b
- cmpChar :: forall (a :: Char) (b :: Char) proxy1 proxy2. (KnownChar a, KnownChar b) => proxy1 a -> proxy2 b -> OrderingI a b
- fromSSymbol :: forall (s :: Symbol). SSymbol s -> String
- withKnownSymbol :: forall (s :: Symbol) r. SSymbol s -> (KnownSymbol s => r) -> r
- withSomeSSymbol :: String -> (forall (s :: Symbol). SSymbol s -> r) -> r
- fromSChar :: forall (c :: Char). SChar c -> Char
- withKnownChar :: forall (c :: Char) r. SChar c -> (KnownChar c => r) -> r
- withSomeSChar :: Char -> (forall (c :: Char). SChar c -> r) -> r
- type family Div (a :: Natural) (b :: Natural) :: Natural where ...
- type family Mod (a :: Natural) (b :: Natural) :: Natural where ...
- type family Min (x :: Nat) (y :: Nat) :: Nat where ...
- type family Max (x :: Nat) (y :: Nat) :: Nat where ...
- type family LCM (x :: Nat) (y :: Nat) :: Nat where ...
- type family GCD (x :: Nat) (y :: Nat) :: Nat where ...
- type family Log (base :: Nat) (value :: Nat) :: Nat where ...
- type family CLog (base :: Nat) (value :: Nat) :: Nat where ...
- type family FLog (base :: Nat) (value :: Nat) :: Nat where ...
- type DivMod (n :: Natural) (d :: Natural) = '(Div n d, Mod n d)
- type DivRU (n :: Natural) (d :: Natural) = Div (n + (d - 1)) d
- module Clash.Promoted.Nat
- module Clash.Promoted.Nat.Literals
- module Clash.Promoted.Nat.TH
- module Clash.Promoted.Symbol
- class Lift (t :: TYPE r) where
- class NFDataX a => AutoReg a
- autoReg :: forall (dom :: Domain) a. (HasCallStack, HiddenClockResetEnable dom, AutoReg a) => a -> Signal dom a -> Signal dom a
- deriveAutoReg :: Name -> DecsQ
- module Clash.Class.BitPack
- module Clash.Class.Exp
- module Clash.Class.Num
- module Clash.Class.Parity
- module Clash.Class.Resize
- module Control.Applicative
- module Data.Bits
- class Default a where
- def :: a
- type Type = TYPE LiftedRep
- type Constraint = CONSTRAINT LiftedRep
- module Clash.XException
- module Clash.NamedTypes
- module Clash.Hidden
- module Clash.Magic
- module Clash.HaskellPrelude
Creating synchronous sequential circuits
Arguments
| :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s) | |
| => (s -> i -> (s, o)) | Transfer function in mealy machine form: |
| -> s | Initial state |
| -> Signal dom i | Synchronous sequential function with input and output matching that of the mealy machine |
| -> Signal dom o |
Create a synchronous function from a combinational function describing a mealy machine
macT
:: Int -- Current state
-> (Int,Int) -- Input
-> (Int,Int) -- (Updated state, output)
macT s (x,y) = (s',s)
where
s' = x * y + s
mac :: HiddenClockResetEnable dom => Signal dom (Int, Int) -> Signal dom Int
mac = mealy macT 0
>>>simulate @System mac [(0,0),(1,1),(2,2),(3,3),(4,4)][0,0,1,5,14... ...
Synchronous sequential functions can be composed just like their combinational counterpart:
dualMac :: HiddenClockResetEnable dom => (Signaldom Int,Signaldom Int) -> (Signaldom Int,Signaldom Int) ->Signaldom Int dualMac (a,b) (x,y) = s1 + s2 where s1 =mealymacT 0 (bundle(a,x)) s2 =mealymacT 0 (bundle(b,y))
Arguments
| :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s) | |
| => (i -> State s o) | |
| -> s | Initial state |
| -> Signal dom i | Synchronous sequential function with input and output matching that of the mealy machine |
| -> Signal dom o |
Create a synchronous function from a combinational function describing a mealy machine using the state monad. This can be particularly useful when combined with lenses or optics to replicate imperative algorithms.
data DelayState = DelayState
{ _history :: Vec 4 Int
, _untilValid :: Index 4
}
deriving (Generic, NFDataX)
makeLenses ''DelayState
initialDelayState = DelayState (repeat 0) maxBound
delayS :: Int -> State DelayState (Maybe Int)
delayS n = do
history %= (n +>>)
remaining <- use untilValid
if remaining > 0
then do
untilValid -= 1
return Nothing
else do
out <- uses history last
return (Just out)
delayTop :: HiddenClockResetEnable dom => Signal dom Int -> Signal dom (Maybe Int)
delayTop = mealyS delayS initialDelayState
>>>L.take 7 $ simulate @System delayTop [1,2,3,4,5,6,7,8][Nothing,Nothing,Nothing,Just 1,Just 2,Just 3,Just 4] ...
Arguments
| :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s, Bundle i, Bundle o) | |
| => (s -> i -> (s, o)) | Transfer function in mealy machine form: |
| -> s | Initial state |
| -> Unbundled dom i | Synchronous sequential function with input and output matching that of the mealy machine |
| -> Unbundled dom o |
A version of mealy that does automatic Bundleing
Given a function f of type:
f :: Int -> (Bool, Int) -> (Int, (Int, Bool))
When we want to make compositions of f in g using mealy, we have to
write:
g a b c = (b1,b2,i2)
where
(i1,b1) = unbundle (mealy f 0 (bundle (a,b)))
(i2,b2) = unbundle (mealy f 3 (bundle (c,i1)))
Using mealyB however we can write:
g a b c = (b1,b2,i2)
where
(i1,b1) = mealyB f 0 (a,b)
(i2,b2) = mealyB f 3 (c,i1)
Arguments
| :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s, Bundle i, Bundle o) | |
| => (s -> i -> (s, o)) | Transfer function in mealy machine form: |
| -> s | Initial state |
| -> Unbundled dom i | Synchronous sequential function with input and output matching that of the mealy machine |
| -> Unbundled dom o |
Infix version of mealyB
Arguments
| :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s) | |
| => (s -> i -> s) | Transfer function in moore machine form: |
| -> (s -> o) | Output function in moore machine form: |
| -> s | Initial state |
| -> Signal dom i | Synchronous sequential function with input and output matching that of the moore machine |
| -> Signal dom o |
Create a synchronous function from a combinational function describing a moore machine
macT :: Int -- Current state -> (Int,Int) -- Input -> Int -- Updated state macT s (x,y) = x * y + s mac :: HiddenClockResetEnable dom =>Signaldom (Int, Int) ->Signaldom Int mac =mooremac id 0
>>>simulate @System mac [(0,0),(1,1),(2,2),(3,3),(4,4)][0,0,1,5,14,30,... ...
Synchronous sequential functions can be composed just like their combinational counterpart:
dualMac :: HiddenClockResetEnable dom => (Signaldom Int,Signaldom Int) -> (Signaldom Int,Signaldom Int) ->Signaldom Int dualMac (a,b) (x,y) = s1 + s2 where s1 =mooremacT id 0 (bundle(a,x)) s2 =mooremacT id 0 (bundle(b,y))
Arguments
| :: forall (dom :: Domain) s i o. (HiddenClockResetEnable dom, NFDataX s, Bundle i, Bundle o) | |
| => (s -> i -> s) | Transfer function in moore machine form: |
| -> (s -> o) | Output function in moore machine form: |
| -> s | Initial state |
| -> Unbundled dom i | Synchronous sequential function with input and output matching that of the moore machine |
| -> Unbundled dom o |
A version of moore that does automatic Bundleing
Given a functions t and o of types:
t :: Int -> (Bool, Int) -> Int o :: Int -> (Int, Bool)
When we want to make compositions of t and o in g using moore, we have to
write:
g a b c = (b1,b2,i2)
where
(i1,b1) = unbundle (moore t o 0 (bundle (a,b)))
(i2,b2) = unbundle (moore t o 3 (bundle (c,i1)))
Using mooreB however we can write:
g a b c = (b1,b2,i2)
where
(i1,b1) = mooreB t o 0 (a,b)
(i2,b2) = mooreB t o 3 (c,i1)
registerB :: forall (dom :: Domain) a. (HiddenClockResetEnable dom, NFDataX a, Bundle a) => a -> Unbundled dom a -> Unbundled dom a infixr 3 Source #
Create a register function for product-type like signals (e.g. '(Signal a, Signal b)')
rP :: HiddenClockResetEnable dom => (Signal dom Int, Signal dom Int) -> (Signal dom Int, Signal dom Int) rP = registerB (8,8)
>>>simulateB @System rP [(1,1),(2,2),(3,3)] :: [(Int,Int)][(8,8),(1,1),(2,2),(3,3)... ...
ROMs
Arguments
| :: forall (n :: Nat) addr a. (KnownNat n, Enum addr, NFDataX a) | |
| => Vec n a | ROM content, also determines the size, NB: MUST be a constant |
| -> addr | Read address |
| -> a | The value of the ROM at address |
An asynchronous/combinational ROM with space for n elements
See also:
- See Clash.Sized.Fixed and Clash.Prelude.BlockRam for ideas on how to use ROMs and RAMs.
- A large
Vecfor the content may be too inefficient, depending on how it is constructed. SeeasyncRomFileandasyncRomBlobfor different approaches that scale well.
Arguments
| :: forall (n :: Nat) a. (KnownNat n, NFDataX a) | |
| => Vec (2 ^ n) a | ROM content NB: MUST be a constant |
| -> Unsigned n | Read address |
| -> a | The value of the ROM at address |
An asynchronous/combinational ROM with space for 2^n elements
See also:
- See Clash.Sized.Fixed and Clash.Prelude.BlockRam for ideas on how to use ROMs and RAMs.
- A large
Vecfor the content may be too inefficient, depending on how it is constructed. SeeasyncRomFilePow2andasyncRomBlobPow2for different approaches that scale well.
Arguments
| :: forall (dom :: Domain) (n :: Nat) (m :: Nat) a. (NFDataX a, KnownNat n, KnownNat m, HiddenClock dom, HiddenEnable dom) | |
| => Vec n a | ROM content, also determines the size, NB: MUST be a constant |
| -> Signal dom (Unsigned m) | Read address |
| -> Signal dom a | The value of the ROM at address |
A ROM with a synchronous read port, with space for n elements
- NB: Read value is delayed by 1 cycle
- NB: Initial output value is undefined, reading it will throw an
XException
See also:
- See Clash.Sized.Fixed and Clash.Prelude.BlockRam for ideas on how to use ROMs and RAMs.
- A large
Vecfor the content may be too inefficient, depending on how it is constructed. SeeromFileandromBlobfor different approaches that scale well.
Arguments
| :: forall (dom :: Domain) (n :: Nat) a. (KnownNat n, NFDataX a, HiddenClock dom, HiddenEnable dom) | |
| => Vec (2 ^ n) a | ROM content NB: MUST be a constant |
| -> Signal dom (Unsigned n) | Read address |
| -> Signal dom a | The value of the ROM at address |
A ROM with a synchronous read port, with space for 2^n elements
- NB: Read value is delayed by 1 cycle
- NB: Initial output value is undefined, reading it will throw an
XException
See also:
- See Clash.Sized.Fixed and Clash.Prelude.BlockRam for ideas on how to use ROMs and RAMs.
- A large
Vecfor the content may be too inefficient, depending on how it is constructed. SeeromFilePow2andromBlobPow2for different approaches that scale well.
ROMs defined by a MemBlob
Arguments
| :: forall addr (n :: Nat) (m :: Nat). Enum addr | |
| => MemBlob n m | ROM content, also determines the size, NB: MUST be a constant |
| -> addr | Read address |
| -> BitVector m | The value of the ROM at address |
An asynchronous/combinational ROM with space for n elements
See also:
- See Clash.Sized.Fixed and Clash.Prelude.BlockRam for ideas on how to use ROMs and RAMs.
Arguments
| :: forall (n :: Nat) (m :: Nat). KnownNat n | |
| => MemBlob (2 ^ n) m | ROM content, also determines the size, 2^ NB: MUST be a constant |
| -> Unsigned n | Read address |
| -> BitVector m | The value of the ROM at address |
An asynchronous/combinational ROM with space for 2^n elements
See also:
- See Clash.Sized.Fixed and Clash.Prelude.BlockRam for ideas on how to use ROMs and RAMs.
Arguments
| :: forall (dom :: Domain) addr (m :: Nat) (n :: Nat). (HiddenClock dom, HiddenEnable dom, Enum addr) | |
| => MemBlob n m | ROM content, also determines the size, NB: MUST be a constant |
| -> Signal dom addr | Read address |
| -> Signal dom (BitVector m) | The value of the ROM at address |
A ROM with a synchronous read port, with space for n elements
- NB: Read value is delayed by 1 cycle
- NB: Initial output value is undefined, reading it will throw an
XException
See also:
- See Clash.Sized.Fixed and Clash.Explicit.BlockRam for ideas on how to use ROMs and RAMs.
Arguments
| :: forall (dom :: Domain) (m :: Nat) (n :: Nat). (HiddenClock dom, HiddenEnable dom, KnownNat n) | |
| => MemBlob (2 ^ n) m | ROM content, also determines the size, 2^ NB: MUST be a constant |
| -> Signal dom (Unsigned n) | Read address |
| -> Signal dom (BitVector m) | The value of the ROM at address |
A ROM with a synchronous read port, with space for 2^n elements
- NB: Read value is delayed by 1 cycle
- NB: Initial output value is undefined, reading it will throw an
XException
See also:
- See Clash.Sized.Fixed and Clash.Explicit.BlockRam for ideas on how to use ROMs and RAMs.
ROMs defined by a data file
Arguments
| :: forall (m :: Nat) addr (n :: Nat). (KnownNat m, Enum addr) | |
| => SNat n | Size of the ROM |
| -> FilePath | File describing the content of the ROM |
| -> addr | Read address |
| -> BitVector m | The value of the ROM at address |
An asynchronous/combinational ROM with space for n elements
- NB: This function might not work for specific combinations of code-generation backends and hardware targets. Please check the support table below:
| VHDL | Verilog | SystemVerilog | |
|---|---|---|---|
| Altera/Quartus | Broken | Works | Works |
| Xilinx/ISE | Works | Works | Works |
| ASIC | Untested | Untested | Untested |
See also:
- See Clash.Prelude.ROM.File for more information on how to instantiate a ROM with the contents of a data file.
- See Clash.Sized.Fixed for ideas on how to create your own data files.
When you notice that
asyncRomFileis significantly slowing down your simulation, give it a monomorphic type signature. So instead of leaving the type to be inferred:myRomData = asyncRomFile d512 "memory.bin"
or giving it a polymorphic type signature:
myRomData :: Enum addr => addr -> BitVector 16 myRomData = asyncRomFile d512 "memory.bin"
you should give it a monomorphic type signature:
myRomData :: Unsigned 9 -> BitVector 16 myRomData = asyncRomFile d512 "memory.bin"
Arguments
| :: forall (n :: Nat) (m :: Nat). (KnownNat m, KnownNat n) | |
| => FilePath | File describing the content of the ROM |
| -> Unsigned n | Read address |
| -> BitVector m | The value of the ROM at address |
An asynchronous/combinational ROM with space for 2^n elements
- NB: This function might not work for specific combinations of code-generation backends and hardware targets. Please check the support table below:
| VHDL | Verilog | SystemVerilog | |
|---|---|---|---|
| Altera/Quartus | Broken | Works | Works |
| Xilinx/ISE | Works | Works | Works |
| ASIC | Untested | Untested | Untested |
See also:
- See Clash.Prelude.ROM.File for more information on how to instantiate a ROM with the contents of a data file.
- See Clash.Sized.Fixed for ideas on how to create your own data files.
When you notice that
asyncRomFilePow2is significantly slowing down your simulation, give it a monomorphic type signature. So instead of leaving the type to be inferred:myRomData = asyncRomFilePow2 "memory.bin"
you should give it a monomorphic type signature:
myRomData :: Unsigned 9 -> BitVector 16 myRomData = asyncRomFilePow2 "memory.bin"
Arguments
| :: forall (m :: Nat) (n :: Nat) (dom :: Domain) addr. (KnownNat m, KnownNat n, HiddenClock dom, HiddenEnable dom, Enum addr) | |
| => SNat n | Size of the ROM |
| -> FilePath | File describing the content of the ROM |
| -> Signal dom addr | Read address |
| -> Signal dom (BitVector m) | The value of the ROM at address |
A ROM with a synchronous read port, with space for n elements
- NB: Read value is delayed by 1 cycle
- NB: Initial output value is undefined, reading it will throw an
XException - NB: This function might not work for specific combinations of code-generation backends and hardware targets. Please check the support table below:
| VHDL | Verilog | SystemVerilog | |
|---|---|---|---|
| Altera/Quartus | Broken | Works | Works |
| Xilinx/ISE | Works | Works | Works |
| ASIC | Untested | Untested | Untested |
See also:
- See Clash.Prelude.ROM.File for more information on how to instantiate a ROM with the contents of a data file.
- See Clash.Sized.Fixed for ideas on how to create your own data files.
Arguments
| :: forall (n :: Nat) (m :: Nat) (dom :: Domain). (KnownNat m, KnownNat n, HiddenClock dom, HiddenEnable dom) | |
| => FilePath | File describing the content of the ROM |
| -> Signal dom (Unsigned n) | Read address |
| -> Signal dom (BitVector m) | The value of the ROM at address |
A ROM with a synchronous read port, with space for 2^n elements
- NB: Read value is delayed by 1 cycle
- NB: Initial output value is undefined, reading it will throw an
XException - NB: This function might not work for specific combinations of code-generation backends and hardware targets. Please check the support table below:
| VHDL | Verilog | SystemVerilog | |
|---|---|---|---|
| Altera/Quartus | Broken | Works | Works |
| Xilinx/ISE | Works | Works | Works |
| ASIC | Untested | Untested | Untested |
See also:
- See Clash.Prelude.ROM.File for more information on how to instantiate a ROM with the contents of a data file.
- See Clash.Sized.Fixed for ideas on how to create your own data files.
RAM primitives with a combinational read port
Arguments
| :: forall addr (dom :: Domain) a (n :: Nat). (Enum addr, NFDataX addr, HiddenClock dom, HiddenEnable dom, HasCallStack, NFDataX a) | |
| => SNat n | Size |
| -> Signal dom addr | Read address |
| -> Signal dom (Maybe (addr, a)) | (write address |
| -> Signal dom a | Value of the RAM at address |
Create a RAM with space for n elements
- NB: Initial content of the RAM is undefined, reading it will throw an
XException
See also:
- See Clash.Prelude.BlockRam for more information on how to use a RAM.
Arguments
| :: forall (n :: Nat) (dom :: Domain) a. (KnownNat n, HiddenClock dom, HiddenEnable dom, HasCallStack, NFDataX a) | |
| => Signal dom (Unsigned n) | Read address |
| -> Signal dom (Maybe (Unsigned n, a)) | (write address |
| -> Signal dom a | Value of the RAM at address |
Create a RAM with space for 2^n elements
- NB: Initial content of the RAM is undefined, reading it will throw an
XException
See also:
- See Clash.Prelude.BlockRam for more information on how to use a RAM.
Block RAM primitives
Arguments
| :: forall (dom :: Domain) a addr (n :: Nat). (HasCallStack, HiddenClock dom, HiddenEnable dom, NFDataX a, Enum addr, NFDataX addr) | |
| => Vec n a | Initial content of the BRAM, also determines the size, NB: MUST be a constant |
| -> Signal dom addr | Read address |
| -> Signal dom (Maybe (addr, a)) | (write address |
| -> Signal dom a | Value of the BRAM at address |
Create a block RAM with space for n elements
- NB: Read value is delayed by 1 cycle
- NB: Initial output value is undefined, reading it will throw an
XException
See also:
- See Clash.Prelude.BlockRam for more information on how to use a Block RAM.
- Use the adapter
readNewfor obtaining write-before-read semantics like this:.readNew(blockRaminits) rd wrM - A large
Vecfor the initial content may be too inefficient, depending on how it is constructed. SeeblockRamFileandblockRamBlobfor different approaches that scale well.
Example
Arguments
| :: forall (dom :: Domain) a (n :: Nat). (HasCallStack, HiddenClock dom, HiddenEnable dom, NFDataX a, KnownNat n) | |
| => Vec (2 ^ n) a | Initial content of the BRAM NB: MUST be a constant. |
| -> Signal dom (Unsigned n) | Read address |
| -> Signal dom (Maybe (Unsigned n, a)) | (write address |
| -> Signal dom a | Value of the |
Create a block RAM with space for 2^n elements
- NB: Read value is delayed by 1 cycle
- NB: Initial output value is undefined, reading it will throw an
XException
See also:
- See Clash.Prelude.BlockRam for more information on how to use a block RAM.
- Use the adapter
readNewfor obtaining write-before-read semantics like this:.readNew(blockRamPow2inits) rd wrM - A large
Vecfor the initial content may be too inefficient, depending on how it is constructed. SeeblockRamFilePow2andblockRamBlobPow2for different approaches that scale well.
Example
bram32 ::HiddenClockdom =>Signaldom (Unsigned5) ->Signaldom (Maybe (Unsigned5,Bit)) ->SignaldomBitbram32 =blockRamPow2(replicated32 1)
Arguments
| :: forall (n :: Natural) (dom :: Domain) a (r :: Bool) addr. (HasCallStack, HiddenClockResetEnable dom, NFDataX a, Enum addr, NFDataX addr, 1 <= n) | |
| => ResetStrategy r | Whether to clear BRAM on asserted reset ( |
| -> SNat n | Number of elements in BRAM |
| -> (Index n -> a) | If applicable (see first argument), reset BRAM using this function |
| -> Signal dom addr | Read address |
| -> Signal dom (Maybe (addr, a)) | (write address |
| -> Signal dom a | Value of the BRAM at address |
A version of blockRam that has no default values set. May be cleared to
an arbitrary state using a reset function.
Arguments
| :: forall (n :: Natural) (dom :: Domain) a (r :: Bool) addr. (HasCallStack, HiddenClockResetEnable dom, NFDataX a, Enum addr, NFDataX addr, 1 <= n) | |
| => ResetStrategy r | Whether to clear BRAM on asserted reset ( |
| -> SNat n | Number of elements in BRAM |
| -> a | Initial content of the BRAM (replicated n times) |
| -> Signal dom addr | Read address |
| -> Signal dom (Maybe (addr, a)) | (write address |
| -> Signal dom a | Value of the BRAM at address |
A version of blockRam that is initialized with the same value on all
memory positions
data ResetStrategy (r :: Bool) where Source #
Constructors
| ClearOnReset :: ResetStrategy 'True | |
| NoClearOnReset :: ResetStrategy 'False |
Block RAM primitives initialized with a MemBlob
Arguments
| :: forall (dom :: Domain) addr (m :: Nat) (n :: Nat). (HiddenClock dom, HiddenEnable dom, Enum addr, NFDataX addr) | |
| => MemBlob n m | Initial content of the BRAM, also determines the size, NB: MUST be a constant |
| -> Signal dom addr | Read address |
| -> Signal dom (Maybe (addr, BitVector m)) | (write address |
| -> Signal dom (BitVector m) | Value of the BRAM at address |
Create a block RAM with space for n elements
- NB: Read value is delayed by 1 cycle
- NB: Initial output value is undefined, reading it will throw an
XException
See also:
- See Clash.Prelude.BlockRam for more information on how to use a block RAM.
- Use the adapter
readNewfor obtaining write-before-read semantics like this:.readNew(blockRamBlobcontent) rd wrM
Arguments
| :: forall (dom :: Domain) (m :: Nat) (n :: Nat). (HiddenClock dom, HiddenEnable dom, KnownNat n) | |
| => MemBlob (2 ^ n) m | Initial content of the BRAM, also determines the size, 2^ NB: MUST be a constant |
| -> Signal dom (Unsigned n) | Read address |
| -> Signal dom (Maybe (Unsigned n, BitVector m)) | (write address |
| -> Signal dom (BitVector m) | Value of the BRAM at address |
Create a block RAM with space for 2^n elements
- NB: Read value is delayed by 1 cycle
- NB: Initial output value is undefined, reading it will throw an
XException
See also:
- See Clash.Prelude.BlockRam for more information on how to use a block RAM.
- Use the adapter
readNewfor obtaining write-before-read semantics like this:.readNew(blockRamBlobPow2content) rd wrM
Creating and inspecting MemBlob
data MemBlob (n :: Nat) (m :: Nat) Source #
Efficient storage of memory content
It holds n words of .BitVector m
Arguments
| :: forall a f. (Foldable f, BitPack a) | |
| => String | Name of the binding to generate |
| -> Maybe Bit | Value to map don't care bits to. |
| -> f a | The content for the |
| -> DecsQ |
Create a MemBlob binding from a list of values
Since this uses Template Haskell, nothing in the arguments given to
createMemBlob can refer to something defined in the same module.
Example
createMemBlob"content"Nothing[15 :: Unsigned 8 .. 17] ram clk en =blockRamBlobclk en content
The Maybe datatype has don't care bits, where the actual value
does not matter. But the bits need a defined value in the memory. Either 0 or
1 can be used, and both are valid representations of the data.
>>>import qualified Prelude as P>>>let es = [ Nothing, Just (7 :: Unsigned 8), Just 8 ]>>>:{createMemBlob "content0" (Just 0) es createMemBlob "content1" (Just 1) es x = 1 :}
>>>let pr = mapM_ (putStrLn . show)>>>pr $ P.map pack es0b0_...._.... 0b1_0000_0111 0b1_0000_1000>>>pr $ unpackMemBlob content00b0_0000_0000 0b1_0000_0111 0b1_0000_1000>>>pr $ unpackMemBlob content10b0_1111_1111 0b1_0000_0111 0b1_0000_1000
>>>:{createMemBlob "contentN" Nothing es x = 1 :} <interactive>:...: error:... packBVs: cannot convert don't care values. Please specify a mapping to a definite value.
# 297 "srcClashExplicitBlockRamBlob.hs"
Note how we hinted to clashi that our multi-line command was a list of
declarations by including a dummy declaration x = 1. Without this trick,
clashi would expect an expression and the Template Haskell would not work.
Arguments
| :: forall a f. (Foldable f, BitPack a) | |
| => Maybe Bit | Value to map don't care bits to. |
| -> f a | The content for the |
| -> ExpQ |
Create a MemBlob from a list of values
Since this uses Template Haskell, nothing in the arguments given to
memBlobTH can refer to something defined in the same module.
Example
ram clk en = blockRamBlob clk en $(memBlobTH Nothing [15 :: Unsigned 8 .. 17])
The Maybe datatype has don't care bits, where the actual value
does not matter. But the bits need a defined value in the memory. Either 0 or
1 can be used, and both are valid representations of the data.
>>>import qualified Prelude as P>>>let es = [ Nothing, Just (7 :: Unsigned 8), Just 8 ]>>>content0 = $(memBlobTH (Just 0) es)>>>content1 = $(memBlobTH (Just 1) es)>>>let pr = mapM_ (putStrLn . show)>>>pr $ P.map pack es0b0_...._.... 0b1_0000_0111 0b1_0000_1000>>>pr $ unpackMemBlob content00b0_0000_0000 0b1_0000_0111 0b1_0000_1000>>>pr $ unpackMemBlob content10b0_1111_1111 0b1_0000_0111 0b1_0000_1000
>>>$(memBlobTH Nothing es)<interactive>:...: error:... • packBVs: cannot convert don't care values. Please specify a mapping to a definite value. • In the untyped splice: $(memBlobTH Nothing es)
# 384 "srcClashExplicitBlockRamBlob.hs"
unpackMemBlob :: forall (n :: Nat) (m :: Nat). MemBlob n m -> [BitVector m] Source #
Convert a MemBlob back to a list
NB: Not synthesizable
Block RAM primitives initialized with a data file
Arguments
| :: forall (m :: Nat) addr (dom :: Domain) (n :: Nat). (KnownNat m, Enum addr, NFDataX addr, HiddenClock dom, HiddenEnable dom, HasCallStack) | |
| => SNat n | Size of the BRAM |
| -> FilePath | File describing the initial content of the BRAM |
| -> Signal dom addr | Read address |
| -> Signal dom (Maybe (addr, BitVector m)) | (write address |
| -> Signal dom (BitVector m) | Value of the BRAM at address |
Create a block RAM with space for n elements
- NB: Read value is delayed by 1 cycle
- NB: Initial output value is undefined, reading it will throw an
XException - NB: This function might not work for specific combinations of code-generation backends and hardware targets. Please check the support table below:
| VHDL | Verilog | SystemVerilog | |
|---|---|---|---|
| Altera/Quartus | Broken | Works | Works |
| Xilinx/ISE | Works | Works | Works |
| ASIC | Untested | Untested | Untested |
See also:
- See Clash.Prelude.BlockRam for more information on how to use a block RAM.
- Use the adapter
readNewfor obtaining write-before-read semantics like this:.readNew(blockRamFilesize file) rd wrM - See Clash.Prelude.BlockRam.File for more information on how to instantiate a block RAM with the contents of a data file.
- See Clash.Sized.Fixed for ideas on how to create your own data files.
Arguments
| :: forall (dom :: Domain) (n :: Nat) (m :: Nat). (KnownNat m, KnownNat n, HiddenClock dom, HiddenEnable dom, HasCallStack) | |
| => FilePath | File describing the initial content of the BRAM |
| -> Signal dom (Unsigned n) | Read address |
| -> Signal dom (Maybe (Unsigned n, BitVector m)) | (write address |
| -> Signal dom (BitVector m) | Value of the BRAM at address |
Create a block RAM with space for 2^n elements
- NB: Read value is delayed by 1 cycle
- NB: Initial output value is undefined, reading it will throw an
XException - NB: This function might not work for specific combinations of code-generation backends and hardware targets. Please check the support table below:
| VHDL | Verilog | SystemVerilog | |
|---|---|---|---|
| Altera/Quartus | Broken | Works | Works |
| Xilinx/ISE | Works | Works | Works |
| ASIC | Untested | Untested | Untested |
See also:
- See Clash.Prelude.BlockRam for more information on how to use a block RAM.
- Use the adapter
readNewfor obtaining write-before-read semantics like this:.readNew(blockRamFilePow2file) rd wrM - See Clash.Prelude.BlockRam.File for more information on how to instantiate a block RAM with the contents of a data file.
- See Clash.Sized.Fixed for ideas on how to create your own data files.
Block RAM read/write conflict resolution
Arguments
| :: forall (dom :: Domain) a addr. (HiddenClockResetEnable dom, NFDataX a, Eq addr) | |
| => (Signal dom addr -> Signal dom (Maybe (addr, a)) -> Signal dom a) | The BRAM component |
| -> Signal dom addr | Read address |
| -> Signal dom (Maybe (addr, a)) | (Write address |
| -> Signal dom a | Value of the BRAM at address |
Create a read-after-write block RAM from a read-before-write one
>>>:t readNew (blockRam (0 :> 1 :> Nil))readNew (blockRam (0 :> 1 :> Nil)) :: ... ... ... => Signal dom addr -> Signal dom (Maybe (addr, a)) -> Signal dom a
# 867 "srcClashPrelude/BlockRam.hs"
True dual-port block RAM
Arguments
| :: forall (nAddrs :: Nat) (dom :: Domain) a. (HasCallStack, KnownNat nAddrs, HiddenClock dom, NFDataX a) | |
| => Signal dom (RamOp nAddrs a) | RAM operation for port A |
| -> Signal dom (RamOp nAddrs a) | RAM operation for port B |
| -> (Signal dom a, Signal dom a) | Outputs data on next cycle. When writing, the data written will be echoed. When reading, the read data is returned. |
Produces vendor-agnostic HDL that will be inferred as a true dual-port block RAM
Any value that is being written on a particular port is also the value that will be read on that port, i.e. the same-port read/write behavior is: WriteFirst. For mixed-port read/write, when port A writes to the address port B reads from, the output of port B is undefined, and vice versa.
data RamOp (n :: Nat) a Source #
Port operation
Constructors
| RamRead (Index n) | Read from address |
| RamWrite (Index n) a | Write data to address |
| RamNoOp | No operation |
Instances
Utility functions
Arguments
| :: forall (dom :: Domain) (n :: Nat) a. (HiddenClockResetEnable dom, KnownNat n, Default a, NFDataX a) | |
| => Signal dom a | Signal to create a window over |
| -> Vec (n + 1) (Signal dom a) | Window of at least size 1 |
Give a window over a Signal
window4 :: HiddenClockResetEnable dom
=> Signal dom Int -> Vec 4 (Signal dom Int)
window4 = window>>>simulateB @System window4 [1::Int,2,3,4,5] :: [Vec 4 Int][1 :> 0 :> 0 :> 0 :> Nil,2 :> 1 :> 0 :> 0 :> Nil,3 :> 2 :> 1 :> 0 :> Nil,4 :> 3 :> 2 :> 1 :> Nil,5 :> 4 :> 3 :> 2 :> Nil,... ...
Arguments
| :: forall (dom :: Domain) (n :: Nat) a. (HiddenClockResetEnable dom, KnownNat n, Default a, NFDataX a) | |
| => Signal dom a | Signal to create a window over |
| -> Vec (n + 1) (Signal dom a) | Window of at least size 1 |
Give a delayed window over a Signal
windowD3 :: HiddenClockResetEnable dom => Signal dom Int -> Vec 3 (Signal dom Int) windowD3 = windowD
>>>simulateB @System windowD3 [1::Int,2,3,4] :: [Vec 3 Int][0 :> 0 :> 0 :> Nil,1 :> 0 :> 0 :> Nil,2 :> 1 :> 0 :> Nil,3 :> 2 :> 1 :> Nil,4 :> 3 :> 2 :> Nil,... ...
riseEvery :: forall (dom :: Domain) (n :: Nat). HiddenClockResetEnable dom => SNat n -> Signal dom Bool Source #
Give a pulse every n clock cycles. This is a useful helper function when
combined with functions like or regEn,
in order to delay a register by a known amount.mux
To be precise: the given signal will be for the next Falsen-1 cycles,
followed by a single value:True
>>>Prelude.last (sampleN @System 1025 (riseEvery d1024)) == TrueTrue>>>Prelude.or (sampleN @System 1024 (riseEvery d1024)) == FalseTrue
For example, to update a counter once every 10 million cycles:
counter =regEn0 (riseEvery(SNat::SNat10000000)) (counter + 1)
oscillate :: forall (dom :: Domain) (n :: Nat). HiddenClockResetEnable dom => Bool -> SNat n -> Signal dom Bool Source #
Oscillate a for a given number of cycles. This is a convenient
function when combined with something like Bool, as it allows you to
easily hold a register value for a given number of cycles. The input regEn
determines what the initial value is.Bool
To oscillate on an interval of 5 cycles:
>>>sampleN @System 11 (oscillate False d5)[False,False,False,False,False,False,True,True,True,True,True]
To oscillate between and True:False
>>>sampleN @System 11 (oscillate False d1)[False,False,True,False,True,False,True,False,True,False,True]
An alternative definition for the above could be:
>>>let osc' = register False (not <$> osc')>>>sampleN @System 200 (oscillate False d1) == sampleN @System 200 osc'True
Tracing
Simple
Arguments
| :: forall a (dom :: Domain). (BitPack a, NFDataX a, Typeable a) | |
| => String | Name of signal in the VCD output |
| -> Signal dom a | Signal to trace |
| -> Signal dom a |
Trace a single signal. Will emit an error if a signal with the same name was previously registered.
NB: Associates the traced signal with a clock period of 1, which
results in incorrect VCD files when working with circuits that have
multiple clocks. Use traceSignal when working with circuits that have
multiple clocks.
Arguments
| :: forall (n :: Nat) a (dom :: Domain). (KnownNat n, BitPack a, NFDataX a, Typeable a) | |
| => String | Name of signal in debugging output. Will be appended by _0, _1, ..., _n. |
| -> Signal dom (Vec (n + 1) a) | Signal to trace |
| -> Signal dom (Vec (n + 1) a) |
Trace a single vector signal: each element in the vector will show up as a different trace. If the trace name already exists, this function will emit an error.
NB: Associates the traced signal with a clock period of 1, which
results in incorrect VCD files when working with circuits that have
multiple clocks. Use traceSignal when working with circuits that have
multiple clocks.
Tracing in a multi-clock environment
Arguments
| :: forall (dom :: Domain) a. (KnownDomain dom, BitPack a, NFDataX a, Typeable a) | |
| => String | Name of signal in the VCD output |
| -> Signal dom a | Signal to trace |
| -> Signal dom a |
Trace a single signal. Will emit an error if a signal with the same name was previously registered.
NB: Works correctly when creating VCD files from traced signal in
multi-clock circuits. However traceSignal1 might be more convenient to
use when the domain of your circuit is polymorphic.
Arguments
| :: forall (dom :: Domain) a (n :: Nat). (KnownDomain dom, KnownNat n, BitPack a, NFDataX a, Typeable a) | |
| => String | Name of signal in debugging output. Will be appended by _0, _1, ..., _n. |
| -> Signal dom (Vec (n + 1) a) | Signal to trace |
| -> Signal dom (Vec (n + 1) a) |
Trace a single vector signal: each element in the vector will show up as a different trace. If the trace name already exists, this function will emit an error.
NB: Works correctly when creating VCD files from traced signal in
multi-clock circuits. However traceSignal1 might be more convenient to
use when the domain of your circuit is polymorphic.
VCD dump functions
Arguments
| :: forall a (dom :: Domain). NFDataX a | |
| => (Int, Int) | (offset, number of samples) |
| -> Signal dom a | (One of) the outputs of the circuit containing the traces |
| -> [String] | The names of the traces you definitely want to be dumped in the VCD file |
| -> IO (Either String Text) |
Produce a four-state VCD (Value Change Dump) according to IEEE 1364-{1995,2001}. This function fails if a trace name contains either non-printable or non-VCD characters.
Due to lazy evaluation, the created VCD files might not contain all the traces you were expecting. You therefore have to provide a list of names you definately want to be dumped in the VCD file.
For example:
vcd <- dumpVCD (0, 100) cntrOut ["main", "sub"]
Evaluates cntrOut long enough in order for to guarantee that the main,
and sub traces end up in the generated VCD file.
Exported modules
Synchronous signals
fromList :: forall a (dom :: Domain). NFDataX a => [a] -> Signal dom a Source #
Create a Signal from a list
Every element in the list will correspond to a value of the signal for one clock cycle.
>>>sampleN 2 (fromList [1,2,3,4,5])[1,2]
NB: This function is not synthesizable
Arguments
| :: forall (dom :: Domain) a. (KnownDomain dom, NFDataX a) | |
| => (HiddenClockResetEnable dom => Signal dom a) |
|
| -> [a] |
Get an infinite list of samples from a Signal
The elements in the list correspond to the values of the Signal
at consecutive clock cycles
sample s == [s0, s1, s2, s3, ...
If the given component has not yet been given a clock, reset, or enable
line, sample will supply them. The reset will be asserted for a single
cycle. sample will not drop the value produced by the circuit while
the reset was asserted. If you want this, or if you want more than a
single cycle reset, consider using sampleWithReset.
NB: This function is not synthesizable
Arguments
| :: forall (dom :: Domain) a. (NFDataX a, HiddenClock dom, HiddenEnable dom) | |
| => a | Initial value |
| -> Signal dom a | Signal to delay |
| -> Signal dom a |
data BiSignalDefault Source #
Used to specify the default behavior of a "BiSignal" in Haskell simulation, i.e. what value is read when no value is being written to it.
Constructors
| PullUp | inout port behaves as if connected to a pull-up resistor |
| PullDown | inout port behaves as if connected to a pull-down resistor |
| Floating | inout port behaves as if is floating. Reading a floating "BiSignal" value in simulation will yield an errorX (undefined value). |
Instances
| Show BiSignalDefault Source # | |
Defined in Clash.Signal.BiSignal | |
data Signal (dom :: Domain) a Source #
Clash has synchronous Signals in the form of:
Signal(dom ::Domain) a
Where a is the type of the value of the Signal, for example Int or Bool,
and dom is the clock- (and reset-) domain to which the memory elements
manipulating these Signals belong.
The type-parameter, dom, is of the kind Domain - a simple string. That
string refers to a single synthesis domain. A synthesis domain describes the
behavior of certain aspects of memory elements in it.
- NB: "Bad things"™ happen when you actually use a clock period of
0, so do not do that! - NB: You should be judicious using a clock with period of
1as you can never create a clock that goes any faster! - NB: For the best compatibility make sure your period is divisible by 2, because some VHDL simulators don't support fractions of picoseconds.
- NB: Whether
Systemhas good defaults depends on your target platform. Check outIntelSystemandXilinxSystemtoo!
Signals have the type role
>>>:i Signaltype role Signal nominal representational ...
as it is safe to coerce the underlying value of a signal, but not safe to coerce a signal between different synthesis domains.
See the module documentation of Clash.Signal for more information about domains.
Instances
| AssertionValue dom (Signal dom Bool) Source # | Stream of booleans, originating from a circuit | ||||||||
Defined in Clash.Verification.Internal | |||||||||
| Lift a => Lift (Signal dom a :: Type) Source # | |||||||||
| Applicative (Signal dom) Source # | |||||||||
Defined in Clash.Signal.Internal Methods pure :: a -> Signal dom a Source # (<*>) :: Signal dom (a -> b) -> Signal dom a -> Signal dom b Source # liftA2 :: (a -> b -> c) -> Signal dom a -> Signal dom b -> Signal dom c Source # (*>) :: Signal dom a -> Signal dom b -> Signal dom b Source # (<*) :: Signal dom a -> Signal dom b -> Signal dom a Source # | |||||||||
| Functor (Signal dom) Source # | |||||||||
| Foldable (Signal dom) Source # | NB: Not synthesizable NB: In "
| ||||||||
Defined in Clash.Signal.Internal Methods fold :: Monoid m => Signal dom m -> m Source # foldMap :: Monoid m => (a -> m) -> Signal dom a -> m Source # foldMap' :: Monoid m => (a -> m) -> Signal dom a -> m Source # foldr :: (a -> b -> b) -> b -> Signal dom a -> b Source # foldr' :: (a -> b -> b) -> b -> Signal dom a -> b Source # foldl :: (b -> a -> b) -> b -> Signal dom a -> b Source # foldl' :: (b -> a -> b) -> b -> Signal dom a -> b Source # foldr1 :: (a -> a -> a) -> Signal dom a -> a Source # foldl1 :: (a -> a -> a) -> Signal dom a -> a Source # toList :: Signal dom a -> [a] Source # null :: Signal dom a -> Bool Source # length :: Signal dom a -> Int Source # elem :: Eq a => a -> Signal dom a -> Bool Source # maximum :: Ord a => Signal dom a -> a Source # minimum :: Ord a => Signal dom a -> a Source # | |||||||||
| Traversable (Signal dom) Source # | |||||||||
Defined in Clash.Signal.Internal Methods traverse :: Applicative f => (a -> f b) -> Signal dom a -> f (Signal dom b) Source # sequenceA :: Applicative f => Signal dom (f a) -> f (Signal dom a) Source # mapM :: Monad m => (a -> m b) -> Signal dom a -> m (Signal dom b) Source # sequence :: Monad m => Signal dom (m a) -> m (Signal dom a) Source # | |||||||||
| Arbitrary a => Arbitrary (Signal dom a) Source # | |||||||||
| CoArbitrary a => CoArbitrary (Signal dom a) Source # | |||||||||
Defined in Clash.Signal.Internal Methods coarbitrary :: Signal dom a -> Gen b -> Gen b | |||||||||
| Clocks (Clock c1, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| NFDataX a => NFDataX (Signal domain a) Source # | |||||||||
Defined in Clash.Signal.Internal | |||||||||
| Default a => Default (Signal dom a) Source # | |||||||||
Defined in Clash.Signal.Internal | |||||||||
| Num a => Num (Signal dom a) Source # | |||||||||
Defined in Clash.Signal.Internal Methods (+) :: Signal dom a -> Signal dom a -> Signal dom a Source # (-) :: Signal dom a -> Signal dom a -> Signal dom a Source # (*) :: Signal dom a -> Signal dom a -> Signal dom a Source # negate :: Signal dom a -> Signal dom a Source # abs :: Signal dom a -> Signal dom a Source # signum :: Signal dom a -> Signal dom a Source # fromInteger :: Integer -> Signal dom a Source # | |||||||||
| Fractional a => Fractional (Signal dom a) Source # | |||||||||
| Show a => Show (Signal dom a) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal pllLock Bool) Source # | |||||||||
| type TryDomain t (Signal dom a) Source # | |||||||||
Defined in Clash.Class.HasDomain.HasSingleDomain | |||||||||
| type HasDomain dom1 (Signal dom2 a) Source # | |||||||||
Defined in Clash.Class.HasDomain.HasSpecificDomain | |||||||||
| type ClocksCxt (Clock c1, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type NumOutClocks (Clock c1, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain c16, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain c16, KnownDomain c17, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain c16, KnownDomain c17, KnownDomain c18, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal pllLock Bool) Source # | |||||||||
data InitBehavior Source #
Constructors
| Unknown | Power up value of memory elements is unknown. |
| Defined | If applicable, power up value of a memory element is defined. Applies to
|
Instances
| Binary InitBehavior Source # | |||||
Defined in Clash.Signal.Internal Methods put :: InitBehavior -> Put Source # get :: Get InitBehavior Source # putList :: [InitBehavior] -> Put Source # | |||||
| NFData InitBehavior Source # | |||||
Defined in Clash.Signal.Internal Methods rnf :: InitBehavior -> () Source # | |||||
| Data InitBehavior Source # | |||||
Defined in Clash.Signal.Internal Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> InitBehavior -> c InitBehavior Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c InitBehavior Source # toConstr :: InitBehavior -> Constr Source # dataTypeOf :: InitBehavior -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c InitBehavior) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c InitBehavior) Source # gmapT :: (forall b. Data b => b -> b) -> InitBehavior -> InitBehavior Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> InitBehavior -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> InitBehavior -> r Source # gmapQ :: (forall d. Data d => d -> u) -> InitBehavior -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> InitBehavior -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> InitBehavior -> m InitBehavior Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> InitBehavior -> m InitBehavior Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> InitBehavior -> m InitBehavior Source # | |||||
| Generic InitBehavior Source # | |||||
Defined in Clash.Signal.Internal Associated Types
Methods from :: InitBehavior -> Rep InitBehavior x Source # to :: Rep InitBehavior x -> InitBehavior Source # | |||||
| Read InitBehavior Source # | |||||
Defined in Clash.Signal.Internal | |||||
| Show InitBehavior Source # | |||||
Defined in Clash.Signal.Internal | |||||
| Eq InitBehavior Source # | |||||
Defined in Clash.Signal.Internal Methods (==) :: InitBehavior -> InitBehavior -> Bool Source # (/=) :: InitBehavior -> InitBehavior -> Bool Source # | |||||
| Ord InitBehavior Source # | |||||
Defined in Clash.Signal.Internal Methods compare :: InitBehavior -> InitBehavior -> Ordering Source # (<) :: InitBehavior -> InitBehavior -> Bool Source # (<=) :: InitBehavior -> InitBehavior -> Bool Source # (>) :: InitBehavior -> InitBehavior -> Bool Source # (>=) :: InitBehavior -> InitBehavior -> Bool Source # max :: InitBehavior -> InitBehavior -> InitBehavior Source # min :: InitBehavior -> InitBehavior -> InitBehavior Source # | |||||
| Hashable InitBehavior Source # | |||||
Defined in Clash.Signal.Internal | |||||
| type Rep InitBehavior Source # | |||||
Isomorphism between a Signal of a product type (e.g. a tuple) and a
product type of Signals.
Instances of Bundle must satisfy the following laws:
bundle.unbundle=idunbundle.bundle=id
By default, bundle and unbundle, are defined as the identity, that is,
writing:
data D = A | B instance Bundle D
is the same as:
data D = A | B instance Bundle D where typeUnbundledclk D =Signalclk Dbundles = sunbundles = s
For custom product types you'll have to write the instance manually:
data Pair a b = MkPair { getA :: a, getB :: b }
instance Bundle (Pair a b) where
type Unbundled dom (Pair a b) = Pair (Signal dom a) (Signal dom b)
-- bundle :: Pair (Signal dom a) (Signal dom b) -> Signal dom (Pair a b)
bundle (MkPair as bs) = MkPair <$> as <*> bs
-- unbundle :: Signal dom (Pair a b) -> Pair (Signal dom a) (Signal dom b)
unbundle pairs = MkPair (getA <$> pairs) (getB <$> pairs)
Minimal complete definition
Nothing
Methods
bundle :: forall (dom :: Domain). Unbundled dom a -> Signal dom a Source #
Example:
bundle :: (Signaldom a,Signaldom b) ->Signaldom (a,b)
However:
bundle ::SignaldomBit->SignaldomBit
default bundle :: forall (dom :: Domain). Signal dom a ~ Unbundled dom a => Unbundled dom a -> Signal dom a Source #
unbundle :: forall (dom :: Domain). Signal dom a -> Unbundled dom a Source #
Instances
| Bundle EmptyTuple Source # | See commit 94b0bff5
and documentation for | ||||
Defined in Clash.Signal.Bundle Associated Types
Methods bundle :: forall (dom :: Domain). Unbundled dom EmptyTuple -> Signal dom EmptyTuple Source # unbundle :: forall (dom :: Domain). Signal dom EmptyTuple -> Unbundled dom EmptyTuple Source # | |||||
| Bundle Bit Source # | |||||
Defined in Clash.Signal.Bundle Associated Types
| |||||
| Bundle Integer Source # | |||||
Defined in Clash.Signal.Bundle Associated Types
| |||||
| Bundle () Source # | |||||
Defined in Clash.Signal.Bundle Associated Types
| |||||
| Bundle Bool Source # | |||||
Defined in Clash.Signal.Bundle Associated Types
| |||||
| Bundle Double Source # | |||||
Defined in Clash.Signal.Bundle Associated Types
| |||||
| Bundle Float Source # | |||||
Defined in Clash.Signal.Bundle Associated Types
| |||||
| Bundle Int Source # | |||||
Defined in Clash.Signal.Bundle Associated Types
| |||||
| Bundle (BitVector n) Source # | |||||
| Bundle (Index n) Source # | |||||
| Bundle (Signed n) Source # | |||||
| Bundle (Unsigned n) Source # | |||||
| Bundle (Maybe a) Source # | |||||
| KnownNat d => Bundle (RTree d a) Source # | |||||
| KnownNat n => Bundle (Vec n a) Source # | |||||
| Bundle (Either a b) Source # | |||||
| Bundle (a1, a2) Source # | |||||
| Bundle (Fixed rep int frac) Source # | |||||
| Bundle (a1, a2, a3) Source # | |||||
| Bundle ((f :*: g) a) Source # | |||||
| Bundle (a1, a2, a3, a4) Source # | |||||
| Bundle (a1, a2, a3, a4, a5) Source # | |||||
| Bundle (a1, a2, a3, a4, a5, a6) Source # | |||||
| Bundle (a1, a2, a3, a4, a5, a6, a7) Source # | |||||
| Bundle (a1, a2, a3, a4, a5, a6, a7, a8) Source # | |||||
Defined in Clash.Signal.Bundle | |||||
| Bundle (a1, a2, a3, a4, a5, a6, a7, a8, a9) Source # | |||||
Defined in Clash.Signal.Bundle | |||||
| Bundle (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) Source # | |||||
Defined in Clash.Signal.Bundle Methods bundle :: forall (dom :: Domain). Unbundled dom (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> Signal dom (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) Source # unbundle :: forall (dom :: Domain). Signal dom (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> Unbundled dom (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) Source # | |||||
| Bundle (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) Source # | |||||
Defined in Clash.Signal.Bundle Methods bundle :: forall (dom :: Domain). Unbundled dom (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> Signal dom (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) Source # unbundle :: forall (dom :: Domain). Signal dom (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> Unbundled dom (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) Source # | |||||
| Bundle (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source # | |||||
Defined in Clash.Signal.Bundle Methods bundle :: forall (dom :: Domain). Unbundled dom (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> Signal dom (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source # unbundle :: forall (dom :: Domain). Signal dom (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> Unbundled dom (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source # | |||||
type HiddenClockResetEnable (dom :: Domain) = (HiddenClock dom, HiddenReset dom, HiddenEnable dom) Source #
A constraint that indicates the component needs a Clock, a Reset,
and an Enable belonging to the same dom.
Click here to read more about hidden clocks, resets, and enables
type HiddenClock (dom :: Domain) = (Hidden (HiddenClockName dom) (Clock dom), KnownDomain dom) Source #
A constraint that indicates the component has a hidden Clock
Click here to read more about hidden clocks, resets, and enables
type HiddenReset (dom :: Domain) = (Hidden (HiddenResetName dom) (Reset dom), KnownDomain dom) Source #
A constraint that indicates the component needs a Reset
Click here to read more about hidden clocks, resets, and enables
type HiddenEnable (dom :: Domain) = (Hidden (HiddenEnableName dom) (Enable dom), KnownDomain dom) Source #
A constraint that indicates the component needs an Enable
Click here to read more about hidden clocks, resets, and enables
data Clock (dom :: Domain) Source #
A clock signal belonging to a domain named dom.
Instances
| Show (Clock dom) Source # | |||||||||
| Clocks (Clock c1, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| ClocksSync (Clock c1, Reset c1) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1)) => ClocksSyncClocksInst (Clock c1, Reset c1) domIn -> Clock domIn -> (Clock c1, Reset c1) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
| |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal pllLock Bool) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal pllLock Bool) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal pllLock Bool) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal pllLock Bool) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal pllLock Bool) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal pllLock Bool) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) Source # | |||||||||
| Clocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocks :: forall (domIn :: Domain). (KnownDomain domIn, ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal pllLock Bool)) => Clock domIn -> Reset domIn -> (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal pllLock Bool) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) Source # | |||||||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) Source # | |||||||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) Source # | |||||||||
| type TryDomain t (Clock dom) Source # | |||||||||
Defined in Clash.Class.HasDomain.HasSingleDomain | |||||||||
| type HasDomain dom1 (Clock dom2) Source # | |||||||||
Defined in Clash.Class.HasDomain.HasSpecificDomain | |||||||||
| type ClocksCxt (Clock c1, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type NumOutClocks (Clock c1, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1) domIn Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain pllLock) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2) = (KnownDomain c1, KnownDomain c2) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2) domIn Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain pllLock) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3) = (KnownDomain c1, KnownDomain c2, KnownDomain c3) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3) domIn Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain pllLock) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Signal pllLock Bool) Source # | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4) domIn Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain pllLock) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal pllLock Bool) Source # | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5) domIn Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain pllLock) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal pllLock Bool) Source # | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6) domIn Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain pllLock) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal pllLock Bool) Source # | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7) domIn Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain pllLock) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal pllLock Bool) Source # | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8) domIn Source # | |||||||||
Defined in Clash.Clocks | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain c16, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal pllLock Bool) Source # | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain c16, KnownDomain c17, KnownDomain pllLock) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal pllLock Bool) Source # | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) domIn Source # | |||||||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal domIn Bool) | |||||||||
| type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal pllLock Bool) Source # | |||||||||
Defined in Clash.Clocks type ClocksCxt (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal pllLock Bool) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain c16, KnownDomain c17, KnownDomain c18, KnownDomain pllLock) | |||||||||
| type NumOutClocks (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal pllLock Bool) Source # | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10) | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) domIn Source # | |||||||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal domIn Bool) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11) | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) domIn Source # | |||||||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal domIn Bool) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12) | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) domIn Source # | |||||||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal domIn Bool) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13) | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) domIn Source # | |||||||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal domIn Bool) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14) | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) domIn Source # | |||||||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal domIn Bool) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15) | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) domIn Source # | |||||||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal domIn Bool) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain c16) | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) domIn Source # | |||||||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal domIn Bool) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain c16, KnownDomain c17) | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) domIn Source # | |||||||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal domIn Bool) | |||||||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) Source # | |||||||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain c16, KnownDomain c17, KnownDomain c18) | |||||||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) domIn Source # | |||||||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal domIn Bool) | |||||||||
data Reset (dom :: Domain) Source #
A reset signal belonging to a domain called dom.
The underlying representation of resets is Bool.
Instances
| ClocksSync (Clock c1, Reset c1) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1)) => ClocksSyncClocksInst (Clock c1, Reset c1) domIn -> Clock domIn -> (Clock c1, Reset c1) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) Source # | |||||
| ClocksSync (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) Source # | |||||
Defined in Clash.Clocks Associated Types
Methods clocksResetSynchronizer :: forall (domIn :: Domain). (KnownDomain domIn, ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18)) => ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) domIn -> Clock domIn -> (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) Source # | |||||
| type TryDomain t (Reset dom) Source # | |||||
Defined in Clash.Class.HasDomain.HasSingleDomain | |||||
| type HasDomain dom1 (Reset dom2) Source # | |||||
Defined in Clash.Class.HasDomain.HasSpecificDomain | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1) Source # | |||||
Defined in Clash.Clocks | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1) domIn Source # | |||||
Defined in Clash.Clocks | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2) = (KnownDomain c1, KnownDomain c2) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2) domIn Source # | |||||
Defined in Clash.Clocks | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3) = (KnownDomain c1, KnownDomain c2, KnownDomain c3) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3) domIn Source # | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4) domIn Source # | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5) domIn Source # | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6) domIn Source # | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7) domIn Source # | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8) domIn Source # | |||||
Defined in Clash.Clocks | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) domIn Source # | |||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Signal domIn Bool) | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) domIn Source # | |||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Signal domIn Bool) | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) domIn Source # | |||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Signal domIn Bool) | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) domIn Source # | |||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Signal domIn Bool) | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) domIn Source # | |||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Signal domIn Bool) | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) domIn Source # | |||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Signal domIn Bool) | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) domIn Source # | |||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Signal domIn Bool) | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain c16) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) domIn Source # | |||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Signal domIn Bool) | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain c16, KnownDomain c17) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) domIn Source # | |||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Signal domIn Bool) | |||||
| type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) Source # | |||||
Defined in Clash.Clocks type ClocksResetSynchronizerCxt (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) = (KnownDomain c1, KnownDomain c2, KnownDomain c3, KnownDomain c4, KnownDomain c5, KnownDomain c6, KnownDomain c7, KnownDomain c8, KnownDomain c9, KnownDomain c10, KnownDomain c11, KnownDomain c12, KnownDomain c13, KnownDomain c14, KnownDomain c15, KnownDomain c16, KnownDomain c17, KnownDomain c18) | |||||
| type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) domIn Source # | |||||
Defined in Clash.Clocks type ClocksSyncClocksInst (Clock c1, Reset c1, Clock c2, Reset c2, Clock c3, Reset c3, Clock c4, Reset c4, Clock c5, Reset c5, Clock c6, Reset c6, Clock c7, Reset c7, Clock c8, Reset c8, Clock c9, Reset c9, Clock c10, Reset c10, Clock c11, Reset c11, Clock c12, Reset c12, Clock c13, Reset c13, Clock c14, Reset c14, Clock c15, Reset c15, Clock c16, Reset c16, Clock c17, Reset c17, Clock c18, Reset c18) domIn = (Clock c1, Clock c2, Clock c3, Clock c4, Clock c5, Clock c6, Clock c7, Clock c8, Clock c9, Clock c10, Clock c11, Clock c12, Clock c13, Clock c14, Clock c15, Clock c16, Clock c17, Clock c18, Signal domIn Bool) | |||||
data Enable (dom :: Domain) Source #
A signal of booleans, indicating whether a component is enabled. No special meaning is implied, it's up to the component itself to decide how to respond to its enable line. It is used throughout Clash as a global enable signal.
class (KnownSymbol dom, KnownNat (DomainPeriod dom)) => KnownDomain (dom :: Domain) where Source #
A KnownDomain constraint indicates that a circuit's behavior depends on
some properties of a domain. See DomainConfiguration for more information.
Associated Types
type KnownConf (dom :: Domain) :: DomainConfiguration Source #
Methods
knownDomain :: SDomainConfiguration dom (KnownConf dom) Source #
Returns SDomainConfiguration corresponding to an instance's DomainConfiguration.
Example usage:
>>>knownDomain @SystemSDomainConfiguration {sName = SSymbol @"System", sPeriod = SNat @10000, sActiveEdge = SRising, sResetKind = SAsynchronous, sInitBehavior = SDefined, sResetPolarity = SActiveHigh}
Instances
| KnownDomain IntelSystem Source # | System instance with defaults set for Intel FPGAs | ||||
Defined in Clash.Signal.Internal Associated Types
Methods knownDomain :: SDomainConfiguration IntelSystem (KnownConf IntelSystem) Source # | |||||
| KnownDomain System Source # | A clock (and reset) dom with clocks running at 100 MHz | ||||
Defined in Clash.Signal.Internal Associated Types
Methods knownDomain :: SDomainConfiguration System (KnownConf System) Source # | |||||
| KnownDomain XilinxSystem Source # | System instance with defaults set for Xilinx FPGAs | ||||
Defined in Clash.Signal.Internal Associated Types
Methods knownDomain :: SDomainConfiguration XilinxSystem (KnownConf XilinxSystem) Source # | |||||
fromEnable :: forall (dom :: Domain). Enable dom -> Signal dom Bool Source #
Convert Enable construct to its underlying representation: a signal of
bools.
Arguments
| :: forall (dom :: Domain) r. HiddenEnable dom | |
| => Signal dom Bool | The signal to AND with |
| -> (HiddenEnable dom => r) | The component whose enable is modified |
| -> r |
Merge enable signal with signal of bools by applying the boolean AND operation.
NB: The component given to andEnable as an argument needs an explicit type signature.
Please read Monomorphism restriction leads to surprising
behavior.
The component whose enable is modified will only be enabled when both the
encompassing HiddenEnable and the Signal dom Bool are asserted.
# 1314 "srcClashSignal.hs"
Click here to read more about hidden clocks, resets, and enables
Example
Usage with a polymorphic domain:
>>>reg = register 5 (reg + 1)>>>f en = andEnable en reg>>>sampleN @System 10 (f (riseEvery d2))[5,5,5,6,6,7,7,8,8,9]
Force andEnable to work on System (hence sampleN not needing an explicit
domain later):
>>>reg = register 5 (reg + 1)>>>f en = andEnable @System en reg>>>sampleN 10 (f (riseEvery d2))[5,5,5,6,6,7,7,8,8,9]
mux :: Applicative f => f Bool -> f a -> f a -> f a Source #
type System = "System" Source #
A clock (and reset) dom with clocks running at 100 MHz. Memory elements respond to the rising edge of the clock, and asynchronously to changes in reset signals. It has defined initial values, and active-high resets.
See module documentation of Clash.Explicit.Signal for more information on how to create custom synthesis domains.
clockPeriod :: forall (dom :: Domain) (period :: Nat). (KnownDomain dom, DomainPeriod dom ~ period) => SNat period Source #
Get the clock period from a KnownDomain context
resetSynchronizer :: forall (dom :: Domain). KnownDomain dom => Clock dom -> Reset dom -> Reset dom Source #
The resetSynchronizer will synchronize an incoming reset according to whether the domain is synchronous or asynchronous.
For asynchronous resets this synchronizer ensures the reset will only be de-asserted synchronously but it can still be asserted asynchronously. The reset assert is immediate, but reset de-assertion is delayed by two cycles.
Normally, asynchronous resets can be both asynchronously asserted and
de-asserted. Asynchronous de-assertion can induce meta-stability in the
component which is being reset. To ensure this doesn't happen,
resetSynchronizer ensures that de-assertion of a reset happens
synchronously. Assertion of the reset remains asynchronous.
Note that asynchronous assertion does not induce meta-stability in the component whose reset is asserted. However, when a component "A" in another clock or reset domain depends on the value of a component "B" being reset, then asynchronous assertion of the reset of component "B" can induce meta-stability in component "A". To prevent this from happening you need to use a proper synchronizer, for example one of the synchronizers in Clash.Explicit.Synchronizer.
For synchronous resets this function ensures that the reset is asserted and de-asserted synchronously. Both the assertion and de-assertion of the reset are delayed by two cycles.
Example 1
The circuit below detects a rising bit (i.e., a transition from 0 to 1) in a
given argument. It takes a reset that is not synchronized to any of the other
incoming signals and synchronizes it using resetSynchronizer.
topEntity
:: Clock System
-> Reset System
-> Signal System Bit
-> Signal System (BitVector 8)
topEntity clk asyncRst key1 =
withClockResetEnable clk rst enableGen leds
where
rst = resetSynchronizer clk asyncRst
key1R = isRising 1 key1
leds = mealy blinkerT (1, False, 0) key1R
Example 2
Similar to Example 1 this circuit detects a rising bit (i.e., a transition from 0 to 1) in a given argument. It takes a clock that is not stable yet and a reset signal that is not synchronized to any other signals. It stabilizes the clock and then synchronizes the reset signal.
Note that the function altpllSync provides this
functionality in a convenient form, obviating the need for
resetSynchronizer for this use case.
topEntity
:: Clock System
-> Reset System
-> Signal System Bit
-> Signal System (BitVector 8)
topEntity clk rst key1 =
let (pllOut,pllStable) = unsafeAltpll clk rst
rstSync = resetSynchronizer pllOut (unsafeFromActiveLow pllStable)
in exposeClockResetEnable leds pllOut rstSync enableGen
where
key1R = isRising 1 key1
leds = mealy blinkerT (1, False, 0) key1R
Implementation details
resetSynchronizer implements the following circuit for asynchronous domains:
rst
--------------------------------------+
| |
+----v----+ +----v----+
deasserted | | | |
---------------> +-------> +-------->
| | | |
+---|> | +---|> |
| | | | | |
| +---------+ | +---------+
clk | |
-----------------------------+This corresponds to figure 3d at https://www.embedded.com/asynchronous-reset-synchronization-and-distribution-challenges-and-solutions/
For synchronous domains two sequential dflipflops are used:
+---------+ +---------+
rst | | | |
---------------> +-------> +-------->
| | | |
+---|> | +---|> |
| | | | | |
| +---------+ | +---------+
clk | |
-----------------------------+Arguments
| :: forall (dom :: Domain) (glitchlessPeriod :: Natural). (HasCallStack, HasDefinedInitialValues dom, 1 <= glitchlessPeriod) | |
| => SNat glitchlessPeriod | Consider a reset signal to be properly asserted after having seen the reset asserted for glitchlessPeriod cycles straight. |
| -> Clock dom | |
| -> Reset dom | |
| -> Reset dom |
Filter glitches from reset signals by only triggering a reset after it has been asserted for glitchlessPeriod cycles. Similarly, it will stay asserted until a glitchlessPeriod number of deasserted cycles have been observed.
This circuit can only be used on platforms supporting initial values. This
restriction can be worked around by using unsafeResetGlitchFilter but this
is not recommended.
On platforms without initial values, you should instead use
resetGlitchFilterWithReset with an additional power-on reset, or
holdReset if filtering is only needed on deassertion.
At power-on, the reset will be asserted. If the filtered reset input remains unasserted, the output reset will deassert after glitchlessPeriod clock cycles.
If resetGlitchFilter is used in a domain with asynchronous resets
(Asynchronous), resetGlitchFilter will first synchronize the reset input
with dualFlipFlopSynchronizer.
Example 1
>>>let sampleResetN n = sampleN n . unsafeToActiveHigh>>>let resetFromList = unsafeFromActiveHigh . fromList>>>let rst = resetFromList [True, True, False, False, True, False, False, True, True, False, True, True]>>>sampleResetN 12 (resetGlitchFilter d2 (clockGen @XilinxSystem) rst)[True,True,True,True,False,False,False,False,False,True,True,True]
Arguments
| :: forall (dom :: Domain) (m :: Nat). HiddenClockResetEnable dom | |
| => SNat m | Hold for m cycles, counting from the moment the incoming reset signal becomes deasserted. |
| -> Reset dom |
Hold reset for a number of cycles relative to an implicit reset signal.
Example:
>>>sampleN @System 8 (unsafeToActiveHigh (holdReset (SNat @2)))[True,True,True,False,False,False,False,False]
holdReset holds the reset for an additional 2 clock cycles for a total
of 3 clock cycles where the reset is asserted.
resetGen :: forall (dom :: Domain). KnownDomain dom => Reset dom Source #
Reset generator for simulation purposes. Asserts the reset for a single cycle.
To be used like:
rstSystem = resetGen @System
See tbClockGen for example usage.
NB: While this can be used in the testBench function, it cannot be
synthesized to hardware.
Arguments
| :: forall (dom :: Domain) (n :: Natural). (KnownDomain dom, 1 <= n) | |
| => SNat n | Number of initial cycles to hold reset high |
| -> Reset dom |
Reset generator for simulation purposes. Asserts the reset for the first n cycles.
To be used like:
rstSystem5 = resetGen @System d5
Example usage:
>>>sampleN 7 (unsafeToActiveHigh (resetGenN @System d3))[True,True,True,False,False,False,False]
NB: While this can be used in the testBench function, it cannot be
synthesized to hardware.
resetKind :: forall (dom :: Domain) (sync :: ResetKind). (KnownDomain dom, DomainResetKind dom ~ sync) => SResetKind sync Source #
Get ResetKind from a KnownDomain context. Example usage:
f :: forall dom . KnownDomain dom => ....
f a b c =
case resetKind @dom of
SAsynchronous -> foo
SSynchronous -> bar
systemResetGen :: Reset System Source #
Reset generator for use in simulation, for the System clock domain.
Asserts the reset for a single cycle.
NB: While this can be used in the testBench function, it cannot be
synthesized to hardware.
Example
topEntity :: Vec 2 (Vec 3 (Unsigned 8)) -> Vec 6 (Unsigned 8)
topEntity = concat
testBench :: Signal System Bool
testBench = done
where
testInput = pure ((1 :> 2 :> 3 :> Nil) :> (4 :> 5 :> 6 :> Nil) :> Nil)
expectedOutput = outputVerifier' ((1:>2:>3:>4:>5:>6:>Nil):>Nil)
done = exposeClockResetEnable (expectedOutput (topEntity <$> testInput)) clk rst
clk = tbSystemClockGen (not <$> done)
rst = systemResetGen
unsafeToReset :: forall (dom :: Domain). KnownDomain dom => Signal dom Bool -> Reset dom Source #
unsafeToReset is unsafe. For asynchronous resets it is unsafe
because it can introduce combinatorial loops. In case of synchronous resets
it can lead to meta-stability
issues in the presence of asynchronous resets.
NB: You probably want to use unsafeFromActiveLow or
unsafeFromActiveHigh.
unsafeFromReset :: forall (dom :: Domain). Reset dom -> Signal dom Bool Source #
unsafeFromReset is unsafe because it can introduce:
For asynchronous resets it is unsafe because it can cause combinatorial loops. In case of synchronous resets it can lead to meta-stability in the presence of asynchronous resets.
NB: You probably want to use unsafeToActiveLow or
unsafeToActiveHigh.
unsafeToActiveHigh :: forall (dom :: Domain). KnownDomain dom => Reset dom -> Signal dom Bool Source #
Convert a reset to an active high reset. Has no effect if reset is already an active high reset. Is unsafe because it can introduce:
For asynchronous resets it is unsafe because it can cause combinatorial loops. In case of synchronous resets it can lead to meta-stability in the presence of asynchronous resets.
unsafeToActiveLow :: forall (dom :: Domain). KnownDomain dom => Reset dom -> Signal dom Bool Source #
Convert a reset to an active low reset. Has no effect if reset is already an active low reset. It is unsafe because it can introduce:
For asynchronous resets it is unsafe because it can cause combinatorial loops. In case of synchronous resets it can lead to meta-stability in the presence of asynchronous resets.
Arguments
| :: forall (dom :: Domain). KnownDomain dom | |
| => Signal dom Bool | Reset signal that's |
| -> Reset dom |
Interpret a signal of bools as an active high reset and convert it to a reset signal corresponding to the domain's setting.
For asynchronous resets it is unsafe because it can cause combinatorial loops. In case of synchronous resets it can lead to meta-stability in the presence of asynchronous resets.
Arguments
| :: forall (dom :: Domain). KnownDomain dom | |
| => Signal dom Bool | Reset signal that's |
| -> Reset dom |
Interpret a signal of bools as an active low reset and convert it to a reset signal corresponding to the domain's setting.
For asynchronous resets it is unsafe because it can cause combinatorial loops. In case of synchronous resets it can lead to meta-stability in the presence of asynchronous resets.
unsafeFromHighPolarity Source #
Arguments
| :: forall (dom :: Domain). KnownDomain dom | |
| => Signal dom Bool | Reset signal that's |
| -> Reset dom |
Deprecated: Use unsafeFromActiveHigh instead. This function will be removed in Clash 1.12.
Interpret a signal of bools as an active high reset and convert it to a reset signal corresponding to the domain's setting.
For asynchronous resets it is unsafe because it can cause combinatorial loops. In case of synchronous resets it can lead to meta-stability in the presence of asynchronous resets.
unsafeFromLowPolarity Source #
Arguments
| :: forall (dom :: Domain). KnownDomain dom | |
| => Signal dom Bool | Reset signal that's |
| -> Reset dom |
Deprecated: Use unsafeFromActiveLow instead. This function will be removed in Clash 1.12.
Interpret a signal of bools as an active low reset and convert it to a reset signal corresponding to the domain's setting.
For asynchronous resets it is unsafe because it can cause combinatorial loops. In case of synchronous resets it can lead to meta-stability in the presence of asynchronous resets.
unsafeToHighPolarity :: forall (dom :: Domain). KnownDomain dom => Reset dom -> Signal dom Bool Source #
Deprecated: Use unsafeToActiveHigh instead. This function will be removed in Clash 1.12.
Convert a reset to an active high reset. Has no effect if reset is already an active high reset. Is unsafe because it can introduce:
For asynchronous resets it is unsafe because it can cause combinatorial loops. In case of synchronous resets it can lead to meta-stability in the presence of asynchronous resets.
unsafeToLowPolarity :: forall (dom :: Domain). KnownDomain dom => Reset dom -> Signal dom Bool Source #
Deprecated: Use unsafeToActiveLow instead. This function will be removed in Clash 1.12.
Convert a reset to an active low reset. Has no effect if reset is already an active low reset. It is unsafe because it can introduce:
For asynchronous resets it is unsafe because it can cause combinatorial loops. In case of synchronous resets it can lead to meta-stability in the presence of asynchronous resets.
data BiSignalIn (ds :: BiSignalDefault) (dom :: Domain) (n :: Nat) Source #
The in part of an inout port. BiSignalIn has the type role
>>>:i BiSignalIntype role BiSignalIn nominal nominal nominal ...
as it is not safe to coerce the default behaviour, synthesis domain or width of the data in the signal.
data BiSignalOut (ds :: BiSignalDefault) (dom :: Domain) (n :: Nat) Source #
The out part of an inout port
Wraps (multiple) writing signals. The semantics are such that only one of the signals may write at a single time step.
BiSignalOut has the type role
>>>:i BiSignalOuttype role BiSignalOut nominal nominal nominal ...
as it is not safe to coerce the default behaviour, synthesis domain or width of the data in the signal.
Instances
| Monoid (BiSignalOut defaultState dom n) Source # | Monoid instance to support concatenating NB: Not synthesizable |
Defined in Clash.Signal.BiSignal Methods mempty :: BiSignalOut defaultState dom n Source # mappend :: BiSignalOut defaultState dom n -> BiSignalOut defaultState dom n -> BiSignalOut defaultState dom n Source # mconcat :: [BiSignalOut defaultState dom n] -> BiSignalOut defaultState dom n Source # | |
| Semigroup (BiSignalOut defaultState dom n) Source # | NB: Not synthesizable |
Defined in Clash.Signal.BiSignal Methods (<>) :: BiSignalOut defaultState dom n -> BiSignalOut defaultState dom n -> BiSignalOut defaultState dom n Source # sconcat :: NonEmpty (BiSignalOut defaultState dom n) -> BiSignalOut defaultState dom n Source # stimes :: Integral b => b -> BiSignalOut defaultState dom n -> BiSignalOut defaultState dom n Source # | |
| type TryDomain t (BiSignalOut ds dom n) Source # | |
Defined in Clash.Signal.BiSignal | |
| type HasDomain dom1 (BiSignalOut ds dom2 n) Source # | |
Defined in Clash.Signal.BiSignal | |
type KnownConfiguration (dom :: Domain) (conf :: DomainConfiguration) = (KnownDomain dom, KnownConf dom ~ conf) Source #
data ActiveEdge Source #
Determines clock edge memory elements are sensitive to. Not yet implemented.
Constructors
| Rising | Elements are sensitive to the rising edge (low-to-high) of the clock. |
| Falling | Elements are sensitive to the falling edge (high-to-low) of the clock. |
Instances
| Binary ActiveEdge Source # | |||||
Defined in Clash.Signal.Internal Methods put :: ActiveEdge -> Put Source # get :: Get ActiveEdge Source # putList :: [ActiveEdge] -> Put Source # | |||||
| NFData ActiveEdge Source # | |||||
Defined in Clash.Signal.Internal Methods rnf :: ActiveEdge -> () Source # | |||||
| Data ActiveEdge Source # | |||||
Defined in Clash.Signal.Internal Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ActiveEdge -> c ActiveEdge Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ActiveEdge Source # toConstr :: ActiveEdge -> Constr Source # dataTypeOf :: ActiveEdge -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ActiveEdge) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ActiveEdge) Source # gmapT :: (forall b. Data b => b -> b) -> ActiveEdge -> ActiveEdge Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ActiveEdge -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ActiveEdge -> r Source # gmapQ :: (forall d. Data d => d -> u) -> ActiveEdge -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> ActiveEdge -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> ActiveEdge -> m ActiveEdge Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ActiveEdge -> m ActiveEdge Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ActiveEdge -> m ActiveEdge Source # | |||||
| Generic ActiveEdge Source # | |||||
Defined in Clash.Signal.Internal Associated Types
| |||||
| Read ActiveEdge Source # | |||||
Defined in Clash.Signal.Internal | |||||
| Show ActiveEdge Source # | |||||
Defined in Clash.Signal.Internal | |||||
| Eq ActiveEdge Source # | |||||
Defined in Clash.Signal.Internal Methods (==) :: ActiveEdge -> ActiveEdge -> Bool Source # (/=) :: ActiveEdge -> ActiveEdge -> Bool Source # | |||||
| Ord ActiveEdge Source # | |||||
Defined in Clash.Signal.Internal Methods compare :: ActiveEdge -> ActiveEdge -> Ordering Source # (<) :: ActiveEdge -> ActiveEdge -> Bool Source # (<=) :: ActiveEdge -> ActiveEdge -> Bool Source # (>) :: ActiveEdge -> ActiveEdge -> Bool Source # (>=) :: ActiveEdge -> ActiveEdge -> Bool Source # max :: ActiveEdge -> ActiveEdge -> ActiveEdge Source # min :: ActiveEdge -> ActiveEdge -> ActiveEdge Source # | |||||
| Hashable ActiveEdge Source # | |||||
Defined in Clash.Signal.Internal | |||||
| type Rep ActiveEdge Source # | |||||
data SActiveEdge (edge :: ActiveEdge) where Source #
Singleton version of ActiveEdge
Constructors
| SRising :: SActiveEdge 'Rising | |
| SFalling :: SActiveEdge 'Falling |
Instances
| Show (SActiveEdge edge) Source # | |
Defined in Clash.Signal.Internal | |
data SInitBehavior (init :: InitBehavior) where Source #
Constructors
| SUnknown :: SInitBehavior 'Unknown | |
| SDefined :: SInitBehavior 'Defined |
Instances
| Show (SInitBehavior init) Source # | |
Defined in Clash.Signal.Internal | |
Constructors
| Asynchronous | Elements respond asynchronously to changes in their reset input. This means that they do not wait for the next active clock edge, but respond immediately instead. Common on Intel FPGA platforms. |
| Synchronous | Elements respond synchronously to changes in their reset input. This means that changes in their reset input won't take effect until the next active clock edge. Common on Xilinx FPGA platforms. |
Instances
| Binary ResetKind Source # | |
| NFData ResetKind Source # | |
Defined in Clash.Signal.Internal | |
| Data ResetKind Source # | |
Defined in Clash.Signal.Internal Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ResetKind -> c ResetKind Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ResetKind Source # toConstr :: ResetKind -> Constr Source # dataTypeOf :: ResetKind -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ResetKind) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ResetKind) Source # gmapT :: (forall b. Data b => b -> b) -> ResetKind -> ResetKind Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ResetKind -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ResetKind -> r Source # gmapQ :: (forall d. Data d => d -> u) -> ResetKind -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> ResetKind -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> ResetKind -> m ResetKind Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ResetKind -> m ResetKind Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ResetKind -> m ResetKind Source # | |
| Generic ResetKind Source # | |
Defined in Clash.Signal.Internal | |
| Read ResetKind Source # | |
| Show ResetKind Source # | |
| Eq ResetKind Source # | |
| Ord ResetKind Source # | |
Defined in Clash.Signal.Internal | |
| Hashable ResetKind Source # | |
Defined in Clash.Signal.Internal | |
| type Rep ResetKind Source # | |
data SResetKind (resetKind :: ResetKind) where Source #
Singleton version of ResetKind
Constructors
| SAsynchronous :: SResetKind 'Asynchronous | |
| SSynchronous :: SResetKind 'Synchronous |
Instances
| Show (SResetKind reset) Source # | |
Defined in Clash.Signal.Internal | |
data ResetPolarity Source #
Determines the value for which a reset line is considered "active"
Constructors
| ActiveHigh | Reset is considered active if underlying signal is |
| ActiveLow | Reset is considered active if underlying signal is |
Instances
| Binary ResetPolarity Source # | |||||
Defined in Clash.Signal.Internal Methods put :: ResetPolarity -> Put Source # get :: Get ResetPolarity Source # putList :: [ResetPolarity] -> Put Source # | |||||
| NFData ResetPolarity Source # | |||||
Defined in Clash.Signal.Internal Methods rnf :: ResetPolarity -> () Source # | |||||
| Data ResetPolarity Source # | |||||
Defined in Clash.Signal.Internal Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ResetPolarity -> c ResetPolarity Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ResetPolarity Source # toConstr :: ResetPolarity -> Constr Source # dataTypeOf :: ResetPolarity -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ResetPolarity) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ResetPolarity) Source # gmapT :: (forall b. Data b => b -> b) -> ResetPolarity -> ResetPolarity Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ResetPolarity -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ResetPolarity -> r Source # gmapQ :: (forall d. Data d => d -> u) -> ResetPolarity -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> ResetPolarity -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> ResetPolarity -> m ResetPolarity Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ResetPolarity -> m ResetPolarity Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ResetPolarity -> m ResetPolarity Source # | |||||
| Generic ResetPolarity Source # | |||||
Defined in Clash.Signal.Internal Associated Types
Methods from :: ResetPolarity -> Rep ResetPolarity x Source # to :: Rep ResetPolarity x -> ResetPolarity Source # | |||||
| Read ResetPolarity Source # | |||||
Defined in Clash.Signal.Internal | |||||
| Show ResetPolarity Source # | |||||
Defined in Clash.Signal.Internal | |||||
| Eq ResetPolarity Source # | |||||
Defined in Clash.Signal.Internal Methods (==) :: ResetPolarity -> ResetPolarity -> Bool Source # (/=) :: ResetPolarity -> ResetPolarity -> Bool Source # | |||||
| Ord ResetPolarity Source # | |||||
Defined in Clash.Signal.Internal Methods compare :: ResetPolarity -> ResetPolarity -> Ordering Source # (<) :: ResetPolarity -> ResetPolarity -> Bool Source # (<=) :: ResetPolarity -> ResetPolarity -> Bool Source # (>) :: ResetPolarity -> ResetPolarity -> Bool Source # (>=) :: ResetPolarity -> ResetPolarity -> Bool Source # max :: ResetPolarity -> ResetPolarity -> ResetPolarity Source # min :: ResetPolarity -> ResetPolarity -> ResetPolarity Source # | |||||
| Hashable ResetPolarity Source # | |||||
Defined in Clash.Signal.Internal | |||||
| type Rep ResetPolarity Source # | |||||
data SResetPolarity (polarity :: ResetPolarity) where Source #
Singleton version of ResetPolarity
Constructors
| SActiveHigh :: SResetPolarity 'ActiveHigh | |
| SActiveLow :: SResetPolarity 'ActiveLow |
Instances
| Show (SResetPolarity polarity) Source # | |
Defined in Clash.Signal.Internal | |
data DomainConfiguration Source #
A domain with a name (Domain). Configures the behavior of various aspects
of a circuits. See the documentation of this record's field types for more
information on the options.
See module documentation of Clash.Explicit.Signal for more information on how to create custom synthesis domains.
Constructors
| DomainConfiguration | |
Fields
| |
data SDomainConfiguration (dom :: Domain) (conf :: DomainConfiguration) where Source #
Singleton version of DomainConfiguration
Constructors
| SDomainConfiguration | |
Fields
| |
Instances
| Show (SDomainConfiguration dom conf) Source # | |
Defined in Clash.Signal.Internal | |
type DomainPeriod (dom :: Domain) = DomainConfigurationPeriod (KnownConf dom) Source #
Convenience type to help to extract a period from a domain. Example usage:
myFunc :: (KnownDomain dom, DomainPeriod dom ~ 6000) => ...
type DomainActiveEdge (dom :: Domain) = DomainConfigurationActiveEdge (KnownConf dom) Source #
Convenience type to help to extract the active edge from a domain. Example usage:
myFunc :: (KnownDomain dom, DomainActiveEdge dom ~ 'Rising) => ...
type DomainResetKind (dom :: Domain) = DomainConfigurationResetKind (KnownConf dom) Source #
Convenience type to help to extract the reset synchronicity from a domain. Example usage:
myFunc :: (KnownDomain dom, DomainResetKind dom ~ 'Synchronous) => ...
type DomainInitBehavior (dom :: Domain) = DomainConfigurationInitBehavior (KnownConf dom) Source #
Convenience type to help to extract the initial value behavior from a domain. Example usage:
myFunc :: (KnownDomain dom, DomainInitBehavior dom ~ 'Defined) => ...
type DomainResetPolarity (dom :: Domain) = DomainConfigurationResetPolarity (KnownConf dom) Source #
Convenience type to help to extract the reset polarity from a domain. Example usage:
myFunc :: (KnownDomain dom, DomainResetPolarity dom ~ 'ActiveHigh) => ...
type HasSynchronousReset (dom :: Domain) = (KnownDomain dom, DomainResetKind dom ~ 'Synchronous) Source #
Convenience type to constrain a domain to have synchronous resets. Example usage:
myFunc :: HasSynchronousReset dom => ...
Using this type implies KnownDomain.
type HasAsynchronousReset (dom :: Domain) = (KnownDomain dom, DomainResetKind dom ~ 'Asynchronous) Source #
Convenience type to constrain a domain to have asynchronous resets. Example usage:
myFunc :: HasAsynchronousReset dom => ...
Using this type implies KnownDomain.
type HasDefinedInitialValues (dom :: Domain) = (KnownDomain dom, DomainInitBehavior dom ~ 'Defined) Source #
Convenience type to constrain a domain to have initial values. Example usage:
myFunc :: HasDefinedInitialValues dom => ...
Using this type implies KnownDomain.
Note that there is no UnknownInitialValues dom as a component that works
without initial values will also work if it does have them.
type XilinxSystem = "XilinxSystem" Source #
A clock (and reset) dom with clocks running at 100 MHz. Memory elements respond to the rising edge of the clock, and synchronously to changes in reset signals. It has defined initial values, and active-high resets.
See module documentation of Clash.Explicit.Signal for more information on how to create custom synthesis domains.
type IntelSystem = "IntelSystem" Source #
A clock (and reset) dom with clocks running at 100 MHz. Memory elements respond to the rising edge of the clock, and asynchronously to changes in reset signals. It has defined initial values, and active-high resets.
See module documentation of Clash.Explicit.Signal for more information on how to create custom synthesis domains.
vSystem :: VDomainConfiguration Source #
Convenience value to allow easy "subclassing" of System domain. Should
be used in combination with createDomain. For example, if you just want to
change the period but leave all other settings intact use:
createDomain vSystem{vName="System10", vPeriod=10}vIntelSystem :: VDomainConfiguration Source #
Convenience value to allow easy "subclassing" of IntelSystem domain. Should
be used in combination with createDomain. For example, if you just want to
change the period but leave all other settings intact use:
createDomain vIntelSystem{vName="Intel10", vPeriod=10}vXilinxSystem :: VDomainConfiguration Source #
Convenience value to allow easy "subclassing" of XilinxSystem domain. Should
be used in combination with createDomain. For example, if you just want to
change the period but leave all other settings intact use:
createDomain vXilinxSystem{vName="Xilinx10", vPeriod=10}data VDomainConfiguration Source #
Same as SDomainConfiguration but allows for easy updates through record update syntax.
Should be used in combination with vDomain and createDomain. Example:
createDomain (knownVDomain @System){vName="System10", vPeriod=10}This duplicates the settings in the System domain, replaces the name and
period, and creates an instance for it. As most users often want to update
the system domain, a shortcut is available in the form:
createDomain vSystem{vName="System10", vPeriod=10}Constructors
| VDomainConfiguration | |
Fields
| |
Instances
| Binary VDomainConfiguration Source # | |||||
Defined in Clash.Signal.Internal Methods put :: VDomainConfiguration -> Put Source # get :: Get VDomainConfiguration Source # putList :: [VDomainConfiguration] -> Put Source # | |||||
| NFData VDomainConfiguration Source # | |||||
Defined in Clash.Signal.Internal Methods rnf :: VDomainConfiguration -> () Source # | |||||
| Generic VDomainConfiguration Source # | |||||
Defined in Clash.Signal.Internal Associated Types
Methods from :: VDomainConfiguration -> Rep VDomainConfiguration x Source # to :: Rep VDomainConfiguration x -> VDomainConfiguration Source # | |||||
| Read VDomainConfiguration Source # | |||||
Defined in Clash.Signal.Internal | |||||
| Show VDomainConfiguration Source # | |||||
Defined in Clash.Signal.Internal | |||||
| Eq VDomainConfiguration Source # | |||||
Defined in Clash.Signal.Internal Methods (==) :: VDomainConfiguration -> VDomainConfiguration -> Bool Source # (/=) :: VDomainConfiguration -> VDomainConfiguration -> Bool Source # | |||||
| type Rep VDomainConfiguration Source # | |||||
Defined in Clash.Signal.Internal type Rep VDomainConfiguration = D1 ('MetaData "VDomainConfiguration" "Clash.Signal.Internal" "clash-prelude-1.8.4-1CKHk9HHRNIGPqhYHQsmcW" 'False) (C1 ('MetaCons "VDomainConfiguration" 'PrefixI 'True) ((S1 ('MetaSel ('Just "vName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: (S1 ('MetaSel ('Just "vPeriod") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Natural) :*: S1 ('MetaSel ('Just "vActiveEdge") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ActiveEdge))) :*: (S1 ('MetaSel ('Just "vResetKind") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ResetKind) :*: (S1 ('MetaSel ('Just "vInitBehavior") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 InitBehavior) :*: S1 ('MetaSel ('Just "vResetPolarity") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ResetPolarity))))) | |||||
vDomain :: forall (dom :: Domain) (conf :: DomainConfiguration). SDomainConfiguration dom conf -> VDomainConfiguration Source #
Convert SDomainConfiguration to VDomainConfiguration. Should be used in combination with
createDomain only.
createDomain :: VDomainConfiguration -> Q [Dec] Source #
Convenience method to express new domains in terms of others.
createDomain (knownVDomain @System){vName="System10", vPeriod=10}This duplicates the settings in the System domain, replaces the name and period, and creates an instance for it. As most users often want to update the system domain, a shortcut is available in the form:
createDomain vSystem{vName="System10", vPeriod=10}The function will create two extra identifiers. The first:
type System10 = ..
You can use that as the dom to Clocks/Resets/Enables/Signals. For example:
Signal System10 Int. Additionally, it will create a VDomainConfiguration that you can
use in later calls to createDomain:
vSystem10 = knownVDomain @System10
It will also make System10 an instance of KnownDomain.
If either identifier is already in scope it will not be generated a second time. Note: This can be useful for example when documenting a new domain:
-- | Here is some documentation for CustomDomain
type CustomDomain = ("CustomDomain" :: Domain)
-- | Here is some documentation for vCustomDomain
createDomain vSystem{vName="CustomDomain"}knownVDomain :: forall (dom :: Domain). KnownDomain dom => VDomainConfiguration Source #
Like 'knownDomain but yields a VDomainConfiguration. Should only be used
in combination with createDomain.
activeEdge :: forall (dom :: Domain) (edge :: ActiveEdge). (KnownDomain dom, DomainActiveEdge dom ~ edge) => SActiveEdge edge Source #
Get ActiveEdge from a KnownDomain context. Example usage:
f :: forall dom . KnownDomain dom => ....
f a b c =
case activeEdge @dom of
SRising -> foo
SFalling -> bar
initBehavior :: forall (dom :: Domain) (init :: InitBehavior). (KnownDomain dom, DomainInitBehavior dom ~ init) => SInitBehavior init Source #
Get InitBehavior from a KnownDomain context. Example usage:
f :: forall dom . KnownDomain dom => ....
f a b c =
case initBehavior @dom of
SDefined -> foo
SUnknown -> bar
resetPolarity :: forall (dom :: Domain) (polarity :: ResetPolarity). (KnownDomain dom, DomainResetPolarity dom ~ polarity) => SResetPolarity polarity Source #
Get ResetPolarity from a KnownDomain context. Example usage:
f :: forall dom . KnownDomain dom => ....
f a b c =
case resetPolarity @dom of
SActiveHigh -> foo
SActiveLow -> bar
toEnable :: forall (dom :: Domain). Signal dom Bool -> Enable dom Source #
Convert a signal of bools to an Enable construct
enableGen :: forall (dom :: Domain). Enable dom Source #
Enable generator for some domain. Is simply always True.
data DiffClock (dom :: Domain) Source #
A differential clock signal belonging to a domain named dom. The clock
input of a design with such an input has two ports which are in antiphase.
The first input is the positive phase, the second the negative phase. When
using makeTopEntity, the names of the inputs will end
in _p and _n respectively.
To create a differential clock in a test bench, you can use
clockToDiffClock.
periodToHz :: (HasCallStack, Fractional a) => Natural -> a Source #
Calculate the frequency in Hz, given the period in ps
I.e., to calculate the clock frequency of a clock with a period of 5000 ps:
>>>periodToHz 50002.0e8
Note that if p in periodToHz ( is negative,
fromIntegral p)fromIntegral will give an without a call stack, making debugging
cumbersome.Underflow ::
ArithException
Before Clash 1.8, this function always returned a Ratio
Natural. To get the old behavior of this function, use a type application:
>>>periodToHz @(Ratio Natural) 5000200000000 % 1
NB: This function is not synthesizable
hzToPeriod :: (HasCallStack, Integral a) => Ratio Natural -> a Source #
Calculate the period in ps, given a frequency in Hz
I.e., to calculate the clock period for a circuit to run at 240 MHz we get
>>>hzToPeriod 240e64166
If the value hzToPeriod is applied to is not of the type Ratio
Natural, you can use hzToPeriod (. Note that if realToFrac f)f is
negative, realToFrac will give an without a call stack, making debugging
cumbersome.Underflow ::
ArithException
Before Clash 1.8, this function always returned a Natural. To get the old
behavior of this function, use a type application:
>>>hzToPeriod @Natural 240e64166
- NB: This function is not synthesizable
- NB: This function is lossy. I.e.,
periodToHz . hzToPeriod /= id.
dflipflop :: forall (dom :: Domain) a. (HiddenClock dom, NFDataX a) => Signal dom a -> Signal dom a Source #
Special version of delay that doesn't take enable signals of any kind.
Initial value will be undefined.
Arguments
| :: forall (dom :: Domain) a. (NFDataX a, HiddenClock dom, HiddenEnable dom) | |
| => a | Initial value |
| -> Signal dom (Maybe a) | |
| -> Signal dom a |
Arguments
| :: forall (dom :: Domain) a. (NFDataX a, HiddenClock dom, HiddenEnable dom) | |
| => a | Initial value |
| -> Signal dom Bool | Enable |
| -> Signal dom a | |
| -> Signal dom a |
Version of delay that only updates when its second argument is asserted.
>>>let input = fromList [1,2,3,4,5,6,7::Int]>>>let enable = fromList [True,True,False,False,True,True,True]>>>sampleN @System 7 (delayEn 0 enable input)[0,1,2,2,2,5,6]
Arguments
| :: forall (dom :: Domain) a. (HiddenClockResetEnable dom, NFDataX a) | |
| => a | Reset value. |
| -> Signal dom (Maybe a) | |
| -> Signal dom a |
Version of register that only updates its content when its second
argument is a Just value. So given:
sometimes1 = s where s =registerNothing (switch<$>s) switch Nothing = Just 1 switch _ = Nothing countSometimes = s where s =regMaybe0 (plusM (pure<$>s) sometimes1) plusM =liftA2(liftA2 (+))
We get:
>>>sampleN @System 9 sometimes1[Nothing,Nothing,Just 1,Nothing,Just 1,Nothing,Just 1,Nothing,Just 1]>>>sampleN @System 9 countSometimes[0,0,0,1,1,2,2,3,3]
Arguments
| :: forall (dom :: Domain) a. (HiddenClockResetEnable dom, NFDataX a) | |
| => a | Reset value. |
| -> Signal dom Bool | |
| -> Signal dom a | |
| -> Signal dom a |
Version of register that only updates its content when its second argument
is asserted. So given:
oscillate =registerFalse (not<$>oscillate) count =regEn0 oscillate (count + 1)
We get:
>>>sampleN @System 9 oscillate[False,False,True,False,True,False,True,False,True]>>>sampleN @System 9 count[0,0,0,1,1,2,2,3,3]
clockGen :: forall (dom :: Domain). KnownDomain dom => Clock dom Source #
Clock generator for simulations. Do not use this clock generator for
the testBench function, use tbClockGen instead.
To be used like:
clkSystem = clockGen @System
See DomainConfiguration for more information on how to use synthesis domains.
systemClockGen :: Clock System Source #
Clock generator for the System clock domain.
NB: Should only be used for simulation, and not for the testBench
function. For the testBench function, used tbSystemClockGen
data EmptyTuple Source #
See TaggedEmptyTuple
Constructors
| EmptyTuple |
Instances
| Bundle EmptyTuple Source # | See commit 94b0bff5
and documentation for | ||||
Defined in Clash.Signal.Bundle Associated Types
Methods bundle :: forall (dom :: Domain). Unbundled dom EmptyTuple -> Signal dom EmptyTuple Source # unbundle :: forall (dom :: Domain). Signal dom EmptyTuple -> Unbundled dom EmptyTuple Source # | |||||
| Bundle EmptyTuple Source # | See commit 94b0bff5
and documentation for | ||||
Defined in Clash.Signal.Delayed.Bundle Associated Types
Methods bundle :: forall (dom :: Domain) (d :: Nat). Unbundled dom d EmptyTuple -> DSignal dom d EmptyTuple Source # unbundle :: forall (dom :: Domain) (d :: Nat). DSignal dom d EmptyTuple -> Unbundled dom d EmptyTuple Source # | |||||
| type Unbundled dom EmptyTuple Source # | |||||
Defined in Clash.Signal.Bundle | |||||
| type Unbundled dom d EmptyTuple Source # | |||||
Defined in Clash.Signal.Delayed.Bundle | |||||
data TaggedEmptyTuple (dom :: Domain) Source #
Helper type to emulate the "old" behavior of Bundle's unit instance. I.e.,
the instance for Bundle () used to be defined as:
class Bundle () where bundle :: () -> Signal dom () unbundle :: Signal dom () -> ()
In order to have sensible type inference, the Bundle class specifies that
the argument type of bundle should uniquely identify the result type, and
vice versa for unbundle. The type signatures in the snippet above don't
though, as () doesn't uniquely map to a specific domain. In other words,
domain should occur in both the argument and result of both functions.
TaggedEmptyTuple tackles this by carrying the domain in its type. The
bundle and unbundle instance now looks like:
class Bundle EmptyTuple where bundle :: TaggedEmptyTuple dom -> Signal dom EmptyTuple unbundle :: Signal dom EmptyTuple -> TaggedEmptyTuple dom
dom is now mentioned both the argument and result for both bundle and
unbundle.
Constructors
| TaggedEmptyTuple |
Arguments
| :: forall (dom :: Domain) a b. (KnownDomain dom, NFDataX a, NFDataX b) | |
| => (HiddenClockResetEnable dom => Signal dom a -> Signal dom b) | Circuit to simulate, whose source potentially has a hidden clock, reset, and/or enable. |
| -> [a] | |
| -> [b] |
Simulate a () function given a list of samples
of type aSignal a -> Signal b
>>>simulate @System (register 8) [1, 2, 3][8,1,2,3... ...
Where System denotes the domain to simulate on. The reset line is
asserted for a single cycle. The first value is therefore supplied twice to
the circuit: once while reset is high, and once directly after. The first
output value (the value produced while the reset is asserted) is dropped.
If you only want to simulate a finite number of samples, see simulateN. If
you need the reset line to be asserted for more than one cycle or if you
need a custom reset value, see simulateWithReset and simulateWithResetN.
NB: This function is not synthesizable
Arguments
| :: forall (dom :: Domain) a b. (KnownDomain dom, Bundle a, Bundle b, NFDataX a, NFDataX b) | |
| => (HiddenClockResetEnable dom => Unbundled dom a -> Unbundled dom b) | Function we want to simulate, whose components potentially have a hidden clock (and reset) |
| -> [a] | |
| -> [b] |
Arguments
| :: forall (dom :: Domain) a b (m :: Natural). (KnownDomain dom, NFDataX a, NFDataX b, 1 <= m) | |
| => SNat m | Number of cycles to assert the reset |
| -> a | Reset value |
| -> (HiddenClockResetEnable dom => Signal dom a -> Signal dom b) |
|
| -> [a] | |
| -> [b] |
Same as simulate, but with the reset line asserted for n cycles. Similar
to simulate, simulateWithReset will drop the output values produced while
the reset is asserted. While the reset is asserted, the reset value a is
supplied to the circuit.
Arguments
| :: forall (dom :: Domain) a b (m :: Natural). (KnownDomain dom, NFDataX a, NFDataX b, 1 <= m) | |
| => SNat m | Number of cycles to assert the reset |
| -> a | Reset value |
| -> Int | Number of cycles to simulate (excluding cycles spent in reset) |
| -> (HiddenClockResetEnable dom => Signal dom a -> Signal dom b) |
|
| -> [a] | |
| -> [b] |
Same as simulateWithReset, but only sample the first Int output values.
Arguments
| :: forall (dom :: Domain) a. (KnownDomain dom, NFDataX a, ShowX a) | |
| => (a -> Bool) | Condition checking function, should return |
| -> (HiddenClockResetEnable dom => Signal dom a) |
|
| -> IO () |
Simulate a component until it matches a condition
If the given component has not yet been given a clock, reset, or enable
line, runUntil will supply them. The reset will be asserted for a single
cycle.
It prints a message of the form
Signal sampled for N cycles until value X
NB: This function is not synthesizable
Example with test bench
A common usage is with a test bench using
outputVerifier.
NB: Since this uses assert, when using
clashi, read the note at Clash.Explicit.Testbench.
import Clash.Prelude import Clash.Explicit.Testbench topEntity ::SignalSystemInt ->SignalSystemInt topEntity = id testBench ::SignalSystemBool testBench = done where testInput =stimuliGeneratorclk rst $(listToVecTH[1 :: Int .. 10]) expectedOutput =outputVerifier'clk rst $(listToVecTH$ [1 :: Int .. 9]<>[42]) done = expectedOutput $ topEntity testInput clk =tbSystemClockGen(not <$> done) rst =systemResetGen
> runUntil id testBench cycle(<Clock: System>): 10, outputVerifier expected value: 42, not equal to actual value: 10 Signal sampled for 11 cycles until value True
When you need to verify multiple test benches, the following invocations come in handy:
> mapM_ (runUntil id) [ testBenchA, testBenchB ]
or when the test benches are in different clock domains:
testBenchA :: Signal DomA Bool testBenchB :: Signal DomB Bool
> sequence_ [ runUntil id testBenchA, runUntil id testBenchB ]
Arguments
| :: forall (dom :: Domain) a b. KnownDomain dom | |
| => (HiddenClockResetEnable dom => Signal dom a -> Signal dom b) | Function we want to simulate, whose components potentially have a hidden clock (and reset) |
| -> [a] | |
| -> [b] |
Arguments
| :: forall (dom :: Domain) a b. (KnownDomain dom, Bundle a, Bundle b) | |
| => (HiddenClockResetEnable dom => Unbundled dom a -> Unbundled dom b) | Function we want to simulate, whose components potentially have a hidden clock (and reset) |
| -> [a] | |
| -> [b] |
signalAutomaton :: forall (dom :: Domain) a b. KnownDomain dom => (HiddenClockResetEnable dom => Signal dom a -> Signal dom b) -> Automaton (->) a b Source #
Build an Automaton from a function over Signals.
NB: Consumption of continuation of the Automaton must be affine; that
is, you can only apply the continuation associated with a particular element
at most once.
Arguments
| :: forall (dom :: Domain) a. (KnownDomain dom, NFDataX a) | |
| => Int | Number of samples to produce |
| -> (HiddenClockResetEnable dom => Signal dom a) |
|
| -> [a] |
Get a list of n samples from a Signal
The elements in the list correspond to the values of the Signal
at consecutive clock cycles
sampleN @System 3 s == [s0, s1, s2]
If the given component has not yet been given a clock, reset, or enable
line, sampleN will supply them. The reset will be asserted for a single
cycle. sampleN will not drop the value produced by the circuit while
the reset was asserted. If you want this, or if you want more than a
single cycle reset, consider using sampleWithResetN.
NB: This function is not synthesizable
Arguments
| :: forall (dom :: Domain) a (m :: Natural). (KnownDomain dom, NFDataX a, 1 <= m) | |
| => SNat m | Number of cycles to assert the reset |
| -> (HiddenClockResetEnable dom => Signal dom a) |
|
| -> [a] |
Get an infinite list of samples from a Signal, while asserting the reset
line for m clock cycles. sampleWithReset does not return the first m
cycles, i.e., when the reset is asserted.
NB: This function is not synthesizable
Arguments
| :: forall (dom :: Domain) a (m :: Natural). (KnownDomain dom, NFDataX a, 1 <= m) | |
| => SNat m | Number of cycles to assert the reset |
| -> Int | Number of samples to produce |
| -> (HiddenClockResetEnable dom => Signal dom a) |
|
| -> [a] |
Get a list of n samples from a Signal, while asserting the reset line
for m clock cycles. sampleWithReset does not return the first m cycles,
i.e., while the reset is asserted.
NB: This function is not synthesizable
fromListWithReset :: forall (dom :: Domain) a. (HiddenReset dom, NFDataX a) => a -> [a] -> Signal dom a Source #
Like fromList, but resets on reset and has a defined reset value.
>>>let rst = unsafeFromActiveHigh (fromList [True, True, False, False, True, False])>>>let res = withReset rst (fromListWithReset Nothing [Just 'a', Just 'b', Just 'c'])>>>sampleN @System 6 res[Nothing,Nothing,Just 'a',Just 'b',Nothing,Just 'a']
NB: This function is not synthesizable
Arguments
| :: forall (dom :: Domain) a. KnownDomain dom | |
| => (HiddenClockResetEnable dom => Signal dom a) |
|
| -> [a] |
Lazily get an infinite list of samples from a Signal
The elements in the list correspond to the values of the Signal
at consecutive clock cycles
sample s == [s0, s1, s2, s3, ...
If the given component has not yet been given a clock, reset, or enable
line, sample_lazy will supply them. The reset will be asserted for a
single cycle. sample_lazy will not drop the value produced by the
circuit while the reset was asserted.
NB: This function is not synthesizable
Arguments
| :: forall (dom :: Domain) a. KnownDomain dom | |
| => Int | |
| -> (HiddenClockResetEnable dom => Signal dom a) |
|
| -> [a] |
Lazily get a list of n samples from a Signal
The elements in the list correspond to the values of the Signal
at consecutive clock cycles
sampleN @System 3 s == [s0, s1, s2]
If the given component has not yet been given a clock, reset, or enable
line, sampleN_lazy will supply them. The reset will be asserted for a
single cycle. sampleN_lazy will not drop the value produced by the
circuit while the reset was asserted.
NB: This function is not synthesizable
fromList_lazy :: forall a (dom :: Domain). [a] -> Signal dom a Source #
Create a Signal from a list
Every element in the list will correspond to a value of the signal for one clock cycle.
>>>sampleN 2 (fromList [1,2,3,4,5] :: Signal System Int)[1,2]
NB: This function is not synthesizable
Arguments
| :: forall (dom :: Domain). KnownDomain dom | |
| => Int | The number of cycles we want to test for |
| -> (HiddenClockResetEnable dom => Signal dom Bool) |
|
| -> Property |
testFor n s tests the signal s for n cycles.
NB: This function is not synthesizable
veryUnsafeToBiSignalIn :: forall (n :: Nat) (ds :: BiSignalDefault) (d :: Domain). (HasCallStack, KnownNat n, Given (SBiSignalDefault ds)) => BiSignalOut ds d n -> BiSignalIn ds d n Source #
Converts the out part of a BiSignal to an in part. In simulation it
checks whether multiple components are writing and will error accordingly.
Make sure this is only called ONCE for every BiSignal.
Arguments
| :: forall a (ds :: BiSignalDefault) (d :: Domain). (HasCallStack, BitPack a) | |
| => BiSignalIn ds d (BitSize a) | A |
| -> Signal d a |
Read the value from an inout port
Arguments
| :: forall a (ds :: BiSignalDefault) (d :: Domain). (HasCallStack, BitPack a, NFDataX a) | |
| => BiSignalIn ds d (BitSize a) | |
| -> Signal d (Maybe a) | Value to write
|
| -> BiSignalOut ds d (BitSize a) |
Write to an inout port
mergeBiSignalOuts :: forall (n :: Nat) (defaultState :: BiSignalDefault) (dom :: Domain) (m :: Nat). (HasCallStack, KnownNat n) => Vec n (BiSignalOut defaultState dom m) -> BiSignalOut defaultState dom m Source #
Combine several inout signals into one.
Arguments
| :: forall (dom :: Domain) r. HiddenClock dom | |
| => (Clock dom -> r) | Function whose clock argument you want to hide |
| -> r |
Hide the Clock argument of a component, so it can be routed implicitly.
Click here to read more about hidden clocks, resets, and enables
Arguments
| :: forall (dom :: Domain) r. HiddenEnable dom | |
| => (Enable dom -> r) | Component whose enable argument you want to hide |
| -> r |
Hide the Enable argument of a component, so it can be routed implicitly.
Click here to read more about hidden clocks, resets, and enables
Arguments
| :: forall (dom :: Domain) r. HiddenReset dom | |
| => (Reset dom -> r) | Component whose reset argument you want to hide |
| -> r |
Hide the Reset argument of a component, so it can be routed implicitly.
Click here to read more about hidden clocks, resets, and enables
Arguments
| :: forall (dom :: Domain) r. HiddenClockResetEnable dom | |
| => (KnownDomain dom => Clock dom -> Reset dom -> Enable dom -> r) | Component whose clock, reset, and enable argument you want to hide |
| -> r |
Hide the Clock, Reset, and Enable arguments of a component, so they
can be routed implicitly.
Click here to read more about hidden clocks, resets, and enables
sameDomain :: forall (domA :: Domain) (domB :: Domain). (KnownDomain domA, KnownDomain domB) => Maybe (domA :~: domB) Source #
We either get evidence that this function was instantiated with the same domains, or Nothing.
Arguments
| :: forall (dom :: Domain) r. (HiddenClock dom => r) | The component with a hidden clock |
| -> KnownDomain dom | |
| => Clock dom | The component with its clock argument exposed |
| -> r |
Expose a hidden Clock argument of a component, so it can be applied
explicitly.
# 662 "srcClashSignal.hs" Click here to read more about hidden clocks, resets, and enables
Example
Usage with a polymorphic domain:
>>>reg = register 5 (reg + 1)>>>sig = exposeClock reg clockGen>>>sampleN @System 10 sig[5,5,6,7,8,9,10,11,12,13]
Force exposeClock to work on System (hence sampleN not needing an explicit
domain later):
>>>reg = register 5 (reg + 1)>>>sig = exposeClock @System reg clockGen>>>sampleN 10 sig[5,5,6,7,8,9,10,11,12,13]
Arguments
| :: forall (dom :: Domain) r. KnownDomain dom | |
| => Clock dom | The |
| -> (HiddenClock dom => r) | The function with a hidden |
| -> r |
Connect an explicit Clock to a function with a hidden Clock.
# 808 "srcClashSignal.hs" Click here to read more about hidden clocks, resets, and enables
Example
Usage with a polymorphic domain:
>>>reg = register 5 (reg + 1)>>>sig = withClock clockGen reg>>>sampleN @System 10 sig[5,5,6,7,8,9,10,11,12,13]
Force withClock to work on System (hence sampleN not needing an explicit
domain later):
>>>reg = register 5 (reg + 1)>>>sig = withClock @System clockGen reg>>>sampleN 10 sig[5,5,6,7,8,9,10,11,12,13]
hasClock :: forall (dom :: Domain). HiddenClock dom => Clock dom Source #
Connect a hidden Clock to an argument where a normal Clock argument
was expected.
Click here to read more about hidden clocks, resets, and enables
Arguments
| :: forall (dom :: Domain) r. (HiddenReset dom => r) | The component with a hidden reset |
| -> KnownDomain dom | |
| => Reset dom | The component with its reset argument exposed |
| -> r |
Expose a hidden Reset argument of a component, so it can be applied
explicitly.
# 912 "srcClashSignal.hs" === Example Usage with a polymorphic domain:
>>>reg = register 5 (reg + 1)>>>sig = exposeReset reg resetGen>>>sampleN @System 10 sig[5,5,6,7,8,9,10,11,12,13]
Force exposeReset to work on System (hence sampleN not needing an explicit
domain later):
>>>reg = register 5 (reg + 1)>>>sig = exposeReset @System reg resetGen>>>sampleN 10 sig[5,5,6,7,8,9,10,11,12,13]
Arguments
| :: forall (dom :: Domain) r. KnownDomain dom | |
| => Reset dom | The |
| -> (HiddenReset dom => r) | The function with a hidden |
| -> r |
Connect an explicit Reset to a function with a hidden Reset.
# 1011 "srcClashSignal.hs" === Example Usage with a polymorphic domain:
>>>reg = register 5 (reg + 1)>>>sig = withReset resetGen reg>>>sampleN @System 10 sig[5,5,6,7,8,9,10,11,12,13]
Force withReset to work on System (hence sampleN not needing an explicit
domain later):
>>>reg = register 5 (reg + 1)>>>sig = withReset @System resetGen reg>>>sampleN 10 sig[5,5,6,7,8,9,10,11,12,13]
hasReset :: forall (dom :: Domain). HiddenReset dom => Reset dom Source #
Connect a hidden Reset to an argument where a normal Reset argument
was expected.
Click here to read more about hidden clocks, resets, and enables
Arguments
| :: forall (dom :: Domain) r. (HiddenEnable dom => r) | The component with a hidden enable |
| -> KnownDomain dom | |
| => Enable dom | The component with its enable argument exposed |
| -> r |
Expose a hidden Enable argument of a component, so it can be applied
explicitly.
# 1110 "srcClashSignal.hs" Click here to read more about hidden clocks, resets, and enables
Example
Usage with a polymorphic domain:
>>>reg = register 5 (reg + 1)>>>sig = exposeEnable reg enableGen>>>sampleN @System 10 sig[5,5,6,7,8,9,10,11,12,13]
Force exposeEnable to work on System (hence sampleN not needing an
explicit domain later):
>>>reg = register 5 (reg + 1)>>>sig = exposeEnable @System reg enableGen>>>sampleN 10 sig[5,5,6,7,8,9,10,11,12,13]
Arguments
| :: forall (dom :: Domain) r. KnownDomain dom | |
| => Enable dom | The |
| -> (HiddenEnable dom => r) | The function with a hidden |
| -> r |
Connect an explicit Enable to a function with a hidden Enable.
# 1208 "srcClashSignal.hs" Click here to read more about hidden clocks, resets, and enables
Example
Usage with a polymorphic domain:
>>>reg = register 5 (reg + 1)>>>sig = withEnable enableGen reg>>>sampleN @System 10 sig[5,5,6,7,8,9,10,11,12,13]
Force withEnable to work on System (hence sampleN not needing an explicit
domain later):
>>>reg = register 5 (reg + 1)>>>sig = withEnable @System enableGen reg>>>sampleN 10 sig[5,5,6,7,8,9,10,11,12,13]
hasEnable :: forall (dom :: Domain). HiddenEnable dom => Enable dom Source #
Connect a hidden Enable to an argument where a normal Enable argument
was expected.
Click here to read more about hidden clocks, resets, and enables
exposeClockResetEnable Source #
Arguments
| :: forall (dom :: Domain) r. (HiddenClockResetEnable dom => r) | The component with hidden clock, reset, and enable arguments |
| -> KnownDomain dom | |
| => Clock dom | The component with its clock, reset, and enable arguments exposed |
| -> Reset dom | |
| -> Enable dom | |
| -> r |
Expose hidden Clock, Reset, and Enable arguments of a component, so
they can be applied explicitly.
# 1424 "srcClashSignal.hs" Click here to read more about hidden clocks, resets, and enables
Example
Usage with a polymorphic domain:
>>>reg = register 5 (reg + 1)>>>sig = exposeClockResetEnable reg clockGen resetGen enableGen>>>sampleN @System 10 sig[5,5,6,7,8,9,10,11,12,13]
Force exposeClockResetEnable to work on System (hence sampleN not needing
an explicit domain later):
>>>reg = register 5 (reg + 1)>>>sig = exposeClockResetEnable @System reg clockGen resetGen enableGen>>>sampleN 10 sig[5,5,6,7,8,9,10,11,12,13]
Usage in a testbench context:
topEntity :: Vec 2 (Vec 3 (Unsigned 8)) -> Vec 6 (Unsigned 8)
topEntity = concat
testBench :: Signal System Bool
testBench = done
where
testInput = pure ((1 :> 2 :> 3 :> Nil) :> (4 :> 5 :> 6 :> Nil) :> Nil)
expectedOutput = outputVerifier' ((1:>2:>3:>4:>5:>6:>Nil):>Nil)
done = exposeClockResetEnable (expectedOutput (topEntity <$> testInput)) clk rst en
clk = tbSystemClockGen (not <$> done)
rst = systemResetGen
en = enableGen
Arguments
| :: forall (dom :: Domain) r. KnownDomain dom | |
| => Clock dom | The |
| -> Reset dom | The |
| -> Enable dom | The |
| -> (HiddenClockResetEnable dom => r) | The function with a hidden |
| -> r |
Connect an explicit Clock, Reset, and Enable to a function with a
hidden Clock, Reset, and Enable.
# 1550 "srcClashSignal.hs" Click here to read more about hidden clocks, resets, and enables
Example
Usage with a polymorphic domain:
>>>reg = register 5 (reg + 1)>>>sig = withClockResetEnable clockGen resetGen enableGen reg>>>sampleN @System 10 sig[5,5,6,7,8,9,10,11,12,13]
Force withClockResetEnable to work on System (hence sampleN not needing
an explicit domain later):
>>>reg = register 5 (reg + 1)>>>sig = withClockResetEnable @System clockGen resetGen enableGen reg>>>sampleN 10 sig[5,5,6,7,8,9,10,11,12,13]
type SystemClockResetEnable = (Hidden (HiddenClockName System) (Clock System), Hidden (HiddenResetName System) (Reset System), Hidden (HiddenEnableName System) (Enable System)) Source #
A constraint that indicates the component needs a Clock, a Reset,
and an Enable belonging to the System domain.
Click here to read more about hidden clocks, resets, and enables
Arguments
| :: forall (dom :: Domain) a b. (KnownDomain dom, NFDataX a, NFDataX b) | |
| => Int | Number of cycles to simulate (excluding cycle spent in reset) |
| -> (HiddenClockResetEnable dom => Signal dom a -> Signal dom b) |
|
| -> [a] | |
| -> [b] |
Same as simulate, but only sample the first Int output values.
NB: This function is not synthesizable
type family KnownConf (dom :: Domain) :: DomainConfiguration Source #
Instances
| type KnownConf IntelSystem Source # | |
Defined in Clash.Signal.Internal type KnownConf IntelSystem = 'DomainConfiguration IntelSystem 10000 'Rising 'Asynchronous 'Defined 'ActiveHigh | |
| type KnownConf System Source # | |
Defined in Clash.Signal.Internal type KnownConf System = 'DomainConfiguration System 10000 'Rising 'Asynchronous 'Defined 'ActiveHigh | |
| type KnownConf XilinxSystem Source # | |
Defined in Clash.Signal.Internal type KnownConf XilinxSystem = 'DomainConfiguration XilinxSystem 10000 'Rising 'Synchronous 'Defined 'ActiveHigh | |
type family Unbundled (dom :: Domain) a = (res :: Type) | res -> dom a Source #
Instances
| type Unbundled dom EmptyTuple Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom Bit Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom Integer Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom () Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom Bool Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom Double Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom Float Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom Int Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom (BitVector n) Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom (Index n) Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom (Signed n) Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom (Unsigned n) Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom (Maybe a) Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom (Either a b) Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled t (RTree d a) Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled t (Vec n a) Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled t (a1, a2) Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled dom (Fixed rep int frac) Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled t (a1, a2, a3) Source # | |
Defined in Clash.Signal.Bundle | |
| type Unbundled t ((f :*: g) a) Source # | |
| type Unbundled t (a1, a2, a3, a4) Source # | |
| type Unbundled t (a1, a2, a3, a4, a5) Source # | |
| type Unbundled t (a1, a2, a3, a4, a5, a6) Source # | |
| type Unbundled t (a1, a2, a3, a4, a5, a6, a7) Source # | |
| type Unbundled t (a1, a2, a3, a4, a5, a6, a7, a8) Source # | |
| type Unbundled t (a1, a2, a3, a4, a5, a6, a7, a8, a9) Source # | |
| type Unbundled t (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) Source # | |
| type Unbundled t (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) Source # | |
| type Unbundled t (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source # | NB: The documentation only shows instances up to 3-tuples. By
default, instances up to and including 12-tuples will exist. If the flag
|
module Clash.Signal.Delayed
Datatypes
Bit vectors
module Clash.Sized.BitVector
Arbitrary-width numbers
module Clash.Sized.Signed
module Clash.Sized.Unsigned
module Clash.Sized.Index
Fixed point numbers
module Clash.Sized.Fixed
Fixed size vectors
toList :: forall (n :: Nat) a. Vec n a -> [a] Source #
Convert a vector to a list.
>>>toList (1:>2:>3:>Nil)[1,2,3]
NB: This function is not synthesizable
generate :: forall (n :: Nat) a. SNat n -> (a -> a) -> a -> Vec n a Source #
"generate n f x" returns a vector with n repeated applications of
f to x.
generate (SNat :: SNat 4) f x == (f x :> f (f x) :> f (f (f x)) :> f (f (f (f x))) :> Nil) generate d4 f x == (f x :> f (f x) :> f (f (f x)) :> f (f (f (f x))) :> Nil)
>>>generate d4 (+1) 12 :> 3 :> 4 :> 5 :> Nil
"generate n f z" corresponds to the following circuit layout:
(++) :: forall (n :: Nat) a (m :: Nat). Vec n a -> Vec m a -> Vec (n + m) a infixr 5 Source #
Append two vectors.
>>>(1:>2:>3:>Nil) ++ (7:>8:>Nil)1 :> 2 :> 3 :> 7 :> 8 :> Nil
foldr :: forall a b (n :: Nat). (a -> b -> b) -> b -> Vec n a -> b Source #
foldr, applied to a binary operator, a starting value (typically
the right-identity of the operator), and a vector, reduces the vector
using the binary operator, from right to left:
foldr f z (x1 :> ... :> xn1 :> xn :> Nil) == x1 `f` (... (xn1 `f` (xn `f` z))...) foldr r z Nil == z
>>>foldr (/) 1 (5 :> 4 :> 3 :> 2 :> Nil)1.875
"foldr f z xs" corresponds to the following circuit layout:
NB: " produces a linear structure, which has a depth, or
delay, of O(foldr f z xs"). Use length xsfold if your binary operator f is
associative, as " produces a structure with a depth of
O(log_2(fold f xs")).length xs
map :: forall a b (n :: Nat). (a -> b) -> Vec n a -> Vec n b Source #
"map f xs" is the vector obtained by applying f to each element
of xs, i.e.,
map f (x1 :> x2 :> ... :> xn :> Nil) == (f x1 :> f x2 :> ... :> f xn :> Nil)
and corresponds to the following circuit layout:
indices :: forall (n :: Nat). KnownNat n => SNat n -> Vec n (Index n) Source #
Generate a vector of indices.
>>>indices d40 :> 1 :> 2 :> 3 :> Nil
unfoldr :: forall (n :: Nat) s a. SNat n -> (s -> (a, s)) -> s -> Vec n a Source #
"unfoldr n f s" builds a vector of length n from a seed value s,
where every element a is created by successive calls of f on s. Unlike
unfoldr from Data.List the generating function f cannot
dictate the length of the resulting vector, it must be statically known.
a simple use of unfoldr:
>>>unfoldr d10 (\s -> (s,s-1)) 1010 :> 9 :> 8 :> 7 :> 6 :> 5 :> 4 :> 3 :> 2 :> 1 :> Nil
transpose :: forall (n :: Nat) (m :: Nat) a. KnownNat n => Vec m (Vec n a) -> Vec n (Vec m a) Source #
Transpose a matrix: go from row-major to column-major
>>>let xss = (1:>2:>Nil):>(3:>4:>Nil):>(5:>6:>Nil):>Nil>>>xss(1 :> 2 :> Nil) :> (3 :> 4 :> Nil) :> (5 :> 6 :> Nil) :> Nil>>>transpose xss(1 :> 3 :> 5 :> Nil) :> (2 :> 4 :> 6 :> Nil) :> Nil
concat :: forall (n :: Nat) (m :: Nat) a. Vec n (Vec m a) -> Vec (n * m) a Source #
Concatenate a vector of vectors.
>>>concat ((1:>2:>3:>Nil) :> (4:>5:>6:>Nil) :> (7:>8:>9:>Nil) :> (10:>11:>12:>Nil) :> Nil)1 :> 2 :> 3 :> 4 :> 5 :> 6 :> 7 :> 8 :> 9 :> 10 :> 11 :> 12 :> Nil
zip :: forall (n :: Nat) a b. Vec n a -> Vec n b -> Vec n (a, b) Source #
zip takes two vectors and returns a vector of corresponding pairs.
>>>zip (1:>2:>3:>4:>Nil) (4:>3:>2:>1:>Nil)(1,4) :> (2,3) :> (3,2) :> (4,1) :> Nil
head :: forall (n :: Natural) a. Vec (n + 1) a -> a Source #
Extract the first element of a vector
>>>head (1:>2:>3:>Nil)1
>>>head Nil<interactive>:... • Couldn't match type ‘1’ with ‘0’ Expected: Vec (0 + 1) a Actual: Vec 0 a • In the first argument of ‘head’, namely ‘Nil’ In the expression: head Nil In an equation for ‘it’: it = head Nil
# 448 "srcClashSized/Vector.hs"
tail :: forall (n :: Natural) a. Vec (n + 1) a -> Vec n a Source #
Extract the elements after the head of a vector
>>>tail (1:>2:>3:>Nil)2 :> 3 :> Nil
>>>tail Nil<interactive>:... • Couldn't match type ‘1’ with ‘0’ Expected: Vec (0 + 1) a Actual: Vec 0 a • In the first argument of ‘tail’, namely ‘Nil’ In the expression: tail Nil In an equation for ‘it’: it = tail Nil
# 494 "srcClashSized/Vector.hs"
last :: forall (n :: Natural) a. Vec (n + 1) a -> a Source #
Extract the last element of a vector
>>>last (1:>2:>3:>Nil)3
>>>last Nil<interactive>:... • Couldn't match type ‘1’ with ‘0’ Expected: Vec (0 + 1) a Actual: Vec 0 a • In the first argument of ‘last’, namely ‘Nil’ In the expression: last Nil In an equation for ‘it’: it = last Nil
# 540 "srcClashSized/Vector.hs"
init :: forall (n :: Natural) a. Vec (n + 1) a -> Vec n a Source #
Extract all the elements of a vector except the last element
>>>init (1:>2:>3:>Nil)1 :> 2 :> Nil
>>>init Nil<interactive>:... • Couldn't match type ‘1’ with ‘0’ Expected: Vec (0 + 1) a Actual: Vec 0 a • In the first argument of ‘init’, namely ‘Nil’ In the expression: init Nil In an equation for ‘it’: it = init Nil
# 587 "srcClashSized/Vector.hs"
foldl :: forall b a (n :: Nat). (b -> a -> b) -> b -> Vec n a -> b Source #
foldl, applied to a binary operator, a starting value (typically
the left-identity of the operator), and a vector, reduces the vector
using the binary operator, from left to right:
foldl f z (x1 :> x2 :> ... :> xn :> Nil) == (...((z `f` x1) `f` x2) `f`...) `f` xn foldl f z Nil == z
>>>foldl (/) 1 (5 :> 4 :> 3 :> 2 :> Nil)8.333333333333333e-3
"foldl f z xs" corresponds to the following circuit layout:
NB: " produces a linear structure, which has a depth, or
delay, of O(foldl f z xs"). Use length xsfold if your binary operator f is
associative, as " produces a structure with a depth of
O(log_2(fold f xs")).length xs
foldl1 :: forall a (n :: Natural). (a -> a -> a) -> Vec (n + 1) a -> a Source #
foldl1 is a variant of foldl that has no starting value argument,
and thus must be applied to non-empty vectors.
foldl1 f (x1 :> x2 :> x3 :> ... :> xn :> Nil) == (...((x1 `f` x2) `f` x3) `f`...) `f` xn foldl1 f (x1 :> Nil) == x1 foldl1 f Nil == TYPE ERROR
>>>foldl1 (/) (1 :> 5 :> 4 :> 3 :> 2 :> Nil)8.333333333333333e-3
"foldl1 f xs" corresponds to the following circuit layout:
NB: " produces a linear structure, which has a depth,
or delay, of O(foldl1 f z xs"). Use length xsfold if your binary operator f is
associative, as " produces a structure with a depth of
O(log_2(fold f xs")).length xs
scanl :: forall b a (n :: Nat). (b -> a -> b) -> b -> Vec n a -> Vec (n + 1) b Source #
scanl is similar to foldl, but returns a vector of successive reduced
values from the left:
scanl f z (x1 :> x2 :> ... :> Nil) == z :> (z `f` x1) :> ((z `f` x1) `f` x2) :> ... :> Nil
>>>scanl (+) 0 (5 :> 4 :> 3 :> 2 :> Nil)0 :> 5 :> 9 :> 12 :> 14 :> Nil
"scanl f z xs" corresponds to the following circuit layout:
NB:
last (scanl f z xs) == foldl f z xs
- For a different trade-off between circuit size and logic depth for associative operators, see Clash.Sized.RTree
scanl1 :: forall (n :: Nat) a. KnownNat n => (a -> a -> a) -> Vec (n + 1) a -> Vec (n + 1) a Source #
scanl with no seed value
>>>scanl1 (-) (1 :> 2 :> 3 :> 4 :> Nil)1 :> -1 :> -4 :> -8 :> Nil
foldr1 :: forall a (n :: Natural). (a -> a -> a) -> Vec (n + 1) a -> a Source #
foldr1 is a variant of foldr that has no starting value argument,
and thus must be applied to non-empty vectors.
foldr1 f (x1 :> ... :> xn2 :> xn1 :> xn :> Nil) == x1 `f` (... (xn2 `f` (xn1 `f` xn))...) foldr1 f (x1 :> Nil) == x1 foldr1 f Nil == TYPE ERROR
>>>foldr1 (/) (5 :> 4 :> 3 :> 2 :> 1 :> Nil)1.875
"foldr1 f xs" corresponds to the following circuit layout:
NB: " produces a linear structure, which has a depth,
or delay, of O(foldr1 f z xs"). Use length xsfold if your binary operator f is
associative, as " produces a structure with a depth of
O(log_2(fold f xs")).length xs
scanr :: forall a b (n :: Nat). (a -> b -> b) -> b -> Vec n a -> Vec (n + 1) b Source #
scanr is similar to foldr, but returns a vector of successive reduced
values from the right:
scanr f z (... :> xn1 :> xn :> Nil) == ... :> (xn1 `f` (xn `f` z)) :> (xn `f` z) :> z :> Nil
>>>scanr (+) 0 (5 :> 4 :> 3 :> 2 :> Nil)14 :> 9 :> 5 :> 2 :> 0 :> Nil
"scanr f z xs" corresponds to the following circuit layout:
NB:
head (scanr f z xs) == foldr f z xs
- For a different trade-off between circuit size and logic depth for associative operators, see Clash.Sized.RTree
scanr1 :: forall (n :: Nat) a. KnownNat n => (a -> a -> a) -> Vec (n + 1) a -> Vec (n + 1) a Source #
scanr with no seed value
>>>scanr1 (-) (1 :> 2 :> 3 :> 4 :> Nil)-2 :> 3 :> -1 :> 4 :> Nil
maximum :: forall a (n :: Natural). Ord a => Vec (n + 1) a -> a Source #
The largest element of a non-empty vector
minimum :: forall a (n :: Natural). Ord a => Vec (n + 1) a -> a Source #
The least element of a non-empty vector
iterate :: forall (n :: Nat) a. SNat n -> (a -> a) -> a -> Vec n a Source #
"iterate n f x" returns a vector starting with x followed by
n repeated applications of f to x.
iterate (SNat :: SNat 4) f x == (x :> f x :> f (f x) :> f (f (f x)) :> Nil) iterate d4 f x == (x :> f x :> f (f x) :> f (f (f x)) :> Nil)
>>>iterate d4 (+1) 11 :> 2 :> 3 :> 4 :> Nil
"iterate n f z" corresponds to the following circuit layout:
repeat :: forall (n :: Nat) a. KnownNat n => a -> Vec n a Source #
"repeat a" creates a vector with as many copies of a as demanded
by the context.
>>>repeat 6 :: Vec 5 Int6 :> 6 :> 6 :> 6 :> 6 :> Nil
replicate :: forall (n :: Nat) a. SNat n -> a -> Vec n a Source #
"replicate n a" returns a vector that has n copies of a.
>>>replicate (SNat :: SNat 3) 66 :> 6 :> 6 :> Nil>>>replicate d3 66 :> 6 :> 6 :> Nil
take :: forall (m :: Nat) (n :: Natural) a. SNat m -> Vec (m + n) a -> Vec m a Source #
"take n xs" returns the n-length prefix of xs.
>>>take (SNat :: SNat 3) (1:>2:>3:>4:>5:>Nil)1 :> 2 :> 3 :> Nil>>>take d3 (1:>2:>3:>4:>5:>Nil)1 :> 2 :> 3 :> Nil>>>take d0 (1:>2:>Nil)Nil
>>>take d4 (1:>2:>Nil)<interactive>:... • Couldn't match type ‘4 + n0’ with ‘2’ Expected: Vec (4 + n0) a Actual: Vec (1 + 1) a The type variable ‘n0’ is ambiguous • In the second argument of ‘take’, namely ‘(1 :> 2 :> Nil)’ In the expression: take d4 (1 :> 2 :> Nil) In an equation for ‘it’: it = take d4 (1 :> 2 :> Nil)
# 1632 "srcClashSized/Vector.hs"
drop :: forall (m :: Nat) (n :: Natural) a. SNat m -> Vec (m + n) a -> Vec n a Source #
"drop n xs" returns the suffix of xs after the first n elements.
>>>drop (SNat :: SNat 3) (1:>2:>3:>4:>5:>Nil)4 :> 5 :> Nil>>>drop d3 (1:>2:>3:>4:>5:>Nil)4 :> 5 :> Nil>>>drop d0 (1:>2:>Nil)1 :> 2 :> Nil
>>>drop d4 (1:>2:>Nil)<interactive>:...: error:... • Couldn't match...type ‘4 + n0... The type variable ‘n0’ is ambiguous • In the first argument of ‘print’, namely ‘it’ In a stmt of an interactive GHCi command: print it
# 1682 "srcClashSized/Vector.hs"
splitAt :: forall (m :: Nat) (n :: Natural) a. SNat m -> Vec (m + n) a -> (Vec m a, Vec n a) Source #
Split a vector into two vectors at the given point.
>>>splitAt (SNat :: SNat 3) (1:>2:>3:>7:>8:>Nil)(1 :> 2 :> 3 :> Nil,7 :> 8 :> Nil)>>>splitAt d3 (1:>2:>3:>7:>8:>Nil)(1 :> 2 :> 3 :> Nil,7 :> 8 :> Nil)
reverse :: forall (n :: Nat) a. Vec n a -> Vec n a Source #
The elements in a vector in reverse order.
>>>reverse (1:>2:>3:>4:>Nil)4 :> 3 :> 2 :> 1 :> Nil
concatMap :: forall a (m :: Nat) b (n :: Nat). (a -> Vec m b) -> Vec n a -> Vec (n * m) b Source #
Map a function over all the elements of a vector and concatentate the resulting vectors.
>>>concatMap (replicate d3) (1:>2:>3:>Nil)1 :> 1 :> 1 :> 2 :> 2 :> 2 :> 3 :> 3 :> 3 :> Nil
(!!) :: forall (n :: Nat) i a. (KnownNat n, Enum i) => Vec n a -> i -> a Source #
"xs !! n" returns the n'th element of xs.
NB: Vector elements have an ASCENDING subscript starting from 0 and
ending at .length - 1
>>>(1:>2:>3:>4:>5:>Nil) !! 45>>>(1:>2:>3:>4:>5:>Nil) !! (length (1:>2:>3:>4:>5:>Nil) - 1)5>>>(1:>2:>3:>4:>5:>Nil) !! 12>>>(1:>2:>3:>4:>5:>Nil) !! 14*** Exception: Clash.Sized.Vector.(!!): index 14 is larger than maximum index 4 ...
zip3 :: forall (n :: Nat) a b c. Vec n a -> Vec n b -> Vec n c -> Vec n (a, b, c) Source #
zip3 takes three vectors and returns a vector of corresponding triplets.
>>>zip3 (1:>2:>3:>4:>Nil) (4:>3:>2:>1:>Nil) (5:>6:>7:>8:>Nil)(1,4,5) :> (2,3,6) :> (3,2,7) :> (4,1,8) :> Nil
zipWith :: forall a b c (n :: Nat). (a -> b -> c) -> Vec n a -> Vec n b -> Vec n c Source #
zipWith generalizes zip by zipping with the function given
as the first argument, instead of a tupling function.
For example, "zipWith (+)" applied to two vectors produces the
vector of corresponding sums.
zipWith f (x1 :> x2 :> ... xn :> Nil) (y1 :> y2 :> ... :> yn :> Nil) == (f x1 y1 :> f x2 y2 :> ... :> f xn yn :> Nil)
"zipWith f xs ys" corresponds to the following circuit layout:
NB: zipWith is strict in its second argument, and lazy in its
third. This matters when zipWith is used in a recursive setting. See
lazyV for more information.
zipWith3 :: forall a b c d (n :: Nat). (a -> b -> c -> d) -> Vec n a -> Vec n b -> Vec n c -> Vec n d Source #
zipWith3 generalizes zip3 by zipping with the function given
as the first argument, instead of a tupling function.
zipWith3 f (x1 :> x2 :> ... xn :> Nil) (y1 :> y2 :> ... :> yn :> Nil) (z1 :> z2 :> ... :> zn :> Nil) == (f x1 y1 z1 :> f x2 y2 z2 :> ... :> f xn yn zn :> Nil)
"zipWith3 f xs ys zs" corresponds to the following circuit layout:
NB: zipWith3 is strict in its second argument, and lazy in its
third and fourth. This matters when zipWith3 is used in a recursive setting.
See lazyV for more information.
unzip :: forall (n :: Nat) a b. Vec n (a, b) -> (Vec n a, Vec n b) Source #
unzip transforms a vector of pairs into a vector of first components
and a vector of second components.
>>>unzip ((1,4):>(2,3):>(3,2):>(4,1):>Nil)(1 :> 2 :> 3 :> 4 :> Nil,4 :> 3 :> 2 :> 1 :> Nil)
unzip3 :: forall (n :: Nat) a b c. Vec n (a, b, c) -> (Vec n a, Vec n b, Vec n c) Source #
unzip3 transforms a vector of triplets into a vector of first components,
a vector of second components, and a vector of third components.
>>>unzip3 ((1,4,5):>(2,3,6):>(3,2,7):>(4,1,8):>Nil)(1 :> 2 :> 3 :> 4 :> Nil,4 :> 3 :> 2 :> 1 :> Nil,5 :> 6 :> 7 :> 8 :> Nil)
Arguments
| :: forall i (n :: Nat) a (m :: Nat). (Enum i, KnownNat n) | |
| => Vec n a | Source vector, xs |
| -> Vec m i | Index mapping, is |
| -> Vec m a |
Backwards permutation specified by an index mapping, is, from the destination vector specifying which element of the source vector xs to read.
"gather xs is" is equivalent to "map (xs ".!!) is
For example:
>>>let input = 1:>9:>6:>4:>4:>2:>0:>1:>2:>Nil>>>let from = 1:>3:>7:>2:>5:>3:>Nil>>>gather input from9 :> 4 :> 1 :> 6 :> 2 :> 4 :> Nil
fold :: forall (n :: Natural) a. (a -> a -> a) -> Vec (n + 1) a -> a Source #
fold is a variant of foldr1 and foldl1, but instead of reducing from
right to left, or left to right, it reduces a vector using a tree-like
structure. The depth, or delay, of the structure produced by
"", is hence fold f xsO(log_2(, and not
length xs))O(.length xs)
NB: The binary operator "f" in "" must be associative.fold f xs
fold f (x1 :> x2 :> ... :> xn1 :> xn :> Nil) == ((x1 `f` x2) `f` ...) `f` (... `f` (xn1 `f` xn)) fold f (x1 :> Nil) == x1 fold f Nil == TYPE ERROR
>>>fold (+) (5 :> 4 :> 3 :> 2 :> 1 :> Nil)15
"fold f xs" corresponds to the following circuit layout:
zip4 :: forall (n :: Nat) a b c d. Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n (a, b, c, d) Source #
zip5 :: forall (n :: Nat) a b c d e. Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e -> Vec n (a, b, c, d, e) Source #
zip6 :: forall (n :: Nat) a b c d e f. Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e -> Vec n f -> Vec n (a, b, c, d, e, f) Source #
zip7 :: forall (n :: Nat) a b c d e f g. Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e -> Vec n f -> Vec n g -> Vec n (a, b, c, d, e, f, g) Source #
zipWith4 :: forall a b c d e (n :: Nat). (a -> b -> c -> d -> e) -> Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e Source #
zipWith5 :: forall a b c d e f (n :: Nat). (a -> b -> c -> d -> e -> f) -> Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e -> Vec n f Source #
zipWith6 :: forall a b c d e f g (n :: Nat). (a -> b -> c -> d -> e -> f -> g) -> Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e -> Vec n f -> Vec n g Source #
zipWith7 :: forall a b c d e f g h (n :: Nat). (a -> b -> c -> d -> e -> f -> g -> h) -> Vec n a -> Vec n b -> Vec n c -> Vec n d -> Vec n e -> Vec n f -> Vec n g -> Vec n h Source #
unzip4 :: forall (n :: Nat) a b c d. Vec n (a, b, c, d) -> (Vec n a, Vec n b, Vec n c, Vec n d) Source #
unzip5 :: forall (n :: Nat) a b c d e. Vec n (a, b, c, d, e) -> (Vec n a, Vec n b, Vec n c, Vec n d, Vec n e) Source #
unzip6 :: forall (n :: Nat) a b c d e f. Vec n (a, b, c, d, e, f) -> (Vec n a, Vec n b, Vec n c, Vec n d, Vec n e, Vec n f) Source #
unzip7 :: forall (n :: Nat) a b c d e f g. Vec n (a, b, c, d, e, f, g) -> (Vec n a, Vec n b, Vec n c, Vec n d, Vec n e, Vec n f, Vec n g) Source #
mapAccumL :: forall acc x y (n :: Nat). (acc -> x -> (acc, y)) -> acc -> Vec n x -> (acc, Vec n y) Source #
The mapAccumL function behaves like a combination of map and foldl;
it applies a function to each element of a vector, passing an accumulating
parameter from left to right, and returning a final value of this accumulator
together with the new vector.
>>>mapAccumL (\acc x -> (acc + x,acc + 1)) 0 (1 :> 2 :> 3 :> 4 :> Nil)(10,1 :> 2 :> 4 :> 7 :> Nil)
"mapAccumL f acc xs" corresponds to the following circuit layout:
mapAccumR :: forall acc x y (n :: Nat). (acc -> x -> (acc, y)) -> acc -> Vec n x -> (acc, Vec n y) Source #
The mapAccumR function behaves like a combination of map and foldr;
it applies a function to each element of a vector, passing an accumulating
parameter from right to left, and returning a final value of this accumulator
together with the new vector.
>>>mapAccumR (\acc x -> (acc + x,acc + 1)) 0 (1 :> 2 :> 3 :> 4 :> Nil)(10,10 :> 8 :> 5 :> 1 :> Nil)
"mapAccumR f acc xs" corresponds to the following circuit layout:
merge :: forall (n :: Nat) a. KnownNat n => Vec n a -> Vec n a -> Vec (2 * n) a Source #
Merge two vectors, alternating their elements, i.e.,
>>>merge (1 :> 2 :> 3 :> 4 :> Nil) (5 :> 6 :> 7 :> 8 :> Nil)1 :> 5 :> 2 :> 6 :> 3 :> 7 :> 4 :> 8 :> Nil
data Vec (a :: Nat) b where Source #
Fixed size vectors.
Constructors
| Nil :: forall b. Vec 0 b | |
| Cons :: forall b (n :: Natural). b -> Vec n b -> Vec (n + 1) b infixr 5 |
Bundled Patterns
| pattern (:>) :: a -> Vec n a -> Vec (n + 1) a infixr 5 | Add an element to the head of a vector.
Can be used as a pattern:
Also in conjunctions with (
|
| pattern (:<) :: Vec n a -> a -> Vec (n + 1) a infixl 5 | Add an element to the tail of a vector.
Can be used as a pattern:
Also in conjunctions with (
|
Instances
| Lift a => Lift (Vec n a :: Type) Source # | |||||
| (KnownNat n, 1 <= n) => Foldable1 (Vec n) Source # | |||||
Defined in Clash.Sized.Vector Methods fold1 :: Semigroup m => Vec n m -> m Source # foldMap1 :: Semigroup m => (a -> m) -> Vec n a -> m Source # foldMap1' :: Semigroup m => (a -> m) -> Vec n a -> m Source # toNonEmpty :: Vec n a -> NonEmpty a Source # maximum :: Ord a => Vec n a -> a Source # minimum :: Ord a => Vec n a -> a Source # foldrMap1 :: (a -> b) -> (a -> b -> b) -> Vec n a -> b Source # foldlMap1' :: (a -> b) -> (b -> a -> b) -> Vec n a -> b Source # foldlMap1 :: (a -> b) -> (b -> a -> b) -> Vec n a -> b Source # foldrMap1' :: (a -> b) -> (a -> b -> b) -> Vec n a -> b Source # | |||||
| KnownNat n => Applicative (Vec n) Source # | |||||
| Functor (Vec n) Source # | |||||
| KnownNat n => Foldable (Vec n) Source # | |||||
Defined in Clash.Sized.Vector Methods fold :: Monoid m => Vec n m -> m Source # foldMap :: Monoid m => (a -> m) -> Vec n a -> m Source # foldMap' :: Monoid m => (a -> m) -> Vec n a -> m Source # foldr :: (a -> b -> b) -> b -> Vec n a -> b Source # foldr' :: (a -> b -> b) -> b -> Vec n a -> b Source # foldl :: (b -> a -> b) -> b -> Vec n a -> b Source # foldl' :: (b -> a -> b) -> b -> Vec n a -> b Source # foldr1 :: (a -> a -> a) -> Vec n a -> a Source # foldl1 :: (a -> a -> a) -> Vec n a -> a Source # toList :: Vec n a -> [a] Source # null :: Vec n a -> Bool Source # length :: Vec n a -> Int Source # elem :: Eq a => a -> Vec n a -> Bool Source # maximum :: Ord a => Vec n a -> a Source # minimum :: Ord a => Vec n a -> a Source # | |||||
| KnownNat n => Traversable (Vec n) Source # | |||||
| (KnownNat n, Arbitrary a) => Arbitrary (Vec n a) Source # | |||||
| CoArbitrary a => CoArbitrary (Vec n a) Source # | |||||
Defined in Clash.Sized.Vector Methods coarbitrary :: Vec n a -> Gen b -> Gen b | |||||
| (KnownNat n, AutoReg a) => AutoReg (Vec n a) Source # | |||||
Defined in Clash.Class.AutoReg.Internal | |||||
| (KnownNat n, BitPack a) => BitPack (Vec n a) Source # | |||||
| KnownNat n => Bundle (Vec n a) Source # | |||||
| KnownNat n => Bundle (Vec n a) Source # | |||||
| VecToTuple (Vec 0 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| VecToTuple (Vec 1 a) Source # | Instead of using | ||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| VecToTuple (Vec 2 a) Source # | NB: The documentation only shows instances up to 3-tuples. By
default, instances up to and including 12-tuples will exist. If the flag
| ||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| VecToTuple (Vec 3 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| VecToTuple (Vec 4 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| VecToTuple (Vec 5 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| VecToTuple (Vec 6 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| VecToTuple (Vec 7 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| VecToTuple (Vec 8 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| VecToTuple (Vec 9 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| VecToTuple (Vec 10 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| VecToTuple (Vec 11 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| VecToTuple (Vec 12 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple Associated Types
| |||||
| (NFDataX a, KnownNat n) => NFDataX (Vec n a) Source # | |||||
Defined in Clash.Sized.Vector | |||||
| ShowX a => ShowX (Vec n a) Source # | |||||
| (Default a, KnownNat n) => Default (Vec n a) Source # | |||||
Defined in Clash.Sized.Vector | |||||
| NFData a => NFData (Vec n a) Source # | |||||
Defined in Clash.Sized.Vector | |||||
| (KnownNat n, Monoid a) => Monoid (Vec n a) Source # | |||||
| (KnownNat n, Semigroup a) => Semigroup (Vec n a) Source # | |||||
| (KnownNat n, Typeable a, Data a) => Data (Vec n a) Source # | |||||
Defined in Clash.Sized.Vector Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Vec n a -> c (Vec n a) Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Vec n a) Source # toConstr :: Vec n a -> Constr Source # dataTypeOf :: Vec n a -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Vec n a)) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Vec n a)) Source # gmapT :: (forall b. Data b => b -> b) -> Vec n a -> Vec n a Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Vec n a -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Vec n a -> r Source # gmapQ :: (forall d. Data d => d -> u) -> Vec n a -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> Vec n a -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Vec n a -> m (Vec n a) Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Vec n a -> m (Vec n a) Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Vec n a -> m (Vec n a) Source # | |||||
| KnownNat n => Generic (Vec n a) Source # | In many cases, this Generic instance only allows generic functions/instances over vectors of at least size 1, due to the n-1 in the Rep (Vec n a) definition. We'll have to wait for things like https://ryanglscott.github.io/2018/02/11/how-to-derive-generic-for-some-gadts/ before we can work around this limitation | ||||
Defined in Clash.Sized.Vector Associated Types
| |||||
| Show a => Show (Vec n a) Source # | |||||
| (KnownNat n, Eq a) => Eq (Vec n a) Source # | |||||
| (KnownNat n, Ord a) => Ord (Vec n a) Source # | |||||
Defined in Clash.Sized.Vector | |||||
| KnownNat n => Ixed (Vec n a) Source # | |||||
Defined in Clash.Sized.Vector | |||||
| (LockStep en a, KnownNat n) => LockStep (Vec n en) (Vec n a) Source # | |||||
| type Unbundled t d (Vec n a) Source # | |||||
Defined in Clash.Signal.Delayed.Bundle | |||||
| type TryDomain t (Vec n a) Source # | |||||
Defined in Clash.Class.HasDomain.HasSingleDomain | |||||
| type HasDomain dom (Vec n a) Source # | |||||
Defined in Clash.Class.HasDomain.HasSpecificDomain | |||||
| type Unbundled t (Vec n a) Source # | |||||
Defined in Clash.Signal.Bundle | |||||
| type BitSize (Vec n a) Source # | |||||
Defined in Clash.Sized.Vector | |||||
| type TupType (Vec 0 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type TupType (Vec 1 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type TupType (Vec 2 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type TupType (Vec 3 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type TupType (Vec 4 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type TupType (Vec 5 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type TupType (Vec 6 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type TupType (Vec 7 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type TupType (Vec 8 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type TupType (Vec 9 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type TupType (Vec 10 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type TupType (Vec 11 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type TupType (Vec 12 a) Source # | |||||
Defined in Clash.Sized.Vector.ToTuple | |||||
| type Rep (Vec n a) Source # | |||||
Defined in Clash.Sized.Vector type Rep (Vec n a) = D1 ('MetaData "Vec" "Clash.Data.Vector" "clash-prelude" 'False) (C1 ('MetaCons "Nil" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Cons" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Vec (n - 1) a)))) | |||||
| type Index (Vec n a) Source # | |||||
Defined in Clash.Sized.Vector | |||||
| type IxValue (Vec n a) Source # | |||||
Defined in Clash.Sized.Vector | |||||
replace :: forall (n :: Nat) i a. (KnownNat n, Enum i) => i -> a -> Vec n a -> Vec n a Source #
"replace n a xs" returns the vector xs where the n'th element is
replaced by a.
NB: Vector elements have an ASCENDING subscript starting from 0 and
ending at .length - 1
>>>replace 3 7 (1:>2:>3:>4:>5:>Nil)1 :> 2 :> 3 :> 7 :> 5 :> Nil>>>replace 0 7 (1:>2:>3:>4:>5:>Nil)7 :> 2 :> 3 :> 4 :> 5 :> Nil>>>replace 9 7 (1:>2:>3:>4:>5:>Nil)1 :> 2 :> 3 :> 4 :> 5 :> *** Exception: Clash.Sized.Vector.replace: index 9 is larger than maximum index 4 ...
Arguments
| :: forall (n :: Nat) (d :: Nat) a. (KnownNat n, KnownNat d) | |
| => SNat d | Interleave step, d |
| -> Vec (n * d) a | |
| -> Vec (d * n) a |
"interleave d xs" creates a vector:
<x_0,x_d,x_(2d),...,x_1,x_(d+1),x_(2d+1),...,x_(d-1),x_(2d-1),x_(3d-1)>
>>>let xs = 1 :> 2 :> 3 :> 4 :> 5 :> 6 :> 7 :> 8 :> 9 :> Nil>>>interleave d3 xs1 :> 4 :> 7 :> 2 :> 5 :> 8 :> 3 :> 6 :> 9 :> Nil
imap :: forall (n :: Nat) a b. KnownNat n => (Index n -> a -> b) -> Vec n a -> Vec n b Source #
Apply a function of every element of a vector and its index.
>>>:t imap (+) (2 :> 2 :> 2 :> 2 :> Nil)imap (+) (2 :> 2 :> 2 :> 2 :> Nil) :: Vec 4 (Index 4)>>>imap (+) (2 :> 2 :> 2 :> 2 :> Nil)2 :> 3 :> *** Exception: X: Clash.Sized.Index: result 4 is out of bounds: [0..3] ...>>>imap (\i a -> extend (bitCoerce i) + a) (2 :> 2 :> 2 :> 2 :> Nil) :: Vec 4 (Unsigned 8)2 :> 3 :> 4 :> 5 :> Nil
"imap f xs" corresponds to the following circuit layout:
ifoldl :: forall (n :: Nat) a b. KnownNat n => (a -> Index n -> b -> a) -> a -> Vec n b -> a Source #
Left fold (function applied to each element and its index)
>>>let findRightmost x xs = ifoldl (\a i b -> if b == x then Just i else a) Nothing xs>>>findRightmost 3 (1:>3:>2:>4:>3:>5:>6:>Nil)Just 4>>>findRightmost 8 (1:>3:>2:>4:>3:>5:>6:>Nil)Nothing
"ifoldl f z xs" corresponds to the following circuit layout:
ifoldr :: forall (n :: Nat) a b. KnownNat n => (Index n -> a -> b -> b) -> b -> Vec n a -> b Source #
Right fold (function applied to each element and its index)
>>>let findLeftmost x xs = ifoldr (\i a b -> if a == x then Just i else b) Nothing xs>>>findLeftmost 3 (1:>3:>2:>4:>3:>5:>6:>Nil)Just 1>>>findLeftmost 8 (1:>3:>2:>4:>3:>5:>6:>Nil)Nothing
"ifoldr f z xs" corresponds to the following circuit layout:
select :: forall (i :: Natural) (s :: Natural) (n :: Natural) (f :: Nat) a. CmpNat (i + s) (s * n) ~ 'GT => SNat f -> SNat s -> SNat n -> Vec (f + i) a -> Vec n a Source #
"select f s n xs" selects n elements with step-size s and
offset f from xs.
>>>select (SNat :: SNat 1) (SNat :: SNat 2) (SNat :: SNat 3) (1:>2:>3:>4:>5:>6:>7:>8:>Nil)2 :> 4 :> 6 :> Nil>>>select d1 d2 d3 (1:>2:>3:>4:>5:>6:>7:>8:>Nil)2 :> 4 :> 6 :> Nil
lazyV :: forall (n :: Nat) a. KnownNat n => Vec n a -> Vec n a Source #
What you should use when your vector functions are too strict in their arguments.
doctests setup
>>>let compareSwapL a b = if a < b then (a,b) else (b,a)>>>:{let sortVL :: (Ord a, KnownNat (n + 1)) => Vec ((n + 1) + 1) a -> Vec ((n + 1) + 1) a sortVL xs = map fst sorted :< (snd (last sorted)) where lefts = head xs :> map snd (init sorted) rights = tail xs sorted = zipWith compareSwapL (lazyV lefts) rights :}
>>>:{let sortV_flip xs = map fst sorted :< (snd (last sorted)) where lefts = head xs :> map snd (init sorted) rights = tail xs sorted = zipWith (flip compareSwapL) rights lefts :}
Example usage
For example:
-- Bubble sort for 1 iteration sortV xs =mapfst sorted:<(snd (lastsorted)) where lefts =headxs :>mapsnd (initsorted) rights =tailxs sorted =zipWithcompareSwapL lefts rights -- Compare and swap compareSwapL a b = if a < b then (a,b) else (b,a)
Will not terminate because zipWith is too strict in its second argument.
In this case, adding lazyV on zipWiths second argument:
sortVL xs =mapfst sorted:<(snd (lastsorted)) where lefts =headxs :> map snd (initsorted) rights =tailxs sorted =zipWithcompareSwapL (lazyVlefts) rights
Results in a successful computation:
>>>sortVL (4 :> 1 :> 2 :> 3 :> Nil)1 :> 2 :> 3 :> 4 :> Nil
NB: There is also a solution using flip, but it slightly obfuscates the
meaning of the code:
sortV_flip xs =mapfst sorted:<(snd (lastsorted)) where lefts =headxs :>mapsnd (initsorted) rights =tailxs sorted =zipWith(flipcompareSwapL) rights lefts
>>>sortV_flip (4 :> 1 :> 2 :> 3 :> Nil)1 :> 2 :> 3 :> 4 :> Nil
smap :: forall (k :: Nat) a b. KnownNat k => (forall (l :: Nat). SNat l -> a -> b) -> Vec k a -> Vec k b Source #
Apply a function to every element of a vector and the element's position
(as an SNat value) in the vector.
>>>let rotateMatrix = smap (flip rotateRightS)>>>let xss = (1:>2:>3:>Nil):>(1:>2:>3:>Nil):>(1:>2:>3:>Nil):>Nil>>>xss(1 :> 2 :> 3 :> Nil) :> (1 :> 2 :> 3 :> Nil) :> (1 :> 2 :> 3 :> Nil) :> Nil>>>rotateMatrix xss(1 :> 2 :> 3 :> Nil) :> (3 :> 1 :> 2 :> Nil) :> (2 :> 3 :> 1 :> Nil) :> Nil
traverse# :: forall a f b (n :: Nat). Applicative f => (a -> f b) -> Vec n a -> f (Vec n b) Source #
Arguments
| :: forall (p :: TyFun Nat Type -> Type) (k :: Nat) a. KnownNat k | |
| => Proxy p | The motive |
| -> (a -> p @@ 0) | Function to apply to every element |
| -> (forall (l :: Nat). SNat l -> (p @@ l) -> (p @@ l) -> p @@ (l + 1)) | Function to combine results. NB: The |
| -> Vec (2 ^ k) a | Vector to fold over. NB: Must have a length that is a power of 2. |
| -> p @@ k |
A combination of dfold and fold: a dependently typed fold that
reduces a vector in a tree-like structure.
doctests setup
>>>:seti -XUndecidableInstances>>>import Data.Singletons (Apply, Proxy (..), TyFun)>>>data IIndex (f :: TyFun Nat Type) :: Type>>>type instance Apply IIndex l = Index ((2^l)+1)>>>:{let populationCount' :: (KnownNat k, KnownNat (2^k)) => BitVector (2^k) -> Index ((2^k)+1) populationCount' bv = dtfold (Proxy @IIndex) fromIntegral (\_ x y -> add x y) (bv2v bv) :}
Example usage
As an example of when you might want to use dtfold we will build a
population counter: a circuit that counts the number of bits set to '1' in
a BitVector. Given a vector of n bits, we only need we need a data type
that can represent the number n: Index (n+1). Index k has a range
of [0 .. k-1] (using ceil(log2(k)) bits), hence we need Index n+1.
As an initial attempt we will use sum, because it gives a nice (log2(n))
tree-structure of adders:
populationCount :: (KnownNat (n+1), KnownNat (n+2))
=> BitVector (n+1) -> Index (n+2)
populationCount = sum . map fromIntegral . bv2v
The "problem" with this description is that all adders have the same bit-width, i.e. all adders are of the type:
(+) ::Index(n+2) ->Index(n+2) ->Index(n+2).
This is a "problem" because we could have a more efficient structure: one where each layer of adders is precisely wide enough to count the number of bits at that layer. That is, at height d we want the adder to be of type:
Index((2^d)+1) ->Index((2^d)+1) ->Index((2^(d+1))+1)
We have such an adder in the form of the add function, as
defined in the instance ExtendingNum instance of Index.
However, we cannot simply use fold to create a tree-structure of
addes:
>>>:{let populationCount' :: (KnownNat (n+1), KnownNat (n+2)) => BitVector (n+1) -> Index (n+2) populationCount' = fold add . map fromIntegral . bv2v :} <interactive>:... • Couldn't match type: ((n + 2) + (n + 2)) - 1 with: n + 2 Expected: Index (n + 2) -> Index (n + 2) -> Index (n + 2) Actual: Index (n + 2) -> Index (n + 2) -> AResult (Index (n + 2)) (Index (n + 2)) • In the first argument of ‘fold’, namely ‘add’ In the first argument of ‘(.)’, namely ‘fold add’ In the expression: fold add . map fromIntegral . bv2v • Relevant bindings include populationCount' :: BitVector (n + 1) -> Index (n + 2) (bound at ...)
# 2539 "srcClashSized/Vector.hs"
because fold expects a function of type "a -> a -> a", i.e. a function
where the arguments and result all have exactly the same type.
In order to accommodate the type of our add, where the
result is larger than the arguments, we must use a dependently typed fold in
the form of dtfold:
{-# LANGUAGE UndecidableInstances #-}
import Data.Singletons
import Data.Proxy
data IIndex (f :: TyFun Nat Type) :: Type
type instance Apply IIndex l = Index ((2^l)+1)
populationCount' :: (KnownNat k, KnownNat (2^k))
=> BitVector (2^k) -> Index ((2^k)+1)
populationCount' bv = dtfold (Proxy @IIndex)
fromIntegral
(\_ x y -> add x y)
(bv2v bv)
And we can test that it works:
>>>:t populationCount' (7 :: BitVector 16)populationCount' (7 :: BitVector 16) :: Index 17>>>populationCount' (7 :: BitVector 16)3
Some final remarks:
- By using
dtfoldinstead offold, we had to restrict ourBitVectorargument to have bit-width that is a power of 2. - Even though our original populationCount function specified a structure where all adders had the same width. Most VHDL/(System)Verilog synthesis tools will create a more efficient circuit, i.e. one where the adders have an increasing bit-width for every layer, from the VHDL/(System)Verilog produced by the Clash compiler.
NB: The depth, or delay, of the structure produced by
"" is O(log_2(dtfold m f g xs)).length xs
indicesI :: forall (n :: Nat). KnownNat n => Vec n (Index n) Source #
Generate a vector of indices, where the length of the vector is determined by the context.
>>>indicesI :: Vec 4 (Index 4)0 :> 1 :> 2 :> 3 :> Nil
takeI :: forall (m :: Nat) (n :: Natural) a. KnownNat m => Vec (m + n) a -> Vec m a Source #
"takeI xs" returns the prefix of xs as demanded by the context.
>>>takeI (1:>2:>3:>4:>5:>Nil) :: Vec 2 Int1 :> 2 :> Nil
dropI :: forall (m :: Nat) (n :: Natural) a. KnownNat m => Vec (m + n) a -> Vec n a Source #
"dropI xs" returns the suffix of xs as demanded by the context.
>>>dropI (1:>2:>3:>4:>5:>Nil) :: Vec 2 Int4 :> 5 :> Nil
selectI :: forall (i :: Natural) (s :: Natural) (n :: Natural) (f :: Nat) a. (CmpNat (i + s) (s * n) ~ 'GT, KnownNat n) => SNat f -> SNat s -> Vec (f + i) a -> Vec n a Source #
"selectI f s xs" selects as many elements as demanded by the context
with step-size s and offset f from xs.
>>>selectI d1 d2 (1:>2:>3:>4:>5:>6:>7:>8:>Nil) :: Vec 2 Int2 :> 4 :> Nil
splitAtI :: forall (m :: Nat) (n :: Natural) a. KnownNat m => Vec (m + n) a -> (Vec m a, Vec n a) Source #
Split a vector into two vectors where the length of the two is determined by the context.
>>>splitAtI (1:>2:>3:>7:>8:>Nil) :: (Vec 2 Int, Vec 3 Int)(1 :> 2 :> Nil,3 :> 7 :> 8 :> Nil)
unconcat :: forall (n :: Nat) (m :: Nat) a. KnownNat n => SNat m -> Vec (n * m) a -> Vec n (Vec m a) Source #
Split a vector of (n * m) elements into a vector of "vectors of length m", where the length m is given.
>>>unconcat d4 (1:>2:>3:>4:>5:>6:>7:>8:>9:>10:>11:>12:>Nil)(1 :> 2 :> 3 :> 4 :> Nil) :> (5 :> 6 :> 7 :> 8 :> Nil) :> (9 :> 10 :> 11 :> 12 :> Nil) :> Nil
unconcatI :: forall (n :: Nat) (m :: Nat) a. (KnownNat n, KnownNat m) => Vec (n * m) a -> Vec n (Vec m a) Source #
Split a vector of (n * m) elements into a vector of "vectors of length m", where the length m is determined by the context.
>>>unconcatI (1:>2:>3:>4:>5:>6:>7:>8:>9:>10:>11:>12:>Nil) :: Vec 2 (Vec 6 Int)(1 :> 2 :> 3 :> 4 :> 5 :> 6 :> Nil) :> (7 :> 8 :> 9 :> 10 :> 11 :> 12 :> Nil) :> Nil
unfoldrI :: forall (n :: Nat) s a. KnownNat n => (s -> (a, s)) -> s -> Vec n a Source #
"unfoldrI f s" builds a vector from a seed value s, where every
element a is created by successive calls of f on s; the length of the
vector is inferred from the context. Unlike unfoldr from
Data.List the generating function f cannot dictate the length of the
resulting vector, it must be statically known.
a simple use of unfoldrI:
>>>unfoldrI (\s -> (s,s-1)) 10 :: Vec 10 Int10 :> 9 :> 8 :> 7 :> 6 :> 5 :> 4 :> 3 :> 2 :> 1 :> Nil
listToVecTH :: Lift a => [a] -> ExpQ Source #
Create a vector literal from a list literal.
$(listToVecTH [1::Signed 8,2,3,4,5]) == (8:>2:>3:>4:>5:>Nil) :: Vec 5 (Signed 8)
>>>[1 :: Signed 8,2,3,4,5][1,2,3,4,5]>>>$(listToVecTH [1::Signed 8,2,3,4,5])1 :> 2 :> 3 :> 4 :> 5 :> Nil
(+>>) :: forall (n :: Nat) a. KnownNat n => a -> Vec n a -> Vec n a infixr 4 Source #
Add an element to the head of a vector, and extract all but the last element.
>>>1 +>> (3:>4:>5:>Nil)1 :> 3 :> 4 :> Nil>>>1 +>> NilNil
(<<+) :: forall (n :: Nat) a. Vec n a -> a -> Vec n a infixl 4 Source #
Add an element to the tail of a vector, and extract all but the first element.
>>>(3:>4:>5:>Nil) <<+ 14 :> 5 :> 1 :> Nil>>>Nil <<+ 1Nil
Arguments
| :: forall (n :: Nat) a (m :: Nat). KnownNat n | |
| => Vec n a | The old vector |
| -> Vec m a | The elements to shift in at the head |
| -> (Vec n a, Vec m a) | (The new vector, shifted out elements) |
Shift in elements to the head of a vector, bumping out elements at the tail. The result is a tuple containing:
- The new vector
- The shifted out elements
>>>shiftInAt0 (1 :> 2 :> 3 :> 4 :> Nil) ((-1) :> 0 :> Nil)(-1 :> 0 :> 1 :> 2 :> Nil,3 :> 4 :> Nil)>>>shiftInAt0 (1 :> Nil) ((-1) :> 0 :> Nil)(-1 :> Nil,0 :> 1 :> Nil)
Arguments
| :: forall (m :: Nat) (n :: Nat) a. KnownNat m | |
| => Vec n a | The old vector |
| -> Vec m a | The elements to shift in at the tail |
| -> (Vec n a, Vec m a) | (The new vector, shifted out elements) |
Shift in element to the tail of a vector, bumping out elements at the head. The result is a tuple containing:
- The new vector
- The shifted out elements
>>>shiftInAtN (1 :> 2 :> 3 :> 4 :> Nil) (5 :> 6 :> Nil)(3 :> 4 :> 5 :> 6 :> Nil,1 :> 2 :> Nil)>>>shiftInAtN (1 :> Nil) (2 :> 3 :> Nil)(3 :> Nil,1 :> 2 :> Nil)
Arguments
| :: forall a (m :: Nat) (n :: Natural). (Default a, KnownNat m) | |
| => SNat m |
|
| -> Vec (m + n) a | The old vector |
| -> (Vec (m + n) a, Vec m a) | (The new vector, shifted out elements) |
Shift m elements out from the head of a vector, filling up the tail with
Default values. The result is a tuple containing:
- The new vector
- The shifted out values
>>>shiftOutFrom0 d2 ((1 :> 2 :> 3 :> 4 :> 5 :> Nil) :: Vec 5 Integer)(3 :> 4 :> 5 :> 0 :> 0 :> Nil,1 :> 2 :> Nil)
Arguments
| :: forall a (n :: Nat) (m :: Nat). (Default a, KnownNat n) | |
| => SNat m |
|
| -> Vec (m + n) a | The old vector |
| -> (Vec (m + n) a, Vec m a) | (The new vector, shifted out elements) |
Shift m elements out from the tail of a vector, filling up the head with
Default values. The result is a tuple containing:
- The new vector
- The shifted out values
>>>shiftOutFromN d2 ((1 :> 2 :> 3 :> 4 :> 5 :> Nil) :: Vec 5 Integer)(0 :> 0 :> 1 :> 2 :> 3 :> Nil,4 :> 5 :> Nil)
Arguments
| :: forall i (n :: Nat) (m :: Nat) a (k :: Natural). (Enum i, KnownNat n, KnownNat m) | |
| => (a -> a -> a) | Combination function, f |
| -> Vec n a | Default values, def |
| -> Vec m i | Index mapping, is |
| -> Vec (m + k) a | Vector to be permuted, xs |
| -> Vec n a |
Forward permutation specified by an index mapping, ix. The result vector is initialized by the given defaults, def, and an further values that are permuted into the result are added to the current value using the given combination function, f.
The combination function must be associative and commutative.
Arguments
| :: forall i (n :: Nat) a (m :: Nat). (Enum i, KnownNat n) | |
| => Vec n a | Source vector, xs |
| -> Vec m i | Index mapping, is |
| -> Vec m a |
Backwards permutation specified by an index mapping, is, from the destination vector specifying which element of the source vector xs to read.
"backpermute xs is" is equivalent to "map (xs ".!!) is
For example:
>>>let input = 1:>9:>6:>4:>4:>2:>0:>1:>2:>Nil>>>let from = 1:>3:>7:>2:>5:>3:>Nil>>>backpermute input from9 :> 4 :> 1 :> 6 :> 2 :> 4 :> Nil
Arguments
| :: forall i (n :: Nat) (m :: Nat) a (k :: Natural). (Enum i, KnownNat n, KnownNat m) | |
| => Vec n a | Default values, def |
| -> Vec m i | Index mapping, is |
| -> Vec (m + k) a | Vector to be scattered, xs |
| -> Vec n a |
Copy elements from the source vector, xs, to the destination vector according to an index mapping is. This is a forward permute operation where a to vector encodes an input to output index mapping. Output elements for indices that are not mapped assume the value in the default vector def.
For example:
>>>let defVec = 0:>0:>0:>0:>0:>0:>0:>0:>0:>Nil>>>let to = 1:>3:>7:>2:>5:>8:>Nil>>>let input = 1:>9:>6:>4:>4:>2:>5:>Nil>>>scatter defVec to input0 :> 1 :> 4 :> 9 :> 0 :> 4 :> 0 :> 6 :> 2 :> Nil
NB: If the same index appears in the index mapping more than once, the latest mapping is chosen.
rotateLeft :: forall i (n :: Nat) a. (Enum i, KnownNat n) => Vec n a -> i -> Vec n a Source #
Dynamically rotate a Vector to the left:
>>>let xs = 1 :> 2 :> 3 :> 4 :> Nil>>>rotateLeft xs 12 :> 3 :> 4 :> 1 :> Nil>>>rotateLeft xs 23 :> 4 :> 1 :> 2 :> Nil>>>rotateLeft xs (-1)4 :> 1 :> 2 :> 3 :> Nil
NB: Use rotateLeftS if you want to rotate left by a static amount.
rotateRight :: forall i (n :: Nat) a. (Enum i, KnownNat n) => Vec n a -> i -> Vec n a Source #
Dynamically rotate a Vector to the right:
>>>let xs = 1 :> 2 :> 3 :> 4 :> Nil>>>rotateRight xs 14 :> 1 :> 2 :> 3 :> Nil>>>rotateRight xs 23 :> 4 :> 1 :> 2 :> Nil>>>rotateRight xs (-1)2 :> 3 :> 4 :> 1 :> Nil
NB: Use rotateRightS if you want to rotate right by a static amount.
rotateLeftS :: forall (n :: Nat) a (d :: Nat). KnownNat n => Vec n a -> SNat d -> Vec n a Source #
Statically rotate a Vector to the left:
>>>let xs = 1 :> 2 :> 3 :> 4 :> Nil>>>rotateLeftS xs d12 :> 3 :> 4 :> 1 :> Nil
NB: Use rotateLeft if you want to rotate left by a dynamic amount.
rotateRightS :: forall (n :: Nat) a (d :: Nat). KnownNat n => Vec n a -> SNat d -> Vec n a Source #
Statically rotate a Vector to the right:
>>>let xs = 1 :> 2 :> 3 :> 4 :> Nil>>>rotateRightS xs d14 :> 1 :> 2 :> 3 :> Nil
NB: Use rotateRight if you want to rotate right by a dynamic amount.
izipWith :: forall (n :: Nat) a b c. KnownNat n => (Index n -> a -> b -> c) -> Vec n a -> Vec n b -> Vec n c Source #
Zip two vectors with a functions that also takes the elements' indices.
>>>izipWith (\i a b -> i + a + b) (2 :> 2 :> Nil) (3 :> 3:> Nil)*** Exception: X: Clash.Sized.Index: result 2 is out of bounds: [0..1] ...>>>izipWith (\i a b -> extend (bitCoerce i) + a + b) (2 :> 2 :> Nil) (3 :> 3 :> Nil) :: Vec 2 (Unsigned 8)5 :> 6 :> Nil
"imap f xs" corresponds to the following circuit layout:
NB: izipWith is strict in its second argument, and lazy in its
third. This matters when izipWith is used in a recursive setting. See
lazyV for more information.
Arguments
| :: forall (p :: TyFun Nat Type -> Type) (k :: Nat) a. KnownNat k | |
| => Proxy p | The motive |
| -> (forall (l :: Nat). SNat l -> a -> (p @@ l) -> p @@ (l + 1)) | Function to fold. NB: The |
| -> (p @@ 0) | Initial element |
| -> Vec k a | Vector to fold over |
| -> p @@ k |
A dependently typed fold.
doctests setup
>>>:seti -fplugin GHC.TypeLits.Normalise>>>import Data.Singletons (Apply, Proxy (..), TyFun)>>>data Append (m :: Nat) (a :: Type) (f :: TyFun Nat Type) :: Type>>>type instance Apply (Append m a) l = Vec (l + m) a>>>let append' xs ys = dfold (Proxy :: Proxy (Append m a)) (const (:>)) ys xs
Example usage
Using lists, we can define append (a.k.a. Data.List.++) in
terms of Data.List.foldr:
>>>import qualified Data.List>>>let append xs ys = Data.List.foldr (:) ys xs>>>append [1,2] [3,4][1,2,3,4]
However, when we try to do the same for Vec, by defining append' in terms
of Clash.Sized.Vector.foldr:
append' xs ys = foldr (:>) ys xs
we get a type error:
>>> let append' xs ys = foldr (:>) ys xs
<interactive>:...
• Occurs check: cannot construct the infinite type: ... ~ ... + 1
Expected type: a -> Vec ... a -> Vec ... a
Actual type: a -> Vec ... a -> Vec (... + 1) a
• In the first argument of ‘foldr’, namely ‘(:>)’
In the expression: foldr (:>) ys xs
In an equation for ‘append'’: append' xs ys = foldr (:>) ys xs
• Relevant bindings include
ys :: Vec ... a (bound at ...)
append' :: Vec n a -> Vec ... a -> Vec ... a
(bound at ...)
The reason is that the type of foldr is:
>>>:t foldrfoldr :: (a -> b -> b) -> b -> Vec n a -> b
While the type of (:>) is:
>>>:t (:>)(:>) :: a -> Vec n a -> Vec (n + 1) a
We thus need a fold function that can handle the growing vector type:
dfold. Compared to foldr, dfold takes an extra parameter, called the
motive, that allows the folded function to have an argument and result type
that depends on the current length of the vector. Using dfold, we can
now correctly define append':
import Data.Singletons import Data.Proxy data Append (m :: Nat) (a :: Type) (f ::TyFunNat Type) :: Type type instanceApply(Append m a) l =Vec(l + m) a append' xs ys =dfold(Proxy :: Proxy (Append m a)) (const (:>)) ys xs
We now see that append' has the appropriate type:
>>>:t append'append' :: KnownNat k => Vec k a -> Vec m a -> Vec (k + m) a
And that it works:
>>>append' (1 :> 2 :> Nil) (3 :> 4 :> Nil)1 :> 2 :> 3 :> 4 :> Nil
NB: "" creates a linear structure, which has a depth,
or delay, of O(dfold m f z xs). Look at length xsdtfold for a dependently typed
fold that produces a structure with a depth of O(log_2()).length xs
vfold :: forall (k :: Nat) a b. KnownNat k => (forall (l :: Nat). SNat l -> a -> Vec l b -> Vec (l + 1) b) -> Vec k a -> Vec k b Source #
Specialised version of dfold that builds a triangular computational
structure.
doctests setup
>>>let compareSwap a b = if a > b then (a,b) else (b,a)>>>let insert y xs = let (y',xs') = mapAccumL compareSwap y xs in xs' :< y'>>>let insertionSort = vfold (const insert)
Example usage
compareSwap a b = if a > b then (a,b) else (b,a) insert y xs = let (y',xs') =mapAccumLcompareSwap y xs in xs':<y' insertionSort =vfold(const insert)
Builds a triangular structure of compare and swaps to sort a row.
>>>insertionSort (7 :> 3 :> 9 :> 1 :> Nil)1 :> 3 :> 7 :> 9 :> Nil
The circuit layout of insertionSort, build using vfold, is:
Arguments
| :: forall (n :: Nat) (stX :: Natural) a b. KnownNat n | |
| => SNat (stX + 1) | Windows length stX, at least size 1 |
| -> (Vec (stX + 1) a -> b) | The stencil (function) |
| -> Vec ((stX + n) + 1) a | |
| -> Vec (n + 1) b |
1-dimensional stencil computations
"stencil1d stX f xs", where xs has stX + n elements, applies the
stencil computation f on: n + 1 overlapping (1D) windows of length stX,
drawn from xs. The resulting vector has n + 1 elements.
>>>let xs = (1:>2:>3:>4:>5:>6:>Nil)>>>:t xsxs :: Num a => Vec 6 a>>>:t stencil1d d2 sum xsstencil1d d2 sum xs :: Num b => Vec 5 b>>>stencil1d d2 sum xs3 :> 5 :> 7 :> 9 :> 11 :> Nil
Arguments
| :: forall (n :: Nat) (m :: Nat) (stY :: Natural) (stX :: Natural) a b. (KnownNat n, KnownNat m) | |
| => SNat (stY + 1) | Window hight stY, at least size 1 |
| -> SNat (stX + 1) | Window width stX, at least size 1 |
| -> (Vec (stY + 1) (Vec (stX + 1) a) -> b) | The stencil (function) |
| -> Vec ((stY + m) + 1) (Vec ((stX + n) + 1) a) | |
| -> Vec (m + 1) (Vec (n + 1) b) |
2-dimensional stencil computations
"stencil2d stY stX f xss", where xss is a matrix of stY + m rows
of stX + n elements, applies the stencil computation f on:
(m + 1) * (n + 1) overlapping (2D) windows of stY rows of stX elements,
drawn from xss. The result matrix has m + 1 rows of n + 1 elements.
>>>let xss = ((1:>2:>3:>4:>Nil):>(5:>6:>7:>8:>Nil):>(9:>10:>11:>12:>Nil):>(13:>14:>15:>16:>Nil):>Nil)>>>:t xssxss :: Num a => Vec 4 (Vec 4 a)
>>>:t stencil2d d2 d2 (sum . map sum) xssstencil2d d2 d2 (sum . map sum) xss :: Num a => Vec 3 (Vec 3 a)
>>>stencil2d d2 d2 (sum . map sum) xss(14 :> 18 :> 22 :> Nil) :> (30 :> 34 :> 38 :> Nil) :> (46 :> 50 :> 54 :> Nil) :> Nil
Arguments
| :: forall (n :: Nat) (stX :: Natural) a. KnownNat n | |
| => SNat (stX + 1) | Length of the window, at least size 1 |
| -> Vec ((stX + n) + 1) a | |
| -> Vec (n + 1) (Vec (stX + 1) a) |
"windows1d stX xs", where the vector xs has stX + n elements,
returns a vector of n + 1 overlapping (1D) windows of xs of length stX.
>>>let xs = (1:>2:>3:>4:>5:>6:>Nil)>>>:t xsxs :: Num a => Vec 6 a>>>:t windows1d d2 xswindows1d d2 xs :: Num a => Vec 5 (Vec 2 a)>>>windows1d d2 xs(1 :> 2 :> Nil) :> (2 :> 3 :> Nil) :> (3 :> 4 :> Nil) :> (4 :> 5 :> Nil) :> (5 :> 6 :> Nil) :> Nil
Arguments
| :: forall (n :: Nat) (m :: Nat) (stY :: Natural) (stX :: Natural) a. (KnownNat n, KnownNat m) | |
| => SNat (stY + 1) | Window hight stY, at least size 1 |
| -> SNat (stX + 1) | Window width stX, at least size 1 |
| -> Vec ((stY + m) + 1) (Vec ((stX + n) + 1) a) | |
| -> Vec (m + 1) (Vec (n + 1) (Vec (stY + 1) (Vec (stX + 1) a))) |
"windows2d stY stX xss", where matrix xss has stY + m rows of
stX + n, returns a matrix of m+1 rows of n+1 elements. The elements
of this new matrix are the overlapping (2D) windows of xss, where every
window has stY rows of stX elements.
>>>let xss = ((1:>2:>3:>4:>Nil):>(5:>6:>7:>8:>Nil):>(9:>10:>11:>12:>Nil):>(13:>14:>15:>16:>Nil):>Nil)>>>:t xssxss :: Num a => Vec 4 (Vec 4 a)>>>:t windows2d d2 d2 xsswindows2d d2 d2 xss :: Num a => Vec 3 (Vec 3 (Vec 2 (Vec 2 a)))>>>windows2d d2 d2 xss(((1 :> 2 :> Nil) :> (5 :> 6 :> Nil) :> Nil) :> ((2 :> 3 :> Nil) :> (6 :> 7 :> Nil) :> Nil) :> ((3 :> 4 :> Nil) :> (7 :> 8 :> Nil) :> Nil) :> Nil) :> (((5 :> 6 :> Nil) :> (9 :> 10 :> Nil) :> Nil) :> ((6 :> 7 :> Nil) :> (10 :> 11 :> Nil) :> Nil) :> ((7 :> 8 :> Nil) :> (11 :> 12 :> Nil) :> Nil) :> Nil) :> (((9 :> 10 :> Nil) :> (13 :> 14 :> Nil) :> Nil) :> ((10 :> 11 :> Nil) :> (14 :> 15 :> Nil) :> Nil) :> ((11 :> 12 :> Nil) :> (15 :> 16 :> Nil) :> Nil) :> Nil) :> Nil
seqV :: forall (n :: Nat) a b. KnownNat n => Vec n a -> b -> b infixr 0 Source #
Evaluate all elements of a vector to WHNF, returning the second argument
forceV :: forall (n :: Nat) a. KnownNat n => Vec n a -> Vec n a Source #
Evaluate all elements of a vector to WHNF
seqVX :: forall (n :: Nat) a b. KnownNat n => Vec n a -> b -> b infixr 0 Source #
Evaluate all elements of a vector to WHNF, returning the second argument.
Does not propagate XExceptions.
forceVX :: forall (n :: Nat) a. KnownNat n => Vec n a -> Vec n a Source #
Evaluate all elements of a vector to WHNF. Does not propagate
XExceptions.
concatBitVector# :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m) => Vec n (BitVector m) -> BitVector (n * m) Source #
unconcatBitVector# :: forall (n :: Nat) (m :: Nat). (KnownNat n, KnownNat m) => BitVector (n * m) -> Vec n (BitVector m) Source #
Perfect depth trees
module Clash.Sized.RTree
Annotations
module Clash.Annotations.TopEntity
Generics type-classes
Representable types of kind *.
This class is derivable in GHC with the DeriveGeneric flag on.
A Generic instance must satisfy the following laws:
from.to≡idto.from≡id
Instances
| Generic ShortByteString | |||||
Defined in Data.ByteString.Short.Internal Associated Types
Methods from :: ShortByteString -> Rep ShortByteString x Source # to :: Rep ShortByteString x -> ShortByteString Source # | |||||
| Generic ConstrRepr Source # | |||||
Defined in Clash.Annotations.BitRepresentation Associated Types
| |||||
| Generic DataReprAnn Source # | |||||
Defined in Clash.Annotations.BitRepresentation Associated Types
Methods from :: DataReprAnn -> Rep DataReprAnn x Source # to :: Rep DataReprAnn x -> DataReprAnn Source # | |||||
| Generic ConstrRepr' Source # | |||||
Defined in Clash.Annotations.BitRepresentation.Internal Associated Types
Methods from :: ConstrRepr' -> Rep ConstrRepr' x Source # to :: Rep ConstrRepr' x -> ConstrRepr' Source # | |||||
| Generic DataRepr' Source # | |||||
Defined in Clash.Annotations.BitRepresentation.Internal Associated Types
| |||||
| Generic Type' Source # | |||||
Defined in Clash.Annotations.BitRepresentation.Internal Associated Types
| |||||
| Generic HDL Source # | |||||
Defined in Clash.Annotations.Primitive Associated Types
| |||||
| Generic Primitive Source # | |||||
Defined in Clash.Annotations.Primitive Associated Types
| |||||
| Generic PrimitiveWarning Source # | |||||
Defined in Clash.Annotations.Primitive Associated Types
Methods from :: PrimitiveWarning -> Rep PrimitiveWarning x Source # to :: Rep PrimitiveWarning x -> PrimitiveWarning Source # | |||||
| Generic PortName Source # | |||||
Defined in Clash.Annotations.TopEntity Associated Types
| |||||
| Generic TopEntity Source # | |||||
Defined in Clash.Annotations.TopEntity Associated Types
| |||||
| Generic RxReg Source # | |||||
Defined in Clash.Examples.Internal Associated Types
| |||||
| Generic TxReg Source # | |||||
Defined in Clash.Examples.Internal Associated Types
| |||||
| Generic ActiveEdge Source # | |||||
Defined in Clash.Signal.Internal Associated Types
| |||||
| Generic ClockAB Source # | |||||
Defined in Clash.Signal.Internal Associated Types
| |||||
| Generic Femtoseconds Source # | |||||
Defined in Clash.Signal.Internal Associated Types
Methods from :: Femtoseconds -> Rep Femtoseconds x Source # to :: Rep Femtoseconds x -> Femtoseconds Source # | |||||
| Generic InitBehavior Source # | |||||
Defined in Clash.Signal.Internal Associated Types
Methods from :: InitBehavior -> Rep InitBehavior x Source # to :: Rep InitBehavior x -> InitBehavior Source # | |||||
| Generic ResetKind Source # | |||||
Defined in Clash.Signal.Internal | |||||
| Generic ResetPolarity Source # | |||||
Defined in Clash.Signal.Internal Associated Types
Methods from :: ResetPolarity -> Rep ResetPolarity x Source # to :: Rep ResetPolarity x -> ResetPolarity Source # | |||||
| Generic VDomainConfiguration Source # | |||||
Defined in Clash.Signal.Internal Associated Types
Methods from :: VDomainConfiguration -> Rep VDomainConfiguration x Source # to :: Rep VDomainConfiguration x -> VDomainConfiguration Source # | |||||
| Generic Bit Source # | |||||
Defined in Clash.Sized.Internal.BitVector Associated Types
| |||||
| Generic ForeignSrcLang | |||||
Defined in GHC.ForeignSrcLang.Type Associated Types
Methods from :: ForeignSrcLang -> Rep ForeignSrcLang x Source # to :: Rep ForeignSrcLang x -> ForeignSrcLang Source # | |||||
| Generic Extension | |||||
Defined in GHC.LanguageExtensions.Type Associated Types
| |||||
| Generic Void | |||||
| Generic ByteOrder | |||||
Defined in GHC.Internal.ByteOrder | |||||
| Generic All | |||||
Defined in GHC.Internal.Data.Semigroup.Internal Associated Types
| |||||
| Generic Any | |||||
Defined in GHC.Internal.Data.Semigroup.Internal Associated Types
| |||||
| Generic Version | |||||
Defined in GHC.Internal.Data.Version Associated Types
| |||||
| Generic Fingerprint | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from :: Fingerprint -> Rep Fingerprint x Source # to :: Rep Fingerprint x -> Fingerprint Source # | |||||
| Generic Associativity | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from :: Associativity -> Rep Associativity x Source # to :: Rep Associativity x -> Associativity Source # | |||||
| Generic DecidedStrictness | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from :: DecidedStrictness -> Rep DecidedStrictness x Source # to :: Rep DecidedStrictness x -> DecidedStrictness Source # | |||||
| Generic Fixity | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic SourceStrictness | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from :: SourceStrictness -> Rep SourceStrictness x Source # to :: Rep SourceStrictness x -> SourceStrictness Source # | |||||
| Generic SourceUnpackedness | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from :: SourceUnpackedness -> Rep SourceUnpackedness x Source # to :: Rep SourceUnpackedness x -> SourceUnpackedness Source # | |||||
| Generic ExitCode | |||||
Defined in GHC.Internal.IO.Exception Associated Types
| |||||
| Generic CCFlags | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
| |||||
| Generic ConcFlags | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
| |||||
| Generic DebugFlags | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
| |||||
| Generic DoCostCentres | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
Methods from :: DoCostCentres -> Rep DoCostCentres x Source # to :: Rep DoCostCentres x -> DoCostCentres Source # | |||||
| Generic DoHeapProfile | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
Methods from :: DoHeapProfile -> Rep DoHeapProfile x Source # to :: Rep DoHeapProfile x -> DoHeapProfile Source # | |||||
| Generic DoTrace | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
| |||||
| Generic GCFlags | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
| |||||
| Generic GiveGCStats | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
Methods from :: GiveGCStats -> Rep GiveGCStats x Source # to :: Rep GiveGCStats x -> GiveGCStats Source # | |||||
| Generic HpcFlags | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
| |||||
| Generic MiscFlags | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
| |||||
| Generic ParFlags | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
| |||||
| Generic ProfFlags | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
| |||||
| Generic RTSFlags | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
| |||||
| Generic TickyFlags | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
| |||||
| Generic TraceFlags | |||||
Defined in GHC.Internal.RTS.Flags Associated Types
| |||||
| Generic SrcLoc | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic GCDetails | |||||
Defined in GHC.Internal.Stats Associated Types
| |||||
| Generic RTSStats | |||||
Defined in GHC.Internal.Stats Associated Types
| |||||
| Generic GeneralCategory | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from :: GeneralCategory -> Rep GeneralCategory x Source # to :: Rep GeneralCategory x -> GeneralCategory Source # | |||||
| Generic Ordering | |||||
Defined in GHC.Internal.Generics | |||||
| Generic Half | |||||
Defined in Numeric.Half.Internal Associated Types
| |||||
| Generic SrcLoc | |||||
Defined in Language.Haskell.Exts.SrcLoc Associated Types
| |||||
| Generic SrcSpan | |||||
Defined in Language.Haskell.Exts.SrcLoc Associated Types
| |||||
| Generic SrcSpanInfo | |||||
Defined in Language.Haskell.Exts.SrcLoc Associated Types
| |||||
| Generic Boxed | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic Tool | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic OsChar | |||||
Defined in System.OsString.Internal.Types Associated Types
| |||||
| Generic OsString | |||||
Defined in System.OsString.Internal.Types Associated Types
| |||||
| Generic PosixChar | |||||
Defined in System.OsString.Internal.Types Associated Types
| |||||
| Generic PosixString | |||||
Defined in System.OsString.Internal.Types Associated Types
Methods from :: PosixString -> Rep PosixString x Source # to :: Rep PosixString x -> PosixString Source # | |||||
| Generic WindowsChar | |||||
Defined in System.OsString.Internal.Types Associated Types
Methods from :: WindowsChar -> Rep WindowsChar x Source # to :: Rep WindowsChar x -> WindowsChar Source # | |||||
| Generic WindowsString | |||||
Defined in System.OsString.Internal.Types Associated Types
Methods from :: WindowsString -> Rep WindowsString x Source # to :: Rep WindowsString x -> WindowsString Source # | |||||
| Generic Mode | |||||
Defined in Text.PrettyPrint.Annotated.HughesPJ Associated Types
| |||||
| Generic Style | |||||
Defined in Text.PrettyPrint.Annotated.HughesPJ Associated Types
| |||||
| Generic TextDetails | |||||
Defined in Text.PrettyPrint.Annotated.HughesPJ Associated Types
Methods from :: TextDetails -> Rep TextDetails x Source # to :: Rep TextDetails x -> TextDetails Source # | |||||
| Generic Doc | |||||
Defined in Text.PrettyPrint.HughesPJ Associated Types
| |||||
| Generic AnnLookup | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic AnnTarget | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Bang | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic BndrVis | |||||
Defined in Language.Haskell.TH.Syntax | |||||
| Generic Body | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Bytes | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Callconv | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Clause | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Con | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Dec | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic DecidedStrictness | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
Methods from :: DecidedStrictness -> Rep DecidedStrictness x Source # to :: Rep DecidedStrictness x -> DecidedStrictness Source # | |||||
| Generic DerivClause | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
Methods from :: DerivClause -> Rep DerivClause x Source # to :: Rep DerivClause x -> DerivClause Source # | |||||
| Generic DerivStrategy | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
Methods from :: DerivStrategy -> Rep DerivStrategy x Source # to :: Rep DerivStrategy x -> DerivStrategy Source # | |||||
| Generic DocLoc | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Exp | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic FamilyResultSig | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
Methods from :: FamilyResultSig -> Rep FamilyResultSig x Source # to :: Rep FamilyResultSig x -> FamilyResultSig Source # | |||||
| Generic Fixity | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic FixityDirection | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
Methods from :: FixityDirection -> Rep FixityDirection x Source # to :: Rep FixityDirection x -> FixityDirection Source # | |||||
| Generic Foreign | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic FunDep | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Guard | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Info | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic InjectivityAnn | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
Methods from :: InjectivityAnn -> Rep InjectivityAnn x Source # to :: Rep InjectivityAnn x -> InjectivityAnn Source # | |||||
| Generic Inline | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Lit | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Loc | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Match | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic ModName | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Module | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic ModuleInfo | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Name | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic NameFlavour | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
Methods from :: NameFlavour -> Rep NameFlavour x Source # to :: Rep NameFlavour x -> NameFlavour Source # | |||||
| Generic NameSpace | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic NamespaceSpecifier | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
Methods from :: NamespaceSpecifier -> Rep NamespaceSpecifier x Source # to :: Rep NamespaceSpecifier x -> NamespaceSpecifier Source # | |||||
| Generic OccName | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Overlap | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Pat | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic PatSynArgs | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic PatSynDir | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Phases | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic PkgName | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Pragma | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Range | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Role | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic RuleBndr | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic RuleMatch | |||||
Defined in Language.Haskell.TH.Syntax | |||||
| Generic Safety | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic SourceStrictness | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
Methods from :: SourceStrictness -> Rep SourceStrictness x Source # to :: Rep SourceStrictness x -> SourceStrictness Source # | |||||
| Generic SourceUnpackedness | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
Methods from :: SourceUnpackedness -> Rep SourceUnpackedness x Source # to :: Rep SourceUnpackedness x -> SourceUnpackedness Source # | |||||
| Generic Specificity | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
Methods from :: Specificity -> Rep Specificity x Source # to :: Rep Specificity x -> Specificity Source # | |||||
| Generic Stmt | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic TyLit | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic TySynEqn | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic Type | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic TypeFamilyHead | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
Methods from :: TypeFamilyHead -> Rep TypeFamilyHead x Source # to :: Rep TypeFamilyHead x -> TypeFamilyHead Source # | |||||
| Generic ConstructorInfo | |||||
Defined in Language.Haskell.TH.Datatype Associated Types
| |||||
| Generic ConstructorVariant | |||||
Defined in Language.Haskell.TH.Datatype Associated Types
| |||||
| Generic DatatypeInfo | |||||
Defined in Language.Haskell.TH.Datatype Associated Types
| |||||
| Generic DatatypeVariant | |||||
Defined in Language.Haskell.TH.Datatype Associated Types
| |||||
| Generic FieldStrictness | |||||
Defined in Language.Haskell.TH.Datatype Associated Types
| |||||
| Generic Strictness | |||||
Defined in Language.Haskell.TH.Datatype Associated Types
| |||||
| Generic Unpackedness | |||||
Defined in Language.Haskell.TH.Datatype Associated Types
| |||||
| Generic () | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic Bool | |||||
Defined in GHC.Internal.Generics | |||||
| Generic (Complex a) | |||||
Defined in Data.Complex Associated Types
| |||||
| Generic (First a) | |||||
Defined in Data.Semigroup Associated Types
| |||||
| Generic (Last a) | |||||
Defined in Data.Semigroup Associated Types
| |||||
| Generic (Max a) | |||||
Defined in Data.Semigroup Associated Types
| |||||
| Generic (Min a) | |||||
Defined in Data.Semigroup Associated Types
| |||||
| Generic (WrappedMonoid m) | |||||
Defined in Data.Semigroup Associated Types
Methods from :: WrappedMonoid m -> Rep (WrappedMonoid m) x Source # to :: Rep (WrappedMonoid m) x -> WrappedMonoid m Source # | |||||
| Generic (PrimitiveGuard a) Source # | |||||
Defined in Clash.Annotations.Primitive Associated Types
Methods from :: PrimitiveGuard a -> Rep (PrimitiveGuard a) x Source # to :: Rep (PrimitiveGuard a) x -> PrimitiveGuard a Source # | |||||
| Generic (Attr a) Source # | |||||
Defined in Clash.Annotations.SynthesisAttributes Associated Types
| |||||
| Generic (SimOnly a) Source # | |||||
Defined in Clash.Magic Associated Types
| |||||
| Generic (Overflowing a) Source # | |||||
Defined in Clash.Num.Overflowing Associated Types
Methods from :: Overflowing a -> Rep (Overflowing a) x Source # to :: Rep (Overflowing a) x -> Overflowing a Source # | |||||
| Generic (BitVector n) Source # | |||||
Defined in Clash.Sized.Internal.BitVector Associated Types
| |||||
| Generic (Index n) Source # | |||||
Defined in Clash.Sized.Internal.Index Associated Types
| |||||
| Generic (Signed n) Source # | |||||
Defined in Clash.Sized.Internal.Signed Associated Types
| |||||
| Generic (Unsigned n) Source # | |||||
Defined in Clash.Sized.Internal.Unsigned Associated Types
| |||||
| Generic (SCC vertex) | |||||
Defined in Data.Graph Associated Types
| |||||
| Generic (Digit a) | |||||
Defined in Data.Sequence.Internal Associated Types
| |||||
| Generic (Elem a) | |||||
Defined in Data.Sequence.Internal Associated Types
| |||||
| Generic (FingerTree a) | |||||
Defined in Data.Sequence.Internal Associated Types
Methods from :: FingerTree a -> Rep (FingerTree a) x Source # to :: Rep (FingerTree a) x -> FingerTree a Source # | |||||
| Generic (Node a) | |||||
Defined in Data.Sequence.Internal Associated Types
| |||||
| Generic (ViewL a) | |||||
Defined in Data.Sequence.Internal Associated Types
| |||||
| Generic (ViewR a) | |||||
Defined in Data.Sequence.Internal Associated Types
| |||||
| Generic (Tree a) | |||||
Defined in Data.Tree Associated Types
| |||||
| Generic (Fix f) | |||||
| Generic (NonEmpty a) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (Identity a) | |||||
Defined in GHC.Internal.Data.Functor.Identity Associated Types
| |||||
| Generic (First a) | |||||
Defined in GHC.Internal.Data.Monoid Associated Types
| |||||
| Generic (Last a) | |||||
Defined in GHC.Internal.Data.Monoid Associated Types
| |||||
| Generic (Down a) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (Dual a) | |||||
Defined in GHC.Internal.Data.Semigroup.Internal Associated Types
| |||||
| Generic (Endo a) | |||||
Defined in GHC.Internal.Data.Semigroup.Internal Associated Types
| |||||
| Generic (Product a) | |||||
Defined in GHC.Internal.Data.Semigroup.Internal Associated Types
| |||||
| Generic (Sum a) | |||||
Defined in GHC.Internal.Data.Semigroup.Internal Associated Types
| |||||
| Generic (ZipList a) | |||||
Defined in GHC.Internal.Functor.ZipList Associated Types
| |||||
| Generic (Par1 p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (Loc a) | |||||
Defined in Language.Haskell.Exts.SrcLoc Associated Types
| |||||
| Generic (Activation l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Alt l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Annotation l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Assoc l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Asst l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (BangType l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Binds l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (BooleanFormula l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Bracket l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (CName l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (CallConv l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (ClassDecl l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (ConDecl l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Context l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (DataOrNew l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Decl l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (DeclHead l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (DerivStrategy l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Deriving l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (EWildcard l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Exp l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (ExportSpec l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (ExportSpecList l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (FieldDecl l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (FieldUpdate l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (FunDep l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (GadtDecl l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (GuardedRhs l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (IPBind l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (IPName l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (ImportDecl l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (ImportSpec l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (ImportSpecList l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (InjectivityInfo l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (InstDecl l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (InstHead l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (InstRule l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Literal l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Match l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (MaybePromotedName l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Module l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (ModuleHead l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (ModuleName l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (ModulePragma l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Name l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Namespace l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Op l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Overlap l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (PXAttr l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Pat l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (PatField l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (PatternSynDirection l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Promoted l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (QName l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (QOp l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (QualConDecl l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (QualStmt l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (RPat l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (RPatOp l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (ResultSig l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Rhs l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Role l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Rule l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (RuleVar l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Safety l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Sign l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (SpecialCon l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Splice l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Stmt l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (TyVarBind l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Type l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (TypeEqn l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Unpackedness l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (WarningText l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (XAttr l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (XName l) | |||||
Defined in Language.Haskell.Exts.Syntax Associated Types
| |||||
| Generic (Doc a) | |||||
Defined in Text.PrettyPrint.Annotated.HughesPJ Associated Types
| |||||
| Generic (Maybe a) | |||||
Defined in Data.Strict.Maybe Associated Types
| |||||
| Generic (TyVarBndr flag) | |||||
Defined in Language.Haskell.TH.Syntax Associated Types
| |||||
| Generic (Maybe a) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (Solo a) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic [a] | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (WrappedMonad m a) | |||||
Defined in Control.Applicative Associated Types
Methods from :: WrappedMonad m a -> Rep (WrappedMonad m a) x Source # to :: Rep (WrappedMonad m a) x -> WrappedMonad m a Source # | |||||
| Generic (Arg a b) | |||||
Defined in Data.Semigroup Associated Types
| |||||
| Generic (RamOp n a) Source # | |||||
Defined in Clash.Explicit.BlockRam Associated Types
| |||||
| KnownNat n => Generic (Vec n a) Source # | In many cases, this Generic instance only allows generic functions/instances over vectors of at least size 1, due to the n-1 in the Rep (Vec n a) definition. We'll have to wait for things like https://ryanglscott.github.io/2018/02/11/how-to-derive-generic-for-some-gadts/ before we can work around this limitation | ||||
Defined in Clash.Sized.Vector Associated Types
| |||||
| Generic (Cofree f a) | |||||
Defined in Control.Comonad.Cofree Associated Types
| |||||
| Generic (Free f a) | |||||
Defined in Control.Monad.Free Associated Types
| |||||
| Generic (Either a b) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (Proxy t) | |||||
Defined in GHC.Internal.Generics | |||||
| Generic (U1 p) | |||||
Defined in GHC.Internal.Generics | |||||
| Generic (V1 p) | |||||
Defined in GHC.Internal.Generics | |||||
| Generic (ListF a b) | |||||
Defined in Data.Functor.Base Associated Types
| |||||
| Generic (NonEmptyF a b) | |||||
Defined in Data.Functor.Base Associated Types
| |||||
| Generic (TreeF a b) | |||||
Defined in Data.Functor.Base Associated Types
| |||||
| Generic (Either a b) | |||||
Defined in Data.Strict.Either Associated Types
| |||||
| Generic (These a b) | |||||
Defined in Data.Strict.These Associated Types
| |||||
| Generic (Pair a b) | |||||
Defined in Data.Strict.Tuple Associated Types
| |||||
| Generic (These a b) | |||||
Defined in Data.These Associated Types
| |||||
| Generic (Lift f a) | |||||
Defined in Control.Applicative.Lift Associated Types
| |||||
| Generic (MaybeT m a) | |||||
Defined in Control.Monad.Trans.Maybe Associated Types
| |||||
| Generic (a, b) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (WrappedArrow a b c) | |||||
Defined in Control.Applicative Associated Types
Methods from :: WrappedArrow a b c -> Rep (WrappedArrow a b c) x Source # to :: Rep (WrappedArrow a b c) x -> WrappedArrow a b c Source # | |||||
| Generic (Fix p a) | |||||
Defined in Data.Bifunctor.Fix Associated Types
| |||||
| Generic (Join p a) | |||||
Defined in Data.Bifunctor.Join Associated Types
| |||||
| Generic (CofreeF f a b) | |||||
Defined in Control.Comonad.Trans.Cofree Associated Types
| |||||
| Generic (FreeF f a b) | |||||
Defined in Control.Monad.Trans.Free Associated Types
| |||||
| Generic (Kleisli m a b) | |||||
Defined in GHC.Internal.Control.Arrow Associated Types
| |||||
| Generic (Const a b) | |||||
Defined in GHC.Internal.Data.Functor.Const Associated Types
| |||||
| Generic (Ap f a) | |||||
Defined in GHC.Internal.Data.Monoid Associated Types
| |||||
| Generic (Alt f a) | |||||
Defined in GHC.Internal.Data.Semigroup.Internal Associated Types
| |||||
| Generic (Rec1 f p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (URec (Ptr ()) p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (URec Char p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (URec Double p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (URec Float p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (URec Int p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (URec Word p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (Tagged s b) | |||||
Defined in Data.Tagged Associated Types
| |||||
| Generic (Backwards f a) | |||||
Defined in Control.Applicative.Backwards Associated Types
| |||||
| Generic (AccumT w m a) | |||||
Defined in Control.Monad.Trans.Accum Associated Types
| |||||
| Generic (ExceptT e m a) | |||||
Defined in Control.Monad.Trans.Except Associated Types
| |||||
| Generic (IdentityT f a) | |||||
Defined in Control.Monad.Trans.Identity Associated Types
| |||||
| Generic (ReaderT r m a) | |||||
Defined in Control.Monad.Trans.Reader Associated Types
| |||||
| Generic (SelectT r m a) | |||||
Defined in Control.Monad.Trans.Select Associated Types
| |||||
| Generic (StateT s m a) | |||||
Defined in Control.Monad.Trans.State.Lazy Associated Types
| |||||
| Generic (StateT s m a) | |||||
Defined in Control.Monad.Trans.State.Strict Associated Types
| |||||
| Generic (WriterT w m a) | |||||
Defined in Control.Monad.Trans.Writer.CPS Associated Types
| |||||
| Generic (WriterT w m a) | |||||
Defined in Control.Monad.Trans.Writer.Lazy Associated Types
| |||||
| Generic (WriterT w m a) | |||||
Defined in Control.Monad.Trans.Writer.Strict Associated Types
| |||||
| Generic (Constant a b) | |||||
Defined in Data.Functor.Constant Associated Types
| |||||
| Generic (Reverse f a) | |||||
Defined in Data.Functor.Reverse Associated Types
| |||||
| Generic (a, b, c) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (Product f g a) | |||||
Defined in Data.Functor.Product Associated Types
| |||||
| Generic (Sum f g a) | |||||
Defined in Data.Functor.Sum Associated Types
| |||||
| Generic ((f :*: g) p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic ((f :+: g) p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (K1 i c p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (ContT r m a) | |||||
Defined in Control.Monad.Trans.Cont Associated Types
| |||||
| Generic (a, b, c, d) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (Compose f g a) | |||||
Defined in Data.Functor.Compose Associated Types
| |||||
| Generic (Clown f a b) | |||||
Defined in Data.Bifunctor.Clown Associated Types
| |||||
| Generic (Flip p a b) | |||||
Defined in Data.Bifunctor.Flip Associated Types
| |||||
| Generic (Joker g a b) | |||||
Defined in Data.Bifunctor.Joker Associated Types
| |||||
| Generic (WrappedBifunctor p a b) | |||||
Defined in Data.Bifunctor.Wrapped Associated Types
| |||||
| Generic ((f :.: g) p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (M1 i c f p) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (RWST r w s m a) | |||||
Defined in Control.Monad.Trans.RWS.CPS Associated Types
| |||||
| Generic (RWST r w s m a) | |||||
Defined in Control.Monad.Trans.RWS.Lazy Associated Types
| |||||
| Generic (RWST r w s m a) | |||||
Defined in Control.Monad.Trans.RWS.Strict Associated Types
| |||||
| Generic (a, b, c, d, e) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (Product f g a b) | |||||
Defined in Data.Bifunctor.Product Associated Types
| |||||
| Generic (Sum p q a b) | |||||
Defined in Data.Bifunctor.Sum Associated Types
| |||||
| Generic (a, b, c, d, e, f) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (Tannen f p a b) | |||||
Defined in Data.Bifunctor.Tannen Associated Types
| |||||
| Generic (a, b, c, d, e, f, g) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (a, b, c, d, e, f, g, h) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (Biff p f g a b) | |||||
Defined in Data.Bifunctor.Biff Associated Types
| |||||
| Generic (a, b, c, d, e, f, g, h, i) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (a, b, c, d, e, f, g, h, i, j) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (a, b, c, d, e, f, g, h, i, j, k) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (a, b, c, d, e, f, g, h, i, j, k, l) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (a, b, c, d, e, f, g, h, i, j, k, l, m) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
class Generic1 (f :: k -> Type) Source #
Representable types of kind * -> * (or kind k -> *, when PolyKinds
is enabled).
This class is derivable in GHC with the DeriveGeneric flag on.
A Generic1 instance must satisfy the following laws:
from1.to1≡idto1.from1≡id
Instances
| Generic1 Complex | |||||
Defined in Data.Complex Associated Types
| |||||
| Generic1 First | |||||
Defined in Data.Semigroup Associated Types
| |||||
| Generic1 Last | |||||
Defined in Data.Semigroup Associated Types
| |||||
| Generic1 Max | |||||
Defined in Data.Semigroup Associated Types
| |||||
| Generic1 Min | |||||
Defined in Data.Semigroup Associated Types
| |||||
| Generic1 WrappedMonoid | |||||
Defined in Data.Semigroup Associated Types
Methods from1 :: WrappedMonoid a -> Rep1 WrappedMonoid a Source # to1 :: Rep1 WrappedMonoid a -> WrappedMonoid a Source # | |||||
| Generic1 SCC | |||||
Defined in Data.Graph Associated Types
| |||||
| Generic1 Digit | |||||
Defined in Data.Sequence.Internal Associated Types
| |||||
| Generic1 Elem | |||||
Defined in Data.Sequence.Internal Associated Types
| |||||
| Generic1 FingerTree | |||||
Defined in Data.Sequence.Internal Associated Types
Methods from1 :: FingerTree a -> Rep1 FingerTree a Source # to1 :: Rep1 FingerTree a -> FingerTree a Source # | |||||
| Generic1 Node | |||||
Defined in Data.Sequence.Internal Associated Types
| |||||
| Generic1 ViewL | |||||
Defined in Data.Sequence.Internal Associated Types
| |||||
| Generic1 ViewR | |||||
Defined in Data.Sequence.Internal Associated Types
| |||||
| Generic1 Tree | |||||
Defined in Data.Tree Associated Types
| |||||
| Generic1 NonEmpty | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 Identity | |||||
Defined in GHC.Internal.Data.Functor.Identity Associated Types
| |||||
| Generic1 First | |||||
Defined in GHC.Internal.Data.Monoid Associated Types
| |||||
| Generic1 Last | |||||
Defined in GHC.Internal.Data.Monoid Associated Types
| |||||
| Generic1 Down | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 Dual | |||||
Defined in GHC.Internal.Data.Semigroup.Internal Associated Types
| |||||
| Generic1 Product | |||||
Defined in GHC.Internal.Data.Semigroup.Internal Associated Types
| |||||
| Generic1 Sum | |||||
Defined in GHC.Internal.Data.Semigroup.Internal Associated Types
| |||||
| Generic1 ZipList | |||||
Defined in GHC.Internal.Functor.ZipList Associated Types
| |||||
| Generic1 Par1 | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 Maybe | |||||
Defined in Data.Strict.Maybe Associated Types
| |||||
| Generic1 Maybe | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 Solo | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 [] | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (WrappedMonad m :: Type -> Type) | |||||
Defined in Control.Applicative Associated Types
Methods from1 :: WrappedMonad m a -> Rep1 (WrappedMonad m) a Source # to1 :: Rep1 (WrappedMonad m) a -> WrappedMonad m a Source # | |||||
| Generic1 (Arg a :: Type -> Type) | |||||
Defined in Data.Semigroup Associated Types
| |||||
| Functor f => Generic1 (Cofree f :: Type -> Type) | |||||
Defined in Control.Comonad.Cofree Associated Types
| |||||
| Functor f => Generic1 (Free f :: Type -> Type) | |||||
Defined in Control.Monad.Free Associated Types
| |||||
| Generic1 (Either a :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (ListF a :: Type -> Type) | |||||
Defined in Data.Functor.Base Associated Types
| |||||
| Generic1 (NonEmptyF a :: Type -> Type) | |||||
Defined in Data.Functor.Base Associated Types
| |||||
| Generic1 (TreeF a :: Type -> Type) | |||||
Defined in Data.Functor.Base Associated Types
| |||||
| Generic1 (Either a :: Type -> Type) | |||||
Defined in Data.Strict.Either Associated Types
| |||||
| Generic1 (These a :: Type -> Type) | |||||
Defined in Data.Strict.These Associated Types
| |||||
| Generic1 (Pair a :: Type -> Type) | |||||
Defined in Data.Strict.Tuple Associated Types
| |||||
| Generic1 (These a :: Type -> Type) | |||||
Defined in Data.These Associated Types
| |||||
| Generic1 (Lift f :: Type -> Type) | |||||
Defined in Control.Applicative.Lift Associated Types
| |||||
| Functor m => Generic1 (MaybeT m :: Type -> Type) | |||||
Defined in Control.Monad.Trans.Maybe Associated Types
| |||||
| Generic1 ((,) a :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (Proxy :: k -> Type) | |||||
Defined in GHC.Internal.Generics | |||||
| Generic1 (U1 :: k -> Type) | |||||
Defined in GHC.Internal.Generics | |||||
| Generic1 (V1 :: k -> Type) | |||||
Defined in GHC.Internal.Generics | |||||
| Generic1 (WrappedArrow a b :: Type -> Type) | |||||
Defined in Control.Applicative Associated Types
Methods from1 :: WrappedArrow a b a0 -> Rep1 (WrappedArrow a b) a0 Source # to1 :: Rep1 (WrappedArrow a b) a0 -> WrappedArrow a b a0 Source # | |||||
| Generic1 (CofreeF f a :: Type -> Type) | |||||
Defined in Control.Comonad.Trans.Cofree Associated Types
| |||||
| Generic1 (FreeF f a :: Type -> Type) | |||||
Defined in Control.Monad.Trans.Free Associated Types
| |||||
| Generic1 (Kleisli m a :: Type -> Type) | |||||
Defined in GHC.Internal.Control.Arrow Associated Types
| |||||
| Generic1 (Tagged s :: Type -> Type) | |||||
Defined in Data.Tagged Associated Types
| |||||
| Functor m => Generic1 (ExceptT e m :: Type -> Type) | |||||
Defined in Control.Monad.Trans.Except Associated Types
| |||||
| Generic1 (ReaderT r m :: Type -> Type) | |||||
Defined in Control.Monad.Trans.Reader Associated Types
| |||||
| Generic1 ((,,) a b :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (Const a :: k -> Type) | |||||
Defined in GHC.Internal.Data.Functor.Const Associated Types
| |||||
| Generic1 (Ap f :: k -> Type) | |||||
Defined in GHC.Internal.Data.Monoid Associated Types
| |||||
| Generic1 (Alt f :: k -> Type) | |||||
Defined in GHC.Internal.Data.Semigroup.Internal Associated Types
| |||||
| Generic1 (Rec1 f :: k -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (URec (Ptr ()) :: k -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (URec Char :: k -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (URec Double :: k -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (URec Float :: k -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (URec Int :: k -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (URec Word :: k -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (Backwards f :: k -> Type) | |||||
Defined in Control.Applicative.Backwards Associated Types
| |||||
| Generic1 (IdentityT f :: k -> Type) | |||||
Defined in Control.Monad.Trans.Identity Associated Types
| |||||
| Generic1 (Constant a :: k -> Type) | |||||
Defined in Data.Functor.Constant Associated Types
| |||||
| Generic1 (Reverse f :: k -> Type) | |||||
Defined in Data.Functor.Reverse Associated Types
| |||||
| Generic1 ((,,,) a b c :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (Product f g :: k -> Type) | |||||
Defined in Data.Functor.Product Associated Types
| |||||
| Generic1 (Sum f g :: k -> Type) | |||||
Defined in Data.Functor.Sum Associated Types
| |||||
| Generic1 (f :*: g :: k -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (f :+: g :: k -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (K1 i c :: k -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 ((,,,,) a b c d :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Functor f => Generic1 (Compose f g :: k -> Type) | |||||
Defined in Data.Functor.Compose Associated Types
| |||||
| Functor f => Generic1 (f :.: g :: k -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (M1 i c f :: k -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (Clown f a :: k1 -> Type) | |||||
Defined in Data.Bifunctor.Clown Associated Types
| |||||
| Generic1 (Joker g a :: k1 -> Type) | |||||
Defined in Data.Bifunctor.Joker Associated Types
| |||||
| Generic1 (WrappedBifunctor p a :: k1 -> Type) | |||||
Defined in Data.Bifunctor.Wrapped Associated Types
| |||||
| Generic1 ((,,,,,) a b c d e :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 (Product f g a :: k1 -> Type) | |||||
Defined in Data.Bifunctor.Product Associated Types
| |||||
| Generic1 (Sum p q a :: k1 -> Type) | |||||
Defined in Data.Bifunctor.Sum Associated Types
| |||||
| Generic1 ((,,,,,,) a b c d e f :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Functor f => Generic1 (Tannen f p a :: k2 -> Type) | |||||
Defined in Data.Bifunctor.Tannen Associated Types
| |||||
| Generic1 ((,,,,,,,) a b c d e f g :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| Generic1 ((,,,,,,,,) a b c d e f g h :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from1 :: (a, b, c, d, e, f, g, h, a0) -> Rep1 ((,,,,,,,,) a b c d e f g h) a0 Source # to1 :: Rep1 ((,,,,,,,,) a b c d e f g h) a0 -> (a, b, c, d, e, f, g, h, a0) Source # | |||||
| Functor (p (f a)) => Generic1 (Biff p f g a :: k3 -> Type) | |||||
Defined in Data.Bifunctor.Biff Associated Types
| |||||
| Generic1 ((,,,,,,,,,) a b c d e f g h i :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from1 :: (a, b, c, d, e, f, g, h, i, a0) -> Rep1 ((,,,,,,,,,) a b c d e f g h i) a0 Source # to1 :: Rep1 ((,,,,,,,,,) a b c d e f g h i) a0 -> (a, b, c, d, e, f, g, h, i, a0) Source # | |||||
| Generic1 ((,,,,,,,,,,) a b c d e f g h i j :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from1 :: (a, b, c, d, e, f, g, h, i, j, a0) -> Rep1 ((,,,,,,,,,,) a b c d e f g h i j) a0 Source # to1 :: Rep1 ((,,,,,,,,,,) a b c d e f g h i j) a0 -> (a, b, c, d, e, f, g, h, i, j, a0) Source # | |||||
| Generic1 ((,,,,,,,,,,,) a b c d e f g h i j k :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from1 :: (a, b, c, d, e, f, g, h, i, j, k, a0) -> Rep1 ((,,,,,,,,,,,) a b c d e f g h i j k) a0 Source # to1 :: Rep1 ((,,,,,,,,,,,) a b c d e f g h i j k) a0 -> (a, b, c, d, e, f, g, h, i, j, k, a0) Source # | |||||
| Generic1 ((,,,,,,,,,,,,) a b c d e f g h i j k l :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from1 :: (a, b, c, d, e, f, g, h, i, j, k, l, a0) -> Rep1 ((,,,,,,,,,,,,) a b c d e f g h i j k l) a0 Source # to1 :: Rep1 ((,,,,,,,,,,,,) a b c d e f g h i j k l) a0 -> (a, b, c, d, e, f, g, h, i, j, k, l, a0) Source # | |||||
| Generic1 ((,,,,,,,,,,,,,) a b c d e f g h i j k l m :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from1 :: (a, b, c, d, e, f, g, h, i, j, k, l, m, a0) -> Rep1 ((,,,,,,,,,,,,,) a b c d e f g h i j k l m) a0 Source # to1 :: Rep1 ((,,,,,,,,,,,,,) a b c d e f g h i j k l m) a0 -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a0) Source # | |||||
| Generic1 ((,,,,,,,,,,,,,,) a b c d e f g h i j k l m n :: Type -> Type) | |||||
Defined in GHC.Internal.Generics Associated Types
Methods from1 :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, a0) -> Rep1 ((,,,,,,,,,,,,,,) a b c d e f g h i j k l m n) a0 Source # to1 :: Rep1 ((,,,,,,,,,,,,,,) a b c d e f g h i j k l m n) a0 -> (a, b, c, d, e, f, g, h, i, j, k, l, m, n, a0) Source # | |||||
Type-level natural numbers
(Kind) This is the kind of type-level symbols.
Instances
| SingKind Symbol | Since: base-4.9.0.0 | ||||
Defined in GHC.Internal.Generics Associated Types
| |||||
| TestCoercion SSymbol | Since: base-4.18.0.0 | ||||
Defined in GHC.Internal.TypeLits | |||||
| TestEquality SSymbol | Since: base-4.18.0.0 | ||||
Defined in GHC.Internal.TypeLits | |||||
| KnownSymbol a => SingI (a :: Symbol) | Since: base-4.9.0.0 | ||||
Defined in GHC.Internal.Generics Methods sing :: Sing a | |||||
| KnownSymbol n => Reifies (n :: Symbol) String | |||||
Defined in Data.Reflection | |||||
| type MEmpty | |||||
Defined in Fcf.Class.Monoid type MEmpty = "" | |||||
| type DemoteRep Symbol | |||||
Defined in GHC.Internal.Generics | |||||
| data Sing (s :: Symbol) | |||||
Defined in GHC.Internal.Generics | |||||
| type (x :: Symbol) <> (y :: Symbol) | |||||
Defined in Fcf.Class.Monoid | |||||
| type Compare (a :: Symbol) (b :: Symbol) | |||||
Defined in GHC.Internal.Data.Type.Ord | |||||
| type TryDomain t (Proxy dom) Source # | |||||
Defined in Clash.Class.HasDomain.HasSingleDomain | |||||
| type HasDomain dom1 (Proxy dom2) Source # | |||||
Defined in Clash.Class.HasDomain.HasSpecificDomain | |||||
Natural number
Invariant: numbers <= 0xffffffffffffffff use the NS constructor
Instances
| PrintfArg Natural | Since: base-4.8.0.0 |
Defined in Text.Printf Methods formatArg :: Natural -> FieldFormatter Source # parseFormat :: Natural -> ModifierParser Source # | |
| Binary Natural | Since: binary-0.7.3.0 |
| NFDataX Natural Source # | |
Defined in Clash.XException | |
| ShowX Natural Source # | |
| NFData Natural | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq | |
| Bits Natural | Since: base-4.8.0 |
Defined in GHC.Internal.Bits Methods (.&.) :: Natural -> Natural -> Natural Source # (.|.) :: Natural -> Natural -> Natural Source # xor :: Natural -> Natural -> Natural Source # complement :: Natural -> Natural Source # shift :: Natural -> Int -> Natural Source # rotate :: Natural -> Int -> Natural Source # bit :: Int -> Natural Source # setBit :: Natural -> Int -> Natural Source # clearBit :: Natural -> Int -> Natural Source # complementBit :: Natural -> Int -> Natural Source # testBit :: Natural -> Int -> Bool Source # bitSizeMaybe :: Natural -> Maybe Int Source # bitSize :: Natural -> Int Source # isSigned :: Natural -> Bool Source # shiftL :: Natural -> Int -> Natural Source # unsafeShiftL :: Natural -> Int -> Natural Source # shiftR :: Natural -> Int -> Natural Source # unsafeShiftR :: Natural -> Int -> Natural Source # rotateL :: Natural -> Int -> Natural Source # | |
| Data Natural | Since: base-4.8.0.0 |
Defined in GHC.Internal.Data.Data Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Natural -> c Natural Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Natural Source # toConstr :: Natural -> Constr Source # dataTypeOf :: Natural -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Natural) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Natural) Source # gmapT :: (forall b. Data b => b -> b) -> Natural -> Natural Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Natural -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Natural -> r Source # gmapQ :: (forall d. Data d => d -> u) -> Natural -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> Natural -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Natural -> m Natural Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Natural -> m Natural Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Natural -> m Natural Source # | |
| Enum Natural | Since: base-4.8.0.0 |
Defined in GHC.Internal.Enum Methods succ :: Natural -> Natural Source # pred :: Natural -> Natural Source # toEnum :: Int -> Natural Source # fromEnum :: Natural -> Int Source # enumFrom :: Natural -> [Natural] Source # enumFromThen :: Natural -> Natural -> [Natural] Source # enumFromTo :: Natural -> Natural -> [Natural] Source # enumFromThenTo :: Natural -> Natural -> Natural -> [Natural] Source # | |
| Ix Natural | Since: base-4.8.0.0 |
Defined in GHC.Internal.Ix | |
| Num Natural | Note that Since: base-4.8.0.0 |
Defined in GHC.Internal.Num | |
| Read Natural | Since: base-4.8.0.0 |
| Integral Natural | Since: base-4.8.0.0 |
Defined in GHC.Internal.Real Methods quot :: Natural -> Natural -> Natural Source # rem :: Natural -> Natural -> Natural Source # div :: Natural -> Natural -> Natural Source # mod :: Natural -> Natural -> Natural Source # quotRem :: Natural -> Natural -> (Natural, Natural) Source # | |
| Real Natural | Since: base-4.8.0.0 |
Defined in GHC.Internal.Real Methods toRational :: Natural -> Rational Source # | |
| Show Natural | Since: base-4.8.0.0 |
| Eq Natural | |
| Ord Natural | |
| Hashable Natural | |
Defined in Data.Hashable.Class | |
| UniformRange Natural | |
Defined in System.Random.Internal | |
| Corecursive Natural | |
Defined in Data.Functor.Foldable Methods embed :: Base Natural Natural -> Natural ana :: (a -> Base Natural a) -> a -> Natural apo :: (a -> Base Natural (Either Natural a)) -> a -> Natural postpro :: Recursive Natural => (forall b. Base Natural b -> Base Natural b) -> (a -> Base Natural a) -> a -> Natural gpostpro :: (Recursive Natural, Monad m) => (forall b. m (Base Natural b) -> Base Natural (m b)) -> (forall c. Base Natural c -> Base Natural c) -> (a -> Base Natural (m a)) -> a -> Natural | |
| Recursive Natural | |
Defined in Data.Functor.Foldable Methods project :: Natural -> Base Natural Natural cata :: (Base Natural a -> a) -> Natural -> a para :: (Base Natural (Natural, a) -> a) -> Natural -> a gpara :: (Corecursive Natural, Comonad w) => (forall b. Base Natural (w b) -> w (Base Natural b)) -> (Base Natural (EnvT Natural w a) -> a) -> Natural -> a prepro :: Corecursive Natural => (forall b. Base Natural b -> Base Natural b) -> (Base Natural a -> a) -> Natural -> a gprepro :: (Corecursive Natural, Comonad w) => (forall b. Base Natural (w b) -> w (Base Natural b)) -> (forall c. Base Natural c -> Base Natural c) -> (Base Natural (w a) -> a) -> Natural -> a | |
| KnownNat n => HasResolution (n :: Nat) | For example, |
Defined in Data.Fixed Methods resolution :: p n -> Integer Source # | |
| TestCoercion SNat | Since: base-4.18.0.0 |
Defined in GHC.Internal.TypeNats | |
| TestEquality SNat | Since: base-4.18.0.0 |
Defined in GHC.Internal.TypeNats | |
| Lift Natural | |
| KnownNat n => Reifies (n :: Nat) Integer | |
Defined in Data.Reflection | |
| (KnownNat a, KnownNat b) => KnownBoolNat2 "GHC.Internal.Data.Type.Ord.<=?" (a :: Nat) (b :: Nat) | |
Defined in GHC.TypeLits.KnownNat Methods boolNatSing2 :: SBoolKb "GHC.Internal.Data.Type.Ord.<=?" | |
| (KnownNat a, KnownNat b) => KnownBoolNat2 "GHC.Internal.Data.Type.Ord.OrdCond" (a :: Nat) (b :: Nat) | |
Defined in GHC.TypeLits.KnownNat Methods boolNatSing2 :: SBoolKb "GHC.Internal.Data.Type.Ord.OrdCond" | |
| (KnownBool a, KnownNat b, KnownNat c) => KnownNat2Bool "GHC.Internal.Data.Type.Bool.If" a (b :: Nat) (c :: Nat) | |
Defined in GHC.TypeLits.KnownNat Methods natBoolSing3 :: SNatKn "GHC.Internal.Data.Type.Bool.If" | |
| () :=> (Bits Natural) | |
Defined in Data.Constraint | |
| () :=> (Enum Natural) | |
Defined in Data.Constraint | |
| () :=> (Num Natural) | |
Defined in Data.Constraint | |
| () :=> (Read Natural) | |
Defined in Data.Constraint | |
| () :=> (Integral Natural) | |
Defined in Data.Constraint | |
| () :=> (Real Natural) | |
Defined in Data.Constraint | |
| () :=> (Show Natural) | |
Defined in Data.Constraint | |
| () :=> (Eq Natural) | |
Defined in Data.Constraint | |
| () :=> (Ord Natural) | |
Defined in Data.Constraint | |
| Resize f => Resize (Compose Erroring f) Source # | |
Defined in Clash.Num.Erroring Methods resize :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Erroring f a -> Compose Erroring f b Source # extend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Erroring f a -> Compose Erroring f (b + a) Source # zeroExtend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Erroring f a -> Compose Erroring f (b + a) Source # signExtend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Erroring f a -> Compose Erroring f (b + a) Source # truncateB :: forall (a :: Nat) (b :: Natural). KnownNat a => Compose Erroring f (a + b) -> Compose Erroring f a Source # | |
| Resize f => Resize (Compose Saturating f) Source # | |
Defined in Clash.Num.Saturating Methods resize :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Saturating f a -> Compose Saturating f b Source # extend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Saturating f a -> Compose Saturating f (b + a) Source # zeroExtend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Saturating f a -> Compose Saturating f (b + a) Source # signExtend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Saturating f a -> Compose Saturating f (b + a) Source # truncateB :: forall (a :: Nat) (b :: Natural). KnownNat a => Compose Saturating f (a + b) -> Compose Saturating f a Source # | |
| Resize f => Resize (Compose Wrapping f) Source # | |
Defined in Clash.Num.Wrapping Methods resize :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Wrapping f a -> Compose Wrapping f b Source # extend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Wrapping f a -> Compose Wrapping f (b + a) Source # zeroExtend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Wrapping f a -> Compose Wrapping f (b + a) Source # signExtend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Wrapping f a -> Compose Wrapping f (b + a) Source # truncateB :: forall (a :: Nat) (b :: Natural). KnownNat a => Compose Wrapping f (a + b) -> Compose Wrapping f a Source # | |
| Resize f => Resize (Compose Zeroing f) Source # | |
Defined in Clash.Num.Zeroing Methods resize :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Zeroing f a -> Compose Zeroing f b Source # extend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Zeroing f a -> Compose Zeroing f (b + a) Source # zeroExtend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Zeroing f a -> Compose Zeroing f (b + a) Source # signExtend :: forall (a :: Nat) (b :: Nat). (KnownNat a, KnownNat b) => Compose Zeroing f a -> Compose Zeroing f (b + a) Source # truncateB :: forall (a :: Nat) (b :: Natural). KnownNat a => Compose Zeroing f (a + b) -> Compose Zeroing f a Source # | |
| type Base Natural | |
Defined in Data.Functor.Foldable | |
| type TryDomain t Natural Source # | |
Defined in Clash.Class.HasDomain.HasSingleDomain | |
| type Compare (a :: Natural) (b :: Natural) | |
Defined in GHC.Internal.Data.Type.Ord | |
| type Apply (VCons a :: TyFun Nat Type -> Type) (l :: Nat) | |
| type Eval (Sum ns :: Nat -> Type) | |
Defined in Fcf.Class.Foldable | |
| type Eval (Length ('[] :: [a]) :: Nat -> Type) | |
Defined in Fcf.Data.List | |
| type Eval (Length (a2 ': as) :: Nat -> Type) | |
Defined in Fcf.Data.List | |
| type Eval (a * b :: Nat -> Type) | |
Defined in Fcf.Data.Nat | |
| type Eval (a + b :: Nat -> Type) | |
Defined in Fcf.Data.Nat | |
| type Eval (a - b :: Nat -> Type) | |
Defined in Fcf.Data.Nat | |
| type Eval (a ^ b :: Nat -> Type) | |
Defined in Fcf.Data.Nat | |
| type Eval (FindIndex _p ('[] :: [a]) :: Maybe Nat -> Type) | |
| type Eval (FindIndex p (a2 ': as) :: Maybe Nat -> Type) | |
| type Eval (NumIter a s :: Maybe (k, Nat) -> Type) | |
type family (a :: Natural) - (b :: Natural) :: Natural where ... infixl 6 Source #
Subtraction of type-level naturals.
Since: base-4.7.0.0
class KnownNat (n :: Nat) where Source #
This class gives the integer associated with a type-level natural. There are instances of the class for every concrete literal: 0, 1, 2, etc.
Since: base-4.7.0.0
class KnownSymbol (n :: Symbol) where Source #
This class gives the string associated with a type-level symbol. There are instances of the class for every concrete literal: "hello", etc.
Since: base-4.7.0.0
Methods
symbolSing :: SSymbol n Source #
type family TypeError (a :: ErrorMessage) :: b where ... Source #
The type-level equivalent of error.
The polymorphic kind of this type allows it to be used in several settings. For instance, it can be used as a constraint, e.g. to provide a better error message for a non-existent instance,
-- in a context
instance TypeError (Text "Cannot Show functions." :$$:
Text "Perhaps there is a missing argument?")
=> Show (a -> b) where
showsPrec = error "unreachable"
It can also be placed on the right-hand side of a type-level function to provide an error for an invalid case,
type family ByteSize x where
ByteSize Word16 = 2
ByteSize Word8 = 1
ByteSize a = TypeError (Text "The type " :<>: ShowType a :<>:
Text " is not exportable.")
Since: base-4.9.0.0
type family AppendSymbol (a :: Symbol) (b :: Symbol) :: Symbol where ... Source #
Concatenation of type-level symbols.
Since: base-4.10.0.0
type family (a :: Natural) + (b :: Natural) :: Natural where ... infixl 6 Source #
Addition of type-level naturals.
Since: base-4.7.0.0
type family (a :: Natural) * (b :: Natural) :: Natural where ... infixl 7 Source #
Multiplication of type-level naturals.
Since: base-4.7.0.0
type family (a :: Natural) ^ (b :: Natural) :: Natural where ... infixr 8 Source #
Exponentiation of type-level naturals.
Since: base-4.7.0.0
type family CmpSymbol (a :: Symbol) (b :: Symbol) :: Ordering where ... Source #
Comparison of type-level symbols, as a function.
Since: base-4.7.0.0
type family CmpNat (a :: Natural) (b :: Natural) :: Ordering where ... Source #
Comparison of type-level naturals, as a function.
Since: base-4.7.0.0
type family CmpChar (a :: Char) (b :: Char) :: Ordering where ... Source #
Comparison of type-level characters.
Since: base-4.16.0.0
type family Div (a :: Natural) (b :: Natural) :: Natural where ... infixl 7 Source #
Division (round down) of natural numbers.
Div x 0 is undefined (i.e., it cannot be reduced).
Since: base-4.11.0.0
type family Mod (a :: Natural) (b :: Natural) :: Natural where ... infixl 7 Source #
Modulus of natural numbers.
Mod x 0 is undefined (i.e., it cannot be reduced).
Since: base-4.11.0.0
type family Log2 (a :: Natural) :: Natural where ... Source #
Log base 2 (round down) of natural numbers.
Log 0 is undefined (i.e., it cannot be reduced).
Since: base-4.11.0.0
type family ConsSymbol (a :: Char) (b :: Symbol) :: Symbol where ... Source #
Extending a type-level symbol with a type-level character
Since: base-4.16.0.0
type family CharToNat (a :: Char) :: Natural where ... Source #
Convert a character to its Unicode code point (cf. ord)
Since: base-4.16.0.0
type family NatToChar (a :: Natural) :: Char where ... Source #
Convert a Unicode code point to a character (cf. chr)
Since: base-4.16.0.0
data ErrorMessage Source #
A description of a custom type error.
Constructors
| Text Symbol | Show the text as is. |
| ShowType t | Pretty print the type.
|
| ErrorMessage :<>: ErrorMessage infixl 6 | Put two pieces of error message next to each other. |
| ErrorMessage :$$: ErrorMessage infixl 5 | Stack two pieces of error message on top of each other. |
type (<=) (x :: t) (y :: t) = Assert (x <=? y) (LeErrMsg x y :: Constraint) infix 4 Source #
Comparison (<=) of comparable types, as a constraint.
Since: base-4.16.0.0
type (<=?) (m :: k) (n :: k) = OrdCond (Compare m n) 'True 'True 'False infix 4 Source #
Comparison (<=) of comparable types, as a function.
Since: base-4.16.0.0
data OrderingI (a :: k) (b :: k) where Source #
Ordering data type for type literals that provides proof of their ordering.
Since: base-4.16.0.0
Constructors
| LTI :: forall {k} (a :: k) (b :: k). Compare a b ~ 'LT => OrderingI a b | |
| EQI :: forall {k} (a :: k). Compare a a ~ 'EQ => OrderingI a a | |
| GTI :: forall {k} (a :: k) (b :: k). Compare a b ~ 'GT => OrderingI a b |
This type represents unknown type-level natural numbers.
Since: base-4.10.0.0
Instances
| Read SomeNat | Since: base-4.7.0.0 |
| Show SomeNat | Since: base-4.7.0.0 |
| Eq SomeNat | Since: base-4.7.0.0 |
| Ord SomeNat | Since: base-4.7.0.0 |
Defined in GHC.Internal.TypeNats | |
A type synonym for Natural.
Previously, this was an opaque data type, but it was changed to a type synonym.
Since: base-4.16.0.0
someNatVal :: Integer -> Maybe SomeNat Source #
Convert an integer into an unknown type-level natural.
Since: base-4.7.0.0
sameNat :: forall (a :: Nat) (b :: Nat) proxy1 proxy2. (KnownNat a, KnownNat b) => proxy1 a -> proxy2 b -> Maybe (a :~: b) Source #
We either get evidence that this function was instantiated with the
same type-level numbers, or Nothing.
Since: base-4.7.0.0
decideNat :: forall (a :: Nat) (b :: Nat) proxy1 proxy2. (KnownNat a, KnownNat b) => proxy1 a -> proxy2 b -> Either ((a :~: b) -> Void) (a :~: b) Source #
We either get evidence that this function was instantiated with the same type-level numbers, or that the type-level numbers are distinct.
Since: base-4.19.0.0
cmpNat :: forall (a :: Nat) (b :: Nat) proxy1 proxy2. (KnownNat a, KnownNat b) => proxy1 a -> proxy2 b -> OrderingI a b Source #
Like sameNat, but if the numbers aren't equal, this additionally
provides proof of LT or GT.
Since: base-4.16.0.0
withSomeSNat :: Integer -> (forall (n :: Nat). Maybe (SNat n) -> r) -> r Source #
Attempt to convert an Integer into an value, where SNat nn is a
fresh type-level natural number. If the Integer argument is non-negative,
invoke the continuation with Just sn, where sn is the value.
If the SNat nInteger argument is negative, invoke the continuation with
Nothing.
For a version of this function where the continuation uses 'SNat n
instead of Maybe (SNat n)@, see withSomeSNat in GHC.TypeNats.
Since: base-4.18.0.0
data SChar (s :: Char) Source #
A value-level witness for a type-level character. This is commonly referred
to as a singleton type, as for each c, there is a single value that
inhabits the type (aside from bottom).SChar c
The definition of SChar is intentionally left abstract. To obtain an
SChar value, use one of the following:
- The
charSingmethod ofKnownChar. - The
SCharpattern synonym. - The
withSomeSCharfunction, which creates anSCharfrom aChar.
Since: base-4.18.0.0
Instances
| TestCoercion SChar | Since: base-4.18.0.0 |
Defined in GHC.Internal.TypeLits | |
| TestEquality SChar | Since: base-4.18.0.0 |
Defined in GHC.Internal.TypeLits | |
| Show (SChar c) | Since: base-4.18.0.0 |
| Eq (SChar c) | Since: base-4.19.0.0 |
| Ord (SChar c) | Since: base-4.19.0.0 |
Defined in GHC.Internal.TypeLits | |
pattern SChar :: () => KnownChar c => SChar c Source #
A explicitly bidirectional pattern synonym relating an SChar to a
KnownChar constraint.
As an expression: Constructs an explicit value from an
implicit SChar c constraint:KnownChar c
SChar @c ::KnownCharc =>SCharc
As a pattern: Matches on an explicit value bringing
an implicit SChar c constraint into scope:KnownChar c
f :: SChar c -> ..
f SChar = {- KnownChar c in scope -}
Since: base-4.18.0.0
Instances
| Read SomeChar | |
| Show SomeChar | |
| Eq SomeChar | |
| Ord SomeChar | |
Defined in GHC.Internal.TypeLits | |
data SomeSymbol Source #
This type represents unknown type-level symbols.
Constructors
| KnownSymbol n => SomeSymbol (Proxy n) | Since: base-4.7.0.0 |
Instances
| Read SomeSymbol | Since: base-4.7.0.0 |
Defined in GHC.Internal.TypeLits | |
| Show SomeSymbol | Since: base-4.7.0.0 |
Defined in GHC.Internal.TypeLits | |
| Eq SomeSymbol | Since: base-4.7.0.0 |
Defined in GHC.Internal.TypeLits Methods (==) :: SomeSymbol -> SomeSymbol -> Bool Source # (/=) :: SomeSymbol -> SomeSymbol -> Bool Source # | |
| Ord SomeSymbol | Since: base-4.7.0.0 |
Defined in GHC.Internal.TypeLits Methods compare :: SomeSymbol -> SomeSymbol -> Ordering Source # (<) :: SomeSymbol -> SomeSymbol -> Bool Source # (<=) :: SomeSymbol -> SomeSymbol -> Bool Source # (>) :: SomeSymbol -> SomeSymbol -> Bool Source # (>=) :: SomeSymbol -> SomeSymbol -> Bool Source # max :: SomeSymbol -> SomeSymbol -> SomeSymbol Source # min :: SomeSymbol -> SomeSymbol -> SomeSymbol Source # | |
symbolVal :: forall (n :: Symbol) proxy. KnownSymbol n => proxy n -> String Source #
Since: base-4.7.0.0
symbolVal' :: forall (n :: Symbol). KnownSymbol n => Proxy# n -> String Source #
Since: base-4.8.0.0
someSymbolVal :: String -> SomeSymbol Source #
Convert a string into an unknown type-level symbol.
Since: base-4.7.0.0
someCharVal :: Char -> SomeChar Source #
Convert a character into an unknown type-level char.
Since: base-4.16.0.0
sameSymbol :: forall (a :: Symbol) (b :: Symbol) proxy1 proxy2. (KnownSymbol a, KnownSymbol b) => proxy1 a -> proxy2 b -> Maybe (a :~: b) Source #
We either get evidence that this function was instantiated with the
same type-level symbols, or Nothing.
Since: base-4.7.0.0
decideSymbol :: forall (a :: Symbol) (b :: Symbol) proxy1 proxy2. (KnownSymbol a, KnownSymbol b) => proxy1 a -> proxy2 b -> Either ((a :~: b) -> Void) (a :~: b) Source #
We either get evidence that this function was instantiated with the same type-level symbols, or that the type-level symbols are distinct.
Since: base-4.19.0.0
sameChar :: forall (a :: Char) (b :: Char) proxy1 proxy2. (KnownChar a, KnownChar b) => proxy1 a -> proxy2 b -> Maybe (a :~: b) Source #
We either get evidence that this function was instantiated with the
same type-level characters, or Nothing.
Since: base-4.16.0.0
decideChar :: forall (a :: Char) (b :: Char) proxy1 proxy2. (KnownChar a, KnownChar b) => proxy1 a -> proxy2 b -> Either ((a :~: b) -> Void) (a :~: b) Source #
We either get evidence that this function was instantiated with the same type-level characters, or that the type-level characters are distinct.
Since: base-4.19.0.0
cmpSymbol :: forall (a :: Symbol) (b :: Symbol) proxy1 proxy2. (KnownSymbol a, KnownSymbol b) => proxy1 a -> proxy2 b -> OrderingI a b Source #
Like sameSymbol, but if the symbols aren't equal, this additionally
provides proof of LT or GT.
Since: base-4.16.0.0
cmpChar :: forall (a :: Char) (b :: Char) proxy1 proxy2. (KnownChar a, KnownChar b) => proxy1 a -> proxy2 b -> OrderingI a b Source #
Like sameChar, but if the Chars aren't equal, this additionally
provides proof of LT or GT.
Since: base-4.16.0.0
fromSSymbol :: forall (s :: Symbol). SSymbol s -> String Source #
Return the String corresponding to s in an value.SSymbol s
Since: base-4.18.0.0
withKnownSymbol :: forall (s :: Symbol) r. SSymbol s -> (KnownSymbol s => r) -> r Source #
Convert an explicit value into an implicit SSymbol s
constraint.KnownSymbol s
Since: base-4.18.0.0
type family Div (a :: Natural) (b :: Natural) :: Natural where ... infixl 7 Source #
Division (round down) of natural numbers.
Div x 0 is undefined (i.e., it cannot be reduced).
Since: base-4.11.0.0
type family Mod (a :: Natural) (b :: Natural) :: Natural where ... infixl 7 Source #
Modulus of natural numbers.
Mod x 0 is undefined (i.e., it cannot be reduced).
Since: base-4.11.0.0
module Clash.Promoted.Nat
module Clash.Promoted.Nat.Literals
module Clash.Promoted.Nat.TH
Type-level strings
module Clash.Promoted.Symbol
Template Haskell
class Lift (t :: TYPE r) where Source #
A Lift instance can have any of its values turned into a Template
Haskell expression. This is needed when a value used within a Template
Haskell quotation is bound outside the Oxford brackets ([| ... |] or
[|| ... ||]) but not at the top level. As an example:
add1 :: Int -> Code Q Int add1 x = [|| x + 1 ||]
Template Haskell has no way of knowing what value x will take on at
splice-time, so it requires the type of x to be an instance of Lift.
A Lift instance must satisfy $(lift x) ≡ x and $$(liftTyped x) ≡ x
for all x, where $(...) and $$(...) are Template Haskell splices.
It is additionally expected that .lift x ≡ unTypeCode (liftTyped x)
Lift instances can be derived automatically by use of the -XDeriveLift
GHC language extension:
{-# LANGUAGE DeriveLift #-}
module Foo where
import Language.Haskell.TH.Syntax
data Bar a = Bar1 a (Bar a) | Bar2 String
deriving LiftRepresentation-polymorphic since template-haskell-2.16.0.0.
Minimal complete definition
Methods
lift :: Quote m => t -> m Exp Source #
Turn a value into a Template Haskell expression, suitable for use in a splice.
liftTyped :: forall (m :: Type -> Type). Quote m => t -> Code m t Source #
Turn a value into a Template Haskell typed expression, suitable for use in a typed splice.
Since: template-haskell-2.16.0.0
Instances
| Lift Addr# | Produces an Since: template-haskell-2.16.0.0 |
| Lift Double# | Since: template-haskell-2.16.0.0 |
| Lift Float# | Since: template-haskell-2.16.0.0 |
| Lift Int# | Since: template-haskell-2.16.0.0 |
| Lift ByteArray | Since: template-haskell-2.19.0.0 |
| Lift ByteString | Since: bytestring-0.11.2.0 |
Defined in Data.ByteString.Internal.Type Methods lift :: Quote m => ByteString -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => ByteString -> Code m ByteString Source # | |
| Lift ByteString | |
Defined in Data.ByteString.Lazy.Internal Methods lift :: Quote m => ByteString -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => ByteString -> Code m ByteString Source # | |
| Lift ShortByteString | |
Defined in Data.ByteString.Short.Internal Methods lift :: Quote m => ShortByteString -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => ShortByteString -> Code m ShortByteString Source # | |
| Lift ConstrRepr Source # | |
Defined in Clash.Annotations.BitRepresentation Methods lift :: Quote m => ConstrRepr -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => ConstrRepr -> Code m ConstrRepr Source # | |
| Lift DataReprAnn Source # | |
Defined in Clash.Annotations.BitRepresentation Methods lift :: Quote m => DataReprAnn -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => DataReprAnn -> Code m DataReprAnn Source # | |
| Lift PortName Source # | |
| Lift TopEntity Source # | |
| Lift Femtoseconds Source # | |
Defined in Clash.Signal.Internal Methods lift :: Quote m => Femtoseconds -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => Femtoseconds -> Code m Femtoseconds Source # | |
| Lift Bit Source # | |
| Lift IntSet | Since: containers-0.6.6 |
| Lift Void | Since: template-haskell-2.15.0.0 |
| Lift Int16 | |
| Lift Int32 | |
| Lift Int64 | |
| Lift Int8 | |
| Lift Word16 | |
| Lift Word32 | |
| Lift Word64 | |
| Lift Word8 | |
| Lift Half | |
| Lift OsString | |
| Lift PosixString | |
Defined in System.OsString.Internal.Types Methods lift :: Quote m => PosixString -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => PosixString -> Code m PosixString Source # | |
| Lift WindowsString | |
Defined in System.OsString.Internal.Types Methods lift :: Quote m => WindowsString -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => WindowsString -> Code m WindowsString Source # | |
| Lift AnnTarget | |
| Lift Bang | |
| Lift BndrVis | |
| Lift Body | |
| Lift Bytes | |
| Lift Callconv | |
| Lift Clause | |
| Lift Con | |
| Lift Dec | |
| Lift DerivClause | |
Defined in Language.Haskell.TH.Instances Methods lift :: Quote m => DerivClause -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => DerivClause -> Code m DerivClause Source # | |
| Lift DerivStrategy | |
Defined in Language.Haskell.TH.Instances Methods lift :: Quote m => DerivStrategy -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => DerivStrategy -> Code m DerivStrategy Source # | |
| Lift Exp | |
| Lift FamilyResultSig | |
Defined in Language.Haskell.TH.Instances Methods lift :: Quote m => FamilyResultSig -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => FamilyResultSig -> Code m FamilyResultSig Source # | |
| Lift Fixity | |
| Lift FixityDirection | |
Defined in Language.Haskell.TH.Instances Methods lift :: Quote m => FixityDirection -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => FixityDirection -> Code m FixityDirection Source # | |
| Lift Foreign | |
| Lift FunDep | |
| Lift Guard | |
| Lift Info | |
| Lift InjectivityAnn | |
Defined in Language.Haskell.TH.Instances Methods lift :: Quote m => InjectivityAnn -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => InjectivityAnn -> Code m InjectivityAnn Source # | |
| Lift Inline | |
| Lift Lit | |
| Lift Loc | |
| Lift Match | |
| Lift ModName | |
| Lift Name | |
| Lift NameFlavour | |
Defined in Language.Haskell.TH.Lift Methods lift :: Quote m => NameFlavour -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => NameFlavour -> Code m NameFlavour Source # | |
| Lift NameSpace | |
| Lift NamespaceSpecifier | |
Defined in Language.Haskell.TH.Instances Methods lift :: Quote m => NamespaceSpecifier -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => NamespaceSpecifier -> Code m NamespaceSpecifier Source # | |
| Lift OccName | |
| Lift Overlap | |
| Lift Pat | |
| Lift PatSynArgs | |
Defined in Language.Haskell.TH.Instances Methods lift :: Quote m => PatSynArgs -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => PatSynArgs -> Code m PatSynArgs Source # | |
| Lift PatSynDir | |
| Lift Phases | |
| Lift PkgName | |
| Lift Pragma | |
| Lift Range | |
| Lift Role | |
| Lift RuleBndr | |
| Lift RuleMatch | |
| Lift Safety | |
| Lift SourceStrictness | |
Defined in Language.Haskell.TH.Instances Methods lift :: Quote m => SourceStrictness -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => SourceStrictness -> Code m SourceStrictness Source # | |
| Lift SourceUnpackedness | |
Defined in Language.Haskell.TH.Instances Methods lift :: Quote m => SourceUnpackedness -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => SourceUnpackedness -> Code m SourceUnpackedness Source # | |
| Lift Specificity | |
Defined in Language.Haskell.TH.Instances Methods lift :: Quote m => Specificity -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => Specificity -> Code m Specificity Source # | |
| Lift Stmt | |
| Lift TyLit | |
| Lift TySynEqn | |
| Lift Type | |
| Lift TypeFamilyHead | |
Defined in Language.Haskell.TH.Instances Methods lift :: Quote m => TypeFamilyHead -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => TypeFamilyHead -> Code m TypeFamilyHead Source # | |
| Lift Text | Since: text-1.2.4.0 |
| Lift Text | Since: text-1.2.4.0 |
| Lift Integer | |
| Lift Natural | |
| Lift () | |
| Lift Bool | |
| Lift Char | |
| Lift Double | |
| Lift Float | |
| Lift Int | |
| Lift Word | |
| Lift Char# | Since: template-haskell-2.16.0.0 |
| Lift Word# | Since: template-haskell-2.16.0.0 |
| Lift (# #) | Since: template-haskell-2.16.0.0 |
| Lift a => Lift (Attr a :: Type) Source # | |
| Lift (SNat n :: Type) Source # | |
| KnownSymbol s => Lift (SSymbol s :: Type) Source # | |
| KnownNat n => Lift (BitVector n :: Type) Source # | |
| KnownNat n => Lift (Index n :: Type) Source # | |
| KnownNat n => Lift (Signed n :: Type) Source # | |
| KnownNat n => Lift (Unsigned n :: Type) Source # | |
| Lift vertex => Lift (SCC vertex :: Type) | Since: containers-0.6.6 |
| Lift a => Lift (IntMap a :: Type) | Since: containers-0.6.6 |
| Lift a => Lift (Digit a :: Type) | Since: containers-0.6.6 |
| Lift a => Lift (FingerTree a :: Type) | Since: containers-0.6.6 |
Defined in Data.Sequence.Internal Methods lift :: Quote m => FingerTree a -> m Exp Source # liftTyped :: forall (m :: Type -> Type). Quote m => FingerTree a -> Code m (FingerTree a) Source # | |
| Lift a => Lift (Node a :: Type) | Since: containers-0.6.6 |
| Lift a => Lift (Seq a :: Type) | Since: containers-0.6.6 |
| Lift a => Lift (ViewL a :: Type) | Since: containers-0.6.6 |
| Lift a => Lift (ViewR a :: Type) | Since: containers-0.6.6 |
| Lift a => Lift (Set a :: Type) | Since: containers-0.6.6 |
| Lift a => Lift (Tree a :: Type) | Since: containers-0.6.6 |
| Lift a => Lift (NonEmpty a :: Type) | Since: template-haskell-2.15.0.0 |
| Integral a => Lift (Ratio a :: Type) | |
| Lift a => Lift (Array a :: Type) | |
| Lift (PrimArray a :: Type) | |
| Lift a => Lift (SmallArray a :: Type) | |
| Lift flag => Lift (TyVarBndr flag :: Type) | |
| Lift a => Lift (HashSet a :: Type) | |
| Lift a => Lift (Maybe a :: Type) | |
| Lift a => Lift ([a] :: Type) | |
| Lift (Fixed a :: Type) | |
| Lift a => Lift (Signal dom a :: Type) Source # | |
| Lift a => Lift (RTree d a :: Type) Source # | |
| Lift a => Lift (Vec n a :: Type) Source # | |
| (Lift k, Lift a) => Lift (Map k a :: Type) | Since: containers-0.6.6 |
| (Lift a, Lift b) => Lift (Either a b :: Type) | |
| (Lift k, Lift v) => Lift (HashMap k v :: Type) | |
| (Lift k, Lift v) => Lift (Leaf k v :: Type) | |
| (Lift a, Lift b) => Lift ((a, b) :: Type) | |
| Lift a => Lift (DSignal dom delay a :: Type) Source # | |
| (Lift (rep (int + frac)), KnownNat frac, KnownNat int, Typeable rep) => Lift (Fixed rep int frac :: Type) Source # | |
| (Lift a, Lift b, Lift c) => Lift ((a, b, c) :: Type) | |
| (Lift a, Lift b, Lift c, Lift d) => Lift ((a, b, c, d) :: Type) | |
| (Lift a, Lift b, Lift c, Lift d, Lift e) => Lift ((a, b, c, d, e) :: Type) | |
| (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f) => Lift ((a, b, c, d, e, f) :: Type) | |
| (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g) => Lift ((a, b, c, d, e, f, g) :: Type) | |
| Lift a => Lift ((# a #) :: TYPE ('TupleRep '[LiftedRep])) | Since: template-haskell-2.16.0.0 |
| (Lift a, Lift b) => Lift ((# a | b #) :: TYPE ('SumRep '[LiftedRep, LiftedRep])) | Since: template-haskell-2.16.0.0 |
| (Lift a, Lift b) => Lift ((# a, b #) :: TYPE ('TupleRep '[LiftedRep, LiftedRep])) | Since: template-haskell-2.16.0.0 |
| (Lift a, Lift b, Lift c) => Lift ((# a | b | c #) :: TYPE ('SumRep '[LiftedRep, LiftedRep, LiftedRep])) | Since: template-haskell-2.16.0.0 |
| (Lift a, Lift b, Lift c) => Lift ((# a, b, c #) :: TYPE ('TupleRep '[LiftedRep, LiftedRep, LiftedRep])) | Since: template-haskell-2.16.0.0 |
| (Lift a, Lift b, Lift c, Lift d) => Lift ((# a | b | c | d #) :: TYPE ('SumRep '[LiftedRep, LiftedRep, LiftedRep, LiftedRep])) | Since: template-haskell-2.16.0.0 |
| (Lift a, Lift b, Lift c, Lift d) => Lift ((# a, b, c, d #) :: TYPE ('TupleRep '[LiftedRep, LiftedRep, LiftedRep, LiftedRep])) | Since: template-haskell-2.16.0.0 |
| (Lift a, Lift b, Lift c, Lift d, Lift e) => Lift ((# a | b | c | d | e #) :: TYPE ('SumRep '[LiftedRep, LiftedRep, LiftedRep, LiftedRep, LiftedRep])) | Since: template-haskell-2.16.0.0 |
| (Lift a, Lift b, Lift c, Lift d, Lift e) => Lift ((# a, b, c, d, e #) :: TYPE ('TupleRep '[LiftedRep, LiftedRep, LiftedRep, LiftedRep, LiftedRep])) | Since: template-haskell-2.16.0.0 |
| (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f) => Lift ((# a | b | c | d | e | f #) :: TYPE ('SumRep '[LiftedRep, LiftedRep, LiftedRep, LiftedRep, LiftedRep, LiftedRep])) | Since: template-haskell-2.16.0.0 |
| (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f) => Lift ((# a, b, c, d, e, f #) :: TYPE ('TupleRep '[LiftedRep, LiftedRep, LiftedRep, LiftedRep, LiftedRep, LiftedRep])) | Since: template-haskell-2.16.0.0 |
| (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g) => Lift ((# a | b | c | d | e | f | g #) :: TYPE ('SumRep '[LiftedRep, LiftedRep, LiftedRep, LiftedRep, LiftedRep, LiftedRep, LiftedRep])) | Since: template-haskell-2.16.0.0 |
| (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g) => Lift ((# a, b, c, d, e, f, g #) :: TYPE ('TupleRep '[LiftedRep, LiftedRep, LiftedRep, LiftedRep, LiftedRep, LiftedRep, LiftedRep])) | Since: template-haskell-2.16.0.0 |
Type classes
Clash
class NFDataX a => AutoReg a Source #
autoReg is a "smart" version of register. It does two things:
- It splits product types over their fields. For example, given a 3-tuple, the corresponding HDL will end up with three instances of a register (or more if the three fields can be split up similarly).
- Given a data type where a constructor indicates (parts) of the data will (not) be updated a given cycle, it will split the data in two parts. The first part will contain the "always interesting" parts (the constructor bits). The second holds the "potentially uninteresting" data (the rest). Both parts will be stored in separate registers. The register holding the "potentially uninteresting" part will only be enabled if the constructor bits indicate they're interesting.
The most important example of this is Maybe. Consider Maybe (Signed 16);
when viewed as bits, a Nothing would look like:
>>>pack @(Maybe (Signed 16)) Nothing0b0_...._...._...._....
and Just
>>>pack @(Maybe (Signed 16)) (Just 3)0b1_0000_0000_0000_0011
In the first case, Nothing, we don't particularly care about updating the
register holding the Signed 16 field, as they'll be unknown anyway. We
can therefore deassert its enable line.
Making Clash lay it out like this increases the chances of synthesis tools clock gating the registers, saving energy.
This version of autoReg will split the given data type up recursively. For
example, given a :: Maybe (Maybe Int, Maybe Int), a total of five registers
will be rendered. Both the "interesting" and "uninteresting" enable lines of
the inner Maybe types will be controlled by the outer one, in addition to
the inner parts controlling their "uninteresting" parts as described in (2).
The default implementation is just register. If you don't need or want
the special features of AutoReg, you can use that by writing an empty instance.
data MyDataType = ... instance AutoReg MyDataType
If you have a product type you can use deriveAutoReg to derive an instance.
Instances
| AutoReg Bit Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg CUShort Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Int16 Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Int32 Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Int64 Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Int8 Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Word16 Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Word32 Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Word64 Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Word8 Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Half Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Integer Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg () Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Bool Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Char Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Double Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Float Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Int Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg Word Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg a => AutoReg (Complex a) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| KnownNat n => AutoReg (BitVector n) Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg (Index n) Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg (Signed n) Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg (Unsigned n) Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| AutoReg a => AutoReg (Down a) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| AutoReg a => AutoReg (Ratio a) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| AutoReg a => AutoReg (Maybe a) Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| (AutoReg a, KnownNat n) => AutoReg (RamOp n a) Source # | |
Defined in Clash.Explicit.BlockRam | |
| (KnownNat d, AutoReg a) => AutoReg (RTree d a) Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| (KnownNat n, AutoReg a) => AutoReg (Vec n a) Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| (AutoReg a, AutoReg b) => AutoReg (a, b) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| NFDataX (rep (int + frac)) => AutoReg (Fixed rep int frac) Source # | |
Defined in Clash.Class.AutoReg.Internal | |
| (AutoReg a, AutoReg b, AutoReg c) => AutoReg (a, b, c) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| (AutoReg a, AutoReg b, AutoReg c, AutoReg d) => AutoReg (a, b, c, d) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| (AutoReg a, AutoReg b, AutoReg c, AutoReg d, AutoReg e) => AutoReg (a, b, c, d, e) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| (AutoReg a, AutoReg b, AutoReg c, AutoReg d, AutoReg e, AutoReg f) => AutoReg (a, b, c, d, e, f) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| (AutoReg a, AutoReg b, AutoReg c, AutoReg d, AutoReg e, AutoReg f, AutoReg g) => AutoReg (a, b, c, d, e, f, g) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| (AutoReg a, AutoReg b, AutoReg c, AutoReg d, AutoReg e, AutoReg f, AutoReg g, AutoReg h) => AutoReg (a, b, c, d, e, f, g, h) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| (AutoReg a, AutoReg b, AutoReg c, AutoReg d, AutoReg e, AutoReg f, AutoReg g, AutoReg h, AutoReg i) => AutoReg (a, b, c, d, e, f, g, h, i) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| (AutoReg a, AutoReg b, AutoReg c, AutoReg d, AutoReg e, AutoReg f, AutoReg g, AutoReg h, AutoReg i, AutoReg j) => AutoReg (a, b, c, d, e, f, g, h, i, j) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| (AutoReg a, AutoReg b, AutoReg c, AutoReg d, AutoReg e, AutoReg f, AutoReg g, AutoReg h, AutoReg i, AutoReg j, AutoReg k) => AutoReg (a, b, c, d, e, f, g, h, i, j, k) Source # | |
Defined in Clash.Class.AutoReg.Instances | |
| (AutoReg a, AutoReg b, AutoReg c, AutoReg d, AutoReg e, AutoReg f, AutoReg g, AutoReg h, AutoReg i, AutoReg j, AutoReg k, AutoReg l) => AutoReg (a, b, c, d, e, f, g, h, i, j, k, l) Source # | NB: The documentation only shows instances up to 3-tuples. By
default, instances up to and including 12-tuples will exist. If the flag
|
Defined in Clash.Class.AutoReg.Instances | |
autoReg :: forall (dom :: Domain) a. (HasCallStack, HiddenClockResetEnable dom, AutoReg a) => a -> Signal dom a -> Signal dom a Source #
Implicit version of autoReg
deriveAutoReg :: Name -> DecsQ Source #
Automatically derives an AutoReg instance for a product type
Usage:
data Pair a b = MkPair { getA :: a, getB :: b } deriving (Generic, NFDataX)
data Tup3 a b c = MkTup3 { getAB :: Pair a b, getC :: c } deriving (Generic, NFDataX)
deriveAutoReg ''Pair
deriveAutoReg ''Tup3NB: Because of the way template haskell works the order here matters,
if you try to deriveAutoReg ''Tup3 before Pair it will complain
about missing an instance AutoReg (Pair a b).
module Clash.Class.BitPack
module Clash.Class.Exp
module Clash.Class.Num
module Clash.Class.Parity
module Clash.Class.Resize
Other
module Control.Applicative
module Data.Bits
Minimal complete definition
Nothing
Instances
| Default Bit Source # | |
Defined in Clash.Sized.Internal.BitVector | |
| Default IntSet | |
Defined in Data.Default.Internal | |
| Default All | |
Defined in Data.Default.Internal | |
| Default Any | |
Defined in Data.Default.Internal | |
| Default CBool | |
Defined in Data.Default.Internal | |
| Default CClock | |
Defined in Data.Default.Internal | |
| Default CDouble | |
Defined in Data.Default.Internal | |
| Default CFloat | |
Defined in Data.Default.Internal | |
| Default CInt | |
Defined in Data.Default.Internal | |
| Default CIntMax | |
Defined in Data.Default.Internal | |
| Default CIntPtr | |
Defined in Data.Default.Internal | |
| Default CLLong | |
Defined in Data.Default.Internal | |
| Default CLong | |
Defined in Data.Default.Internal | |
| Default CPtrdiff | |
Defined in Data.Default.Internal | |
| Default CSUSeconds | |
Defined in Data.Default.Internal Methods def :: CSUSeconds # | |
| Default CShort | |
Defined in Data.Default.Internal | |
| Default CSigAtomic | |
Defined in Data.Default.Internal Methods def :: CSigAtomic # | |
| Default CSize | |
Defined in Data.Default.Internal | |
| Default CTime | |
Defined in Data.Default.Internal | |
| Default CUInt | |
Defined in Data.Default.Internal | |
| Default CUIntMax | |
Defined in Data.Default.Internal | |
| Default CUIntPtr | |
Defined in Data.Default.Internal | |
| Default CULLong | |
Defined in Data.Default.Internal | |
| Default CULong | |
Defined in Data.Default.Internal | |
| Default CUSeconds | |
Defined in Data.Default.Internal | |
| Default CUShort | |
Defined in Data.Default.Internal | |
| Default IntPtr | |
Defined in Data.Default.Internal | |
| Default WordPtr | |
Defined in Data.Default.Internal | |
| Default Int16 | |
Defined in Data.Default.Internal | |
| Default Int32 | |
Defined in Data.Default.Internal | |
| Default Int64 | |
Defined in Data.Default.Internal | |
| Default Int8 | |
Defined in Data.Default.Internal | |
| Default Word16 | |
Defined in Data.Default.Internal | |
| Default Word32 | |
Defined in Data.Default.Internal | |
| Default Word64 | |
Defined in Data.Default.Internal | |
| Default Word8 | |
Defined in Data.Default.Internal | |
| Default Ordering | |
Defined in Data.Default.Internal | |
| Default Integer | |
Defined in Data.Default.Internal | |
| Default () | |
Defined in Data.Default.Internal | |
| Default Bool | |
Defined in Data.Default.Internal | |
| Default Double | |
Defined in Data.Default.Internal | |
| Default Float | |
Defined in Data.Default.Internal | |
| Default Int | |
Defined in Data.Default.Internal | |
| Default Word | |
Defined in Data.Default.Internal | |
| (Default a, RealFloat a) => Default (Complex a) | |
Defined in Data.Default.Internal | |
| Default (BitVector n) Source # | |
Defined in Clash.Sized.Internal.BitVector | |
| KnownNat n => Default (Index n) Source # | |
Defined in Clash.Sized.Internal.Index | |
| KnownNat n => Default (Signed n) Source # | |
Defined in Clash.Sized.Internal.Signed | |
| Default (Unsigned n) Source # | |
Defined in Clash.Sized.Internal.Unsigned | |
| Default (IntMap v) | |
Defined in Data.Default.Internal | |
| Default (Seq a) | |
Defined in Data.Default.Internal | |
| Default (Set v) | |
Defined in Data.Default.Internal | |
| Default a => Default (Tree a) | |
Defined in Data.Default.Internal | |
| Default a => Default (Identity a) | |
Defined in Data.Default.Internal | |
| Default (First a) | |
Defined in Data.Default.Internal | |
| Default (Last a) | |
Defined in Data.Default.Internal | |
| Default a => Default (Dual a) | |
Defined in Data.Default.Internal | |
| Default (Endo a) | |
Defined in Data.Default.Internal | |
| Num a => Default (Product a) | |
Defined in Data.Default.Internal | |
| Num a => Default (Sum a) | |
Defined in Data.Default.Internal | |
| Default (ConstPtr a) | |
Defined in Data.Default.Internal | |
| Default (FunPtr a) | |
Defined in Data.Default.Internal | |
| Default (Ptr a) | |
Defined in Data.Default.Internal | |
| Integral a => Default (Ratio a) | |
Defined in Data.Default.Internal | |
| Default (Maybe a) | |
Defined in Data.Default.Internal | |
| Default a => Default (Solo a) | |
Defined in Data.Default.Internal | |
| Default [a] | |
Defined in Data.Default.Internal | |
| HasResolution a => Default (Fixed a) | |
Defined in Data.Default.Internal | |
| Default a => Default (Signal dom a) Source # | |
Defined in Clash.Signal.Internal | |
| (KnownNat d, Default a) => Default (RTree d a) Source # | |
Defined in Clash.Sized.RTree | |
| (Default a, KnownNat n) => Default (Vec n a) Source # | |
Defined in Clash.Sized.Vector | |
| Default (Map k v) | |
Defined in Data.Default.Internal | |
| Default (Proxy a) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2) => Default (a1, a2) | |
Defined in Data.Default.Internal | |
| Default a => Default (DSignal dom delay a) Source # | |
Defined in Clash.Signal.Delayed.Internal | |
| Default (rep (int + frac)) => Default (Fixed rep int frac) Source # | |
Defined in Clash.Sized.Fixed | |
| Default a => Default (Const a b) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3) => Default (a1, a2, a3) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4) => Default (a1, a2, a3, a4) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5) => Default (a1, a2, a3, a4, a5) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6) => Default (a1, a2, a3, a4, a5, a6) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7) => Default (a1, a2, a3, a4, a5, a6, a7) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8) => Default (a1, a2, a3, a4, a5, a6, a7, a8) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19, Default a20) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19, Default a20, Default a21) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19, Default a20, Default a21, Default a22) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19, Default a20, Default a21, Default a22, Default a23) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19, Default a20, Default a21, Default a22, Default a23, Default a24) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19, Default a20, Default a21, Default a22, Default a23, Default a24, Default a25) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19, Default a20, Default a21, Default a22, Default a23, Default a24, Default a25, Default a26) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19, Default a20, Default a21, Default a22, Default a23, Default a24, Default a25, Default a26, Default a27) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19, Default a20, Default a21, Default a22, Default a23, Default a24, Default a25, Default a26, Default a27, Default a28) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19, Default a20, Default a21, Default a22, Default a23, Default a24, Default a25, Default a26, Default a27, Default a28, Default a29) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19, Default a20, Default a21, Default a22, Default a23, Default a24, Default a25, Default a26, Default a27, Default a28, Default a29, Default a30) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30) | |
Defined in Data.Default.Internal | |
| (Default a1, Default a2, Default a3, Default a4, Default a5, Default a6, Default a7, Default a8, Default a9, Default a10, Default a11, Default a12, Default a13, Default a14, Default a15, Default a16, Default a17, Default a18, Default a19, Default a20, Default a21, Default a22, Default a23, Default a24, Default a25, Default a26, Default a27, Default a28, Default a29, Default a30, Default a31) => Default (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31) | |
Defined in Data.Default.Internal | |
type Constraint = CONSTRAINT LiftedRep Source #
The kind of lifted constraints
Exceptions
module Clash.XException
Named types
module Clash.NamedTypes
Hidden arguments
module Clash.Hidden
Magic
module Clash.Magic
Haskell Prelude
Clash.Prelude re-exports most of the Haskell Prelude with the exception of
those functions that the Clash API defines to work on Vec from
Clash.Sized.Vector instead of on lists as the Haskell Prelude does.
In addition, for the odd and even
functions a type class called Parity is available at
Clash.Class.Parity.
module Clash.HaskellPrelude