Commit Graph

1886 Commits

Author SHA1 Message Date
Emil J. Tywoniak 5e72464a15 rtlil: enable single-bit vector wires 2025-05-12 13:23:29 +02:00
Krystine Sherwin afd5bbc7fa
fstdata.cc: Fix last step
Includes test file for sanity checking simulation steps.
2025-05-12 13:18:19 +12:00
Krystine Sherwin d0b9a0cb98
sim.cc: Move cycle check
Calling `throw dst_end_of_data_exception()` when the desired number of cycles has been reached means that the fst reader can't tidy up after itself and leads to memory leaks.
This doesn't happen when the `-stop` flag is used because the `Yosys::FstData` struct tracks the end time and skips the outer callback if the simulation has gone past the desired end time.
Move cycle checking into the inner callback along with the time checking means that the outer callback no longer needs to throw an exception in order to stop checking further values, while still allowing the fst reader to finish reading and deallocate memory.
2025-05-12 12:48:01 +12:00
Krystine Sherwin af75dce660
Fix Crashes with GCC 15 #5088
When building `WITH_PYTHON`, where a global list of modules is maintained, deleting a module also erases the entry in said global list.  This can lead to memory corruption if the global list is destructed before the module.
Using `on_shutdown()` instead means the module destructor is explicitly called before the global list can be destructed, preventing the issue.
Also add a comment to `Pass::~Pass()` to suggest the same for future passes that might try to use that (and see this commit in the blame if they need a reason why).
2025-05-10 09:59:13 +12:00
Emil J. Tywoniak 2e9a194ce9 gzip: reject uncompressing directories 2025-05-09 22:33:30 +02:00
Emil J. Tywoniak b05c0c70af io: don't accept a directory when file expected 2025-05-09 22:33:30 +02:00
Emil J 5aa9bfbf7d
Merge pull request #5098 from mikesinouye/hashlib-1
Add <optional> to haslib.h which uses std::optional
2025-05-08 19:05:10 +02:00
Emil J bfbbb8cf98
Merge pull request #5086 from YosysHQ/emil/driver-no-version
driver: add --no-version to suppress writing Yosys version
2025-05-08 16:28:25 +02:00
George Rennie e2485000c7 kernel: handle unsigned case for as_int_saturating correctly
* This fixes #5105
2025-05-08 11:08:25 +02:00
George Rennie 7cbe6ed048 kernel: add safer variants of as_int 2025-05-07 14:39:17 +02:00
Emil J 6378ba10eb
Merge pull request #5078 from RonxBulld/main
Change the implementation of log_debug in kernel/log.h
2025-05-07 11:34:46 +02:00
Emil J. Tywoniak 90a2c92370 driver: allow --no-version still write things like Generated by Yosys 2025-05-07 11:34:23 +02:00
mikesinouye 93780bb869
Add <optional> to haslib.h which uses std::optional 2025-05-06 09:57:03 -07:00
Emil J. Tywoniak d7affb8821 driver: add --no-version to suppress writing Yosys version in command outputs 2025-05-05 13:12:08 +02:00
Emil J 11f2348246
Merge pull request #5073 from YosysHQ/emil/fix-uncompressed-missing-file-error
gzip: refactor file open failure errors
2025-04-30 19:29:13 +02:00
RonxBulld 15cfce061a
Change the implementation of log_debug in kernel/log.h from a macro function to a normal function. 2025-04-29 22:43:10 +08:00
Emil J. Tywoniak adb1986dc1 gzip: refactor file open failure errors 2025-04-29 10:37:35 +02:00
KrystalDelusion bfe05965f9
Merge pull request #5066 from YosysHQ/george/opt_expr_shr_sign
opt_expr: fix sign extension for shifts
2025-04-29 09:29:10 +12:00
George Rennie 4fbb2bc1f3 celledges: use capped shift width 2025-04-26 18:34:21 +02:00
Emil J. Tywoniak 3541db8bbb driver: fix -X xtrace backtrace level 2025-04-25 00:51:10 +02:00
KrystalDelusion 1f32f980cd
Merge pull request #5025 from povik/fix-macc_v2-satgen
satgen: Fix $macc_v2 x-prop
2025-04-22 08:55:28 +12:00
Martin Povišer f8e67c7a08 satgen: Fix $macc_v2 x-prop 2025-04-15 10:31:42 +02:00
Martin Povišer 38beae1e06
Merge pull request #4946 from povik/cost-cc-enhance
cost: Add `$mem_v2`, `$macc_v2` estimates
2025-04-14 11:08:59 +02:00
Krystine Sherwin ca57df8927
cutpoint: Add $scopeinfo cell
Also adds "blackbox" as a valid TYPE.
2025-04-11 04:12:34 +12:00
Krystine Sherwin f042c36898
rtlil.h: Extra comment on helper enums
i.e. making explicit the ones that aren't intended for direct use.
2025-04-08 11:59:42 +12:00
Krystine Sherwin 1ef9908a85
rtlil.cc: Fix box checks in selected_modules 2025-04-08 11:59:36 +12:00
Krystine Sherwin 7d7ee5d9bf
rtlil.h: Fix selection ctor ordering 2025-04-08 11:59:32 +12:00
Krystine Sherwin cd3b914132
Reinstate #4768
Revert the reversion so that we can fix the bugs that the PR missed.
2025-04-08 11:58:05 +12:00
Miodrag Milanović d49364d96f
Revert "Refactor full_selection" 2025-04-07 12:11:55 +02:00
KrystalDelusion 98d4355b82
Merge pull request #4768 from YosysHQ/krys/refactor_selections
Refactor full_selection
2025-04-05 14:15:27 +13:00
Krystine Sherwin d8a9ad6860
Add Selection::clear() method
Use method in `select.cc` to reduce code duplication.
2025-04-05 10:56:01 +13:00
Krystine Sherwin dab67f84da
rtlil.h: Document selections 2025-04-05 10:46:09 +13:00
Jannis Harder 119e998f12 read_liberty: Faster input handling for the liberty lexer
The lexer for liberty files was using istream's `get` and `unget` which
are notorious for bad performance and that showed up during profiling.

This replaces the direct `istream` use with a custom LibertyInputStream
that does its own buffering to provide `get` and `unget` that behave the
same way but are implemented with a fast path that is easy to inline and
optimize.
2025-04-01 14:12:12 +02:00
Emil J. Tywoniak 7aefd4b226 gzip: back to pointers 2025-03-19 13:43:44 +01:00
Emil J. Tywoniak a8a5463f57 gzip: uphold rules for basic_streambuf::underflow overrides 2025-03-19 13:43:44 +01:00
Emil J. Tywoniak 79985a2bca gzip: minor refactor 2025-03-19 13:43:44 +01:00
Emil J. Tywoniak ceb7a923da io: smooth out non-POSIX function usage across platforms 2025-03-19 13:43:44 +01:00
Emil J. Tywoniak ab2ca831c9 io: remove unused unistd.h to fix windows build 2025-03-19 13:43:44 +01:00
Emil J. Tywoniak d00259081d gzip: simplify uncompressed interface 2025-03-19 13:43:44 +01:00
Emil J. Tywoniak 813f909460 gzip: istream 2025-03-19 13:43:44 +01:00
Emil J. Tywoniak 4f3fdc8457 io: refactor string and file work into new unit 2025-03-19 13:43:42 +01:00
Martin Povišer 251285be4c cost: Add `$mem_v2`, `$macc_v2` estimates 2025-03-18 13:51:09 +01:00
Martin Povišer 91cd382f8b macc: Rename 'ports' to 'terms' throughout codebase 2025-03-18 13:25:10 +01:00
KrystalDelusion 9fa1f0e70c
Merge pull request #4567 from kivikakk/cxxrtl-escape-trailing
cxxrtl: use octal encoding of non-printables.
2025-03-14 16:52:07 +13:00
Krystine Sherwin 68adac691d
rtlil.cc: Add comment to log_assert
Because the use of `RTLIL::AttrObject::get_blackbox_attribute()` is deprecated, but the assert is needed in case users are doing weird things.
2025-03-14 14:40:06 +13:00
Krystine Sherwin a3968d43f0
Drop deprecation on Design::selected_modules()
Instead, change the default `Design::selected_modules()` to match the behaviour (i.e. `selected_unboxed_modules_warn()`) because it's a lot of files to touch and they don't really _need_ to be updated.
Also change `Design::selected_whole_modules()` users over to `Design::selected_unboxed_whole_modules()`, except `attrmap` because I'm not convinced it should be ignoring boxes.  So instead, leave the deprecation warning for that one use and come back to the pass another time.
2025-03-14 14:08:56 +13:00
Krystine Sherwin add5eba9b2
Design::selection_stack should never be empty
Add a `log_assert` for it in `Design::check()`.
Remove unneeded checks in other places.
2025-03-14 14:08:16 +13:00
Krystine Sherwin 824f7146aa
Selecting a blackbox sets selects_boxes 2025-03-14 14:08:15 +13:00
Krystine Sherwin a30bacfcb1
Add Selection::complete_selection
Used to select all modules including boxes, set when both `full` and `boxes` are true in the constructor, pulling down `full_selection`.
Add `Selection::selects_all()` method as short hand for `full_selection || complete_selection`.
Update selection operations to account for complete selections.
Add static methods to `Selection` for creating a new empty/full/complete selection to make it clearer to users when doing so.
Use said static methods to replace most instances of the `Selection` constructor.
Update `Selection::optimize` to use
2025-03-14 14:08:15 +13:00
Krystine Sherwin d09ae42951
Fixing selections 2025-03-14 14:08:14 +13:00
Krystine Sherwin 091e9488fe
rtlil: Design::top_module() can be const
Since it doesn't change anything and is just a lookup.
2025-03-14 14:08:14 +13:00
Krystine Sherwin dac2bb7d4d
Use selection helpers
Catch more uses of selection constructor without assigning a design.
2025-03-14 14:08:13 +13:00
Krystine Sherwin a67b57bd64
rtlil: Add selection helpers
New methods on Design to push/pop selection instead of accessing the selection stack directly. Includes methods for pushing a full/complete/empty selection.
Also helper methods on modules to check `is_selected` and `is_selected_whole`.
2025-03-14 14:05:40 +13:00
Krystine Sherwin 3b1b09baf6
Can clean boxed modules
If a selection contains a boxed module, but does not select boxes, it should be removed from the selection.
2025-03-14 14:05:40 +13:00
Krystine Sherwin 2f907e8be4
Unify Design::selected_modules variants
Now uses two enums, one to control whether or not to include partially selected
modules (and what to do if they are encountered), and one to control whether or
not to include boxed modules (and what to do if they are encountered).

Mark Design::selected{modules, whole_modules}() deprecated and make them
provide warnings on boxes. There are a lot of places that use them and I can't
always tell which ones support boxed modules and which don't.
2025-03-14 14:05:40 +13:00
Krystine Sherwin 398afd102e
Refactor full_selection
The `Design::selected_*()` methods no longer unconditionally skip boxed modules.  Instead, selections are now box and design aware.
The selection constructor now optionally takes a design pointer, and has a new `selects_boxes` flag.  If the selection has an assigned design, then `Selection::selected_*()` will only return true for boxed modules if the selects_boxes flag is set.  A warning is raised if a selection is checked and no design is set.  Selections can change design via the `Selection::optimize()` method.
Most places that iterate over `Design::modules()` and check `Selection::selected_module()` should instead use `Design::selected_modules()`.
Since boxed modules should only ever be selected explicitly, and `full_selection` (now) refers to all non-boxed modules, `Selection::optimize()` will clear the `full_selection` flag if the `selects_boxes` flag is enabled, and instead explicitly selects all modules (including boxed modules).  This also means that `full_selection` will only get automatically applied to a design without any boxed modules.

These changes necessitated a number of changes to `select.cc` in order to support this functionality when operating on selections, in particular when combining selections (e.g. by union or difference).
To minimize redundancy, a number of places that previously iterated over `design->modules()` now push the current selection to the design, use `design->selected_modules()`, and then pop the selection when done.

Introduce `RTLIL::NamedObject`, to allow for iterating over all members of a module with a single iterator instead of needing to iterate over wires, cells, memories, and processes separately.
Also implement `Module::selected_{memories, processes, members}()` to match wires and cells methods.  The `selected_members()` method combines each of the other `selected_*()` methods into a single list.
2025-03-14 14:05:39 +13:00
Martin Povišer 6da543a61a
Merge pull request #4818 from povik/macc_v2
Add `$macc_v2`
2025-03-12 22:55:40 +01:00
N. Engelhardt 0dfd9e9395
Merge pull request #4868 from david-sawatzke/improve_tcl_output_docs
tcl: Update help message to clarify usage of `result.string`
2025-03-03 15:16:42 +00:00
Emil J. Tywoniak 78cb10da69 improve mkdtemp error message 2025-02-26 12:06:54 +01:00
Emil J b4a169527d
Merge pull request #4894 from YosysHQ/emil/abstract
Add `abstract` pass for formal verification
2025-02-25 11:16:37 +01:00
Jannis Harder 7cd822b7f5 rtlil: Add {from,to}_hdl_index methods to Wire
In the past we had the occasional bug due to some place not handling all
4 combinations of upto/downto and zero/nonzero start_offset correctly.
2025-02-18 17:08:45 +01:00
KrystalDelusion 31b00b4c72
celledges: Use b_width_capped for left shifts
`b_width_capped` already exists for preventing arithmetic overflow, limiting the value of `b_width` to 30.  This just changes the left shifts to also use it.
The caveat of incorrect results for extremely large values of `a_width` still applies, as does the improbability of that actually happening.
This fixes #4844 (or at least, the floating point exception; the circuit still isn't valid but I think that's fine).
2025-01-31 11:03:33 +13:00
David Sawatzke 09ead2daa9 tcl: Update help message to clarify usage of `result.string`
In the current documentation, it's unclear if `result.string` serves as
an example of a string name. It is furthermore unclear what the purpose
of `result.string` is. Clarify this by adding a small explanation (and
fix a typo)
2025-01-28 09:42:39 +01:00
Martin Povišer 1d57a7cf6b macc_v2: Relax and fix cell check 2025-01-27 15:52:49 +01:00
Martin Povišer aabb4ea1df macc_v2: Fix checks and parameter padding 2025-01-27 13:08:19 +01:00
Martin Povišer cb8f855f34 rtlil: Fix macc_v2 cell check 2025-01-24 12:38:03 +01:00
Martin Povišer 61450e8b6e Update codebase for macc_v2 2025-01-24 12:38:03 +01:00
Martin Povišer 5882055899 macc_v2: Add C port 2025-01-24 12:38:03 +01:00
Martin Povišer c5fd96ebb0 macc_v2: Start new cell 2025-01-24 12:38:03 +01:00
Martin Povišer 08394c51a2 rtlil: Add const append helper 2025-01-24 12:38:03 +01:00
Emil J da5c20dcfb
Merge pull request #4849 from YosysHQ/emil/hashlib-merge-top-ops
hashlib: merge hash_ops with hash_top_ops for plugin compat
2025-01-21 12:09:27 +01:00
Miodrag Milanovic d50849ea83 Copyright year update 2025-01-21 08:48:29 +01:00
Emil J. Tywoniak aa01ef3312 hashlib: simplify loopback. NFC 2025-01-20 16:15:48 +01:00
N. Engelhardt a5ba1d2eba fix bugs in handling last id in hdlname to scopename conversion 2025-01-16 12:57:08 +01:00
N. Engelhardt 17d45796a6 ModuleHdlnameIndex: handle objects with private name and hdlname attribute 2025-01-15 15:50:10 +01:00
Emil J. Tywoniak 901935fbce hashlib: merge hash_ops with hash_top_ops for plugin compat 2025-01-14 21:41:33 +01:00
Emil J. Tywoniak 4dbef95792 mark all hash_top methods nodiscard 2025-01-14 12:48:59 +01:00
Emil J. Tywoniak a58481e9b7 mark all hash_into methods nodiscard 2025-01-14 12:39:15 +01:00
Emil J. Tywoniak a2805b15c9 hashlib: fix hash_obj_ops discarding hash value 2025-01-14 12:36:24 +01:00
Martin Povišer ca0ace66bc
Merge pull request #4817 from povik/macc_v2-1
macc: Stop using the B port
2025-01-08 14:42:51 +01:00
Martin Povišer 652a1b9806 macc: Stop using the B port
The B port is for single-bit summands. These can just as well be
represented as an additional summand on the A port (which supports
summands of arbitrary width). An upcoming `$macc_v2` cell won't be
special-casing single-bit summands in any way.

In preparation, make the following changes:

 * remove the `bit_ports` field from the `Macc` helper (instead add any
   single-bit summands to `ports` next to other summands)

 * leave `B` empty on cells emitted from `Macc::to_cell`
2025-01-08 13:03:35 +01:00
mikesinouye de9cb5a60c
Remove spurious prime 2025-01-02 11:05:30 -08:00
mikesinouye 1ae0d8432f
Approximately double the max hash table size 2025-01-02 08:59:11 -08:00
Emil J 8fd40942e9
Merge pull request #4825 from YosysHQ/emil/fix-gcc-error-directive
yosys_common: fix gcc warning in #error directive
2024-12-19 16:29:03 +01:00
Emil J. Tywoniak cea5326229 yosys_common: fix gcc warning in #error directive 2024-12-19 15:55:51 +01:00
Emil J. Tywoniak a6bd8ff3e5 yw: fix unintensional recursion in hash_into 2024-12-19 11:47:34 +01:00
Emil J. Tywoniak 026e9dae9d hashlib: fixes from jix 2024-12-18 15:09:25 +01:00
Emil J. Tywoniak ed70038aa1 hashlib: fixes from jix 2024-12-18 15:09:25 +01:00
Emil J. Tywoniak b9b9515bb0 hashlib: hash_eat -> hash_into 2024-12-18 15:09:25 +01:00
Emil J. Tywoniak 0a525f38c2 hashlib: declare YS_HASHING_VERSION = 1 2024-12-18 15:09:25 +01:00
Emil J. Tywoniak 1df8a3e64b hashlib: legacy mkhash_add -> djb2_add 2024-12-18 15:09:25 +01:00
Emil J. Tywoniak 4e29ec1854 hashlib: acc -> eat 2024-12-18 15:09:25 +01:00
Emil J. Tywoniak 79acc141d5 hashlib: add deprecated mkhash function to prevent plugin breakage 2024-12-18 14:58:53 +01:00
Emil J. Tywoniak ad0dc17711 docs: document the ideas behind the hashing interface 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak 0dafe06cd4 hashlib: run_hash uses hash_top_ops, not hash_ops 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak 02a578365a hashlib: remove is_new from HasherDJB32, implement hash_top for IdString 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak 704a58ab21 hashlib: restore hash_obj_ops for pointers to indexed types 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak 52b0fc03b7 hash: solo hashing interface, override for SigBit 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak b7991ed1f5 hashlib: prevent naive hashing of IdString when hashing SigBit 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak 4d14399749 hashlib: allow forcing Hasher state, use it for IdString trivial hashing 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak c1af19fabc hashlib: don't xorshift in between upper and lower word 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak 209ab6fb72 hashlib: fudge always 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak 582259f770 hashlib: hash_t can be set to 64-bit 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak b8738e2bd7 hashlib: use hash_t across the board 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak c73c88033d hashlib: only include in one place 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak db04788c18 hashlib: fix pyosys 2024-12-18 14:58:31 +01:00
Emil J. Tywoniak 953508f6d2 driver: add --hash-seed 2024-12-18 14:58:29 +01:00
Emil J. Tywoniak d071489ab1 hashlib: redo interface for flexibility 2024-12-18 14:49:25 +01:00
Martin Povišer 1f718e3ab6 kernel: Remove global `tcl.h` include
In commit ac988cf we made sure to undefine the CONST/VOID macros left
defined by `tcl.h`, but this in turn makes it an issue to include
additional Tcl headers later on (see issue #4808).

One way out is to avoid a global `tcl.h` include. In the process we drop
support for Tcl-enabled MXE builds, which were likely broken anyway due
to the additional Tcl APIs used from `tclapi.cc`.
2024-12-10 13:49:08 +01:00
Martin Povišer b0708a38bf
Merge pull request #4678 from povik/tcl-rtlil-api
Start Tcl design inspection methods
2024-12-09 15:44:58 +01:00
N. Engelhardt 2a744b4b82 add hash method to scopeindex cursor 2024-12-06 11:18:39 +01:00
Krystine Sherwin 9925b27432
Goodbye guidelines (except GettingStarted)
Drop the parts that are being dropped.
Move the things that are being moved.
Also move the verilog stuff out of README and into the docs.
GettingStarted is less cut and dry, so hold off on that one.
2024-12-05 09:21:12 +13:00
Krystine Sherwin f0da1cc67f
Start removing guidelines folder
Disable the export to docs and remove any references to the guidelines folder.
2024-12-05 09:18:56 +13:00
KrystalDelusion c61b2bc1bc
Merge pull request #4794 from YosysHQ/krys/cygwin_compat
Fix Cygwin compatibility
2024-12-05 09:16:18 +13:00
KrystalDelusion c96d02b204
Merge pull request #4784 from YosysHQ/krys/reduce_warnings
Reduce number of warnings
2024-12-05 09:16:06 +13:00
Emil J d78086480f
Merge pull request #4770 from YosysHQ/emil/autoidx-option
driver: add --autoidx
2024-12-04 16:43:40 +01:00
Jannis Harder 81de54f436 tclapi: Remove unused -bool flag from get_param and document -[su]int 2024-12-03 18:59:52 +01:00
Jannis Harder cac6dd9bcb tclapi: Use older bignum API and handle external tommath for mac os 2024-12-03 18:49:38 +01:00
Krystine Sherwin 7d8140ddea
kernel/mem: Fix Cygwin compat
Avoid error:
```
kernel/mem.cc:1683:7: error: conflicting declaration ‘using addr_t = using addr_t = uint32_t’
 1683 | using addr_t = MemContents::addr_t;
      |       ^~~~~~
In file included from /usr/include/sys/types.h:222,
                 from /usr/include/pthread.h:11,
                 from /usr/lib/gcc/x86_64-pc-cygwin/12/include/c++/x86_64-pc-cygwin/bits/gthr-default.h:35,
                 from /usr/lib/gcc/x86_64-pc-cygwin/12/include/c++/x86_64-pc-cygwin/bits/gthr.h:148,
                 from /usr/lib/gcc/x86_64-pc-cygwin/12/include/c++/ext/atomicity.h:35,
                 from /usr/lib/gcc/x86_64-pc-cygwin/12/include/c++/bits/cow_string.h:37,
                 from /usr/lib/gcc/x86_64-pc-cygwin/12/include/c++/bits/basic_string.h:51,
                 from /usr/lib/gcc/x86_64-pc-cygwin/12/include/c++/string:53,
                 from ./kernel/yosys_common.h:27,
                 from ./kernel/yosys.h:42,
                 from ./kernel/mem.h:23,
                 from kernel/mem.cc:20:
/usr/include/machine/types.h:63:15: note: previous declaration as ‘typedef char* addr_t’
   63 | typedef char *addr_t;
```

According to IntelliSense, only the return types need to be prefixed with `MemContents::`, the rest are automagically using the class definition and highlight as `using Yosys::MemContents::addr_t = uint32_t`.
2024-12-03 13:15:33 +13:00
Martin Povišer f0704b6ede Redo integer passing on top of bignum 2024-12-02 19:56:51 +01:00
Martin Povišer 1ded817beb booth: Map simple `$macc` instances too 2024-12-01 16:00:04 +01:00
Krystine Sherwin 1de5d98ae2
Reduce comparisons of size_t and int
`Const::size()` returns int, so change iterators that use it to `auto` instead of `size_t`.
For cases where size is being explicitly cast to `int`, use the wrapper that we already have instead: `Yosys::GetSize()`.
2024-11-29 12:53:29 +13:00
Martin Povišer 646c5a19a8
Merge pull request #4776 from YosysHQ/krys/get_blackbox_attribute
Move get_blackbox_attribute method to Module instead of AttrObject
2024-11-28 00:25:16 +01:00
Martin Povišer 1717a0b9c0
Merge pull request #4721 from ldoolitt/main
kernel/drivertools.h: avoid maybe-uninitialized compile warnings
2024-11-28 00:09:43 +01:00
KrystalDelusion f428163252
Move get_blackbox_attribute method to Module instead of AttrObject 2024-11-28 11:19:16 +13:00
Emil J. Tywoniak 65146e3acf driver: add --autoidx 2024-11-26 12:11:10 +01:00
Martin Povišer 270846a49a
Merge pull request #4723 from povik/memv2-nordports
rtlil: Adjust internal check for `$mem_v2` cells
2024-11-18 15:44:39 +01:00
Martin Povišer 1cb5fd08b7
Merge pull request #4682 from povik/read_liberty-extensions
read_liberty extensions
2024-11-18 14:42:18 +01:00
Martin Povišer 2dba345049 portarcs: New command to derive propagation arcs 2024-11-13 16:20:35 +01:00
Martin Povišer 4ce8c7a0d3
Merge pull request #4709 from YosysHQ/emil/idstring-in-fold
functional, glift: use fold overload of IdString::in instead of pool …
2024-11-13 15:17:33 +01:00
Martin Povišer c7e8d41600 read_liberty: Set `area` `capacitance` attributes 2024-11-12 13:26:38 +01:00
Robin Ole Heinemann 8bc4bd8a20 cxxrtl, fmt: escape double quotes in c strings 2024-11-11 18:49:05 +00:00
Larry Doolittle 3ae9ca7c2b drivertools.h: switch from log_assert(0) to log_abort() for new feature 2024-11-08 10:30:11 -08:00
Martin Povišer e82e5f8b13 rtlil: Adjust internal check for `$mem_v2` cells
There's a mismatch between what `kernel/mem.cc` emits for memories
with no read ports and what the internal RTLIL check expects.

The point of dispute it whether some of the parameters relating to read
ports have a zero-width value in this case. The `mem.cc` code says no,
the internal checker says yes.

Surveying the other `$mem_v2` parameters, and internal cell parameters
in general, I am inclined to side with the `mem.cc` code.

This breaks RTLIL compatibility but for an obscure edge case.
2024-11-08 15:18:43 +01:00
Larry Doolittle d36a387aca kernel/drivertools.h: avoid maybe-uninitialized compile warnings
Initialize "unsigned int inner" in hash() functions
Includes a log_assert() that might help catch corrupted data structures
or future incomplete modification of DriveType definition
2024-11-07 19:49:25 -08:00
N. Engelhardt 2de9f00368
Merge pull request #4620 from RCoeurjoly/fix-vcd-parsing-ghdl-var-spacing 2024-11-06 16:29:07 +01:00
N. Engelhardt 9068ec5566
Merge pull request #4627 from RCoeurjoly/roland/assume_x 2024-11-06 16:27:30 +01:00
Emil J. Tywoniak 387a235158 functional, glift: use fold overload of IdString::in instead of pool literals 2024-11-06 12:48:32 +01:00
Martin Povišer cba9460cba Split off Tcl APIs into `tclapi.cc` 2024-11-04 16:17:02 +01:00
Emil J b2d78589e2
Merge pull request #4675 from YosysHQ/emil/pyosys-fix-segfault
yosys: fix pyosys initialization segfault
2024-11-01 16:40:58 +01:00
Lofty dd7ea0ab6c qwp: remove 2024-10-25 14:09:58 +01:00
Emil J 7db4c65970
Merge pull request #4672 from YosysHQ/emil/fix-tcl-args-cxxopts
driver: fix special args passing to tcl and python
2024-10-21 15:41:24 +02:00
Martin Povišer ccd98d21c1 Start Tcl design inspection methods 2024-10-21 13:32:03 +02:00
Emil J. Tywoniak 37e61b993a yosys: fix pyosys initialization segfault 2024-10-18 11:56:13 +02:00
Emil J 799497ebba
Merge pull request #4671 from YosysHQ/emil/const-deref-pyosys
py_wrap: implement nested class definitions
2024-10-18 11:46:12 +02:00
Emil J. Tywoniak 49d8a35c2e rtlil: appease py_wrap 2024-10-18 11:31:20 +02:00
Emil J. Tywoniak 0341265e64 driver: fix special args passing to tcl and python 2024-10-16 23:56:45 +02:00
Emil J. Tywoniak e9e67f381c rtlil: remove trailing comma as pyosys workaround 2024-10-16 23:15:06 +02:00
Krystine Sherwin 4ea6119734
cmdref: Move html only section inside cmd:def
Fixes missing links in body and `??` in tag/command index.
Update synth.rst to match.
2024-10-17 06:06:57 +13:00
Krystine Sherwin b1025dbaa6
cellhelp.py: Cells can have tags
Tags are added to the list of properties when exporting to `cells.json`.
2024-10-15 07:35:41 +13:00
Krystine Sherwin 04b0ae540d
cellref: Move default help message to register.cc
Drop the default help message from rst while still displaying it on the command line.
Fix command line formatting for older style help messages.
2024-10-15 07:31:47 +13:00
Krystine Sherwin b127ac07f8
Docs: Preliminary autocellgroup usage
Remove `/source/cell` from .gitignore.
Add a few initial cell pages.
Add YosysCellGroup documenter and cell:group directive.
Update Documenters to use nested json.
Better nested tocs for group.module.source layout.
2024-10-15 07:26:04 +13:00
Krystine Sherwin 7c5b10fe50
cellref: Add json dump
New `help -dump-cells-json <file>` to dump cells list.
Add 'group' field to SimHelper class/struct with defaults to gate_other and word_other depending on source (simcells or simlib).
Add 'unary' group to unary operator cells for testing (based on internal cell library docs page).
2024-10-15 07:25:27 +13:00
Krystine Sherwin 063a6bc2d7
register.cc: Include properties in docs 2024-10-15 07:23:45 +13:00
Krystine Sherwin 4c9c4c1419
celltypes.h: Add extra properties 2024-10-15 07:23:45 +13:00
Krystine Sherwin 21747c468c
Docs: Improve cell_help usage
- Drop `cell_code` and instead map code lookups to the `cell_help` dict.
- Add helper functions to struct for checking and getting the right cell.
- Add `CellType` for cell to `write_cell_rst` function declaration in
  preparation for use in future.
- Iterate over `yosys_celltypes.cell_types` when exporting cell rst files,
  reporting errors for any cells defined in `cell_types` but not
  `cell_help_messages`.
2024-10-15 07:23:45 +13:00
Krystine Sherwin f9b4e04fef
Docs: Add cell reference
Subclass the command reference code in order to support smart references to the internal cells.
2024-10-15 07:17:36 +13:00
Krystine Sherwin c98d134662
cellhelp: Extra newline
Fix `$macc` page.
2024-10-15 07:17:35 +13:00
Krystine Sherwin d629aa6bf1
cellhelp: Split gate-level and word-level cells 2024-10-15 07:17:35 +13:00
Krystine Sherwin 57cd8d29db
cellhelp: Add default format parse for simcells
Since `simcells.v` uses consistent formatting we can handle it specifically to help tidy up sphinx warnings about the truth tables, and instead chuck them in a code block which when printing to rst.
Also has the side effect that rst code blocks can be added manually with `//- ::` followed by a blank line.
2024-10-15 07:16:40 +13:00
Krystine Sherwin a2b2904ed8
cellhelp: Add source line to help
Include Source file and line number in SimHelper struct, and use it for verilog code caption in rst dump.
Also reformat python string conversion to iterate over a list of fields instead of repeating code for each.
2024-10-15 07:16:40 +13:00
Krystine Sherwin 784292626e
cellhelp: Rename short_desc to title 2024-10-15 07:16:39 +13:00
Krystine Sherwin 1e5a50ff3a
Docs: Convert write_cell_rst to use SimHelper 2024-10-15 07:16:39 +13:00
Krystine Sherwin 6bbe763845
Docs: Put cell library help strings into a struct
Allows for more expressive code when constructing help messages for cells.
Will also move extra logic in parsing help strings into the initial python parse instead of doing it in the C++ at export time.
2024-10-15 07:16:39 +13:00
Krystine Sherwin a6641da73c
Docs: Initial version of cell_ref autogen 2024-10-15 07:16:39 +13:00
Emil J. Tywoniak bc5d9d1bd3 functional: fix std::move usage in Factory::constant 2024-10-14 06:28:14 +02:00
Emil J. Tywoniak 785bd44da7 rtlil: represent Const strings as std::string 2024-10-14 06:28:12 +02:00
Emil J 61ed9b6263
Merge pull request #4608 from phsauter/rtlil-const-compress
rtlil: add Const::compress helper function
2024-10-12 20:38:25 -07:00
Emil J 5c9b2df689
Merge pull request #4616 from YosysHQ/emil/cxxopts
driver: replace getopt with cxxopts, replace -B, clean up help
2024-10-12 00:52:34 -07:00
Philippe Sauter c53c87e1f4 rtlil: add Const:: as_int_compressed function 2024-10-09 19:48:57 +02:00
Philippe Sauter 07fb8af05b rtlil: handle all-zeros case in Const::compress 2024-10-09 19:48:57 +02:00
Philippe Sauter 4cd2e04da4 rtlil: add Const::compress helper function
Compresses the current bits to the minimum
width representation by removing leading bits.
2024-10-09 19:48:57 +02:00
Emil J. Tywoniak 575415ade2 driver: switch to cxxopts, replace -B 2024-10-09 15:21:34 +02:00
Mohamed Gaber 3d6b8b8e1a
wheels: fix missing yosys-abc/share directory
* `misc/__init__.py`:
  * checks if there's a `yosys-abc` in the same directory - if yes, sets the variable `sys._pyosys_abc`
  * checks if there's a `share` in the same directory - if yes, sets the variable `sys._pyosys_share_dirname`
* `yosys.cc::init_share_dirname`: check for `sys._pyosys_share_dirname`, use it at the highest priority if Python is enabled
* `yosys.cc::init_abc_executable_name`: check for `sys._pyosys_abc`, use it at at the highest priority if Python is enabled
* `Makefile`: add new target, `share`, to only create the extra targets
* `setup.py`: compile libyosys.so, yosys-abc and share, and copy them all as part of the pyosys build
* `test/arch/ecp5/add_sub.py`: ported `add_sub.ys` to Python to act as a test for the share directory and abc with Python wheels, used in CI
2024-10-09 13:09:14 +03:00
Martin Povišer 380a425598
Merge pull request #4639 from mikesinouye/hashlib
Explictly #include <variant> for std::variant usage.
2024-10-08 16:42:42 +02:00
Miodrag Milanović 535b3304cc
Merge pull request #4534 from donn/test_wheels
Pyosys Wheels
2024-10-08 11:24:16 +02:00
Mike Inouye 1e3973c5cb Explictly #include <variant> for std::variant usage.
Signed-off-by: Mike Inouye <mikeinouye@google.com>
2024-10-07 21:57:30 +00:00
Martin Povišer e46cc57cc4
Merge pull request #4613 from povik/err-never-silence
log: Never silence `log_cmd_error`
2024-10-07 16:12:31 +02:00
Martin Povišer 74e92d10e8
Merge pull request #4593 from povik/aiger2
New aiger backend
2024-10-07 16:11:25 +02:00
Mohamed Gaber 407343a7a1
Pyosys Wheels
* Created `setup.py`: Python package manifest to build `pyosys` wheels with a custom extension to build and include `libyosys.so` using Make
* `.gitignore`: Added byproducts of the Python wheel build process
* `Makefile`: Added `-undefined dynamic_lookup` to `libyosys.so` so missing symbols can be resolved by importing into a Python interpreter
* `kernel/yosys.cc`: Gated `PyImport_AppendInittab` with `!Py_IsInitialized`; as of Python 3.12, the interpreter is already initialized and `PyImport_AppendInittab` would cause an exception to be raised
* Created `wheels.yml`: CI workflow for building wheels for CPython on:
  * Linux (glibc, musl) and Darwin
  * x86-64 and arm64
2024-10-07 16:39:54 +03:00
Emil J 1f517d6c7d
Merge pull request #4553 from donn/python_scriptfile
-y flag for libyosys Python scripts
2024-10-07 11:02:40 +02:00
Roland Coeurjoly 5ea2c6e6e5 Assume x values for missing signal data in FST
Co-authored-by: Miodrag Milanovic <mmicko@gmail.com>
Co-authored-by: Roland Coeurjoly <rolandcoeurjoly@gmail.com>
2024-10-02 12:08:48 +02:00
Roland Coeurjoly 76c615b2ae Fix: handle VCD variable references with and without whitespace
Co-authored-by: Miodrag Milanović <mmicko@gmail.com>
Co-authored-by: Roland Coeurjoly <rolandcoeurjoly@gmail.com>
2024-10-01 11:51:20 +02:00
Mohamed Gaber 35c8ad61ac
cli/python: error-checking, python interpreter bugfix
* Less brittle method of adding script dirname to sys.path
* Check if scriptfp successfully opens before using it
* Move `log_error` to after `PyErr_Print()` is called
2024-09-30 17:38:43 +03:00
Martin Povišer 3e3515e7d9 log: Never silence `log_cmd_error`
Add extra handling to arrange for `log_cmd_error` never being silenced
by the command line `-v N` option. Similar path for `log_error` exists
already.
2024-09-24 17:47:46 +02:00
Martin Povišer 3a1b003cc3 celltypes: Fix `$buf` eval 2024-09-18 16:55:02 +02:00
Martin Povišer 865df26fac Adjust buf-normalized mode 2024-09-17 10:46:20 +02:00
Claire Xenia Wolf 80119386c0 Add RTLIL "buffered-normalized mode" and improve "bufnorm" pass
Signed-off-by: Claire Xenia Wolf <claire@clairexen.net>
2024-09-17 10:46:20 +02:00
Claire Xenia Wolf d027ead4b5 Improvements in "bufnorm" pass
Signed-off-by: Claire Xenia Wolf <claire@clairexen.net>
2024-09-17 10:46:20 +02:00
Claire Xenia Wolf 4d469f461b Add coarse-grain $buf buffer cell type
Signed-off-by: Claire Xenia Wolf <claire@clairexen.net>
2024-09-17 10:46:20 +02:00
N. Engelhardt c8b42b7d48
Merge pull request #4538 from RCoeurjoly/verific_bounds 2024-09-12 13:04:04 +02:00
Mohamed Gaber 8dac27108e
Typos 2024-09-11 21:45:51 +03:00
Mohamed Gaber 738b5eef0b
Add dirname of script file to sys.path
This matches the behavior of running a Python interpreter, where the
first element of sys.path is the dirname of the script being run.

This allows importing of files and modules in the same directory without
messing with PYTHONPATH or similar.
2024-09-11 21:45:51 +03:00
Mohamed Gaber 38f9e6c3a2
-y flag for libyosys Python scripts
This adds a Python equivalent to the `-c` option, where scripts importing `libyosys` can be imported and used.

Most of the work for this was already done to enable Python passes a couple years back, so this is a relatively small changeset.
2024-09-11 21:45:51 +03:00
Roland Coeurjoly bdc43c6592 Add left and right bound properties to wire. Add test. Fix printing
for signed attributes

Co-authored-by: N. Engelhardt <nak@yosyshq.com>
Co-authored-by: Roland Coeurjoly <rolandcoeurjoly@gmail.com>
2024-09-10 12:52:42 +02:00
Miodrag Milanović b20df72e1e
Merge pull request #4536 from YosysHQ/functional
Functional Backend
2024-09-06 10:05:04 +02:00
Emil J. Tywoniak bd6f7bb4a7 ff: improve comments 2024-09-05 11:17:12 +02:00
Emily Schmidt 4eeb8d326a functional backend: rename "type" to either "kind" or "sort" to make the terminology consistent 2024-08-28 12:39:41 +01:00
Asherah Connor 94913a9f5a cxxrtl: use octal encoding of non-printables.
"\x0a" is a perfectly valid escape sequence, but unfortunately "\x0ac"
is equivalent to "\xac", and not "\x0a" "c" as we might expect --- *any*
number of hexadecimal characters after the "\x" is accepted. This can be
hit pretty easily if a newline is present in a format string.

"\x{...}" syntax is only available as of C++23, so use octal format
instead; a maximum of 3 digits following the backslash is accepted.

The alternative would be to render every escape like `" "\x0a" "`, but
it seems more effort that way.
2024-08-27 17:41:52 +03:00
Emily Schmidt b428bf4600 functional backends: identifiers in c++/smtlib may not start with digits 2024-08-27 13:10:34 +01:00
Emily Schmidt 459e6b913a add functional ir documentation 2024-08-27 11:11:02 +01:00
N. Engelhardt 0fc5812dcd
Merge pull request #4541 from YosysHQ/krys/compiler-warnings
Resolve (some) compiler warnings
2024-08-26 15:04:16 +02:00
Emily Schmidt 761eff594f functional backend: missing includes for stl containers 2024-08-22 11:13:58 +01:00
Emily Schmidt 9b5e81b13f drivertools: fix C++20 "incomplete type" error by moving constructors below other definitions 2024-08-22 10:40:56 +01:00
Emily Schmidt f456761e88 add sandia copyright notice to the functional backend 2024-08-21 11:04:11 +01:00
Emily Schmidt 831da51255 add picorv test to functional backend 2024-08-21 11:04:11 +01:00
Emily Schmidt 50047d25b3 functional backend: add different types of input/output/state variables 2024-08-21 11:04:11 +01:00
Emily Schmidt 79a1b691ea silence some more warnings, undo mistaken addition 2024-08-21 11:04:11 +01:00
Emily Schmidt 8f77494263 silence some warnings 2024-08-21 11:04:11 +01:00
Emily Schmidt fbee31080e add optional header and hashlib implementation for optional 2024-08-21 11:04:11 +01:00
Emily Schmidt 850b3a6c29 convert class FunctionalIR to a namespace Functional, rename functionalir.h to functional.h, rename functional.h to compute_graph.h 2024-08-21 11:04:08 +01:00
Emily Schmidt 8c0f625c3a functional backend: topological sort starts with the output and next states nodes, other nodes get deleted 2024-08-21 11:03:29 +01:00
Emily Schmidt 7ac0e92d35 functional backend: rename get_input and get_current_state to input and current_state (more consistent with other methods) 2024-08-21 11:03:29 +01:00
Emily Schmidt 99effb6789 add support for initializing registers and memories to the functional backend 2024-08-21 11:03:29 +01:00
Emily Schmidt 12a31a4418 add MemContents class to mem.h 2024-08-21 11:03:29 +01:00
Emily Schmidt 6d329e142d functional backend: error out if multiply driven or undriven signals are seen, dont bother putting them in functionalir 2024-08-21 11:03:29 +01:00
Emily Schmidt 145af6f10d fix memory handling in functional backend, add more error messages and comments for memory edgecases 2024-08-21 11:03:29 +01:00
Emily Schmidt 4722f13a5d functional backend: reduce $lcu to $alu 2024-08-21 11:03:29 +01:00
Emily Schmidt 3cd5f4ed83 add support for RTLIL cells with multiple outputs to the functional backend, implement $fa,$lcu,$alu 2024-08-21 11:03:29 +01:00
Emily Schmidt 13bacc5c8f eliminate pmux in functional backend 2024-08-21 11:03:29 +01:00
Emily Schmidt c0c90c2c31 functional backend: require shift width == clog2(operand width) 2024-08-21 11:03:29 +01:00
Emily Schmidt 7f8f21b980 remove widths parameters from FunctionalIR factory methods and from functionalir.cc 2024-08-21 11:03:29 +01:00
Emily Schmidt 55c2c17853 document functionalir.h and change visitors to derive from AbstractVisitor. remove extraneous widths arguments from visitors. 2024-08-21 11:03:29 +01:00
Emily Schmidt 6922633b0b fix a few bugs in the functional backend and refactor the testing 2024-08-21 11:03:29 +01:00
Emily Schmidt 9ad859fc0a add bwmux, bweqx, bmux, demux cells 2024-08-21 11:03:29 +01:00
Emily Schmidt 00a65754bb factor out SExpr/SExprWriter classes out of smtlib backend, and also tidy them up/document them 2024-08-21 11:03:27 +01:00
Emily Schmidt 9f660b1e4b rewrite smtlib pass to use SExpr class 2024-08-21 11:02:31 +01:00
Roland Coeurjoly 566e57d24f Support $lut cells. Both C++ and SMT tests pass 2024-08-21 11:02:31 +01:00
Emily Schmidt 1b2986f7fb add support for $mul, $div, $divfloor, $mod, $modfloor, $pow in functional backend 2024-08-21 11:02:31 +01:00
Emily Schmidt 9700df50d6 add generic writer class with formatting function to FunctionalTools 2024-08-21 11:02:31 +01:00
Emily Schmidt eb2bb8c45b tidy up generic functional backend, add generic scope class, tidy up c++ functional backend 2024-08-21 11:02:31 +01:00
Emily Schmidt 6f9e21219b add new generic compute graph and rewrite c++ functional backend to use it 2024-08-21 11:02:29 +01:00
Emily Schmidt 248d5f72d4 add support for std::variant to hashlib 2024-08-21 11:01:09 +01:00
Emily Schmidt dbf2bc3b1d need unsigned comparison when checking shift widths for overflow in functional backend 2024-08-21 11:01:09 +01:00
Emily Schmidt 7b29d177ac add support for memories to c++ and smtlib functional backends 2024-08-21 11:01:09 +01:00
Emily Schmidt 7611dda2eb add initial version of functional smtlib backend 2024-08-21 11:01:09 +01:00
Emily Schmidt 63dea89fac add initial version of functional C++ backend 2024-08-21 11:01:09 +01:00
Emily Schmidt dd5ec84a26 fix bugs in drivertools 2024-08-21 11:01:09 +01:00
Jannis Harder d90268f610 fixup! drivertools: Utility code for indexing and traversing signal drivers 2024-08-21 11:01:09 +01:00
Jannis Harder d4e3daa9d0 ComputeGraph datatype for the upcoming functional backend 2024-08-21 11:01:09 +01:00
Jannis Harder f29422f745 topo_scc: Add sources_first option 2024-08-21 11:01:09 +01:00
Jannis Harder 56572978f5 drivertools: Utility code for indexing and traversing signal drivers
It adds `DriveBit`, `DriveChunk` and `DriveSpec` types which are similar
to `SigBit`, `SigChunk` and `SigSpec` but can also directly represent
cell ports, undriven bits and multiple drivers. For indexing an RTLIL
module and for querying signal drivers it comes with a `DriverMap` type
which is somewhat similar to a `SigMap` but is guaranteed to produce
signal drivers as returned representatives.

A `DriverMap` can also optionally preserve connections via intermediate
wires (e.g. querying the driver of a cell input port will return a
connected intermediate wire, querying the driver of that wire will
return the cell output port that's driving the wire).
2024-08-21 11:00:21 +01:00
Jannis Harder f24e2536c6 kernel/rtlil: Add `SigBit operator[](int offset)` to `SigChunk`
This is already supported by `SigSpec` and since both `SigChunk` and
`SigSpec` implement `extract` which is the multi-bit variant of this,
there is no good reason for `SigChunk` to not support
`SigBit operator[](int offset)`.
2024-08-21 10:58:39 +01:00
Jannis Harder c73c8a39cf kernel/log: Add log_str helper for custom log_* functions/overloads
When implementing custom log_... functions or custom overloads for the
core log functions like log_signal it is necessary to return `char *`
that are valid long enough.

The log_... functions implemented in log.cc use either `log_id_cache` or
`string_buf` which both are cleared on log_pop.

This commit adds a public `log_str` function which stores its argument
in the `log_id_cache` and returns the stored copy, such that custom
log functions outside of log.cc can also create strings that remain
valid until the next `log_pop`.
2024-08-21 10:58:39 +01:00
Jannis Harder 0922142567 Add generic topological sort and SCC detection
This adds a generic non-recursive implementation of Tarjan's linear time
SCC algorithm that produces components in topological order. It can be
instantiated to work directly on any graph representation for which the
enumerate_nodes and enumerate_successors interface can be implemented.
2024-08-21 10:58:39 +01:00
Emil J. Tywoniak 4847caac49 driver: print maximum memory usage on macOS as well 2024-08-19 12:50:12 +02:00
Krystine Sherwin 7b47f645d7
Address warnings
- Setting default values
- Fixing mismatched types
- Guarding unused var
2024-08-16 04:30:31 +12:00
Emil J 92cac63845
Merge pull request #4344 from widlarizer/emil/keep_hierarchy
cost: add keep_hierarchy pass with min_cost argument
2024-07-29 16:33:08 +02:00
Emil J 051d83205d
Merge pull request #4471 from georgerennie/hashlib_primes
hashlib: Add some more primes
2024-07-29 15:10:22 +02:00
Emil J. Tywoniak 4b29f64142 cost: add model for techmapped cell count, keep_hierarchy pass with -min_cost parameter 2024-07-29 10:26:02 +02:00