1. Sep 01, 2021
    • Jack Koenig's avatar
      Experiment parsing with parboiled2 · 1cdb382f
      Jack Koenig authored
      This library does show promise as a faster, statically type-checked
      replacement for regular expressions.
      
      Note that ParserInput uses Int for charAt indices, this would make
      parsing > 2GB more complex.
      1cdb382f
  2. Aug 31, 2021
  3. Aug 27, 2021
    • Schuyler Eldridge's avatar
      Fix dshl zero-width shift behavior (#2339) · cc80c631
      Schuyler Eldridge authored
      
      
      * Fix dshl zero-width shift behavior
      
      Add a special case for dshl handling in the ZeroWidths pass.  If one
      expression is shifted by a second, zero-width expression, just return
      the first expression.  This prevents a bug where the width will
      incorrectly expand due to zero-widths introducing a 1-bit zero
      expression.
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@sifive.com>
      
      * fixup! Fix dshl zero-width shift behavior
      cc80c631
  4. Aug 21, 2021
  5. Aug 18, 2021
  6. Aug 14, 2021
  7. Aug 11, 2021
  8. Aug 10, 2021
  9. Aug 06, 2021
    • Schuyler Eldridge's avatar
      Fix Specification Memory Port Types (#2319) · 8abf3085
      Schuyler Eldridge authored
      
      
      Correct incorrect type specified for memories in the FIRRTL
      specification.  This is important because the memory type determines
      what is a legal bundle to try to connect to a memory port.
      
      I based this off of FIRRTL accepting the following circuit:
      
          circuit MemOrder:
            module MemOrder:
              input r: {addr : UInt<3>, en : UInt<1>, clk : Clock, flip data : UInt<1>}
              input w: {addr : UInt<3>, en : UInt<1>, clk : Clock, data : UInt<1>, mask : UInt<1>}
              input rw: {addr : UInt<3>, en : UInt<1>, clk : Clock, flip rdata : UInt<1>, wmode : UInt<1>, wdata : UInt<1>, wmask : UInt<1>}
      
              mem memory:
                data-type => UInt<1>
                depth => 8
                reader => r
                writer => w
                readwriter => rw
                read-latency => 1
                write-latency => 1
                read-under-write => undefined
      
              memory.r <= r
              memory.w <= w
              memory.rw <= rw
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@sifive.com>
      8abf3085
  10. Aug 05, 2021
  11. Aug 04, 2021
  12. Aug 03, 2021
  13. Jul 30, 2021
  14. Jul 27, 2021
  15. Jul 25, 2021
    • Jiuyang Liu's avatar
      Add typedef in DependencyManager. · b14d25ea
      Jiuyang Liu authored
      This is a bug fix, before this PR, Scala compiler will infer `Nothing`, which makes code below failed to compile:
      ```
      class UserCompiler extends TransformManager(Seq(Dependency(UserPass))) {
        override def optionalPrerequisiteOf: Seq[TransformDependency] = Seq(
          Dependency[DedupModules]
        )
      }
      ```
      b14d25ea
  16. Jul 15, 2021
    • Jared Barocsi's avatar
      Fix memory annotation deduplication (#2286) · 4081d9f4
      Jared Barocsi authored
      
      
      * Add transform to deduplicate memory annotations
      * Add annotation deduplication to Dedup stage
      * ResolveAnnotationPaths and EliminateTargetPaths now invalidate the dedup annotations transform
      * Verilog emitter now throws exception when memory annotations fail to dedup
      
      Co-authored-by: default avatarJack Koenig <koenig@sifive.com>
      4081d9f4
  17. Jul 12, 2021
  18. Jul 11, 2021
  19. Jul 09, 2021
  20. Jul 07, 2021
  21. Jun 30, 2021
  22. Jun 26, 2021
  23. Jun 23, 2021
    • Jack Koenig's avatar
      Fix VerilogMemDelays use before declaration (#2278) · 11128d93
      Jack Koenig authored
      The pass injects pipe registers immediately after the declaration of the
      memory. This can be problematic if the clock for the associated memory
      port is defined after the declaration of the memory. For any memory port
      clocks that are driven by non-ports, we now inject a wire before the
      pipe register declarations to be sure there are no
      use-before-declaration issues.
      11128d93
  24. Jun 22, 2021
  25. Jun 19, 2021
  26. Jun 18, 2021
  27. Jun 17, 2021
    • Schuyler Eldridge's avatar
      Add --start-from option (#2273) · c7eaa67d
      Schuyler Eldridge authored
      
      
      Add a new option to the FIRRTL compiler, "--start-from = <form>".  If
      used, this will cause the compiler to assume that the input FIRRTL
      circuit is already in the specific form.  It will then skip unnecessary
      passes given this information.
      
      E.g., if a user requests to run "firrtl -X verilog --start-from low"
      then the compiler will only run transforms necessary to get from low
      FIRRTL to Verilog.  Transforms necessary for ingesting FIRRTL IR will be
      run if needed (checks and type/kind/flow resolution).
      
      To implement this, a CurrentFirrtlStateAnnotation is added.  Advanced
      users can use this directly to tell the FIRRTL compiler exactly what
      transforms have already been run, including the ability to ignore checks
      or type/kind/flow resolution if they so desire.
      
      Signed-off-by: default avatarSchuyler Eldridge <schuyler.eldridge@sifive.com>
      c7eaa67d