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 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.
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 ofNMIGEN_*
environment variables.Update shell environment to use
AMARANTH_ENV_<TOOLCHAIN>
(with all-uppercase<TOOLCHAIN>
name) environment variable names instead ofAMARANTH_ENV_<Toolchain>
orNMIGEN_ENV_<Toolchain>
(with mixed-case<Toolchain>
name).
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 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 8: Aggregate extensibility
RFC 9: Constant initialization for shape-castable objects
RFC 10: Move Repl to Value.replicate
RFC 15: Lifting shape-castable objects
Language changes
Added:
ShapeCastable
, similar toValueCastable
.Added:
Value.as_signed()
andValue.as_unsigned()
can be used on left-hand side of assignment (with no difference in behavior).Added:
Const.cast()
. (RFC 4)Added:
Value.matches()
andwith m.Case():
accept any constant-castable objects. (RFC 4)Added:
Value.replicate()
, supersedingRepl
. (RFC 10)Changed: creating a
Signal
with a shape that is aShapeCastable
implementingShapeCastable.__call__()
wraps the returned object using that method. (RFC 15)Changed:
Value.cast()
castsValueCastable
objects recursively.Changed:
Value.cast()
treats instances of classes derived from bothenum.Enum
andint
(includingenum.IntEnum
) as enumerations rather than integers.Changed:
Value.matches()
with an empty list of patterns returnsConst(1)
rather thanConst(0)
, to match the behavior ofwith m.Case():
.Changed:
Cat
warns if an enumeration without an explicitly specified shape is used. (RFC 3)Deprecated:
Const.normalize()
. (RFC 5)Deprecated:
Repl
; useValue.replicate()
instead. (RFC 10)Removed: (deprecated in 0.1) casting of
Shape
to 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)
Toolchain changes
Changed: text files are written with LF line endings on Windows, like on other platforms.
Added:
debug_verilog
override inbuild.TemplatedPlatform
.Deprecated: use of mixed-case toolchain environment variable names, such as
NMIGEN_ENV_Diamond
orAMARANTH_ENV_Diamond
; use upper-case environment variable names, such asAMARANTH_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()
andback.verilog.convert()
without an explicit ports= argument.Removed: (deprecated in 0.3)
test
.
Platform integration changes
Added:
OSCH
asdefault_clk
clock source invendor.lattice_machxo_2_3l.LatticeMachXO2Or3LPlatform
.Added: Xray toolchain support in
vendor.xilinx.XilinxPlatform
.Removed: (deprecated in 0.3)
lattice_machxo2
Removed: (deprecated in 0.3)
lattice_machxo_2_3l.LatticeMachXO2Or3LPlatform
SVF 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 nm
explicit prelude imports to beimport amaranth as am
, and adjust the code to use theam.*
namespace.Update
import nmigen.*
imports to beimport amaranth.*
.Update
import nmigen_boards.*
imports to beimport amaranth_boards.*
.Update board definitions using
vendor.lattice_machxo2.LatticeMachXO2Platform
to usevendor.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.XilinxUltrascalePlatform
to usevendor.xilinx.XilinxPlatform
.Switch uses of
hdl.ast.UserValue
toValueCastable
; note thatValueCastable
does not inherit fromValue
, and inheriting fromValue
is not supported.Switch uses of
back.pysim
tosim
.Add an explicit
ports=
argument to uses ofback.rtlil.convert()
andback.verilog.convert()
if missing.Remove uses of
test.utils.FHDLTestCase
and vendor the implementation oftest.utils.FHDLTestCase.assertFormal
if 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:
Value
can be used withabs()
.Added:
Value.rotate_left()
andValue.rotate_right()
.Added:
Value.shift_left()
andValue.shift_right()
.Added:
ValueCastable
.Deprecated:
ast.UserValue
; useValueCastable
instead.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.AsyncFIFO
is reset when the write domain is reset.Added:
fifo.AsyncFIFO.r_rst
is asserted when the write domain is reset.Added:
fifo.FIFOInterface.r_level
andfifo.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.verilog
will fall back to the amaranth-yosys PyPI package. The package can be installed asamaranth[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
; usesim
instead.Removed: The
with Simulator(fragment, ...) as sim:
form.Removed:
sim.Simulator.add_process()
with a generator argument.Deprecated:
sim.Simulator.step()
; usesim.Simulator.advance()
instead.Added:
build.BuildPlan.execute_remote_ssh()
.Deprecated:
test.utils.FHDLTestCase
, with no replacement.Deprecated:
back.rtlil.convert()
andback.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; useAMARANTH_*
environment variables instead.
Platform integration changes
Added:
SB_LFOSC
andSB_HFOSC
asdefault_clk
clock sources inlattice_ice40.LatticeICE40Platform
.Added:
lattice_machxo2.LatticeMachXO2Platform
generates binary (.bit
) bitstreams.Deprecated:
lattice_machxo2
; uselattice_machxo_2_3l.LatticeMachXO2Platform
instead.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.LatticeMachXO2Or3LPlatform
generates separate Flash and SRAM SVF programming vectors,{{name}}_flash.svf
and{{name}}_sram.svf
.Deprecated:
lattice_machxo_2_3l.LatticeMachXO2Or3LPlatform
SVF programming vector{{name}}.svf
; use{{name}}_flash.svf
instead.Added:
quicklogic.QuicklogicPlatform
.Added:
cyclonev_oscillator
asdefault_clk
clock source inintel.IntelPlatform
.Added:
add_settings
andadd_constraints
overrides inintel.IntelPlatform
.Added:
xilinx.XilinxPlatform
.Deprecated:
xilinx_spartan_3_6.XilinxSpartan3APlatform
,xilinx_spartan_3_6.XilinxSpartan6Platform
,xilinx_7series.Xilinx7SeriesPlatform
,xilinx_ultrascale.XilinxUltrascalePlatform
; usexilinx.XilinxPlatform
instead.Added: Mistral toolchain support for
intel.IntelPlatform
.Added:
synth_design_opts
override inxilinx.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
.