Robert O'Callahan
45017e19ec
Make SigSpec::unpack() non-const
2025-10-31 11:53:39 +00:00
Robert O'Callahan
9a2fd4c31b
Switch the SigSpec packed representation to allow just a single chunk that's inline in the SigSpec.
...
Single-chunk SigSpecs are very common and this avoids a heap allocation. It also simplifies
some algorithms.
2025-10-31 11:53:39 +00:00
Robert O'Callahan
1af5d4f2db
Use chunks iterator for SigSpec::extract()
2025-10-31 11:53:39 +00:00
Robert O'Callahan
ab525643a7
Don't reset the hash when unpacking, instead clear the hash whenever bits are modified
2025-10-31 11:53:39 +00:00
Robert O'Callahan
a1f7d6c9bf
Use size() instead of direct access to width_ in many places
2025-10-31 11:53:39 +00:00
Robert O'Callahan
dbb8354996
Remove unnecessary pack() from SigSpec::extend_u0()
2025-10-31 11:53:39 +00:00
Robert O'Callahan
d314c47a55
Simplify SigSpec::as_bit()
2025-10-31 11:53:39 +00:00
Robert O'Callahan
be530bef73
Instead of using packing and hashing to compute SigSpec ordering and equality, just use the width and chunkwise comparisons
...
This avoids having to pack and compute hashes, and generally results in a
simpler ordering.
2025-10-31 11:53:39 +00:00
Robert O'Callahan
8c9dd3209a
Make SigSpec conversion to vector of SigChunk use chunks iterator
2025-10-31 11:53:39 +00:00
Robert O'Callahan
4672127610
Make SigSpec::parse_rhs use is_chunk to avoid direct access to chunks_
2025-10-31 11:53:39 +00:00
Robert O'Callahan
11a91af920
Make SigSpec::to_sigbit_pool use chunk iterator
2025-10-31 11:53:39 +00:00
Robert O'Callahan
8cb7cd7ac1
Make SigSpec::to_sigbit_set use chunk iterator
2025-10-31 11:53:39 +00:00
Robert O'Callahan
82f86164d3
Use SigSpec::try_as_const in some places
2025-10-31 11:53:39 +00:00
Robert O'Callahan
0d45d9cc6e
Make SigSpec::is_one_hot use try_as_const
2025-10-31 11:53:39 +00:00
Robert O'Callahan
a0e9e2d364
Fix try_as_const/as_wire/as_chunk
2025-10-31 11:53:39 +00:00
Robert O'Callahan
000c081965
Add try_as_const and use the const iterator a bit more
2025-10-31 11:53:38 +00:00
Robert O'Callahan
04a6dbc562
Make SigSpec::has_marked_bits use chunk iterator
2025-10-31 11:53:38 +00:00
Robert O'Callahan
7bd6b4f287
Make SigSpec::has_const(State) use chunk iterator
2025-10-31 11:53:38 +00:00
Robert O'Callahan
213d665ae1
Make SigSpec::has_const use chunk iterator
2025-10-31 11:53:38 +00:00
Robert O'Callahan
5c8f9f14ca
Make SigSpec::is_fully_undef use chunk iterator
2025-10-31 11:53:38 +00:00
Robert O'Callahan
b2de56cae2
Make SigSpec::is_fully_def use chunk iterator
2025-10-31 11:53:38 +00:00
Robert O'Callahan
8a88acd9b8
Make SigSpec::is_fully_ones use chunk iterator
2025-10-31 11:53:38 +00:00
Robert O'Callahan
58dbf75885
Make SigSpec::is_fully_zero use chunk iterator
2025-10-31 11:53:38 +00:00
Robert O'Callahan
20e64ee17b
Make is_fully_const use chunk iterator
2025-10-31 11:53:38 +00:00
Robert O'Callahan
bf4cfbd72d
Make SigSpec::is_wire/is_chunk/is_fully_const use chunk iterator
2025-10-31 11:53:38 +00:00
Robert O'Callahan
fd7b4f4a8b
Make SigSpec::updhash() use chunk iterator
2025-10-31 11:53:38 +00:00
Robert O'Callahan
37e4c2e8f8
Make SigSpec::chunks() return an object that can be iterated over without packing the SigSpec
2025-10-31 11:53:38 +00:00
Robert O'Callahan
c4f3e61339
Make Module stop accessing internals of SigSpec
2025-10-29 18:32:10 +00:00
Emil J
a80462f27f
Merge pull request #5339 from rocallahan/fast-rtlil-parser
...
Rewrite the RTLIL parser for efficiency
2025-10-08 14:52:37 +02:00
Mohamed Gaber
447a6cb3f0
misc: WITH_PYTHON -> YOSYS_ENABLE_PYTHON
...
For consistency.
Also trying a new thing: only rebuilding objects that use the pybind11 library. The idea is these are the only objects that include the Python/pybind headers and thus the only ones that depend on the Python ABI in any capacity, so other objects can be reused across wheel builds. This has the potential to cut down build times.
2025-10-03 11:54:44 +03:00
Robert O'Callahan
db3d9a1baf
When adding named elements to an RTLIL::Module, std::move the name to avoid refcount churn
2025-09-30 21:39:18 +00:00
Robert O'Callahan
6b43fca8df
Make the Const string constructor take the string by value and move it into the const
2025-09-30 21:39:18 +00:00
Jannis Harder
86fb2f16f7
bufnorm: Refactor and fix incremental bufNormalize
...
This fixes some edge cases the previous version didn't handle properly
by simplifying the logic of determining directly driven wires and
representatives to use as buffer inputs.
2025-09-29 08:21:28 +02:00
Jannis Harder
9c1d0a2346
Merge pull request #5382 from rocallahan/fix-bounds-check
...
Fix off-by-one error in bounds check in `RTLIL::SigChunk::operator[]`
2025-09-24 08:41:16 +02:00
Robert O'Callahan
0a17205a95
Fix off-by-one error in bounds check
2025-09-23 21:29:57 +00:00
Robert O'Callahan
effc52fedc
Make ID:: constants be StaticIdStrings for better optimization.
...
Their internal indexes will be known at compile time, like we already support for the `ID()` macro.
2025-09-23 03:25:16 +00:00
Emil J
a78eb9e151
Merge pull request #5315 from YosysHQ/emil/write_rtlil-no-sort
...
write_rtlil: don't sort
2025-09-22 11:14:39 +02:00
Jannis Harder
d88d6fce87
kernel: Rewrite bufNormalize
...
This is a complete rewrite of the RTLIL-kernel-side bufnorm code. This
is done to support inout ports and undirected connections as well as to
allow removal of cells while in bufnorm mode.
This doesn't yet update the (experimental) `bufnorm` pass, so to
manually test the new kernel functionality, it is important to only use
`bufnorm -update` and `bufnorm -reset` which rely entirely on the kernel
functionality. Other modes of the `bufnorm` pass may still fail in the
presence of inout ports or undirected connections.
2025-09-17 13:56:46 +02:00
Jannis Harder
1251e92e3a
Add $input_port and $connect cell types
2025-09-17 13:56:46 +02:00
Jannis Harder
c4f435569f
kernel: Add known_driver method to Wire/SigSpec
2025-09-17 13:56:46 +02:00
Jannis Harder
22423b97c1
kernel: Add RTLIL::PortDir for a combined input and output flag
2025-09-17 13:56:46 +02:00
Robert O'Callahan
d24488d3a5
Instead of using builtin_ff_cell_types() directly, go through a method Cell::is_builtin_ff()
2025-09-17 03:24:19 +00:00
Emil J. Tywoniak
fdbdd193c1
rtlil: add roundtrip test for design -stash and design -save, fix #5321
2025-09-16 15:47:16 +02:00
rhanqtl
11b829ba70
fix(parse): #5234 adjust width of rhs according to lhs
2025-09-16 15:24:23 +02:00
Robert O'Callahan
fee2b8992c
Stop using mutable in Const.
...
Now that we only call `bitvectorize()` in non-const methods, we can move the casting-away-const to only happen
in `bitvectorize()`, which is deprecated so only some plugins (maybe) are using it.
This means `const` `Const` methods don't change the underlying data, which means
they'll be safe to use from multiple threads if/when we want to do that.
2025-09-16 03:17:24 +00:00
Robert O'Callahan
29810f1e7c
Make Const::is_*() functions work on packed bits without decaying to vector<State>
2025-09-16 03:17:24 +00:00
Robert O'Callahan
caaf9a4400
Const::decode_string() doesn't need to call bitvectorize
2025-09-16 03:17:24 +00:00
Robert O'Callahan
cb1186aac5
Make Const::as_string work without reducing packed bits to vector<State>
2025-09-16 03:17:24 +00:00
Robert O'Callahan
67a274ed1f
Optimize Const::hash_into to hash packed bits efficiently
2025-09-16 03:17:24 +00:00
Robert O'Callahan
9ad83cc67b
Fast path for Const::operator==
2025-09-16 03:17:24 +00:00