1. Aug 18, 2020
  2. Aug 16, 2020
  3. 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
  4. Aug 14, 2020
  5. Aug 13, 2020
  6. 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
  7. Aug 11, 2020
  8. Aug 08, 2020
  9. Aug 07, 2020
  10. 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
  11. Aug 02, 2020
  12. Aug 01, 2020
    • Kevin Laeufer's avatar
    • Jack Koenig's avatar
      Avoid repeated inlining in FlattenRegUpdate (#1727) · 17279da1
      Jack Koenig authored
      * Avoid repeated inlining in FlattenRegUpdate
      
      When-else structure can lead to the same complex mux structure being
      the default on several branches in register update logic. When these are
      inlined, it can lead to artifical unreachable branches that show up as
      coverage holes in coverage of the emitted Verilog. This commit changes
      the inlining logic to prevent inlining any reference expression that
      shows up multiple times because this is a common indicator of the
      problematic case.
      
      * Add tests for improved register update logic emission
      
      * Improve FlattenRegUpdate comment and add more tests
      
      * [skip formal checks] ICache equivalence check verified locally
      17279da1
    • Kevin Laeufer's avatar
      CircuitGraph: remove fields from public API (#1813) · 31132333
      Kevin Laeufer authored
      They are never used outside of the class
      not even in tests.
      31132333
    • Jiuyang Liu's avatar
      [WIP] Implement CircuitGraph and IRLookup to firrtl.analyses (#1603) · f22652a3
      Jiuyang Liu authored
      
      
      * WIP Commit
      
      * Add EdgeDataDiGraph with views to amortize graph construction
      
      * WIP, got basic structure, need tests to pipeclean
      
      * First tests pass. Need more.
      
      * Tests pass, more need to be written
      
      * More tests pass! Things should work, except for memories
      
      * Added clearPrev to fix digraph uses where caching prev breaks
      
      * Removed old Component. Documented IRLookup
      
      * Added comments. Make prev arg to getEdges
      
      * WIP: Refactoring for CircuitGraph
      
      * Refactored into CircuitGraph. Can do topological module analysis
      
      * Removed old versions
      
      * Added support for memories
      
      * Added cached test
      
      * More stufffff
      
      * Added implicit caching of connectivity
      
      * Added tests for IRLookup, and others
      
      * Many major changes.
      
      Replaced CircuitGraph as ConnectionGraph
      Added CircuitGraph to be top-level user-facing object
      ConnectionGraph now automatically shortcuts getEdges
      ConnectionGraph overwrites BFS as PriorityBFS
      Added leafModule to Target
      Added lookup by kind to IRLookup
      Added more tests
      
      * Reordered stuff in ConnectionGraph
      
      * Made path work with deep hierarchies. Added PML for IllegalClockCrossings
      
      * Made pathsInDAG work with current shortcut semantics
      
      * Bugfix: check pathless targets when shortcutting paths
      
      * Added documentation/licenses
      
      * Removed UnnamedToken and related functionality
      
      * Added documentation of ConnectionGraph
      
      * Added back topo, needed for correct solving of intermediate modules
      
      * Bugfix. Cache intermediate clockSources from same BFS with same root, but not BFS with different root
      
      * Added literal/invalid clock source, and unknown top for getclocksource
      
      * Bugfix for clocks in bundles
      
      * Add CompleteTargetSerializer and test
      
      * remove ClockFinder, be able to compile.
      
      * test is able to compile, but need to fix.
      
      * public and abstract DiGraph, remove DiGraphLike.
      
      * revert some DiGraph code, ConnectionGraphSpec passed.
      
      * CircuitGraphSpec passed.
      
      * minimize diff between master
      
      * codes clean up
      
      * override linearize and revert DiGraph
      
      * keep DiGraph unchanged.
      
      * make ci happy again.
      
      * codes clean up.
      
      * bug fix for rebase
      
      * remove wir
      
      * make scaladoc happy again.
      
      * update for review.
      
      * add some documentation.
      
      * remove tag
      
      * wip IRLookup
      
      * code clean up and add some doucmentations.
      
      * IRLookup cache with ModuleTarget guarded.
      
      * make unidoc and 2.13 happy
      
      Co-authored-by: default avatarAdam Izraelevitz <azidar@gmail.com>
      Co-authored-by: default avatarAlbert Magyar <albert.magyar@gmail.com>
      Co-authored-by: default avatarJack Koenig <koenig@sifive.com>
      f22652a3
  13. Jul 31, 2020
  14. Jul 30, 2020