Skip to content

yosys-synlig based synthesis flow #2280

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 23 commits into
base: master
Choose a base branch
from
Draft

Conversation

jwnrt
Copy link
Contributor

@jwnrt jwnrt commented May 23, 2025

WIP changing the synthesis flow from sv2v to use the yosys-synlig plugin which reads SystemVerilog directly.

Based on #2156 for Nix support.

hcallahan-lowrisc and others added 23 commits May 23, 2025 10:14
- Changes in /vendor should be applied using a vendoring patch, or fixed upstream

Signed-off-by: Harry Callahan <[email protected]>
This improves portability across different operating systems

Signed-off-by: Harry Callahan <[email protected]>
There was problems running vcs simulations with this command, as something to do
with launching verdi is not working correctly. It seems we are missing deps for
some executable, but the error messages are really unhelpful on tracking down
exactly what. This seems to work, for now.

Signed-off-by: Harry Callahan <[email protected]>
This ensures any logging we do before the call to 'run_one()' will appear in the
correct order in the file.

Signed-off-by: Harry Callahan <[email protected]>
This is in-line with how we handle other environment variables in the build, and
we set the variable inside the appropriate dictionary when invoking the
command (run_rtl.py in this case).
This matches the dependencies given in the python-requirements.txt file in the
repo root, but uses the pyproject.toml format and the poetry tool to allow nix
to import this information to construct a python environment.

The poetry.lock file allows each python dep to be pinned, and would need to be
updated using the poetry tool to bump any dependency.

e.g.
```
nix shell nixpkgs#poetry
poetry update
```
- The default devShell has enough dependencies to run verilator simulations of Ibex
- Some other dependencies are setup but yet unusued.
This adds a devShell that employees can use to bootstrap access to non-public
EDA tooling. Evaluation will fail without appropriate credentials to fetch
the repository 'lowrisc-nix-private'.

Disclaimer: EXPERIMENTAL

These shells will only be functional in the appropriate restricted environments.

This is an experiment at tracking dependencies on proprietary tooling that is
less out-of-band compared to simply assuming the underlying environment is
pre-populated. For obvious reasons, this will always have much weaker
reproducibility guarantees than freely-available software and open-source deps.
However we can still lean on Nix to make bootstrapping non-public environments
fast, ergonomic and hopefully reproducible within the constricted space.

Using a nix flake input that is a private repository, we can effectively pin a
version of the private dependencies (hash+timestamp etc) without exposing what
they are. As nix is lazily evaluated, these inputs will not attempt to be
fetched unless we evaluate an output which depends on them, and hence they
should happily co-exist with other flake attributes for most consumers.

To avoid the flake.lock in this repository from exposing the transitive deps of
the private input, that flake does not track it's inputs in the standard way.
Hence, impure evaluation mode is required when using these outputs.

e.g.
```
nix develop .#eda_shell_lowrisc
nix develop .#eda_shell_lowrisc --command bash -c \
"make -C dv/uvm/core_ibex SIMULATOR=xlm ITERATIONS=4 TEST=riscv_rand_instr_test"
```

Signed-off-by: Harry Callahan <[email protected]>
This reverts commit 5da1679.

> This change is not supported by the version of sv2v used for the example
> synthesis flow, so revert it for a quick fix while in draft.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants