{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies #-}
module Clash.Xilinx.DDR
( iddr
, oddr
, iddr#
, oddr#
)
where
import Data.Bifunctor
import GHC.Stack (HasCallStack, withFrozenCallStack)
import Clash.Annotations.Primitive (hasBlackBox)
import Clash.Explicit.Prelude
import Clash.Explicit.DDR
iddr
:: forall a dom domDDR
. HasCallStack
=> KnownDomain dom
=> KnownDomain domDDR
=> DomainPeriod dom ~ (2 * DomainPeriod domDDR)
=> DomainActiveEdge dom ~ 'Rising
=> BitPack a
=> Clock dom
-> Reset dom
-> Enable dom
-> Signal domDDR a
-> Signal dom (a, a)
iddr :: forall a (dom :: Domain) (domDDR :: Domain).
(HasCallStack, KnownDomain dom, KnownDomain domDDR,
DomainPeriod dom ~ (2 * DomainPeriod domDDR),
DomainActiveEdge dom ~ 'Rising, BitPack a) =>
Clock dom
-> Reset dom -> Enable dom -> Signal domDDR a -> Signal dom (a, a)
iddr Clock dom
clk Reset dom
rst Enable dom
en =
((BitVector (BitSize a), BitVector (BitSize a)) -> (a, a))
-> Signal dom (BitVector (BitSize a), BitVector (BitSize a))
-> Signal dom (a, a)
forall a b. (a -> b) -> Signal dom a -> Signal dom b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap ((BitVector (BitSize a) -> a)
-> (BitVector (BitSize a) -> a)
-> (BitVector (BitSize a), BitVector (BitSize a))
-> (a, a)
forall a b c d. (a -> b) -> (c -> d) -> (a, c) -> (b, d)
forall (p :: Type -> Type -> Type) a b c d.
Bifunctor p =>
(a -> b) -> (c -> d) -> p a c -> p b d
bimap BitVector (BitSize a) -> a
forall a. BitPack a => BitVector (BitSize a) -> a
unpack BitVector (BitSize a) -> a
forall a. BitPack a => BitVector (BitSize a) -> a
unpack) (Signal dom (BitVector (BitSize a), BitVector (BitSize a))
-> Signal dom (a, a))
-> (Signal domDDR a
-> Signal dom (BitVector (BitSize a), BitVector (BitSize a)))
-> Signal domDDR a
-> Signal dom (a, a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (HasCallStack =>
Signal domDDR (BitVector (BitSize a))
-> Signal dom (BitVector (BitSize a), BitVector (BitSize a)))
-> Signal domDDR (BitVector (BitSize a))
-> Signal dom (BitVector (BitSize a), BitVector (BitSize a))
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack (Clock dom
-> Reset dom
-> Enable dom
-> Signal domDDR (BitVector (BitSize a))
-> Signal dom (BitVector (BitSize a), BitVector (BitSize a))
forall (n :: Nat) (dom :: Domain) (domDDR :: Domain).
(HasCallStack, KnownDomain dom, KnownDomain domDDR,
DomainPeriod dom ~ (2 * DomainPeriod domDDR),
DomainActiveEdge dom ~ 'Rising, KnownNat n) =>
Clock dom
-> Reset dom
-> Enable dom
-> Signal domDDR (BitVector n)
-> Signal dom (BitVector n, BitVector n)
iddr# Clock dom
clk Reset dom
rst Enable dom
en) (Signal domDDR (BitVector (BitSize a))
-> Signal dom (BitVector (BitSize a), BitVector (BitSize a)))
-> (Signal domDDR a -> Signal domDDR (BitVector (BitSize a)))
-> Signal domDDR a
-> Signal dom (BitVector (BitSize a), BitVector (BitSize a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
(a -> BitVector (BitSize a))
-> Signal domDDR a -> Signal domDDR (BitVector (BitSize a))
forall a b. (a -> b) -> Signal domDDR a -> Signal domDDR b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> BitVector (BitSize a)
forall a. BitPack a => a -> BitVector (BitSize a)
pack
iddr#
:: forall n dom domDDR
. HasCallStack
=> KnownDomain dom
=> KnownDomain domDDR
=> DomainPeriod dom ~ (2 * DomainPeriod domDDR)
=> DomainActiveEdge dom ~ 'Rising
=> KnownNat n
=> Clock dom
-> Reset dom
-> Enable dom
-> Signal domDDR (BitVector n)
-> Signal dom (BitVector n, BitVector n)
iddr# :: forall (n :: Nat) (dom :: Domain) (domDDR :: Domain).
(HasCallStack, KnownDomain dom, KnownDomain domDDR,
DomainPeriod dom ~ (2 * DomainPeriod domDDR),
DomainActiveEdge dom ~ 'Rising, KnownNat n) =>
Clock dom
-> Reset dom
-> Enable dom
-> Signal domDDR (BitVector n)
-> Signal dom (BitVector n, BitVector n)
iddr# Clock dom
clk Reset dom
rst Enable dom
en = (HasCallStack =>
Clock dom
-> Reset dom
-> Enable dom
-> BitVector n
-> BitVector n
-> BitVector n
-> Signal domDDR (BitVector n)
-> Signal dom (BitVector n, BitVector n))
-> Clock dom
-> Reset dom
-> Enable dom
-> BitVector n
-> BitVector n
-> BitVector n
-> Signal domDDR (BitVector n)
-> Signal dom (BitVector n, BitVector n)
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack =>
Clock dom
-> Reset dom
-> Enable dom
-> BitVector n
-> BitVector n
-> BitVector n
-> Signal domDDR (BitVector n)
-> Signal dom (BitVector n, BitVector n)
Clock dom
-> Reset dom
-> Enable dom
-> BitVector n
-> BitVector n
-> BitVector n
-> Signal domDDR (BitVector n)
-> Signal dom (BitVector n, BitVector n)
forall a (dom :: Domain) (domDDR :: Domain).
(HasCallStack, NFDataX a, KnownDomain dom, KnownDomain domDDR,
DomainPeriod dom ~ (2 * DomainPeriod domDDR)) =>
Clock dom
-> Reset dom
-> Enable dom
-> a
-> a
-> a
-> Signal domDDR a
-> Signal dom (a, a)
ddrIn# Clock dom
clk Reset dom
rst Enable dom
en BitVector n
0 BitVector n
0 BitVector n
0
{-# CLASH_OPAQUE iddr# #-}
{-# ANN iddr# hasBlackBox #-}
oddr
:: forall a dom domDDR
. HasCallStack
=> KnownDomain dom
=> KnownDomain domDDR
=> DomainPeriod dom ~ (2 * DomainPeriod domDDR)
=> DomainActiveEdge dom ~ 'Rising
=> BitPack a
=> Clock dom
-> Reset dom
-> Enable dom
-> Signal dom (a, a)
-> Signal domDDR a
oddr :: forall a (dom :: Domain) (domDDR :: Domain).
(HasCallStack, KnownDomain dom, KnownDomain domDDR,
DomainPeriod dom ~ (2 * DomainPeriod domDDR),
DomainActiveEdge dom ~ 'Rising, BitPack a) =>
Clock dom
-> Reset dom -> Enable dom -> Signal dom (a, a) -> Signal domDDR a
oddr Clock dom
clk Reset dom
rst Enable dom
en =
(BitVector (BitSize a) -> a)
-> Signal domDDR (BitVector (BitSize a)) -> Signal domDDR a
forall a b. (a -> b) -> Signal domDDR a -> Signal domDDR b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap BitVector (BitSize a) -> a
forall a. BitPack a => BitVector (BitSize a) -> a
unpack (Signal domDDR (BitVector (BitSize a)) -> Signal domDDR a)
-> (Signal dom (a, a) -> Signal domDDR (BitVector (BitSize a)))
-> Signal dom (a, a)
-> Signal domDDR a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Signal dom (BitVector (BitSize a))
-> Signal dom (BitVector (BitSize a))
-> Signal domDDR (BitVector (BitSize a)))
-> (Signal dom (BitVector (BitSize a)),
Signal dom (BitVector (BitSize a)))
-> Signal domDDR (BitVector (BitSize a))
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry ((HasCallStack =>
Clock dom
-> Reset dom
-> Enable dom
-> Signal dom (BitVector (BitSize a))
-> Signal dom (BitVector (BitSize a))
-> Signal domDDR (BitVector (BitSize a)))
-> Clock dom
-> Reset dom
-> Enable dom
-> Signal dom (BitVector (BitSize a))
-> Signal dom (BitVector (BitSize a))
-> Signal domDDR (BitVector (BitSize a))
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack =>
Clock dom
-> Reset dom
-> Enable dom
-> Signal dom (BitVector (BitSize a))
-> Signal dom (BitVector (BitSize a))
-> Signal domDDR (BitVector (BitSize a))
Clock dom
-> Reset dom
-> Enable dom
-> Signal dom (BitVector (BitSize a))
-> Signal dom (BitVector (BitSize a))
-> Signal domDDR (BitVector (BitSize a))
forall (n :: Nat) (dom :: Domain) (domDDR :: Domain).
(HasCallStack, KnownDomain dom, KnownDomain domDDR,
DomainPeriod dom ~ (2 * DomainPeriod domDDR),
DomainActiveEdge dom ~ 'Rising, KnownNat n) =>
Clock dom
-> Reset dom
-> Enable dom
-> Signal dom (BitVector n)
-> Signal dom (BitVector n)
-> Signal domDDR (BitVector n)
oddr# Clock dom
clk Reset dom
rst Enable dom
en) ((Signal dom (BitVector (BitSize a)),
Signal dom (BitVector (BitSize a)))
-> Signal domDDR (BitVector (BitSize a)))
-> (Signal dom (a, a)
-> (Signal dom (BitVector (BitSize a)),
Signal dom (BitVector (BitSize a))))
-> Signal dom (a, a)
-> Signal domDDR (BitVector (BitSize a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Signal dom (BitVector (BitSize a), BitVector (BitSize a))
-> (Signal dom (BitVector (BitSize a)),
Signal dom (BitVector (BitSize a)))
Signal dom (BitVector (BitSize a), BitVector (BitSize a))
-> Unbundled dom (BitVector (BitSize a), BitVector (BitSize a))
forall a (dom :: Domain).
Bundle a =>
Signal dom a -> Unbundled dom a
forall (dom :: Domain).
Signal dom (BitVector (BitSize a), BitVector (BitSize a))
-> Unbundled dom (BitVector (BitSize a), BitVector (BitSize a))
unbundle (Signal dom (BitVector (BitSize a), BitVector (BitSize a))
-> (Signal dom (BitVector (BitSize a)),
Signal dom (BitVector (BitSize a))))
-> (Signal dom (a, a)
-> Signal dom (BitVector (BitSize a), BitVector (BitSize a)))
-> Signal dom (a, a)
-> (Signal dom (BitVector (BitSize a)),
Signal dom (BitVector (BitSize a)))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
((a, a) -> (BitVector (BitSize a), BitVector (BitSize a)))
-> Signal dom (a, a)
-> Signal dom (BitVector (BitSize a), BitVector (BitSize a))
forall a b. (a -> b) -> Signal dom a -> Signal dom b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap ((a -> BitVector (BitSize a))
-> (a -> BitVector (BitSize a))
-> (a, a)
-> (BitVector (BitSize a), BitVector (BitSize a))
forall a b c d. (a -> b) -> (c -> d) -> (a, c) -> (b, d)
forall (p :: Type -> Type -> Type) a b c d.
Bifunctor p =>
(a -> b) -> (c -> d) -> p a c -> p b d
bimap a -> BitVector (BitSize a)
forall a. BitPack a => a -> BitVector (BitSize a)
pack a -> BitVector (BitSize a)
forall a. BitPack a => a -> BitVector (BitSize a)
pack)
oddr#
:: forall n dom domDDR
. HasCallStack
=> KnownDomain dom
=> KnownDomain domDDR
=> DomainPeriod dom ~ (2 * DomainPeriod domDDR)
=> DomainActiveEdge dom ~ 'Rising
=> KnownNat n
=> Clock dom
-> Reset dom
-> Enable dom
-> Signal dom (BitVector n)
-> Signal dom (BitVector n)
-> Signal domDDR (BitVector n)
oddr# :: forall (n :: Nat) (dom :: Domain) (domDDR :: Domain).
(HasCallStack, KnownDomain dom, KnownDomain domDDR,
DomainPeriod dom ~ (2 * DomainPeriod domDDR),
DomainActiveEdge dom ~ 'Rising, KnownNat n) =>
Clock dom
-> Reset dom
-> Enable dom
-> Signal dom (BitVector n)
-> Signal dom (BitVector n)
-> Signal domDDR (BitVector n)
oddr# Clock dom
clk Reset dom
rst Enable dom
en = Clock dom
-> Reset dom
-> Enable dom
-> BitVector n
-> Signal dom (BitVector n)
-> Signal dom (BitVector n)
-> Signal domDDR (BitVector n)
forall a (dom :: Domain) (domDDR :: Domain).
(HasCallStack, NFDataX a, KnownDomain dom, KnownDomain domDDR,
DomainPeriod dom ~ (2 * DomainPeriod domDDR)) =>
Clock dom
-> Reset dom
-> Enable dom
-> a
-> Signal dom a
-> Signal dom a
-> Signal domDDR a
ddrOut# Clock dom
clk Reset dom
rst Enable dom
en BitVector n
0
{-# CLASH_OPAQUE oddr# #-}
{-# ANN oddr# hasBlackBox #-}