Chisel v6.0.0
Features
- Add
ConstType
andConst(...)
API (by @debs-sifive in #3046)
AddsConst()
API to createConstType
s, which denotesData
that holds a constant value. - Implement read-write memory accessors for SyncReadMem (by @jared-barocsi in #3190)
SyncReadMem.readWrite(address, writeData, enabled, isWrite)
explicitly generates a read-write port that supports both read and write access to the memory. - [Feature] Add Interface, ConformsTo for Separate Compilation (by @seldridge in #3199)
- Handle BoringUtils in Chisel, rather than in FIRRTL compiler (by @azidar in #3187)
Added a new BoringUtils.bore that is performed during Chisel elaboration, not via Annotations+CIRCT. Punched ports are accessible to the user via DataMirror. However, using these reflection APIs or calling .toDefinition will fully close a module, to ensure that subsequent boring fails (and thus getting all ports is never stale).
Added askipPrefix
to enable ignoring the last prefix value in the prefix name stack. - API for probing internal signals (by @debs-sifive in #3088)
Adds an API for probing internal signals. - Add ClockGate intrinsic (by @fabianschuiki in #3209)
Add support for thecirct.clock_gate
intrinsic. - Added more Connectable customization functions (by @azidar in #3227)
- Added
.unsafe
, a useful function on Connectable when users want a connection to "try its best but don't error". - Added
.squeezeAllAs
, a useful function on Connectable when users want a connection to always squeeze, as well as upcast if desired. - Added
.as
, a useful function on Connectable when users to upcast the Scala type. - Connectable's now register erroneous connections (e.g. out of scope, unwritable sinks) to throw at end of elaboration
- Added
- Allow DataView of Reset <=> [UInt<1>, AsyncReset] (by @seldridge in #3181)
- [feature] Add properties to Interface (by @seldridge in #3238)
- Enable .viewAsSupertype to work on Records (by @mwachs5 in #3267)
- Allow .viewAsSupertype to work on Records, with additional tests.
- Ensure that errors in DataView show the problematic fields in a deterministic order.
- Add Top-level parameterized reset type (by @mwachs5 in #3276)
Add a HasParameterizedResetType to mix into Modules for their top level.reset
- Allow out-of-package svsim backend implementations (by @GeorgeLyon in #3306)
- Allow users of chisel to specify their own
svsim.Backend
implementations outside of Chisel. This is useful since in-tree backends may not support all versions of the specified backend (and we don't necessarily want them to).
- Allow users of chisel to specify their own
- Support ref types on interfaces (by @trilorez in #3301)
- Fix color emission to check for interactive terminal (by @jackkoenig in #3334)
- Chisel will now detect when it should print warnings, errors, and deprecations in color.
- Color can be controlled with environment variable
CHISEL_USE_COLOR
. Set totrue
to force Chisel to use color andfalse
to disable it. - Due to how the JVM works, detection requires interactive stdout, stderr, and stdin. Build tools like SBT virtualize stdin and thus color will be disabled by default when running a Chisel main with SBT. Detection also requires environment variable
TERM
to be set to something other thandumb
.
- Color can be controlled with environment variable
- Chisel will now detect when it should print warnings, errors, and deprecations in color.
- Unify recursive Data traversals into DataMirror (by @jared-barocsi in #3300)
- Add support for Instantiate for BlackBox, ExtModule, and IntrinsicModule (by @jackkoenig in #3349)
- Add support for zero-width bit extraction (by @jackkoenig in #3352)
- Add basic linear temporal logic assertions (by @fabianschuiki in #3337)
- Implement a SyncReadMem wrapper with explicit read, write, and read/write ports (by @jared-barocsi in #3228)
ThisSyncReadMem
wrapper is instantiated using a new object,SRAM.apply
, and invokes.write
,.read
, and.readWrite
to generate a desired number of read, write, and read/write ports. This function returns a newBundle
wire containing the control signals for each requested port. - Make it possible to illegalize .asUInt on OpaqueTypes (by @jackkoenig in #3344)
Subclasses of OpaqueType can overrideerrorOnAsUInt
to make it an elaboration time error if .asUInt is called on an instance of the particular type (including when nested inside of an Aggregate). This closes a large loophole in the OpaqueType API. - Add MuxCell intrinsics (by @uenoku in #3372)
This commit adds new intrinsics (MuxCell2 and MuxCell4) to provide users a way to directly use 2-to-1 and 4-to-1 MUX cells in synthesis tools (currently synopsys and cadence are supported) from Chisel level. Appropriate pragmas will be annotated in output verilog. FIRRTL implementation is llvm/circt#5428 - SRAM API: Add a parameter to initialize the memory (by @jared-barocsi in #3364)
SRAM.apply
andSRAM.masked
now take acontents
parameter, by default aNone
, which is a string path to a binary file on the filesystem which the SRAM should be initialized with. - Support literals and DontCare in DataView targets (by @jackkoenig in #3389)
- SRAM API: Add multiple-clocked port API (by @jared-barocsi in #3383)
Add newSRAM
APIs that take threeClock
sequences as parameters instead of the number of read/write/read-write ports. This will sequentially instantiate a memory port for each clock in theClock
sequence and drive them accordingly. - Add a new
take
method onBits
that returns the requested number (by @chick in #3402)
take
will accept an argument of zero and will return a zero-length UInt - Add support for configurable warnings (by @jackkoenig in #3414)
Add support for configurable warnings, see https://www.chisel-lang.org/chisel3/docs/explanations/warnings.html - Support leading whitespace in --warn-conf-file (by @jackkoenig in #3438)
- Also make line comments work on lines with filter-action pairs.
- Add FirtoolBinaryPath option (by @GeorgeLyon in #3434)
- Add
FirtoolBinaryPathOption
to select a differentfirtool
binary at runtime.
- Add
- Add --dump-fir option to ChiselStage (by @jackkoenig in #3453)
This option will dump the .fir before invoking firtool.- Additional changes:
- Use os.lib for invoking firtool
- Use lazy serialization to avoid holding the entire FIRRTL in memory.
- Mix NoStackTrace into FirtoolNotFound
- Fix detection of no firtool
- Additional changes:
- Add hook to invoke hardware generators at the end of elaboration. (by @mikeurbach in #3446)
- Initial properties package and Property type. (by @mikeurbach in #3425)
- Add support for Integer properties and conversion to FIRRTL. (by @mikeurbach in #3470)
The Integer property type is defined in FIRRTL spec version 3.1.0: https://github.com/chipsalliance/firrtl-spec/releases/tag/v3.1.0. - Support connecting Properties. (by @mikeurbach in #3481)
Property assignment is defined in FIRRTL spec version 3.1.0: https://github.com/chipsalliance/firrtl-spec/releases/tag/v3.1.0. - Add support for Property literals, starting with existing int types. (by @mikeurbach in #3482)
Property literals are defined in FIRRTL spec version 3.1.0: https://github.com/chipsalliance/firrtl-spec/releases/tag/v3.1.0. - Add support for String Property type and literal. (by @mikeurbach in #3490)
- Add support for sequences of Properties, including values. (by @jackkoenig in #3491)
- Add support for Class and Object on top of Properties. (by @mikeurbach in #3489)
- Support Optionality of implicit clock and reset (by @jackkoenig in #3496)
- withClock, withReset, and withClockAndReset now have forms that take Option[Clock] and Option[Reset]
- Module.clockOption and Module.resetOption return Option[Clock] and Option[Reset]
- Add Boolean Property type (by @adkian-sifive in #3503)
API Modification: Add Boolean support to Property API - Implement CIRCT converter (by @SpriteOvO in #3466)
- Add Disable, a new API for disabling simulation constructs (by @jackkoenig in #3497)
Disable is a new type that represents the concept of disabling a simulation construct. It is handled similarly to the implicit clock and reset except Disable is notionally a function of the current implicit reset. Its default value is "not has been reset", a two-state simulation-only construct that is 0 when simulation starts and only becomes 1 after reset has been asserted, and then de-asserted. Because Disable has simulation-only semantics, it is not aData
and can only be used by simulation-only APIs. - Add Map properties (by @albertchen-sifive in #3505)
- add Double property type (by @albertchen-sifive in #3508)
- add Path property type (by @albertchen-sifive in #3511)
- add DedupGroupAnnotation (by @albertchen-sifive in #3500)
- add tuple properties (by @albertchen-sifive in #3513)
- Map Properties now support Properties as the key (by @jackkoenig in #3518)
- make PropertyType public, add Path factory method (by @albertchen-sifive in #3516)
- Add
AnyRef
type and reworkPropertyType.getPropertyType
(by @albertchen-sifive in #3522) - Implement FIRRTL type alias mechanism for Bundles (by @jared-barocsi in #3445)
AddaliasName
to Bundles: a way for users to define a type alias for a bundle type, resulting in the emission and usage of alias type statements in FIRRTL. - Implement auto typeName generation for Records (by @jared-barocsi in #3504)
Add experimentalHasAutoTypename
trait- Allows users to automatically generate a
typeName
forBundle
objects through the compiler plugin.
- Allows users to automatically generate a
- Make FlatIO work (as IO) for non-Record Data (by @seldridge in #3538)
- Add FixedIORawModule, FixedIOBlackBox (by @seldridge in #3535)
- Add optional group API (by @seldridge in #3541)
- Add DedupGroupAnnotation phase (by @adkian-sifive in #3545)
AddDedupGroupAnnotation
phase that generates deduplication groups based on moduledesiredNames
- Support probe-define in monoconnects (by @rwy7 in #3566)
- Enable mono/
:=
connects for probes, which will emit a ProbeDefine. - Also enables the fancier connect forms
- A "Probe" will be connected at the root
- Enable mono/
- Add new target API to get a target relative to a specific BaseModule. (by @mikeurbach in #3581)
The new toRelativeTarget API augments the existing toAbsoluteTarget API, to provide a mechanism to get hierarchical paths to a NamedComponent relative to a known root. - Support wire-of-probe. (by @dtzSiFive in #3592)
Allow creation of wire of probe, not in specification but supported by CIRCT. - Added disallowIOCreation as a public API (by @azidar in #3575)
Enable users to lock-down the IO-creation of any module by callingdisallowIOCreation()
. This is useful for building chisel libraries which desire this behavior, but don't want to force a user to declare the entire IO in one bundle. - Support instanceName on HasId without a component by using localName. (by @mikeurbach in #3623)
We have recently reworked when HasIds are named within a module so they can be named before atModuleBodyEnd executes, and then get referenced within atModuleBodyEnd. However, the component is still not set when they are referenced, so in this case use the local name. - Add source locators to all subclasses of BaseModule (by @jackkoenig in #3624)
The source locators point to the name of the class extends Module, RawModule, BlackBox, ExtModule, or Class. They are included in the output FIRRTL. - Add SparseVec (by @seldridge in #3619)
- Support Instance for Definitions of Classes. (by @mikeurbach in #3628)
This allows safe references to Objects, as well as type-safe field accessors to connect inputs or outputs via@instantiable
and@pulic
. - DataMirror.isFullyAligned: add method to check data is all aligned. (by @dtzSiFive in #3613)
Add new DataMirror.isFullyAligned for checking if all members are aligned w.r.t. the given base. - dontTouch should default to leaf marking rather than aggregate marking to match current behavior (by @darthscsi in #3675)
Don't touch is becoming stricter. Specifically type lowering and don't touch of aggregates are in conflict.dontTouch
will maintain the same behavior by default by applyingdontTouch
to every leaf when the argument is an Aggregate. The new argumentmarkAgg
can be set totrue
to havedontTouch
mark the Aggregate instead. - Add ModuleChoice and Groups (by @nandor in #3683)
Added support for the post-generation configuration of designs. Instance choices allow multiple, option-dependent targets to be specified for a single option, picking an implementation in the downstream flow. - make SRAM targets accessible from SRAMInterface (by @debs-sifive in #3728)
MakesSRAM
targets accessible fromSRAMInterface
s instantiated via theSRAM
object, which sets theunderlying
field inSRAMInterface
.
API Modification
- Create "tap" API for boring probe-type (non-synthesizable) ports (by @debs-sifive in #3237)
Create "tap" API for boring probe-type (non-synthesizable) ports. - BoringUtils writable tap (rwTap) API (by @debs-sifive in #3284)
Add writable tap (rwTap
) API to BoringUtils, which drills writable probe ports downwards only. - Remove support for Scala 2.12 (by @jackkoenig in #3331)
Chisel 5 was the last major version supporting Scala 2.12, please upgrade to Scala 2.13. - Error when calling .viewAs on non-hardware (by @jackkoenig in #3398)
- Add a new BaseType type that Data inherits, and use it for ports. (by @mikeurbach in #3429)
- Make LTL properties use Clock and Disable by default (by @jackkoenig in #3498)
Properties in package chisel3.ltl will now be clocked and disabled by default (if there is an implicit clock and disable). Default disable is not hasBeenReset of the current implicit reset (if one exists). The clock and disable can be removed by setting them to None via withClock, withReset, and withDisable APIs. - Property now extends Data, remove BaseType (by @jackkoenig in #3514)
Properties can be fields of Bundles and used in wires. - MixedVec subclasses immutable.IndexedSeq (by @mwachs5 in #3539)
Change MixedVec to inherit from collection.immutable.IndexedSeq, so that it can work for Seq[Data]. - remove clock and cond from probe force/release API (by @debs-sifive in #3605)
Removeclock
andcond
from probeforce
andrelease
methods. - Remove Map and Tuple property types. (by @mikeurbach in #3627)
These property types weren't necessary in the end. A Map can easily be represented by a list of object with two fields, and this is how it's been done downstream. Similarly, a Tuple can easily be represented by an object with two fields, and this is how it's been done downstream. Remove these to simplify Chisel and reduce maintainence burden. - Rename "groups" to "layers" (by @seldridge in #3632)
- Make SRAM ports public (by @debs-sifive in #3652)
MakeMemoryWritePort
andMemoryReadWritePort
classes publicly accessible. - Switch to firtool-resolver (by @jackkoenig in #3458)
Whereas in the past, the user was expected to provide the firtool binary
on the PATH, Chisel will now manage the firtool binary automatically.
Chisel users the following 3-step process for determining which binary
to use:- If environment variable
CHISEL_FIRTOOL_PATH
is set, it will check for
firtool in that directory - It will check the classpath for firtool provided by
chipsalliance/llvm-firtool - It will download a default version of chipsalliance/llvm-firtool
Both (2) and (3) will store the firtool binary in a sensible location
depending on the user's operating system. See dirs-dev/directories-jvm
for more information. The user can override this location by setting the
CHISEL_FIRTOOL_CACHE
environment variable.
- If environment variable
- Promote FlatIO to package chisel3 (by @jackkoenig in #3727)
- Make chisel3.internal.firrtl.* private (by @jackkoenig in #3732)
- Width, KnownWidth, and Unknown width promoted to package chisel3
- Other classes moved to new package private chisel3.internal.firrtl.ir
- Delete many old deprecated APIs (by @jackkoenig in #3733)
trait AutoCloneType
(its always enabled, the trait is a no-op)chisel3.experimental.ChiselEnum
(usechisel3.ChiselEnum
)chisel3.experimental.EnumType
(usechisel3.EnumType
)chisel3.experimental.EnumType
(usechisel3.reflect.DataMirror
)chisel3.internal.requireIsHardware
(usechisel3.experimental.requireIsHardware
)chisel3.internal.requireIsChiselType
(usechisel3.experimental.requireIsChiselType
)chisel3.internal.sourceinfo.*
(usechisel3.experimental.sourceinfo.*
)chisel3.internal.prefix
(usechisel3.experimental.prefix
)chisel3.internal.noPrefix
(usechisel3.experimental.noPrefix
)chisel3.internal.ChiselException
(usechisel3.ChiselException
)chisel3.internal.InstanceId
(usechisel3.InstanceId
)trait BackendCompilationUtilities
chisel3.util.MuxLookup(key, default, mapping)
(usechisel3.util.MuxLookup(key, default)(mapping)
, it has much better type inferencing behavior)
- Clean up Bindings deprecations (by @jackkoenig in #3736)
- Make already deprecated APIs package private
- Add deprecation warnings to a few that we missed
API Deprecation
- Warn on incorrect widths for Vec dynamic indexing (by @jackkoenig in #3321)
- Deprecate calling .viewAs on non-hardware (by @jackkoenig in #3395)
Also fix a crash that could occur when viewing a non-Data containing non-hardware Data. - Deprecate old BoringUtils API (by @jared-barocsi in #3428)
BoringUtils.bore(source, sinks)
,BoringUtils.addSource
andBoringUtils.addSink
are now deprecated in favor of the new BoringUtils APIs:BoringUtils.bore(source)
,BoringUtils.tap(source)
...
Backend Code Generation
- [codegen] Simpler FIRRTL Code for Reg w/o Reset (by @seldridge in #3280)
- [codegen] Use FIRRTL 3.0.0 syntax (connect, invalidate, regreset, radix-encoded integer literals) (by @seldridge in #3188)
- [codegen] Emit literal identifiers for numeric ids (by @seldridge in #3374)
Use FIRRTL 3.0.0 emission of literal identifiers when a Chisel name begins with a digit. - Support bulk connection for const types (by @trilorez in #3384)
- Avoid emitting 'const const' for const vecs of const elements (by @trilorez in #3393)
Multiple consecutive 'const' modifiers are no longer emitted when emitting a const vector of const elements. - Update BoringUtils.bore to not add a port when boring from a port. (by @mikeurbach in #3411)
- update ChiselPlugin to name tuples (by @albertchen-sifive in #3436)
The chisel plugin will now name wires that are part of tuples e.g.val x = (Wire(Bool()), Wire(Bool()))
will generate wires with namesx_1
andx_2
- Aggregate literals now materialize const wires (by @trilorez in #3515)
Aggregate literals now materializeconst
wires. This will facilitate further support forconst
in operations and the type system in the future. - firrtl: Emit under 3.2.0 (not released) to cover property features. (by @dtzSiFive in #3517)
Bump FIRRTL version to unreleased 3.2.0 to cover experimental features emitted. - Additional checks in probe packagae (by @debs-sifive in #3610)
Error instead of emitting RW/ProbeValues on literals. - Don't emit nodes when calling .asBool on a Bool (by @jackkoenig in #3637)
This results in a slight improvement to emitted FIRRTL quality
Performance
- Optimize BitPat equals, overlap, and cover (by @jackkoenig in #3285)
- Convert Vec dynamic index with a literal to static index (by @jackkoenig in #3314)
- Fix issue where reify would do the same lookup twice (by @jackkoenig in #3392)
- Optimize source locator escaping when emitting FIRRTL (by @jackkoenig in #3439)
Only escape/unescape source locators that need it, avoids a String copy in the common case. - Use Instantiate for LTL intrinsic instantiation (by @jackkoenig in #3499)
This vastly reduces the IR size when using LTL properties - Share the globalNamespace in the DynamicContext used for Definition. (by @mikeurbach in #3700)
When creating large numbers of Definitions, copying the globalNamespace back and forth becomes a performance bottleneck.
Fixes
- Revert checks for size 0 Vecs in connections (by @jackkoenig in #3215)
- Fix Instantiate for Product parameters (by @jackkoenig in #3210)
Instantiate previously erased type information for case classes and case objects which could result in incorrect behavior. - [bugfix] Fix naming module with Unit parameter (by @seldridge in #3263)
- Gate sys/personality.h include under define (by @trilorez in #3307)
- Make svsim shutdown gracefully when the test throws an exception (by @GeorgeLyon in #3309)
- Fixed an issue where throwing an
assert
from ansvsim
simulation run may kill the simulated process before it can finish writing a waveform.
- Fixed an issue where throwing an
- Don't emit implicit clock warnings for
SyncReadMem.readWrite
when explicit clocks are used (by @jared-barocsi in #3313) - Report Builder errors even when exception is thrown (by @jackkoenig in #3341)
Chisel will report multiple errors, but this can be cut short by any thrown Exception which would then take precedence over the previously encountered errors. Now Chisel will prioritize reporting errors even if an Exception is thrown. - Support linking ref types on interfaces (by @trilorez in #3326)
- Correctly set ProbeInfo to None for Aggregate types on a probe.read (by @girishpai in #3382)
Probe.read needs to return non-probe data to work with connection operators. Previous version of this was not handling aggregates correctly - this PR rectifies that. - Add messages to require statements in Math (by @jackkoenig in #3385)
- log2 functions
- unsignedBitLength
- log2 functions
- [svsim] Don't redirect simulation stderr to a pipe (by @GeorgeLyon in #3403)
- Fixes an issue where simulations that logged to
stderr
could hang
- Fixes an issue where simulations that logged to
- Sanitize Record._elements (by @jackkoenig in #3419)
Fixes a bug in D/I where unsanitary names would lead to a crash. It also makes the Printable output for Bundles and Records use the sanitary names which makes them better match the FIRRTL. - Extend constants in
probe.force
andprobe.forceInitial
methods. (by @debs-sifive in #3418)
Properly extend forced values inprobe.force
andprobe.forceInitial
methods. Error out on unknown widths. - Remove SourceLineNoCol (by @jackkoenig in #3433)
Tweak emission of source locators in error messages to match format in emitting FIRRTL (removed the:
between filename and line number). - Remove intermediate wire creation from Boringutils Tap API (by @debs-sifive in #3441)
Remove intermediate wire creation from Boringutils Tap API. Force/release statements on these taps will now force/release the intended signal, rather than the intermediate wire. - Restore BundleUpcastable (by @sequencer in #3487)
Restore BundleUpcastable and deprecate it. - BoringUtils: rwprobe from inside module, test (rw)taps of IO's. (by @dtzSiFive in #3485)
RWTaps are done from inside the module instead of externally, for compatibility.
Add tests for taps and rw-taps of IO's. - Allow properties on ExtModule IO (by @seldridge in #3510)
- Improve error messages involving views (by @jackkoenig in #3536)
This improves error messages involving views where the view maps to a single Data. The error messages on legacy connections (:= and <>) involving views that do not correspond 1-1 with a single target Data are still bad, but connectables (eg. :#=) do benefit even in that case. - [Binder] Corrent
chirrtl.memoryport
position (by @SpriteOvO in #3544) - Fix DataMirror.internal.chiselTypeClone to preserve Scala type (by @jackkoenig in #3553)
- Partial fix for probe and Decoupled interaction + demo of workaround (by @debs-sifive in #3558)
Coerces tapAndRead to punch stripped-direction flips when punching downwards with Inward non-probe ports, Fixes #3556 - Fix 'Malformed class name' errors in typeName and related implementations (by @jared-barocsi in #3533)
- Introduce a
simpleClassName
utility object that emulates agetClass.getSimpleName
call without throwingMalformed class name
exceptions when Java 8 is used.typeName
and all related implementations use this function now instead ofgetClass.getSimpleName
. HasAutoTypename
can no longer be mixed into an anonymousRecord
; the compiler plugin now reports this as a compilation error.
- Introduce a
- Fix and test probe of ChiselEnum. (by @dtzSiFive in #3560)
Fix probe of ChiselEnum. - Fix BoringUtils.bore can not bore from a Probe (by @sequencer in #3512)
- Fix Decodetable (by @sequencer in #3563)
- Don't add DedupGroupAnnotation to intrinsics (by @mikeurbach in #3590)
- Bugfix: foo and foo_ names cause incorrect prefix calculation (by @azidar in #3600)
Namingfoo
and thenfoo_
will no longer trigger an error. - Don't add DedupGroupAnnotation to classes. (by @mikeurbach in #3604)
Class definition components cannot have any annotations. - Updated Path property target type serialization. (by @mikeurbach in #3601)
This includes two changes to how Path property target types are serialized:- For ModuleTargets, use the OMInstanceTarget target type, like for InstanceTargets
- Add a new API to request "member" target types
- set sample_element's probeInfo for Vecs (by @debs-sifive in #3611)
ForVec
s, also set theprobeInfo
of theirsample_element
, which is used to determine its element type. - Add type ascription to implicits from instantiable (by @jackkoenig in #3615)
This fixes Scala compiler warnings in Scala 2.13.12 requiring type ascriptions on public implicit definitions. - Enable checkConnect for Property types in MonoConnect. (by @mikeurbach in #3635)
Property types never actually called the helper that was factored out of MonoConnect specifically for them. Upon adding this, it turned out that they never had assignCompatDir called either, and this was leaving directions unspecified in aggregates. Both of these have probably lingered since Property types were made subclasses of Data again. This addresses both omissions, leading to earlier error checking for Property type connections. - Define typeEquivalent specially for Property. (by @mikeurbach in #3685)
When we changed Property to extend Element, we needed to update some internal logic that checked "are these Elements the same type". That logic needs to work a little differently for Property, and this internal API is one other place that needed to be updated. - dontTouch: Skip probe and properties. (by @dtzSiFive in #3691)
- Fix the
--mlir-print-ir-after-all
option. (by @poemonsense in #3704)
Fix the--mlir-print-ir-after-all
option. - Fix using Definitions as arguments to Definitions (by @jackkoenig in #3726)
Fixes #3708 - Preserve probe-ness and const-ness in Output() and friends. (by @dtzSiFive in #3654)
Don't strip const and probe in Output() and related.
Documentation
-
[docs] Fix README logo and update versions (by @jackkoenig in #3189)
-
[fix] typo fix: chosen port of arbiter is not onehot but UInt (by @SihaoLiu in #3235)
Just a oneline fix to the comment of Arbiter chosen port -
[docs] Update website for 5.0, 6.0 and fix links (by @jackkoenig in #3274)
-
Bring ToC and Menu into alignment, some minor cleanup within docs (by @mwachs5 in #3346)
Fix #3322 -
Remove references to interval types from the website docs (by @mwachs5 in #3345)
Fixes #3325 -
Update meeting time and versions in README (by @jackkoenig in #3356)
-
Add Chips Alliance to README (by @jackkoenig in #3377)
-
Update suggested milestones in PULL_REQUEST_TEMPLATE.md (by @mwachs5 in #3394)
Update the PULL REQUEST TEMPLATE to prompt for 6.0 and 5.0.x milestones -
Update versioning.md for Chisel 5.0.0. (by @jackkoenig in #3421)
Describe new use of SemVer and update older text that applies to only Chisel 3.0-3.6. -
[docs] Fix chiseltest version in old compatible versions (by @jackkoenig in #3448)
-
[docs] Update naming explanation for newer firtool (by @jackkoenig in #3454)
-
[website] Fix link from Warnings to Cookbook (by @jackkoenig in #3524)
-
Fix HasTypeAlias cookbook typos (by @jared-barocsi in #3525)
-
Add unit test demonstrating BoringUtils.tap with D/I (by @debs-sifive in #3540)
-
Changed Array to Seq in MuxLookup explantation (by @madsrumlenordstrom in #3547)
-
[docs] Switch API docs hosting from javadoc.io to sonatype (by @jackkoenig in #3568)
-
[ci] Record published version in step summary (by @jackkoenig in #3645)
-
[docs] Migrate website to Docusaurus (by @jackkoenig in #3646)
Introducing a complete facelift of the Chisel website, now built with Docusaurus 3.0. -
Better reference to the Chisel book. (by @schoeberl in #3649)
-
[website] Add robots.txt (by @jackkoenig in #3650)
This will hopefully make the Algolia web crawler work. -
[website] Docusaurus set trailingSlash to false (by @jackkoenig in #3653)
-
[website] Enable Algolia-powered search (by @jackkoenig in #3651)
-
[website] docs/introduction => docs/index, add redirects (by @jackkoenig in #3656)
-
[website] More redirects (by @jackkoenig in #3657)
Redirect links with.html
or.htm
(remove the extension). Do this same redirect for old website/chisel3/...
links as well. -
[docs] Update README after 5.1.0 release (by @jackkoenig in #3660)
-
[website] Generate links to ScalaDoc for API page (by @jackkoenig in #3661)
The website will now actual reflect the latest snapshot and releases on the API page -
[website] Self-host latest [stable] API docs (by @jackkoenig in #3665)
This should enable them to be indexed and thus searchable as part of the website (both by Algolia and by Google). -
Fix spelling error in Layers documentation layers.md (by @t14916 in #3673)
-
[docs] Fix release ordering and make RC count as latest (by @jackkoenig in #3686)
-
[docs] update firtool version (by @schoeberl in #3670)
-
[docs] Add Firtool versions table to Versioning page (by @jackkoenig in #3694)
This table is generated for all versions of Chisel that includeBuildInfo.firtoolVersion
and will thus automatically include new releases. Versions of Chisel that predateBuildInfo.firtoolVersion
are included in the table manually. -
[docs] Fix links from ScalaDoc to source code (by @jackkoenig in #3697)
-
Add riscvassembler lib to community projects (by @carlosedp in #3717)
Added RISCVAssembler Scala library to community projects. -
[CI] Make SBT version handling logic more robust (by @jackkoenig in #3738)
Dependency Updates
- Bump firtool version to 1.40.0 (by @seldridge in #3226)
- Update sbt-ci-release to 1.5.12 (by @scala-steward in #3234)
- Update sbt-mima-plugin to 1.1.2 (by @scala-steward in #3145)
- Update scalacheck-1-14 to 3.2.11.0 (by @scala-steward in #3264)
- Update data-class to 0.2.6 (by @scala-steward in #3049)
- Update sbt-assembly to 2.1.1 (by @scala-steward in #3047)
- Update scopt to 4.1.0 (by @scala-steward in #3048)
- Update upickle to 3.1.0 (by @scala-steward in #3169)
- Update scalacheck-1-15 to 3.2.14.0 (by @scala-steward in #3265)
- Update scalatest to 3.2.16 (by @scala-steward in #3299)
- Update sbt to 1.8.3 (by @scala-steward in #3298)
- Add Scala 2.13.11 and 2.12.18 to plugin cross versions (by @jackkoenig in #3327)
- Bump to firtool 1.43.0 (by @jackkoenig in #3332)
See release notes for firtool 1.41.0, 1.42.0, and 1.43.0. - Bump to Scala 2.13.11 (by @jackkoenig in #3358)
- Bump firtool from 1.43.0 -> 1.44.0 (by @seldridge in #3368)
- [CI] Bump OSS CAD tools build to 2023-06-21 release (by @dtzSiFive in #3376)
- Bump firtool to 1.45.0 (by @jackkoenig in #3415)
Bump to firtool 1.45.0, see release notes. - Bump firtool to 1.47.0 from 1.45.0 (by @jackkoenig in #3422)
Bump to firtool 1.47.0 from 1.45.0. See release notes for 1.46.0 and 1.47.0. - Bump to firtool 1.48.0 (by @jackkoenig in #3450)
See firtool 1.48.0 release notes. - [cd] Bump CIRCT from firtool-1.48.0 to firtool-1.50.0 (by @chiselbot in #3484)
- [cd] Bump CIRCT from firtool-1.50.0 to firtool-1.51.0 (by @chiselbot in #3495)
- [cd] Bump CIRCT from firtool-1.51.0 to firtool-1.52.0 (by @chiselbot in #3506)
- [cd] Bump CIRCT from firtool-1.52.0 to firtool-1.53.0 (by @chiselbot in #3519)
- [cd] Bump CIRCT from firtool-1.53.0 to firtool-1.54.0 (by @chiselbot in #3526)
- Add support for Scala 2.13.12 to the compiler plugin (by @jackkoenig in #3527)
- Bump to Scala 2.13.12 (by @jackkoenig in #3531)
- [cd] Bump CIRCT from firtool-1.54.0 to firtool-1.55.0 (by @chiselbot in #3537)
- [cd] Bump CIRCT from firtool-1.55.0 to firtool-1.56.0 (by @chiselbot in #3543)
- [cd] Bump CIRCT from firtool-1.56.0 to firtool-1.56.1 (by @chiselbot in #3546)
- [cd] Bump CIRCT from firtool-1.56.1 to firtool-1.57.0 (by @chiselbot in #3576)
- [cd] Bump CIRCT from firtool-1.57.0 to firtool-1.57.1 (by @chiselbot in #3584)
- [cd] Bump CIRCT from firtool-1.57.1 to firtool-1.58.0 (by @chiselbot in #3603)
- [cd] Bump CIRCT from firtool-1.58.0 to firtool-1.59.0 (by @chiselbot in #3625)
- [cd] Bump CIRCT from firtool-1.59.0 to firtool-1.60.0 (by @chiselbot in #3679)
- [cd] Bump CIRCT from firtool-1.60.0 to firtool-1.61.0 (by @chiselbot in #3681)
- Bump firtool-resolver to 1.1.0 (by @jackkoenig in #3696)
The logic for- If FIRTOOL_PATH is set, the --version regex failing no longer will return fail, instead it will set version to
<unknown>
. - If FIRTOOL_PATH is set and something fails (firtool not found or cannot execute the binary), then the error will be returned rather than firtool-resolver falling back to fetching the default version.
- Errors from running firtool will be logged and returned rather than unconditionally turned into "Firtool binary not on FIRTOOL_PATH".
- If FIRTOOL_PATH is set, the --version regex failing no longer will return fail, instead it will set version to
- Bump firtool resolver to 1.2.0 (by @jackkoenig in #3702)
Now it will fetch llvm-firtool with classifier for the current system rather than the full artifact which contains binaries for all platforms. - Bump firtool-resolver to 1.3.0 (by @jackkoenig in #3719)
To override which firtool is used by Chisel, users can set environment variableCHISEL_FIRTOOL_PATH
. - [cd] Bump CIRCT from firtool-1.61.0 to firtool-1.62.0 (by @chiselbot in #3725)
Build and Internal Changes
- Remove PartialConnect (by @seldridge in #3185)
- Update Mergify for backporting to 5.x (by @jackkoenig in #3191)
- Add Chisel Scala CLI template and automation (by @jackkoenig in #3186)
Add a new Chisel template for using Chisel with Scala CLI, and adds some automation for uploading versions of this template on tagged releases (or workflow dispatch). - Add Data.findFirstTypeMismatch for better type checking (by @jackkoenig in #3201)
- Read previousVersions for bincompat checking from a file (by @jackkoenig in #3202)
We can now simply append versions as they are released toproject/previous-versions.txt
on relevant release branches.build.sbt
also now contains instructions are how to waive binary compatibility breakages. - Enable push CI on all *.x branches (by @jackkoenig in #3222)
- Improve SyncReadMem.read, .readWrite (by @jared-barocsi in #3221)
- Add workflow to automatically update binary compatibility checks (by @jackkoenig in #3242)
- Add new workflow to fixup backports for release notes (by @jackkoenig in #3252)
Improve backport automation so that release notes generation from backport PRs works properly. - Update .scala-steward.conf (by @jackkoenig in #3266)
Make the frequency a legal value (14 days). - SemanticDB requires private fields of case class to use "val" (by @jackkoenig in #3270)
- Update PULL_REQUEST_TEMPLATE.md (by @mwachs5 in #3279)
Update PR template to be less comment-driven - [CI] Update versions in CI Workflow (by @jackkoenig in #3291)
- Update ChiselRunners to use svsim (by @GeorgeLyon in #3147)
- All
ChiselRunner
tests now usesvsim
when callingassertTester{Passes,Fails}
- All
- Add tests for using DataView with ref types (by @trilorez in #3320)
- Update sbt to 1.9.0 (by @scala-steward in #3339)
- Update sbt-scalafix to 0.11.0 (by @scala-steward in #3338)
- Make devcontainer point to CIRCT top-of-tree instead of latest release (by @GeorgeLyon in #3360)
- VSCode devcontainer now follows CIRCT top-of-tree rather than latest release
- Add tests for interfaces with reference ports (by @debs-sifive in #3303)
- Add test demonstrating a ref to an aggregate member (by @trilorez in #3369)
- Split out MixedVecSpec integration tests (by @jackkoenig in #3373)
- Un-ignore force tests now we have newer verilator in CI. (by @dtzSiFive in #3378)
- upgrade mill to 0.11.0 (by @sequencer in #3367)
- Disable argument extensions when in devcontainer (by @GeorgeLyon in #3409)
- VSCode's Metal's Test Explorer UI can now run tests when the
CHISEL_ARGUMENT_EXTENSIONS
environment variable is set toDISABLE
- VSCode's Metal's Test Explorer UI can now run tests when the
- Remove firrtl/regress, these old files are unused (by @jackkoenig in #3413)
- Move more Data methods to BaseType and base connection checks on BaseType. (by @mikeurbach in #3442)
MonoConnect.elemConnect is updated to accept any BaseType, so its checks can be re-used for any source and sink BaseType that are already known to be compatible. - [ci] Use 'default' as version string for typical CIRCT version (by @jackkoenig in #3467)
Make it such that using "Install CIRCT" does not require specifying a CIRCT version, instead using the string 'default' as a way to pick the "default version". The "default version" is the version that Chisel is tested and released against. - Tests for RWTapping aggregates (by @debs-sifive in #3443)
- Implement Verilog output stream
PanamaCIRCTConverter
(by @SpriteOvO in #3520) - Add Nix Flake (by @sequencer in #3050)
- move panama codegen to txt files (by @sequencer in #3595)
- use flake input to provide circt source (by @sequencer in #3597)
- Alignment: Don't require a Connectable base, split. (by @dtzSiFive in #3612)
DataMirror methods relating to alignment such ascollectAlignedDeep
) no longer require Data to be Hardware and may be used on bare Chisel types. - Add type specifier on AddDedupGroupAnno phase optionalPrerequisites (by @adkian-sifive in #3614)
Add type specifier to optionalPrerequisites in AddDedupGroupAnnotations phase - Add type ascriptions to public implicit definitions (by @jackkoenig in #3616)
- [NFC] prune dead imports (by @darthscsi in #3674)
- Make Property an Element. (by @mikeurbach in #3676)
This is the right place in the Chisel type hierarchy for Property as it exists today. Property types can be used in Aggregates, and are not themselves Aggregates in their current form. Making Property extend Element allows much of Chisel's internal reflection to work as expected when Property types are used in Aggregates. - fix up path issue in build.sc (by @sequencer in #3692)
- Fix publish (by @jackkoenig in #3695)
- [CI] Fix flaky CI and remove VerilogMdocModifier from API docs (by @jackkoenig in #3701)
- Use Java 17 to build documentation in CI
- Exclude docs project from Unidoc
- bump and update nix to use upstreamed packages (by @sequencer in #3713)
- [CI] Fix CI flakiness with --server=false (by @jackkoenig in #3722)
- Bump SBT to 1.9.8 and update Ubuntu runners (by @jackkoenig in #3734)
New Contributors
- @fabianschuiki made their first contribution in #3209
- @SihaoLiu made their first contribution in #3235
- @smarter made their first contribution in #3370
- @uenoku made their first contribution in #3372
- @madsrumlenordstrom made their first contribution in #3547
- @t14916 made their first contribution in #3673
- @poemonsense made their first contribution in #3704
- @nandor made their first contribution in #3683
Full Changelog: v5.1.0...v6.0.0