1. Aug 29, 2020
  2. Aug 27, 2020
  3. Aug 26, 2020
    • Albert Chen's avatar
      Inline Boolean Expressions (#1817) · 40cb49f9
      Albert Chen authored
      The following conditions must be satisfied to inline:
      
      1. has type Utils.BoolType
      2. is bound to a DefNode with name starting with '_'
      3. is bound to a DefNode with a source locator that
         points at the same file and line number. If it is a MultiInfo source
         locator, the set of file and line number pairs must be the same. Source
         locators may point to different column numbers.
      4. InlineBooleanExpressionsMax has not been exceeded
      5. is not a Mux
      
      Also updates the Verilog emitter to break up lines greater than 120 characters
      40cb49f9
  4. Aug 25, 2020
  5. Aug 22, 2020
  6. Aug 16, 2020
  7. Aug 15, 2020
    • Jack Koenig's avatar
      Apply scalafmt again · 9adbe1ed
      Jack Koenig authored
      9adbe1ed
    • chick's avatar
      All of src/ formatted with scalafmt · 6fc742bf
      chick authored
      6fc742bf
    • Jack Koenig's avatar
      b516293f
    • chick's avatar
      Add control files for scala-fmt · 1d790de1
      chick authored
      - .scalafmt.conf  formatting rules
      - .travs.yml      adds test that files are formatted to pass CI
      - .plugins.sbt    add plugin for scalafmt
      1d790de1
    • Kevin Laeufer's avatar
      experimental SMTLib and btor2 emitter (#1826) · 2e5f942d
      Kevin Laeufer authored
      This adds an experimental new SMTLib and Btor2 emitter
      that converts a firrtl module into a format
      suitable for open source model checkers.
      The format generally follows the behavior of yosys'
      write_smt2 and write_btor commands.
      
      To generate btor2 for the module in m.fir run
      > ./utils/bin/firrtl -i m.fir -E experimental-btor2
      for SMT:
      > ./utils/bin/firrtl -i m.fir -E experimental-smt2
      
      If you have a design with multiple clocks
      or an asynchronous reset, try out the new StutteringClockTransform.
      You can designate any input of type Clock to be your
      global simulation clock using the new GlobalClockAnnotation.
      
      If your toplevel module instantiates submodules,
      you need to inline them if you want the submodule
      logic to be included in the formal model.
      2e5f942d
    • Kevin Laeufer's avatar
      tests: Decrease Dependency on Deprecated APIs (#1839) · 1b48fe5f
      Kevin Laeufer authored
      * test: add LeanTransformSpec to replace the old SimpleTransformSpec
      
      SimpleTransformSpec isn't simple anymore!
      
      * AnnotationTests: remove deprecated Compiler code
      
      * LeanTransformSpec: implicitly add right EmitCircuitAnnotation
      
      * AsyncResetSpec: move to new lean spec
      
      * CheckCombLoopsSpec: remove deprecated Compiler code
      
      * ChirrtlMemSpec: remove deprecated compiler code
      
      * CompilerTest: remove use of deprecated Compiler API
      1b48fe5f
  8. Aug 14, 2020
  9. Aug 13, 2020
  10. Aug 12, 2020
    • Schuyler Eldridge's avatar
      File Serialization of Annotations (#1277) · 8bdbbac2
      Schuyler Eldridge authored
      
      
      * Transform, not run in LegalizeAndReduction test
      
      Switch from using FirrtlStage.transform to FirrtlStage.run in one
      test. The latter is problematic as it doesn't include wrappers or
      pre/post phases which are how things will work in the future for doing
      file writing (via HowToSerialize ideas).
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Use execute in FIRRTL testing infra (not run)
      
      Changes the FirrtlStage method in FIRRTL testing infrastructure from
      "run" (which does not include Stage-global Phases) to "execute" (which
      does).
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Add HowToSerialize Annotation mix-in
      
      This adds an Annotation mix-in, HowToSerialize, that allows an
      annotation to declare how it should be serialized to a file. The
      mix-in is abstract in a baseFileName and a suffix (used to generate a
      filename), a howToSerialize method (defining the string contents of
      the file), and a howToResume method (that defines a replacement for
      the file-serialized annotation that allows this to be resumed) [^1].
      
      A default implementation for generating a filename (called filename)
      is defined that will put the baseFileName+suffix file in the target
      directory. This can be overridden by the annotation if desired.
      
      [^1]: When an annotation is serialized to a file, it should be removed
      from the emitted JSON-serialized annotations. The howToResume method
      defines a way of adding replacement annotations to the JSON-serialized
      annotations that tell a downstream tool how to find the serialized
      file. E.g., if a FIRRTL circuit is written to a file, this could be
      used to add a FirrtlFileAnnotation defining the location of the new
      file.
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Handle HowToSerialize in WriteOutputAnnotations
      
      This extends firrtl.options.phase.WriteOutputAnnotations to serialize
      HowToSerialize annotations to files.
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Test HowToSerialize in WriteOutputAnnotationsSpec
      
      This adds tests of the HowToSerialize mix-in inside the
      WriteOutputAnnotationsSpec.
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * [skip chisel tests] Migrate to HowToSerialize
      
      This migrates EmittedAnnotations (and its children) to mixin the
      HowToSerialize trait. This enables this annotations to be
      automatically written to files via WriteOutputAnnotations
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Deprecated firrtl.stage.phases.WriteEmitted
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Use streams in HowToSerialize
      
      This converts the HowToSerialize trait to use a Stream[Char] when
      defining how an annotation should be serialized.
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Switch from Stream[Char] to Stream[Byte]
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Change howToSerialize method to Iterable
      
      Change the type of the HowToSerialize.howToSerialize method from a
      stream to an iterable. Using the latter (the superset of both lazy
      streams and non-lazy things like String) avoids problems with users
      having to choose laziness when they already have an eager object.
      
      In effect, this makes the API more general.
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Add Scaladoc to HowToSerialize trait
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Change HowToSerialize to CustomFileEmission
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Add default implementation of replacements
      
      Add a default implementation of CustomFileEmission.replacements.
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Avoid unnecessary 2x monad in CustomFileEmission
      
      Change the type of CustomFileEmission.replacements from
      Option[AnnotationSeq] to AnnotationSeq. The latter has all the
      properties of the former that I'm trying to express here: (1) can
      emptiness and (2) monadicity (if the AnnotationSeq is converted to a
      sequence first). The latter property is exploited in the
      WriteOutputAnnotations phase to concisely flatMap over the annotations
      and doing the double-monad is unnecessary.
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Restrict CustomFileEmission filename API
      
      Change the API of CustomFileEmission to use a final def for the actual
      filename. The baseFileName is then made a method with an AnnotationSeq
      parameter to allow the filename to change as a function of other
      annotations, e.g., by an output circuit annotation.
      
      By restricting this API, we have more control over the default
      behavior of where things are written using the fixed behavior of the
      filename method---files will always be written using the behavior that
      StageOptions define. Previously, if users want customized behavior,
      they would need to duplicate this StageOptions functionality (and
      likely subtly deviate from the standard behavior and introduce
      problems with their build).
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Add file conflict behavior for CustomFileEmission
      
      Set behavior of file conflicts in CustomFileEmission to be the
      following: No two annotations in the same annotation sequence can
      serialize to the same file during the WriteOutputAnnotations phase.
      However, if the output annotation file already exists, it will be
      overwritten.
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Return relative path from getBuildFileName
      
      Change FirrtlOptions.getBuildFileName to simply serialize the
      underlying Java File instead of converting this to its canonical path.
      This should improve the relocatability of files produced by the
      CustomFileEmission API.
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Normalize paths in StageOptions.getBuildFile
      
      Normalize paths inside the getBuildFileName utility of StageOptions.
      Add a check to prevent a null pointer dereference.
      
      Co-authored-by: default avatarJack Koenig <koenig@sifive.com>
      Co-authored-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Refer to CustomFIleEmission in deprecation message
      
      Co-authored-by: default avatarJack Koenig <koenig@sifive.com>
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Simplify CustomFileEmission toBytes implementation
      
      Co-authored-by: default avatarJack Koenig <koenig@sifive.com>
      Co-authored-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      * Use toBytes, not getBytes, in CustomFileEmission
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@ibm.com>
      
      Co-authored-by: default avatarJack Koenig <koenig@sifive.com>
      8bdbbac2
    • Kevin Laeufer's avatar
      stage: allow a RunFirrtlTransformAnnotation(_:Emitter) annotation to be used... · f7cffd23
      Kevin Laeufer authored
      stage: allow a RunFirrtlTransformAnnotation(_:Emitter) annotation to be used in place of a CompilerAnnotation (#1835)
      
      f7cffd23
  11. Aug 11, 2020
  12. Aug 08, 2020
  13. Aug 07, 2020
  14. Aug 06, 2020
    • Kevin Laeufer's avatar
      ir: add UseSerializer mixin trait (#1824) · f41ac7da
      Kevin Laeufer authored
      
      
      Using the new trait to overwrite serialize at the
      leaf classes, we ensure that new, e.g., Expression
      nodes will not automatically try to call
      `Serializer.serialize` which would fail by default.
      
      Co-authored-by: default avatarmergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
      f41ac7da
    • Kevin Laeufer's avatar
      Deprecate InstanceGraph (#1800) · b1ec7cd7
      Kevin Laeufer authored
      * InstanceKeyGraph: add staticInstanceCount, getGraph and getChildrenInstanceMap
      
      * InstanceKeyGraph: reachableModules, unreachableModules, lowestCommonAncestor and fullHierarchy
      
      * Replace usage of InstanceGraph with InstanceKeyGraph
      
      Also deprecates all unused methods.
      
      * WiringUtils: make new version of sinksToSources package private
      
      This will make our live easier next time we need to change it.
      
      * CircuitGraph: use InstanceKeyGraph
      
      * InstanceKeyGraphSpec: respect maximum line width
      
      * InstanceKeyGraph: make constructor private
      
      * InstanceKeyGraph: move lowestCommonAncestor function to Wiring
      
      * WiringUtils: update deprecation message
      b1ec7cd7
  15. Aug 02, 2020
  16. Aug 01, 2020