nella
8f6c4d40e4
Merge pull request #5623 from YosysHQ/nella/opt-dff-rewrite
...
opt_dff restructure.
2026-01-28 14:41:40 +01:00
Krystine Sherwin
aaebce7adc
log_help: Don't reformat codeblocks
2026-01-28 08:07:44 +13:00
nella
9367090763
OptDff more accurate ctrl/pattern desc.
2026-01-26 22:19:36 +01:00
nella
5803461c24
opt_dff pattern extraction.
2026-01-26 22:10:10 +01:00
Robert O'Callahan
dcd7742d52
Avoid scanning entire module if there are no wires to remove
...
It's pretty common for `opt_clean` to find no wires to remove. In that case,
there is no point scanning the entire design, which can be significantly
expensive for huge designs.
2026-01-23 01:38:20 +00:00
Robert O'Callahan
2c0448a81b
Avoid spurious copy in `IdStringCollector::trace_named()`
2026-01-21 03:31:56 +00:00
Emil J. Tywoniak
befadf6d4d
consteval: describe
2026-01-19 12:00:18 +01:00
Natalia
cf511628b0
modify generator for pyosys/wrappers.cc instead of headers
2026-01-18 02:11:09 -08:00
Natalia
fb864e91ee
Add Design::run_pass() API for programmatic pass execution
...
This commit adds a new run_pass() method to the RTLIL::Design class,
providing a convenient API for executing Yosys passes programmatically.
This is particularly useful for PyYosys users who want to run passes
on a design object without needing to manually construct Pass::call()
invocations. The method wraps Pass::call() with appropriate logging
to maintain consistency with command-line pass execution.
Example usage (from Python):
design = ys.Design()
# ... build or load design ...
design.run_pass("hierarchy")
design.run_pass("proc")
design.run_pass("opt")
Changes:
- kernel/rtlil.h: Add run_pass() method declaration
- kernel/rtlil.cc: Implement run_pass() method
- tests/unit/kernel/test_design_run_pass.cc: Add unit tests
2026-01-14 17:35:45 -08:00
nella
763001885f
Merge pull request #5608 from YosysHQ/nella/rtlil-to-string
...
Add rtlil string getters
2026-01-14 19:00:47 +01:00
nella
210b733555
Add rtlil string getters
2026-01-14 15:37:18 +01:00
Emil J. Tywoniak
8e2038c419
Use digit separators for large decimal integers
2026-01-13 16:38:12 +01:00
Miodrag Milanovic
0e6973037d
Update year in banner and license
2026-01-13 14:23:51 +01:00
Robert O'Callahan
8da919587d
Parallelize `opt_merge`.
...
I'm not sure why but this is actually faster than existing `opt_merge` even with
YOSYS_MAX_THREADS=1, for the jpeg synthesis test. 16.0s before, 15.5s after for
end-to-end synthesis.
2026-01-08 04:21:39 +00:00
Emil J
0ab967b036
Merge pull request #5564 from rocallahan/pass-fuzz
...
Add support for fuzz-test comparison of two passes intended to give identical RTLIL results
2026-01-06 20:07:31 +01:00
Robert O'Callahan
a6d696ba2b
Give `IdString` a default move constructor and make it a POD type.
...
Now that we're not refcounting `IdString`, it can use the default move constructor.
This lets us make `IdString` a POD type so it can be passed in registers
in the standard C++ ABI.
2025-12-30 22:35:14 +00:00
Robert O'Callahan
48cdb499f2
Remove `IdString::id_string()`.
...
This was needed for the short time when `ID()` could return a value of `StaticIdString`.
That is no longer a problem.
2025-12-22 01:57:30 +00:00
Robert O'Callahan
46cb05c471
Pass IdString by value instead of by const reference.
...
When IdString refcounting was expensive, it made sense to pass it by const reference
instead of by value, to avoid refcount churn. Now that IdString is not refcounted,
it's slightly more efficient to pass it by value.
2025-12-22 01:52:59 +00:00
Robert O'Callahan
ddd6a16ee0
Add -legalize option to read_rtlil
2025-12-21 21:47:48 +00:00
Emil J
f003eca615
Merge pull request #5526 from YosysHQ/emil/fix-cellaigs-function-arg-eval-order
...
cellaigs: fix function argument evaluation order
2025-12-12 10:00:09 +01:00
Emil J
5594b817cd
Merge pull request #5524 from rocallahan/single-thread-log
...
Check that we don't use logging during multithreading
2025-12-10 13:54:09 +01:00
Emil J
e08e9119ee
Merge pull request #5516 from rocallahan/limit-threads
...
Limit thread usage in tests
2025-12-10 13:45:07 +01:00
Emil J. Tywoniak
99e873efc9
cellaigs: fix AOI and OAI ordering
2025-12-10 12:41:13 +01:00
Emil J. Tywoniak
d932ce7f47
cellaigs: formatting
2025-12-10 12:33:17 +01:00
Emil J. Tywoniak
882001cb01
cellaigs: fix adder function argument evaluation order
2025-12-10 12:33:17 +01:00
Emil J. Tywoniak
7f3ea41103
cellaigs: fix function argument evaluation order
2025-12-10 11:36:37 +01:00
Emil J
1cceaa2a80
Merge pull request #5538 from YosysHQ/emil/driver-git-hash
...
driver: add --git-hash
2025-12-09 15:00:36 +01:00
Emil J. Tywoniak
6acb79afa2
driver: add --git-hash
2025-12-09 11:58:57 +01:00
Emil J. Tywoniak
23e1b0656c
version: add git hash string
2025-12-09 11:58:43 +01:00
Robert O'Callahan
d274ff8627
Delete prefix strings on shutdown to avoid triggering leak warnings.
...
Fixes #5532
2025-12-05 09:45:47 +00:00
Robert O'Callahan
638e904f91
Remove cover() coverage tracking
2025-12-04 16:27:13 +01:00
Robert O'Callahan
7219ac94b3
Add YOSYS_MAX_THREADS
2025-12-04 12:09:04 +01:00
Robert O'Callahan
7e75200b2a
Check that we don't use logging during multithreading
2025-11-29 22:47:23 +00:00
Robert O'Callahan
b23dc345ae
Make it safe to access .c_str() for autoidx IDs in a multithreaded context
2025-11-25 22:49:41 +00:00
Robert O'Callahan
948001f39f
Merge the two autoidx hashtables into one
...
When something calls `IdString::c_str()` on an autoidx ID, we need to cache the
full string in a thread-safe way. If we need to allocate an entry in some data
structure to do that, it's difficult to do in a thread-safe no-performance-hazard way.
So instead, store the cached string pointer in the same hashtable as the prefix
pointer.
2025-11-25 21:57:46 +00:00
Robert O'Callahan
8f0ecce53f
Forbid creating IdStrings and incrementing autoidx during multithreaded phases, and add dynamic checks for that
...
We could make it safe to increment autoidx during multithreaded passes, but that's
actually undesirable because it would lead to nondeterminism. If/when we need new
IDs during parallel passes, we'll have to figure out how to allocate them in a
deterministic way, and that will depend on the details of what the pass does.
So don't try to tackle that now.
2025-11-25 21:57:46 +00:00
Robert O'Callahan
4c8b537d71
Remove YOSYS_NO_IDS_REFCNT
...
Refcounting is hardly used at all so this option is not that useful.
We might want to have a different option that disables GC if that becomes
a performance issue, but that should be a different option.
2025-11-25 21:57:46 +00:00
Robert O'Callahan
7f9de6e48f
Make coverage data thread-safe
2025-11-25 21:46:48 +00:00
Emil J
2eff366e8c
Merge branch 'main' into emil/sdc_expand
2025-11-19 16:29:37 +01:00
Emil J. Tywoniak
5a798b64ef
sdc: separate out
2025-11-19 15:25:22 +01:00
Emil Jiří Tywoniak
c281bac461
sdc: add initial stubbed demo
2025-11-19 15:25:03 +01:00
Emil J. Tywoniak
9f07e21e35
rtlil: undeprecate builtin_ff_cell_types
2025-11-19 15:20:50 +01:00
Emil J. Tywoniak
9e81db4373
ff: split out type-only information
2025-11-19 15:20:50 +01:00
Robert O'Callahan
261a0ae9e1
Implement at() methods on SigSpec so that SigSpec::bits().at() continues to work as it did
...
Fixes a regression caused by commit 745222fa3b , which caused some
third-party code to fail to build, e.g.:
5d7aa035c6/lib/Transforms/YosysOptimizer/RTLILImporter.cpp (L229)
2025-11-17 09:15:55 +00:00
Emil J
84adc82fad
Merge pull request #5484 from YosysHQ/emil/idstring-simpler-final-gc
...
driver: move IdString collection to yosys_shutdown
2025-11-15 00:10:12 +01:00
Emil J. Tywoniak
c497b3b24c
Revert "rtlil: make tracing optional in IdString garbage collection"
...
This reverts commit 8c76f93fce .
2025-11-14 15:32:10 +01:00
Emil J. Tywoniak
65d7d70507
driver: move IdString collection to yosys_shutdown
2025-11-14 15:31:45 +01:00
Miodrag Milanović
ba99c05902
Merge pull request #5482 from rocallahan/newid-namespace
...
Add missing `YOSYS_NAMESPACE_PREFIX` to fix callers of `NEW_ID` that aren't in the Yosys namespace
2025-11-14 14:06:15 +01:00
Emil J. Tywoniak
c48bc56f4a
driver: fix timing data divison by zero when no passes run
2025-11-13 14:10:52 +01:00
Emil J. Tywoniak
1dd5b150e5
driver: garbage collect IdStrings without tracing at exit
2025-11-13 14:10:52 +01:00
Robert O'Callahan
ead0f922e1
Add missing YOSYS_NAMESPACE_PREFIX to fix callers of NEW_ID that aren't in the Yosys namespace
2025-11-12 22:29:54 +00:00
Emil J. Tywoniak
8c76f93fce
rtlil: make tracing optional in IdString garbage collection
2025-11-12 20:22:30 +01:00
Emil J. Tywoniak
1ee4fc9d27
fix YOSYS_XTRACE_GET_PUT
2025-11-12 20:20:51 +01:00
Emil J. Tywoniak
50bfb5c5c9
constids: add $input_port and $connect
2025-11-12 20:19:42 +01:00
Robert O'Callahan
578d658871
Add timing stats for IdString garbage collection
2025-11-12 11:52:04 +01:00
Robert O'Callahan
df8444c5e7
Optimize IdString operations to avoid calling c_str()
2025-11-12 11:52:04 +01:00
Robert O'Callahan
e95ed7bbab
Make NEW_ID create IDs whose string allocation is delayed
2025-11-12 11:52:04 +01:00
Robert O'Callahan
8895757364
Ensure that `new_id(_suffix)()` cannot create collisions with existing `IdString`s.
2025-11-12 11:52:04 +01:00
Robert O'Callahan
9577a028c8
Make new_id/new_id_suffix taking string_view to avoid allocating strings
2025-11-12 11:52:04 +01:00
Robert O'Callahan
b3f3f42577
Remove StaticIdString and just use IdString now that we can make it constexpr
2025-11-12 11:52:04 +01:00
Robert O'Callahan
b0e2d75dbe
Make IdString refcounts a hashtable containing only the nonzero refcounts
...
This saves space and doesn't cost very much since we hardly ever have nonzero refcounts any more.
It also allows for IdStrings with negative indexes, which we're going to add.
2025-11-12 11:52:04 +01:00
Robert O'Callahan
54bde15329
Implement IdString garbage collection instead of refcounting.
2025-11-12 11:52:04 +01:00
Robert O'Callahan
5133b4bdea
Create RTLIL::OwningIdString and use it in a few places
2025-11-12 11:52:04 +01:00
Robert O'Callahan
d28f97e9da
Remove YOSYS_USE_STICKY_IDS
2025-11-12 11:52:04 +01:00
Robert O'Callahan
0fe79ce01b
Make RTLIL::Design::get_all_designs() unconditionally defined
2025-11-12 11:52:04 +01:00
Robert O'Callahan
e84bc3c6c5
Remove explicit empty-string check when looking up IdStrings
2025-11-12 11:52:04 +01:00
Robert O'Callahan
20639906e3
Store IdString lengths and use them
2025-11-12 11:52:04 +01:00
Robert O'Callahan
32641bbf93
Make IdString::contains take std::string_view so we avoid a strlen when the parameter is a string constant
2025-11-12 11:52:04 +01:00
Robert O'Callahan
2319d82efb
Make IdString::begins_width/ends_with take std::string_view so we avoid a strlen when the parameter is a string constant
2025-11-12 11:52:04 +01:00
KrystalDelusion
529886f7fb
Merge pull request #5473 from YosysHQ/krys/unsized_params
...
Handle unsized params
2025-11-12 07:14:44 +13:00
Emil J. Tywoniak
ee5b8a97b9
rtlil: avoid clang warning
2025-11-10 12:02:36 +01:00
Emil J. Tywoniak
0452955069
rtlil: add explanatory note to SigSpec::Chunks
2025-11-10 12:02:21 +01:00
Robert O'Callahan
1cf3497d15
Repack SigSpecs when possible
2025-11-07 15:54:56 +00:00
Robert O'Callahan
38d1d071a5
Implement SigSpec::updhash() using a relaxed atomic for thread-safety
2025-11-07 15:54:56 +00:00
Robert O'Callahan
745222fa3b
Make SigSpec::unpack() non-const
2025-11-07 15:54:56 +00:00
Robert O'Callahan
870ae18a2d
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-11-07 15:54:56 +00:00
Robert O'Callahan
e1169d03fe
Use chunks iterator for SigSpec::extract()
2025-11-07 15:54:56 +00:00
Robert O'Callahan
4939484840
Don't reset the hash when unpacking, instead clear the hash whenever bits are modified
2025-11-07 15:54:56 +00:00
Robert O'Callahan
aa4a0fe815
Use size() instead of direct access to width_ in many places
2025-11-07 15:54:56 +00:00
Robert O'Callahan
619f49eabe
Remove unnecessary pack() from SigSpec::extend_u0()
2025-11-07 15:54:55 +00:00
Robert O'Callahan
b612c1bb39
Simplify SigSpec::as_bit()
2025-11-07 15:54:55 +00:00
Robert O'Callahan
a69d48dd19
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-11-07 15:54:55 +00:00
Robert O'Callahan
92ea557979
Build a temporary SigChunk list in the iterator in the cases where that's needed
2025-11-07 15:54:55 +00:00
Robert O'Callahan
7394a2c597
Make SigSpec conversion to vector of SigChunk use chunks iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
974b4dbe25
Make SigSpec::parse_rhs use is_chunk to avoid direct access to chunks_
2025-11-07 15:54:55 +00:00
Robert O'Callahan
62cd3ddfb8
Make SigSpec::to_sigbit_pool use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
4ed25c0538
Make SigSpec::to_sigbit_set use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
39b89aae88
Use SigSpec::try_as_const in some places
2025-11-07 15:54:55 +00:00
Robert O'Callahan
dd3940c8bb
Make SigSpec::is_one_hot use try_as_const
2025-11-07 15:54:55 +00:00
Robert O'Callahan
ce597dc38c
Fix try_as_const/as_wire/as_chunk
2025-11-07 15:54:55 +00:00
Robert O'Callahan
0281ed1458
Add try_as_const and use the const iterator a bit more
2025-11-07 15:54:55 +00:00
Robert O'Callahan
0091d14e6d
Make SigSpec::has_marked_bits use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
80b3efb3da
Make SigSpec::has_const(State) use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
ed8022f53f
Make SigSpec::has_const use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
1893c61fe2
Make SigSpec::is_fully_undef use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
e2defe7898
Make SigSpec::is_fully_def use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
152a487cc8
Make SigSpec::is_fully_ones use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
ddd04e13e0
Make SigSpec::is_fully_zero use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
a7ac396fd9
Make is_fully_const use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
b0ee67a355
Make SigSpec::is_wire/is_chunk/is_fully_const use chunk iterator
2025-11-07 15:54:54 +00:00