------------------------------------------------------------------------------- --- $Id: Classes.hs#1 2009/10/01 10:31:09 REDMOND\\satnams $ ------------------------------------------------------------------------------- module Lava.Classes where import Lava.TypeExpr class GroundAndPower bit where one, zero :: bit class (GroundAndPower bit, Monad m) => Combinational m bit where gnd, vcc :: m bit lut1 :: (Bool -> Bool) -> bit -> m bit lut2 :: (Bool -> Bool -> Bool) -> (bit, bit) -> m bit lut3 :: (Bool -> Bool -> Bool -> Bool) -> (bit, bit, bit) -> m bit lut4 :: (Bool -> Bool -> Bool -> Bool -> Bool) -> (bit, bit, bit, bit) -> m bit gnd = return zero vcc = return one class Monad m => Sequential m bit where delay0 :: bit -> m bit delay1 :: bit -> m bit delayInit :: Int -> bit -> m bit delayInit 0 = delay0 delayInit 1 = delay1