Compare commits

...
741 Commits
Author SHA1 Message Date
Wilson Snyder 436d3d76f0 Version bump 2025-02-24 18:19:40 -05:00
Wilson Snyder c1f0787669 Commentary: Changes update 2025-02-24 18:15:08 -05:00
Yilou Wang dae4c8ee22 Support constrained random for arrays in structs (#5765) (#5802) 2025-02-24 17:51:51 -05:00
Wilson Snyder 5daf7385f1 Commentary: Changes update 2025-02-24 04:04:23 -05:00
Wilson Snyder 4ce8164277 Fix parsing input wire with default and range (#5800). 2025-02-24 03:51:49 -05:00
Todd Strader 7ec32799b0 Fix expression coverage + VarXRefs (#5797) 2025-02-22 15:55:23 -05:00
Geza Lore 812861e7f2 Optimize splitting trigger computation and dump (#5798) 2025-02-23 05:57:36 +10:00
Wilson Snyder 1857f6399c Fix $monitor with dotted references (#5794). 2025-02-21 17:18:49 -05:00
Todd Strader f7ccc013e7 Improve V3EmitV for interfaces (#5796) 2025-02-21 16:49:14 -05:00
Kamil Rakoczy 2e1fa8f338 Add --preproc-resolve for modules in preprocessor output (#5789)
Signed-off-by: Kamil Rakoczy <[email protected]>
2025-02-22 04:47:54 +10:00
Todd Strader 70459b3208 Fix V3EmitV for non-zero based arrays (#5790) 2025-02-21 05:49:32 +11:00
Ryszard Rozak 2a23ec74e4 Fix dpi context functions (#5788) 2025-02-20 10:15:09 +01:00
Wilson Snyder be1ace423e Fix time import error on time parameters (#5786). 2025-02-19 17:03:59 -05:00
Wilson Snyder 2d0149b703 Commentary: Changes update 2025-02-19 17:00:29 -05:00
Todd Strader 34ced254c0 Support expression coverage (#5719) 2025-02-19 16:42:23 -05:00
Wilson Snyder fe15171649 Internals: cppcheck cleanups. No functional change. 2025-02-18 01:14:51 -05:00
Wilson Snyder 4092ac7e72 Commentary: Changes update 2025-02-18 01:05:10 -05:00
Yutetsu TAKATSUKASA 1a07af57a3 Fix unpacked split_var (#5782) (#5785) 2025-02-18 05:34:57 +11:00
Kamil Rakoczy c840ffb0ae Support nested classes (#4178) (#5778)
Signed-off-by: Kamil Rakoczy <[email protected]>
2025-02-17 23:47:41 +11:00
Wilson Snyder fbe8439eb8 Commentary: Changes update 2025-02-15 00:58:14 -05:00
Wilson Snyder 754c5c71f1 Fix force VPI public signal visibility (#5225). 2025-02-15 00:58:14 -05:00
Wilson Snyder 6940ee420d Commentary 2025-02-15 00:58:14 -05:00
Todd Strader b645fcf027 More V3EmitV support (#5779) 2025-02-14 14:58:11 -05:00
Krzysztof Bieganski ffb02cea15 Fix ignoring joins in stringify in preprocessor (#5777)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2025-02-13 18:33:12 -05:00
Krzysztof Bieganski f753ae2518 Support selects on arbitrary string expressions (#5773) 2025-02-11 12:06:34 -05:00
Dave Sargeant caa19c0cb3 Fix VFileContent reference count (#5769) (#5771) 2025-02-10 10:04:04 -05:00
Trung Nguyen aa3942ab24 Internals: constexpr for VlUnpacked data access (#5725) (#5770)
Add `constexpr` to data access functions of `VlUnpacked` whose `std::array` equivalent in C++14 is `constexpr`.
2025-02-09 22:45:50 -05:00
github action cc1133c0d9 Apply 'make format' 2025-02-08 00:07:38 +00:00
Moubarak Jeje ac659d525b Support VPI array accessors (#5612) 2025-02-07 19:06:46 -05:00
Krzysztof Bieganski 283f6c7433 Add --preproc-token-limit (#5768) 2025-02-07 10:32:12 -05:00
Moubarak Jeje 5b65c15eca Internals: Add datap cast functions (#5761) 2025-02-05 15:29:54 -05:00
Yilou Wang 6b4183632c Support Unpacked Structures' Constrained Randomization (#5657) (#5759) 2025-02-03 11:56:00 -05:00
Wilson Snyder e0e164cea2 Internals: Optimize clearFired (#5753) 2025-01-30 07:52:38 -05:00
Bartłomiej Chmiel a379382d32 Fix handling forced assigns in V3Life (#5757) 2025-01-28 07:30:40 -05:00
Wilson Snyder e2a6e19cac Cleanup V3EmitMk report style 2025-01-25 17:52:27 -05:00
Wilson Snyder 61bfb6c308 Remove list/map from keyword warnings.
Reduces warning verbosity from `map` in UVM.
Assumes user doesn't do a `using namespace std`.
2025-01-25 16:08:15 -05:00
Wilson Snyder bdcfc4e286 Reduce verbosity under --debug default level 2025-01-25 16:01:20 -05:00
Wilson Snyder 70c6651aac Fix -Wno-subobject-linkage on GCC (#5754) 2025-01-25 15:45:30 -05:00
Wilson Snyder 41bb54bc2c Add Makefile targets count to stats 2025-01-25 13:35:56 -05:00
Wilson Snyder 001c098e5a Optimize empty function definition bodies (#5750). 2025-01-25 12:13:25 -05:00
Wilson Snyder 98e40c847c Internals: Suppress vlSelf unused suppression when known used. No functional change intended. 2025-01-25 12:06:05 -05:00
Wilson Snyder 05c7a3b90b Optimize labels as final if block statements (#5744). 2025-01-25 10:29:35 -05:00
Wilson Snyder 694f2ff7c7 Tests: renames 2025-01-25 10:24:59 -05:00
Wilson Snyder 6281385ee8 Commentary/Internals: Sort option names. No functional change. 2025-01-24 21:31:57 -05:00
Wilson Snyder 7e6dd9473f Commentary: Changes update 2025-01-24 21:27:52 -05:00
Wilson Snyder 929e15fa4c Fix various round-trip Verilog output, including packed arrays 2025-01-24 21:00:45 -05:00
Wilson Snyder 432d5f851d Internals: Cleanup some misnamed nodep's. No functional change. 2025-01-24 20:52:31 -05:00
Wilson Snyder d4f4fefd1d Fix -j ignored after -f (#5749). 2025-01-24 17:30:59 -05:00
Wilson Snyder d8080008b4 Commentary 2025-01-24 07:47:32 -05:00
Wilson Snyder bed9aa9904 Internals: Cleanup std::string empty string constructors. 2025-01-24 07:47:32 -05:00
Bartłomiej Chmiel 35fa0d051d Support integer atom type ports in --hierarchical (#5748) 2025-01-24 07:47:11 -05:00
Bartłomiej Chmiel 0507fb4655 Improve hierarchical DPI wrapper scheduling performance (#2583) (#5734) 2025-01-20 14:24:09 -05:00
Geza Lore f4a01eb452 Fix inlined expression with assignment under LHS of NBA (#5736) (#5740) 2025-01-20 07:23:10 -05:00
Wilson Snyder 4954e76b28 Commentary: Changes update 2025-01-18 15:26:41 -05:00
Wilson Snyder fa1b11252e Fix duplicate-named class variable equivalence (#5737). 2025-01-18 15:25:49 -05:00
Andrew Nolte dddc1b5b4d Fix vpiDefName issues with non-inlined scopes and dpi conflicts (#5732) 2025-01-16 15:02:36 -05:00
Natan Kreimer 20faa99464 Fix VPI iteration over hierarchy (#5314) (#5731) 2025-01-13 07:40:34 -05:00
Ethan Sifferman dc43071f1c Improve `resetall support (#5728) (#5730) 2025-01-11 22:53:11 -05:00
Wilson Snyder fdf29b970f Fix VL_UNLIKELY with constructors 2025-01-11 15:27:11 -05:00
Wilson Snyder 70814fa11a Commentary: Add --public-ignore to ignore public metacomments (#5716). 2025-01-11 12:34:12 -05:00
Wilson Snyder 529b8337ec Commentary: Changes update 2025-01-11 12:30:07 -05:00
Andrew Nolte f8dd65c7cd Add --public-ignore to ignore public metacomments (#7819) 2025-01-11 12:29:39 -05:00
Wilson Snyder 28a59a2b21 Update gtkwave from upstream. 2025-01-11 12:16:46 -05:00
Yilou Wang d3e205f201 Support constraints on associative array user-defined keys (#5671) (#5729) 2025-01-11 12:07:52 -05:00
Wilson Snyder dfe28f7ed0 Fix misoptimizing away $urandom (#5703). 2025-01-11 08:48:40 -05:00
github action bb871728c9 Apply 'make format' 2025-01-10 00:05:16 +00:00
Krzysztof Starecki 69dce205d3 Support multidimensional array access via VPI (#2812) (#5573) 2025-01-09 19:04:26 -05:00
Krzysztof Bieganski 052812bb87 Fix BLKSEQ on suspendable processes (#5722)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2025-01-09 08:40:32 -05:00
Yilou Wang 0380a36c76 Fix constrained random for > 64-bit associative arrays (#5670) (#5682) 2025-01-09 08:33:38 -05:00
Wilson Snyder 44f49669a3 Support side effects of form variable[index_function()]++. 2025-01-08 19:37:20 -05:00
github action ff244c1d1f Apply 'make format' 2025-01-08 14:44:48 +00:00
Krzysztof Starecki 260ac342f4 Tests: Add support for Questa in TestSimulator class (#5718) 2025-01-08 09:43:57 -05:00
Nick Brereton 87d856339f Add lint error on importing package within a class (#5634) (#5679) 2025-01-07 16:52:44 -05:00
Wilson Snyder e171463fa2 Add COVERIGN warning, as a more specific UNSUPPORTED error. 2025-01-06 18:48:32 -05:00
Wilson Snyder 481adf8fe7 Commentary 2025-01-06 17:56:50 -05:00
Andrew Nolte b8288b97f7 Improve VPI write errors (#5712) 2025-01-06 17:56:18 -05:00
Andrew Nolte 0d34f56b74 Fix packages with --public-depth 1 (#5708) 2025-01-06 15:21:32 -05:00
Wilson Snyder dcaf6476e8 Fix matching language extension options including dots. 2025-01-05 22:52:29 -05:00
Wilson Snyder 76b2ac9cc1 Support +incdir with multiple directories. 2025-01-05 19:30:39 -05:00
Wilson Snyder b6a400ee9b Support generated classes (#5665). 2025-01-05 17:10:04 -05:00
Wilson Snyder 78d6ec8114 Fix error message when call task as a function (#3089). 2025-01-04 12:55:15 -05:00
Wilson Snyder 88dd95980a Internal cleanups, remove extra iterate, but no functional change intended 2025-01-04 12:50:55 -05:00
Wilson Snyder b531001f55 Fix segfault when only enum value referenced in package (#5714). 2025-01-04 10:36:34 -05:00
Wilson Snyder 1d0563212e Fix pattern assignment to real inside struct (#5713). 2025-01-03 19:39:48 -05:00
Wilson Snyder 8ca49d98c1 Fix %p format output for real inside struct (#5713). 2025-01-03 19:15:03 -05:00
Wilson Snyder 036c1fb0f9 Commentary: Changes update 2025-01-03 10:02:48 -05:00
Wilson Snyder 19258ee18a Commentary 2025-01-03 10:00:56 -05:00
أحمد المحمودي 578d8d8391 Fix man pages whatis section (#5710) 2025-01-03 09:58:33 -05:00
Geza Lore 010ae580b1 Fix V3Simulate constant reuse (#5709)
Use a generational allocator for reusing AstConst across
V3Simulate::clear(), instead of using user1 (which is also used
to store values of nodes).

Also fix invalid lookup on array initializer
2025-01-03 05:33:29 -05:00
Wilson Snyder 951f5eaa82 Commentary 2025-01-02 08:09:02 -05:00
Wilson Snyder 3a69dd4a43 Commentary 2025-01-02 08:07:57 -05:00
Wilson Snyder f52155a768 Copyright year update. 2025-01-02 06:21:30 -05:00
Wilson Snyder 16b3d9101c devel release 2025-01-01 09:11:15 -05:00
Wilson Snyder 8ff77e9d47 Version bump 2025-01-01 09:04:41 -05:00
Wilson Snyder 4361c516fd Commentary: Update contributors. 2025-01-01 09:04:21 -05:00
Wilson Snyder 7d5772c749 Commentary: Changes update 2025-01-01 08:45:29 -05:00
Wilson Snyder f5e2f60dcc Update include/gtkwave from upstream 2025-01-01 08:40:49 -05:00
Wilson Snyder 8fbb725f34 Copyright year update. 2025-01-01 08:30:25 -05:00
Bartłomiej Chmiel 72a47e16c1 Fix verilator_gantt for hierarchically Verilated models (#5700) 2024-12-23 09:10:46 -06:00
Wilson Snyder 530ebecfb7 Tests: Add module-in-module coverage 2024-12-19 21:42:52 -05:00
Wilson Snyder 9a3dcaa10b Fix spelling 2024-12-19 21:30:14 -05:00
Wilson Snyder 8a121803f5 Add configure CFG_CXX_VERSION 2024-12-19 20:56:47 -05:00
Wilson Snyder bb45fd6c6c Add error on --savable --timing (#5690). 2024-12-19 17:30:40 -05:00
Wilson Snyder 62945bb3bc Commentary: Changes update 2024-12-19 17:23:44 -05:00
Todd Strader 079a53e820 Commentary: SYMRSVDWORD + VPI documentation (#5696) 2024-12-19 17:14:15 -05:00
Todd Strader a23fad91a3 Tests: Reduce test_regress VPI copypasta (#5694) (#5693) 2024-12-19 16:29:16 -05:00
Anthony Moore 5f1df5b389 Add a default CMAKE_BUILD_TYPE (#5691) (#5692) 2024-12-19 15:17:44 -05:00
Todd Strader 74d5d008bb Fix VPI + SYMRSVDWORD intersection (#5686) 2024-12-19 15:15:28 -05:00
Todd Strader 8a9fc9237d Tests: Execute t_emit_accessors (#5689) (#5688) 2024-12-19 15:01:57 -05:00
Ryszard Rozak c093b24342 Fix width extension of operands of inside operator (#5685) 2024-12-19 15:51:51 +01:00
Wilson Snyder 29fb82d3b7 Commentary 2024-12-16 18:02:17 -05:00
Wilson Snyder c7355b4056 Commentary: Changes update 2024-12-15 09:19:30 -05:00
Wilson Snyder 4b4ca90c71 Internals: Create FuncRef/TaskRef directly from Func/Task pointer. No functional change intended 2024-12-15 09:15:49 -05:00
Wilson Snyder 6aa7123a8c Internals: Function/variable renames. No functional change. 2024-12-14 12:49:42 -05:00
Wilson Snyder 80b2fa3583 Add error on randc inside dist 2024-12-14 11:47:46 -05:00
Wilson Snyder 7886204690 Tests: Add t_class_new_scoped (unsupported) 2024-12-13 17:58:08 -05:00
Wilson Snyder c2dcca980e Improve to throw UNSUPPORTED instead of syntax error on extend class arguments 2024-12-13 17:15:04 -05:00
Wilson Snyder a23dfdc4ee Fix backward external constraint error, from recent new support.
(Thanks sv-tests!)
2024-12-13 16:54:14 -05:00
Todd Strader 41a038b79b Fix interface bracketed array parameter access (#5678) (#5677) 2024-12-13 12:00:49 -05:00
Ryszard Rozak a8e06874bd Fix randomize..with of parameterized classes (#5676)
Broke in 7a04a5b
2024-12-13 09:32:47 -05:00
Yilou Wang 54ef9ad31c Support associative array basic constrained randomization (#5658) (#5670) 2024-12-12 11:31:54 -05:00
Bartłomiej Chmiel 32f9cf072b Fix hierarchical verilation for projects with dot-f dependency lists (#5199) (#5669) 2024-12-12 11:25:19 -05:00
Ryszard Rozak 03e8ef0b0f Fix wildcard equality and inside operators for non-fourstate expressions (#5673) 2024-12-12 14:51:48 +01:00
Wilson Snyder a2f327f729 Support extern constraint 2024-12-12 08:16:19 -05:00
Wilson Snyder 6e204ed0dd Internals: Cleanup 'error error' on fatals 2024-12-11 08:52:41 -05:00
Bartłomiej Chmiel 58ddf997e3 Improve optimization of duplicate wide expressions (#5637)
Prevent inlining of expensive wide expressions in V3Gate (#5637)
2024-12-11 11:45:31 +00:00
Ryszard Rozak 9656311521 Fix error on duplicated declaration of gen block (#5663) 2024-12-06 07:20:31 -05:00
Wilson Snyder 676fd31635 Commentary: Changes update 2024-12-05 08:54:43 -05:00
Wilson Snyder a7f8c9cc74 Commentary 2024-12-05 08:54:00 -05:00
Wilson Snyder a247041cab Internals: Refactor 713dab27 to avoid IfaceRef being known in LinkCells 2024-12-03 12:00:56 -05:00
Wilson Snyder 59fd238a05 Tests: Add t_interface_hidden 2024-12-03 12:00:56 -05:00
Yilou Wang a64660a530 Fix foreach mixed array (#5655) (#5656) 2024-12-03 07:57:50 -05:00
Todd Strader e9a1c75b7f Tests: Demonstrate unsupported scoped pattern array init (#5652) 2024-12-02 18:33:34 -05:00
Todd Strader b6f292f556 Fix imported array assignment literals (#5642) (#5648) 2024-12-02 15:08:47 -05:00
Wilson Snyder 4781a6046a Update error as misnamed port dtype might be interface 2024-12-02 07:35:44 -05:00
Wilson Snyder b16b48f458 Internals: Misc ANSI port parsing cleanups; baseline for future commit. 2024-12-02 07:21:39 -05:00
Wilson Snyder b4e91c87a6 Tests: Add t_interface_find 2024-12-02 07:20:40 -05:00
Bartłomiej Chmiel a668b7c658 Fix missing VlProcess handle in coroutines with splits (#5623) (#5650)
Signed-off-by: Bartłomiej Chmiel <[email protected]>
2024-12-02 05:43:26 -05:00
Wilson Snyder 94fd17e4f7 Internals: Port parsing cleanups 2024-12-01 23:03:19 -05:00
Wilson Snyder abd4c480cd Tests: Fix JSON file number, from earlier commit 2024-12-01 23:00:27 -05:00
Wilson Snyder aa2b653c71 Internals: With --dumpi-tree >= 9, create pre-sort cells.tree 2024-12-01 17:38:02 -05:00
Wilson Snyder d75f41b641 Tests: Add param type to t_typename test 2024-12-01 17:28:13 -05:00
Wilson Snyder b0f898cec8 Internals: Determine needing verilated_std without symbol table 2024-12-01 11:35:00 -05:00
Wilson Snyder 9ec5413d33 Tests: Cleaner error summaries 2024-12-01 10:27:05 -05:00
Wilson Snyder 611567c385 Internals: add make format-c/format-py. No functional change. 2024-12-01 10:26:01 -05:00
Wilson Snyder 7a04a5b9a8 Internals: Refactor symIterate functions. No functional change intended 2024-11-30 22:55:16 -05:00
Wilson Snyder 2d71d66cf5 Commentary 2024-11-30 22:35:36 -05:00
Wilson Snyder a51e26e62d Internals: Some V3LinkCells debug improvements. No functional change. 2024-11-30 20:09:05 -05:00
Wilson Snyder 5021989cb6 Tests: Rename interface-to-wire (#5649 test partial) 2024-11-30 19:05:26 -05:00
Wilson Snyder 2284ada723 Tests: Interface-to-wire (#5649 test partial) 2024-11-30 19:00:00 -05:00
Wilson Snyder e44f34dde3 Improve concat lint error & cleanups for future commit. 2024-11-30 18:56:00 -05:00
Wilson Snyder 0c820c3068 Internals: Standardize template argument names. No functional change. 2024-11-29 20:20:38 -05:00
Wilson Snyder 990ccd6763 Internals: Standardize on template<typename. No functional change. 2024-11-29 18:01:50 -05:00
Wilson Snyder f631587a20 Internals: Rename classOrPackageSkip as kept confusing with member accessor. No functional change. 2024-11-29 16:57:18 -05:00
Wilson Snyder 9f8fcaf827 Fix linking types of typedefs 2024-11-29 16:09:39 -05:00
Wilson Snyder d7893a60ca Internals: In V3LinkDot debug, show node name prefix. No functional change. 2024-11-29 16:09:04 -05:00
Wilson Snyder 93090c56ee Fix mis-aliasing of instances with mailbox parameter types (#5632 partial). 2024-11-29 09:20:02 -05:00
Wilson Snyder d750ffc129 Internals: Fix debug dump of deleted nodes. 2024-11-29 08:51:32 -05:00
Wilson Snyder 7efa0fc82a Internals: Rewrite skipRefp to avoid recursion and fix const-ness. No functional change intended. 2024-11-29 08:10:51 -05:00
Wilson Snyder 8db9db7e25 Internals: Rename same() function. No functional change. 2024-11-28 15:01:58 -05:00
Wilson Snyder d165671225 Improve error when no parameter type value (#5645 partial) 2024-11-28 14:09:06 -05:00
Wilson Snyder 7a8f71e7d8 Add --fno-slice to disable array assignment slicing (#5644). 2024-11-28 13:49:34 -05:00
Wilson Snyder e0ad430cd9 Internals: V3Slice style cleanup. No functional change; ignore whitespace 2024-11-28 13:33:59 -05:00
Wilson Snyder 7695687e87 Commentary: Changes update 2024-11-27 17:56:05 -05:00
Todd Strader 94e545bdca Fix interface and struct pattern collision (#5640) (#5639) 2024-11-27 17:20:21 -05:00
Wilson Snyder 99daa8d24b Support default disable iff and $inferred_disable (#4016). 2024-11-26 22:27:32 -05:00
Wilson Snyder e14903cfb2 Internals: Fix null skipRef for consistency. No functional change intended. 2024-11-26 22:10:54 -05:00
Wilson Snyder bee344d1ae Add error on illegal --prefix etc. values (#5507). 2024-11-26 21:06:43 -05:00
Wilson Snyder 713dab278c Fix mis-public interfaces, broke in f58aee2ff2 2024-11-26 19:16:05 -05:00
Wilson Snyder 29ad93c89d Tests: Add t_interface_colon_bad (#5281) 2024-11-25 21:50:24 -05:00
Wilson Snyder 7a9140821d Fix public_module requiring a wire to become public (#4916). 2024-11-25 21:21:11 -05:00
Wilson Snyder 2ba0749993 Tests: Verify function ref (#3385) 2024-11-25 20:38:41 -05:00
Wilson Snyder 25d75ee86f Add --fno-inline-funcs to disable function inlining. 2024-11-25 19:59:10 -05:00
Wilson Snyder a72009fb41 Fix UNDRIVEN on refs 2024-11-25 18:41:38 -05:00
Wilson Snyder a934d965be Internals: Rename isInoutish 2024-11-25 18:25:36 -05:00
Wilson Snyder 1277a40b31 Tests: Add driver --obj-suffix option 2024-11-24 21:12:08 -05:00
Wilson Snyder 6f35fec5ce Commentary 2024-11-24 20:47:57 -05:00
Wilson Snyder f58aee2ff2 Internals: Defer marking variables as IfaceRef until cells resolved. No functional change intended. 2024-11-24 18:33:10 -05:00
Wilson Snyder f5ee7aa0ab Internals: Decouple Bison class/package symbol table parsing from Link symbol table. (#5629)
Not intended to change non-error cases, but side-effects are likely.
2024-11-24 18:19:19 -05:00
Wilson Snyder 749b0345df Commentary: Changes update 2024-11-23 22:06:07 -05:00
Wilson Snyder 7e9535381a Tests: Use VM_PREFIX 2024-11-23 22:02:19 -05:00
github action 0d5fedce92 Apply 'make format' 2024-11-24 03:02:04 +00:00
sumpster 24b5c641f5 Fix array of struct member overwrites on member update (#5605) (#5618) (#5628) 2024-11-23 22:01:02 -05:00
sumpster ca31bcdbb6 Tests: Fix solver help output detection case insensitive (#5626) (#5627) 2024-11-23 18:10:37 -05:00
Ryszard Rozak ae990ebcda Add warning on global constraints (#5625) 2024-11-22 08:47:14 -05:00
Bartłomiej Chmiel 58dae8f931 Fix clang_check_attributes TypeError when accessing compilation database (#5622)
Signed-off-by: Bartłomiej Chmiel <[email protected]>
2024-11-21 07:05:18 -05:00
Ryszard Rozak 5470cf9fa9 Support randomize size constraints with restrictions (#5582 partial) (#5611) 2024-11-15 10:45:06 -05:00
Wilson Snyder 9bde98e912 Commentary 2024-11-14 21:07:45 -05:00
Wilson Snyder 81ac386a4a Tests: Renames 2024-11-14 21:05:59 -05:00
Tom Manner c98744b914 Internals: Fix VerilatedContext::randSeed comments (#5609) 2024-11-14 11:07:23 -05:00
Greg Davill 904be103df Support parameter names in pattern initialization (#5593) (#5596) 2024-11-14 07:25:58 -05:00
Wilson Snyder 8e82440a55 Fix extranous local:: error 2024-11-13 19:15:10 -05:00
Wilson Snyder 32c789c355 Commentary 2024-11-13 19:14:38 -05:00
Wilson Snyder d4a8cbb1d6 Fix function fork...join_none regression with unknown type (#4449). 2024-11-13 08:00:43 -05:00
Wilson Snyder 192236a832 Fix module automatic 2024-11-13 07:10:48 -05:00
Wilson Snyder e223228ec0 Fix installation of waiver file (#5607) 2024-11-12 22:41:05 -05:00
github action c7dbdf876a Apply 'make format' 2024-11-13 03:12:11 +00:00
Wilson Snyder 3ffea76e11 Add --no-std-waiver and default reading of standard lint waivers file (#5607). 2024-11-12 22:11:19 -05:00
Wilson Snyder 09547f839f Tests: Remove file-number hardcoded dependencies. 2024-11-12 21:39:13 -05:00
Wilson Snyder 0bf413b260 Add lint_off --contents in configuration files. (#5606) 2024-11-12 20:21:16 -05:00
Wilson Snyder a5b2cb6ddf Commentary: Changes update 2024-11-12 17:19:42 -05:00
Wilson Snyder 779cf9248a Cleanup/standardize configuration file string handling 2024-11-12 11:29:27 -05:00
Krzysztof Starecki 1d06364284 Support vpiDefName (#5572) 2024-11-12 11:28:39 -05:00
Wilson Snyder 833c215c45 Tests: Move uvm to subdirectory and add context-sensitive waivers 2024-11-11 20:49:59 -05:00
Wilson Snyder 4d95f6f7b8 Add --waiver-multiline for context-sensitive --waiver-output. 2024-11-11 20:00:26 -05:00
Wilson Snyder 46a5f04840 Internals: Link 'std' in LinkFind 2024-11-11 09:44:08 -05:00
Wilson Snyder 3c686d0eb2 Commentary 2024-11-11 08:44:46 -05:00
Wilson Snyder 7c8ff1d19c Add --no-std-package as subset-alias of --no-std. 2024-11-11 08:30:07 -05:00
Wilson Snyder 151c5b6a1d Tests: Rename some tests 2024-11-10 20:00:16 -05:00
Wilson Snyder 15d1751b23 Internals: Defer class extends resolution until link 2024-11-10 19:34:00 -05:00
Wilson Snyder b71d49e55a Internals: Defer $unit package resolution until link 2024-11-10 18:36:12 -05:00
Wilson Snyder c3b2bfbc39 Internals: Fix missing cleanFileline 2024-11-10 18:26:23 -05:00
github action b74a8f133f Apply 'make format' 2024-11-10 21:54:54 +00:00
Wilson Snyder 873048c21c Fix 'local::' parsing in wrong scope 2024-11-10 16:51:34 -05:00
Wilson Snyder 75e9986d39 Fix local:: mis-allowed in class extends 2024-11-10 16:43:21 -05:00
Geza Lore 863abdb1f7 Fix NBAs to unpacked arrays of unpacked structs (#5603)
This happened to work before #5516, by creating a whole shadow copy of
the entire array. Revert back to that behaviour for now, it will be
slow, but works still.

Fixes #5590
2024-11-10 17:38:28 +00:00
Geza Lore 03bd1bfc63 Move Concat balancing from DFG to FuncOpt (#5602)
This means it applies more widely, e.g. inside sequential logic.
2024-11-10 17:23:11 +00:00
Wilson Snyder 4257fcf9d0 Change parsing of cells to be non-symbol table sensitive. 2024-11-10 12:08:37 -05:00
Wilson Snyder a68da7e220 Internals: Style cleanup. Ignore whitespace if diff. No functional change. 2024-11-10 10:59:18 -05:00
Geza Lore 77ef2cd487 Split up assignments to wides with Concat on the RHS (#5599)
Add a new pass to split up (recursively):

foo = {l, r};

into the following, with the right indices, iff the concatenation
straddles a wide word boundary.

foo[_:_] = r;
foo[_:_] = l;

This eliminates more wide temporaries.

Another 23% speedup on VeeR EH2 high_perf. Also brings the predicted
stack size from 8M to 40k.
2024-11-10 15:51:59 +00:00
Wilson Snyder 7f1aae640f Fix dotted reference in delay value (#2410). 2024-11-10 10:23:29 -05:00
Wilson Snyder 0ec025c40c Internals: Rename rule. No functional change. 2024-11-10 10:14:42 -05:00
Wilson Snyder bc87270ca9 Add UNSUPPORTED on property variable, instead of syntax error. 2024-11-09 22:26:59 -05:00
Wilson Snyder 0e11b0929c Internals: whitespace 2024-11-09 21:33:22 -05:00
Wilson Snyder b741105329 Tests: Fix t_dist_whitespace error message 2024-11-09 20:47:59 -05:00
Wilson Snyder 2f4d1647f0 Fix non-interface error message 2024-11-09 20:28:47 -05:00
Wilson Snyder 4a88ddc616 Tests: Fix interface syntax error 2024-11-09 17:22:16 -05:00
Wilson Snyder 99e7dbc82b Internals: Put unsupported nettypes into symbol table, so parse as idType 2024-11-09 17:15:41 -05:00
Wilson Snyder c7a7965c49 Rename identifer token 2024-11-09 16:49:34 -05:00
Geza Lore f073b278f9 Balance concatenations in DFG (#5598)
The DFG peephole pass converts all associative trees into right leaning,
which is good for simplifying pattern recognition, but can lead to an
excessive amount of wide intermediate results being constructed for
right leaning concatenations.

Add a new pass to balance concatenation trees by trying to:
- Create VL_EDATASIZE (32-bit) sub-terms, so words can then be packed
  easily afterwards
- Try to ensure the operands of a concat are roughly the same width
  within a concatenation tree. This does not yield the shortest tree,
  but it ensures it has many sub-nodes that are small enough to fit into
  machine registers.

This can eliminate a lot of wide intermediate results, which would need
temporaries, and also increases ILP within sub-expressions (assuming the
C compiler can't figure that out itself).

This is over 2x run-time speedup on the high_perf configuration of
VeeR EH2 (which you could arguably also get with -fno-dfg, but oh well).
2024-11-09 18:14:19 +00:00
Wilson Snyder 4969125e5a Add error on soft constraints of randc 2024-11-09 12:45:55 -05:00
Wilson Snyder d230ccd716 Add error on solve before of randc variable. 2024-11-09 12:26:48 -05:00
Wilson Snyder 3fae11595a Support pure constraint. 2024-11-09 12:05:26 -05:00
Wilson Snyder 1e546bb9d9 Add assertion on firing event inside class (#5597) 2024-11-09 09:28:40 -05:00
Wilson Snyder 138daaf565 Commentary: Changes update 2024-11-09 08:35:40 -05:00
Wilson Snyder 3438d8f2b0 Tests: Use illegal struct 2024-11-09 08:34:17 -05:00
Wilson Snyder e55ed8eb66 Commentary 2024-11-09 08:24:50 -05:00
Wilson Snyder a55daf5367 Commentary 2024-11-09 07:56:47 -05:00
Yilou Wang a173883b2d Support basic constrained random for multi-dimensional dynamic array and queue (#5591) 2024-11-08 14:04:58 -05:00
Wilson Snyder 61d2284eab Commentary 2024-11-08 07:47:46 -05:00
Ryszard Rozak 6083480abb Fix rand dynamic arrays with null handles (#5594)
l
2024-11-08 06:53:43 -05:00
Wilson Snyder 2e1128b417 Internals: Iterator cleanup. No functional change intended. 2024-11-06 19:21:03 -05:00
Yilou WangandUdaya Raj Subedi e47208d9b3 Support queue's assignment push_back/push_front('{}) (#5585) (#5586)
Co-authored-by: Udaya Raj Subedi <[email protected]>
2024-11-06 17:31:48 -05:00
Wilson Snyder 87bd8fefa0 Add error on wait with missing .triggered. (#4457) 2024-11-05 01:22:56 -05:00
Wilson Snyder 753ea29df8 Add error on illegal enum base type (#3010). 2024-11-05 00:58:46 -05:00
Wilson Snyder b1dfdef0a9 Add error when improperly storing to parameter (#5147). 2024-11-05 00:17:40 -05:00
Wilson Snyder 2e4676dc11 Internals: Add missing VL_RESTORERS to V3LinkLValue; probably fixes no real cases, bug better safe. 2024-11-05 00:03:23 -05:00
Wilson Snyder eaaf91c82b Internals: Cleanup VL_RESTORER format in V3LinkLValue. No functional change. 2024-11-04 23:55:39 -05:00
Bartłomiej ChmielandRyszard Rozak 4e71f359bf Fix duplicate scope identifiers decoding (#5584)
Signed-off-by: Bartłomiej Chmiel <[email protected]>
Co-authored-by: Ryszard Rozak <[email protected]>
2024-11-04 06:06:15 -08:00
Ryszard Rozak b3348a38d0 Internals: Remove repeated clearing of constraints (#5583)
Signed-off-by: Ryszard Rozak <[email protected]>
2024-11-04 04:48:55 -08:00
Wilson Snyder 7854118883 Fix negative assignment pattern keys (#5580). 2024-11-02 10:06:01 -04:00
Wilson Snyder ed0e1af7aa Commentary: Changes update 2024-11-02 09:47:55 -04:00
github action e1a9734917 Apply 'make format' 2024-11-02 13:43:43 +00:00
Zhou Shen 589612f914 Fix can't locate scope error in interface task delayed assignment (#5462) (#5568) 2024-11-02 09:42:57 -04:00
Geza Lore 76b4c2f254 driver.py: Properly detect cfg with ccache (#5579) 2024-11-01 17:14:17 +00:00
Wilson Snyder b097cec72d Tests: Reduce false t_const_number_unsized_parse timeouts (#5577) 2024-11-01 12:39:29 -04:00
Wilson Snyder 9689a4f58a Internals: Support VL_UNREACHABLE in C++23/MSVC. No functional change intended. 2024-10-31 21:29:13 -04:00
Geza Lore aac0186871 Fix pylint 3.2.7 global-variable-not-assigned (#5578) 2024-11-01 15:27:08 +00:00
Geza Lore f458951b17 Fix slow unsized number parsing (#5577)
Try to avoid allocating and deallocating a full --max-num-width
buffer on parsing every single unsized number literal.
2024-11-01 14:10:44 +00:00
Andrew Nolte 4448778dbf Add coverage point hierarchy to coverage reports (#5575) (#5576) 2024-11-01 09:30:44 -04:00
Todd Strader dab826bef9 VPI error instead of fatal for vpi_get_value() on large signals (#5571) 2024-10-31 17:02:37 -04:00
Todd Strader 9fae951d9d Fix --output-groups leftover files issue (#5574) 2024-10-31 14:38:53 -04:00
Todd Strader 0f2a8c6c22 Fix BLKANDNBLK for for VARXREFs (#5569) 2024-10-29 07:27:40 -04:00
Wilson Snyder 68e0cf5523 devel release 2024-10-27 10:08:18 -04:00
Wilson Snyder d6ba65ba75 Version bump 2024-10-27 09:38:06 -04:00
Wilson Snyder f496138855 Commentary: Changes update 2024-10-27 09:33:54 -04:00
Wilson Snyder 2f272a4190 Fix $countbits in assert with non-tristates (#5566). 2024-10-27 09:30:54 -04:00
Wilson Snyder 469eca7de2 Commentary: Changes update 2024-10-25 18:54:39 -04:00
Todd Strader ec2eae607a Fix enum name method (#5563) 2024-10-25 18:49:45 -04:00
Ryszard Rozak 292c2e289e Support rand dynamic arrays of objects (#5557) (#5564) 2024-10-25 12:00:43 -04:00
Ryszard Rozak 87ac61140d Tests: Don't use indices in check_rand (#5561)
Signed-off-by: Ryszard Rozak <[email protected]>
2024-10-25 11:06:32 -04:00
Geza Lore 81ee89de15 Properly skip t_ccache_report when no ccache (#5562) 2024-10-25 14:33:26 +01:00
Todd Strader 83081aaefc Fix struct literal on pattern assignment (#5552) (#5559) 2024-10-24 18:50:57 -04:00
Tomasz Gorochowik fd2917c928 Commentary: Fix sv-bugpoint paragraph typo (#5558) 2024-10-24 09:41:27 -04:00
Ryszard Rozak 4cd69f9feb Fix queue element access (#5551) 2024-10-24 09:40:54 -04:00
Eric Müller 4e5c7f4568 Fix build on gcc when using the spack wrapper (#5555) 2024-10-24 07:53:11 -04:00
Tomasz Gorochowik 647af27274 Commentary: Mention sv-bugpoint in the contributing guidelines (#5553) 2024-10-24 07:42:57 -04:00
Todd Strader 8cc7e180ca Fix array trace splitting (#5549) 2024-10-23 11:51:48 -04:00
Todd Strader d3d45c0be5 Tests: Fix file_grep_count() error message (#5550) 2024-10-23 10:07:03 -04:00
Wilson Snyder 549dd31224 Commentary: Changes update 2024-10-22 09:34:09 -04:00
Wilson Snyder 36888fac5d Fix long module names crashing string handling (#5546). 2024-10-22 09:25:58 -04:00
Yilou WangandUdaya Raj Subedi 2409f32d87 Fix multi-range indices assignment (#5534) (#5547)
Co-authored-by: Udaya Raj Subedi <[email protected]>
2024-10-21 09:56:50 -04:00
Yilou Wang 8c3cc3af8f Fix struct array assignment (#5455) (#5537) 2024-10-21 09:54:33 -04:00
Todd Strader 76fe224e7c Fix complex user type problem with --x-assign (#5543) 2024-10-18 19:52:25 -04:00
Krzysztof Boroński 7ccc93d9df Fix reduction methods for verilated types (#5542) 2024-10-18 19:51:44 -04:00
Geza Lore 55661e7f71 Install public executables into bindir instead of pkgdatadir (#5140) (#5544)
Instead of installing redirect scripts in to bindir, and real
executables in to pkgdatadir/bin, we now put the real executables into
bindir, and add redirect scripts into pkgdatadir/bin. (That is, we
redirect in the opposite direction as before).

This enables the same relocatable and testable installations as before
without putting architecture specific binaries into pkgdatadir, so
hopefully we now conform to the Linux Filesystem Hierarchy Standard.

This requires a small fixup in the installed `verilator` script to
hardcode the relative path between bindir and pkgdatadir.

Fixes #5140
2024-10-18 10:06:28 +01:00
Aidan McNay ece0613e09 Commentary: Fix CMake comments (#5545) 2024-10-17 16:39:51 -04:00
Ryszard Rozak 0dce97b09d Fix assignments of concatenation to queues and dynamic arrays (#5540) 2024-10-15 07:35:59 -04:00
Ryszard Rozak a3d0cc6522 Fix static function wrappers (#5536)
Signed-off-by: Ryszard Rozak <[email protected]>
2024-10-14 07:41:17 -04:00
Wilson Snyder 1df20f7076 Remove driver.pl - deprecated earlier with driver.py 2024-10-13 21:55:31 -04:00
Wilson Snyder 2fc94557a0 Fix error on enums with x/z using .name(), and internal refactoring 2024-10-11 22:37:48 -04:00
Vito GamberiniandWilson Snyder 789698cb5c Fix coverage counts missing due to table optimization (#5473) (#5474).
Co-authored-by: Wilson Snyder <[email protected]>
2024-10-10 21:22:06 -04:00
Yilou Wang 3cced9baad Fix foreach on associative arr with the same logic and update the tests (#5530) 2024-10-10 12:50:43 -04:00
Yilou Wang f3cc32554c Fix foreach with 2-D queues and dynamic arrays (#5525) (#5529) 2024-10-10 10:50:37 -04:00
Ryszard Rozak 2a905c1d6e Fix copy constructor of classes that use std::process (#5528)
Signed-off-by: Ryszard Rozak <[email protected]>
2024-10-10 14:40:07 +02:00
Wilson Snyder 230b145c04 Commentary 2024-10-10 08:14:21 -04:00
Wilson Snyder 9f34764f4b Tests: Find filenames with fix me 2024-10-10 07:48:23 -04:00
Wilson Snyder 69ac3c14e8 Fix crash with internal assertion on short array initializer (partial #5511) 2024-10-10 07:20:44 -04:00
Wilson Snyder f98637e122 Internals: Cleanup style of coverage visitors. No functional change. Ignore whitespace if diff. 2024-10-09 18:13:23 -04:00
Wilson Snyder 6d936654ba Commentary: Changes update 2024-10-09 18:01:34 -04:00
Wilson Snyder 4dd4047c47 Internals: Less verbose docs build 2024-10-09 18:01:30 -04:00
Zhou Shen 1710b6bab4 Support for wired nets, wor/trior/wand/triand. (#5496) 2024-10-09 17:53:46 -04:00
Geza Lore 041f6603c3 Make incorrect soft ordering constraint into a hard constraint. (#5520)
An ordering constraint between NBA commit blocks ('Post' logic) and the
written variable were previously added as soft constraints (cutable
edges). However these are required for correctness, so if it ever is
cut we will have incorrect simulation results.

Change these into hard constraints instead. This necessitates adding a
flag on AstVar to ignore special variables constructed during V3Delayed
that might otherwise appear as degenerate logic loops. E.g.:

if (VdlySet) {
   VdlySet = 0;  // <- This write to VdlySet can and must be ignored
   LHS = VdlyVal;
}

No functional change, but you might get an error if this constraint was
ever violated. (Theoretically it should never be, as these variables
were inserted in a way that does not require violating these constraints
...)
2024-10-09 11:43:53 +01:00
Geza Lore 5acced1e33 Refactor V3Delay for extensibility (#5516)
* Refactor V3Delay for extensibility

Introduce the concept of an "NBA Scheme", which is the lowering pattern
we can use for various variables that are the targets of NBAs.
E.g.:
 - ShadowVariable (old default scheme)
 - FlagShared (old array set flag scheme)
 - ValueQueueWhole (recent dynamic commit queue)

We now analyse all AstAssignDly before making any decisions on which
scheme to apply. We then choose a specific scheme for each variable that
is the target of an NBA, and then all NBAs targeting that variable use
the same scheme. This enables easy mix and match of schemes as needed,
while remaining consistent by design after extensions.

Output is perturbed due to node insertion order, but no functional
or performance change is intended.
2024-10-09 10:39:40 +01:00
Yilou Wang 920c8012de Support unconstrained randomization for associative array and queue (#5515) 2024-10-08 10:54:20 -04:00
Geza Lore 8f1ea09558 Add lsb index to V3Number::setMask (#5522) 2024-10-08 13:15:36 +01:00
Wilson Snyder b873c23cf2 Internals: Refactor into V3Width enumSelect function 2024-10-07 21:44:07 -04:00
Wilson Snyder 13c7b6e827 Tests: Faster first retry 2024-10-07 21:44:07 -04:00
Wilson Snyder bbce7926b9 Tests: Remove unused clk input 2024-10-07 21:44:07 -04:00
Wilson Snyder 2c445e4bfd Commentary: Changes update 2024-10-07 21:44:07 -04:00
Furqan Nadir 338d54fd34 Commentary: Add name to CONTRIBUTORS (#5519) 2024-10-07 14:10:43 -04:00
Ryszard Rozak 009d1f2f5b Fix -j option without argument in hierarchical verilation (#5514)
Signed-off-by: Ryszard Rozak <[email protected]>
2024-10-07 07:31:59 -04:00
github action 08279645ca Apply 'make format' 2024-10-06 22:10:07 +00:00
Wilson Snyder 28ecd8e908 Support local and protected on typedef (#5460). 2024-10-06 18:08:40 -04:00
Wilson Snyder bc8a332ee8 Tests: Disable last test due to clang warning 2024-10-06 05:00:57 -04:00
Wilson Snyder d52822781c Tests: Fix driver for --iv etc 2024-10-06 04:49:53 -04:00
github action bdd37e40fe Apply 'make format' 2024-10-06 08:02:10 +00:00
Wilson Snyder 4b713e9882 Fix pattern initialization with typedef key (#5512). 2024-10-06 04:01:15 -04:00
Wilson Snyder fd9f5ab34e Fix not reporting class reference with extra parameters (#5467). 2024-10-04 05:38:36 -04:00
Wilson Snyder d06f986b51 Add elaboration dot-error message context, plus debug improvements 2024-10-04 05:38:05 -04:00
Wilson Snyder 8638e46cb7 Fix IEEE version number 2024-10-04 05:22:09 -04:00
Wilson Snyder 85909f02b3 Commentary 2024-10-04 05:21:18 -04:00
Nathan Graybeal 3572bd2f1a Fix configure inserting absolute paths for Python and Perl (#5504) (#5505)
* Migrate all tools to AC_CHECK_PROG
2024-10-04 10:08:44 +01:00
Wilson Snyder ff1d20d50c Tests: Add t_struct_initial_assign, still fails (#5380) (#5381). 2024-10-03 20:36:23 -04:00
Wilson Snyder c300075a20 Tests: Remove driver Python version package requirement (#5505) 2024-10-03 19:39:28 -04:00
Wilson Snyder 4bdfc653a3 Add error on misused genvar (#408). 2024-10-03 18:54:30 -04:00
Wilson Snyder 554653900a Commentary: Move C++20 deprec to after Ubuntu 20.04 EOL 2024-10-03 18:15:51 -04:00
Wilson Snyder b90b81e12c Tests: Fix string !== for other simulators. 2024-10-03 18:14:53 -04:00
Han Qi bf2b4e1b6a Fix equivalence checking when replacing type parameters (#5213) (#5255) 2024-10-03 21:19:07 +01:00
Yilou Wang c05c48aaf3 Support unpacked array Constrained Randomization (#5437) (#5489) 2024-10-02 10:29:47 -04:00
Fabian Keßler 39143cc15a Fix explicit CMAKE_INSTALL_PREFIX usages (#5500) 2024-10-01 13:38:16 -04:00
Wilson Snyder 03012da11c Internals: astgen: Detect bad node types after edits.
Also add checks for nodes that can be multiple types with syntax
`AstNode<AstNodeExpr|AstNodeDType>`
2024-09-30 22:25:28 -04:00
0547108e3f Add -output-groups to build with concatenated .cpp files (#5257)
Signed-off-by: Bartłomiej Chmiel <[email protected]>
Signed-off-by: Ryszard Rozak <[email protected]>
Signed-off-by: Arkadiusz Kozdra <[email protected]>
Co-authored-by: Mariusz Glebocki <[email protected]>
Co-authored-by: Arkadiusz Kozdra <[email protected]>
Co-authored-by: Bartłomiej Chmiel <[email protected]>
Co-authored-by: Wilson Snyder <[email protected]>
Co-authored-by: Ryszard Rozak <[email protected]>
2024-09-30 21:42:36 -04:00
Bartłomiej Chmiel 1a31aa5d62 Internals: Fix annotation checker not considering base class virtual function annotations (#5459) 2024-09-30 21:34:34 -04:00
Wilson Snyder 13a1240359 Commentary: Changes update 2024-09-29 21:41:05 -04:00
Wilson Snyder b7e5486baa Internals: Fix astgen spacing 2024-09-29 16:56:50 -04:00
Wilson Snyder afeca21d73 Internals: For debug, quote symbol table to see spaces. 2024-09-29 16:56:32 -04:00
Wilson Snyder d0ec6092b3 Change package import/export to link post-parsing, prep for later commit. 2024-09-28 20:55:22 -04:00
Wilson Snyder 5c923d6629 Fix to avoid IMPLICIT creation if data type of same name. 2024-09-28 17:58:26 -04:00
Wilson Snyder 1dc6fd3d93 Internals: Move interface error to later phase, prep for later commit. No functional change intended. 2024-09-28 17:37:44 -04:00
Arkadiusz Kozdra 5b56c80830 Better error recovery (#5493)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-09-27 20:38:49 +02:00
Wilson Snyder 2291d3d4c6 Tests: Fix some non-IEEE issues in tests. 2024-09-27 09:00:20 -04:00
Arkadiusz Kozdra 02e7767886 Fix randomize with foreach constraints (#5492)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-09-26 19:31:06 +02:00
Geza Lore 2a01365f9b Fix V3Table trying to generate 'x' bits in the lookup table. (#5491)
Due to out of range selects, V3Table attempted to create a table in the
constant pool with an 'x' value in it, which caused an internal error.

Ensure V3Table behaves the same for out of range selects as the original
logic would.

There is a related bug #5490, about leaving partially out of range
selects in the logic after inserting bounds checks in V3Unknown.
2024-09-26 16:31:47 +01:00
Arkadiusz KozdraandSzymon Gizler 91c8866ac3 Fix exponential ConcatN (#5488)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
Co-authored-by: Szymon Gizler <[email protected]>
2024-09-26 05:12:24 -04:00
Wilson Snyder 798bbe98e8 Add syntax error on empty case items, per IEEE grammar. 2024-09-25 22:40:28 -04:00
Wilson Snyder a3bbf13506 Internals: Minor parser reorgs in prep for future pull. No functional change intended. 2024-09-25 20:41:49 -04:00
Wilson Snyder 650da7beb2 Examples: Cleanup some spacing 2024-09-25 14:24:01 -04:00
Geza Lore 3bc09d49fb Generate one trigger per SenItem instead of per SenTree (#5483) 2024-09-25 10:35:50 +01:00
Wilson Snyder 6c61a9aff3 Support objcache when compiling Verilated files with cmake. 2024-09-24 20:55:11 -04:00
Wilson Snyder a4085f3a06 Internals: Standardize format of CMake files with gersemi. No functional change intended. 2024-09-24 20:43:19 -04:00
Wilson Snyder 3ae18af8dd Fix short-circuting on method calls (#5486). 2024-09-24 20:24:27 -04:00
Wilson Snyder 811eab8fa5 Fix short-circuting with associative array access (#5484). 2024-09-24 19:24:01 -04:00
Wilson Snyder 4ec75b2618 Fix over-permissive parsing of UDPs without identifiers 2024-09-24 18:53:32 -04:00
Wilson Snyder 5a65d27851 Internals: bisonpre: Support -Wcounterexamples 2024-09-23 21:42:02 -04:00
Chris Bachhuber 685ea0bc65 Add Docker pre-commit hook (#5238) (#5452) 2024-09-23 07:37:24 -04:00
Wilson Snyder c48d80592e Fix extra dot in coverage point hierarchy when using name()=''. 2024-09-23 07:34:12 -04:00
Wilson Snyder 0aa8356eca Change --main and --binary to use a TOP hierarchy name of "" (#5482). 2024-09-22 23:03:51 -04:00
Wilson Snyder 670b7c5243 Support DPI imports and exports with double underscores (#5481). 2024-09-22 22:11:01 -04:00
Wilson Snyder 706679e6b1 Support DPI imports and exports with double underscores. 2024-09-22 22:06:39 -04:00
Wilson Snyder d288488b7f Fix --binary with .cpp PLI filenames under relative directory paths. 2024-09-22 16:47:15 -04:00
Chris Bachhuber b17619296a Documentation: Highlight syntax in install.rst (#5478) 2024-09-22 15:55:12 -04:00
Wilson Snyder 88bd479bc7 Add error on instances without parenthesis. 2024-09-22 12:25:35 -04:00
Wilson Snyder 2584befa5a Internals: Show tree traversal in V3LinkDot Resolve debug. No functional change intended. 2024-09-22 10:46:04 -04:00
Wilson Snyder 90215878f8 Tests: Improve t_dist_warn_coverage.py 2024-09-22 09:10:03 -04:00
Wilson Snyder a1a74cb1d9 Fix mis-parsing of constraint = new. 2024-09-22 09:10:01 -04:00
Wilson Snyder 9f9770e722 Parse elaboration-time nettype declarations (as UNSUPPORTED) 2024-09-21 21:00:02 -04:00
Wilson Snyder 888af29a72 Delay struct type determination until elaboration 2024-09-21 20:27:55 -04:00
Wilson Snyder 5f39c69d19 Delay parameter type assignment determination until elaboration 2024-09-21 20:27:41 -04:00
Wilson Snyder e7de2c5a05 Remove warning on unsized numbers exceeding 32-bits. 2024-09-21 19:19:12 -04:00
Geza Lore 59b07529b1 driver.py: fix aslr_off (#5477) 2024-09-21 16:37:51 +01:00
Geza Lore a6e9bce0dd driver.py: consume all stdout from subprocess (#5476) 2024-09-21 16:24:45 +01:00
Wilson Snyder 2c52119d6c Tests: Rename some tests into proper groups. No functional change. 2024-09-21 10:04:58 -04:00
Wilson Snyder 48faf8d036 Fix tracing when name() is empty (#5470). 2024-09-21 08:25:14 -04:00
Wilson Snyder 0484143282 Tests: Update t_timing_finish (#5472) 2024-09-21 07:46:04 -04:00
Wilson Snyder 0ee214a157 Tests: Fix t_timing_fork_comb_bad committed earlier 2024-09-20 22:16:00 -04:00
Wilson Snyder 774ec42be4 Internals: Experimental cleanup; avoid :: on package symbol tables 2024-09-20 20:39:49 -04:00
Wilson Snyder 5a6f2b661d Tests: Avoid multiple lint/compile runs in one test; hard to debug 2024-09-20 20:34:35 -04:00
Wilson Snyder 80cba789f4 Internals: Remove V3LinkParse's need of class links. No functional change intended. 2024-09-20 18:26:23 -04:00
Wilson Snyder 92dd8ee8f5 Fix timing mode not exiting on empty events (#5472). 2024-09-20 17:46:27 -04:00
Todd Strader 1665d15d4d Fix user-type parameter overlap (#5469) 2024-09-20 14:29:31 -04:00
Wilson Snyder f0fb0b05ff Internals: Misc V3Param cleanups. 2024-09-20 08:59:10 -04:00
Wilson Snyder 02e88e3848 Fix suppression of WIDTH* warnings when immediately under a size cast (#3417). 2024-09-19 22:56:47 -04:00
Wilson Snyder 87eef36b1c Tests: Fix driver race sometimes missing final log data 2024-09-19 22:49:40 -04:00
Wilson Snyder 579257bc42 Tests: Fix driver not accepting debug pass-down flags to Verilator, broke earlier commit. 2024-09-19 22:08:40 -04:00
Wilson Snyder e2041f7450 Commentary: Changes update 2024-09-19 20:29:39 -04:00
Yilou Wang 70112438c3 Support packed/unpacked and dynamic array unconstrained randomization (#5414) (#5415) 2024-09-19 20:07:05 -04:00
Wilson Snyder 175e1dde73 Tests: Run t_hier_block_cmake.py first so finishes 2024-09-19 19:33:43 -04:00
Wilson Snyder e990415ee0 Tests: Improve driver performance with forkserver 2024-09-19 19:28:07 -04:00
Wilson Snyder 1543b202b2 Tests: Move per-command expect= to instead check logfiles 2024-09-19 18:53:22 -04:00
Wilson Snyder f63168a5b5 CI: More parallelism 2024-09-19 18:51:33 -04:00
Wilson Snyder 49bccb5f1b Commentary 2024-09-19 17:58:37 -04:00
Wilson Snyder c7e1358bb7 Tests: Fix --gdb with one test (#5466) 2024-09-19 17:06:32 -04:00
Geza Lore 62a58f420c Fix latest pylint issues (#5465) 2024-09-19 15:51:13 +01:00
Arkadiusz Kozdra dd95e033e7 Support inside array constraints (#5448)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-09-19 07:27:59 -04:00
Wilson Snyder 371a4055b0 Fix false LIFETIME warning on repeat in fork-join (#5456). 2024-09-18 21:20:17 -04:00
Wilson Snyder f251f7b774 Tests: CONSTRIAINTIGN, ZERODLY no longer need suppression on UVM 2024-09-17 21:21:08 -04:00
Wilson Snyder 0f3e0de891 Commentary 2024-09-17 20:58:14 -04:00
Wilson Snyder 7081ea0ede Support as a task call 2024-09-17 20:53:08 -04:00
Wilson Snyder fb04765c0e Fix class reference with pin that is a class reference (#5454). 2024-09-17 17:38:18 -04:00
Wilson Snyder b8bda729d4 Tests: Fix debug message 2024-09-16 20:29:23 -04:00
Wilson Snyder 195a665293 Internals: Fix V3LinkDot debug message print 2024-09-15 21:18:51 -04:00
Wilson Snyder c8de3630a5 Tests: Fix driver error report, and passing --dumpi-tree 2024-09-15 21:10:44 -04:00
Wilson Snyder 99a29acca0 CI: One-time yamlfix cleanups. No functional change intended. 2024-09-15 14:37:09 -04:00
Wilson Snyder 48a607cc78 Internals: Cleanup Makefile.in to commented sections. No functional change intended. 2024-09-15 13:55:43 -04:00
Wilson Snyder 19170badd3 Fix warning IEEE reference (#5453) 2024-09-15 11:05:48 -04:00
Wilson Snyder 77fc771ed0 Tests: Fix missing stdout on execute() 2024-09-14 18:01:49 -04:00
github action 9b9a554489 Apply 'make format' 2024-09-14 00:46:48 +00:00
Wilson Snyder 0fe8c73d19 Fix $fatal to not be affected by +verilator+error+limit (#5135). 2024-09-13 20:45:44 -04:00
Wilson Snyder eb66e137db Fix fault on defparam with UNSUPPORTED ignored (#5450). 2024-09-13 18:31:55 -04:00
Wilson Snyder c2b82c293f Tests: Fix driver creating .out with --gold 2024-09-13 18:31:35 -04:00
Arkadiusz Kozdra 0b7510befa Support basic dist constraints (#5431) 2024-09-12 05:20:36 -07:00
Arkadiusz Kozdra 140eb0a6e5 Re-sync parser on endclass
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-09-11 15:57:45 +02:00
Arkadiusz Kozdra 6b8f253ecd Re-sync parser in constraints and cross coverpoints
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-09-11 15:57:45 +02:00
Arkadiusz Kozdra ac29393ec9 Do not parse covergroup identifiers as types
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-09-11 15:57:45 +02:00
Wilson Snyder 22d6bb8180 Fix display with multiple string formats (#5311). 2024-09-11 08:41:11 -04:00
Wilson Snyder f4e4602dcb Tests: Fix driver handling of interrupts 2024-09-10 20:29:26 -04:00
Wilson Snyder 521c5c2f75 Fix extra events in traces (#5405). 2024-09-10 19:14:52 -04:00
Wilson Snyder 3525484730 Commentary 2024-09-10 19:04:55 -04:00
Arkadiusz Kozdra 4a58997604 Support basic constrained queue randomization (#5413)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-09-10 09:33:14 -04:00
Arkadiusz Kozdra ef259f63ca Fix randomize treated as std::randomize in classes (#5436) 2024-09-10 09:10:36 -04:00
Arkadiusz Kozdra 2f690c0530 Fix foreach colliding index names (#5444)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-09-10 07:17:21 -04:00
Wilson Snyder 283a5edbdb Tests: Make GCOV_PREFIX path directories 2024-09-09 21:47:47 -04:00
Wilson Snyder e566b5a4f5 Change .vlt config files to be read before .v files (#5185). 2024-09-09 20:18:54 -04:00
Wilson Snyder 4e4fdd3b66 Fix multidimensional function return value selects (#5382). 2024-09-09 19:56:09 -04:00
Wilson Snyder 434896d50c Tests: test class IGNOREDRETURN. 2024-09-09 19:48:15 -04:00
Andrew Nolte 1e7611edea Change to use maximum for cover point aggregation (#5402) 2024-09-09 14:20:18 -04:00
Geza Lore 2890126110 Remove out of range Sel in V3Unknown (#5443)
Fixes #5393
2024-09-09 14:09:29 +01:00
Wilson Snyder 07bb8c701d Convert test driver to Python (#5427) 2024-09-08 13:00:03 -04:00
Wilson Snyder 55ae48ac13 Commentary 2024-09-08 11:11:20 -04:00
Wilson Snyder c83ee391bb Fix associative array next/prev/first/last mis-propagating constants (#5435). 2024-09-07 15:25:35 -04:00
Wilson Snyder d01b917062 Commentary: Changes update 2024-09-07 15:24:06 -04:00
Wilson Snyder b21117091b CI: Add Ubuntu 24.04 GCC; combine reloc with GCC-10 runs 2024-09-07 13:43:47 -04:00
Wilson Snyder 3a73d83741 Tests: Fix clang 18 warning 2024-09-07 10:20:59 -04:00
Wilson Snyder 9643232d36 CI: Add Ubuntu 24.04 script (not enabled yet) 2024-09-07 10:12:35 -04:00
Wilson Snyder 7b41d2046d Fix GTKWave clang 18 warning 2024-09-07 10:12:09 -04:00
Wilson Snyder 7eb1b6c32b Tests: Fix GCC 13.2.0 issues. No functional change. 2024-09-06 22:04:49 -04:00
Andrew Nolte 083fb7e9c2 Add partial coverage symbol and branch data in lcov info files (#5388) 2024-09-06 18:15:18 -04:00
Krzysztof Bieganski afb8428db4 Support IEEE-compliant intra-assign delays (#3711) (#5441) 2024-09-06 18:13:52 -04:00
Bartłomiej Chmiel d6923c8571 Improve performance of V3VariableOrder with parallelization (#5406) 2024-09-06 08:04:26 -04:00
Wilson Snyder 1c38744fd1 Tests: Fix requiring core dump 2024-09-04 20:10:05 -04:00
Krzysztof Bieganski 51691dfde5 Fix driving clocking block in Reactive
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-09-04 07:57:51 -04:00
Arkadiusz Kozdra 409efa1249 Internals: Factor out creating clocking event. No functional change.
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-09-04 07:57:51 -04:00
Wilson Snyder e4ff0909dc Tests: Misc test cleanups from Python branch. 2024-09-03 21:42:06 -04:00
Wilson Snyder d3670b6890 Test: Remove old test 2024-09-03 21:32:09 -04:00
Wilson Snyder 7a74ddc1af Internals: Fix some getter/setter ordering. No functional change intended. 2024-09-02 18:48:49 -04:00
Wilson Snyder 551862a55e Tests: Move some misplaced files. No functional change. 2024-09-02 15:50:40 -04:00
Arkadiusz Kozdra d3fcec3e84 Fix clearing trigger of events with no sentrees (#5426)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-09-02 18:19:49 +02:00
Krzysztof Bieganski 088862d449 Support appending to queue via [] (#5421) 2024-09-02 09:45:47 -04:00
github action e9f758ce67 Apply 'make format' 2024-09-02 01:13:41 +00:00
Wilson Snyder b698bfd850 Tests: Untabify some tests. 2024-09-01 21:12:37 -04:00
Wilson Snyder c9970ff822 Tests: Fix --verbose broken display 2024-09-01 21:01:07 -04:00
Wilson Snyder df594ee430 Tests: Fix ll scan test. 2024-09-01 20:59:42 -04:00
Todd Strader 201e343795 Fix sformatf internal error on initial automatics (#5423) 2024-08-30 19:35:47 -04:00
Wilson Snyder 9a307c4abd Tests: Cleanup trace_filename use. No test functionality change. 2024-08-30 18:34:42 -04:00
Krzysztof Bieganski 657d7f257b Support named event locals (#5422)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-30 17:10:47 +02:00
Wilson Snyder 0ec5e02ce1 Improve hex too many digits error (#5419). 2024-08-30 07:48:00 -04:00
Wilson Snyder cdfb2221bb Tests: Remove ancient GCC 4.4 skip. 2024-08-29 19:25:22 -04:00
Krzysztof Bieganski f133a2811f Fix capturing params in randomize() with (#5416) (#5418)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-29 23:02:21 +02:00
Krzysztof Bieganski aecf38e3ad Fix V3Randomize compile error on old GCC (#5403) (#5417).
No functional change intended.
2024-08-29 10:39:54 -04:00
Wilson Snyder fa32d10f39 Fix performance of V3Trace when many activity blocks (#5372). 2024-08-28 20:45:51 -04:00
Wilson Snyder f4fe89a8c4 Commentary: Changes update 2024-08-28 17:32:57 -04:00
Krzysztof Bieganski 675d9a641e Call pre/post_randomize on randomize() with (#5412)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-28 19:42:49 +02:00
Krzysztof Bieganski d896f1ff08 Fix queue [$-i] select as reference argument (#5411)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-28 17:29:12 +02:00
Arkadiusz Kozdra 5cb6f370e9 Internals: Emit rand constraint right away. No functional change intended. (#5409)
This change gets rid of most of the shared pointers and useless memory
allocations.  Also takes advantage of higher-arity bvxor/concat to
reduce amount of data sent to the solver.

Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-08-28 16:11:39 +02:00
Kaleb Barrett e04ef5d83a Add method to check if there are VPI callbacks of the given type (#5399) 2024-08-27 17:36:51 -04:00
Krzysztof Bieganski 155dcc5658 Fix empty foreach in if in constraints (#5408)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-27 15:39:36 +02:00
Wilson Snyder e927536099 Reduce --debugi 2 verbosity 2024-08-27 07:28:27 -04:00
Krzysztof Bieganski f623db7d68 Normalize types in constraints (#5407)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-27 12:53:44 +02:00
Wilson Snyder d40f7f5167 Tests: Fix lint-py (last commit) 2024-08-27 05:31:40 -04:00
Wilson Snyder 34bb013941 Tests: Fix broken t_proc.pl, and misc cleanups. 2024-08-26 21:53:36 -04:00
Wilson Snyder ae35be9102 Internals: Reformat with new settings (last commit). No functional change. 2024-08-26 21:53:36 -04:00
Wilson Snyder bde4097df2 Internals: Add .style.yapf 2024-08-26 21:53:36 -04:00
Wilson Snyder 17b70788df Internals: Run yapf3 in parallel 2024-08-26 21:53:36 -04:00
Krzysztof Bieganski b1927e4fb5 Fix infinite recursion due to recursive functions/tasks (#5398) 2024-08-26 12:18:52 -04:00
Yilou Wang c4cb26fa9a Support unconstrained randomization for unions (#5395) (#5396) 2024-08-26 11:04:45 -04:00
Wilson Snyder 4e86e60491 Tests: Use only case-sensitve non-extended regexps 2024-08-26 08:14:39 -04:00
Wilson Snyder d3e07b6ad9 Internals: Always use parallel for make -j 4 clang-format yapf format-pl-exec
make[1]: Entering directory '/svaha/wsnyder/SandBox/homecvs/v4/verilator'
yapf3 -i bin/verilator_ccache_report bin/verilator_difftree bin/verilator_gantt bin/verilator_includer bin/verilator_profcfunc examples/json_py/vl_file_copy examples/json_py/vl_hier_graph docs/guide/conf.py docs/bin/vl_sphinx_extract docs/bin/vl_sphinx_fix src/astgen src/bisonpre src/config_rev src/cppcheck_filtered src/flexfix src/vlcovgen src/.gdbinit.py test_regress/t/*.pf nodist/clang_check_attributes nodist/code_coverage nodist/dot_importer nodist/fuzzer/actual_fail nodist/fuzzer/generate_dictionary nodist/install_test nodist/log_changes  nodist/code_coverage.dat
chmod a+x test_regress/t/*.pl
clang-format-14 -i ./include/verilated.cpp ./include/verilated_cov.cpp ./include/verilated_dpi.cpp ./include/verilated_fst_c.cpp ./include/verilated_fst_sc.cpp ./include/verilated_probdist.cpp ./include/verilated_profiler.cpp ./include/verilated_random.cpp ./include/verilated_save.cpp ./include/verilated_threads.cpp ./include/verilated_timing.cpp ./include/verilated_vcd_c.cpp ./include/verilated_vcd_sc.cpp ./include/verilated_vpi.cpp ./examples/make_hello_c/sim_main.cpp ./examples/make_hello_sc/sc_main.cpp ./examples/make_protect_lib/sim_main.cpp ./examples/make_tracing_c/sim_main.cpp ./examples/make_tracing_sc/sc_main.cpp ./src/VlcMain.cpp ./src/VlcTop.cpp ./src/V3Active.cpp ./src/V3ActiveTop.cpp ./src/V3Assert.cpp ./src/V3AssertPre.cpp ./src/V3Ast.cpp ./src/V3AstNodes.cpp ./src/V3Begin.cpp ./src/V3Branch.cpp ./src/V3Broken.cpp ./src/V3CCtors.cpp ./src/V3CUse.cpp ./src/V3Case.cpp ./src/V3Cast.cpp ./src/V3Class.cpp ./src/V3Clean.cpp ./src/V3Clock.cpp ./src/V3Combine.cpp ./src/V3Common.cpp ./src/V3Config.cpp ./src/V3Const.cpp ./src/V3Coverage.cpp ./src/V3CoverageJoin.cpp ./src/V3Dead.cpp ./src/V3Delayed.cpp ./src/V3Depth.cpp ./src/V3DepthBlock.cpp ./src/V3Descope.cpp ./src/V3Dfg.cpp ./src/V3DfgAstToDfg.cpp ./src/V3DfgCache.cpp ./src/V3DfgDecomposition.cpp ./src/V3DfgDfgToAst.cpp ./src/V3DfgOptimizer.cpp ./src/V3DfgPasses.cpp ./src/V3DfgPeephole.cpp ./src/V3DfgRegularize.cpp ./src/V3DupFinder.cpp ./src/Verilator.cpp ./src/V3EmitCBase.cpp ./src/V3EmitCConstPool.cpp ./src/V3EmitCFunc.cpp ./src/V3EmitCHeaders.cpp ./src/V3EmitCImp.cpp ./src/V3EmitCInlines.cpp ./src/V3EmitCMain.cpp ./src/V3EmitCMake.cpp ./src/V3EmitCModel.cpp ./src/V3EmitCPch.cpp ./src/V3EmitCSyms.cpp ./src/V3EmitMk.cpp ./src/V3EmitV.cpp ./src/V3EmitXml.cpp ./src/V3Error.cpp ./src/V3ExecGraph.cpp ./src/V3Expand.cpp ./src/V3File.cpp ./src/V3FileLine.cpp ./src/V3Force.cpp ./src/V3Fork.cpp ./src/V3Gate.cpp ./src/V3Global.cpp ./src/V3Graph.cpp ./src/V3GraphAcyc.cpp ./src/V3GraphAlg.cpp ./src/V3GraphPathChecker.cpp ./src/V3GraphTest.cpp ./src/V3Hash.cpp ./src/V3Hasher.cpp ./src/V3HierBlock.cpp ./src/V3Inline.cpp ./src/V3Inst.cpp ./src/V3InstrCount.cpp ./src/V3Interface.cpp ./src/V3Param.cpp ./src/V3ParseGrammar.cpp ./src/V3ParseImp.cpp ./src/V3ParseLex.cpp ./src/V3PreProc.cpp ./src/V3PreShell.cpp ./src/V3Premit.cpp ./src/V3ProtectLib.cpp ./src/V3Randomize.cpp ./src/V3Reloop.cpp ./src/V3Sampled.cpp ./src/V3Sched.cpp ./src/V3SchedAcyclic.cpp ./src/V3SchedPartition.cpp ./src/V3SchedReplicate.cpp ./src/V3SchedTiming.cpp ./src/V3SchedVirtIface.cpp ./src/V3Scope.cpp ./src/V3Scoreboard.cpp ./src/V3Slice.cpp ./src/V3Split.cpp ./src/V3SplitAs.cpp ./src/V3SplitVar.cpp ./src/V3StackCount.cpp ./src/V3Stats.cpp ./src/V3StatsReport.cpp ./src/V3String.cpp ./src/V3Subst.cpp ./src/V3TSP.cpp ./src/V3Table.cpp ./src/V3Task.cpp ./src/V3ThreadPool.cpp ./src/V3Timing.cpp ./src/V3Trace.cpp ./src/V3TraceDecl.cpp ./src/V3Tristate.cpp ./src/V3Undriven.cpp ./src/V3Unknown.cpp ./src/V3Unroll.cpp ./src/V3VariableOrder.cpp ./src/V3Waiver.cpp ./src/V3Width.cpp ./src/V3WidthCommit.cpp ./src/V3WidthSel.cpp ./src/V3Life.cpp ./src/V3LifePost.cpp ./src/V3LinkCells.cpp ./src/V3LinkDot.cpp ./src/V3LinkInc.cpp ./src/V3LinkJump.cpp ./src/V3LinkLValue.cpp ./src/V3LinkLevel.cpp ./src/V3LinkParse.cpp ./src/V3LinkResolve.cpp ./src/V3Localize.cpp ./src/V3MergeCond.cpp ./src/V3Name.cpp ./src/V3Number.cpp ./src/V3OptionParser.cpp ./src/V3Options.cpp ./src/V3Order.cpp ./src/V3OrderGraphBuilder.cpp ./src/V3OrderMoveGraph.cpp ./src/V3OrderParallel.cpp ./src/V3OrderProcessDomains.cpp ./src/V3OrderSerial.cpp ./src/V3Os.cpp ./src/V3Param.cpp ./src/V3ParseGrammar.cpp ./src/V3ParseImp.cpp ./src/V3ParseLex.cpp ./src/V3PreProc.cpp ./src/V3PreShell.cpp ./src/V3Premit.cpp ./src/V3ProtectLib.cpp ./src/V3Randomize.cpp ./src/V3Reloop.cpp ./src/V3Sampled.cpp ./src/V3Sched.cpp ./src/V3SchedAcyclic.cpp ./src/V3SchedPartition.cpp ./src/V3SchedReplicate.cpp ./src/V3SchedTiming.cpp ./src/V3SchedVirtIface.cpp ./src/V3Scope.cpp ./src/V3Scoreboard.cpp ./src/V3Slice.cpp ./src/V3Split.cpp ./src/V3SplitAs.cpp ./src/V3SplitVar.cpp ./src/V3StackCount.cpp ./src/V3Stats.cpp ./src/V3StatsReport.cpp ./src/V3String.cpp ./src/V3Subst.cpp ./src/V3TSP.cpp ./src/V3Table.cpp ./src/V3Task.cpp ./src/V3ThreadPool.cpp ./src/V3Timing.cpp ./src/V3Trace.cpp ./src/V3TraceDecl.cpp ./src/V3Tristate.cpp ./src/V3Undriven.cpp ./src/V3Unknown.cpp ./src/V3Unroll.cpp ./src/V3VariableOrder.cpp ./src/V3Waiver.cpp ./src/V3Width.cpp ./src/V3WidthCommit.cpp ./src/V3WidthSel.cpp ./include/verilated.h ./include/verilated_config.h ./include/verilated_cov.h ./include/verilated_cov_key.h ./include/verilated_dpi.h ./include/verilated_fst_c.h ./include/verilated_fst_sc.h ./include/verilated_funcs.h ./include/verilated_imp.h ./include/verilated_intrinsics.h ./include/verilated_profiler.h ./include/verilated_random.h ./include/verilated_save.h ./include/verilated_sc.h ./include/verilated_sc_trace.h ./include/verilated_sym_props.h ./include/verilated_syms.h ./include/verilated_threads.h ./include/verilated_timing.h ./include/verilated_trace.h ./include/verilated_trace_imp.h ./include/verilated_types.h ./include/verilated_vcd_c.h ./include/verilated_vcd_sc.h ./include/verilated_vpi.h ./include/verilatedos.h ./include/verilatedos_c.h ./src/V3Active.h ./src/V3ActiveTop.h ./src/V3Assert.h ./src/V3AssertPre.h ./src/V3Ast.h ./src/V3AstInlines.h ./src/V3AstNodeDType.h ./src/V3AstNodeExpr.h ./src/V3AstNodeOther.h ./src/V3AstUserAllocator.h ./src/V3Begin.h ./src/V3Branch.h ./src/V3Broken.h ./src/V3CCtors.h ./src/V3CUse.h ./src/V3Case.h ./src/V3Cast.h ./src/V3Class.h ./src/V3Clean.h ./src/V3Clock.h ./src/V3Combine.h ./src/V3Common.h ./src/V3Config.h ./src/V3Const.h ./src/V3Coverage.h ./src/V3CoverageJoin.h ./src/V3Dead.h ./src/V3Delayed.h ./src/V3Depth.h ./src/V3DepthBlock.h ./src/V3Descope.h ./src/V3Dfg.h ./src/V3DfgCache.h ./src/V3DfgOptimizer.h ./src/V3DfgPasses.h ./src/V3DfgPatternStats.h ./src/V3DfgPeephole.h ./src/V3DfgVertices.h ./src/V3DupFinder.h ./src/V3EmitC.h ./src/V3EmitCBase.h ./src/V3EmitCConstInit.h ./src/V3EmitCFunc.h ./src/V3EmitCMain.h ./src/V3EmitCMake.h ./src/V3EmitMk.h ./src/V3EmitV.h ./src/V3EmitXml.h ./src/V3Error.h ./src/V3ExecGraph.h ./src/V3Expand.h ./src/V3File.h ./src/V3FileLine.h ./src/V3Force.h ./src/V3Fork.h ./src/V3FunctionTraits.h ./src/V3Gate.h ./src/V3Global.h ./src/V3Graph.h ./src/V3GraphAlg.h ./src/V3GraphPathChecker.h ./src/V3GraphStream.h ./src/V3Hash.h ./src/V3Hasher.h ./src/V3HierBlock.h ./src/V3Inline.h ./src/V3Inst.h ./src/V3InstrCount.h ./src/V3Interface.h ./src/V3LangCode.h ./src/V3LanguageWords.h ./src/V3Life.h ./src/V3LifePost.h ./src/V3LinkCells.h ./src/V3LinkDot.h ./src/V3LinkInc.h ./src/V3LinkJump.h ./src/V3LinkLValue.h ./src/V3LinkLevel.h ./src/V3LinkParse.h ./src/V3LinkResolve.h ./src/V3List.h ./src/V3Localize.h ./src/V3MemberMap.h ./src/V3MergeCond.h ./src/V3Mutex.h ./src/V3Name.h ./src/V3Number.h ./src/V3OptionParser.h ./src/V3Options.h ./src/V3Order.h ./src/V3OrderCFuncEmitter.h ./src/V3OrderGraph.h ./src/V3OrderInternal.h ./src/V3OrderMoveGraph.h ./src/V3Os.h ./src/V3PairingHeap.h ./src/V3Param.h ./src/V3Parse.h ./src/V3ParseImp.h ./src/V3ParseSym.h ./src/V3PchAstMT.h ./src/V3PchAstNoMT.h ./src/V3PreExpr.h ./src/V3PreLex.h ./src/V3PreProc.h ./src/V3PreShell.h ./src/V3Premit.h ./src/V3ProtectLib.h ./src/V3Randomize.h ./src/V3Reloop.h ./src/V3Rtti.h ./src/V3Sampled.h ./src/V3Sched.h ./src/V3Scope.h ./src/V3Scoreboard.h ./src/V3SenExprBuilder.h ./src/V3SenTree.h ./src/V3Simulate.h ./src/V3Slice.h ./src/V3Split.h ./src/V3SplitAs.h ./src/V3SplitVar.h ./src/V3StackCount.h ./src/V3Stats.h ./src/V3StdFuture.h ./src/V3String.h ./src/V3Subst.h ./src/V3SymTable.h ./src/V3TSP.h ./src/V3Table.h ./src/V3Task.h ./src/V3ThreadPool.h ./src/V3Timing.h ./src/V3Trace.h ./src/V3TraceDecl.h ./src/V3Tristate.h ./src/V3Undriven.h ./src/V3UniqueNames.h ./src/V3Unknown.h ./src/V3Unroll.h ./src/V3VariableOrder.h ./src/V3Waiver.h ./src/V3Width.h ./src/V3WidthCommit.h ./src/V3WidthRemove.h ./src/VlcBucket.h ./src/VlcOptions.h ./src/VlcPoint.h ./src/VlcSource.h ./src/VlcTest.h ./src/VlcTop.h ./src/config_build.h ./src/config_package.h ./src/config_rev.h ./src/verilog.y ./src/V3PreLex.l ./src/verilog.l test_regress/t/*.c* test_regress/t/*.h
make[1]: Leaving directory '/svaha/wsnyder/SandBox/homecvs/v4/verilator'
2024-08-26 05:01:37 -04:00
Wilson Snyder fa4af38b0a configure: Print inbound CXX setting 2024-08-26 04:58:59 -04:00
Wilson Snyder a9635aaa2c Tests: Default to check_finished=>1 2024-08-24 19:27:59 -04:00
Wilson Snyder f0cd6dd95c Fix REALCVT warning on integral timescale conversions (#5378). 2024-08-24 08:01:28 -04:00
Wilson Snyder d8fdfa6be2 Internals: git ignore nohup.out 2024-08-24 07:56:48 -04:00
Wilson Snyder f9511e9755 Internals: Make V3Number::selfTest() 2024-08-24 05:41:22 -04:00
Wilson Snyder cfe1f23fff Commentary: Changes update 2024-08-23 18:45:54 -04:00
Wilson Snyder 8741fd17ad Internals: cppcheck cleanups. No functional change intended. 2024-08-23 18:24:34 -04:00
ffe76717c6 Thread pool rewrite (#5161)
Signed-off-by: Krzysztof Bieganski <[email protected]>
Signed-off-by: Bartłomiej Chmiel <[email protected]>
Signed-off-by: Arkadiusz Kozdra <[email protected]>
Co-authored-by: Krzysztof Bieganski <[email protected]>
Co-authored-by: Arkadiusz Kozdra <[email protected]>
Co-authored-by: Wilson Snyder <[email protected]>
2024-08-23 08:36:49 -04:00
Krzysztof Bieganski eb8bbcda05 Internals: Simplify CaptureVisitor in V3Randomize (#5397) 2024-08-23 07:57:57 -04:00
Arkadiusz Kozdra ed7040adc0 Fix dot fallback finding wrong symbols (#5394) 2024-08-22 15:49:08 -04:00
Wilson Snyder 48776277bd devel release 2024-08-21 08:55:53 -04:00
Wilson Snyder 8ca45df9c7 Version bump 2024-08-21 08:40:24 -04:00
Wilson Snyder 8db9c1d227 Commentary: Changes update 2024-08-21 08:40:14 -04:00
Krzysztof Bieganski 930f35acc9 Support constraint_mode (#5338) 2024-08-21 06:16:44 -04:00
Krzysztof Bieganski 13e0fc7c27 Fix virtual interface null checks (#5391) 2024-08-21 05:40:52 -04:00
Bartłomiej Chmiel a730daabef Support 'parameter type' in hierarchical blocks (#5309) (#5333) 2024-08-21 05:30:59 -04:00
Andrew Nolte 3c28b72897 Tests: Add info files to golden (#5390) 2024-08-21 06:44:02 +03:00
Wilson Snyder 05e5f1955e Update include/gtkwave from upstream 2024-08-20 15:23:53 -04:00
Wilson Snyder 378800ee4a Commentary: Changes update 2024-08-20 15:13:44 -04:00
Wilson Snyder 43a57da950 Add quotes to not-found filenames 2024-08-20 14:47:43 -04:00
James BaileyandJames Bailey 99a43b7695 Fix +: and -: unpacked array slicing when array has nonzero low index (#5345) (#5387)
Co-authored-by: James Bailey <[email protected]>
2024-08-20 14:20:48 -04:00
Krzysztof Bieganski 59d2eea302 Fix capturing fields from superclass in randomize() with (#5389)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-20 13:25:58 -04:00
Kaleb Barrett 6f3f64e63f Add --timing flag as Verilated cc define (#5383) 2024-08-18 20:02:54 +03:00
Drew Ranck 48c71ef76c Support default value on module input (#5358) (#5373) 2024-08-15 10:04:07 -04:00
Ryszard Rozak 563faeb33f Internals: Fix removing nodes in V3Life (#5365) 2024-08-14 09:23:24 +02:00
Wilson Snyder 9c5c77c69c Favor use of more general idAny in parser 2024-08-13 15:25:07 -04:00
Wilson Snyder 4573e04488 Fix segfault after unsupported member call (#5359). 2024-08-13 14:39:37 -04:00
Krzysztof Bieganski 6cb0a41857 Support inline random variable control (#5317)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-13 14:20:31 -04:00
Geza Lore 124e3463fc Fix cache config file resolution performance (#5369)
V3ConfigWildcardResolver::resolve used to only cache the result of a
name lookup if there were any directives applied to the queried name.

This can be a performance problem. E.g. the module resolver is invoked
for every variable to check for attributes. If you had 'n' variables in
the design, and you also had 'k' directives that apply to specific
modules not involving most of the 'n' variables, then checking the
attributes involved O(n*k) operations. This can be very expensive
for large 'n' and 'k'.

In this patch we resolve every name exactly once, so the same above is
now O(n) in the worst case, and often a lot smaller due to repeat
lookups.
2024-08-13 19:52:23 +02:00
Ethan Sifferman 1b15509a9c Fix lint_off on Errors (#5351) (#5363) 2024-08-11 21:04:46 +02:00
Wilson Snyder eb3f10399a Internal: Rename tokenPipeScanTypeEq. No functional change. 2024-08-11 12:15:20 -04:00
Wilson Snyder 4660806c8f Internals: Remove wrong = new grammar rule. 2024-08-11 11:03:28 -04:00
Wilson Snyder 6f5d1037b4 Commentary 2024-08-11 10:33:04 -04:00
Wilson Snyder 24b097b228 Improve new class error (#5359) 2024-08-11 10:09:05 -04:00
Wilson Snyder a0ea96b355 Favor use of more general idAny in parser 2024-08-09 18:00:36 -04:00
Wilson Snyder a663da7393 Internals: Split idType from simple_type. No functional change intended 2024-08-09 17:45:54 -04:00
Tim Hutt c812a9b18f Fix shortened module names when searching for files (#5196) (#5246) 2024-08-09 17:23:00 -04:00
Arkadiusz Kozdra 367249ec84 Add parsing but otherwise ignore std::randomize (#5354) 2024-08-09 17:21:32 -04:00
Wilson Snyder f4acc59b82 Tests: Check for wrong quotes in docs (#5355) 2024-08-09 17:18:59 -04:00
Luca Colagrande d1da1664f0 Docs: Fix typos in :vlopt: command usage in docs (#5355) (#5356) 2024-08-09 14:17:36 +01:00
Krzysztof Bieganski b100615726 Internals: Relax requirements for AstClass iteration methods (#5335)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-09 10:05:52 +01:00
Krzysztof Bieganski ec0815e9ac Fix NBAs in suspendables (#5348)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-08 22:12:00 +01:00
Krzysztof Bieganski 97e9996f0b Fix optimized-out sentrees with --timing (#5080) (#5349)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-08 21:57:12 +01:00
Krzysztof Bieganski b7af859ba3 Fix forks capturing non-input ports in tasks (#5237) (#5343)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-08 21:55:46 +01:00
Krzysztof Bieganski 701fa5438a Fix output clockvar overwriting signal (#5320) (#5347)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-08 21:48:25 +01:00
Geza Lore 004865a8b2 Fix tracing_{on,off} in the presence of non-inlined modules (#5346)
Previously "*.foo.*" failed to match non-inlined instances called 'foo'.
2024-08-08 17:16:54 +01:00
Arkadiusz Kozdra 3e5859e5da Support constraining AstSel (#5344)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-08-08 15:37:08 +01:00
Arkadiusz Kozdra 78555b683c Fix missing type coercion in 'inside {array}' (#5340) 2024-08-08 03:46:41 -04:00
Wilson Snyder c2e44dbd99 Fix $sformat with array arguments (#5330). 2024-08-08 03:32:07 -04:00
Wilson Snyder 18fc3e6089 Internals: Favor idAny in typedefs. 2024-08-07 18:45:53 -04:00
Wilson Snyder f4f8ea0dcf Internals: Change cast fileline to point to cast operator 2024-08-07 18:45:53 -04:00
Arkadiusz Kozdra f78c4e8490 Fix compilation error on unreachable disable fork / wait fork (#5339)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-08-07 18:44:02 -04:00
Arkadiusz Kozdra e6fe367bdb Support streams to/from arrays of wide data (#5334) 2024-08-06 16:18:16 +01:00
Ryszard Rozak 3426ee5170 Fix purity of functions with AstJumpBlock or AstStmtExpr (#5332) 2024-08-06 16:07:38 +01:00
Arkadiusz Kozdra a32b8d80f9 Support streaming operator on arrays and wide data (#5326)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-08-06 08:48:46 -04:00
Bartłomiej Chmiel 3b81654c72 Fix -Wunused-but-set-variable clang warning (#5331)
Signed-off-by: Bartłomiej Chmiel <[email protected]>
2024-08-06 08:48:12 -04:00
Wilson Snyder 6abd556f5a Tests: Fix GCC 11.4.0 hang 2024-08-06 08:47:28 -04:00
Varun Koyyalagunta 31c1df638b Fix assert on wide expression (#5319) (#5324) 2024-08-06 01:45:57 -04:00
Krzysztof Bieganski f4cb2c8cf2 Add more rand_mode unsupported errors (#5329)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-08-05 17:56:03 -04:00
Bartłomiej Chmiel 7d5e19365e Support assertcontrol directive type (#5310)
Signed-off-by: Bartłomiej Chmiel <[email protected]>
2024-08-05 17:54:13 -04:00
Wilson Snyder 6fa1ade4e0 Commentary: Changes update 2024-08-05 04:03:21 -04:00
Bartłomiej Chmiel 99c619a4c9 Error on static variable initializers using automatic variables in procedures (#5296) 2024-08-05 08:39:43 +01:00
Krzysztof Bieganski 37a4002098 Fix stringify in nested preprocessor macros (#5323) 2024-08-02 11:46:02 -04:00
Krzysztof Boroński 45ee949cc4 Internals: Disambiguate variable references under with clauses of randomize() methods (#5277) 2024-08-02 11:45:17 -04:00
Arkadiusz Kozdra 54f9f4b6a9 Support foreach constraints (#5302)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-08-02 10:03:55 -04:00
Arkadiusz Kozdra a61178bd89 Internals: Convert foreach loops in V3Begin as well as V3Width (#5283) 2024-08-02 08:29:05 -04:00
Krzysztof Bieganski 2f5c58b345 Support rand_mode (#5273)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-07-31 22:30:48 +01:00
Wilson Snyder 403a197e23 Python lint fix 2024-07-28 14:57:29 -04:00
Wilson Snyder 3a659d460d Fix ==? and !=? with X values. 2024-07-28 14:40:55 -04:00
Wilson Snyder 8707c88787 Tests: Close misc internal code coverage holes 2024-07-28 14:18:24 -04:00
github action 167cba723e Apply 'make format' 2024-07-28 17:59:13 +00:00
Wilson Snyder 7f40dd8b5b CI: Fix codecov upload 2024-07-28 13:58:26 -04:00
Wilson Snyder 1609c23fea Fix cputime being zero 2024-07-28 13:14:10 -04:00
Wilson Snyder 216fc8a212 CI: Fix codecov upload 2024-07-27 07:18:50 -04:00
Wilson Snyder 5136ea1082 CI: Fix codecov upload 2024-07-27 07:02:18 -04:00
Wilson Snyder 5b931faf2b CI: Fix codecov upload 2024-07-27 06:31:20 -04:00
Wilson Snyder a2496e041e CI: Change to action-based codecov upload 2024-07-26 14:07:53 -04:00
Wilson Snyder fab268f772 CI: Change to action-based codecov upload 2024-07-26 10:39:08 -04:00
Wilson Snyder 550d47b7f4 CI: Change to action-based codecov upload 2024-07-26 10:27:00 -04:00
Markus Krause a01a21db86 Fix make flows to pass PYTHON3 (like perl) (#5307) (#5308)
Fixes #5307
2024-07-26 09:35:37 -04:00
Wilson Snyder 2082f1aa9e Internals: Update fastcov.py from upstream 2024-07-26 08:48:12 -04:00
Wilson Snyder 50a5a1ff5b Tests: Fix some verilog.y parser coverage holes 2024-07-26 07:29:15 -04:00
Arkadiusz Kozdra 1600cc01a4 Internals: clean up begin blocks and lifetimes in foreach loops (#5306)
According to IEEE 1800-2023 12.7.3, the loop creates an implicit block
around it, containing declarations of the loop variables with automatic
lifetime.

No functional change intended.

Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-07-26 05:50:29 -04:00
Ryszard Rozak b9e1d55262 Fix handling of rand fields not referenced in constraints (#5305)
Signed-off-by: Ryszard Rozak <[email protected]>
2024-07-26 05:46:30 -04:00
Geza Lore 0d43c14b93 Internals: Remove redundant hash lookup (#5276 partial) (#5303)
Minor help for #5276
2024-07-25 16:07:58 -04:00
Ricardo Barbedo 87d1c10fa7 Fix compiler coroutine check (#5190) (#5300)
The necessary options to support C++ coroutines vary greatly between
compilers, its versions, and the standard library being used. This
patch makes the check for coroutine support more robust by adding a
declaration of a coroutine variable, instead of just including the
header. It also makes sure that the HAVE_COROUTINE and
CFG_CXXFLAGS_COROUTINES flags are always set together, and only when
coroutine support is detected.
2024-07-24 17:21:14 -04:00
Udaya Raj Subedi a2506a6f96 Fix monitor block sensitivity items (#4400) (#5294) 2024-07-24 07:18:57 -04:00
Bartłomiej Chmiel 20dba7464d Support--compiler-include headers in user-supplied cpp files (#5271)
Signed-off-by: Bartłomiej Chmiel <[email protected]>
2024-07-24 06:40:39 -04:00
Wilson Snyder cb5d03ff0b Fix WIDTHEXPAND on left shift of intuitive amount (#5284). 2024-07-24 06:39:27 -04:00
github action 2727c33219 Apply 'make format' 2024-07-24 10:07:59 +00:00
Wilson Snyder 0419ed0430 Fix initializing static array in dynamic arrays and queues (#5287). 2024-07-24 06:06:57 -04:00
Wilson Snyder 1e3c7a5496 Fix inline function ref port persistence 2024-07-23 18:47:04 -04:00
Wilson Snyder d2dfcbca53 Internals: Add log_changes for updating Changes file 2024-07-23 18:36:57 -04:00
Wilson Snyder e779934443 Commentary: Changes update 2024-07-22 17:22:37 -04:00
Arkadiusz Kozdra a3b255b054 Internal: Suppress new clang-tidy messages (#5293)
The two most useless warning classes are llvmlibc-* on virtually every
identifier use that it does not resolve to __llvm_libc:: namespace, and
altera-* ones that warn on virtually every loop statement that it could
be unrolled with a pragma.  No functional change.

Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-07-22 13:11:50 -04:00
Krzysztof Bieganski f5caa4b7dc Fix randomizing current object with rand class instance member (#5292)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-07-22 14:41:12 +02:00
Wilson Snyder 8f4490628f Commentary: Clarify some warning messages. 2024-07-20 17:50:14 -04:00
Wilson Snyder df566bdf4d Improve PINMISSING to show related port 2024-07-20 17:37:33 -04:00
Wilson Snyder 981d3ce782 Add suggestions on misspelled PLI functions. 2024-07-20 07:20:10 -04:00
Wilson Snyder b7345eb5d5 Tests: Add checkp macro. No test functionality change. 2024-07-20 06:51:50 -04:00
Krzysztof Bieganski 2bd2b9324f Fix inline constraints creating class random generator (#5280) 2024-07-19 13:03:48 -04:00
Arkadiusz Kozdra 298faa84ee Fix elaborating foreach loops (#5285) 2024-07-19 14:56:30 +02:00
Arkadiusz Kozdra 43377ed8b0 Add support for this.randomize with (#5282)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-07-19 09:14:56 +02:00
Krzysztof Bieganski b18037b7e7 Internals: Move non-visit methods to the proper place (#5279) 2024-07-18 08:57:39 -04:00
Yutetsu TAKATSUKASA 095b1ccb67 Fix incorrect result of width mismatch (#5186) (#5189) 2024-07-17 11:54:58 +02:00
Krzysztof Bieganski 2a30a87580 Fix randomization when used with inheritance (#5268)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-07-17 08:21:45 +02:00
Krzysztof Bieganski e11bc6beeb Internals: Refactor function argument traits (#5269)
No functional change intended.

Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-07-16 20:55:04 +02:00
Arkadiusz Kozdra 0a9b31bb30 Add warning on dist in constraints (#5264) 2024-07-15 21:01:33 -04:00
Krzysztof Bieganski 34e37d7bd0 Keep one member map for randomize method creation (#5263)
No functional change intended.

Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-07-15 16:42:41 +02:00
Yangyu Chen 164a7a7c5d Improve emitted code to use a reference for VlSelf (#5254) 2024-07-15 09:44:01 -04:00
Krzysztof Obłonczek 67ea819d82 Fix toggle coverage aggregation on same line (#5248)
Documentation states that minimum of all reported coverage of all signals in a line should be taken.
Previous logic would break if there were any signals with zero coverage followed by signals with
nonzero coverage - a minimum from those nonzero toggle count would be taken, disregarding zero
coverage of previous signals.

Internal-tag: [#62193]

Signed-off-by: Krzysztof Obłonczek <[email protected]>
2024-07-14 17:05:58 -04:00
Andrew Nolte 60f9e21d8c Fix --x-assign to be independent from +verilator+rand+reset (#5214) 2024-07-14 17:04:00 -04:00
Wilson Snyder dc037db1cd Internals: Make upcase clean. No functional change. 2024-07-14 15:28:00 -04:00
Wilson Snyder 0658af90f5 Fix classes/modules of case-similar names (#5109). 2024-07-14 13:57:16 -04:00
Wilson Snyder 131623de34 Internals: Favor s string literals. No functional change. 2024-07-14 11:39:45 -04:00
Wilson Snyder 74ae879c2f Internals: Remove duplicate filenameNonExt. No functional change. 2024-07-14 11:31:32 -04:00
Wilson Snyder 8c3b754bac Internals: Rename some filename functions. No functional change. 2024-07-14 09:34:54 -04:00
Wilson Snyder e080f5c0cb Fix tracing with --main-top-name - (#5261). 2024-07-14 07:35:26 -04:00
Wilson Snyder 2284cf595d Commentary: Changes update 2024-07-14 07:34:36 -04:00
Wilson Snyder b1cc0c54c1 Tests: Fail with test.pl-file-needs-have_solver()-call if forget have_solver() 2024-07-13 08:55:06 -04:00
Geza Lore 4cf017d7fe Tests: Skip t_randomize_method_constraints when no solver is installed (#5260) 2024-07-13 08:31:16 -04:00
Geza Lore 25f5db4b5f DFG: Allow inlining of variabels driven from forced vars (#5259)
Not sure why this was disabled before, but it seems legal to me to
change

'forced A' -> 'B' -> 'C'

into

'forced A' -> 'B',
'forced A' -> 'C'

Fixes #5249
2024-07-13 12:35:09 +01:00
Krzysztof Boroński 3cf9606ea9 Support inline constraints for class randomization methods (#5234)
Signed-off-by: Krzysztof Boronski <[email protected]>
2024-07-12 16:18:18 +02:00
Wilson Snyder 6882f8c55e Commentary: Surfer (#5253) 2024-07-11 18:33:35 -04:00
Krzysztof Bieganski 2696a9a5bd Fix unconstrained randomization of unpacked structs (#5252)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-07-11 16:43:56 +02:00
Krzysztof Bieganski abb46c9cb2 Refactor AstMemberSel creation with AstVar (#5251)
No functional change intended.

Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-07-11 16:42:58 +02:00
Wilson Snyder bbb223f217 Fix error on empty generate with -O0 (#5250). 2024-07-11 06:59:15 -04:00
Arkadiusz Kozdra 570e1bc35a Support conditional constraints (#5245) 2024-07-10 11:30:18 -04:00
11da07d3b9 Support $assertcontrol assertion_type (#5236)
Signed-off-by: Bartłomiej Chmiel <[email protected]>
Signed-off-by: Ryszard Rozak <[email protected]>
Co-authored-by: Ryszard Rozak <[email protected]>
Co-authored-by: Wilson Snyder <[email protected]>
2024-07-10 05:06:13 -04:00
Arkadiusz Kozdra 2cfec0ecc3 Support clocking blocks in virtual interfaces (#5235) 2024-07-09 18:31:58 -04:00
Wilson Snyder e3e7b3f2b5 Fix errors on using string in incorrect format (#5240). 2024-07-09 08:30:20 -04:00
Wilson Snyder fe0b210a0c Fix errors on using string in incorrect format (#5340). 2024-07-09 08:29:22 -04:00
Chris Bachhuber c383f4868f Commentary: Mention docker hub explicitly (#5241) 2024-07-09 06:59:43 -04:00
Wilson Snyder b66fdd7421 Fix unknown conversion on queues (#5220). 2024-07-08 10:19:51 -04:00
Wilson Snyder 83878325a7 Commentary: Update git issue templates. 2024-07-08 08:12:58 -04:00
github action 490bc63eb5 Apply 'make format' 2024-07-06 12:13:35 +00:00
Ryan Ziegler 947b6fd23f Add --emit-accessors (#5182) (#5227) 2024-07-06 13:12:53 +01:00
Wilson Snyder de44ca8df3 Fix top-level unpacked structure resets (#5221). 2024-07-05 17:22:26 -04:00
Wilson Snyder 3cee54dfdf Commentary: Changes update 2024-07-05 17:17:29 -04:00
Geza Lore dace2c0a9a Tests: Skip t_constraint_state when no solver is installed (#5224) 2024-07-04 11:42:53 +01:00
Liam Braun ca4858eb7f Fix concurrency for mailbox and semaphores (#5222) 2024-07-03 22:29:32 +01:00
Wilson SnyderandSeth Pellegrino a6d438d111 Fix mis-removing $value$plusargs calls (#5127) (#5137). [Seth Pellegrino]
Co-authored-by: Seth Pellegrino <[email protected]>
2024-07-02 18:46:58 -04:00
Bartłomiej Chmiel 955ed3f193 Fix splitting if statements with impure conditions (#5219) 2024-07-02 15:17:10 -04:00
Wilson Snyder 8bffb8c391 Fix table optimizing logic with side effect (#5137 prep) 2024-07-02 09:22:56 -04:00
Arkadiusz Kozdra 85356f464f State-dependent constraints (#5217)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-07-01 20:19:15 +02:00
Arkadiusz Kozdra 72993ec3dd Support cross-module clockvars access (#5184) 2024-06-30 15:19:02 -04:00
404allen404 d6a294b784 Commentary: Fix typo in for --trace-max-array and --trace-max-width options (#5205) 2024-06-27 21:25:21 -04:00
Bartłomiej Chmiel 864a852bca Add --compiler-include for additional C++ includes (#5139) (#5202) 2024-06-27 18:53:44 -04:00
Wilson Snyder b0992406aa Commentary: Changes update 2024-06-25 19:22:00 -04:00
Bartłomiej Chmiel 9e2c8aefc8 Add --pins-sc-uint-bool to force SystemC uint type (#5192) 2024-06-25 05:27:09 -04:00
Gus Smith 4c584c17e6 Add -std=gnu++20 (#5200) 2024-06-25 05:23:50 -04:00
Wilson Snyder 3315a6e431 Internals: Also cleanup gettes/setters in .cpp. No functional change intended. 2024-06-22 19:50:59 -04:00
github action ba0183131c Apply 'make format' 2024-06-22 22:58:42 +00:00
Ryan Ziegler e1580b9c3d Internals: Reorder class getters/setters (#5197). No functional change intended. 2024-06-22 18:57:54 -04:00
Tim Hutt aadd5ea509 Fix linking with pthreads on CMake (#5194) 2024-06-21 10:34:11 -04:00
Philip Axer 833df6d9ea Fix CMake installation missing verilated.mk (#5187) (#5188) 2024-06-19 08:07:17 -04:00
Wilson Snyder 607c19a67d Fix isPure to be superset of isOutputter.
This may cause some additional SIDEEFFECT warnings that previously were not shown.
2024-06-16 21:43:30 -04:00
Wilson Snyder d5cfe1a379 Fix fusing macro arguments to not ignore whitespace (#5061). 2024-06-15 09:21:21 -04:00
Wilson Snyder 6e557791c8 devel release 2024-06-15 08:49:57 -04:00
Wilson Snyder cd693ce02b Version bump 2024-06-15 08:43:45 -04:00
Wilson Snyder 2641bc98aa Update include/gtkwave from upstream 2024-06-15 08:14:43 -04:00
Wilson Snyder ad2862ce3f Fix DPI import of null C-string (#5179). 2024-06-14 22:50:54 -04:00
Bartłomiej Chmiel 4695967185 Fix signed types emitted in hierarchical Verilation (#5178)
Signed-off-by: Bartłomiej Chmiel <[email protected]>
2024-06-14 08:07:32 -04:00
Wilson Snyder f96e99542c Internals: Fix cppcheck warnings. No functional change. 2024-06-13 21:29:03 -04:00
Wilson Snyder 7de193c2e9 Commentary: Changes update 2024-06-13 18:04:57 -04:00
Arkadiusz Kozdra 442c9bc316 Support parsing and otherwise ignoring inline constraints (#5126) 2024-06-13 08:38:20 -04:00
Arkadiusz Kozdra 3203019408 Fix coroutines without awaits to have a co_return (#4208) (#5175)
After the V3Timing refactoring the V3SchedTiming phase could apparently
move away all awaits from a coroutine without adding a co_return
statement.

Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-06-12 15:13:52 -04:00
Geza Lore bc853e260b Support StructSel in unpacked array assignments (#5176) 2024-06-12 17:07:33 +01:00
github action d6e5703298 Apply 'make format' 2024-06-12 11:44:29 +00:00
Alex Solomatnikov a9e50327fd Fix hierarchical compilation with nested -F (#5114) (#5124) 2024-06-12 07:42:52 -04:00
Wilson Snyder 6f0a36318e Tests: Fix test stability (#5167 update). 2024-06-11 20:55:01 -04:00
Wilson Snyder 221fecad0b Commentary 2024-06-11 19:47:53 -04:00
Wilson Snyder fd1e4d9e45 Add assertion on reusing VerilatedContext (#5167). 2024-06-11 19:38:58 -04:00
Wilson Snyder 920ed5ca3d Internals: Avoid unordered_map/set. No functional change intended. 2024-06-11 18:52:09 -04:00
Arthur Rosa 2537431273 Fix table optimization when applied on real data type (#5172) (#5173) 2024-06-11 13:26:11 -04:00
Bartłomiej Chmiel 13114f2efe Fix SystemC BITS_PER_DIGIT in VL_ASSIGN_SBW (#5170)
The BITS_PER_DIGIT macro value differs between SystemC versions,
thus referencing it directly is required.
2024-06-10 20:45:49 -04:00
Arkadiusz Kozdra e9f59e44a5 Fix non-constant replication in concats (#5171)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-06-10 11:21:43 -04:00
Arkadiusz Kozdra d4c3e35f97 Support $psprintf system function (#4314) (#5169)
`$psprintf` is a non-standard system function present in some other
simulators, and has been rejected for standardization by IEEE because
of being basically the same as `$sformatf`.

To encourage users to fix their codebase, a warning is emitted by
default, but it gets otherwise interpreted as `$sformatf` as early as
during lexing.

Signed-off-by: Arkadiusz Kozdra <[email protected]>

* wording/formatting

Signed-off-by: Arkadiusz Kozdra <[email protected]>

---------

Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-06-10 08:38:26 -04:00
Wilson Snyder 02dd33b60e Commentary: Changes update 2024-06-09 17:10:53 -04:00
Geza Lore 2bc883f3b3 Extend out-of-range select (#5159) (#5164) 2024-06-09 17:05:14 -04:00
Geza Lore 29db25b70e Reset radix in width warnings (#5166) 2024-06-09 14:39:17 +01:00
Geza Lore d6bc0c712a Disable ASLR for more tests. (#5165)
These show spurious errors with some toolchains due to an address sanitizer bug.
2024-06-09 14:32:31 +01:00
github action 962efa3691 Apply 'make format' 2024-06-09 02:45:26 +00:00
Valentin Atepalikhin 4babba16d6 Support 2D dynamic array initialization (#4700) (#5122)
* Support 2D dynamic array initialization (#4700)
- new[] on sub arrays (as per original issue)
- Built-in methods for sub-arrays
- Initialization and literals assignmensts
- Dynamic array as an element for other arrays and queues
2024-06-08 22:44:45 -04:00
Wilson Snyder 5363d89870 Tests: Disable msbuild executable running (#5163) 2024-06-08 19:37:31 -04:00
Wilson Snyder 44acb08ea9 Tests: Commentary - enable msbuild debug 2024-06-08 19:36:50 -04:00
Yutetsu TAKATSUKASA 6584b4d426 Fix assertion failure in V3Gate (#5101) 2024-06-08 08:37:01 -04:00
Paul Bowen-Huggett 9ff06c1664 Fix 'experimental/coroutine' file not found on macOS (#5030) (#5031) (#5151)
libcxx has removed the experimental/coroutine include file in favor of
the C++20-standard coroutine include. If the latter is available we
use it otherwise falling back to the existing experimental version (in
which case we also disable the deprecated-experimental-coroutine warning).

(See also https://reviews.llvm.org/D108697.)
2024-06-08 08:33:50 -04:00
github action 1537c9badc Apply 'make format' 2024-06-08 03:05:01 +00:00
Wilson Snyder 708f875b31 Fix MSVC warnings. No functional change intended. 2024-06-07 22:52:56 -04:00
Kaleb Barrett 0d3cb86a44 Fix VerilatedVpiPutHolder class (#5156) 2024-06-07 22:25:33 -04:00
Wilson Snyder 5c2b9d55b2 Fix MSVC C4805 == type mismatch warning 2024-06-07 22:14:32 -04:00
Arkadiusz Kozdra 1dbf1be3e6 Support inout clocking items (#5160) 2024-06-07 08:30:58 -04:00
Wilson SnyderandDercury 3f886f7c61 Fix select value too wide (#5148) (#5153).
Co-authored-by: Dercury <[email protected]>
2024-06-07 08:27:03 -04:00
Wilson Snyder 7c9fa8647c Fix string to be more standard (#5082) (#5083). 2024-05-31 21:51:12 -04:00
Wilson Snyder dbf68a99e8 Tests: SHow expected values in t_typenames 2024-05-30 22:54:40 -04:00
Andrew NolteandAndrew Nolte 53c2e416f4 Tests: Extend t_typenames (#5083)
Co-authored-by: Andrew Nolte <[email protected]>
2024-05-30 22:32:14 -04:00
github action e834b5be2d Apply 'make format' 2024-05-29 20:56:45 +00:00
Kaleb Barrett bd7689f59a Fix overflow of string on VPI reads (#5145) (#5146) 2024-05-29 16:55:46 -04:00
Kaleb Barrett 3496eb80a5 Improve VerilatedVpiPutHolder storage requirements (#5144) 2024-05-29 08:39:08 -04:00
Ryszard Rozak 839c3bf444 Commentary: Fix docs of verilator_coverage (#5149)
Signed-off-by: Ryszard Rozak <[email protected]>
2024-05-29 08:11:35 -04:00
Geza Lore d4b3583307 Apply DFG regularization to cyclic graphs (#5142)
The Dfg2Ast conversion assumes the 'regularize' pass was run, but we
failed to run it on cyclic sub-graphs. Do so now.

Fixes #5130.
2024-05-26 12:01:30 +01:00
Wilson Snyder ee130cb20d Tests: Skip if no constraint solver 2024-05-23 22:25:14 -04:00
github action 552a146f9c Apply 'make format' 2024-05-22 11:54:22 +00:00
Pawel Jewstafjew 913679f261 Fix output C++ type error on change detect of I/O arrays (#5125) (#5131)
operand order reversed for AstCMethodHard "neq"
interface between C-style arrays and VlUnpacked
overloads added to VlUnpacked::neq(), VlUnpacked::assign()
VlUnpacked::operator=() added

Fixes  #5125
2024-05-22 12:53:28 +01:00
Ethan Sifferman d9078df650 Fix 4-state value support for $readmem (#5070) (#5078) 2024-05-21 17:27:32 -04:00
Wilson Snyder f84592af49 Fix x-valued parameters with --x-assign unique (#5129). 2024-05-21 08:07:57 -04:00
Wilson Snyder 5f85c89425 Commentary: Changes update 2024-05-18 17:48:52 -04:00
Wilson Snyder 94f789b677 Update issue template 2024-05-18 17:41:36 -04:00
Arkadiusz Kozdra 739be2f782 Support constrained randomization with external solvers (#4947) 2024-05-17 10:38:34 -04:00
Krzysztof Bieganski 25b9a16bc7 Fix references to ports in forks (#5123)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-05-17 07:38:36 -04:00
Arkadiusz Kozdra 9a8e68928d Internals: Move getenvStr to verilatedos. (#5118)
* Internals: Move getenvStr to verilatedos. No functional change intended.
* Fix POS34-C. Do not call putenv() with a pointer to an automatic variable as the argument.

Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-05-13 10:23:51 -04:00
Todd Strader 19cccd170e Fix vpiInertialDelay for memories (#5113) 2024-05-10 18:49:43 -04:00
Wilson Snyder d99c8f5d44 Fix redundant AstExtend breaks DFG (#5112) 2024-05-10 18:48:09 -04:00
Geza Lore cf111d2e1f Do not create aliases for forced port signals (#5105)
+ don't remove forced signals in V3Const and Dfg

Fixes #5062
2024-05-10 18:19:51 +01:00
Arkadiusz Kozdra 45eb5b8a5c Fix method calls parsing in constraints (#5110) 2024-05-10 06:37:19 -04:00
Yinan Xu ce5cad17a8 Add increasing of stack size when possible (#5071) (#5104) 2024-05-08 22:40:42 -04:00
Wilson Snyder ed01befc25 Fix tracing interface functions (#5108). 2024-05-08 22:23:53 -04:00
Wilson Snyder 69a2bfee68 Commentary: Changes update 2024-05-08 08:41:56 -04:00
Wilson Snyder 1cc37ad6ce Internals: Add missing VL_DO_DANGLING. No functional change intended. 2024-05-08 08:36:24 -04:00
2a9f29912c Add parameterless assert control system tasks (#5010)
Signed-off-by: Bartłomiej Chmiel <[email protected]>
Co-authored-by: Ryszard Rozak <[email protected]>
Co-authored-by: Wilson Snyder <[email protected]>
Co-authored-by: Arkadiusz Kozdra <[email protected]>
2024-05-08 08:31:34 -04:00
Wilson Snyder 298e0f24d1 Add traceCapable indication to model header (#5053). 2024-05-03 20:18:06 -04:00
Geza Lore 80b08b71aa Support NBAs to arrays inside loops (#5092)
For NBAs that might execute a dynamic number of times in a single
evaluation (specifically: those that assign to array elements inside
loops), we introduce a new run-time VlNBACommitQueue data-structure
(currently a vector), which stores all pending updates and the necessary
info to reconstruct the LHS reference of the AstAssignDly at run-time.

All variables needing a commit queue has their corresponding unique
commit queue.

All NBAs to a variable that requires a commit queue go through the
commit queue. This is necessary to preserve update order in sequential
code, e.g.:
 a[7] <= 10
 for (int i = 1 ; i < 10; ++i) a[i] <= i;
 a[2] <= 10
needs to end with array elements 1..9 being 1, 10, 3, 4, 5, 6, 7, 8, 9.

This enables supporting common forms of NBAs to arrays on the left hand
side of <= in non-suspendable/non-fork code. (Suspendable/fork
implementation is unclear to me so I left it unchanged, see #5084).

Any NBA that does not need a commit queue (i.e.: those that were
supported before), use the same scheme as before, and this patch should
have no effect on the generated code for those NBAs.
2024-05-03 07:45:49 -04:00
Vito Gamberini 64ba569f0d Fix MacOS missing <type_traits> header (#5096) (#5097) 2024-05-02 21:38:36 -04:00
Wilson Snyder 3cb4033c97 Fix width extension of unpacked array select (#5095). 2024-05-02 20:41:39 -04:00
github action 6509bac59e Apply 'make format' 2024-05-02 23:03:39 +00:00
Wilson Snyder ec45a77d93 Fix macro expansion in strings per 1800-2023 (#5094). 2024-05-02 19:02:28 -04:00
Wilson Snyder 8044833c74 Fix $typename on array.min and others (#5049). 2024-05-01 20:07:13 -04:00
Geza Lore 3f89bdcfac Defer conversion of set flag based AssignDlys (#5091)
No functional change. Postpone the conversion of all AstAssignDlys that
use the 'VdlySet' scheme for array LHSs until after the complete
traversal of the netlist. The next patch takes advantage of this by
using some extra information also gathered through the traversal to
change the conversion.

AstAssignDlys inside suspendable or fork are not deferred and are
processed identical to the previous version.

There are some TODOs in this patch that are fixed in the next patch.

Output code perturbed due to variable ordering.

MULTIDRIVEN message ordering perturbed due to processing order change.
2024-05-02 00:24:00 +01:00
Todd Strader c99364b81a Support vpiInertialDelay (#5087) 2024-05-01 18:56:50 -04:00
Geza Lore d841a791e6 Refactor V3Delayed to enable algorithmic extension (#5090)
No functional change.

This patch is just cleanup with some non-functional changes to enable
the next patch. Most importantly createDlyOnSet, which implements NBAs
for arrays, has a new streamlined implementation that does the same
thing. Some output code is perturbed due to statement/local variable
insertion order.

Also renamed Vdlyvfoo to VdlyFoo for easier readability of the generated
code.
2024-05-01 23:06:25 +01:00
Geza Lore b5b937e2f2 Fix missed optimization in V3Delayed (#5089)
Checking the wrong node meant we never actually pushed constant
bit-select indices into the delayed update, as was the intention, but
always generated a temporary instead.
2024-05-01 16:22:56 +01:00
Todd Strader 4a41f69293 Internals: Remove C-style cast in VPI_HANDLE (#5088) 2024-05-01 10:11:44 -04:00
Wilson Snyder 8fd038f88e Add --localize-max-size option and optimization (#5072). 2024-04-30 19:46:54 -04:00
Wilson Snyder 4982f63da2 Update coverage for last commit 2024-04-30 19:34:41 -04:00
Wilson Snyder 71bc60fb91 Add error on zero width select (#5028). 2024-04-30 18:38:37 -04:00
Wilson Snyder 0da7ecf753 Commentary: Changes update 2024-04-30 07:37:06 -04:00
Andrea Calabrese 25ca1af8b3 Internals: Fix missing const (#4899) 2024-04-29 22:57:56 -04:00
Wilson Snyder 5d54fa8e6f Fix missing parameters with comma to be errors (#4979) (#5012). 2024-04-29 22:41:16 -04:00
Christopher Taylor e8c5b9faad Fix missing flex include path variable (#4970) (#4971) 2024-04-29 22:01:09 -04:00
Aleksander Kiryk 8e0301c287 Fix bound queue printing (#5032) 2024-04-29 21:52:06 -04:00
Iztok Jeras 3f625fc359 Tests: Add unsupported streaming LHS tests (#4302) 2024-04-29 21:35:19 -04:00
Geza Lore 72b96d5069 tests: disable ASLR for t_trace_ub_misaligned_address (#5075)
This works around an address-sanitizer bug hit with some GCC versions
2024-04-29 15:38:00 +01:00
Bartłomiej Chmiel d1b45b8d32 Fix attempted to destroy locked thread pool error (#5040) 2024-04-29 07:59:24 -04:00
Wilson Snyder 5601056ed0 Tests: Check for bad event methods 2024-04-28 13:10:25 -04:00
Wilson Snyder 8ed269c77f Make 'disable isn't underneath a begin' into UNSUPPORTED error (#4699). 2024-04-27 21:30:40 -04:00
Geza Lore 27b7e70218 Fix DFG assertion with SystemC (#5076)
Fixes #5050
2024-04-27 13:41:10 +01:00
Geza Lore 97680656d3 Remove unknown '--' form cmake -E (#5073)
After #5063, with cmake 3.22.1, I get test failures, saying:
    cmake -E env: unknown option '--'
The '--' is necessary so removing.
2024-04-27 11:09:59 +01:00
Michael Bikovitsky 4202ec2ab2 Fix CMake builds to export VERILATOR_ROOT (#5063) 2024-04-26 19:29:10 -04:00
Wilson Snyder 4f3a816fb0 Fix false ASSIGNIN on functions with explicit port map (#5069). 2024-04-26 19:26:21 -04:00
Todd Strader 25fd8ef5c0 Add VPI eval needed tracking (#5065) 2024-04-25 09:07:31 -04:00
Gökçe Aydos a9664b8d16 Remove $(info) which cannot be silenced by -MAKEFLAGS '--quiet' (#5059) 2024-04-20 08:48:16 -05:00
Wilson Snyder 26a5729514 Add CITATION.cff (#5057) (#5058). 2024-04-19 20:33:11 -04:00
Arkadiusz Kozdra 5b839699ac Support empty queue as dynarray default value (#5055)
Signed-off-by: Arkadiusz Kozdra <[email protected]>
2024-04-18 11:53:23 -05:00
Wilson Snyder 1315aa31ed Commentary 2024-04-13 08:18:45 -04:00
Wilson Snyder 5d8da6b4ac Fix width extension on delays (#5045). 2024-04-13 08:16:59 -04:00
Wilson Snyder aac2563a07 Commentary: Changes update 2024-04-13 08:03:57 -04:00
Wilson Snyder 8e44487354 Tests: update style 2024-04-13 08:02:25 -04:00
Wilson Snyder 1012c054e6 Fix $system with string argument (#5042). 2024-04-11 17:31:14 -04:00
Paul Wright a8b5738b44 Support __en/__out signals on top level inout ports (#4812) (#4856) 2024-04-11 09:02:58 -04:00
Wilson Snyder 72845167e6 Commenary: Fix README badge paragraph 2024-04-10 17:02:07 -04:00
Krzysztof Bieganski 7ca2d6470a Fix consecutive zero-delays (#5038)
Signed-off-by: Krzysztof Bieganski <[email protected]>
2024-04-05 16:48:47 -04:00
Wilson Snyder 33e999e01a devel release 2024-04-05 06:23:30 -04:00
6483 changed files with 197364 additions and 195438 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
Checks: '*,-hicpp*,-android-cloexec-fopen,-cert-dcl50-cpp,-cert-env33-c,-cert-err34-c,-cert-err58-cpp,-clang-analyzer-core.UndefinedBinaryOperatorResult,-clang-analyzer-security*,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-no-malloc,-cppcoreguidelines-owning-memory,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-constant-array-index,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-cppcoreguidelines-pro-type-const-cast,-cppcoreguidelines-pro-type-reinterpret-cast,-cppcoreguidelines-pro-type-static-cast-downcast,-cppcoreguidelines-pro-type-union-access,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-special-member-functions,-fuchsia-*,-google-default-arguments,-google-readability-todo,-google-runtime-references,-llvm-header-guard,-llvm-include-order,-misc-string-integer-assignment,-misc-string-literal-with-embedded-nul,-modernize-use-auto,-modernize-use-trailing-return-type,-readability-braces-around-statements,-readability-container-size-empty,-readability-delete-null-pointer,-readability-else-after-return,-readability-implicit-bool-conversion,-readability-named-parameter,-readability-static-accessed-through-instance' Checks: '*,-hicpp*,-android-cloexec-fopen,-cert-dcl50-cpp,-cert-env33-c,-cert-err34-c,-cert-err58-cpp,-clang-analyzer-core.UndefinedBinaryOperatorResult,-clang-analyzer-security*,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-no-malloc,-cppcoreguidelines-owning-memory,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-constant-array-index,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-cppcoreguidelines-pro-type-const-cast,-cppcoreguidelines-pro-type-reinterpret-cast,-cppcoreguidelines-pro-type-static-cast-downcast,-cppcoreguidelines-pro-type-union-access,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-special-member-functions,-fuchsia-*,-google-default-arguments,-google-readability-todo,-google-runtime-references,-llvm-header-guard,-llvm-include-order,-misc-string-integer-assignment,-misc-string-literal-with-embedded-nul,-modernize-use-auto,-modernize-use-trailing-return-type,-readability-braces-around-statements,-readability-container-size-empty,-readability-delete-null-pointer,-readability-else-after-return,-readability-implicit-bool-conversion,-readability-named-parameter,-readability-static-accessed-through-instance,-llvmlibc-*,-altera-*'
WarningsAsErrors: '' WarningsAsErrors: ''
HeaderFilterRegex: '' HeaderFilterRegex: ''
FormatStyle: none FormatStyle: none
+4 -4
View File
@@ -1,6 +1,6 @@
--- ---
exclude_paths: exclude_paths:
- '.github/**' - ".github/**"
- 'ci/build_verilator.sh' - "ci/build_verilator.sh"
- 'include/vltstd/**' - "include/vltstd/**"
- 'nodist/fastcov.py' - "nodist/fastcov.py"
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"name": "Verilator Build Environment", "name": "Verilator Build Environment",
"build": { "build": {
"dockerfile": "../ci/docker/buildenv/Dockerfile" "dockerfile": "../ci/docker/buildenv/Dockerfile"
} }
+3 -1
View File
@@ -9,7 +9,7 @@ assignees: ''
Thanks for taking the time to report this. Thanks for taking the time to report this.
Can you attach an example that shows the issue? (Must be openly licensed, ideally in test_regress format.) Can you attach an example that shows the issue? (Must be openly licensed, completely self-contaned so can directly run what you provide. Ideally use test_regress format, see https://veripool.org/guide/latest/contributing.html?highlight=test_regress#reporting-bugs
What 'verilator' command line do we use to run your example? What 'verilator' command line do we use to run your example?
@@ -18,3 +18,5 @@ What 'verilator --version' are you using? Did you try it with the git master ve
What OS and distribution are you using? What OS and distribution are you using?
May we assist you in trying to fix this in Verilator yourself? May we assist you in trying to fix this in Verilator yourself?
(Please avoid attaching screenshots that show text - you can convert images to text using e.g. https://ocr.space)
+2
View File
@@ -11,6 +11,8 @@ Thanks for taking the time to report this.
What would you like added/supported? What would you like added/supported?
What 'verilator --version' are you using? Did you try it with the git master version?
Can you attach an example that runs on other simulators? (Must be openly licensed, ideally in test_regress format.) Can you attach an example that runs on other simulators? (Must be openly licensed, ideally in test_regress format.)
May we assist you in trying to fix this in Verilator yourself? May we assist you in trying to fix this in Verilator yourself?
+2
View File
@@ -8,3 +8,5 @@ assignees: ''
--- ---
How may we help - what is your question? How may we help - what is your question?
(If reporting a bug or requesting a feature please use one of the other issue templates.)
+84 -84
View File
@@ -1,3 +1,4 @@
---
# DESCRIPTION: Github actions config # DESCRIPTION: Github actions config
# This name is key to badges in README.rst, so we use the name build # This name is key to badges in README.rst, so we use the name build
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 # SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
@@ -9,7 +10,7 @@ on:
pull_request: pull_request:
workflow_dispatch: workflow_dispatch:
schedule: schedule:
- cron: '0 0 * * 0' # weekly - cron: '0 0 * * 0' # weekly
env: env:
CI_OS_NAME: linux CI_OS_NAME: linux
@@ -35,14 +36,14 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-22.04, ubuntu-20.04] os: [ubuntu-24.04, ubuntu-22.04, ubuntu-20.04]
compiler: compiler:
- { cc: clang, cxx: clang++ } - {cc: clang, cxx: clang++}
- { cc: gcc, cxx: g++ } - {cc: gcc, cxx: g++}
include: include:
# Build GCC 10 on ubuntu-20.04 # Build GCC 10 on ubuntu-20.04
- os: ubuntu-20.04 - os: ubuntu-20.04
compiler: { cc: gcc-10, cxx: g++-10 } compiler: {cc: gcc-10, cxx: g++-10}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
name: Build | ${{ matrix.os }} | ${{ matrix.compiler.cc }} name: Build | ${{ matrix.os }} | ${{ matrix.compiler.cc }}
env: env:
@@ -51,41 +52,40 @@ jobs:
CC: ${{ matrix.compiler.cc }} CC: ${{ matrix.compiler.cc }}
CXX: ${{ matrix.compiler.cxx }} CXX: ${{ matrix.compiler.cxx }}
CACHE_BASE_KEY: build-${{ matrix.os }}-${{ matrix.compiler.cc }} CACHE_BASE_KEY: build-${{ matrix.os }}-${{ matrix.compiler.cc }}
CCACHE_MAXSIZE: 1000M # Per build matrix entry (* 5 = 5000M in total) CCACHE_MAXSIZE: 1000M # Per build matrix entry (* 5 = 5000M in total)
VERILATOR_ARCHIVE: verilator-${{ github.sha }}-${{ matrix.os }}-${{ matrix.compiler.cc }}.tar.gz VERILATOR_ARCHIVE: verilator-${{ github.sha }}-${{ matrix.os }}-${{ matrix.compiler.cc }}.tar.gz
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
path: repo path: repo
- name: Cache $CCACHE_DIR - name: Cache $CCACHE_DIR
uses: actions/cache@v4 uses: actions/cache@v4
env: env:
CACHE_KEY: ${{ env.CACHE_BASE_KEY }}-ccache CACHE_KEY: ${{ env.CACHE_BASE_KEY }}-ccache
with: with:
path: ${{ env.CCACHE_DIR }} path: ${{ env.CCACHE_DIR }}
key: ${{ env.CACHE_KEY }}-${{ github.sha }} key: ${{ env.CACHE_KEY }}-${{ github.sha }}
restore-keys: | restore-keys: |
${{ env.CACHE_KEY }}- ${{ env.CACHE_KEY }}-
- name: Install packages for build - name: Install packages for build
run: ./ci/ci-install.bash run: ./ci/ci-install.bash
- name: Build - name: Build
run: ./ci/ci-script.bash run: ./ci/ci-script.bash
- name: Tar up repository - name: Tar up repository
working-directory: ${{ github.workspace }} working-directory: ${{ github.workspace }}
run: tar --posix -c -z -f ${{ env.VERILATOR_ARCHIVE }} repo run: tar --posix -c -z -f ${{ env.VERILATOR_ARCHIVE }} repo
- name: Upload tar archive
uses: actions/upload-artifact@v4
with:
path: ${{ github.workspace }}/${{ env.VERILATOR_ARCHIVE }}
name: ${{ env.VERILATOR_ARCHIVE }}
- name: Upload tar archive
uses: actions/upload-artifact@v4
with:
path: ${{ github.workspace }}/${{ env.VERILATOR_ARCHIVE }}
name: ${{ env.VERILATOR_ARCHIVE }}
test: test:
needs: build needs: build
@@ -94,25 +94,25 @@ jobs:
matrix: matrix:
os: [ubuntu-22.04, ubuntu-20.04] os: [ubuntu-22.04, ubuntu-20.04]
compiler: compiler:
- { cc: clang, cxx: clang++ } - {cc: clang, cxx: clang++}
- { cc: gcc, cxx: g++ } - {cc: gcc, cxx: g++}
reloc: [0] reloc: [0]
suite: [dist-vlt-0, dist-vlt-1, dist-vlt-2, dist-vlt-3, vltmt-0, vltmt-1] suite: [dist-vlt-0, dist-vlt-1, dist-vlt-2, dist-vlt-3, vltmt-0, vltmt-1]
include: include:
# Test with GCC 10 on ubuntu-20.04 # Test with GCC 10 on ubuntu-20.04, also test relocation
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, suite: dist-vlt-0} - {os: ubuntu-20.04, compiler: {cc: gcc-10, cxx: g++-10}, reloc: 1, suite: dist-vlt-0}
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, suite: dist-vlt-1} - {os: ubuntu-20.04, compiler: {cc: gcc-10, cxx: g++-10}, reloc: 1, suite: dist-vlt-1}
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, suite: dist-vlt-2} - {os: ubuntu-20.04, compiler: {cc: gcc-10, cxx: g++-10}, reloc: 1, suite: dist-vlt-2}
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, suite: dist-vlt-3} - {os: ubuntu-20.04, compiler: {cc: gcc-10, cxx: g++-10}, reloc: 1, suite: dist-vlt-3}
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, suite: vltmt-0} - {os: ubuntu-20.04, compiler: {cc: gcc-10, cxx: g++-10}, reloc: 1, suite: vltmt-0}
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, suite: vltmt-1} - {os: ubuntu-20.04, compiler: {cc: gcc-10, cxx: g++-10}, reloc: 1, suite: vltmt-1}
# Test relocated installation - on most common platform only # Ubuntu 24.04 only on GCC; not passing on clang yet
- {os: ubuntu-22.04, compiler: { cc: gcc, cxx: g++ }, reloc: 1, suite: dist-vlt-0} - {os: ubuntu-24.04, compiler: {cc: gcc, cxx: g++}, suite: dist-vlt-0}
- {os: ubuntu-22.04, compiler: { cc: gcc, cxx: g++ }, reloc: 1, suite: dist-vlt-1} - {os: ubuntu-24.04, compiler: {cc: gcc, cxx: g++}, suite: dist-vlt-1}
- {os: ubuntu-22.04, compiler: { cc: gcc, cxx: g++ }, reloc: 1, suite: dist-vlt-2} - {os: ubuntu-24.04, compiler: {cc: gcc, cxx: g++}, suite: dist-vlt-2}
- {os: ubuntu-22.04, compiler: { cc: gcc, cxx: g++ }, reloc: 1, suite: dist-vlt-3} - {os: ubuntu-24.04, compiler: {cc: gcc, cxx: g++}, suite: dist-vlt-3}
- {os: ubuntu-22.04, compiler: { cc: gcc, cxx: g++ }, reloc: 1, suite: vltmt-0} - {os: ubuntu-24.04, compiler: {cc: gcc, cxx: g++}, suite: vltmt-0}
- {os: ubuntu-22.04, compiler: { cc: gcc, cxx: g++ }, reloc: 1, suite: vltmt-1} - {os: ubuntu-24.04, compiler: {cc: gcc, cxx: g++}, suite: vltmt-1}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
name: Test | ${{ matrix.os }} | ${{ matrix.compiler.cc }} | ${{ matrix.reloc && 'reloc | ' || '' }} ${{ matrix.suite }} name: Test | ${{ matrix.os }} | ${{ matrix.compiler.cc }} | ${{ matrix.reloc && 'reloc | ' || '' }} ${{ matrix.suite }}
env: env:
@@ -122,37 +122,37 @@ jobs:
CC: ${{ matrix.compiler.cc }} CC: ${{ matrix.compiler.cc }}
CXX: ${{ matrix.compiler.cxx }} CXX: ${{ matrix.compiler.cxx }}
CACHE_BASE_KEY: test-${{ matrix.os }}-${{ matrix.compiler.cc }}-${{ matrix.reloc }}-${{ matrix.suite }} CACHE_BASE_KEY: test-${{ matrix.os }}-${{ matrix.compiler.cc }}-${{ matrix.reloc }}-${{ matrix.suite }}
CCACHE_MAXSIZE: 100M # Per build per suite (* 5 * 5 = 2500M in total) CCACHE_MAXSIZE: 100M # Per build per suite (* 5 * 5 = 2500M in total)
VERILATOR_ARCHIVE: verilator-${{ github.sha }}-${{ matrix.os }}-${{ matrix.compiler.cc }}.tar.gz VERILATOR_ARCHIVE: verilator-${{ github.sha }}-${{ matrix.os }}-${{ matrix.compiler.cc }}.tar.gz
steps: steps:
- name: Download tar archive - name: Download tar archive
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
name: ${{ env.VERILATOR_ARCHIVE }} name: ${{ env.VERILATOR_ARCHIVE }}
path: ${{ github.workspace }} path: ${{ github.workspace }}
- name: Unpack tar archive - name: Unpack tar archive
working-directory: ${{ github.workspace }} working-directory: ${{ github.workspace }}
run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }} run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }}
- name: Cache $CCACHE_DIR - name: Cache $CCACHE_DIR
uses: actions/cache@v4 uses: actions/cache@v4
env: env:
CACHE_KEY: ${{ env.CACHE_BASE_KEY }}-ccache2 CACHE_KEY: ${{ env.CACHE_BASE_KEY }}-ccache2
with: with:
path: ${{ env.CCACHE_DIR }} path: ${{ env.CCACHE_DIR }}
key: ${{ env.CACHE_KEY }}-${{ github.sha }} key: ${{ env.CACHE_KEY }}-${{ github.sha }}
restore-keys: | restore-keys: |
${{ env.CACHE_KEY }}- ${{ env.CACHE_KEY }}-
- name: Install test dependencies - name: Install test dependencies
run: ./ci/ci-install.bash run: ./ci/ci-install.bash
- name: Test - name: Test
env: env:
TESTS: ${{ matrix.suite }} TESTS: ${{ matrix.suite }}
run: ./ci/ci-script.bash run: ./ci/ci-script.bash
lint-py: lint-py:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
@@ -161,21 +161,21 @@ jobs:
CI_BUILD_STAGE_NAME: build CI_BUILD_STAGE_NAME: build
CI_RUNS_ON: ubuntu-22.04 CI_RUNS_ON: ubuntu-22.04
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
path: repo path: repo
- name: Install packages for build - name: Install packages for build
run: ./ci/ci-install.bash run: ./ci/ci-install.bash
# We use specific version numbers, otherwise a Python package # We use specific version numbers, otherwise a Python package
# update may add a warning and break our build # update may add a warning and break our build
- name: Install packages for lint - name: Install packages for lint
run: sudo pip3 install pylint==3.0.2 ruff==0.1.3 clang sphinx sphinx_rtd_theme sphinxcontrib-spelling breathe ruff run: sudo pip3 install pylint==3.0.2 ruff==0.1.3 clang sphinx sphinx_rtd_theme sphinxcontrib-spelling breathe ruff
- name: Configure - name: Configure
run: autoconf && ./configure --enable-longtests --enable-ccwarn run: autoconf && ./configure --enable-longtests --enable-ccwarn
- name: Lint - name: Lint
run: make -k lint-py run: make -k lint-py
+4 -5
View File
@@ -1,17 +1,16 @@
---
# DESCRIPTION: Github actions config # DESCRIPTION: Github actions config
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 # SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
#
name: Contributor Agreement name: Contributor Agreement
on: on:
push: push:
pull_request: pull_request:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
Test: Test:
name: "'docs/CONTRIBUTORS' was signed" name: "'docs/CONTRIBUTORS' was signed"
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- run: test_regress/t/t_dist_contributors.pl - run: test_regress/t/t_dist_contributors.py
+42 -48
View File
@@ -1,3 +1,4 @@
---
# DESCRIPTION: Github actions config # DESCRIPTION: Github actions config
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 # SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
@@ -6,7 +7,7 @@ name: coverage
on: on:
workflow_dispatch: workflow_dispatch:
schedule: schedule:
- cron: '0 0 * * 0' # weekly - cron: '0 0 * * 0' # weekly
env: env:
CI_OS_NAME: linux CI_OS_NAME: linux
@@ -21,7 +22,6 @@ defaults:
jobs: jobs:
Build: Build:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
env: env:
@@ -29,49 +29,36 @@ jobs:
CI_RUNS_ON: ubuntu-22.04 CI_RUNS_ON: ubuntu-22.04
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
path: repo path: repo
- name: Install packages for build - name: Install packages for build
run: ./ci/ci-install.bash run: ./ci/ci-install.bash
- name: Build - name: Build
run: ./ci/ci-script.bash run: ./ci/ci-script.bash
- name: Tar up repository - name: Tar up repository
working-directory: ${{ github.workspace }} working-directory: ${{ github.workspace }}
run: tar --posix -c -z -f ${{ env.VERILATOR_ARCHIVE }} repo run: tar --posix -c -z -f ${{ env.VERILATOR_ARCHIVE }} repo
- name: Upload tar archive
uses: actions/upload-artifact@v4
with:
path: ${{ github.workspace }}/${{ env.VERILATOR_ARCHIVE }}
name: ${{ env.VERILATOR_ARCHIVE }}
- name: Upload tar archive
uses: actions/upload-artifact@v4
with:
path: ${{ github.workspace }}/${{ env.VERILATOR_ARCHIVE }}
name: ${{ env.VERILATOR_ARCHIVE }}
Test: Test:
needs: Build needs: Build
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
test: test: [vlt-, vltmt-]
- vlt- num: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- vltmt-
num:
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
include: include:
- { test: dist, num: '' } - {test: dist, num: ''}
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
name: test-${{ matrix.test }}${{ matrix.num }} name: test-${{ matrix.test }}${{ matrix.num }}
env: env:
@@ -79,20 +66,27 @@ jobs:
CI_RUNS_ON: ubuntu-22.04 CI_RUNS_ON: ubuntu-22.04
steps: steps:
- name: Download tar archive - name: Download tar archive
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
name: ${{ env.VERILATOR_ARCHIVE }} name: ${{ env.VERILATOR_ARCHIVE }}
path: ${{ github.workspace }} path: ${{ github.workspace }}
- name: Unpack tar archive - name: Unpack tar archive
working-directory: ${{ github.workspace }} working-directory: ${{ github.workspace }}
run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }} run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }}
- name: Install test dependencies - name: Install test dependencies
run: ./ci/ci-install.bash run: ./ci/ci-install.bash
- name: Test - name: Test
env: env:
TESTS: coverage-${{ matrix.test }}${{ matrix.num }} TESTS: coverage-${{ matrix.test }}${{ matrix.num }}
run: ./ci/ci-script.bash run: ./ci/ci-script.bash
- name: Upload coverage data to Codecov
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
run: |
find . -name '*.gcno' -exec rm {} \;
./ci/codecov -v upload-process -Z --sha ${{ github.sha }} -f nodist/obj_dir/coverage/app_total.info
+43 -42
View File
@@ -1,3 +1,4 @@
---
# Build and push verilator docker image when tags are pushed to the repository. # Build and push verilator docker image when tags are pushed to the repository.
# The following variable(s) must be configured in the github repository: # The following variable(s) must be configured in the github repository:
# DOCKER_HUB_NAMESPACE: docker hub namespace. # DOCKER_HUB_NAMESPACE: docker hub namespace.
@@ -8,7 +9,7 @@ name: Build Verilator Container
on: on:
push: push:
tags: [ 'v*' ] tags: ['v*']
workflow_dispatch: workflow_dispatch:
inputs: inputs:
manual_tag: manual_tag:
@@ -34,52 +35,52 @@ jobs:
# - "ci/docker/buildenv:verilator-buildenv" # - "ci/docker/buildenv:verilator-buildenv"
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Extract context variables - name: Extract context variables
run: | run: |
echo "${{ matrix.contexts }}" | sed -r 's/(.*):.*/build_context=\1/' >> "$GITHUB_ENV" echo "${{ matrix.contexts }}" | sed -r 's/(.*):.*/build_context=\1/' >> "$GITHUB_ENV"
echo "${{ matrix.contexts }}" | sed -r 's/.*:(.*)/image_name=\1/' >> "$GITHUB_ENV" echo "${{ matrix.contexts }}" | sed -r 's/.*:(.*)/image_name=\1/' >> "$GITHUB_ENV"
echo "git_tag=${GITHUB_REF#refs/*/}" >> "$GITHUB_ENV" echo "git_tag=${GITHUB_REF#refs/*/}" >> "$GITHUB_ENV"
- name: Use manual tag - name: Use manual tag
if: ${{ inputs.manual_tag }} if: ${{ inputs.manual_tag }}
run: | run: |
echo "git_tag=${{ inputs.manual_tag }}" >> "$GITHUB_ENV" echo "git_tag=${{ inputs.manual_tag }}" >> "$GITHUB_ENV"
- name: Docker meta - name: Docker meta
id: docker_meta id: docker_meta
uses: docker/metadata-action@v4 uses: docker/metadata-action@v4
with: with:
images: | images: |
${{ vars.DOCKER_HUB_NAMESPACE }}/${{ env.image_name }} ${{ vars.DOCKER_HUB_NAMESPACE }}/${{ env.image_name }}
tags: | tags: |
type=match,pattern=(v.*),group=1,enable=${{ startsWith(github.ref, 'refs/tags/v') }} type=match,pattern=(v.*),group=1,enable=${{ startsWith(github.ref, 'refs/tags/v') }}
type=raw,value=${{ inputs.manual_tag }},enable=${{ inputs.manual_tag != '' }} type=raw,value=${{ inputs.manual_tag }},enable=${{ inputs.manual_tag != '' }}
type=raw,value=latest,enable=${{ inputs.add_latest_tag == true }} type=raw,value=latest,enable=${{ inputs.add_latest_tag == true }}
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v2 uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2 uses: docker/setup-buildx-action@v2
with: with:
buildkitd-flags: --debug buildkitd-flags: --debug
- name: Login to Docker Hub - name: Login to Docker Hub
uses: docker/login-action@v2 uses: docker/login-action@v2
with: with:
username: ${{ secrets.DOCKER_HUB_USER }} username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Build and Push to Docker - name: Build and Push to Docker
uses: docker/build-push-action@v4 uses: docker/build-push-action@v4
if: startsWith(github.ref, 'refs/tags/v') if: startsWith(github.ref, 'refs/tags/v')
with: with:
context: ${{ env.build_context }} context: ${{ env.build_context }}
build-args: SOURCE_COMMIT=${{ env.git_tag }} build-args: SOURCE_COMMIT=${{ env.git_tag }}
platforms: linux/arm64,linux/amd64 platforms: linux/arm64,linux/amd64
push: ${{ !env.ACT && startsWith(github.ref, 'refs/tags/v') }} push: ${{ !env.ACT && startsWith(github.ref, 'refs/tags/v') }}
tags: ${{ steps.docker_meta.outputs.tags }} tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }} labels: ${{ steps.docker_meta.outputs.labels }}
+2 -3
View File
@@ -1,13 +1,12 @@
---
# DESCRIPTION: Github actions config # DESCRIPTION: Github actions config
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 # SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
#
name: format name: format
on: on:
push: push:
pull_request_target: pull_request_target:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
format: format:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
+25 -30
View File
@@ -1,55 +1,50 @@
---
# DESCRIPTION: Github actions config # DESCRIPTION: Github actions config
# This name is key to badges in README.rst, so we use the name build # This name is key to badges in README.rst, so we use the name build
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 # SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
#
name: msbuild name: msbuild
on: on:
push: push:
pull_request: pull_request:
workflow_dispatch: workflow_dispatch:
schedule: schedule:
- cron: '0 0 * * 0' # weekly - cron: 0 0 * * 0 # weekly
env: env:
CI_OS_NAME: win CI_OS_NAME: win
CI_COMMIT: ${{ github.sha }} CI_COMMIT: ${{ github.sha }}
CCACHE_COMPRESS: 1 CCACHE_COMPRESS: 1
CCACHE_DIR: ${{ github.workspace }}/.ccache CCACHE_DIR: ${{ github.workspace }}/.ccache
CCACHE_LIMIT_MULTIPLE: 0.95 CCACHE_LIMIT_MULTIPLE: 0.95
defaults: defaults:
run: run:
working-directory: repo working-directory: repo
concurrency: concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }} group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }}
cancel-in-progress: true cancel-in-progress: true
jobs: jobs:
windows:
windows:
name: run on windows name: run on windows
runs-on: windows-latest runs-on: windows-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
path: repo path: repo
- name: Cache $CCACHE_DIR - name: Cache $CCACHE_DIR
uses: actions/cache@v4 uses: actions/cache@v4
with: with:
path: ${{ env.CCACHE_DIR }} path: ${{ env.CCACHE_DIR }}
key: msbuild-msvc-cmake key: msbuild-msvc-cmake
- name: compile - name: compile
env: env:
WIN_FLEX_BISON: ${{ github.workspace }}/.ccache WIN_FLEX_BISON: ${{ github.workspace }}/.ccache
run: ./ci/ci-win-compile.ps1 run: ./ci/ci-win-compile.ps1
- name: test build - name: test build
run: ./ci/ci-win-test.ps1 run: ./ci/ci-win-test.ps1
- name: Zip up repository - name: Zip up repository
run: Compress-Archive -LiteralPath install -DestinationPath verilator.zip run: Compress-Archive -LiteralPath install -DestinationPath verilator.zip
- name: Upload zip archive - name: Upload zip archive
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
path: ${{ github.workspace }}/repo/verilator.zip path: ${{ github.workspace }}/repo/verilator.zip
name: verilator-win.zip name: verilator-win.zip
+8 -4
View File
@@ -29,14 +29,15 @@ dddrun*
doxygen-doc doxygen-doc
gdbrun* gdbrun*
gmon.out gmon.out
ncverilog.history
internals.txt internals.txt
ncverilog.history
nohup.out
verilator-config-version.cmake
verilator-config.cmake
verilator.pc
verilator.txt verilator.txt
verilator_bin* verilator_bin*
verilator_coverage_bin* verilator_coverage_bin*
verilator.pc
verilator-config.cmake
verilator-config-version.cmake
**/__pycache__/* **/__pycache__/*
**/_build/* **/_build/*
**/obj_dir/* **/obj_dir/*
@@ -46,3 +47,6 @@ verilator-config-version.cmake
/test_regress/snapshot/ /test_regress/snapshot/
xmverilog.* xmverilog.*
xrun.history xrun.history
# Normal CMake build directory
/build
+8
View File
@@ -0,0 +1,8 @@
---
- id: verilator
name: verilator-lint
description: Runs verilator Docker image to lint (System) Verilog designs
args: [--lint-only]
language: docker_image
entry: verilator/verilator:latest
types_or: [verilog, system-verilog]
+4
View File
@@ -0,0 +1,4 @@
[style]
based_on_style = pep8
column_limit = 99
#split_before_arithmetic_operator=True
+27
View File
@@ -0,0 +1,27 @@
# See https://citation-file-format.github.io/
cff-version: 1.2.0
title: Verilator
message: >-
If you use this software, please cite it using the
metadata from this file.
type: software
authors:
- given-names: Wilson
family-names: Snyder
email: [email protected]
affiliation: Veripool
- given-names: Paul
family-names: Wasson
- given-names: Duane
family-names: Galbi
- name: 'et al'
repository-code: 'https://github.com/verilator/verilator'
url: 'https://verilator.org'
abstract: >-
The Verilator package converts Verilog and SystemVerilog hardware
description language (HDL) designs into a fast C++ or SystemC model
that, after compiling, can be executed. Verilator is not a
traditional simulator but a compiler.
license:
- LGPL-3.0-only
- Artistic-2.0
+81 -35
View File
@@ -4,7 +4,7 @@
# #
#***************************************************************************** #*****************************************************************************
# #
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you # Copyright 2003-2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU # can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License # Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0. # Version 2.0.
@@ -14,36 +14,49 @@
cmake_minimum_required(VERSION 3.15) cmake_minimum_required(VERSION 3.15)
cmake_policy(SET CMP0091 NEW) # Use MSVC_RUNTIME_LIBRARY to select the runtime cmake_policy(SET CMP0091 NEW) # Use MSVC_RUNTIME_LIBRARY to select the runtime
project(Verilator project(
VERSION 5.024 Verilator
VERSION 5.034
HOMEPAGE_URL https://verilator.org HOMEPAGE_URL https://verilator.org
LANGUAGES CXX LANGUAGES CXX
) )
option(DEBUG_AND_RELEASE_AND_COVERAGE # Set default build type to Release if not specified
"Builds both the debug and release binaries, overriding CMAKE_BUILD_TYPE. Not supported under MSBuild.") if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE)
endif()
option(
DEBUG_AND_RELEASE_AND_COVERAGE
"Builds both the debug and release binaries, overriding CMAKE_BUILD_TYPE. Not supported under MSBuild."
)
find_package(Python3 COMPONENTS Interpreter) find_package(Python3 COMPONENTS Interpreter)
set(PYTHON3 Python3::Interpreter) set(PYTHON3 ${Python3_EXECUTABLE})
set(CMAKE_INSTALL_DATADIR ${CMAKE_INSTALL_PREFIX}) # See also CMake built-in; CMAKE_INSTALL_PREFIX is applied by the install command.
set(CMAKE_INSTALL_DATADIR .)
include(GNUInstallDirs) include(GNUInstallDirs)
include(CMakePackageConfigHelpers) include(CMakePackageConfigHelpers)
include(CheckStructHasMember) include(CheckStructHasMember)
include(ExternalProject) include(ExternalProject)
include(FindThreads)
if (NOT WIN32) if(NOT WIN32)
message(WARNING "CMake support on Linux/OSX is experimental.") message(WARNING "CMake support on Linux/OSX is experimental.")
endif() endif()
if (WIN32) if(WIN32)
if (DEFINED ENV{WIN_FLEX_BISON}) if(DEFINED ENV{WIN_FLEX_BISON})
set(WIN_FLEX_BISON "$ENV{WIN_FLEX_BISON}") set(WIN_FLEX_BISON "$ENV{WIN_FLEX_BISON}")
endif() endif()
if (EXISTS ${WIN_FLEX_BISON}) if(EXISTS ${WIN_FLEX_BISON})
list(APPEND CMAKE_PREFIX_PATH ${WIN_FLEX_BISON}) list(APPEND CMAKE_PREFIX_PATH ${WIN_FLEX_BISON})
endif() endif()
if (NOT WIN_FLEX_BISON) if(NOT WIN_FLEX_BISON)
message(FATAL_ERROR "Please install https://github.com/lexxmark/winflexbison and set WIN_FLEX_BISON environment variable. Please use install cmake target after a successful build.") message(
FATAL_ERROR
"Please install https://github.com/lexxmark/winflexbison and set WIN_FLEX_BISON environment variable. Please use install cmake target after a successful build."
)
endif() endif()
set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD 20)
endif() endif()
@@ -51,20 +64,25 @@ endif()
set(OBJCACHE "" CACHE STRING "Path for ccache, auto-detected if empty") set(OBJCACHE "" CACHE STRING "Path for ccache, auto-detected if empty")
option(OBJCACHE_ENABLED "Compile Verilator with ccache" ON) option(OBJCACHE_ENABLED "Compile Verilator with ccache" ON)
if (OBJCACHE_ENABLED) if(OBJCACHE_ENABLED)
if (OBJCACHE STREQUAL "") if(OBJCACHE STREQUAL "")
find_program(OBJCACHE_PATH ccache) find_program(OBJCACHE_PATH ccache)
if (OBJCACHE_PATH STREQUAL "OBJCACHE_PATH-NOTFOUND") if(OBJCACHE_PATH STREQUAL "OBJCACHE_PATH-NOTFOUND")
set(OBJCACHE_PATH "") set(OBJCACHE_PATH "")
endif() endif()
else() else()
set(OBJCACHE_PATH "${OBJCACHE}") set(OBJCACHE_PATH "${OBJCACHE}")
endif() endif()
if (NOT OBJCACHE_PATH STREQUAL "") if(NOT OBJCACHE_PATH STREQUAL "")
execute_process(COMMAND "${OBJCACHE_PATH}" --version execute_process(
OUTPUT_VARIABLE objcache_version) COMMAND "${OBJCACHE_PATH}" --version
OUTPUT_VARIABLE objcache_version
)
string(REGEX MATCH "[^\n\r]+" objcache_version "${objcache_version}") string(REGEX MATCH "[^\n\r]+" objcache_version "${objcache_version}")
message(STATUS "Found ccache: ${OBJCACHE_PATH} (\"${objcache_version}\")") message(
STATUS
"Found ccache: ${OBJCACHE_PATH} (\"${objcache_version}\")"
)
set(CMAKE_CXX_COMPILER_LAUNCHER "${OBJCACHE_PATH}") set(CMAKE_CXX_COMPILER_LAUNCHER "${OBJCACHE_PATH}")
endif() endif()
endif() endif()
@@ -75,8 +93,8 @@ find_package(FLEX)
# Build # Build
#set_property(GLOBAL PROPERTY JOB_POOLS one_job=1) #set_property(GLOBAL PROPERTY JOB_POOLS one_job=1)
if (DEBUG_AND_RELEASE_AND_COVERAGE) if(DEBUG_AND_RELEASE_AND_COVERAGE)
if (CMAKE_GENERATOR MATCHES "^Visual Studio ") if(CMAKE_GENERATOR MATCHES "^Visual Studio ")
error("%Error: The DEBUG_AND_RELEASE_AND_COVERAGE option is not supported in MSBuild-based builds.") error("%Error: The DEBUG_AND_RELEASE_AND_COVERAGE option is not supported in MSBuild-based builds.")
endif() endif()
set(saved_build_type ${CMAKE_BUILD_TYPE}) set(saved_build_type ${CMAKE_BUILD_TYPE})
@@ -95,44 +113,72 @@ endif()
set(PACKAGE_NAME ${PROJECT_NAME}) set(PACKAGE_NAME ${PROJECT_NAME})
set(PACKAGE_VERSION ${PROJECT_VERSION}) set(PACKAGE_VERSION ${PROJECT_VERSION})
set(CXX ${CMAKE_CXX_COMPILER})
set(AR ${CMAKE_AR})
configure_file(include/verilated_config.h.in include/verilated_config.h @ONLY) configure_file(include/verilated_config.h.in include/verilated_config.h @ONLY)
configure_file(include/verilated.mk.in include/verilated.mk @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/verilated_config.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include) install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/include/verilated_config.h
configure_package_config_file(verilator-config.cmake.in verilator-config.cmake DESTINATION include
INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX} )
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/include/verilated.mk
DESTINATION include
) )
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/verilator-config.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}) configure_package_config_file(
verilator-config.cmake.in
configure_package_config_file(verilator-config-version.cmake.in verilator-config-version.cmake verilator-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX} INSTALL_DESTINATION .
) )
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/verilator-config-version.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}) install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/verilator-config.cmake
DESTINATION .
)
foreach (program configure_package_config_file(
verilator-config-version.cmake.in
verilator-config-version.cmake
INSTALL_DESTINATION .
)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/verilator-config-version.cmake
DESTINATION .
)
foreach(
program
verilator verilator
verilator_gantt verilator_gantt
verilator_ccache_report verilator_ccache_report
verilator_difftree verilator_difftree
verilator_profcfunc verilator_profcfunc
verilator_includer
) )
install(PROGRAMS bin/${program} TYPE BIN) install(PROGRAMS bin/${program} TYPE BIN)
endforeach() endforeach()
install(DIRECTORY examples TYPE DATA FILES_MATCHING install(
DIRECTORY examples
TYPE DATA
FILES_MATCHING
PATTERN "examples/*/*.[chv]*" PATTERN "examples/*/*.[chv]*"
PATTERN "examples/*/Makefile*" PATTERN "examples/*/Makefile*"
PATTERN "examples/*/CMakeLists.txt" PATTERN "examples/*/CMakeLists.txt"
) )
install(DIRECTORY include TYPE DATA FILES_MATCHING install(
DIRECTORY include
TYPE DATA
FILES_MATCHING
PATTERN "include/verilated_config.h" PATTERN "include/verilated_config.h"
PATTERN "include/verilated.mk"
PATTERN "include/*.[chv]" PATTERN "include/*.[chv]"
PATTERN "include/*.cpp" PATTERN "include/*.cpp"
PATTERN "include/*.vlt"
PATTERN "include/*.sv" PATTERN "include/*.sv"
PATTERN "include/gtkwave/*.[chv]*" PATTERN "include/gtkwave/*.[chv]*"
PATTERN "include/vltstd/*.[chv]*" PATTERN "include/vltstd/*.[chv]*"
+373 -4
View File
@@ -8,6 +8,372 @@ The changes in each Verilator version are described below. The
contributors that suggested a given feature are shown in []. Thanks! contributors that suggested a given feature are shown in []. Thanks!
Verilator 5.034 2025-02-24
==========================
**Important:**
* This is likely the last version to support Ubuntu 20.04, which is at end-of-life.
* Add expression coverage (#4677) (#5719). [Todd Strader]
**Other:**
* Add `COVERIGN` warning, as a more specific UNSUPPORTED error.
* Add `--public-ignore` to ignore public metacomments (#5716). [Andrew Nolte]
* Add `--preproc-token-limit` (#5768). [Krzysztof Bieganski, Antmicro Ltd.]
* Add lint error on importing package within a class (#5634) (#5679). [Nick Brereton]
* Add `--preproc-resolve` for modules in preprocessor output (#5789). [Kamil Rakoczy, Antmicro Ltd.]
* Support multidimensional array access via VPI (#2812) (#5573). [Krzysztof Starecki]
* Support nested classes (#4178) (#5778). [Kamil Rakoczy, Antmicro Ltd.]
* Support VPI array accessors (#5612). [Moubarak Jeje]
* Support unpacked structure constrained randomization (#5657) (#5759). [Yilou Wang]
* Support generated classes (#5665). [Shou-Li Hsu]
* Support constraints on associative array user-defined keys (#5671) (#5729). [Yilou Wang]
* Support `+incdir` with multiple directories.
* Support integer atom type ports in `--hierarchical` (#5748). [Bartłomiej Chmiel, Antmicro Ltd.]
* Support constrained random for arrays in structs (#5765) (#5802). [Yilou Wang]
* Support selects on arbitrary string expressions (#5773). [Krzysztof Bieganski, Antmicro Ltd.]
* Support side effects of form 'variable[index_function()]++'.
* Improve hierarchical DPI wrapper scheduling performance (#2583) (#5734). [Bartłomiej Chmiel, Antmicro Ltd.]
* Improve VPI write errors (#5712). [Andrew Nolte]
* Improve `resetall support (#5728) (#5730). [Ethan Sifferman]
* Optimize labels as final `if` block statements (#5744).
* Optimize empty function definition bodies (#5750).
* Optimize splitting trigger computation and dump (#5798). [Geza Lore]
* Fix error message when call task as a function (#3089). [Matthew Ballance]
* Fix force VPI public signal visibility (#5225). [Frédéric Requin]
* Fix VPI iteration over hierarchy (#5314) (#5731). [Natan Kreimer]
* Fix constrained random for > 64-bit associative arrays (#5670) (#5682). [Yilou Wang]
* Fix mis-optimizing away `$urandom` (#5703). [Parker Schless]
* Fix packages with `--public-depth 1` (#5708). [Andrew Nolte]
* Fix V3Simulate constant reuse (#5709). [Geza Lore]
* Fix man pages what-is section (#5710). [Ahmed El-Mahmoudy]
* Fix pattern assignment to real inside struct (#5713).
* Fix %p format output for real inside struct (#5713).
* Fix segfault when only enum value referenced in package (#5714). [Dan Katz]
* Fix `BLKSEQ` on suspendable processes (#5722). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix vpiDefName issues with non-inlined scopes and dpi conflicts (#5732). [Andrew Nolte]
* Fix inlined expression with assignment under LHS of NBA (#5736) (#5740). [Geza Lore]
* Fix duplicate-named class variable equivalence (#5737).
* Fix `-j` ignored after `-f` (#5749). [Luca Colagrande]
* Fix handling forced assigns in V3Life (#5757). [Bartłomiej Chmiel, Antmicro Ltd.]
* Fix VFileContent reference count (#5769) (#5771). [Dave Sargeant]
* Fix ignoring joins in stringify in preprocessor (#5777). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix unpacked split_var (#5782) (#5785). [Yutetsu TAKATSUKASA]
* Fix time import error on time parameters (#5786). [Luca Colagrande]
* Fix dpi context functions (#5788). [Ryszard Rozak, Antmicro Ltd.]
* Fix `$monitor` with dotted references (#5794). [Ahmed Elzeftawi]
* Fix parsing input wire with default and range (#5800). [RJ Cunningham]
* Fix matching language extension options including dots.
Verilator 5.032 2025-01-01
==========================
**Minor:**
* Support queue's assignment `push_back/push_front('{})` (#5585) (#5586). [Yilou Wang]
* Support basic constrained random for multi-dimensional dynamic array and queue (#5591). [Yilou Wang]
* Support vpiDefName (#3906) (#5572). [Krzysztof Starecki]
* Support parameter names in pattern initialization (#5593) (#5596). [Greg Davill]
* Support randomize size constraints with restrictions (#5582 partial) (#5611). [Ryszard Rozak, Antmicro Ltd.]
* Support associative array basic constrained randomization (#5658) (#5670). [Yilou Wang]
* Support `default disable iff` and `$inferred_disable` (#4016). [Srinivasan Venkataramanan]
* Support `extern constraint` and `pure constraint`.
* Add `--no-std-waiver` and default reading of standard lint waivers file (#5607).
* Add `--no-std-package` as subset-alias of `--no-std` (#5607).
* Add `lint_off --contents` in configuration files (#5606).
* Add `--waiver-multiline` for context-sensitive `--waiver-output` (#5608).
* Add `--fno-inline-funcs` to disable function inlining.
* Add `--fno-slice` to disable array assignment slicing (#5644).
* Add error on illegal enum base type (#3010). [Iztok Jeras]
* Add error on `wait` with missing `.triggered` (#4457).
* Add error when improperly storing to parameter (#5147). [Gökçe Aydos]
* Add error on illegal `--prefix` etc. values (#5507). [Fabian Keßler]
* Add error on `--savable --timing` (#5690). [Narcis Rodas]
* Add coverage point hierarchy to coverage reports (#5575) (#5576). [Andrew Nolte]
* Add warning on global constraints (#5625). [Ryszard Rozak, Antmicro Ltd.]
* Add default CMAKE_BUILD_TYPE (#5691) (#5692). [Anthony Moore]
* Add error on `solve before` or soft constraints of `randc` variable.
* Improve concatenation performance (#5598) (#5599) (#5602). [Geza Lore]
* Improve optimization of duplicate wide expressions (#5637). [Bartłomiej Chmiel, Antmicro Ltd.]
* Fix dotted reference in delay value (#2410).
* Fix `function fork...join_none` regression with unknown type (#4449).
* Fix public_module requiring a wire to become public (#4916). [Andrew Nolte]
* Fix --hierarchical on projects with dot-f dependency lists (#5199) (#5669). [Bartłomiej Chmiel, Antmicro Ltd.]
* Fix can't locate scope error in interface task delayed assignment (#5462) (#5568). [Zhou Shen]
* Fix BLKANDNBLK for for VARXREFs (#5569). [Todd Strader]
* Fix VPI error instead of fatal for vpi_get_value() on large signals (#5571). [Todd Strader]
* Fix --output-groups leftover files issue (#5574). [Todd Strader]
* Fix slow unsized number parsing (#5577). [Geza Lore]
* Fix negative assignment pattern keys (#5580). [Iztok Jeras]
* Fix duplicate scope identifiers decoding (#5584). [Bartłomiej Chmiel, Antmicro Ltd.]
* Fix `rand` dynamic arrays with null handles (#5594). [Ryszard Rozak, Antmicro Ltd.]
* Fix NBAs to unpacked arrays of unpacked structs (#5603). [Geza Lore]
* Fix array of struct member overwrites on member update (#5605) (#5618) (#5628). [sumpster]
* Fix interface and struct pattern collision (#5639) (#5640). [Todd Strader]
* Fix mis-aliasing of instances with mailbox parameter types (#5632 partial).
* Fix error on duplicated declaration of gen block (#5663). [Ryszard Rozak, Antmicro Ltd.]
* Fix wildcard equality and inside operators for non-fourstate expressions (#5673). [Ryszard Rozak, Antmicro Ltd.]
* Fix `randomize..with` of parameterized classes (#5676). [Ryszard Rozak, Antmicro Ltd.]
* Fix interface bracketed array parameter access (#5677) (#5678). [Todd Strader]
* Fix width extension of operands of `inside` operator (#5685). [Ryszard Rozak, Antmicro Ltd.]
* Fix VPI + SYMRSVDWORD intersection (#5686). [Todd Strader]
* Fix verilator_gantt for hierarchically Verilated models (#5700). [Bartłomiej Chmiel, Antmicro Ltd.]
Verilator 5.030 2024-10-27
==========================
**Major:**
* Add `-output-groups` to build with concatenated .cpp files (#5257). [Mariusz Glebocki]
* Self-tests have been converted to Python, run `{test_name}.py` instead of `{test_name}.pl`.
**Minor:**
* Change .vlt config files to be read before .v files (#5185). [David Moberg]
* Change to use maximum for cover point aggregation (#5402). [Andrew Nolte]
* Change `--main` and `--binary` to use a TOP hierarchy name of "" (#5482).
* Change install of public executables into bindir instead of pkgdatadir (#5140) (#5544). [Geza Lore]
* Support IEEE-compliant intra-assign delays (#3711) (#5441). [Krzysztof Bieganski, Antmicro Ltd.]
* Support `wor`, `trior`, `wand`, `triand` (#5386) (#5496). [Zhou Shen]
* Support unconstrained randomization for unions (#5395) (#5396). [Yilou Wang]
* Support basic constrained queue randomization (#5413). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support packed/unpacked and dynamic array unconstrained randomization (#5414) (#5415). [Yilou Wang]
* Support appending to queue via `[]` (#5421). [Krzysztof Bieganski, Antmicro Ltd.]
* Support named event locals (#5422). [Krzysztof Bieganski, Antmicro Ltd.]
* Support basic `dist` constraints (#5431). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support unpacked array constrained randomization (#5437) (#5489). [Yilou Wang]
* Support inside array constraints (#5448). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support DPI imports and exports with double underscores (#5481).
* Support ccache when compiling Verilated files with cmake.
* Support `local` and `protected` on `typedef` (#5460).
* Support unconstrained randomization for associative array and queue (#5515). [Yilou Wang]
* Support `rand` dynamic arrays of objects (#5557) (#5564). [Ryszard Rozak, Antmicro Ltd.]
* Add error on misused genvar (#408). [Alex Solomatnikov]
* Add error on instances without parenthesis.
* Add Docker pre-commit hook (#5238) (#5452). [Chris Bachhuber]
* Add partial coverage symbol and branch data in lcov info files (#5388). [Andrew Nolte]
* Add method to check if there are VPI callbacks of the given type (#5399). [Kaleb Barrett]
* Remove warning on unsized numbers exceeding 32-bits.
* Improve Verilation thread pool (#5161). [Bartłomiej Chmiel, Antmicro Ltd.]
* Improve performance of V3VariableOrder with parallelism (#5406). [Bartłomiej Chmiel, Antmicro Ltd.]
* Improve parser error handling (#5493). [Arkadiusz Kozdra, Antmicro Ltd.]
* Improve process trigger performance (#5483). [Geza Lore]
* Fix suppression of WIDTH* warnings when immediately under a size cast (#3417).
* Fix `$fatal` to not be affected by `+verilator+error+limit` (#5135). [Gökçe Aydos]
* Fix equivalence checking when replacing type parameters (#5213) (#5255). [Han Qi]
* Fix display with multiple string formats (#5311). [Luiza de Melo]
* Fix performance of V3Trace when many activity blocks (#5372). [Deniz Güzel]
* Fix REALCVT warning on integral timescale conversions (#5378). [Liam Braun]
* Fix multidimensional function return value selects (#5382). [Gökçe Aydos]
* Fix internal error in out-of-range select (#5393) (#5443). [Geza Lore]
* Fix dot fallback finding wrong symbols (#5394). [Arkadiusz Kozdra, Antmicro Ltd.]
* Fix infinite recursion due to recursive functions/tasks (#5398). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix V3Randomize compile error on old GCC (#5403) (#5417). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix extra events in traces (#5405).
* Fix empty `foreach` in `if` in constraints (#5408). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix queue `[$-i]` select as reference argument (#5411). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix `pre`/`post_randomize` on `randomize() with` (#5412). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix capturing params in `randomize() with` (#5416) (#5418). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix `sformatf` internal error on initial automatics (#5423). [Todd Strader]
* Fix clearing trigger of events with no sensitivity trees (#5426). [Arkadiusz Kozdra, Antmicro Ltd.]
* Fix driving clocking block in reactive region (#5430). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix associative array next/prev/first/last mis-propagating constants (#5435). [Ethan Sifferman]
* Fix randomize treated as std::randomize in classes (#5436). [Arkadiusz Kozdra, Antmicro Ltd.]
* Fix `foreach` colliding index names (#5444). [Arkadiusz Kozdra, Antmicro Ltd.]
* Fix fault on defparam with UNSUPPORTED ignored (#5450). [Luiza de Melo]
* Fix class reference with pin that is a class reference (#5454).
* Fix not reporting class reference with extra parameters (#5467).
* Fix user-type parameter overlap (#5469). [Todd Strader]
* Fix tracing when name() is empty (#5470). [Sam Shahrestani]
* Fix timing mode not exiting on empty events (#5472).
* Fix coverage counts missing due to table optimization (#5473) (#5474). [Vito Gamberini]
* Fix `--binary` with .cpp PLI filenames under relative directory paths.
* Fix extra dot in coverage point hierarchy when using name()=''.
* Fix short-circuiting with associative array access (#5484). [Ethan Sifferman]
* Fix short-circuiting on method calls (#5486). [Ethan Sifferman]
* Fix exponential concatenate performance (#5488). [Arkadiusz Kozdra, Antmicro Ltd.]
* Fix V3Table trying to generate 'x' bits in the lookup table. (#5491). [Geza Lore]
* Fix randomize with foreach constraints (#5492). [Arkadiusz Kozdra, Antmicro Ltd.]
* Fix explicit CMAKE_INSTALL_PREFIX usages (#5500). [Fabian Keßler]
* Fix configure inserting absolute paths for Python and Perl (#5504) (#5505). [Nathan Graybeal]
* Fix pattern initialization with typedef key (#5512). [Eugene Feinberg]
* Fix `-j` option without argument in hierarchical Verilation (#5514). [Ryszard Rozak, Antmicro Ltd.]
* Fix `foreach` with 2-D queues and dynamic arrays (#5525) (#5529). [Yilou Wang]
* Fix struct array assignment (#5455) (#5537). [Yilou Wang]
* Fix copy constructor of classes that use std::process (#5528). [Ryszard Rozak, Antmicro Ltd.]
* Fix foreach on associative array (#5530). [Yilou Wang]
* Fix multi-range indices assignment (#5534) (#5547). [Yilou Wang]
* Fix static function wrappers (#5536). [Ryszard Rozak, Antmicro Ltd.]
* Fix assignments of concatenation to queues and dynamic arrays (#5540). [Ryszard Rozak, Antmicro Ltd.]
* Fix container reduction methods (#5542). [Krzysztof Boroński]
* Fix complex user type problem with `--x-assign` (#5543). [Todd Strader]
* Fix long module names crashing string handling (#5546). [Filip Badáň]
* Fix array trace splitting (#5549). [Todd Strader]
* Fix queue element access (#5551). [Ryszard Rozak, Antmicro Ltd.]
* Fix struct literal on pattern assignment (#5552) (#5559). [Todd Strader]
* Fix build on gcc when using the Spack wrapper (#5555). [Eric Müller]
* Fix enum name method (#5563). [Todd Strader]
* Fix `$countbits` in assert with non-tristates (#5566). [Shou-Li Hsu]
* Fix missing VlProcess handle in coroutines with splits (#5623) (#5650). [Bartłomiej Chmiel, Antmicro Ltd.]
* Fix imported array assignment literals (#5642) (#5648). [Todd Strader]
* Fix foreach mixed array (#5655) (#5656). [Yilou Wang]
Verilator 5.028 2024-08-21
==========================
**Minor:**
* Support state-dependent constraints (#5217). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support cross-module clocking variable access (#5184). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support inline constraints for class randomization methods (#5234). [Krzysztof Boroński]
* Support clocking blocks in virtual interfaces (#5235). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support `$assertcontrol` assertion_type (#5236). [Bartłomiej Chmiel, Antmicro Ltd.]
* Support conditional constraints (#5245). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support`--compiler-include` headers in user-supplied cpp files (#5271). [Bartłomiej Chmiel, Antmicro Ltd.]
* Support `rand_mode` (#5273). [Krzysztof Bieganski, Antmicro Ltd.]
* Support `this.randomize with` (#5282). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support foreach constraints (#5302). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support `parameter type` in hierarchical blocks (#5309) (#5333). [Bartłomiej Chmiel, Antmicro Ltd.]
* Support assertcontrol directive type (#5310). [Bartłomiej Chmiel, Antmicro Ltd.]
* Support inline random variable control (#5317). [Krzysztof Bieganski, Antmicro Ltd.]
* Support streaming operator on arrays and wide data (#5326). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support streams to/from arrays of wide data (#5334). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support `constraint_mode` (#5338). [Krzysztof Bieganski, Antmicro Ltd.]
* Support constraining AstSel (#5344). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support default value on module input (#5358) (#5373). [Drew Ranck]
* Add `--compiler-include` for additional C++ includes (#5139) (#5202). [Bartłomiej Chmiel, Antmicro Ltd.]
* Add `--emit-accessors` (#5182) (#5227). [Ryan Ziegler]
* Add suggestions on misspelled PLI functions.
* Add warning on dist in constraints (#5264). [Arkadiusz Kozdra, Antmicro Ltd.]
* Add more `rand_mode` unsupported errors (#5329). [Krzysztof Bieganski, Antmicro Ltd.]
* Add parsing but otherwise ignore std::randomize (#5354). [Arkadiusz Kozdra, Antmicro Ltd.]
* Add Verilated cc define when `--timing` used (#5383). [Kaleb Barrett]
* Improve emitted code to use a reference for VlSelf (#5254). [Yangyu Chen]
* Fix monitor block sensitivity items (#4400) (#5294). [Udaya Raj Subedi]
* Fix fusing macro arguments to not ignore whitespace (#5061). [Tudor Timi]
* Fix optimized-out sensitivity trees with `--timing` (#5080) (#5349). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix classes/modules of case-similar names (#5109). [Arkadiusz Kozdra]
* Fix mis-removing $value$plusargs calls (#5127) (#5137). [Seth Pellegrino]
* Fix incorrect result of width mismatch (#5186) (#5189). [Yutetsu TAKATSUKASA]
* Fix compiler coroutine check (#5190) (#5300). [Ricardo Barbedo]
* Fix shortened module names when searching for files (#5196) (#5246). [Tim Hutt]
* Fix `--x-assign` to be independent from `+verilator+rand+reset` (#5214). [Andrew Nolte]
* Fix splitting if statements with impure conditions (#5219). [Bartłomiej Chmiel, Antmicro Ltd.]
* Fix unknown conversion on queues (#5220). [Alex Solomatnikov]
* Fix top-level unpacked structure resets (#5221).
* Fix concurrency for mailbox and semaphores (#5222). [Liam Braun]
* Fix forks capturing non-input ports in tasks (#5237) (#5343). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix toggle coverage aggregation on same line (#5248). [Krzysztof Obłonczek]
* Fix error on empty generate with -O0 (#5250).
* Fix unconstrained randomization of unpacked structs (#5252). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix inlining of variables driven from forced vars (#5259). [Geza Lore]
* Fix tracing with `--main-top-name -` (#5261). [Ethan Sifferman]
* Fix randomization when used with inheritance (#5268). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix inline constraints creating class random generator (#5280). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix WIDTHEXPAND on left shift of intuitive amount (#5284). [Greg Taylor]
* Fix elaborating foreach loops (#5285). [Arkadiusz Kozdra, Antmicro Ltd.]
* Fix initializing static array in dynamic arrays and queues (#5287). [Baruch Sterin]
* Fix static variable initializers in procedures (#5296). [Bartłomiej Chmiel, Antmicro Ltd.]
* Fix randomizing current object with `rand` class instance member (#5292). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix handling of rand fields not referenced in constraints (#5305). [Ryszard Rozak, Antmicro Ltd.]
* Fix Python3 path discovery in make flows to avoid mixing system and user python interpreters (#5307) [Markus Krause]
* Fix make flows to pass PYTHON3 (like PERL) (#5307) (#5308). [Markus Krause]
* Fix assert on wide expression (#5319) (#5324). [Varun Koyyalagunta]
* Fix output clock variable overwriting signal (#5320) (#5347). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix stringify in nested preprocessor macros (#5323). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix $sformat with array arguments (#5330). [Abe Jordan]
* Fix -Wunused-but-set-variable clang warning (#5331). [Bartłomiej Chmiel, Antmicro Ltd.]
* Fix purity of functions with AstJumpBlock or AstStmtExpr (#5332). [Ryszard Rozak, Antmicro Ltd.]
* Fix compilation error on unreachable disable fork / wait fork (#5339). [Arkadiusz Kozdra, Antmicro Ltd.]
* Fix missing type coercion in 'inside {array}' (#5340). [Arkadiusz Kozdra, Antmicro Ltd.]
* Fix +: and -: unpacked array slicing when array has nonzero low index (#5345) (#5387). [James Bailey]
* Fix tracing_{on,off} in the presence of non-inlined modules (#5346). [Geza Lore]
* Fix NBAs in suspendables (#5348). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix lint_off on Errors (#5351) (#5363). [Ethan Sifferman]
* Fix cache config file resolution performance (#5369). [Geza Lore]
* Fix capturing fields from superclass in `randomize() with` (#5389). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix virtual interface null checks (#5391). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix ==? and !=? with X values.
* Fix CPU time being zero.
* Fix inline function ref port persistence.
Verilator 5.026 2024-06-15
==========================
**Major:**
* Support constrained randomization with external solvers (#4947). [Arkadiusz Kozdra, Antmicro Ltd.]
**Minor:**
* Support `$psprintf` system function (#4314) (#5169). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support 2D dynamic array initialization (#4700) (#5122). [Valentin Atepalikhin]
* Support __en/__out signals on top level inout ports (#4812) (#4856). [Paul Wright]
* Support empty queue as dynarray default value (#5055). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support vpiInertialDelay (#5087). [Todd Strader]
* Support NBAs to arrays inside loops (#5092). [Geza Lore]
* Support parsing and otherwise ignoring inline constraints (#5126). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support `inout` clocking items (#5160). [Arkadiusz Kozdra, Antmicro Ltd.]
* Support StructSel in unpacked array assignments (#5176). [Geza Lore]
* Add error on zero width select (#5028).
* Add CITATION.cff (#5057) (#5058). [Gijs Burghoorn]
* Add VPI eval needed tracking (#5065). [Todd Strader]
* Add `--localize-max-size` option and optimization (#5072).
* Add parameterless assert control system tasks (#5010). [Bartłomiej Chmiel]
* Add traceCapable indication to model header (#5053). [Vito Gamberini]
* Add increasing of stack size when possible (#5071) (#5104). [Yinan Xu]
* Add assertion on reusing VerilatedContext (#5167).
* Add `--pins-sc-uint-bool` to force SystemC uint type (#5192). [Bartłomiej Chmiel, Antmicro Ltd.]
* Improve DFG regularization in cyclic graphs (#5142). [Geza Lore]
* Improve VerilatedVpiPutHolder storage requirements (#5144). [Kaleb Barrett]
* Fix coroutines without awaits to have a co_return (#4208) (#5175). [Arkadiusz Kozdra, Antmicro Ltd.]
* Fix missing flex include path variable (#4970) (#4971). [Christopher Taylor]
* Fix missing parameters with comma to be errors (#4979) (#5012). [Paul Swirhun]
* Fix 'experimental/coroutine' file not found on MacOS (#5030) (#5031) (#5151). [Paul Bowen-Huggett]
* Fix bound queue printing (#5032). [Aleksander Kiryk, Antmicro Ltd.]
* Fix consecutive zero-delays (#5038). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix attempted to destroy locked thread pool error (#5040). [Bartłomiej Chmiel, Antmicro Ltd.]
* Fix `$system` with string argument (#5042).
* Fix width extension on delays (#5043).
* Fix `$typename` on array.min and others (#5049). [Gökçe Aydos]
* Fix `make $(info)` which cannot be silenced (#5059). [Gökçe Aydos]
* Fix CMake builds to export VERILATOR_ROOT (#5063). [Michael Bikovitsky]
* Fix false ASSIGNIN on functions with explicit port map (#5069).
* Fix 4-state value support for $readmem (#5070) (#5078). [Ethan Sifferman]
* Fix DFG assertion with SystemC (#5076). [Geza Lore]
* Fix `$typename` string to be more standard (#5082) (#5083). [Andrew Nolte]
* Fix missed optimization in V3Delayed (#5089). [Geza Lore]
* Fix macro expansion in strings per 1800-2023 (#5094). [Geza Lore]
* Fix width extension of unpacked array select (#5095). [Varun Koyyalagunta]
* Fix MacOS missing <type_traits> header (#5096) (#5097). [Vito Gamberini]
* Fix assertion failure in V3Gate (#5101). [Yutetsu TAKATSUKASA]
* Fix aliases for forced port signals (#5105). [Geza Lore]
* Fix tracing interface functions (#5108). [Alex Solomatnikov]
* Fix method calls parsing in constraints (#5110). [Arkadiusz Kozdra, Antmicro Ltd.]
* Fix vpiInertialDelay for memories (#5113). [Todd Strader]
* Fix hierarchical compilation with nested -F (#5114) (#5124). [Alex Solomatnikov]
* Fix references to ports in forks (#5123). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix output C++ type error on change detect of I/O arrays (#5125) (#5131). [Pawel Jewstafjew]
* Fix x-valued parameters with `--x-assign unique` (#5129). [Ethan Sifferman]
* Fix overflow of string on VPI reads (#5145) (#5146). [Kaleb Barrett]
* Fix VerilatedVpiPutHolder class (#5156). [Kaleb Barrett]
* Fix extending out-of-range select (#5159) (#5164). [Geza Lore]
* Fix radix in width warnings (#5166). [Geza Lore]
* Fix SystemC BITS_PER_DIGIT in VL_ASSIGN_SBW (#5170). [Bartłomiej Chmiel, Antmicro Ltd.]
* Fix non-constant replication in concats (#5171). [Arkadiusz Kozdra, Antmicro Ltd.]
* Fix table optimization when applied on real data type (#5172) (#5173). [Arthur Rosa]
* Fix signed types emitted in hierarchical Verilation (#5178). [Bartłomiej Chmiel, Antmicro Ltd.]
* Fix DPI import of null C-string (#5179).
* Fix CMake installation missing verilated.mk (#5187) (#5188). [Philip Axer]
* Fix linking with pthreads on CMake (#5194). [Tim Hutt]
* Fix clang-17 coroutines configuration with -std=gnu++20 (#5200). [Gus Smith]
Verilator 5.024 2024-04-05 Verilator 5.024 2024-04-05
========================== ==========================
@@ -56,9 +422,10 @@ Verilator 5.024 2024-04-05
* Fix preprocessor to respect strings in joins (#5007). * Fix preprocessor to respect strings in joins (#5007).
* Fix tracing class parameters (#5014). * Fix tracing class parameters (#5014).
* Fix memory leaks (#5016). [Geza Lore] * Fix memory leaks (#5016). [Geza Lore]
* Fix $readmem with missing newline (#5019). [Josse Van Delm] * Fix `$readmem` with missing newline (#5019). [Josse Van Delm]
* Fix internal error on missing pattern key (#5023). * Fix internal error on missing pattern key (#5023).
* Fix tracing replicated hierarchical models (#5027). * Fix tracing replicated hierarchical models (#5027).
* Fix false LIFETIME warning on `repeat` in `fork-join` (#5456).
Verilator 5.022 2024-02-24 Verilator 5.022 2024-02-24
@@ -180,6 +547,7 @@ Verilator 5.020 2024-01-01
* Fix dynamic NBA conditions (#4773). [Krzysztof Bieganski, Antmicro Ltd.] * Fix dynamic NBA conditions (#4773). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix `V3Fork` stage to run only if `--timing` is set (#4778). [Krzysztof Bieganski, Antmicro Ltd.] * Fix `V3Fork` stage to run only if `--timing` is set (#4778). [Krzysztof Bieganski, Antmicro Ltd.]
* Fix max multiply width and add runtime assertions if too small. (#4781) * Fix max multiply width and add runtime assertions if too small. (#4781)
* Fix select value too wide (#5148) (#5153). [Dercury]
Verilator 5.018 2023-10-30 Verilator 5.018 2023-10-30
@@ -396,7 +764,7 @@ Verilator 5.012 2023-06-13
* Fix wide structure VL_TOSTRING_W generation (#4188) (#4189). [Aylon Chaim Porat] * Fix wide structure VL_TOSTRING_W generation (#4188) (#4189). [Aylon Chaim Porat]
* Fix references to members of parameterized base classes (#4196). [Ryszard Rozak, Antmicro Ltd] * Fix references to members of parameterized base classes (#4196). [Ryszard Rozak, Antmicro Ltd]
* Fix tracing undefined alignment (#4201) (#4288) [John Wehle] * Fix tracing undefined alignment (#4201) (#4288) [John Wehle]
* Fix class specific same methods for AstVarScope, AstVar, and AstScope (#4203) (#4250). [John Wehle] * Fix class-specific same methods for AstVarScope, AstVar, and AstScope (#4203) (#4250). [John Wehle]
* Fix dotted references in parameterized classes (#4206). [Ryszard Rozak, Antmicro Ltd] * Fix dotted references in parameterized classes (#4206). [Ryszard Rozak, Antmicro Ltd]
* Fix bit selections under parameterized classes (#4210). [Ryszard Rozak, Antmicro Ltd] * Fix bit selections under parameterized classes (#4210). [Ryszard Rozak, Antmicro Ltd]
* Fix duplicate std:: declaration with -I (#4215). [Harald Pretl] * Fix duplicate std:: declaration with -I (#4215). [Harald Pretl]
@@ -552,7 +920,7 @@ Verilator 5.006 2023-01-22
**Minor:** **Minor:**
* Support clocking blocks (#3674). [Krzysztof Bieganski, Antmicro Ltd] * Support clocking blocks (#3674). [Krzysztof Bieganski, Antmicro Ltd]
* Support packed structs (#3802). [Aleksander Kiryk, Antmicro Ltd] * Support unpacked structs (#3802). [Aleksander Kiryk, Antmicro Ltd]
* Support Windows-native builds using cmake (#3814). [Kritik Bhimani] * Support Windows-native builds using cmake (#3814). [Kritik Bhimani]
* Support p format for UnpackArray (#3877). [Aleksander Kiryk, Antmicro Ltd] * Support p format for UnpackArray (#3877). [Aleksander Kiryk, Antmicro Ltd]
* Support property calls without parenthesis (#3879) (#3893). [Ryszard Rozak, Antmicro Ltd] * Support property calls without parenthesis (#3879) (#3893). [Ryszard Rozak, Antmicro Ltd]
@@ -1443,6 +1811,7 @@ Verilator 4.026 2020-01-11
* Fix expand optimization slowing --lint-only. Closes #2091. [Thomas Watts] * Fix expand optimization slowing --lint-only. Closes #2091. [Thomas Watts]
* Fix %{number}s with strings. #2093. [agrobman] * Fix %{number}s with strings. #2093. [agrobman]
* Fix shebang breaking some shells. Closes #2067. [zdave] * Fix shebang breaking some shells. Closes #2067. [zdave]
* Fix errors on using string in incorrect format (#5240). [John Demme]
Verilator 4.024 2019-12-08 Verilator 4.024 2019-12-08
@@ -4620,7 +4989,7 @@ Verilator 0.0 1994-07-08
Copyright Copyright
========= =========
Copyright 2001-2024 by Wilson Snyder. This program is free software; you Copyright 2001-2025 by Wilson Snyder. This program is free software; you
can redistribute it and/or modify it under the terms of either the GNU can redistribute it and/or modify it under the terms of either the GNU
Lesser General Public License Version 3 or the Perl Artistic License Lesser General Public License Version 3 or the Perl Artistic License
Version 2.0. Version 2.0.
+99 -39
View File
@@ -7,7 +7,7 @@
# #
#***************************************************************************** #*****************************************************************************
# #
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you # Copyright 2003-2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU # can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License # Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0. # Version 2.0.
@@ -52,6 +52,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
MAKEINFO = makeinfo MAKEINFO = makeinfo
POD2TEXT = pod2text POD2TEXT = pod2text
PYTHON3 = @PYTHON3@
MKINSTALLDIRS = $(SHELL) $(srcdir)/src/mkinstalldirs MKINSTALLDIRS = $(SHELL) $(srcdir)/src/mkinstalldirs
# Version (for docs/guide/conf.py) # Version (for docs/guide/conf.py)
@@ -76,7 +77,7 @@ datadir = @datadir@
# Directory in which to install documentation info files. # Directory in which to install documentation info files.
infodir = @infodir@ infodir = @infodir@
# Directory in which to install package specific files # Directory in which to install package-specific files
# Generally ${prefix}/share/verilator # Generally ${prefix}/share/verilator
pkgdatadir = @pkgdatadir@ pkgdatadir = @pkgdatadir@
@@ -91,10 +92,12 @@ datarootdir = @datarootdir@
CFG_WITH_CCWARN = @CFG_WITH_CCWARN@ CFG_WITH_CCWARN = @CFG_WITH_CCWARN@
CFG_WITH_DEFENV = @CFG_WITH_DEFENV@ CFG_WITH_DEFENV = @CFG_WITH_DEFENV@
CFG_WITH_LONGTESTS = @CFG_WITH_LONGTESTS@ CFG_WITH_LONGTESTS = @CFG_WITH_LONGTESTS@
CFG_WITH_SOLVER = @CFG_WITH_SOLVER@
PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_VERSION = @PACKAGE_VERSION@
#### End of system configuration section. #### #### End of system configuration section. ####
###################################################################### ######################################################################
# Main build targets
.SUFFIXES: .SUFFIXES:
@@ -145,6 +148,9 @@ verilator_exe verilator_bin$(EXEEXT) verilator_bin_dbg$(EXEEXT) verilator_covera
@echo "making verilator in src" @echo "making verilator in src"
$(MAKE) -C src $(OBJCACHE_JOBS) $(MAKE) -C src $(OBJCACHE_JOBS)
######################################################################
# Tests
.PHONY:msg_test .PHONY:msg_test
msg_test: all_nomsg msg_test: all_nomsg
@echo "Build complete!" @echo "Build complete!"
@@ -155,7 +161,7 @@ msg_test: all_nomsg
.PHONY: test .PHONY: test
ifeq ($(CFG_WITH_LONGTESTS),yes) # Local... Else don't burden users ifeq ($(CFG_WITH_LONGTESTS),yes) # Local... Else don't burden users
test: smoke-test test_regress test: smoke-test test_regress
# examples is part of test_regress's test_regress/t/t_a2_examples.pl # examples is part of test_regress's test_regress/t/t_a2_examples.py
# (because that allows it to run in parallel with other test_regress's) # (because that allows it to run in parallel with other test_regress's)
else else
test: smoke-test examples test: smoke-test examples
@@ -167,8 +173,8 @@ endif
@echo @echo
smoke-test: all_nomsg smoke-test: all_nomsg
test_regress/t/t_a1_first_cc.pl test_regress/t/t_a1_first_cc.py
test_regress/t/t_a2_first_sc.pl test_regress/t/t_a2_first_sc.py
test_regress: all_nomsg test_regress: all_nomsg
$(MAKE) -C test_regress $(MAKE) -C test_regress
@@ -182,8 +188,11 @@ examples: all_nomsg
$(MAKE) -C $$p VERILATOR_ROOT=`pwd` || exit 10; \ $(MAKE) -C $$p VERILATOR_ROOT=`pwd` || exit 10; \
done done
######################################################################
# Docs
.PHONY: docs .PHONY: docs
docs: info docs: info $(VL_INST_MAN_FILES)
info: $(INFOS) info: $(INFOS)
@@ -192,7 +201,8 @@ verilator.1: ${srcdir}/bin/verilator
verilator_coverage.1: ${srcdir}/bin/verilator_coverage verilator_coverage.1: ${srcdir}/bin/verilator_coverage
pod2man $< $@ pod2man $< $@
%.1: ${srcdir}/bin/% %.1: ${srcdir}/bin/%
help2man --no-info --no-discard-stderr --version-string=- $< -o $@ help2man --no-info --no-discard-stderr --version-string=- \
-n "$(shell $< --help | head -n 3 | tail -n 1)" $< -o $@
.PHONY: verilator.html .PHONY: verilator.html
verilator.html: verilator.html:
@@ -203,6 +213,20 @@ verilator.html:
verilator.pdf: Makefile verilator.pdf: Makefile
$(MAKE) -C docs verilator.pdf $(MAKE) -C docs verilator.pdf
TAGFILES=${srcdir}/*/*.cpp ${srcdir}/*/*.h ${srcdir}/*/*.in \
${srcdir}/*.in ${srcdir}/*.pod
TAGS: $(TAGFILES)
etags $(TAGFILES)
.PHONY: doxygen
doxygen:
$(MAKE) -C docs doxygen
######################################################################
# Install
# Public executables intended to be invoked directly by the user # Public executables intended to be invoked directly by the user
# Don't put wildcards in these variables, it might cause an uninstall of other stuff # Don't put wildcards in these variables, it might cause an uninstall of other stuff
VL_INST_PUBLIC_SCRIPT_FILES = verilator \ VL_INST_PUBLIC_SCRIPT_FILES = verilator \
@@ -226,6 +250,7 @@ VL_INST_INC_BLDDIR_FILES = \
# Files under srcdir, instead of build time # Files under srcdir, instead of build time
VL_INST_INC_SRCDIR_FILES = \ VL_INST_INC_SRCDIR_FILES = \
include/*.[chv]* \ include/*.[chv]* \
include/*.vlt \
include/*.sv \ include/*.sv \
include/gtkwave/*.[chv]* \ include/gtkwave/*.[chv]* \
include/vltstd/*.[chv]* \ include/vltstd/*.[chv]* \
@@ -243,11 +268,15 @@ mkbindirs:
installbin: | mkbindirs installbin: | mkbindirs
cd $(srcdir)/bin; \ cd $(srcdir)/bin; \
for p in $(VL_INST_PUBLIC_SCRIPT_FILES) ; do \ for p in $(VL_INST_PUBLIC_SCRIPT_FILES) ; do \
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(pkgdatadir)/bin/$$p; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \
done done
perl -p -i -e 'use File::Spec;' \
-e' $$path = File::Spec->abs2rel("$(realpath $(DESTDIR)$(pkgdatadir))", "$(realpath $(DESTDIR)$(bindir))");' \
-e 's/my \$$verilator_pkgdatadir_relpath = .*/my \$$verilator_pkgdatadir_relpath = "$$path";/g' \
-- "$(DESTDIR)/$(bindir)/verilator"
cd bin; \ cd bin; \
for p in $(VL_INST_PUBLIC_BIN_FILES) ; do \ for p in $(VL_INST_PUBLIC_BIN_FILES) ; do \
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(pkgdatadir)/bin/$$p; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \
done done
cd $(srcdir)/bin; \ cd $(srcdir)/bin; \
for p in $(VL_INST_PRIVATE_SCRIPT_FILES) ; do \ for p in $(VL_INST_PRIVATE_SCRIPT_FILES) ; do \
@@ -257,11 +286,11 @@ installbin: | mkbindirs
installredirect: installbin | mkbindirs installredirect: installbin | mkbindirs
cp ${srcdir}/bin/redirect ${srcdir}/bin/redirect.tmp cp ${srcdir}/bin/redirect ${srcdir}/bin/redirect.tmp
perl -p -i -e 'use File::Spec;' \ perl -p -i -e 'use File::Spec;' \
-e' $$path = File::Spec->abs2rel("$(realpath $(DESTDIR)$(pkgdatadir)/bin)", "$(realpath $(DESTDIR)$(bindir))");' \ -e' $$path = File::Spec->abs2rel("$(realpath $(DESTDIR)$(bindir))", "$(realpath $(DESTDIR)$(pkgdatadir)/bin)");' \
-e 's/RELPATH.*/"$$path";/g' -- "${srcdir}/bin/redirect.tmp" -e 's/RELPATH.*/"$$path";/g' -- "${srcdir}/bin/redirect.tmp"
cd $(srcdir)/bin; \ cd $(srcdir)/bin; \
for p in $(VL_INST_PUBLIC_SCRIPT_FILES) $(VL_INST_PUBLIC_BIN_FILES) ; do \ for p in $(VL_INST_PUBLIC_SCRIPT_FILES) $(VL_INST_PUBLIC_BIN_FILES) ; do \
$(INSTALL_PROGRAM) redirect.tmp $(DESTDIR)$(bindir)/$$p; \ $(INSTALL_PROGRAM) redirect.tmp $(DESTDIR)$(pkgdatadir)/bin/$$p; \
done done
rm ${srcdir}/bin/redirect.tmp rm ${srcdir}/bin/redirect.tmp
@@ -343,6 +372,19 @@ install-all: installbin installredirect installman installdata install-msg
install-here: installman info install-here: installman info
install-msg:
@echo
@echo "Installed binaries to $(DESTDIR)$(bindir)/verilator"
@echo "Installed man to $(DESTDIR)$(mandir)/man1"
@echo "Installed examples to $(DESTDIR)$(pkgdatadir)/examples"
@echo
@echo "For documentation see 'man verilator' or 'verilator --help'"
@echo "For forums and to report bugs see https://verilator.org"
@echo
######################################################################
# Format/Lint
# Use --xml flag to see the cppcheck code to use for suppression # Use --xml flag to see the cppcheck code to use for suppression
CPPCHECK1_CPP = $(wildcard $(srcdir)/include/*.cpp) CPPCHECK1_CPP = $(wildcard $(srcdir)/include/*.cpp)
CPPCHECK2_CPP = $(wildcard $(srcdir)/examples/*/*.cpp) CPPCHECK2_CPP = $(wildcard $(srcdir)/examples/*/*.cpp)
@@ -410,17 +452,32 @@ analyzer-include:
-rm -rf examples/*/obj* -rm -rf examples/*/obj*
scan-build $(MAKE) -k examples scan-build $(MAKE) -k examples
format: clang-format yapf format-pl-exec format:
$(MAKE) -j 4 format-c format-py format-exec
CLANGFORMAT = clang-format-14 CLANGFORMAT = clang-format-14
CLANGFORMAT_FLAGS = -i CLANGFORMAT_FLAGS = -i
CLANGFORMAT_FILES = $(CHECK_CPP) $(CHECK_H) $(CHECK_YL) test_regress/t/*.c* test_regress/t/*.h CLANGFORMAT_FILES = $(CHECK_CPP) $(CHECK_H) $(CHECK_YL) test_regress/t/*.c* test_regress/t/*.h
clang-format: format-c clang-format:
@$(CLANGFORMAT) --version | egrep 14.0 > /dev/null \ @$(CLANGFORMAT) --version | egrep 14.0 > /dev/null \
|| echo "*** You are not using clang-format-14, indents may differ from master's ***" || echo "*** You are not using clang-format-14, indents may differ from master's ***"
$(CLANGFORMAT) $(CLANGFORMAT_FLAGS) $(CLANGFORMAT_FILES) $(CLANGFORMAT) $(CLANGFORMAT_FLAGS) $(CLANGFORMAT_FILES)
YAMLFIX = YAMLFIX_WHITELINES=1 YAMLFIX_LINE_LENGTH=130 YAMLFIX_preserve_quotes=true yamlfix
yamlfix:
$(YAMLFIX) .
# CMake files
CMAKE_FILES = \
CMakeLists.txt \
examples/*/CMakeLists.txt \
src/CMakeLists.txt \
test_regress/CMakeLists.txt \
*.cmake.in \
# Python programs, subject to format and lint
PY_PROGRAMS = \ PY_PROGRAMS = \
bin/verilator_ccache_report \ bin/verilator_ccache_report \
bin/verilator_difftree \ bin/verilator_difftree \
@@ -439,6 +496,7 @@ PY_PROGRAMS = \
src/flexfix \ src/flexfix \
src/vlcovgen \ src/vlcovgen \
src/.gdbinit.py \ src/.gdbinit.py \
test_regress/*.py \
test_regress/t/*.pf \ test_regress/t/*.pf \
nodist/clang_check_attributes \ nodist/clang_check_attributes \
nodist/code_coverage \ nodist/code_coverage \
@@ -446,45 +504,55 @@ PY_PROGRAMS = \
nodist/fuzzer/actual_fail \ nodist/fuzzer/actual_fail \
nodist/fuzzer/generate_dictionary \ nodist/fuzzer/generate_dictionary \
nodist/install_test \ nodist/install_test \
nodist/log_changes \
# Python files, subject to format but not lint
PY_FILES = \ PY_FILES = \
$(PY_PROGRAMS) \ $(PY_PROGRAMS) \
nodist/code_coverage.dat \ nodist/code_coverage.dat \
test_regress/t/*.py \
# Python files, test_regress tests
PY_TEST_FILES = \
test_regress/t/*.py \
YAPF = yapf3 YAPF = yapf3
YAPF_FLAGS = -i YAPF_FLAGS = -i --parallel
yapf: format-py yapf:
$(YAPF) $(YAPF_FLAGS) $(PY_FILES) $(YAPF) $(YAPF_FLAGS) $(PY_FILES)
GERSEMI = gersemi
GERSEMI_FLAGS = -i
format-cmake:
$(GERSEMI) $(GERSEMI_FLAGS) $(CMAKE_FILES)
PYLINT = pylint PYLINT = pylint
PYLINT_FLAGS = --score=n --disable=R0801 PYLINT_FLAGS = --recursive=n --score=n --disable=R0801
PYLINT_TEST_FLAGS = $(PYLINT_FLAGS) --disable=C0103,C0114,C0116,C0209,C0411,C0413,C0301,R0801,R0912,R0915,R0916,R1702,W0511,W0621
RUFF = ruff RUFF = ruff
RUFF_FLAGS = check --ignore=E402,E501,E701 RUFF_FLAGS = check --ignore=E402,E501,E701
# "make -k" so can see all tool result errors # "make -k" so can see all tool result errors
lint-py: lint-py:
$(MAKE) -k lint-py-pylint lint-py-ruff $(MAKE) -k lint-py-pylint lint-py-pylint-tests lint-py-ruff
lint-py-pylint: lint-py-pylint:
$(PYLINT) $(PYLINT_FLAGS) $(PY_PROGRAMS) $(PYLINT) $(PYLINT_FLAGS) $(PY_PROGRAMS)
lint-py-pylint-tests:
$(PYLINT) $(PYLINT_TEST_FLAGS) $(PY_TEST_FILES) | $(PYTHON3) nodist/lint_py_test_filter
lint-py-ruff: lint-py-ruff:
$(RUFF) $(RUFF_FLAGS) $(PY_PROGRAMS) $(RUFF) $(RUFF_FLAGS) $(PY_PROGRAMS)
format-pl-exec: format-exec:
-chmod a+x test_regress/t/*.pl -chmod a+x test_regress/t/*.py
install-msg: ######################################################################
@echo # Configure
@echo "Installed binaries to $(DESTDIR)$(bindir)/verilator"
@echo "Installed man to $(DESTDIR)$(mandir)/man1"
@echo "Installed examples to $(DESTDIR)$(pkgdatadir)/examples"
@echo
@echo "For documentation see 'man verilator' or 'verilator --help'"
@echo "For forums and to report bugs see https://verilator.org"
@echo
IN_WILD := ${srcdir}/*.in ${srcdir}/*/*.in IN_WILD := ${srcdir}/*.in ${srcdir}/*/*.in
@@ -505,6 +573,9 @@ else
autoconf autoconf
endif endif
######################################################################
# Clean
maintainer-clean:: maintainer-clean::
@echo "This command is intended for maintainers to use;" @echo "This command is intended for maintainers to use;"
@echo "rebuilding the deleted files requires autoconf." @echo "rebuilding the deleted files requires autoconf."
@@ -535,17 +606,6 @@ distclean maintainer-clean::
rm -f bin/verilator_bin* bin/verilator_coverage_bin* rm -f bin/verilator_bin* bin/verilator_coverage_bin*
rm -f include/verilated.mk include/verilated_config.h rm -f include/verilated.mk include/verilated_config.h
TAGFILES=${srcdir}/*/*.cpp ${srcdir}/*/*.h ${srcdir}/*/*.in \
${srcdir}/*.in ${srcdir}/*.pod
TAGS: $(TAGFILES)
etags $(TAGFILES)
.PHONY: doxygen
doxygen:
$(MAKE) -C docs doxygen
###################################################################### ######################################################################
# Distributions # Distributions
+15 -16
View File
@@ -1,21 +1,21 @@
.. Github doesn't render images unless absolute URL .. Github doesn't render images unless absolute URL
.. Do not know of a conditional tag, "only: github" nor "github display" works .. Do not know of a conditional tag, "only: github" nor "github display" works
.. image:: https://img.shields.io/badge/Website-Verilator.org-181717.svg |badge1| |badge2| |badge3| |badge4| |badge5| |badge6| |badge7|
.. |badge1| image:: https://img.shields.io/badge/Website-Verilator.org-181717.svg
:target: https://verilator.org :target: https://verilator.org
.. image:: https://img.shields.io/badge/License-LGPL%20v3-blue.svg .. |badge2| image:: https://img.shields.io/badge/License-LGPL%20v3-blue.svg
:target: https://www.gnu.org/licenses/lgpl-3.0 :target: https://www.gnu.org/licenses/lgpl-3.0
.. image:: https://img.shields.io/badge/License-Artistic%202.0-0298c3.svg .. |badge3| image:: https://img.shields.io/badge/License-Artistic%202.0-0298c3.svg
:target: https://opensource.org/licenses/Artistic-2.0 :target: https://opensource.org/licenses/Artistic-2.0
.. image:: https://repology.org/badge/tiny-repos/verilator.svg?header=distro%20packages .. |badge4| image:: https://repology.org/badge/tiny-repos/verilator.svg?header=distro%20packages
:target: https://repology.org/project/verilator/versions :target: https://repology.org/project/verilator/versions
.. image:: https://img.shields.io/docker/pulls/verilator/verilator .. |badge5| image:: https://img.shields.io/docker/pulls/verilator/verilator
:target: https://hub.docker.com/r/verilator/verilator :target: https://hub.docker.com/r/verilator/verilator
.. image:: https://api.codacy.com/project/badge/Grade/fa78caa433c84a4ab9049c43e9debc6f .. |badge6| image:: https://api.codacy.com/project/badge/Grade/fa78caa433c84a4ab9049c43e9debc6f
:target: https://www.codacy.com/gh/verilator/verilator :target: https://www.codacy.com/gh/verilator/verilator
.. image:: https://codecov.io/gh/verilator/verilator/branch/master/graph/badge.svg .. |badge7| image:: https://github.com/verilator/verilator/workflows/build/badge.svg
:target: https://codecov.io/gh/verilator/verilator
.. image:: https://github.com/verilator/verilator/workflows/build/badge.svg
:target: https://github.com/verilator/verilator/actions?query=workflow%3Abuild :target: https://github.com/verilator/verilator/actions?query=workflow%3Abuild
@@ -85,12 +85,11 @@ thread is about 100 times faster than interpreted Verilog simulators such
as `Icarus Verilog`_. Another 2-10x speedup might be gained from as `Icarus Verilog`_. Another 2-10x speedup might be gained from
multithreading (yielding 200-1000x total over interpreted simulators). multithreading (yielding 200-1000x total over interpreted simulators).
Verilator has typically similar or better performance versus Verilator has typically similar or better performance versus closed-source
closed-source Verilog simulators (e.g., Carbon Design Systems Carbonator, Verilog simulators (e.g., Aldec Riviera-Pro, Cadence Incisive/NC-Verilog,
Modelsim/Questa, Cadence Incisive/NC-Verilog, Synopsys VCS, VTOC, and Mentor ModelSim/Questa, Synopsys VCS, VTOC, and Pragmatic CVer/CVC). But,
Pragmatic CVer/CVC). But, Verilator is open-sourced, so you can spend on Verilator is open-sourced, so you can spend on computes rather than
computes rather than licenses. Thus, Verilator gives you the best licenses. Thus, Verilator gives you the best simulation cycles/dollar.
simulation cycles/dollar.
Installation & Documentation Installation & Documentation
@@ -142,7 +141,7 @@ Related Projects
Open License Open License
============ ============
Verilator is Copyright 2003-2024 by Wilson Snyder. (Report bugs to Verilator is Copyright 2003-2025 by Wilson Snyder. (Report bugs to
`Verilator Issues <https://verilator.org/issues>`_.) `Verilator Issues <https://verilator.org/issues>`_.)
Verilator is free software; you can redistribute it and/or modify it under Verilator is free software; you can redistribute it and/or modify it under
+1 -1
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env perl #!/usr/bin/env perl
###################################################################### ######################################################################
# #
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you # Copyright 2003-2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU # can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License # Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0. # Version 2.0.
+32 -16
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env perl #!/usr/bin/env perl
###################################################################### ######################################################################
# #
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you # Copyright 2003-2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU # can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License # Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0. # Version 2.0.
@@ -69,7 +69,9 @@ if (! GetOptions(
pod2usage(-exitstatus => 2, -verbose => 0); pod2usage(-exitstatus => 2, -verbose => 0);
} }
my $verilator_root = realpath("$RealBin/.."); # WARNING: $verilator_pkgdatadir_relpath is substituted during Verilator 'make install'
my $verilator_pkgdatadir_relpath = "..";
my $verilator_root = realpath("$RealBin/$verilator_pkgdatadir_relpath");
if (defined $ENV{VERILATOR_ROOT}) { if (defined $ENV{VERILATOR_ROOT}) {
if ((!-d $ENV{VERILATOR_ROOT}) || $verilator_root ne realpath($ENV{VERILATOR_ROOT})) { if ((!-d $ENV{VERILATOR_ROOT}) || $verilator_root ne realpath($ENV{VERILATOR_ROOT})) {
warn "%Error: verilator: VERILATOR_ROOT is set to inconsistent path. Suggest leaving it unset.\n"; warn "%Error: verilator: VERILATOR_ROOT is set to inconsistent path. Suggest leaving it unset.\n";
@@ -267,8 +269,7 @@ __END__
=head1 NAME =head1 NAME
Verilator - Translate and simulate SystemVerilog code using C++/SystemC Verilator - Lint, compile and simulate SystemVerilog code using C++/SystemC
=head1 SYNOPSIS =head1 SYNOPSIS
@@ -324,8 +325,11 @@ detailed descriptions of these arguments.
--clk <signal-name> Mark specified signal as clock --clk <signal-name> Mark specified signal as clock
--no-clk <signal-name> Prevent marking specified signal as clock --no-clk <signal-name> Prevent marking specified signal as clock
--compiler <compiler-name> Tune for specified C++ compiler --compiler <compiler-name> Tune for specified C++ compiler
--compiler-include Include additional header in the precompiled one
--converge-limit <loops> Tune convergence settle time --converge-limit <loops> Tune convergence settle time
--coverage Enable all coverage --coverage Enable all coverage
--coverage-expr Enable expression coverage
--coverage-expr-max <value> Maximum permutations allowed for an expression
--coverage-line Enable line coverage --coverage-line Enable line coverage
--coverage-max-width <width> Maximum array depth for coverage --coverage-max-width <width> Maximum array depth for coverage
--coverage-toggle Enable toggle coverage --coverage-toggle Enable toggle coverage
@@ -356,6 +360,7 @@ detailed descriptions of these arguments.
--dumpi-tree-json <level> Enable dumping Ast .tree.json files at level --dumpi-tree-json <level> Enable dumping Ast .tree.json files at level
--dumpi-<srcfile> <level> Enable dumping everything in source file at level --dumpi-<srcfile> <level> Enable dumping everything in source file at level
-E Preprocess, but do not compile -E Preprocess, but do not compile
--emit-accessors Emit getter and setter methods for model top class
--error-limit <value> Abort after this number of errors --error-limit <value> Abort after this number of errors
--exe Link to create executable --exe Link to create executable
--expand-limit <value> Set expand optimization limit --expand-limit <value> Set expand optimization limit
@@ -371,22 +376,29 @@ detailed descriptions of these arguments.
--gdb Run Verilator under GDB interactively --gdb Run Verilator under GDB interactively
--gdbbt Run Verilator under GDB for backtrace --gdbbt Run Verilator under GDB for backtrace
--generate-key Create random key for --protect-key --generate-key Create random key for --protect-key
--getenv <var> Get environment variable with defaults
--get-supported <feature> Get if feature is supported --get-supported <feature> Get if feature is supported
--getenv <var> Get environment variable with defaults
--help Show this help --help Show this help
--hierarchical Enable hierarchical Verilation --hierarchical Enable hierarchical Verilation
--hierarchical-params-file <name> Internal option that specifies parameters file for hier blocks
-I<dir> Directory to search for includes -I<dir> Directory to search for includes
--if-depth <value> Tune IFDEPTH warning --if-depth <value> Tune IFDEPTH warning
+incdir+<dir> Directory to search for includes +incdir+<dir> Directory to search for includes
--inline-mult <value> Tune module inlining --inline-mult <value> Tune module inlining
--instr-count-dpi <value> Assumed dynamic instruction count of DPI imports --instr-count-dpi <value> Assumed dynamic instruction count of DPI imports
-j <jobs> Parallelism for --build-jobs/--verilate-jobs -j <jobs> Parallelism for --build-jobs/--verilate-jobs
--no-json-edit-nums Don't dump editNum in .tree.json files
--no-json-ids Don't use short identifiers instead of adresses/paths in .tree.json
--json-only Create JSON parser output (.tree.json and .meta.json)
--json-only-output .tree.json output filename
--json-only-meta-output .tree.meta.json output filename
--l2-name <value> Verilog scope name of the top module --l2-name <value> Verilog scope name of the top module
--language <lang> Default language standard to parse --language <lang> Default language standard to parse
-LDFLAGS <flags> Linker pre-object arguments for makefile -LDFLAGS <flags> Linker pre-object arguments for makefile
--lib-create <name> Create a DPI library --lib-create <name> Create a DPI library
+libext+<ext>+[ext]... Extensions for finding modules +libext+<ext>+[ext]... Extensions for finding modules
--lint-only Lint, but do not make output --lint-only Lint, but do not make output
--localize-max-size <value> Tune localize optimization variable size
--make <build-tool> Generate scripts for specified build tool --make <build-tool> Generate scripts for specified build tool
-MAKEFLAGS <flags> Arguments to pass to make during --build -MAKEFLAGS <flags> Arguments to pass to make during --build
--main Generate C++ main() file --main Generate C++ main() file
@@ -401,18 +413,23 @@ detailed descriptions of these arguments.
-O3 High-performance optimizations -O3 High-performance optimizations
-O<optimization-letter> Selectable optimizations -O<optimization-letter> Selectable optimizations
-o <executable> Name of final executable -o <executable> Name of final executable
--output-groups <numfiles> Group .cpp files into larger ones
--output-split <statements> Split .cpp files into pieces --output-split <statements> Split .cpp files into pieces
--output-split-cfuncs <statements> Split model functions --output-split-cfuncs <statements> Split model functions
--output-split-ctrace <statements> Split tracing functions --output-split-ctrace <statements> Split tracing functions
-P Disable line numbers and blanks with -E -P Disable line numbers and blanks with -E
--pins-bv <bits> Specify types for top-level ports --pins-bv <bits> Specify types for top-level ports
--pins-inout-enables Specify that __en and __out signals be created for inouts
--pins-sc-biguint Specify types for top-level ports --pins-sc-biguint Specify types for top-level ports
--pins-sc-uint Specify types for top-level ports --pins-sc-uint Specify types for top-level ports
--pins-sc-uint-bool Specify types for top-level ports
--pins-uint8 Specify types for top-level ports --pins-uint8 Specify types for top-level ports
--no-pins64 Don't use uint64_t's for 33-64 bit sigs --no-pins64 Don't use uint64_t's for 33-64 bit sigs
--pipe-filter <command> Filter all input through a script --pipe-filter <command> Filter all input through a script
--pp-comments Show preprocessor comments with -E --pp-comments Show preprocessor comments with -E
--prefix <topname> Name of top-level class --prefix <topname> Name of top-level class
--preproc-resolve Include all found modules in the output with -E
--preproc-token-limit Maximum tokens on a line allowed by preprocessor
--private Debugging; see docs --private Debugging; see docs
--prof-c Compile C++ code with profiling --prof-c Compile C++ code with profiling
--prof-cfuncs Name functions for profiling --prof-cfuncs Name functions for profiling
@@ -423,8 +440,9 @@ detailed descriptions of these arguments.
--protect-lib <name> Create a DPI protected library --protect-lib <name> Create a DPI protected library
--public Mark signals as public; see docs --public Mark signals as public; see docs
--public-depth <level> Mark public to specified module depth --public-depth <level> Mark public to specified module depth
--public-params Mark all parameters as public_flat
--public-flat-rw Mark all variables, etc as public_flat_rw --public-flat-rw Mark all variables, etc as public_flat_rw
--public-ignore Ignore all public comment markings
--public-params Mark all parameters as public_flat
-pvalue+<name>=<value> Overwrite toplevel parameter -pvalue+<name>=<value> Overwrite toplevel parameter
--quiet Minimize additional printing --quiet Minimize additional printing
--quiet-exit Don't print the command on failure --quiet-exit Don't print the command on failure
@@ -439,7 +457,9 @@ detailed descriptions of these arguments.
--no-skip-identical Disable skipping identical output --no-skip-identical Disable skipping identical output
--stats Create statistics file --stats Create statistics file
--stats-vars Provide statistics on variables --stats-vars Provide statistics on variables
--no-std Prevent parsing standard library --no-std Prevent loading standard files
--no-std-package Prevent parsing standard package
--no-std-waiver Prevent parsing standard lint waivers
--no-stop-fail Do not call $stop when assertion fails --no-stop-fail Do not call $stop when assertion fails
--structs-packed Convert all unpacked structures to packed structures --structs-packed Convert all unpacked structures to packed structures
-sv Enable SystemVerilog parsing -sv Enable SystemVerilog parsing
@@ -457,8 +477,8 @@ detailed descriptions of these arguments.
--trace-coverage Enable tracing of coverage --trace-coverage Enable tracing of coverage
--trace-depth <levels> Depth of tracing --trace-depth <levels> Depth of tracing
--trace-fst Enable FST waveform creation --trace-fst Enable FST waveform creation
--trace-max-array <depth> Maximum bit width for tracing --trace-max-array <depth> Maximum array depth for tracing
--trace-max-width <width> Maximum array depth for tracing --trace-max-width <width> Maximum bit width for tracing
--trace-params Enable tracing of parameters --trace-params Enable tracing of parameters
--trace-structs Enable tracing structure names --trace-structs Enable tracing structure names
--trace-threads <threads> Enable FST waveform creation on separate threads --trace-threads <threads> Enable FST waveform creation on separate threads
@@ -478,7 +498,8 @@ detailed descriptions of these arguments.
+verilog2001ext+<ext> Synonym for +1364-2001ext+<ext> +verilog2001ext+<ext> Synonym for +1364-2001ext+<ext>
--version Show program version and exits --version Show program version and exits
--vpi Enable VPI compiles --vpi Enable VPI compiles
--waiver-output <filename> Create a waiver file based on the linter warnings --waiver-multiline Create multiline --match for waivers
--waiver-output <filename> Create a waiver file based on linter warnings
-Wall Enable all style warnings -Wall Enable all style warnings
-Werror-<message> Convert warnings to errors -Werror-<message> Convert warnings to errors
-Wfuture-<message> Disable unknown message warnings -Wfuture-<message> Disable unknown message warnings
@@ -494,11 +515,6 @@ detailed descriptions of these arguments.
--x-assign <mode> Assign non-initial Xs to this value --x-assign <mode> Assign non-initial Xs to this value
--x-initial <mode> Assign initial Xs to this value --x-initial <mode> Assign initial Xs to this value
--x-initial-edge Enable initial X->0 and X->1 edge triggers --x-initial-edge Enable initial X->0 and X->1 edge triggers
--no-json-edit-nums Don't dump editNum in .tree.json files
--no-json-ids Don't use short identifiers instead of adresses/paths in .tree.json
--json-only Create JSON parser output (.tree.json and .meta.json)
--json-only-output .tree.json output filename
--json-only-meta-output .tree.meta.json output filename
--xml-only Create XML parser output --xml-only Create XML parser output
--xml-output XML output filename --xml-output XML output filename
-y <dir> Directory to search for modules -y <dir> Directory to search for modules
@@ -531,7 +547,7 @@ description of these arguments.
The latest version is available from L<https://verilator.org>. The latest version is available from L<https://verilator.org>.
Copyright 2003-2024 by Wilson Snyder. This program is free software; you can Copyright 2003-2025 by Wilson Snyder. This program is free software; you can
redistribute it and/or modify the Verilator internals under the terms of redistribute it and/or modify the Verilator internals under the terms of
either the GNU Lesser General Public License Version 3 or the Perl Artistic either the GNU Lesser General Public License Version 3 or the Perl Artistic
License Version 2.0. License Version 2.0.
+9 -17
View File
@@ -16,8 +16,7 @@ parser = argparse.ArgumentParser(
For documentation see For documentation see
https://verilator.org/guide/latest/exe_verilator_ccache_report.html""", https://verilator.org/guide/latest/exe_verilator_ccache_report.html""",
epilog= epilog="""Copyright 2002-2025 by Wilson Snyder. This program is free software; you
"""Copyright 2002-2024 by Wilson Snyder. This program is free software; you
can redistribute it and/or modify it under the terms of either the GNU can redistribute it and/or modify it under the terms of either the GNU
Lesser General Public License Version 3 or the Perl Artistic License Lesser General Public License Version 3 or the Perl Artistic License
Version 2.0. Version 2.0.
@@ -67,30 +66,23 @@ else:
wnames = max(len(_) for _ in results) + 1 wnames = max(len(_) for _ in results) + 1
wresults = max(len(_) for _ in results.values()) + 1 wresults = max(len(_) for _ in results.values()) + 1
for k in sorted(results.keys()): for k in sorted(results.keys()):
args.o.write("{:{wnames}} : {:{wresults}} : {}s\n".format( args.o.write("{:{wnames}} : {:{wresults}} : {}s\n".format(k,
k, results[k],
results[k], elapsed[k].total_seconds(),
elapsed[k].total_seconds(), wnames=wnames,
wnames=wnames, wresults=wresults))
wresults=wresults))
args.o.write("\nSummary:\n") args.o.write("\nSummary:\n")
counts = collections.Counter(_ for _ in results.values()) counts = collections.Counter(_ for _ in results.values())
total = sum(counts.values()) total = sum(counts.values())
for k in sorted(counts.keys()): for k in sorted(counts.keys()):
c = counts[k] c = counts[k]
args.o.write("{:{width}}| {} ({:.2%})\n".format(k, args.o.write("{:{width}}| {} ({:.2%})\n".format(k, c, c / total, width=wresults))
c,
c / total,
width=wresults))
args.o.write("\nLongest:\n") args.o.write("\nLongest:\n")
longest = sorted(list(elapsed.items()), longest = sorted(list(elapsed.items()), key=lambda kv: -kv[1].total_seconds())
key=lambda kv: -kv[1].total_seconds())
for i, (k, v) in enumerate(longest): for i, (k, v) in enumerate(longest):
args.o.write("{:{width}}| {}s\n".format(k, args.o.write("{:{width}}| {}s\n".format(k, v.total_seconds(), width=wnames))
v.total_seconds(),
width=wnames))
if i > 4: if i > 4:
break break
+4 -4
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env perl #!/usr/bin/env perl
###################################################################### ######################################################################
# #
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you # Copyright 2003-2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU # can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License # Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0. # Version 2.0.
@@ -154,9 +154,9 @@ verilator_coverage - Verilator coverage analyzer
verilator_coverage --annotate <obj> verilator_coverage --annotate <obj>
verilator_coverage -write merged.dat -read <datafiles>... verilator_coverage -write merged.dat <datafiles>...
verilator_coverage -write-info merged.info -read <datafiles>... verilator_coverage -write-info merged.info <datafiles>...
Verilator_coverage processes Verilated model-generated coverage reports. Verilator_coverage processes Verilated model-generated coverage reports.
@@ -188,7 +188,7 @@ L<https://verilator.org/guide/latest/exe_verilator_coverage.html>.
The latest version is available from L<https://verilator.org>. The latest version is available from L<https://verilator.org>.
Copyright 2003-2024 by Wilson Snyder. This program is free software; you Copyright 2003-2025 by Wilson Snyder. This program is free software; you
can redistribute it and/or modify the Verilator internals under the terms can redistribute it and/or modify the Verilator internals under the terms
of either the GNU Lesser General Public License Version 3 or the Perl of either the GNU Lesser General Public License Version 3 or the Perl
Artistic License Version 2.0. Artistic License Version 2.0.
+3 -8
View File
@@ -47,8 +47,7 @@ def diff_dir(a, b):
diff_file(a, b) diff_file(a, b)
anyfile = True anyfile = True
if not anyfile: if not anyfile:
sys.stderr.write( sys.stderr.write("%Warning: No .tree files found that have similar base names\n")
"%Warning: No .tree files found that have similar base names\n")
def diff_file(a, b): def diff_file(a, b):
@@ -109,18 +108,14 @@ parser = argparse.ArgumentParser(
Verilator_difftree is used for debugging Verilator tree output files. Verilator_difftree is used for debugging Verilator tree output files.
It performs a diff between two files, or all files common between two It performs a diff between two files, or all files common between two
directories, ignoring irrelevant pointer differences.""", directories, ignoring irrelevant pointer differences.""",
epilog= epilog="""Copyright 2005-2025 by Wilson Snyder. This program is free software; you
"""Copyright 2005-2024 by Wilson Snyder. This program is free software; you
can redistribute it and/or modify it under the terms of either the GNU can redistribute it and/or modify it under the terms of either the GNU
Lesser General Public License Version 3 or the Perl Artistic License Lesser General Public License Version 3 or the Perl Artistic License
Version 2.0. Version 2.0.
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""") SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
parser.add_argument('--debug', parser.add_argument('--debug', action='store_const', const=9, help='enable debug')
action='store_const',
const=9,
help='enable debug')
parser.add_argument('--no-lineno', parser.add_argument('--no-lineno',
action='store_false', action='store_false',
help='do not show differences in line numbering') help='do not show differences in line numbering')
+47 -68
View File
@@ -15,11 +15,7 @@ LongestVcdStrValueLength = 0
Threads = collections.defaultdict(lambda: []) # List of records per thread id Threads = collections.defaultdict(lambda: []) # List of records per thread id
Mtasks = collections.defaultdict(lambda: {'elapsed': 0, 'end': 0}) Mtasks = collections.defaultdict(lambda: {'elapsed': 0, 'end': 0})
Cpus = collections.defaultdict(lambda: {'mtask_time': 0}) Cpus = collections.defaultdict(lambda: {'mtask_time': 0})
Global = { Global = {'args': {}, 'cpuinfo': collections.defaultdict(lambda: {}), 'stats': {}}
'args': {},
'cpuinfo': collections.defaultdict(lambda: {}),
'stats': {}
}
ElapsedTime = None # total elapsed time ElapsedTime = None # total elapsed time
ExecGraphTime = 0 # total elapsed time excuting an exec graph ExecGraphTime = 0 # total elapsed time excuting an exec graph
ExecGraphIntervals = [] # list of (start, end) pairs ExecGraphIntervals = [] # list of (start, end) pairs
@@ -31,8 +27,7 @@ def read_data(filename):
with open(filename, "r", encoding="utf8") as fh: with open(filename, "r", encoding="utf8") as fh:
re_thread = re.compile(r'^VLPROFTHREAD (\d+)$') re_thread = re.compile(r'^VLPROFTHREAD (\d+)$')
re_record = re.compile(r'^VLPROFEXEC (\S+) (\d+)(.*)$') re_record = re.compile(r'^VLPROFEXEC (\S+) (\d+)(.*)$')
re_payload_mtaskBegin = re.compile( re_payload_mtaskBegin = re.compile(r'id (\d+) predictStart (\d+) cpu (\d+)')
r'id (\d+) predictStart (\d+) cpu (\d+)')
re_payload_mtaskEnd = re.compile(r'id (\d+) predictCost (\d+)') re_payload_mtaskEnd = re.compile(r'id (\d+) predictCost (\d+)')
re_arg1 = re.compile(r'VLPROF arg\s+(\S+)\+([0-9.]*)\s*') re_arg1 = re.compile(r'VLPROF arg\s+(\S+)\+([0-9.]*)\s*')
@@ -41,7 +36,7 @@ def read_data(filename):
re_proc_cpu = re.compile(r'VLPROFPROC processor\s*:\s*(\d+)\s*$') re_proc_cpu = re.compile(r'VLPROFPROC processor\s*:\s*(\d+)\s*$')
re_proc_dat = re.compile(r'VLPROFPROC ([a-z_ ]+)\s*:\s*(.*)$') re_proc_dat = re.compile(r'VLPROFPROC ([a-z_ ]+)\s*:\s*(.*)$')
cpu = None cpu = None
thread = None thread = 0
execGraphStart = None execGraphStart = None
global LongestVcdStrValueLength global LongestVcdStrValueLength
@@ -57,24 +52,21 @@ def read_data(filename):
tick = int(tick) tick = int(tick)
payload = payload.strip() payload = payload.strip()
if kind == "SECTION_PUSH": if kind == "SECTION_PUSH":
LongestVcdStrValueLength = max(LongestVcdStrValueLength, LongestVcdStrValueLength = max(LongestVcdStrValueLength, len(payload))
len(payload))
SectionStack.append(payload) SectionStack.append(payload)
Sections.append((tick, tuple(SectionStack))) Sections[thread].append((tick, tuple(SectionStack)))
elif kind == "SECTION_POP": elif kind == "SECTION_POP":
assert SectionStack, "SECTION_POP without SECTION_PUSH" assert SectionStack, "SECTION_POP without SECTION_PUSH"
SectionStack.pop() SectionStack.pop()
Sections.append((tick, tuple(SectionStack))) Sections[thread].append((tick, tuple(SectionStack)))
elif kind == "MTASK_BEGIN": elif kind == "MTASK_BEGIN":
mtask, predict_start, ecpu = re_payload_mtaskBegin.match( mtask, predict_start, ecpu = re_payload_mtaskBegin.match(payload).groups()
payload).groups()
mtask = int(mtask) mtask = int(mtask)
predict_start = int(predict_start) predict_start = int(predict_start)
ecpu = int(ecpu) ecpu = int(ecpu)
mTaskThread[mtask] = thread mTaskThread[mtask] = thread
records = Threads[thread] records = Threads[thread]
assert not records or records[-1]['start'] <= records[-1][ assert not records or records[-1]['start'] <= records[-1]['end'] <= tick
'end'] <= tick
records.append({ records.append({
'start': tick, 'start': tick,
'mtask': mtask, 'mtask': mtask,
@@ -85,8 +77,7 @@ def read_data(filename):
Mtasks[mtask]['thread'] = thread Mtasks[mtask]['thread'] = thread
Mtasks[mtask]['predict_start'] = predict_start Mtasks[mtask]['predict_start'] = predict_start
elif kind == "MTASK_END": elif kind == "MTASK_END":
mtask, predict_cost = re_payload_mtaskEnd.match( mtask, predict_cost = re_payload_mtaskEnd.match(payload).groups()
payload).groups()
mtask = int(mtask) mtask = int(mtask)
predict_cost = int(predict_cost) predict_cost = int(predict_cost)
begin = Mtasks[mtask]['begin'] begin = Mtasks[mtask]['begin']
@@ -106,6 +97,7 @@ def read_data(filename):
print("-Unknown execution trace record: %s" % line) print("-Unknown execution trace record: %s" % line)
elif re_thread.match(line): elif re_thread.match(line):
thread = int(re_thread.match(line).group(1)) thread = int(re_thread.match(line).group(1))
Sections.append([])
elif re.match(r'^VLPROF(THREAD|VERSION)', line): elif re.match(r'^VLPROF(THREAD|VERSION)', line):
pass pass
elif re_arg1.match(line): elif re_arg1.match(line):
@@ -163,8 +155,7 @@ def report():
print("\nSummary:") print("\nSummary:")
print(" Total elapsed time = {} rdtsc ticks".format(ElapsedTime)) print(" Total elapsed time = {} rdtsc ticks".format(ElapsedTime))
print(" Parallelized code = {:.2%} of elapsed time".format( print(" Parallelized code = {:.2%} of elapsed time".format(ExecGraphTime / ElapsedTime))
ExecGraphTime / ElapsedTime))
print(" Total threads = %d" % nthreads) print(" Total threads = %d" % nthreads)
print(" Total CPUs used = %d" % ncpus) print(" Total CPUs used = %d" % ncpus)
print(" Total mtasks = %d" % len(Mtasks)) print(" Total mtasks = %d" % len(Mtasks))
@@ -176,15 +167,12 @@ def report():
if nthreads > ncpus: if nthreads > ncpus:
print() print()
print("%%Warning: There were fewer CPUs (%d) than threads (%d)." % print("%%Warning: There were fewer CPUs (%d) than threads (%d)." % (ncpus, nthreads))
(ncpus, nthreads))
print(" : See docs on use of numactl.") print(" : See docs on use of numactl.")
else: else:
if 'cpu_socket_cores_warning' in Global: if 'cpu_socket_cores_warning' in Global:
print() print()
print( print("%Warning: Multiple threads scheduled on same hyperthreaded core.")
"%Warning: Multiple threads scheduled on same hyperthreaded core."
)
print(" : See docs on use of numactl.") print(" : See docs on use of numactl.")
if 'cpu_sockets_warning' in Global: if 'cpu_sockets_warning' in Global:
print() print()
@@ -228,8 +216,7 @@ def report_mtasks():
serialTime = ElapsedTime - ExecGraphTime serialTime = ElapsedTime - ExecGraphTime
def subReport(elapsed, work): def subReport(elapsed, work):
print(" Thread utilization = {:7.2%}".format(work / print(" Thread utilization = {:7.2%}".format(work / (elapsed * nthreads)))
(elapsed * nthreads)))
print(" Speedup = {:6.3}x".format(work / elapsed)) print(" Speedup = {:6.3}x".format(work / elapsed))
print("\nParallelized code, measured:") print("\nParallelized code, measured:")
@@ -256,8 +243,7 @@ def report_mtasks():
if Mtasks[mtask]['elapsed'] > 0: if Mtasks[mtask]['elapsed'] > 0:
if Mtasks[mtask]['predict_cost'] == 0: if Mtasks[mtask]['predict_cost'] == 0:
Mtasks[mtask]['predict_cost'] = 1 # don't log(0) below Mtasks[mtask]['predict_cost'] = 1 # don't log(0) below
p2e_ratio = math.log(Mtasks[mtask]['predict_cost'] / p2e_ratio = math.log(Mtasks[mtask]['predict_cost'] / Mtasks[mtask]['elapsed'])
Mtasks[mtask]['elapsed'])
p2e_ratios.append(p2e_ratio) p2e_ratios.append(p2e_ratio)
if p2e_ratio > max_p2e: if p2e_ratio > max_p2e:
@@ -269,18 +255,14 @@ def report_mtasks():
print("\nMTask statistics:") print("\nMTask statistics:")
print(" Longest mtask id = {}".format(long_mtask)) print(" Longest mtask id = {}".format(long_mtask))
print(" Longest mtask time = {:.2%} of time elapsed in parallelized code". print(" Longest mtask time = {:.2%} of time elapsed in parallelized code".format(
format(long_mtask_time / ExecGraphTime)) long_mtask_time / ExecGraphTime))
print(" min log(p2e) = %0.3f" % min_p2e, end="") print(" min log(p2e) = %0.3f" % min_p2e, end="")
print(" from mtask %d (predict %d," % print(" from mtask %d (predict %d," % (min_mtask, Mtasks[min_mtask]['predict_cost']), end="")
(min_mtask, Mtasks[min_mtask]['predict_cost']),
end="")
print(" elapsed %d)" % Mtasks[min_mtask]['elapsed']) print(" elapsed %d)" % Mtasks[min_mtask]['elapsed'])
print(" max log(p2e) = %0.3f" % max_p2e, end="") print(" max log(p2e) = %0.3f" % max_p2e, end="")
print(" from mtask %d (predict %d," % print(" from mtask %d (predict %d," % (max_mtask, Mtasks[max_mtask]['predict_cost']), end="")
(max_mtask, Mtasks[max_mtask]['predict_cost']),
end="")
print(" elapsed %d)" % Mtasks[max_mtask]['elapsed']) print(" elapsed %d)" % Mtasks[max_mtask]['elapsed'])
stddev = statistics.pstdev(p2e_ratios) stddev = statistics.pstdev(p2e_ratios)
@@ -315,8 +297,8 @@ def report_cpus():
model = cpuinfo['model_name'] model = cpuinfo['model_name']
print(" {:3d} | {:7.2%} / {:16d} | {:>6s} | {:>4s} | {}".format( print(" {:3d} | {:7.2%} / {:16d} | {:>6s} | {:>4s} | {}".format(
cpu, Cpus[cpu]['mtask_time'] / ElapsedTime, cpu, Cpus[cpu]['mtask_time'] / ElapsedTime, Cpus[cpu]['mtask_time'], socket, core,
Cpus[cpu]['mtask_time'], socket, core, model)) model))
if len(Global['cpu_sockets']) > 1: if len(Global['cpu_sockets']) > 1:
Global['cpu_sockets_warning'] = True Global['cpu_sockets_warning'] = True
@@ -326,23 +308,27 @@ def report_cpus():
def report_sections(): def report_sections():
if not Sections: for thread, section in enumerate(Sections):
return if section:
print("\nSection profile:") print(f"\nSection profile for thread {thread}:")
report_section(section)
def report_section(section):
totalTime = collections.defaultdict(lambda: 0) totalTime = collections.defaultdict(lambda: 0)
selfTime = collections.defaultdict(lambda: 0) selfTime = collections.defaultdict(lambda: 0)
sectionTree = [0, {}, 1] # [selfTime, childTrees, numberOfTimesEntered] sectionTree = [0, {}, 1] # [selfTime, childTrees, numberOfTimesEntered]
prevTime = 0 prevTime = 0
prevStack = () prevStack = ()
for time, stack in Sections: for time, stack in section:
if len(stack) > len(prevStack): if len(stack) > len(prevStack):
scope = sectionTree scope = sectionTree
for item in stack: for item in stack:
scope = scope[1].setdefault(item, [0, {}, 0]) scope = scope[1].setdefault(item, [0, {}, 0])
scope[2] += 1 scope[2] += 1
dt = time - prevTime dt = time - prevTime
assert dt >= 0
scope = sectionTree scope = sectionTree
for item in prevStack: for item in prevStack:
scope = scope[1].setdefault(item, [0, {}, 0]) scope = scope[1].setdefault(item, [0, {}, 0])
@@ -366,8 +352,8 @@ def report_sections():
def printTree(prefix, name, entries, tree): def printTree(prefix, name, entries, tree):
print(" {:7.2%} | {:7.2%} | {:8} | {:10.2f} | {}".format( print(" {:7.2%} | {:7.2%} | {:8} | {:10.2f} | {}".format(
treeSum(tree) / ElapsedTime, tree[0] / ElapsedTime, tree[2], treeSum(tree) / ElapsedTime, tree[0] / ElapsedTime, tree[2], tree[2] / entries,
tree[2] / entries, prefix + name)) prefix + name))
for k in sorted(tree[1], key=lambda _: -treeSum(tree[1][_])): for k in sorted(tree[1], key=lambda _: -treeSum(tree[1][_])):
printTree(prefix + " ", k, tree[2], tree[1][k]) printTree(prefix + " ", k, tree[2], tree[1][k])
@@ -438,10 +424,8 @@ def write_vcd(filename):
addValue(code, start, mtask) addValue(code, start, mtask)
addValue(code, end, None) addValue(code, end, None)
tStart = sorted(_['start'] for records in Threads.values() tStart = sorted(_['start'] for records in Threads.values() for _ in records)
for _ in records) tEnd = sorted(_['end'] for records in Threads.values() for _ in records)
tEnd = sorted(_['end'] for records in Threads.values()
for _ in records)
# Predicted graph # Predicted graph
for start, end in ExecGraphIntervals: for start, end in ExecGraphIntervals:
@@ -455,11 +439,10 @@ def write_vcd(filename):
# Predict mtasks that fill the time the execution occupied # Predict mtasks that fill the time the execution occupied
for mtask in Mtasks: for mtask in Mtasks:
thread = Mtasks[mtask]['thread'] thread = Mtasks[mtask]['thread']
pred_scaled_start = start + int( pred_scaled_start = start + int(Mtasks[mtask]['predict_start'] * measured_scaling)
Mtasks[mtask]['predict_start'] * measured_scaling)
pred_scaled_end = start + int( pred_scaled_end = start + int(
(Mtasks[mtask]['predict_start'] + (Mtasks[mtask]['predict_start'] + Mtasks[mtask]['predict_cost']) *
Mtasks[mtask]['predict_cost']) * measured_scaling) measured_scaling)
if pred_scaled_start == pred_scaled_end: if pred_scaled_start == pred_scaled_end:
continue continue
@@ -479,12 +462,13 @@ def write_vcd(filename):
addValue(pcode, time, value) addValue(pcode, time, value)
# Section graph # Section graph
if Sections: for thread, section in enumerate(Sections):
scode = getCode(LongestVcdStrValueLength * 8, "section", "trace") if section:
dcode = getCode(32, "section", "depth") scode = getCode(LongestVcdStrValueLength * 8, "section", f"t{thread}_trace")
for time, stack in Sections: dcode = getCode(32, "section", f"t{thread}_depth")
addValue(scode, time, stack[-1] if stack else None) for time, stack in section:
addValue(dcode, time, len(stack)) addValue(scode, time, stack[-1] if stack else None)
addValue(dcode, time, len(stack))
# Create output file # Create output file
fh.write("$version Generated by verilator_gantt $end\n") fh.write("$version Generated by verilator_gantt $end\n")
@@ -537,7 +521,7 @@ def write_vcd(filename):
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
allow_abbrev=False, allow_abbrev=False,
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
description="""Create Gantt chart of multi-threaded execution. description="""Create Gantt chart of Verilator multi-threaded execution
Verilator_gantt creates a visual representation to help analyze Verilator Verilator_gantt creates a visual representation to help analyze Verilator
#xmultithreaded simulation performance, by showing when each macro-task #xmultithreaded simulation performance, by showing when each macro-task
@@ -545,8 +529,7 @@ Verilator_gantt creates a visual representation to help analyze Verilator
For documentation see For documentation see
https://verilator.org/guide/latest/exe_verilator_gantt.html""", https://verilator.org/guide/latest/exe_verilator_gantt.html""",
epilog= epilog="""Copyright 2018-2025 by Wilson Snyder. This program is free software; you
"""Copyright 2018-2024 by Wilson Snyder. This program is free software; you
can redistribute it and/or modify it under the terms of either the GNU can redistribute it and/or modify it under the terms of either the GNU
Lesser General Public License Version 3 or the Perl Artistic License Lesser General Public License Version 3 or the Perl Artistic License
Version 2.0. Version 2.0.
@@ -554,12 +537,8 @@ Version 2.0.
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""") SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
parser.add_argument('--debug', action='store_true', help='enable debug') parser.add_argument('--debug', action='store_true', help='enable debug')
parser.add_argument('--no-vcd', parser.add_argument('--no-vcd', help='disable creating vcd', action='store_true')
help='disable creating vcd', parser.add_argument('--vcd', help='filename for vcd outpue', default='profile_exec.vcd')
action='store_true')
parser.add_argument('--vcd',
help='filename for vcd outpue',
default='profile_exec.vcd')
parser.add_argument('filename', parser.add_argument('filename',
help='input profile_exec.dat filename to process', help='input profile_exec.dat filename to process',
default='profile_exec.dat') default='profile_exec.dat')
+1 -1
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# pylint: disable=C0114,C0209 # pylint: disable=C0114,C0209
# #
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you # Copyright 2003-2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify the Verilator internals under the terms # can redistribute it and/or modify the Verilator internals under the terms
# of either the GNU Lesser General Public License Version 3 or the Perl # of either the GNU Lesser General Public License Version 3 or the Perl
# Artistic License Version 2.0. # Artistic License Version 2.0.
+12 -23
View File
@@ -34,9 +34,8 @@ def profcfunc(filename):
# Older gprofs have no call column for single-call functions # Older gprofs have no call column for single-call functions
# %time cumesec selfsec {stuff} name # %time cumesec selfsec {stuff} name
match = re.match( match = re.match(r'^\s*([0-9.]+)\s+[0-9.]+\s+([0-9.]+)\s+[^a-zA-Z_]*([a-zA-Z_].*)$',
r'^\s*([0-9.]+)\s+[0-9.]+\s+([0-9.]+)\s+[^a-zA-Z_]*([a-zA-Z_].*)$', line)
line)
if match: if match:
pct = float(match.group(1)) pct = float(match.group(1))
sec = float(match.group(2)) sec = float(match.group(2))
@@ -136,19 +135,15 @@ def profcfunc(filename):
design_width = 1 design_width = 1
for func, func_item in vfuncs.items(): for func, func_item in vfuncs.items():
if design_width < len(func_item['design']): design_width = max(design_width, len(func_item['design']))
design_width = len(func_item['design'])
print("Verilog code profile:") print("Verilog code profile:")
print(" These are split into three categories:") print(" These are split into three categories:")
print(" C++: Time in non-Verilated C++ code") print(" C++: Time in non-Verilated C++ code")
print(" Prof: Time in profile overhead") print(" Prof: Time in profile overhead")
print(" VBlock: Time attributable to a block in a" + print(" VBlock: Time attributable to a block in a" + " Verilog file and line")
" Verilog file and line") print(" VCommon: Time in a Verilated module," + " due to all parts of the design")
print(" VCommon: Time in a Verilated module," + print(" VLib: Time in Verilated common libraries," + " called by the Verilated code")
" due to all parts of the design")
print(" VLib: Time in Verilated common libraries," +
" called by the Verilated code")
print() print()
print(" % cumulative self ") print(" % cumulative self ")
@@ -156,13 +151,11 @@ def profcfunc(filename):
"s type filename and line number") % "design") "s type filename and line number") % "design")
cume = 0 cume = 0
for func in sorted(vfuncs.keys(), for func in sorted(vfuncs.keys(), key=lambda f: vfuncs[f]['sec'], reverse=True):
key=lambda f: vfuncs[f]['sec'],
reverse=True):
cume += vfuncs[func]['sec'] cume += vfuncs[func]['sec']
print(("%6.2f %9.2f %8.2f %10d %-" + str(design_width) + "s %s") % print(("%6.2f %9.2f %8.2f %10d %-" + str(design_width) + "s %s") %
(vfuncs[func]['pct'], cume, vfuncs[func]['sec'], (vfuncs[func]['pct'], cume, vfuncs[func]['sec'], vfuncs[func]['calls'],
vfuncs[func]['calls'], vfuncs[func]['design'], func)) vfuncs[func]['design'], func))
###################################################################### ######################################################################
@@ -171,7 +164,7 @@ def profcfunc(filename):
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
allow_abbrev=False, allow_abbrev=False,
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
description="""Read gprof report created with --prof-cfuncs. description="""Read gprof report created with Verilator --prof-cfuncs
Verilator_profcfunc reads a profile report created by gprof. The names of Verilator_profcfunc reads a profile report created by gprof. The names of
the functions are then transformed, assuming the user used Verilator's the functions are then transformed, assuming the user used Verilator's
@@ -180,18 +173,14 @@ in each Verilog block.
For documentation see For documentation see
https://verilator.org/guide/latest/exe_verilator_profcfunc.html""", https://verilator.org/guide/latest/exe_verilator_profcfunc.html""",
epilog= epilog="""Copyright 2002-2025 by Wilson Snyder. This program is free software; you
"""Copyright 2002-2024 by Wilson Snyder. This program is free software; you
can redistribute it and/or modify it under the terms of either the GNU can redistribute it and/or modify it under the terms of either the GNU
Lesser General Public License Version 3 or the Perl Artistic License Lesser General Public License Version 3 or the Perl Artistic License
Version 2.0. Version 2.0.
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""") SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
parser.add_argument('--debug', parser.add_argument('--debug', action='store_const', const=9, help='enable debug')
action='store_const',
const=9,
help='enable debug')
parser.add_argument('filename', help='input gprof output to process') parser.add_argument('filename', help='input gprof output to process')
Args = parser.parse_args() Args = parser.parse_args()
+9 -16
View File
@@ -60,17 +60,14 @@ if [ "$CI_BUILD_STAGE_NAME" = "build" ]; then
sudo apt-get install libgoogle-perftools-dev || sudo apt-get install libgoogle-perftools-dev ||
sudo apt-get install libgoogle-perftools-dev sudo apt-get install libgoogle-perftools-dev
fi fi
if [ "$CI_RUNS_ON" = "ubuntu-20.04" ] || [ "$CI_RUNS_ON" = "ubuntu-22.04" ]; then if [ "$CI_RUNS_ON" = "ubuntu-20.04" ] || [ "$CI_RUNS_ON" = "ubuntu-22.04" ] || [ "$CI_RUNS_ON" = "ubuntu-24.04" ]; then
sudo apt-get install libsystemc libsystemc-dev || sudo apt-get install libsystemc libsystemc-dev ||
sudo apt-get install libsystemc libsystemc-dev sudo apt-get install libsystemc libsystemc-dev
fi fi
if [ "$CI_RUNS_ON" = "ubuntu-22.04" ]; then if [ "$CI_RUNS_ON" = "ubuntu-22.04" ] || [ "$CI_RUNS_ON" = "ubuntu-24.04" ]; then
sudo apt-get install bear mold || sudo apt-get install bear mold ||
sudo apt-get install bear mold sudo apt-get install bear mold
fi fi
if [ "$COVERAGE" = 1 ]; then
yes yes | sudo cpan -fi Parallel::Forker
fi
elif [ "$CI_OS_NAME" = "osx" ]; then elif [ "$CI_OS_NAME" = "osx" ]; then
brew update brew update
brew install ccache perl gperftools brew install ccache perl gperftools
@@ -92,32 +89,28 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
sudo apt-get update || sudo apt-get update ||
sudo apt-get update sudo apt-get update
# libfl-dev needed for internal coverage's test runs # libfl-dev needed for internal coverage's test runs
sudo apt-get install gdb gtkwave lcov libfl-dev ccache jq || sudo apt-get install gdb gtkwave lcov libfl-dev ccache jq z3 ||
sudo apt-get install gdb gtkwave lcov libfl-dev ccache jq sudo apt-get install gdb gtkwave lcov libfl-dev ccache jq z3
# Required for test_regress/t/t_dist_attributes.pl # Required for test_regress/t/t_dist_attributes.py
if [ "$CI_RUNS_ON" = "ubuntu-22.04" ]; then if [ "$CI_RUNS_ON" = "ubuntu-22.04" ] || [ "$CI_RUNS_ON" = "ubuntu-24.04" ]; then
sudo apt-get install python3-clang mold || sudo apt-get install python3-clang mold ||
sudo apt-get install python3-clang mold sudo apt-get install python3-clang mold
fi fi
if [ "$CI_RUNS_ON" = "ubuntu-20.04" ] || [ "$CI_RUNS_ON" = "ubuntu-22.04" ]; then if [ "$CI_RUNS_ON" = "ubuntu-20.04" ] || [ "$CI_RUNS_ON" = "ubuntu-22.04" ] || [ "$CI_RUNS_ON" = "ubuntu-24.04" ]; then
sudo apt-get install libsystemc-dev || sudo apt-get install libsystemc-dev ||
sudo apt-get install libsystemc-dev sudo apt-get install libsystemc-dev
fi fi
elif [ "$CI_OS_NAME" = "osx" ]; then elif [ "$CI_OS_NAME" = "osx" ]; then
brew update brew update
# brew cask install gtkwave # fst2vcd hangs at launch, so don't bother # brew cask install gtkwave # fst2vcd hangs at launch, so don't bother
brew install ccache perl jq brew install ccache perl jq z3
elif [ "$CI_OS_NAME" = "freebsd" ]; then elif [ "$CI_OS_NAME" = "freebsd" ]; then
# fst2vcd fails with "Could not open '<input file>', exiting." # fst2vcd fails with "Could not open '<input file>', exiting."
sudo pkg install -y ccache gmake perl5 python3 jq sudo pkg install -y ccache gmake perl5 python3 jq z3
else else
fatal "Unknown os: '$CI_OS_NAME'" fatal "Unknown os: '$CI_OS_NAME'"
fi fi
# Common installs # Common installs
if [ "$CI_RUNS_ON" != "ubuntu-14.04" ]; then
CI_CPAN_REPO=https://cpan.org
fi
yes yes | sudo cpan -M $CI_CPAN_REPO -fi Parallel::Forker
install-vcddiff install-vcddiff
# Workaround -fsanitize=address crash # Workaround -fsanitize=address crash
sudo sysctl -w vm.mmap_rnd_bits=28 sudo sysctl -w vm.mmap_rnd_bits=28
+6 -5
View File
@@ -33,6 +33,7 @@ elif [ "$CI_OS_NAME" = "freebsd" ]; then
else else
fatal "Unknown os: '$CI_OS_NAME'" fatal "Unknown os: '$CI_OS_NAME'"
fi fi
NPROC=$(expr $NPROC '+' 1)
if [ "$CI_BUILD_STAGE_NAME" = "build" ]; then if [ "$CI_BUILD_STAGE_NAME" = "build" ]; then
############################################################################## ##############################################################################
@@ -61,6 +62,7 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
# Run tests # Run tests
export VERILATOR_TEST_NO_CONTRIBUTORS=1 # Separate workflow check export VERILATOR_TEST_NO_CONTRIBUTORS=1 # Separate workflow check
export VERILATOR_TEST_NO_LINT_PY=1 # Separate workflow check
if [ "$CI_OS_NAME" = "osx" ]; then if [ "$CI_OS_NAME" = "osx" ]; then
export VERILATOR_TEST_NO_GDB=1 # Pain to get GDB to work on OS X export VERILATOR_TEST_NO_GDB=1 # Pain to get GDB to work on OS X
@@ -85,7 +87,7 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
fi fi
# Run sanitize on Ubuntu 22.04 only # Run sanitize on Ubuntu 22.04 only
[ "$CI_RUNS_ON" = 'ubuntu-22.04' ] && sanitize='--sanitize' || sanitize='' ( [ "$CI_RUNS_ON" = 'ubuntu-22.04' ] || [ "$CI_RUNS_ON" = 'ubuntu-24.04' ] ) && sanitize='--sanitize' || sanitize=''
TEST_REGRESS=test_regress TEST_REGRESS=test_regress
if [ "$CI_RELOC" == 1 ]; then if [ "$CI_RELOC" == 1 ]; then
@@ -192,13 +194,12 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
fatal "Unknown test: $TESTS" fatal "Unknown test: $TESTS"
;; ;;
esac esac
# To see load average (1 minute, 5 minute, 15 minute)
uptime
# 22.04: ccache -s -v # 22.04: ccache -s -v
ccache -s ccache -s
# Upload coverage data
if [[ $TESTS == coverage-* ]]; then
bash <(cat ci/coverage-upload.sh) -f nodist/obj_dir/coverage/app_total.info
fi
else else
############################################################################## ##############################################################################
# Unknown build stage # Unknown build stage
+21 -8
View File
@@ -1,13 +1,26 @@
# DESCRIPTION: Verilator: CI Windows Power Shell - Compile Verilator
#
# Copyright 2024 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0.
#
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
################################################################################
Set-PSDebug -Trace 1
if (-Not (Test-Path $PWD/../.ccache/win_bison.exe)) { if (-Not (Test-Path $PWD/../.ccache/win_bison.exe)) {
git clone --depth 1 https://github.com/lexxmark/winflexbison git clone --depth 1 https://github.com/lexxmark/winflexbison
cd winflexbison cd winflexbison
mkdir build mkdir build
cd build cd build
cmake .. --install-prefix $PWD/../../../.ccache cmake .. --install-prefix $PWD/../../../.ccache
cmake --build . --config Release -j 3 cmake --build . --config Release -j 3
cmake --install . --prefix $PWD/../../../.ccache cmake --install . --prefix $PWD/../../../.ccache
cd ../.. cd ../..
} }
mkdir build mkdir build
cd build cd build
cmake .. --install-prefix $PWD/../install cmake .. --install-prefix $PWD/../install
+17 -1
View File
@@ -1,3 +1,16 @@
# DESCRIPTION: Verilator: CI Windows Power Shell - Verilate a test
#
# Copyright 2024 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0.
#
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
################################################################################
Set-PSDebug -Trace 1
cd install cd install
$Env:VERILATOR_ROOT=$PWD $Env:VERILATOR_ROOT=$PWD
cd examples/cmake_tracing_c cd examples/cmake_tracing_c
@@ -5,6 +18,9 @@ mkdir build
cd build cd build
cmake .. cmake ..
cmake --build . --config Release -j 3 cmake --build . --config Release -j 3
Release/example.exe
# TODO put this back in, see issue# 5163
# Release/example.exe
cd .. cd ..
Remove-Item -path build -recurse Remove-Item -path build -recurse
Executable
BIN
View File
Binary file not shown.
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -43,6 +43,7 @@ RUN apt-get update \
perl \ perl \
python3 \ python3 \
wget \ wget \
z3 \
zlib1g \ zlib1g \
zlib1g-dev \ zlib1g-dev \
&& apt-get clean \ && apt-get clean \
@@ -50,8 +51,6 @@ RUN apt-get update \
WORKDIR /tmp WORKDIR /tmp
RUN cpan install -fi Parallel::Forker
RUN git clone https://github.com/veripool/vcddiff.git && \ RUN git clone https://github.com/veripool/vcddiff.git && \
make -C vcddiff && \ make -C vcddiff && \
cp -p vcddiff/vcddiff /usr/local/bin/vcddiff && \ cp -p vcddiff/vcddiff /usr/local/bin/vcddiff && \
+3 -1
View File
@@ -1,6 +1,8 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
.. _Verilator Build Docker Container:
Verilator Build Docker Container Verilator Build Docker Container
================================ ================================
+4 -3
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
Verilator Executable Docker Container Verilator Executable Docker Container
@@ -11,10 +11,11 @@ easily as a docker image, e.g.:
docker run -ti verilator/verilator:latest --version docker run -ti verilator/verilator:latest --version
This will install the container, run the latest Verilator and print This will pull the container from `docker hub
<https://hub.docker.com/r/verilator/verilator>`_, run the latest Verilator and print
Verilator's version. Verilator's version.
Containers are automatically built for all released versions, so you may Containers are automatically built and pushed to docker hub for all released versions, so you may
easily compare results across versions, e.g.: easily compare results across versions, e.g.:
:: ::
+16 -18
View File
@@ -1,6 +1,7 @@
---
# DESCRIPTION: codecov.io config # DESCRIPTION: codecov.io config
# #
# Copyright 2020-2024 by Wilson Snyder. This program is free software; you # Copyright 2020-2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU # can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License # Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0. # Version 2.0.
@@ -8,31 +9,28 @@
#################### ####################
# Validate: # Validate:
# curl --data-binary @codecov.yml https://codecov.io/validate # curl --data-binary @codecov.yml https://codecov.io/validate
#
codecov: codecov:
require_ci_to_pass: no require_ci_to_pass: false
coverage: coverage:
precision: 2 precision: 2
round: down round: down
range: "50...100" range: 50...100
ignore: ignore:
- "ci" - "ci" #
- "docs" - "docs" #
- "examples" - "examples" #
- "include/gtkwave" - "include/gtkwave" #
- "include/vltstd" - "include/vltstd" #
- "test_regress" - "test_regress" #
parsers: parsers:
gcov: gcov:
branch_detection: branch_detection:
conditional: yes conditional: true
loop: yes loop: true
method: no method: false
macro: no macro: false
comment: comment:
layout: "reach,diff,flags,tree" layout: "reach,diff,flags,tree"
behavior: default behavior: default
require_changes: yes require_changes: true
+90 -35
View File
@@ -1,16 +1,16 @@
# DESCRIPTION: Process this file with autoconf to produce a configure script. # DESCRIPTION: Process this file with autoconf to produce a configure script.
# #
# Copyright 2003-2024 by Wilson Snyder. Verilator is free software; you # Copyright 2003-2025 by Wilson Snyder. Verilator is free software; you
# can redistribute it and/or modify it under the terms of either the GNU Lesser # can redistribute it and/or modify it under the terms of either the GNU Lesser
# General Public License Version 3 or the Perl Artistic License Version 2.0. # General Public License Version 3 or the Perl Artistic License Version 2.0.
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 # SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
# When releasing, also update header of Changes file, and CmakeLists.txt, # When releasing, also update header of Changes file, and CMakeLists.txt,
# and commit using "devel release" or "Version bump" message # and commit using "devel release" or "Version bump" message
# Then 'make maintainer-dist' # Then 'make maintainer-dist'
#AC_INIT([Verilator],[#.### YYYY-MM-DD]) #AC_INIT([Verilator],[#.### YYYY-MM-DD])
#AC_INIT([Verilator],[#.### devel]) #AC_INIT([Verilator],[#.### devel])
AC_INIT([Verilator],[5.024 2024-04-05], AC_INIT([Verilator],[5.034 2025-02-24],
[https://verilator.org], [https://verilator.org],
[verilator],[https://verilator.org]) [verilator],[https://verilator.org])
@@ -29,6 +29,9 @@ AC_DEFINE_UNQUOTED([PACKAGE_VERSION_STRING_CHAR],
[Package version as a number]) [Package version as a number])
AC_SUBST(PACKAGE_VERSION_STRING_CHAR) AC_SUBST(PACKAGE_VERSION_STRING_CHAR)
######################################################################
## Arguments/flag checking
# Ignore automake flags passed by Ubuntu builds # Ignore automake flags passed by Ubuntu builds
AC_ARG_ENABLE([dependency-tracking], AC_ARG_ENABLE([dependency-tracking],
[AS_HELP_STRING([--disable-dependency-tracking], [ignored])]) [AS_HELP_STRING([--disable-dependency-tracking], [ignored])])
@@ -134,6 +137,33 @@ AC_ARG_ENABLE([longtests],
AC_SUBST(CFG_WITH_LONGTESTS) AC_SUBST(CFG_WITH_LONGTESTS)
AC_MSG_RESULT($CFG_WITH_LONGTESTS) AC_MSG_RESULT($CFG_WITH_LONGTESTS)
AC_CHECK_PROG(HAVE_Z3,z3,yes)
AC_CHECK_PROG(HAVE_CVC5,cvc5,yes)
AC_CHECK_PROG(HAVE_CVC4,cvc4,yes)
# Special Substitutions - CFG_WITH_SOLVER
AC_MSG_CHECKING(for SMT solver)
AC_ARG_WITH([solver],
[AS_HELP_STRING([--with-solver='z3 --in'],
[set default SMT solver for constrained randomization])],
[CFG_WITH_SOLVER="${withval}"],
[CFG_WITH_SOLVER=no
if test "x$HAVE_Z3" = "xyes"; then
CFG_WITH_SOLVER="z3 --in"
elif test "x$HAVE_CVC5" = "xyes"; then
CFG_WITH_SOLVER="cvc5 --incremental"
elif test "x$HAVE_CVC4" = "xyes"; then
CFG_WITH_SOLVER="cvc4 --lang=smt2 --incremental"
fi]
)
AC_SUBST(CFG_WITH_SOLVER)
AC_MSG_RESULT($CFG_WITH_SOLVER)
######################################################################
## Compiler checks
AC_MSG_RESULT([compiler CXX inbound is set to... $CXX])
# Compiler flags (ensure they are not empty to avoid configure defaults) # Compiler flags (ensure they are not empty to avoid configure defaults)
CFLAGS="$CFLAGS " CFLAGS="$CFLAGS "
CPPFLAGS="$CPPFLAGS " CPPFLAGS="$CPPFLAGS "
@@ -146,8 +176,10 @@ AC_PROG_CXX
AC_PROG_INSTALL AC_PROG_INSTALL
AC_LANG_PUSH(C++) AC_LANG_PUSH(C++)
cxx_version=$($CXX --version | head -1) CFG_CXX_VERSION=`$CXX --version | head -1`
AC_MSG_RESULT([compiler is $CXX --version = $cxx_version]) AC_MSG_RESULT([compiler $CXX --version = $CFG_CXX_VERSION])
AC_SUBST(CFG_CXX_VERSION)
AC_MSG_CHECKING([that C++ compiler can compile simple program]) AC_MSG_CHECKING([that C++ compiler can compile simple program])
AC_RUN_IFELSE( AC_RUN_IFELSE(
[AC_LANG_SOURCE([int main() { return 0; }])], [AC_LANG_SOURCE([int main() { return 0; }])],
@@ -160,24 +192,26 @@ if test "x$AR" = "x" ; then
AC_MSG_ERROR([Cannot find "ar" in your PATH, please install it]) AC_MSG_ERROR([Cannot find "ar" in your PATH, please install it])
fi fi
AC_PATH_PROG(PERL,perl) AC_CHECK_PROG(PERL,perl,perl)
if test "x$PERL" = "x" ; then if test "x$PERL" = "x" ; then
AC_MSG_ERROR([Cannot find "perl" in your PATH, please install it]) AC_MSG_ERROR([Cannot find "perl" in your PATH, please install it])
fi fi
AC_PATH_PROG(PYTHON3,python3) AC_CHECK_PROG(PYTHON3,python3,python3)
if test "x$PYTHON3" = "x" ; then if test "x$PYTHON3" = "x" ; then
AC_MSG_ERROR([Cannot find "python3" in your PATH, please install it]) AC_MSG_ERROR([Cannot find "python3" in your PATH, please install it])
fi fi
python3_version=$($PYTHON3 --version | head -1)
AC_MSG_RESULT([$PYTHON3 --version = $python3_version])
AC_PATH_PROG(LEX,flex) AC_CHECK_PROG(LEX,flex,flex)
if test "x$LEX" = "x" ; then if test "x$LEX" = "x" ; then
AC_MSG_ERROR([Cannot find "flex" in your PATH, please install it]) AC_MSG_ERROR([Cannot find "flex" in your PATH, please install it])
fi fi
flex_version=$($LEX --version | head -1) flex_version=$($LEX --version | head -1)
AC_MSG_RESULT([$LEX --version = $flex_version]) AC_MSG_RESULT([$LEX --version = $flex_version])
AC_PATH_PROG(YACC,bison) AC_CHECK_PROG(YACC,bison,bison)
if test "x$YACC" = "x" ; then if test "x$YACC" = "x" ; then
AC_MSG_ERROR([Cannot find "bison" in your PATH, please install it]) AC_MSG_ERROR([Cannot find "bison" in your PATH, please install it])
fi fi
@@ -266,6 +300,43 @@ AC_DEFUN([_MY_CXX_CHECK_OPT],
_MY_CXX_CHECK_IFELSE($2, $1="$$1 $2") _MY_CXX_CHECK_IFELSE($2, $1="$$1 $2")
]) ])
AC_DEFUN([_MY_CXX_CHECK_CORO_SET],
[# _MY_CXX_CHECK_CORO_SET(variable,option)
# Check if compiler supports coroutines with specific option. If it does,
# set variable to option, only if not previously set.
# Define HAVE_COROUTINES if supported.
if test "$$1" = ""; then
if test "$2" != ""; then
_my_msg_opt=" with $2"
else
_my_msg_opt=""
fi
AC_MSG_CHECKING([whether coroutines are supported by $CXX$_my_msg_opt])
ACO_SAVE_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS $2"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([
#if defined(__clang__) && !defined(__cpp_impl_coroutine)
#define __cpp_impl_coroutine 1
#endif
#include <coroutine>
],[[std::coroutine_handle<> h;]])],
[_my_result=yes],
[AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[#include <experimental/coroutine>],
[[std::experimental::coroutine_handle<> h;]])],
[_my_result=yes],
[_my_result=no])])
AC_MSG_RESULT($_my_result)
CXXFLAGS="$ACO_SAVE_CXXFLAGS"
if test "$_my_result" = "yes" ; then
$1="$2"
AC_DEFINE([HAVE_COROUTINES],[1],[Defined if coroutines are supported by $CXX])
fi
fi
])
AC_DEFUN([_MY_LDLIBS_CHECK_FLAG], AC_DEFUN([_MY_LDLIBS_CHECK_FLAG],
[# _MY_LDLIBS_CHECK_FLAG(flag) -- Check if linker supports specific options [# _MY_LDLIBS_CHECK_FLAG(flag) -- Check if linker supports specific options
# Set $_my_result appropriately # Set $_my_result appropriately
@@ -351,32 +422,12 @@ _MY_CXX_CHECK_OPT(CFG_CXXFLAGS_WEXTRA,-Wthread-safety)
AC_SUBST(CFG_CXXFLAGS_WEXTRA) AC_SUBST(CFG_CXXFLAGS_WEXTRA)
# Flags for coroutine support for dynamic scheduling # Flags for coroutine support for dynamic scheduling
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines-ts) _MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES, "")
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines) _MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines-ts)
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines-ts -Wno-deprecated-experimental-coroutine) _MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines)
_MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines-ts -Wno-deprecated-experimental-coroutine)
_MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES,-std=gnu++20)
AC_SUBST(CFG_CXXFLAGS_COROUTINES) AC_SUBST(CFG_CXXFLAGS_COROUTINES)
# HAVE_COROUTINES
# Check if coroutines are supported at all
AC_MSG_CHECKING([whether coroutines are supported by $CXX])
ACO_SAVE_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS $CFG_CXXFLAGS_COROUTINES"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([
#ifdef __clang__
#define __cpp_impl_coroutine 1
#endif
#include <coroutine>
],[[]])],
[_my_result=yes
AC_DEFINE([HAVE_COROUTINES],[1],[Defined if coroutines are supported by $CXX])],
[AC_LINK_IFELSE(
[AC_LANG_PROGRAM([#include <experimental/coroutine>],[[]])],
[_my_result=yes
AC_DEFINE([HAVE_COROUTINES],[1],[Defined if coroutines are supported by $CXX])],
[_my_result=no])])
AC_MSG_RESULT($_my_result)
CXXFLAGS="$ACO_SAVE_CXXFLAGS"
AC_SUBST(HAVE_COROUTINES) AC_SUBST(HAVE_COROUTINES)
# Flags for compiling Verilator internals including parser always # Flags for compiling Verilator internals including parser always
@@ -427,6 +478,7 @@ m4_foreach([cflag],[
[-Wno-parentheses-equality], [-Wno-parentheses-equality],
[-Wno-shadow], [-Wno-shadow],
[-Wno-sign-compare], [-Wno-sign-compare],
[-Wno-subobject-linkage],
[-Wno-tautological-bitwise-compare], [-Wno-tautological-bitwise-compare],
[-Wno-tautological-compare], [-Wno-tautological-compare],
[-Wno-uninitialized], [-Wno-uninitialized],
@@ -487,7 +539,7 @@ _MY_LDLIBS_CHECK_IFELSE(
[if test "$CFG_WITH_TCMALLOC" != "no"; then [if test "$CFG_WITH_TCMALLOC" != "no"; then
CFG_LIBS="$LTCMALLOC $CFG_LIBS"; CFG_LIBS="$LTCMALLOC $CFG_LIBS";
# If using tcmalloc, add some extra options to make the compiler not assume # If using tcmalloc, add some extra options to make the compiler not assume
# it is using it's own versions of the standard library functions # it is using its own versions of the standard library functions
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-malloc) _MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-malloc)
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-calloc) _MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-calloc)
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-realloc) _MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-realloc)
@@ -584,6 +636,9 @@ AC_SUBST(HAVE_SYSTEMC)
# Checks for system services # Checks for system services
######################################################################
## Output
# Other install directories # Other install directories
pkgdatadir=${datadir}/verilator pkgdatadir=${datadir}/verilator
AC_SUBST(pkgdatadir) AC_SUBST(pkgdatadir)
+6 -6
View File
@@ -7,8 +7,8 @@ This contributing document contains some suggestions that may make
contributions flow more efficiently. contributions flow more efficiently.
Did you find a bug? Did you find a Verilator bug?
------------------- -----------------------------
- Please **ensure the bug was not already reported** by searching - Please **ensure the bug was not already reported** by searching
`Verilator Issues <https://verilator.org/issues>`__. `Verilator Issues <https://verilator.org/issues>`__.
@@ -28,8 +28,8 @@ Did you find a bug?
<https://github.com/verilator/verilator/blob/master/docs/internals.rst>`__. <https://github.com/verilator/verilator/blob/master/docs/internals.rst>`__.
Did you write a patch that fixes a bug? Did you write a patch that fixes a Verilator bug?
--------------------------------------- -------------------------------------------------
- Please `Open a new Verilator issue <https://verilator.org/issues/new>`__ - Please `Open a new Verilator issue <https://verilator.org/issues/new>`__
if there is not one already describing the bug. if there is not one already describing the bug.
@@ -72,8 +72,8 @@ Did you write a patch that fixes a bug?
- Most important is we get your patch. - Most important is we get your patch.
Do you have questions? Do you have questions on Verilator?
---------------------- -----------------------------------
- Please see FAQ section and rest of the `Verilator - Please see FAQ section and rest of the `Verilator
manual <https://verilator.org/verilator_doc.html>`__, or `Verilator manual <https://verilator.org/verilator_doc.html>`__, or `Verilator
+41
View File
@@ -7,22 +7,29 @@ Adam Bagley
Adrian Sampson Adrian Sampson
Adrien Le Masle Adrien Le Masle
Ahmed El-Mahmoudy Ahmed El-Mahmoudy
Aidan McNay
Aleksander Kiryk Aleksander Kiryk
Alex Chadwick Alex Chadwick
Alex Solomatnikov
Àlex Torregrosa Àlex Torregrosa
Aliaksei Chapyzhenka Aliaksei Chapyzhenka
Ameya Vikram Singh Ameya Vikram Singh
Andrea Calabrese
Andreas Kuster Andreas Kuster
Andrei Kostovski Andrei Kostovski
Andrew Miloradovsky Andrew Miloradovsky
Andrew Nolte Andrew Nolte
Anthony Donlon Anthony Donlon
Anthony Moore
Arkadiusz Kozdra Arkadiusz Kozdra
Arthur Rosa
Aylon Chaim Porat Aylon Chaim Porat
Bartłomiej Chmiel Bartłomiej Chmiel
Cameron Kirk Cameron Kirk
Chih-Mao Chen Chih-Mao Chen
Chris Bachhuber
Chris Randall Chris Randall
Christopher Taylor
Chuxuan Wang Chuxuan Wang
Chykon Chykon
Conor McCullough Conor McCullough
@@ -31,16 +38,22 @@ Daniel Bates
David Horton David Horton
David Ledger David Ledger
David Metz David Metz
Dave Sargeant
David Stanford David Stanford
David Turner David Turner
Dercury
Diego Roux
Don Williamson Don Williamson
Drew Ranck Drew Ranck
Drew Taussig Drew Taussig
Driss Hafdi Driss Hafdi
Edgar E. Iglesias Edgar E. Iglesias
Eric Müller
Eric Rippey Eric Rippey
Ethan Sifferman Ethan Sifferman
Eyck Jentzsch Eyck Jentzsch
Furqan Nadir
Fabian Keßler
Fan Shupei Fan Shupei
february cozzocrea february cozzocrea
Felix Neumärker Felix Neumärker
@@ -51,12 +64,15 @@ G-A. Kamendje
Garrett Smith Garrett Smith
Geza Lore Geza Lore
Gianfranco Costamagna Gianfranco Costamagna
Gijs Burghoorn
Glen Gibb Glen Gibb
Gökçe Aydos Gökçe Aydos
Graham Rushton Graham Rushton
Greg Davill
Guokai Chen Guokai Chen
Gus Smith Gus Smith
Gustav Svensk Gustav Svensk
Han Qi
Harald Heckmann Harald Heckmann
Hennadii Chernyshchyk Hennadii Chernyshchyk
Howard Su Howard Su
@@ -70,6 +86,7 @@ Iru Cai
Ivan Vnučec Ivan Vnučec
Iztok Jeras Iztok Jeras
Jake Merdich Jake Merdich
James Bailey
James Hanlon James Hanlon
James Hutchinson James Hutchinson
James Pallister James Pallister
@@ -84,6 +101,7 @@ Jesse Taube
Jevin Sweval Jevin Sweval
Jiacheng Qian Jiacheng Qian
Jiamin Zhu Jiamin Zhu
Jitesh Nayak
Jinyan Xu Jinyan Xu
Jiuyang Liu Jiuyang Liu
Joey Liu Joey Liu
@@ -112,8 +130,12 @@ Kritik Bhimani
Krzysztof Bieganski Krzysztof Bieganski
Krzysztof Boronski Krzysztof Boronski
Krzysztof Boroński Krzysztof Boroński
Krzysztof Obłonczek
Krzysztof Starecki
Kuba Ober Kuba Ober
Larry Doolittle Larry Doolittle
Liam Braun
Luca Colagrande
Ludwig Rogiers Ludwig Rogiers
Lukasz Dalek Lukasz Dalek
Maarten De Braekeleer Maarten De Braekeleer
@@ -127,6 +149,7 @@ Marshal Qiao
Martin Schmidt Martin Schmidt
Martin Stadler Martin Stadler
Matthew Ballance Matthew Ballance
Michael Bikovitsky
Michael Killough Michael Killough
Michaël Lefebvre Michaël Lefebvre
Michal Czyz Michal Czyz
@@ -135,19 +158,26 @@ Miodrag Milanović
Mladen Slijepcevic Mladen Slijepcevic
Morten Borup Petersen Morten Borup Petersen
Mostafa Gamal Mostafa Gamal
Moubarak Jeje
Nandu Raj Nandu Raj
Natan Kreimer
Nathan Graybeal
Nathan Kohagen Nathan Kohagen
Nathan Myers Nathan Myers
Nick Brereton
Nolan Poe Nolan Poe
Oleh Maksymenko Oleh Maksymenko
Patrick Stewart Patrick Stewart
Paul Bowen-Huggett
Paul Swirhun Paul Swirhun
Paul Wright Paul Wright
Pawel Jewstafjew
Pawel Sagan Pawel Sagan
Pengcheng Xu Pengcheng Xu
Peter Debacker Peter Debacker
Peter Horvath Peter Horvath
Peter Monsson Peter Monsson
Philip Axer
Philipp Wagner Philipp Wagner
Pierre-Henri Horrein Pierre-Henri Horrein
Pieter Kapsenberg Pieter Kapsenberg
@@ -157,22 +187,27 @@ Quentin Corradi
Rafal Kapuscik Rafal Kapuscik
Rasfunk Rasfunk
Raynard Qiao Raynard Qiao
Ricardo Barbedo
Richard Myers Richard Myers
Risto Pejašinović Risto Pejašinović
Robert Balas Robert Balas
Rupert Swarbrick Rupert Swarbrick
Ryan Ziegler
Ryszard Rozak Ryszard Rozak
Samuel Riedel Samuel Riedel
Sean Cross Sean Cross
Sebastien Van Cauwenberghe Sebastien Van Cauwenberghe
Sergi Granell Sergi Granell
Seth Pellegrino
Srinivasan Venkataramanan Srinivasan Venkataramanan
Stefan Wallentowitz Stefan Wallentowitz
Stephen Henry Stephen Henry
Steven Hugg Steven Hugg
sumpster
Szymon Gizler Szymon Gizler
Sören Tempel Sören Tempel
Teng Huang Teng Huang
Tom Manner
Tim Hutt Tim Hutt
Tim Snyder Tim Snyder
Tobias Rosenkranz Tobias Rosenkranz
@@ -181,10 +216,13 @@ Todd Strader
Tomasz Gorochowik Tomasz Gorochowik
Topa Topino Topa Topino
Toru Niina Toru Niina
Trung Nguyen
Tudor Timi Tudor Timi
Tymoteusz Blazejczyk Tymoteusz Blazejczyk
Udi Finkelstein Udi Finkelstein
Unai Martinez-Corral Unai Martinez-Corral
Udaya Raj Subedi
Valentin Atepalikhin
Varun Koyyalagunta Varun Koyyalagunta
Vassilis Papaefstathiou Vassilis Papaefstathiou
Veripool API Bot Veripool API Bot
@@ -194,6 +232,8 @@ William D. Jones
Wilson Snyder Wilson Snyder
Xi Zhang Xi Zhang
Yan Xu Yan Xu
Yangyu Chen
Yilou Wang
Yinan Xu Yinan Xu
Yoda Lee Yoda Lee
Yossi Nivin Yossi Nivin
@@ -205,3 +245,4 @@ Zhanglei Wang
Zhou Shen Zhou Shen
Zixi Li Zixi Li
أحمد المحمودي أحمد المحمودي
404allen404
+2 -2
View File
@@ -5,7 +5,7 @@
# #
# Code available from: https://verilator.org # Code available from: https://verilator.org
# #
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you # Copyright 2003-2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU # can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License # Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0. # Version 2.0.
@@ -23,7 +23,7 @@ SPHINXBUILD ?= sphinx-build
SOURCEDIR = guide SOURCEDIR = guide
BUILDDIR = _build BUILDDIR = _build
SPHINXOPTS ?= -c guide SPHINXOPTS ?= -c guide -j 4
ifneq ($(VERILATOR_ANALYTICS_ID),) ifneq ($(VERILATOR_ANALYTICS_ID),)
SPHINXOPTS += -D html_theme_options.analytics_id=$(VERILATOR_ANALYTICS_ID) SPHINXOPTS += -D html_theme_options.analytics_id=$(VERILATOR_ANALYTICS_ID)
endif endif
+3 -9
View File
@@ -23,9 +23,7 @@ class VlSphinxExtract:
outname = match.group(1) outname = match.group(1)
print("Writing %s" % outname) print("Writing %s" % outname)
fhw = open(outname, "w", encoding="utf8") # pylint: disable=consider-using-with fhw = open(outname, "w", encoding="utf8") # pylint: disable=consider-using-with
fhw.write( fhw.write(".. comment: generated by vl_sphinx_extract from " + filename + "\n")
".. comment: generated by vl_sphinx_extract from " +
filename + "\n")
fhw.write(".. code-block::\n") fhw.write(".. code-block::\n")
elif re.match(r'^[=a-zA-Z0-9_]', line): elif re.match(r'^[=a-zA-Z0-9_]', line):
fhw = None fhw = None
@@ -39,18 +37,14 @@ parser = argparse.ArgumentParser(
allow_abbrev=False, allow_abbrev=False,
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
description="""Read a file and extract documentation data.""", description="""Read a file and extract documentation data.""",
epilog= epilog=""" Copyright 2021-2025 by Wilson Snyder. This package is free software;
""" Copyright 2021-2024 by Wilson Snyder. This package is free software;
you can redistribute it and/or modify it under the terms of either the GNU you can redistribute it and/or modify it under the terms of either the GNU
Lesser General Public License Version 3 or the Perl Artistic License Lesser General Public License Version 3 or the Perl Artistic License
Version 2.0. Version 2.0.
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""") SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
parser.add_argument('--debug', parser.add_argument('--debug', action='store_const', const=9, help='enable debug')
action='store_const',
const=9,
help='enable debug')
parser.add_argument('path', help='path to extract from') parser.add_argument('path', help='path to extract from')
Args = parser.parse_args() Args = parser.parse_args()
+3 -8
View File
@@ -18,8 +18,7 @@ class VlSphinxFix:
if os.path.isdir(path): if os.path.isdir(path):
for basefile in os.listdir(path): for basefile in os.listdir(path):
file = os.path.join(path, basefile) file = os.path.join(path, basefile)
if ((basefile != ".") and (basefile != "..") if ((basefile != ".") and (basefile != "..") and basefile not in self.SkipBasenames
and basefile not in self.SkipBasenames
and not os.path.islink(file)): and not os.path.islink(file)):
self.process(file) self.process(file)
elif re.search(r'\.(html|tex)$', path): elif re.search(r'\.(html|tex)$', path):
@@ -54,18 +53,14 @@ parser = argparse.ArgumentParser(
allow_abbrev=False, allow_abbrev=False,
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
description="""Post-process Sphinx HTML.""", description="""Post-process Sphinx HTML.""",
epilog= epilog=""" Copyright 2021-2025 by Wilson Snyder. This package is free software;
""" Copyright 2021-2024 by Wilson Snyder. This package is free software;
you can redistribute it and/or modify it under the terms of either the GNU you can redistribute it and/or modify it under the terms of either the GNU
Lesser General Public License Version 3 or the Perl Artistic License Lesser General Public License Version 3 or the Perl Artistic License
Version 2.0. Version 2.0.
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""") SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
parser.add_argument('--debug', parser.add_argument('--debug', action='store_const', const=9, help='enable debug')
action='store_const',
const=9,
help='enable debug')
parser.add_argument('path', help='path to edit') parser.add_argument('path', help='path to edit')
Args = parser.parse_args() Args = parser.parse_args()
+11
View File
@@ -0,0 +1,11 @@
.. comment: generated by t_lint_pinmissing_bad
.. code-block:: sv
:linenos:
:emphasize-lines: 2
module t;
sub sub(); // <--- Warning
endmodule
module sub
(output port);
endmodule
+4
View File
@@ -0,0 +1,4 @@
.. comment: generated by t_lint_pinmissing_bad
.. code-block::
%Warning-PINMISSING: example.v:1:8 Cell has missing pin: 'port'
+11
View File
@@ -0,0 +1,11 @@
.. comment: generated by t_lint_pkgnodecl_bad
.. code-block:: sv
:linenos:
:emphasize-lines: 2
module t;
initial Pkg::hello(); //<--- Warning
endmodule
package Pkg;
function void hello(); endfunction
endpackage
+4
View File
@@ -0,0 +1,4 @@
.. comment: generated by t_lint_pkgnodecl_bad
.. code-block::
%Error-PKGNODECL: example.v:1:12 Package/class 'Pkg' not found, and needs to be predeclared (IEEE 1800-2023 26.3)
+1 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
**************** ****************
+3 -5
View File
@@ -1,7 +1,7 @@
# pylint: disable=C0103,C0114,C0116,C0301,E0402,W0622 # pylint: disable=C0103,C0114,C0116,C0301,E0402,W0622
# #
# Configuration file for Verilator's Sphinx documentation builder. # Configuration file for Verilator's Sphinx documentation builder.
# Copyright 2003-2024 by Wilson Snyder. # Copyright 2003-2025 by Wilson Snyder.
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 # SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
# #
# This file only contains overridden options. For a full list: # This file only contains overridden options. For a full list:
@@ -23,8 +23,7 @@ def get_vlt_version():
filename = "../../Makefile" filename = "../../Makefile"
with open(filename, "r", encoding="utf8") as fh: with open(filename, "r", encoding="utf8") as fh:
for line in fh: for line in fh:
match = re.search(r"PACKAGE_VERSION *= *([a-z0-9.]+) +([-0-9]+)", match = re.search(r"PACKAGE_VERSION *= *([a-z0-9.]+) +([-0-9]+)", line)
line)
if match: if match:
return match.group(1), match.group(2) return match.group(1), match.group(2)
match = re.search(r"PACKAGE_VERSION *= *([a-z0-9.]+) +devel", line) match = re.search(r"PACKAGE_VERSION *= *([a-z0-9.]+) +devel", line)
@@ -75,8 +74,7 @@ extensions = []
# directories to ignore when looking for source files. # directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path. # This pattern also affects html_static_path and html_extra_path.
exclude_patterns = [ exclude_patterns = [
'_build', 'Thumbs.db', '.DS_Store', 'internals.rst', 'xml.rst', 'gen/ex_*', '_build', 'Thumbs.db', '.DS_Store', 'internals.rst', 'xml.rst', 'gen/ex_*', 'CONTRIBUTING.rst'
'CONTRIBUTING.rst'
] ]
# Warn about refs # Warn about refs
+11 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
.. _Connecting: .. _Connecting:
@@ -407,6 +407,16 @@ only a couple of instructions.
For signal callbacks to work the main loop of the program must call For signal callbacks to work the main loop of the program must call
:code:`VerilatedVpi::callValueCbs()`. :code:`VerilatedVpi::callValueCbs()`.
Verilator also tracks when the model state has been modified via the VPI with
an :code:`evalNeeded` flag. This flag can be checked with :code:`VerilatedVpi::evalNeeded()`
and it can be cleared with :code:`VerilatedVpi::clearEvalNeeded()`. Used together
it is possible to skip :code:`eval()` calls if no model state has been changed
since the last :code:`eval()`.
Any data written via :code:`vpi_put_value` with :code:`vpiInertialDelay` will
be deferred for later. These delayed values can be flushed to the model with
:code:`VerilatedVpi::doInertialPuts()`.
.. _VPI Example: .. _VPI Example:
+30 -12
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
******************************* *******************************
@@ -23,24 +23,24 @@ Next, try the :vlopt:`--debug` option. This will enable additional
internal assertions, and may help identify the problem. internal assertions, and may help identify the problem.
Finally, reduce your code to the smallest possible routine that exhibits Finally, reduce your code to the smallest possible routine that exhibits
the bug. Even better, create a test in the :file:`test_regress/t` the bug (see: :ref:`Minimizing bug-inducing code`). Even better, create
directory, as follows: a test in the :file:`test_regress/t` directory, as follows:
.. code-block:: bash .. code-block:: bash
cd test_regress cd test_regress
cp -p t/t_EXAMPLE.pl t/t_BUG.pl cp -p t/t_EXAMPLE.py t/t_BUG.py
cp -p t/t_EXAMPLE.v t/t_BUG.v cp -p t/t_EXAMPLE.v t/t_BUG.v
There are many hints on how to write a good test in the There are many hints on how to write a good test in the
:file:`test_regress/driver.pl` documentation which can be seen by running: :file:`test_regress/driver.py` documentation which can be seen by running:
.. code-block:: bash .. code-block:: bash
cd $VERILATOR_ROOT # Need the original distribution kit cd $VERILATOR_ROOT # Need the original distribution kit
test_regress/driver.pl --help test_regress/driver.py --help
Edit :file:`t/t_BUG.pl` to suit your example; you can do anything you want Edit :file:`t/t_BUG.py` to suit your example; you can do anything you want
in the Verilog code there; just make sure it retains the single clk input in the Verilog code there; just make sure it retains the single clk input
and no outputs. Now, the following should fail: and no outputs. Now, the following should fail:
@@ -48,20 +48,38 @@ and no outputs. Now, the following should fail:
cd $VERILATOR_ROOT # Need the original distribution kit cd $VERILATOR_ROOT # Need the original distribution kit
cd test_regress cd test_regress
t/t_BUG.pl # Run on Verilator t/t_BUG.py # Run on Verilator
t/t_BUG.pl --debug # Run on Verilator, passing --debug to Verilator t/t_BUG.py --debug # Run on Verilator, passing --debug to Verilator
t/t_BUG.pl --vcs # Run on VCS simulator t/t_BUG.py --vcs # Run on VCS simulator
t/t_BUG.pl --nc|--iv|--ghdl # Likewise on other simulators t/t_BUG.py --nc|--iv|--ghdl # Likewise on other simulators
The test driver accepts a number of options, many of which mirror the main The test driver accepts a number of options, many of which mirror the main
Verilator options. For example the previous test could have been run with Verilator options. For example the previous test could have been run with
debugging enabled. The full set of test options can be seen by running debugging enabled. The full set of test options can be seen by running
:command:`driver.pl --help` as shown above. :command:`driver.py --help` as shown above.
Finally, report the bug at `Verilator Issues Finally, report the bug at `Verilator Issues
<https://verilator.org/issues>`_. The bug will become publicly visible; if <https://verilator.org/issues>`_. The bug will become publicly visible; if
this is unacceptable, mail the bug report to ``[email protected]``. this is unacceptable, mail the bug report to ``[email protected]``.
.. _Minimizing bug-inducing code:
Minimizing bug-inducing code
============================
In some cases, the part of the code that causes the bug is clearly visible
and the design can be easily manually reduced. In other cases, the bug is
caused by a complex interaction of many parts of the design, and it is not
clear which parts are necessary to reproduce the bug. In these cases, an
Open Source tool called `sv-bugpoint
<https://github.com/antmicro/sv-bugpoint>_` can be used to automatically
reduce a SystemVerilog design to the smallest possible reproducer.
It can be used to automatically reduce a design with hundreds of thousands of
lines to a minimal test case while preserving the bug-inducing behavior.
Please refer to the `README
<https://github.com/antmicro/sv-bugpoint/blob/main/README.md>`_ file for more
information on how to use `sv-bugpoint`.
.. Contributing .. Contributing
.. ============ .. ============
+123 -113
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
************************ ************************
@@ -34,130 +34,140 @@ MicroTune Inc., picoChip Designs Ltd., Sun Microsystems Inc., Nauticus
Networks Inc., SiCortex Inc, Shunyao CAD, and Western Digital Inc. Networks Inc., SiCortex Inc, Shunyao CAD, and Western Digital Inc.
The contributors of major functionality are: Jeremy Bennett, Krzysztof The contributors of major functionality are: Jeremy Bennett, Krzysztof
Bieganski, Byron Bradley, Lane Brooks, John Coiner, Duane Galbi, Geza Lore, Bieganski, Byron Bradley, Lane Brooks, John Coiner, Duane Galbi, Arkadiusz
Todd Strader, Yutetsu Takatsukasa, Stefan Wallentowitz, Paul Wasson, Jie Kozdra, Geza Lore, Todd Strader, Yutetsu Takatsukasa, Stefan Wallentowitz,
Xu, and Wilson Snyder. Paul Wasson, Jie Xu, and Wilson Snyder.
Some of the people who have provided ideas, and feedback for Verilator Some of the people who have provided ideas, and feedback for Verilator
include: include:
David Addison, Tariq B. Ahmad, Nikana Anastasiadis, John David Anglin, David Addison, Tariq B. Ahmad, Nikana Anastasiadis, John David Anglin,
Frederic Antonin, Hans Van Antwerpen, Vasu Arasanipalai, Jens Arm, Rohan Frederic Antonin, Hans Van Antwerpen, Vasu Arasanipalai, Jens Arm, Rohan
Arshid, Gökçe Aydos, Adam Bagley, Sharad Bagri, Robert Balas, Marco Arshid, Valentin Atepalikhin, Philip Axer, Gökçe Aydos, Chris Bachhuber,
Balboni, Matthew Ballance, Andrew Bardsley, Ilya Barkov, Matthew Barr, Filip Badáň, Adam Bagley, Sharad Bagri, James Bailey, Robert Balas, Marco
Geoff Barrett, Kaleb Barrett, Daniel Bates, Julius Baxter, Michael Berman, Balboni, Matthew Ballance, Ricardo Barbedo, Andrew Bardsley, Ilya Barkov,
Jean Berniolles, Victor Besyakov, Narayan Bhagavatula, Moinak Matthew Barr, Geoff Barrett, Kaleb Barrett, Daniel Bates, Julius Baxter,
Bhattacharyya, Kritik Bhimani, David Biancolin, David Binderman, Piotr Michael Berman, Jean Berniolles, Victor Besyakov, Narayan Bhagavatula,
Binkowski, Johan Björk, David Black, Tymoteusz Blazejczyk, Scott Bleiweiss, Moinak Bhattacharyya, Kritik Bhimani, David Biancolin, Krzysztof Bieganski,
David van der Bokke, Daniel Bone, Guy Bonneau, Krzysztof Boroński, Gregg Michael Bikovitsky, David Binderman, Piotr Binkowski, Johan Björk, David
Bouchard, Christopher Boumenot, Nick Bowler, Bryan Brady, Maarten De Black, Tymoteusz Blazejczyk, Scott Bleiweiss, David van der Bokke, Daniel
Braekeleer, Charlie Brej, J Briquet, John Brownlee, KC Buckenmaier, Jeff Bone, Guy Bonneau, Krzysztof Boroński, Gregg Bouchard, Christopher
Bush, Lawrence Butcher, Tony Bybell, Iru Cai, Ted Campbell, Anthony Campos, Boumenot, Paul Bowen-Huggett, Nick Bowler, Bryan Brady, Maarten De
Chris Candler, Lauren Carlson, Gregory Carver, Donal Casey, Sebastien Van Braekeleer, Liam Braun, Charlie Brej, J Briquet, John Brownlee, KC
Cauwenberghe, Alex Chadwick, Greg Chadwick, Marcel Chang, Aliaksei Buckenmaier, Gijs Burghoorn, Jeff Bush, Lawrence Butcher, Tony Bybell, Iru
Chapyzhenka, Chih-Mao Chen, Guokai Chen, Terry Chen, Yi-Chung Chen, Yurii Cai, Ted Campbell, Anthony Campos, Chris Candler, Lauren Carlson, Gregory
Cherkasov, Hennadii Chernyshchyk, Enzo Chi, Robert A. Clark, Ryan Clarke, Carver, Donal Casey, Sebastien Van Cauwenberghe, Alex Chadwick, Greg
Allan Cochrane, Keith Colbert, Quentin Corradi, Nassim Corteggiani, Chadwick, Marcel Chang, Aliaksei Chapyzhenka, Chih-Mao Chen, Guokai Chen,
Kefa Chen, Terry Chen, Yangyu Chen, Yi-Chung Chen, Yurii Cherkasov,
Hennadii Chernyshchyk, Enzo Chi, Bartłomiej Chmiel, Robert A. Clark, Ryan
Clarke, Allan Cochrane, Keith Colbert, Quentin Corradi, Nassim Corteggiani,
Gianfranco Costamagna, February Cozzocrea, Sean Cross, George Cuan, Michal Gianfranco Costamagna, February Cozzocrea, Sean Cross, George Cuan, Michal
Czyz, Joe DErrico, Jim Dai, Lukasz Dalek, Laurens van Dam, Gunter Czyz, Joe DErrico, Jim Dai, Lukasz Dalek, Laurens van Dam, Gunter
Dannoritzer, Ashutosh Das, Julian Daube, Bernard Deadman, Peter Debacker, Dannoritzer, Ashutosh Das, Julian Daube, Greg Davill, Bernard Deadman,
John Demme, Mike Denio, John Deroo, Philip Derrick, Aadi Desai, John Peter Debacker, Josse Van Delm, John Demme, Mike Denio, John Deroo, Philip
Dickol, Ruben Diez, Danny Ding, Jacko Dirks, Ivan Djordjevic, Brad Dobbie, Derrick, Aadi Desai, John Dickol, Ruben Diez, Danny Ding, Jacko Dirks, Ivan
Paul Donahue, Jonathon Donaldson, Anthony Donlon, Caleb Donovick, Larry Djordjevic, Brad Dobbie, Paul Donahue, Jonathon Donaldson, Anthony Donlon,
Doolittle, Leendert van Doorn, Sebastian Dressler, Jonathan Drolet, Maciej Caleb Donovick, Larry Doolittle, Leendert van Doorn, Sebastian Dressler,
Dudek, Alex Duller, Jeff Dutton, Tomas Dzetkulic, Usuario Eda, Charles Jonathan Drolet, Justin Yao Du, Maciej Dudek, Alex Duller, Jeff Dutton,
Eddleston, Chandan Egbert, Joe Eiler, Ahmed El-Mahmoudy, Trevor Elbourne, Tomas Dzetkulic, Usuario Eda, Charles Eddleston, Chandan Egbert, Joe Eiler,
Mats Engstrom, Robert Farrell, Julien Faucher, Olivier Faure, Eugen Fekete, Ahmed El-Mahmoudy, Trevor Elbourne, Mats Engstrom, Robert Farrell, Julien
Fabrizio Ferrandi, Udi Finkelstein, Brian Flachs, Bill Flynn, Andrea Faucher, Olivier Faure, Eugene Feinberg, Eugen Fekete, Fabrizio Ferrandi,
Foletto, Alex Forencich, Aurelien Francillon, Bob Fredieu, Manuel Udi Finkelstein, Brian Flachs, Bill Flynn, Andrea Foletto, Alex Forencich,
Freiberger, Mostafa Gamal, Vito Gamberini, Mostafa Garnal, Benjamin Aurelien Francillon, Bob Fredieu, Manuel Freiberger, Mostafa Gamal, Vito
Gartner, Christian Gelinek, Richard E George, Peter Gerst, Glen Gibb, Gamberini, Mostafa Garnal, Benjamin Gartner, Christian Gelinek, Richard E
Michael Gielda, Barbara Gigerl, Nimrod Gileadi, Shankar Giri, Dan George, Peter Gerst, Glen Gibb, Michael Gielda, Barbara Gigerl, Nimrod
Gisselquist, Petr Gladkikh, Sam Gladstone, Mariusz Glebocki, Embedded Go, Gileadi, Shankar Giri, Dan Gisselquist, Szymon Gizler, Petr Gladkikh, Sam
Andrew Goessling, Amir Gonnen, Chitlesh Goorah, Tomasz Gorochowik, Kai Gladstone, Mariusz Glebocki, Embedded Go, Andrew Goessling, Amir Gonnen,
Gossner, Tarik Graba, Sergi Granell, Al Grant, Nathan Graybeal, Alexander Chitlesh Goorah, Tomasz Gorochowik, Kai Gossner, Tarik Graba, Sergi
Grobman, Qian Gu, Xuan Guo, Prabhat Gupta, Driss Hafdi, Neil Hamilton, Granell, Al Grant, Nathan Graybeal, Alexander Grobman, Qian Gu, Xuan Guo,
James Hanlon, Tang Haojin, Øyvind Harboe, Jannis Harder, David Harris, Prabhat Gupta, Deniz Güzel, Driss Hafdi, Abdul Hameed, Neil Hamilton, James
Junji Hashimoto, Thomas Hawkins, Mitch Hayenga, Harald Heckmann, Robert Hanlon, Tang Haojin, Øyvind Harboe, Jannis Harder, David Harris, Junji
Henry, Stephen Henry, Sebastian Hesselbarth, David Hewson, Jamey Hicks, Hashimoto, Thomas Hawkins, Mitch Hayenga, Harald Heckmann, Robert Henry,
Joel Holdsworth, Andrew Holme, Peter Holmes, Hiroki Honda, Alex Hornung, Stephen Henry, Sebastian Hesselbarth, David Hewson, Jamey Hicks, Joel
Holdsworth, Andrew Holme, Peter Holmes, Hiroki Honda, Alex Hornung,
Pierre-Henri Horrein, David Horton, Peter Horvath, Jae Hossell, Kuoping Pierre-Henri Horrein, David Horton, Peter Horvath, Jae Hossell, Kuoping
Hsu, Teng Huang, Steven Hugg, Huanghuang Zhou, Alan Hunter, James Hsu, Shou-Li Hsu, Teng Huang, Steven Hugg, Alan Hunter, James Hutchinson,
Hutchinson, Tim Hutt, Ehab Ibrahim, Edgar E. Iglesias, Shahid Ikram, Jamie Tim Hutt, Ehab Ibrahim, Edgar E. Iglesias, Shahid Ikram, Jamie Iles, Fuad
Iles, Vighnesh Iyer, Ben Jackson, Daniel Jacques, Shareef Jalloq, Marlon Ismail, Vighnesh Iyer, Ben Jackson, Daniel Jacques, Shareef Jalloq, Marlon
James, Krzysztof Jankowski, Eyck Jentzsch, HyungKi Jeong, Iztok Jeras, James, Krzysztof Jankowski, Eyck Jentzsch, HyungKi Jeong, Iztok Jeras,
Alexandre Joannou, James Johnson, Christophe Joly, Justin Jones, Pawel Jewstafjew, Alexandre Joannou, James Johnson, Christophe Joly, Justin
William D. Jones, Larry Darryl Lee Jr., Franck Jullien, James Jung, Jones, William D. Jones, Abe Jordan, Larry Darryl Lee Jr., Franck Jullien,
Yoshitomo Kaneda, Mike Kagen, Arthur Kahlich, Kaalia Kahn, Guy-Armand James Jung, Mike Kagen, Arthur Kahlich, Kaalia Kahn, Guy-Armand Kamendje,
Kamendje, Vasu Kandadi, Kanad Kanhere, Patricio Kaplan, Pieter Kapsenberg, Vasu Kandadi, Yoshitomo Kaneda, Kanad Kanhere, Patricio Kaplan, Pieter
Rafal Kapuscik, Ralf Karge, Per Karlsson, Dan Katz, Sol Katzman, Ian Kapsenberg, Rafal Kapuscik, Ralf Karge, Per Karlsson, Dan Katz, Sol
Kennedy, Ami Keren, Michael Killough, Sun Kim, Jonathan Kimmitt, Olof Katzman, Ian Kennedy, Ami Keren, Fabian Keßler, Michael Killough, Sun Kim,
Kindgren, Kevin Kiningham, Cameron Kirk, Dan Kirkham, Aleksander Kiryk, Jonathan Kimmitt, Olof Kindgren, Kevin Kiningham, Cameron Kirk, Dan
Sobhan Klnv, Gernot Koch, Jack Koenig, Soon Koh, Nathan Kohagen, Steve Kirkham, Aleksander Kiryk, Sobhan Klnv, Gernot Koch, Jack Koenig, Soon Koh,
Kolecki, Brett Koonce, Will Korteland, Andrei Kostovski, Wojciech Koszek, Nathan Kohagen, Steve Kolecki, Brett Koonce, Will Korteland, Andrei
Varun Koyyalagunta, Arkadiusz Kozdra, Markus Krause, David Kravitz, Adam Kostovski, Wojciech Koszek, Varun Koyyalagunta, Arkadiusz Kozdra, Markus
Krolnik, Roland Kruse, Mahesh Kumashikar, Andreas Kuster, Sergey Kvachonok, Krause, David Kravitz, Adam Krolnik, Roland Kruse, Mahesh Kumashikar,
Charles Eric LaForest, Kevin Laeufer, Ed Lander, Steve Lang, Pierre Andreas Kuster, Sergey Kvachonok, Charles Eric LaForest, Kevin Laeufer, Ed
Laroche, Stephane Laurent, Walter Lavino, Christian Leber, David Ledger, Lander, Steve Lang, Pierre Laroche, Stephane Laurent, Walter Lavino,
Alex Lee, Larry Lee, Yoda Lee, Michaël Lefebvre, Dag Lem, Igor Lesik, John Christian Leber, David Ledger, Alex Lee, Larry Lee, Yoda Lee, Michaël
Li, Kay Li, Zixi Li, Davide Libenzi, Nandor Licker, Eivind Liland, Ícaro Lefebvre, Dag Lem, Igor Lesik, John Li, Kay Li, Zixi Li, Davide Libenzi,
Lima, Kevin Lin, Yu-Sheng Lin, Charlie Lind, Andrew Ling, Jiuyang Liu, Joey Nandor Licker, Eivind Liland, Ícaro Lima, Kevin Lin, Yu-Sheng Lin, Charlie
Liu, Paul Liu, Derek Lockhart, Jake Longo, Arthur Low, Jose Loyola, Stefan Lind, Andrew Ling, Jiuyang Liu, Joey Liu, Paul Liu, Derek Lockhart, Jake
Ludwig, Dan Lussier, Konstantin Lübeck, Fred Ma, Liwei Ma, Duraid Madina, Longo, Geza Lore, Arthur Low, Jose Loyola, Stefan Ludwig, Dan Lussier,
Oleh Maksymenko, Affe Mao, Julien Margetts, Chick Markley, Alexis Marquet, Konstantin Lübeck, Fred Ma, Liwei Ma, Duraid Madina, Oleh Maksymenko, Affe
Mark Marshall, Alfonso Martinez, Unai Martinez-Corral, Adrien Le Masle, Mao, Julien Margetts, Chick Markley, Alexis Marquet, Mark Marshall, Alfonso
Yves Mathieu, Vladimir Matveyenko, Patrick Maupin, Stan Mayer, Conor Martinez, Unai Martinez-Corral, Adrien Le Masle, Yves Mathieu, Vladimir
McCullough, Jason McMullan, Elliot Mednick, Yuan Mei, Andy Meier, Matveyenko, Patrick Maupin, Stan Mayer, Jordan McConnon, Conor McCullough,
Jason McMullan, Elliot Mednick, Yuan Mei, Andy Meier, Luiza de Melo,
Rodrigo A. Melo, Benjamin Menküc, Jake Merdich, David Metz, Wim Michiels, Rodrigo A. Melo, Benjamin Menküc, Jake Merdich, David Metz, Wim Michiels,
Miodrag Milanović, Darryl Miles, Kevin Millis, Andrew Miloradovsky, Wai Sum Miodrag Milanović, Darryl Miles, Kevin Millis, Andrew Miloradovsky, David
Mong, Peter Monsson, Sean Moore, Stuart Morris, Dennis Muhlestein, John Moberg, Wai Sum Mong, Peter Monsson, Anthony Moore, Sean Moore, Stuart
Murphy, Matt Myers, Nathan Myers, Richard Myers, Alex Mykyta, Dimitris Morris, Dennis Muhlestein, John Murphy, Matt Myers, Nathan Myers, Richard
Nalbantis, Peter Nelson, Felix Neumärker, Bob Newgard, Cong Van Nguyen, Myers, Alex Mykyta, Eric Müller, Dimitris Nalbantis, Peter Nelson, Felix
Rachit Nigam, Toru Niina, Paul Nitza, Yossi Nivin, Pete Nixon, Lisa Noack, Neumärker, Bob Newgard, Cong Van Nguyen, Rachit Nigam, Toru Niina, Paul
Mark Nodine, Michael Nolan, Andrew Nolte, Joseph Nwabueze, Kuba Ober, Nitza, Yossi Nivin, Pete Nixon, Lisa Noack, Mark Nodine, Michael Nolan,
Andreas Olofsson, Baltazar Ortiz, Aleksander Osman, Don Owen, Tim Paine, Andrew Nolte, Joseph Nwabueze, Kevin Nygaard, Kuba Ober, Krzysztof
Deepa Palaniappan, James Pallister, Vassilis Papaefstathiou, Sanggyu Park, Obłonczek, Andreas Olofsson, Baltazar Ortiz, Aleksander Osman, Don Owen,
Brad Parker, Risto Pejašinović, Morten Borup Petersen, Dan Petrisko, Wesley Tim Paine, Deepa Palaniappan, James Pallister, Vassilis Papaefstathiou,
Piard, Maciej Piechotka, David Pierce, Cody Piersall, T. Platz, Michael Sanggyu Park, Brad Parker, Risto Pejašinović, Seth Pellegrino, Morten Borup
Platzer, Dominic Plunkett, David Poole, Michael Popoloski, Roman Popov, Petersen, Dan Petrisko, Wesley Piard, Maciej Piechotka, David Pierce, Cody
Aylon Chaim Porat, Oron Port, Rich Porter, Rick Porter, Stefan Post, Piersall, T. Platz, Michael Platzer, Dominic Plunkett, Nolan Poe, David
Niranjan Prabhu, Damien Pretet, Harald Pretl, Bill Pringlemeir, Usha Poole, Michael Popoloski, Roman Popov, Aylon Chaim Porat, Oron Port, Rich
Priyadharshini, Mark Jackson Pulver, Prateek Puri, Jiacheng Qian, Marshal Porter, Rick Porter, Stefan Post, Niranjan Prabhu, Damien Pretet, Harald
Qiao, Raynard Qiao, Yujia Qiao, Jasen Qin, Frank Qiu, Nandu Raj, Kamil Pretl, Bill Pringlemeir, Usha Priyadharshini, Mark Jackson Pulver, Prateek
Rakoczy, Danilo Ramos, Drew Ranck, Chris Randall, Anton Rapp, Josh Redford, Puri, Han Qi, Jiacheng Qian, Marshal Qiao, Raynard Qiao, Yujia Qiao, Jasen
Odd Magne Reitan, Frédéric Requin, Dustin Richmond, Samuel Riedel, Alberto Qin, Frank Qiu, Nandu Raj, Kamil Rakoczy, Danilo Ramos, Drew Ranck, Chris
Del Rio, Eric Rippey, Oleg Rodionov, Ludwig Rogiers, Paul Rolfe, Michail Randall, Anton Rapp, Josh Redford, Odd Magne Reitan, Frédéric Requin,
Rontionov, Arjen Roodselaar, Tobias Rosenkranz, Yernagula Roshit, Ryszard Dustin Richmond, Samuel Riedel, Alberto Del Rio, Eric Rippey, Narcis Rodas,
Oleg Rodionov, Ludwig Rogiers, Paul Rolfe, Michail Rontionov, Arjen
Roodselaar, Arthur Rosa, Tobias Rosenkranz, Yernagula Roshit, Ryszard
Rozak, Huang Rui, Graham Rushton, Jan Egil Ruud, Denis Rystsov, Pawel Rozak, Huang Rui, Graham Rushton, Jan Egil Ruud, Denis Rystsov, Pawel
Sagan, Robert Sammelson, John Sanguinetti, Josep Sans, Luca Sasselli, Sagan, Robert Sammelson, Adrian Sampson, John Sanguinetti, Josep Sans, Luca
Martin Scharrer, Martin Schmidt, Julie Schwartz, Galen Seitz, Joseph Sasselli, Martin Scharrer, Martin Schmidt, Jonathan Schröter, Julie
Shaker, Mark Shaw, Salman Sheikh, Zhou Shen, Hao Shi, James Shi, Michael Schwartz, Galen Seitz, Sam Shahrestani, Joseph Shaker, Mark Shaw, Salman
Shinkarovsky, Rafael Shirakawa, Jeffrey Short, S Shuba, Fan Shupei, Ethan Sheikh, Zhou Shen, Hao Shi, James Shi, Michael Shinkarovsky, Rafael
Sifferman, Anderson Ignacio da Silva, Rodney Sinclair, Ameya Vikram Singh, Shirakawa, Jeffrey Short, S Shuba, Fan Shupei, Ethan Sifferman, Anderson
Sanjay Singh, Frans Skarman, Nate Slager, Steven Slatter, Mladen Ignacio da Silva, Rodney Sinclair, Ameya Vikram Singh, Sanjay Singh, Frans
Slijepcevic, Brian Small, Garrett Smith, Gus Smith, Tim Snyder, Maciej Skarman, Nate Slager, Steven Slatter, Mladen Slijepcevic, Brian Small,
Sobkowski, Stan Sokorac, Alex Solomatnikov, Flavien Solt, Wei Song, Trefor Garrett Smith, Gus Smith, Tim Snyder, Maciej Sobkowski, Stan Sokorac, Alex
Southwell, Martin Stadler, Art Stamness, David Stanford, John Stevenson, Solomatnikov, Flavien Solt, Wei Song, Trefor Southwell, Martin Stadler, Art
Pete Stevenson, Patrick Stewart, Rob Stoddard, Tood Strader, John Stroebel, Stamness, David Stanford, Krzysztof Starecki, Baruch Sterin, John
Ray Strouble, Sven Stucki, Howard Su, Emerson Suguimoto, Gene Sullivan, Stevenson, Pete Stevenson, Patrick Stewart, Rob Stoddard, Tood Strader,
Qingyao Sun, Renga Sundararajan, Kuba Sunderland-Ober, Gustav Svensk, John Stroebel, Ray Strouble, Sven Stucki, Howard Su, Udaya Raj Subedi,
Rupert Swarbrick, Jevin Sweval, Shinya T-Y, Thierry Tambe, Jesse Taube, Emerson Suguimoto, Gene Sullivan, Qingyao Sun, Renga Sundararajan, Kuba
Drew Taussig, Jose Tejada, Sören Tempel, Peter Tengstrand, Wesley Terpstra, Sunderland-Ober, Gustav Svensk, Rupert Swarbrick, Jevin Sweval, Paul
Rui Terra, Stefan Thiede, Justin Thiel, Gary Thomas, Ian Thompson, Kevin Swirhun, Shinya T-Y, Thierry Tambe, Jesse Taube, Drew Taussig, Christopher
Thompson, Mike Thyer, Hans Tichelaar, Tudor Timi, Viktor Tomov, Steve Tong, Taylor, Greg Taylor, Jose Tejada, Sören Tempel, Peter Tengstrand, Wesley
Topa Topino, Àlex Torregrosa, Topa Tota, Michael Tresidder, Lenny Truong, Terpstra, Rui Terra, Stefan Thiede, Justin Thiel, Gary Thomas, Ian
David Turner, Neil Turton, Hideto Ueno, Mike Urbach, Joel Vandergriendt, Thompson, Kevin Thompson, Mike Thyer, Hans Tichelaar, Tudor Timi, Viktor
Srini Vemuri, Srinivasan Venkataramanan, Yuri Victorovich, Ivan Vnučec, Tomov, Steve Tong, Topa Topino, Àlex Torregrosa, Topa Tota, Michael
Bogdan Vukobratovic, Holger Waechtler, Philipp Wagner, Johannes Walter, CY Tresidder, Lenny Truong, David Turner, Neil Turton, Hideto Ueno, Mike
Wang, Chuxuan Wang, Shawn Wang, Zhanglei Wang, Greg Waters, Thomas Watts, Urbach, Joel Vandergriendt, Srini Vemuri, Srinivasan Venkataramanan, Yuri
Eugene Weber, John Wehle, Tianrui Wei, David Welch, Thomas J Whatson, Victorovich, Ivan Vnučec, Bogdan Vukobratovic, Holger Waechtler, Philipp
Martin Whitaker, Marco Widmer, Leon Wildman, Daniel S. Wilkerson, Daniel Wagner, Stefan Wallentowitz, Johannes Walter, CY Wang, Chuxuan Wang, Shawn
Wilkerson, Gerald Williams, Trevor Williams, Don Williamson, Jan Van Wang, Yilou Wang, Zhanglei Wang, Greg Waters, Thomas Watts, Eugene Weber,
Winkel, Jeff Winston, Joshua Wise, Clifford Wolf, Johan Wouters, Paul John Wehle, Tianrui Wei, David Welch, Thomas J Whatson, Martin Whitaker,
Wright, Tobias Wölfel, Junyi Xi, Ding Xiaoliang, Liu Xiaoyi, Mandy Xu, Marco Widmer, Leon Wildman, Daniel S. Wilkerson, Daniel Wilkerson, Gerald
Shanshan Xu, Yinan Xu, SU YANG, Felix Yan, Luke Yang, Amir Yazdanbakhsh, Williams, Trevor Williams, Don Williamson, Jan Van Winkel, Jeff Winston,
Chentai (Seven) Yuan, Florian Zaruba, Mat Zeno, Keyi Zhang, Xi Zhang, Yike Joshua Wise, Clifford Wolf, Johan Wouters, Paul Wright, Tobias Wölfel,
Zhou, Jiamin Zhu. Junyi Xi, Ding Xiaoliang, Liu Xiaoyi, Jinyan Xu, Mandy Xu, Pengcheng Xu,
Shanshan Xu, Yan Xu, Yinan Xu, SU YANG, Felix Yan, Jiaxun Yang, Luke Yang,
Amir Yazdanbakhsh, Chentai (Seven) Yuan, Florian Zaruba, Mat Zeno, Keyi
Zhang, Xi Zhang, Huanghuang Zhou, Yike Zhou, Jiamin Zhu, Ryan Ziegler.
Thanks to them, and all those we've missed mentioning above, and to those Thanks to them, and all those we've missed mentioning above, and to those
whom have wished to remain anonymous. whom have wished to remain anonymous.
+2 -2
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
********* *********
@@ -8,7 +8,7 @@ Copyright
The latest version of Verilator is available from `https://verilator.org The latest version of Verilator is available from `https://verilator.org
<https://verilator.org>`_. <https://verilator.org>`_.
Copyright 2003-2024 by Wilson Snyder. This program is free software; you Copyright 2003-2025 by Wilson Snyder. This program is free software; you
can redistribute it and/or modify the Verilator internals under the terms can redistribute it and/or modify the Verilator internals under the terms
of either the GNU Lesser General Public License Version 3 or the Perl of either the GNU Lesser General Public License Version 3 or the Perl
Artistic License Version 2.0. Artistic License Version 2.0.
+6 -3
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
Deprecations Deprecations
@@ -12,8 +12,11 @@ C++14 compiler support
Verilated models with --no-timing. Verilated models with --no-timing.
Verilator will require C++20 or newer compilers for both compiling Verilator will require C++20 or newer compilers for both compiling
Verilator and compiling all Verilated models no sooner than January 2025. Verilator and compiling all Verilated models no sooner than May 2025.
(Likely to be removed shortly after GitHub removes Ubuntu 20.04
continuous-integration action runners, which are used to test the older
C++ standard).
XML output XML output
Verilator currently supports XML parser output (enabled with `--xml-only`). Verilator currently supports XML parser output (enabled with `--xml-only`).
Support for `--xml-*` options will be deprecated no sooner than January 2025. Support for `--xml-*` options will be deprecated no sooner than January 2026.
+7 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
Environment Environment
@@ -118,6 +118,12 @@ associated programs.
See :ref:`Installation` for more details. See :ref:`Installation` for more details.
.. option:: VERILATOR_SOLVER
If set, the command to run as a constrained randomization backend, such
as :command:`cvc4 --lang=smt2 --incremental`. If not specified, it will use
the one supplied or found during configure, or :command:`z3 --in` if empty.
.. option:: VERILATOR_VALGRIND .. option:: VERILATOR_VALGRIND
If set, the command to run when using the :vlopt:`--valgrind` option, such as If set, the command to run when using the :vlopt:`--valgrind` option, such as
+1 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
.. _Example Create-Binary Execution: .. _Example Create-Binary Execution:
+1 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
.. _Example C++ Execution: .. _Example C++ Execution:
+1 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
First you need Verilator installed, see :ref:`Installation`. In brief, if First you need Verilator installed, see :ref:`Installation`. In brief, if
+1 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
.. _Examples in the Distribution: .. _Examples in the Distribution:
+2 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
.. _Example SystemC Execution: .. _Example SystemC Execution:
@@ -28,6 +28,7 @@ Now, let's create an example Verilog, and SystemC wrapper file:
cat >sc_main.cpp <<'EOF' cat >sc_main.cpp <<'EOF'
#include "Vour.h" #include "Vour.h"
using namespace sc_core;
int sc_main(int argc, char** argv) { int sc_main(int argc, char** argv) {
Verilated::commandArgs(argc, argv); Verilated::commandArgs(argc, argv);
sc_clock clk{"clk", 10, SC_NS, 0.5, 3, SC_NS, true}; sc_clock clk{"clk", 10, SC_NS, 0.5, 3, SC_NS, true};
+1 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
.. _Examples: .. _Examples:
+3 -3
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
.. _Simulation Runtime Arguments: .. _Simulation Runtime Arguments:
@@ -40,8 +40,8 @@ Summary:
.. option:: +verilator+error+limit+<value> .. option:: +verilator+error+limit+<value>
Set number of non-fatal errors (e.g. assertion failures) before exiting Set number of non-fatal errors (e.g. assertion failures) before exiting
simulation runtime. Also affects number of $stop calls needed before simulation runtime. Also affects number of `$stop` calls needed before
exit. Defaults to 1. exit. Does not affect `$fatal`. Defaults to 1.
.. option:: +verilator+help .. option:: +verilator+help
+209 -62
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
verilator Arguments verilator Arguments
@@ -222,6 +222,13 @@ Summary:
expressions into sub-expressions to avoid error C1009, and breaking expressions into sub-expressions to avoid error C1009, and breaking
deep blocks into functions to avoid error C1061. deep blocks into functions to avoid error C1061.
.. option:: --compiler-include <header-path>
Specifies additional headers to be included in the final PCH header.
It is required to add them to this header, due to compilers'
limitation that allow only one precompiled header per compilation.
Use this instead of ::vlopt:`-CFLAGS` with `-include <header-path>`.
.. option:: --converge-limit <loops> .. option:: --converge-limit <loops>
Rarely needed. Specifies the maximum number of runtime iterations Rarely needed. Specifies the maximum number of runtime iterations
@@ -230,7 +237,17 @@ Summary:
.. option:: --coverage .. option:: --coverage
Enables all forms of coverage, an alias for :vlopt:`--coverage-line` Enables all forms of coverage, an alias for :vlopt:`--coverage-line`
:vlopt:`--coverage-toggle` :vlopt:`--coverage-user`. :vlopt:`--coverage-toggle` :vlopt:`--coverage-expr` :vlopt:`--coverage-user`.
.. option:: --coverage-expr
Enables expression coverage analysis. See :ref:`Expression Coverage`.
.. option:: --coverage-expr-max <value>
Rarely needed. Specifies the maximum number of permutations able to be
covered for a given expression. Defaults to 32. Increasing may slow
coverage simulations and make analyzing the results unwieldy.
.. option:: --coverage-line .. option:: --coverage-line
@@ -473,8 +490,14 @@ Summary:
out. Beware of enabling debugging messages, as they will also go to out. Beware of enabling debugging messages, as they will also go to
standard out. See :vlopt:`--no-std`, which is implied by this. standard out. See :vlopt:`--no-std`, which is implied by this.
See also :vlopt:`--dump-defines`, :vlopt:`-P`, and See also :vlopt:`--dump-defines`, :vlopt:`-P`, :vlopt:`--pp-comments`
:vlopt:`--pp-comments` options. and :vlopt:`--preproc-resolve` options.
.. option:: --emit-accessors
Emit getter and setter methods for each top-level signal in the
model top class. Signals are still available as public members,
but with the `__Vm_sig_` prefix.
.. option:: --error-limit <value> .. option:: --error-limit <value>
@@ -576,10 +599,18 @@ Summary:
.. option:: -fno-expand .. option:: -fno-expand
.. option:: -fno-func-opt
.. option:: -fno-func-opt-balance-cat
.. option:: -fno-func-opt-split-cat
.. option:: -fno-gate .. option:: -fno-gate
.. option:: -fno-inline .. option:: -fno-inline
.. option:: -fno-inline-funcs
.. option:: -fno-life .. option:: -fno-life
.. option:: -fno-life-post .. option:: -fno-life-post
@@ -596,6 +627,8 @@ Summary:
.. option:: -fno-reorder .. option:: -fno-reorder
.. option:: -fno-slice
.. option:: -fno-split .. option:: -fno-split
.. option:: -fno-subst .. option:: -fno-subst
@@ -710,6 +743,13 @@ Summary:
:option:`/*verilator&32;hier_block*/` metacomment is ignored. See :option:`/*verilator&32;hier_block*/` metacomment is ignored. See
:ref:`Hierarchical Verilation`. :ref:`Hierarchical Verilation`.
.. option:: --hierarchical-params-file <filename>
Internal flag inserted used during :vlopt:`--hierarchical`; specifies
name of hierarchical parameters file for deparametrized modules with
:option:`/*verilator&32;hier_block*/` metacomment. See
:ref:`Hierarchical Verilation`.
.. option:: -I<dir> .. option:: -I<dir>
See :vlopt:`-y`. See :vlopt:`-y`.
@@ -721,7 +761,10 @@ Summary:
.. option:: +incdir+<dir> .. option:: +incdir+<dir>
See :vlopt:`-y`. See :vlopt:`-y`. Unlike with :vlopt:`-y`, multiple directories may be
specified separated with a `+` symbol; this is for Verilog-XL
compatibility and is not recommended usage as this is not supported by
some third-party tools.
.. option:: --inline-mult <value> .. option:: --inline-mult <value>
@@ -749,6 +792,38 @@ Summary:
the number of threads in the current hardware. Otherwise, must be a the number of threads in the current hardware. Otherwise, must be a
positive integer specifying the maximum number of parallel build jobs. positive integer specifying the maximum number of parallel build jobs.
.. option:: --json-only
Create JSON output only, do not create any other output.
The JSON format is intended to be used to leverage Verilator's parser and
elaboration to feed to other downstream tools. For details on the format, see
the Verilator Internals manual. Be aware that the JSON
format is still evolving; there will be some changes in future versions.
This option disables some more aggressive transformations and dumps only
the final state of the AST. For more granular and unaltered dumps, meant
mainly for debugging see :vlopt:`--dump-tree-json`.
.. option:: --json-only-meta-output <filename>
Specifies the filename for the metadata output file (`.tree.meta.json`) of --json-only.
Using this option automatically sets :vlopt:`--json-only`.
.. option:: --json-only-output <filename>
Specifies the filename for the main output file (`.tree.json`) of --json-only.
Using this option automatically sets :vlopt:`--json-only`.
.. option:: --no-json-edit-nums
Don't dump edit number in .tree.json files. This may make the file more
run-to-run stable for easier comparison.
.. option:: --no-json-ids
Don't use short identifiers instead of addresses/paths in .tree.json.
.. option:: --l2-name <value> .. option:: --l2-name <value>
Instead of using the module name when showing Verilog scope, use the Instead of using the module name when showing Verilog scope, use the
@@ -817,6 +892,11 @@ Summary:
If the design is not to be completely Verilated, see also the If the design is not to be completely Verilated, see also the
:vlopt:`--bbox-sys` and :vlopt:`--bbox-unsup` options. :vlopt:`--bbox-sys` and :vlopt:`--bbox-unsup` options.
.. option:: --localize-max-size <value>
Rarely needed. Set the maximum variable size in bytes for it to be
subject to localizing-to-stack optimization. Defaults to 1024.
.. option:: --make <build-tool> .. option:: --make <build-tool>
Generates a script for the specified build tool. Generates a script for the specified build tool.
@@ -933,6 +1013,22 @@ Summary:
delayed assignments. This option should only be used when suggested by delayed assignments. This option should only be used when suggested by
the developers. the developers.
.. option:: --output-groups <numfiles>
Enables concatenating the output .cpp files into the given number of
effective output .cpp files. This is useful if the compiler startup
overhead from compiling many small files becomes unacceptable,
which can happen in designs making extensive use of SystemVerilog classes,
templates or generate blocks.
Using :vlopt:`--output-groups` can adversely impact caching and stability
(as in reproducibility) of compiled code. Compilation of larger .cpp
files also has higher memory requirements. Too low values might result in
swap thrashing with large designs, high values give no benefits. The
value should range from 2 to 20 for small to medium designs.
Default is zero, which disables this feature.
.. option:: --output-split <statements> .. option:: --output-split <statements>
Enables splitting the output .cpp files into multiple outputs. When a Enables splitting the output .cpp files into multiple outputs. When a
@@ -985,6 +1081,13 @@ Summary:
:option:`/*verilator&32;sc_bv*/` metacomment to select specific ports to :option:`/*verilator&32;sc_bv*/` metacomment to select specific ports to
be sc_bv. be sc_bv.
.. option:: --pins-inout-enables
Specifies that the __en and __out outputs will always be created for
inouts in the top-level module. The __en variable has a one in a bit
position to indicate the corresponding bit of the __out variable has
a value being driven from within the Verilated model.
.. option:: --pins-sc-uint .. option:: --pins-sc-uint
Specifies SystemC inputs/outputs greater than 2 bits wide should use Specifies SystemC inputs/outputs greater than 2 bits wide should use
@@ -992,6 +1095,10 @@ Summary:
:vlopt:`--pins-sc-biguint` combination, it results in sc_uint being used :vlopt:`--pins-sc-biguint` combination, it results in sc_uint being used
between 2 and 64 and sc_biguint being used between 65 and 512. between 2 and 64 and sc_biguint being used between 65 and 512.
.. option:: --pins-sc-uint-bool
Specifies SystemC inputs/outputs one bit wide should use sc_uint<1>.
.. option:: --pins-sc-biguint .. option:: --pins-sc-biguint
Specifies SystemC inputs/outputs greater than 65 bits wide should use Specifies SystemC inputs/outputs greater than 65 bits wide should use
@@ -1045,6 +1152,20 @@ Summary:
prepended to the name of the :vlopt:`--top` option, or V prepended to prepended to the name of the :vlopt:`--top` option, or V prepended to
the first Verilog filename passed on the command line. the first Verilog filename passed on the command line.
.. option:: --preproc-resolve
With :vlopt:`-E`, resolve referenced instance modules, to include
preprocessed output of submodules. Used to convert a multi-file design
into a single output file.
See :vlopt:`-E`.
.. option:: --preproc-token-limit <value>
Rarely needed. Configure the limit of the number of tokens Verilator
can process on a single line to prevent infinite loops and other hangs.
Defaults to 40000 tokens.
.. option:: --private .. option:: --private
Opposite of :vlopt:`--public`. This is the default; this option exists for Opposite of :vlopt:`--public`. This is the default; this option exists for
@@ -1146,6 +1267,13 @@ Summary:
module specifically enabled it with module specifically enabled it with
:option:`/*verilator&32;inline_module*/`. :option:`/*verilator&32;inline_module*/`.
.. option:: --public-depth <level>
Enables public as with :vlopt:`--public-flat-rw`, but only to the specified depth of modules.
It operates at the module maximum level, so if a module's cells are A.B.X and A.X, the
a --public-depth 3 must be used to make module X public, and both A.B.X and A.X will be public.
.. option:: --public-flat-rw .. option:: --public-flat-rw
Declares all variables, ports, and wires public as if they had Declares all variables, ports, and wires public as if they had
@@ -1157,11 +1285,12 @@ Summary:
marking only those signals that need public_flat_rw is typically marking only those signals that need public_flat_rw is typically
significantly better performing. significantly better performing.
.. option:: --public-depth <level> .. option:: --public-ignore
Enables public as with :vlopt:`--public-flat-rw`, but only to the specified depth of modules. Ignore all :code:`/*verilator public* */` metacomments. This is useful
It operates at the module maximum level, so if a module's cells are A.B.X and A.X, the for speed-optimizing VPI builds where VPI is not being used. This only
a --public-depth 3 must be used to make module X public, and both A.B.X and A.X will be public. affects metacomments; options such as :vlopt:`--public`,
:vlopt:`--public-depth`, etc. work normally.
.. option:: --public-params .. option:: --public-params
@@ -1169,6 +1298,7 @@ Summary:
:code:`/*verilator public_flat_rd*/` :code:`/*verilator public_flat_rd*/`
metacomments. metacomments.
.. option:: -pvalue+<name>=<value> .. option:: -pvalue+<name>=<value>
Overwrites the given parameter(s) of the top-level module. See Overwrites the given parameter(s) of the top-level module. See
@@ -1305,7 +1435,17 @@ Summary:
.. option:: --no-std .. option:: --no-std
Prevents parsing standard library. Prevents parsing standard input files, alias for
:vlopt:`--no-std-package`, :vlopt:`--no-std-waiver`. This may be extended
to prevent reading other standardized files in future versions.
.. option:: --no-std-package
Prevents parsing standard `std::` package file.
.. option:: --no-std-waiver
Prevents parsing standard lint waivers (`verilated_std_waiver.vlt`).
.. option:: --no-stop-fail .. option:: --no-stop-fail
@@ -1585,6 +1725,15 @@ Summary:
Enable the use of VPI and linking against the :file:`verilated_vpi.cpp` files. Enable the use of VPI and linking against the :file:`verilated_vpi.cpp` files.
.. option:: --waiver-multiline
When using :vlopt:`--waiver-output \<filename\> <--waiver-output>`,
include a match expression that includes the entire multiline error
message as a match regular expression, as opposed to the default of only
matching the first line of the error message. This provides a starting
point for creating complex waivers, but such generated waivers will
likely require editing for brevity before being reused.
.. option:: --waiver-output <filename> .. option:: --waiver-output <filename>
Generate a waiver file that contains all waiver statements to suppress Generate a waiver file that contains all waiver statements to suppress
@@ -1689,18 +1838,19 @@ Summary:
``-Wwarn-CASEX`` ``-Wwarn-CASTCONST`` ``-Wwarn-CMPCONST`` ``-Wwarn-CASEX`` ``-Wwarn-CASTCONST`` ``-Wwarn-CMPCONST``
``-Wwarn-COLONPLUS`` ``-Wwarn-IMPLICIT`` ``-Wwarn-IMPLICITSTATIC`` ``-Wwarn-COLONPLUS`` ``-Wwarn-IMPLICIT`` ``-Wwarn-IMPLICITSTATIC``
``-Wwarn-LATCH`` ``-Wwarn-MISINDENT`` ``-Wwarn-NEWERSTD`` ``-Wwarn-LATCH`` ``-Wwarn-MISINDENT`` ``-Wwarn-NEWERSTD``
``-Wwarn-PINMISSING`` ``-Wwarn-REALCVT`` ``-Wwarn-STATICVAR`` ``-Wwarn-PREPROCZERO`` ``-Wwarn-PINMISSING`` ``-Wwarn-REALCVT``
``-Wwarn-UNSIGNED`` ``-Wwarn-WIDTHTRUNC`` ``-Wwarn-WIDTHEXPAND`` ``-Wwarn-STATICVAR`` ``-Wwarn-UNSIGNED`` ``-Wwarn-WIDTHTRUNC``
``-Wwarn-WIDTHXZEXPAND``. ``-Wwarn-WIDTHEXPAND`` ``-Wwarn-WIDTHXZEXPAND``.
.. option:: -Wwarn-style .. option:: -Wwarn-style
Enable all code style-related warning messages. This is equivalent to Enable all code style-related warning messages. This is equivalent to
``-Wwarn-ASSIGNDLY`` ``-Wwarn-DECLFILENAME`` ``-Wwarn-DEFPARAM`` ``-Wwarn-ASSIGNDLY`` ``-Wwarn-BLKSEQ`` ``-Wwarn-DECLFILENAME``
``-Wwarn-EOFNEWLINE`` ``-Wwarn-GENUNNAMED`` ``-Wwarn-INCABSPATH`` ``-Wwarn-DEFPARAM`` ``-Wwarn-EOFNEWLINE`` ``-Wwarn-GENUNNAMED``
``-Wwarn-IMPORTSTAR`` ``-Wwarn-INCABSPATH`` ``-Wwarn-PINCONNECTEMPTY``
``-Wwarn-PINNOCONNECT`` ``-Wwarn-SYNCASYNCNET`` ``-Wwarn-UNDRIVEN`` ``-Wwarn-PINNOCONNECT`` ``-Wwarn-SYNCASYNCNET`` ``-Wwarn-UNDRIVEN``
``-Wwarn-UNUSEDGENVAR`` ``-Wwarn-UNUSEDPARAM`` ``-Wwarn-UNUSEDSIGNAL`` ``-Wwarn-UNUSEDGENVAR`` ``-Wwarn-UNUSEDLOOP`` ``-Wwarn-UNUSEDPARAM``
``-Wwarn-VARHIDDEN``. ``-Wwarn-UNUSEDSIGNAL`` ``-Wwarn-VARHIDDEN``.
.. option:: --x-assign 0 .. option:: --x-assign 0
@@ -1732,9 +1882,9 @@ Summary:
.. note:: .. note::
This option applies only to values explicitly written as X This option applies only to values explicitly written as X in modules
in modules (not classes) in the Verilog source code. Initial values (not classes, nor parameters) in the Verilog source code. Initial
of clocks are set to 0 unless `--x-initial-edge` is values of clocks are set to 0 unless `--x-initial-edge` is
specified. Initial values of all other state holding variables are specified. Initial values of all other state holding variables are
controlled with `--x-initial`. controlled with `--x-initial`.
@@ -1799,38 +1949,6 @@ Summary:
iterations. This may be another indication of problems with the iterations. This may be another indication of problems with the
modeled design that should be addressed. modeled design that should be addressed.
.. option:: --json-only
Create JSON output only, do not create any other output.
The JSON format is intended to be used to leverage Verilator's parser and
elaboration to feed to other downstream tools. For details on the format, see
the Verilator Internals manual. Be aware that the JSON
format is still evolving; there will be some changes in future versions.
This option disables some more aggressive transformations and dumps only
the final state of the AST. For more granular and unaltered dumps, meant
mainly for debugging see :vlopt:`--dump-tree-json`.
.. option:: --json-only-meta-output <filename>
Specifies the filename for the metadata output file (`.tree.meta.json`) of --json-only.
Using this option automatically sets :vlopt:`--json-only`.
.. option:: --json-only-output <filename>
Specifies the filename for the main output file (`.tree.json`) of --json-only.
Using this option automatically sets :vlopt:`--json-only`.
.. option:: --no-json-edit-nums
Don't dump edit number in .tree.json files. This may make the file more
run-to-run stable for easier comparison.
.. option:: --no-json-ids
Don't use short identifiers instead of addresses/paths in .tree.json.
.. option:: --xml-only .. option:: --xml-only
Create XML output only, do not create any other output. Create XML output only, do not create any other output.
@@ -1873,8 +1991,12 @@ Configuration Files
In addition to the command line, warnings and other features for the In addition to the command line, warnings and other features for the
:command:`verilator` command may be controlled with configuration files, :command:`verilator` command may be controlled with configuration files,
typically named with the .vlt extension (what makes it a configuration file typically named with the `.vlt` extension (what makes it a configuration
is the :option:`\`verilator_config` directive). An example: file is the :option:`\`verilator_config` directive). These files, when
named `.vlt`, are read before source code files; if this behavior is
undesired, name the config file with a `.v` suffix.
An example:
.. code-block:: sv .. code-block:: sv
@@ -1967,6 +2089,13 @@ The grammar of configuration commands is as follows:
that the setting is ignored unless the :vlopt:`--hierarchical` option is that the setting is ignored unless the :vlopt:`--hierarchical` option is
specified. See :ref:`Hierarchical Verilation`. specified. See :ref:`Hierarchical Verilation`.
.. option:: hier_params -module "<modulename>"
Specifies that the module contains parameters a :vlopt:`--hierarchical` block. This option
is used internally to specify parameters for deparametrized hier block instances.
This option should not be used directly.
See :ref:`Hierarchical Verilation`.
.. option:: inline -module "<modulename>" .. option:: inline -module "<modulename>"
Specifies the module may be inlined into any modules that use this Specifies the module may be inlined into any modules that use this
@@ -2004,7 +2133,7 @@ The grammar of configuration commands is as follows:
.. option:: lint_off [-rule <message>] [-file "<filename>" [-lines <line> [ - <line>]]] .. option:: lint_off [-rule <message>] [-file "<filename>" [-lines <line> [ - <line>]]]
.. option:: lint_off [-rule <message>] [-file "<filename>"] [-match "<string>"] .. option:: lint_off [-rule <message>] [-file "<filename>"] [-contents "<wildcard>"] [-match "<wildcard>"]
Enable/disables the specified lint warning, in the specified filename Enable/disables the specified lint warning, in the specified filename
(or wildcard with '\*' or '?', or all files if omitted) and range of (or wildcard with '\*' or '?', or all files if omitted) and range of
@@ -2013,17 +2142,28 @@ The grammar of configuration commands is as follows:
With lint_off using "\*" will override any lint_on directives in the With lint_off using "\*" will override any lint_on directives in the
source, i.e. the warning will still not be printed. source, i.e. the warning will still not be printed.
If the -rule is omitted, all lint warnings (see list in If the :code:`-rule` is omitted, all lint warnings (see list in
:vlopt:`-Wno-lint`) are enabled/disabled. This will override all later :vlopt:`-Wno-lint`) are enabled/disabled. This will override all later
lint warning enables for the specified region. lint warning enables for the specified region.
If -match is set, the linter warnings are matched against this If :code:`-contents` is provided, the input files must contain the given
(wildcard) string and are waived in case they match, provided with the wildcard (with '\*' or '?'), and are waived in case they match, provided
rule and file also match. the :code:`-rule`, :code:`-file`, and :code:`-contents` also match. The
wildcard should be designed to match a single line; it is unspecified if
the wildcard is allowed to match across multiple lines. The input
contents does not include :vlopt:`--std <--no-std>` standard files, nor
configuration files (with :code:`verilator_config`). Typical use for
this is to match a version number present in the Verilog sources, so
that the waiver will only apply to that version of the sources.
In previous versions -rule was named -msg. The latter is deprecated, but If :code:`-match` is provided, the linter warnings are matched against
still works with a deprecation info; it may be removed in future the given wildcard (with '\*' or '?'), and are waived in case they
versions. match, provided the :code:`-rule`, :code:`-file`, and :code:`-contents`
also match. The wildcard is compared across the entire multi-line
message; see :vlopt:`--waiver-multiline`.
Before version 4.026, :code:`-rule` was named :code:`-msg`, and
:code:`-msg` remained a deprecated alias until Version 5.000.
.. option:: public [-module "<modulename>"] [-task/-function "<taskname>"] -var "<signame>" .. option:: public [-module "<modulename>"] [-task/-function "<taskname>"] -var "<signame>"
@@ -2038,6 +2178,13 @@ The grammar of configuration commands is as follows:
:option:`/*verilator&32;public_flat*/`, etc., metacomments. See :option:`/*verilator&32;public_flat*/`, etc., metacomments. See
also :ref:`VPI Example`. also :ref:`VPI Example`.
.. option:: profile_data -hier-dpi "<function_name>" -cost <cost_value>
Internal profiling data inserted during :vlopt:`--hierarchical`; specifies
execution cost of a hierarchical DPI wrappers for modules with
:option:`/*verilator&32;hier_block*/` metacomment. See
:ref:`Hierarchical Verilation`.
.. option:: profile_data -mtask "<mtask_hash>" -cost <cost_value> .. option:: profile_data -mtask "<mtask_hash>" -cost <cost_value>
Feeds profile-guided optimization data into the Verilator algorithms in Feeds profile-guided optimization data into the Verilator algorithms in
+30 -29
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
verilator_coverage verilator_coverage
@@ -35,11 +35,11 @@ verilator_coverage Example Usage
verilator_coverage --help verilator_coverage --help
verilator_coverage --version verilator_coverage --version
verilator_coverage --annotate <obj> verilator_coverage --annotate obj_dir coverage.dat
verilator_coverage -write merged.dat -read <datafiles>... verilator_coverage --write merged.dat coverage.dat ...
verilator_coverage -write-info merged.info -read <datafiles>... verilator_coverage --write-info merged.info coverage.dat ...
verilator_coverage Arguments verilator_coverage Arguments
@@ -58,32 +58,36 @@ to read multiple inputs. If no data file is specified, by default,
Specifies the directory name to which source files with annotated coverage Specifies the directory name to which source files with annotated coverage
data should be written. data should be written.
Converting from the Verilator coverage data format to the info format is Points are children of each line coverage- branches, expressions or toggle points.
lossy; the info will have all forms of coverage merged line coverage, and When point counts are aggregated into a line, the minimum and maximum counts
if there are multiple coverage points on a single line they will merge. are used to determine the status of the line (complete, partial, failing)
The minimum coverage across all merged points will be used to report The count is equal to the maximum of the points.
coverage of the line.
Coverage data is annotated at the beginning of the line and is formatted Coverage data is annotated at the beginning of the line and is formatted
as a special character followed by the number of coverage hits. The special as a special character followed by the number of coverage hits. The special
characters " ,%,+,-" indicate summary of the coverage, and allow use of grep characters " ,%,~,+,-" indicate summary of the coverage, and allow use of grep
to filter the report. to filter the report.
* " " (whitespace) indicates that all points on the line are above the coverage limit. * " " (whitespace) indicates that all points on the line are above the coverage min.
* "%" indicates at least one point on the line was below the coverage limit. * "%" indicates that all points on the line are below the coverage min.
* "+" coverage point was at or above the limit. Only used with :option:`--annotate-points`. * "~" indicates that some points on the line are above the coverage min and some are below.
* "-" coverage point was below the limit. Only used with :option:`--annotate-points`. * "+" coverage point was at or above the min. Only used with :option:`--annotate-points`.
* "-" coverage point was below the min. Only used with :option:`--annotate-points`.
.. code-block:: .. code-block::
100000 input logic a; // Begins with whitespace, because 100000 input logic a; // Begins with whitespace, because
// number of hits (100000) is above the limit. // number of hits (100000) is above the min.
+100000 point: comment=a // Begins with +, because +100000 point: comment=a // Begins with +, because
// number of hits (100000) is above the limit. // number of hits (100000) is above the min.
%000000 input logic b; // Begins with %, because %000000 input logic b; // Begins with %, because
// number of hits (0) is below the limit. // number of hits (0) is below the min.
-000000 point: comment=b // Begins with -, because -000000 point: comment=b // Begins with -, because
// number of hits (0) is below the limit. // number of hits (0) is below the min.
~000010 if (cyc!=0) begin // Begins with ~, because
// branches are below and above the min.
+000010 point: comment=if // The if branch is above the min.
-000000 point: comment=else // The else branch is below the min.
.. option:: --annotate-all .. option:: --annotate-all
@@ -154,10 +158,7 @@ generated from random test runs) into one master coverage file.
Specifies the aggregate coverage results, summed across all the files, Specifies the aggregate coverage results, summed across all the files,
should be written to the given filename in :command:`lcov` .info format. should be written to the given filename in :command:`lcov` .info format.
This may be used to feed into :command:`lcov` to aggregate or generate This may be used to feed into :command:`lcov` to aggregate or generate
reports. reports. This format lacks the comments for cover points that the
verilator_coverage format has. It can be used with :command:`genhtml`
Converting from the Verilator coverage data format to the info format is to generate an HTML report. :command:`genhtml --branch-coverage` will
lossy; the info will have all forms of coverage merged line coverage, and also display the branch coverage, analogous to :option:`--annotate-points`
if there are multiple coverage points on a single line they will merge.
The minimum coverage across all merged points will be used to report
coverage of the line.
+12 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
verilator_gantt verilator_gantt
@@ -62,6 +62,17 @@ predicted_thread#_mtask
executing. executing.
verilator_gantt Example Usage
-----------------------------
..
verilator_gantt --help
verilator_gantt --version
verilator_gantt profile_exec.dat
verilator_gantt Arguments verilator_gantt Arguments
------------------------- -------------------------
+12 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
verilator_profcfunc verilator_profcfunc
@@ -15,6 +15,17 @@ reported as a rounding error.
For an overview of the use of verilator_profcfunc, see :ref:`Profiling`. For an overview of the use of verilator_profcfunc, see :ref:`Profiling`.
verilator_profcfunc Example Usage
---------------------------------
..
verilator_profcfunc --help
verilator_profcfunc --version
verilator_profcfunc gprof.out
verilator_profcfunc Arguments verilator_profcfunc Arguments
----------------------------- -----------------------------
+1 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
********************************* *********************************
+1 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
******************* *******************
+6 -4
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
****************************** ******************************
@@ -259,9 +259,11 @@ How do I view waveforms (aka dumps or traces)?
"""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""
Verilator creates standard VCD (Value Change Dump) and FST files. VCD Verilator creates standard VCD (Value Change Dump) and FST files. VCD
files are viewable with the open-source GTKWave (recommended), or Dinotrace files are viewable with the open-source
(legacy) programs, or any of the many closed-source offerings; FST is `GTKWave <http://gtkwave.sourceforge.net/>`_,
supported only by GTKWave. `Surfer <https://surfer-project.org/>`_, Dinotrace (legacy), or any of the
many closed-source viewer offerings; FST is supported only by GTKWave and
Surfer.
How do I speed up writing large waveform (trace) files? How do I speed up writing large waveform (trace) files?
+13 -11
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
***** *****
@@ -48,12 +48,6 @@ For --cc/--sc, it creates:
- Make include file for compiling (from --make gmake) - Make include file for compiling (from --make gmake)
* - *{prefix}*\ _classes.mk * - *{prefix}*\ _classes.mk
- Make include file with class names (from --make gmake) - Make include file with class names (from --make gmake)
* - *{prefix}*\ _hier.mk
- Make file for hierarchy blocks (from --make gmake)
* - *{prefix}*\ __hierMkArgs.f
- Arguments for hierarchical Verilation (from --make gmake)
* - *{prefix}*\ __hierCMakeArgs.f
- Arguments for hierarchical Verilation (from --make cmake)
* - *{prefix}*\ .h * - *{prefix}*\ .h
- Model header - Model header
* - *{prefix}*\ .cpp * - *{prefix}*\ .cpp
@@ -95,16 +89,24 @@ For --cc/--sc, it creates:
* - *{prefix}{each_verilog_module}{__DepSet_hash__n}*\ .cpp * - *{prefix}{each_verilog_module}{__DepSet_hash__n}*\ .cpp
- Additional lower C++ files (hashed to reduce build times) - Additional lower C++ files (hashed to reduce build times)
For --hierarchy mode, it creates: For --hierarchical mode, it creates:
.. list-table:: .. list-table::
* - V\ *{hier_block}*\ / * - V\ *{hier_block}*\ /
- Directory to Verilate each hierarchy block (from --hierarchy) - Directory to Verilate each hierarchical block (from --hierarchical)
* - *{prefix}*\ __hierVer.d * - *{prefix}*\ __hierVer.d
- Make dependencies of the top module (from --hierarchy) - Make dependencies of the top module (from --hierarchical)
* - *{prefix}*\ _hier.mk
- Make file for hierarchical blocks (from --make gmake)
* - *{prefix}*\ __hierCMakeArgs.f
- Arguments for hierarchical Verilation (from --make cmake)
* - *{prefix}*\ __hierMkArgs.f
- Arguments for hierarchical Verilation (from --make gmake)
* - *{prefix}*\ __hierParameters.v
- Module parameters for hierarchical blocks
* - *{prefix}*\ __hier.dir * - *{prefix}*\ __hier.dir
- Directory to store .dot, .vpp, .tree of top module (from --hierarchy) - Directory to store .dot, .vpp, .tree of top module (from --hierarchical)
In specific debug and other modes, it also creates: In specific debug and other modes, it also creates:
+1 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
###################### ######################
+1 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
.. _CMakeInstallation: .. _CMakeInstallation:
+53 -22
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
.. _Installation: .. _Installation:
@@ -19,13 +19,33 @@ started. (Note packages are unlikely to have the most recent version, so
:ref:`Git Install` might be a better alternative.) To install as a :ref:`Git Install` might be a better alternative.) To install as a
package: package:
:: .. code-block:: shell
apt-get install verilator # On Ubuntu apt-get install verilator # On Ubuntu
For other distributions, refer to `Repology Verilator Distro Packages For other distributions, refer to `Repology Verilator Distro Packages
<https://repology.org/project/verilator>`__. <https://repology.org/project/verilator>`__.
.. _pre-commit Quick Install:
pre-commit Quick Install
=============================
You can use Verilator's `pre-commit <https://pre-commit.com/>`__ hook to
lint your code before committing it. It encapsulates the :ref:`Verilator
Build Docker Container`, so you need docker on your system to use it. The
verilator image will be downloaded automatically.
To use the hook, add the following entry to your :code:`.pre-commit-config.yaml`:
.. code-block:: yaml
repos:
- repo: https://github.com/verilator/verilator
rev: v5.026 # or later
hooks:
- id: verilator
.. _Git Install: .. _Git Install:
Git Quick Install Git Quick Install
@@ -36,7 +56,7 @@ options and details, see :ref:`Detailed Build Instructions` below.
In brief, to install from git: In brief, to install from git:
:: .. code-block:: shell
# Prerequisites: # Prerequisites:
#sudo apt-get install git help2man perl python3 make autoconf g++ flex bison ccache #sudo apt-get install git help2man perl python3 make autoconf g++ flex bison ccache
@@ -89,7 +109,7 @@ Install Prerequisites
To build or run Verilator, you need these standard packages: To build or run Verilator, you need these standard packages:
:: .. code-block:: shell
sudo apt-get install git help2man perl python3 make sudo apt-get install git help2man perl python3 make
sudo apt-get install g++ # Alternatively, clang sudo apt-get install g++ # Alternatively, clang
@@ -101,7 +121,7 @@ To build or run Verilator, you need these standard packages:
To build or run Verilator, the following are optional but should be installed To build or run Verilator, the following are optional but should be installed
for good performance: for good performance:
:: .. code-block:: shell
sudo apt-get install ccache # If present at build, needed for run sudo apt-get install ccache # If present at build, needed for run
sudo apt-get install mold # If present at build, needed for run sudo apt-get install mold # If present at build, needed for run
@@ -110,27 +130,26 @@ for good performance:
The following is optional but is recommended for nicely rendered command line The following is optional but is recommended for nicely rendered command line
help when running Verilator: help when running Verilator:
:: .. code-block:: shell
sudo apt-get install perl-doc sudo apt-get install perl-doc
To build Verilator you will need to install these packages; these do not To build Verilator you will need to install these packages; these do not
need to be present to run Verilator: need to be present to run Verilator:
:: .. code-block:: shell
sudo apt-get install git autoconf flex bison sudo apt-get install git autoconf flex bison
Those developing Verilator itself may also want these (see internals.rst): Those developing Verilator itself may also want these (see internals.rst):
:: .. code-block:: shell
sudo apt-get install clang clang-format-14 cmake gdb gprof graphviz lcov sudo apt-get install clang clang-format-14 cmake gdb gprof graphviz lcov
sudo apt-get install python3-clang yapf3 bear jq sudo apt-get install python3-clang yapf3 bear jq
sudo pip3 install sphinx sphinx_rtd_theme sphinxcontrib-spelling breathe ruff sudo pip3 install sphinx sphinx_rtd_theme sphinxcontrib-spelling breathe ruff
sudo pip3 install git+https://github.com/antmicro/astsee.git sudo pip3 install git+https://github.com/antmicro/astsee.git
cpan install Pod::Perldoc cpan install Pod::Perldoc
cpan install Parallel::Forker
Install SystemC Install SystemC
@@ -152,6 +171,17 @@ To make use of Verilator FST tracing you will want `GTKwave
required at Verilator build time. required at Verilator build time.
Install Z3
^^^^^^^^^^
In order to use constrained randomization the `Z3 Theorem Prover
<https://github.com/z3prover/z3#readme>`__ must be installed, however this is
not required at Verilator build time. There are other compatible SMT solvers,
like CVC5/CVC4, but they are not guaranteed to work. Since different solvers are
faster for different scenarios, the solver to use at run-time can be specified
by the environment variable :option:`VERILATOR_SOLVER`.
.. _Obtain Sources: .. _Obtain Sources:
Obtain Sources Obtain Sources
@@ -160,14 +190,14 @@ Obtain Sources
Get the sources from the git repository: (You need to do this only once, Get the sources from the git repository: (You need to do this only once,
ever.) ever.)
:: .. code-block:: shell
git clone https://github.com/verilator/verilator # Only first time git clone https://github.com/verilator/verilator # Only first time
## Note the URL above is not a page you can see with a browser; it's for git only ## Note the URL above is not a page you can see with a browser; it's for git only
Enter the checkout and determine what version/branch to use: Enter the checkout and determine what version/branch to use:
:: .. code-block:: shell
cd verilator cd verilator
git pull # Make sure we're up-to-date git pull # Make sure we're up-to-date
@@ -182,7 +212,7 @@ Auto Configure
Create the configuration script: Create the configuration script:
:: .. code-block:: shell
autoconf # Create ./configure script autoconf # Create ./configure script
@@ -193,8 +223,9 @@ Eventual Installation Options
Before configuring the build, you must decide how you're going to Before configuring the build, you must decide how you're going to
eventually install Verilator onto your system. Verilator will be compiling eventually install Verilator onto your system. Verilator will be compiling
the current value of the environment variables :option:`VERILATOR_ROOT`, the current value of the environment variables :option:`VERILATOR_ROOT`,
:option:`SYSTEMC_INCLUDE`, and :option:`SYSTEMC_LIBDIR` as defaults into :option:`VERILATOR_SOLVER`, :option:`SYSTEMC_INCLUDE`, and
the executable, so they must be correct before configuring. :option:`SYSTEMC_LIBDIR` as defaults into the executable, so they must be
correct before configuring.
These are the installation options: These are the installation options:
@@ -207,7 +238,7 @@ directory (don't run ``make install``). This allows the easiest
experimentation and upgrading, and allows many versions of Verilator to experimentation and upgrading, and allows many versions of Verilator to
co-exist on a system. co-exist on a system.
:: .. code-block:: shell
export VERILATOR_ROOT=`pwd` # if your shell is bash export VERILATOR_ROOT=`pwd` # if your shell is bash
setenv VERILATOR_ROOT `pwd` # if your shell is csh setenv VERILATOR_ROOT `pwd` # if your shell is csh
@@ -229,7 +260,7 @@ that may support multiple versions of every tool. Tell configure the
eventual destination directory name. We recommend that the destination eventual destination directory name. We recommend that the destination
location include the Verilator version name: location include the Verilator version name:
:: .. code-block:: shell
unset VERILATOR_ROOT # if your shell is bash unset VERILATOR_ROOT # if your shell is bash
unsetenv VERILATOR_ROOT # if your shell is csh unsetenv VERILATOR_ROOT # if your shell is csh
@@ -241,7 +272,7 @@ the ``bin`` directory to your ``PATH``. Or, if you use `modulecmd
<http://modules.sourceforge.net/>`__, you'll want a module file like the <http://modules.sourceforge.net/>`__, you'll want a module file like the
following: following:
:: .. code-block:: shell
set install_root /CAD_DISK/verilator/{version-number-used-above} set install_root /CAD_DISK/verilator/{version-number-used-above}
unsetenv VERILATOR_ROOT unsetenv VERILATOR_ROOT
@@ -256,7 +287,7 @@ following:
The final option is to eventually install Verilator globally, using The final option is to eventually install Verilator globally, using
configure's default system paths: configure's default system paths:
:: .. code-block:: shell
unset VERILATOR_ROOT # if your shell is bash unset VERILATOR_ROOT # if your shell is bash
unsetenv VERILATOR_ROOT # if your shell is csh unsetenv VERILATOR_ROOT # if your shell is csh
@@ -273,7 +304,7 @@ The command to configure the package was described in the previous step.
Developers should configure to have more complete developer tests. Developers should configure to have more complete developer tests.
Additional packages may be required for these tests. Additional packages may be required for these tests.
:: .. code-block:: shell
export VERILATOR_AUTHOR_SITE=1 # Put in your .bashrc export VERILATOR_AUTHOR_SITE=1 # Put in your .bashrc
./configure --enable-longtests ...above options... ./configure --enable-longtests ...above options...
@@ -284,7 +315,7 @@ Compile
Compile Verilator: Compile Verilator:
:: .. code-block:: shell
make -j `nproc` # Or if error on `nproc`, the number of CPUs in system make -j `nproc` # Or if error on `nproc`, the number of CPUs in system
@@ -294,7 +325,7 @@ Test
Check the compilation by running self-tests: Check the compilation by running self-tests:
:: .. code-block:: shell
make test make test
@@ -306,7 +337,7 @@ If you used any install option other than the `1. Run-in-Place from
VERILATOR_ROOT <#_1_run_in_place_from_verilator_root>`__ scheme, install VERILATOR_ROOT <#_1_run_in_place_from_verilator_root>`__ scheme, install
the files: the files:
:: .. code-block:: shell
make install make install
+1 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
*************** ***************
+1 -1
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
******** ********
+56 -10
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
.. _Simulating: .. _Simulating:
@@ -18,7 +18,9 @@ Simulation Summary Report
========================= =========================
When simulation finishes, it will print a report to stdout summarizing the When simulation finishes, it will print a report to stdout summarizing the
simulation. This requires the model being Verilated with :vlopt:`--main`. simulation. This requires the model being Verilated with :vlopt:`--main`,
or the user's `main()` calling `VerilatedContext->statsPrintSummary()`.
The report may be disabled with :vlopt:`+verilator+quiet`. The report may be disabled with :vlopt:`+verilator+quiet`.
For example: For example:
@@ -222,14 +224,6 @@ at branches). At each such branch, a counter is incremented. At the end
of a test, the counters, filename, and line number corresponding to each of a test, the counters, filename, and line number corresponding to each
counter are written into the coverage file. counter are written into the coverage file.
Verilator automatically disables coverage of branches with a $stop in
them, as it is assumed that $stop branches contain an error check that should
not occur. A :option:`/*verilator&32;coverage_block_off*/` metacomment
will perform a similar function on any code in that block or below, or
:option:`/*verilator&32;coverage_off*/` and
:option:`/*verilator&32;coverage_on*/` will disable and enable coverage
respectively around a block of code.
Verilator may over-count combinatorial (non-clocked) blocks when those Verilator may over-count combinatorial (non-clocked) blocks when those
blocks receive signals which have had the :option:`UNOPTFLAT` warning blocks receive signals which have had the :option:`UNOPTFLAT` warning
disabled; for the most accurate results, do not disable this warning when disabled; for the most accurate results, do not disable this warning when
@@ -276,6 +270,58 @@ A :option:`/*verilator&32;coverage_off*/`
signals that do not need toggle analysis, such as RAMs and register files. signals that do not need toggle analysis, such as RAMs and register files.
.. _Expression Coverage:
Expression Coverage
-------------------
With :vlopt:`--coverage` or :vlopt:`--coverage-expr`, Verilator will
automatically add coverage analysis at each expression, indicating with a
truth table how every Boolean truth-table possibility in the expression
occurred.
Multi-bit expressions are ignored, but sub-expressions with are entirely
Boolean are analyzed. Expression coverage does not fully explore the truth
table of an expression, rather is looks at each term's contribution. E.g.
an AND operation will check coverage for TT, XF and FX.
Some expressions may produce too many cover points. Verilator limits the
maximum number of cover points per expression to 32, but this may be
controlled with :vlopt:`--coverage-expr-max`.
Below is an example showing expression coverage produced from `verilator_coverage`
as applied to the condition expression inside an if statement. Each line
shows the minimum number of terms and their values (e.g. `(t1==0 && t2==1)`) needed
to reach a result for the overall expression (e.g. `=> 1`). Each line also
shows the number of times this combination was hit. Note that individual lines
are not mutually exclusive.
.. code-block::
%000004 if ((~t1 && t2) || (~t3 && t4)) $write("");
-000002 point: comment=(t1==0 && t2==1) => 1 hier=top.t
-000002 point: comment=(t1==1 && t3==1) => 0 hier=top.t
-000004 point: comment=(t1==1 && t4==0) => 0 hier=top.t
-000002 point: comment=(t2==0 && t3==1) => 0 hier=top.t
-000003 point: comment=(t2==0 && t4==0) => 0 hier=top.t
-000002 point: comment=(t3==0 && t4==1) => 1 hier=top.t
.. _Suppressing Coverage:
Suppressing Coverage
--------------------
Using :option:`/*verilator&32;coverage_off*/` and
:option:`/*verilator&32;coverage_on*/` around a block of code will disable
and enable coverage respectively around that block. Or, use the
:option:`coverage_block_off` configuration file option.
Verilator automatically disables coverage of lines and branches with a
$stop in them, as it is assumed that $stop branches contain an error check
that should not occur. A :option:`/*verilator&32;coverage_block_off*/`
metacomment will perform a similar function on any code in that block or
below.
.. _Coverage Collection: .. _Coverage Collection:
Coverage Collection Coverage Collection
+3 -3
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
********** **********
@@ -304,9 +304,9 @@ GNU Make
======== ========
Verilator defaults to creating GNU Make makefiles for the model. Verilator Verilator defaults to creating GNU Make makefiles for the model. Verilator
will call make automatically when the :vlopt:'--build' option is used. will call make automatically when the :vlopt:`--build` option is used.
If calling Verilator from a makefile, the :vlopt:'-MMD' option will create If calling Verilator from a makefile, the :vlopt:`--MMD` option will create
a dependency file, allowing Make to only run Verilator if input Verilog a dependency file, allowing Make to only run Verilator if input Verilog
files change. files change.
+107 -36
View File
@@ -1,4 +1,4 @@
.. Copyright 2003-2024 by Wilson Snyder. .. Copyright 2003-2025 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 .. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
******************* *******************
@@ -44,7 +44,7 @@ Warnings may be disabled in multiple ways:
.. code-block:: sv .. code-block:: sv
lint_off -rule UNSIGNED -file "*/example.v" -line 1 lint_off -rule UNSIGNED -file "*/example.v" -lines 1
Error And Warning Format Error And Warning Format
@@ -210,22 +210,35 @@ List Of Warnings
.. option:: BLKLOOPINIT .. option:: BLKLOOPINIT
.. TODO better example Indicates certain constructs where non-blocking assignments to unpacked
arrays (memories) are not supported inside loops. These typically appear in
This indicates that the initialization of an array needs to use initialization/reset code:
non-delayed assignments. This is done in the interest of speed; if
delayed assignments were used, the simulator would have to copy large
arrays every cycle. (In smaller loops, loop unrolling allows the
delayed assignment to work, though it's a bit slower than a non-delayed
assignment.) Here's an example
.. code-block:: sv .. code-block:: sv
always @(posedge clk) always @(posedge clk)
if (~reset_l) if (~reset_l)
for (i=0; i<`ARRAY_SIZE; i++) for (i=0; i<`ARRAY_SIZE; i++)
array[i] = 0; // Non-delayed for verilator array[i] <= 0; // Non-blocking assignment inside loop
else
array[address] <= data;
While this is supported in typical synthesizeable code (including the
example above), some complicated cases are not supported. Namely:
1. If the above loop is inside a suspendable process or fork statement.
2. If the variable is also the target of a '<=' non-blocking assignment
in a suspendable process or fork statement (in addition to a synthesizable
loop).
3. If the element type of the array is a compound type.
4. In versions before 5.026, any delayed assignment to an array.
It might slightly improve run-time performance if you change the
non-blocking assignment inside the loop into a blocking assignment
(that is: use '=' instead of '<='), if possible.
This message is only seen on large or complicated loops because This message is only seen on large or complicated loops because
Verilator generally unrolls small loops. You may want to try increasing Verilator generally unrolls small loops. You may want to try increasing
@@ -406,9 +419,9 @@ List Of Warnings
.. option:: CONSTRAINTIGN .. option:: CONSTRAINTIGN
Warns that Verilator does not support :code:`constraint`, Warns that Verilator does not support certain forms of
:code:`constraint_mode`, or :code:`rand_mode`, and the construct was are :code:`constraint`, :code:`constraint_mode`, or :code:`rand_mode`, and
ignored. the construct was are ignored.
Ignoring this warning may make Verilator randomize() simulations differ Ignoring this warning may make Verilator randomize() simulations differ
from other simulators. from other simulators.
@@ -432,6 +445,18 @@ List Of Warnings
correctly. correctly.
.. option:: COVERIGN
Warns that Verilator does not support certain forms of
:code:`covergroup`, :code:`coverpoint`, and coverage options, and the
construct was are ignored.
Disabling the :option:`UNSUPPORTED` error also disables this warning.
Ignoring this warning may make Verilator ignore lint checking on the
construct, and collect coverage data differently from other simulators.
.. option:: DECLFILENAME .. option:: DECLFILENAME
.. TODO better example .. TODO better example
@@ -1204,6 +1229,14 @@ List Of Warnings
:vlopt:`--no-timing` option. :vlopt:`--no-timing` option.
.. option:: NONSTD
Warns when a non-standard language feature is used that has a standard
equivalent, which might behave differently in corner cases. For example
:code:`$psprintf` system function is replaced by its standard equivalent
:code:`$sformatf`.
.. option:: NULLPORT .. option:: NULLPORT
Warns that a null port was detected in the module definition port Warns that a null port was detected in the module definition port
@@ -1243,7 +1276,7 @@ List Of Warnings
.. option:: PINMISSING .. option:: PINMISSING
.. TODO better example .. TODO better example (frequent)
Warns that a module has a pin that is not mentioned in an instance. If Warns that a module has a pin that is not mentioned in an instance. If
a pin is not missing it should still be specified on the instance a pin is not missing it should still be specified on the instance
@@ -1252,6 +1285,22 @@ List Of Warnings
Ignoring this warning will only suppress the lint check; it will Ignoring this warning will only suppress the lint check; it will
simulate correctly. simulate correctly.
Faulty example:
.. include:: ../../docs/gen/ex_PKGNODECL_faulty.rst
Results in:
.. include:: ../../docs/gen/ex_PKGNODECL_msg.rst
Repaired example:
.. code-block:: sv
:emphasize-lines: 2
sub sub (
.port());
Other tools with similar warnings: Icarus Verilog's portbind, "warning: Other tools with similar warnings: Icarus Verilog's portbind, "warning:
Instantiating module ... with dangling input port (...)". Slang's Instantiating module ... with dangling input port (...)". Slang's
unconnected-port, "port '...' has no connection". unconnected-port, "port '...' has no connection".
@@ -1283,7 +1332,7 @@ List Of Warnings
generate generate
if (A==0) begin if (A==0) begin
b b_inst1 (.x(1'b0)); //<--- error nonexistent port b b_inst1 (.x(1'b0)); //<--- error nonexistent port
b #(.PX(1'b0)) b_inst2 (); //<--- error nonexistent parameter b #(.PX(1'b0)) b_inst2 (); //<--- error nonexistent parameter
end end
endgenerate endgenerate
endmodule endmodule
@@ -1325,11 +1374,22 @@ List Of Warnings
.. option:: PKGNODECL .. option:: PKGNODECL
.. TODO better example An error that a package/class appears to have been referenced that has
not yet been declared. According to IEEE 1800-2023 26.3, all packages
must be declared before being used.
An error that a package/class appears to have been referenced that has not Faulty example:
yet been declared. According to IEEE 1800-2023 26.3, all packages must
be declared before being used. .. include:: ../../docs/gen/ex_PKGNODECL_faulty.rst
Results in:
.. include:: ../../docs/gen/ex_PKGNODECL_msg.rst
Often the package is declared in its own header file. In this case add
an include of that package header file to the referencing file. (And
make sure you have header guards in the package's header file to prevent
multiple declarations of the package.)
.. option:: PREPROCZERO .. option:: PREPROCZERO
@@ -1354,7 +1414,7 @@ List Of Warnings
`endif `endif
The portable way to suppress this warning is to use a define value other The portable way to suppress this warning is to use a define value other
than zero to when used in a preprocessor expression. than zero, when it is to be used in a preprocessor expression.
.. option:: PROCASSWIRE .. option:: PROCASSWIRE
@@ -1644,6 +1704,9 @@ List Of Warnings
Warning that a symbol matches a C++ reserved word, and using this as a Warning that a symbol matches a C++ reserved word, and using this as a
symbol name would result in odd C++ compiler errors. You may disable symbol name would result in odd C++ compiler errors. You may disable
this warning, but Verilator will rename the symbol to avoid conflict. this warning, but Verilator will rename the symbol to avoid conflict.
If you are using `--vpi` and only mark things as public for VPI access
(and not C++ access) then it is advisable to disable this warning with
:code:`-Wno-SYMRSVDWORD`.
.. option:: SYNCASYNCNET .. option:: SYNCASYNCNET
@@ -1876,7 +1939,8 @@ List Of Warnings
.. option:: UNPACKED .. option:: UNPACKED
Warns that unpacked structs and unions are not supported. Warns that unpacked structs and unions are not supported because
:vlopt:`--structs-packed` was used, or by up through version 5.004.
Ignoring this warning will make Verilator treat the structure as packed, Ignoring this warning will make Verilator treat the structure as packed,
which may make Verilator simulations differ from other simulators. This which may make Verilator simulations differ from other simulators. This
@@ -1927,14 +1991,16 @@ List Of Warnings
.. TODO better example .. TODO better example
Warns that the specified genvar is never used/consumed. Warns that the specified genvar is never used/consumed. See similar
:option:`UNUSEDSIGNAL`.
.. option:: UNUSEDPARAM .. option:: UNUSEDPARAM
.. TODO better example .. TODO better example
Warns that the specified parameter is never used/consumed. Warns that the specified parameter is never used/consumed. See similar
:option:`UNUSEDSIGNAL`.
.. option:: UNUSEDSIGNAL .. option:: UNUSEDSIGNAL
@@ -1955,12 +2021,12 @@ List Of Warnings
.. code-block:: sv .. code-block:: sv
wire _unused_ok = &{1'b0, wire _unused_ok = 1'b0 && &{1'b0,
sig_not_used_a, sig_not_used_a,
sig_not_used_yet_b, // To be fixed sig_not_used_yet_b, // To be fixed
1'b0}; 1'b0};
The reduction AND and constant zeros mean the net will always be zero, The AND with constant zero mean the net will always be zero,
so won't use simulation runtime. The redundant leading and trailing so won't use simulation runtime. The redundant leading and trailing
zeros avoid syntax errors if there are no signals between them. The zeros avoid syntax errors if there are no signals between them. The
magic name "unused" (controlled by the :vlopt:`--unused-regexp` option) magic name "unused" (controlled by the :vlopt:`--unused-regexp` option)
@@ -2057,10 +2123,6 @@ List Of Warnings
.. option:: WAITCONST .. option:: WAITCONST
.. code-block:: sv
wait(1); // Blocks forever
Warns that a `wait` statement awaits a constant condition, which means it Warns that a `wait` statement awaits a constant condition, which means it
either blocks forever or never blocks. either blocks forever or never blocks.
@@ -2068,6 +2130,12 @@ List Of Warnings
something that elaborates to zero), does not warn, as it is presumed the something that elaborates to zero), does not warn, as it is presumed the
code is making the intent clear. code is making the intent clear.
Faulty example:
.. code-block:: sv
wait(1); // Blocks forever
.. option:: WIDTH .. option:: WIDTH
@@ -2104,7 +2172,7 @@ List Of Warnings
.. include:: ../../docs/gen/ex_WIDTHEXPAND_1_faulty.rst .. include:: ../../docs/gen/ex_WIDTHEXPAND_1_faulty.rst
Results in a WIDTHEXPAND warning: Results in a :option:`WIDTHEXPAND` warning:
.. include:: ../../docs/gen/ex_WIDTHEXPAND_1_msg.rst .. include:: ../../docs/gen/ex_WIDTHEXPAND_1_msg.rst
@@ -2115,15 +2183,18 @@ List Of Warnings
.. option:: WIDTHTRUNC .. option:: WIDTHTRUNC
A more granular WIDTH warning, for when a value is truncated. A more granular :option:`WIDTH` warning, for when a value is
truncated. See :option:`WIDTH`.
.. option:: WIDTHEXPAND .. option:: WIDTHEXPAND
A more granular WIDTH warning, for when a value is zero expanded. A more granular :option:`WIDTH` warning, for when a value is zero
expanded. See :option:`WIDTH`.
.. option:: WIDTHXZEXPAND .. option:: WIDTHXZEXPAND
A more granular WIDTH warning, for when a value is X/Z expanded. A more granular :option:`WIDTH` warning, for when a value is X/Z
expanded. See :option:`WIDTH`.
.. option:: WIDTHCONCAT .. option:: WIDTHCONCAT
@@ -2172,7 +2243,7 @@ List Of Warnings
#(parameter int MY_PARAM = 0); #(parameter int MY_PARAM = 0);
reg [7:0] data; reg [7:0] data;
always @* begin always @* begin
data = {MY_PARAM{1'b1}}; //<--- WARNING data = {MY_PARAM{1'b1}}; //<--- Warning
end end
endmodule endmodule
@@ -2193,7 +2264,7 @@ List Of Warnings
:emphasize-lines: 2 :emphasize-lines: 2
module dut module dut
#(parameter int MY_PARAM = 1); //<--- REPAIRED #(parameter int MY_PARAM = 1); //<--- REPAIRED
reg [7:0] data; reg [7:0] data;
always @* begin always @* begin
data = {MY_PARAM{1'b1}}; data = {MY_PARAM{1'b1}};
+130 -58
View File
@@ -1031,6 +1031,91 @@ the evaluation process records a bitmask of variables that might have
changed; if clear, checking those signals for changes may be skipped. changed; if clear, checking those signals for changes may be skipped.
Constrained randomization
-------------------------
Because general constrained randomization is a co-NP-hard problem, not all
cases are implemented in Verilator, and an external specialized SMT solver is
used for any non-obvious ones.
The ``randomize()`` method spawns an SMT solver in a sub-process. Then the
solver gets a setup query, then the definition of variables, then all the
constraints (SMT assertions) about the variables. Since the solver has no
information about the class' PRNG state, if the problem is satisfiable,
the solution space is further constrained by adding extra random constraints,
and querying the values satisfying the problem statement.
The constraint is currently constructed as fixing a simple xor of randomly
chosen bits of the variables being randomized.
The runtime classes used for handling the randomization are defined in
``verilated_random.h`` and ``verilated_random.cpp``.
``VlSubprocess``
~~~~~~~~~~~~~~~~
Subprocess handle, responsible for keeping track of the resources like child
PID, read and write file descriptors, and presenting them as a C++ iostream.
``VlRandomizer``
~~~~~~~~~~~~~~~~
Randomizer class, responsible for keeping track of variables and constraints,
and communicating with the solver subprocess.
The solver gets the constraints in `SMT-LIB2
<https://smtlib.cs.uiowa.edu/>`__ textual format in the following syntax:
::
(set-info :smt-lib-version 2.0)
(set-option :produce-models true)
(set-logic QF_BV)
(declare-fun v () (_ BitVec 16))
(declare-fun w () (_ BitVec 64))
(declare-fun x () (_ BitVec 48))
(declare-fun z () (_ BitVec 24))
(declare-fun t () (_ BitVec 23))
(assert (or (= v #x0003) (= v #x0008)))
(assert (= w #x0000000000000009))
(assert (or (or (= x #x000000000001) (= x #x000000000002)) (or (= x #x000000000004) (= x #x000000000009))))
(assert (bvult ((_ zero_extend 8) z) #x00000015))
(assert (bvugt ((_ zero_extend 8) z) #x0000000d))
(check-sat)
The solver responds with either ``sat`` or ``unsat``. Then the initial solution
is queried with:
::
(get-value (v w x z t ))
The solver then responds with e.g.:
::
((v #x0008)
(w #x0000000000000005)
(x #x000000000002)
(z #x000010)
(t #b00000000000000000000000))
And then a follow-up query (or a series thereof) is asked, and the solver gets
reset, so that it can be reused by subsequent randomization attempts:
::
(assert (= (bvxor (bvxor <...> (bvxor ((_ extract 21 21) z) ((_ extract 39 39) x)) ((_ extract 5 5) w)) <...> ((_ extract 10 10) w)) #b0))
(check-sat)
(get-value)
...
(reset)
Coding Conventions Coding Conventions
================== ==================
@@ -1387,9 +1472,6 @@ For all tests to pass, you must install the following packages:
- SystemC to compile the SystemC outputs, see http://systemc.org - SystemC to compile the SystemC outputs, see http://systemc.org
- Parallel::Forker from CPAN to run tests in parallel; you can install
this with e.g. "sudo cpan install Parallel::Forker".
- vcddiff to find differences in VCD outputs. See the readme at - vcddiff to find differences in VCD outputs. See the readme at
https://github.com/veripool/vcddiff https://github.com/veripool/vcddiff
@@ -1399,7 +1481,7 @@ For all tests to pass, you must install the following packages:
Controlling the Test Driver Controlling the Test Driver
--------------------------- ---------------------------
The test driver script `driver.pl` runs tests; see the `Test Driver` The test driver script `driver.py` runs tests; see the `Test Driver`
section. The individual test drivers are written in Perl; see `Test section. The individual test drivers are written in Perl; see `Test
Language`. Language`.
@@ -1412,7 +1494,7 @@ A specific regression test can be executed manually. To start the
:: ::
test_regress/t/t_EXAMPLE.pl test_regress/t/t_EXAMPLE.py
Regression Testing for Developers Regression Testing for Developers
@@ -1432,13 +1514,6 @@ Developers will also want to call ./configure with two extra flags:
disabled by default, as SystemC installation problems would otherwise disabled by default, as SystemC installation problems would otherwise
falsely indicate a Verilator problem. falsely indicate a Verilator problem.
When enabling the long tests, some additional Perl modules are needed,
which you can install using cpan.
::
cpan install Parallel::Forker
There are some traps to avoid when running regression tests There are some traps to avoid when running regression tests
- When checking the MANIFEST, the test will fail on unexpected code in the - When checking the MANIFEST, the test will fail on unexpected code in the
@@ -1581,7 +1656,7 @@ field in the section below.
+---------------+--------------------------------------------------------+ +---------------+--------------------------------------------------------+
| ``1:2:`` | The hierarchy of the ``VAR`` is the ``op2p`` | | ``1:2:`` | The hierarchy of the ``VAR`` is the ``op2p`` |
| | pointer under the ``MODULE``, which in turn is the | | | pointer under the ``MODULE``, which in turn is the |
| | ``op1p`` pointer under the ``NETLIST`` | | | ``op1p`` pointer under the ``NETLIST``. |
+---------------+--------------------------------------------------------+ +---------------+--------------------------------------------------------+
| ``VAR`` | The AstNodeType (e.g. ``AstVar``). | | ``VAR`` | The AstNodeType (e.g. ``AstVar``). |
+---------------+--------------------------------------------------------+ +---------------+--------------------------------------------------------+
@@ -1595,7 +1670,7 @@ field in the section below.
| | and "aa" the 27th. Then line 22 in that file, then | | | and "aa" the 27th. Then line 22 in that file, then |
| | column 8 (aa=0, az=25, ba=26, ...). | | | column 8 (aa=0, az=25, ba=26, ...). |
+---------------+--------------------------------------------------------+ +---------------+--------------------------------------------------------+
| ``@dt=0x...`` | The address of the data type this node contains. | | ``@dt=0x...`` | The address of the data type this node references. |
+---------------+--------------------------------------------------------+ +---------------+--------------------------------------------------------+
| ``w32`` | The data-type width() is 32 bits. | | ``w32`` | The data-type width() is 32 bits. |
+---------------+--------------------------------------------------------+ +---------------+--------------------------------------------------------+
@@ -1603,7 +1678,7 @@ field in the section below.
| | variable. | | | variable. |
+---------------+--------------------------------------------------------+ +---------------+--------------------------------------------------------+
| ``[O]`` | Flags which vary with the type of node, in this | | ``[O]`` | Flags which vary with the type of node, in this |
| | case, it means the variable is an output. | | | case of a VAR, it means the variable is an output. |
+---------------+--------------------------------------------------------+ +---------------+--------------------------------------------------------+
In more detail, the following fields are dumped common to all nodes. They In more detail, the following fields are dumped common to all nodes. They
@@ -1786,7 +1861,7 @@ represent the pointers (``op1p``, ``op2p``, etc) between the nodes.
Debugging with GDB Debugging with GDB
------------------ ------------------
The `driver.pl` script accepts ``--debug --gdb`` to start The `driver.py` script accepts ``--debug --gdb`` to start
Verilator under gdb and break when an error is hit, or the program is about Verilator under gdb and break when an error is hit, or the program is about
to exit. You can also use ``--debug --gdbbt`` to just backtrace and then to exit. You can also use ``--debug --gdbbt`` to just backtrace and then
exit gdb. To debug the Verilated executable, use ``--gdbsim``. exit gdb. To debug the Verilated executable, use ``--gdbsim``.
@@ -1797,7 +1872,7 @@ can use ``--debug`` and look at the underlying invocation of
:: ::
t/t_alw_dly.pl --debug t/t_alw_dly.py --debug
shows it invokes the command: shows it invokes the command:
@@ -1894,7 +1969,7 @@ Generally, what would you do to add a new feature?
Follow the convention described above about the AstNode type hierarchy. Follow the convention described above about the AstNode type hierarchy.
Ordering of definitions is enforced by ``astgen``. Ordering of definitions is enforced by ``astgen``.
5. Now you can run ``test_regress/t/t_<newtestcase>.pl --debug`` and it'll 5. Now you can run ``test_regress/t/t_<newtestcase>.py --debug`` and it'll
probably fail, but you'll see a probably fail, but you'll see a
``test_regress/obj_dir/t_<newtestcase>/*.tree`` file which you can examine ``test_regress/obj_dir/t_<newtestcase>/*.tree`` file which you can examine
to see if the parsing worked. See also the sections above on debugging. to see if the parsing worked. See also the sections above on debugging.
@@ -1943,7 +2018,7 @@ IEEE 1800-2023 33 Config
Test Driver Test Driver
=========== ===========
This section documents the test driver script, `driver.pl`. driver.pl This section documents the test driver script, `driver.py`. driver.py
invokes Verilator or another simulator on each test file. For test file invokes Verilator or another simulator on each test file. For test file
contents description see `Test Language`. contents description see `Test Language`.
@@ -1955,7 +2030,7 @@ the regression tests with OBJCACHE enabled and in parallel on a machine
with many cores. See the -j option and OBJCACHE environment variable. with many cores. See the -j option and OBJCACHE environment variable.
driver.pl Non-Scenario Arguments driver.py Non-Scenario Arguments
-------------------------------- --------------------------------
--benchmark [<cycles>] --benchmark [<cycles>]
@@ -2025,13 +2100,13 @@ driver.pl Non-Scenario Arguments
memory leaks. memory leaks.
--site --site
Run site specific tests also. Run site-specific tests also.
--stop --stop
Stop on the first error. Stop on the first error.
--trace --trace
Set the simulator specific flags to request waveform tracing. Set the simulator-specific flags to request waveform tracing.
--valgrind --valgrind
Same as ``verilator --valgrind``: Run Verilator under `Valgrind <https://valgrind.org/>`_. Same as ``verilator --valgrind``: Run Verilator under `Valgrind <https://valgrind.org/>`_.
@@ -2044,7 +2119,7 @@ driver.pl Non-Scenario Arguments
For tests using the standard C++ wrapper, enable runtime debug mode. For tests using the standard C++ wrapper, enable runtime debug mode.
driver.pl Scenario Arguments driver.py Scenario Arguments
---------------------------- ----------------------------
The following options control which simulator is used, and which tests are The following options control which simulator is used, and which tests are
@@ -2086,7 +2161,7 @@ simultaneously.
Run Xilinx XSim simulator tests. Run Xilinx XSim simulator tests.
driver.pl Environment driver.py Environment
--------------------- ---------------------
HARNESS_UPDATE_GOLDEN HARNESS_UPDATE_GOLDEN
@@ -2125,6 +2200,10 @@ VERILATOR_ROOT
Standard path to Verilator distribution root; see primary Verilator Standard path to Verilator distribution root; see primary Verilator
documentation. documentation.
VERILATOR_SOLVER
SMT solver command for constrained randomization; see primary Verilator
documentation.
VERILATOR_TESTS_SITE VERILATOR_TESTS_SITE
Used with ``--site``, a colon-separated list of directories with tests to Used with ``--site``, a colon-separated list of directories with tests to
be added to testlist. be added to testlist.
@@ -2142,30 +2221,30 @@ VERILATOR_XVLOG
Test Language Test Language
============= =============
This section describes the format of the ``test_regress/t/*.pl`` test This section describes the format of the ``test_regress/t/*.py`` test
language files, executed by `driver.pl`. language files, executed by `driver.py`.
Test Language Summary Test Language Summary
--------------------- ---------------------
For convenience, a summary of the most commonly used features is provided For convenience, a summary of the most commonly used features is provided
here, with a reference in a later section. All test files typically have a here, with a reference in a later section. All test files typically have a
call to the ``lint`` or ``compile`` subroutine to compile the test. For call to the ``test.lint`` or ``test.compile`` methods to compile the
run-time tests, this is followed by a call to the ``execute`` test. For run-time tests, this is followed by a call to the
subroutine. Both of these functions can optionally be provided with ``test.execute`` method. Both of these functions can optionally be provided
arguments specifying additional options. with arguments specifying additional options.
If those complete, the script calls ``ok`` to increment the count of If those complete, the script calls ``test.passes`` to increment the count
successful tests and then returns 1 as its result. of successful tests.
The driver.pl script assumes by default that the source Verilog file name The driver.py script assumes by default that the source Verilog file name
matches the test script name. So a test whose driver is matches the test script name. So a test whose driver is
``t/t_mytest.pl`` will expect a Verilog source file ``t/t_mytest.v``. ``t/t_mytest.py`` will expect a Verilog source file ``t/t_mytest.v``.
This can be changed using the ``top_filename`` subroutine, for example This can be changed using the ``top_filename`` subroutine, for example
:: ::
top_filename("t/t_myothertest.v"); test.top_filename = "t/t_myothertest.v"
By default, all tests will run with major simulators (Icarus Verilog, NC, By default, all tests will run with major simulators (Icarus Verilog, NC,
VCS, ModelSim, etc.) as well as Verilator, to allow results to be VCS, ModelSim, etc.) as well as Verilator, to allow results to be
@@ -2174,26 +2253,25 @@ can use the following:
:: ::
scenarios(vlt => 1); test.scenarios('vlt')
Of the many options that can be set through arguments to ``compiler`` and Of the many options that can be set through arguments to ``test.compiler``
``execute``, the following are particularly useful: and ``test.execute``, the following are particularly useful:
``verilator_flags2`` ``verilator_flags2``
A list of flags to be passed to verilator when compiling. A list of flags to be passed to verilator when compiling.
``fails`` ``fails``
Set to 1 to indicate that the compilation or execution is intended to fail. Set true to indicate that the compilation or execution is intended to fail.
For example, the following would specify that compilation requires two For example, the following would specify that compilation requires two
defines and is expected to fail. defines and is expected to fail.
:: ::
compile( test.compile(
verilator_flags2 => ["-DSMALL_CLOCK -DGATED_COMMENT"], verilator_flags2 => ["-DSMALL_CLOCK -DGATED_COMMENT"],
fails => 1, fails = True)
);
Hints On Writing Tests Hints On Writing Tests
---------------------- ----------------------
@@ -2206,10 +2284,10 @@ same name as the test, but with .cpp as suffix
:: ::
compile( test.compile(
make_top_shell => 0, make_top_shell=False,
make_main => 0, make_main=False,
verilator_flags2 => ["--exe $Self->{t_dir}/$Self->{name}.cpp"], ); verilator_flags2=["--exe", test.t_dir + "/" + test.name + ".cpp"])
Tests should be self-checking, rather than producing lots of output. If a Tests should be self-checking, rather than producing lots of output. If a
test succeeds it should print ``*-* All Finished *-*`` to standard output test succeeds it should print ``*-* All Finished *-*`` to standard output
@@ -2249,9 +2327,8 @@ compile time, it is the only option. For example:
:: ::
compile( compile(
fails => 1, fails=True,
expect_filename => $Self->{golden_filename}, expect_filename=test.golden_filename)
);
Note ``expect_filename`` strips some debugging information from the logfile Note ``expect_filename`` strips some debugging information from the logfile
when comparing. when comparing.
@@ -2260,9 +2337,9 @@ when comparing.
Test Language Compile/Lint/Run Arguments Test Language Compile/Lint/Run Arguments
---------------------------------------- ----------------------------------------
This section describes common arguments to ``compile()``, ``lint()``, and This section describes common arguments to ``test.compile``, ``test.lint``,
``run()``. The full list of arguments can be found by looking at the and ``test.run``. The full list of arguments can be found by looking at
``driver.pl`` source code. the ``driver.py`` source code.
all_run_flags all_run_flags
A list of flags to be passed when running the simulator (Verilated model A list of flags to be passed when running the simulator (Verilated model
@@ -2273,11 +2350,6 @@ check_finished
string ``*-* All Finished *-*`` being printed on standard output. This is string ``*-* All Finished *-*`` being printed on standard output. This is
the normal way for successful tests to finish. the normal way for successful tests to finish.
expect
A quoted list of strings or regular expression to be matched in the
output. See `Hints On Writing Tests` for more detail on how this argument
should be used.
fails fails
True to indicate this step is expected to fail. Tests that are expected True to indicate this step is expected to fail. Tests that are expected
to fail generally have _bad in their filename. to fail generally have _bad in their filename.
@@ -2339,7 +2411,7 @@ xsim_flags / xsim_flags2 / xsim_run_flags
Distribution Distribution
============ ============
Copyright 2008-2024 by Wilson Snyder. Verilator is free software; you can Copyright 2008-2025 by Wilson Snyder. Verilator is free software; you can
redistribute it and/or modify it under the terms of either the GNU Lesser redistribute it and/or modify it under the terms of either the GNU Lesser
General Public License Version 3 or the Perl Artistic License Version 2.0. General Public License Version 3 or the Perl Artistic License Version 2.0.
+43
View File
@@ -20,6 +20,7 @@ Ashutosh
Ast Ast
Atmel Atmel
Aurelien Aurelien
Badáň
Bagri Bagri
Balboni Balboni
Baltazar Baltazar
@@ -40,6 +41,7 @@ Brej
Briquet Briquet
Brownlee Brownlee
Buckenmaier Buckenmaier
Burghoorn
Bybell Bybell
CLang CLang
CMake CMake
@@ -73,6 +75,7 @@ Deepa
Defparams Defparams
Delm Delm
Denio Denio
Deniz
Deprecations Deprecations
Deroo Deroo
Desai Desai
@@ -101,6 +104,7 @@ Eiler
Eivind Eivind
El El
Elbourne Elbourne
Elzeftawi
Embecosm Embecosm
Engstrom Engstrom
Enzo Enzo
@@ -108,8 +112,10 @@ Eugen
Fabrizio Fabrizio
Faucher Faucher
Faure Faure
Feinberg
Fekete Fekete
Ferrandi Ferrandi
Filip
Flachs Flachs
Flavien Flavien
Florian Florian
@@ -131,6 +137,7 @@ Gernot
Gerst Gerst
Gielda Gielda
Gigerl Gigerl
Gijs
Gileadi Gileadi
Giri Giri
Gisselquist Gisselquist
@@ -147,6 +154,7 @@ Grulfen
Gu Gu
Gunter Gunter
Guo Guo
Güzel
Hameed Hameed
Hao Hao
Haojin Haojin
@@ -164,6 +172,7 @@ Homebrew
Hornung Hornung
Hossell Hossell
Hsu Hsu
Huggett
Hutt Hutt
Hyperthreading Hyperthreading
Ibrahim Ibrahim
@@ -240,6 +249,7 @@ Liwei
Lockhart Lockhart
Longo Longo
Luca Luca
Luiza
Lussier Lussier
Lübeck Lübeck
MMD MMD
@@ -270,6 +280,8 @@ MinW
Mindspeed Mindspeed
MingW MingW
Miodrag Miodrag
Moberg
Mobert
ModelSim ModelSim
Modport Modport
Moinak Moinak
@@ -283,6 +295,7 @@ NaN
Nalbantis Nalbantis
Nandor Nandor
Narayan Narayan
Narcis
Nassim Nassim
Nauticus Nauticus
Newgard Newgard
@@ -332,6 +345,7 @@ Redhat
Reitan Reitan
Renga Renga
Requin Requin
Rodas
Rodionov Rodionov
Rohan Rohan
Rolfe Rolfe
@@ -349,8 +363,10 @@ Sanguinetti
Sanjay Sanjay
Sasselli Sasselli
Scharrer Scharrer
Schless
Seitz Seitz
Shahid Shahid
Shahrestani
Shankar Shankar
Shanshan Shanshan
Sharad Sharad
@@ -361,6 +377,7 @@ Shi
Shinkarovsky Shinkarovsky
Shinya Shinya
Shirakawa Shirakawa
Shou
Shuba Shuba
Shunyao Shunyao
Slager Slager
@@ -372,10 +389,12 @@ Solaris
Solomatnikov Solomatnikov
Solt Solt
Southwell Southwell
Spack
Srini Srini
Srinivasan Srinivasan
Stamness Stamness
Stephane Stephane
Sterin
Stoddard Stoddard
Stroebel Stroebel
Strouble Strouble
@@ -458,6 +477,7 @@ Wojciech
Wolfel Wolfel
Wouters Wouters
Wpedantic Wpedantic
Wunused
Wwarn Wwarn
XSim XSim
Xcelium Xcelium
@@ -494,6 +514,7 @@ architected
args args
arrarys arrarys
assertOn assertOn
assertcontrol
astgen astgen
async async
atClone atClone
@@ -510,6 +531,7 @@ basename
bbox bbox
benchmarking benchmarking
biguint biguint
bindir
biops biops
bisonpre bisonpre
bitOpTree bitOpTree
@@ -579,6 +601,7 @@ datadir
datafiles datafiles
david david
ddd ddd
de
deassign deassign
debugi debugi
defenv defenv
@@ -586,6 +609,7 @@ defname
defparam defparam
demangling demangling
dep dep
deparametrized
der der
dereference dereference
desassign desassign
@@ -673,6 +697,7 @@ fno
fopen fopen
forceable forceable
foreach foreach
fourstate
fprintf fprintf
fprofile fprofile
fread fread
@@ -698,6 +723,7 @@ genvar
genvars genvars
getenv getenv
getline getline
getter
ggdb ggdb
glibc glibc
gmake gmake
@@ -711,6 +737,7 @@ hh
hier hier
hierCMakeArgs hierCMakeArgs
hierMkArgs hierMkArgs
hierParameters
hierVer hierVer
hx hx
hyperthreading hyperthreading
@@ -842,6 +869,8 @@ parallelized
param param
parameterization parameterization
parameterized parameterized
parameterized
parameterless
params params
parens parens
pawel pawel
@@ -854,6 +883,7 @@ phelter
picoChip picoChip
pinIndex pinIndex
pinout pinout
pkgdatadir
plusargs plusargs
pmos pmos
poping poping
@@ -873,6 +903,7 @@ predefines
prepareClone prepareClone
prepend prepend
prepended prepended
preproc
preprocess preprocess
preprocessed preprocessed
preprocessing preprocessing
@@ -885,7 +916,9 @@ profcfunc
profiler profiler
prototyptes prototyptes
ps ps
psprintf
pthread pthread
pthreads
ptr ptr
pulldown pulldown
pulldowns pulldowns
@@ -916,6 +949,7 @@ redeclaring
regs regs
reloop reloop
replaceShiftOp replaceShiftOp
reproducibility
resetall resetall
respecified respecified
rodata rodata
@@ -968,6 +1002,9 @@ submakes
submodule submodule
submodules submodules
substring substring
superclass
suspendable
suspendables
sv sv
svBitVal svBitVal
svBitVecVal svBitVecVal
@@ -978,6 +1015,7 @@ svLogicVal
svdpi svdpi
svgGetTimeUnit svgGetTimeUnit
swrite swrite
synthesizeable
sys sys
systemc systemc
tenghtt tenghtt
@@ -996,10 +1034,13 @@ toolchain
topcell topcell
toplevel toplevel
toupper toupper
traceCapable
traceEverOn traceEverOn
tran tran
treei treei
tri tri
triand
trior
tristate tristate
tristates tristates
trunc trunc
@@ -1060,6 +1101,7 @@ vluint
vpi vpi
vpiConstType vpiConstType
vpiDefName vpiDefName
vpiInertialDelay
vpiInstance vpiInstance
vpiLeftRange vpiLeftRange
vpiModule vpiModule
@@ -1074,6 +1116,7 @@ warmup
waveforms waveforms
whitespace whitespace
widthed widthed
wor
wreal wreal
writeb writeb
writeme writeme
+1 -1
View File
@@ -70,7 +70,7 @@ The XML document consists of 4 sections within the top level
Distribution Distribution
============ ============
Copyright 2020-2024 by Wilson Snyder. Verilator is free software; you can Copyright 2020-2025 by Wilson Snyder. Verilator is free software; you can
redistribute it and/or modify it under the terms of either the GNU Lesser redistribute it and/or modify it under the terms of either the GNU Lesser
General Public License Version 3 or the Perl Artistic License Version 2.0. General Public License Version 3 or the Perl Artistic License Version 2.0.
+7 -3
View File
@@ -24,8 +24,11 @@ cmake_policy(SET CMP0074 NEW)
project(cmake_hello_c) project(cmake_hello_c)
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT}) find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
if (NOT verilator_FOUND) if(NOT verilator_FOUND)
message(FATAL_ERROR "Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable") message(
FATAL_ERROR
"Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable"
)
endif() endif()
# Create a new executable target that will contain all your sources # Create a new executable target that will contain all your sources
@@ -35,4 +38,5 @@ target_compile_features(example PUBLIC cxx_std_14)
# Add the Verilated circuit to the target # Add the Verilated circuit to the target
verilate(example verilate(example
INCLUDE_DIRS "../make_hello_c" INCLUDE_DIRS "../make_hello_c"
SOURCES ../make_hello_c/top.v) SOURCES ../make_hello_c/top.v
)
+8 -7
View File
@@ -24,8 +24,11 @@ cmake_policy(SET CMP0074 NEW)
project(cmake_hello_sc CXX) project(cmake_hello_sc CXX)
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT}) find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
if (NOT verilator_FOUND) if(NOT verilator_FOUND)
message(FATAL_ERROR "Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable") message(
FATAL_ERROR
"Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable"
)
endif() endif()
# SystemC dependencies # SystemC dependencies
@@ -39,14 +42,12 @@ find_package(SystemCLanguage QUIET)
add_executable(example ../make_hello_sc/sc_main.cpp) add_executable(example ../make_hello_sc/sc_main.cpp)
target_compile_features(example PUBLIC cxx_std_14) target_compile_features(example PUBLIC cxx_std_14)
set_property( set_property(TARGET example PROPERTY CXX_STANDARD ${SystemC_CXX_STANDARD})
TARGET example
PROPERTY CXX_STANDARD ${SystemC_CXX_STANDARD}
)
# Add the Verilated circuit to the target # Add the Verilated circuit to the target
verilate(example SYSTEMC verilate(example SYSTEMC
INCLUDE_DIRS "../make_hello_sc" INCLUDE_DIRS "../make_hello_sc"
SOURCES ../make_hello_sc/top.v) SOURCES ../make_hello_sc/top.v
)
verilator_link_systemc(example) verilator_link_systemc(example)
+9 -4
View File
@@ -24,8 +24,11 @@ cmake_policy(SET CMP0074 NEW)
project(cmake_protect_lib) project(cmake_protect_lib)
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT}) find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
if (NOT verilator_FOUND) if(NOT verilator_FOUND)
message(FATAL_ERROR "Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable") message(
FATAL_ERROR
"Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable"
)
endif() endif()
# Create the main executable target # Create the main executable target
@@ -55,9 +58,11 @@ verilate(verilated_secret
VERILATOR_ARGS --protect-lib verilated_secret VERILATOR_ARGS --protect-lib verilated_secret
--protect-key ${PROTECT_KEY} --protect-key ${PROTECT_KEY}
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/verilated_secret DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/verilated_secret
SOURCES ../make_protect_lib/secret_impl.v) SOURCES ../make_protect_lib/secret_impl.v
)
# Include location of verilated_secret.sv wrapper # Include location of verilated_secret.sv wrapper
verilate(example verilate(example
VERILATOR_ARGS "-I${CMAKE_CURRENT_BINARY_DIR}/verilated_secret" VERILATOR_ARGS "-I${CMAKE_CURRENT_BINARY_DIR}/verilated_secret"
SOURCES ../make_protect_lib/top.v) SOURCES ../make_protect_lib/top.v
)
+7 -3
View File
@@ -24,8 +24,11 @@ cmake_policy(SET CMP0074 NEW)
project(cmake_tracing_c) project(cmake_tracing_c)
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT}) find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
if (NOT verilator_FOUND) if(NOT verilator_FOUND)
message(FATAL_ERROR "Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable") message(
FATAL_ERROR
"Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable"
)
endif() endif()
# Create a new executable target that will contain all your sources # Create a new executable target that will contain all your sources
@@ -36,4 +39,5 @@ target_compile_features(example PUBLIC cxx_std_14)
verilate(example COVERAGE TRACE verilate(example COVERAGE TRACE
INCLUDE_DIRS "../make_tracing_c" INCLUDE_DIRS "../make_tracing_c"
VERILATOR_ARGS -f ../make_tracing_c/input.vc -x-assign fast VERILATOR_ARGS -f ../make_tracing_c/input.vc -x-assign fast
SOURCES ../make_tracing_c/top.v) SOURCES ../make_tracing_c/top.v
)
+8 -7
View File
@@ -25,8 +25,11 @@ cmake_policy(SET CMP0074 NEW)
project(cmake_tracing_sc_example CXX) project(cmake_tracing_sc_example CXX)
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT}) find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
if (NOT verilator_FOUND) if(NOT verilator_FOUND)
message(FATAL_ERROR "Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable") message(
FATAL_ERROR
"Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable"
)
endif() endif()
# SystemC dependencies # SystemC dependencies
@@ -40,15 +43,13 @@ find_package(SystemCLanguage QUIET)
add_executable(example ../make_tracing_sc/sc_main.cpp) add_executable(example ../make_tracing_sc/sc_main.cpp)
target_compile_features(example PUBLIC cxx_std_14) target_compile_features(example PUBLIC cxx_std_14)
set_property( set_property(TARGET example PROPERTY CXX_STANDARD ${SystemC_CXX_STANDARD})
TARGET example
PROPERTY CXX_STANDARD ${SystemC_CXX_STANDARD}
)
# Add the Verilated circuit to the target # Add the Verilated circuit to the target
verilate(example SYSTEMC COVERAGE TRACE verilate(example SYSTEMC COVERAGE TRACE
INCLUDE_DIRS "../make_tracing_sc" INCLUDE_DIRS "../make_tracing_sc"
VERILATOR_ARGS -f ../make_tracing_sc/input.vc -x-assign fast VERILATOR_ARGS -f ../make_tracing_sc/input.vc -x-assign fast
SOURCES ../make_tracing_sc/top.v) SOURCES ../make_tracing_sc/top.v
)
verilator_link_systemc(example) verilator_link_systemc(example)
+1 -1
View File
@@ -13,6 +13,6 @@ module sub
); );
// Some simple logic // Some simple logic
always_comb out = ~ in; always_comb out = ~in;
endmodule endmodule
+5 -14
View File
@@ -25,8 +25,7 @@ class VlFileCopy:
self.debug = debug self.debug = debug
with NamedTemporaryFile() as tree_temp, NamedTemporaryFile( with NamedTemporaryFile() as tree_temp, NamedTemporaryFile() as meta_temp:
) as meta_temp:
vargs = [ vargs = [
'--json-only-output', '--json-only-output',
tree_temp.name, tree_temp.name,
@@ -61,8 +60,7 @@ class VlFileCopy:
print("\t%s " % command) print("\t%s " % command)
status = subprocess.call(command, shell=True) status = subprocess.call(command, shell=True)
if status != 0: if status != 0:
raise RuntimeError("Command failed running Verilator with '" + raise RuntimeError("Command failed running Verilator with '" + command + "', stopped")
command + "', stopped")
####################################################################### #######################################################################
@@ -71,8 +69,7 @@ if __name__ == '__main__':
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
allow_abbrev=False, allow_abbrev=False,
formatter_class=argparse.RawTextHelpFormatter, formatter_class=argparse.RawTextHelpFormatter,
description= description="""Example of using Verilator JSON output to copy a list of files to an
"""Example of using Verilator JSON output to copy a list of files to an
output directory (-odir, defaults to 'copied'), e.g. to easily create a output directory (-odir, defaults to 'copied'), e.g. to easily create a
tarball of the design to pass to others. tarball of the design to pass to others.
@@ -95,11 +92,7 @@ This file ONLY is placed under the Creative Commons Public Domain, for
any use, without warranty, 2019 by Wilson Snyder. any use, without warranty, 2019 by Wilson Snyder.
SPDX-License-Identifier: CC0-1.0 SPDX-License-Identifier: CC0-1.0
""") """)
parser.add_argument('-debug', parser.add_argument('-debug', '--debug', action='store_const', const=9, help='enable debug')
'--debug',
action='store_const',
const=9,
help='enable debug')
parser.add_argument('-odir', parser.add_argument('-odir',
'--odir', '--odir',
action='store', action='store',
@@ -108,9 +101,7 @@ SPDX-License-Identifier: CC0-1.0
help='target output directory') help='target output directory')
(args, rem) = parser.parse_known_args() (args, rem) = parser.parse_known_args()
print( print("NOTE: vl_file_copy is only an example starting point for writing your own tool.")
"NOTE: vl_file_copy is only an example starting point for writing your own tool."
)
# That is: # That is:
# 1. We will accept basic patches # 1. We will accept basic patches
# 2. We are not expecting to make this globally useful. (e.g. we don't cleanup obj_dir) # 2. We are not expecting to make this globally useful. (e.g. we don't cleanup obj_dir)
+7 -20
View File
@@ -24,8 +24,7 @@ class VlHierGraph:
self.next_vertex_number = 0 self.next_vertex_number = 0
self.addr_to_number = {} self.addr_to_number = {}
with NamedTemporaryFile() as tree_temp, NamedTemporaryFile( with NamedTemporaryFile() as tree_temp, NamedTemporaryFile() as meta_temp:
) as meta_temp:
vargs = [ vargs = [
'--json-only-output', '--json-only-output',
tree_temp.name, tree_temp.name,
@@ -45,9 +44,7 @@ class VlHierGraph:
fh.write("digraph {\n") fh.write("digraph {\n")
fh.write(" dpi=300;\n") fh.write(" dpi=300;\n")
fh.write(" order=LR;\n") fh.write(" order=LR;\n")
fh.write( fh.write(" node [fontsize=8 shape=\"box\" margin=0.01 width=0 height=0]")
" node [fontsize=8 shape=\"box\" margin=0.01 width=0 height=0]"
)
fh.write(" edge [fontsize=6]") fh.write(" edge [fontsize=6]")
# Find cells # Find cells
modules = self.flatten(self.tree, lambda n: n['type'] == "MODULE") modules = self.flatten(self.tree, lambda n: n['type'] == "MODULE")
@@ -101,8 +98,7 @@ class VlHierGraph:
print("\t%s " % command) print("\t%s " % command)
status = subprocess.call(command, shell=True) status = subprocess.call(command, shell=True)
if status != 0: if status != 0:
raise RuntimeError("Command failed running Verilator with '" + raise RuntimeError("Command failed running Verilator with '" + command + "', stopped")
command + "', stopped")
####################################################################### #######################################################################
@@ -111,8 +107,7 @@ if __name__ == '__main__':
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
allow_abbrev=False, allow_abbrev=False,
formatter_class=argparse.RawTextHelpFormatter, formatter_class=argparse.RawTextHelpFormatter,
description= description="""Example of using Verilator JSON output to create a .dot file showing the
"""Example of using Verilator JSON output to create a .dot file showing the
design module hierarchy. design module hierarchy.
Example usage: Example usage:
@@ -134,11 +129,7 @@ This file ONLY is placed under the Creative Commons Public Domain, for
any use, without warranty, 2019 by Wilson Snyder. any use, without warranty, 2019 by Wilson Snyder.
SPDX-License-Identifier: CC0-1.0 SPDX-License-Identifier: CC0-1.0
""") """)
parser.add_argument('-debug', parser.add_argument('-debug', '--debug', action='store_const', const=9, help='enable debug')
'--debug',
action='store_const',
const=9,
help='enable debug')
parser.add_argument('-o', parser.add_argument('-o',
'--o', '--o',
action='store', action='store',
@@ -147,18 +138,14 @@ SPDX-License-Identifier: CC0-1.0
help='output filename') help='output filename')
(args, rem) = parser.parse_known_args() (args, rem) = parser.parse_known_args()
print( print("NOTE: vl_hier_graph is only an example starting point for writing your own tool.")
"NOTE: vl_hier_graph is only an example starting point for writing your own tool."
)
# That is: # That is:
# 1. We will accept basic patches # 1. We will accept basic patches
# 2. We are not expecting to make this globally useful. (e.g. we don't cleanup obj_dir) # 2. We are not expecting to make this globally useful. (e.g. we don't cleanup obj_dir)
# 3. "make install" will not install this. # 3. "make install" will not install this.
# 4. This has not had production-worthy validation. # 4. This has not had production-worthy validation.
fc = VlHierGraph(output_filename=args.o, fc = VlHierGraph(output_filename=args.o, debug=args.debug, verilator_args=rem)
debug=args.debug,
verilator_args=rem)
###################################################################### ######################################################################
# Local Variables: # Local Variables:
+1 -1
View File
@@ -47,12 +47,12 @@ int main(int argc, char** argv) {
// Simulate until $finish // Simulate until $finish
while (!contextp->gotFinish()) { while (!contextp->gotFinish()) {
contextp->timeInc(1);
top->clk = ~top->clk & 0x1; top->clk = ~top->clk & 0x1;
top->eval(); top->eval();
#if VM_TRACE #if VM_TRACE
if (tfp) tfp->dump(contextp->time()); if (tfp) tfp->dump(contextp->time());
#endif #endif
contextp->timeInc(1);
} }
// Final model cleanup // Final model cleanup
+4 -4
View File
@@ -13,7 +13,7 @@ module sub
// Example counter/flop // Example counter/flop
reg [31:0] count_c; reg [31:0] count_c;
always_ff @ (posedge clk) begin always_ff @(posedge clk) begin
if (!reset_l) begin if (!reset_l) begin
/*AUTORESET*/ /*AUTORESET*/
// Beginning of autoreset for uninitialized flops // Beginning of autoreset for uninitialized flops
@@ -32,11 +32,11 @@ module sub
end end
// An example assertion // An example assertion
always_ff @ (posedge clk) begin always_ff @(posedge clk) begin
AssertionExample: assert (!reset_l || count_c<100); AssertionExample : assert (!reset_l || count_c < 100);
end end
// And example coverage analysis // And example coverage analysis
cover property (@(posedge clk) count_c==3); cover property (@(posedge clk) count_c == 3);
endmodule endmodule
+6 -7
View File
@@ -14,7 +14,7 @@ module sub
// Example counter/flop // Example counter/flop
reg [31:0] count_f; reg [31:0] count_f;
always_ff @ (posedge fastclk) begin always_ff @(posedge fastclk) begin
if (!reset_l) begin if (!reset_l) begin
/*AUTORESET*/ /*AUTORESET*/
// Beginning of autoreset for uninitialized flops // Beginning of autoreset for uninitialized flops
@@ -28,7 +28,7 @@ module sub
// Another example flop // Another example flop
reg [31:0] count_c; reg [31:0] count_c;
always_ff @ (posedge clk) begin always_ff @(posedge clk) begin
if (!reset_l) begin if (!reset_l) begin
/*AUTORESET*/ /*AUTORESET*/
// Beginning of autoreset for uninitialized flops // Beginning of autoreset for uninitialized flops
@@ -38,8 +38,7 @@ module sub
else begin else begin
count_c <= count_c + 1; count_c <= count_c + 1;
if (count_c >= 3) begin if (count_c >= 3) begin
$display("[%0t] fastclk is %0d times faster than clk\n", $display("[%0t] fastclk is %0d times faster than clk\n", $time, count_f / count_c);
$time, count_f/count_c);
// This write is a magic value the Makefile uses to make sure the // This write is a magic value the Makefile uses to make sure the
// test completes successfully. // test completes successfully.
$write("*-* All Finished *-*\n"); $write("*-* All Finished *-*\n");
@@ -49,11 +48,11 @@ module sub
end end
// An example assertion // An example assertion
always_ff @ (posedge clk) begin always_ff @(posedge clk) begin
AssertionExample: assert(!reset_l || count_c<100); AssertionExample : assert (!reset_l || count_c < 100);
end end
// And example coverage analysis // And example coverage analysis
cover property (@(posedge clk) count_c==3); cover property (@(posedge clk) count_c == 3);
endmodule endmodule
+26 -10
View File
@@ -130,6 +130,7 @@ void **JenkinsIns(void *base_i, const unsigned char *mem, uint32_t length, uint3
#define FST_HDR_TIMEZERO_SIZE (8) #define FST_HDR_TIMEZERO_SIZE (8)
#define FST_GZIO_LEN (32768) #define FST_GZIO_LEN (32768)
#define FST_HDR_FOURPACK_DUO_SIZE (4*1024*1024) #define FST_HDR_FOURPACK_DUO_SIZE (4*1024*1024)
#define FST_ZWRAPPER_HDR_SIZE (1+8+8)
#if defined(__APPLE__) && defined(__MACH__) #if defined(__APPLE__) && defined(__MACH__)
#define FST_MACOSX #define FST_MACOSX
@@ -347,8 +348,9 @@ return(NULL);
static void *fstMmap2(size_t __len, int __fd, fst_off_t __off) static void *fstMmap2(size_t __len, int __fd, fst_off_t __off)
{ {
DWORD64 len64 = __len; /* Must be 64-bit for shift below */
HANDLE handle = CreateFileMapping((HANDLE)_get_osfhandle(__fd), NULL, HANDLE handle = CreateFileMapping((HANDLE)_get_osfhandle(__fd), NULL,
PAGE_READWRITE, (DWORD)(__len >> 32), PAGE_READWRITE, (DWORD)(len64 >> 32),
(DWORD)__len, NULL); (DWORD)__len, NULL);
if (!handle) { return NULL; } if (!handle) { return NULL; }
@@ -548,8 +550,9 @@ return(rc);
static uint32_t fstReaderVarint32(FILE *f) static uint32_t fstReaderVarint32(FILE *f)
{ {
int chk_len = 5; /* TALOS-2023-1783 */ const int chk_len_max = 5; /* TALOS-2023-1783 */
unsigned char buf[chk_len]; int chk_len = chk_len_max;
unsigned char buf[chk_len_max];
unsigned char *mem = buf; unsigned char *mem = buf;
uint32_t rc = 0; uint32_t rc = 0;
int ch; int ch;
@@ -580,8 +583,9 @@ return(rc);
static uint32_t fstReaderVarint32WithSkip(FILE *f, uint32_t *skiplen) static uint32_t fstReaderVarint32WithSkip(FILE *f, uint32_t *skiplen)
{ {
int chk_len = 5; /* TALOS-2023-1783 */ const int chk_len_max = 5; /* TALOS-2023-1783 */
unsigned char buf[chk_len]; int chk_len = chk_len_max;
unsigned char buf[chk_len_max];
unsigned char *mem = buf; unsigned char *mem = buf;
uint32_t rc = 0; uint32_t rc = 0;
int ch; int ch;
@@ -613,8 +617,9 @@ return(rc);
static uint64_t fstReaderVarint64(FILE *f) static uint64_t fstReaderVarint64(FILE *f)
{ {
int chk_len = 16; /* TALOS-2023-1783 */ const int chk_len_max = 16; /* TALOS-2023-1783 */
unsigned char buf[chk_len]; int chk_len = chk_len_max;
unsigned char buf[chk_len_max];
unsigned char *mem = buf; unsigned char *mem = buf;
uint64_t rc = 0; uint64_t rc = 0;
int ch; int ch;
@@ -3902,16 +3907,18 @@ while (value)
static int fstVcdIDForFwrite(char *buf, unsigned int value) static int fstVcdIDForFwrite(char *buf, unsigned int value)
{ {
char *pnt = buf; char *pnt = buf;
int len = 0;
/* zero is illegal for a value...it is assumed they start at one */ /* zero is illegal for a value...it is assumed they start at one */
while (value) while (value && len < 14)
{ {
value--; value--;
++len;
*(pnt++) = (char)('!' + value % 94); *(pnt++) = (char)('!' + value % 94);
value = value / 94; value = value / 94;
} }
return(pnt - buf); return len;
} }
@@ -4632,9 +4639,14 @@ if(sectype == FST_BL_ZWRAPPER)
} }
#endif #endif
fstReaderFseeko(xc, xc->f, 1+8+8, SEEK_SET); fstReaderFseeko(xc, xc->f, FST_ZWRAPPER_HDR_SIZE, SEEK_SET);
#ifndef __MINGW32__ #ifndef __MINGW32__
fflush(xc->f); fflush(xc->f);
#else
/* Windows UCRT runtime library reads one byte ahead in the file
even with buffering disabled and does not synchronise the
file position after fseek. */
_lseek(fileno(xc->f), FST_ZWRAPPER_HDR_SIZE, SEEK_SET);
#endif #endif
zfd = dup(fileno(xc->f)); zfd = dup(fileno(xc->f));
@@ -6184,7 +6196,9 @@ struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
fst_off_t blkpos = 0, prev_blkpos; fst_off_t blkpos = 0, prev_blkpos;
uint64_t beg_tim, end_tim, beg_tim2, end_tim2; uint64_t beg_tim, end_tim, beg_tim2, end_tim2;
int sectype; int sectype;
#ifdef FST_DEBUG
unsigned int secnum = 0; unsigned int secnum = 0;
#endif
uint64_t seclen; uint64_t seclen;
uint64_t tsec_uclen = 0, tsec_clen = 0; uint64_t tsec_uclen = 0, tsec_clen = 0;
uint64_t tsec_nitems; uint64_t tsec_nitems;
@@ -6276,7 +6290,9 @@ for(;;)
} }
blkpos += seclen; blkpos += seclen;
#ifdef FST_DEBUG
secnum++; secnum++;
#endif
} }
xc->rvat_beg_tim = beg_tim; xc->rvat_beg_tim = beg_tim;
+166 -87
View File
@@ -3,7 +3,7 @@
// //
// Code available from: https://verilator.org // Code available from: https://verilator.org
// //
// Copyright 2003-2024 by Wilson Snyder. This program is free software; you can // Copyright 2003-2025 by Wilson Snyder. This program is free software; you can
// redistribute it and/or modify it under the terms of either the GNU // redistribute it and/or modify it under the terms of either the GNU
// Lesser General Public License Version 3 or the Perl Artistic License // Lesser General Public License Version 3 or the Perl Artistic License
// Version 2.0. // Version 2.0.
@@ -82,6 +82,12 @@
#include "verilated_trace.h" #include "verilated_trace.h"
#ifdef VM_SOLVER_DEFAULT
#define VL_SOLVER_DEFAULT VM_SOLVER_DEFAULT
#else
#define VL_SOLVER_DEFAULT "z3 --in"
#endif
// Max characters in static char string for VL_VALUE_STRING // Max characters in static char string for VL_VALUE_STRING
constexpr unsigned VL_VALUE_STRING_MAX_WIDTH = 8192; constexpr unsigned VL_VALUE_STRING_MAX_WIDTH = 8192;
@@ -122,6 +128,7 @@ void vl_finish(const char* filename, int linenum, const char* hier) VL_MT_UNSAFE
#ifndef VL_USER_STOP ///< Define this to override the vl_stop function #ifndef VL_USER_STOP ///< Define this to override the vl_stop function
void vl_stop(const char* filename, int linenum, const char* hier) VL_MT_UNSAFE { void vl_stop(const char* filename, int linenum, const char* hier) VL_MT_UNSAFE {
// $stop or $fatal reporting; would break current API to add param as to which
const char* const msg = "Verilog $stop"; const char* const msg = "Verilog $stop";
Verilated::threadContextp()->gotError(true); Verilated::threadContextp()->gotError(true);
Verilated::threadContextp()->gotFinish(true); Verilated::threadContextp()->gotFinish(true);
@@ -166,6 +173,7 @@ void vl_fatal(const char* filename, int linenum, const char* hier, const char* m
#ifndef VL_USER_STOP_MAYBE ///< Define this to override the vl_stop_maybe function #ifndef VL_USER_STOP_MAYBE ///< Define this to override the vl_stop_maybe function
void vl_stop_maybe(const char* filename, int linenum, const char* hier, bool maybe) VL_MT_UNSAFE { void vl_stop_maybe(const char* filename, int linenum, const char* hier, bool maybe) VL_MT_UNSAFE {
// $stop or $fatal
Verilated::threadContextp()->errorCountInc(); Verilated::threadContextp()->errorCountInc();
if (maybe if (maybe
&& Verilated::threadContextp()->errorCount() < Verilated::threadContextp()->errorLimit()) { && Verilated::threadContextp()->errorCount() < Verilated::threadContextp()->errorLimit()) {
@@ -406,6 +414,8 @@ IData VL_RAND_RESET_I(int obits) VL_MT_SAFE {
data &= VL_MASK_I(obits); data &= VL_MASK_I(obits);
return data; return data;
} }
IData VL_RAND_RESET_ASSIGN_I(int obits) VL_MT_SAFE { return VL_RANDOM_I() & VL_MASK_I(obits); }
QData VL_RAND_RESET_Q(int obits) VL_MT_SAFE { QData VL_RAND_RESET_Q(int obits) VL_MT_SAFE {
if (Verilated::threadContextp()->randReset() == 0) return 0; if (Verilated::threadContextp()->randReset() == 0) return 0;
QData data = ~0ULL; QData data = ~0ULL;
@@ -415,11 +425,19 @@ QData VL_RAND_RESET_Q(int obits) VL_MT_SAFE {
data &= VL_MASK_Q(obits); data &= VL_MASK_Q(obits);
return data; return data;
} }
QData VL_RAND_RESET_ASSIGN_Q(int obits) VL_MT_SAFE { return VL_RANDOM_Q() & VL_MASK_Q(obits); }
WDataOutP VL_RAND_RESET_W(int obits, WDataOutP outwp) VL_MT_SAFE { WDataOutP VL_RAND_RESET_W(int obits, WDataOutP outwp) VL_MT_SAFE {
for (int i = 0; i < VL_WORDS_I(obits) - 1; ++i) outwp[i] = VL_RAND_RESET_I(32); for (int i = 0; i < VL_WORDS_I(obits) - 1; ++i) outwp[i] = VL_RAND_RESET_I(32);
outwp[VL_WORDS_I(obits) - 1] = VL_RAND_RESET_I(32) & VL_MASK_E(obits); outwp[VL_WORDS_I(obits) - 1] = VL_RAND_RESET_I(32) & VL_MASK_E(obits);
return outwp; return outwp;
} }
WDataOutP VL_RAND_RESET_ASSIGN_W(int obits, WDataOutP outwp) VL_MT_SAFE {
for (int i = 0; i < VL_WORDS_I(obits) - 1; ++i) outwp[i] = VL_RAND_RESET_ASSIGN_I(32);
outwp[VL_WORDS_I(obits) - 1] = VL_RAND_RESET_ASSIGN_I(32) & VL_MASK_E(obits);
return outwp;
}
WDataOutP VL_ZERO_RESET_W(int obits, WDataOutP outwp) VL_MT_SAFE { WDataOutP VL_ZERO_RESET_W(int obits, WDataOutP outwp) VL_MT_SAFE {
// Not inlined to speed up compilation of slowpath code // Not inlined to speed up compilation of slowpath code
return VL_ZERO_W(obits, outwp); return VL_ZERO_W(obits, outwp);
@@ -1171,8 +1189,8 @@ static char* _vl_vsss_read_bin(FILE* fp, int& floc, const WDataInP fromp, const
static void _vl_vsss_setbit(WDataOutP iowp, int obits, int lsb, int nbits, IData ld) VL_MT_SAFE { static void _vl_vsss_setbit(WDataOutP iowp, int obits, int lsb, int nbits, IData ld) VL_MT_SAFE {
for (; nbits && lsb < obits; nbits--, lsb++, ld >>= 1) VL_ASSIGNBIT_WI(lsb, iowp, ld & 1); for (; nbits && lsb < obits; nbits--, lsb++, ld >>= 1) VL_ASSIGNBIT_WI(lsb, iowp, ld & 1);
} }
static void _vl_vsss_based(WDataOutP owp, int obits, int baseLog2, const char* strp, void _vl_vsss_based(WDataOutP owp, int obits, int baseLog2, const char* strp, size_t posstart,
size_t posstart, size_t posend) VL_MT_SAFE { size_t posend) VL_MT_SAFE {
// Read in base "2^^baseLog2" digits from strp[posstart..posend-1] into owp of size obits. // Read in base "2^^baseLog2" digits from strp[posstart..posend-1] into owp of size obits.
VL_ZERO_W(obits, owp); VL_ZERO_W(obits, owp);
int lsb = 0; int lsb = 0;
@@ -1747,9 +1765,11 @@ IData VL_SYSTEM_IQ(QData lhs) VL_MT_SAFE {
return VL_SYSTEM_IW(VL_WQ_WORDS_E, lhsw); return VL_SYSTEM_IW(VL_WQ_WORDS_E, lhsw);
} }
IData VL_SYSTEM_IW(int lhswords, const WDataInP lhsp) VL_MT_SAFE { IData VL_SYSTEM_IW(int lhswords, const WDataInP lhsp) VL_MT_SAFE {
char filenamez[VL_VALUE_STRING_MAX_CHARS + 1]; const std::string lhs = VL_CVT_PACK_STR_NW(lhswords, lhsp);
_vl_vint_to_string(lhswords * VL_EDATASIZE, filenamez, lhsp); return VL_SYSTEM_IN(lhs);
const int code = std::system(filenamez); // Yes, std::system() is threadsafe }
IData VL_SYSTEM_IN(const std::string& lhs) VL_MT_SAFE {
const int code = std::system(lhs.c_str()); // Yes, std::system() is threadsafe
return code >> 8; // Want exit status return code >> 8; // Want exit status
} }
@@ -1878,7 +1898,7 @@ std::string VL_TO_STRING(CData lhs) { return VL_SFORMATF_N_NX("'h%0x", 0, 8, lhs
std::string VL_TO_STRING(SData lhs) { return VL_SFORMATF_N_NX("'h%0x", 0, 16, lhs); } std::string VL_TO_STRING(SData lhs) { return VL_SFORMATF_N_NX("'h%0x", 0, 16, lhs); }
std::string VL_TO_STRING(IData lhs) { return VL_SFORMATF_N_NX("'h%0x", 0, 32, lhs); } std::string VL_TO_STRING(IData lhs) { return VL_SFORMATF_N_NX("'h%0x", 0, 32, lhs); }
std::string VL_TO_STRING(QData lhs) { return VL_SFORMATF_N_NX("'h%0x", 0, 64, lhs); } std::string VL_TO_STRING(QData lhs) { return VL_SFORMATF_N_NX("'h%0x", 0, 64, lhs); }
std::string VL_TO_STRING(double lhs) { return VL_SFORMATF_N_NX("%d", 0, 64, lhs); } std::string VL_TO_STRING(double lhs) { return VL_SFORMATF_N_NX("%g", 0, 64, lhs); }
std::string VL_TO_STRING_W(int words, const WDataInP obj) { std::string VL_TO_STRING_W(int words, const WDataInP obj) {
return VL_SFORMATF_N_NX("'h%0x", 0, words * VL_EDATASIZE, obj); return VL_SFORMATF_N_NX("'h%0x", 0, words * VL_EDATASIZE, obj);
} }
@@ -1896,20 +1916,16 @@ std::string VL_TOUPPER_NN(const std::string& ld) VL_PURE {
std::string VL_CVT_PACK_STR_NW(int lwords, const WDataInP lwp) VL_PURE { std::string VL_CVT_PACK_STR_NW(int lwords, const WDataInP lwp) VL_PURE {
// See also _vl_vint_to_string // See also _vl_vint_to_string
char destout[VL_VALUE_STRING_MAX_CHARS + 1]; std::string result;
result.reserve((lwords * VL_EDATASIZE) / 8 + 1);
const int obits = lwords * VL_EDATASIZE; const int obits = lwords * VL_EDATASIZE;
int lsb = obits - 1; int lsb = obits - 1;
char* destp = destout;
size_t len = 0;
for (; lsb >= 0; --lsb) { for (; lsb >= 0; --lsb) {
lsb = (lsb / 8) * 8; // Next digit lsb = (lsb / 8) * 8; // Next digit
const IData charval = VL_BITRSHIFT_W(lwp, lsb) & 0xff; const IData charval = VL_BITRSHIFT_W(lwp, lsb) & 0xff;
if (charval) { if (charval) result += static_cast<char>(charval);
*destp++ = static_cast<char>(charval);
++len;
}
} }
return std::string{destout, len}; return result;
} }
std::string VL_CVT_PACK_STR_ND(const VlQueue<std::string>& q) VL_PURE { std::string VL_CVT_PACK_STR_ND(const VlQueue<std::string>& q) VL_PURE {
@@ -2037,22 +2053,26 @@ bool VlReadMem::get(QData& addrr, std::string& valuer) {
if (VL_UNLIKELY(!m_fp)) return false; if (VL_UNLIKELY(!m_fp)) return false;
valuer = ""; valuer = "";
// Prep for reading // Prep for reading
bool indata = false; bool inData = false;
bool ignore_to_eol = false; bool ignoreToEol = false;
bool ignore_to_cmt = false; bool ignoreToComment = false;
bool reading_addr = false; bool readingAddress = false;
int lastc = ' '; int lastCh = ' ';
// Read the data // Read the data
// We process a character at a time, as then we don't need to deal // We process a character at a time, as then we don't need to deal
// with changing buffer sizes dynamically, etc. // with changing buffer sizes dynamically, etc.
while (true) { while (true) {
int c = std::fgetc(m_fp); int c = std::fgetc(m_fp);
if (VL_UNLIKELY(c == EOF)) break; if (VL_UNLIKELY(c == EOF)) break;
const bool chIs4StateBin
= c == '0' || c == '1' || c == 'x' || c == 'X' || c == 'z' || c == 'Z';
const bool chIs2StateHex = std::isxdigit(c);
const bool chIs4StateHex = std::isxdigit(c) || chIs4StateBin;
// printf("%d: Got '%c' Addr%lx IN%d IgE%d IgC%d\n", // printf("%d: Got '%c' Addr%lx IN%d IgE%d IgC%d\n",
// m_linenum, c, m_addr, indata, ignore_to_eol, ignore_to_cmt); // m_linenum, c, m_addr, inData, ignoreToEol, ignoreToComment);
// See if previous data value has completed, and if so return // See if previous data value has completed, and if so return
if (c == '_') continue; // Ignore _ e.g. inside a number if (c == '_') continue; // Ignore _ e.g. inside a number
if (indata && !std::isxdigit(c) && c != 'x' && c != 'X') { if (inData && !chIs4StateHex) {
// printf("Got data @%lx = %s\n", m_addr, valuer.c_str()); // printf("Got data @%lx = %s\n", m_addr, valuer.c_str());
ungetc(c, m_fp); ungetc(c, m_fp);
addrr = m_addr; addrr = m_addr;
@@ -2062,50 +2082,46 @@ bool VlReadMem::get(QData& addrr, std::string& valuer) {
// Parse line // Parse line
if (c == '\n') { if (c == '\n') {
++m_linenum; ++m_linenum;
ignore_to_eol = false; ignoreToEol = false;
reading_addr = false; readingAddress = false;
} else if (c == '\t' || c == ' ' || c == '\r' || c == '\f') { } else if (c == '\t' || c == ' ' || c == '\r' || c == '\f') {
reading_addr = false; readingAddress = false;
} }
// Skip // comments and detect /* comments // Skip // comments and detect /* comments
else if (ignore_to_cmt && lastc == '*' && c == '/') { else if (ignoreToComment && lastCh == '*' && c == '/') {
ignore_to_cmt = false; ignoreToComment = false;
reading_addr = false; readingAddress = false;
} else if (!ignore_to_eol && !ignore_to_cmt) { } else if (!ignoreToEol && !ignoreToComment) {
if (lastc == '/' && c == '*') { if (lastCh == '/' && c == '*') {
ignore_to_cmt = true; ignoreToComment = true;
} else if (lastc == '/' && c == '/') { } else if (lastCh == '/' && c == '/') {
ignore_to_eol = true; ignoreToEol = true;
} else if (c == '/') { // Part of /* or // } else if (c == '/') { // Part of /* or //
} else if (c == '#') { } else if (c == '#') {
ignore_to_eol = true; ignoreToEol = true;
} else if (c == '@') { } else if (c == '@') {
reading_addr = true; readingAddress = true;
m_anyAddr = true; m_anyAddr = true;
m_addr = 0; m_addr = 0;
} } else if (readingAddress && chIs2StateHex) {
// Check for hex or binary digits as file format requests
else if (std::isxdigit(c) || (!reading_addr && (c == 'x' || c == 'X'))) {
c = std::tolower(c); c = std::tolower(c);
const int value const int addressValue = (c >= 'a') ? (c - 'a' + 10) : (c - '0');
= (c >= 'a' ? (c == 'x' ? VL_RAND_RESET_I(4) : (c - 'a' + 10)) : (c - '0')); m_addr = (m_addr << 4) + addressValue;
if (reading_addr) { } else if (readingAddress && chIs4StateHex) {
// Decode @ addresses VL_FATAL_MT(m_filename.c_str(), m_linenum, "",
m_addr = (m_addr << 4) + value; "$readmem address contains 4-state characters");
} else { } else if (chIs4StateHex) {
indata = true; inData = true;
valuer += static_cast<char>(c); valuer += static_cast<char>(c);
// printf(" Value width=%d @%x = %c\n", width, m_addr, c); if (VL_UNLIKELY(!m_hex && !chIs4StateBin)) {
if (VL_UNLIKELY(value > 1 && !m_hex)) { VL_FATAL_MT(m_filename.c_str(), m_linenum, "",
VL_FATAL_MT(m_filename.c_str(), m_linenum, "", "$readmemb (binary) file contains hex characters");
"$readmemb (binary) file contains hex characters");
}
} }
} else { } else {
VL_FATAL_MT(m_filename.c_str(), m_linenum, "", "$readmem file syntax error"); VL_FATAL_MT(m_filename.c_str(), m_linenum, "", "$readmem file syntax error");
} }
} }
lastc = c; lastCh = c;
} }
if (VL_UNLIKELY(m_end != ~0ULL && m_addr <= m_end && !m_anyAddr)) { if (VL_UNLIKELY(m_end != ~0ULL && m_addr <= m_end && !m_anyAddr)) {
@@ -2114,7 +2130,7 @@ bool VlReadMem::get(QData& addrr, std::string& valuer) {
} }
addrr = m_addr; addrr = m_addr;
return indata; // EOF return inData; // EOF
} }
void VlReadMem::setData(void* valuep, const std::string& rhs) { void VlReadMem::setData(void* valuep, const std::string& rhs) {
const QData shift = m_hex ? 4ULL : 1ULL; const QData shift = m_hex ? 4ULL : 1ULL;
@@ -2122,8 +2138,9 @@ void VlReadMem::setData(void* valuep, const std::string& rhs) {
// Shift value in // Shift value in
for (const auto& i : rhs) { for (const auto& i : rhs) {
const char c = std::tolower(i); const char c = std::tolower(i);
const int value const int value = (c == 'x' || c == 'z') ? VL_RAND_RESET_I(m_hex ? 4 : 1)
= (c >= 'a' ? (c == 'x' ? VL_RAND_RESET_I(4) : (c - 'a' + 10)) : (c - '0')); : (c >= 'a') ? (c - 'a' + 10)
: (c - '0');
if (m_bits <= 8) { if (m_bits <= 8) {
CData* const datap = reinterpret_cast<CData*>(valuep); CData* const datap = reinterpret_cast<CData*>(valuep);
if (!innum) *datap = 0; if (!innum) *datap = 0;
@@ -2457,6 +2474,7 @@ VerilatedContext::VerilatedContext()
m_ns.m_coverageFilename = "coverage.dat"; m_ns.m_coverageFilename = "coverage.dat";
m_ns.m_profExecFilename = "profile_exec.dat"; m_ns.m_profExecFilename = "profile_exec.dat";
m_ns.m_profVltFilename = "profile.vlt"; m_ns.m_profVltFilename = "profile.vlt";
m_ns.m_solverProgram = VlOs::getenvStr("VERILATOR_SOLVER", VL_SOLVER_DEFAULT);
m_fdps.resize(31); m_fdps.resize(31);
std::fill(m_fdps.begin(), m_fdps.end(), static_cast<FILE*>(nullptr)); std::fill(m_fdps.begin(), m_fdps.end(), static_cast<FILE*>(nullptr));
m_fdFreeMct.resize(30); m_fdFreeMct.resize(30);
@@ -2483,9 +2501,47 @@ VerilatedContext::Serialized::Serialized() {
m_timeprecision = picosecond; // Initial value until overridden by _Vconfigure m_timeprecision = picosecond; // Initial value until overridden by _Vconfigure
} }
bool VerilatedContext::assertOn() const VL_MT_SAFE { return m_s.m_assertOn; }
void VerilatedContext::assertOn(bool flag) VL_MT_SAFE { void VerilatedContext::assertOn(bool flag) VL_MT_SAFE {
const VerilatedLockGuard lock{m_mutex}; // Set all assert and directive types when true, clear otherwise.
m_s.m_assertOn = flag; m_s.m_assertOn = VL_MASK_I(ASSERT_ON_WIDTH) * flag;
}
bool VerilatedContext::assertOnGet(VerilatedAssertType_t type,
VerilatedAssertDirectiveType_t directive) const VL_MT_SAFE {
// Check if selected directive type bit in the assertOn is enabled for assertion type.
// Note: it is assumed that this is checked only for one type at the time.
// Flag unspecified assertion types as disabled.
if (type == 0) return false;
// Get index of 3-bit group guarding assertion type status.
// Since the assertOnGet is generated __always__ for a single assert type, we assume that only
// a single bit will be set. Thus, ceil log2 will work fine.
VL_DEBUG_IFDEF(assert((type & (type - 1)) == 0););
const IData typeMaskPosition = VL_CLOG2_I(type);
// Check if directive type bit is enabled in corresponding assertion type bits.
return m_s.m_assertOn & (directive << (typeMaskPosition * ASSERT_DIRECTIVE_TYPE_MASK_WIDTH));
}
void VerilatedContext::assertOnSet(VerilatedAssertType_t types,
VerilatedAssertDirectiveType_t directives) VL_MT_SAFE {
// For each assertion type, set directive bits.
// Iterate through all positions of assertion type bits. If bit for this assertion type is set,
// set directive type bits mask at this group index.
for (int i = 0; i < std::numeric_limits<VerilatedAssertType_t>::digits; ++i) {
if (VL_BITISSET_I(types, i))
m_s.m_assertOn |= directives << (i * ASSERT_DIRECTIVE_TYPE_MASK_WIDTH);
}
}
void VerilatedContext::assertOnClear(VerilatedAssertType_t types,
VerilatedAssertDirectiveType_t directives) VL_MT_SAFE {
// Iterate through all positions of assertion type bits. If bit for this assertion type is set,
// clear directive type bits mask at this group index.
for (int i = 0; i < std::numeric_limits<VerilatedAssertType_t>::digits; ++i) {
if (VL_BITISSET_I(types, i))
m_s.m_assertOn &= ~(directives << (i * ASSERT_DIRECTIVE_TYPE_MASK_WIDTH));
}
} }
void VerilatedContext::calcUnusedSigs(bool flag) VL_MT_SAFE { void VerilatedContext::calcUnusedSigs(bool flag) VL_MT_SAFE {
const VerilatedLockGuard lock{m_mutex}; const VerilatedLockGuard lock{m_mutex};
@@ -2567,6 +2623,14 @@ std::string VerilatedContext::profVltFilename() const VL_MT_SAFE {
const VerilatedLockGuard lock{m_mutex}; const VerilatedLockGuard lock{m_mutex};
return m_ns.m_profVltFilename; return m_ns.m_profVltFilename;
} }
void VerilatedContext::solverProgram(const std::string& flag) VL_MT_SAFE {
const VerilatedLockGuard lock{m_mutex};
m_ns.m_solverProgram = flag;
}
std::string VerilatedContext::solverProgram() const VL_MT_SAFE {
const VerilatedLockGuard lock{m_mutex};
return m_ns.m_solverProgram;
}
void VerilatedContext::quiet(bool flag) VL_MT_SAFE { void VerilatedContext::quiet(bool flag) VL_MT_SAFE {
const VerilatedLockGuard lock{m_mutex}; const VerilatedLockGuard lock{m_mutex};
m_s.m_quiet = flag; m_s.m_quiet = flag;
@@ -2586,7 +2650,7 @@ const char* VerilatedContext::timeprecisionString() const VL_MT_SAFE {
} }
void VerilatedContext::threads(unsigned n) { void VerilatedContext::threads(unsigned n) {
if (n == 0) VL_FATAL_MT(__FILE__, __LINE__, "", "%Error: Simulation threads must be >= 1"); if (n == 0) VL_FATAL_MT(__FILE__, __LINE__, "", "Simulation threads must be >= 1");
if (m_threadPool) { if (m_threadPool) {
VL_FATAL_MT( VL_FATAL_MT(
@@ -2645,8 +2709,16 @@ void VerilatedContext::addModel(VerilatedModel* modelp) {
m_ns.m_cpuTimeStart.start(); m_ns.m_cpuTimeStart.start();
m_ns.m_wallTimeStart.start(); m_ns.m_wallTimeStart.start();
} }
threadPoolp(); // Ensure thread pool is created, so m_threads cannot change any more
// We look for time passing, as opposed to post-eval(), as embedded
// models might get added inside initial blocks.
if (VL_UNLIKELY(time()))
VL_FATAL_MT(
"", 0, "",
"Adding model when time is non-zero. ... Suggest check time(), or for restarting"
" model use a new VerilatedContext");
threadPoolp(); // Ensure thread pool is created, so m_threads cannot change any more
m_threadsInModels += modelp->threads(); m_threadsInModels += modelp->threads();
if (VL_UNLIKELY(modelp->threads() > m_threads)) { if (VL_UNLIKELY(modelp->threads() > m_threads)) {
std::ostringstream msg; std::ostringstream msg;
@@ -2882,7 +2954,7 @@ void VerilatedContext::statsPrintSummary() VL_MT_UNSAFE {
VL_PRINTF("- Verilator: %s at %s; walltime %0.3f s; speed %s/s\n", endwhy.c_str(), VL_PRINTF("- Verilator: %s at %s; walltime %0.3f s; speed %s/s\n", endwhy.c_str(),
simtime.c_str(), walltime, simtimePerf.c_str()); simtime.c_str(), walltime, simtimePerf.c_str());
const double modelMB = VlOs::memUsageBytes() / 1024.0 / 1024.0; const double modelMB = VlOs::memUsageBytes() / 1024.0 / 1024.0;
VL_PRINTF("- Verilator: cpu %0.3f s on %d threads; alloced %0.0f MB\n", cputime, VL_PRINTF("- Verilator: cpu %0.3f s on %u threads; alloced %0.0f MB\n", cputime,
threadsInModels(), modelMB); threadsInModels(), modelMB);
} }
@@ -2927,13 +2999,12 @@ const VerilatedScopeNameMap* VerilatedContext::scopeNameMap() VL_MT_SAFE {
//====================================================================== //======================================================================
// VerilatedContext:: Methods - trace // VerilatedContext:: Methods - trace
void VerilatedContext::trace(VerilatedTraceBaseC* tfp, int levels, int options) VL_MT_SAFE { void VerilatedContext::trace(VerilatedTraceBaseC* tfp, int levels, int options) {
VL_DEBUG_IF(VL_DBG_MSGF("+ VerilatedContext::trace\n");); VL_DEBUG_IF(VL_DBG_MSGF("+ VerilatedContext::trace\n"););
if (tfp->isOpen()) { if (tfp->isOpen()) {
VL_FATAL_MT("", 0, "", VL_FATAL_MT("", 0, "",
"Testbench C call to 'VerilatedContext::trace()' must not be called" "Testbench C call to 'VerilatedContext::trace()' must not be called"
" after 'VerilatedTrace*::open()'\n"); " after 'VerilatedTrace*::open()'\n");
return;
} }
{ {
// Legacy usage may call {modela}->trace(...) then {modelb}->trace(...) // Legacy usage may call {modela}->trace(...) then {modelb}->trace(...)
@@ -3126,12 +3197,21 @@ void Verilated::stackCheck(QData needSize) VL_MT_UNSAFE {
if (haveSize == RLIM_INFINITY) haveSize = 0; if (haveSize == RLIM_INFINITY) haveSize = 0;
} }
// VL_PRINTF_MT("-Info: stackCheck(%" PRIu64 ") have %" PRIu64 "\n", needSize, haveSize); // VL_PRINTF_MT("-Info: stackCheck(%" PRIu64 ") have %" PRIu64 "\n", needSize, haveSize);
// Check for 1.5x need, but suggest 2x so small model increase won't cause warning // Check and request for 1.5x need. This is automated so the user doesn't need to do anything.
// if the user follows the suggestions QData requestSize = needSize + needSize / 2;
if (VL_UNLIKELY(haveSize && needSize && haveSize < (needSize + needSize / 2))) { if (VL_UNLIKELY(haveSize && needSize && haveSize < requestSize)) {
VL_PRINTF_MT("%%Warning: System has stack size %" PRIu64 " kb" // Try to increase the stack limit to the requested size
" which may be too small; suggest 'ulimit -s %" PRIu64 "' or larger\n", rlim.rlim_cur = requestSize;
haveSize / 1024, (needSize * 2) / 1024); if (
#ifdef _VL_TEST_RLIMIT_FAIL
true ||
#endif
setrlimit(RLIMIT_STACK, &rlim)) {
VL_PRINTF_MT("%%Warning: System has stack size %" PRIu64 " kb"
" which may be too small; failed to request more"
" using 'ulimit -s %" PRIu64 "'\n",
haveSize / 1024, requestSize);
}
} }
#else #else
(void)needSize; // Unused argument (void)needSize; // Unused argument
@@ -3209,7 +3289,7 @@ uint32_t VerilatedVarProps::entSize() const VL_MT_SAFE {
case VLVT_UINT16: size = sizeof(SData); break; case VLVT_UINT16: size = sizeof(SData); break;
case VLVT_UINT32: size = sizeof(IData); break; case VLVT_UINT32: size = sizeof(IData); break;
case VLVT_UINT64: size = sizeof(QData); break; case VLVT_UINT64: size = sizeof(QData); break;
case VLVT_WDATA: size = VL_WORDS_I(packed().elements()) * sizeof(IData); break; case VLVT_WDATA: size = VL_WORDS_I(entBits()) * sizeof(IData); break;
default: size = 0; break; // LCOV_EXCL_LINE default: size = 0; break; // LCOV_EXCL_LINE
} }
return size; return size;
@@ -3228,7 +3308,7 @@ void* VerilatedVarProps::datapAdjustIndex(void* datap, int dim, int indx) const
uint8_t* bytep = reinterpret_cast<uint8_t*>(datap); uint8_t* bytep = reinterpret_cast<uint8_t*>(datap);
// If on index 1 of a 2 index array, then each index 1 is index2sz*entsz // If on index 1 of a 2 index array, then each index 1 is index2sz*entsz
size_t slicesz = entSize(); size_t slicesz = entSize();
for (int d = dim + 1; d <= m_udims; ++d) slicesz *= elements(d); for (int d = dim + 1; d <= udims(); ++d) slicesz *= elements(d);
bytep += indxAdj * slicesz; bytep += indxAdj * slicesz;
return bytep; return bytep;
} }
@@ -3246,7 +3326,7 @@ VerilatedScope::~VerilatedScope() {
} }
void VerilatedScope::configure(VerilatedSyms* symsp, const char* prefixp, const char* suffixp, void VerilatedScope::configure(VerilatedSyms* symsp, const char* prefixp, const char* suffixp,
const char* identifier, int8_t timeunit, const char* identifier, const char* defnamep, int8_t timeunit,
const Type& type) VL_MT_UNSAFE { const Type& type) VL_MT_UNSAFE {
// Slowpath - called once/scope at construction // Slowpath - called once/scope at construction
// We don't want the space and reference-count access overhead of strings. // We don't want the space and reference-count access overhead of strings.
@@ -3263,6 +3343,7 @@ void VerilatedScope::configure(VerilatedSyms* symsp, const char* prefixp, const
m_namep = namep; m_namep = namep;
} }
m_identifierp = identifier; m_identifierp = identifier;
m_defnamep = defnamep;
Verilated::threadContextp()->impp()->scopeInsert(this); Verilated::threadContextp()->impp()->scopeInsert(this);
} }
@@ -3288,32 +3369,30 @@ void VerilatedScope::exportInsert(int finalize, const char* namep, void* cb) VL_
} }
void VerilatedScope::varInsert(int finalize, const char* namep, void* datap, bool isParam, void VerilatedScope::varInsert(int finalize, const char* namep, void* datap, bool isParam,
VerilatedVarType vltype, int vlflags, int dims, ...) VL_MT_UNSAFE { VerilatedVarType vltype, int vlflags, int udims,
int pdims...) VL_MT_UNSAFE {
// Grab dimensions // Grab dimensions
// In the future we may just create a large table at emit time and // In the future we may just create a large table at emit time and
// statically construct from that. // statically construct from that.
if (!finalize) return; if (!finalize) return;
if (!m_varsp) m_varsp = new VerilatedVarNameMap; if (!m_varsp) m_varsp = new VerilatedVarNameMap;
VerilatedVar var(namep, datap, vltype, static_cast<VerilatedVarFlags>(vlflags), dims, isParam); VerilatedVar var(namep, datap, vltype, static_cast<VerilatedVarFlags>(vlflags), udims, pdims,
isParam);
va_list ap; va_list ap;
va_start(ap, dims); va_start(ap, pdims);
for (int i = 0; i < dims; ++i) { for (int i = 0; i < udims; ++i) {
const int msb = va_arg(ap, int); const int msb = va_arg(ap, int);
const int lsb = va_arg(ap, int); const int lsb = va_arg(ap, int);
if (i == 0) { var.m_unpacked[i].m_left = msb;
var.m_packed.m_left = msb; var.m_unpacked[i].m_right = lsb;
var.m_packed.m_right = lsb; }
} else if (i >= 1 && i <= var.udims()) { for (int i = 0; i < pdims; ++i) {
var.m_unpacked[i - 1].m_left = msb; const int msb = va_arg(ap, int);
var.m_unpacked[i - 1].m_right = lsb; const int lsb = va_arg(ap, int);
} else { var.m_packed[i].m_left = msb;
// We could have a linked list of ranges, but really this whole thing needs var.m_packed[i].m_right = lsb;
// to be generalized to support structs and unions, etc.
const std::string msg = "Unsupported multi-dimensional public varInsert: "s + namep;
VL_FATAL_MT(__FILE__, __LINE__, "", msg.c_str());
}
} }
va_end(ap); va_end(ap);
+123 -78
View File
@@ -3,7 +3,7 @@
// //
// Code available from: https://verilator.org // Code available from: https://verilator.org
// //
// Copyright 2003-2024 by Wilson Snyder. This program is free software; you can // Copyright 2003-2025 by Wilson Snyder. This program is free software; you can
// redistribute it and/or modify it under the terms of either the GNU // redistribute it and/or modify it under the terms of either the GNU
// Lesser General Public License Version 3 or the Perl Artistic License // Lesser General Public License Version 3 or the Perl Artistic License
// Version 2.0. // Version 2.0.
@@ -55,6 +55,7 @@
#include <cstring> #include <cstring>
#include <deque> #include <deque>
#include <functional> #include <functional>
#include <limits>
#include <map> #include <map>
#include <memory> #include <memory>
#include <set> #include <set>
@@ -99,7 +100,7 @@ class VerilatedFstC;
class VerilatedFstSc; class VerilatedFstSc;
class VerilatedScope; class VerilatedScope;
class VerilatedScopeNameMap; class VerilatedScopeNameMap;
template <class, class> template <typename, typename>
class VerilatedTrace; class VerilatedTrace;
class VerilatedTraceBaseC; class VerilatedTraceBaseC;
class VerilatedTraceConfig; class VerilatedTraceConfig;
@@ -153,6 +154,30 @@ enum VerilatedVarFlags {
VLVF_DPI_CLAY = (1 << 10) // DPI compatible C standard layout VLVF_DPI_CLAY = (1 << 10) // DPI compatible C standard layout
}; };
// IEEE 1800-2023 Table 20-6
enum class VerilatedAssertType : uint8_t {
ASSERT_TYPE_CONCURRENT = (1 << 0),
ASSERT_TYPE_SIMPLE_IMMEDIATE = (1 << 1),
ASSERT_TYPE_OBSERVED_DEFERRED_IMMEDIATE = (1 << 2),
ASSERT_TYPE_FINAL_DEFERRED_IMMEDIATE = (1 << 3),
ASSERT_TYPE_EXPECT = (1 << 4),
ASSERT_TYPE_UNIQUE = (1 << 5),
ASSERT_TYPE_UNIQUE0 = (1 << 6),
ASSERT_TYPE_PRIORITY = (1 << 7),
};
// IEEE 1800-2023 Table 20-7
enum class VerilatedAssertDirectiveType : uint8_t {
DIRECTIVE_TYPE_ASSERT = (1 << 0),
DIRECTIVE_TYPE_COVER = (1 << 1),
DIRECTIVE_TYPE_ASSUME = (1 << 2),
};
using VerilatedAssertType_t = std::underlying_type<VerilatedAssertType>::type;
using VerilatedAssertDirectiveType_t = std::underlying_type<VerilatedAssertDirectiveType>::type;
// Type trait for custom struct
template <typename>
struct VlIsCustomStruct : public std::false_type {};
//============================================================================= //=============================================================================
// Utility functions // Utility functions
@@ -199,19 +224,6 @@ public:
void unlock() VL_RELEASE() VL_MT_SAFE { m_mutex.unlock(); } void unlock() VL_RELEASE() VL_MT_SAFE { m_mutex.unlock(); }
/// Try to acquire mutex. Returns true on success, and false on failure. /// Try to acquire mutex. Returns true on success, and false on failure.
bool try_lock() VL_TRY_ACQUIRE(true) VL_MT_SAFE { return m_mutex.try_lock(); } bool try_lock() VL_TRY_ACQUIRE(true) VL_MT_SAFE { return m_mutex.try_lock(); }
/// Acquire/lock mutex and check for stop request
/// It tries to lock the mutex and if it fails, it check if stop request was send.
/// It returns after locking mutex.
/// This function should be extracted to V3ThreadPool, but due to clang thread-safety
/// limitations it needs to be placed here.
void lockCheckStopRequest(std::function<void()> checkStopRequestFunction)
VL_ACQUIRE() VL_MT_SAFE {
while (true) {
checkStopRequestFunction();
if (m_mutex.try_lock()) return;
VL_CPU_RELAX();
}
}
}; };
/// Lock guard for mutex (ala std::unique_lock), wrapped to allow -fthread_safety checks /// Lock guard for mutex (ala std::unique_lock), wrapped to allow -fthread_safety checks
@@ -291,7 +303,7 @@ public:
private: private:
// The following are for use by Verilator internals only // The following are for use by Verilator internals only
template <class, class> template <typename, typename>
friend class VerilatedTrace; friend class VerilatedTrace;
// Run-time trace configuration requested by this model // Run-time trace configuration requested by this model
virtual std::unique_ptr<VerilatedTraceConfig> traceConfig() const; virtual std::unique_ptr<VerilatedTraceConfig> traceConfig() const;
@@ -347,6 +359,19 @@ public:
class VerilatedContext VL_NOT_FINAL { class VerilatedContext VL_NOT_FINAL {
friend class VerilatedContextImp; friend class VerilatedContextImp;
private:
// MEMBERS
// Numer of assertion directive type members. Then each of them will represented as 1-bit in a
// mask.
static constexpr size_t ASSERT_DIRECTIVE_TYPE_MASK_WIDTH = 3;
// Specifies how many groups of directive type bit groups there are based on a number of
// assertion types.
// Note: we add one bit to store information whether Verilator's internal
// directive types are enabled, for example `violation if`s.
static constexpr size_t ASSERT_ON_WIDTH
= ASSERT_DIRECTIVE_TYPE_MASK_WIDTH * std::numeric_limits<VerilatedAssertType_t>::digits
+ 1;
protected: protected:
// TYPES // TYPES
using traceBaseModelCb_t using traceBaseModelCb_t
@@ -360,7 +385,11 @@ protected:
// No std::strings or pointers or will serialize badly! // No std::strings or pointers or will serialize badly!
// Fast path // Fast path
uint64_t m_time = 0; // Current $time (unscaled), 0=at zero, or legacy uint64_t m_time = 0; // Current $time (unscaled), 0=at zero, or legacy
bool m_assertOn = true; // Assertions are enabled std::atomic<uint32_t> m_assertOn{
std::numeric_limits<uint32_t>::max()}; // Enabled assertions,
// for each VerilatedAssertType we store
// 3-bits, one for each directive type. Last
// bit guards internal directive types.
bool m_calcUnusedSigs = false; // Waves file on, need all signals calculated bool m_calcUnusedSigs = false; // Waves file on, need all signals calculated
bool m_fatalOnError = true; // Fatal on $stop/non-fatal error bool m_fatalOnError = true; // Fatal on $stop/non-fatal error
bool m_fatalOnVpiError = true; // Fatal on vpi error/unsupported bool m_fatalOnVpiError = true; // Fatal on vpi error/unsupported
@@ -396,6 +425,7 @@ protected:
std::string m_coverageFilename; // +coverage+file filename std::string m_coverageFilename; // +coverage+file filename
std::string m_profExecFilename; // +prof+exec+file filename std::string m_profExecFilename; // +prof+exec+file filename
std::string m_profVltFilename; // +prof+vlt filename std::string m_profVltFilename; // +prof+vlt filename
std::string m_solverProgram; // SMT solver program
VlOs::DeltaCpuTime m_cpuTimeStart{false}; // CPU time, starts when create first model VlOs::DeltaCpuTime m_cpuTimeStart{false}; // CPU time, starts when create first model
VlOs::DeltaWallTime m_wallTimeStart{false}; // Wall time, starts when create first model VlOs::DeltaWallTime m_wallTimeStart{false}; // Wall time, starts when create first model
std::vector<traceBaseModelCb_t> m_traceBaseModelCbs; // Callbacks to traceRegisterModel std::vector<traceBaseModelCb_t> m_traceBaseModelCbs; // Callbacks to traceRegisterModel
@@ -447,14 +477,23 @@ public:
// METHODS - User called // METHODS - User called
/// Enable assertions
void assertOn(bool flag) VL_MT_SAFE;
/// Return if assertions enabled /// Return if assertions enabled
bool assertOn() const VL_MT_SAFE { return m_s.m_assertOn; } bool assertOn() const VL_MT_SAFE;
/// Enable calculation of unused signals (for traces) /// Enable all assertion types
void calcUnusedSigs(bool flag) VL_MT_SAFE; void assertOn(bool flag) VL_MT_SAFE;
/// Get enabled status for given assertion types
bool assertOnGet(VerilatedAssertType_t type,
VerilatedAssertDirectiveType_t directive) const VL_MT_SAFE;
/// Set enabled status for given assertion types
void assertOnSet(VerilatedAssertType_t types,
VerilatedAssertDirectiveType_t directives) VL_MT_SAFE;
/// Clear enabled status for given assertion types
void assertOnClear(VerilatedAssertType_t types,
VerilatedAssertDirectiveType_t directives) VL_MT_SAFE;
/// Return if calculating of unused signals (for traces) /// Return if calculating of unused signals (for traces)
bool calcUnusedSigs() const VL_MT_SAFE { return m_s.m_calcUnusedSigs; } bool calcUnusedSigs() const VL_MT_SAFE { return m_s.m_calcUnusedSigs; }
/// Enable calculation of unused signals (for traces)
void calcUnusedSigs(bool flag) VL_MT_SAFE;
/// Record command-line arguments, for retrieval by $test$plusargs/$value$plusargs, /// Record command-line arguments, for retrieval by $test$plusargs/$value$plusargs,
/// and for parsing +verilator+ run-time arguments. /// and for parsing +verilator+ run-time arguments.
/// This should be called before the first model is created. /// This should be called before the first model is created.
@@ -469,52 +508,51 @@ public:
/// Return VerilatedCovContext, allocate if needed /// Return VerilatedCovContext, allocate if needed
/// Note if get unresolved reference then likely forgot to link verilated_cov.cpp /// Note if get unresolved reference then likely forgot to link verilated_cov.cpp
VerilatedCovContext* coveragep() VL_MT_SAFE; VerilatedCovContext* coveragep() VL_MT_SAFE;
/// Set debug level /// Return debug level
static inline int debug() VL_MT_SAFE; /// Set debug level
/// Debug is currently global, but for forward compatibility have a per-context method /// Debug is currently global, but for forward compatibility have a per-context method
static inline void debug(int val) VL_MT_SAFE; static inline void debug(int val) VL_MT_SAFE;
/// Return debug level /// Return current number of errors/assertions
static inline int debug() VL_MT_SAFE; int errorCount() const VL_MT_SAFE { return m_s.m_errorCount; }
/// Set current number of errors/assertions /// Set current number of errors/assertions
void errorCount(int val) VL_MT_SAFE; void errorCount(int val) VL_MT_SAFE;
/// Increment current number of errors/assertions /// Increment current number of errors/assertions
void errorCountInc() VL_MT_SAFE; void errorCountInc() VL_MT_SAFE;
/// Return current number of errors/assertions
int errorCount() const VL_MT_SAFE { return m_s.m_errorCount; }
/// Set number of errors/assertions before stop
void errorLimit(int val) VL_MT_SAFE;
/// Return number of errors/assertions before stop /// Return number of errors/assertions before stop
int errorLimit() const VL_MT_SAFE { return m_s.m_errorLimit; } int errorLimit() const VL_MT_SAFE { return m_s.m_errorLimit; }
/// Set to throw fatal error on $stop/non-fatal error /// Set number of errors/assertions before stop
void fatalOnError(bool flag) VL_MT_SAFE; void errorLimit(int val) VL_MT_SAFE;
/// Return if to throw fatal error on $stop/non-fatal /// Return if to throw fatal error on $stop/non-fatal
bool fatalOnError() const VL_MT_SAFE { return m_s.m_fatalOnError; } bool fatalOnError() const VL_MT_SAFE { return m_s.m_fatalOnError; }
/// Set to throw fatal error on VPI errors /// Set to throw fatal error on $stop/non-fatal error
void fatalOnVpiError(bool flag) VL_MT_SAFE; void fatalOnError(bool flag) VL_MT_SAFE;
/// Return if to throw fatal error on VPI errors /// Return if to throw fatal error on VPI errors
bool fatalOnVpiError() const VL_MT_SAFE { return m_s.m_fatalOnVpiError; } bool fatalOnVpiError() const VL_MT_SAFE { return m_s.m_fatalOnVpiError; }
/// Set if got a $stop or non-fatal error /// Set to throw fatal error on VPI errors
void gotError(bool flag) VL_MT_SAFE; void fatalOnVpiError(bool flag) VL_MT_SAFE;
/// Return if got a $stop or non-fatal error /// Return if got a $stop or non-fatal error
bool gotError() const VL_MT_SAFE { return m_s.m_gotError; } bool gotError() const VL_MT_SAFE { return m_s.m_gotError; }
/// Set if got a $finish or $stop/error /// Set if got a $stop or non-fatal error
void gotFinish(bool flag) VL_MT_SAFE; void gotError(bool flag) VL_MT_SAFE;
/// Return if got a $finish or $stop/error /// Return if got a $finish or $stop/error
bool gotFinish() const VL_MT_SAFE { return m_s.m_gotFinish; } bool gotFinish() const VL_MT_SAFE { return m_s.m_gotFinish; }
/// Enable quiet (also prevents need for OS calls to get CPU time) /// Set if got a $finish or $stop/error
void quiet(bool flag) VL_MT_SAFE; void gotFinish(bool flag) VL_MT_SAFE;
/// Return if quiet enabled /// Return if quiet enabled
bool quiet() const VL_MT_SAFE { return m_s.m_quiet; } bool quiet() const VL_MT_SAFE { return m_s.m_quiet; }
/// Enable quiet (also prevents need for OS calls to get CPU time)
void quiet(bool flag) VL_MT_SAFE;
/// Return randReset value
int randReset() VL_MT_SAFE { return m_s.m_randReset; }
/// Select initial value of otherwise uninitialized signals. /// Select initial value of otherwise uninitialized signals.
/// 0 = Set to zeros /// 0 = Set to zeros
/// 1 = Set all bits to one /// 1 = Set all bits to one
/// 2 = Randomize all bits /// 2 = Randomize all bits
void randReset(int val) VL_MT_SAFE; void randReset(int val) VL_MT_SAFE;
/// Return randReset value
int randReset() VL_MT_SAFE { return m_s.m_randReset; }
/// Return default random seed /// Return default random seed
void randSeed(int val) VL_MT_SAFE;
/// Set default random seed, 0 = seed it automatically
int randSeed() const VL_MT_SAFE { return m_s.m_randSeed; } int randSeed() const VL_MT_SAFE { return m_s.m_randSeed; }
/// Set default random seed, 0 = seed it automatically
void randSeed(int val) VL_MT_SAFE;
/// Return statistic: CPU time delta from model created until now /// Return statistic: CPU time delta from model created until now
double statCpuTimeSinceStart() const VL_MT_SAFE_EXCLUDES(m_mutex); double statCpuTimeSinceStart() const VL_MT_SAFE_EXCLUDES(m_mutex);
@@ -606,23 +644,27 @@ public:
enableExecutionProfiler(VerilatedVirtualBase* (*construct)(VerilatedContext&)); enableExecutionProfiler(VerilatedVirtualBase* (*construct)(VerilatedContext&));
// Internal: coverage // Internal: coverage
void coverageFilename(const std::string& flag) VL_MT_SAFE;
std::string coverageFilename() const VL_MT_SAFE; std::string coverageFilename() const VL_MT_SAFE;
void coverageFilename(const std::string& flag) VL_MT_SAFE;
// Internal: $dumpfile // Internal: $dumpfile
void dumpfile(const std::string& flag) VL_MT_SAFE_EXCLUDES(m_timeDumpMutex);
std::string dumpfile() const VL_MT_SAFE_EXCLUDES(m_timeDumpMutex); std::string dumpfile() const VL_MT_SAFE_EXCLUDES(m_timeDumpMutex);
void dumpfile(const std::string& flag) VL_MT_SAFE_EXCLUDES(m_timeDumpMutex);
std::string dumpfileCheck() const VL_MT_SAFE_EXCLUDES(m_timeDumpMutex); std::string dumpfileCheck() const VL_MT_SAFE_EXCLUDES(m_timeDumpMutex);
// Internal: --prof-exec related settings // Internal: --prof-exec related settings
void profExecStart(uint64_t flag) VL_MT_SAFE;
uint64_t profExecStart() const VL_MT_SAFE { return m_ns.m_profExecStart; } uint64_t profExecStart() const VL_MT_SAFE { return m_ns.m_profExecStart; }
void profExecWindow(uint64_t flag) VL_MT_SAFE; void profExecStart(uint64_t flag) VL_MT_SAFE;
uint32_t profExecWindow() const VL_MT_SAFE { return m_ns.m_profExecWindow; } uint32_t profExecWindow() const VL_MT_SAFE { return m_ns.m_profExecWindow; }
void profExecFilename(const std::string& flag) VL_MT_SAFE; void profExecWindow(uint64_t flag) VL_MT_SAFE;
std::string profExecFilename() const VL_MT_SAFE; std::string profExecFilename() const VL_MT_SAFE;
void profVltFilename(const std::string& flag) VL_MT_SAFE; void profExecFilename(const std::string& flag) VL_MT_SAFE;
std::string profVltFilename() const VL_MT_SAFE; std::string profVltFilename() const VL_MT_SAFE;
void profVltFilename(const std::string& flag) VL_MT_SAFE;
// Internal: SMT solver program
std::string solverProgram() const VL_MT_SAFE;
void solverProgram(const std::string& flag) VL_MT_SAFE;
// Internal: Find scope // Internal: Find scope
const VerilatedScope* scopeFind(const char* namep) const VL_MT_SAFE; const VerilatedScope* scopeFind(const char* namep) const VL_MT_SAFE;
@@ -675,6 +717,7 @@ private:
VerilatedVarNameMap* m_varsp = nullptr; // Variable map VerilatedVarNameMap* m_varsp = nullptr; // Variable map
const char* m_namep = nullptr; // Scope name (Slowpath) const char* m_namep = nullptr; // Scope name (Slowpath)
const char* m_identifierp = nullptr; // Identifier of scope (with escapes removed) const char* m_identifierp = nullptr; // Identifier of scope (with escapes removed)
const char* m_defnamep = nullptr; // Definition name (SCOPE_MODULE only)
int8_t m_timeunit = 0; // Timeunit in negative power-of-10 int8_t m_timeunit = 0; // Timeunit in negative power-of-10
Type m_type = SCOPE_OTHER; // Type of the scope Type m_type = SCOPE_OTHER; // Type of the scope
@@ -682,13 +725,15 @@ public: // But internals only - called from VerilatedModule's
VerilatedScope() = default; VerilatedScope() = default;
~VerilatedScope(); ~VerilatedScope();
void configure(VerilatedSyms* symsp, const char* prefixp, const char* suffixp, void configure(VerilatedSyms* symsp, const char* prefixp, const char* suffixp,
const char* identifier, int8_t timeunit, const Type& type) VL_MT_UNSAFE; const char* identifier, const char* defnamep, int8_t timeunit,
const Type& type) VL_MT_UNSAFE;
void exportInsert(int finalize, const char* namep, void* cb) VL_MT_UNSAFE; void exportInsert(int finalize, const char* namep, void* cb) VL_MT_UNSAFE;
void varInsert(int finalize, const char* namep, void* datap, bool isParam, void varInsert(int finalize, const char* namep, void* datap, bool isParam,
VerilatedVarType vltype, int vlflags, int dims, ...) VL_MT_UNSAFE; VerilatedVarType vltype, int vlflags, int udims, int pdims, ...) VL_MT_UNSAFE;
// ACCESSORS // ACCESSORS
const char* name() const VL_MT_SAFE_POSTINIT { return m_namep; } const char* name() const VL_MT_SAFE_POSTINIT { return m_namep; }
const char* identifier() const VL_MT_SAFE_POSTINIT { return m_identifierp; } const char* identifier() const VL_MT_SAFE_POSTINIT { return m_identifierp; }
const char* defname() const VL_MT_SAFE_POSTINIT { return m_defnamep; }
int8_t timeunit() const VL_MT_SAFE_POSTINIT { return m_timeunit; } int8_t timeunit() const VL_MT_SAFE_POSTINIT { return m_timeunit; }
VerilatedSyms* symsp() const VL_MT_SAFE_POSTINIT { return m_symsp; } VerilatedSyms* symsp() const VL_MT_SAFE_POSTINIT { return m_symsp; }
VerilatedVar* varFind(const char* namep) const VL_MT_SAFE_POSTINIT; VerilatedVar* varFind(const char* namep) const VL_MT_SAFE_POSTINIT;
@@ -757,8 +802,6 @@ class Verilated final {
public: public:
// METHODS - User called // METHODS - User called
/// Enable debug of internal verilated code
static void debug(int level) VL_MT_SAFE;
#ifdef VL_DEBUG #ifdef VL_DEBUG
/// Return debug level /// Return debug level
/// When multithreaded this may not immediately react to another thread /// When multithreaded this may not immediately react to another thread
@@ -768,6 +811,8 @@ public:
/// Return constant 0 debug level, so C++'s optimizer rips up /// Return constant 0 debug level, so C++'s optimizer rips up
static constexpr int debug() VL_PURE { return 0; } static constexpr int debug() VL_PURE { return 0; }
#endif #endif
/// Enable debug of internal verilated code
static void debug(int level) VL_MT_SAFE;
/// Set the last VerilatedContext accessed /// Set the last VerilatedContext accessed
/// Generally threadContextp(value) should be called instead /// Generally threadContextp(value) should be called instead
@@ -799,18 +844,18 @@ public:
} }
#ifndef VL_NO_LEGACY #ifndef VL_NO_LEGACY
/// Call VerilatedContext::assertOn using current thread's VerilatedContext
static void assertOn(bool flag) VL_MT_SAFE { Verilated::threadContextp()->assertOn(flag); }
/// Return VerilatedContext::assertOn() using current thread's VerilatedContext /// Return VerilatedContext::assertOn() using current thread's VerilatedContext
static bool assertOn() VL_MT_SAFE { return Verilated::threadContextp()->assertOn(); } static bool assertOn() VL_MT_SAFE { return Verilated::threadContextp()->assertOn(); }
/// Call VerilatedContext::calcUnusedSigs using current thread's VerilatedContext /// Call VerilatedContext::assertOn using current thread's VerilatedContext
static void calcUnusedSigs(bool flag) VL_MT_SAFE { static void assertOn(bool flag) VL_MT_SAFE { Verilated::threadContextp()->assertOn(flag); }
Verilated::threadContextp()->calcUnusedSigs(flag);
}
/// Return VerilatedContext::calcUnusedSigs using current thread's VerilatedContext /// Return VerilatedContext::calcUnusedSigs using current thread's VerilatedContext
static bool calcUnusedSigs() VL_MT_SAFE { static bool calcUnusedSigs() VL_MT_SAFE {
return Verilated::threadContextp()->calcUnusedSigs(); return Verilated::threadContextp()->calcUnusedSigs();
} }
/// Call VerilatedContext::calcUnusedSigs using current thread's VerilatedContext
static void calcUnusedSigs(bool flag) VL_MT_SAFE {
Verilated::threadContextp()->calcUnusedSigs(flag);
}
/// Call VerilatedContext::commandArgs using current thread's VerilatedContext /// Call VerilatedContext::commandArgs using current thread's VerilatedContext
static void commandArgs(int argc, const char** argv) VL_MT_SAFE { static void commandArgs(int argc, const char** argv) VL_MT_SAFE {
Verilated::threadContextp()->commandArgs(argc, argv); Verilated::threadContextp()->commandArgs(argc, argv);
@@ -826,44 +871,44 @@ public:
static const char* commandArgsPlusMatch(const char* prefixp) VL_MT_SAFE { static const char* commandArgsPlusMatch(const char* prefixp) VL_MT_SAFE {
return Verilated::threadContextp()->commandArgsPlusMatch(prefixp); return Verilated::threadContextp()->commandArgsPlusMatch(prefixp);
} }
/// Call VerilatedContext::errorLimit using current thread's VerilatedContext
static void errorLimit(int val) VL_MT_SAFE { Verilated::threadContextp()->errorLimit(val); }
/// Return VerilatedContext::errorLimit using current thread's VerilatedContext /// Return VerilatedContext::errorLimit using current thread's VerilatedContext
static int errorLimit() VL_MT_SAFE { return Verilated::threadContextp()->errorLimit(); } static int errorLimit() VL_MT_SAFE { return Verilated::threadContextp()->errorLimit(); }
/// Call VerilatedContext::errorLimit using current thread's VerilatedContext
static void errorLimit(int val) VL_MT_SAFE { Verilated::threadContextp()->errorLimit(val); }
/// Return VerilatedContext::fatalOnError using current thread's VerilatedContext
static bool fatalOnError() VL_MT_SAFE { return Verilated::threadContextp()->fatalOnError(); }
/// Call VerilatedContext::fatalOnError using current thread's VerilatedContext /// Call VerilatedContext::fatalOnError using current thread's VerilatedContext
static void fatalOnError(bool flag) VL_MT_SAFE { static void fatalOnError(bool flag) VL_MT_SAFE {
Verilated::threadContextp()->fatalOnError(flag); Verilated::threadContextp()->fatalOnError(flag);
} }
/// Return VerilatedContext::fatalOnError using current thread's VerilatedContext
static bool fatalOnError() VL_MT_SAFE { return Verilated::threadContextp()->fatalOnError(); }
/// Call VerilatedContext::fatalOnVpiError using current thread's VerilatedContext
static void fatalOnVpiError(bool flag) VL_MT_SAFE {
Verilated::threadContextp()->fatalOnVpiError(flag);
}
/// Return VerilatedContext::fatalOnVpiError using current thread's VerilatedContext /// Return VerilatedContext::fatalOnVpiError using current thread's VerilatedContext
static bool fatalOnVpiError() VL_MT_SAFE { static bool fatalOnVpiError() VL_MT_SAFE {
return Verilated::threadContextp()->fatalOnVpiError(); return Verilated::threadContextp()->fatalOnVpiError();
} }
/// Call VerilatedContext::gotError using current thread's VerilatedContext /// Call VerilatedContext::fatalOnVpiError using current thread's VerilatedContext
static void gotError(bool flag) VL_MT_SAFE { Verilated::threadContextp()->gotError(flag); } static void fatalOnVpiError(bool flag) VL_MT_SAFE {
Verilated::threadContextp()->fatalOnVpiError(flag);
}
/// Return VerilatedContext::gotError using current thread's VerilatedContext /// Return VerilatedContext::gotError using current thread's VerilatedContext
static bool gotError() VL_MT_SAFE { return Verilated::threadContextp()->gotError(); } static bool gotError() VL_MT_SAFE { return Verilated::threadContextp()->gotError(); }
/// Call VerilatedContext::gotFinish using current thread's VerilatedContext /// Call VerilatedContext::gotError using current thread's VerilatedContext
static void gotFinish(bool flag) VL_MT_SAFE { Verilated::threadContextp()->gotFinish(flag); } static void gotError(bool flag) VL_MT_SAFE { Verilated::threadContextp()->gotError(flag); }
/// Return VerilatedContext::gotFinish using current thread's VerilatedContext /// Return VerilatedContext::gotFinish using current thread's VerilatedContext
static bool gotFinish() VL_MT_SAFE { return Verilated::threadContextp()->gotFinish(); } static bool gotFinish() VL_MT_SAFE { return Verilated::threadContextp()->gotFinish(); }
/// Call VerilatedContext::randReset using current thread's VerilatedContext /// Call VerilatedContext::gotFinish using current thread's VerilatedContext
static void randReset(int val) VL_MT_SAFE { Verilated::threadContextp()->randReset(val); } static void gotFinish(bool flag) VL_MT_SAFE { Verilated::threadContextp()->gotFinish(flag); }
/// Return VerilatedContext::randReset using current thread's VerilatedContext /// Return VerilatedContext::randReset using current thread's VerilatedContext
static int randReset() VL_MT_SAFE { return Verilated::threadContextp()->randReset(); } static int randReset() VL_MT_SAFE { return Verilated::threadContextp()->randReset(); }
/// Call VerilatedContext::randSeed using current thread's VerilatedContext /// Call VerilatedContext::randReset using current thread's VerilatedContext
static void randSeed(int val) VL_MT_SAFE { Verilated::threadContextp()->randSeed(val); } static void randReset(int val) VL_MT_SAFE { Verilated::threadContextp()->randReset(val); }
/// Return VerilatedContext::randSeed using current thread's VerilatedContext /// Return VerilatedContext::randSeed using current thread's VerilatedContext
static int randSeed() VL_MT_SAFE { return Verilated::threadContextp()->randSeed(); } static int randSeed() VL_MT_SAFE { return Verilated::threadContextp()->randSeed(); }
/// Call VerilatedContext::time using current thread's VerilatedContext /// Call VerilatedContext::randSeed using current thread's VerilatedContext
static void time(uint64_t val) VL_MT_SAFE { Verilated::threadContextp()->time(val); } static void randSeed(int val) VL_MT_SAFE { Verilated::threadContextp()->randSeed(val); }
/// Return VerilatedContext::time using current thread's VerilatedContext /// Return VerilatedContext::time using current thread's VerilatedContext
static uint64_t time() VL_MT_SAFE { return Verilated::threadContextp()->time(); } static uint64_t time() VL_MT_SAFE { return Verilated::threadContextp()->time(); }
/// Call VerilatedContext::time using current thread's VerilatedContext
static void time(uint64_t val) VL_MT_SAFE { Verilated::threadContextp()->time(val); }
/// Call VerilatedContext::timeInc using current thread's VerilatedContext /// Call VerilatedContext::timeInc using current thread's VerilatedContext
static void timeInc(uint64_t add) VL_MT_UNSAFE { Verilated::threadContextp()->timeInc(add); } static void timeInc(uint64_t add) VL_MT_UNSAFE { Verilated::threadContextp()->timeInc(add); }
// Deprecated // Deprecated
@@ -953,8 +998,8 @@ public:
// Internal: Set the mtaskId, called when an mtask starts // Internal: Set the mtaskId, called when an mtask starts
// Per thread, so no need to be in VerilatedContext // Per thread, so no need to be in VerilatedContext
static void mtaskId(uint32_t id) VL_MT_SAFE { t_s.t_mtaskId = id; }
static uint32_t mtaskId() VL_MT_SAFE { return t_s.t_mtaskId; } static uint32_t mtaskId() VL_MT_SAFE { return t_s.t_mtaskId; }
static void mtaskId(uint32_t id) VL_MT_SAFE { t_s.t_mtaskId = id; }
static void endOfEvalReqdInc() VL_MT_SAFE { ++t_s.t_endOfEvalReqd; } static void endOfEvalReqdInc() VL_MT_SAFE { ++t_s.t_endOfEvalReqd; }
static void endOfEvalReqdDec() VL_MT_SAFE { --t_s.t_endOfEvalReqd; } static void endOfEvalReqdDec() VL_MT_SAFE { --t_s.t_endOfEvalReqd; }
+8 -2
View File
@@ -2,7 +2,7 @@
###################################################################### ######################################################################
# DESCRIPTION: Makefile commands for all verilated target files # DESCRIPTION: Makefile commands for all verilated target files
# #
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you # Copyright 2003-2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU # can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License # Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0. # Version 2.0.
@@ -23,6 +23,12 @@ PYTHON3 = @PYTHON3@
CFG_WITH_CCWARN = @CFG_WITH_CCWARN@ CFG_WITH_CCWARN = @CFG_WITH_CCWARN@
CFG_WITH_LONGTESTS = @CFG_WITH_LONGTESTS@ CFG_WITH_LONGTESTS = @CFG_WITH_LONGTESTS@
# Compiler version found during configure. This make variable is not used
# here, but note that if this differs from what `$(CXX) --version` prints,
# then there may be strange results such as unexpected warnings, as
# configure determines compiler characteristics.
CFG_CXX_VERSION = "@CFG_CXX_VERSION@"
# Compiler flags to enable profiling # Compiler flags to enable profiling
CFG_CXXFLAGS_PROFILE = @CFG_CXXFLAGS_PROFILE@ CFG_CXXFLAGS_PROFILE = @CFG_CXXFLAGS_PROFILE@
# Select language required to compile (often empty) # Select language required to compile (often empty)
@@ -80,6 +86,7 @@ VK_CPPFLAGS_ALWAYS += \
-I$(VERILATOR_ROOT)/include/vltstd \ -I$(VERILATOR_ROOT)/include/vltstd \
-DVM_COVERAGE=$(VM_COVERAGE) \ -DVM_COVERAGE=$(VM_COVERAGE) \
-DVM_SC=$(VM_SC) \ -DVM_SC=$(VM_SC) \
-DVM_TIMING=$(VM_TIMING) \
-DVM_TRACE=$(VM_TRACE) \ -DVM_TRACE=$(VM_TRACE) \
-DVM_TRACE_FST=$(VM_TRACE_FST) \ -DVM_TRACE_FST=$(VM_TRACE_FST) \
-DVM_TRACE_VCD=$(VM_TRACE_VCD) \ -DVM_TRACE_VCD=$(VM_TRACE_VCD) \
@@ -225,7 +232,6 @@ endif
# 1. Extract object files from .a # 1. Extract object files from .a
# 2. Create a new archive from extracted .o and given .o # 2. Create a new archive from extracted .o and given .o
%.a: | %.verilator_deplist.tmp %.a: | %.verilator_deplist.tmp
$(info Archive $(AR) -rcs $@ $^)
$(foreach L, $(filter-out %.a,$^), $(shell echo $L >>[email protected]_deplist.tmp)) $(foreach L, $(filter-out %.a,$^), $(shell echo $L >>[email protected]_deplist.tmp))
@if test $(words $(filter %.a,$^)) -eq 0; then \ @if test $(words $(filter %.a,$^)) -eq 0; then \
$(RM) -f $@; \ $(RM) -f $@; \
+3 -3
View File
@@ -2,7 +2,7 @@
// //
// Code available from: https://verilator.org // Code available from: https://verilator.org
// //
// Copyright 2003-2024 by Wilson Snyder. This program is free software; you can // Copyright 2003-2025 by Wilson Snyder. This program is free software; you can
// redistribute it and/or modify it under the terms of either the GNU // redistribute it and/or modify it under the terms of either the GNU
// Lesser General Public License Version 3 or the Perl Artistic License // Lesser General Public License Version 3 or the Perl Artistic License
// Version 2.0. // Version 2.0.
@@ -12,11 +12,11 @@
// //
// DESCRIPTION: Verilator: Include in verilog files to hide verilator defines // DESCRIPTION: Verilator: Include in verilog files to hide verilator defines
`ifdef _VERILATED_V_ `else `ifndef _VERILATED_V_
`define _VERILATED_V_ 1 `define _VERILATED_V_ 1
// Hide verilator pragmas from other tools // Hide verilator pragmas from other tools
`ifdef VERILATOR `else `ifndef VERILATOR
`define coverage_block_off `define coverage_block_off
`endif `endif
+1 -1
View File
@@ -3,7 +3,7 @@
// //
// Code available from: https://verilator.org // Code available from: https://verilator.org
// //
// Copyright 2003-2024 by Wilson Snyder. This program is free software; you can // Copyright 2003-2025 by Wilson Snyder. This program is free software; you can
// redistribute it and/or modify it under the terms of either the GNU // redistribute it and/or modify it under the terms of either the GNU
// Lesser General Public License Version 3 or the Perl Artistic License // Lesser General Public License Version 3 or the Perl Artistic License
// Version 2.0. // Version 2.0.
+3 -3
View File
@@ -3,7 +3,7 @@
// //
// Code available from: https://verilator.org // Code available from: https://verilator.org
// //
// Copyright 2001-2024 by Wilson Snyder. This program is free software; you // Copyright 2001-2025 by Wilson Snyder. This program is free software; you
// can redistribute it and/or modify it under the terms of either the GNU // can redistribute it and/or modify it under the terms of either the GNU
// Lesser General Public License Version 3 or the Perl Artistic License // Lesser General Public License Version 3 or the Perl Artistic License
// Version 2.0. // Version 2.0.
@@ -71,7 +71,7 @@ public: // But only local to this file
// This isn't in the header file for auto-magic conversion because it // This isn't in the header file for auto-magic conversion because it
// inlines to too much code and makes compilation too slow. // inlines to too much code and makes compilation too slow.
template <class T> template <typename T>
class VerilatedCoverItemSpec final : public VerilatedCovImpItem { class VerilatedCoverItemSpec final : public VerilatedCovImpItem {
private: private:
// MEMBERS // MEMBERS
@@ -233,7 +233,7 @@ private:
// Little selftest // Little selftest
#define SELF_CHECK(got, exp) \ #define SELF_CHECK(got, exp) \
do { \ do { \
if ((got) != (exp)) VL_FATAL_MT(__FILE__, __LINE__, "", "%Error: selftest"); \ if ((got) != (exp)) VL_FATAL_MT(__FILE__, __LINE__, "", "selftest"); \
} while (0) } while (0)
SELF_CHECK(combineHier("a.b.c", "a.b.c"), "a.b.c"); SELF_CHECK(combineHier("a.b.c", "a.b.c"), "a.b.c");
SELF_CHECK(combineHier("a.b.c", "a.b"), "a.b*"); SELF_CHECK(combineHier("a.b.c", "a.b"), "a.b*");

Some files were not shown because too many files have changed in this diff Show More