ForSyDe-3.1: examples/ParAddFour.hs
{-# LANGUAGE TemplateHaskell #-}
-- Naive example to test instances working in paralell
-- Adds a signal to four signals
module ParAddFour where
import ForSyDe
import Data.Int
add :: ProcFun (Int32 -> Int32 -> Int32)
add = $(newProcFun [d| add :: Int32 -> Int32 -> Int32
add a b = a + b |])
addProc :: Signal Int32 -> Signal Int32 -> Signal Int32
addProc s1 s2 = zipWithSY "zip1" add s1 s2
addSys :: SysDef (Signal Int32 -> Signal Int32 -> Signal Int32)
addSys = newSysDef addProc "add" ["in1","in2"] ["sum"]
simAdd :: [Int32] -> [Int32] -> [Int32]
simAdd = simulate addSys
parAddFour :: Signal Int32
-> Signal Int32 -> Signal Int32 -> Signal Int32 -> Signal Int32
-> (Signal Int32, Signal Int32, Signal Int32, Signal Int32)
parAddFour toAdd s1 s2 s3 s4 = (sum1, sum2, sum3, sum4)
where sum1 = (instantiate "adder1" addSys) toAdd s1
sum2 = (instantiate "adder2" addSys) toAdd s2
sum3 = (instantiate "adder3" addSys) toAdd s3
sum4 = (instantiate "adder4" addSys) toAdd s4
parAddFourSys :: SysDef (Signal Int32
-> Signal Int32 -> Signal Int32 -> Signal Int32 -> Signal Int32
-> (Signal Int32, Signal Int32, Signal Int32, Signal Int32))
parAddFourSys = newSysDef parAddFour "parAddFour" ["toAdd","s1","s2","s3","s4"]
["sum1","sum2","sum3","sum4"]
simParAddFour :: [Int32]
-> [Int32] -> [Int32] -> [Int32] -> [Int32]
-> ([Int32], [Int32], [Int32], [Int32])
simParAddFour = simulate parAddFourSys