------------------------------------------------------------------------------- --- $Id: Ports.hs#2 2010/09/21 13:51:11 REDMOND\\satnams $ ------------------------------------------------------------------------------- module Lava.Ports (module Lava.Ports) where import Control.Monad.State import Lava.Netlist import Lava.PortRange -- * Circuit input/output ports ------------------------------------------------------------------------------- -- | 'inputPort' creates a single bit input port 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' creates a bit-vector input port 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 (a-b)}) return oNets ------------------------------------------------------------------------------- -- | 'outputPort' creates a single bit output port 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' creates a bit-vector output port 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}) -------------------------------------------------------------------------------