playground/haskell/clash-unsorted/TimeReg.hs

53 lines
1.1 KiB
Haskell

module TimeReg where
import Clash.Prelude
time
:: Maybe a -- ^ signal value
-> Int -- ^ time value present in register
-> Maybe Int -- ^ output
time Nothing _ = Nothing
time _ t = Just t
timeS
:: HiddenClockResetEnable dom
=> Signal dom (Maybe a)
-> Signal dom (Maybe Int)
timeS x = time <$> x <*> r
where
r = register 0 (r + 1)
topEntity
:: Clock System
-> Reset System
-> Enable System
-> Signal System (Maybe (Signed 8))
-> Signal System (Maybe Int)
topEntity = exposeClockResetEnable timeS
-- import qualified Data.List as L
-- *TimeReg L> L.take 5 $ simulate @System timeS [Just 0, Just 1, Nothing, Just 3, Nothing]
-- [Just 0,Just 1,Nothing,Just 3,Nothing]
-- old output
-- import qualified Data.List as L
-- *TimeReg L> L.take 4 $ simulate @System timeS [Just 1::Maybe (Signed 8), Just 2, Nothing, Just 3, Just 4]
-- *TimeReg L> L.take 4 $ simulate @System timeS [Just 1, Just 2, Nothing, Just 3, Just 4]
-- [Just 0,Just 1,Nothing,Just 3]
-- [Just 1, Just 2, Nothing, Just 3, Just 4]
-- [Just 0,Just 1,Nothing,Just 3]