module Lava.Ports (module Lava.Ports)
where
import Control.Monad.State
import Lava.Netlist
import Lava.PortRange
inputPort :: String -> NetType -> Out Bit
inputPort name BitType
= do state <- get
let p = ports state
oNet = netCount state
put (state{ports = Port name InputPort BitType [oNet] : p,
netCount = oNet+1})
return oNet
inputBitVec :: String -> NetType -> Out [Bit]
inputBitVec name bvt@(BitVec a dir b)
= do state <- get
let p = ports state
oNet = netCount state
oNets = [oNet + p | p <- portRange a dir b]
put (state{ports = Port name InputPort bvt oNets : p,
netCount = oNet + 1 + abs (ab)})
return oNets
outputPort :: String -> NetType -> Bit -> Out ()
outputPort name BitType o
= do state <- get
let p = ports state
put (state {ports = Port name OutputPort BitType [o] : p})
outputBitVec :: String -> NetType -> [Bit] -> Out ()
outputBitVec name bvt@(BitVec a dir b) o
= do state <- get
let p = ports state
put (state {ports = Port name OutputPort bvt o : p})