clash-prelude-0.10.9: CAES Language for Synchronous Hardware - Prelude library

Copyright(C) 2013-2016, University of Twente
LicenseBSD2 (see the file LICENSE)
MaintainerChristiaan Baaij <christiaan.baaij@gmail.com>
Safe HaskellTrustworthy
LanguageHaskell2010
Extensions
  • Cpp
  • MonoLocalBinds
  • ScopedTypeVariables
  • TypeFamilies
  • GADTs
  • GADTSyntax
  • DataKinds
  • DeriveFunctor
  • DeriveTraversable
  • DeriveFoldable
  • DeriveLift
  • ConstrainedClassMethods
  • MultiParamTypeClasses
  • MagicHash
  • KindSignatures
  • GeneralizedNewtypeDeriving
  • TypeOperators
  • ExplicitNamespaces
  • ExplicitForAll

CLaSH.Signal.Delayed

Contents

Description

 

Synopsis

Delay-annotated synchronous signals

data DSignal delay a Source #

A synchronized signal with samples of type a, synchronized to "system" clock (period 1000), that has accumulated delay amount of samples delay along its path.

Instances

Functor (DSignal delay) Source # 

Methods

fmap :: (a -> b) -> DSignal delay a -> DSignal delay b #

(<$) :: a -> DSignal delay b -> DSignal delay a #

Applicative (DSignal delay) Source # 

Methods

pure :: a -> DSignal delay a #

(<*>) :: DSignal delay (a -> b) -> DSignal delay a -> DSignal delay b #

(*>) :: DSignal delay a -> DSignal delay b -> DSignal delay b #

(<*) :: DSignal delay a -> DSignal delay b -> DSignal delay a #

Foldable (DSignal delay) Source # 

Methods

fold :: Monoid m => DSignal delay m -> m #

foldMap :: Monoid m => (a -> m) -> DSignal delay a -> m #

foldr :: (a -> b -> b) -> b -> DSignal delay a -> b #

foldr' :: (a -> b -> b) -> b -> DSignal delay a -> b #

foldl :: (b -> a -> b) -> b -> DSignal delay a -> b #

foldl' :: (b -> a -> b) -> b -> DSignal delay a -> b #

foldr1 :: (a -> a -> a) -> DSignal delay a -> a #

foldl1 :: (a -> a -> a) -> DSignal delay a -> a #

toList :: DSignal delay a -> [a] #

null :: DSignal delay a -> Bool #

length :: DSignal delay a -> Int #

elem :: Eq a => a -> DSignal delay a -> Bool #

maximum :: Ord a => DSignal delay a -> a #

minimum :: Ord a => DSignal delay a -> a #

sum :: Num a => DSignal delay a -> a #

product :: Num a => DSignal delay a -> a #

Traversable (DSignal delay) Source # 

Methods

traverse :: Applicative f => (a -> f b) -> DSignal delay a -> f (DSignal delay b) #

sequenceA :: Applicative f => DSignal delay (f a) -> f (DSignal delay a) #

mapM :: Monad m => (a -> m b) -> DSignal delay a -> m (DSignal delay b) #

sequence :: Monad m => DSignal delay (m a) -> m (DSignal delay a) #

Bounded a => Bounded (DSignal delay a) Source # 

Methods

minBound :: DSignal delay a #

maxBound :: DSignal delay a #

Enum a => Enum (DSignal delay a) Source # 

Methods

succ :: DSignal delay a -> DSignal delay a #

pred :: DSignal delay a -> DSignal delay a #

toEnum :: Int -> DSignal delay a #

fromEnum :: DSignal delay a -> Int #

enumFrom :: DSignal delay a -> [DSignal delay a] #

enumFromThen :: DSignal delay a -> DSignal delay a -> [DSignal delay a] #

enumFromTo :: DSignal delay a -> DSignal delay a -> [DSignal delay a] #

enumFromThenTo :: DSignal delay a -> DSignal delay a -> DSignal delay a -> [DSignal delay a] #

Eq (DSignal delay a) Source # 

Methods

(==) :: DSignal delay a -> DSignal delay a -> Bool #

(/=) :: DSignal delay a -> DSignal delay a -> Bool #

Fractional a => Fractional (DSignal delay a) Source # 

Methods

(/) :: DSignal delay a -> DSignal delay a -> DSignal delay a #

recip :: DSignal delay a -> DSignal delay a #

fromRational :: Rational -> DSignal delay a #

Integral a => Integral (DSignal delay a) Source # 

Methods

quot :: DSignal delay a -> DSignal delay a -> DSignal delay a #

rem :: DSignal delay a -> DSignal delay a -> DSignal delay a #

div :: DSignal delay a -> DSignal delay a -> DSignal delay a #

mod :: DSignal delay a -> DSignal delay a -> DSignal delay a #

quotRem :: DSignal delay a -> DSignal delay a -> (DSignal delay a, DSignal delay a) #

divMod :: DSignal delay a -> DSignal delay a -> (DSignal delay a, DSignal delay a) #

toInteger :: DSignal delay a -> Integer #

Num a => Num (DSignal delay a) Source # 

Methods

(+) :: DSignal delay a -> DSignal delay a -> DSignal delay a #

(-) :: DSignal delay a -> DSignal delay a -> DSignal delay a #

(*) :: DSignal delay a -> DSignal delay a -> DSignal delay a #

negate :: DSignal delay a -> DSignal delay a #

abs :: DSignal delay a -> DSignal delay a #

signum :: DSignal delay a -> DSignal delay a #

fromInteger :: Integer -> DSignal delay a #

Ord a => Ord (DSignal delay a) Source # 

Methods

compare :: DSignal delay a -> DSignal delay a -> Ordering #

(<) :: DSignal delay a -> DSignal delay a -> Bool #

(<=) :: DSignal delay a -> DSignal delay a -> Bool #

(>) :: DSignal delay a -> DSignal delay a -> Bool #

(>=) :: DSignal delay a -> DSignal delay a -> Bool #

max :: DSignal delay a -> DSignal delay a -> DSignal delay a #

min :: DSignal delay a -> DSignal delay a -> DSignal delay a #

(Num a, Ord a) => Real (DSignal delay a) Source # 

Methods

toRational :: DSignal delay a -> Rational #

Show a => Show (DSignal delay a) Source # 

Methods

showsPrec :: Int -> DSignal delay a -> ShowS #

show :: DSignal delay a -> String #

showList :: [DSignal delay a] -> ShowS #

Lift a => Lift (DSignal delay a) Source # 

Methods

lift :: DSignal delay a -> Q Exp #

Arbitrary a => Arbitrary (DSignal delay a) Source # 

Methods

arbitrary :: Gen (DSignal delay a) #

shrink :: DSignal delay a -> [DSignal delay a] #

CoArbitrary a => CoArbitrary (DSignal delay a) Source # 

Methods

coarbitrary :: DSignal delay a -> Gen b -> Gen b #

Bits a => Bits (DSignal delay a) Source # 

Methods

(.&.) :: DSignal delay a -> DSignal delay a -> DSignal delay a #

(.|.) :: DSignal delay a -> DSignal delay a -> DSignal delay a #

xor :: DSignal delay a -> DSignal delay a -> DSignal delay a #

complement :: DSignal delay a -> DSignal delay a #

shift :: DSignal delay a -> Int -> DSignal delay a #

rotate :: DSignal delay a -> Int -> DSignal delay a #

zeroBits :: DSignal delay a #

bit :: Int -> DSignal delay a #

setBit :: DSignal delay a -> Int -> DSignal delay a #

clearBit :: DSignal delay a -> Int -> DSignal delay a #

complementBit :: DSignal delay a -> Int -> DSignal delay a #

testBit :: DSignal delay a -> Int -> Bool #

bitSizeMaybe :: DSignal delay a -> Maybe Int #

bitSize :: DSignal delay a -> Int #

isSigned :: DSignal delay a -> Bool #

shiftL :: DSignal delay a -> Int -> DSignal delay a #

unsafeShiftL :: DSignal delay a -> Int -> DSignal delay a #

shiftR :: DSignal delay a -> Int -> DSignal delay a #

unsafeShiftR :: DSignal delay a -> Int -> DSignal delay a #

rotateL :: DSignal delay a -> Int -> DSignal delay a #

rotateR :: DSignal delay a -> Int -> DSignal delay a #

popCount :: DSignal delay a -> Int #

FiniteBits a => FiniteBits (DSignal delay a) Source # 

Methods

finiteBitSize :: DSignal delay a -> Int #

countLeadingZeros :: DSignal delay a -> Int #

countTrailingZeros :: DSignal delay a -> Int #

Default a => Default (DSignal delay a) Source # 

Methods

def :: DSignal delay a #

SaturatingNum a => SaturatingNum (DSignal delay a) Source # 

Methods

satPlus :: SaturationMode -> DSignal delay a -> DSignal delay a -> DSignal delay a Source #

satMin :: SaturationMode -> DSignal delay a -> DSignal delay a -> DSignal delay a Source #

satMult :: SaturationMode -> DSignal delay a -> DSignal delay a -> DSignal delay a Source #

ExtendingNum a b => ExtendingNum (DSignal n a) (DSignal n b) Source # 

Associated Types

type AResult (DSignal n a) (DSignal n b) :: * Source #

type MResult (DSignal n a) (DSignal n b) :: * Source #

Methods

plus :: DSignal n a -> DSignal n b -> AResult (DSignal n a) (DSignal n b) Source #

minus :: DSignal n a -> DSignal n b -> AResult (DSignal n a) (DSignal n b) Source #

times :: DSignal n a -> DSignal n b -> MResult (DSignal n a) (DSignal n b) Source #

type AResult (DSignal n a) (DSignal n b) Source # 
type AResult (DSignal n a) (DSignal n b) = DSignal n (AResult a b)
type MResult (DSignal n a) (DSignal n b) Source # 
type MResult (DSignal n a) (DSignal n b) = DSignal n (MResult a b)

delay :: forall a n d. KnownNat d => Vec d a -> DSignal n a -> DSignal (n + d) a Source #

Delay a DSignal for d periods.

delay3 :: DSignal n Int -> DSignal (n + 3) Int
delay3 = delay (0 :> 0 :> 0 :> Nil)
>>> sampleN 6 (delay3 (dfromList [1..]))
[0,0,0,1,2,3]

delayI :: (Default a, KnownNat d) => DSignal n a -> DSignal (n + d) a Source #

Delay a DSignal for m periods, where m is derived from the context.

delay2 :: DSignal n Int -> DSignal (n + 2) Int
delay2 = delayI
>>> sampleN 6 (delay2 (dfromList [1..]))
[0,0,1,2,3,4]

feedback :: (DSignal n a -> (DSignal n a, DSignal ((n + m) + 1) a)) -> DSignal n a Source #

Feed the delayed result of a function back to its input:

mac :: DSignal 0 Int -> DSignal 0 Int -> DSignal 0 Int
mac x y = feedback (mac' x y)
  where
    mac' :: DSignal 0 Int -> DSignal 0 Int -> DSignal 0 Int
         -> (DSignal 0 Int, DSignal 1 Int)
    mac' a b acc = let acc' = a * b + acc
                   in  (acc, delay (singleton 0) acc')
>>> sampleN 6 (mac (dfromList [1..]) (dfromList [1..]))
[0,1,5,14,30,55]

Signal <-> DSignal conversion

fromSignal :: Signal a -> DSignal 0 a Source #

Signals are not delayed

sample s == dsample (fromSignal s)

toSignal :: DSignal delay a -> Signal a Source #

Strip a DSignal from its delay information.

List <-> DSignal conversion (not synthesisable)

dfromList :: [a] -> DSignal 0 a Source #

Create a DSignal from a list

Every element in the list will correspond to a value of the signal for one clock cycle.

>>> sampleN 2 (dfromList [1,2,3,4,5])
[1,2]

NB: This function is not synthesisable

Experimental

unsafeFromSignal :: Signal a -> DSignal n a Source #

EXPERIMENTAL

Unsafely convert a Signal to any DSignal.

NB: Should only be used to interface with functions specified in terms of Signal.

antiDelay :: SNat d -> DSignal (n + d) a -> DSignal n a Source #

EXPERIMENTAL

Access a delayed signal in the present.

mac :: DSignal 0 Int -> DSignal 0 Int -> DSignal 0 Int
mac x y = acc'
  where
    acc' = (x * y) + antiDelay d1 acc
    acc  = delay (singleton 0) acc'