Commit graph

1683 commits

Author SHA1 Message Date
Catherine
0cb71f8c57 sim: only preempt testbenches on explicit wait.
Before this commit, testbenches (generators added with `add_testbench`)
were not only preemptible after any `yield`, but were *guaranteed* to
be preempted by another testbench after *every* yield. This is evil:
if you have any race condition between testbenches, which is common,
this scheduling strategy will maximize the resulting nondeterminism by
interleaving your testbench with every other one as much as possible.
This behavior is an outcome of the way `add_testbench` is implemented,
which is by yielding `Settle()` after every command.

One can observe that:
- `yield value_like` should never preempt;
- `yield assignable.eq()` in `add_process()` should not preempt, since
  it only sets a `next` signal state, or appends to `write_queue` of
  a memory state, and never wakes up processes;
- `yield assignable.eq()` in `add_testbench()` should only preempt if
  changing `assignable` wakes up an RTL process. (It could potentially
  also preempt if that wakes up another testbench, but this has no
  benefit and requires `sim.set()` from RFC 36 to be awaitable, which
  is not desirable.)

After this commit, `PySimEngine._step()` is implemented with two nested
loops instead of one. The outer loop iterates through every testbench
and runs it until an explicit wait point (`Settle()`, `Delay()`, or
`Tick()`), terminating when no testbenches are runnable. The inner loop
is the usual eval/commit loop, running whenever a testbench changes
design state.

`PySimEngine._processes` is a `set`, which doesn't have a deterministic
iteration order. This does not matter for processes, where determinism
is guaranteed by the eval/commit loop, but causes racy testbenches to
pass or fail nondeterministically (in practice depending on the memory
layout of the Python process). While it is best to not have races in
the testbenches, this commit makes `PySimEngine._testbenches` a `list`,
making the outcome of a race deterministic, and enabling a hacky work-
around to make them work: reordering calls to `add_testbench()`.

A potential future improvement is a simulation mode that, instead,
randomizes the scheduling of testbenches, exposing race conditions
early.
2024-03-24 11:53:18 +00:00
Sage Walker
9ed83b6aff sim.core: correct deprecation warning 2024-03-22 23:48:44 +00:00
Catherine
6ce82848d9 lib.memory: Memory.{r,w}_ports.{read,write}_ports.
The abbreviated form was initially added to match `lib.fifo`, but it
looks very out of place on `lib.memory`, and we may be moving away from
such heavy use of abbreviations anyway.

While technically a breaking change, these attributes have very narrow
usefulness and so this change qualifies as "minor".
2024-03-22 23:05:42 +00:00
Catherine
2333c5f0af lib.memory: expand Memory.Init.__repr__().
Display `shape` and `depth` also. `depth` is redundant although useful
for ease of reading (there are always `depth` elements shown), but
`shape` was just lost.
2024-03-22 23:05:42 +00:00
Catherine
fc84b8decf lib.memory: remove Memory.Init.depth.
This attribute is fully redundant with `.__len__()`, and is out of place
on a `list`-like container like `Memory.Init`.

The `.shape` attribute, however, provides a unique function.
2024-03-22 23:05:42 +00:00
Catherine
2640033316 lib.memory: thread src_loc_at in {read,write}_port. 2024-03-22 23:05:42 +00:00
Catherine
b8b1e7081b lib.memory: improve and regularize diagnostics. 2024-03-22 23:05:42 +00:00
Catherine
8d44ec513d lib.memory: improve and finish documentation. 2024-03-22 23:05:42 +00:00
Catherine
8faa6facfb lib.memory: reorder classes and functions. NFC 2024-03-22 23:05:42 +00:00
Catherine
e3c9296813 docs: introduce custom "Members" section, for lib.wiring signatures. 2024-03-22 23:05:42 +00:00
Catherine
6b512520ff docs: upgrade sphinx-rtd-theme, work around readthedocs/sphinx_rtd_theme#1301. 2024-03-22 23:05:42 +00:00
Catherine
8861b8a3eb docs/reference: fix typos. 2024-03-22 06:07:19 +00:00
Wanda
456dcaeb7b lib.io: Implement *Buffer from RFC 55. 2024-03-22 01:44:25 +00:00
Catherine
81eae1dd35 docs/install: link to YoWASP. 2024-03-22 01:22:02 +00:00
Catherine
12b4b1891a docs/install: link to playground. 2024-03-22 01:22:02 +00:00
Catherine
2ab3a4a0a0 docs/install: fix Yosys version requirement. 2024-03-22 01:22:02 +00:00
Wanda
8c65a79cdd hdl._ir: Remove support for non-Elaboratable elaboratables.
Fixes #1216.
2024-03-20 08:20:23 +00:00
Catherine
2569886464 lib.wiring: minor ReST syntax fixes. 2024-03-19 14:17:37 +00:00
Wanda
d6bf47d549 Implement RFC 51: Add ShapeCastable.from_bits and amaranth.lib.data.Const.
Co-authored-by: Catherine <whitequark@whitequark.org>
2024-03-19 04:01:26 +00:00
Wanda
598cf8db28 lib.io: Implement *Port from RFC 55. 2024-03-18 23:56:34 +00:00
Wanda
744576011f Implement RFC 53: Low-level I/O primitives.
Co-authored-by: Catherine <whitequark@whitequark.org>
Co-authored-by: mcclure <mcclure@users.noreply.github.com>
2024-03-18 20:33:22 +00:00
Wanda
18b54ded0a hdl._ir: Fix fallout from #1190, add more tests. 2024-03-16 14:17:00 +00:00
Wanda
23f1b63425 lib.memory: Add Signature.create implementations. 2024-03-16 08:48:32 +00:00
Catherine
83701d74cf CI: automatically publish GitHub releases. 2024-03-15 12:22:12 +00:00
Catherine
11ec35d258 lib.wiring: remove unnecessary flipping in Signature.flatten. 2024-03-15 10:35:50 +00:00
Catherine
3e6e78012d CI: fail document job on warnings. 2024-03-14 06:10:14 +00:00
Catherine
add7d70050 docs/guide: fix incorrect reference. 2024-03-14 06:10:14 +00:00
Wanda
49dee891e8 tests: Exorcise some star-imports. 2024-03-13 18:03:22 +00:00
mcc
27ca96383e utils: F-strings are missing the letter "f"
Also adds tests for utils ValueError strings.
2024-03-13 14:56:27 +00:00
Wanda
5edff532a8 sim: Do not direct user to deprecated add_sync_process. 2024-03-13 13:12:34 +00:00
Wanda
455a7bc6c8 lib.memory: Allow setting Memory.init.
The `init` property is already mutable, so this adds no actual new
functionality, just convenience.
2024-03-13 13:12:15 +00:00
Wanda
cb96b15b8c hdl._ir: Remove all support for fragment flattening. 2024-03-11 21:28:46 +00:00
Wanda
bfe541a6d7 Implement RFC 50: Print and string formatting.
Co-authored-by: Catherine <whitequark@whitequark.org>
2024-03-11 09:42:43 +00:00
Jean-François Nguyen
715a8d4934 lib.memory: strip whitespace. 2024-03-08 15:47:21 +00:00
Wanda
7e291a26e3 docs: Add more links for past releases. 2024-03-08 03:54:34 +00:00
Wanda
161b01450e hdl._ast, hdl._ir: Deduplicate shape unification logic. NFC 2024-03-05 12:24:02 +00:00
Wanda
31a12c03d1 hdl._ir: Remove support for the nonexistent unary "+" operator. 2024-03-03 23:51:38 +00:00
Wanda
c2001fe935 vendor: Rename IntelPlatform to AlteraPlatform.
Fixes #1179.
2024-03-03 22:52:58 +00:00
Wanda
127fe1fd2e hdl._xfrm: Get rid of _insert_resets, move the logic downstream. 2024-03-03 19:34:35 +00:00
Wanda
ea561378ac hdl._nir: Remove ArrayMux, use AssignmentList instead. 2024-03-03 18:52:21 +00:00
Wanda
fc9369b8e1 hdl._xfrm: Simplify EnableInserter logic. 2024-03-03 18:38:20 +00:00
Wanda
7d295b040a test_hdl_ir: Add a bunch of tests for NIR emitter. 2024-03-03 18:09:08 +00:00
Wanda
3ae7714d04 hdl._ir: Fix reset-less signals in async reset domains. 2024-03-03 18:09:08 +00:00
Wanda
2400d39730 lib.io: Make Pin.name return the whole path.
This prevents duplicate pin names.
2024-02-29 20:32:43 +00:00
Catherine
871d726ad4 build.plat: use tcl_quote instead of tcl_escape.
The premise of `tcl_escape` is incorrect: it is not possible, by design,
to escape a single backslash inside of a Tcl {}-quoted string:

    $ tclsh
    % puts {\\}
    \\

`tcl_quote` should be used instead since it can escape arbitrary strings
(and uses the right algorithm already).
2024-02-29 20:07:38 +00:00
Jaro Habiger
65191be1b1 vendor._lattice_{ice40,ecp5,machxo_2_3l}: fix SDC hierarchy separator. 2024-02-29 20:07:38 +00:00
Catherine
4399700273 vendor._lattice_machxo2_3l: fix buffer factories. 2024-02-29 20:07:38 +00:00
Wanda
76a7dc396c hdl._ir: Handle duplicate fragment names. 2024-02-29 20:03:38 +00:00
Wanda
047b64d02c test_hdl_ir: Add NIR testcases for Instance. 2024-02-29 19:39:20 +00:00
Wanda
2bf1b4dafc hdl._ast: Make AST nodes immutable.
Fixes #1067.
2024-02-29 18:56:46 +00:00