Package

firrtl

passes

Permalink

package passes

Content Hierarchy
Visibility
  1. Public
  2. All

Type Members

  1. trait CheckHighFormLike extends AnyRef

    Permalink
  2. case class DataRef(exp: Expression, male: String, female: String, mask: String, rdwrite: Boolean) extends Product with Serializable

    Permalink
  3. class Errors extends AnyRef

    Permalink
  4. class ExpandWhensAndCheck extends Transform with DependencyAPIMigration

    Permalink
  5. class InferBinaryPoints extends Pass with PreservesAll[Transform]

    Permalink
  6. class InferWidths extends Transform with ResolvedAnnotationPaths with DependencyAPIMigration with PreservesAll[Transform]

    Permalink

    Infers the widths of all signals with unknown widths

    Infers the widths of all signals with unknown widths

    Is a global width inference algorithm - Instances of the same module with unknown input port widths will be assigned the largest width of all assignments to each of its instance ports - If you don't want the global inference behavior, then be sure to define all your input widths

    Infers the smallest width is larger than all assigned widths to a signal - Note that this means that dummy assignments that are overwritten by last-connect-semantics can still influence width inference - E.g. wire x: UInt x <= UInt<5>(15) x <= UInt<1>(1)

    Since width inference occurs before lowering, it infers x's width to be 5 but with an assignment of UInt(1):

    wire x: UInt<5> x <= UInt<1>(1)

    Uses firrtl.constraint package to infer widths

  7. case class InlineAnnotation(target: Named) extends SingleTargetAnnotation[Named] with Product with Serializable

    Permalink

    Indicates that something should be inlined

  8. class InlineInstances extends Transform with DependencyAPIMigration with RegisteredTransform

    Permalink

    Inline instances as indicated by existing InlineAnnotations

    Inline instances as indicated by existing InlineAnnotations

    Note

    Only use on legal Firrtl. Specifically, the restriction of instance loops must have been checked, or else this pass can infinitely recurse.

  9. case class MPort(name: String, clk: Expression) extends Product with Serializable

    Permalink
  10. case class MPorts(readers: ArrayBuffer[MPort], writers: ArrayBuffer[MPort], readwriters: ArrayBuffer[MPort]) extends Product with Serializable

    Permalink
  11. trait Pass extends Transform with DependencyAPIMigration

    Permalink

    Pass is simple transform that is generally part of a larger Transform Has an UnknownForm, because larger Transform should specify form

  12. class PassException extends FirrtlUserException

    Permalink
  13. class PassExceptions extends FirrtlUserException

    Permalink
  14. class RemoveIntervals extends Pass with PreservesAll[Transform]

    Permalink

    Replaces IntervalType with SIntType, three AST walks: 1) Align binary points

    Replaces IntervalType with SIntType, three AST walks: 1) Align binary points

    • adds shift operators to primop args and connections
    • does not affect declaration- or inferred-types 2) Replace Interval DefNode with DefWire + Connect
    • You have to do this to capture the smaller bitwidths of nodes that intervals give you. Otherwise, any future InferTypes would re-infer the larger widths on these nodes from SInt width inference rules 3) Replace declaration IntervalType's with SIntType's
    • for each declaration:
      1. remove non-zero binary points b. remove open bounds c. replace with SIntType 3) Run InferTypes
  15. class TrimIntervals extends Pass with PreservesAll[Transform]

    Permalink

    Replaces IntervalType with SIntType, three AST walks: 1) Align binary points

    Replaces IntervalType with SIntType, three AST walks: 1) Align binary points

    • adds shift operators to primop args and connections
    • does not affect declaration- or inferred-types 2) Replace declaration IntervalType's with SIntType's
    • for each declaration:
      1. remove non-zero binary points b. remove open bounds c. replace with SIntType 3) Run InferTypes
  16. case class WidthGeqConstraintAnnotation(loc: ReferenceTarget, exp: ReferenceTarget) extends Annotation with Product with Serializable

    Permalink
  17. class WrapWithRemainder extends PassException

    Permalink

Value Members

  1. object CInferMDir extends Pass with PreservesAll[Transform]

    Permalink
  2. object CInferTypes extends Pass with PreservesAll[Transform]

    Permalink
  3. object CheckChirrtl extends Pass with CheckHighFormLike with PreservesAll[Transform]

    Permalink
  4. object CheckFlows extends Pass with PreservesAll[Transform]

    Permalink
  5. object CheckHighForm extends Pass with CheckHighFormLike with PreservesAll[Transform]

    Permalink
  6. object CheckInitialization extends Pass with PreservesAll[Transform]

    Permalink

    Reports errors for any references that are not fully initialized

    Reports errors for any references that are not fully initialized

    Note

    Assumes single connection (ie. no last connect semantics)

    ,

    This pass looks for firrtl.WVoids left behind by ExpandWhens

  7. object CheckTypes extends Pass with PreservesAll[Transform]

    Permalink
  8. object CheckWidths extends Pass with PreservesAll[Transform]

    Permalink
  9. object CommonSubexpressionElimination extends Pass with PreservesAll[Transform]

    Permalink
  10. object ConvertFixedToSInt extends Pass with PreservesAll[Transform]

    Permalink

    Replaces FixedType with SIntType, and correctly aligns all binary points

  11. object ExpandConnects extends Pass with PreservesAll[Transform]

    Permalink
  12. object ExpandWhens extends Pass

    Permalink

    Expand Whens

    Expand Whens

    This pass does the following things: $ - Remove last connect semantics $ - Remove conditional blocks $ - Eliminate concept of scoping $ - Consolidate attaches

    Note

    Assumes all references are declared

    ,

    Assumes bulk connects and isInvalids have been expanded

  13. object InferTypes extends Pass with PreservesAll[Transform]

    Permalink
  14. object InferWidths

    Permalink
  15. object Legalize extends Pass with PreservesAll[Transform]

    Permalink
  16. object LowerTypes extends Transform with DependencyAPIMigration

    Permalink

    Removes all aggregate types from a firrtl.ir.Circuit

    Removes all aggregate types from a firrtl.ir.Circuit

    Example:
    1. wire foo : { a : UInt<32>, b : UInt<16> }

      lowers to

      wire foo_a : UInt<32>
      wire foo_b : UInt<16>
    Note

    Assumes firrtl.ir.Connects and firrtl.ir.IsInvalids only operate on firrtl.ir.Expressions of ground type

    ,

    Assumes firrtl.ir.SubAccesses have been removed

  17. object MemPortUtils

    Permalink
  18. object PadWidths extends Pass

    Permalink
  19. object PullMuxes extends Pass with PreservesAll[Transform]

    Permalink
  20. object RemoveAccesses extends Pass

    Permalink

    Removes all firrtl.WSubAccess from circuit

  21. object RemoveCHIRRTL extends Transform with DependencyAPIMigration with PreservesAll[Transform]

    Permalink
  22. object RemoveEmpty extends Pass with DependencyAPIMigration with PreservesAll[Transform]

    Permalink
  23. object RemoveValidIf extends Pass

    Permalink

    Remove ValidIf and replace IsInvalid with a connection to zero

  24. object ReplaceAccesses extends Pass with PreservesAll[Transform]

    Permalink

    Replaces constant firrtl.WSubAccess with firrtl.WSubIndex TODO Fold in to High Firrtl Const Prop

  25. object ResolveFlows extends Pass with PreservesAll[Transform]

    Permalink
  26. object ResolveKinds extends Pass with PreservesAll[Transform]

    Permalink
  27. object SplitExpressions extends Pass with PreservesAll[Transform]

    Permalink
  28. object ToWorkingIR extends Pass with PreservesAll[Transform]

    Permalink
  29. object Uniquify extends Transform with DependencyAPIMigration

    Permalink

    Resolve name collisions that would occur in LowerTypes

    Resolve name collisions that would occur in LowerTypes

    Example:
    1. wire a = { b, c }[2]
      wire a_0

      This lowers to:

      wire a__0_b
      wire a__0_c
      wire a__1_b
      wire a__1_c
      wire a_0

      There wouldn't be a collision even if we didn't map a -> a_, but there WOULD be collisions in references a[0] and a_0 so we still have to rename a

    Note

    Must be run after InferTypes because ir.DefNodes need type

  30. object VerilogModulusCleanup extends Pass with PreservesAll[Transform]

    Permalink

    Verilog has the width of (a % b) = Max(W(a), W(b)) FIRRTL has the width of (a % b) = Min(W(a), W(b)), which makes more sense, but nevertheless is a problem when emitting verilog

    Verilog has the width of (a % b) = Max(W(a), W(b)) FIRRTL has the width of (a % b) = Min(W(a), W(b)), which makes more sense, but nevertheless is a problem when emitting verilog

    This pass finds every instance of (a % b) and: 1) adds a temporary node equal to (a % b) with width Max(W(a), W(b)) 2) replaces the reference to (a % b) with a bitslice of the temporary node to get back down to width Min(W(a), W(b))

    This is technically incorrect firrtl, but allows the verilog emitter to emit correct verilog without needing to add temporary nodes

  31. object VerilogPrep extends Pass with PreservesAll[Transform]

    Permalink

    Makes changes to the Firrtl AST to make Verilog emission easier

    Makes changes to the Firrtl AST to make Verilog emission easier

    - For each instance, adds wires to connect to each port

    • Note that no Namespace is required because Uniquify ensures that there will be no collisions with the lowered names of instance ports - Also removes Attaches where a single Port OR Wire connects to 1 or more instance ports
    • These are expressed in the portCons of WDefInstConnectors
    Note

    The result of this pass is NOT legal Firrtl

  32. object ZeroLengthVecs extends Pass with PreservesAll[Transform]

    Permalink

    Handles dynamic accesses to zero-length vectors.

    Handles dynamic accesses to zero-length vectors.

    Note

    Replaces "source" references to elements of zero-length vectors with always-invalid validif

    ,

    Removes attaches that become degenerate after zero-length-accessor removal

    ,

    Removes signals resulting from accesses to a zero-length vector from attach groups

    ,

    Removes assignments that use a zero-length vector as a sink

  33. object ZeroWidth extends Transform with DependencyAPIMigration

    Permalink
  34. package clocklist

    Permalink
  35. object createMask

    Permalink
  36. package memlib

    Permalink
  37. object toBitMask

    Permalink

    Given a mask, return a bitmask corresponding to the desired datatype.

    Given a mask, return a bitmask corresponding to the desired datatype. Requirements:

    • The mask type and datatype must be equivalent, except any ground type in datatype must be matched by a 1-bit wide UIntType.
    • The mask must be a reference, subfield, or subindex The bitmask is a series of concatenations of the single mask bit over the length of the corresponding ground type, e.g.:
    wire mask: {x: UInt<1>, y: UInt<1>}
    wire data: {x: UInt<2>, y: SInt<2>}
    // this would return:
    cat(cat(mask.x, mask.x), cat(mask.y, mask.y))
  38. package wiring

    Permalink

Ungrouped