sentinel-cpu 0.1.0b2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sentinel_cpu-0.1.0b2/.cargo/config.toml +8 -0
- sentinel_cpu-0.1.0b2/.gitignore +47 -0
- sentinel_cpu-0.1.0b2/.gitmodules +12 -0
- sentinel_cpu-0.1.0b2/.readthedocs.yaml +42 -0
- sentinel_cpu-0.1.0b2/CHANGELOG.md +503 -0
- sentinel_cpu-0.1.0b2/Cargo.lock +209 -0
- sentinel_cpu-0.1.0b2/Cargo.toml +19 -0
- sentinel_cpu-0.1.0b2/LICENSE.md +24 -0
- sentinel_cpu-0.1.0b2/PKG-INFO +176 -0
- sentinel_cpu-0.1.0b2/README.md +164 -0
- sentinel_cpu-0.1.0b2/ci/gen_release_notes.py +91 -0
- sentinel_cpu-0.1.0b2/ci/oss-cad-suite-version +1 -0
- sentinel_cpu-0.1.0b2/ci/release_notes.md.in +24 -0
- sentinel_cpu-0.1.0b2/ci/testpypi_version.py +26 -0
- sentinel_cpu-0.1.0b2/cliff.toml +114 -0
- sentinel_cpu-0.1.0b2/doc/.gitignore +6 -0
- sentinel_cpu-0.1.0b2/doc/Transparent.png +0 -0
- sentinel_cpu-0.1.0b2/doc/White Background Ver.png +0 -0
- sentinel_cpu-0.1.0b2/doc/_static/blockdiag.png +0 -0
- sentinel_cpu-0.1.0b2/doc/blockdiag.odg +0 -0
- sentinel_cpu-0.1.0b2/doc/blockdiag.png +0 -0
- sentinel_cpu-0.1.0b2/doc/changes.md +2 -0
- sentinel_cpu-0.1.0b2/doc/conf.py +150 -0
- sentinel_cpu-0.1.0b2/doc/development/guidelines.md +99 -0
- sentinel_cpu-0.1.0b2/doc/development/internals.md +366 -0
- sentinel_cpu-0.1.0b2/doc/development/microcode.md +217 -0
- sentinel_cpu-0.1.0b2/doc/development/overview.md +186 -0
- sentinel_cpu-0.1.0b2/doc/development/support-code.md +48 -0
- sentinel_cpu-0.1.0b2/doc/development/testing.md +554 -0
- sentinel_cpu-0.1.0b2/doc/index.md +49 -0
- sentinel_cpu-0.1.0b2/doc/todo.md +8 -0
- sentinel_cpu-0.1.0b2/doc/usage/installation.md +241 -0
- sentinel_cpu-0.1.0b2/doc/usage/quickstart.md +141 -0
- sentinel_cpu-0.1.0b2/doc/usage/reference.md +171 -0
- sentinel_cpu-0.1.0b2/dodo.py +750 -0
- sentinel_cpu-0.1.0b2/examples/attosoc.py +1152 -0
- sentinel_cpu-0.1.0b2/pdm.lock +1836 -0
- sentinel_cpu-0.1.0b2/pyproject.toml +339 -0
- sentinel_cpu-0.1.0b2/sentinel-rt/Cargo.toml +28 -0
- sentinel_cpu-0.1.0b2/sentinel-rt/examples/attosoc.rs +410 -0
- sentinel_cpu-0.1.0b2/sentinel-rt/examples/device.x +14 -0
- sentinel_cpu-0.1.0b2/sentinel-rt/src/lib.rs +6 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/__init__.py +13 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/align.py +241 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/alu.py +392 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/control.py +747 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/csr.py +379 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/datapath.py +905 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/decode.py +705 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/exception.py +266 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/formal.py +602 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/gen.py +171 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/insn.py +240 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/microcode.asm +540 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/top.py +458 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/ucodefields.py +467 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/ucoderom.py +319 -0
- sentinel_cpu-0.1.0b2/src/sentinel_cpu/version.txt +1 -0
- sentinel_cpu-0.1.0b2/tests/__init__.py +0 -0
- sentinel_cpu-0.1.0b2/tests/conftest.py +135 -0
- sentinel_cpu-0.1.0b2/tests/formal/README.md +14 -0
- sentinel_cpu-0.1.0b2/tests/formal/checks.cfg +143 -0
- sentinel_cpu-0.1.0b2/tests/formal/disasm.py +60 -0
- sentinel_cpu-0.1.0b2/tests/formal/wrapper.sv +155 -0
- sentinel_cpu-0.1.0b2/tests/riscof/.gitignore +3 -0
- sentinel_cpu-0.1.0b2/tests/riscof/README.md +21 -0
- sentinel_cpu-0.1.0b2/tests/riscof/bin/riscv_sim_RV32.gz +0 -0
- sentinel_cpu-0.1.0b2/tests/riscof/config.ini +21 -0
- sentinel_cpu-0.1.0b2/tests/riscof/sail_cSim/__init__.py +2 -0
- sentinel_cpu-0.1.0b2/tests/riscof/sail_cSim/env/link.ld +18 -0
- sentinel_cpu-0.1.0b2/tests/riscof/sail_cSim/env/model_test.h +55 -0
- sentinel_cpu-0.1.0b2/tests/riscof/sail_cSim/riscof_sail_cSim.py +150 -0
- sentinel_cpu-0.1.0b2/tests/riscof/sentinel/env/link.ld +20 -0
- sentinel_cpu-0.1.0b2/tests/riscof/sentinel/env/model_test.h +65 -0
- sentinel_cpu-0.1.0b2/tests/riscof/sentinel/riscof_sentinel.py +271 -0
- sentinel_cpu-0.1.0b2/tests/riscof/sentinel/sentinel_isa.yaml +28 -0
- sentinel_cpu-0.1.0b2/tests/riscof/sentinel/sentinel_platform.yaml +8 -0
- sentinel_cpu-0.1.0b2/tests/sim/conftest.py +71 -0
- sentinel_cpu-0.1.0b2/tests/sim/test_soc.py +81 -0
- sentinel_cpu-0.1.0b2/tests/sim/test_top.py +701 -0
- sentinel_cpu-0.1.0b2/tests/sim/test_ucode.py +61 -0
- sentinel_cpu-0.1.0b2/tests/sim/test_witness.py +204 -0
- sentinel_cpu-0.1.0b2/tests/sim/witness/csrrc_bad_rd.yw +65 -0
- sentinel_cpu-0.1.0b2/tests/upstream/README.md +14 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/.gitignore +1 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/add +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/add.dump +505 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/addi +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/addi.dump +309 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/and +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/and.dump +461 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/andi +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/andi.dump +241 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/auipc +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/auipc.dump +118 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/beq +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/beq.dump +319 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/bge +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/bge.dump +365 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/bgeu +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/bgeu.dump +384 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/blt +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/blt.dump +319 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/bltu +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/bltu.dump +338 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/bne +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/bne.dump +318 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/csr +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/csr.dump +297 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/fence_i +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/fence_i.dump +162 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/illegal +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/illegal.dump +346 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/jal +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/jal.dump +154 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/jalr +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/jalr.dump +190 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lb +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lb.dump +306 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lbu +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lbu.dump +306 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lh +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lh-misaligned +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lh-misaligned.dump +156 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lh.dump +323 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lhu +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lhu.dump +316 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lui +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lui.dump +153 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lw +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lw-misaligned +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lw-misaligned.dump +167 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/lw.dump +311 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/ma_addr +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/ma_addr.dump +354 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/ma_data +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/ma_data.dump +631 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/ma_fetch +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/ma_fetch.dump +232 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/mcsr +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/mcsr.dump +120 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/or +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/or.dump +458 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/ori +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/ori.dump +266 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sb +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sb.dump +449 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sbreak +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sbreak.dump +122 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/scall +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/scall.dump +139 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sh +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sh-misaligned +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sh-misaligned.dump +178 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sh.dump +482 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/shamt +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/shamt.dump +122 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/simple +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/simple.dump +106 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sll +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sll.dump +549 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/slli +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/slli.dump +310 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/slt +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/slt.dump +479 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/slti +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/slti.dump +314 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sltiu +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sltiu.dump +314 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sltu +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sltu.dump +479 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sra +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sra.dump +564 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/srai +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/srai.dump +329 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/srl +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/srl.dump +538 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/srli +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/srli.dump +335 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sub +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sub.dump +479 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sw +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sw-misaligned +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sw-misaligned.dump +184 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/sw.dump +479 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/xor +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/xor.dump +459 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/xori +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/xori.dump +264 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/zicntr +0 -0
- sentinel_cpu-0.1.0b2/tests/upstream/binaries/zicntr.dump +228 -0
- sentinel_cpu-0.1.0b2/tests/upstream/link.ld +17 -0
- sentinel_cpu-0.1.0b2/tests/upstream/riscv_test.h +264 -0
- sentinel_cpu-0.1.0b2/tests/upstream/test_upstream.py +130 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
[build]
|
|
2
|
+
target="riscv32i-unknown-none-elf"
|
|
3
|
+
|
|
4
|
+
[target.riscv32i-unknown-none-elf]
|
|
5
|
+
rustflags = [
|
|
6
|
+
"-C", "link-arg=--threads=1", # --threads=1 fixes Windows issue: https://github.com/rust-lang/rust/issues/115985
|
|
7
|
+
"-C", "link-arg=-Tsentinel-rt/examples/device.x"
|
|
8
|
+
]
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.egg-info
|
|
4
|
+
/dist
|
|
5
|
+
|
|
6
|
+
# pdm
|
|
7
|
+
/.pdm-plugins
|
|
8
|
+
/.pdm-python
|
|
9
|
+
/.python-version
|
|
10
|
+
/.venv
|
|
11
|
+
# Part of dynamic version generation.
|
|
12
|
+
/src/sentinel_cpu/version.txt
|
|
13
|
+
# Release note generation.
|
|
14
|
+
/release_notes.md
|
|
15
|
+
|
|
16
|
+
# pytest
|
|
17
|
+
/.pytest_cache
|
|
18
|
+
|
|
19
|
+
# Amaranth
|
|
20
|
+
/build*
|
|
21
|
+
|
|
22
|
+
# GtkWave
|
|
23
|
+
*.vcd
|
|
24
|
+
*.gtkw
|
|
25
|
+
|
|
26
|
+
# Doit
|
|
27
|
+
.doit.db*
|
|
28
|
+
|
|
29
|
+
# logluts
|
|
30
|
+
/LUTs.csv
|
|
31
|
+
|
|
32
|
+
# m5meta
|
|
33
|
+
*.asm*.fdef
|
|
34
|
+
*.asm*.hex
|
|
35
|
+
|
|
36
|
+
# Yosys
|
|
37
|
+
/abc.history
|
|
38
|
+
|
|
39
|
+
# RVFormal disassembled counterexamples
|
|
40
|
+
*.s
|
|
41
|
+
|
|
42
|
+
# YoWASP setup
|
|
43
|
+
.env.toolchain
|
|
44
|
+
|
|
45
|
+
# Added by cargo
|
|
46
|
+
|
|
47
|
+
/target
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
[submodule "tests/upstream/riscv-tests"]
|
|
2
|
+
path = tests/upstream/riscv-tests
|
|
3
|
+
url = https://github.com/riscv/riscv-tests
|
|
4
|
+
[submodule "tests/formal/riscv-formal"]
|
|
5
|
+
path = tests/formal/riscv-formal
|
|
6
|
+
url = https://github.com/YosysHQ/riscv-formal
|
|
7
|
+
[submodule "tests/riscof/sail-riscv"]
|
|
8
|
+
path = tests/riscof/sail-riscv
|
|
9
|
+
url = https://github.com/riscv/sail-riscv.git
|
|
10
|
+
[submodule "tests/riscof/riscv-arch-test"]
|
|
11
|
+
path = tests/riscof/riscv-arch-test
|
|
12
|
+
url = https://github.com/riscv-non-isa/riscv-arch-test
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Read the Docs configuration file for Sphinx projects
|
|
2
|
+
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
3
|
+
|
|
4
|
+
# Required
|
|
5
|
+
version: 2
|
|
6
|
+
|
|
7
|
+
# Set the OS, Python version and other tools you might need
|
|
8
|
+
build:
|
|
9
|
+
os: ubuntu-22.04
|
|
10
|
+
tools:
|
|
11
|
+
python: "3.12"
|
|
12
|
+
# You can also specify other tool versions:
|
|
13
|
+
# nodejs: "20"
|
|
14
|
+
# rust: "1.70"
|
|
15
|
+
# golang: "1.20"
|
|
16
|
+
jobs:
|
|
17
|
+
post_checkout:
|
|
18
|
+
# Reconstruct tags.
|
|
19
|
+
- git fetch --unshallow --tags
|
|
20
|
+
post_create_environment:
|
|
21
|
+
# Install PDM
|
|
22
|
+
- pip install -U pdm
|
|
23
|
+
post_install:
|
|
24
|
+
# See:
|
|
25
|
+
# * https://github.com/readthedocs/readthedocs.org/pull/11152/
|
|
26
|
+
# * https://github.com/pdm-project/pdm/pull/2736/files#diff-03efc769b870804394632e45d7885272b44c16939517fb31c9d7c614d2ffae57
|
|
27
|
+
# * and https://docs.readthedocs.io/en/stable/build-customization.html#install-dependencies-with-poetry
|
|
28
|
+
# This replaces requirements.txt specified in: https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
|
|
29
|
+
- VIRTUAL_ENV=$READTHEDOCS_VIRTUALENV_PATH pdm install -G doc -G examples
|
|
30
|
+
|
|
31
|
+
# Build documentation in the "docs/" directory with Sphinx
|
|
32
|
+
sphinx:
|
|
33
|
+
configuration: doc/conf.py
|
|
34
|
+
# You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs
|
|
35
|
+
# builder: "dirhtml"
|
|
36
|
+
# Fail on all warnings to avoid broken references
|
|
37
|
+
# fail_on_warning: true
|
|
38
|
+
|
|
39
|
+
# Optionally build your docs in additional formats such as PDF and ePub
|
|
40
|
+
# formats:
|
|
41
|
+
# - pdf
|
|
42
|
+
# - epub
|
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
_Note that the Python ecosystem itself [doesn't really](https://iscinumpy.dev/post/bound-version-constraints/)
|
|
9
|
+
adhere to Semantic Versioning._ Dependency updates are automatically managed
|
|
10
|
+
with [Renovate Bot](https://www.mend.io/renovate/) on Sentinel's two branches
|
|
11
|
+
to detect dependency breakage that warrants a new release/yank.
|
|
12
|
+
|
|
13
|
+
The Sentinel repository has two active branches: `main` and `next`. Releases
|
|
14
|
+
and patches live on `main`, and development takes place on `next`. `next` is
|
|
15
|
+
developed against the upstream/git versions of [Amaranth] and associated
|
|
16
|
+
packages. These include, but are not limited to:
|
|
17
|
+
|
|
18
|
+
* [`amaranth`]
|
|
19
|
+
* [`amaranth-boards`]
|
|
20
|
+
* [`amaranth-soc`]
|
|
21
|
+
* [`amaranth-stdio`]
|
|
22
|
+
|
|
23
|
+
If necessary, patches from `main` can be forward-ported to `next`, and commits
|
|
24
|
+
from `next` and be backported to `main` for a point-release. _When possible_,
|
|
25
|
+
releases are made against Amaranth packages on [PyPI](https://pypi.org/), even
|
|
26
|
+
though development is done against the Amaranth git repos.
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
## [Unreleased]
|
|
30
|
+
|
|
31
|
+
## [0.1.0-beta.2] - 2026-05-09
|
|
32
|
+
|
|
33
|
+
_This is the first version of Sentinel with the import name `sentinel_cpu`_,
|
|
34
|
+
as well as the first version which is published to PyPI. Codeberg now provides
|
|
35
|
+
CI via its [Forgejo Actions](https://codeberg.org/cr1901/sentinel/actions)
|
|
36
|
+
[runners](https://codeberg.org/actions/meta). _No functional change to Sentinel
|
|
37
|
+
is intended compared to [0.1.0-beta.1]._
|
|
38
|
+
|
|
39
|
+
The large diff for this release is a bit misleading. The only changes to the
|
|
40
|
+
Python source files and docs are to rename `sentinel` to `sentinel_cpu`
|
|
41
|
+
as appropriate, and fixing line lengths as a result of said name change. CI
|
|
42
|
+
workflow files had to be split and optimized due to Codeberg limitations
|
|
43
|
+
(particularly the 10 minute runner limit as of 5-8-2026), but the tests
|
|
44
|
+
themselves are the same as those that were run on Github Actions. Additionally,
|
|
45
|
+
CI now runs new build, publish, and release steps.
|
|
46
|
+
|
|
47
|
+
### Added
|
|
48
|
+
- `asset`, `build`, publish (`publish.yml`) and `release` jobs for CI.
|
|
49
|
+
- `assets` generates release notes and Verilog for Forgejo [releases](https://codeberg.org/cr1901/sentinel/releases).
|
|
50
|
+
- `build` creates the Python package (wheel/sdist).
|
|
51
|
+
- `publish.yml` uploads the package to [TestPyPI](https://test.pypi.org/project/sentinel-cpu/)
|
|
52
|
+
or [PyPI](https://pypi.org/project/sentinel-cpu/), for releases.
|
|
53
|
+
- `release` takes the outputs of the `assets` step and publishes them to
|
|
54
|
+
Forgejo [releases](https://codeberg.org/cr1901/sentinel/releases).
|
|
55
|
+
- For now, the `release` step also uploads the wheel/sdist from the `build`
|
|
56
|
+
step.
|
|
57
|
+
- Use [`pytest-xdist`](https://github.com/pytest-dev/pytest-xdist) to run `ci-basic`
|
|
58
|
+
tests in parallel.
|
|
59
|
+
- `list_sby_status` supports partial runs when invoked with `doit -s` (for use with CI).
|
|
60
|
+
- Add CONTRIBUTING.md, to make clear that AI contributions are not allowed.
|
|
61
|
+
|
|
62
|
+
### Changed
|
|
63
|
+
- The [import package](https://packaging.python.org/en/latest/discussions/distribution-package-vs-import-package/#what-s-an-import-package)
|
|
64
|
+
name of Sentinel has changed from `sentinel` to `sentinel_cpu`.
|
|
65
|
+
- `ci-quickstart` no longer compiles the Rust firmware/requires Rust- it was
|
|
66
|
+
probably overkill.
|
|
67
|
+
- Allow caching of `pdm` and `yowasp` for `ci-quickstart` job to ease runner usage.
|
|
68
|
+
- I called this `ci-minimal` in the commit... oops!
|
|
69
|
+
- Split `ci-basic` lint and doc building steps into their own jobs.
|
|
70
|
+
- Python lint, Rust lint, and doc building are separate jobs so they can run
|
|
71
|
+
reliably on `codeberg-tiny`.
|
|
72
|
+
- _They are now all enabled for each CI run, not just releases._
|
|
73
|
+
- Move RISC-V Formal (`ci-rvformal`) and RISCOF (`ci-riscof`) jobs into their
|
|
74
|
+
own [reusable workflows](https://forgejo.org/docs/next/user/actions/reference/#onworkflow_call).
|
|
75
|
+
- Because there is currently (5-8-2026) a 10 minute runner limit on Codeberg,
|
|
76
|
+
split the jobs into < 10 minute chunks using a
|
|
77
|
+
[matrix](https://forgejo.org/docs/next/user/actions/reference/#jobsjob_idstrategymatrix).
|
|
78
|
+
- In contrast to what I suggest in general, _running split jobs invokes
|
|
79
|
+
`doit` tasks directly instead of using `pdm`_; the equivalent `pdm`
|
|
80
|
+
scripts assume you run the entire CI flow in one command. This should be
|
|
81
|
+
fixed once runners with longer limits on Codeberg are available.
|
|
82
|
+
- Both `ci-rvformal` and `ci-riscof` can [manually](https://forgejo.org/docs/next/user/actions/reference/#onworkflow_dispatch)
|
|
83
|
+
be triggered. `ci-rvformal` also runs weekly via a cron script.
|
|
84
|
+
- Use [`setup-pdm`](https://github.com/pdm-project/setup-pdm) exclusively to
|
|
85
|
+
setup Python environments in CI; it transitively calls [`setup-python`](https://code.forgejo.org/actions/setup-python)
|
|
86
|
+
anyway.
|
|
87
|
+
- Use a Forgejo-compatible [fork](https://codeberg.org/prjunnamed/setup-rust-toolchain)
|
|
88
|
+
of `setup-rust-toolchain` to install Rust.
|
|
89
|
+
- Start transitioning away from requiring RISC-V GCC [Ubuntu package](https://launchpad.net/ubuntu/+source/gcc-riscv64-unknown-elf)
|
|
90
|
+
for CI; the install time can be rather variable for the limited CI time.
|
|
91
|
+
- We've been using LLVM to link Rust code in `ci-basic` for a while now.
|
|
92
|
+
In fact, requiring RISC-V GCC in `ci-basic` may have always been an oversight.
|
|
93
|
+
- For `ci-rvformal`, use [tinyrv](https://github.com/s-holst/tinyrv) instead
|
|
94
|
+
of `riscv64-unknown-elf-objdump` to generate disassemblies for traces.
|
|
95
|
+
- `ci-riscof` still requires/hardcode `gcc-riscv64-unknown-elf`, but RISCOF is
|
|
96
|
+
[deprecated](https://github.com/riscv-software-src/riscof/commit/90ebd1bf48bc7928a5f6a7b0b4993f9fbc944f47).
|
|
97
|
+
So that usage may be removed eventually.
|
|
98
|
+
|
|
99
|
+
### Fixed
|
|
100
|
+
- Specify Amaranth 0.5.8 as minimum version in `pyproject.toml`.
|
|
101
|
+
- Use unique keys for each CI job for `pdm` caching to avoid thrashing.
|
|
102
|
+
- Update `sent_latest_tag`, which in turn fixes the outdated Sentinel version
|
|
103
|
+
that was dynamically substituted inside [last release's][0.1.0-beta.1] docs.
|
|
104
|
+
- `list_sby_status` correctly handles an `ERROR` return code from `sby`.
|
|
105
|
+
- Specify that `doc` and `examples` groups need to be installed for building
|
|
106
|
+
docs in `conf.py` `PackageNotFoundError` handler. Also do a minimal check
|
|
107
|
+
for the `examples` group.
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
## [0.1.0-beta.1] - 2026-04-22
|
|
111
|
+
|
|
112
|
+
_This is the last version with the import name `sentinel`. Future releases
|
|
113
|
+
will be importable under `sentinel_cpu`. See [#88](https://codeberg.org/cr1901/sentinel/issues/88)
|
|
114
|
+
for more information._
|
|
115
|
+
|
|
116
|
+
[Amaranth 0.5.8](https://github.com/amaranth-lang/amaranth/tree/v0.5.x) is now
|
|
117
|
+
the minimum required version to use Sentinel, either directly from this repo
|
|
118
|
+
or as a dependency. Sentinel no longer requires [`amaranth-soc`], so that
|
|
119
|
+
future releases can be uploaded to PyPI. This will last until `amaranth-soc`
|
|
120
|
+
gets a PyPI release. If `amaranth-soc` is available in your Python environment,
|
|
121
|
+
Sentinel will use it.
|
|
122
|
+
|
|
123
|
+
Due to [issues](https://mrshu.github.io/github-statuses/) with Github, I've
|
|
124
|
+
decided to migrate the repo to [Codeberg](https://codeberg.org/cr1901/sentinel).
|
|
125
|
+
Although functional, I did not intend to cut a release in this state. However,
|
|
126
|
+
I've accumulated a number of changes since the last release, so I might as well
|
|
127
|
+
start with a fresh slate for Codeberg. No Codeberg-specific changes are in this
|
|
128
|
+
release, aside from updating doc URLs.
|
|
129
|
+
|
|
130
|
+
Minimal Forgejo CI is functional in a separate branch. I'm holding off merging
|
|
131
|
+
it until the next release as part of Codeberg-specific changes; this will make
|
|
132
|
+
writing the CHANGELOG and diffing easier for me. I've manually ensured all test
|
|
133
|
+
suites pass before releasing. _References to CI in this release refer to
|
|
134
|
+
[Github Actions](https://github.com/cr1901/sentinel/actions) CI._
|
|
135
|
+
|
|
136
|
+
### Added
|
|
137
|
+
- Parallel support in RISCOF test suite.
|
|
138
|
+
- Run the relevant privileged tests of RISCOF test suite. Sentinel passes!
|
|
139
|
+
- This required sending [a patch](https://github.com/riscv-non-isa/riscv-arch-test/pull/599)
|
|
140
|
+
to upstream RISCOF!
|
|
141
|
+
- Add RISC-V Formal tests for experimenting with how IRQs affect CSRs (via
|
|
142
|
+
the `irq` [group](https://yosyshq.readthedocs.io/projects/riscv-formal/en/latest/procedure.html#groups)).
|
|
143
|
+
- Presently, these are not run by default, as from RISC-V Formal's doesn't
|
|
144
|
+
really handle interrupts; interrupts are not exceptions, and the `PC`
|
|
145
|
+
checks are too strict for non-exceptions.
|
|
146
|
+
- Add pre-generated Verilog for all tagged versions via Releases.
|
|
147
|
+
- Skip resource-intensive CI if only documentation was changed for a commit.
|
|
148
|
+
- Add turnkey docs for programmers who want to simply use Sentinel without
|
|
149
|
+
exploring the source code.
|
|
150
|
+
|
|
151
|
+
### Changed
|
|
152
|
+
- Update all test submodules to most recent commits as of mid Janurary 2025.
|
|
153
|
+
Also recompile SAIL.
|
|
154
|
+
- Mostly symbolic, as the submodules didn't really change in a way that
|
|
155
|
+
affect Sentinel, save for the aforementioned RISCOF patch.
|
|
156
|
+
- Microcode improvements:
|
|
157
|
+
- All shift ops have latency reduced by 1 cycle.
|
|
158
|
+
- Branches are predicted not taken, and branches taken are predicted to
|
|
159
|
+
have no exceptions. End result is latency and inverse-throughput of branch
|
|
160
|
+
instructions decrease both by 1 CPI.
|
|
161
|
+
- Predict that exceptions don't occur for JAL/JALR. Latency decreases by 2
|
|
162
|
+
CPI, inverse-throughput decreases by 1 CPI for JAL/JALR.
|
|
163
|
+
- Rename `CONDTEST_ALU_CMP_FAILED` to the more-general `CONDTEST_ALU_ZERO`.
|
|
164
|
+
We can always bring it back later if needed.
|
|
165
|
+
- _Attempt_ to swap out AttoSoC peripherals with those available in
|
|
166
|
+
`amaranth-soc` or `amaranth-stdio`.
|
|
167
|
+
- Swapped peripherals include: `WishboneSRAM`
|
|
168
|
+
- No functional changes, just better for the demo to use the Amaranth
|
|
169
|
+
support packages when possible to facilitate good practice.
|
|
170
|
+
- Introduction of `WishboneSRAM` requires ~150 extra LUTs, so **this change
|
|
171
|
+
was reverted** until deciding what to do with iCEStick.
|
|
172
|
+
- Optimize `OP_IMM` decoding (resource usage) using [z3](https://github.com/Z3Prover/z3).
|
|
173
|
+
- Generally refactor `AttoSoC` to look nicer as part of fixing the inline
|
|
174
|
+
`objcopy` implementation.
|
|
175
|
+
- Future work on examples may split out common functionality in `AttoSoC`
|
|
176
|
+
into multiple files.
|
|
177
|
+
- When building a [source dist](https://packaging.python.org/en/latest/specifications/source-distribution-format/),
|
|
178
|
+
try to match the contents of tarballs/zip files generated by Github, Codeberg,
|
|
179
|
+
or other forges.
|
|
180
|
+
- I _believe_ forge tarballs/zips (ie. the files generated by default for
|
|
181
|
+
tags and releases) are generated from a shallow clone, but I don't remember
|
|
182
|
+
for sure.
|
|
183
|
+
- The idea is I want to save server space, save time generating the sdists, and
|
|
184
|
+
to minimize confusion from having both sdists and forge source tarballs/zips.
|
|
185
|
+
However, _this is a best-effort basis!_ E.g. an sdist will have access to
|
|
186
|
+
version info that a plain-old tarball/zip does not.
|
|
187
|
+
- Polyfill [`amaranth-soc`] usage (e.g. `wishbone.Signature`) using
|
|
188
|
+
[`amaranth`] alone.
|
|
189
|
+
- `sentinel.formal.FormalTop` now gets its signature by inspecting
|
|
190
|
+
`sentinel.top.Top`'s signature.
|
|
191
|
+
- `sentinel.gen.generate` has been renamed to `sentinel.gen.cli`, as part of
|
|
192
|
+
rewriting the whole `sentinel.gen` module.
|
|
193
|
+
- Point all [git+]https://github.com/cr1901/sentinel/ URLs in docs to
|
|
194
|
+
[git+]https://codeberg.org/cr1901/sentinel/.
|
|
195
|
+
|
|
196
|
+
### Fixed
|
|
197
|
+
- Fix a microcode typo that caused the `CSRRCI` instruction to be clear bits
|
|
198
|
+
when it shouldn't have.
|
|
199
|
+
- Add handwritten test case to CI, since upstream and RISCOF don't test
|
|
200
|
+
interrupts, and RISC-V Formal makes assumptions that don't work well with
|
|
201
|
+
interrupts.
|
|
202
|
+
- Open [m5meta issue](https://github.com/brouhaha/m5meta/issues/3), as future
|
|
203
|
+
typos can be caught at assemble-time.
|
|
204
|
+
- Improve inline `objcopy` implementation in AttoSoC example to work for ELF
|
|
205
|
+
files with more complex layouts.
|
|
206
|
+
- This fix is a precaution; the `attosoc` Rust firmware worked just with the
|
|
207
|
+
old implementation which assumes [loadable segments](https://www.sco.com/developers/gabi/latest/ch5.pheader.html)
|
|
208
|
+
are all adjacent.
|
|
209
|
+
- Increase the UART speed to reduce bit timer width; demo bitstream fits into
|
|
210
|
+
1280 LUTs again!
|
|
211
|
+
- Documentation now makes clear that MIP.MEIP bit is read-only.
|
|
212
|
+
- Change `checks.cfg` paths so that paths parse correctly when running RISC-V
|
|
213
|
+
Formal with a Python compiled by MSVC.
|
|
214
|
+
- Pytest tests now ignore RISCOF dirs when RISCOF is checked out.
|
|
215
|
+
|
|
216
|
+
### Removed
|
|
217
|
+
- The constant `-1` is no longer produced by the constant generator; it can
|
|
218
|
+
easily be synthesized by subtracting `1` on the ALU's B input from `0` on
|
|
219
|
+
the ALU's A input.
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
## [0.1.0-beta] - 2025-01-12
|
|
223
|
+
|
|
224
|
+
[Amaranth 0.5.4](https://github.com/amaranth-lang/amaranth/tree/v0.5.x) is now
|
|
225
|
+
the minimum required version to use Sentinel, either directly from this repo
|
|
226
|
+
or as a dependency.
|
|
227
|
+
|
|
228
|
+
Sentinel still tracks upstream [`amaranth-soc`]. For the time being, use Sentinel
|
|
229
|
+
with caution outside of environments without lockfiles, and prefer installing
|
|
230
|
+
Sentinel [within a PDM environment](https://sentinel-cpu.readthedocs.io/en/latest/usage/installation.html#in-a-pdm-project):
|
|
231
|
+
|
|
232
|
+
```sh
|
|
233
|
+
pdm add sentinel@git+https://codeberg.org/cr1901/sentinel@main
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
I also cannot do a PyPI release for the same reason.
|
|
237
|
+
|
|
238
|
+
Between March and September 2024, I stopped being able to consistently fit
|
|
239
|
+
`AttoSoC` onto IceStick; the demo overflows between 1280-1300 ICESTORM_LCs
|
|
240
|
+
(maximum 1280 on device). According to bisect, the changes introduced by
|
|
241
|
+
Amaranth commit [1d2b9c3](https://github.com/amaranth-lang/amaranth/commit/1d2b9c309e5a0e06487105679eec361472978c5f)
|
|
242
|
+
pessimized `AttoSoC` _just_ enough to not fit. However, right now (2024-09-26)
|
|
243
|
+
releases are not blocked on the demo fitting on IceStick. _Assume the IceStick
|
|
244
|
+
demo is unreliable in this release._ I will look into this later.
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
### Added
|
|
248
|
+
- Add ruff linter to dev dependencies and CI.
|
|
249
|
+
- Releases require linting to pass, _including this release!_
|
|
250
|
+
- Set up lint rules for Rust/`rustdoc` and Ruff.
|
|
251
|
+
- This release and future ones will require passing a lint check for code
|
|
252
|
+
and docstrings in CI. Non-release runs won't run the lint step.
|
|
253
|
+
- `lint` PDM composite script can optionally take arguments, like `-e` to
|
|
254
|
+
do Rust lint step on error in Python lint step.
|
|
255
|
+
- Basic fixes can be applied using the `lint-fix` PDM script.
|
|
256
|
+
- `sentinel-rt` is preemptively set up for `cargo fix` to work.
|
|
257
|
+
- `doc` PDM script can optionally take arguments, like `-n` to run
|
|
258
|
+
`sphinx-build` in [nitpicky mode](https://www.sphinx-doc.org/en/master/man/sphinx-build.html#cmdoption-sphinx-build-n).
|
|
259
|
+
This catches more broken yet benign cross-refs than the `doc-auto` script
|
|
260
|
+
will. In the case of Amaranth IP in particular, several broken cross-refs
|
|
261
|
+
are expected due to how `Components` are documented.
|
|
262
|
+
- Test only installing production dependencies, importing, and Verilog
|
|
263
|
+
generation in CI.
|
|
264
|
+
- Documentation has been written! It is hosted on [ReadTheDocs](https://sentinel-cpu.readthedocs.io/en/latest/).
|
|
265
|
+
- A few doctests have been added for good measure.
|
|
266
|
+
- ReadTheDocs handles building docs. However, this release and future ones
|
|
267
|
+
require docs to build and doctests to pass in CI. Non-release runs won't
|
|
268
|
+
run the docs step.
|
|
269
|
+
- Microcode assembly file is not handled for correctness by [`sphinx`](https://www.sphinx-doc.org).
|
|
270
|
+
Out of date/misleading comments were fixed.
|
|
271
|
+
|
|
272
|
+
_If microcode and `sphinx` documentation don't match, `sphinx` docs take
|
|
273
|
+
priority unless otherwise noted._
|
|
274
|
+
- [YoWASP](https://yowasp.org/) support for `import`ing `Top`, Verilog
|
|
275
|
+
generation and in-tree demos.
|
|
276
|
+
- Minimal prodouction dependencies/Quickstart is tested in CI using YoWASP.
|
|
277
|
+
- Allow firmware override/random BRAM content generation for `AttoSoC` demo
|
|
278
|
+
designs which are generated on a remote machine.
|
|
279
|
+
- Add `AttoSoC` demo support for [Arty A7 35T](https://digilent.com/shop/arty-a7-100t-artix-7-fpga-development-board/),
|
|
280
|
+
[Cmod S7](https://digilent.com/shop/cmod-s7-breadboardable-spartan-7-fpga-module/), and
|
|
281
|
+
[iCEBreaker v1.0](https://1bitsquared.com/collections/fpga/products/icebreaker)
|
|
282
|
+
boards.
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
### Changed
|
|
286
|
+
- All simulations have been ported to adhere to RFC [#36](https://amaranth-lang.org/rfcs/0036-async-testbench-functions.html)
|
|
287
|
+
and [#62](https://amaranth-lang.org/rfcs/0062-memory-data.html).
|
|
288
|
+
- This resulted in more code-sharing between the handwritten and
|
|
289
|
+
upstream [pytest] simulations, as well as the RISCOF framework tests,
|
|
290
|
+
such as a simulated memory
|
|
291
|
+
[process](https://amaranth-lang.org/docs/amaranth/v0.5.4/simulator.html#amaranth.sim.Simulator.add_process).
|
|
292
|
+
|
|
293
|
+
Additionally, except for the appropriately-named `test_soc` file,
|
|
294
|
+
the `AttoSoC` example is no longer used in tests!
|
|
295
|
+
- Use [`pytest-amaranth-sim`] plugin for Amaranth-specific fixtures.
|
|
296
|
+
- `AttoSoC` example was ported to adhere to [#70](https://amaranth-lang.org/rfcs/0070-soc-memory-map-names.html).
|
|
297
|
+
- Current OSS CAD Suite version for CI is [2024-11-01](https://github.com/YosysHQ/oss-cad-suite-build/releases/tag/2024-11-01).
|
|
298
|
+
- Example Rust firmware greatly improved- a [Rule 110](https://en.wikipedia.org/wiki/Rule_110)
|
|
299
|
+
visualization over serial port [suggested by @mcclure](https://mastodon.social/@mcc/113244143342550101)!
|
|
300
|
+
- Various refactors that do not change code functionality:
|
|
301
|
+
- Rearrange top-level connections based on purpose.
|
|
302
|
+
- Data alignment logic was split into Components.
|
|
303
|
+
- An attempt was made to hoist out muxed inputs to the Datapath. However,
|
|
304
|
+
this did not optimize well. The Component- `DataPathSrcMux`- is kept around
|
|
305
|
+
as dead code in case it optimizes better in future versions.
|
|
306
|
+
- Move ALU source muxes into their own Components.
|
|
307
|
+
- `Insn` class to serve as the moral equivalent of an Amaranth
|
|
308
|
+
[`View`](https://amaranth-lang.org/docs/amaranth/v0.5.4/stdlib/data.html#amaranth.lib.data.View)
|
|
309
|
+
for RISC-V instructions.
|
|
310
|
+
- Decoder was split into several Components. In fact, the decoder was
|
|
311
|
+
_effectively rewritten_; the large Switch statement of the previous
|
|
312
|
+
versions was unreadable. The split components include:
|
|
313
|
+
- CSR Access Control
|
|
314
|
+
- Exception Control
|
|
315
|
+
- Mapping ROM
|
|
316
|
+
- Immediate Generation
|
|
317
|
+
|
|
318
|
+
AFAIR, none of the above refactors changed LUT usage meaningfully.
|
|
319
|
+
- Additionally, the Control Unit's `Signature` was overhauled.
|
|
320
|
+
- Manually specify the set of files to include in source dist. Specifically,
|
|
321
|
+
exclude submodules and extra test files, and include config files, examples,
|
|
322
|
+
and `sentinel-rt`.
|
|
323
|
+
- Tweak Rust firmware DoIt tasks to allow choosing bus type, call `cargo`
|
|
324
|
+
directly instead of invoking `pdm` again.
|
|
325
|
+
- _All_ `UCodeROM` fields are now verified against microcode file before
|
|
326
|
+
generating a [`Signature`](https://amaranth-lang.org/docs/amaranth/v0.5.4/stdlib/wiring.html#amaranth.lib.wiring.Signature),
|
|
327
|
+
not just `enum`s.
|
|
328
|
+
- Rename `UCodeROM` `enum_map` constructor parameter to `field_map`.
|
|
329
|
+
- Lots of small Ruff and Rust/`rustdoc` lints applied, so that CI passes :).
|
|
330
|
+
- Some files are ignored for lint. See `pyproject.toml` for justifications.
|
|
331
|
+
- Development/style guidelines have been refined, and changes made to the
|
|
332
|
+
reflect them:
|
|
333
|
+
- `Component` `Signature`s are now generated using annotations at the class
|
|
334
|
+
level when possible; previously, they were instance attributes. This should
|
|
335
|
+
have no functional change.
|
|
336
|
+
- Nested classes within `Insn` class are public.
|
|
337
|
+
- Most functions of `sentinel.gen` are private.
|
|
338
|
+
- Nest `Signature` object bindings into the objects that "own" them. This
|
|
339
|
+
paves the way to add a few more `Signature` object bindings next release.
|
|
340
|
+
- `Control` unit `Signature` has been greatly improved; it uses nested
|
|
341
|
+
`Signature` `Members` to logically organize microcode signals by purpose.
|
|
342
|
+
|
|
343
|
+
### Fixed
|
|
344
|
+
- Use full git hash `a7fa902a5f70c7d53a654d850f745e36821fbb78` for [logLUTs](https://github.com/mattvenn/logLUTs)
|
|
345
|
+
benchmarking dependency (got weird errors trying to get PDM to download it
|
|
346
|
+
using the short hash as of Sept. 2024).
|
|
347
|
+
- Fixed UnusedElaboratable warning in `test_ucode_layout_gen` test
|
|
348
|
+
(thanks @kivikkak!)
|
|
349
|
+
- Sentinel uses `amaranth_soc.wishbone`, but this wasn't reflected in
|
|
350
|
+
[production dependencies](https://pdm-project.org/latest/usage/dependency/#select-a-subset-of-dependency-groups-to-install).
|
|
351
|
+
- Fix `license` field in `pyproject.toml. It was
|
|
352
|
+
[always meant](https://libera.irclog.whitequark.org/amaranth-lang/2023-11-25#35299928)
|
|
353
|
+
to be BSD-2-Clause, but I just accepted the defaults when originally
|
|
354
|
+
initializing the project with PDM :).
|
|
355
|
+
- Remove `regfile` module. This was accidentally committed before initial
|
|
356
|
+
release and never used.
|
|
357
|
+
- Do not use back-to-back write/read optimization for store instructions
|
|
358
|
+
until it's [clear](https://github.com/fossi-foundation/wishbone/issues/26) to
|
|
359
|
+
me that it's within spec.
|
|
360
|
+
- Various fixes where registers/signals did not get appropriate values on
|
|
361
|
+
_non-power-on_ resets:
|
|
362
|
+
- PC would either be initialized to `0` or `4`, depending on instruction.
|
|
363
|
+
- MCAUSE register was not cleared to `0`, as [privileged spec](https://riscv.org/specifications/ratified/)
|
|
364
|
+
requires for implementations that do not distinguish reset conditions.
|
|
365
|
+
- Wishbone `CYC` and `STB` would remain asserted after reset if the reset
|
|
366
|
+
happened in the middle of a bus cycle; WB spec
|
|
367
|
+
[requires](https://wishbone-interconnect.readthedocs.io/en/latest/03_classic.html#reset-operation)
|
|
368
|
+
`CYC` and `STB` to deassert upon `SYSCON` reset.
|
|
369
|
+
- Init code after reset now requires one extra cycle (5 cycles total) before
|
|
370
|
+
fetching the first instruction from the user program.
|
|
371
|
+
- Tests for these cases have been added to CI.
|
|
372
|
+
- `doit` tasks would sometimes use the wrong Python interpreter; use `sys.exectuable`
|
|
373
|
+
to indicate "this interpreter" as [recommended](https://docs.python.org/3/library/subprocess.html#subprocess.Popen)
|
|
374
|
+
instead.
|
|
375
|
+
|
|
376
|
+
### Removed
|
|
377
|
+
- Remove special Rust PDM scripts by using .config/cargo.toml.
|
|
378
|
+
- Remove the `Simulator` fixture and `--vcds` option to pytest as provided by
|
|
379
|
+
this package. Instead, use equivalent fixtures/options provided by
|
|
380
|
+
[`pytest-amaranth-sim`].
|
|
381
|
+
- Flake8 linting has been completely replaced with Ruff. We enable
|
|
382
|
+
[preview mode](https://docs.astral.sh/ruff/preview/) to take advantage of
|
|
383
|
+
[unstable](https://docs.astral.sh/ruff/rules/#error-e) [rules](https://docs.astral.sh/ruff/rules/#pydoclint-doc)
|
|
384
|
+
that were provided by flake8.
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
## [0.1.0-alpha.1] - 2024-03-12
|
|
388
|
+
|
|
389
|
+
First release after the `next`/`main` split.
|
|
390
|
+
|
|
391
|
+
### Added
|
|
392
|
+
- Test gateware generation in CI.
|
|
393
|
+
- Updates available for dependencies are tracked with [Renovate Bot](https://www.mend.io/renovate/).
|
|
394
|
+
- Applies to both `main` and `next`.
|
|
395
|
+
- The `yosys` version for Verilog/RTLIL/gateware generation is also tracked in
|
|
396
|
+
CI using a [new workflow](https://codeberg.org/cr1901/sentinel/actions?workflow=update-yosys.yml).
|
|
397
|
+
- Current OSS CAD Suite version is [2024-03-01](https://github.com/YosysHQ/oss-cad-suite-build/releases/tag/2024-03-01).
|
|
398
|
+
- Demo SoC example can optionally use peripherals whose registers are
|
|
399
|
+
implemented using the [`amaranth-soc`] CSR bus.
|
|
400
|
+
- Only fits on HX8K Evaluation board at present.
|
|
401
|
+
- Peripherals are at different addresses when using the CSR bus; the Rust
|
|
402
|
+
firmware can detect which version of the gateware is loaded by querying
|
|
403
|
+
the `MIP` register after reset.
|
|
404
|
+
- Demo prints addresses of peripherals in table format.
|
|
405
|
+
- Rust Demo SoC can be simulated as part of [Pytest] tests.
|
|
406
|
+
- Disabled by default, pass `--runsoc` to `pytest` to enabled.
|
|
407
|
+
- Implement remote Demo SoC builds using [`paramiko`](https://www.paramiko.org/index.html).
|
|
408
|
+
- Add usage as a Python dependency in README.md.
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
### Changed
|
|
412
|
+
- Replace ELF generator with [`pyelftools`](https://github.com/eliben/pyelftools).
|
|
413
|
+
- This simplifies the inline objcopy implementation.
|
|
414
|
+
- GPIO peripheral in SoC demo has input, output, and output-enable ports now.
|
|
415
|
+
- Use a dynamic Python version (_no releases ever saw the manual behavior_).
|
|
416
|
+
- [`dodo.py`](https://pydoit.org/) dependency graph has been cleaned up a bit.
|
|
417
|
+
- Start improving [Signatures](https://amaranth-lang.org/docs/amaranth/latest/stdlib/wiring.html#signatures)
|
|
418
|
+
used throughout Sentinel core.
|
|
419
|
+
- Mostly limited to Decoder, ExceptionRouter, and ALU for now.
|
|
420
|
+
- Many signals remain to be wired up to formal harness via Signatures, rather
|
|
421
|
+
that the formal harness reaching into Sentinel.
|
|
422
|
+
- Python, Rust, and CI dependencies have been updated to most recent versions.
|
|
423
|
+
- Rust firmware development [DoIt] tasks are no longer targeted to IceStick
|
|
424
|
+
only.
|
|
425
|
+
- HX8K development board support is up to parity with IceStick.
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
### Fixed
|
|
429
|
+
- All Amaranth [deprecations](https://amaranth-lang.org/docs/amaranth/latest/changes.html#migrating-from-version-0-4)
|
|
430
|
+
for the upcoming version 0.5 have been addressed, up to commit [715a8d4](https://github.com/amaranth-lang/amaranth/tree/715a8d4).
|
|
431
|
+
- Correct `gen` usage outside pdm in README.md.
|
|
432
|
+
- `dodo.py` no longer errors when removing directory trees that don't exist.
|
|
433
|
+
- Removing dirs is required as part of RISCOF test cleanup.
|
|
434
|
+
- Load-bearing optimization implemented in [39005c1](https://codeberg.org/cr1901/sentinel/src/commit/39005c1)
|
|
435
|
+
that saves ~30 LUTs in SoC demo.
|
|
436
|
+
- Check to see if this can be removed/is no longer necessary.
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
## [0.1.0-alpha] - 2023-11-29
|
|
440
|
+
|
|
441
|
+
Initial release. This is a retroactive release, created just before the
|
|
442
|
+
`next`/`main` split.
|
|
443
|
+
|
|
444
|
+
[PDM](https://pdm-project.org) should be used for interacting with this repo;
|
|
445
|
+
type `pdm run --list` for a list of commands. `pdm` will defer to [DoIt] for
|
|
446
|
+
complex tasks such as orchestrating [RISC-V Formal](https://github.com/YosysHQ/riscv-formal).
|
|
447
|
+
|
|
448
|
+
[Pytest](https://pytest.org) is used for basic testing, and [Flake8](https://flake8.pycqa.org)
|
|
449
|
+
is used for linting. Due to code cleanups required, as well as some tooling
|
|
450
|
+
still being in flux, _no documentation beyond the CHANGELOG.md and README.md
|
|
451
|
+
is provided yet._
|
|
452
|
+
|
|
453
|
+
**Due to git dependencies, this release is only usable within the `pdm`
|
|
454
|
+
environment**. Specifically, the SoC example, tests, and Verilog generation
|
|
455
|
+
works, but using Sentinel as a dependency of another Python/[Amaranth]/`pdm`
|
|
456
|
+
project _does not work_.
|
|
457
|
+
|
|
458
|
+
### Added
|
|
459
|
+
- Working SoC example for [Lattice IceStick](https://www.latticesemi.com/icestick)
|
|
460
|
+
and [iCE40-HX8K Breakout Board](https://www.latticesemi.com/Products/DevelopmentBoardsAndKits/iCE40HX8KBreakoutBoard.aspx).
|
|
461
|
+
- Includes custom Amaranth peripherals and a contrived [Rust](https://www.rust-lang.org/)
|
|
462
|
+
firmware.
|
|
463
|
+
|
|
464
|
+
Run using `pdm demo` (Assembly firmware) or `pdm demo-rust` (Rust firmware).
|
|
465
|
+
- Demo is using [special options](https://libera.irclog.whitequark.org/yosys/2023-11-20#1700497858-1700497760)
|
|
466
|
+
to [yosys](https://yosyshq.net/yosys/) to make Sentinel fit onto IceStick.
|
|
467
|
+
- Microcode written using the [m5meta](https://github.com/brouhaha/m5meta/)
|
|
468
|
+
microcode assembler, version 1.x.
|
|
469
|
+
- An upcoming version 2.x of `m5meta` is expected in the moderate-near
|
|
470
|
+
future. I plan to rewrite the microcode then, and _the rewrite will not
|
|
471
|
+
be compatible with version 1.x._
|
|
472
|
+
- Working RISC-V soft-core implementing the [RV32I_Zcsr specification](https://github.com/riscv/riscv-isa-manual/releases/tag/Ratified-IMAFDQC).
|
|
473
|
+
- Core passes the RISC-V Formal verification tests, as well as the [tests](https://github.com/riscv-non-isa/riscv-arch-test)
|
|
474
|
+
used by RISC-V International as part of the [RISCOF framework](https://github.com/riscv-software-src/riscof).
|
|
475
|
+
- Bespoke test suite with my own custom tests and [pytest] fixtures for
|
|
476
|
+
simulating Sentinel with Amaranth's Python simulator.
|
|
477
|
+
- Many of the pytest test come from an [older test suite](https://github.com/riscv-software-src/riscv-tests)
|
|
478
|
+
no-longer used by RISC-V International. I feel they are fine as a first
|
|
479
|
+
layer of tests to detect immediate breakage of Sentinel.
|
|
480
|
+
- CI using [Github Actions](https://github.com/cr1901/sentinel/actions) tests
|
|
481
|
+
using pytest, RISC-V Formal, RISCOF, and demo synthesis every push and PR.
|
|
482
|
+
- The demo test is allowed to fail due to lack of space on Icestick due to
|
|
483
|
+
different compilers optimizing `yosys` slightly differently. See
|
|
484
|
+
[#2](https://codeberg.org/cr1901/sentinel/issues/2).
|
|
485
|
+
- A nice logo by [Tokino Kei](https://tokinokei.carrd.co/) :).
|
|
486
|
+
|
|
487
|
+
[Amaranth]: https://amaranth-lang.org/
|
|
488
|
+
[`amaranth`]: https://github.com/amaranth-lang/amaranth
|
|
489
|
+
[`amaranth-boards`]: https://github.com/amaranth-lang/amaranth-boards
|
|
490
|
+
[`amaranth-soc`]: https://github.com/amaranth-lang/amaranth-soc
|
|
491
|
+
[`amaranth-stdio`]: https://github.com/amaranth-lang/amaranth-stdio
|
|
492
|
+
[DoIt]: https://pydoit.org/
|
|
493
|
+
[pytest]: https://pytest.org
|
|
494
|
+
[`pytest-amaranth-sim`]: https://github.com/cr1901/pytest-amaranth-sim
|
|
495
|
+
|
|
496
|
+
[Unreleased]: https://codeberg.org/cr1901/sentinel/compare/v0.1.0-beta.2..next
|
|
497
|
+
[0.1.0-beta.2]: https://codeberg.org/cr1901/sentinel/compare/v0.1.0-beta.1..v0.1.0-beta.2
|
|
498
|
+
[0.1.0-beta.1]: https://codeberg.org/cr1901/sentinel/compare/v0.1.0-beta..v0.1.0-beta.1
|
|
499
|
+
[0.1.0-beta]: https://codeberg.org/cr1901/sentinel/compare/v0.1.0-alpha.1..v0.1.0-beta
|
|
500
|
+
[0.1.0-alpha.1]: https://codeberg.org/cr1901/sentinel/compare/v0.1.0-alpha..v0.1.0-alpha.1
|
|
501
|
+
[0.1.0-alpha]: https://codeberg.org/cr1901/sentinel/releases/tag/v0.1.0-alpha
|
|
502
|
+
|
|
503
|
+
<!-- Skeleton generated by git-cliff. Maintained by hand. -->
|