module Text.SDF.V2p1.Parser.SDFTypes where
import qualified Data.ByteString.Lazy.Char8 as B
type SdfString = B.ByteString
type Qstring = String
type Number = Double
type Rnumber = Double
type Dnumber = Int
type Tsvalue = String
type Identifier = String
data DelayFile = DelayFile SdfHeader [Cell] deriving (Show, Eq)
data SdfHeader = SdfHeader SdfVersion (Maybe DesignName) (Maybe Date) (Maybe Vendor)
(Maybe ProgramName) (Maybe ProgramVersion) (Maybe HierarchyDivider)
(Maybe Voltage) (Maybe Process) (Maybe Temperature) (Maybe TimeScale)
deriving (Show, Eq)
type SdfVersion = Qstring
type DesignName = Qstring
type Date = Qstring
type Vendor = Qstring
type ProgramName = Qstring
type ProgramVersion = Qstring
type HierarchyDivider = Qstring
type Voltage = Rtriple
type Process = Qstring
type Temperature = Rtriple
type TimeScale = Qstring
data Cell = Cell Celltype CellInstance (Maybe Correlation) [TimingSpec]
deriving (Show, Eq)
type Celltype = Qstring
type CellInstance = [Identifier]
type Instance = Identifier
data Correlation = Correlation Qstring (Maybe CorrFactor) deriving (Show, Eq)
type CorrFactor = [Number]
data TimingSpec = TimingSpecDel DelSpec
| TimingSpecTc TcSpec deriving (Show, Eq)
type DelSpec = [Deltype]
type TcSpec = [TcDef]
data Deltype = DeltypePathpulse (Maybe InputOutputPath) Value (Maybe Value)
| DeltypeGlobalpathpulse (Maybe InputOutputPath) Value (Maybe Value)
| DeltypeAbsolute [DelDef]
| DeltypeIncrement [DelDef]
deriving (Show, Eq)
data InputOutputPath = InputOutputPath PortPath PortPath deriving (Show, Eq)
data DelDef = DelDefIopath PortSpec PortPath RvalueList
| DelDefCond ConditionalPortExpr PortSpec PortPath RvalueList
| DelDefPort PortPath RvalueList
| DelDefInterconnect PortInstance PortInstance RvalueList
| DelDefNetdelay NetSpec RvalueList
| DelDefDevice (Maybe PortInstance) RvalueList
deriving (Show, Eq)
data NetSpec = NetSpec (Maybe Instance) Identifier
deriving (Show, Eq)
data TcDef = TcDefTchkDef TchkDef
| TcDefCnsDef CnsDef deriving (Show, Eq)
data TchkDef = TchkDefSetup PortTchk PortTchk Rvalue
| TchkDefHold PortTchk PortTchk Rvalue
| TchkDefSetuphold PortTchk PortTchk Rvalue Rvalue
| TchkDefRecovery PortTchk PortTchk Rvalue
| TchkDefSkew PortTchk PortTchk Rvalue
| TchkDefWidth PortTchk Value
| TchkDefPeriod PortTchk Value
| TchkDefNochange PortTchk PortTchk Rvalue Rvalue
deriving (Show, Eq)
data CnsDef = CnsDefPathconstraint PortInstance [PortInstance] Rvalue Rvalue
| CnsDefSum ConstraintPath [ConstraintPath] Rvalue (Maybe Rvalue)
| CnsDefDiff ConstraintPath ConstraintPath Value (Maybe Value)
| CnsDefSkewconstraint PortSpec Value
deriving (Show, Eq)
data PortTchk = PortTchkPortSpec PortSpec
| PortTchkCond TimingCheckCondition PortSpec
deriving (Show, Eq)
type ConstraintPath = (PortInstance, PortInstance)
data PortSpec = PortSpecPortPath PortPath
| PortSpecPortEdge PortEdge
deriving (Show, Eq)
data PortEdge = PortEdge EdgeIdentifier PortPath
deriving (Show, Eq)
type EdgeIdentifier = String
type PortPath = Port
type Port = Identifier
type ScalarPort = Identifier
type BusPort = Identifier
data PortInstance = PortInstance (Maybe Instance) Identifier
deriving (Show, Eq)
type Value = Triple
type Triple = (Maybe Double, Maybe Double, Maybe Double)
type Rvalue = Triple
type Rtriple = Triple
type RvalueList = [Rvalue]
type ConditionalPortExpr = String
type SimpleExpression = String
type TimingCheckCondition = String
type ScalarConstant = String
type UnaryOperator = String
type InversionOperator = String
type BinaryOperator = String
type EqualityOperator = String