Releases: fischermoseley/manta
v1.1.0
Manta v1.1.0. This release contains a number of improvements, including:
Improvements for Users:
- A new Amaranth-native API, allowing Manta to be used natively in Amaranth projects, as well as in traditional Verilog-based workflows. This required (re)writing a bunch of docs, adding generated API docs with
mkdocstrings
, porting the Verilog examples, and writing some new tests. Hopefully these efforts make for a stable and intuitive experience for folks trying the API! - Manta configuration files (
manta.yaml
) can now be dumped from the Amaranth-native API, allowing pure-Amaranth designs to export a config that can be used in external applications (such as the Web Terminal that's currently in development). - Timescales in VCD files exported by the Logic Analyzer now (approximately) match the actual, real-world time between samples (#24). Thanks @carabsc!
- While communicating over UART, the host will now inject newlines every so often to stall the UART bus, allowing time for the FPGA to catch up in cases where the FPGA clock is slightly slower than the host's clock. This prevents packets from being dropped, resolving #18.
- The Logic Analyzer will now default to an immediate trigger rather than a single-shot one if no extra configuration is provided. This resolves some non-intuitive behavior, as providing the minimum configuration to the Logic Analyzer would result in a single-shot/no-triggers configuration, which is invalid.
- Python 3.8 has been deprecated as it is now EOL.
- A handful of typos have been fixed.
Improvements for Developers:
- Codecov has been added, with a dashboard available here.
mike
has been added, which allows the documentation site to show documentation from past releases in addition to builds frommain
.- Ruff has replaced Black for formatting. Ruff's linter has also been enabled.
pre-commit
has been added, and is run in CI.
Lastly, this release is the first to be published on PyPi! Unfortunately, the package name manta
was already taken, so instead it will be available with pip install manta-fpga
.
Migrating from previous versions:
- Previously, cores were accessible by directly accessing a
manta
instance (for example, an IOCore namedfoo
would be accessible in Python asmanta.foo
). With the addition of the Amaranth-native API, this has been renamed tomanta.cores.foo
to prevent name collisions. Please update any instances ofmanta.core_name
withmanta.cores.core_name
.
v1.0.1
Manta v1.0.1. This release contains a few improvements, including:
-
Bumping to the freshly-released Amaranth 0.5. This has a few implications:
- Generating True-Dual-Port RAMs on Xilinx/AMD platforms no longer results in an
Unrecognized RAM template
error from Vivado during synthesis. This makes the bidirectional memory core work properly on these devices. - The simulation testbenches have been migrated to to the new async simulation API.
- A few small changes to the HDL were required (
Signal.reset
was replaced withSignal.init
, for instance).
- Generating True-Dual-Port RAMs on Xilinx/AMD platforms no longer results in an
-
CSV exports of logic analyzer captures. This feature had been in the codebase for some time, but just had never been broken out to the CLI. Now it has!
-
Some minor updates to the documentation.
v1.0.0
Manta v1.0.0. This release is the first version written in Amaranth HDL! This includes a number of improvements, which I've reproduced below from PR #16:
Improvements for Users:
- Generated Verilog is now truly Verilog-2001 compatible. Some components of the previous RTL (mostly the use of packed/unpacked arrays) were giving synthesis tools trouble. This broke the Logic Analyzer and Memory cores when using Yosys+NextPNR on the ice40, and also required Vivado to load files with the
-sv
option. - Switched from MAC to UDP support in
EthernetInterface
. This is done with the excellent LiteEth project. This does make nMigen a dependency, but we'll see if Amaranth SoC ports it to Amaranth in the future. This also removes Scapy as a dependency, and the builtin Pythonsockets
module is used instead. - Added
host_to_fpga
andfpga_to_host
modes for the Memory Core. This supports chips that don't have True Dual Port RAMs, most notably the ice40. - Renamed the
BlockMemoryCore
toMemoryCore
, to reflect the fact that the EDA tools might not choose block memory for a given FPGA. In fact, the FPGA might not even have block memory onboard! - Fix Logic Analyzer capture modes, immediate and incremental modes are now fully supported on all platforms.
- Comissioned custom ASCII art for the
manta version
command.
Improvements for Developers:
- No more Verilog templates!
- Added hardware-in-the-loop tests to the test suite. Each commit is now automatically tested on hardware, instead of just having the generated code built with the tools.
- Switched functional simulation from Icarus Verilog to Amaranth's built-in simulator. This is one less tool for developers to install.
- Moved tests from Makefile targets to Pytest. This greatly improves the signal-to-noise ratio of the terminal output when running tests.
- Python imports are now absolute, not relative. This is at the recommendation of Google's Python style guide.
- Moved testing into a Python venv, for more reproducible environments.
- Diagrams are now embedded draw.io SVG files. This should help with image scaling and editing.
- Added more docstrings and marked private methods with underscores.
- Added class for Manta's internal bus, and an abstract base class for Manta's cores. This should make it easier for more cores to be developed in the future.
What about using Manta in Amaranth designs natively?
Unfortunately, we're not quite there yet. That'll hopefully be included in the next release, but the ergonomics of using it in Amaranth need to be baked out more fully.
v0.1.0
Manta v0.1.0. This release is the the last version of the code before the rewrite in Amaranth HDL.