́      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                      Safe-Infered(An untyped term. =A typed expression. eAn untyped array. hA typed array. jUntyped variables. n-Variables updated by state transition rules. The type of a =. Bitwise left-shifting. Bitwise right-shifting. Bitwise left-rotation. Bitwise right-rotation.  True term.  False term. Logical negation.  Logical AND.  Logical OR. "The conjunction of a E Bool list. "The disjunction of a E Bool list. 1True iff the predicate is true for all elements. 0True iff the predicate is true for any element. Equal.  Not equal.  Less than. Greater than. Less than or equal. Greater than or equal. $Returns the minimum of two numbers. *Returns the minimum of a list of numbers. $Returns the maximum of two numbers. *Returns the maximum of a list of numbers. Limits between min and max. JDivision. If both the dividend and divisor are constants, a compile-time M check is made for divide-by-zero. Otherwise, if the divisor ever evaluates  to 0E, a runtime exception will occur, even if the division occurs within  the scope of a cond or  that tests for 0 (because Atom generates , deterministic-time code, every branch of a cond or  is executed). JDivision, where the C code is instrumented with a runtime check to ensure  the divisor does not equal 0. If it is equal to 0, the 3rd argument is a  user-supplied non-zero divsor. HModulo. If both the dividend and modulus are constants, a compile-time M check is made for divide-by-zero. Otherwise, if the modulus ever evaluates  to 0E, a runtime exception will occur, even if the division occurs within  the scope of a cond or  that tests for 0 (because Atom generates , deterministic-time code, every branch of a cond or  is executed). IModulus, where the C code is instrumented with a runtime check to ensure  the modulus does not equal 0. If it is equal to 0, the 3rd argument is " a user-supplied non-zero divsor. Returns the value of a n. <Conditional expression. Note, both branches are evaluated!  mux test onTrue onFalse Array index to variable. Array index to expression. BConverts an typed expression (E a) to an untyped expression (UE).    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~=dcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>no<;:9876543210/.-,+*)('&%$#"! jmlkhiegf |~}p{zyxwvutsrq    &<;:9876543210/.-,+*)('&%$#"! ='dcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>egfhijmlknop {zyxwvutsrq| ~}  Safe-Infered Wrapped in the State Monad. An entry in the Map. Corresponds to -s --- the elements in the sharing structure. Untyped variables map.  Transforms a j into a &, returning the possibly updated map. "Get the element associated with a  value. It's an error if the  element is not in the map.  Put a new  in the map, unless it'#s already in there, and return the  hash pointing to the  and a new map. 'Lookup an element in the map, and if it'#s in there, do nothing, but return J its hash value. Otherwise, update the map and return the new hash value  for the inserted element. Get a  back out of the . 1The list of Hashes to adjacent upstream of a UE. FThe list of all UVs that directly control the value of an expression. #All array indexing subexpressions. 999& Safe-Infered 5The Atom monad holds variable and rule declarations. +8A phase is either the minimum phase or the exact phase. .A hierarchical name. /A name. 4@A Relation is used for relative performance constraints between Actions. < data Relation = Higher UID | Lower UID deriving (Show, Eq) TGiven a top level name and design, elaborates design and returns a design database. 5$Generic local variable declaration. 6'Generic external variable declaration. 7Generic array declaration. 8$Generic external array declaration. :SAll the variables that directly and indirectly control the value of an expression. ;(All primary expressions used in a rule. ?      !"#$%&'()*+,-./0123456789:;9      !"#$%&'()*+,-./0123456789:;= !"#$%&'()*     10/+-,.45678923:;       !"#$%&'()*+-,./0123456789:; Safe-Infered<>Topologically sorts a list of expressions and subexpressions. = Number of UE's computed in rule. <=<=<=<= Safe-Infered>?@>?@?>@>?@ Safe-Infered+B Assign an = to a n. CCThe Atom monad captures variable and transition rule declarations. DECreates a hierarchical node, where each node could be a atomic rule. EYDefines the period of execution of sub rules as a factor of the base rate of the system. G Rule period is bound by the closest period assertion. For example: F period 10 $ period 2 a -- Rules in 'a' have a period of 2, not 10. F3Returns the execution period of the current scope. GFDefines the earliest phase within the period at which the rule should @ execute; the scheduler attempt to find an optimal phase from 0 <= n <  period (thus, the G1 must be at least zero and less than the current  E.). H+Ensures an atom is scheduled only at phase n. I(Returns the phase of the current scope. J,Returns the current atom hierarchical path. K$Local boolean variable declaration. L'External boolean variable declaration. M!Local int8 variable declaration. N$External int8 variable declaration. O"Local int16 variable declaration. P%External int16 variable declaration. Q"Local int32 variable declaration. R%External int32 variable declaration. S"Local int64 variable declaration. T%External int64 variable declaration. U"Local word8 variable declaration. V%External word8 variable declaration. W#Local word16 variable declaration. X&External word16 variable declaration. Y#Local word32 variable declaration. Z&External word32 variable declaration. [#Local word64 variable declaration. \&External word64 variable declaration. ]"Local float variable declaration. ^%External float variable declaration. _#Local double variable declaration. `&External double variable declaration. aDeclares an action. b%Calls an external C function of type ' void f(void)'. cDeclares a probe. d5Fetches all declared probes to current design point. eIncrements a NumE n. fDecrements a NumE n. g8Adds an enabling condition to an atom subtree of rules. ; This condition must be true before any rules in hierarchy  are allowed to execute. h,Reference to the 64-bit free running clock. iDRule coverage information. (current coverage index, coverage data) jEAn assertions checks that an E Bool is true. Assertions are checked F between the execution of every rule. Parent enabling conditions can I disable assertions, but period and phase constraints do not. Assertion " names should be globally unique. kRImplication assertions. Creates an implicit coverage point for the precondition. lCA functional coverage point tracks if an event has occured (true). ? Coverage points are checked at the same time as assertions. - Coverage names should be globally unique. 7ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~/5678ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl2CDEFGHIgABef5678KLMNOPQRSTUVWXYZ[\]^_`abcdjlk/Jhi6ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl Safe-Infered m A Timer. nCreates a new timer. o7Starts a Timer. A timer can be restarted at any time. pConditionally start a Timer. q when a timer has completed. r!One-shot on a rising transition. s"One-shot on a falling transition. tKDebounces a boolean given an on and off time (ticks) and an initial state. uL1-D lookup table. X values out of table range are clipped at end Y values. 6 Input table must be monotonically increasing in X. v@Linear extrapolation and interpolation on a line with 2 points. C The two x points must be different to prevent a divide-by-zero. wHysteresis returns  when the input exceeds max and  when  the input is less than min/. The state is held when the input is between  min and max.  hysteresis name min max input mnopqrstuvw mnopqrstuvw mnopqrstuvw mnopqrstuvw Safe-InferedyGData associated with sampling a hardware clock. For the clock to work  correctly, you MUST assign __global_clock the current time (accoring to   clockName<) the first time you enter the main Atom-generated function  calling your rules. {%C function to sample the clock. The + funciton is assumed to have the prototype  clockType clockName(void). |)Clock type. Assumed to be one of Word8, / Word16, Word32, or Word64. It is permissible  for the clock to rollover. }5Number of ticks in a phase. Must be greater than 0. ~C function to delay/sleep. The function is  assumed to have the prototype void  delay(clockType i), where i is the  duration of delay/sleep. *Nothing or a user-defined error-reporting . function if the period duration is violated; + e.g., the execution time was greater than  delta. Assumed to have prototype void  err(void). !C code configuration parameters. 0Alternative primary function name. Leave empty  to use compile name. 2Name of state variable structure. Default: state Custom C code to insert above  and below the functions, given " assertion names, coverage names,  and probe names and types. Custom C code to insert above  and below the state definition % in the header file, given assertion ( names, coverage names, and probe names  and types. Enable rule coverage tracking. +Enable assertions and functional coverage. (Name of assertion function. Type: void  assert(int, bool, uint64_t); 'Name of coverage function. Type: void  cover(int, bool, uint64_t); )Do we use a hardware counter to schedule  rules? FDefault C code configuration parameters (default function name, no pre/post code, ANSI C types). C99 type naming rules. xyz{|}~xyz{|}~yz{|}~xxyz{|}~   Safe-Infered#Compiles an atom description to C. >@@>  Safe-InferedData constructor:Test Running TestList $Printing strings in C using printf. Print integral values. Print floating point values.    Safe-Infered   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~/5678>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  Safe-InferedInvoke the atom compiler. =An example design that computes the greatest common divisor.        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwvxxyz{y||}~t$      !"#$%&'())*+,-./0123456789:;<=>?@ABCDEFGH IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~~                                atom-1.0.11Language.Atom.ExpressionsLanguage.Atom.LanguageLanguage.Atom.UeMapLanguage.Atom.ElaborationLanguage.Atom.AnalysisLanguage.Atom.SchedulingLanguage.Atom.CommonLanguage.Atom.CodeLanguage.Atom.CompileLanguage.Atom.UnitLanguage.Atom.Example Language.Atombase Data.BitsisSignedbitSize complementxor.|..&.transformers-0.2.2.0Control.Monad.IO.ClassliftIO FloatingEOrdEEqE IntegralENumEExpreTypeconstant expressionvariablerawBitsTypeOftypeOfWidthwidthUEUAtanhUAtanUAcoshUAsinhUCoshUSinhUAcosUCosUAsinUSinUPowUSqrtULogUExpUPiUB2DUB2FUD2BUF2BUMuxULtUEq UBWShiftR UBWShiftLUBWXorUBWOrUBWAndUBWNotUAndUNotUModUDivUMulUSubUAddUCastUConstUVRefEAtanhAtanAcoshAsinhCoshSinhAcosCosAsinSinPowSqrtLogExpPiRetypeB2DB2FD2BF2BMuxLtEqBWShiftRBWShiftLBWXorBWOrBWAndBWNotAndNotModDivMulSubAddCastConstVRefUAUAExternAUVUVExternUVArrayVVariableVDoubleVFloatVWord64VWord32VWord16VWord8VInt64VInt32VInt16VInt8VBool ExpressionEDoubleEFloatEWord64EWord32EWord16EWord8EInt64EInt32EInt16EInt8EBoolCDoubleCFloatCWord64CWord32CWord16CWord8CInt64CInt32CInt16CInt8CBoolTypeDoubleFloatWord64Word32Word16Word8Int64Int32Int16Int8Boolbytes.<<..>>.rolrortruefalsenot_&&.||.and_or_all_any_imply==./=.<.>.<=.>=.min_minimum_max_maximum_limitdiv_div0_mod_mod0_valuemux!!.ueuvuboolunotuanduoruequmuxUeStateUeMapUeElemMUAtanhMUAtanMUAcoshMUAsinhMUCoshMUSinhMUAcosMUCosMUAsinMUSinMUPowMUSqrtMULogMUExpMUPiMUB2DMUB2FMUD2BMUF2BMUMuxMULtMUEq MUBWShiftR MUBWShiftLMUBWXorMUBWOrMUBWAndMUBWNotMUAndMUNotMUModMUDivMUMulMUSubMUAddMUCastMUConstMUVRefMUV MUVExternMUVArrayHashnewUVgetUEnewUEemptyMap maybeUpdate recoverUE ueUpstream nearestUVs arrayIndices isMathHCallAtomStateHierarchy StateArray StateVariableRuleCover ruleCoverAssert ruleAssertruleIdruleName ruleEnable ruleAssigns ruleActions rulePeriod rulePhaseAtomDBatomIdatomName atomNames atomEnableatomSubs atomPeriod atomPhase atomAssigns atomActions atomAsserts atomCoversGlobalgRuleIdgVarIdgArrayIdgStategProbesgPeriodgPhasePhase ExactPhaseMinPhasePathNameUID buildAtomgetput elaboratevarvar'arrayarray'addNameallUVsallUEstoporuleComplexityScheduleschedulereportScheduleAssign<==atomperiod getPeriodphase exactPhasegetPhasepathboolbool'int8int8'int16int16'int32int32'int64int64'word8word8'word16word16'word32word32'word64word64'floatfloat'doubledouble'actioncallprobeprobesincrdecrcondclock nextCoverageassert assertImplycoverTimertimer startTimer startTimerIf timerDone oneShotRise oneShotFalldebounce lookupTablelinear hysteresis RuleCoverageClock clockName clockTypedeltadelayerrConfig cFuncName cStateNamecCodehCode cRuleCoveragecAssert cAssertName cCoverName hardwareClockdefaults defaultClockcTypewriteCcompileRandomrandomTestnamecycles testbenchmodulesincludesdeclCodeinitCodeloopCodeendCode defaultTestrunTests printStrLnprintIntegralEprintFloatingEcompileExampleexample$fBitsE $fFloatingE $fFractionalE$fNumE$fFloatingEDouble$fFloatingEFloat $fOrdEDouble $fOrdEFloat $fOrdEWord64 $fOrdEWord32 $fOrdEWord16 $fOrdEWord8 $fOrdEInt64 $fOrdEInt32 $fOrdEInt16 $fOrdEInt8 $fEqEDouble $fEqEFloat $fEqEWord64 $fEqEWord32 $fEqEWord16 $fEqEWord8 $fEqEInt64 $fEqEInt32 $fEqEInt16 $fEqEInt8 $fEqEBool$fIntegralEWord64$fIntegralEWord32$fIntegralEWord16$fIntegralEWord8$fIntegralEInt64$fIntegralEInt32$fIntegralEInt16$fIntegralEInt8 $fNumEDouble $fNumEFloat $fNumEWord64 $fNumEWord32 $fNumEWord16 $fNumEWord8 $fNumEInt64 $fNumEInt32 $fNumEInt16 $fNumEInt8 $fExprDouble $fExprFloat $fExprWord64 $fExprWord32 $fExprWord16 $fExprWord8 $fExprInt64 $fExprInt32 $fExprInt16 $fExprInt8 $fExprBool $fTypeOfE $fTypeOfUE $fTypeOfA $fTypeOfUA $fTypeOfV $fTypeOfUV $fTypeOfConst $fWidthUV $fWidthUE$fWidthV$fWidthE $fWidthConst $fWidthType$fEqE$fShowE $fShowConst $fMonadIOAtom $fMonadAtom $fShowRule $fOrdAtomDB $fEqAtomDB $fShowAtomDB $fOrdUsage$fAssignDouble $fAssignFloat$fAssignWord64$fAssignWord32$fAssignWord16 $fAssignWord8 $fAssignInt64 $fAssignInt32 $fAssignInt16 $fAssignInt8 $fAssignBoolghc-prim GHC.TypesTrueFalse $fRandomInt64 $fRandomInt32 $fRandomInt16 $fRandomInt8$fRandomWord64$fRandomWord32$fRandomWord16 $fRandomWord8 $fRandomBool