class LoFirrtlExpressionEvaluator extends SimpleLogger
This is the evaluation engine for the FirrtlTerp it requires the previousState of the system
- Alphabetic
- By Inheritance
- LoFirrtlExpressionEvaluator
- SimpleLogger
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
-
new
LoFirrtlExpressionEvaluator(dependencyGraph: DependencyGraph, circuitState: CircuitState)
- circuitState
the state of the system, should not be modified before all dependencies have been resolved
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- var allowCombinationalLoops: Boolean
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
- def binaryBitWise(opCode: PrimOp, args: Seq[Expression], tpe: Type): Concrete
- def bitOps(opCode: PrimOp, args: Seq[Expression], parameters: Seq[BigInt], tpe: Type): Concrete
- def bitSelectOp(opCode: PrimOp, args: Seq[Expression], parameters: Seq[BigInt], tpe: Type): Concrete
- def castingOp(opCode: PrimOp, args: Seq[Expression], tpe: Type): Concrete
- def checkPrints(): Unit
- def checkStops(): Option[Int]
- val circuitState: CircuitState
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
- def comparisonOp(opCode: PrimOp, args: Seq[Expression], tpe: Type): Concrete
- var defaultKeysToResolve: Array[String]
- val dependencyGraph: DependencyGraph
- def dynamicBitOps(opCode: PrimOp, args: Seq[Expression], parameters: Seq[BigInt], tpe: Type): Concrete
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
evaluate(expression: Expression, leftHandSideOption: Option[String] = None): Concrete
evaluate expression, if this expression references an ephemeral value (wire or node) that has not been evaluated yet, recursively evaluate that reference first.
evaluate expression, if this expression references an ephemeral value (wire or node) that has not been evaluated yet, recursively evaluate that reference first. LoFirrtl guarantees that there will be no loops here
- expression
a LoFirrtl expression to evaluate
- returns
the resulting Concrete Note: OpCodes here are double matched, once in main loop herein, then again in function suitable for that family of opCodes, it makes the code cleaner, I think, but may ultimately need to be inlined for performance
- var evaluateAll: Boolean
- val evaluationStack: ExpressionExecutionStack
- var exceptionCaught: Boolean
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
-
def
getValue(key: String): Concrete
get the value from the current circuit state, if it is dependent on something else we haven't computed yet.
get the value from the current circuit state, if it is dependent on something else we haven't computed yet. resolve this new dependency first then pull it's value from the current state
- key
the name of the assignable thing
- def getWidth(tpe: Type): IntWidth
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- var keyOrderInitialized: Boolean
-
def
log(message: ⇒ String): Unit
- Definition Classes
- LoFirrtlExpressionEvaluator → SimpleLogger
- def makeSIntValue(value: BigInt, intWidth: IntWidth): SIntLiteral
- def makeUIntValue(value: BigInt, intWidth: IntWidth): UIntLiteral
-
def
mask(number: BigInt, size: BigInt): BigInt
mask off bits above size in a BigInt, uses modulo, constructing the modulo base on the size working around BigInt's shift by int requirement
mask off bits above size in a BigInt, uses modulo, constructing the modulo base on the size working around BigInt's shift by int requirement
- number
number to mask
- size
how many bits to keep
- def mathPrimitive(opCode: PrimOp, args: Seq[Expression], tpe: Type): Concrete
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- def oneArgOps(opCode: PrimOp, args: Seq[Expression], parameters: Seq[BigInt], tpe: Type): Concrete
- val orderedKeysToResolve: ArrayBuffer[String]
- def paddingOp(opCode: PrimOp, args: Seq[Expression], parameters: Seq[BigInt], tpe: Type): Concrete
- def resolveDependencies(specificDependencies: Iterable[String]): Unit
-
def
resolveRegister(key: String): Concrete
when resolving registers dependency, consider the resetCondition to be the dependency if appropriate
when resolving registers dependency, consider the resetCondition to be the dependency if appropriate
- key
name of register
- returns
new concrete value for register
-
def
setVerbose(value: Boolean = true): Unit
- Definition Classes
- SimpleLogger
-
def
shiftLeft(number: BigInt, size: BigInt): BigInt
shifts number left
shifts number left
- number
number to shift
- size
how many bits to shift
-
def
shiftRight(number: BigInt, size: BigInt): BigInt
shifts number right
shifts number right
- number
number to shift
- size
how many bits to shift
- def showStack(): Unit
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
- val timer: Timer
- var toResolve: HashSet[String]
-
def
toString(): String
- Definition Classes
- AnyRef → Any
- var useTopologicalSortedKeys: Boolean
-
val
verbose: Boolean
- Definition Classes
- SimpleLogger
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )