{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies #-}
module Clash.Intel.DDR
( altddioIn
, altddioOut
, altddioIn#
, altddioOut#
)
where
import Data.Bifunctor
import GHC.Stack (HasCallStack, withFrozenCallStack)
import Clash.Annotations.Primitive (hasBlackBox)
import Clash.Explicit.Prelude
import Clash.Explicit.DDR
altddioIn
:: forall deviceFamily a dom domDDR
. HasCallStack
=> KnownDomain dom
=> KnownDomain domDDR
=> DomainPeriod dom ~ (2 * DomainPeriod domDDR)
=> DomainActiveEdge dom ~ 'Rising
=> BitPack a
=> SSymbol deviceFamily
-> Clock dom
-> Reset dom
-> Enable dom
-> Signal domDDR a
-> Signal dom (a, a)
altddioIn devFam clk rst en =
fmap (bimap unpack unpack) .
withFrozenCallStack (altddioIn# devFam clk rst en) . fmap pack
altddioIn#
:: forall deviceFamily n dom domDDR
. HasCallStack
=> KnownDomain dom
=> KnownDomain domDDR
=> DomainPeriod dom ~ (2 * DomainPeriod domDDR)
=> DomainActiveEdge dom ~ 'Rising
=> KnownNat n
=> SSymbol deviceFamily
-> Clock dom
-> Reset dom
-> Enable dom
-> Signal domDDR (BitVector n)
-> Signal dom (BitVector n, BitVector n)
altddioIn# SSymbol clk rst en = withFrozenCallStack ddrIn# clk rst en 0 0 0
{-# CLASH_OPAQUE altddioIn# #-}
{-# ANN altddioIn# hasBlackBox #-}
altddioOut
:: forall deviceFamily a dom domDDR
. HasCallStack
=> KnownDomain dom
=> KnownDomain domDDR
=> DomainPeriod dom ~ (2 * DomainPeriod domDDR)
=> DomainActiveEdge dom ~ 'Rising
=> BitPack a
=> SSymbol deviceFamily
-> Clock dom
-> Reset dom
-> Enable dom
-> Signal dom (a, a)
-> Signal domDDR a
altddioOut devFam clk rst en =
fmap unpack . uncurry (withFrozenCallStack altddioOut# devFam clk rst en) .
unbundle . fmap (bimap pack pack)
altddioOut#
:: forall deviceFamily n dom domDDR
. HasCallStack
=> KnownDomain dom
=> KnownDomain domDDR
=> DomainPeriod dom ~ (2 * DomainPeriod domDDR)
=> DomainActiveEdge dom ~ 'Rising
=> KnownNat n
=> SSymbol deviceFamily
-> Clock dom
-> Reset dom
-> Enable dom
-> Signal dom (BitVector n)
-> Signal dom (BitVector n)
-> Signal domDDR (BitVector n)
altddioOut# SSymbol clk rst en = ddrOut# clk rst en 0
{-# CLASH_OPAQUE altddioOut# #-}
{-# ANN altddioOut# hasBlackBox #-}