Changelog
This document describes changes to the public interfaces in the Amaranth language and standard library. It does not include most bug fixes or implementation changes.
Version 0.4 (unreleased)
Support has been added for a new and improved way of defining data structures in amaranth.lib.data and component interfaces in amaranth.lib.wiring, as defined in RFC 1 and RFC 2. Record has been deprecated. In a departure from the usual policy, to give designers additional time to migrate, Record will be removed in Amaranth 0.6 (one release later than normal).
Support for enumerations has been extended. A shape for enumeration members can be provided for an enumeration class, as defined in RFC 3.
The language includes several new extension points for integration with Value based data structures defined outside of the core language. In particular, Signal(shape) may now return a Signal object wrapped in another if shape implements the call protocol, as defined in RFC 15.
Several issues with shape inference have been resolved. Notably, a - b where both a and b are unsigned now returns a signed value.
Support for Python 3.6 and 3.7 has been removed, and support for Python 3.11 and 3.12 has been added.
Features deprecated in version 0.3 have been removed. In particular, the nmigen.* namespace is not provided, # nmigen: annotations are not recognized, and NMIGEN_* envronment variables are not used.
The Migen compatibility layer remains deprecated (as it had been since Amaranth 0.1), and is now scheduled to be removed in version 0.5.
Migrating from version 0.3
Apply the following changes to code written against Amaranth 0.3 to migrate it to version 0.4:
- Update shell environment to use - AMARANTH_*environment variables instead of- NMIGEN_*environment variables.
- Update shell environment to use - AMARANTH_ENV_<TOOLCHAIN>(with all-uppercase- <TOOLCHAIN>name) environment variable names instead of- AMARANTH_ENV_<Toolchain>or- NMIGEN_ENV_<Toolchain>(with mixed-case- <Toolchain>name).
- Update imports of the form - from amaranth.vendor.some_vendor import SomeVendorPlatformto- from amaranth.vendor import SomeVendorPlatform. This change will reduce future churn.
- Replace uses of - Const.normalize(value, shape)with- Const(value, shape).value.
- Replace uses of - Repl(value, count)with- value.replicate(count).
- Replace uses of - Recordwith- amaranth.lib.dataand- amaranth.lib.wiring. The appropriate replacement depends on the use case. If- Recordwas being used for data storage and accessing the bit-level representation, use- amaranth.lib.data. If- Recordwas being used for connecting design components together, use- amaranth.lib.wiring.
- Replace uses of - Sample,- Past,- Stable,- Rose,- Fellwith a manually instantiated register, e.g.- past_x = Signal.like(x); m.d.sync += past_x.eq(x).
- Remove uses of - amaranth.compatby migrating to native Amaranth syntax.
- Ensure the - Pininstance returned by- platform.requestis not cast to value directly, but used for its fields. Replace code like- leds = Cat(platform.request(led, n) for n in range(4))with- leds = Cat(platform.request(led, n).o for n in range(4))(note the- .o).
- Remove uses of - amaranth.lib.scheduler.RoundRobinby inlining or copying the implementation of that class.
- Remove uses of - amaranth.lib.fifo.SyncFIFO(fwft=False)and- amaranth.lib.fifo.FIFOInterface(fwft=False)by converting code to use- fwft=TrueFIFOs or copying the implementation of those classes.
While code that uses the features listed as deprecated below will work in Amaranth 0.4, they will be removed in the next version.
Implemented RFCs
- RFC 1: Aggregate data structure library 
- RFC 2: Interface definition library 
- RFC 3: Enumeration shapes 
- RFC 4: Constant-castable expressions 
- RFC 5: Remove - Const.normalize
- RFC 6: CRC generator 
- RFC 8: Aggregate extensibility 
- RFC 9: Constant initialization for shape-castable objects 
- RFC 10: Move - Replto- Value.replicate
- RFC 18: Reorganize vendor platforms 
- RFC 19: Remove - amaranth.lib.scheduler
- RFC 15: Lifting shape-castable objects 
- RFC 20: Deprecate non-FWFT FIFOs 
- RFC 22: Define - ValueCastable.shape()
- RFC 28: Allow overriding - Valueoperators
- RFC 31: Enumeration type safety 
- RFC 34: Rename - amaranth.lib.wiring.Interfaceto- PureInterface
- RFC 35: Add - ShapeLike,- ValueLike
- RFC 37: Make - Signatureimmutable
- RFC 38: - Component.signatureimmutability
Language changes
- Added: - ShapeCastable, similar to- ValueCastable.
- Added: - ShapeLikeand- ValueLike. (RFC 35)
- Added: - Value.as_signed()and- Value.as_unsigned()can be used on left-hand side of assignment (with no difference in behavior).
- Added: - Const.cast(). (RFC 4)
- Added: - Value.matches()and- with m.Case():accept any constant-castable objects. (RFC 4)
- Added: - Value.replicate(), superseding- Repl. (RFC 10)
- Added: - Memorysupports transparent read ports with read enable.
- Changed: creating a - Signalwith a shape that is a- ShapeCastableimplementing- ShapeCastable.__call__()wraps the returned object using that method. (RFC 15)
- Changed: - Value.cast()casts- ValueCastableobjects recursively.
- Changed: - Value.cast()treats instances of classes derived from both- enum.Enumand- int(including- enum.IntEnum) as enumerations rather than integers.
- Changed: - Value.matches()with an empty list of patterns returns- Const(1)rather than- Const(0), to match the behavior of- with m.Case():.
- Changed: - Catwarns if an enumeration without an explicitly specified shape is used. (RFC 3)
- Deprecated: - ast.Sample,- ast.Past,- ast.Stable,- ast.Rose,- ast.Fell. (Predating the RFC process.)
- Deprecated: - Const.normalize(); use- Const(value, shape).valueinstead of- Const.normalize(value, shape). (RFC 5)
- Deprecated: - Repl; use- Value.replicate()instead. (RFC 10)
- Deprecated: - Record; use- amaranth.lib.dataand- amaranth.lib.wiringinstead. (RFC 1, RFC 2)
- Removed: (deprecated in 0.1) casting of - Shapeto and from a- (width, signed)tuple.
- Removed: (deprecated in 0.3) - ast.UserValue.
- Removed: (deprecated in 0.3) support for - # nmigen:linter instructions at the beginning of file.
Standard library changes
- Added: - amaranth.lib.enum. (RFC 3)
- Added: - amaranth.lib.data. (RFC 1)
- Added: - amaranth.lib.crc. (RFC 6)
- Deprecated: - amaranth.lib.scheduler. (RFC 19)
- Deprecated: - amaranth.lib.fifo.FIFOInterfacewith- fwft=False. (RFC 20)
- Deprecated: - amaranth.lib.fifo.SyncFIFOwith- fwft=False. (RFC 20)
Toolchain changes
- Changed: text files are written with LF line endings on Windows, like on other platforms. 
- Added: - debug_verilogoverride in- build.TemplatedPlatform.
- Added: - env=argument to- build.run.BuildPlan.execute_local().
- Deprecated: use of mixed-case toolchain environment variable names, such as - NMIGEN_ENV_Diamondor- AMARANTH_ENV_Diamond; use upper-case environment variable names, such as- AMARANTH_ENV_DIAMOND.
- Removed: (deprecated in 0.3) - sim.Simulator.step().
- Removed: (deprecated in 0.3) - back.pysim.
- Removed: (deprecated in 0.3) support for invoking - back.rtlil.convert()and- back.verilog.convert()without an explicit ports= argument.
- Removed: (deprecated in 0.3) - test.
Platform integration changes
- Added: - icepack_optsoverride in- vendor.LatticeICE40Platform.
- Added: - OSCHas- default_clkclock source in- vendor.LatticeMachXO2Platform,- vendor.LatticeMachXO3LPlatform.
- Added: Xray toolchain support in - vendor.XilinxPlatform.
- Added: - vendor.GowinPlatform.
- Deprecated: - vendor.intel,- vendor.lattice_ecp5,- vendor.lattice_ice40,- vendor.lattice_machxo2_3l,- vendor.quicklogic,- vendor.xilinx; import platforms directly from- vendorinstead. (RFC 18)
- Removed: (deprecated in 0.3) - lattice_machxo2
- Removed: (deprecated in 0.3) - lattice_machxo_2_3l.LatticeMachXO2Or3LPlatformSVF programming vector- {{name}}.svf.
- Removed: (deprecated in 0.3) - xilinx_spartan_3_6.XilinxSpartan3APlatform,- xilinx_spartan_3_6.XilinxSpartan6Platform,- xilinx_7series.Xilinx7SeriesPlatform,- xilinx_ultrascale.XilinxUltrascalePlatform.
Version 0.3
The project has been renamed from nMigen to Amaranth.
Features deprecated in version 0.2 have been removed.
Migrating from version 0.2
Apply the following changes to code written against nMigen 0.2 to migrate it to Amaranth 0.3:
- Update - import nmigen as nmexplicit prelude imports to be- import amaranth as am, and adjust the code to use the- am.*namespace.
- Update - import nmigen.*imports to be- import amaranth.*.
- Update - import nmigen_boards.*imports to be- import amaranth_boards.*.
- Update board definitions using - vendor.lattice_machxo2.LatticeMachXO2Platformto use- vendor.lattice_machxo_2_3l.LatticeMachXO2Platform.
- Update board definitions using - vendor.xilinx_spartan_3_6.XilinxSpartan3APlatform,- vendor.xilinx_spartan_3_6.XilinxSpartan6Platform,- vendor.xilinx_7series.Xilinx7SeriesPlatform,- vendor.xilinx_ultrascale.XilinxUltrascalePlatformto use- vendor.xilinx.XilinxPlatform.
- Switch uses of - hdl.ast.UserValueto- ValueCastable; note that- ValueCastabledoes not inherit from- Value, and inheriting from- Valueis not supported.
- Switch uses of - back.pysimto- sim.
- Add an explicit - ports=argument to uses of- back.rtlil.convert()and- back.verilog.convert()if missing.
- Remove uses of - test.utils.FHDLTestCaseand vendor the implementation of- test.utils.FHDLTestCase.assertFormalif necessary.
While code that uses the features listed as deprecated below will work in Amaranth 0.3, they will be removed in the next version.
Language changes
- Added: - Valuecan be used with- abs().
- Added: - Value.rotate_left()and- Value.rotate_right().
- Added: - Value.shift_left()and- Value.shift_right().
- Added: - ValueCastable.
- Deprecated: - ast.UserValue; use- ValueCastableinstead.
- Added: Division and modulo operators can be used with a negative divisor. 
- Deprecated: - # nmigen:linter instructions at the beginning of file; use- # amaranth:instead.
Standard library changes
- Added: - cdc.PulseSynchronizer.
- Added: - cdc.AsyncFFSynchronizer.
- Changed: - fifo.AsyncFIFOis reset when the write domain is reset.
- Added: - fifo.AsyncFIFO.r_rstis asserted when the write domain is reset.
- Added: - fifo.FIFOInterface.r_leveland- fifo.FIFOInterface.w_level.
Toolchain changes
- Changed: Backend and simulator reject wires larger than 65536 bits. 
- Added: Backend emits Yosys enumeration attributes for enumeration-shaped signals. 
- Added: If a compatible Yosys version is not installed, - back.verilogwill fall back to the amaranth-yosys PyPI package. The package can be installed as- amaranth[builtin-yosys]to ensure this dependency is available.
- Added: - back.cxxrtl.
- Added: - sim, a simulator interface with support for multiple simulation backends.
- Deprecated: - back.pysim; use- siminstead.
- Removed: The - with Simulator(fragment, ...) as sim:form.
- Removed: - sim.Simulator.add_process()with a generator argument.
- Deprecated: - sim.Simulator.step(); use- sim.Simulator.advance()instead.
- Added: - build.BuildPlan.execute_remote_ssh().
- Deprecated: - test.utils.FHDLTestCase, with no replacement.
- Deprecated: - back.rtlil.convert()and- back.verilog.convert()without an explicit ports= argument.
- Changed: VCD output now uses a top-level “bench” module that contains testbench only signals. 
- Deprecated: - NMIGEN_*environment variables; use- AMARANTH_*environment variables instead.
Platform integration changes
- Added: - SB_LFOSCand- SB_HFOSCas- default_clkclock sources in- lattice_ice40.LatticeICE40Platform.
- Added: - lattice_machxo2.LatticeMachXO2Platformgenerates binary (- .bit) bitstreams.
- Added: - lattice_machxo_2_3l.LatticeMachXO3LPlatform.
- Deprecated: - lattice_machxo2; use- lattice_machxo_2_3l.LatticeMachXO2Platforminstead.
- Removed: - xilinx_7series.Xilinx7SeriesPlatform.grade; this family has no temperature grades.
- Removed: - xilinx_ultrascale.XilinxUltrascalePlatform.grade; this family has temperature grade as part of speed grade.
- Added: Symbiflow toolchain support for - xilinx_7series.Xilinx7SeriesPlatform.
- Added: - lattice_machxo_2_3l.LatticeMachXO2Or3LPlatformgenerates separate Flash and SRAM SVF programming vectors,- {{name}}_flash.svfand- {{name}}_sram.svf.
- Deprecated: - lattice_machxo_2_3l.LatticeMachXO2Or3LPlatformSVF programming vector- {{name}}.svf; use- {{name}}_flash.svfinstead.
- Added: - quicklogic.QuicklogicPlatform.
- Added: - cyclonev_oscillatoras- default_clkclock source in- intel.IntelPlatform.
- Added: - add_settingsand- add_constraintsoverrides in- intel.IntelPlatform.
- Added: - xilinx.XilinxPlatform.
- Deprecated: - xilinx_spartan_3_6.XilinxSpartan3APlatform,- xilinx_spartan_3_6.XilinxSpartan6Platform,- xilinx_7series.Xilinx7SeriesPlatform,- xilinx_ultrascale.XilinxUltrascalePlatform; use- xilinx.XilinxPlatforminstead.
- Added: Mistral toolchain support for - intel.IntelPlatform.
- Added: - synth_design_optsoverride in- xilinx.XilinxPlatform.
Versions 0.1, 0.2
No changelog is provided for these versions.
The PyPI packages were published under the nmigen namespace, rather than amaranth.