Chisel v3.6.0-M2
Pre-releaseNote: These release notes are a work-in-progress
The primary change in Chisel v3.6.0 is the transition from the Scala FIRRTL Compiler to the new MLIR FIRRTL Compiler. This will have a minimal impact on typical Chisel user APIs but a large impact on custom compiler flows. For more information, please see the ROADMAP.
Try it out using this Scastie!
Highlights
- New implementation of the FIRRTL compiler
- Refined connection semantics (#2806)
- Flexible yet safe.
- See the documentation.
- Paths in source locators (#2791)
- Source locators now include a distinguishing path from the root of your workspace.
- This enables errors that point to your specific line of Chisel from MFC.
Deprecations
Note that many more deprecations are coming before the release of 3.6.0.
- Compatibility mode (
import Chisel._
) - The Scala FIRRTL Compiler
- FixedPoint and related APIs
- Intervals and related APIs
Removals
Many APIs deprecated in Chisel 3.5 have been removed in Chisel 3.6.
This includes (but is not limited to):
MultiIOModule
(useModule
)- Parenthesized forms of zero-arity methods (eg.
.asUInt()
is removed, use.asUInt
) RawModule.getPorts
andchisel3.getModulePorts
stop
with non-zero return code
Performance Improvements
While there have been many performance improvements included in the Chisel 3.5 release line, there are some new improvements that only apply to 3.6. Preliminary results show a speedup of 11% and 8% reduction in heap use. These results are sensitive to particular user designs so actual results may vary.
- Optimize internal
_ids
datastructure to reduce its size: #2866 - Avoid creating unnecessary clones: #2611
- eg.
IO(Input(UInt(8.W)))
will now create only a singleUInt
object instead of 3
- eg.
- Removed reflective naming which removes an iteration of all Data within a Module: #2562
- Removed TransitNames and thus 2 vars from every HasId: #2604
Other Changes
- SystemVerilog Parameters for BlackBoxes are now emitted in alphabetical order
Migration
3.6.0-M2 includes everything from 3.5.5 and before. Some features are newly deprecated in 3.5.5 that are removed in 3.6.0-M2. Please bump to 3.5.5 before attempting to upgrade to 3.6.0-M2.
Additional Changes since 3.6.0-M1
- Bump CIRCT support (originally chisel-circt) from 0.5.0 to 0.8.0 (#2878)
- Fix string interpolation in
util.exprimental.decode.bitset
(#2882) - Bugfix waiveEach not casting. Add waiveAllAs (#2894)
- [circt] Cleanup CIRCT error behavior (#2896, #2892)
- Take into account opaque members in squeeze functions (#2904)
- Clarify mismatched width error message (#2917)
- Fix bug where Flipped did not properly flip (#2919)
- Fix lazy cloning (#2921)
For complete changes since 3.6.0-M1, run
git log --oneline $(git merge-base origin/master v3.6.0-M1)..$(git merge-base origin/master v3.6.0-M2)