All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Fixed a bug with typing asserts that caused resource unwinding to fail on differential pairs.
- Added new
torii.platform.formal.FormalPlatform
for formal verification of Torii designs. - Added formal platform examples
- Added
Value.inc()
andValue.dec()
calls to help deal with thesig.eq(sig + 1)
pattern that is all too common. - Added explicit mention of Python 3.13 support.
- Added
structured records
to allow for ease of typingtorii.hdl.rec.Record
's
- Torii
Elaboratable
's now have a new optionalformal
function for use in formal verification with the ToriiFormalPlatform
. - Torii platforms now have
get_override_list
andget_override_int
overrides for platform template support. - Torii platforms now have optional
description
andpretty_name
properties. - Use of
read_ilang
has been replaced withread_rtlil
in the Gowin platform, which was the only platform that used the deprecated Yosys command.
- Moved the contents of
torii.asserts
totorii.lib.formal
.
- Removed deprecated
log2_int
- Removed deprecated
torii.platform.vendor.intel
Module - Removed deprecated parameter
run_script
fromBuildPlan.execute_local
- Fixed huge chunk of typing, lots to do but should improve useability and ergonomics.
- Fixed a resource layout issue within the
torii.platform.resources.interface.HyperBusResource
- Fixed a bug in the definition of the
QSPIResource
intorii.platform.resources.memory
, again...
- Fixed a bug in the definition of the
QSPIResource
intorii.platform.resources.memory
- Rough initial type annotations to
torii.hdl.mem
- Added the ability to specify
tar
for thetorii.build.run.BuildPlan.archive
call. - Added check inside
Record
s to ensure they're properly constructed prior to accessing their fields. - Added the ability to override a Value's operators.
- Added the ability to put non-signals into
write_vcd
'straces
parameter. - Added name disambiguation for traced signals where they share the same name.
- Added
ValueLike
andShapeLike
, mainly for additional typing and instance checking assistance. - Added the ability for
Cat
andSlice
, statements to be cast as aConst
value. - Added
#!/bin/sh
to the top of build shell scripts. - Added
BuildPlan.extract
to extract files from the build plan without having to run it, this replaces the functionality that occurred whenBuildPlan.execute_local
was passed withrun_script = False
. - Added
BuildPlan.execute_docker
to allow for invoking a build inside a specified docker container. - Added
log2_ceil
andlog2_exact
to replacelog2_int
with theFalse
andTrue
params respectively. ShapeCastable
objects can now be const initialized.
- Improved Oscillator frequency diagnostics for
torii.vendor.GowinPlatform
. - Fixed
torii.lib.fifo
FIFOs to use the new memory semantics correctly. torii.lib.soc.csr
Multiplexer shadow registers have been re-designed.- Bumped minimum Python version from 3.9 to 3.10.
- Renamed
IntelPlatform
toAlteraPlatform
. - FWFT mode is default for all FIFOs now.
- Bumped the minimum version of Yosys to 0.30.
- Empty
Case
blocks now throw an exception when being used in place of aDefault
block - Behavioral change warning in empty
Value.matches()
where currently it returnsConst(1)
but will returnConst(0)
in the future. - We now only close a VCD or GTKW file in the simulator if it was opened by the simulator.
- Build shell scripts will now be marked as executable on unix-like hosts.
Instance
objects know collect source location information.- Memories have been turned into a first-class IR representation.
- Out-of-range rests now error, not just warn.
- A warning is now generated when a
Case()
falls after aDefault()
, and an error is raised when there are multipleDefault()
's in aSwitch
- Shape casting a
range(1)
now resolves to anunsigned(0)
- Deprecated
torii.vendor.intel
andtorii.vendor.intel.IntelPlatform
in favor oftorii.vendor.altera
andtorii.vendor.altera.AlteraPlatform
. - Deprecated
execute_local()
'srun_script
param in favor ofextract
- Deprecated use of
log2_int
in favor oflog2_ceil
andlog2_exact
where appropriate.
- Removed deprecated
torii.platform.vendor.lattice_*
modules. - Removed deprecated
Repl
call in favor ofValue.replicate
. - Removed
set -x
if theverbose
param is set for platform builds. - Removed the last little bit of
$verilog_initial_trigger
traces. - Removed sub-classing of
AnyValue
andProperty
- Fixed
ToriiTestCase.settle
to handle "0" count settles. - Fixed
torii.hdl.dsl.Module
's constructor to properly usesuper()
rather than a parent class name call. - Load of typing annotation fixes.
- Cleaned up a load of blank
asserts
, they should now have more clear error diagnostics. - Fixed a handful of typos throughout the library and documentation.
- Fixed tracer calls for Python 3.13
- Fixed
Array
not being indexable by aValueCastable
. - Fixed
ValueCastable
not being accepted as a simulation coroutine command. - Fixed handling of redundant
Case
branches. - Fixed
Value.shift_right
andValue.as_signed
edge cases. - Fixed using 0-width
Switch
's with integer keys. - Trying to use the Python
in
operator on aValue
now raises a sensible error. - When indexing or slicing a Value with another Value, it now raises an error and suggests to use
Value.bit_select
orValue.word_select
instead. - Fixed simulation look when process catches an injected exception.
- Added some minor comments to the
torii.sim.core
module about the function of some of the objects. - Added
torii.vendor.gowin.GowinPlatform
. - Added support for Xilinx Atrix UltraScale+ part numbers.
- Added
env
argument toBuildPlan.execute_local
. - Allowed removing
src
attributes on RTLIL output.
- Moved the Lattice platform defs into their own submodule
torii.platform.vendor.lattice
. - Replaced the
distutils.ccompiler
with thesetuptools.command.build_ext
module fortorii.tools.cxx
. - Disabled the warning emitted on
~True
/~False
when using it as a value in Torii in Python versions older than 3.12. - Relaxed the
PyVCD
dependency version to now also include0.5
. - Ensured
Value.__abs__
now returnsunsigned
Shape
. - Restructured the
torii.lib.coding
module away from being a monolithic file. - Prohibited absolute paths in
BuildPlan.add_file
. - Added lowering of
Memory
's directly to RTLIL$mem_v2
cells. - Ensured
Part
offsets are always unsigned. - Disallowed
signed(0)
values.
- Old Lattice platform names have been deprecated in favor of the new platform location.
- Deprecated
Repl
in favor ofValue.replicate
.
- Removed the
torii.cli
module - Removed the
remote-build
category from thesetup.py
extra_requires
due to removal of remote builds.
- Fixed an issue where the
IrDAResource
was not imported into thetorii.platform.resources
__init__.py
- Fixed the
torii.utils.tracer
module to properly handleSTORE_DEREF
andEXTENDED_ARG
s. - Fixed signed value normalization inside
Const
. - Fixed issue with
Value.rotate_left
/Value.rotate_right
on 0-width values. - Fixed a semantic issue with range handling inside
Shape.cast
. - Fixed an off-by-one issue in the validation of
Slice
es. - Fixed the signedness of the resulting
Shape
when doing subtraction. - Fixed handling of
ValueKey.__eq__
. - Fixed source-location attribution for
Slice
es. - Fixed the order of when
Value.cast
should have been called in thePart
andSlice
constructors. - Fixed a warning on python 3.12 with the
pyrtl
simulator warning about bitwise negations on booleans. - Fixed a test case failure that would only occur on Windows due to it's backwards path separator.
- Ensured
Value.cast
is insidePart
's andSlice
s constructor. - Fixed test case that was having issues on Windows paths.
- Removed translation of empty subfragments as that would cause unintentional blackboxing on Vivado and Yosys.
- Added
-norom
and-proc
options to verilog generation if available in Yosys. - Added a small tutorial on using
platform.add_file
withInstance
for referencing external modules. - Added conversion helpers to/from picoseconds.
- Updated the minimum Yosys version to
0.15
. - Minor typing updates.
Value.matches
now returnsConst(1)
when no value is supplied.Platform.build
now allows for lists of strings to be passed for argument.- Invocations of
read_ilang
in Yosys scripts has been replaced withread_rtlil
asread_ilang
has been deprecated for a while now. - Replaced
sim_case
inToriiTestCase
withToriiTestCase.simulation
and added two attributes for defining the simulation domainToriiTestCase.comb_domain
andToriiTestCase.sync_domain
, the latter of which takes adomain =
param to specify which synchronous domain it is using. - The default platform in
ToriiTestCase
has been replaced withNone
, rather thanMockPlatform
- Gated the initialization of the
ToriiTestCase
dut
behind a check to prevent non-simulating tests, and tests that don't use the DUT from exploding. - Made the
connectors
property onPlatform
's optional, it now currently defaults to an empty list. - Updated rich dependency version from
~=12.6.0
to>=12.6.0
- Deprecated the current
torii.cli.*
methods in anticipation of replacing them.
- Removed remote SSH build support
- Removed
Value.__hash__
- Corrected how environment variables were extracted making them more consistent.
- Fixed the
ToriiTestCase
so it's now properly functional - Clarified the usage of
Cat
in the language documentation, noting that it can take more than two arguments for concatenation. - Added a warning on potential off-by-one errors when invoking
Signal
with arange
and having the reset value be the same as the end of the range.
- Handle
Repl
's inValueKey
- Allow for
IntEnum
's inValue.cast
- Added proper testing for the
torii.util.units
module. - Added proper testing for the
torii.util.string
module. - Added support for
name =
in property checks, such asAssert
, etc. - Added exports for
convert
andconvert_fragment
for rtlil, cxxrtl, and verilog into the roottorii.back
module.
- Updated the copyright years in the license file.
- Hardened the RTLIL backend against generating Yosys reserved port names.
- Removed warning on
IntEnum
's inCat
(meow) - Ensured that files are always are written with Unix
LF
line endings. - Renamed the
_toolchain
module totools
. - Moved the
tool_env_var
fromtorii.tools
intotorii.util.string
. - Renamed nox session names for
flake8
andmypy
intolint
andtypecheck
- Renamed nox session names for
build_dists
andupload_dist
intobuild
andupload
- Added a default help formatter for the built-in CLI stub.
- Deprecated the remote SSH builds.
- Deprecated passing non
Elaboratable
orFragment
objects toFragment.get
.
- Removed
Shape
andtuple
casts and comparisons. - Removed
UserValue
and associated machinery. - Removed default ports from
rtlil_convert
andverilog_convert
. - Removed
step
fromcore.Simulator
in favor ofadvance
. - Removed support for the
AMARANTH_ENV_*
environment variables. - Removed the
_BuiltinYosys
proxy object and associated bits.
- Fixed an issue with the
TORII_
environment variables not being recognized. - Fixed missing f-strings in the
cxxrtl
,ast
, andintel
modules. - Fixed an issue in the
LatticeECP5
platform that would have caused broken SystemVerilog inclusions. - Fixed a bunch of miscellaneous spelling things.
- Fixed an issue where
src
attributes would be added to generated RTLIL even if theemit_src
attribute wasFalse
. - Fixed an issue where the tracer would encounter an unknown opcode and would return None.
- Fixed the
iec_size
utility method to behave a bit better with strange sizes. - Fixed the
tcl_quote
string method that would leave un-escaped"
's causing the TCL script to fail due to invalid syntax. - Fixed an issue in the
LatticeICE40
platform where theIceStorm
toolchain environment variable was not being normalized properly.
- Fixed a small issue with the newline changes that caused synthesis to fail
- Fixed up the ULPI instance to properly handle the
clk
signal and constrain it
- Fixed the project URLs for the documentation and package.
- Fixed some minor issues in the install documentation.
- Fixed the line endings on generated *nix build scripts.
- Fixed an issue where the built-in test harness was broken with writing VCDs.
- Fixed issue with
invoke_tool
not emitting the environment variable properly
- Folded in
stdio
library components. - Folded in
soc
library components. - Folded in resources from torii-boards into the
torii.platform.resources
module. - Added flake8 configuration file.
- Added mypy configuration file.
- Added Code Of Conduct.
- Added a
noxfile.py
for use with nox. - Added an updated python unittest wrapper for use with Torii.
- Added string utility module.
- Added units utility module.
- Added dependency
rich
. - Added
CANResource
totorii.platform.resources.interface
. - Added
ice40warmboot
totorii.lib.vendor.lattice.ice40
. - Added empty
torii.lib.vendor.xilinx
module. - Added
VGADACResource
totorii.platform.resources.display
. - Added preliminary support for the yosys+nextpnr-xilinx flow on the Xilinx platform.
- Added Changelog file.
- Added
QSPIFlashResource
totorii.platform.resources.memory
. - Added
JTAGResource
totorii.platform.resources.interface
. - Added
EthernetResource
totorii.platform.resources.interface
.
- Refactored the documentation.
- Migrated string escape functions from the
TemplatedPlatform
into the new strings utility module. - Moved
log2_int
andbits_for
into the new units utility module. - Moved vendor modules into
torii.platform.vendor
. - Replaced deprecated
abstractproperties
withproperty
/abstractmethod
combo. - Moved the
tracer
module intotorii.util
. - Moved the
_unused
module intotorii.hdl
.
- Removed the
nMigen
compatibility layer. - Removed the
migen
compatibility layer. - Removed the compatibility tests.
- Removed the RPC server.
- Removed the old FHDL test case.
- Removed the
tuple
case fromShape
. - Removed the warning from
rtlil.convert
andverilog.convert
about implicit ports. - Removed the
_ignore_deprecated
decorator. - Removed the
C
alias forConst
.
- Fixed the package name.
- Fixed the package authors.
- Fixed the package trove classifiers.
- Fixed all flake8 warnings on the entire codebase.
- Fixed indentation.
- Fixed docstring formatting.
No changelog is provided for these versions as they are all older tagged releases of Amaranth from before the fork.