mirror of
https://github.com/verilator/verilator.git
synced 2026-10-04 00:53:42 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
184f8f7920 | ||
|
|
89f0e1def0 | ||
|
|
d49697a85f | ||
|
|
c801237ce8 | ||
|
|
1d69c18e33 | ||
|
|
e089817951 | ||
|
|
d4aa00dbeb | ||
|
|
e6cdaf112c | ||
|
|
8750cdac73 | ||
|
|
2b8c9a1cff | ||
|
|
cd8af21915 | ||
|
|
782fe1daf2 | ||
|
|
5847b105a5 | ||
|
|
330b2589ed | ||
|
|
76ec35a8f6 | ||
|
|
00ac706f67 | ||
|
|
2e502aead8 | ||
|
|
e27613ed45 | ||
|
|
847de990de | ||
|
|
10935ee031 | ||
|
|
922223a9c3 | ||
|
|
08330f5fe2 | ||
|
|
884b48578d | ||
|
|
85119cb32e | ||
|
|
d81da042cd | ||
|
|
1e08c912d7 | ||
|
|
da1bca5c9b | ||
|
|
da7dd1fa16 | ||
|
|
cc910fa4c4 | ||
|
|
a4c5d2e29c | ||
|
|
2a0b331ee3 | ||
|
|
af2771e901 | ||
|
|
287fdb7312 | ||
|
|
50b89ac9b5 | ||
|
|
28dd90e92d | ||
|
|
1f04cd868c | ||
|
|
04e39168c4 | ||
|
|
ffbb3229a8 | ||
|
|
5642de432b | ||
|
|
766514bdcf | ||
|
|
b652009235 | ||
|
|
9513edfdd6 | ||
|
|
f9adc3461d | ||
|
|
1a1862352a | ||
|
|
cddbb5e095 | ||
|
|
151b17ac82 | ||
|
|
fafe3737a2 | ||
|
|
60c532908e | ||
|
|
6ec5c85bea | ||
|
|
1efec71437 | ||
|
|
f8ea1d3490 | ||
|
|
e00a919269 | ||
|
|
d236e4c054 | ||
|
|
388fc863f4 | ||
|
|
bfb20397d9 | ||
|
|
7225c902ee | ||
|
|
0ead54b17e | ||
|
|
68b227065e | ||
|
|
bd4743f420 | ||
|
|
dd76a5b8ba | ||
|
|
e21dd04159 | ||
|
|
92b490f2f7 | ||
|
|
e732f656a9 | ||
|
|
9f6719d28d | ||
|
|
c1ecddf26a | ||
|
|
d864057a60 | ||
|
|
65c5071246 | ||
|
|
cc28b07dc1 | ||
|
|
bf2422b55b | ||
|
|
d33da1ebb6 | ||
|
|
21ef11099e | ||
|
|
f9c5db907a | ||
|
|
5ac345e09c | ||
|
|
43373010dc | ||
|
|
cb3c2706a8 | ||
|
|
d65ba037a8 | ||
|
|
e00403351c | ||
|
|
6f055f84ce | ||
|
|
cc77233902 | ||
|
|
ec91158130 | ||
|
|
c471323601 | ||
|
|
8daae7336d | ||
|
|
cf275b6e58 | ||
|
|
14e3448ba6 | ||
|
|
61de46cea2 | ||
|
|
24e665f38f | ||
|
|
8f13bc0477 | ||
|
|
f73dde6dd9 | ||
|
|
ffd7ec1007 | ||
|
|
9bd30baba4 | ||
|
|
61c64e4a3b | ||
|
|
4ef6f00423 | ||
|
|
5c412e5e81 | ||
|
|
af2327aaf4 | ||
|
|
96ed725278 | ||
|
|
3d5d2db64b | ||
|
|
94525cae5d | ||
|
|
982c7fb058 | ||
|
|
794247450f | ||
|
|
0c712d7c60 | ||
|
|
cefcf836fd | ||
|
|
eb53bca6fd | ||
|
|
958d096e7f | ||
|
|
9dfc050fb5 | ||
|
|
b99b3d7b9c | ||
|
|
16fdd0e93c | ||
|
|
01157d414b | ||
|
|
eae1e5bdf2 | ||
|
|
71941cc673 | ||
|
|
fac4ed49af | ||
|
|
8785086bc8 | ||
|
|
6e8bd3da19 | ||
|
|
078275034d | ||
|
|
31e73f1645 | ||
|
|
2ac7cf51a9 | ||
|
|
4f1d8a1b15 | ||
|
|
a7f4ff7b06 | ||
|
|
3027f67b6f | ||
|
|
802ba0c2bf | ||
|
|
41b05cb1f8 | ||
|
|
3306ed146b | ||
|
|
fb4951d2df | ||
|
|
9dc0cf5a7c | ||
|
|
e63d486422 | ||
|
|
1a91ab02cf | ||
|
|
7b4ad29260 | ||
|
|
e33b24fad2 | ||
|
|
49c51af841 | ||
|
|
222a3655ba | ||
|
|
c8c53f9a18 | ||
|
|
838b8a2bec | ||
|
|
1a8f9f0483 | ||
|
|
2631af977a | ||
|
|
165622a9e9 | ||
|
|
f979e459e8 | ||
|
|
9d6f127a4e | ||
|
|
bfe39ce5bc | ||
|
|
832f41f0fe | ||
|
|
97707bdc72 | ||
|
|
888169571b | ||
|
|
d7fbea62f9 | ||
|
|
728f56e581 | ||
|
|
1268a28e7b | ||
|
|
717667034b | ||
|
|
5229ce8660 | ||
|
|
9f5d22b21f | ||
|
|
0280de11da | ||
|
|
b4d064d166 | ||
|
|
6dd52e1927 | ||
|
|
29dacd3441 | ||
|
|
540e042221 | ||
|
|
f09c30df35 | ||
|
|
a03d327e96 | ||
|
|
defe282fe8 | ||
|
|
ce0a05691b | ||
|
|
62dbbbba85 | ||
|
|
2c74765246 | ||
|
|
cb5c56dac4 | ||
|
|
0b23787d6c | ||
|
|
aaa49273cf | ||
|
|
e9c48cd1ce | ||
|
|
435e1149d5 | ||
|
|
4d518873d0 | ||
|
|
caca1fcef0 | ||
|
|
8efc9d6219 | ||
|
|
e21c4fbbb5 | ||
|
|
b902e4bcf5 | ||
|
|
c5f3192588 | ||
|
|
e04f51ebd2 | ||
|
|
283810cbf7 | ||
|
|
0640ddba80 | ||
|
|
0865bee500 | ||
|
|
202a53f4f6 | ||
|
|
09518ee207 | ||
|
|
5cd8bd0356 | ||
|
|
5247e40659 | ||
|
|
603f4c615a | ||
|
|
5c72b45975 | ||
|
|
83f4db956b | ||
|
|
bdae48f6ae | ||
|
|
7e854a9e63 | ||
|
|
98786e609a | ||
|
|
5a5c38e478 | ||
|
|
3b049ab9ee | ||
|
|
21b42c4463 | ||
|
|
ca0a679413 | ||
|
|
a7e6efb4c0 | ||
|
|
8c7c6c594a | ||
|
|
7ef3b808ea | ||
|
|
3b623dc12e | ||
|
|
89cd5417ef | ||
|
|
b3350a4f3b | ||
|
|
1761622e14 | ||
|
|
ebee20c47d | ||
|
|
500312c050 | ||
|
|
4ad1dde723 | ||
|
|
62880c125e | ||
|
|
21dbdbf69d | ||
|
|
269476df6e | ||
|
|
87224db145 | ||
|
|
aa6fbd35db | ||
|
|
c9e021924f | ||
|
|
63f5f5c328 | ||
|
|
28ee2ebb30 | ||
|
|
fd12ab3413 | ||
|
|
d972b7465a | ||
|
|
734e7a9526 | ||
|
|
90bc1daa9d | ||
|
|
4e00539308 | ||
|
|
f719d66129 | ||
|
|
800af37975 | ||
|
|
df187c4406 | ||
|
|
6f250b3f8d | ||
|
|
be0392a2b2 | ||
|
|
b794c7c8d4 | ||
|
|
e74c8372ea | ||
|
|
40ca0527db | ||
|
|
a647747260 | ||
|
|
9e664a3921 | ||
|
|
ad6379b762 | ||
|
|
e0e0fb08a5 | ||
|
|
006b45526b | ||
|
|
3dc430085d | ||
|
|
9697a5ce6d | ||
|
|
53b8a5b027 | ||
|
|
ed380f08fe | ||
|
|
9af8e76e87 | ||
|
|
af54a26b43 | ||
|
|
a4db488b02 | ||
|
|
580a843474 | ||
|
|
b237eec801 | ||
|
|
e0e8503151 | ||
|
|
19ca140165 | ||
|
|
bfc438c455 | ||
|
|
d3b085ab8a | ||
|
|
d1eda66668 | ||
|
|
50dfdcb6cc | ||
|
|
7f85d7f453 | ||
|
|
f970485e19 | ||
|
|
e5e7e844c4 | ||
|
|
4e866fd710 | ||
|
|
2a498cb670 | ||
|
|
bbcb9315f3 | ||
|
|
08be65a7dd | ||
|
|
e24f84f713 | ||
|
|
c1ac2a79db | ||
|
|
0391f113b0 | ||
|
|
d26fccaa44 | ||
|
|
46e56ca6fc | ||
|
|
92f30dd28f | ||
|
|
b85a482db0 | ||
|
|
c15489b711 | ||
|
|
7f871467bf | ||
|
|
3a039df351 | ||
|
|
542ffcca60 | ||
|
|
ed6687359b | ||
|
|
57c82b9c34 | ||
|
|
0e2f0381d0 | ||
|
|
1432bb8889 | ||
|
|
3c8b8b65d0 | ||
|
|
64dbd4abcc | ||
|
|
bee58510e7 | ||
|
|
b10c6293d9 | ||
|
|
4ab0690428 | ||
|
|
841254e9e8 | ||
|
|
d7f4dbfd13 | ||
|
|
2dbf587118 | ||
|
|
4d1eea35e1 | ||
|
|
f39d6e6108 | ||
|
|
ad530c4b08 | ||
|
|
b60ad953c4 | ||
|
|
a44907b700 | ||
|
|
c856380fac | ||
|
|
ef458be855 | ||
|
|
9187b4d552 | ||
|
|
2b3bf5f51d | ||
|
|
a8d70c6edf | ||
|
|
dca555b6d7 | ||
|
|
b11ec23891 | ||
|
|
39a9a00299 | ||
|
|
3f7d13b2cf | ||
|
|
218af5500b | ||
|
|
12c524ac06 | ||
|
|
5e4668c146 | ||
|
|
4b5e602392 | ||
|
|
a2b6aca288 | ||
|
|
b455f9b591 | ||
|
|
06c3c87f4e | ||
|
|
121193e49b | ||
|
|
d7b8ede53f | ||
|
|
e348c9c344 | ||
|
|
f7ad54b324 | ||
|
|
ff0bf0a5e3 | ||
|
|
155cd9a8d0 | ||
|
|
663a9a3add | ||
|
|
be813e96dd | ||
|
|
907047d823 | ||
|
|
62d403c060 | ||
|
|
419e775dfb | ||
|
|
1f61351e8f | ||
|
|
39fd625f0c | ||
|
|
8b7a841f09 | ||
|
|
a4656b823d | ||
|
|
1308be28fe | ||
|
|
990ee994db | ||
|
|
9a6b24fca4 | ||
|
|
f53ca6ceee | ||
|
|
04aa6ebb42 | ||
|
|
4866cfa09f | ||
|
|
56927fb955 | ||
|
|
f1396fbced | ||
|
|
57d8bb5d1f | ||
|
|
d3aab31bcf | ||
|
|
5349b51e71 | ||
|
|
1923d23cff | ||
|
|
c6b0918db5 | ||
|
|
6c69210037 | ||
|
|
7f945bf89e | ||
|
|
220a3faf7c | ||
|
|
a9f95f2f08 | ||
|
|
f8f5f8f84b | ||
|
|
f57d1255e9 | ||
|
|
1fd9f3ce92 | ||
|
|
90e20cba3d | ||
|
|
dd11d5a598 | ||
|
|
83ff8e13ba | ||
|
|
77e5bb9ec9 | ||
|
|
5ffa05fba0 | ||
|
|
0743d84bcc | ||
|
|
b45cf5960a | ||
|
|
056c3ee331 | ||
|
|
c6ffd22c45 | ||
|
|
a1167b3d55 | ||
|
|
e60f52ee0c | ||
|
|
72acb2edfd | ||
|
|
6bc48fcdb3 | ||
|
|
f67534069c | ||
|
|
4d671dc5d7 | ||
|
|
f851671c41 | ||
|
|
d186dcdc32 | ||
|
|
46f8003c4e | ||
|
|
3549fd1aa0 | ||
|
|
819625de61 | ||
|
|
aa28a8d1e1 | ||
|
|
0d1f036f17 | ||
|
|
b4a9ff4ffe | ||
|
|
f41e36b99f | ||
|
|
85454f6083 | ||
|
|
141de7b94a | ||
|
|
905c0c4f6d | ||
|
|
a364704e3a | ||
|
|
107f64e53b | ||
|
|
a966e6aa13 | ||
|
|
feea221f39 | ||
|
|
a12caa4799 | ||
|
|
63993436c9 | ||
|
|
7d3c58d21c | ||
|
|
319ab84f90 | ||
|
|
4e091a1cf1 | ||
|
|
e3acd528d8 | ||
|
|
43a03b1660 | ||
|
|
4070db9990 | ||
|
|
5f0eb007b1 | ||
|
|
bd7f6d3c19 | ||
|
|
929d2ad83a | ||
|
|
7a4049b683 | ||
|
|
e2b9cadb1d | ||
|
|
1ceda731e5 | ||
|
|
fcebac6b16 | ||
|
|
1158842b7e | ||
|
|
2a09114dc7 | ||
|
|
d95e4dc150 | ||
|
|
17f29b41c2 | ||
|
|
98c7089f5b | ||
|
|
a49334f3e4 | ||
|
|
5161cea8cd | ||
|
|
8bf2240d40 | ||
|
|
1e4ede08b6 | ||
|
|
041dad92cf | ||
|
|
4cda2c0a4e | ||
|
|
e63ed0a931 | ||
|
|
a6f26b85b3 | ||
|
|
67f26508ba | ||
|
|
33b838f139 | ||
|
|
f58b323736 | ||
|
|
37c79532fe | ||
|
|
4bf2d0d755 | ||
|
|
b3e70efa30 | ||
|
|
68ce45f203 | ||
|
|
5bdc9abd2f | ||
|
|
c03cb9d9c2 | ||
|
|
34e3892367 | ||
|
|
9953851287 | ||
|
|
c73259d2f0 | ||
|
|
8ac8c64885 | ||
|
|
7ac610a3cb | ||
|
|
2aa260a03b | ||
|
|
4eb030717a | ||
|
|
51cdf52d0f | ||
|
|
6a14facf48 | ||
|
|
7bb38d21b9 | ||
|
|
ca2c40347b | ||
|
|
b0044da8a7 | ||
|
|
3770273637 | ||
|
|
c33f2b42aa | ||
|
|
14ec6258d9 | ||
|
|
b6ecffeb60 | ||
|
|
712ff95a48 | ||
|
|
fbfd1f12dd | ||
|
|
40dda323fe | ||
|
|
91ae4c35b7 | ||
|
|
a3d7b7d779 | ||
|
|
91d138248d | ||
|
|
8868d459a2 | ||
|
|
1043a6c6be | ||
|
|
409e036eca | ||
|
|
e32108713d | ||
|
|
54efa86a6c | ||
|
|
ac21d25d43 | ||
|
|
a841a962ce | ||
|
|
5f23bf95f6 | ||
|
|
ac2859bf24 | ||
|
|
703f0d8c5d | ||
|
|
3d76bb9944 | ||
|
|
02e64f0795 | ||
|
|
c2cac8a7fd | ||
|
|
ac2a75fbb5 | ||
|
|
7affb3e580 | ||
|
|
b226be7f98 | ||
|
|
f45b811c22 | ||
|
|
ee1ab074dc | ||
|
|
a9aa2f11b8 | ||
|
|
353a2e3d20 | ||
|
|
34315a4f70 | ||
|
|
d56d1a7719 | ||
|
|
1c86ff0af2 | ||
|
|
f506aa878b | ||
|
|
b95a974ff1 | ||
|
|
b19215770b | ||
|
|
457fcc267b | ||
|
|
e202cb31d8 | ||
|
|
b96f35b8fe | ||
|
|
997d5ecdf1 | ||
|
|
631714c50a | ||
|
|
327d55d13d | ||
|
|
bd91b619ad | ||
|
|
dc5a17fea0 | ||
|
|
254eb407ff | ||
|
|
92d47ca23a | ||
|
|
67da797816 | ||
|
|
3d3462b209 | ||
|
|
11667160f2 | ||
|
|
95c8b7bb00 | ||
|
|
9b2f55ab39 | ||
|
|
f71b8e6195 | ||
|
|
d1f71f2342 | ||
|
|
a0edd4e907 | ||
|
|
636a6b8cd2 | ||
|
|
6a67c0a0e5 | ||
|
|
6b9cc8a36e | ||
|
|
0bf9fc270f | ||
|
|
c9a6d06544 | ||
|
|
c90f9e53b7 | ||
|
|
53c59e7ac7 | ||
|
|
9dc31e4556 | ||
|
|
c172cc2ab0 | ||
|
|
25d71a43a5 | ||
|
|
88046c8063 | ||
|
|
dbdf235115 | ||
|
|
eaecdf7477 | ||
|
|
f6edf26eb2 | ||
|
|
b14539569f | ||
|
|
7126293086 | ||
|
|
36c4a24661 | ||
|
|
49ca1cfdd7 | ||
|
|
48a12fb0f4 | ||
|
|
340d1aff4a | ||
|
|
000d697b51 | ||
|
|
a300bfc538 | ||
|
|
6f69c990fd | ||
|
|
d273e2cbd0 | ||
|
|
ece4469869 | ||
|
|
9c11f5e05d | ||
|
|
e753480b19 | ||
|
|
047a12cc62 | ||
|
|
75c6745868 | ||
|
|
60cbbf0ec1 | ||
|
|
762c5f573c | ||
|
|
7696b0651c | ||
|
|
e6e52dd60a | ||
|
|
eb80db9397 | ||
|
|
641dd756c0 | ||
|
|
a74a3bb689 | ||
|
|
d28436dccc | ||
|
|
3ca1c9b6dd | ||
|
|
1eccfa64b5 | ||
|
|
1d05028087 | ||
|
|
16d32cdd4a | ||
|
|
d1f851e1e1 | ||
|
|
6a225d5d00 | ||
|
|
b12b1c9658 | ||
|
|
dbb8cbece2 | ||
|
|
9ddbf5f4b8 | ||
|
|
b2388faa5e | ||
|
|
188a12f609 | ||
|
|
6bd6663dc9 | ||
|
|
5b7188fcaf | ||
|
|
dc049fdd74 | ||
|
|
218659f4e8 | ||
|
|
6c1cfc68cf | ||
|
|
fbaff52668 | ||
|
|
06c570e159 | ||
|
|
c005486acf | ||
|
|
6467351752 | ||
|
|
4bd17f0a6f | ||
|
|
870c398094 | ||
|
|
86c56e8e14 | ||
|
|
25d968b833 | ||
|
|
2c41a7bbf6 | ||
|
|
158a54a7ff | ||
|
|
8c9a4fec83 | ||
|
|
53332ae03e | ||
|
|
4a5935d248 | ||
|
|
78c9e7773a | ||
|
|
d2edab458e | ||
|
|
d415757b0e | ||
|
|
7d2b6bd921 | ||
|
|
52ac3b3a0d | ||
|
|
f106c1eaec | ||
|
|
309129ebcf | ||
|
|
deed20fb78 | ||
|
|
36577bb549 | ||
|
|
de9671d4a3 | ||
|
|
12355270b3 | ||
|
|
473d54aa95 | ||
|
|
dca504c706 | ||
|
|
7bb790f7e4 | ||
|
|
f9bdab65f0 | ||
|
|
61f4c97f40 | ||
|
|
d0f0919830 | ||
|
|
bd1ac03828 | ||
|
|
00948a45a3 | ||
|
|
5faaa7ec58 | ||
|
|
d8f1e1113a | ||
|
|
9d38e63269 | ||
|
|
9d2adf3e49 | ||
|
|
2b62f5a625 | ||
|
|
0da9f6eb03 | ||
|
|
2ff6ee9613 | ||
|
|
833c31b031 | ||
|
|
a5b0a0d9dd | ||
|
|
0bd291e6cd | ||
|
|
5c1d7f3ce9 | ||
|
|
e69df457fd | ||
|
|
47c5b220b3 | ||
|
|
64a82508f2 | ||
|
|
7c71bdf2d6 | ||
|
|
bd2cb989d1 | ||
|
|
92a4bff047 | ||
|
|
d359fffcdc | ||
|
|
55b836e25a | ||
|
|
c4b3f1e99c | ||
|
|
895b85a16e | ||
|
|
1725ee9c52 | ||
|
|
d93abd002f | ||
|
|
470f99694e | ||
|
|
f3560837ec | ||
|
|
d8dbb08a95 | ||
|
|
c2e0f496bd | ||
|
|
39a5c731ac | ||
|
|
42e1c83875 | ||
|
|
504884b7d5 | ||
|
|
94ef630490 | ||
|
|
d289934ca9 | ||
|
|
20bd80698d | ||
|
|
f1826a7c20 | ||
|
|
fa62cd3486 | ||
|
|
10ac99ac05 | ||
|
|
b408e097f6 | ||
|
|
94bebb2bcb | ||
|
|
2be257369a | ||
|
|
04c38d5b3b | ||
|
|
4882a3c827 | ||
|
|
e995646898 | ||
|
|
2287d420ee | ||
|
|
db5b2669fc | ||
|
|
460bfbf181 | ||
|
|
050e5ddb5b | ||
|
|
393f0e4acb | ||
|
|
7c5d462564 | ||
|
|
763183f067 | ||
|
|
2958a5aaae | ||
|
|
344fabf56a | ||
|
|
9f04ee68c8 | ||
|
|
b5126a6abe | ||
|
|
74d4b0c0ea | ||
|
|
7401a8a43a | ||
|
|
7646e7d89c | ||
|
|
a8dca71ed0 | ||
|
|
98b8d43a4a | ||
|
|
d419c49921 | ||
|
|
a50ea2a1a6 | ||
|
|
078bb21a89 | ||
|
|
b8b9478938 | ||
|
|
f535a73ea7 | ||
|
|
641e0e5672 | ||
|
|
9d146eae16 | ||
|
|
7d43a935bd | ||
|
|
9b99d9697f | ||
|
|
a21ecb2ab9 | ||
|
|
28808f38bb | ||
|
|
7a6775ca84 | ||
|
|
e527ff49a3 | ||
|
|
c1506deef9 | ||
|
|
87050670b4 | ||
|
|
fb1373b854 | ||
|
|
7f1011e5f7 | ||
|
|
7a32771c7e | ||
|
|
94b043d6c9 | ||
|
|
8c5ba3a0d7 | ||
|
|
826e5b0826 | ||
|
|
abd509ce53 | ||
|
|
1bf24c7eb4 | ||
|
|
1f0357ba93 | ||
|
|
db6b17fdb4 | ||
|
|
f3e109d8c5 | ||
|
|
371ac07c6f | ||
|
|
caf3522364 | ||
|
|
03e0d49d99 | ||
|
|
e2e5d9eaf1 | ||
|
|
2f199f20cf | ||
|
|
cefe1845df | ||
|
|
1044398f95 | ||
|
|
77180c4020 | ||
|
|
2fc12d951e | ||
|
|
0982260d3b | ||
|
|
58b867c39c | ||
|
|
4e8a8a0398 | ||
|
|
4dc6a31276 | ||
|
|
ce77bac99a | ||
|
|
31c279a7b3 | ||
|
|
9ad0de1efd | ||
|
|
d89df33fcd | ||
|
|
d1462f3120 | ||
|
|
9fc7143fce | ||
|
|
597b973f7b | ||
|
|
a84c5d2010 | ||
|
|
dbfbc657e1 | ||
|
|
8b3a6ba542 | ||
|
|
8ba7cec15b | ||
|
|
f037ac50b4 | ||
|
|
1f0e767b61 | ||
|
|
5777ab75c7 | ||
|
|
e494cf22a4 | ||
|
|
5a6d5ed96b | ||
|
|
26c7f1adb6 | ||
|
|
f77af4e6f6 | ||
|
|
1cd65e90bd | ||
|
|
e3c7dee6ef | ||
|
|
6c9cbaef62 | ||
|
|
08fef668cd | ||
|
|
92970bd9a0 | ||
|
|
e0c3b42262 | ||
|
|
4ddc649836 | ||
|
|
77908447e6 | ||
|
|
bb41c6b26b | ||
|
|
ae0f29ed37 | ||
|
|
73ca2ab997 | ||
|
|
7a3f1f16ca | ||
|
|
e015805194 | ||
|
|
73da5e51a6 | ||
|
|
9598ef9315 | ||
|
|
cd0f35fe67 | ||
|
|
d455ec6229 | ||
|
|
db854fc3d2 | ||
|
|
b27bd6526a | ||
|
|
916a89761e | ||
|
|
c3d86626ee | ||
|
|
5d32fc56ac | ||
|
|
93f447dd4a | ||
|
|
bc892deacc | ||
|
|
b914cda1c7 | ||
|
|
62e5e3aa0c | ||
|
|
f508dadc97 | ||
|
|
189d094202 | ||
|
|
3defaf8ffb | ||
|
|
73696f0a71 | ||
|
|
17c2512d03 | ||
|
|
75229cc03d | ||
|
|
e422c183ff | ||
|
|
68e1ed55f6 | ||
|
|
993f65f3b4 | ||
|
|
2c5e9a785a | ||
|
|
d183b4edde | ||
|
|
818e6d3ebf | ||
|
|
2df0390c04 | ||
|
|
6cd0948c8c | ||
|
|
3209bee3b3 | ||
|
|
88d0d85ca6 | ||
|
|
51545b36ca | ||
|
|
6af694b04b | ||
|
|
f9f70383fa | ||
|
|
916d473eff | ||
|
|
a9e9ab50bd | ||
|
|
544cb4a90f | ||
|
|
11998ccc58 | ||
|
|
2daa09a255 | ||
|
|
d35e4a2b60 | ||
|
|
c0b505849c | ||
|
|
49fe129634 | ||
|
|
75df36bc8f | ||
|
|
48600c77b5 | ||
|
|
5b410e9331 | ||
|
|
277611bcdd | ||
|
|
de2818c733 | ||
|
|
832629c602 | ||
|
|
5e5b5ab69d | ||
|
|
173e9d2a94 | ||
|
|
4c2eb8c0b8 | ||
|
|
d059806dbd | ||
|
|
bca2e2c16e | ||
|
|
47f5a6a52b | ||
|
|
206a0b4fd2 | ||
|
|
dc307270f7 | ||
|
|
4990b44120 | ||
|
|
4925f9ad73 | ||
|
|
ac06b6fc4f | ||
|
|
58ea7ad361 | ||
|
|
75a36a6ef8 | ||
|
|
b553502d8a | ||
|
|
1c357ba508 | ||
|
|
86d2ea8c70 | ||
|
|
07394fcafa | ||
|
|
d9534ec626 | ||
|
|
a6bae7f196 | ||
|
|
5b2dc52681 | ||
|
|
a044697990 | ||
|
|
54e637c72b | ||
|
|
db03b95389 | ||
|
|
d49efa79df | ||
|
|
9fc223d3ee | ||
|
|
1a3fd92063 | ||
|
|
ed46878f7b | ||
|
|
593da4e38f | ||
|
|
cfbcfd913c | ||
|
|
79de1ff507 | ||
|
|
8a8f04153a | ||
|
|
8031ca2616 | ||
|
|
40881d7e79 | ||
|
|
b0d1f720e0 | ||
|
|
7dbe4f1807 | ||
|
|
5fcd0e52e7 | ||
|
|
76aced4d40 | ||
|
|
66259d8909 | ||
|
|
4b041c636f | ||
|
|
e84fe36518 | ||
|
|
9cc4cc0efd | ||
|
|
c9fa54536e | ||
|
|
22d484d54d | ||
|
|
90d4cf1361 | ||
|
|
7c427d4cc3 | ||
|
|
46c7b69c64 | ||
|
|
091be59f0d | ||
|
|
af30436357 | ||
|
|
7b2dc46399 | ||
|
|
2491f25da7 | ||
|
|
d400584460 | ||
|
|
de08655c5b | ||
|
|
f8359adcc0 | ||
|
|
a227aad13d | ||
|
|
80ea173390 | ||
|
|
6d257ef52c | ||
|
|
25cb31c38b | ||
|
|
bed0456eca | ||
|
|
ad08302e5f | ||
|
|
f74c67da46 | ||
|
|
27eb8cfe8a | ||
|
|
b26658fd96 | ||
|
|
0c8c7fb03c | ||
|
|
6bb16d6c52 | ||
|
|
2c465d9741 | ||
|
|
19be36dbcb | ||
|
|
3b632739a8 | ||
|
|
640339ec36 | ||
|
|
647404ec1e | ||
|
|
338a456f09 | ||
|
|
66667b6172 | ||
|
|
7a5c223ccf | ||
|
|
2dbe897e1b | ||
|
|
fc700538a5 | ||
|
|
8d3b47a18a | ||
|
|
1bcd5ee0c1 | ||
|
|
9430960b18 | ||
|
|
4581023805 | ||
|
|
73b3648262 | ||
|
|
6b42d789af | ||
|
|
6db599da45 | ||
|
|
2f6ecd1853 | ||
|
|
4c4fdb5dfe | ||
|
|
3dfd53a549 | ||
|
|
91c52a4972 | ||
|
|
ac2313ecb7 | ||
|
|
8100bc64a0 | ||
|
|
aee5051526 | ||
|
|
0162e15b6e | ||
|
|
295fae0edc | ||
|
|
fe4ad7de64 | ||
|
|
680236b03e | ||
|
|
0f528d136d | ||
|
|
d9dcde60a6 | ||
|
|
d0424862f9 | ||
|
|
100e3d7702 | ||
|
|
d22608a49f | ||
|
|
5d0fd8b9a7 | ||
|
|
7191a0ba8b | ||
|
|
c2d289dc71 | ||
|
|
5f4646f617 | ||
|
|
a80aa07de6 | ||
|
|
2358f5c2a2 | ||
|
|
bc3bf6ab5e | ||
|
|
b099d6fe63 | ||
|
|
d5f773f385 | ||
|
|
da5eb620bf | ||
|
|
2ed754d5ea | ||
|
|
fe562d4715 | ||
|
|
49e5c305a4 | ||
|
|
69eb76ad66 | ||
|
|
a3662cc3f5 | ||
|
|
1e74451534 | ||
|
|
66e105b444 | ||
|
|
413183bad8 | ||
|
|
11cfa61f80 | ||
|
|
27ad648c16 | ||
|
|
d47b88a30c | ||
|
|
51616ecf2f | ||
|
|
01e66ac349 | ||
|
|
223bb9ba9a | ||
|
|
70c84d3abd | ||
|
|
ea65bcd86b | ||
|
|
e837f780a2 | ||
|
|
1a1c6e8797 | ||
|
|
15ebbd309f | ||
|
|
3b8d10cae5 | ||
|
|
2c0372acdf | ||
|
|
8b52bd817f | ||
|
|
38dd9a344e | ||
|
|
cbf46d0ded | ||
|
|
b10b22d09f | ||
|
|
0664cf407c | ||
|
|
4e667fabb7 | ||
|
|
5ca62de167 | ||
|
|
d3016b62f5 | ||
|
|
7d4d618d98 | ||
|
|
9b3fccdcb7 | ||
|
|
8da539ed8a | ||
|
|
3658e5f0f1 | ||
|
|
5083972536 | ||
|
|
f983ce4875 | ||
|
|
4c4a39a115 | ||
|
|
cb1661f9d0 | ||
|
|
eb5676366b |
+30
@@ -0,0 +1,30 @@
|
||||
# mbake configuration file
|
||||
|
||||
[formatter]
|
||||
# Indentation settings
|
||||
use_tabs = true
|
||||
tab_width = 2
|
||||
|
||||
# Spacing settings
|
||||
space_around_assignment = true
|
||||
space_before_colon = false
|
||||
space_after_colon = true
|
||||
|
||||
# Line continuation settings
|
||||
normalize_line_continuations = true
|
||||
max_line_length = 100
|
||||
|
||||
# PHONY settings
|
||||
group_phony_declarations = false
|
||||
phony_at_top = false
|
||||
auto_insert_phony_declarations = false
|
||||
|
||||
# General settings
|
||||
remove_trailing_whitespace = true
|
||||
ensure_final_newline = true
|
||||
normalize_empty_lines = true
|
||||
max_consecutive_empty_lines = 2
|
||||
|
||||
# Global settings
|
||||
debug = false
|
||||
verbose = false
|
||||
+4
-4
@@ -1,6 +1,6 @@
|
||||
---
|
||||
exclude_paths:
|
||||
- ".github/**"
|
||||
- "ci/build_verilator.sh"
|
||||
- "include/vltstd/**"
|
||||
- "nodist/fastcov.py"
|
||||
- ".github/**" #
|
||||
- "ci/build_verilator.sh" #
|
||||
- "include/vltstd/**" #
|
||||
- "nodist/fastcov.py" #
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
# DESCRIPTION: codecov.io config
|
||||
#
|
||||
# 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
|
||||
# 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
|
||||
####################
|
||||
# Validate:
|
||||
# curl --data-binary @.codecov.yml https://codecov.io/validate
|
||||
#
|
||||
coverage:
|
||||
precision: 2
|
||||
range: 75...100
|
||||
round: down
|
||||
status:
|
||||
project: false
|
||||
patch: false
|
||||
comment: false
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Use this to report that something isn't working as expected, and it isn't "Unsupported." (Note our contributor agreement at https://github.com/verilator/verilator/blob/master/docs/CONTRIBUTING.rst)
|
||||
title: ''
|
||||
labels: new
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Thanks for taking the time to report this.
|
||||
|
||||
Can you attach an example that shows the issue? (Must be openly licensed, completely self-contained and self-checking 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 --version' are you using? Did you try it with the git master version?
|
||||
|
||||
What OS and distribution are you using?
|
||||
|
||||
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)
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
name: Feature Request
|
||||
about: Use this to request something should be supported, or a new feature added. (Note our contributor agreement at https://github.com/verilator/verilator/blob/master/docs/CONTRIBUTING.rst)
|
||||
title: ''
|
||||
labels: new
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Thanks for taking the time to report this.
|
||||
|
||||
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, completely self-contained and self-checking 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
|
||||
|
||||
May we assist you in trying to fix this in Verilator yourself?
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
name: Bug or feature
|
||||
about: Use this to report that something isn't working as expected, or is a desired feature. (Note our contributor agreement at https://github.com/verilator/verilator/blob/master/docs/CONTRIBUTING.rst)
|
||||
title: ''
|
||||
labels: new
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Thanks for taking the time to report this.
|
||||
|
||||
Can you please attach an example that shows the issue or missing feature? (Must be openly licensed, completely self-contained 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 output from that test indicates it is wrong, and what is the correct or expected output? (Or, please make test self-checking if possible.)
|
||||
|
||||
What 'verilator' command line do we use to run your example?
|
||||
|
||||
What 'verilator --version' are you using? Did you try it with the git master version? Did you try it with other simulators?
|
||||
|
||||
What OS and distribution are you using?
|
||||
|
||||
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)
|
||||
@@ -9,4 +9,4 @@ assignees: ''
|
||||
|
||||
How may we help - what is your question?
|
||||
|
||||
(If reporting a bug or requesting a feature please use one of the other issue templates.)
|
||||
(If reporting a bug or requesting a feature please hit BACK on your browser and use a different issue templates.)
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
# See https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
@@ -3,83 +3,174 @@
|
||||
# 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
|
||||
|
||||
name: build
|
||||
name: build-test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- 'dependabot/**' # Avoid duplicates: only run the PR, not the push
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0 * * 0' # weekly
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
working-directory: repo
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
# At most 1 job per branch. Auto cancel on pull requests and on all forks
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' || github.repository != 'verilator/verilator' }}
|
||||
|
||||
jobs:
|
||||
|
||||
build-2404-gcc:
|
||||
name: Build
|
||||
name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }}
|
||||
uses: ./.github/workflows/reusable-build.yml
|
||||
with:
|
||||
sha: ${{ github.sha }}
|
||||
os: ${{ matrix.os }}
|
||||
os-name: linux
|
||||
cc: ${{ matrix.cc }}
|
||||
dev-asan: ${{ matrix.asan }}
|
||||
dev-gcov: 0
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- {os: ubuntu-24.04, cc: gcc}
|
||||
- {os: ubuntu-24.04, cc: gcc, asan: 0}
|
||||
|
||||
build-2404-clang:
|
||||
name: Build
|
||||
name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }}
|
||||
uses: ./.github/workflows/reusable-build.yml
|
||||
with:
|
||||
sha: ${{ github.sha }}
|
||||
os: ${{ matrix.os }}
|
||||
os-name: linux
|
||||
cc: ${{ matrix.cc }}
|
||||
dev-asan: ${{ matrix.asan }}
|
||||
dev-gcov: 0
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- {os: ubuntu-24.04, cc: clang}
|
||||
- {os: ubuntu-24.04, cc: clang, asan: 1}
|
||||
|
||||
build-2204-gcc:
|
||||
name: Build
|
||||
name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }}
|
||||
uses: ./.github/workflows/reusable-build.yml
|
||||
with:
|
||||
sha: ${{ github.sha }}
|
||||
os: ${{ matrix.os }}
|
||||
os-name: linux
|
||||
cc: ${{ matrix.cc }}
|
||||
dev-asan: ${{ matrix.asan }}
|
||||
dev-gcov: 0
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- {os: ubuntu-22.04, cc: gcc}
|
||||
- {os: ubuntu-22.04, cc: gcc, asan: 0}
|
||||
|
||||
build-2204-clang:
|
||||
name: Build
|
||||
name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }}
|
||||
uses: ./.github/workflows/reusable-build.yml
|
||||
with:
|
||||
sha: ${{ github.sha }}
|
||||
os: ${{ matrix.os }}
|
||||
os-name: linux
|
||||
cc: ${{ matrix.cc }}
|
||||
dev-asan: ${{ matrix.asan }}
|
||||
dev-gcov: 0
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- {os: ubuntu-22.04, cc: clang}
|
||||
- {os: ubuntu-22.04, cc: clang, asan: 0}
|
||||
|
||||
build-osx-gcc:
|
||||
name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }}
|
||||
uses: ./.github/workflows/reusable-build.yml
|
||||
with:
|
||||
sha: ${{ github.sha }}
|
||||
os: ${{ matrix.os }}
|
||||
os-name: osx
|
||||
cc: ${{ matrix.cc }}
|
||||
dev-asan: ${{ matrix.asan }}
|
||||
dev-gcov: 0
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- {os: macos-15, cc: gcc, asan: 0}
|
||||
|
||||
build-osx-clang:
|
||||
name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }}
|
||||
uses: ./.github/workflows/reusable-build.yml
|
||||
with:
|
||||
sha: ${{ github.sha }}
|
||||
os: ${{ matrix.os }}
|
||||
os-name: osx
|
||||
cc: ${{ matrix.cc }}
|
||||
dev-asan: ${{ matrix.asan }}
|
||||
dev-gcov: 0
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- {os: macos-15, cc: clang, asan: 0}
|
||||
|
||||
build-windows:
|
||||
name: Build | ${{ matrix.os }} | ${{ matrix.cc }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- {os: windows-2025, cc: msvc}
|
||||
env:
|
||||
CI_OS_NAME: win
|
||||
CCACHE_COMPRESS: 1
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
CCACHE_LIMIT_MULTIPLE: 0.95
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
path: repo
|
||||
- name: Cache $CCACHE_DIR
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: msbuild-msvc-cmake
|
||||
- name: compile
|
||||
env:
|
||||
WIN_FLEX_BISON: ${{ github.workspace }}/.ccache
|
||||
run: ./ci/ci-win-compile.ps1
|
||||
- name: test build
|
||||
run: ./ci/ci-win-test.ps1
|
||||
- name: Zip up repository
|
||||
run: Compress-Archive -LiteralPath install -DestinationPath verilator.zip
|
||||
- name: Upload zip archive
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: ${{ github.workspace }}/repo/verilator.zip
|
||||
name: verilator-win.zip
|
||||
|
||||
test-2404-gcc:
|
||||
name: Test | ${{ matrix.os }} | ${{ matrix.cc }}
|
||||
name: Test | ${{ matrix.os }} | ${{ matrix.cc }} | ${{ matrix.reloc && 'reloc | ' || '' }} ${{ matrix.suite }}
|
||||
needs: build-2404-gcc
|
||||
uses: ./.github/workflows/reusable-test.yml
|
||||
with:
|
||||
archive: ${{ needs.build-2404-gcc.outputs.archive }}
|
||||
os: ${{ matrix.os }}
|
||||
cc: ${{ matrix.cc }}
|
||||
reloc: ${{ matrix.reloc }}
|
||||
suite: ${{ matrix.suite }}
|
||||
dev-gcov: 0
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -94,14 +185,16 @@ jobs:
|
||||
- {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: vltmt-2}
|
||||
|
||||
test-2404-clang:
|
||||
name: Test | ${{ matrix.os }} | ${{ matrix.cc }}
|
||||
name: Test | ${{ matrix.os }} | ${{ matrix.cc }} | ${{ matrix.reloc && 'reloc | ' || '' }} ${{ matrix.suite }}
|
||||
needs: build-2404-clang
|
||||
uses: ./.github/workflows/reusable-test.yml
|
||||
with:
|
||||
archive: ${{ needs.build-2404-clang.outputs.archive }}
|
||||
os: ${{ matrix.os }}
|
||||
cc: ${{ matrix.cc }}
|
||||
reloc: ${{ matrix.reloc }}
|
||||
suite: ${{ matrix.suite }}
|
||||
dev-gcov: 0
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -116,14 +209,16 @@ jobs:
|
||||
- {os: ubuntu-24.04, cc: clang, reloc: 0, suite: vltmt-2}
|
||||
|
||||
test-2204-gcc:
|
||||
name: Test | ${{ matrix.os }} | ${{ matrix.cc }}
|
||||
name: Test | ${{ matrix.os }} | ${{ matrix.cc }} | ${{ matrix.reloc && 'reloc | ' || '' }} ${{ matrix.suite }}
|
||||
needs: build-2204-gcc
|
||||
uses: ./.github/workflows/reusable-test.yml
|
||||
with:
|
||||
archive: ${{ needs.build-2204-gcc.outputs.archive }}
|
||||
os: ${{ matrix.os }}
|
||||
cc: ${{ matrix.cc }}
|
||||
reloc: ${{ matrix.reloc }}
|
||||
suite: ${{ matrix.suite }}
|
||||
dev-gcov: 0
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -138,14 +233,16 @@ jobs:
|
||||
- {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: vltmt-2}
|
||||
|
||||
test-2204-clang:
|
||||
name: Test | ${{ matrix.os }} | ${{ matrix.cc }}
|
||||
name: Test | ${{ matrix.os }} | ${{ matrix.cc }} | ${{ matrix.reloc && 'reloc | ' || '' }} ${{ matrix.suite }}
|
||||
needs: build-2204-clang
|
||||
uses: ./.github/workflows/reusable-test.yml
|
||||
with:
|
||||
archive: ${{ needs.build-2204-clang.outputs.archive }}
|
||||
os: ${{ matrix.os }}
|
||||
cc: ${{ matrix.cc }}
|
||||
reloc: ${{ matrix.reloc }}
|
||||
suite: ${{ matrix.suite }}
|
||||
dev-gcov: 0
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -160,34 +257,30 @@ jobs:
|
||||
- {os: ubuntu-22.04, cc: clang, reloc: 1, suite: vltmt-2}
|
||||
|
||||
lint-py:
|
||||
runs-on: ubuntu-22.04
|
||||
name: Lint Python
|
||||
env:
|
||||
CI_OS_NAME: linux
|
||||
CI_COMMIT: ${{ github.sha }}
|
||||
CI_BUILD_STAGE_NAME: build
|
||||
CI_RUNS_ON: ubuntu-22.04
|
||||
CCACHE_COMPRESS: 1
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
CCACHE_LIMIT_MULTIPLE: 0.95
|
||||
strategy:
|
||||
fail-fast: false
|
||||
uses: ./.github/workflows/reusable-lint-py.yml
|
||||
|
||||
passed:
|
||||
name: Test suite passed
|
||||
if: always()
|
||||
needs:
|
||||
- build-2404-gcc
|
||||
- build-2404-clang
|
||||
- build-2204-gcc
|
||||
- build-2204-clang
|
||||
- build-osx-gcc
|
||||
- build-osx-clang
|
||||
- build-windows
|
||||
- test-2404-gcc
|
||||
- test-2404-clang
|
||||
- test-2204-gcc
|
||||
- test-2204-clang
|
||||
- lint-py
|
||||
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Decide whether the needed jobs succeeded or failed
|
||||
uses: re-actors/alls-green@release/v1
|
||||
with:
|
||||
path: repo
|
||||
|
||||
- name: Install packages for build
|
||||
run: ./ci/ci-install.bash
|
||||
|
||||
# We use specific version numbers, otherwise a Python package
|
||||
# update may add a warning and break our build
|
||||
- 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
|
||||
|
||||
- name: Configure
|
||||
run: autoconf && ./configure --enable-longtests --enable-ccwarn
|
||||
|
||||
- name: Lint
|
||||
run: make -k lint-py
|
||||
jobs: ${{ toJSON(needs) }}
|
||||
@@ -5,12 +5,16 @@
|
||||
name: Contributor Agreement
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- 'dependabot/**' # Avoid duplicates: only run the PR, not the push
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
permissions:
|
||||
contents: read
|
||||
jobs:
|
||||
Test:
|
||||
name: "'docs/CONTRIBUTORS' was signed"
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
- run: test_regress/t/t_dist_contributors.py
|
||||
|
||||
+185
-64
@@ -2,91 +2,212 @@
|
||||
# DESCRIPTION: Github actions config
|
||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||
|
||||
name: coverage
|
||||
name: Code coverage
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0 * * 0' # weekly
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, labeled, unlabeled]
|
||||
|
||||
env:
|
||||
CI_OS_NAME: linux
|
||||
CI_COMMIT: ${{ github.sha }}
|
||||
COVERAGE: 1
|
||||
VERILATOR_ARCHIVE: verilator-coverage-${{ github.sha }}.tar.gz
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
working-directory: repo
|
||||
|
||||
concurrency:
|
||||
# At most 1 job per branch. Auto cancel all but scheduled jobs
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name != 'schedule' }}
|
||||
|
||||
jobs:
|
||||
|
||||
Build:
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
CI_BUILD_STAGE_NAME: build
|
||||
CI_RUNS_ON: ubuntu-22.04
|
||||
steps:
|
||||
build:
|
||||
name: Build
|
||||
# Only run scheduled jobs if explicitly enabled for that repo (e.g.: not on forks)
|
||||
# Only run pull request jobs if labelled as needing an coverage run
|
||||
# Always run workflow dispatch jobs
|
||||
if: |
|
||||
(github.event_name == 'schedule'
|
||||
&& vars.ENABLE_SCHEDULED_JOBS == 'true') ||
|
||||
(github.event_name == 'pull_request'
|
||||
&& contains(github.event.pull_request.labels.*.name, 'pr: dev-coverage')) ||
|
||||
(github.event_name == 'workflow_dispatch')
|
||||
uses: ./.github/workflows/reusable-build.yml
|
||||
with:
|
||||
# For pull requests, build the head of the pull request branch, not the
|
||||
# merge commit, otherwise patch coverage would include the changes
|
||||
# between the root of the pull request and the target branch
|
||||
sha: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
|
||||
os: ubuntu-24.04
|
||||
os-name: linux
|
||||
cc: gcc
|
||||
dev-asan: 0
|
||||
dev-gcov: 1
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: repo
|
||||
|
||||
- name: Install packages for build
|
||||
run: ./ci/ci-install.bash
|
||||
|
||||
- name: Build
|
||||
run: ./ci/ci-script.bash
|
||||
|
||||
- name: Tar up repository
|
||||
working-directory: ${{ github.workspace }}
|
||||
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 }}
|
||||
|
||||
Test:
|
||||
needs: Build
|
||||
test:
|
||||
name: Test | ${{ matrix.test }}${{ matrix.num }}
|
||||
needs: build
|
||||
uses: ./.github/workflows/reusable-test.yml
|
||||
with:
|
||||
archive: ${{ needs.build.outputs.archive }}
|
||||
os: ubuntu-24.04
|
||||
cc: gcc
|
||||
reloc: 0
|
||||
suite: ${{ matrix.test }}${{ matrix.num }}
|
||||
dev-gcov: 1
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
test: [vlt-, vltmt-]
|
||||
test: [coverage-vlt-, coverage-vltmt-]
|
||||
num: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||
include:
|
||||
- {test: dist, num: ''}
|
||||
runs-on: ubuntu-22.04
|
||||
name: test-${{ matrix.test }}${{ matrix.num }}
|
||||
env:
|
||||
CI_BUILD_STAGE_NAME: test
|
||||
CI_RUNS_ON: ubuntu-22.04
|
||||
steps:
|
||||
- {test: coverage-dist, num: ''}
|
||||
|
||||
- name: Download tar archive
|
||||
uses: actions/download-artifact@v4
|
||||
publish-codecov:
|
||||
name: Publish results to codecov.io
|
||||
needs: test
|
||||
if: ${{ contains(needs.*.result, 'success') && !cancelled() }}
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Download code coverage data
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: ${{ env.VERILATOR_ARCHIVE }}
|
||||
pattern: code-coverage-*
|
||||
path: obj_coverage
|
||||
merge-multiple: true
|
||||
|
||||
- name: List files
|
||||
id: list-files
|
||||
run: |
|
||||
ls -lsha obj_coverage
|
||||
find obj_coverage -type f | paste -sd, | sed "s/^/files=/" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Upload to codecov.io
|
||||
uses: codecov/codecov-action@v5
|
||||
with:
|
||||
disable_file_fixes: true
|
||||
disable_search: true
|
||||
fail_ci_if_error: true
|
||||
files: ${{ steps.list-files.outputs.files }}
|
||||
plugins: noop
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
verbose: true
|
||||
|
||||
prepare-report:
|
||||
name: Prepare HTML report
|
||||
needs: [build, test]
|
||||
if: ${{ contains(needs.*.result, 'success') && !cancelled() }}
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
echo 'set man-db/auto-update false' | sudo debconf-communicate >/dev/null
|
||||
sudo dpkg-reconfigure man-db
|
||||
sudo apt install lcov
|
||||
|
||||
- name: Download repository archive
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: ${{ needs.build.outputs.archive }}
|
||||
path: ${{ github.workspace }}
|
||||
|
||||
- name: Unpack tar archive
|
||||
working-directory: ${{ github.workspace }}
|
||||
run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }}
|
||||
|
||||
- name: Install test dependencies
|
||||
run: ./ci/ci-install.bash
|
||||
|
||||
- name: Test
|
||||
env:
|
||||
TESTS: coverage-${{ matrix.test }}${{ matrix.num }}
|
||||
run: ./ci/ci-script.bash
|
||||
|
||||
- name: Upload coverage data to Codecov
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
- name: Unpack repository archive
|
||||
run: |
|
||||
find . -name '*.gcno' -exec rm {} \;
|
||||
./ci/codecov -v upload-process -Z --sha ${{ github.sha }} -f nodist/obj_dir/coverage/app_total.info
|
||||
tar -x -z -f ${{ needs.build.outputs.archive }}
|
||||
ls -lsha
|
||||
|
||||
- name: Download code coverage data
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
pattern: code-coverage-*
|
||||
path: repo/obj_coverage
|
||||
merge-multiple: true
|
||||
|
||||
- name: Create report
|
||||
working-directory: repo
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
ls -lsha obj_coverage
|
||||
# Combine reports from test jobs
|
||||
nodist/fastcov.py -C obj_coverage/verilator-*.info --lcov -o obj_coverage/verilator.info
|
||||
# For a PR, report patch coverage against the merge-base between the head of the PR and the target branch
|
||||
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
|
||||
COVERAGE_BASE=$(git rev-parse --short $(git merge-base ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }}))
|
||||
make coverage-report COVERAGE_BASE=${COVERAGE_BASE} |& tee ${{ github.workspace }}/make-coverage-report.log
|
||||
else
|
||||
make coverage-report
|
||||
fi
|
||||
# Remove data files
|
||||
rm -f obj_coverage/verilator*.info
|
||||
# Some extra work for PRs only
|
||||
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
|
||||
# Save PR number in report
|
||||
echo ${{ github.event.number }} > obj_coverage/pr-number.txt
|
||||
# Generate notification comment content
|
||||
mkdir -p notification
|
||||
echo ${{ github.event.number }} > notification/pr-number.txt
|
||||
NUM=$(gh run view ${{ github.run_id }} --json number --jq ".number")
|
||||
URL=$(gh run view ${{ github.run_id }} --json url --jq ".url")
|
||||
echo "Patch coverage from PR workflow [#$NUM]($URL) (code coverage of lines changed relative to ${COVERAGE_BASE}):" > notification/body.txt
|
||||
if [[ ! -f obj_coverage/empty-patch ]]; then
|
||||
echo "<pre>" >> notification/body.txt
|
||||
grep -E "(lines|branches)\.*:" ${{ github.workspace }}/make-coverage-report.log | sed "s/\.*:/:/" >> notification/body.txt || true
|
||||
echo "</pre>" >> notification/body.txt
|
||||
echo "Report: [${{ github.run_id }}](https://${{ github.repository_owner }}.github.io/verilator/coverage-reports/${{ github.run_id }}/index.html)" >> notification/body.txt
|
||||
else
|
||||
echo "Patch contains no code changes" >> notification/body.txt
|
||||
fi
|
||||
cat notification/body.txt
|
||||
fi
|
||||
|
||||
- name: Upload report
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: repo/obj_coverage
|
||||
name: coverage-report
|
||||
|
||||
- name: Upload notification
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: repo/notification
|
||||
name: coverage-pr-notification
|
||||
|
||||
# Create GitHub issue for failed scheduled jobs
|
||||
# This should always be the last job (we want an issue if anything breaks)
|
||||
create-issue:
|
||||
name: Create issue on failure
|
||||
needs: [publish-codecov, prepare-report]
|
||||
if: ${{ github.event_name == 'schedule' && github.repository == 'verilator/verilator' && github.run_attempt == 1 && failure() && !cancelled() }}
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
# Creating issues requires elevated privilege
|
||||
- name: Generate access token
|
||||
id: generate-token
|
||||
uses: actions/[email protected]
|
||||
with:
|
||||
app-id: ${{ vars.VERILATOR_CI_ID }}
|
||||
private-key: ${{ secrets.VERILATOR_CI_KEY }}
|
||||
owner: verilator
|
||||
repositories: verilator
|
||||
permission-issues: write
|
||||
- name: Create issue
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||
run: |-
|
||||
echo "This issue was created automatically by the GitHub Actions CI due to the failure of a scheduled Code coverage run." >> body.txt
|
||||
echo "" >> body.txt
|
||||
echo "Workflow status: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> body.txt
|
||||
gh issue --repo ${{ github.repository }} create \
|
||||
--title "Code coverage run #${{ github.run_number }} Failed" \
|
||||
--body-file body.txt \
|
||||
--label new \
|
||||
--assignee gezalore,wsnyder
|
||||
|
||||
@@ -22,11 +22,14 @@ on:
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -36,7 +39,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Extract context variables
|
||||
run: |
|
||||
@@ -51,7 +54,7 @@ jobs:
|
||||
|
||||
- name: Docker meta
|
||||
id: docker_meta
|
||||
uses: docker/metadata-action@v4
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: |
|
||||
${{ vars.DOCKER_HUB_NAMESPACE }}/${{ env.image_name }}
|
||||
@@ -61,21 +64,21 @@ jobs:
|
||||
type=raw,value=latest,enable=${{ inputs.add_latest_tag == true }}
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
buildkitd-flags: --debug
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v2
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_HUB_USER }}
|
||||
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
||||
|
||||
- name: Build and Push to Docker
|
||||
uses: docker/build-push-action@v4
|
||||
uses: docker/build-push-action@v6
|
||||
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
|
||||
with:
|
||||
context: ${{ env.build_context }}
|
||||
|
||||
@@ -5,19 +5,23 @@
|
||||
name: format
|
||||
on:
|
||||
push:
|
||||
pull_request_target:
|
||||
workflow_dispatch:
|
||||
branches-ignore:
|
||||
- 'dependabot/**' # Avoid duplicates: only run the PR, not the push
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
format:
|
||||
runs-on: ubuntu-22.04
|
||||
name: Ubuntu 22.04 | format
|
||||
runs-on: ubuntu-24.04
|
||||
name: Ubuntu 24.04 | format
|
||||
env:
|
||||
CI_OS_NAME: linux
|
||||
CI_RUNS_ON: ubuntu-22.04
|
||||
CI_RUNS_ON: ubuntu-24.04
|
||||
CI_COMMIT: ${{ github.sha }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Install packages for build
|
||||
@@ -25,17 +29,18 @@ jobs:
|
||||
CI_BUILD_STAGE_NAME: build
|
||||
run: |
|
||||
bash ci/ci-install.bash &&
|
||||
sudo apt-get install clang-format-14 yapf3 &&
|
||||
sudo apt-get install clang-format-18 yapf3 &&
|
||||
sudo pip3 install gersemi mbake &&
|
||||
git config --global user.email "[email protected]" &&
|
||||
git config --global user.name "github action"
|
||||
- name: Format code
|
||||
run: |
|
||||
autoconf &&
|
||||
./configure &&
|
||||
make -j 2 format CLANGFORMAT=clang-format-14 &&
|
||||
make -j 2 format CLANGFORMAT=clang-format-18 &&
|
||||
git status
|
||||
- name: Push
|
||||
run: |
|
||||
run: |-
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
git commit . -m "Apply 'make format'" &&
|
||||
git push origin
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
# DESCRIPTION: Github actions config
|
||||
# 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
|
||||
#
|
||||
name: msbuild
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: 0 0 * * 0 # weekly
|
||||
env:
|
||||
CI_OS_NAME: win
|
||||
CI_COMMIT: ${{ github.sha }}
|
||||
CCACHE_COMPRESS: 1
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
CCACHE_LIMIT_MULTIPLE: 0.95
|
||||
defaults:
|
||||
run:
|
||||
working-directory: repo
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
jobs:
|
||||
windows:
|
||||
name: run on windows
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
path: repo
|
||||
- name: Cache $CCACHE_DIR
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: msbuild-msvc-cmake
|
||||
- name: compile
|
||||
env:
|
||||
WIN_FLEX_BISON: ${{ github.workspace }}/.ccache
|
||||
run: ./ci/ci-win-compile.ps1
|
||||
- name: test build
|
||||
run: ./ci/ci-win-test.ps1
|
||||
- name: Zip up repository
|
||||
run: Compress-Archive -LiteralPath install -DestinationPath verilator.zip
|
||||
- name: Upload zip archive
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ github.workspace }}/repo/verilator.zip
|
||||
name: verilator-win.zip
|
||||
@@ -0,0 +1,90 @@
|
||||
---
|
||||
# DESCRIPTION: Github actions config
|
||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||
|
||||
name: Pages
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- "ci/**"
|
||||
- ".github/workflows"
|
||||
workflow_dispatch:
|
||||
workflow_run:
|
||||
workflows: ["Code coverage"]
|
||||
types: [completed]
|
||||
|
||||
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
# Allow only one concurrent deployment, skipping runs queued between the run
|
||||
# in-progress and latest queued. However, do NOT cancel in-progress runs as we
|
||||
# want to allow these deployments to complete.
|
||||
concurrency:
|
||||
group: "pages"
|
||||
cancel-in-progress: false
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build content
|
||||
runs-on: ubuntu-24.04
|
||||
outputs:
|
||||
coverage-pr-run-ids: ${{ steps.build.outputs.coverage-pr-run-ids }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
- name: Build pages
|
||||
id: build
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
bash -x ./ci/ci-pages.bash
|
||||
ls -lsha
|
||||
tree -L 3 pages
|
||||
- name: Upload pages artifact
|
||||
uses: actions/upload-pages-artifact@v4
|
||||
with:
|
||||
path: pages
|
||||
|
||||
deploy:
|
||||
name: Deploy
|
||||
needs: build
|
||||
runs-on: ubuntu-24.04
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: actions/deploy-pages@v4
|
||||
|
||||
notify:
|
||||
name: Notify
|
||||
needs: [build, deploy]
|
||||
runs-on: ubuntu-24.04
|
||||
if: ${{ github.repository == 'verilator/verilator' }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
# Use the Verilator CI app to post the comment
|
||||
- name: Generate access token
|
||||
id: generate-token
|
||||
uses: actions/[email protected]
|
||||
with:
|
||||
app-id: ${{ vars.VERILATOR_CI_ID }}
|
||||
private-key: ${{ secrets.VERILATOR_CI_KEY }}
|
||||
permission-actions: write
|
||||
permission-pull-requests: write
|
||||
- name: Comment on PR
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||
COVERAGE_PR_RUN_IDS: ${{ needs.build.outputs.coverage-pr-run-ids }}
|
||||
run: bash -x ./ci/ci-pages-notify.bash
|
||||
@@ -1,6 +1,5 @@
|
||||
---
|
||||
# DESCRIPTION: Github actions config
|
||||
# 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
|
||||
|
||||
name: reusable-build
|
||||
@@ -8,16 +7,32 @@ name: reusable-build
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
sha:
|
||||
description: "Commit SHA to build"
|
||||
required: true
|
||||
type: string
|
||||
os: # e.g. ubuntu-24.04
|
||||
required: true
|
||||
type: string
|
||||
cc: # gcc or clang
|
||||
cc: # 'clang' or 'gcc'
|
||||
required: true
|
||||
type: string
|
||||
os-name: # 'linux' or 'osx'
|
||||
required: true
|
||||
type: string
|
||||
dev-asan:
|
||||
required: true
|
||||
type: number
|
||||
dev-gcov:
|
||||
required: true
|
||||
type: number
|
||||
outputs:
|
||||
archive:
|
||||
description: "Name of the built repository archive artifact"
|
||||
value: ${{ jobs.build.outputs.archive }}
|
||||
|
||||
env:
|
||||
CI_OS_NAME: linux
|
||||
CI_COMMIT: ${{ github.sha }}
|
||||
CI_OS_NAME: ${{ inputs.os-name }}
|
||||
CCACHE_COMPRESS: 1
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
CCACHE_LIMIT_MULTIPLE: 0.95
|
||||
@@ -32,22 +47,25 @@ defaults:
|
||||
jobs:
|
||||
|
||||
build:
|
||||
name: Build
|
||||
runs-on: ${{ inputs.os }}
|
||||
name: Sub-build | ${{ inputs.os }} | ${{ inputs.cc }}
|
||||
outputs:
|
||||
archive: ${{ steps.create-archive.outputs.archive }}
|
||||
env:
|
||||
CI_BUILD_STAGE_NAME: build
|
||||
CI_DEV_ASAN: ${{ inputs.dev-asan }}
|
||||
CI_DEV_GCOV: ${{ inputs.dev-gcov }}
|
||||
CI_RUNS_ON: ${{ inputs.os }}
|
||||
CC: ${{ inputs.cc }}
|
||||
CXX: ${{ inputs.cc == 'clang' && 'clang++' || 'g++' }}
|
||||
CACHE_BASE_KEY: build-${{ inputs.os }}-${{ inputs.cc }}
|
||||
CCACHE_MAXSIZE: 1000M # Per build matrix entry (* 5 = 5000M in total)
|
||||
VERILATOR_ARCHIVE: verilator-${{ github.sha }}-${{ inputs.os }}-${{ inputs.cc }}.tar.gz
|
||||
steps:
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
path: repo
|
||||
ref: ${{ inputs.sha }}
|
||||
fetch-depth: ${{ inputs.dev-gcov && '0' || '1' }} # Coverage flow needs full history
|
||||
|
||||
- name: Cache $CCACHE_DIR
|
||||
uses: actions/cache@v4
|
||||
@@ -55,7 +73,7 @@ jobs:
|
||||
CACHE_KEY: ${{ env.CACHE_BASE_KEY }}-ccache
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ env.CACHE_KEY }}-${{ github.sha }}
|
||||
key: ${{ env.CACHE_KEY }}-${{ inputs.sha }}
|
||||
restore-keys: |
|
||||
${{ env.CACHE_KEY }}-
|
||||
|
||||
@@ -65,12 +83,17 @@ jobs:
|
||||
- name: Build
|
||||
run: ./ci/ci-script.bash
|
||||
|
||||
- name: Tar up repository
|
||||
- name: Create repository archive
|
||||
id: create-archive
|
||||
working-directory: ${{ github.workspace }}
|
||||
run: tar --posix -c -z -f ${{ env.VERILATOR_ARCHIVE }} repo
|
||||
run: |
|
||||
# Name of the archive must be unique based on the build parameters
|
||||
ARCHIVE=verilator-${{ inputs.sha }}-${{ inputs.os }}-${{ inputs.cc }}-${{ inputs.dev-asan }}-${{ inputs.dev-gcov }}.tar.gz
|
||||
tar --posix -c -z -f $ARCHIVE repo
|
||||
echo "archive=$ARCHIVE" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Upload tar archive
|
||||
uses: actions/upload-artifact@v4
|
||||
- name: Upload repository archive
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: ${{ github.workspace }}/${{ env.VERILATOR_ARCHIVE }}
|
||||
name: ${{ env.VERILATOR_ARCHIVE }}
|
||||
path: ${{ github.workspace }}/${{ steps.create-archive.outputs.archive }}
|
||||
name: ${{ steps.create-archive.outputs.archive }}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
# DESCRIPTION: Github actions config
|
||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||
|
||||
name: reusable-lint-py
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
env:
|
||||
CI_OS_NAME: linux
|
||||
CI_BUILD_STAGE_NAME: build
|
||||
CI_RUNS_ON: ubuntu-22.04
|
||||
CCACHE_COMPRESS: 1
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
CCACHE_LIMIT_MULTIPLE: 0.95
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
working-directory: repo
|
||||
|
||||
jobs:
|
||||
|
||||
lint-py:
|
||||
runs-on: ubuntu-22.04
|
||||
name: Sub-lint | Python
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
path: repo
|
||||
|
||||
- name: Install packages for build
|
||||
run: ./ci/ci-install.bash
|
||||
|
||||
# We use specific version numbers, otherwise a Python package
|
||||
# update may add a warning and break our build
|
||||
- name: Install packages for lint
|
||||
run: sudo pip3 install mypy==1.18.2 pylint==3.0.2 ruff==0.1.3 clang sphinx sphinx_rtd_theme sphinxcontrib-spelling breathe ruff
|
||||
|
||||
- name: Configure
|
||||
run: autoconf && ./configure --enable-longtests --enable-ccwarn
|
||||
|
||||
- name: Lint
|
||||
run: make -k lint-py
|
||||
@@ -1,6 +1,5 @@
|
||||
---
|
||||
# DESCRIPTION: Github actions config
|
||||
# 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
|
||||
|
||||
name: reusable-rtlmeter-build
|
||||
@@ -32,6 +31,9 @@ jobs:
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
echo "path-exclude /usr/share/doc/*" | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
|
||||
echo "path-exclude /usr/share/man/*" | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
|
||||
echo "path-exclude /usr/share/info/*" | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
|
||||
sudo apt update
|
||||
sudo apt install ccache mold help2man libfl-dev libgoogle-perftools-dev libsystemc-dev
|
||||
|
||||
@@ -43,7 +45,7 @@ jobs:
|
||||
restore-keys: rtlmeter-build-ccache-${{ inputs.runs-on }}-${{ inputs.cc }}
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
path: repo
|
||||
fetch-depth: 0 # Required for 'git describe' used for 'verilator --version'
|
||||
@@ -66,7 +68,7 @@ jobs:
|
||||
run: tar --posix -c -z -f verilator-rtlmeter.tar.gz install
|
||||
|
||||
- name: Upload Verilator installation archive
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: verilator-rtlmeter.tar.gz
|
||||
name: verilator-rtlmeter-${{ inputs.runs-on }}-${{ inputs.cc }}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
---
|
||||
# DESCRIPTION: Github actions config
|
||||
# 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
|
||||
|
||||
name: reusable-rtlmeter-run
|
||||
@@ -8,6 +7,10 @@ name: reusable-rtlmeter-run
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
tag:
|
||||
description: "Unique identifier for storing results"
|
||||
type: string
|
||||
required: true
|
||||
runs-on:
|
||||
description: "Runner to use, e.g.: ubuntu-24.04"
|
||||
type: string
|
||||
@@ -16,10 +19,17 @@ on:
|
||||
description: "Compiler to use: 'gcc' or 'clang'"
|
||||
type: string
|
||||
required: true
|
||||
# Note: The combination of 'cases' and 'run-name' must be unique for all
|
||||
# invocations of this workflow within a run of the parent workflow.
|
||||
# These two are used together to generate a unique results file name.
|
||||
cases:
|
||||
description: "RTLMeter cases to run"
|
||||
type: string
|
||||
required: true
|
||||
run-name:
|
||||
description: "Run name (identifier) to add to collated results"
|
||||
type: string
|
||||
required: true
|
||||
compileArgs:
|
||||
description: "Additional Verilator command line arguments"
|
||||
type: string
|
||||
@@ -45,11 +55,14 @@ jobs:
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
echo "path-exclude /usr/share/doc/*" | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
|
||||
echo "path-exclude /usr/share/man/*" | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
|
||||
echo "path-exclude /usr/share/info/*" | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
|
||||
sudo apt update
|
||||
sudo apt install ccache mold libfl-dev libgoogle-perftools-dev libsystemc-dev
|
||||
|
||||
- name: Download Verilator installation archive
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: verilator-rtlmeter-${{ inputs.runs-on }}-${{ inputs.cc }}
|
||||
|
||||
@@ -67,7 +80,7 @@ jobs:
|
||||
restore-keys: rtlmeter-run-ccache-${{ inputs.runs-on }}-${{ inputs.cc }}-${{ inputs.cases }}-${{ inputs.compileArgs }}
|
||||
|
||||
- name: Checkout RTLMeter
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: "verilator/rtlmeter"
|
||||
path: rtlmeter
|
||||
@@ -79,24 +92,22 @@ jobs:
|
||||
- name: Compile cases
|
||||
working-directory: rtlmeter
|
||||
run: |
|
||||
./rtlmeter run --verbose --cases='${{ inputs.cases }}' --compileArgs='${{ inputs.compileArgs }}' --executeArgs='${{ inputs.executeArgs }}' --nExecute=0
|
||||
# My YAML highlighter sucks, so I put this comment here wiht a phony closing quote mark to make it work: '
|
||||
./rtlmeter run --timeout 60 --verbose --cases='${{inputs.cases}}' --compileArgs='${{inputs.compileArgs}}' --executeArgs='${{inputs.executeArgs}}' --nExecute=0
|
||||
|
||||
- name: Execute cases
|
||||
working-directory: rtlmeter
|
||||
continue-on-error: true # Do not fail on error, so we can at leat save the successful results
|
||||
continue-on-error: true # Do not fail on error, so we can at least save the successful results
|
||||
run: |
|
||||
./rtlmeter run --verbose --cases='${{ inputs.cases }}' --compileArgs='${{ inputs.compileArgs }}' --executeArgs='${{ inputs.executeArgs }}'
|
||||
# My YAML highlighter sucks, so I put this comment here wiht a phony closing quote mark to make it work: '
|
||||
./rtlmeter run --timeout 60 --verbose --cases='${{inputs.cases}}' --compileArgs='${{inputs.compileArgs}}' --executeArgs='${{inputs.executeArgs}}'
|
||||
|
||||
- name: Collate results
|
||||
id: results
|
||||
working-directory: rtlmeter
|
||||
run: |
|
||||
# 'inputs.cases' has special characters, use its md5sum as unique id
|
||||
hash=$(md5sum <<< '${{ inputs.cases }}' | awk '{print $1}')
|
||||
# Use 'inputs.cases' and 'inputs.run-name' to generate a unique file name
|
||||
hash=$(md5sum <<< '${{ inputs.cases }} ${{ inputs.run-name }}' | awk '{print $1}')
|
||||
echo "hash=${hash}" >> $GITHUB_OUTPUT
|
||||
./rtlmeter collate > ../results-${hash}.json
|
||||
./rtlmeter collate --runName "${{ inputs.run-name }}" > ../results-${hash}.json
|
||||
|
||||
- name: Report results
|
||||
working-directory: rtlmeter
|
||||
@@ -104,15 +115,14 @@ jobs:
|
||||
./rtlmeter report --steps '*' --metrics '*' ../results-${{ steps.results.outputs.hash }}.json
|
||||
|
||||
- name: Upload results
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: results-${{ steps.results.outputs.hash }}.json
|
||||
name: rtlmeter-results-${{ inputs.runs-on }}-${{ inputs.cc }}-${{ steps.results.outputs.hash }}
|
||||
name: rtlmeter-${{ inputs.tag }}-results-${{ steps.results.outputs.hash }}
|
||||
overwrite: true
|
||||
retention-days: 2
|
||||
|
||||
- name: Report status
|
||||
working-directory: rtlmeter
|
||||
run: | # This will fail the job if any of the runs failed
|
||||
./rtlmeter run --verbose --cases='${{ inputs.cases }}' --compileArgs='${{ inputs.compileArgs }}' --executeArgs='${{ inputs.executeArgs }}'
|
||||
# My YAML highlighter sucks, so I put this comment here wiht a phony closing quote mark to make it work: '
|
||||
./rtlmeter run --verbose --cases='${{inputs.cases}}' --compileArgs='${{inputs.compileArgs}}' --executeArgs='${{inputs.executeArgs}}'
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
---
|
||||
# DESCRIPTION: Github actions config
|
||||
# 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
|
||||
|
||||
name: reusable-build
|
||||
name: reusable-test
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
archive:
|
||||
description: "Name of the repository archive artifact from reusable-build"
|
||||
required: true
|
||||
type: string
|
||||
os: # e.g. ubuntu-24.04
|
||||
required: true
|
||||
type: string
|
||||
@@ -20,10 +23,12 @@ on:
|
||||
suite: # e.g. dist-vlt-0
|
||||
required: true
|
||||
type: string
|
||||
dev-gcov:
|
||||
required: true
|
||||
type: number
|
||||
|
||||
env:
|
||||
CI_OS_NAME: linux
|
||||
CI_COMMIT: ${{ github.sha }}
|
||||
CCACHE_COMPRESS: 1
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
CCACHE_LIMIT_MULTIPLE: 0.95
|
||||
@@ -39,27 +44,27 @@ jobs:
|
||||
|
||||
test:
|
||||
runs-on: ${{ inputs.os }}
|
||||
name: Sub-test | ${{ inputs.os }} | ${{ inputs.cc }} | ${{inputs.reloc && 'reloc | ' || '' }} ${{ inputs.suite }}
|
||||
name: Test
|
||||
env:
|
||||
CI_BUILD_STAGE_NAME: test
|
||||
CI_RUNS_ON: ${{ inputs.os }}
|
||||
CI_RELOC: ${{inputs.reloc }}
|
||||
CC: ${{ inputs.cc }}
|
||||
CXX: ${{ inputs.cc == 'clang' && 'clang++' || 'g++' }}
|
||||
CACHE_BASE_KEY: test-${{ inputs.os }}-${{ inputs.cc }}-${{inputs.reloc }}-${{ inputs.suite }}
|
||||
CCACHE_MAXSIZE: 100M # Per build per suite (* 5 * 5 = 2500M in total)
|
||||
VERILATOR_ARCHIVE: verilator-${{ github.sha }}-${{ inputs.os }}-${{ inputs.cc }}.tar.gz
|
||||
steps:
|
||||
|
||||
- name: Download tar archive
|
||||
uses: actions/download-artifact@v4
|
||||
- name: Download repository archive
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: ${{ env.VERILATOR_ARCHIVE }}
|
||||
name: ${{ inputs.archive }}
|
||||
path: ${{ github.workspace }}
|
||||
|
||||
- name: Unpack tar archive
|
||||
- name: Unpack repository archive
|
||||
working-directory: ${{ github.workspace }}
|
||||
run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }}
|
||||
run: |
|
||||
tar -x -z -f ${{ inputs.archive }}
|
||||
ls -lsha
|
||||
|
||||
- name: Cache $CCACHE_DIR
|
||||
uses: actions/cache@v4
|
||||
@@ -75,6 +80,26 @@ jobs:
|
||||
run: ./ci/ci-install.bash
|
||||
|
||||
- name: Test
|
||||
id: run-test
|
||||
continue-on-error: true
|
||||
env:
|
||||
TESTS: ${{ inputs.suite }}
|
||||
run: ./ci/ci-script.bash
|
||||
|
||||
- name: Combine code coverage data
|
||||
if: ${{ inputs.dev-gcov }}
|
||||
run: |
|
||||
make coverage-combine
|
||||
mv obj_coverage/verilator.info obj_coverage/verilator-${{ inputs.suite }}.info
|
||||
ls -lsha obj_coverage
|
||||
|
||||
- name: Upload code coverage data
|
||||
if: ${{ inputs.dev-gcov }}
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: ${{ github.workspace }}/repo/obj_coverage/verilator-${{ inputs.suite }}.info
|
||||
name: code-coverage-${{ inputs.suite }}
|
||||
|
||||
- name: Fail job if a test failed
|
||||
if: ${{ steps.run-test.outcome == 'failure' && !cancelled() }}
|
||||
run: exit 1
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
# DESCRIPTION: Github actions config
|
||||
# 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
|
||||
|
||||
name: RTLMeter PR results
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: [RTLMeter]
|
||||
types: [completed]
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
name: Publish
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' }}
|
||||
permissions:
|
||||
actions: read
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Download report
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: rtlmeter-pr-results
|
||||
run-id: ${{ github.event.workflow_run.id }}
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Download PR number
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: pr-number
|
||||
run-id: ${{ github.event.workflow_run.id }}
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
# Use the Verilator CI app to post the comment
|
||||
- name: Generate access token
|
||||
id: generate-token
|
||||
uses: actions/[email protected]
|
||||
with:
|
||||
app-id: ${{ vars.VERILATOR_CI_ID }}
|
||||
private-key: ${{ secrets.VERILATOR_CI_KEY }}
|
||||
permission-pull-requests: write
|
||||
- name: Comment on PR
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||
run: |-
|
||||
ls -la
|
||||
cat report.txt
|
||||
gh pr --repo ${{ github.repository }} comment $(cat pr-number.txt) --body-file report.txt
|
||||
+335
-77
@@ -9,18 +9,41 @@ on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 2 * * *' # Daily, starting at 02:00 UTC
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, labeled, unlabeled]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
concurrency:
|
||||
group: RTLMeter
|
||||
cancel-in-progress: false
|
||||
# At most 1 job per branch. Auto cancel all but scheduled jobs
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name != 'schedule' }}
|
||||
|
||||
jobs:
|
||||
start:
|
||||
name: Start
|
||||
# Only run scheduled jobs if explicitly enabled for that repo (e.g.: not on forks)
|
||||
# Only run pull request jobs if labelled as needing an RTLMeter run
|
||||
# Always run workflow dispatch jobs
|
||||
if: |
|
||||
(github.event_name == 'schedule'
|
||||
&& vars.ENABLE_SCHEDULED_JOBS == 'true') ||
|
||||
(github.event_name == 'pull_request'
|
||||
&& contains(github.event.pull_request.labels.*.name, 'pr: rtlmeter')) ||
|
||||
(github.event_name == 'workflow_dispatch')
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Startup
|
||||
run: echo
|
||||
|
||||
build-gcc:
|
||||
name: Build GCC
|
||||
needs: start
|
||||
uses: ./.github/workflows/reusable-rtlmeter-build.yml
|
||||
with:
|
||||
runs-on: ubuntu-24.04
|
||||
@@ -28,6 +51,7 @@ jobs:
|
||||
|
||||
build-clang:
|
||||
name: Build Clang
|
||||
needs: start
|
||||
uses: ./.github/workflows/reusable-rtlmeter-build.yml
|
||||
with:
|
||||
runs-on: ubuntu-24.04
|
||||
@@ -38,61 +62,26 @@ jobs:
|
||||
needs: build-gcc
|
||||
uses: ./.github/workflows/reusable-rtlmeter-run.yml
|
||||
with:
|
||||
tag: gcc
|
||||
runs-on: ubuntu-24.04
|
||||
cc: gcc
|
||||
cases: ${{ matrix.cases }}
|
||||
run-name: "gcc"
|
||||
compileArgs: ""
|
||||
executeArgs: ""
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 2
|
||||
max-parallel: ${{ github.event == 'schedule' && 2 || 7 }}
|
||||
matrix:
|
||||
cases:
|
||||
- "BlackParrot:1x1:*"
|
||||
- "BlackParrot:2x2:*"
|
||||
- "BlackParrot:4x4:*"
|
||||
- "NVDLA:*"
|
||||
- "OpenPiton:1x1:*"
|
||||
- "OpenPiton:2x2:*"
|
||||
- "OpenPiton:4x4:*"
|
||||
# - "OpenTitan:*"
|
||||
- "VeeR-EH1:asic*"
|
||||
- "VeeR-EH1:default*"
|
||||
- "VeeR-EH1:hiperf*"
|
||||
- "VeeR-EH2:asic*"
|
||||
- "VeeR-EH2:default*"
|
||||
- "VeeR-EH2:hiperf*"
|
||||
- "VeeR-EL2:asic*"
|
||||
- "VeeR-EL2:default*"
|
||||
- "VeeR-EL2:hiperf*"
|
||||
- "Vortex:mini:*"
|
||||
- "Vortex:sane:*"
|
||||
# - "XiangShan:default-chisel3:* !*:linux"
|
||||
# - "XiangShan:default-chisel6:* !*:linux"
|
||||
- "XiangShan:mini-chisel3:* !*:linux"
|
||||
# - "XiangShan:mini-chisel6:* !*:linux"
|
||||
- "XuanTie-E902:*"
|
||||
- "XuanTie-E906:*"
|
||||
- "XuanTie-C906:*"
|
||||
- "XuanTie-C910:*"
|
||||
|
||||
run-clang:
|
||||
name: Run Clang | ${{ matrix.cases }}
|
||||
needs: build-clang
|
||||
uses: ./.github/workflows/reusable-rtlmeter-run.yml
|
||||
with:
|
||||
runs-on: ubuntu-24.04
|
||||
cc: clang
|
||||
cases: ${{ matrix.cases }}
|
||||
compileArgs: "--threads 4"
|
||||
executeArgs: ""
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 2
|
||||
matrix:
|
||||
cases:
|
||||
- "NVDLA:*"
|
||||
- "OpenPiton:1x1:*"
|
||||
- "OpenPiton:2x2:*"
|
||||
- "OpenPiton:4x4:*"
|
||||
# - "OpenTitan:*"
|
||||
- "OpenTitan:*"
|
||||
- "VeeR-EH1:asic*"
|
||||
- "VeeR-EH1:default*"
|
||||
- "VeeR-EH1:hiperf*"
|
||||
@@ -113,46 +102,315 @@ jobs:
|
||||
- "XuanTie-C906:*"
|
||||
- "XuanTie-C910:*"
|
||||
|
||||
run-clang:
|
||||
name: Run Clang | ${{ matrix.cases }}
|
||||
needs: build-clang
|
||||
uses: ./.github/workflows/reusable-rtlmeter-run.yml
|
||||
with:
|
||||
tag: clang
|
||||
runs-on: ubuntu-24.04
|
||||
cc: clang
|
||||
cases: ${{ matrix.cases }}
|
||||
run-name: "clang --threads 4"
|
||||
compileArgs: "--threads 4"
|
||||
executeArgs: ""
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: ${{ github.event == 'schedule' && 2 || 7 }}
|
||||
matrix:
|
||||
cases:
|
||||
- "BlackParrot:1x1:*"
|
||||
- "BlackParrot:2x2:*"
|
||||
- "BlackParrot:4x4:*"
|
||||
- "NVDLA:*"
|
||||
- "OpenPiton:1x1:*"
|
||||
- "OpenPiton:2x2:*"
|
||||
- "OpenPiton:4x4:*"
|
||||
- "OpenTitan:*"
|
||||
- "VeeR-EH1:asic*"
|
||||
- "VeeR-EH1:default*"
|
||||
- "VeeR-EH1:hiperf*"
|
||||
- "VeeR-EH2:asic*"
|
||||
- "VeeR-EH2:default*"
|
||||
- "VeeR-EH2:hiperf*"
|
||||
- "VeeR-EL2:asic*"
|
||||
- "VeeR-EL2:default*"
|
||||
- "VeeR-EL2:hiperf*"
|
||||
- "Vortex:mini:*"
|
||||
- "Vortex:sane:*"
|
||||
- "XiangShan:default-chisel3:* !*:linux"
|
||||
- "XiangShan:default-chisel6:* !*:linux"
|
||||
- "XiangShan:mini-chisel3:* !*:linux"
|
||||
- "XiangShan:mini-chisel6:* !*:linux"
|
||||
- "XuanTie-E902:*"
|
||||
- "XuanTie-E906:*"
|
||||
- "XuanTie-C906:*"
|
||||
- "XuanTie-C910:*"
|
||||
|
||||
run-gcc-hier:
|
||||
name: Run GCC hier | ${{ matrix.cases }}
|
||||
needs: build-gcc
|
||||
uses: ./.github/workflows/reusable-rtlmeter-run.yml
|
||||
with:
|
||||
tag: gcc-hier
|
||||
runs-on: ubuntu-24.04
|
||||
cc: gcc
|
||||
cases: ${{ matrix.cases }}
|
||||
run-name: "gcc --hierarchical"
|
||||
compileArgs: "--hierarchical"
|
||||
executeArgs: ""
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: ${{ github.event == 'schedule' && 2 || 7 }}
|
||||
matrix:
|
||||
cases:
|
||||
- "BlackParrot:1x1:* !-hier"
|
||||
- "BlackParrot:2x2:* !-hier"
|
||||
- "BlackParrot:4x4:* !-hier"
|
||||
- "NVDLA:* !-hier"
|
||||
- "OpenPiton:1x1:* !-hier"
|
||||
- "OpenPiton:2x2:* !-hier"
|
||||
- "OpenPiton:4x4:* !-hier"
|
||||
- "OpenPiton:8x8:* !-hier"
|
||||
- "OpenPiton:16x16:dhry !-hier"
|
||||
- "XuanTie-C910:* !-hier"
|
||||
|
||||
combine-results:
|
||||
name: Combine results
|
||||
needs:
|
||||
- run-gcc
|
||||
- run-clang
|
||||
if: ${{ always() }} # Run even if dependencies failed
|
||||
needs: [run-gcc, run-clang, run-gcc-hier]
|
||||
# Run if any of the dependencies have run, even if failed.
|
||||
# That is: do not run if all skipped, or the workflow was cancelled.
|
||||
if: ${{ (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) && !cancelled() }}
|
||||
runs-on: ubuntu-24.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
tag: [gcc, clang, gcc-hier]
|
||||
steps:
|
||||
- name: Checkout RTLMeter
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: "verilator/rtlmeter"
|
||||
path: rtlmeter
|
||||
- name: Setup RTLMeter venv
|
||||
working-directory: rtlmeter
|
||||
run: make venv
|
||||
- name: Download all results
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
pattern: rtlmeter-${{ matrix.tag }}-results-*
|
||||
path: all-results-${{ matrix.tag }}
|
||||
merge-multiple: true
|
||||
- name: Combine results
|
||||
working-directory: rtlmeter
|
||||
run: |
|
||||
./rtlmeter collate ../all-results-${{ matrix.tag }}/*.json > ../all-results-${{ matrix.tag }}.json
|
||||
- name: Upload combined results
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: all-results-${{ matrix.tag }}.json
|
||||
name: all-results-${{ matrix.tag }}
|
||||
overwrite: true
|
||||
retention-days: 30
|
||||
|
||||
publish-scheduled-results:
|
||||
name: Publish results to verilator/verilator-rtlmeter-results
|
||||
needs: combine-results
|
||||
# Only run on scheduled builds on the main repository. We also restrict
|
||||
# the publishing to run only on the first run_attempt. This is required
|
||||
# to prevent multiple uploads the same day (if rerunning), as the
|
||||
# dashboard UI currently assumes there is only one data point per
|
||||
# calendar day. Results from reruns can be imported manually if needed.
|
||||
if: ${{ github.event_name == 'schedule' && github.repository == 'verilator/verilator' && github.run_attempt == 1 && contains(needs.*.result, 'success') && !cancelled() }}
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Download all GCC results
|
||||
uses: actions/download-artifact@v4
|
||||
- name: Download combined results
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
pattern: rtlmeter-results-ubuntu-24.04-gcc-*
|
||||
path: all-results-gcc-${{ github.run_id }}
|
||||
pattern: all-results-*
|
||||
path: results
|
||||
merge-multiple: true
|
||||
- name: Download all Clang results
|
||||
uses: actions/download-artifact@v4
|
||||
- name: Upload published results
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
pattern: rtlmeter-results-ubuntu-24.04-clang-*
|
||||
path: all-results-clang-${{ github.run_id }}
|
||||
merge-multiple: true
|
||||
- name: Tar up results
|
||||
path: results/*.json
|
||||
name: published-results
|
||||
# Pushing to verilator/verilator-rtlmeter-results requires elevated permissions
|
||||
- name: Generate access token
|
||||
id: generate-token
|
||||
uses: actions/[email protected]
|
||||
with:
|
||||
app-id: ${{ vars.VERILATOR_CI_ID }}
|
||||
private-key: ${{ secrets.VERILATOR_CI_KEY }}
|
||||
owner: verilator
|
||||
repositories: verilator-rtlmeter-results
|
||||
permission-contents: write
|
||||
- name: Checkout verilator-rtlmeter-results
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: "verilator/verilator-rtlmeter-results"
|
||||
token: ${{ steps.generate-token.outputs.token }}
|
||||
path: verilator-rtlmeter-results
|
||||
- name: Import results
|
||||
id: import-results
|
||||
working-directory: verilator-rtlmeter-results
|
||||
run: |
|
||||
# Ensure combined result directories exists in case of no results
|
||||
mkdir -p all-results-gcc-${{ github.run_id }}
|
||||
mkdir -p all-results-clang-${{ github.run_id }}
|
||||
ls -la all-results*
|
||||
# Tar up each directory
|
||||
tar --posix -c -z -f all-results-gcc-${{ github.run_id }}.tar.gz all-results-gcc-${{ github.run_id }}
|
||||
tar --posix -c -z -f all-results-clang-${{ github.run_id }}.tar.gz all-results-clang-${{ github.run_id }}
|
||||
- name: Upload combined GCC results
|
||||
uses: actions/upload-artifact@v4
|
||||
for f in $(find ../results -name "*.json"); do \
|
||||
echo "Importing $f"; \
|
||||
./bin/add-rtlmeter-result $f; \
|
||||
done
|
||||
test -z "$(git status --porcelain)" || echo "valid=1" >> "$GITHUB_OUTPUT"
|
||||
- name: Push to verilator-rtlmeter-results
|
||||
if: ${{ steps.import-results.outputs.valid }}
|
||||
working-directory: verilator-rtlmeter-results
|
||||
run: |
|
||||
git config --global user.email "[email protected]"
|
||||
git config --global user.name "github action"
|
||||
git add .
|
||||
git commit -m "Verilator CI: Results of 'RTLMeter' workflow run #${{ github.run_number }}"
|
||||
git push origin
|
||||
|
||||
prepare-pr-results:
|
||||
name: Prepare Pull Request results
|
||||
needs: combine-results
|
||||
if: ${{ github.event_name == 'pull_request' && github.repository == 'verilator/verilator' && contains(needs.*.result, 'success') && !cancelled() }}
|
||||
runs-on: ubuntu-24.04
|
||||
permissions:
|
||||
actions: read
|
||||
steps:
|
||||
- name: Checkout RTLMeter
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
path: all-results-gcc-${{ github.run_id }}.tar.gz
|
||||
name: "all-results-gcc"
|
||||
overwrite: true
|
||||
retention-days: 30
|
||||
- name: Upload combined Clang results
|
||||
uses: actions/upload-artifact@v4
|
||||
repository: "verilator/rtlmeter"
|
||||
path: rtlmeter
|
||||
- name: Setup RTLMeter venv
|
||||
working-directory: rtlmeter
|
||||
run: make venv
|
||||
- name: Download combined results
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
path: all-results-clang-${{ github.run_id }}.tar.gz
|
||||
name: "all-results-clang"
|
||||
overwrite: true
|
||||
retention-days: 30
|
||||
pattern: all-results-*
|
||||
path: all-results
|
||||
merge-multiple: true
|
||||
- name: Get scheduled run info
|
||||
id: scheduled-info
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
ID=$(gh run --repo ${{ github.repository }} list --workflow RTLMeter --event schedule --status success --limit 1 --json databaseId --jq ".[0].databaseId")
|
||||
echo "id=$ID" >> $GITHUB_OUTPUT
|
||||
URL=$(gh run --repo ${{ github.repository }} view $ID --json url --jq ".url")
|
||||
echo "url=$URL" >> $GITHUB_OUTPUT
|
||||
NUM=$(gh run --repo ${{ github.repository }} view $ID --json number --jq ".number")
|
||||
echo "num=$NUM" >> $GITHUB_OUTPUT
|
||||
DATE=$(gh run --repo ${{ github.repository }} view $ID --json createdAt --jq ".createdAt")
|
||||
echo "date=$DATE" >> $GITHUB_OUTPUT
|
||||
- name: Download scheduled run results
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: published-results
|
||||
path: nightly-results
|
||||
run-id: ${{ steps.scheduled-info.outputs.id }}
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Compare results
|
||||
working-directory: rtlmeter
|
||||
run: |
|
||||
for tag in gcc clang gcc-hier; do
|
||||
ADATA=../nightly-results/all-results-${tag}.json
|
||||
BDATA=../all-results/all-results-${tag}.json
|
||||
touch ../verilate-${tag}.txt
|
||||
touch ../execute-${tag}.txt
|
||||
touch ../cppbuild-${tag}.txt
|
||||
if [[ ! -e $ADATA ]]; then
|
||||
continue
|
||||
fi
|
||||
./rtlmeter compare --cases '* !Example:* !*:hello' --steps "verilate" --metrics "elapsed memory" $ADATA $BDATA > ../verilate-${tag}.txt
|
||||
cat ../verilate-${tag}.txt
|
||||
./rtlmeter compare --cases '* !Example:* !*:hello' --steps "execute" --metrics "speed memory elapsed" $ADATA $BDATA > ../execute-${tag}.txt
|
||||
cat ../execute-${tag}.txt
|
||||
./rtlmeter compare --cases '* !Example:* !*:hello' --steps "cppbuild" --metrics "elapsed memory cpu codeSize" $ADATA $BDATA > ../cppbuild-${tag}.txt
|
||||
cat ../cppbuild-${tag}.txt
|
||||
done
|
||||
- name: Create report
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
set -x
|
||||
NUM=$(gh run --repo ${{ github.repository }} view ${{ github.run_id }} --json number --jq ".number")
|
||||
URL=$(gh run --repo ${{ github.repository }} view ${{ github.run_id }} --json url --jq ".url")
|
||||
echo -n "Performance metrics for PR workflow [#$NUM]($URL) (B) compared to scheduled run" > report.txt
|
||||
echo -n " [#${{ steps.scheduled-info.outputs.num }}](${{ steps.scheduled-info.outputs.url }}) (A)" >> report.txt
|
||||
echo " from ${{ steps.scheduled-info.outputs.date }}" >> report.txt
|
||||
for tag in gcc clang gcc-hier; do
|
||||
echo "" >> report.txt
|
||||
if [[ $tag == "gcc" ]]; then
|
||||
echo "<details open>" >> report.txt
|
||||
else
|
||||
echo "<details>" >> report.txt
|
||||
fi
|
||||
echo -n "<summary><strong><em>" >> report.txt
|
||||
jq -rj ".[0].runName" all-results/all-results-${tag}.json >> report.txt
|
||||
echo "</em></strong></summary>" >> report.txt
|
||||
awk -v RS= -v tag=${tag} '{print > sprintf("frag-%02d-verilate-%s.txt",NR,tag)}' verilate-${tag}.txt
|
||||
awk -v RS= -v tag=${tag} '{print > sprintf("frag-%02d-execute-%s.txt" ,NR,tag)}' execute-${tag}.txt
|
||||
awk -v RS= -v tag=${tag} '{print > sprintf("frag-$02d-cppbuild-%s.txt",NR,tag)}' cppbuild-${tag}.txt
|
||||
for f in $(ls -1 frag-*-verilate-${tag}.txt | sort) $(ls -1 frag-*-execute-${tag}.txt | sort) $(ls -1 frag-*-cppbuild-${tag}.txt | sort); do
|
||||
if [[ $f == frag-01-verilate-${tag}.txt || $f == frag-01-execute-${tag}.txt ]]; then
|
||||
echo "<details open>" >> report.txt
|
||||
else
|
||||
echo "<details>" >> report.txt
|
||||
fi
|
||||
echo -n "<summary>" >> report.txt
|
||||
head -n 1 $f | tr -d '\n' >> report.txt
|
||||
echo "</summary>" >> report.txt
|
||||
echo '<pre>' >> report.txt
|
||||
tail -n +2 $f >> report.txt
|
||||
echo '</pre>' >> report.txt
|
||||
echo "</details>" >> report.txt
|
||||
done
|
||||
echo "</details>" >> report.txt
|
||||
done
|
||||
cat report.txt
|
||||
- name: Upload report
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: report.txt
|
||||
name: rtlmeter-pr-results
|
||||
- name: Save PR number
|
||||
run: echo ${{ github.event.number }} > pr-number.txt
|
||||
- name: Upload PR number
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
path: pr-number.txt
|
||||
name: pr-number
|
||||
|
||||
# Create GitHub issue for failed scheduled jobs
|
||||
# This should always be the last job (we want an issue if anything breaks)
|
||||
create-issue:
|
||||
name: Create issue on failure
|
||||
needs: publish-scheduled-results
|
||||
if: ${{ github.event_name == 'schedule' && github.repository == 'verilator/verilator' && github.run_attempt == 1 && failure() && !cancelled() }}
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
# Creating issues requires elevated privilege
|
||||
- name: Generate access token
|
||||
id: generate-token
|
||||
uses: actions/[email protected]
|
||||
with:
|
||||
app-id: ${{ vars.VERILATOR_CI_ID }}
|
||||
private-key: ${{ secrets.VERILATOR_CI_KEY }}
|
||||
owner: verilator
|
||||
repositories: verilator
|
||||
permission-issues: write
|
||||
- name: Create issue
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||
run: |-
|
||||
echo "This issue was created automatically by the GitHub Actions CI due to the failure of a scheduled RTLMeter run." >> body.txt
|
||||
echo "" >> body.txt
|
||||
echo "Workflow status: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> body.txt
|
||||
gh issue --repo ${{ github.repository }} create \
|
||||
--title "RTLMeter run #${{ github.run_number }} Failed" \
|
||||
--body-file body.txt \
|
||||
--label new \
|
||||
--assignee gezalore,wsnyder
|
||||
|
||||
@@ -44,6 +44,7 @@ verilator_coverage_bin*
|
||||
/.vscode/
|
||||
/.idea/
|
||||
/cmake-build-*/
|
||||
/obj_coverage/
|
||||
/test_regress/snapshot/
|
||||
xmverilog.*
|
||||
xrun.history
|
||||
|
||||
+7
-2
@@ -16,7 +16,7 @@ cmake_minimum_required(VERSION 3.15)
|
||||
cmake_policy(SET CMP0091 NEW) # Use MSVC_RUNTIME_LIBRARY to select the runtime
|
||||
project(
|
||||
Verilator
|
||||
VERSION 5.036
|
||||
VERSION 5.042
|
||||
HOMEPAGE_URL https://verilator.org
|
||||
LANGUAGES CXX
|
||||
)
|
||||
@@ -49,8 +49,13 @@ if(WIN32)
|
||||
if(DEFINED ENV{WIN_FLEX_BISON})
|
||||
set(WIN_FLEX_BISON "$ENV{WIN_FLEX_BISON}")
|
||||
endif()
|
||||
if(EXISTS ${WIN_FLEX_BISON})
|
||||
if(IS_DIRECTORY ${WIN_FLEX_BISON})
|
||||
list(APPEND CMAKE_PREFIX_PATH ${WIN_FLEX_BISON})
|
||||
else()
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"The path specified by WIN_FLEX_BISON environment variable is not an existing folder: ${WIN_FLEX_BISON}"
|
||||
)
|
||||
endif()
|
||||
if(NOT WIN_FLEX_BISON)
|
||||
message(
|
||||
|
||||
@@ -5,7 +5,331 @@ Revision History and Change Log
|
||||
===============================
|
||||
|
||||
The changes in each Verilator version are described below. The
|
||||
contributors that suggested a given feature are shown in []. Thanks!
|
||||
contributors that suggested or implemented a given issue are shown in []. Thanks!
|
||||
|
||||
|
||||
Verilator 5.042 2025-11-02
|
||||
==========================
|
||||
|
||||
**Other:**
|
||||
|
||||
* Add HIERPARAM error on hierarchical parameter values (#1626) (#6456) (#6484) (#6587) (#6609) (#6621) (#6623). [Todd Strader] [Luca Rufer] [Paul Swirhun]
|
||||
* Add error on zero/negative unpacked dimensions (#1642). [Stefan Wallentowitz]
|
||||
* Add verilator_gantt profiling of DPI imports (#3084). [Geza Lore]
|
||||
* Add ASSIGNEQEXPR when use `=` inside expressions (#5567). [Ethan Sifferman]
|
||||
* Add error on non-packed struct randc (#5999). [Seth Pellegrino]
|
||||
* Add configure `--enable-dev-asan` to compile verilator_bin with the address sanitizer (#6404). [Geza Lore]
|
||||
* Add $(LDFLAGS) and $(LIBS) to when building shared libraries (#6425) (#6426). [Ahmed El-Mahmoudy]
|
||||
* Add IMPLICITSTATIC also on procedure variables.
|
||||
* Add FUNCTIMCTL error on function invoking task or time-controlling statements (#6385).
|
||||
* Add error on `virtual new` (#6486). [Alex Solomatnikov]
|
||||
* Add error on ranges with tristate values (#6534). [Alex Solomatnikov]
|
||||
* Add NORETURN warning on functions without return values (#6534). [Alex Solomatnikov]
|
||||
* Add `--aslr` and `--no-aslr` options.
|
||||
* Add `$cpure` (#6580). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Add `--preproc-defines`.
|
||||
* Deprecate sensitivity list on public_flat_rw attributes (#6443). [Geza Lore]
|
||||
* Deprecate clocker attribute and --clk option (#6463). [Geza Lore]
|
||||
* Deprecate '--make cmake' option (#6540). [Geza Lore]
|
||||
* Change default `--expand-limit` to 256 (#3419).
|
||||
* Change developer coverage flow and add configure `--enable-dev-gcov` (#6526). [Geza Lore]
|
||||
* Change `verilator_difftree` to return exit code 1 on mismatch, 2 on error.
|
||||
* Change default thread pool sizes to respect processor affinity (#6604). [Geza Lore]
|
||||
* Change `--preproc-comments` to be new name of `--pp-comments` option.
|
||||
* Support modports referencing clocking blocks (#4555) (#6436). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Support class package reference on pattern keys (#5653). [Todd Strader]
|
||||
* Support digits in `$sscanf` field width formats (#6083). [Iztok Jeras]
|
||||
* Support pure functions in sensitivity lists (#6393). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||
* Support simple alias statements (#6339) (#6501). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Support simple cycle delay sequence expressions inside properties (#6508). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Support impure expressions in `inside` (#6562). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Support `case` impure expressions (#6563). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Support dotted access to ports of a direct hier_block instance. (#6595). [Geza Lore]
|
||||
* Improve `lint_off` to allow multiple messages and comments (#2755).
|
||||
* Improve automatic selection of logic for DFG synthesis (#6370). [Geza Lore]
|
||||
* Improve `covergroup with function sample` handling (#6387). [Jakub Wasilewski]
|
||||
* Improve DFG type system (#6390). [Geza Lore]
|
||||
* Improve DFG variable removal and temporary insertion (#6401). [Geza Lore]
|
||||
* Improve memory usage of statistics (#6513). [Geza Lore]
|
||||
* Improve conditional merging to preserve branch prediction. [Geza Lore]
|
||||
* Optimize duplicate 'if' and '?:' conditions (#3807) (#6495)
|
||||
* Optimize dead functions in more cases (#6380) (#6430). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Optimize constant folding in wide expression expansion (#6381). [Geza Lore]
|
||||
* Fix `--trace-max-width` and increase to 4096. (#2385).
|
||||
* Fix missing BLKSEQ when connecting module port to array (#2973).
|
||||
* Fix LATCH warning with CASEINCOMPLETE (#3301).
|
||||
* Fix unused parameterized class causing internal error (#4013). [Alberto Del Rio]
|
||||
* Fix false CONSTVAR error on initializers (#4992).
|
||||
* Fix hierarchical references with parameterized modules and interfaces (#5649) (#6566). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Fix interface exposure with `--public-depth` or `--trace-depth` (#5758).
|
||||
* Fix cell scoping performance (#6059). [Jerry Tianchen]
|
||||
* Fix hierarchical `--prof-pgo` (#6213). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Fix while loop hang on timing-delayed assignment (#6343) (#6354). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||
* Fix driver analysis of partially assigned variables (#6364) (#6378). [Geza Lore]
|
||||
* Fix V3Hash MacOS ambiguity (#6350). [Lan Zongwei]
|
||||
* Fix cmake APPLE variable (#6351). [Lan Zongwei]
|
||||
* Fix randomize local after parameters applied (#6371). [Alex Solomatnikov]
|
||||
* Fix package imports not found after parameters applied (#6373). [Alex Solomatnikov]
|
||||
* Fix deep shift pattern performance (#6379) (#6420). [Geza Lore]
|
||||
* Fix COVERAGEIGN-ignored `get_inst_coverage` and other covergroup methods (#6383). [Alex Solomatnikov]
|
||||
* Fix error when modport variable is unresolved (#6386). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Fix resolving parameters (#6388) (#6418) (#6421) (#6438) (#6429). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix wire array with initial assignment (#6391). [Alex Solomatnikov]
|
||||
* Fix import of class with default params (#6396) (#6410) (#6413). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||
* Fix use after free in elaboration (#6403). [Geza Lore]
|
||||
* Fix address sanitizer issues (#6406). [Geza Lore]
|
||||
* Fix timing control under fork under function (#6407). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||
* Fix memory leaks and reduce requirements (#6411) (#6417) (#6419) (#6437) (#6439) (#6517). [Geza Lore]
|
||||
* Fix parameter implicit type from string (#6414). [Alex Solomatnikov]
|
||||
* Fix parsing for sequence expressions (#6427). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Fix parameterized class super functions (#6431) (#6438). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix external function declarations with class typedef references (#6433).
|
||||
* Fix internal error on out-of-bounds real array access.
|
||||
* Fix pre/post increments in assertions (#6434).
|
||||
* Fix elaboration displays with `%m` and some `%p` (#6445) (#6451). [Alex Solomatnikov]
|
||||
* Fix cast in gdbinit.py (#6447). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix false unique assertions on `else ;` (#6450). [Don Owen]
|
||||
* Fix loss of clock attribute in DFG variable removal (#6453). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Fix data types of method calls without parenthesis (#6457). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix segfault on unsupported PLI calls (#6458). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||
* Fix false assertion failure on failed DFG driver tracing (#6459). [Geza Lore]
|
||||
* Fix side effects when using select (#6460). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix timeprecision backward assignment (#6469). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix splitting hierarchically referenced variables (#6475). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Fix Windows compilation of Verilator with spaces in the path (#6477). [Fabian Keßler-Schulz]
|
||||
* Fix PROTOTYPEMIS error on implicit logic (#6482). [Alex Solomatnikov]
|
||||
* Fix configure misdetecting C++14 (#6488) (#6515). [Thomas O'Keeffe]
|
||||
* Fix false BLKSEQ on non-edged sensitivity list (#6492). [Oron Port]
|
||||
* Fix .vlt public_flat* and others to support long identifier names (#6516). [Szymon Gizler, Antmicro Ltd.]
|
||||
* Fix always_ff on constants (#6519). [Todd Strader]
|
||||
* Fix fault on operations on uninitialized strings (#6520). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix find_index methods of associative arrays (#6525). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Fix parsing of `eventually[]` and property expression memory leaks (#6530). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Fix memory leak for unsupported `$past` (#6535). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Fix inconsistent force assignment (#6541). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix DFG circular driver tracing with partial assignments. [Geza Lore]
|
||||
* Fix passing typedef value as parameter (#6543) (#6547). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix indent error on quoted strings (#6544).
|
||||
* Fix incorrect nested interface-class error (#6549). [Matthew Ballance]
|
||||
* Fix std::process::get_randstate to not affect random stability (#6550) (#6565). [Aleksander Kiryk]
|
||||
* Fix exit code signal number reporting (#6554). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix `$finish` inside fork blocks (#6555). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Fix single element unpacked array DPI parameters. [Geza Lore]
|
||||
* Fix DFG synthesis non-determinism (#6557) (#6568). [Todd Strader]
|
||||
* Fix side effects for improved function/task/process purity (#6559). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix excessive logic replication in DFG circular driver tracing (#6561) (#6594). [Geza Lore]
|
||||
* Fix hierarchical with parameterized instances under hier block (#6572). [Geza Lore]
|
||||
* Fix segfault on type casts (#6574). [David Moberg]
|
||||
* Fix references to interfaces containing generate blocks (#6579). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Fix missing net type mappings in FST traces (#6582) (#6583). [Matt Stroud]
|
||||
* Fix function call expression coverage (#6589). [Todd Strader]
|
||||
* Fix V3Life eliminating assignments across timing controls (#6593) (#6596). [Geza Lore]
|
||||
* Fix incorrectly resuming process waiting on multiple events (#6597). [Geza Lore]
|
||||
* Fix `--hierarchical` with `--binary` (#6602). [Geza Lore]
|
||||
* Fix mis-ignoring virtual interface member triggers (#5116 reopened) (#6613). [Geza Lore]
|
||||
* Fix ENUMVALUE warning when overriding parameter using `-G/-pvalue` options. [Geza Lore]
|
||||
* Fix `-G` and `-pvalue` with `--hierarchical`. [Geza Lore]
|
||||
* Fix waiving messages with empty contents (#6610). [Yoshitomo KANEDA]
|
||||
* Fix constant-arrayed instance parameters (#6614). [Alex Solomatnikov]
|
||||
|
||||
|
||||
Verilator 5.040 2025-08-30
|
||||
==========================
|
||||
|
||||
**Other:**
|
||||
|
||||
* Add ENUMITEMWIDTH error, and apply to X-extended and ranged values.
|
||||
* Add NOEFFECT warning, replacing previous `foreach` error.
|
||||
* Add SPECIFYIGN warning for specify constructs that were previously silently ignored.
|
||||
* Add PARAMNODEFAULT error, for parameters without defaults.
|
||||
* Add enum base data type, wire data type, and I/O versus data declaration checking per IEEE.
|
||||
* Add PROTOTYPEMIS error on missing and mismatching prototypes (#6206) (#6207). [Alex Solomatnikov]
|
||||
* Add error when trying to assign class object to variable of non-class types (#6237). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Add ALWNEVER warning, for `always @*` that never execute (#6291).
|
||||
* Add separate coverage counters for toggles 0->1 and 1->0 (#6086). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Add error on class 'function static'.
|
||||
* Add error on force/release non-constant selects.
|
||||
* Add `-DVERILATOR=1` definition to compiler flags when using verilated.mk.
|
||||
* Support member-level triggers for virtual interfaces (#5166) (#6148). [Yilou Wang]
|
||||
* Support unassigned virtual interfaces (#5265) (#6245). [Szymon Gizler, Antmicro Ltd.]
|
||||
* Support randomization of scope variables with 'std::randomize()' (#5438) (#6185). [Yilou Wang]
|
||||
* Support disabling a fork in additional contexts (#5432 partial) (#6174) (#6183). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Support bit queue streaming (#5830) (#6103). [Paul Swirhun]
|
||||
* Support `$fread` with missing start (#6125). [Iztok Jeras]
|
||||
* Support unpacked array `with` methods (#6134).
|
||||
* Support Verilog real ports as SystemC double ports (#6136) (#6158). [George Polack]
|
||||
* Support `$countones` in constraints (#6144 partial) (#6235). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Support disable dotted references (#6154). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Support randomize() on class member selects (#6161) (#6195). [Igor Zaworski, Ryszard Rozak, Antmicro Ltd.]
|
||||
* Support multiple variables on RHS of a `force` assignment (#6163). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Support covergroup extends, etc., as unsupported (#6160). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Support parameter resolution of 1D unpacked array slices (#6257) (#6268). [Michael Bedford Taylor]
|
||||
* Support generic interfaces (#6272). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Support disabling a fork from within that fork (#6314). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Support future sampled value functions.
|
||||
* Support simple disable within task (#6334). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Support recursive constant functions.
|
||||
* Change control file `public_flat_*` and other signal attributes to support __ in names (#6140).
|
||||
* Change runtime to exit() instead of abort(), unless under +verilated+debug.
|
||||
* Change `$display("%p")` to remove space after `}`.
|
||||
* Improve `--skip-identical` to skip on identical input file contents (#6109).
|
||||
* Improve testing on FreeBSD (#6328). [Aleksander Kiryk]
|
||||
* Optimize to return memory when using -build (#6192) (#6226). [Michael B. Taylor]
|
||||
* Optimize 2 ** X to 1 << X if base is signed (#6203). [Max Wipfli]
|
||||
* Optimize more complex combinational logic in DFG (#6205) (#6209) (#6298). [Geza Lore]
|
||||
* Optimize combinational cycles through arrays in DFG (#6210). [Geza Lore]
|
||||
* Optimize variable removal in scoped DFG (#6260). [Geza Lore]
|
||||
* Optimize acyclic DFG components into the original acyclic sub-graph. (#6261). [Geza Lore]
|
||||
* Optimize multiplexers in DFG synthesis (#6331). [Geza Lore]
|
||||
* Optimize interfaces in DFG (#6332). [Geza Lore]
|
||||
* Optimize logic in non-virtual interfaces with DFG (#6347). [Geza Lore]
|
||||
* Fix loop initialization visibility outside loop (#4237).
|
||||
* Fix constructor parameters in inheritance hierarchies (#6036) (#6070). [Petr Nohavica]
|
||||
* Fix replicate of negative giving 'REPLICATE has no expected width' internal error (#6048) (#6229).
|
||||
* Fix cmake `-Wno` compiler flag testing (#6145). [Martin Stadler]
|
||||
* Fix class extends dotted error (#6162). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix genvar error with `-O0` (#6165). [Max Wipfli]
|
||||
* Fix uninitialized thread PGO counters (#6167). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Fix additional UNOPTFLAT combinational cycles automatically in DFG (#6168) (#6173) (#6176). [Geza Lore]
|
||||
* Fix omitting error when assigning to an input (#6169). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix parameter-dependent type linking (#6170). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix param-dependent class typedef linking (#6171). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix virtual interface member propagation (#6175) (#6184). [Yilou Wang]
|
||||
* Fix `--coverage-expr` null pointer dereference (#6181). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix conflicting function/class name linking error (#6182). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix negate of wide structure selections (#6186).
|
||||
* Fix VPI signal range order (#6189) (#6200). [Ibrahim Burak Yorulmaz]
|
||||
* Fix structure select causing 'Wide Op' error (#6191). [Danny Oler]
|
||||
* Fix automatic task variables in unrolled loops with forks (#6194) (#6201). [Danny Oler]
|
||||
* Fix 'driver same component' assertion (#6211) (#6215). [Geza Lore]
|
||||
* Fix `--stats` overridden by skipping identical build (#6220). [Geza Lore]
|
||||
* Fix MODDUP with duplicate packages to take first package (#6222).
|
||||
* Fix replicate with unsigned count but MSB set (#6231) (#6233). [Geza Lore]
|
||||
* Fix randomize on function-local variable (#6234).
|
||||
* Fix queue typedef with unbounded slice (#6236).
|
||||
* Fix error when force assignment is used with ref function args (#6244). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Fix write of 0 in '%c' (#6248) (#6249). [Rodrigo Batista de Moraes]
|
||||
* Fix coverage of variables of complex types (#6250). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Fix broken support of unassigned virtual interfaces (#6253) (#6338). [Szymon Gizler, Antmicro Ltd.]
|
||||
* Fix partial DFG conversion of concat assignments (#6255). [Geza Lore]
|
||||
* Fix dynamic cast purity (#6267). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix same variable on the RHS forced to two different LHSs. (#6269). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix spurious VPI value change callbacks (#6274). [Todd Strader]
|
||||
* Fix stray ']' in Verilog code output for non-constant select (#6277). [Geza Lore]
|
||||
* Fix hierarchical NBAs (#6286) (#6300). [Geza Lore]
|
||||
* Fix variables hiding package imports (#6289). [Johan Wouters]
|
||||
* Fix DFG circular driver tracing. [Geza Lore]
|
||||
* Fix no matching function calls for randomized `VlWide` in unpacked and dynamic arrays (#6290). [Mateusz Gancarz, Antmicro Ltd.]
|
||||
* Fix PowerPC support (#6292). [Sergey Fedorov]
|
||||
* Fix referencing module variables above classes (#6304). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix direct NBA to dynamically-sized variable (#6310). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix static vars under member select (#6313). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix expression type comparison (#6316). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix of inline constraints with member selects (#6321). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix corner case bugs in module and variable inlining (#6322). [Geza Lore]
|
||||
* Fix queue extend to check bounds (#6324). [Aleksander Kiryk]
|
||||
* Fix gathering sensitivities from virtual interface members (#6325). [Aleksander Kiryk]
|
||||
* Fix FreeBSD missing headers (#6326). [Aleksander Kiryk]
|
||||
* Fix to select UDPs when they are the only candidate for a top module.
|
||||
* Fix splitting of assignments to SC variables (#6329) (#6336). [Geza Lore]
|
||||
* Fix to localize for super constructors with function calls as arguments (#6330). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix wide select expansion and substitution (#6341) (#6345). [Geza Lore]
|
||||
* Fix upcasting class type parameters (#6344). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||
* Fix undefined weak link for Apple GCC etc (#6348). [Congcong Cai]
|
||||
|
||||
|
||||
Verilator 5.038 2025-07-08
|
||||
==========================
|
||||
|
||||
**Important:**
|
||||
|
||||
* Change `--assert` to be the default; use `--no-assert` for legacy behavior and faster runtimes.
|
||||
|
||||
**Other:**
|
||||
|
||||
* Support redeclaring type as non-type; major parsing change (#2412) (#6020) (#6042) (#6044).
|
||||
* Support scoped `new` (#4199).
|
||||
* Support elaboration-time printing of unpacked array with `%p` (#4732).
|
||||
* Support constrained random for associative arrays (#5985) (#5986). [Yilou Wang]
|
||||
* Support assignments to concatenations with impure RHS (#6002). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Support SARIF JSON diagnostic output with `--diagnostics-sarif`. (#6017)
|
||||
* Support 1-bit params with -G and -pvalue (#6051) (#6082). [Paul Swirhun]
|
||||
* Support `specparam` (#5767) (#6142).
|
||||
* Support `$timeformat` with missing arguments (#6113). [Alex Solomatnikov]
|
||||
* Support non-overlapping blocking/non-blocking assignments (#6137). [Geza Lore]
|
||||
* Support parameter forward types.
|
||||
* Support constant functions with left-hand-side concatenates.
|
||||
* Add PROCINITASSIGN on initial assignments to process variables (#2481). [Niraj Menon]
|
||||
* Add BADVLTPRAGMA on unknown Verilator pragmas (#5945). [Shou-Li Hsu]
|
||||
* Add ternary operator into branch coverage (#5880). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Add aggregate type error checks (#5570) (#5950). [Shou-Li Hsu]
|
||||
* Add `--work` library-selection option (#5891 partial).
|
||||
* Add `--filter-type` to verilator_coverage (#6030). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Add `--hierarchical-threads` (#6037). [Bartłomiej Chmiel]
|
||||
* Add `MODMISSING` error, in place of unnamed error (#6054). [Paul Swirhun]
|
||||
* Add DFG binToOneHot pass to generate one-hot decoders (#6096). [Geza Lore]
|
||||
* Add hint of the signed right-hand-side in oversized replication error (#6098). [Peter Birch]
|
||||
* Improve hierarchical scheduling visualization in V3ExecGraph (#6009). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Improve DPI temporary 'for' loop performance (#6079). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Improve memory usage for SenTrees in V3OrderProcessDomains (#6112). [Geza Lore]
|
||||
* Improve docker image size (#6139). [Tobias Rosenkranz, bitaggregat GmbH]
|
||||
* Update docker base image to Ubuntu 24.04 (#6147). [Tobias Rosenkranz, bitaggregat GmbH]
|
||||
* Optimize DFG De Morgan patterns (#6090). [Geza Lore]
|
||||
* Optimize DFG variable elimination (#6091). [Geza Lore]
|
||||
* Optimize DFG PUSH_SEL_THROUGH_CONCAT pattern (#6092). [Geza Lore]
|
||||
* Optimize DFG before V3Gate (#6141). [Geza Lore]
|
||||
* Optimize DFG peephole patterns (#6149). [Geza Lore]
|
||||
* Optimize constification within Expand and Subst stages (#6111). [Geza Lore]
|
||||
* Fix --x-initial and --x-assign random stability (#2662) (#5958) (#6018) (#6025) (#6075). [Todd Strader]
|
||||
* Fix trace hierarchical-name runtime errors (#5668) (#6076). [Paul Swirhun]
|
||||
* Fix streaming operator packing order (#5903) (#6077). [Paul Swirhun]
|
||||
* Fix filename backslash escapes in C code (#5947).
|
||||
* Fix C++ widths in V3Expand (#5953) (#5975). [Geza Lore]
|
||||
* Fix dependencies from different hierarchical schedules (#5954). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Fix constant propagation of post-expand stages (#5955) (#5963) (#5969) (#5972) (#5983).
|
||||
* Fix sign extension of signed compared with unsigned case items (#5968).
|
||||
* Fix always processes ignoring $finish (#5971). [Hennadii Chernyshchyk]
|
||||
* Fix method calls and new to access interface arrays (#5973). [Nick Brereton]
|
||||
* Fix streaming to/from packed arrays (#5976). [Geza Lore]
|
||||
* Fix segfault writing timestamp to VCD after buffer flush (#5978) (#5980). [Dominick Grochowina]
|
||||
* Fix inconsistent assignment error with split-var (#5984) (#5988). [Yutetsu TAKATSUKASA]
|
||||
* Fix AstAssignW conversion (#5991) (#5992). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Fix const-bit-op-tree with single-bit masks (#5993) (#5998). [Yutetsu TAKATSUKASA]
|
||||
* Fix arithmetic right-shift by constants over 32 bits (#5994). [Zhen Yan]
|
||||
* Fix array bounds checking with class member selects (#5996) (#5997). [Krzysztof Starecki]
|
||||
* Fix checking for too-wide divide and modulus (#6003) (#6006). [Zhen Yan]
|
||||
* Fix folding of LteS in DfgPeephole (#6000) (#6004). [Geza Lore]
|
||||
* Fix slicing of AstExprStmt nodes (#6005). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Fix skipped generate blocks in toggle coverage (#6010). [Ryszard Rozak, Antmicro Ltd.]
|
||||
* Fix arithmetic left-shift by constants over 32 bits (#6007) (#6015). [Zhen Yan]
|
||||
* Fix concatenation and type casting (#6012) (#6013). [Todd Strader]
|
||||
* Fix wrong optimization result of shifted out variable (#6016) (#6019). [Yutetsu TAKATSUKASA]
|
||||
* Fix missing FreeBSD include (#6027) (#6028). [Joel Bodenmann]
|
||||
* Fix associative arrays with enum keys (#6034) (#6035). [Petr Nohavica]
|
||||
* Fix GCC 10 read-only linker error (#6040). [Todd Strader]
|
||||
* Fix WIDTHCONCAT on packed pattern assignment (#6045). [Dan Petrisko]
|
||||
* Fix type operator for interface signals (#6049) (#6050). [Todd Strader]
|
||||
* Fix V3OrderParallel scoring contraction hang (#6052). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Fix virtual interface array typedef expressions (#6057).
|
||||
* Fix DFG peephole select conditionals (#6064) (#6071). [Geza Lore]
|
||||
* Fix `--skip-identical` skipping on some errors (#6066). [Todd Strader]
|
||||
* Fix class typedef elaboration (#6080). [Kamil Rakoczy, Antmicro Ltd.]
|
||||
* Fix unpacked to packed parameter assignment (#6081) (#6088). [Todd Strader]
|
||||
* Fix casting reals to large integrals (#6085). [Todd Strader]
|
||||
* Fix nested hier blocks workers error (#6087). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||
* Fix `--lib-create` with double-underscore (#6099).
|
||||
* Fix DFG binToOneHot table index missing driver (#6100). [Geza Lore]
|
||||
* Fix decoding octal string escapes with 1-2 digits (#6108).
|
||||
* Fix colon-divide operator without space (#6121). [Alex Solomatnikov]
|
||||
* Fix variables declared in fork after taskify (#6126). [Kamil Rakoczy, Antmicro Ltd.]
|
||||
* Fix method calls without parenthesis (#6127). [Alex Solomatnikov]
|
||||
* Fix `pre_randomize`/`post_randomize` when no randomize (#6128). [Alex Solomatnikov]
|
||||
* Fix wide non-blocking assignment mis-optimization (#6150) (#6152) (#6155). [Todd Strader]
|
||||
* Fix interface array connections with non-zero low declaration index.
|
||||
* Fix developer build error on MacOS/Flex2.6.4 (#6153). [Paul Swirhun]
|
||||
* Fix crash with --dumpi-V3LinkDot without --debug (#6159). [Igor Zaworski, Antmicro Ltd.]
|
||||
* Fix dereferencing stale iterator in DfgVertex::scopep() (#6225) (#6227). [Geza Lore]
|
||||
* Fix component numbers of new Vertices in V3DfgBreakCycles (#6225) (#6228). [Geza Lore]
|
||||
|
||||
|
||||
Verilator 5.036 2025-04-27
|
||||
@@ -16,7 +340,7 @@ Verilator 5.036 2025-04-27
|
||||
* Change `--output-groups` to default to value of `--build-jobs` (#5751).
|
||||
Those using build farms may need to now use `--output-groups 0` or otherwise.
|
||||
* Support user-defined primitives (UDPs) (#468) (#5807) (#5936). [Zhou Shen, Krzysztof Sychla, et al]
|
||||
* Add `--trace-saif` for SAIF power traces (#5812) (#5914). [Mateusz Gancarz]
|
||||
* Add `--trace-saif` for SAIF power traces (#5812) (#5914). [Mateusz Gancarz, Antmicro Ltd.]
|
||||
|
||||
**Other:**
|
||||
|
||||
@@ -744,7 +1068,7 @@ Verilator 5.016 2023-09-16
|
||||
* Fix nested assignments on the LHS (#4435). [Ryszard Rozak, Antmicro Ltd]
|
||||
* Fix false MULTITOP on bound interfaces (#4438). [Alex Solomatnikov]
|
||||
* Fix internal error on real conversion (#4447). [vdhotre-ventana]
|
||||
* Fix lifetime unknown error on enum.name (#4448). [jwoutersymatra]
|
||||
* Fix lifetime unknown error on enum.name (#4448). [Johan Wouters]
|
||||
* Fix unstable output of VHashSha256 (#4453). [Anthony Donlon]
|
||||
* Fix static cast from a stream type (#4469) (#4485). [Ryszard Rozak, Antmicro Ltd]
|
||||
* Fix error on enum with VARHIDDEN of cell (#4482). [Michail Rontionov]
|
||||
|
||||
+317
-141
@@ -91,6 +91,7 @@ datarootdir = @datarootdir@
|
||||
# Compile options
|
||||
CFG_WITH_CCWARN = @CFG_WITH_CCWARN@
|
||||
CFG_WITH_DEFENV = @CFG_WITH_DEFENV@
|
||||
CFG_WITH_DEV_GCOV = @CFG_WITH_DEV_GCOV@
|
||||
CFG_WITH_LONGTESTS = @CFG_WITH_LONGTESTS@
|
||||
CFG_WITH_SOLVER = @CFG_WITH_SOLVER@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
@@ -104,45 +105,45 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
SHELL = /bin/sh
|
||||
|
||||
SUBDIRS = docs src test_regress \
|
||||
examples/cmake_hello_c \
|
||||
examples/cmake_hello_sc \
|
||||
examples/cmake_tracing_c \
|
||||
examples/cmake_tracing_sc \
|
||||
examples/cmake_protect_lib \
|
||||
examples/make_hello_binary \
|
||||
examples/make_hello_c \
|
||||
examples/make_hello_sc \
|
||||
examples/make_tracing_c \
|
||||
examples/make_tracing_sc \
|
||||
examples/make_protect_lib \
|
||||
examples/json_py \
|
||||
examples/cmake_hello_c \
|
||||
examples/cmake_hello_sc \
|
||||
examples/cmake_tracing_c \
|
||||
examples/cmake_tracing_sc \
|
||||
examples/cmake_protect_lib \
|
||||
examples/make_hello_binary \
|
||||
examples/make_hello_c \
|
||||
examples/make_hello_sc \
|
||||
examples/make_tracing_c \
|
||||
examples/make_tracing_sc \
|
||||
examples/make_protect_lib \
|
||||
examples/json_py \
|
||||
|
||||
INFOS = verilator.html verilator.pdf
|
||||
|
||||
INFOS_OLD = README README.html README.pdf
|
||||
|
||||
EXAMPLES_FIRST = \
|
||||
examples/make_hello_c \
|
||||
examples/make_hello_sc \
|
||||
examples/make_hello_c \
|
||||
examples/make_hello_sc \
|
||||
|
||||
EXAMPLES = $(EXAMPLES_FIRST) $(filter-out $(EXAMPLES_FIRST), $(sort $(wildcard examples/*)))
|
||||
|
||||
# See uninstall also - don't put wildcards in this variable, it might uninstall other stuff
|
||||
# No verilator_ccache_report.1, verilator_difftree.1 as those are not bin/ installed
|
||||
VL_INST_MAN_FILES = \
|
||||
verilator.1 \
|
||||
verilator_coverage.1 \
|
||||
verilator_gantt.1 \
|
||||
verilator_profcfunc.1 \
|
||||
verilator.1 \
|
||||
verilator_coverage.1 \
|
||||
verilator_gantt.1 \
|
||||
verilator_profcfunc.1 \
|
||||
|
||||
default: all
|
||||
all: all_nomsg msg_test
|
||||
all_nomsg: verilator_exe $(VL_INST_MAN_FILES)
|
||||
|
||||
.PHONY:verilator_exe
|
||||
.PHONY:verilator_bin$(EXEEXT)
|
||||
.PHONY:verilator_bin_dbg$(EXEEXT)
|
||||
.PHONY:verilator_coverage_bin_dbg$(EXEEXT)
|
||||
.PHONY: verilator_exe
|
||||
.PHONY: verilator_bin$(EXEEXT)
|
||||
.PHONY: verilator_bin_dbg$(EXEEXT)
|
||||
.PHONY: verilator_coverage_bin_dbg$(EXEEXT)
|
||||
verilator_exe verilator_bin$(EXEEXT) verilator_bin_dbg$(EXEEXT) verilator_coverage_bin_dbg$(EXEEXT):
|
||||
@echo ------------------------------------------------------------
|
||||
@echo "making verilator in src"
|
||||
@@ -151,7 +152,7 @@ verilator_exe verilator_bin$(EXEEXT) verilator_bin_dbg$(EXEEXT) verilator_covera
|
||||
######################################################################
|
||||
# Tests
|
||||
|
||||
.PHONY:msg_test
|
||||
.PHONY: msg_test
|
||||
msg_test: all_nomsg
|
||||
@echo "Build complete!"
|
||||
@echo
|
||||
@@ -185,7 +186,7 @@ test-snap test-diff:
|
||||
|
||||
examples: all_nomsg
|
||||
for p in $(EXAMPLES) ; do \
|
||||
$(MAKE) -C $$p VERILATOR_ROOT=`pwd` || exit 10; \
|
||||
$(MAKE) -C $$p VERILATOR_ROOT=`pwd` || exit 10; \
|
||||
done
|
||||
|
||||
######################################################################
|
||||
@@ -213,8 +214,8 @@ verilator.html:
|
||||
verilator.pdf: Makefile
|
||||
$(MAKE) -C docs verilator.pdf
|
||||
|
||||
TAGFILES=${srcdir}/*/*.cpp ${srcdir}/*/*.h ${srcdir}/*/*.in \
|
||||
${srcdir}/*.in ${srcdir}/*.pod
|
||||
TAGFILES = ${srcdir}/*/*.cpp ${srcdir}/*/*.h ${srcdir}/*/*.in \
|
||||
${srcdir}/*.in ${srcdir}/*.pod
|
||||
|
||||
TAGS: $(TAGFILES)
|
||||
etags $(TAGFILES)
|
||||
@@ -224,42 +225,49 @@ TAGS: $(TAGFILES)
|
||||
doxygen:
|
||||
$(MAKE) -C docs doxygen
|
||||
|
||||
.PHONY: spelling
|
||||
spelling:
|
||||
$(MAKE) -C docs spelling
|
||||
|
||||
######################################################################
|
||||
# Install
|
||||
|
||||
# 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
|
||||
VL_INST_PUBLIC_SCRIPT_FILES = verilator \
|
||||
verilator_coverage \
|
||||
verilator_gantt \
|
||||
verilator_profcfunc \
|
||||
VL_INST_PUBLIC_SCRIPT_FILES = \
|
||||
verilator \
|
||||
verilator_coverage \
|
||||
verilator_gantt \
|
||||
verilator_profcfunc \
|
||||
|
||||
VL_INST_PUBLIC_BIN_FILES = verilator_bin$(EXEEXT) \
|
||||
verilator_bin_dbg$(EXEEXT) \
|
||||
verilator_coverage_bin_dbg$(EXEEXT) \
|
||||
VL_INST_PUBLIC_BIN_FILES = \
|
||||
verilator_bin$(EXEEXT) \
|
||||
verilator_bin_dbg$(EXEEXT) \
|
||||
verilator_coverage_bin_dbg$(EXEEXT) \
|
||||
|
||||
# Private executabels intended to be invoked by internals
|
||||
# Don't put wildcards in these variables, it might cause an uninstall of other stuff
|
||||
VL_INST_PRIVATE_SCRIPT_FILES = verilator_ccache_report \
|
||||
verilator_includer \
|
||||
VL_INST_PRIVATE_SCRIPT_FILES = \
|
||||
verilator_ccache_report \
|
||||
verilator_includer \
|
||||
|
||||
VL_INST_INC_BLDDIR_FILES = \
|
||||
include/verilated_config.h \
|
||||
include/verilated.mk \
|
||||
include/verilated_config.h \
|
||||
include/verilated.mk \
|
||||
|
||||
# Files under srcdir, instead of build time
|
||||
VL_INST_INC_SRCDIR_FILES = \
|
||||
include/*.[chv]* \
|
||||
include/*.vlt \
|
||||
include/*.sv \
|
||||
include/gtkwave/*.[chv]* \
|
||||
include/vltstd/*.[chv]* \
|
||||
include/*.[chv]* \
|
||||
include/*.vlt \
|
||||
include/*.sv \
|
||||
include/gtkwave/*.[chv]* \
|
||||
include/vltstd/*.[chv]* \
|
||||
|
||||
VL_INST_DATA_SRCDIR_FILES = \
|
||||
examples/*/*.[chv]* \
|
||||
examples/*/CMakeLists.txt \
|
||||
examples/*/Makefile* \
|
||||
examples/*/vl_* \
|
||||
examples/*/*.[chv]* \
|
||||
examples/*/CMakeLists.txt \
|
||||
examples/*/Makefile* \
|
||||
examples/*/vl_* \
|
||||
|
||||
mkbindirs:
|
||||
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/bin
|
||||
@@ -268,7 +276,7 @@ mkbindirs:
|
||||
installbin: | mkbindirs
|
||||
cd $(srcdir)/bin; \
|
||||
for p in $(VL_INST_PUBLIC_SCRIPT_FILES) ; do \
|
||||
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \
|
||||
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \
|
||||
done
|
||||
perl -p -i -e 'use File::Spec;' \
|
||||
-e' $$path = File::Spec->abs2rel("$(realpath $(DESTDIR)$(pkgdatadir))", "$(realpath $(DESTDIR)$(bindir))");' \
|
||||
@@ -276,11 +284,11 @@ installbin: | mkbindirs
|
||||
-- "$(DESTDIR)/$(bindir)/verilator"
|
||||
cd bin; \
|
||||
for p in $(VL_INST_PUBLIC_BIN_FILES) ; do \
|
||||
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \
|
||||
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \
|
||||
done
|
||||
cd $(srcdir)/bin; \
|
||||
for p in $(VL_INST_PRIVATE_SCRIPT_FILES) ; do \
|
||||
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(pkgdatadir)/bin/$$p; \
|
||||
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(pkgdatadir)/bin/$$p; \
|
||||
done
|
||||
|
||||
installredirect: installbin | mkbindirs
|
||||
@@ -290,7 +298,7 @@ installredirect: installbin | mkbindirs
|
||||
-e 's/RELPATH.*/"$$path";/g' -- "${srcdir}/bin/redirect.tmp"
|
||||
cd $(srcdir)/bin; \
|
||||
for p in $(VL_INST_PUBLIC_SCRIPT_FILES) $(VL_INST_PUBLIC_BIN_FILES) ; do \
|
||||
$(INSTALL_PROGRAM) redirect.tmp $(DESTDIR)$(pkgdatadir)/bin/$$p; \
|
||||
$(INSTALL_PROGRAM) redirect.tmp $(DESTDIR)$(pkgdatadir)/bin/$$p; \
|
||||
done
|
||||
rm ${srcdir}/bin/redirect.tmp
|
||||
|
||||
@@ -299,14 +307,14 @@ installredirect: installbin | mkbindirs
|
||||
installman: $(VL_INST_MAN_FILES)
|
||||
$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man1
|
||||
for p in $^ ; do \
|
||||
$(INSTALL_DATA) $$p $(DESTDIR)$(mandir)/man1/$$p; \
|
||||
$(INSTALL_DATA) $$p $(DESTDIR)$(mandir)/man1/$$p; \
|
||||
done
|
||||
|
||||
installdata:
|
||||
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/include/gtkwave
|
||||
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/include/vltstd
|
||||
for p in $(VL_INST_INC_BLDDIR_FILES) ; do \
|
||||
$(INSTALL_DATA) $$p $(DESTDIR)$(pkgdatadir)/$$p; \
|
||||
$(INSTALL_DATA) $$p $(DESTDIR)$(pkgdatadir)/$$p; \
|
||||
done
|
||||
cd $(srcdir) \
|
||||
; for p in $(VL_INST_INC_SRCDIR_FILES) ; do \
|
||||
@@ -385,55 +393,55 @@ install-msg:
|
||||
######################################################################
|
||||
# Format/Lint
|
||||
|
||||
# Use --xml flag to see the cppcheck code to use for suppression
|
||||
CPPCHECK1_CPP = $(wildcard $(srcdir)/include/*.cpp)
|
||||
CPPCHECK2_CPP = $(wildcard $(srcdir)/examples/*/*.cpp)
|
||||
CPPCHECK3_CPP = $(wildcard $(srcdir)/src/Vlc*.cpp)
|
||||
CPPCHECK4_CPP = $(wildcard $(srcdir)/src/V3[A-D]*.cpp $(srcdir)/src/Verilator*.cpp)
|
||||
CPPCHECK5_CPP = $(wildcard $(srcdir)/src/V3[E-I]*.cpp)
|
||||
CPPCHECK6_CPP = $(wildcard $(srcdir)/src/V3[P-Z]*.cpp)
|
||||
CPPCHECK7_CPP = $(wildcard $(srcdir)/src/V3[L-R]*.cpp)
|
||||
CPPCHECK8_CPP = $(wildcard $(srcdir)/src/V3[S-Z]*.cpp)
|
||||
CHECK_CPP = $(CPPCHECK1_CPP) $(CPPCHECK2_CPP) $(CPPCHECK3_CPP) $(CPPCHECK4_CPP) \
|
||||
$(CPPCHECK5_CPP) $(CPPCHECK6_CPP) $(CPPCHECK7_CPP) $(CPPCHECK8_CPP)
|
||||
CPPCHECK_VERILATOR_CPP = $(wildcard $(srcdir)/src/V3*.cpp $(srcdir)/src/Verilator*.cpp)
|
||||
CPPCHECK_RUNTIME_CPP = $(wildcard $(srcdir)/include/*.cpp)
|
||||
CPPCHECK_VLC_CPP = $(wildcard $(srcdir)/src/Vlc*.cpp)
|
||||
CPPCHECK_EXAMPLES_CPP = $(wildcard $(srcdir)/examples/*/*.cpp)
|
||||
CHECK_CPP = $(CPPCHECK_VERILATOR_CPP) $(CPPCHECK_RUNTIME_CPP) $(CPPCHECK_VLC_CPP) $(CPPCHECK_EXAMPLES_CPP)
|
||||
CHECK_H = $(wildcard \
|
||||
$(srcdir)/include/*.h \
|
||||
$(srcdir)/src/*.h )
|
||||
$(srcdir)/include/*.h \
|
||||
$(srcdir)/src/*.h )
|
||||
CHECK_YL = $(wildcard \
|
||||
$(srcdir)/src/*.y \
|
||||
$(srcdir)/src/*.l )
|
||||
CPPCHECK = src/cppcheck_filtered cppcheck
|
||||
CPPCHECK_FLAGS = --enable=all --inline-suppr \
|
||||
--suppress=cstyleCast --suppress=useInitializationList \
|
||||
--suppress=nullPointer --suppress=nullPointerRedundantCheck --suppress=ctunullpointer \
|
||||
--suppress=unusedFunction --suppress=unusedScopedObject \
|
||||
--suppress=useStlAlgorithm
|
||||
CPPCHECK_FLAGS += --xml
|
||||
CPPCHECK_DEP = $(subst .cpp,.cppcheck,$(CHECK_CPP))
|
||||
CPPCHECK_INC = -I$(srcdir)/include -I$(srcdir)/include/gtkwave -I$(srcdir)/include/vltstd -I$(srcdir)/src/obj_dbg -I$(srcdir)/src
|
||||
$(srcdir)/src/*.y \
|
||||
$(srcdir)/src/*.l )
|
||||
CPPCHECK = cppcheck
|
||||
CPPCHECK_JOBS = $(shell nproc)
|
||||
CPPCHECK_CACHE = $(srcdir)/src/obj_dbg/cppcheck-cache
|
||||
CPPCHECK_FLAGS = --enable=all
|
||||
CPPCHECK_FLAGS += --inline-suppr
|
||||
CPPCHECK_FLAGS += --suppressions-list=$(srcdir)/src/cppcheck-suppressions.txt
|
||||
CPPCHECK_FLAGS += --cppcheck-build-dir=$(CPPCHECK_CACHE)
|
||||
CPPCHECK_FLAGS += -DVL_DEBUG=1 -DVL_CPPCHECK=1 -DINFILTER_PIPE=1 -D__GNUC__=1
|
||||
CPPCHECK_FLAGS += -j$(CPPCHECK_JOBS)
|
||||
CPPCHECK_INC = -I$(srcdir)/include
|
||||
CPPCHECK_INC += -I$(srcdir)/include/gtkwave
|
||||
CPPCHECK_INC += -I$(srcdir)/include/vltstd
|
||||
CPPCHECK_INC += -I$(srcdir)/src/obj_dbg
|
||||
CPPCHECK_INC += -I$(srcdir)/src
|
||||
|
||||
cppcheck: cppcheck-1 cppcheck-2 cppcheck-3 cppcheck-4 cppcheck-5 cppcheck-6 cppcheck-7 cppcheck-8
|
||||
cppcheck-1:
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK1_CPP)
|
||||
cppcheck-2:
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK2_CPP)
|
||||
cppcheck-3:
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK3_CPP)
|
||||
cppcheck-4:
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK4_CPP)
|
||||
cppcheck-5:
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK5_CPP)
|
||||
cppcheck-6:
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK6_CPP)
|
||||
cppcheck-7:
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK7_CPP)
|
||||
cppcheck-8:
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK8_CPP)
|
||||
$(CPPCHECK_CACHE): $(CHECK_CPP) $(CHECK_H) $(CHECK_YL)
|
||||
/bin/rm -rf $@
|
||||
/bin/mkdir -p $@
|
||||
|
||||
cppcheck-verilator: | $(CPPCHECK_CACHE)
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) $(CPPCHECK_INC) $(CPPCHECK_VERILATOR_CPP)
|
||||
cppcheck-runtime: | $(CPPCHECK_CACHE)
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) $(CPPCHECK_INC) $(CPPCHECK_RUNTIME_CPP)
|
||||
cppcheck-vlc: | $(CPPCHECK_CACHE)
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) $(CPPCHECK_INC) $(CPPCHECK_VLC_CPP)
|
||||
cppcheck-examples: | $(CPPCHECK_CACHE)
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) $(CPPCHECK_INC) $(CPPCHECK_EXAMPLES_CPP)
|
||||
|
||||
cppcheck:
|
||||
$(MAKE) cppcheck-vlc
|
||||
$(MAKE) cppcheck-examples
|
||||
$(MAKE) cppcheck-runtime
|
||||
$(MAKE) cppcheck-verilator
|
||||
|
||||
CLANGTIDY = clang-tidy
|
||||
CLANGTIDY_FLAGS = -config='' \
|
||||
-header-filter='.*' \
|
||||
-checks='-fuchsia-*,-cppcoreguidelines-avoid-c-arrays,-cppcoreguidelines-init-variables,-cppcoreguidelines-avoid-goto,-modernize-avoid-c-arrays,-readability-magic-numbers,-readability-simplify-boolean-expr,-cppcoreguidelines-macro-usage' \
|
||||
-header-filter='.*' \
|
||||
-checks='-fuchsia-*,-cppcoreguidelines-avoid-c-arrays,-cppcoreguidelines-init-variables,-cppcoreguidelines-avoid-goto,-modernize-avoid-c-arrays,-readability-magic-numbers,-readability-simplify-boolean-expr,-cppcoreguidelines-macro-usage' \
|
||||
|
||||
CLANGTIDY_DEP = $(subst .cpp,.cpp.tidy,$(CHECK_CPP))
|
||||
CLANGTIDY_DEFS = -DVL_DEBUG=1 -DVL_CPPCHECK=1
|
||||
@@ -453,83 +461,99 @@ analyzer-include:
|
||||
scan-build $(MAKE) -k examples
|
||||
|
||||
format:
|
||||
$(MAKE) -j 4 format-c format-py format-exec
|
||||
$(MAKE) -j 5 format-c format-cmake format-exec format-py
|
||||
|
||||
CLANGFORMAT = clang-format-14
|
||||
CLANGFORMAT = clang-format-18
|
||||
CLANGFORMAT_FLAGS = -i
|
||||
CLANGFORMAT_FILES = $(CHECK_CPP) $(CHECK_H) $(CHECK_YL) test_regress/t/*.c* test_regress/t/*.h
|
||||
|
||||
format-c clang-format:
|
||||
@$(CLANGFORMAT) --version | egrep 14.0 > /dev/null \
|
||||
|| echo "*** You are not using clang-format-14, indents may differ from master's ***"
|
||||
$(CLANGFORMAT) --version
|
||||
@$(CLANGFORMAT) --version | fgrep 'version 18' > /dev/null \
|
||||
|| echo "*** You are not using clang-format-18, indents may differ from master's ***"
|
||||
$(CLANGFORMAT) $(CLANGFORMAT_FLAGS) $(CLANGFORMAT_FILES)
|
||||
|
||||
YAMLFIX = YAMLFIX_WHITELINES=1 YAMLFIX_LINE_LENGTH=130 YAMLFIX_preserve_quotes=true yamlfix
|
||||
YAMLFIX = YAMLFIX_WHITELINES=1 YAMLFIX_LINE_LENGTH=200 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 \
|
||||
CMakeLists.txt \
|
||||
examples/*/CMakeLists.txt \
|
||||
src/CMakeLists.txt \
|
||||
test_regress/CMakeLists.txt \
|
||||
*.cmake.in \
|
||||
|
||||
# Makefiles
|
||||
MAKE_FILES = \
|
||||
Makefile*.in \
|
||||
docs/Makefile* \
|
||||
include/verilated.mk.in \
|
||||
examples/*/Makefile* \
|
||||
src/Makefile*.in \
|
||||
test_regress/Makefile* \
|
||||
|
||||
# Python programs, subject to format and lint
|
||||
PY_PROGRAMS = \
|
||||
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/*.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 \
|
||||
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/flexfix \
|
||||
src/vlcovgen \
|
||||
src/.gdbinit.py \
|
||||
test_regress/*.py \
|
||||
test_regress/t/*.pf \
|
||||
nodist/clang_check_attributes \
|
||||
nodist/dot_importer \
|
||||
nodist/fuzzer/actual_fail \
|
||||
nodist/fuzzer/generate_dictionary \
|
||||
nodist/install_test \
|
||||
nodist/log_changes \
|
||||
|
||||
# Python files, subject to format but not lint
|
||||
PY_FILES = \
|
||||
$(PY_PROGRAMS) \
|
||||
nodist/code_coverage.dat \
|
||||
test_regress/t/*.py \
|
||||
$(PY_PROGRAMS) \
|
||||
test_regress/t/*.py \
|
||||
|
||||
# Python files, test_regress tests
|
||||
PY_TEST_FILES = \
|
||||
test_regress/t/*.py \
|
||||
PY_TEST_FILES = test_regress/t/*.py
|
||||
|
||||
YAPF = yapf3
|
||||
YAPF_FLAGS = -i --parallel
|
||||
|
||||
format-py yapf:
|
||||
$(YAPF) --version
|
||||
$(YAPF) $(YAPF_FLAGS) $(PY_FILES)
|
||||
|
||||
GERSEMI = gersemi
|
||||
GERSEMI_FLAGS = -i
|
||||
GERSEMI_FLAGS = -i --no-warn-about-unknown-commands
|
||||
|
||||
format-cmake:
|
||||
$(GERSEMI) $(GERSEMI_FLAGS) $(CMAKE_FILES)
|
||||
|
||||
MBAKE = mbake
|
||||
MBAKE_FLAGS = format --config ./.bake.toml
|
||||
|
||||
format-make:
|
||||
$(MBAKE) $(MBAKE_FLAGS) $(MAKE_FILES)
|
||||
|
||||
format-yaml: yamlfix
|
||||
|
||||
MYPY = mypy
|
||||
MYPY_FLAGS = --strict --no-error-summary
|
||||
|
||||
PYLINT = pylint
|
||||
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
|
||||
@@ -539,7 +563,16 @@ RUFF_FLAGS = check --ignore=E402,E501,E701
|
||||
|
||||
# "make -k" so can see all tool result errors
|
||||
lint-py:
|
||||
$(MAKE) -k lint-py-pylint lint-py-pylint-tests lint-py-ruff
|
||||
$(MAKE) -k lint-py-mypy lint-py-mypy-none lint-py-pylint lint-py-pylint-tests lint-py-ruff
|
||||
|
||||
lint-py-mypy:
|
||||
for filename in `fgrep -l '# mypy' $(PY_PROGRAMS)`; do \
|
||||
echo "$(MYPY) $(MYPY_FLAGS) $$filename" ; \
|
||||
$(MYPY) $(MYPY_FLAGS) $$filename ; \
|
||||
done
|
||||
|
||||
lint-py-mypy-none:
|
||||
@echo "mypy not checking: " `fgrep -L '# mypy' $(PY_PROGRAMS)`
|
||||
|
||||
lint-py-pylint:
|
||||
$(PYLINT) $(PYLINT_FLAGS) $(PY_PROGRAMS)
|
||||
@@ -575,6 +608,149 @@ else
|
||||
autoconf
|
||||
endif
|
||||
|
||||
######################################################################
|
||||
# Coverage collection and reporting
|
||||
|
||||
COVERAGE_DIR := obj_coverage
|
||||
|
||||
ifeq ($(CFG_WITH_DEV_GCOV),yes)
|
||||
|
||||
# Figure out base and head refs for coverage report
|
||||
COVERAGE_REF_BASE := $(if $(COVERAGE_BASE),$(shell git rev-parse --short $(COVERAGE_BASE)))
|
||||
COVERAGE_REF_HEAD := $(shell git rev-parse --short HEAD)
|
||||
override undefine COVERAGE_BASE # Use the above variabels instead
|
||||
|
||||
# 'fastcov' setup
|
||||
FASTCOV := nodist/fastcov.py
|
||||
FASTCOV_OPT := -j $(shell nproc)
|
||||
FASTCOV_OPT += --lcov
|
||||
FASTCOV_OPT += --process-gcno
|
||||
FASTCOV_OPT += --branch-coverage
|
||||
FASTCOV_OPT += --dump-statistic
|
||||
# Files matching the following glob patterns will be excluded from coverage
|
||||
FASTCOV_OPT += --exclude-glob
|
||||
FASTCOV_OPT += '/usr/*'
|
||||
FASTCOV_OPT += '*examples/*'
|
||||
FASTCOV_OPT += '*include/gtkwave/*'
|
||||
FASTCOV_OPT += '*src/obj_dbg/*'
|
||||
FASTCOV_OPT += '*src/obj_opt/*.yy.cpp'
|
||||
FASTCOV_OPT += '*src/obj_opt/V3Ast*'
|
||||
FASTCOV_OPT += '*src/obj_opt/V3Dfg*'
|
||||
FASTCOV_OPT += '*src/obj_opt/V3ParseBison.c'
|
||||
FASTCOV_OPT += '*test_regress/*'
|
||||
# Lines *containing* these substrings will be excluded from *all* coverage
|
||||
FASTCOV_OPT += --custom-exclusion-marker
|
||||
FASTCOV_OPT += ASTGEN_MEMBERS
|
||||
FASTCOV_OPT += ERROR_RSVD_WORD
|
||||
FASTCOV_OPT += LCOV_EXCL_LINE
|
||||
FASTCOV_OPT += V3ERROR_NA
|
||||
FASTCOV_OPT += VL_DEFINE_DEBUG_FUNCTIONS
|
||||
FASTCOV_OPT += VL_FATAL
|
||||
FASTCOV_OPT += VL_RTTI_IMPL
|
||||
FASTCOV_OPT += VL_UNREACHABLE
|
||||
FASTCOV_OPT += v3fatalSrc
|
||||
# Lines *starting* with these substrings will be ecluded from *branch* coverage
|
||||
FASTCOV_OPT += --exclude-br-lines-starting-with
|
||||
FASTCOV_OPT += BROKEN_BASE_RTN
|
||||
FASTCOV_OPT += BROKEN_RTN
|
||||
FASTCOV_OPT += NUM_ASSERT
|
||||
FASTCOV_OPT += SELF_CHECK
|
||||
FASTCOV_OPT += UASSERT
|
||||
FASTCOV_OPT += UINFO
|
||||
FASTCOV_OPT += assert
|
||||
FASTCOV_OPT += 'if (VL_UNCOVERABLE'
|
||||
FASTCOV_OPT += '} else if (VL_UNCOVERABLE'
|
||||
|
||||
# 'genhtml' setup
|
||||
GENHTML := genhtml
|
||||
GENHTML_OPT := -j $(shell nproc)
|
||||
GENHTML_OPT += --branch-coverage
|
||||
GENHTML_OPT += --demangle-cpp
|
||||
GENHTML_OPT += --missed
|
||||
GENHTML_OPT += --rc branch_coverage=1
|
||||
GENHTML_OPT += --rc genhtml_hi_limit=100
|
||||
GENHTML_OPT += --ignore-errors negative
|
||||
ifeq ($(COVERAGE_REF_BASE),)
|
||||
GENHTML_OPT += --header-title "Code coverage for Verilator $(shell git describe --dirty)"
|
||||
else
|
||||
GENHTML_OPT += --header-title "Patch coverage for Verilator $(COVERAGE_REF_BASE)..$(COVERAGE_REF_HEAD)$(if $(shell git status --porcelain),-dirty)"
|
||||
endif
|
||||
GENHTML_OPT += --flat
|
||||
GENHTML_OPT += --precision 2
|
||||
GENHTML_OPT += --legend
|
||||
GENHTML_OPT += --show-proportion
|
||||
GENHTML_OPT += --filter brace,blank,range
|
||||
|
||||
# There are loads (~20k combined), but using this seems fine on modern hardware
|
||||
GCNO_FILES = $(shell find . -name '*.gcno')
|
||||
GCDA_FILES = $(shell find . -name '*.gcda')
|
||||
|
||||
# Combine all .gcda coverage date files into lcov .info file
|
||||
$(COVERAGE_DIR)/verilator.info: $(GCNO_FILES) $(GCDA_FILES)
|
||||
@echo "####################################################################"
|
||||
@echo "# fastcov: combining all .gcda files into lcov .info"
|
||||
@echo "####################################################################"
|
||||
@mkdir -p $(COVERAGE_DIR)
|
||||
/usr/bin/time -f "That took %E" \
|
||||
$(FASTCOV) $(FASTCOV_OPT) --output $@
|
||||
|
||||
# Filter combined .info file for patch coverage
|
||||
$(COVERAGE_DIR)/verilator-patch.info: $(COVERAGE_DIR)/verilator.info
|
||||
@echo "####################################################################"
|
||||
@echo "# fastcov: Filtering for patch coverage"
|
||||
@echo "####################################################################"
|
||||
rm -f $(COVERAGE_DIR)/empty-patch
|
||||
git diff $(COVERAGE_REF_BASE) -- include src > $(COVERAGE_DIR)/filter.patch
|
||||
[ -s $(COVERAGE_DIR)/filter.patch ]] || touch $(COVERAGE_DIR)/empty-patch
|
||||
$(FASTCOV) -C $^ --lcov -o $@ --diff-filter $(COVERAGE_DIR)/filter.patch
|
||||
|
||||
# Build coverage report
|
||||
$(COVERAGE_DIR)/report/index.html: $(COVERAGE_DIR)/verilator$(if $(COVERAGE_REF_BASE),-patch).info
|
||||
@echo "####################################################################"
|
||||
@echo "# genhtml: Generating coverage report"
|
||||
@echo "####################################################################"
|
||||
@rm -rf $(COVERAGE_DIR)/report
|
||||
[ -f $(COVERAGE_DIR)/empty-patch ]] || /usr/bin/time -f "That took %E" \
|
||||
$(GENHTML) $(GENHTML_OPT) --output-directory $(COVERAGE_DIR)/report $^ || true
|
||||
@# Uncommitted changes not tracked, force rebuild on next run if patch coverage
|
||||
@$(if $(COVERAGE_REF_BASE),mv $(COVERAGE_DIR)/verilator-patch.info $(COVERAGE_DIR)/verilator-patch-last.info)
|
||||
|
||||
# Convenience targets
|
||||
.PHONY: coverage-combine
|
||||
coverage-combine: $(COVERAGE_DIR)/verilator.info
|
||||
|
||||
# Via recursive make, so the message is always printed
|
||||
.PHONY: coverage-report
|
||||
coverage-report:
|
||||
@$(MAKE) --no-print-directory $(COVERAGE_DIR)/report/index.html || true
|
||||
@if [ -f $(COVERAGE_DIR)/report/index.html ]; then \
|
||||
echo "####################################################################"; \
|
||||
echo "# Coverage report is at: $(COVERAGE_DIR)/report/index.html"; \
|
||||
echo "# Use 'make coverage-view' to open it in your default browser"; \
|
||||
echo "####################################################################"; \
|
||||
elif [ -f $(COVERAGE_DIR)/empty-patch ]; then \
|
||||
echo "####################################################################"; \
|
||||
echo "# Patch is empty"; \
|
||||
echo "####################################################################"; \
|
||||
else \
|
||||
echo "####################################################################"; \
|
||||
echo "# Failed to create coverage report. Maybe no data, or error?"; \
|
||||
echo "####################################################################"; \
|
||||
false; \
|
||||
fi
|
||||
|
||||
# Open covarage report in default web browser
|
||||
.PHONY: coverage-view
|
||||
coverage-view: coverage-report
|
||||
@test -f $(COVERAGE_DIR)/report/index.html && open $(COVERAGE_DIR)/report/index.html || true
|
||||
|
||||
# Deletes all coverage data files (.gcda)
|
||||
.PHONY: coverage-zero
|
||||
coverage-zero: # 'rm $(GCDA_FILES)' might fail with too many args
|
||||
$(FASTCOV) --zerocounters
|
||||
|
||||
endif
|
||||
|
||||
######################################################################
|
||||
# Clean
|
||||
|
||||
@@ -585,8 +761,8 @@ maintainer-clean::
|
||||
|
||||
clean mostlyclean distclean maintainer-clean maintainer-copy::
|
||||
for dir in $(SUBDIRS); do \
|
||||
echo making $@ in $$dir ; \
|
||||
$(MAKE) -C $$dir $@ ; \
|
||||
echo making $@ in $$dir ; \
|
||||
$(MAKE) -C $$dir $@ ; \
|
||||
done
|
||||
|
||||
clean mostlyclean distclean maintainer-clean::
|
||||
@@ -600,7 +776,7 @@ clean mostlyclean distclean maintainer-clean::
|
||||
rm -rf src/*.tidy include/*.tidy examples/*/*.tidy
|
||||
rm -rf .ruff_cache
|
||||
rm -rf nodist/fuzzer/dictionary
|
||||
rm -rf nodist/obj_dir
|
||||
rm -rf $(COVERAGE_DIR)
|
||||
rm -rf verilator.txt
|
||||
|
||||
distclean maintainer-clean::
|
||||
|
||||
+8
-2
@@ -1,7 +1,7 @@
|
||||
.. Github doesn't render images unless absolute URL
|
||||
.. Do not know of a conditional tag, "only: github" nor "github display" works
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5| |badge7|
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5| |badge7| |badge8|
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/Website-Verilator.org-181717.svg
|
||||
:target: https://verilator.org
|
||||
@@ -15,6 +15,8 @@
|
||||
:target: https://hub.docker.com/r/verilator/verilator
|
||||
.. |badge7| image:: https://github.com/verilator/verilator/workflows/build/badge.svg
|
||||
:target: https://github.com/verilator/verilator/actions?query=workflow%3Abuild
|
||||
.. |badge8| image:: https://img.shields.io/github/actions/workflow/status/verilator/verilator/rtlmeter.yml?branch=master&event=schedule&label=benchmarks
|
||||
:target: https://verilator.github.io/verilator-rtlmeter-results
|
||||
|
||||
|
||||
Welcome to Verilator
|
||||
@@ -35,6 +37,7 @@ Welcome to Verilator
|
||||
* - **Widely Used**
|
||||
* Wide industry and academic deployment
|
||||
* Out-of-the-box support from Arm and RISC-V vendor IP
|
||||
* Over 700 contributors
|
||||
- |verilator usage|
|
||||
* - |verilator community|
|
||||
- **Community Driven & Openly Licensed**
|
||||
@@ -129,12 +132,15 @@ organizations; please see `Verilator Commercial Support
|
||||
Related Projects
|
||||
================
|
||||
|
||||
- `GTKwave <http://gtkwave.sourceforge.net/>`_ - Waveform viewer for
|
||||
- `GTKwave <https://gtkwave.sourceforge.net/>`_ - Waveform viewer for
|
||||
Verilator traces.
|
||||
|
||||
- `Icarus Verilog`_ - Icarus is a highly-featured interpreted Verilog
|
||||
simulator. If Verilator does not support your needs, perhaps Icarus may.
|
||||
|
||||
- `Surfer <https://surfer-project.org/>`_ - Web or offline waveform viewer
|
||||
for Verilator traces.
|
||||
|
||||
|
||||
Open License
|
||||
============
|
||||
|
||||
+62
-33
@@ -28,6 +28,7 @@ autoflush STDOUT 1;
|
||||
autoflush STDERR 1;
|
||||
|
||||
$Debug = 0;
|
||||
my $opt_aslr;
|
||||
my $opt_gdb;
|
||||
my $opt_rr;
|
||||
my $opt_gdbbt;
|
||||
@@ -56,6 +57,7 @@ if (! GetOptions(
|
||||
"debug" => \&debug,
|
||||
# "version!" => \&version, # Also passthru'ed
|
||||
# Switches
|
||||
"aslr!" => \$opt_aslr,
|
||||
"gdb!" => \$opt_gdb,
|
||||
"gdbbt!" => \$opt_gdbbt,
|
||||
"quiet!" => \$opt_quiet_exit, # As -quiet implies -quiet-exit
|
||||
@@ -97,7 +99,7 @@ my @quoted_sw = map { sh_escape($_) } @Opt_Verilator_Sw;
|
||||
if ($opt_gdb) {
|
||||
# Generic GDB interactive
|
||||
run (ulimit_stack_unlimited()
|
||||
. aslr_off()
|
||||
. aslr(0)
|
||||
. ($ENV{VERILATOR_GDB} || "gdb")
|
||||
. " " . verilator_bin()
|
||||
# Note, uncomment to set breakpoints before running:
|
||||
@@ -114,13 +116,13 @@ if ($opt_gdb) {
|
||||
} elsif ($opt_rr) {
|
||||
# Record with rr
|
||||
run (ulimit_stack_unlimited()
|
||||
. aslr_off()
|
||||
. aslr(0)
|
||||
. "rr record " . verilator_bin()
|
||||
. " " . join(' ', @quoted_sw));
|
||||
} elsif ($opt_gdbbt && $Debug) {
|
||||
# Run under GDB to get gdbbt
|
||||
run (ulimit_stack_unlimited()
|
||||
. aslr_off()
|
||||
. aslr(0)
|
||||
. "gdb"
|
||||
. " " . verilator_bin()
|
||||
. " --batch --quiet --return-child-result"
|
||||
@@ -130,24 +132,24 @@ if ($opt_gdb) {
|
||||
} elsif ($opt_valgrind) {
|
||||
# Run under valgrind
|
||||
my $valgrind_bin = ($ENV{VERILATOR_VALGRIND} || "valgrind --error-exitcode=1 --max-stackframe=2815880"
|
||||
# Magic number sugested by valgrind, may need to be increased in future
|
||||
# Magic number suggested by Valgrind, may need to be increased in future
|
||||
# if you get warnings. See: https://valgrind.org/docs/manual/manual-core.html#opt.max-stackframe
|
||||
);
|
||||
|
||||
run (ulimit_stack_unlimited()
|
||||
. aslr_off()
|
||||
. aslr(0)
|
||||
. $valgrind_bin
|
||||
. " " . verilator_bin()
|
||||
. " " . join(' ', @quoted_sw));
|
||||
} elsif ($Debug) {
|
||||
# Debug
|
||||
run(ulimit_stack_unlimited()
|
||||
. aslr_off()
|
||||
. aslr(0)
|
||||
. verilator_bin()
|
||||
. " " . join(' ', @quoted_sw));
|
||||
} else {
|
||||
# Normal, non gdb
|
||||
run(ulimit_stack_unlimited() . verilator_bin() . " " . join(' ', @quoted_sw));
|
||||
run(ulimit_stack_unlimited() . aslr(1) . verilator_bin() . " " . join(' ', @quoted_sw));
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
@@ -192,21 +194,37 @@ sub gdb_works {
|
||||
return $status == 0;
|
||||
}
|
||||
|
||||
sub aslr_off {
|
||||
my $ok = `setarch --addr-no-randomize echo ok 2>/dev/null` || "";
|
||||
if ($ok =~ /ok/) {
|
||||
return "setarch --addr-no-randomize ";
|
||||
} else {
|
||||
return "";
|
||||
sub aslr {
|
||||
my $want_on = shift;
|
||||
$want_on = $opt_aslr if defined $opt_aslr;
|
||||
if (!$want_on) {
|
||||
my $ok = `setarch --addr-no-randomize echo ok 2>/dev/null` || "";
|
||||
if ($ok =~ /ok/) {
|
||||
return "setarch --addr-no-randomize ";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
sub ulimit_stack_unlimited {
|
||||
return "" if !$opt_unlimited_stack;
|
||||
system("ulimit -s unlimited 2>/dev/null");
|
||||
my $limit = "unlimited";
|
||||
# AddressSanitizer doesn't work with 'ulimit -s unlimted'
|
||||
if (`${\(verilator_bin())} --get-supported DEV_ASAN` eq "1\n") {
|
||||
# Use host 'physical memory / #cores / 8' instead
|
||||
open(my $fh, "<", "/proc/meminfo") || die "Can't read host memory for asan";
|
||||
while (<$fh>) {
|
||||
if (m/MemTotal:\s+(\d+)\s+kB/) {
|
||||
$limit = int(int($1)/`nproc`/8);
|
||||
last;
|
||||
}
|
||||
}
|
||||
close($fh);
|
||||
}
|
||||
system("ulimit -s $limit 2>/dev/null");
|
||||
my $status = $?;
|
||||
if ($status == 0) {
|
||||
return "ulimit -s unlimited 2>/dev/null; exec ";
|
||||
return "ulimit -s $limit 2>/dev/null; exec ";
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
@@ -227,17 +245,18 @@ sub run {
|
||||
warn "%Error: export VERILATOR_ROOT=" . ($ENV{VERILATOR_ROOT} || "") . "\n";
|
||||
warn "%Error: $command\n";
|
||||
}
|
||||
if ($status & 127) {
|
||||
if (($status & 127) == 4 # SIGILL
|
||||
|| ($status & 127) == 8 # SIGFPA
|
||||
|| ($status & 127) == 11) { # SIGSEGV
|
||||
my $signal = ($status & 127);
|
||||
if ($signal) {
|
||||
if ($signal == 4 # SIGILL
|
||||
|| $signal == 8 # SIGFPA
|
||||
|| $signal == 11) { # SIGSEGV
|
||||
warn "%Error: Verilator internal fault, sorry. "
|
||||
. "Suggest trying --debug --gdbbt\n" if !$Debug;
|
||||
} elsif (($status & 127) == 6) { # SIGABRT
|
||||
} elsif ($signal == 6) { # SIGABRT
|
||||
warn "%Error: Verilator aborted. "
|
||||
. "Suggest trying --debug --gdbbt\n" if !$Debug;
|
||||
} else {
|
||||
warn "%Error: Verilator threw signal $status. "
|
||||
warn "%Error: Verilator threw signal $signal. "
|
||||
. "Suggest trying --debug --gdbbt\n" if !$Debug;
|
||||
}
|
||||
}
|
||||
@@ -245,8 +264,8 @@ sub run {
|
||||
warn "%Error: Command Failed $command\n";
|
||||
}
|
||||
exit $! if $!; # errno
|
||||
exit $? >> 8 if $? >> 8; # child exit status
|
||||
exit 255; # last resort
|
||||
exit $? >> 8 if $? >> 8; # pass along child exit code
|
||||
exit 128 + $signal; # last resort
|
||||
}
|
||||
}
|
||||
|
||||
@@ -311,8 +330,9 @@ detailed descriptions of these arguments.
|
||||
+1800-2012ext+<ext> Use SystemVerilog 2012 with file extension <ext>
|
||||
+1800-2017ext+<ext> Use SystemVerilog 2017 with file extension <ext>
|
||||
+1800-2023ext+<ext> Use SystemVerilog 2023 with file extension <ext>
|
||||
--assert Enable all assertions
|
||||
--assert-case Enable unique/unique0/priority case related checks
|
||||
--no-aslr Disable address space layout randomization
|
||||
--no-assert Disable all assertions
|
||||
--no-assert-case Disable unique/unique0/priority-case assertions
|
||||
--autoflush Flush streams after all $displays
|
||||
--bbox-sys Blackbox unknown $system calls
|
||||
--bbox-unsup Blackbox unsupported language features
|
||||
@@ -322,8 +342,6 @@ detailed descriptions of these arguments.
|
||||
--build-jobs <jobs> Parallelism for --build
|
||||
--cc Create C++ output
|
||||
-CFLAGS <flags> C++ compiler arguments for makefile
|
||||
--clk <signal-name> Mark specified signal as clock
|
||||
--no-clk <signal-name> Prevent marking specified signal as clock
|
||||
--compiler <compiler-name> Tune for specified C++ compiler
|
||||
--compiler-include Include additional header in the precompiled one
|
||||
--converge-limit <loops> Tune convergence settle time
|
||||
@@ -345,11 +363,14 @@ detailed descriptions of these arguments.
|
||||
--decorations <level> Set output comment and spacing level
|
||||
--default-language <lang> Default language to parse
|
||||
+define+<var>=<value> Set preprocessor define
|
||||
--diagnostics-sarif Enable SARIF diagnostics output
|
||||
--diagnostics-sarif-output <filename> Set SARIF diagnostics output file
|
||||
--dpi-hdr-only Only produce the DPI header file
|
||||
--dump-<srcfile> Enable dumping everything in source file
|
||||
--dump-defines Show preprocessor defines with -E
|
||||
--dump-dfg Enable dumping DfgGraphs to .dot files
|
||||
--dump-graph Enable dumping V3Graphs to .dot files
|
||||
--dump-inputs Enable dumping preprocessed input files
|
||||
--dump-tree Enable dumping Ast .tree files
|
||||
--dump-tree-addrids Use short identifiers instead of addresses
|
||||
--dump-tree-dot Enable dumping Ast .tree.dot debug files
|
||||
@@ -380,7 +401,10 @@ detailed descriptions of these arguments.
|
||||
--getenv <var> Get environment variable with defaults
|
||||
--help Show this help
|
||||
--hierarchical Enable hierarchical Verilation
|
||||
--hierarchical-params-file <name> Internal option that specifies parameters file for hier blocks
|
||||
--hierarchical-block <block> Internal use only for --hierarchical
|
||||
--hierarchical-child <block> Internal use only for --hierarchical
|
||||
--hierarchical-params-file <name> Internal option that specifies parameters file for hier blocks
|
||||
--hierarchical-threads <threads> Number of threads for hierarchical scheduling
|
||||
-I<dir> Directory to search for includes
|
||||
--if-depth <value> Tune IFDEPTH warning
|
||||
+incdir+<dir> Directory to search for includes
|
||||
@@ -388,15 +412,16 @@ detailed descriptions of these arguments.
|
||||
--instr-count-dpi <value> Assumed dynamic instruction count of DPI imports
|
||||
-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
|
||||
--no-json-ids Don't use short identifiers instead of addresses/paths in .tree.json
|
||||
--json-only Create JSON parser output (.tree.json and .meta.json)
|
||||
--json-only-meta-output .tree.meta.json output filename
|
||||
--json-only-output .tree.json output filename
|
||||
--json-only-meta-output <filename> Set .tree.meta.json output filename
|
||||
--json-only-output <filename> Set .tree.json output filename
|
||||
--l2-name <value> Verilog scope name of the top module
|
||||
--language <lang> Default language standard to parse
|
||||
-LDFLAGS <flags> Linker pre-object arguments for makefile
|
||||
--lib-create <name> Create a DPI library
|
||||
+libext+<ext>+[ext]... Extensions for finding modules
|
||||
+librescan Ignored for compatibility
|
||||
--lint-only Lint, but do not make output
|
||||
--localize-max-size <value> Tune localize optimization variable size
|
||||
--main Generate C++ main() file
|
||||
@@ -411,6 +436,8 @@ detailed descriptions of these arguments.
|
||||
+notimingchecks Ignored
|
||||
-o <executable> Name of final executable
|
||||
-O0 Disable optimizations
|
||||
-O1 Default optimizations
|
||||
-O2 Stronger optimizations
|
||||
-O3 High-performance optimizations
|
||||
-O<optimization-letter> Selectable optimizations
|
||||
--output-groups <numfiles> Group .cpp files into larger ones
|
||||
@@ -426,8 +453,9 @@ detailed descriptions of these arguments.
|
||||
--pins-uint8 Specify types for top-level ports
|
||||
--no-pins64 Don't use uint64_t's for 33-64 bit sigs
|
||||
--pipe-filter <command> Filter all input through a script
|
||||
--pp-comments Show preprocessor comments with -E
|
||||
--prefix <topname> Name of top-level class
|
||||
--preproc-comments Include preprocessor comments in the output with -E
|
||||
--preproc-defines Include preprocessor defines in the output with -E
|
||||
--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
|
||||
@@ -448,7 +476,7 @@ detailed descriptions of these arguments.
|
||||
--quiet-exit Don't print the command on failure
|
||||
--quiet-stats Don't print statistics
|
||||
--relative-includes Resolve includes relative to current file
|
||||
--reloop-limit Minimum iterations for forming loops
|
||||
--reloop-limit <value> Minimum iterations for forming loops
|
||||
--report-unoptflat Extra diagnostics for UNOPTFLAT
|
||||
--rr Run Verilator and record with rr
|
||||
--runtime-debug Enable model runtime debugging
|
||||
@@ -510,6 +538,7 @@ detailed descriptions of these arguments.
|
||||
-Wno-fatal Disable fatal exit on warnings
|
||||
-Wno-lint Disable all lint warnings
|
||||
-Wno-style Disable all style warnings
|
||||
-work <libname> Set config library for following files
|
||||
-Wpedantic Warn on compliance-test issues
|
||||
-Wwarn-<message> Enable specified warning message
|
||||
-Wwarn-lint Enable lint warning message
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# mypy: disallow-untyped-defs
|
||||
# pylint: disable=C0103,C0114,C0115,C0116,C0123,C0209,C0301,R0902,R0913,R0914,R0912,R0915,W0621
|
||||
######################################################################
|
||||
|
||||
@@ -36,7 +37,7 @@ results = {}
|
||||
elapsed = {}
|
||||
|
||||
|
||||
def toDateTime(s):
|
||||
def toDateTime(s: str) -> datetime:
|
||||
return datetime.strptime(s, "%Y-%m-%dT%H:%M:%S.%f")
|
||||
|
||||
|
||||
@@ -53,6 +54,7 @@ for logfile in args.logdir.iterdir():
|
||||
match = re.match(r'\[(\S+)\s.*Result: (.*)$', line)
|
||||
if match:
|
||||
assert obj is not None
|
||||
assert start is not None
|
||||
elapsed[obj] = toDateTime(match.group(1)) - start
|
||||
results[obj] = match.group(2)
|
||||
|
||||
|
||||
+10
-6
@@ -118,21 +118,24 @@ sub run {
|
||||
warn "%Error: export VERILATOR_ROOT=" . ($ENV{VERILATOR_ROOT} || "") . "\n";
|
||||
warn "%Error: $command\n";
|
||||
}
|
||||
if ($status & 127) {
|
||||
if (($status & 127) == 8 || ($status & 127) == 11) { # SIGFPA or SIGSEGV
|
||||
my $signal = ($status & 127);
|
||||
if ($signal) {
|
||||
if ($signal == 4 # SIGILL
|
||||
|| $signal == 8 # SIGFPA
|
||||
|| $signal == 11) { # SIGSEGV
|
||||
warn "%Error: Verilator_coverage internal fault, sorry.\n" if !$Debug;
|
||||
} elsif (($status & 127) == 6) { # SIGABRT
|
||||
} elsif ($signal == 6) { # SIGABRT
|
||||
warn "%Error: Verilator_coverage aborted.\n" if !$Debug;
|
||||
} else {
|
||||
warn "%Error: Verilator_coverage threw signal $status.\n" if !$Debug;
|
||||
warn "%Error: Verilator_coverage threw signal $signal.\n" if !$Debug;
|
||||
}
|
||||
}
|
||||
if ($status != 256 || $Debug) { # i.e. not normal exit(1)
|
||||
warn "%Error: Command Failed $command\n";
|
||||
}
|
||||
exit $! if $!; # errno
|
||||
exit $? >> 8 if $? >> 8; # child exit status
|
||||
exit 255; # last resort
|
||||
exit $? >> 8 if $? >> 8; # pass along child exit code
|
||||
exit 128 + $signal; # last resort
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,6 +173,7 @@ L<https://verilator.org/guide/latest/exe_verilator_coverage.html>.
|
||||
--annotate-all All files should be shown.
|
||||
--annotate-min <count> Minimum occurrence count for uncovered.
|
||||
--annotate-points Annotates info from each coverage point.
|
||||
--filter-type <regex> Keep only records of given coverage type.
|
||||
--help Displays this message and version and exits.
|
||||
--rank Compute relative importance of tests.
|
||||
--unlink With --write, unlink all inputs
|
||||
|
||||
+26
-23
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# pylint: disable=C0103,C0114,C0116,C0209
|
||||
# mypy: disallow-untyped-defs
|
||||
# pylint: disable=C0103,C0114,C0116,C0209,W0603
|
||||
######################################################################
|
||||
|
||||
import argparse
|
||||
@@ -9,25 +10,29 @@ import os.path
|
||||
import re
|
||||
import sys
|
||||
|
||||
exit_code = 0
|
||||
|
||||
def diff(a, b):
|
||||
|
||||
def diff(a: str, b: str) -> None:
|
||||
if not os.path.exists(a):
|
||||
sys.exit("%Error: No old diff filename found: " + a)
|
||||
sys.stderr.write("%Error: No old diff filename found: " + a + "\n")
|
||||
sys.exit(2)
|
||||
if not os.path.exists(b):
|
||||
sys.exit("%Error: No new diff filename found: " + b)
|
||||
sys.stderr.write("%Error: No new diff filename found: " + b + "\n")
|
||||
sys.exit(2)
|
||||
|
||||
if os.path.isdir(a) and os.path.isdir(b):
|
||||
diff_dir(a, b)
|
||||
elif os.path.isfile(a) and os.path.isfile(b):
|
||||
diff_file(a, b)
|
||||
else:
|
||||
sys.exit("%Error: Mix of files and dirs")
|
||||
sys.stderr.write("%Error: Mix of files and dirs")
|
||||
sys.exit(2)
|
||||
|
||||
|
||||
def diff_dir(a, b):
|
||||
def diff_dir(a: str, b: str) -> None:
|
||||
# Diff all files under two directories
|
||||
files = collections.defaultdict(lambda: {})
|
||||
files: dict[str, dict[str, str]] = collections.defaultdict(lambda: {})
|
||||
|
||||
for fn in glob.glob(a + "/*.tree"):
|
||||
base = re.sub(r'.*/', '', fn)
|
||||
@@ -50,7 +55,9 @@ def diff_dir(a, b):
|
||||
sys.stderr.write("%Warning: No .tree files found that have similar base names\n")
|
||||
|
||||
|
||||
def diff_file(a, b):
|
||||
def diff_file(a: str, b: str) -> None:
|
||||
global exit_code
|
||||
|
||||
# Compare the two tree files
|
||||
short_a = re.sub(r'[^a-zA-Z0-9.]+', '_', a)
|
||||
short_b = re.sub(r'[^a-zA-Z0-9.]+', '_', b)
|
||||
@@ -65,25 +72,18 @@ def diff_file(a, b):
|
||||
|
||||
filterf(a, tmp_a)
|
||||
filterf(b, tmp_b)
|
||||
os.system("diff -u " + tmp_a + " " + tmp_b)
|
||||
status = os.system("diff -u " + tmp_a + " " + tmp_b)
|
||||
os.unlink(tmp_a)
|
||||
os.unlink(tmp_b)
|
||||
|
||||
|
||||
def version_from(filename):
|
||||
# Return dump format
|
||||
with open(filename, "r", encoding="utf8") as fh:
|
||||
lineno = 0
|
||||
for line in fh:
|
||||
if lineno > 10:
|
||||
break
|
||||
match = re.search(r'format (0x[0-9.]+)', line)
|
||||
if match:
|
||||
return hex(match.group(1))
|
||||
return 1.0
|
||||
status_exit_code = status >> 8
|
||||
if status_exit_code == 1:
|
||||
exit_code = 1
|
||||
elif status_exit_code:
|
||||
exit_code = 2
|
||||
|
||||
|
||||
def filterf(fn1, fn2):
|
||||
def filterf(fn1: str, fn2: str) -> None:
|
||||
# Remove hex numbers before diffing
|
||||
with open(fn1, "r", encoding="utf8") as fh1:
|
||||
with open(fn2, "w", encoding="utf8") as fh2:
|
||||
@@ -107,7 +107,9 @@ parser = argparse.ArgumentParser(
|
||||
|
||||
Verilator_difftree is used for debugging Verilator tree output files.
|
||||
It performs a diff between two files, or all files common between two
|
||||
directories, ignoring irrelevant pointer differences.""",
|
||||
directories, ignoring irrelevant pointer differences.
|
||||
|
||||
Exit status is 0 if inputs are the same, 1 if different, 2 if trouble.""",
|
||||
epilog="""Copyright 2005-2025 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
|
||||
@@ -124,6 +126,7 @@ parser.add_argument('fileb', help='input file b to diff')
|
||||
|
||||
Args = parser.parse_args()
|
||||
diff(Args.filea, Args.fileb)
|
||||
sys.exit(exit_code)
|
||||
|
||||
######################################################################
|
||||
# Local Variables:
|
||||
|
||||
+19
-10
@@ -33,7 +33,7 @@ ThreadScheduleWaitIntervals = [] # list of (start, tick, ecpu) pairs
|
||||
######################################################################
|
||||
|
||||
|
||||
def read_data(filename):
|
||||
def read_data(filename: str) -> None:
|
||||
with open(filename, "r", encoding="utf8") as fh:
|
||||
re_thread = re.compile(r'^VLPROFTHREAD (\d+)$')
|
||||
re_record = re.compile(r'^VLPROFEXEC (\S+) (\d+)(.*)$')
|
||||
@@ -51,6 +51,7 @@ def read_data(filename):
|
||||
re_proc_dat = re.compile(r'VLPROFPROC ([a-z_ ]+)\s*:\s*(.*)$')
|
||||
cpu = None
|
||||
thread = 0
|
||||
thread_last_ecpu = None
|
||||
|
||||
global LongestVcdStrValueLength
|
||||
global ExecGraphTime
|
||||
@@ -109,9 +110,13 @@ def read_data(filename):
|
||||
tick)
|
||||
elif kind == "THREAD_SCHEDULE_WAIT_BEGIN":
|
||||
ecpu = int(re_payload_wait.match(payload).groups()[0])
|
||||
thread_last_ecpu = ecpu
|
||||
ThreadScheduleWait[ecpu].append(tick)
|
||||
elif kind == "THREAD_SCHEDULE_WAIT_END":
|
||||
ecpu = int(re_payload_wait.match(payload).groups()[0])
|
||||
# Might have ended on different CPU then we got THREAD_SCHEDULE_WAIT_BEGIN
|
||||
assert thread_last_ecpu is not None, "THREAD_SCHEDULE_WAIT_END without BEGIN"
|
||||
ecpu = thread_last_ecpu
|
||||
thread_last_ecpu = None
|
||||
start = ThreadScheduleWait[ecpu].pop()
|
||||
WaitingTime += tick - start
|
||||
ThreadScheduleWaitIntervals.append((start, tick, ecpu))
|
||||
@@ -166,7 +171,7 @@ def re_match_result(regexp, line, result_to):
|
||||
######################################################################
|
||||
|
||||
|
||||
def report():
|
||||
def report() -> None:
|
||||
print("Verilator Gantt report")
|
||||
|
||||
print("\nArgument settings:")
|
||||
@@ -215,12 +220,12 @@ def report():
|
||||
print()
|
||||
|
||||
|
||||
def report_numa():
|
||||
def report_numa() -> None:
|
||||
print("\nNUMA assignment:")
|
||||
print(" NUMA status = %s" % Global['info']['numa'])
|
||||
|
||||
|
||||
def report_mtasks():
|
||||
def report_mtasks() -> None:
|
||||
if not Mtasks:
|
||||
return
|
||||
|
||||
@@ -238,6 +243,7 @@ def report_mtasks():
|
||||
thread_mtask_time = collections.defaultdict(lambda: 0)
|
||||
long_mtask_time = 0
|
||||
long_mtask = None
|
||||
long_mtask_hier_block = None
|
||||
predict_mtask_time = 0
|
||||
predict_elapsed = 0
|
||||
for (hier_block, mtask_id) in Mtasks:
|
||||
@@ -279,6 +285,9 @@ def report_mtasks():
|
||||
max_p2e = -1000000
|
||||
max_mtask = None
|
||||
|
||||
min_hier_block = None
|
||||
max_hier_block = None
|
||||
|
||||
for (hier_block, mtask_id) in sorted(Mtasks.keys()):
|
||||
mtask = Mtasks[(hier_block, mtask_id)]
|
||||
if mtask['elapsed'] > 0:
|
||||
@@ -333,7 +342,7 @@ def report_mtasks():
|
||||
print(" e ^ stddev = %0.3f" % math.exp(stddev))
|
||||
|
||||
|
||||
def report_cpus():
|
||||
def report_cpus() -> None:
|
||||
print("\nCPU info:")
|
||||
|
||||
Global['cpu_sockets'] = collections.defaultdict(lambda: 0)
|
||||
@@ -368,14 +377,14 @@ def report_cpus():
|
||||
Global['cpu_socket_cores_warning'] = True
|
||||
|
||||
|
||||
def report_sections():
|
||||
def report_sections() -> None:
|
||||
for thread, section in Sections.items():
|
||||
if section:
|
||||
print(f"\nSection profile for thread {thread}:")
|
||||
report_section(section)
|
||||
|
||||
|
||||
def report_section(section):
|
||||
def report_section(section) -> None:
|
||||
totalTime = collections.defaultdict(lambda: 0)
|
||||
selfTime = collections.defaultdict(lambda: 0)
|
||||
|
||||
@@ -427,7 +436,7 @@ def report_section(section):
|
||||
######################################################################
|
||||
|
||||
|
||||
def write_vcd(filename):
|
||||
def write_vcd(filename: str) -> None:
|
||||
print("Writing %s" % filename)
|
||||
with open(filename, "w", encoding="utf8") as fh:
|
||||
# dict of dicts of hierarchy elements/signal name -> (code, width)
|
||||
@@ -613,7 +622,7 @@ SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
|
||||
|
||||
parser.add_argument('--debug', action='store_true', help='enable debug')
|
||||
parser.add_argument('--no-vcd', help='disable creating vcd', action='store_true')
|
||||
parser.add_argument('--vcd', help='filename for vcd outpue', default='profile_exec.vcd')
|
||||
parser.add_argument('--vcd', help='filename for vcd output', default='profile_exec.vcd')
|
||||
parser.add_argument('filename',
|
||||
help='input profile_exec.dat filename to process',
|
||||
default='profile_exec.dat')
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# mypy: disallow-untyped-defs
|
||||
# pylint: disable=C0114,C0209
|
||||
#
|
||||
# Copyright 2003-2025 by Wilson Snyder. This program is free software; you
|
||||
|
||||
@@ -10,7 +10,7 @@ import re
|
||||
######################################################################
|
||||
|
||||
|
||||
def profcfunc(filename):
|
||||
def profcfunc(filename: str) -> None:
|
||||
funcs = {}
|
||||
|
||||
with open(filename, "r", encoding="utf8") as fh:
|
||||
@@ -26,7 +26,7 @@ def profcfunc(filename):
|
||||
calls = float(match.group(3))
|
||||
func = match.group(4)
|
||||
if func not in funcs:
|
||||
funcs[func] = {'pct': 0, 'sec': 0, 'calls': 0}
|
||||
funcs[func] = {'pct': 0.0, 'sec': 0.0, 'calls': 0}
|
||||
funcs[func]['pct'] += pct
|
||||
funcs[func]['sec'] += sec
|
||||
funcs[func]['calls'] += calls
|
||||
@@ -150,7 +150,7 @@ def profcfunc(filename):
|
||||
print((" time seconds seconds calls %-" + str(design_width) +
|
||||
"s type filename and line number") % "design")
|
||||
|
||||
cume = 0
|
||||
cume = 0.0
|
||||
for func in sorted(vfuncs.keys(), key=lambda f: vfuncs[f]['sec'], reverse=True):
|
||||
cume += vfuncs[func]['sec']
|
||||
print(("%6.2f %9.2f %8.2f %10d %-" + str(design_width) + "s %s") %
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# DESCRIPTION: Verilator: CI ccache maintenance
|
||||
#
|
||||
# Copyright 2020 by Geza Lore. 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
|
||||
|
||||
################################################################################
|
||||
# This script is run in 'before_script', once ccache has been set up.
|
||||
################################################################################
|
||||
|
||||
set -e
|
||||
set -x
|
||||
|
||||
# Show version
|
||||
ccache --version
|
||||
|
||||
# Flush ccache if requested in commit message
|
||||
COMMIT="${CI_PULL_REQUEST_SHA:-$CI_COMMIT}"
|
||||
if git log --format=%B -n 1 "$COMMIT" | grep -q -i '\[CI\s\+ccache\s\+clear\]'; then
|
||||
echo "Flushing ccache due to commit message"
|
||||
ccache -C
|
||||
fi
|
||||
|
||||
# Dump stats, then zero stats
|
||||
# 22.04: ccache -s -v -z
|
||||
ccache -s -z
|
||||
+9
-2
@@ -37,6 +37,13 @@ else
|
||||
fatal "Unknown os: '$CI_OS_NAME'"
|
||||
fi
|
||||
|
||||
if [ "$CI_OS_NAME" = "linux" ]; then
|
||||
# Avoid slow "processing triggers for man db"
|
||||
echo "path-exclude /usr/share/doc/*" | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
|
||||
echo "path-exclude /usr/share/man/*" | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
|
||||
echo "path-exclude /usr/share/info/*" | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
|
||||
fi
|
||||
|
||||
install-vcddiff() {
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
git clone https://github.com/veripool/vcddiff "$TMP_DIR"
|
||||
@@ -70,7 +77,7 @@ if [ "$CI_BUILD_STAGE_NAME" = "build" ]; then
|
||||
fi
|
||||
elif [ "$CI_OS_NAME" = "osx" ]; then
|
||||
brew update
|
||||
brew install ccache perl gperftools
|
||||
brew install ccache perl gperftools autoconf bison flex help2man
|
||||
elif [ "$CI_OS_NAME" = "freebsd" ]; then
|
||||
sudo pkg install -y autoconf bison ccache gmake perl5
|
||||
else
|
||||
@@ -78,7 +85,7 @@ if [ "$CI_BUILD_STAGE_NAME" = "build" ]; then
|
||||
fi
|
||||
|
||||
if [ -n "$CCACHE_DIR" ]; then
|
||||
mkdir -p "$CCACHE_DIR" && ./ci/ci-ccache-maint.bash
|
||||
mkdir -p "$CCACHE_DIR"
|
||||
fi
|
||||
elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
|
||||
##############################################################################
|
||||
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env bash
|
||||
# DESCRIPTION: Verilator: CI script for 'pages.yml', notifies PRs
|
||||
#
|
||||
# Copyright 2025 by Geza Lore. 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
|
||||
|
||||
# Notify PRs via comment that their coverage reports are available
|
||||
|
||||
# Get the current repo URL - might differ on a fork
|
||||
readonly REPO_URL=$(gh repo view --json url --jq .url)
|
||||
|
||||
# Create artifacts root directory
|
||||
ARTIFACTS_ROOT=artifacts
|
||||
mkdir -p ${ARTIFACTS_ROOT}
|
||||
|
||||
for RUN_ID in ${COVERAGE_PR_RUN_IDS//,/ }; do
|
||||
echo "@@@ Processing run ${RUN_ID}"
|
||||
|
||||
# Create workflow artifacts directory
|
||||
ARTIFACTS_DIR=${ARTIFACTS_ROOT}/${RUN_ID}
|
||||
mkdir -p ${ARTIFACTS_DIR}
|
||||
|
||||
# Download artifact of this run, if exists
|
||||
gh run download ${RUN_ID} --name coverage-pr-notification --dir ${ARTIFACTS_DIR} || true
|
||||
ls -lsha ${ARTIFACTS_DIR}
|
||||
|
||||
# Move on if no notification is required
|
||||
if [ ! -f ${ARTIFACTS_DIR}/pr-number.txt ]; then
|
||||
echo "No notification found"
|
||||
continue
|
||||
fi
|
||||
echo "Posting notification found"
|
||||
|
||||
cat ${ARTIFACTS_DIR}/body.txt
|
||||
gh pr comment $(cat ${ARTIFACTS_DIR}/pr-number.txt) --body-file ${ARTIFACTS_DIR}/body.txt
|
||||
|
||||
# Get the artifact ID
|
||||
ARTIFACT_ID=$(gh api "repos/{owner}/{repo}/actions/runs/${RUN_ID}/artifacts" --jq '.artifacts[] | select(.name == "coverage-pr-notification") | .id')
|
||||
|
||||
# Delete it, so we only notify once
|
||||
gh api --method DELETE "repos/{owner}/{repo}/actions/artifacts/${ARTIFACT_ID}"
|
||||
done
|
||||
Executable
+171
@@ -0,0 +1,171 @@
|
||||
#!/usr/bin/env bash
|
||||
# DESCRIPTION: Verilator: CI script for 'pages.yml', builds the GitHub Pages
|
||||
#
|
||||
# Copyright 2025 by Geza Lore. 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
|
||||
|
||||
# This scipt build the content of the GitHub Pages for the repository.
|
||||
# Currently this only hosts code coverage reports, but it would be possible to
|
||||
# add any other contents to the page in parallel here.
|
||||
|
||||
# Developer note: You should be able to run this script in your local checkout
|
||||
# if you have GitHub CLI (command 'gh') setup, authenticated ('gh auth login'),
|
||||
# and have set a default repository ('gh repo set-default').
|
||||
|
||||
# Create pages root directory. The contents of this directory will be deployed
|
||||
# and served via GitHubPages
|
||||
readonly PAGES_ROOT=pages
|
||||
mkdir -p ${PAGES_ROOT}
|
||||
|
||||
# Get the current repo URL - might differ on a fork
|
||||
readonly REPO_URL=$(gh repo view --json url --jq .url)
|
||||
|
||||
# Set GITHUB_OUTPUT when run locally for testing
|
||||
if [[ -z "$GITHUB_OUTPUT" ]]; then
|
||||
GITHUB_OUTPUT=github-output.txt
|
||||
fi
|
||||
|
||||
# Populates ${PAGES_ROOT}/coverage-reports
|
||||
compile_coverage_reports() {
|
||||
# We will process all runs up to and including this date. This is chosen to be
|
||||
# slightly less than the artifact retention period for simplicity.
|
||||
local OLDEST=$(date --date="28 days ago" --iso-8601=date)
|
||||
|
||||
# Gather all coverage workflow runs within the time window
|
||||
gh run list -w coverage.yml --limit 1000 --created ">=${OLDEST}" --json "databaseId,event,status,conclusion,createdAt,number" > recentRuns.json
|
||||
echo @@@ Recent runs:
|
||||
jq "." recentRuns.json
|
||||
|
||||
# Select completd runs that were not cancelled or skipped, sort by descending run number
|
||||
jq 'sort_by(-.number) | map(select(.status == "completed" and (.conclusion == "success" or .conclusion == "failure")))' recentRuns.json > completedRuns.json
|
||||
echo @@@ Completed with success or failure:
|
||||
jq "." completedRuns.json
|
||||
|
||||
# Create artifacts root directory
|
||||
local ARTIFACTS_ROOT=artifacts
|
||||
mkdir -p ${ARTIFACTS_ROOT}
|
||||
|
||||
# Create coverage reports root directory
|
||||
local COVERAGE_ROOT=${PAGES_ROOT}/coverage-reports
|
||||
mkdir -p ${COVERAGE_ROOT}
|
||||
|
||||
# Create index page contents fragment
|
||||
local CONTENTS=contents.tmp
|
||||
echo > ${CONTENTS}
|
||||
|
||||
# Run IDs of PR jobs processed
|
||||
local PR_RUN_IDS=""
|
||||
|
||||
# Iterate over all unique event types that triggered the workflows
|
||||
for EVENT in $(jq -r 'map(.event) | sort | unique | .[]' completedRuns.json); do
|
||||
echo "@@@ Processing '${EVENT}' runs"
|
||||
|
||||
# Emit section header if a report exists with this event type
|
||||
EMIT_SECTION_HEADER=1
|
||||
|
||||
# For each worfklow run that was triggered by this event type
|
||||
for RUN_ID in $(jq ".[] | select(.event == \"${EVENT}\") |.databaseId" completedRuns.json); do
|
||||
echo "@@@ Processing run ${RUN_ID}"
|
||||
|
||||
# Extract the info of this run
|
||||
jq ".[] | select(.databaseId == $RUN_ID)" completedRuns.json > workflow.json
|
||||
jq "." workflow.json
|
||||
|
||||
# Record run ID of PR job
|
||||
if [[ $EVENT == "pull_request" ]]; then
|
||||
if [[ -z "$PR_RUN_IDS" ]]; then
|
||||
PR_RUN_IDS="$RUN_ID"
|
||||
else
|
||||
PR_RUN_IDS="$PR_RUN_IDS,$RUN_ID"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Create workflow artifacts directory
|
||||
local ARTIFACTS_DIR=${ARTIFACTS_ROOT}/${RUN_ID}
|
||||
mkdir -p ${ARTIFACTS_DIR}
|
||||
|
||||
# Download artifacts of this run, if exists
|
||||
gh run download ${RUN_ID} --name coverage-report --dir ${ARTIFACTS_DIR} || true
|
||||
ls -lsha ${ARTIFACTS_DIR}
|
||||
|
||||
# Move on if no coverage report is available
|
||||
if [ ! -d ${ARTIFACTS_DIR}/report ]; then
|
||||
echo "No coverage report found"
|
||||
continue
|
||||
fi
|
||||
echo "Coverage report found"
|
||||
|
||||
# Emit section header
|
||||
if [[ -n $EMIT_SECTION_HEADER ]]; then
|
||||
unset EMIT_SECTION_HEADER
|
||||
if [[ $EVENT == "pull_request" ]]; then
|
||||
echo "<h4>Patch coverage reports for '${EVENT}' runs:</h4>" >> ${CONTENTS}
|
||||
else
|
||||
echo "<h4>Code coverage reports for '${EVENT}' runs:</h4>" >> ${CONTENTS}
|
||||
fi
|
||||
fi
|
||||
|
||||
# Create pages subdirectory
|
||||
mv ${ARTIFACTS_DIR}/report ${COVERAGE_ROOT}/${RUN_ID}
|
||||
|
||||
# Add index page content
|
||||
local WORKFLOW_CREATED=$(jq -r '.createdAt' workflow.json)
|
||||
local WOFKRLOW_NUMBER=$(jq -r '.number' workflow.json)
|
||||
cat >> ${CONTENTS} <<CONTENTS_TEMPLATE
|
||||
Run <a href="${RUN_ID}/index.html">#${WOFKRLOW_NUMBER}</a>
|
||||
| GitHub: <a href="${REPO_URL}/actions/runs/${RUN_ID}">${RUN_ID}</a>
|
||||
| started at: ${WORKFLOW_CREATED}
|
||||
CONTENTS_TEMPLATE
|
||||
if [ -e ${ARTIFACTS_DIR}/pr-number.txt ]; then
|
||||
local PRNUMBER=$(cat ${ARTIFACTS_DIR}/pr-number.txt)
|
||||
echo " | Pull request: <a href=\"${REPO_URL}/pull/${PRNUMBER}\">#${PRNUMBER}</a>" >> ${CONTENTS}
|
||||
fi
|
||||
echo "<br>" >> ${CONTENTS}
|
||||
done
|
||||
|
||||
# Section break
|
||||
if [[ -z "$EMIT_SECTION_HEADER" ]]; then
|
||||
echo "<hr>" >> ${CONTENTS}
|
||||
fi
|
||||
done
|
||||
|
||||
# Write coverage report index.html
|
||||
cat > ${COVERAGE_ROOT}/index.html <<INDEX_TEMPLATE
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Verilator CI coverage reports</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: courier, serif;
|
||||
background-color: #f3f3f3;
|
||||
a {
|
||||
color: #008fd7;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
$(cat ${CONTENTS})
|
||||
<h4>Assembled $(date --iso-8601=minutes --utc)</h1>
|
||||
<body>
|
||||
|
||||
</html>
|
||||
INDEX_TEMPLATE
|
||||
|
||||
# Report size
|
||||
du -shc ${COVERAGE_ROOT}/*
|
||||
|
||||
# Set output
|
||||
echo "coverage-pr-run-ids=${PR_RUN_IDS}" >> $GITHUB_OUTPUT
|
||||
}
|
||||
|
||||
# Compilie coverage reports
|
||||
compile_coverage_reports;
|
||||
|
||||
# You can build any other content here to be put under ${PAGES_ROOT}
|
||||
+48
-48
@@ -27,6 +27,8 @@ if [ "$CI_OS_NAME" = "linux" ]; then
|
||||
elif [ "$CI_OS_NAME" = "osx" ]; then
|
||||
export MAKE=make
|
||||
NPROC=$(sysctl -n hw.logicalcpu)
|
||||
# Disable ccache, doesn't always work in GitHub Actions
|
||||
export OBJCACHE=
|
||||
elif [ "$CI_OS_NAME" = "freebsd" ]; then
|
||||
export MAKE=gmake
|
||||
NPROC=$(sysctl -n hw.ncpu)
|
||||
@@ -39,23 +41,27 @@ if [ "$CI_BUILD_STAGE_NAME" = "build" ]; then
|
||||
##############################################################################
|
||||
# Build verilator
|
||||
|
||||
if [ "$COVERAGE" != 1 ]; then
|
||||
autoconf
|
||||
./configure --enable-longtests --enable-ccwarn --prefix="$INSTALL_DIR"
|
||||
ccache -z
|
||||
"$MAKE" -j "$NPROC" -k
|
||||
# 22.04: ccache -s -v
|
||||
ccache -s
|
||||
if [ "$CI_OS_NAME" = "osx" ]; then
|
||||
file bin/verilator_bin
|
||||
file bin/verilator_bin_dbg
|
||||
md5 bin/verilator_bin
|
||||
md5 bin/verilator_bin_dbg
|
||||
stat bin/verilator_bin
|
||||
stat bin/verilator_bin_dbg
|
||||
fi
|
||||
else
|
||||
nodist/code_coverage --stages 0-2
|
||||
autoconf
|
||||
CONFIGURE_ARGS="--enable-longtests --enable-ccwarn"
|
||||
if [ "$CI_DEV_ASAN" = 1 ]; then
|
||||
CONFIGURE_ARGS="$CONFIGURE_ARGS --enable-dev-asan"
|
||||
CXX="$CXX -DVL_LEAK_CHECKS"
|
||||
fi
|
||||
if [ "$CI_DEV_GCOV" = 1 ]; then
|
||||
CONFIGURE_ARGS="$CONFIGURE_ARGS --enable-dev-gcov"
|
||||
fi
|
||||
./configure $CONFIGURE_ARGS --prefix="$INSTALL_DIR"
|
||||
ccache -z
|
||||
"$MAKE" -j "$NPROC" -k
|
||||
# 22.04: ccache -s -v
|
||||
ccache -s
|
||||
if [ "$CI_OS_NAME" = "osx" ]; then
|
||||
file bin/verilator_bin
|
||||
file bin/verilator_bin_dbg
|
||||
md5 bin/verilator_bin
|
||||
md5 bin/verilator_bin_dbg
|
||||
stat bin/verilator_bin
|
||||
stat bin/verilator_bin_dbg
|
||||
fi
|
||||
elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
|
||||
##############################################################################
|
||||
@@ -86,9 +92,6 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
|
||||
export VERILATOR_TEST_NO_GPROF=1 # gprof is a bit different on FreeBSD, disable
|
||||
fi
|
||||
|
||||
# Run sanitize on Ubuntu 22.04 only
|
||||
( [[ "$CI_RUNS_ON" =~ 'ubuntu-22.04' ]] || [[ "$CI_RUNS_ON" =~ 'ubuntu-24.04' ]] ) && sanitize='--sanitize' || sanitize=''
|
||||
|
||||
TEST_REGRESS=test_regress
|
||||
if [ "$CI_RELOC" == 1 ]; then
|
||||
# Testing that the installation is relocatable.
|
||||
@@ -109,16 +112,16 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
|
||||
ccache -z
|
||||
case $TESTS in
|
||||
dist-vlt-0)
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean $sanitize" DRIVER_HASHSET=--hashset=0/4
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean" DRIVER_HASHSET=--hashset=0/4
|
||||
;;
|
||||
dist-vlt-1)
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean $sanitize" DRIVER_HASHSET=--hashset=1/4
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean" DRIVER_HASHSET=--hashset=1/4
|
||||
;;
|
||||
dist-vlt-2)
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean $sanitize" DRIVER_HASHSET=--hashset=2/4
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean" DRIVER_HASHSET=--hashset=2/4
|
||||
;;
|
||||
dist-vlt-3)
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean $sanitize" DRIVER_HASHSET=--hashset=3/4
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean" DRIVER_HASHSET=--hashset=3/4
|
||||
;;
|
||||
vltmt-0)
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt --driver-clean" DRIVER_HASHSET=--hashset=0/3
|
||||
@@ -129,71 +132,68 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
|
||||
vltmt-2)
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt --driver-clean" DRIVER_HASHSET=--hashset=2/3
|
||||
;;
|
||||
coverage-all)
|
||||
nodist/code_coverage --stages 1-
|
||||
;;
|
||||
coverage-dist)
|
||||
nodist/code_coverage --stages 1- --scenarios=--dist
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist"
|
||||
;;
|
||||
coverage-vlt-0)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vlt --hashset=0/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vlt" DRIVER_HASHSET=--hashset=0/10
|
||||
;;
|
||||
coverage-vlt-1)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vlt --hashset=1/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vlt" DRIVER_HASHSET=--hashset=1/10
|
||||
;;
|
||||
coverage-vlt-2)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vlt --hashset=2/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vlt" DRIVER_HASHSET=--hashset=2/10
|
||||
;;
|
||||
coverage-vlt-3)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vlt --hashset=3/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vlt" DRIVER_HASHSET=--hashset=3/10
|
||||
;;
|
||||
coverage-vlt-4)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vlt --hashset=4/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vlt" DRIVER_HASHSET=--hashset=4/10
|
||||
;;
|
||||
coverage-vlt-5)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vlt --hashset=5/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vlt" DRIVER_HASHSET=--hashset=5/10
|
||||
;;
|
||||
coverage-vlt-6)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vlt --hashset=6/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vlt" DRIVER_HASHSET=--hashset=6/10
|
||||
;;
|
||||
coverage-vlt-7)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vlt --hashset=7/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vlt" DRIVER_HASHSET=--hashset=7/10
|
||||
;;
|
||||
coverage-vlt-8)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vlt --hashset=8/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vlt" DRIVER_HASHSET=--hashset=8/10
|
||||
;;
|
||||
coverage-vlt-9)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vlt --hashset=9/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vlt" DRIVER_HASHSET=--hashset=9/10
|
||||
;;
|
||||
coverage-vltmt-0)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vltmt --hashset=0/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt" DRIVER_HASHSET=--hashset=0/10
|
||||
;;
|
||||
coverage-vltmt-1)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vltmt --hashset=1/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt" DRIVER_HASHSET=--hashset=1/10
|
||||
;;
|
||||
coverage-vltmt-2)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vltmt --hashset=2/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt" DRIVER_HASHSET=--hashset=2/10
|
||||
;;
|
||||
coverage-vltmt-3)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vltmt --hashset=3/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt" DRIVER_HASHSET=--hashset=3/10
|
||||
;;
|
||||
coverage-vltmt-4)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vltmt --hashset=4/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt" DRIVER_HASHSET=--hashset=4/10
|
||||
;;
|
||||
coverage-vltmt-5)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vltmt --hashset=5/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt" DRIVER_HASHSET=--hashset=5/10
|
||||
;;
|
||||
coverage-vltmt-6)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vltmt --hashset=6/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt" DRIVER_HASHSET=--hashset=6/10
|
||||
;;
|
||||
coverage-vltmt-7)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vltmt --hashset=7/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt" DRIVER_HASHSET=--hashset=7/10
|
||||
;;
|
||||
coverage-vltmt-8)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vltmt --hashset=8/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt" DRIVER_HASHSET=--hashset=8/10
|
||||
;;
|
||||
coverage-vltmt-9)
|
||||
nodist/code_coverage --stages 1- --scenarios=--vltmt --hashset=9/10
|
||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt" DRIVER_HASHSET=--hashset=9/10
|
||||
;;
|
||||
*)
|
||||
fatal "Unknown test: $TESTS"
|
||||
|
||||
BIN
Binary file not shown.
@@ -6,7 +6,7 @@
|
||||
# Version 2.0.
|
||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||
|
||||
FROM ubuntu:22.04
|
||||
FROM ubuntu:24.04
|
||||
|
||||
# Create the user
|
||||
RUN groupadd verilator \
|
||||
@@ -36,12 +36,14 @@ RUN apt-get update \
|
||||
help2man \
|
||||
libfl2 \
|
||||
libfl-dev \
|
||||
libclang-rt-18-dev \
|
||||
libgoogle-perftools-dev \
|
||||
libsystemc \
|
||||
libsystemc-dev \
|
||||
numactl \
|
||||
perl \
|
||||
python3 \
|
||||
python3-distro \
|
||||
wget \
|
||||
z3 \
|
||||
zlib1g \
|
||||
|
||||
@@ -13,7 +13,7 @@ Verilator build. It uses the following parameters:
|
||||
|
||||
- Source revision (default: master)
|
||||
|
||||
- Compiler (GCC 10.3.0, clang 10.0.0, default: 10.3.0)
|
||||
- Compiler (GCC 13.3.0, clang 18.1.3, default: 13.3.0)
|
||||
|
||||
The container is published as ``verilator/verilator-buildenv`` on `docker
|
||||
hub
|
||||
@@ -31,18 +31,18 @@ To also run tests:
|
||||
|
||||
docker run -ti verilator/verilator-buildenv test
|
||||
|
||||
To change the compiler:
|
||||
To change the compiler use the `-e` switch to pass environment variables:
|
||||
|
||||
::
|
||||
|
||||
docker run -ti -e CC=clang-10 -e CXX=clang++-10 verilator/verilator-buildenv test
|
||||
docker run -ti -e CXX=clang++-18 verilator/verilator-buildenv test
|
||||
|
||||
The tests that involve gdb are not working due to security restrictions.
|
||||
To run those too:
|
||||
The tests, that involve numactl are not working due to security restrictions.
|
||||
To run those too, add the CAP_SYS_NICE capability during the start of the container:
|
||||
|
||||
::
|
||||
|
||||
docker run -ti -e CC=clang-10 -e CXX=clang++-10 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined verilator/verilator-buildenv test
|
||||
docker run -ti --cap-add=CAP_SYS_NICE verilator/verilator-buildenv test
|
||||
|
||||
Rather then building using a remote git repository you may prefer to use a
|
||||
working copy on the local filesystem. Mount the local working copy path as
|
||||
@@ -52,7 +52,7 @@ top of a repository:
|
||||
|
||||
::
|
||||
|
||||
docker run -ti -v ${PWD}:/tmp/repo -e REPO=/tmp/repo -e REV=`git rev-parse --short HEAD` --cap-add=SYS_PTRACE --security-opt seccomp=unconfined verilator/verilator-buildenv test
|
||||
docker run -ti -v ${PWD}:/tmp/repo -e REPO=/tmp/repo -e REV=`git rev-parse --short HEAD` verilator/verilator-buildenv test
|
||||
|
||||
|
||||
Rebuilding
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
|
||||
: "${REPO:=https://github.com/verilator/verilator}"
|
||||
: "${REV:=master}"
|
||||
: "${CC:=gcc}"
|
||||
: "${CXX:=g++}"
|
||||
|
||||
SRCS=$PWD/verilator
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
# Version 2.0.
|
||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||
|
||||
FROM ubuntu:22.04
|
||||
FROM ubuntu:24.04
|
||||
|
||||
RUN apt-get update \
|
||||
&& DEBIAN_FRONTEND=noninteractive \
|
||||
@@ -48,7 +48,8 @@ RUN git clone "${REPO}" verilator && \
|
||||
make && \
|
||||
make install && \
|
||||
cd .. && \
|
||||
rm -r verilator
|
||||
rm -r verilator && \
|
||||
ccache -C
|
||||
|
||||
COPY verilator-wrap.sh /usr/local/bin/verilator-wrap.sh
|
||||
|
||||
|
||||
-36
@@ -1,36 +0,0 @@
|
||||
---
|
||||
# DESCRIPTION: codecov.io config
|
||||
#
|
||||
# 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
|
||||
# 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
|
||||
####################
|
||||
# Validate:
|
||||
# curl --data-binary @codecov.yml https://codecov.io/validate
|
||||
#
|
||||
codecov:
|
||||
require_ci_to_pass: false
|
||||
coverage:
|
||||
precision: 2
|
||||
round: down
|
||||
range: 50...100
|
||||
ignore:
|
||||
- "ci" #
|
||||
- "docs" #
|
||||
- "examples" #
|
||||
- "include/gtkwave" #
|
||||
- "include/vltstd" #
|
||||
- "test_regress" #
|
||||
parsers:
|
||||
gcov:
|
||||
branch_detection:
|
||||
conditional: true
|
||||
loop: true
|
||||
method: false
|
||||
macro: false
|
||||
comment:
|
||||
layout: "reach,diff,flags,tree"
|
||||
behavior: default
|
||||
require_changes: true
|
||||
+79
-34
@@ -7,10 +7,11 @@
|
||||
|
||||
# When releasing, also update header of Changes file, and CMakeLists.txt,
|
||||
# and commit using "devel release" or "Version bump" message
|
||||
# Then 'make distclean' 'autoconf' './configure' 'make' 'make test'
|
||||
# Then 'make maintainer-dist'
|
||||
#AC_INIT([Verilator],[#.### YYYY-MM-DD])
|
||||
#AC_INIT([Verilator],[#.### devel])
|
||||
AC_INIT([Verilator],[5.036 2025-04-27],
|
||||
AC_INIT([Verilator],[5.042 2025-11-02],
|
||||
[https://verilator.org],
|
||||
[verilator],[https://verilator.org])
|
||||
|
||||
@@ -56,6 +57,22 @@ AC_ARG_ENABLE([partial-static],
|
||||
CFG_ENABLE_PARTIAL_STATIC=yes)
|
||||
AC_MSG_RESULT($CFG_ENABLE_PARTIAL_STATIC)
|
||||
|
||||
# Flag to enable compiling with AddressSanitizer
|
||||
AC_MSG_CHECKING(whether to use AddressSanitizer)
|
||||
AC_ARG_ENABLE([dev-asan],
|
||||
[AS_HELP_STRING([--enable-dev-asan],
|
||||
[Enable compiling Verilator with ASAN
|
||||
AddressSanitizer for memory error detection.
|
||||
This disables tcmalloc. Does not affect
|
||||
Verilated models using ASAN.])],
|
||||
[case "${enableval}" in
|
||||
yes) CFG_WITH_DEV_ASAN=yes ;;
|
||||
no) CFG_WITH_DEV_ASAN=no ;;
|
||||
*) AC_MSG_ERROR([bad value '${enableval}' for --enable-dev-asan]) ;;
|
||||
esac],
|
||||
CFG_WITH_DEV_ASAN=no)
|
||||
AC_MSG_RESULT($CFG_WITH_DEV_ASAN)
|
||||
|
||||
# Flag to enable linking Verilator with tcmalloc if available
|
||||
AC_MSG_CHECKING(whether to use tcmalloc)
|
||||
AC_ARG_ENABLE([tcmalloc],
|
||||
@@ -68,21 +85,27 @@ AC_ARG_ENABLE([tcmalloc],
|
||||
*) AC_MSG_ERROR([bad value '${enableval}' for --enable-tcmalloc]) ;;
|
||||
esac],
|
||||
[CFG_WITH_TCMALLOC=check;])
|
||||
AC_MSG_RESULT($CFG_WITH_TCMALLOC)
|
||||
if test "$CFG_WITH_DEV_ASAN" = "yes"; then
|
||||
CFG_WITH_TCMALLOC=no
|
||||
AC_MSG_RESULT("disabled by --enable-dev-asan")
|
||||
else
|
||||
AC_MSG_RESULT($CFG_WITH_TCMALLOC)
|
||||
fi
|
||||
|
||||
# Flag to enable coverage build
|
||||
AC_MSG_CHECKING(whether to build for coverage collection)
|
||||
AC_ARG_ENABLE([coverage],
|
||||
[AS_HELP_STRING([--enable-coverage],
|
||||
[Build Verilator for code coverage collection.
|
||||
# Flag to enable code coverage build with gcov
|
||||
AC_MSG_CHECKING(whether to build for gcov code coverage collection)
|
||||
AC_ARG_ENABLE([dev-gcov],
|
||||
[AS_HELP_STRING([--enable-dev-gcov],
|
||||
[Build Verilator for code coverage collection with gcov.
|
||||
For developers only.])],
|
||||
[case "${enableval}" in
|
||||
yes) CFG_ENABLE_COVERAGE=yes ;;
|
||||
no) CFG_ENABLE_COVERAGE=no ;;
|
||||
*) AC_MSG_ERROR([bad value '${enableval}' for --enable-coverage]) ;;
|
||||
yes) CFG_WITH_DEV_GCOV=yes ;;
|
||||
no) CFG_WITH_DEV_GCOV=no ;;
|
||||
*) AC_MSG_ERROR([bad value '${enableval}' for --enable-dev-gcov]) ;;
|
||||
esac],
|
||||
CFG_ENABLE_COVERAGE=no)
|
||||
AC_MSG_RESULT($CFG_ENABLE_COVERAGE)
|
||||
CFG_WITH_DEV_GCOV=no)
|
||||
AC_SUBST(CFG_WITH_DEV_GCOV)
|
||||
AC_MSG_RESULT($CFG_WITH_DEV_GCOV)
|
||||
|
||||
# Special Substitutions - CFG_WITH_DEFENV
|
||||
AC_MSG_CHECKING(whether to use hardcoded paths)
|
||||
@@ -177,7 +200,7 @@ AC_PROG_INSTALL
|
||||
|
||||
AC_LANG_PUSH(C++)
|
||||
CFG_CXX_VERSION=`$CXX --version | head -1`
|
||||
AC_MSG_RESULT([compiler $CXX --version = $CFG_CXX_VERSION])
|
||||
AC_MSG_RESULT([compiler version... $CXX --version = $CFG_CXX_VERSION])
|
||||
AC_SUBST(CFG_CXX_VERSION)
|
||||
|
||||
AC_MSG_CHECKING([that C++ compiler can compile simple program])
|
||||
@@ -377,7 +400,7 @@ AC_DEFUN([_MY_LDLIBS_CHECK_OPT],
|
||||
])
|
||||
|
||||
# Add the coverage flags early as they influence later checks.
|
||||
if test "$CFG_ENABLE_COVERAGE" = "yes"; then
|
||||
if test "$CFG_WITH_DEV_GCOV" = "yes"; then
|
||||
_MY_CXX_CHECK_OPT(CXX,--coverage)
|
||||
# Otherwise inline may not show as uncovered
|
||||
# If we use this then e.g. verilated.h functions properly show up
|
||||
@@ -389,11 +412,19 @@ if test "$CFG_ENABLE_COVERAGE" = "yes"; then
|
||||
# _MY_CXX_CHECK_OPT(CXX,-fkeep-inline-functions)
|
||||
# Otherwise static may not show as uncovered
|
||||
_MY_CXX_CHECK_OPT(CXX,-fkeep-static-functions)
|
||||
# Exceptions can pollute the branch coverage data
|
||||
_MY_CXX_CHECK_OPT(CXX,-fno-exceptions)
|
||||
# Define-out some impossible stuff
|
||||
# Similarly for inline functions. - This is too slow. See Makefile_obj instead.
|
||||
#_MY_CXX_CHECK_OPT(CXX,-fkeep-inline-functions)
|
||||
# Make sure profiling is thread-safe
|
||||
_MY_CXX_CHECK_OPT(CXX,-fprofile-update=atomic)
|
||||
# Ensure data files can be written from parallel runs
|
||||
_MY_CXX_CHECK_OPT(CXX,-fprofile-reproducible=parallel-runs)
|
||||
# Save source files as absolute paths in gcno files
|
||||
_MY_CXX_CHECK_OPT(CXX,-fprofile-abs-path)
|
||||
# Define so compiled code can know
|
||||
_MY_CXX_CHECK_OPT(CXX,-DVL_GCOV)
|
||||
AC_DEFINE([HAVE_DEV_GCOV],[1],[Defined if compiled with code coverage collection for gcov])]
|
||||
fi
|
||||
AC_SUBST(HAVE_DEV_GCOV)
|
||||
|
||||
# Compiler flags to enable profiling
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_PROFILE,-pg)
|
||||
@@ -431,11 +462,19 @@ AC_SUBST(CFG_CXXFLAGS_COROUTINES)
|
||||
AC_SUBST(HAVE_COROUTINES)
|
||||
|
||||
# Flags for compiling Verilator internals including parser always
|
||||
if test "$CFG_WITH_DEV_ASAN" = "yes"; then
|
||||
_MY_CXX_CHECK_IFELSE(-fsanitize=address -DVL_ASAN,
|
||||
[CFG_CXXFLAGS_SRC="$CFG_CXXFLAGS_SRC -fsanitize=address -DVL_ASAN"
|
||||
CFG_LDFLAGS_SRC="$CFG_LDFLAGS_SRC -fsanitize=address"
|
||||
AC_DEFINE([HAVE_DEV_ASAN],[1],[Defined if built with AddresSanitizer])]
|
||||
)
|
||||
fi
|
||||
AC_SUBST(HAVE_DEV_ASAN)
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-Qunused-arguments)
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-Wno-shadow)
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-Wno-unused-parameter)
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-Xclang -fno-pch-timestamp)
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-faligned-new)
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-Wno-unused-parameter)
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-Wno-shadow)
|
||||
AC_SUBST(CFG_CXXFLAGS_SRC)
|
||||
|
||||
# Flags for compiling Verilator parser always (in addition to above CFG_CXXFLAGS_SRC)
|
||||
@@ -446,16 +485,22 @@ _MY_CXX_CHECK_OPT(CFG_CXXFLAGS_PARSER,-Wno-unused)
|
||||
AC_SUBST(CFG_CXXFLAGS_PARSER)
|
||||
|
||||
# Flags for compiling the debug version of Verilator (in addition to above CFG_CXXFLAGS_SRC)
|
||||
if test "$CFG_ENABLE_COVERAGE" = "no"; then # Do not optimize for the coverage build
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_DEBUG,-Og)
|
||||
if test "$CFG_WITH_DEV_GCOV" = "no"; then # Do not optimize for the coverage build
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_DBG,-Og)
|
||||
fi
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_DEBUG,-ggdb)
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_DEBUG,-gz)
|
||||
AC_SUBST(CFG_CXXFLAGS_DEBUG)
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_DBG,-ggdb)
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_DBG,-gz)
|
||||
AC_SUBST(CFG_CXXFLAGS_DBG)
|
||||
|
||||
# Flags for linking the debug version of Verilator (in addition to above CFG_LDFLAGS_SRC)
|
||||
_MY_LDLIBS_CHECK_OPT(CFG_LDFLAGS_DEBUG,-gz)
|
||||
AC_SUBST(CFG_LDFLAGS_DEBUG)
|
||||
_MY_LDLIBS_CHECK_OPT(CFG_LDFLAGS_DBG,-gz)
|
||||
AC_SUBST(CFG_LDFLAGS_DBG)
|
||||
|
||||
# Flags for compiling the optimized version of Verilator (in addition to above CFG_CXXFLAGS_SRC)
|
||||
if test "$CFG_WITH_DEV_GCOV" = "no"; then # Do not optimize for the coverage build
|
||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_OPT,-O3)
|
||||
fi
|
||||
AC_SUBST(CFG_CXXFLAGS_OPT)
|
||||
|
||||
# Flags for Verilated makefile
|
||||
# For example, -Wno-div-by-zero isn't in 4.1.2
|
||||
@@ -476,6 +521,7 @@ m4_foreach([cflag],[
|
||||
[-Wno-bool-operation],
|
||||
[-Wno-c++11-narrowing],
|
||||
[-Wno-constant-logical-operand],
|
||||
[-Wno-int-in-bool-context],
|
||||
[-Wno-non-pod-varargs],
|
||||
[-Wno-parentheses-equality],
|
||||
[-Wno-shadow],
|
||||
@@ -546,10 +592,12 @@ _MY_LDLIBS_CHECK_IFELSE(
|
||||
_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-free)
|
||||
AC_DEFINE([HAVE_TCMALLOC],[1],[Defined if have tcmalloc])
|
||||
fi],
|
||||
[if test "$CFG_WITH_TCMALLOC" = "yes"; then
|
||||
AC_MSG_ERROR([--enable-tcmalloc was given but test for ${LTCMALLOC} failed])
|
||||
fi])
|
||||
AC_SUBST(HAVE_TCMALLOC)
|
||||
AC_SUBST(CFG_LIBS)
|
||||
|
||||
# Need C++14 at least
|
||||
@@ -557,18 +605,15 @@ AC_SUBST(CFG_LIBS)
|
||||
AC_DEFUN([_MY_CXX_CHECK_CXX_VER],
|
||||
[# _MY_CXX_CHECK_CXX_VER(flag) -- Check if compiler runs C++14
|
||||
# Set $_my_result
|
||||
AC_LINK_IFELSE(
|
||||
AC_RUN_IFELSE(
|
||||
[AC_LANG_PROGRAM([#include <thread>
|
||||
#if (__cplusplus < 201402L)
|
||||
# error "Too old"
|
||||
#endif
|
||||
], [[ ]])],
|
||||
[_my_result=yes
|
||||
if test -s conftest.err; then
|
||||
if grep -e "$1" conftest.err >/dev/null; then
|
||||
_my_result=no
|
||||
fi
|
||||
fi],
|
||||
], [[
|
||||
]])],
|
||||
[_my_result=yes],
|
||||
[_my_result=no],
|
||||
[_my_result=no])
|
||||
])
|
||||
|
||||
|
||||
+37
-17
@@ -3,15 +3,15 @@ under the Developer Certificate of Origin (https://developercertificate.org/).
|
||||
|
||||
Please see the Verilator manual for 200+ additional contributors. Thanks to all.
|
||||
|
||||
404allen404
|
||||
Adam Bagley
|
||||
Adrian Sampson
|
||||
Adrien Le Masle
|
||||
Ahmed El-Mahmoudy
|
||||
أحمد المحمودي (Ahmed El-Mahmoudy)
|
||||
Aidan McNay
|
||||
Aleksander Kiryk
|
||||
Alex Chadwick
|
||||
Alex Solomatnikov
|
||||
Àlex Torregrosa
|
||||
Aliaksei Chapyzhenka
|
||||
Ameya Vikram Singh
|
||||
Andrea Calabrese
|
||||
@@ -24,6 +24,7 @@ Anthony Donlon
|
||||
Anthony Moore
|
||||
Arkadiusz Kozdra
|
||||
Arthur Rosa
|
||||
Artur Bieniek
|
||||
Aylon Chaim Porat
|
||||
Bartłomiej Chmiel
|
||||
Brian Li
|
||||
@@ -31,20 +32,24 @@ Cameron Kirk
|
||||
Chih-Mao Chen
|
||||
Chris Bachhuber
|
||||
Chris Randall
|
||||
Christian Hecken
|
||||
Christopher Taylor
|
||||
Chuxuan Wang
|
||||
Chykon
|
||||
Congcong Cai
|
||||
Conor McCullough
|
||||
Dan Petrisko
|
||||
Daniel Bates
|
||||
Danny Oler
|
||||
Dave Sargeant
|
||||
David Horton
|
||||
David Ledger
|
||||
David Metz
|
||||
Dave Sargeant
|
||||
David Stanford
|
||||
David Turner
|
||||
Dercury
|
||||
Diego Roux
|
||||
Dominick Grochowina
|
||||
Don Williamson
|
||||
Drew Ranck
|
||||
Drew Taussig
|
||||
@@ -54,27 +59,27 @@ Eric Müller
|
||||
Eric Rippey
|
||||
Ethan Sifferman
|
||||
Eyck Jentzsch
|
||||
Furqan Nadir
|
||||
Fabian Keßler
|
||||
Fabian Keßler-Schulz
|
||||
Fan Shupei
|
||||
february cozzocrea
|
||||
Felix Neumärker
|
||||
Felix Yan
|
||||
Frans Skarman
|
||||
Fuad Ismail
|
||||
Furqan Nadir
|
||||
G-A. Kamendje
|
||||
Garrett Smith
|
||||
George Polack
|
||||
Geza Lore
|
||||
Gianfranco Costamagna
|
||||
Gijs Burghoorn
|
||||
Gilberto Abram
|
||||
Glen Gibb
|
||||
Gökçe Aydos
|
||||
Graham Rushton
|
||||
Greg Davill
|
||||
Guokai Chen
|
||||
Gus Smith
|
||||
Gustav Svensk
|
||||
Gökçe Aydos
|
||||
Han Qi
|
||||
Harald Heckmann
|
||||
Hennadii Chernyshchyk
|
||||
@@ -83,12 +88,14 @@ Huang Rui
|
||||
Huanghuang Zhou
|
||||
HungMingWu
|
||||
HyungKi Jeong
|
||||
Ícaro Lima
|
||||
Ibrahim Burak Yorulmaz
|
||||
Igor Zaworski
|
||||
Ilya Barkov
|
||||
Iru Cai
|
||||
Ivan Vnučec
|
||||
Iztok Jeras
|
||||
Jake Merdich
|
||||
Jakub Wasilewski
|
||||
James Bailey
|
||||
James Hanlon
|
||||
James Hutchinson
|
||||
@@ -97,16 +104,17 @@ James Shi
|
||||
Jamey Hicks
|
||||
Jamie Iles
|
||||
Jan Van Winkel
|
||||
Jiangjie Weng
|
||||
Jean Berniolles
|
||||
Jeremy Bennett
|
||||
Jesse Taube
|
||||
Jevin Sweval
|
||||
Jiacheng Qian
|
||||
Jiamin Zhu
|
||||
Jitesh Nayak
|
||||
Jiangjie Weng
|
||||
Jinyan Xu
|
||||
Jitesh Nayak
|
||||
Jiuyang Liu
|
||||
Joel Bodenmann
|
||||
Joey Liu
|
||||
John Coiner
|
||||
John Demme
|
||||
@@ -138,6 +146,7 @@ Krzysztof Obłonczek
|
||||
Krzysztof Starecki
|
||||
Krzysztof Sychla
|
||||
Kuba Ober
|
||||
Lan Zongwei
|
||||
Larry Doolittle
|
||||
Liam Braun
|
||||
Luca Colagrande
|
||||
@@ -154,11 +163,14 @@ Marshal Qiao
|
||||
Martin Schmidt
|
||||
Martin Stadler
|
||||
Mateusz Gancarz
|
||||
Matt Stroud
|
||||
Matthew Ballance
|
||||
Max Wipfli
|
||||
Michael Bedford Taylor
|
||||
Michael Bikovitsky
|
||||
Michael Killough
|
||||
Michaël Lefebvre
|
||||
Michal Czyz
|
||||
Michaël Lefebvre
|
||||
Mike Popoloski
|
||||
Miodrag Milanović
|
||||
Mladen Slijepcevic
|
||||
@@ -180,9 +192,11 @@ Paul Wright
|
||||
Pawel Jewstafjew
|
||||
Pawel Sagan
|
||||
Pengcheng Xu
|
||||
Peter Birch
|
||||
Peter Debacker
|
||||
Peter Horvath
|
||||
Peter Monsson
|
||||
Petr Nohavica
|
||||
Philip Axer
|
||||
Philipp Wagner
|
||||
Pierre-Henri Horrein
|
||||
@@ -198,37 +212,40 @@ Richard Myers
|
||||
Risto Pejašinović
|
||||
Robert Balas
|
||||
Robin Heinemann
|
||||
Rodrigo Batista de Moraes
|
||||
Rupert Swarbrick
|
||||
Ryan Ziegler
|
||||
Ryszard Rozak
|
||||
Samuel Riedel
|
||||
Sean Cross
|
||||
Sebastien Van Cauwenberghe
|
||||
Sergey Fedorov
|
||||
Sergi Granell
|
||||
Seth Pellegrino
|
||||
Shou-Li Hsu
|
||||
Srinivasan Venkataramanan
|
||||
Stefan Wallentowitz
|
||||
Stephen Henry
|
||||
Steven Hugg
|
||||
sumpster
|
||||
Szymon Gizler
|
||||
Sören Tempel
|
||||
Teng Huang
|
||||
Tom Manner
|
||||
Tim Hutt
|
||||
Tim Snyder
|
||||
Tobias Jensen
|
||||
Tobias Rosenkranz
|
||||
Tobias Wölfel
|
||||
Todd Strader
|
||||
Tom Manner
|
||||
Tomasz Gorochowik
|
||||
Topa Topino
|
||||
Toru Niina
|
||||
Trung Nguyen
|
||||
Tudor Timi
|
||||
Tymoteusz Blazejczyk
|
||||
Udaya Raj Subedi
|
||||
Udi Finkelstein
|
||||
Unai Martinez-Corral
|
||||
Udaya Raj Subedi
|
||||
Valentin Atepalikhin
|
||||
Varun Koyyalagunta
|
||||
Vassilis Papaefstathiou
|
||||
@@ -249,9 +266,12 @@ Yuri Victorovich
|
||||
Yutetsu TAKATSUKASA
|
||||
Yves Mathieu
|
||||
Zhanglei Wang
|
||||
Zhen Yan
|
||||
Zhou Shen
|
||||
Zhouyi Shen
|
||||
Zixi Li
|
||||
أحمد المحمودي
|
||||
404allen404
|
||||
Tobias Jensen
|
||||
dependabot[bot]
|
||||
february cozzocrea
|
||||
sumpster
|
||||
Àlex Torregrosa
|
||||
Ícaro Lima
|
||||
|
||||
+7
-2
@@ -25,7 +25,7 @@ BUILDDIR = _build
|
||||
|
||||
SPHINXOPTS ?= -c guide -j 4
|
||||
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
|
||||
|
||||
######################################################################
|
||||
@@ -68,11 +68,16 @@ pdf:
|
||||
|
||||
######################################################################
|
||||
|
||||
html latex linkcheck spelling::
|
||||
html latex linkcheck::
|
||||
$(MAKE) vl-extract
|
||||
$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
||||
$(PYTHON3) bin/vl_sphinx_fix _build
|
||||
|
||||
spelling::
|
||||
$(MAKE) vl-extract
|
||||
$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
||||
sort -o guide/spelling.txt guide/spelling.txt
|
||||
|
||||
help:
|
||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# mypy: disallow-untyped-defs
|
||||
# pylint: disable=C0112,C0114,C0115,C0116,C0209,C0301,R0903
|
||||
# -*- Python -*- See copyright, etc below
|
||||
######################################################################
|
||||
@@ -11,9 +12,8 @@ import re
|
||||
|
||||
class VlSphinxExtract:
|
||||
debug = 0
|
||||
SkipBasenames = {}
|
||||
|
||||
def process(self, filename):
|
||||
def process(self, filename: str) -> None:
|
||||
with open(filename, "r", encoding="utf8") as fhr:
|
||||
fhw = None
|
||||
for line in fhr:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# mypy: disallow-untyped-defs
|
||||
# pylint: disable=C0112,C0114,C0115,C0116,C0209,C0301,R0903
|
||||
# -*- Python -*- See copyright, etc below
|
||||
######################################################################
|
||||
@@ -12,19 +13,17 @@ import re
|
||||
|
||||
class VlSphinxFix:
|
||||
debug = 0
|
||||
SkipBasenames = {}
|
||||
|
||||
def process(self, path):
|
||||
def process(self, path: str) -> None:
|
||||
if os.path.isdir(path):
|
||||
for basefile in os.listdir(path):
|
||||
file = os.path.join(path, basefile)
|
||||
if ((basefile != ".") and (basefile != "..") and basefile not in self.SkipBasenames
|
||||
and not os.path.islink(file)):
|
||||
if ((basefile != ".") and (basefile != "..") and not os.path.islink(file)):
|
||||
self.process(file)
|
||||
elif re.search(r'\.(html|tex)$', path):
|
||||
self._edit(path)
|
||||
|
||||
def _edit(self, filename):
|
||||
def _edit(self, filename: str) -> None:
|
||||
is_html = re.search(r'\.(html)$', filename)
|
||||
with open(filename, "r", encoding="utf8") as fhr:
|
||||
origfile = fhr.read()
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
.. comment: generated by t_event_control_star_never_bad
|
||||
.. code-block:: sv
|
||||
|
||||
always @* a = 100;
|
||||
@@ -0,0 +1,4 @@
|
||||
.. comment: generated by t_event_control_star_never_bad
|
||||
.. code-block::
|
||||
|
||||
%Warning-ALWNEVER: example.v:1:3 'always @*' will never execute as expression list is empty (no variables read)
|
||||
@@ -0,0 +1,9 @@
|
||||
.. comment: generated by t_lint_assigneqexpr_bad
|
||||
.. code-block:: sv
|
||||
:linenos:
|
||||
:emphasize-lines: 3
|
||||
|
||||
assign d_o = // Note = not == below
|
||||
(
|
||||
c_o = 1 // <--- Warning: ASSIGNEQEXPR
|
||||
) ? 1 : (
|
||||
@@ -0,0 +1,5 @@
|
||||
.. comment: generated by t_lint_assigneqexpr_bad
|
||||
.. code-block::
|
||||
|
||||
%Warning-ASSIGNEQEXPR: example.v:1:11 Assignment '=' inside expression
|
||||
: ... Was a '==' intended, or suggest use a separate statement
|
||||
@@ -0,0 +1,5 @@
|
||||
.. comment: generated by t_lint_badvltpragma_bad
|
||||
.. code-block:: sv
|
||||
:emphasize-lines: 1
|
||||
|
||||
// verilator lintt_off WIDTH //<--- Warning (lint_off misspelled)
|
||||
@@ -0,0 +1,7 @@
|
||||
.. comment: generated by t_lint_badvltpragma_bad
|
||||
.. code-block::
|
||||
:emphasize-lines: 1,2
|
||||
|
||||
%Error-BADVLTPRAGMA: example.v:1:3 Unknown verilator comment: '/*verilator lintt_off WIDTH <--- Warning (lint_off misspelled)*/'
|
||||
7 | /*verilator lintt_off WIDTH <--- Warning (lint_off misspelled)*/
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -2,5 +2,5 @@
|
||||
.. code-block:: sv
|
||||
:linenos:
|
||||
|
||||
always_comb b = ~a;
|
||||
always_comb a = b;
|
||||
always_comb b = ~a;
|
||||
always_comb a = b;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
.. comment: generated by t_lint_didnotconverge_bad
|
||||
.. code-block::
|
||||
|
||||
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] a)
|
||||
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge.
|
||||
-V{t#,#} 'stl' region trigger index 0 is active: @([hybrid] a)
|
||||
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge after 100 tries
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.. comment: generated by t_lint_didnotconverge_nodbg_bad
|
||||
.. code-block::
|
||||
|
||||
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge.
|
||||
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge after 100 tries
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
.. comment: generated by t_lint_functimectl_bad
|
||||
.. code-block:: sv
|
||||
:linenos:
|
||||
:emphasize-lines: 2
|
||||
|
||||
function void calls_timing_ctl;
|
||||
@e; // <--- Bad IEEE 1800-2023 13.4 time-controlling
|
||||
@@ -0,0 +1,4 @@
|
||||
.. comment: generated by t_lint_functimectl_bad
|
||||
.. code-block::
|
||||
|
||||
%Error-FUNCTIMECTL: example.v:1:5 Functions cannot contain time-controlling statements (IEEE 1800-2023 13.4)
|
||||
@@ -0,0 +1,8 @@
|
||||
.. comment: generated by t_param_hier_bad
|
||||
.. code-block:: sv
|
||||
:linenos:
|
||||
:emphasize-lines: 3
|
||||
|
||||
sub #(.X(MY_X)) u_sub ();
|
||||
|
||||
localparam int SUB_Y = u_sub.Y; // <--- BAD: IEEE 1800-2023 6.20.2 no hierarchical
|
||||
@@ -0,0 +1,7 @@
|
||||
.. comment: generated by t_param_hier_bad
|
||||
.. code-block::
|
||||
|
||||
%Error-HIERPARAM: example.v:1:32 Parameter values cannot use hierarchical values (IEEE 1800-2023 6.20.2)
|
||||
: ... note: In instance 't'
|
||||
36 | localparam int SUB_Y = u_sub.Y;
|
||||
| ^
|
||||
@@ -3,9 +3,9 @@
|
||||
:linenos:
|
||||
:emphasize-lines: 2,5
|
||||
|
||||
always @(posedge clk) begin
|
||||
out2[7:0] <= d0; // <--- Warning
|
||||
end
|
||||
always @(negedge clk) begin
|
||||
out2[15:8] <= d0; // <--- Warning
|
||||
end
|
||||
always @(posedge clk) begin
|
||||
out2[7:0] <= d0; // <--- Warning
|
||||
end
|
||||
always @(negedge clk) begin
|
||||
out2[15:8] <= d0; // <--- Warning
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.. comment: generated by t_lint_multidriven_bad
|
||||
.. code-block::
|
||||
|
||||
%Warning-MULTIDRIVEN: example.v:1:22 Signal has multiple driving blocks with different clocking: 'out2'
|
||||
example.v:1:7 ... Location of first driving block
|
||||
example.v:1:7 ... Location of other driving block
|
||||
%Warning-MULTIDRIVEN: example.v:1:21 Signal has multiple driving blocks with different clocking: 'out2'
|
||||
example.v:1:5 ... Location of first driving block
|
||||
example.v:1:5 ... Location of other driving block
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
.. comment: generated by t_lint_noreturn_bad
|
||||
.. code-block:: sv
|
||||
:linenos:
|
||||
:emphasize-lines: 1
|
||||
|
||||
function int no_rtn(); // <--- Warning: No return
|
||||
endfunction
|
||||
@@ -0,0 +1,4 @@
|
||||
.. comment: generated by t_lint_noreturn_bad
|
||||
.. code-block::
|
||||
|
||||
%Warning-NORETURN: example.v:1:16 Non-void function 'no_rtn' has no return value
|
||||
@@ -0,0 +1,7 @@
|
||||
.. comment: generated by t_lint_paramnodefault_bad
|
||||
.. code-block:: sv
|
||||
:linenos:
|
||||
:emphasize-lines: 2
|
||||
|
||||
module sub;
|
||||
parameter NODEF; //<--- Warning
|
||||
@@ -0,0 +1,6 @@
|
||||
.. comment: generated by t_lint_paramnodefault_bad
|
||||
.. code-block::
|
||||
|
||||
%Error-PARAMNODEFAULT: example.v:1:13 Parameter without default requires ANSI-style parameter list (IEEE 1800-2023 6.20.1): 'NODEF'
|
||||
8 | parameter NODEF;
|
||||
| ^~~~~
|
||||
@@ -1,4 +1,4 @@
|
||||
.. comment: generated by t_lint_pinmissing_bad
|
||||
.. code-block::
|
||||
|
||||
%Warning-PINMISSING: example.v:1:8 Cell has missing pin: 'port'
|
||||
%Warning-PINMISSING: example.v:1:8 Instance has missing pin: 'port'
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
.. 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
|
||||
@@ -1,4 +0,0 @@
|
||||
.. 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)
|
||||
@@ -0,0 +1,12 @@
|
||||
.. comment: generated by t_lint_procassinit_bad
|
||||
.. code-block:: sv
|
||||
:linenos:
|
||||
:emphasize-lines: 1,5
|
||||
|
||||
logic flop_out = 1; // <--- Warning
|
||||
|
||||
always @(posedge clk, negedge reset_l) begin
|
||||
if (enable) begin
|
||||
flop_out <= ~in; // <--- Use of initialized
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,15 @@
|
||||
.. comment: generated by t_lint_procassinit_bad
|
||||
.. code-block:: sv
|
||||
:linenos:
|
||||
:emphasize-lines: 5
|
||||
|
||||
logic flop2_out;
|
||||
|
||||
always @(posedge clk, negedge reset_l) begin
|
||||
if (!reset_l) begin
|
||||
flop2_out <= '1; // <--- Added reset init
|
||||
end
|
||||
else if (enable) begin
|
||||
flop2_out <= ~in;
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,12 @@
|
||||
.. comment: generated by t_lint_procassinit_bad
|
||||
.. code-block::
|
||||
|
||||
%Warning-PROCASSINIT: example.v:1:20 Procedural assignment to declaration with initial value: 'flop_out'
|
||||
: ... note: In instance 't'
|
||||
: ... Location of variable initialization
|
||||
26 | logic flop_out = 1;
|
||||
| ^
|
||||
example.v:1:7 ... Location of variable process write
|
||||
: ... Perhaps should initialize instead using a reset in this process
|
||||
30 | flop_out <= ~in;
|
||||
| ^~~~~~~~
|
||||
@@ -2,4 +2,4 @@
|
||||
.. code-block:: sv
|
||||
:emphasize-lines: 1
|
||||
|
||||
#100 $finish; //<--- Warning
|
||||
#100 $finish; //<--- Warning
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.. comment: generated by t_lint_stmtdly_bad
|
||||
.. code-block::
|
||||
|
||||
%Warning-STMTDLY: example.v:1:7 Ignoring delay on this statement due to --no-timing
|
||||
%Warning-STMTDLY: example.v:1:5 Ignoring delay on this statement due to --no-timing
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.. comment: generated by t_assert_comp_bad
|
||||
.. code-block:: sv
|
||||
|
||||
$error("User elaboration-time error");
|
||||
$error("User elaboration-time error");
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.. comment: generated by t_assert_comp_bad
|
||||
.. code-block::
|
||||
|
||||
%Warning-USERERROR: example.v:1:7 User elaboration-time error
|
||||
%Warning-USERERROR: example.v:1:5 User elaboration-time error
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.. comment: generated by t_assert_comp_bad
|
||||
.. code-block:: sv
|
||||
|
||||
$fatal(0, "User elaboration-time fatal");
|
||||
$fatal(0, "User elaboration-time fatal");
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.. comment: generated by t_assert_comp_bad
|
||||
.. code-block::
|
||||
|
||||
%Warning-USERFATAL: example.v:1:7 User elaboration-time fatal
|
||||
%Warning-USERFATAL: example.v:1:5 User elaboration-time fatal
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.. comment: generated by t_assert_comp_bad
|
||||
.. code-block:: sv
|
||||
|
||||
$info("User elaboration-time info");
|
||||
$info("User elaboration-time info");
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.. comment: generated by t_assert_comp_bad
|
||||
.. code-block::
|
||||
|
||||
-Info: example.v:1:7 User elaboration-time info
|
||||
-Info: example.v:1:5 User elaboration-time info
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.. comment: generated by t_assert_comp_bad
|
||||
.. code-block:: sv
|
||||
|
||||
$warning("User elaboration-time warning");
|
||||
$warning("User elaboration-time warning");
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.. comment: generated by t_assert_comp_bad
|
||||
.. code-block::
|
||||
|
||||
%Warning-USERWARN: example.v:1:7 User elaboration-time warning
|
||||
%Warning-USERWARN: example.v:1:5 User elaboration-time warning
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
:emphasize-lines: 2
|
||||
|
||||
module t;
|
||||
integer t; //<--- Warning ('t' hidden by module 't')
|
||||
integer t; //<--- Warning ('t' hidden by module 't')
|
||||
endmodule
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
.. comment: generated by t_var_bad_hide_docs
|
||||
.. code-block::
|
||||
|
||||
%Warning-VARHIDDEN: example.v:2:12 Declaration of signal hides declaration in upper scope: 't'
|
||||
%Warning-VARHIDDEN: example.v:2:11 Declaration of signal hides declaration in upper scope: 't'
|
||||
example.v:1:8 ... Location of original declaration
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
:linenos:
|
||||
:emphasize-lines: 3
|
||||
|
||||
int array[5];
|
||||
bit [1:0] rd_addr;
|
||||
wire int rd_value = array[rd_addr]; //<--- Warning
|
||||
logic [31:0] array[5];
|
||||
bit [1:0] rd_addr;
|
||||
wire [31:0] rd_value = array[rd_addr]; //<--- Warning
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
.. code-block:: sv
|
||||
:emphasize-lines: 1
|
||||
|
||||
wire int rd_value = array[{1'b0, rd_addr}]; //<--- Fixed
|
||||
wire [31:0] rd_value = array[{1'b0, rd_addr}]; //<--- Fixed
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.. comment: generated by t_lint_widthexpand_docs_bad
|
||||
.. code-block::
|
||||
|
||||
%Warning-WIDTHEXPAND: example.v:3:29 Bit extraction of array[4:0] requires 3 bit index, not 2 bits.
|
||||
%Warning-WIDTHEXPAND: example.v:3:31 Bit extraction of array[4:0] requires 3 bit index, not 2 bits.
|
||||
|
||||
+11
-2
@@ -63,12 +63,19 @@ rst_prolog = """
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
#
|
||||
# To install:
|
||||
# sudo install enchant
|
||||
# sudo pip3 install sphinx sphinx_rtd_theme breathe sphinxcontrib-spelling
|
||||
# We keep this list empty for now to avoid needing dependencies
|
||||
# python3 -m venv --system-site-packages ~/.verilator_pyenv
|
||||
# source ~/.verilator_pyenv/bin/activate
|
||||
# pip3 install sphinx sphinx_rtd_theme sphinxcontrib-spelling breathe
|
||||
#
|
||||
# We keep this extensions list empty for now to avoid needing dependencies
|
||||
extensions = []
|
||||
# extensions = ['breathe', 'sphinxcontrib.spelling']
|
||||
# For website builds, this will add sphinxcontrib.jquery
|
||||
if 'VERILATOR_SPHINX_EXTENSIONS' in os.environ:
|
||||
extensions.extend(os.environ.get('VERILATOR_SPHINX_EXTENSIONS', '').split(':'))
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
@@ -110,6 +117,8 @@ html_domain_indices = False
|
||||
html_logo = "../_static/verilator_192_150_min.png"
|
||||
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
# Despite a 'WARNING: Calling get_html_theme_path is deprecated'
|
||||
# the HTML output is different without this line
|
||||
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
|
||||
|
||||
html_theme_options = {
|
||||
|
||||
+10
-10
@@ -184,7 +184,7 @@ Verilog, put in our.v:
|
||||
import "DPI-C" function int add (input int a, input int b);
|
||||
|
||||
initial begin
|
||||
$display("%x + %x = %x", 1, 2, add(1,2));
|
||||
$display("%x + %x = %x", 1, 2, add(1,2));
|
||||
endtask
|
||||
|
||||
Then after Verilating, Verilator will create a file Vour__Dpi.h with the
|
||||
@@ -225,8 +225,8 @@ called from C++:
|
||||
export "DPI-C" task publicSetBool;
|
||||
|
||||
task publicSetBool;
|
||||
input bit in_bool;
|
||||
var_bool = in_bool;
|
||||
input bit in_bool;
|
||||
var_bool = in_bool;
|
||||
endtask
|
||||
|
||||
Then after Verilating, Verilator will create a file Vour__Dpi.h with the
|
||||
@@ -294,11 +294,11 @@ wrapper:
|
||||
import "DPI-C" context function void dpi_that_accesses_din();
|
||||
|
||||
always @(...)
|
||||
dpi_din_args(din);
|
||||
dpi_din_args(din);
|
||||
|
||||
task dpi_din_args(input din);
|
||||
/* verilator no_inline_task */
|
||||
dpi_that_accesses_din();
|
||||
// verilator no_inline_task
|
||||
dpi_that_accesses_din();
|
||||
endtask
|
||||
|
||||
|
||||
@@ -423,9 +423,9 @@ be deferred for later. These delayed values can be flushed to the model with
|
||||
VPI Example
|
||||
-----------
|
||||
|
||||
In the below example, we have readme marked read-only, and writeme which if
|
||||
written from outside the model will have the same semantics as if it
|
||||
changed on the specified clock edge.
|
||||
In the below example, we have readme marked read-only, and writeme marked
|
||||
read-write which if written from outside the model will have the same semantics
|
||||
as if it was a top level input.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@@ -434,7 +434,7 @@ changed on the specified clock edge.
|
||||
parameter WIDTH /*verilator public_flat_rd*/ = 32
|
||||
) (input clk);
|
||||
reg [WIDTH-1:0] readme /*verilator public_flat_rd*/;
|
||||
reg [WIDTH-1:0] writeme /*verilator public_flat_rw @(posedge clk) */;
|
||||
reg [WIDTH-1:0] writeme /*verilator public_flat_rw*/;
|
||||
initial $finish;
|
||||
endmodule
|
||||
EOF
|
||||
|
||||
@@ -77,9 +77,10 @@ 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.
|
||||
|
||||
With :vlopt:`--debug`, Verilator will write a *{prefix}*\ __inputs\ .vpp
|
||||
file which has all of the individual input files combined and
|
||||
pre-processed, this is often useful as the input design into `sv-bugpoint`.
|
||||
With :vlopt:`--debug` or :vlopt:`--dump-inputs`, Verilator will write a
|
||||
*{prefix}*\ __inputs\ .vpp file which has all of the individual input files
|
||||
combined and pre-processed, this is often useful as the input design into
|
||||
`sv-bugpoint`.
|
||||
|
||||
Please refer to `sv-bugpoint README
|
||||
<https://github.com/antmicro/sv-bugpoint/blob/main/README.md>`_ for more
|
||||
|
||||
@@ -13,8 +13,8 @@ When possible, please instead report bugs at `Verilator Issues
|
||||
|
||||
The primary author is Wilson Snyder <[email protected]>.
|
||||
|
||||
Major concepts by Paul Wasson, Duane Galbi, John Coiner, Geza Lore, Yutetsu
|
||||
Takatsukasa, and Jie Xu.
|
||||
Major concepts by Krzysztof Bieganski, John Coiner, Duane Galbi, Geza Lore,
|
||||
Ryszard Rozak, Yutetsu Takatsukasa, Paul Wasson, and Jie Xu.
|
||||
|
||||
|
||||
Contributors
|
||||
@@ -23,8 +23,8 @@ Contributors
|
||||
Many people have provided ideas and other assistance with Verilator.
|
||||
|
||||
Verilator is receiving significant development support from the `CHIPS
|
||||
Alliance <https://chipsalliance.org>`_, `Antmicro Ltd
|
||||
<https://antmicro.com>`_ and `Shunyao CAD <https://shunyaocad.com>`_.
|
||||
Alliance <https://chipsalliance.org>`_, and `Antmicro Ltd
|
||||
<https://antmicro.com>`_.
|
||||
|
||||
Previous major corporate sponsors of Verilator, by providing significant
|
||||
contributions of time or funds include: Antmicro Ltd., Atmel Corporation,
|
||||
|
||||
@@ -20,3 +20,9 @@ C++14 compiler support
|
||||
XML output
|
||||
Verilator currently supports XML parser output (enabled with `--xml-only`).
|
||||
Support for `--xml-*` options will be deprecated no sooner than January 2026.
|
||||
|
||||
--make cmake
|
||||
The `--make cmake` options is deprecated and will be removed no sooner than
|
||||
January 2026. Use `--make json` instead. Note that the CMake integration
|
||||
shipping with Verilator (verilator-config.mk) already uses `--make json` so
|
||||
no changes are necessary if using that.
|
||||
|
||||
+277
-113
@@ -1,9 +1,9 @@
|
||||
.. Copyright 2003-2025 by Wilson Snyder.
|
||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||
|
||||
=====================
|
||||
verilator Arguments
|
||||
=====================
|
||||
===================
|
||||
verilator Arguments
|
||||
===================
|
||||
|
||||
The following arguments may be passed to the "verilator" executable.
|
||||
|
||||
@@ -32,7 +32,9 @@ Summary:
|
||||
makefile's VPATH the appropriate directory to find the file.
|
||||
|
||||
See also :vlopt:`-CFLAGS` and :vlopt:`-LDFLAGS` options, which are
|
||||
useful when the C++ files need special compiler flags.
|
||||
useful when the C++ files need special compiler flags. The compiler
|
||||
flags add by default `-DVERILATOR=1`, so an `#ifdef VERILATOR` may be
|
||||
used to conditionally preprocess .cpp code for different simulators.
|
||||
|
||||
.. option:: <file.v>
|
||||
|
||||
@@ -86,13 +88,30 @@ Summary:
|
||||
grammar and other semantic extensions which might not be legal when
|
||||
set to an older standard.
|
||||
|
||||
.. option:: --assert
|
||||
.. option:: --aslr
|
||||
|
||||
Enable all assertions. Implies :vlopt:`--assert-case`.
|
||||
.. option:: --no-aslr
|
||||
|
||||
.. option:: --assert-case
|
||||
Rarely needed - for developer use. With `--aslr`, do not change the
|
||||
system default as to using Linux address space layout randomization
|
||||
(ASLR). With `--no-aslr` attempt to disable ASLR. If not specified,
|
||||
ASLR will be disabled only when using :vlopt:`--debug` (or similar
|
||||
debug-related options), so that pointers have more deterministic values,
|
||||
aiding repeatability.
|
||||
|
||||
Enable unique/unique0/priority case related checks.
|
||||
.. option:: --no-assert
|
||||
|
||||
Disable all assertions. Implies :vlopt:`--no-assert-case`.
|
||||
|
||||
In versions before 5.038, assertions were disabled by default, and
|
||||
`--assert` was required to enable assertions.
|
||||
|
||||
.. option:: --no-assert-case
|
||||
|
||||
Disable unique/unique0/priority case related checks.
|
||||
|
||||
In versions before 5.038, these were disabled by default, and `--assert`
|
||||
or `--assert-case` was required to enable case assertions.
|
||||
|
||||
.. option:: --autoflush
|
||||
|
||||
@@ -149,10 +168,11 @@ Summary:
|
||||
|
||||
.. option:: --build-jobs <value>
|
||||
|
||||
Specify the level of parallelism for :vlopt:`--build`. If zero, uses the
|
||||
number of threads in the current hardware. Otherwise, the <value> must
|
||||
be a positive integer specifying the maximum number of parallel build
|
||||
jobs.
|
||||
Specify the level of parallelism for :vlopt:`--build`. If zero, uses the
|
||||
number of threads available to the process, which is the number of threads
|
||||
assigned by processor affinity (e.g. using `numactl`), or the number of
|
||||
threads in the host hardware if unspecified. Otherwise, the <value> must be
|
||||
a positive integer specifying the maximum number of parallel build jobs.
|
||||
|
||||
If not provided, and :vlopt:`-j` is provided, the :vlopt:`-j` value is
|
||||
used.
|
||||
@@ -180,10 +200,14 @@ Summary:
|
||||
|
||||
.. option:: --clk <signal-name>
|
||||
|
||||
Deprecated and has no effect (ignored).
|
||||
|
||||
In versions before 5.042:
|
||||
|
||||
With :vlopt:`--clk`, the specified signal is marked as a clock signal.
|
||||
|
||||
The provided signal name is specified using a RTL hierarchy path. For
|
||||
example, v.foo.bar. If the signal is the input to top-module, then
|
||||
example, v.foo.bar. If the signal is the input to the top-module, then
|
||||
directly provide the signal name. Alternatively, use a
|
||||
:option:`/*verilator&32;clocker*/` metacomment in RTL file to mark the
|
||||
signal directly.
|
||||
@@ -200,6 +224,10 @@ Summary:
|
||||
|
||||
.. option:: --no-clk <signal-name>
|
||||
|
||||
Deprecated and has no effect (ignored).
|
||||
|
||||
In versions before 5.042:
|
||||
|
||||
Prevent the specified signal from being marked as a clock. See
|
||||
:vlopt:`--clk`.
|
||||
|
||||
@@ -393,6 +421,22 @@ Summary:
|
||||
standard across Verilog tools while :vlopt:`-D <-D<var>>` is similar to
|
||||
:command:`gcc -D`.
|
||||
|
||||
.. option:: --diagnostics-sarif
|
||||
|
||||
Enables diagnostics output into a Static Analysis Results Interchange
|
||||
Format (SARIF) file, a standard, JSON-based format for the output of
|
||||
static analysis tools such as linters. See
|
||||
[SARIF](https://sarifweb.azurewebsites.net/),
|
||||
[sarif-tools](https://github.com/microsoft/sarif-tools), and the [SARIF
|
||||
web-based viewer](https://microsoft.github.io/sarif-web-component/).
|
||||
|
||||
.. option:: --diagnostics-sarif-output <filename>
|
||||
|
||||
Specifies the filename for the SARIF output file (`.sarif`) of
|
||||
:vlopt:`--diagnostics-sarif`. Using this option automatically sets
|
||||
:vlopt:`--diagnostics-sarif`. If not specified, output defaults to
|
||||
:file:`<prefix>.sarif`.
|
||||
|
||||
.. option:: --dpi-hdr-only
|
||||
|
||||
Only generate the DPI header file. This option does not affect on the
|
||||
@@ -426,6 +470,11 @@ Summary:
|
||||
level 3. Before Verilator 4.228, :vlopt:`--dump-tree` used
|
||||
to include this option.
|
||||
|
||||
.. option:: --dump-inputs
|
||||
|
||||
Rarely needed. Enable dumping a *{prefix}*\ __inputs\ .vpp file which
|
||||
has all of the individual input files combined and pre-processed
|
||||
|
||||
.. option:: --dump-tree
|
||||
|
||||
Rarely needed. Enable dumping Ast .tree debug files with dumping level 3,
|
||||
@@ -446,9 +495,9 @@ Summary:
|
||||
|
||||
.. option:: --dump-tree-dot
|
||||
|
||||
Rarely needed. Enable dumping Ast .tree.dot debug files in Graphviz
|
||||
Dot format. This option implies :vlopt:`--dump-tree`, unless
|
||||
:vlopt:`--dumpi-tree` was passed explicitly.
|
||||
Rarely needed - for developer use. Enable dumping Ast .tree.dot debug
|
||||
files in Graphviz Dot format. This option implies :vlopt:`--dump-tree`,
|
||||
unless :vlopt:`--dumpi-tree` was passed explicitly.
|
||||
|
||||
.. option:: --dump-tree-json
|
||||
|
||||
@@ -490,8 +539,8 @@ Summary:
|
||||
out. Beware of enabling debugging messages, as they will also go to
|
||||
standard out. See :vlopt:`--no-std`, which is implied by this.
|
||||
|
||||
See also :vlopt:`--dump-defines`, :vlopt:`-P`, :vlopt:`--pp-comments`
|
||||
and :vlopt:`--preproc-resolve` options.
|
||||
See also :vlopt:`--dump-defines`, :vlopt:`-P`,
|
||||
:vlopt:`--preproc-comments` and :vlopt:`--preproc-resolve` options.
|
||||
|
||||
.. option:: --emit-accessors
|
||||
|
||||
@@ -540,6 +589,10 @@ Summary:
|
||||
Any :code:`$VAR`, :code:`$(VAR)`, or :code:`${VAR}` will be replaced
|
||||
with the specified environment variable.
|
||||
|
||||
.. option:: -fdfg-synthesize-all
|
||||
|
||||
Rarely needed. Attempt to synthesize all combinational logic in DFG.
|
||||
|
||||
.. option:: -FI <file>
|
||||
|
||||
Force include of the specified C++ header file. All generated C++ files
|
||||
@@ -568,34 +621,49 @@ Summary:
|
||||
|
||||
.. option:: -fno-const-before-dfg
|
||||
|
||||
Do not apply any global expression folding prior to the DFG pass. This
|
||||
option is solely for the purpose of DFG testing and should not be used
|
||||
otherwise.
|
||||
Rarely needed. Do not apply any global expression folding prior to the
|
||||
DFG pass. This option is solely for the purpose of DFG testing and
|
||||
should not be used otherwise.
|
||||
|
||||
.. option:: -fno-const-bit-op-tree
|
||||
|
||||
.. option:: -fno-const-eager
|
||||
|
||||
.. option:: -fno-dead-assigns
|
||||
|
||||
.. option:: -fno-dead-cells
|
||||
|
||||
.. option:: -fno-dedup
|
||||
|
||||
.. option:: -fno-dfg
|
||||
|
||||
Disable all use of the DFG-based combinational logic optimizer.
|
||||
Alias for :vlopt:`-fno-dfg-pre-inline` and :vlopt:`-fno-dfg-post-inline`.
|
||||
Rarely needed. Disable all use of the DFG-based combinational logic
|
||||
optimizer. Alias for :vlopt:`-fno-dfg-pre-inline`,
|
||||
:vlopt:`-fno-dfg-post-inline` and :vlopt:`-fno-dfg-scoped`.
|
||||
|
||||
.. option:: -fno-dfg-break-cycles
|
||||
|
||||
Rarely needed. Disable breaking combinational cycles during DFG.
|
||||
|
||||
.. option:: -fno-dfg-peephole
|
||||
|
||||
Disable the DFG peephole optimizer.
|
||||
Rarely needed. Disable the DFG peephole optimizer.
|
||||
|
||||
.. option:: -fno-dfg-peephole-<pattern>
|
||||
|
||||
Disable individual DFG peephole optimizer pattern.
|
||||
Rarely needed. Disable individual DFG peephole optimizer pattern.
|
||||
|
||||
.. option:: -fno-dfg-post-inline
|
||||
|
||||
Do not apply the DFG optimizer after inlining.
|
||||
Rarely needed. Do not apply the DFG optimizer after inlining.
|
||||
|
||||
.. option:: -fno-dfg-pre-inline
|
||||
|
||||
Do not apply the DFG optimizer before inlining.
|
||||
Rarely needed. Do not apply the DFG optimizer before inlining.
|
||||
|
||||
.. option:: -fno-dfg-scoped
|
||||
|
||||
Rarely needed. Do not apply the DFG optimizer across module scopes.
|
||||
|
||||
.. option:: -fno-expand
|
||||
|
||||
@@ -607,6 +675,10 @@ Summary:
|
||||
|
||||
.. option:: -fno-gate
|
||||
|
||||
Rarely needed. Do not apply the gate-level wire optimizations. Using
|
||||
this is not recommended as may cause additional warnings and ordering
|
||||
issues.
|
||||
|
||||
.. option:: -fno-inline
|
||||
|
||||
.. option:: -fno-inline-funcs
|
||||
@@ -643,8 +715,9 @@ Summary:
|
||||
|
||||
.. option:: -fno-var-split
|
||||
|
||||
Do not attempt to split variables automatically. Variables explicitly
|
||||
annotated with :option:`/*verilator&32;split_var*/` are still split.
|
||||
Rarely needed. Do not attempt to split variables
|
||||
automatically. Variables explicitly annotated with
|
||||
:option:`/*verilator&32;split_var*/` are still split.
|
||||
|
||||
.. option:: -future0 <option>
|
||||
|
||||
@@ -728,7 +801,8 @@ Summary:
|
||||
be useful in makefiles. See also :vlopt:`-V`, and the various
|
||||
:file:`*.mk` files.
|
||||
|
||||
Feature may be one of the following: COROUTINES, SYSTEMC.
|
||||
Feature may be one of the following: COROUTINES, DEV_ASAN, DEV_GCOV,
|
||||
SYSTEMC.
|
||||
|
||||
.. option:: --getenv <variable>
|
||||
|
||||
@@ -748,12 +822,29 @@ Summary:
|
||||
:option:`/*verilator&32;hier_block*/` metacomment is ignored. See
|
||||
:ref:`Hierarchical Verilation`.
|
||||
|
||||
.. option:: --hierarchical-block <block>
|
||||
|
||||
Internal use only, for :vlopt:`--hierarchical`.
|
||||
|
||||
.. option:: --hierarchical-child <block>
|
||||
|
||||
Internal use only, for :vlopt:`--hierarchical`.
|
||||
|
||||
.. 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`.
|
||||
Rarely needed - internal use. 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:: --hierarchical-threads <threads>
|
||||
|
||||
Specifies the number of threads used for scheduling hierarchical blocks.
|
||||
This allows scheduling multi-thread hierarchical blocks on multiple
|
||||
threads, without increasing the parallelism of the entire design.
|
||||
|
||||
Set to :vlopt:`--threads` by default. For optimal performance should not
|
||||
exceed the CPU thread count.
|
||||
|
||||
.. option:: -I<dir>
|
||||
|
||||
@@ -796,9 +887,10 @@ Summary:
|
||||
of Verilator if :vlopt:`--verilate-jobs` isn't provided. Also sets
|
||||
:vlopt:`--output-groups` if isn't provided.
|
||||
|
||||
If zero, uses the number of threads in the current hardware. Otherwise,
|
||||
must be a positive integer specifying the maximum number of parallel
|
||||
build jobs.
|
||||
If zero, uses the number of threads available to the process, which is the
|
||||
number of threads assigned by processor affinity (e.g. using `numactl`), or
|
||||
the number of threads in the host hardware if unspecified. Otherwise, must
|
||||
be a positive integer specifying the maximum number of parallel build jobs.
|
||||
|
||||
.. option:: --no-json-edit-nums
|
||||
|
||||
@@ -824,13 +916,15 @@ Summary:
|
||||
|
||||
.. 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`.
|
||||
Specifies the filename for the metadata output file (`.tree.meta.json`)
|
||||
of :vlopt:`--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`.
|
||||
Specifies the filename for the main output file (`.tree.json`) of
|
||||
:vlopt:`--json-only`. Using this option automatically sets
|
||||
:vlopt:`--json-only`.
|
||||
|
||||
.. option:: --l2-name <value>
|
||||
|
||||
@@ -889,6 +983,10 @@ Summary:
|
||||
"+libext+" is relatively standard across Verilog tools. Defaults to
|
||||
".v+.sv".
|
||||
|
||||
.. option:: +librescan
|
||||
|
||||
Ignored for compatibility with other simulators.
|
||||
|
||||
.. option:: --lint-only
|
||||
|
||||
Check the files for lint violations only, do not create any other
|
||||
@@ -956,7 +1054,7 @@ Summary:
|
||||
|
||||
.. option:: --max-num-width <value>
|
||||
|
||||
Set the maximum number literal width (e.g., in 1024'd22 this
|
||||
Set the maximum number literal width (e.g., in 1024'd22 the
|
||||
1024). Defaults to 64K.
|
||||
|
||||
.. option:: --Mdir <directory>
|
||||
@@ -997,6 +1095,15 @@ Summary:
|
||||
|
||||
Disables optimization of the model.
|
||||
|
||||
.. option:: -O1
|
||||
|
||||
Enables default optimization of the model. This is the default
|
||||
optimization level.
|
||||
|
||||
.. option:: -O2
|
||||
|
||||
Enables stronger than default optimization of the model.
|
||||
|
||||
.. option:: -O3
|
||||
|
||||
Enables slow optimizations for the code Verilator itself generates (as
|
||||
@@ -1160,7 +1267,8 @@ Summary:
|
||||
|
||||
.. option:: --pp-comments
|
||||
|
||||
With :vlopt:`-E`, show comments in preprocessor output.
|
||||
Deprecated. In versions before 5.042, the name for
|
||||
:vlopt:`--preproc-comments`.
|
||||
|
||||
.. option:: --prefix <topname>
|
||||
|
||||
@@ -1168,6 +1276,14 @@ Summary:
|
||||
prepended to the name of the :vlopt:`--top` option, or V prepended to
|
||||
the first Verilog filename passed on the command line.
|
||||
|
||||
.. option:: --preproc-comments
|
||||
|
||||
With :vlopt:`-E`, show comments in preprocessor output.
|
||||
|
||||
.. option:: --preproc-defines
|
||||
|
||||
With :vlopt:`-E`, show defines and undefs in preprocessor output.
|
||||
|
||||
.. option:: --preproc-resolve
|
||||
|
||||
With :vlopt:`-E`, resolve referenced instance modules, to include
|
||||
@@ -1184,8 +1300,8 @@ Summary:
|
||||
|
||||
.. option:: --private
|
||||
|
||||
Opposite of :vlopt:`--public`. This is the default; this option exists for
|
||||
backwards compatibility.
|
||||
Rarely needed. Opposite of :vlopt:`--public`. This is the default; this
|
||||
option exists for backwards compatibility.
|
||||
|
||||
.. option:: --prof-c
|
||||
|
||||
@@ -1273,8 +1389,8 @@ Summary:
|
||||
|
||||
.. option:: --public
|
||||
|
||||
This is only for historical debugging use and using it may result in
|
||||
mis-simulation of generated clocks.
|
||||
Rarely needed. This is only for historical debugging use and using it
|
||||
may result in mis-simulation of generated clocks.
|
||||
|
||||
Declares all signals and modules public. This will turn off signal
|
||||
optimizations as if all signals had a :option:`/*verilator&32;public*/`
|
||||
@@ -1293,13 +1409,12 @@ Summary:
|
||||
.. option:: --public-flat-rw
|
||||
|
||||
Declares all variables, ports, and wires public as if they had
|
||||
:code:`/*verilator public_flat_rw @ (<variable's_source_process_edge>)*/`
|
||||
metacomments. This will make them VPI accessible by their flat name,
|
||||
but not turn off module inlining. This is particularly useful in
|
||||
combination with :vlopt:`--vpi`. This may also in some rare cases result
|
||||
in mis-simulation of generated clocks. Instead of this global option,
|
||||
marking only those signals that need public_flat_rw is typically
|
||||
significantly better performing.
|
||||
:code:`/*verilator public_flat_rw*/` metacomments. This will make them VPI
|
||||
accessible by their flat name, but not turn off module inlining. This is
|
||||
particularly useful in combination with :vlopt:`--vpi`. This may also in
|
||||
some rare cases result in mis-simulation of generated clocks. Instead of
|
||||
this global option, marking only those signals that need public_flat_rw is
|
||||
typically significantly better performing.
|
||||
|
||||
.. option:: --public-ignore
|
||||
|
||||
@@ -1340,7 +1455,7 @@ Summary:
|
||||
the path of the referencing file, instead of relative to the current
|
||||
directory.
|
||||
|
||||
.. option:: --reloop-limit
|
||||
.. option:: --reloop-limit <value>
|
||||
|
||||
Rarely needed. Verilator attempts to turn some common sequences of
|
||||
statements into loops in the output. This argument specifies the minimum
|
||||
@@ -1561,9 +1676,8 @@ Summary:
|
||||
When the input Verilog contains more than one top-level module,
|
||||
it specifies the name of the module to become the top-level module,
|
||||
and sets the default for :vlopt:`--prefix` if not explicitly specified.
|
||||
This is not needed with standard designs with only one top. See also
|
||||
:option:`MULTITOP` warning.
|
||||
|
||||
This is not needed with standard designs with only one top.
|
||||
See :ref:`Finding and Binding Modules`.
|
||||
|
||||
.. option:: --trace
|
||||
|
||||
@@ -1606,14 +1720,15 @@ Summary:
|
||||
.. option:: --trace-max-array <depth>
|
||||
|
||||
Rarely needed. Specify the maximum array depth of a signal that may be
|
||||
traced. Defaults to 32, as tracing large arrays may greatly slow traced
|
||||
simulations.
|
||||
traced. Zero allows any width. Defaults to 32, as tracing large arrays
|
||||
may greatly slow traced simulations.
|
||||
|
||||
.. option:: --trace-max-width <width>
|
||||
|
||||
Rarely needed. Specify the maximum bit width of a signal that may be
|
||||
traced. Defaults to 256, as tracing large vectors may greatly slow
|
||||
traced simulations.
|
||||
Rarely needed. Specify the maximum total bit width of a signal, across
|
||||
all elements if an array, that may be traced. Zero allows any width.
|
||||
Defaults to 4096, as tracing large vectors may greatly slow traced
|
||||
simulations.
|
||||
|
||||
.. option:: --no-trace-params
|
||||
|
||||
@@ -1720,8 +1835,8 @@ Summary:
|
||||
|
||||
.. option:: --valgrind
|
||||
|
||||
Run Verilator under `Valgrind <https://valgrind.org/>`_. The command may be
|
||||
changed with :option:`VERILATOR_VALGRIND`.
|
||||
Rarely needed. Run Verilator under `Valgrind <https://valgrind.org/>`_.
|
||||
The command may be changed with :option:`VERILATOR_VALGRIND`.
|
||||
|
||||
.. option:: --no-verilate
|
||||
|
||||
@@ -1732,7 +1847,9 @@ Summary:
|
||||
.. option:: --verilate-jobs <value>
|
||||
|
||||
Specify the level of parallelism for the internal compilation steps of
|
||||
Verilator. If zero, uses the number of threads in the current hardware.
|
||||
Verilator. If zero, uses the number of threads available to the process,
|
||||
which is the number of threads assigned by processor affinity (e.g. using
|
||||
`numactl`), or the number of threads in the host hardware if unspecified.
|
||||
Otherwise, must be a positive integer specifying the maximum number of
|
||||
parallel build jobs.
|
||||
|
||||
@@ -1774,7 +1891,7 @@ Summary:
|
||||
them systematically.
|
||||
|
||||
The generated file is in the Verilator Configuration format, see
|
||||
:ref:`Configuration Files`. The standard file extension is ".vlt".
|
||||
:ref:`Verilator Control Files`. The standard file extension is ".vlt".
|
||||
These files can directly be consumed by Verilator, typically by placing
|
||||
the filename as part of the Verilator command line options. Waiver files
|
||||
need to be listed on the command line before listing the files they are
|
||||
@@ -1824,7 +1941,7 @@ Summary:
|
||||
.. option:: -Wno-lint
|
||||
|
||||
Disable all lint-related warning messages, and all style warnings. This
|
||||
is equivalent to ``-Wno-ALWCOMBORDER`` ``-Wno-ASCRANGE``
|
||||
is equivalent to ``-Wno-ALWCOMBORDER`` ``-Wno-ASCRANGE`` ``-Wno-ASSIGNEQEXPR``
|
||||
``-Wno-BSSPACE`` ``-Wno-CASEINCOMPLETE`` ``-Wno-CASEOVERLAP``
|
||||
``-Wno-CASEX`` ``-Wno-CASTCONST`` ``-Wno-CASEWITHX`` ``-Wno-CMPCONST``
|
||||
``-Wno-COLONPLUS`` ``-Wno-IMPLICIT`` ``-Wno-IMPLICITSTATIC``
|
||||
@@ -1847,6 +1964,19 @@ Summary:
|
||||
``-Wno-UNUSEDGENVAR`` ``-Wno-UNUSEDPARAM`` ``-Wno-UNUSEDSIGNAL``
|
||||
``-Wno-VARHIDDEN``.
|
||||
|
||||
.. option:: -work <libname>
|
||||
|
||||
Use the specified Verilog config library name for all cells read after
|
||||
this argument. May be specified multiple times, it will apply to cells
|
||||
read between the given arguments. E.g. `-work liba a.v -work libb b.v`
|
||||
will use `liba` for modules inside `a.v` or in cells resolved
|
||||
hierarchically under those modules, and will use `libb` for modules
|
||||
inside `b.v` or hierarchically under.
|
||||
|
||||
Defaults to "work" (IEEE 1800-2023 3.3.1).
|
||||
|
||||
See :ref:`Finding and Binding Modules`.
|
||||
|
||||
.. option:: -Wpedantic
|
||||
|
||||
Warn on any construct demanded by IEEE, and disable all Verilator
|
||||
@@ -1865,14 +1995,14 @@ Summary:
|
||||
|
||||
Enable all lint-related warning messages (note that by default, they are
|
||||
already enabled), but do not affect style messages. This is equivalent
|
||||
to ``-Wwarn-ALWCOMBORDER`` ``-Wwarn-ASCRANGE`` ``-Wwarn-BSSPACE``
|
||||
``-Wwarn-CASEINCOMPLETE`` ``-Wwarn-CASEOVERLAP`` ``-Wwarn-CASEWITHX``
|
||||
``-Wwarn-CASEX`` ``-Wwarn-CASTCONST`` ``-Wwarn-CMPCONST``
|
||||
``-Wwarn-COLONPLUS`` ``-Wwarn-IMPLICIT`` ``-Wwarn-IMPLICITSTATIC``
|
||||
``-Wwarn-LATCH`` ``-Wwarn-MISINDENT`` ``-Wwarn-NEWERSTD``
|
||||
``-Wwarn-PREPROCZERO`` ``-Wwarn-PINMISSING`` ``-Wwarn-REALCVT``
|
||||
``-Wwarn-STATICVAR`` ``-Wwarn-UNSIGNED`` ``-Wwarn-WIDTHTRUNC``
|
||||
``-Wwarn-WIDTHEXPAND`` ``-Wwarn-WIDTHXZEXPAND``.
|
||||
to ``-Wwarn-ALWCOMBORDER`` ``-Wwarn-ASCRANGE`` ``-Wno-ASSIGNEQEXPR``
|
||||
``-Wwarn-BSSPACE`` ``-Wwarn-CASEINCOMPLETE`` ``-Wwarn-CASEOVERLAP``
|
||||
``-Wwarn-CASEWITHX`` ``-Wwarn-CASEX`` ``-Wwarn-CASTCONST``
|
||||
``-Wwarn-CMPCONST`` ``-Wwarn-COLONPLUS`` ``-Wwarn-IMPLICIT``
|
||||
``-Wwarn-IMPLICITSTATIC`` ``-Wwarn-LATCH`` ``-Wwarn-MISINDENT``
|
||||
``-Wwarn-NEWERSTD`` ``-Wwarn-PREPROCZERO`` ``-Wwarn-PINMISSING``
|
||||
``-Wwarn-REALCVT`` ``-Wwarn-STATICVAR`` ``-Wwarn-UNSIGNED``
|
||||
``-Wwarn-WIDTHTRUNC`` ``-Wwarn-WIDTHEXPAND`` ``-Wwarn-WIDTHXZEXPAND``.
|
||||
|
||||
.. option:: -Wwarn-style
|
||||
|
||||
@@ -1880,9 +2010,9 @@ Summary:
|
||||
``-Wwarn-ASSIGNDLY`` ``-Wwarn-BLKSEQ`` ``-Wwarn-DECLFILENAME``
|
||||
``-Wwarn-DEFPARAM`` ``-Wwarn-EOFNEWLINE`` ``-Wwarn-GENUNNAMED``
|
||||
``-Wwarn-IMPORTSTAR`` ``-Wwarn-INCABSPATH`` ``-Wwarn-PINCONNECTEMPTY``
|
||||
``-Wwarn-PINNOCONNECT`` ``-Wwarn-SYNCASYNCNET`` ``-Wwarn-UNDRIVEN``
|
||||
``-Wwarn-UNUSEDGENVAR`` ``-Wwarn-UNUSEDLOOP`` ``-Wwarn-UNUSEDPARAM``
|
||||
``-Wwarn-UNUSEDSIGNAL`` ``-Wwarn-VARHIDDEN``.
|
||||
``-Wwarn-PINNOCONNECT`` ``-Wwarn-PROCASSINIT`` ``-Wwarn-SYNCASYNCNET``
|
||||
``-Wwarn-UNDRIVEN`` ``-Wwarn-UNUSEDGENVAR`` ``-Wwarn-UNUSEDLOOP``
|
||||
``-Wwarn-UNUSEDPARAM`` ``-Wwarn-UNUSEDSIGNAL`` ``-Wwarn-VARHIDDEN``.
|
||||
|
||||
.. option:: --x-assign <mode>
|
||||
|
||||
@@ -1906,14 +2036,13 @@ Summary:
|
||||
different seeds on different executions. This method is the slowest,
|
||||
but safest for finding reset bugs.
|
||||
|
||||
If using `--x-assign unique`, you may want to seed your random number
|
||||
generator such that each regression run gets a different randomization
|
||||
sequence. The simplest is to use the
|
||||
:vlopt:`+verilator+seed+\<value\>` runtime option. Alternatively, use
|
||||
the system's :code:`srand48()` or for Windows :code:`srand()` function
|
||||
to do this. You'll probably also want to print any seeds selected,
|
||||
and code to enable rerunning with that same seed so you can reproduce
|
||||
bugs.
|
||||
If using `--x-assign unique`, use the
|
||||
:vlopt:`+verilator+rand+reset+2 <+verilator+rand+reset+\<value\>>`
|
||||
runtime option, and seed the runtime random number generator such that
|
||||
each regression run gets a different randomization sequence with
|
||||
:vlopt:`+verilator+seed+\<value\>`. You'll probably also want to
|
||||
print any seeds selected, and code to enable rerunning with that same
|
||||
seed, so you can reproduce bugs.
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -1936,6 +2065,14 @@ Summary:
|
||||
use for each initialization. This gives the greatest flexibility and
|
||||
allows for finding reset bugs. See :ref:`Unknown states`.
|
||||
|
||||
If using `--x-initial unique`, use the
|
||||
:vlopt:`+verilator+rand+reset+2 <+verilator+rand+reset+\<value\>>`
|
||||
runtime option, and seed the runtime random number generator such that
|
||||
each regression run gets a different randomization sequence with
|
||||
:vlopt:`+verilator+seed+\<value\>`. You'll probably also want to
|
||||
print any seeds selected, and code to enable rerunning with that same
|
||||
seed, so you can reproduce bugs.
|
||||
|
||||
With "--x-initial fast",
|
||||
is best for performance, and initializes all variables to a state
|
||||
Verilator determines is optimal. This may allow further code
|
||||
@@ -1957,12 +2094,12 @@ Summary:
|
||||
|
||||
.. code-block:: sv
|
||||
|
||||
reg res_n = 1'b0;
|
||||
logic res_n = 1'b0;
|
||||
|
||||
always @(negedge rst_n) begin
|
||||
if (rst_n == 1'b0) begin
|
||||
res_n <= 1'b1;
|
||||
end
|
||||
if (rst_n == 1'b0) begin
|
||||
res_n <= 1'b1;
|
||||
end
|
||||
end
|
||||
|
||||
In Verilator, by default, uninitialized clocks are given a value of
|
||||
@@ -1980,6 +2117,26 @@ Summary:
|
||||
iterations. This may be another indication of problems with the
|
||||
modeled design that should be addressed.
|
||||
|
||||
Instead of using this option, one technique is to explicitly create the
|
||||
appropriate edge by creating a value at construction, and a value in an
|
||||
initial block at time zero:
|
||||
|
||||
.. code-block:: sv
|
||||
|
||||
logic rst_n = 1; // value at construction
|
||||
|
||||
initial begin
|
||||
rst_n = 0; // value at time zero
|
||||
// ... rest
|
||||
end
|
||||
|
||||
always @(negedge rst_n) begin
|
||||
if (rst_n == 1'b0) begin
|
||||
res_n <= 1'b1;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
.. option:: --xml-only
|
||||
|
||||
Create XML output only, do not create any other output.
|
||||
@@ -2015,18 +2172,20 @@ Summary:
|
||||
filenames.
|
||||
|
||||
|
||||
.. _Configuration Files:
|
||||
.. _Verilator Control Files:
|
||||
|
||||
=====================
|
||||
Configuration Files
|
||||
=====================
|
||||
=======================
|
||||
Verilator Control Files
|
||||
=======================
|
||||
|
||||
In addition to the command line, warnings and other features for the
|
||||
:command:`verilator` command may be controlled with configuration files,
|
||||
typically named with the `.vlt` extension (what makes it a configuration
|
||||
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.
|
||||
:command:`verilator` command may be controlled with Verilator Control
|
||||
Files, not to be confused with IEEE Configurations blocks
|
||||
(`config...endconfig`). Typically named with the `.vlt` extension, what
|
||||
makes it a Verilator Control 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 control file with a `.v` or
|
||||
other suffix.
|
||||
|
||||
An example:
|
||||
|
||||
@@ -2038,19 +2197,20 @@ An example:
|
||||
|
||||
This disables WIDTH warnings globally, and CASEX for a specific file.
|
||||
|
||||
Configuration files are fed through the normal Verilog preprocessor prior
|
||||
to parsing, so "\`ifdef", "\`define", and comments may be used as if the
|
||||
configuration file was standard Verilog code.
|
||||
Verilator control files are fed through the normal Verilog
|
||||
preprocessor prior to parsing, so "\`ifdef", "\`define", and comments may
|
||||
be used as if the control file was standard Verilog code.
|
||||
|
||||
Note that file or line-specific configuration only applies to files read
|
||||
after the configuration file. It is therefore recommended to pass the
|
||||
configuration file to Verilator as the first file.
|
||||
Note that file or line-specific control only applies to files read
|
||||
after the control file. It is therefore recommended to pass the
|
||||
control file to Verilator as the first file.
|
||||
|
||||
The grammar of configuration commands is as follows:
|
||||
The grammar of control commands is as follows:
|
||||
|
||||
.. option:: `verilator_config
|
||||
|
||||
Take the remaining text and treat it as Verilator configuration commands.
|
||||
Take the remaining text and treat it as Verilator Control File commands.
|
||||
See :ref:`Verilator Control Files`.
|
||||
|
||||
.. option:: clock_enable -module "<modulename>" -var "<signame>"
|
||||
|
||||
@@ -2074,6 +2234,10 @@ The grammar of configuration commands is as follows:
|
||||
|
||||
.. option:: no_clocker -module "<modulename>" [-task "<taskname>"] -var "<signame>"
|
||||
|
||||
Deprecated and has no effect (ignored).
|
||||
|
||||
In versions before 5.042:
|
||||
|
||||
Indicates whether the signal is used as clock or not. Verilator uses
|
||||
this information to mark the signal and any derived signals as clocker.
|
||||
See :vlopt:`--clk`.
|
||||
@@ -2201,7 +2365,7 @@ The grammar of configuration commands is as follows:
|
||||
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
|
||||
control 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.
|
||||
|
||||
@@ -2235,13 +2399,13 @@ The grammar of configuration commands is as follows:
|
||||
order to improve model runtime performance. This option is not expected
|
||||
to be used by users directly. See :ref:`Thread PGO`.
|
||||
|
||||
.. option:: public [-module "<modulename>"] [-task/-function "<taskname>"] -var "<signame>"
|
||||
.. option:: public [-module "<modulename>"] [-task/-function "<taskname>"] [-var "<signame>"]
|
||||
|
||||
.. option:: public_flat [-module "<modulename>"] [-task/-function "<taskname>"] -var "<signame>"
|
||||
.. option:: public_flat [-module "<modulename>"] [-task/-function "<taskname>"] [-var "<signame>"]
|
||||
|
||||
.. option:: public_flat_rd [-module "<modulename>"] [-task/-function "<taskname>"] -var "<signame>"
|
||||
.. option:: public_flat_rd [-module "<modulename>"] [-task/-function "<taskname>"] [-var "<signame>"]
|
||||
|
||||
.. option:: public_flat_rw [-module "<modulename>"] [-task/-function "<taskname>"] -var "<signame>" "@(edge)"
|
||||
.. option:: public_flat_rw [-module "<modulename>"] [-task/-function "<taskname>"] [-var "<signame>"] ["@(edge)"]
|
||||
|
||||
Sets the variable to be public. Same as
|
||||
:option:`/*verilator&32;public*/` or
|
||||
|
||||
@@ -124,6 +124,12 @@ verilator_coverage Arguments
|
||||
|
||||
This option should be used together with :option:`--annotate`.
|
||||
|
||||
.. option:: --filter-type <regex>
|
||||
|
||||
Skips records of coverage types that matches with <regex>
|
||||
Possible values are `toggle`, `line`, `branch`, `expr`, `user` and
|
||||
a wildcard with `\*` or `?`. The default value is `\*`.
|
||||
|
||||
.. option:: --help
|
||||
|
||||
Displays a help summary, the program version, and exits.
|
||||
|
||||
+57
-39
@@ -30,7 +30,7 @@ or "`ifdef`"'s may break other tools.
|
||||
|
||||
Specifies the entire begin/end block should be ignored for coverage
|
||||
analysis. Must be inside a code block, e.g., within a begin/end pair.
|
||||
Same as :option:`coverage_block_off` in :ref:`Configuration Files`.
|
||||
Same as :option:`coverage_block_off` in :ref:`Verilator Control Files`.
|
||||
|
||||
.. option:: `error [string]
|
||||
|
||||
@@ -135,14 +135,15 @@ or "`ifdef`"'s may break other tools.
|
||||
|
||||
.. option:: `verilator_config
|
||||
|
||||
Take the remaining text up to the next :option:`\`verilog` mode switch and
|
||||
treat it as Verilator configuration commands. See :ref:`Configuration Files`.
|
||||
Take the remaining text up to the next :option:`\`verilog` mode switch
|
||||
and treat it as Verilator Control File commands. See :ref:`Verilator
|
||||
Control Files`.
|
||||
|
||||
.. option:: `VERILATOR_TIMING
|
||||
|
||||
The VERILATOR_TIMING define is set when :vlopt:`--timing` is used to
|
||||
allow an "\`ifdef" of code dependent on this feature. Note that this define
|
||||
is not affected by the :option:`timing_off` configuration file option
|
||||
is not affected by the :option:`timing_off` control file option
|
||||
nor timing metacomments.
|
||||
|
||||
.. option:: `verilog
|
||||
@@ -155,7 +156,7 @@ or "`ifdef`"'s may break other tools.
|
||||
|
||||
.. t_dist_docs_style restart_sort
|
||||
|
||||
.. option:: $c([string], ...);
|
||||
.. option:: $c([string], ...);, $cpure([string], ...);
|
||||
|
||||
The string will be embedded directly in the output C++ code at the point
|
||||
where the surrounding Verilog code is compiled. It may either be a
|
||||
@@ -195,6 +196,11 @@ or "`ifdef`"'s may break other tools.
|
||||
compatibility with other simulators, which require a differently named
|
||||
PLI function name for each different output width.
|
||||
|
||||
`$cpure` is similar to `$c` except that it indicates the
|
||||
expression is pure, versus `$c` which is assumed impure.
|
||||
`$cpure` is for internal use only, and it might change
|
||||
without notice in any future version or Verilator.
|
||||
|
||||
.. option:: $display, $write, $fdisplay, $fwrite, $sformat, $swrite
|
||||
|
||||
Format arguments may use C fprintf sizes after the % escape. Per the
|
||||
@@ -239,13 +245,13 @@ or "`ifdef`"'s may break other tools.
|
||||
reg enable_r /*verilator clock_enable*/;
|
||||
wire gated_clk = clk & enable_r;
|
||||
always_ff @(posedge clk)
|
||||
enable_r <= enable_early;
|
||||
enable_r <= enable_early;
|
||||
|
||||
The clock_enable attribute will cause the clock gate to be ignored in
|
||||
the scheduling algorithm, sometimes required for correct clock behavior,
|
||||
and always improving performance.
|
||||
|
||||
Same as :option:`clock_enable` configuration file option.
|
||||
Same as :option:`clock_enable` control file option.
|
||||
|
||||
|
||||
.. t_dist_docs_style ignore /*verilator&32;no_clocker*/
|
||||
@@ -254,6 +260,10 @@ or "`ifdef`"'s may break other tools.
|
||||
|
||||
.. option:: /*verilator&32;no_clocker*/
|
||||
|
||||
Deprecated and has no effect (ignored).
|
||||
|
||||
In versions before 5.042:
|
||||
|
||||
Specifies whether the signal is used as clock or not. See :vlopt:`--clk`.
|
||||
|
||||
Same as :option:`clocker` and :option:`no_clocker` in configuration
|
||||
@@ -264,7 +274,7 @@ or "`ifdef`"'s may break other tools.
|
||||
Specifies the entire begin/end block should be ignored for coverage
|
||||
analysis purposes.
|
||||
|
||||
Same as :option:`coverage_block_off` configuration file option.
|
||||
Same as :option:`coverage_block_off` control file option.
|
||||
|
||||
.. option:: /*verilator&32;coverage_off*/
|
||||
|
||||
@@ -312,7 +322,7 @@ or "`ifdef`"'s may break other tools.
|
||||
submodules will be named :code:`{submodule}__DOT__{subsignal}` as C++
|
||||
does not allow "." in signal names.
|
||||
|
||||
Same as :option:`inline` configuration file option.
|
||||
Same as :option:`inline` control file option.
|
||||
|
||||
.. option:: /*verilator&32;isolate_assignments*/
|
||||
|
||||
@@ -330,8 +340,8 @@ or "`ifdef`"'s may break other tools.
|
||||
// Note the placement of the semicolon above
|
||||
always_comb begin
|
||||
if (....) begin
|
||||
splitme = ....;
|
||||
other assignments
|
||||
splitme = ....;
|
||||
other assignments
|
||||
end
|
||||
end
|
||||
|
||||
@@ -345,27 +355,32 @@ or "`ifdef`"'s may break other tools.
|
||||
// All assignments excluding those to splitme
|
||||
always_comb begin
|
||||
if (....) begin
|
||||
other assignments
|
||||
other assignments
|
||||
end
|
||||
end
|
||||
// All assignments to splitme
|
||||
always_comb begin
|
||||
if (....) begin
|
||||
splitme = ....;
|
||||
splitme = ....;
|
||||
end
|
||||
end
|
||||
|
||||
Same as :option:`isolate_assignments` configuration file option.
|
||||
Same as :option:`isolate_assignments` control file option.
|
||||
|
||||
.. option:: /*verilator&32;lint_off <msg>*/
|
||||
.. option:: /*verilator&32;lint_off <msgs>*/
|
||||
|
||||
Disable the specified warning message for any warnings following the
|
||||
comment.
|
||||
Disable the specified warning message(s) for any warnings following the
|
||||
comment. Multiple messages may be specified, separated with commas.
|
||||
|
||||
.. option:: /*verilator&32;lint_on <msg>*/
|
||||
If a one-line slash-slash-format comment is used, then the metacomment
|
||||
ends at the newline or at an earlier next slash-slash. This allow
|
||||
commenting the reason for the disable, e.g. :code:`// verilator lint_off
|
||||
MSG // Because...`.
|
||||
|
||||
Re-enable the specified warning message for any warnings following the
|
||||
comment.
|
||||
.. option:: /*verilator&32;lint_on <msgs>*/
|
||||
|
||||
Re-enable the specified warning message(s) for any warnings following
|
||||
the comment. Multiple messages may be specified, separated with commas.
|
||||
|
||||
.. option:: /*verilator&32;lint_restore*/
|
||||
|
||||
@@ -394,7 +409,7 @@ or "`ifdef`"'s may break other tools.
|
||||
Specifies the module the comment appears in should not be inlined into
|
||||
any modules that use this module.
|
||||
|
||||
Same as :option:`no_inline` configuration file option.
|
||||
Same as :option:`no_inline` control file option.
|
||||
|
||||
.. option:: /*verilator&32;no_inline_task*/
|
||||
|
||||
@@ -405,7 +420,7 @@ or "`ifdef`"'s may break other tools.
|
||||
must be pure; they cannot reference any variables outside the task
|
||||
itself.
|
||||
|
||||
Same as :option:`no_inline` configuration file option.
|
||||
Same as :option:`no_inline` control file option.
|
||||
|
||||
.. option:: /*verilator&32;public*/ (on parameter)
|
||||
|
||||
@@ -439,7 +454,7 @@ or "`ifdef`"'s may break other tools.
|
||||
You may want to use DPI exports instead, as it's compatible with other
|
||||
simulators.
|
||||
|
||||
Same as :option:`public` configuration file option.
|
||||
Same as :option:`public` control file option.
|
||||
|
||||
.. option:: /*verilator&32;public*/ (on typedef enum)
|
||||
|
||||
@@ -462,7 +477,7 @@ or "`ifdef`"'s may break other tools.
|
||||
function that accesses the variable. This is nicer as it provides an
|
||||
obvious entry point compatible across simulators.
|
||||
|
||||
Same as :option:`public` configuration file option.
|
||||
Same as :option:`public` control file option.
|
||||
|
||||
.. option:: /*verilator&32;public_[|flat|flat_rd|flat_rw]_on [@(<edge_list>)]*/ (as scope)
|
||||
|
||||
@@ -495,24 +510,27 @@ or "`ifdef`"'s may break other tools.
|
||||
the name of the signal or path to it may change based upon the module
|
||||
inlining which takes place.
|
||||
|
||||
Same as :option:`public_flat` configuration file option.
|
||||
Same as :option:`public_flat` control file option.
|
||||
|
||||
.. option:: /*verilator&32;public_flat_rd*/ (on variable)
|
||||
|
||||
Used after an input, output, register, or wire declaration to indicate
|
||||
the signal should be declared public_flat (see above), but read-only.
|
||||
|
||||
Same as :option:`public_flat_rd` configuration file option.
|
||||
Same as :option:`public_flat_rd` control file option.
|
||||
|
||||
.. option:: /*verilator&32;public_flat_rw @(<edge_list>)*/ (on variable)
|
||||
.. option:: /*verilator&32;public_flat_rw [@(<edge_list>)]*/ (on variable)
|
||||
|
||||
Used after an input, output, register, or wire declaration to indicate
|
||||
the signal should be declared public_flat_rd (see above), and writable,
|
||||
where writes should be considered to have the timing specified by the
|
||||
given sensitivity edge list. Use of this is implied when using the
|
||||
:vlopt:`--public-flat-rw` option.
|
||||
Used after an input, output, register, or wire declaration to indicate the
|
||||
signal should be declared public_flat_rd (see above), and writable. Use of
|
||||
this is implied when using the :vlopt:`--public-flat-rw` option.
|
||||
|
||||
Same as :option:`public_flat_rw` configuration file option.
|
||||
The edge list is optional and has no effect (is ignored). Prior to
|
||||
Verilator 5.024 the edge list specified the timing when writes took
|
||||
place. This is no longer necessary and is accepted only for
|
||||
compatibility.
|
||||
|
||||
Same as :option:`public_flat_rw` control file option.
|
||||
|
||||
.. option:: /*verilator&32;public_module*/
|
||||
|
||||
@@ -522,7 +540,7 @@ or "`ifdef`"'s may break other tools.
|
||||
contains public signals or \`systemc_ directives. Use of this is
|
||||
implied when using the :vlopt:`--public` option.
|
||||
|
||||
Same as :option:`public` configuration file option.
|
||||
Same as :option:`public` control file option.
|
||||
|
||||
.. option:: /*verilator&32;public_off*/
|
||||
|
||||
@@ -537,7 +555,7 @@ or "`ifdef`"'s may break other tools.
|
||||
In general, you should avoid using this attribute when unnecessary, as
|
||||
the performance decreases significantly with increasing usage of sc_bv.
|
||||
|
||||
Same as :option:`sc_bv` configuration file option.
|
||||
Same as :option:`sc_bv` control file option.
|
||||
|
||||
.. option:: /*verilator&32;sc_clock*/
|
||||
|
||||
@@ -555,7 +573,7 @@ or "`ifdef`"'s may break other tools.
|
||||
$display-like behavior. See the :file:`test_regress/t/t_dpi_display.v`
|
||||
file for an example.
|
||||
|
||||
Same as :option:`sformat` configuration file option.
|
||||
Same as :option:`sformat` control file option.
|
||||
|
||||
.. option:: /*verilator&32;split_var*/
|
||||
|
||||
@@ -602,7 +620,7 @@ or "`ifdef`"'s may break other tools.
|
||||
assign bar = tmp[1] + c;
|
||||
|
||||
|
||||
Same as :option:`split_var` configuration file option.
|
||||
Same as :option:`split_var` control file option.
|
||||
|
||||
.. option:: /*verilator&32;tag <text...>*/
|
||||
|
||||
@@ -617,14 +635,14 @@ or "`ifdef`"'s may break other tools.
|
||||
:option:`--no-timing`), and :code:`fork`/:code:`join*` blocks are
|
||||
converted into :code:`begin`/:code:`end` blocks.
|
||||
|
||||
Same as :option:`timing_off` configuration file option.
|
||||
Same as :option:`timing_off` control file option.
|
||||
|
||||
.. option:: /*verilator&32;timing_on*/
|
||||
|
||||
Re-enable all timing constructs after this metacomment (only applicable
|
||||
after :option:`timing_off`).
|
||||
|
||||
Same as :option:`timing_on` configuration file option.
|
||||
Same as :option:`timing_on` control file option.
|
||||
|
||||
.. option:: /*verilator&32;trace_init_task*/
|
||||
|
||||
|
||||
+2
-2
@@ -260,7 +260,7 @@ How do I view waveforms (aka dumps or traces)?
|
||||
|
||||
Verilator creates standard VCD (Value Change Dump) and FST files. VCD
|
||||
files are viewable with the open-source
|
||||
`GTKWave <http://gtkwave.sourceforge.net/>`_,
|
||||
`GTKWave <https://gtkwave.sourceforge.net/>`_,
|
||||
`Surfer <https://surfer-project.org/>`_, Dinotrace (legacy), or any of the
|
||||
many closed-source viewer offerings; FST is supported only by GTKWave and
|
||||
Surfer.
|
||||
@@ -335,7 +335,7 @@ How do I prevent my assertions from firing during reset?
|
||||
|
||||
Call :code:`Verilated::assertOn(false)` before you first call the model,
|
||||
then turn it back on after reset. It defaults to true. When false, all
|
||||
assertions controlled by :vlopt:`--assert` are disabled.
|
||||
assertions are disabled.
|
||||
|
||||
|
||||
Why do I get "undefined reference to sc_time_stamp()?
|
||||
|
||||
+8
-12
@@ -42,8 +42,8 @@ For --cc/--sc, it creates:
|
||||
|
||||
.. list-table::
|
||||
|
||||
* - *{prefix}*\ .cmake
|
||||
- CMake include script for compiling (from --make cmake)
|
||||
* - *{prefix}*\ .json
|
||||
- JSON build definition compiling (from --make json)
|
||||
* - *{prefix}*\ .mk
|
||||
- Make include file for compiling (from --make gmake)
|
||||
* - *{prefix}*\ _classes.mk
|
||||
@@ -58,12 +58,8 @@ For --cc/--sc, it creates:
|
||||
- Top-level internal C++ file (from SystemVerilog $root)
|
||||
* - *{prefix}*\ ___024root\ *{__n}*\ .cpp
|
||||
- Additional top-level internal C++ files
|
||||
* - *{prefix}*\ ___024root\ *{__DepSet_hash__n}*\ .cpp
|
||||
- Additional top-level internal C++ files (hashed to reduce build times)
|
||||
* - *{prefix}*\ ___024root__Slow\ *{__n}*\ .cpp
|
||||
- Infrequent cold routines
|
||||
* - *{prefix}*\ ___024root\ *{__DepSet_hash__n}*\ .cpp
|
||||
- Infrequent cold routines (hashed to reduce build times)
|
||||
* - *{prefix}*\ ___024root__Trace\ *{__n}*\ .cpp
|
||||
- Wave file generation code (from --trace-\*)
|
||||
* - *{prefix}*\ ___024root__Trace__Slow\ *{__n}*\ .cpp
|
||||
@@ -86,8 +82,6 @@ For --cc/--sc, it creates:
|
||||
- Lower level internal C++ files
|
||||
* - *{prefix}{each_verilog_module}{__n}*\ .cpp
|
||||
- Additional lower C++ files
|
||||
* - *{prefix}{each_verilog_module}{__DepSet_hash__n}*\ .cpp
|
||||
- Additional lower C++ files (hashed to reduce build times)
|
||||
|
||||
For --hierarchical mode, it creates:
|
||||
|
||||
@@ -99,8 +93,8 @@ For --hierarchical mode, it creates:
|
||||
- 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}*\ __hierMkJsonArgs.f
|
||||
- Arguments for hierarchical Verilation (from --make json)
|
||||
* - *{prefix}*\ __hierMkArgs.f
|
||||
- Arguments for hierarchical Verilation (from --make gmake)
|
||||
* - *{prefix}*\ __hierParameters.v
|
||||
@@ -112,12 +106,14 @@ In specific debug and other modes, it also creates:
|
||||
|
||||
.. list-table::
|
||||
|
||||
* - *{prefix}*\ .xml
|
||||
- XML tree information (from --xml)
|
||||
* - *{prefix}*\ .sarif
|
||||
- SARIF diagnostics (from --diagnostics-sarif)
|
||||
* - *{prefix}*\ .tree.json
|
||||
- JSON tree information (from --json-only)
|
||||
* - *{prefix}*\ .tree.meta.json
|
||||
- JSON tree metadata (from --json-only)
|
||||
* - *{prefix}*\ .xml
|
||||
- XML tree information (from --xml)
|
||||
* - *{prefix}*\ __cdc.txt
|
||||
- Clock Domain Crossing checks (from --cdc)
|
||||
* - *{prefix}*\ __stats.txt
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user