module Hardware.KansasLava.Boards.Papilio
( Model(..)
, Papilio(..)
, clockRate
) where
import Language.KansasLava as KL
import Hardware.KansasLava.Rate
import Data.Sized.Ix hiding (all)
import Control.Monad.Fix
data Model = PapilioOne
| PapilioPro
clockRate :: Integer
clockRate = 32 * 1000 * 1000
class MonadFix fabric => Papilio fabric where
board_init :: fabric ()
tickTock :: (Size w) => Witness w -> Integer -> fabric (Seq Bool)
instance Papilio Fabric where
board_init = do
theClk "CLK_32MHZ"
tickTock wit hz = return $ rate wit tickTime
where
clockHz = fromIntegral clockRate / fromIntegral hz
tickTime = 1 / clockHz