Releases: chipsalliance/chisel
Releases · chipsalliance/chisel
Chisel v7.1.1
Fixes
- Rename private[chisel3] SourceInfo$Intf to SourceInfoIntf (by @jackkoenig in #5033)
This works around an issue in IntelliJ around using the macro to materialize SourceInfo.
Documentation
- Update README for Chisel 7.1.0 (by @jackkoenig in #5032)
Build and Internal Changes
- [main] Enable MiMa for v7.1.0 (by @chiselbot in #5031)
Full Changelog: v7.1.0...v7.1.1
Chisel v7.1.0
Features
- [core] Add Temporal inline layer, trait (by @seldridge in #5018)
- [core] Add LayerControl.Disable (by @seldridge in #5019)
- [chiselsim] Drop Temporal layers for Verilator Cli (by @seldridge in #5024)
Fixes
- Fix construction of PseudoModules to have correct parent (by @jackkoenig in #5012)
This fixes subtle bugs where accessing children of anInstance
(whether directly or by usingSelect
APIs) could change the result of futureSelect
to be incorrect. For example, a call toSelect.unsafe.allCurrentInstancesIn
could causeSelect.unsafe.currentInstancesIn
to also incorrectly include grandchildren and all other transitive children. - [svsim] Update c++ CFLAGS for verilator from c++14 to c++17 (by @Gallagator in #5017)
Verilator CFLAGS bumped from c++14 to c++17 - Overload Stage methods to use Seq[Annotation] (by @jackkoenig in #5030)
Also deprecate the older forms using AnnotationSeq.
Documentation
- [docs] Update layer docs for temporal layer, NFC (by @seldridge in #5020)
- [docs] Fix duplicate versions in Firrtl Version table (by @jackkoenig in #5025)
Also refactor some build util code to be Tasks so they can be cached on disk. - [doc] Document temporal layers and ChiselSim (by @seldridge in #5027)
Dependency Updates
- [cd] Bump CIRCT from firtool-1.128.0 to firtool-1.129.0 (by @chiselbot in #5010)
- [cd] Bump CIRCT from firtool-1.129.0 to firtool-1.130.0 (by @chiselbot in #5015)
- [cd] Bump CIRCT from firtool-1.130.0 to firtool-1.131.0 (by @chiselbot in #5021)
Build and Internal Changes
- Restore binary compatibility checking (by @jackkoenig in #5028)
Full Changelog: v7.0.0...v7.1.0
Chisel v7.0.0
Features
- Preserve UInt and SInt literals across .pad (by @jackkoenig in #4156)
- Add support for marking things as readOnly (by @jackkoenig in #4190)
Users can call.readOnly
on anyData
to prevent connections to the returned value. Resolves #1267. - Add ChiselStage.emitCHIRRTLFile (by @jackkoenig in #4232)
Emits a file without returning the serialized object which is more memory efficient and supports > 2 GiB of serialized FIRRTL text. - Make requireTypeEquivalent public and add context message (by @mwachs5 in #4243)
Make Add a contextual message to Data.requireTypeEquivalent and expose a public API in DataMirror.requireTypeEquivalent, to make it easier for user code to have good error messages when requiring type equivalence between two chisel Datas - Add map method for Valid (by @tymcauley in #4255)
Users can now apply a functionf
to thebits
field of aValid
instance with the newValid.map(f)
method. - Add more information when probe types don't match (by @mwachs5 in #4269)
Add more information to the error message when attempting toprobe.define
to a mismatched chisel type. - Add AffectsChiselName (by @adkian-sifive in #4283)
Adds new traitAffectsChiselName
that adds support for naming user-defined types - Add --remap-layers to ChiselStage (by @seldridge in #4322)
- Add common layers to Chisel (by @seldridge in #4326)
- Add skipIfAlreadyInBlock arg to layer.block (by @seldridge in #4327)
- Add skipIfLayersEnabled param to layer.block (by @seldridge in #4346)
- Add layer.elideBlocks API (by @seldridge in #4348)
- Make layer.addLayer API public (by @seldridge in #4349)
- Add Property expression for list concatenation. (by @mikeurbach in #4347)
This adds a list concatenation operation for Property[Seq[T]], using the same typeclass approach used for other Property expressions. - Add support for circt.OutputDirAnnotation. (by @dtzSiFive in #4352)
Expose capability to request a Module be placed in a specific directory.
Functions as with Layer output directories. - Make '--module' support arguments (by @seldridge in #4358)
- Add DataMirror API for currentInstancePorts. (by @mikeurbach in #4362)
This allows users to query an Instance without it being closed or forcing it to close, which can be useful in atModuleBodyEnd and other scenarios. - Add experimental Select APIs for current instances in a BaseModule. (by @mikeurbach in #4363)
This is useful in situations like atModuleBodyEnd to reflect on the current BaseModule before it is closed. - Add
Path.apply()
to supportHasTarget
(by @debs-sifive in #4364)
AddsPath.apply()
function that supportHasTarget
s, so that the paths of things that extendHasTarget
, likeSRAM
, can be put into properties. - feat: implement SerializableModuleElaborator (by @unlsycn in #4409)
Add SerializableModuleElaborator - Add SourceLocator for Sequence (by @unlsycn in #4436)
Add source locator for Sequence - Add Property expression for integer shift left (by @maerhart in #4440)
This adds an API for integer Property shift left. - Support creation of
Path
s fromHasTarget
s (by @debs-sifive in #4455) - Add --firtool-option arg to ChiselStage (by @seldridge in #4463)
- switch SRAMDescription to Class (by @sequencer in #4437)
- add additionalAnnotations for SerializableModuleElaborator (by @sequencer in #4477)
- Implement Lookupable for HasTarget (used by SRAM) (by @jackkoenig in #4481)
- Allow BoringUtils to use existing port in a closed module (by @tmckay-sifive in #4484)
When trying to drill a port, it doesn't matter if the module is closed. We do not need to construct new hardware and can just use the existing port. - Implement Lookupable for Unit (by @jackkoenig in #4497)
- [Module] Add afterModuleBuilt hook (by @fabianschuiki in #4479)
The newafterModuleBuilt
hook can be used to schedule code to be executed once a module has been fully generated and its definition is available. This allows further collateral such as unit tests to be generated alongside a module. - Add
withModulePrefix
(by @mmaloney-sf in #4487) - Add AutoBlackbox (by @unlsycn in #4495)
- Add new InlineInstanceAllowDedup trait (by @rwy7 in #4508)
- Add module prefixing to BaseModule definitions (by @jackkoenig in #4509)
- BaseModule.localModulePrefix can be used to set a prefix for the module and its children.
- BaseModule.localPrefixAppliesToSelf (defaults to true) allows the module to exclude itself from the prefix.
- localModulePrefix composes with prefixes added via withModulePrefix.
- feat: add CIRCTSRAMInterface (by @unlsycn in #4494)
Add CIRCTSRAMInterface - Add APIs to omit module prefix separator (by @jackkoenig in #4532)
withModulePrefix
now optionally takes a 2nd parameterincludeSeparator
(passingfalse
will omit separator).- Overriding
localModulePrefixUseSeparator
in a Module to false will omit separator for local prefix applied by overridinglocalModulePrefix
in that Module.
- feat: add SRAMBlackBox (by @unlsycn in #4544)
- Add partial cross-compilation for Scala 3 (by @adkian-sifive in #4549)
Adds initial support for Scala 3 LTS version 3.3.3 - [util] Add a withShadowLayer Queue (by @seldridge in #4589)
- Add FormalTest marker (by @fabianschuiki in #4635)
- [core] Add layer block that returns colored wire (by @seldridge in #4623)
- Add UnitTest marker and test discovery utility (by @fabianschuiki in #4642)
- [chiselsim] Add Default (non-Ephemeral) Simulator (by @seldridge in #4665)
- [Chiselsim] Add WithTestingDirectory (by @seldridge in #4669)
- [chiselsim] Rewrite EphemeralSimulator in terms of DefaultSimulator (by @seldridge in #4675)
- [chiselsim] Add, use HasSimulator type class (by @seldridge in #4678)
- [firrtl] Add, use dramaticMessage (by @seldridge in #4684)
- [chiselsim] Add SimulatorAPI, reduce DefaultSimulator to nothing (by @seldridge in #4680)
- [chiselsim] Add ChiselSim APIs (by @seldridge in #4685)
- Add simple API for generating testharnesses inline (by @tmckay-sifive in #4629)
Add an API to generate testharnesses inline that are emitted as additional public modules in the output. - Dev/seldridge/switch to chisel settings (by @seldridge in #4708)
- Add RequireProperty and EnsureProperty (by @fabianschuiki in #4681)
- [chiselsim] Add FIRRTL macro control (by @seldridge in #4699)
- [Chiselsim] Replace Chiselspec w/ ChiselSim (by @seldridge in #4706)
- [testing] Add FileCheck API (by @seldridge in #4749)
- Add formal contracts (by @fabianschuiki in #4682)
- [testing] Add HasTestingDirectory subdir factory (by @seldridge in #4774)
- [chiselsim] Allow command line options to be passed to ChiselSim tests (by @seldridge in #4773)
- [scalatest] Add HasCliSimulator (by @seldridge in #4776)
- Change Data._fromUInt to protected (by @jackkoenig in #4782)
This enables external libraries like FixedPoint to override it. This is not an ideal API, but it works until we have a better way to do this. - [chiselsim] Add ControlAPI w/ Waveform Enable/Disable Support (by @seldridge in #4779)
- [ChiselSim] Factor reset procedure out of SimulatorAPI and into stimulus (by @seldridge in #4784)
-...
Chisel v7.0.0-RC4
Features
- Add PopCount compare functions to reduce circuitry for common cases (by @maartenboersma in #5002)
Can call PopCount.greaterThan(n), PopCount.equalTo(n), PopCount.atLeast(n). If n is such that it allows for optimization, the generated circuitry is cheaper and faster compared to "first PopCount, then compare".
API Modification
- Make
ChiselEnum
width inference consider known-widthValue()
literals (by @CSharperMantle in #4990)
The inferred width for aChiselEnum
usingValue()
now correctly accommodates both known-width values and the largest specified literal integer. Closes #4989.
Backend Code Generation
- Support emitting variadic cat (by @jackkoenig in #4992)
This should not be visible to most users unless they inspect emitted.fir
. It reduces memory use, improves performance, and reduces the size of emitted.fir
a little bit, ~2-5% depending on the design. - Bump emitted FIRRTL version to 6.0.0 (by @jackkoenig in #5008)
Fixes
- [scalatest] More conservative testdir mangling (by @seldridge in #4975)
Dependency Updates
- [cd] Bump CIRCT from firtool-1.125.0 to firtool-1.126.0 (by @chiselbot in #4991)
- [cd] Bump CIRCT from firtool-1.126.0 to firtool-1.127.0 (by @chiselbot in #4998)
- [cd] Bump CIRCT from firtool-1.127.0 to firtool-1.128.0 (by @chiselbot in #5007)
Build and Internal Changes
- Bump to Mill 1.0.1 (by @jackkoenig in #4985)
- Update Scala CLI example for newer Scala CLI and new snapshots repo (by @jackkoenig in #4977)
- Publish snapshots (by @jackkoenig in #4976)
Users can access these SNAPSHOTs using the Maven Central Snapshots repository: https://central.sonatype.com/repository/maven-snapshots/ - Bump Mill to 1.0.2 (by @jackkoenig in #5003)
- Bump to Mill 1.0.3 (by @jackkoenig in #5005)
Also move .mill-version into build.mill using Mill 1.0 header syntax. - Enhance coverage of PopCountTest (by @jackkoenig in #5006)
Full Changelog: v7.0.0-RC3...v7.0.0-RC4
Chisel v7.0.0-RC3
Features
- [chiselsim] Stop using CIRCT filelists (by @seldridge in #4969)
- [chiselsim] Use allowlist for compilation includes (by @seldridge in #4970)
Dependency Updates
- [cd] Bump CIRCT from firtool-1.124.0 to firtool-1.125.0 (by @chiselbot in #4973)
- [cd] Bump CIRCT from firtool-1.124.0 to firtool-1.125.0 (by @chiselbot in #4974)
Build and Internal Changes
- [Scala3] Split plugin resource files based on Scala major version (by @adkian-sifive in #4971)
Split plugin resource files into separate directories for Scala 2 and Scala 3 - [Scala3] Add Bundle plugin (by @adkian-sifive in #4947)
Adds Bundle plugin - Upgrade to Mill 1.0.0 (by @jackkoenig in #4972)
No SNAPSHOT publishing yet, that will be follow on work. See the Mill 1.0.0 changelog.
Full Changelog: v7.0.0-RC2...v7.0.0-RC3
Chisel v7.0.0-RC2
Features
- [core] Add Bool "implies" method (by @seldridge in #4933)
- Add timing parameter support to Verilator backend (by @shahzaibk23 in #4934)
Added extra option Verilator Backend for Timing option. User now has choice to either add--timing
or--no-timing
or nothing for this parameter, in the Verilator Args Seq - [svsim] Trace options for the Verilator backend (by @kammoh in #4911)
- [chiselsim] Add Randomization.x (by @seldridge in #4939)
- Allow bare Chisel types to be looked up from a Hierarchy (by @tmckay-sifive in #4940)
- Allow lookup of bare Chisel types from a Hierarchy
- [chiselsim] Add frequency control to stimulus (by @seldridge in #4942)
- Add API to include comments in the FIRRTL (by @jackkoenig in #4949)
This is for debugging generated FIRRTL only--comments are ignored by the FIRRTL compiler. - Add Lookupable for ActualDirection (by @tmckay-sifive in #4950)
- Allow ActualDirection to be looked up from a Hierarchy
- ChiselSim API for inline testing (by @tmckay-sifive in #4946)
- Add a ChiselSim API for simulating inline tests
- Add OverrideSerializationClass for custom annotation serialization (by @jackkoenig in #4953)
Annotations can now mixinOverrideSerializationClass
to customize the "class" field in annotation serialization. This allows annotation classes to reside in a different package than firtool is expecting for theclass
field. Note that this breaks automatic deserialization which does not matter to firtool but would matter for annotations communicating information between Chisel generator invocations. - ChiselSim peek/poke/expect for Enums, Records, Vecs, and generic Data (by @kammoh in #4824)
API Modification
- Support concatenating Properties of Seq subtypes (by @debs-sifive in #4907)
- Fail boring into module with endIOCreation set (by @azidar in #4925)
SettingendIOCreation
now also errors if any IOs are created usingBoringUtils
.
Fixes
- Improve error for bad connections with null module name (by @jackkoenig in #4917)
- [testing] Mangle more directories (by @seldridge in #4927)
- [testing] Mangle even more directories (by @kammoh in #4928)
- [svsim/ChiselSim] Discover the project's root directory in a sandboxed build (by @kammoh in #4931)
- Fix naming plugin support for unapply (by @jackkoenig in #4943)
Previously, naming support on unapply only worked for subtypes of Data, but now it works for all namable types, including user-extensible AffectsChiselName as well as non-Data Chisel built-in types: Mem, VerificationStatement, properties.DynamicObject, and Disable.
Documentation
- Table on Java version (by @schoeberl in #4909)
- [blog] Add blog post about Latch Up 2025 (by @jackkoenig in #4914)
- fix: queue depth parameter name (by @edwardcwang in #4922)
- [docs] Fix RawClockedVoidFunctionCall example (by @yizishun in #4937)
- [docs] Fix BlackBoxRealAdd port widths (by @tymcauley in #4957)
Dependency Updates
- [cd] Bump CIRCT from firtool-1.114.1 to firtool-1.115.0 (by @chiselbot in #4908)
- [cd] Bump CIRCT from firtool-1.115.0 to firtool-1.116.0 (by @chiselbot in #4912)
- [cd] Bump CIRCT from firtool-1.116.0 to firtool-1.117.0 (by @chiselbot in #4920)
- [cd] Bump CIRCT from firtool-1.117.0 to firtool-1.118.0 (by @chiselbot in #4926)
- [cd] Bump CIRCT from firtool-1.118.0 to firtool-1.119.0 (by @chiselbot in #4936)
- [cd] Bump CIRCT from firtool-1.119.0 to firtool-1.120.0 (by @chiselbot in #4944)
- [cd] Bump CIRCT from firtool-1.120.0 to firtool-1.121.0 (by @chiselbot in #4948)
- [cd] Bump CIRCT from firtool-1.121.0 to firtool-1.122.0 (by @chiselbot in #4954)
- [cd] Bump CIRCT from firtool-1.122.0 to firtool-1.123.0 (by @chiselbot in #4960)
- [cd] Bump CIRCT from firtool-1.123.0 to firtool-1.123.1 (by @chiselbot in #4962)
- [cd] Bump CIRCT from firtool-1.123.1 to firtool-1.123.2 (by @chiselbot in #4965)
- [cd] Bump CIRCT from firtool-1.123.2 to firtool-1.124.0 (by @chiselbot in #4966)
- Bump os-lib to 0.10.7 (by @jackkoenig in #4967)
Also bump mdoc to 2.7.1 (but this isn't visible to users).
Note that we are not yet bumping os-lib to 0.11 because it will raise the minimum supported JVM to 11. Similarly we are not bumping upickle to 4.0 because it does not support Scala 3.3 which is our target for Scala 3 support (because 3.3 is LTS).
Build and Internal Changes
- Revert "build: bump to mill 0.12.10" (by @unlsycn in #4906)
- [chiselsim] Set +incdir on all primary sources (by @seldridge in #4923)
- Update Mill to 0.12.14 (by @jackkoenig in #4961)
Full Changelog: v7.0.0-RC1...v7.0.0-RC2
Chisel v7.0.0-RC1
Features
- Add AffectsChiselName (by @adkian-sifive in #4283)
Adds new traitAffectsChiselName
that adds support for naming user-defined types - Add --remap-layers to ChiselStage (by @seldridge in #4322)
- Add common layers to Chisel (by @seldridge in #4326)
- Add skipIfAlreadyInBlock arg to layer.block (by @seldridge in #4327)
- Add skipIfLayersEnabled param to layer.block (by @seldridge in #4346)
- Add layer.elideBlocks API (by @seldridge in #4348)
- Make layer.addLayer API public (by @seldridge in #4349)
- Add Property expression for list concatenation. (by @mikeurbach in #4347)
This adds a list concatenation operation for Property[Seq[T]], using the same typeclass approach used for other Property expressions. - Add support for circt.OutputDirAnnotation. (by @dtzSiFive in #4352)
Expose capability to request a Module be placed in a specific directory.
Functions as with Layer output directories. - Make '--module' support arguments (by @seldridge in #4358)
- Add DataMirror API for currentInstancePorts. (by @mikeurbach in #4362)
This allows users to query an Instance without it being closed or forcing it to close, which can be useful in atModuleBodyEnd and other scenarios. - Add experimental Select APIs for current instances in a BaseModule. (by @mikeurbach in #4363)
This is useful in situations like atModuleBodyEnd to reflect on the current BaseModule before it is closed. - Add
Path.apply()
to supportHasTarget
(by @debs-sifive in #4364)
AddsPath.apply()
function that supportHasTarget
s, so that the paths of things that extendHasTarget
, likeSRAM
, can be put into properties. - feat: implement SerializableModuleElaborator (by @unlsycn in #4409)
Add SerializableModuleElaborator - Add SourceLocator for Sequence (by @unlsycn in #4436)
Add source locator for Sequence - Add Property expression for integer shift left (by @maerhart in #4440)
This adds an API for integer Property shift left. - Support creation of
Path
s fromHasTarget
s (by @debs-sifive in #4455) - Add --firtool-option arg to ChiselStage (by @seldridge in #4463)
- switch SRAMDescription to Class (by @sequencer in #4437)
- add additionalAnnotations for SerializableModuleElaborator (by @sequencer in #4477)
- Implement Lookupable for HasTarget (used by SRAM) (by @jackkoenig in #4481)
- Allow BoringUtils to use existing port in a closed module (by @tmckay-sifive in #4484)
When trying to drill a port, it doesn't matter if the module is closed. We do not need to construct new hardware and can just use the existing port. - Implement Lookupable for Unit (by @jackkoenig in #4497)
- [Module] Add afterModuleBuilt hook (by @fabianschuiki in #4479)
The newafterModuleBuilt
hook can be used to schedule code to be executed once a module has been fully generated and its definition is available. This allows further collateral such as unit tests to be generated alongside a module. - Add
withModulePrefix
(by @mmaloney-sf in #4487) - Add AutoBlackbox (by @unlsycn in #4495)
- Add new InlineInstanceAllowDedup trait (by @rwy7 in #4508)
- Add module prefixing to BaseModule definitions (by @jackkoenig in #4509)
- BaseModule.localModulePrefix can be used to set a prefix for the module and its children.
- BaseModule.localPrefixAppliesToSelf (defaults to true) allows the module to exclude itself from the prefix.
- localModulePrefix composes with prefixes added via withModulePrefix.
- feat: add CIRCTSRAMInterface (by @unlsycn in #4494)
Add CIRCTSRAMInterface - Add APIs to omit module prefix separator (by @jackkoenig in #4532)
withModulePrefix
now optionally takes a 2nd parameterincludeSeparator
(passingfalse
will omit separator).- Overriding
localModulePrefixUseSeparator
in a Module to false will omit separator for local prefix applied by overridinglocalModulePrefix
in that Module.
- feat: add SRAMBlackBox (by @unlsycn in #4544)
- Add partial cross-compilation for Scala 3 (by @adkian-sifive in #4549)
Adds initial support for Scala 3 LTS version 3.3.3 - [util] Add a withShadowLayer Queue (by @seldridge in #4589)
- Add FormalTest marker (by @fabianschuiki in #4635)
- [core] Add layer block that returns colored wire (by @seldridge in #4623)
- Add UnitTest marker and test discovery utility (by @fabianschuiki in #4642)
- [chiselsim] Add Default (non-Ephemeral) Simulator (by @seldridge in #4665)
- [Chiselsim] Add WithTestingDirectory (by @seldridge in #4669)
- [chiselsim] Rewrite EphemeralSimulator in terms of DefaultSimulator (by @seldridge in #4675)
- [chiselsim] Add, use HasSimulator type class (by @seldridge in #4678)
- [firrtl] Add, use dramaticMessage (by @seldridge in #4684)
- [chiselsim] Add SimulatorAPI, reduce DefaultSimulator to nothing (by @seldridge in #4680)
- [chiselsim] Add ChiselSim APIs (by @seldridge in #4685)
- Add simple API for generating testharnesses inline (by @tmckay-sifive in #4629)
Add an API to generate testharnesses inline that are emitted as additional public modules in the output. - Dev/seldridge/switch to chisel settings (by @seldridge in #4708)
- Add RequireProperty and EnsureProperty (by @fabianschuiki in #4681)
- [chiselsim] Add FIRRTL macro control (by @seldridge in #4699)
- [Chiselsim] Replace Chiselspec w/ ChiselSim (by @seldridge in #4706)
- [testing] Add FileCheck API (by @seldridge in #4749)
- Add formal contracts (by @fabianschuiki in #4682)
- [testing] Add HasTestingDirectory subdir factory (by @seldridge in #4774)
- [chiselsim] Allow command line options to be passed to ChiselSim tests (by @seldridge in #4773)
- [scalatest] Add HasCliSimulator (by @seldridge in #4776)
- Change Data._fromUInt to protected (by @jackkoenig in #4782)
This enables external libraries like FixedPoint to override it. This is not an ideal API, but it works until we have a better way to do this. - [chiselsim] Add ControlAPI w/ Waveform Enable/Disable Support (by @seldridge in #4779)
- [ChiselSim] Factor reset procedure out of SimulatorAPI and into stimulus (by @seldridge in #4784)
- Add resetType to inline test TestParameters (by @tmckay-sifive in #4789)
- Add
resetType
tochisel3.experimental.inlinetest.TestParameters
. It will now be easier to properly handle DUTs with uninferred resets.
- Add
- [svsim] Add coverage collection to VCS backend (by @seldridge in #4793)
- [svsim][chiselsim] Add plusarg support (by @seldridge in #4796)
- [chiselsim] Add CLI FSDB, VPD support, enable waves (VCD, too) (by @seldridge in #4797)
- [chiselsim] Add waves at time zero to settings (by @seldridge in #4801)
- Provide custom error for Mem masked write wrong data type (by @jackkoenig in #4805)
The old error wasCannot prove that chisel3.UInt <:< chisel3.Vec[_]
, the new error isMasked write requires that the data type is a Vec, got chisel3.UInt
. - [chiselsim] HasCliOptions, EmitVcd for ChiselSim (by @seldridge in #4807)
- [chiselsim] Chisel/firtool update type classes (by @seldridge in #4808)
- [svsim] Add Coverage Directory and Name to VCS Backend (by @seldridge in #4812)
- [chiselsim] Add subdirectory to SimulatorAPI fns (by @seldridge in https://github.com/chipsalliance/chisel/pull/...
Chisel v6.7.0
This release primarily exists to help get users ready for the coming Chisel 7 release--there are several advanced APIs that are now deprecated and will be removed in the Chisel 7.0 release.
API Deprecation
- Add ElaboratedCircuit and deprecate use of internal ir Circuit (backport #4683) (by @chiselbot in #4693)
Change ChiselCircuitAnnotation and CircuitSerializationAnnotation to no longer be case classes to help with the transition to ElaboratedCircuit. - Add safer Chisel annotation API, deprecate old ones (backport #4643) (by @chiselbot in #4697)
Creating annotations in Chisel now requires reporting whatInstanceIds
are going to be annotated so that Chisel can do some safety checks. - [testers] Deprecate everything the testers package (backport #4742) (by @chiselbot in #4743)
- Mass deprecations, to be removed in Chisel 7 (backport #4754) (by @chiselbot in #4756)
- Warn on .asUInt|.asSInt(_: Int) (backport #4764) (by @chiselbot in #4766)
The user probably forgot .W. Apply the same technique as used for .U|.S.
Performance
- Speedup Computation for whether Aggregates containsProbe (backport #4656) (by @chiselbot in #4664)
Add a private containsProbe var to Aggregate and use it to speed up containsProbe checks.
Fixes
- fix up extra waveform dump behavior in svsim (backport #4592) (by @mergify[bot] in #4600)
- Fixes
sendBits()
's handling of signed numbers insvsim
(backport #4599) (by @jackkoenig in #4606) - Deterministic FibonacciLFSR reductions (backport #4688) (by @chiselbot in #4690)
- Escape special characters in Property String literals (backport #4564) (by @mergify[bot] in #4565)
This technically breaks backwards compatibility forfirrtl.ir.StringPropertyLiteral
butfirrtl.ir
is considered an internal API. - Dev/biancolin/fix module choice under di (backport #4569) (by @mergify[bot] in #4570)
- Support boring on original Module after .toInstance call (backport #4602) (by @mergify[bot] in #4604)
Documentation
- fix typo in SourceInfoTransform.scala (backport #4594) (by @mergify[bot] in #4597)
Fix typo in scaladoc for sourceInfoTransform macro
Dependency Updates
- Cross-compile the plugin for Scala 2.13.16 (by @jackkoenig in #4692)
Build and Internal Changes
- Update CD permissions for uploading release artifacts (backport #4529) (by @mergify[bot] in #4531)
Also bump softprops/action-gh-release to v2.1.0. - [6.x] Enable MiMa for v6.6.0 (by @chiselbot in #4527)
Full Changelog: v6.6.0...v6.7.0
Chisel v6.6.0
Features
- Implement Lookupable for HasTarget (used by SRAM) (backport #4481) (by @mergify[bot] in #4482)
- Allow BoringUtils to use existing port in a closed module (backport #4484) (by @mergify[bot] in #4486)
When trying to drill a port, it doesn't matter if the module is closed. We do not need to construct new hardware and can just use the existing port. - Implement Lookupable for Unit (backport #4497) (by @mergify[bot] in #4498)
API Modification
API Deprecation
Fixes
- Remove unnecessary overrides of lref and ref in Property (backport #4309) (by @mergify[bot] in #4310)
This fixes an issue with views of List of Property. - Improve error messages for empty Mux1H and PriorityMux (backport #4391) (by @mergify[bot] in #4393)
- Handle define on views of Probes (backport #4308) (by @mergify[bot] in #4311)
- Support BoringUtils.bore on OpaqueType wrapping a Property. (backport #4337) (by @mergify[bot] in #4338)
This ensures boring from an OpaqueType that wraps a Property uses the correct connection operator in the IR. - Make it legal to extract zero bits from a zero-width UInt (backport #4445) (by @mergify[bot] in #4447)
- Fix Arg.name and earlyLocalName for probes (backport #4359) (by @mergify[bot] in #4360)
- Fix Boring.rwTap on instance ports (backport #4451) (by @mergify[bot] in #4452)
BoringUtils.rwTap can now works on a port of aninstance: Instance[..]
- Fix Select.attachedTo (backport #4458) (by @mergify[bot] in #4461)
- Fix missing string interpolators, add -Xlint:missing-interpolator (backport #4471) (by @mergify[bot] in #4473)
- Add Probes to .toString Data methods (backport #4478) (by @mergify[bot] in #4480)
Probe chisel types now include the kind of probe and layer in their.toString
method
Documentation
Dependency Updates
- [6.x] Bump to CIRCT 1.62.1 (by @jackkoenig in #4387)
- [FIRRTL] LowerToHW: guard against folded operations (llvm/circt#7358)
- Add Scala 2.13.15 to compiler plugin cross-build (backport #4410) (by @mergify[bot] in #4413)
Add support for Scala 2.13.15
Build and Internal Changes
- Add permissions to website deployment job (backport #4285) (by @mergify[bot] in #4290)
- [6.x] Enable MiMa for v6.5.0 (by @chiselbot in #4279)
Full Changelog: v6.5.0...v6.6.0
Chisel v7.0.0-M2
Features
- Add getClassType API to Definition[T <: Class]. (by @mikeurbach in #3877)
This allows users to get a ClassType for use in other Property types, which is especially useful when constructing aggregate Property types of a specific Class. - Add
suggestName
method toHasTarget
(by @debs-sifive in #3881)
HasTarget
trait now also exposessuggestName
method of aNamedComponent
. - Print the optional Printable passed to stop ops (by @nandor in #3886)
The message passed tostop
is no longer ignored. The construct was extended to accept Printable. - Add DeletedPath for targets that no longer exist. (by @mikeurbach in #3937)
Sometimes a generator wants to emit a Path that targets some Data, but that Data isn't always produced by the generator. The DeletedPath can be used to represent the presence of a Path, but the absence of a Data in this case. - Make firtool options for
elaborateGeneratedModule
inworkspace
parametric (by @rameloni in #3952)
This adds the support inChiselsim
to configure the workspace with additional args forfirtool
(#3932). The user can specify how the sv circuit is compiled for simulation (i.e. including debug information-g
). - Add a new BoringUtils.drive API for boring to drive a sink. (by @mikeurbach in #3960)
This API allows users to bore to a sink they plan to drive, which complements the existing API to bore from a source to read. - Add requireIsAnnotatable for better errors when annotating literals (by @jackkoenig in #3968)
This gives much better error messages when accidentally dontTouching a literal - Add extension points on Data for customizing Connectable behavior. (by @mikeurbach in #3978)
The user can override these methods to customize how their Data applies waive, squeeze, and exclude in its Connectable. - Add support for generic intrinsic expressions and statements. (by @dtzSiFive in #3986)
Intrinsic expressions and statements are now supported, streamlining their use. These should be preferred over intrinsicModule's, which in the future will be deprecated and removed. - make SerializableModuleGenerator work with D/I (by @sequencer in #4003)
- Add Instanitate.definition to get Definition from cache. (by @sequencer in #4020)
- Add private Module API and internal DataMirror API for moduleIOs. (by @mikeurbach in #4036)
The DataMirror API allows users who know what they're doing to access a module's ports before it is closed. - [LTL] Added overloadings for AssertProperty (by @dobios in #4037)
- [Formal] Expose Btor2 target (by @dobios in #4035)
- [Formal] Allow for Chisel to be compiled to
btor2
for Bounded Model Checking usingChiselStage.emitBtor2
.
- [Formal] Allow for Chisel to be compiled to
- Add modulePorts and fullModulePorts in DataMirror for Instance (by @debs-sifive in #4076)
AddedmodulePorts
andfullModulePorts
methods inDataMirror
that returns all ports on anInstance
of a module. - Add .toRelativeTargetToHierarchy (by @mwachs5 in #4067)
Add .toRelativeTargetToHierarchy for getting .toRelativeTarget functionality when the root is a Definition or Instance. - Don't ... top of stack trace if it isn't actually trimmed (by @jackkoenig in #4142)
- [LTL] Add support for new sequence and property ops (by @dobios in #4120)
- [LTL] Add support for intersect, repeat, gotoRepeat, and nonConsecutiveRepeat ops.
- PeekPokeAPI: include source location on failed expect() calls. (by @kivikakk in #4144)
SimulationData.expect
calls now record source location and report it in theFailedExpectationException
on failure. - Preserve literals across .asUInt (by @jackkoenig in #4148)
This is mostly useful for initial values for async reset registers and for constructing literal values in testing contexts (e.g. ChiselSim). It also should slightly reduce memory use and.fir
size. - Preserve literal value across .asSInt and .zext (by @jackkoenig in #4151)
- Preserve UInt and SInt literals across .pad (by @jackkoenig in #4156)
- Add support for marking things as readOnly (by @jackkoenig in #4190)
Users can call.readOnly
on anyData
to prevent connections to the returned value. Resolves #1267. - Add ChiselStage.emitCHIRRTLFile (by @jackkoenig in #4232)
Emits a file without returning the serialized object which is more memory efficient and supports > 2 GiB of serialized FIRRTL text. - Make requireTypeEquivalent public and add context message (by @mwachs5 in #4243)
Make Add a contextual message to Data.requireTypeEquivalent and expose a public API in DataMirror.requireTypeEquivalent, to make it easier for user code to have good error messages when requiring type equivalence between two chisel Datas - Add map method for Valid (by @tymcauley in #4255)
Users can now apply a functionf
to thebits
field of aValid
instance with the newValid.map(f)
method. - Add more information when probe types don't match (by @mwachs5 in #4269)
Add more information to the error message when attempting toprobe.define
to a mismatched chisel type.
API Modification
- Fix tests to avoid inferred width ports on public modules. (by @dtzSiFive in #3869)
Main module are "public" (#3813, soon mandatory) which means they cannot have inferred widths or abstract resets. Code relying on old behavior will presently encounter an error infirtool
. - Remove circt.Intrinsic annotation. (by @dtzSiFive in #3945)
IntrinsicModules (intmodule's in FIRRTL) have replaced this entirely for some time now. - [svsim] Expose further verilator options for trace file name and simulation speed optimization (by @kammoh in #3985)
- Make AssertPropertyLike.createIntrinsic protected (by @jackkoenig in #4058)
It should never have been a public API - checkTypeEquivalence now considers ProbeInfo (by @mwachs5 in #4064)
Now checkTypeEquivalence will check whether data have the same probe type modifier including writeability and color (layer). - Make "deprecated public" binding APIs private (by @jackkoenig in #4177)
Thesechisel3.internal
APIs should never have been public in the first place. - Fix width of ChiselEnum values in emitted FIRRTL (by @jackkoenig in #4200)
Fixes #4159.
Previously, the width reported by Chisel under.getWidth
was inconsistent with the width of the emitted FIRRTL forChiselEnum
values cast toUInt
.
Temporarily preserve the old behavior under CLI option--use-legacy-width
(formerly known as--use-legacy-shift-right-width
). Users are encouraged to build Verilog with and without this option enabled and diff the result to verify that this change in width behavior did not silently affect the correctness of their designs. - Preserve literals across .asTypeOf (by @jackkoenig in #4168)
Casting a literal (of any type) to another type with .asTypeOf will result in a literal of the new type. For non-literals, the FIRRTL representation will now be a little bit more efficient. - Intern Width (by @jackkoenig in #4242)
- UnknownWidth becomes a case object (Drop
()
when using it). - KnownWidths 0-1024 are interned
- UnknownWidth becomes a case object (Drop
- SourceInfo: simplify the common case for makeMessage, print it differently (by @mwachs5 in #4249)
Add a default to SourceInfo.makeMessage() so that users don't always have to write makeMessage(x => x). Change the toString of SourceLine so that it puts a colon instead of a space between the file name and line number, which makes it possible to click-to-source in editors like VSCode. - Micro-optimize Direction (by @jackkoenig in #4251)
- Specified and actual direction information are each now stored as single bytes rather than references.
- This reduces the memory use of a typical bound UInt from 72 bytes shallow, 128 bytes retained to 64 bytes shallow, 120 bytes retained.
- The change is mostly source compatible, but ActualDirection.Bidirectional, has changed slightly to memoize its two possibilities (
Bidirectional.Default
andBidirectional.Flipped
). There are deprecations for the typical APIs
API Deprecation
- IntrinsicModule: deprecate in favor of intrinsic expressions. (by @dtzSiFive in #4060)
IntrinsicModule has been replaced by Intrinsic and IntrinsicExpr ...