ForSyDe-3.1: examples/ZipTwist.hs
{-# LANGUAGE TemplateHaskell #-}
-- An identity system of six inputs formed by various zipping and unzipping
-- processes
module ZipTwist where
import ForSyDe
import Data.Param.FSVec
import Data.TypeLevel.Num.Reps
import Data.Int
zip6xSY :: ProcId -> FSVec D6 (Signal Int32) -> Signal (FSVec D6 Int32)
zip6xSY = zipxSY
zipTwistFun :: Signal Int32 -> Signal Int32 -> Signal Int32
-> Signal Int32 -> Signal Int32 -> Signal Int32
-> (Signal Int32, Signal Int32, Signal Int32,
Signal Int32, Signal Int32, Signal Int32)
zipTwistFun i1 i2 i3 i4 i5 i6 = (o1,o2,o3,o4,o5,o6)
where [i1',i2',i3',i4',i5',i6'] = (fromVector.unzipxSY "unzipxSY" . zip6xSY "zip6xsy")
$ reallyUnsafeVector [i1,i2,i3,i4,i5,i6]
zip13 = zip3SY "zip13" i1' i2' i3'
zip46 = zip3SY "zip46" i4' i5' i6'
(o1,o2,o3) = unzip3SY "unzip13" zip13
(o4,o5,o6) = unzip3SY "unzip46" zip46
zipTwistSys :: SysDef (Signal Int32 -> Signal Int32 -> Signal Int32
-> Signal Int32 -> Signal Int32 -> Signal Int32
-> (Signal Int32, Signal Int32, Signal Int32,
Signal Int32, Signal Int32, Signal Int32))
zipTwistSys = newSysDef zipTwistFun "zipTwist"
["in1","in2","in3","in4","in5","in6"]
["out1","out2","out3","out4","out5","out6"]
simZipTwist = simulate zipTwistSys
writeVHDLZipTwist = writeVHDL zipTwistSys