-------------------------------------------------------------------------------- -- Copyright © 2011 National Institute of Aerospace / Galois, Inc. -------------------------------------------------------------------------------- -- | Example in sampling external arrays. {-# LANGUAGE RebindableSyntax #-} module Array ( array ) where import Language.Copilot hiding (cycle) import Data.List (cycle) --import qualified Copilot.Compile.C99 as C import qualified Copilot.Compile.SBV as S -------------------------------------------------------------------------------- extArr :: Stream Word32 extArr = externArray "arr1" arrIdx 5 (Just $ repeat [7,8,9,10,11]) arrIdx :: Stream Word32 arrIdx = [0] ++ (arrIdx + 1) `mod` 4 arrIdx2 :: Stream Word8 arrIdx2 = extern "idx2" (Just [0,0..]) extArr2 :: Stream Word16 -> Stream Word32 extArr2 idx = externArray "arr2" idx 4 (Just $ repeat [1,2,3,4]) extArr3 :: Stream Word32 extArr3 = extArr2 (cast $ externW8 "idx3" (Just $ cycle [0,1,2])) spec :: Spec spec = trigger "trigger" true [ arg extArr , arg (extArr2 (cast arrIdx2)) , arg extArr3 -- Throws an exception since the index is too big for the array! -- , arg (extArr2 5) ] array :: IO () array = do -- reify spec >>= C.compile C.defaultParams interpret 10 spec reify spec >>= S.compile S.defaultParams --------------------------------------------------------------------------------