mirror of
https://github.com/verilator/verilator.git
synced 2026-10-02 16:13:34 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
eca2b4c960 | ||
|
|
c9be36911f | ||
|
|
c3d1c3b952 | ||
|
|
e7adae6f81 | ||
|
|
abc46db3c0 | ||
|
|
dd6cd3decb | ||
|
|
ebe49552b0 | ||
|
|
d6e52b9400 | ||
|
|
6ac2aa2d99 | ||
|
|
7aad136972 | ||
|
|
fee839a80e | ||
|
|
cbabd8abe1 | ||
|
|
3ecd58460f | ||
|
|
09d27fa8a7 | ||
|
|
e0fdb933a0 | ||
|
|
d0c4cc3938 | ||
|
|
6a6a7b7e9f | ||
|
|
e3e8f18a4e | ||
|
|
50d7f2afc6 | ||
|
|
0359bf38e6 | ||
|
|
174eafd74c | ||
|
|
3694d153ae | ||
|
|
9367e85c88 | ||
|
|
7a2732f211 | ||
|
|
999f251b3d | ||
|
|
10c3320c6b | ||
|
|
7336b9ebfc | ||
|
|
84f26ed3d7 | ||
|
|
fc8e1b5a2e | ||
|
|
6bb57e4630 | ||
|
|
2eb9076381 | ||
|
|
1ea9018e59 | ||
|
|
a094fd954b | ||
|
|
7c2b1971a4 | ||
|
|
86f6ac2960 | ||
|
|
f5312b83b9 | ||
|
|
0a3de7c74a | ||
|
|
b26a19279a | ||
|
|
fcefa96397 | ||
|
|
c8a945f363 | ||
|
|
c7ff82f06b | ||
|
|
6997a7c516 | ||
|
|
eefbd94966 | ||
|
|
d1a0bad334 | ||
|
|
5cca1b101c | ||
|
|
18aeb080ad | ||
|
|
e9fe8f65a8 | ||
|
|
eccfd8c6f9 | ||
|
|
af03d91714 | ||
|
|
c3fd34b489 | ||
|
|
e12b971ba6 | ||
|
|
2bbb24eb38 | ||
|
|
34a760b75b | ||
|
|
7cc40d277b | ||
|
|
0984fd045f | ||
|
|
d5077a9d35 | ||
|
|
b9f0612db8 | ||
|
|
6ba06498db | ||
|
|
73d52c00bb | ||
|
|
87ee6c8746 | ||
|
|
e4771dac7f | ||
|
|
14e7b1076e | ||
|
|
f55fee1cf0 | ||
|
|
353a4b7b4a | ||
|
|
6d1e82b908 | ||
|
|
cd5997a2e6 | ||
|
|
0b9c2163d5 | ||
|
|
168f0ed9e5 | ||
|
|
538f39edf9 | ||
|
|
e3c1d36e6e | ||
|
|
559d990e82 | ||
|
|
f3684a85b9 | ||
|
|
b49351356e | ||
|
|
21229e0350 | ||
|
|
6f87443da5 | ||
|
|
0a860f151c | ||
|
|
2116b424b9 | ||
|
|
e6a997e316 | ||
|
|
f29eeecee7 | ||
|
|
2b8b1c4281 | ||
|
|
610b2e75af | ||
|
|
fd960b5f77 | ||
|
|
9b48cc33db | ||
|
|
844448655e | ||
|
|
b4ef6ce860 | ||
|
|
6edf2f80a2 | ||
|
|
8e7f29b07e | ||
|
|
28824b7597 | ||
|
|
39c3e79a3c | ||
|
|
b6bcbd5660 | ||
|
|
ed1e3ec4a2 | ||
|
|
98b89d0f2c | ||
|
|
5e69faff46 | ||
|
|
40acac1c57 | ||
|
|
d26d62a176 | ||
|
|
8965401d10 | ||
|
|
b9a571916c | ||
|
|
cdab9479b8 | ||
|
|
ce058cc432 | ||
|
|
4dd49e1244 | ||
|
|
fabded95df | ||
|
|
7521c2c644 | ||
|
|
464e19caaa | ||
|
|
0b6be2809e | ||
|
|
f9109eb61f | ||
|
|
48effad448 | ||
|
|
29b439b93f | ||
|
|
27e39d7821 | ||
|
|
8c287134d7 | ||
|
|
c508fd5d24 | ||
|
|
62afbed3cd | ||
|
|
d2b7b567df | ||
|
|
39bdd427d6 | ||
|
|
4a2212949e | ||
|
|
780163b91e | ||
|
|
21eb43a554 | ||
|
|
353ef5c436 | ||
|
|
77cc93c176 | ||
|
|
418fc2c246 | ||
|
|
13c22690c4 | ||
|
|
ae87df7a5d | ||
|
|
59cb53cfbc | ||
|
|
aca3b1636a | ||
|
|
9a6598b36f | ||
|
|
51a97ccb90 | ||
|
|
0aac3074b6 | ||
|
|
391d4e1c32 | ||
|
|
45add07205 | ||
|
|
64caa700d3 | ||
|
|
a5eb9a5b9d | ||
|
|
6a48d3bb83 | ||
|
|
53151d7c5f | ||
|
|
78198d90e1 | ||
|
|
9c044a9184 | ||
|
|
f62b3faaf2 | ||
|
|
4dbb066b96 | ||
|
|
7fe51583e5 | ||
|
|
6ecdd14fdb | ||
|
|
8157f21c3e | ||
|
|
781bd3cc09 | ||
|
|
a2e91f3cf2 | ||
|
|
d9701e6406 | ||
|
|
128231b077 | ||
|
|
ce2f335786 | ||
|
|
9632dfdf93 | ||
|
|
8026b2a7f3 | ||
|
|
24dbb0bc5c | ||
|
|
5045bf53df | ||
|
|
51fcb881d5 | ||
|
|
20b964a9a2 | ||
|
|
10a77a17a9 | ||
|
|
a62f7fe4ae | ||
|
|
9b4509f7d9 | ||
|
|
96bffd49aa | ||
|
|
b2093b513a | ||
|
|
8e87a99628 | ||
|
|
258becd179 | ||
|
|
2cad858d32 | ||
|
|
a3b2c2af17 | ||
|
|
27d3eb5b7b | ||
|
|
ce211ebceb | ||
|
|
4bf8f47f59 | ||
|
|
b54f897090 | ||
|
|
d31bce915c | ||
|
|
0133bc6b09 | ||
|
|
bab949a468 | ||
|
|
99064d3e39 | ||
|
|
fc302a5207 | ||
|
|
14f618b0f6 | ||
|
|
a9762e0c5c | ||
|
|
098ee6fa7a | ||
|
|
7f94fa1da7 | ||
|
|
3b98db17cc | ||
|
|
233b6eafba | ||
|
|
489349ffbd | ||
|
|
b52e1d3ede | ||
|
|
6a8f97e184 | ||
|
|
3ab89d5be7 | ||
|
|
b35ab0b843 | ||
|
|
6c46c4f6f7 | ||
|
|
2455d15271 | ||
|
|
d232923051 | ||
|
|
e6678f6546 | ||
|
|
436d3d76f0 | ||
|
|
c1f0787669 | ||
|
|
dae4c8ee22 | ||
|
|
5daf7385f1 | ||
|
|
4ce8164277 | ||
|
|
7ec32799b0 | ||
|
|
812861e7f2 | ||
|
|
1857f6399c | ||
|
|
f7ccc013e7 | ||
|
|
2e1fa8f338 | ||
|
|
70459b3208 | ||
|
|
2a23ec74e4 | ||
|
|
be1ace423e | ||
|
|
2d0149b703 | ||
|
|
34ced254c0 | ||
|
|
fe15171649 | ||
|
|
4092ac7e72 | ||
|
|
1a07af57a3 | ||
|
|
c840ffb0ae | ||
|
|
fbe8439eb8 | ||
|
|
754c5c71f1 | ||
|
|
6940ee420d | ||
|
|
b645fcf027 | ||
|
|
ffb02cea15 | ||
|
|
f753ae2518 | ||
|
|
caa19c0cb3 | ||
|
|
aa3942ab24 | ||
|
|
cc1133c0d9 | ||
|
|
ac659d525b | ||
|
|
283f6c7433 | ||
|
|
5b65c15eca | ||
|
|
6b4183632c | ||
|
|
e0e164cea2 | ||
|
|
a379382d32 | ||
|
|
e2a6e19cac | ||
|
|
61bfb6c308 | ||
|
|
bdcfc4e286 | ||
|
|
70c6651aac | ||
|
|
41bb54bc2c | ||
|
|
001c098e5a | ||
|
|
98e40c847c | ||
|
|
05c7a3b90b | ||
|
|
694f2ff7c7 | ||
|
|
6281385ee8 | ||
|
|
7e6dd9473f | ||
|
|
929e15fa4c | ||
|
|
432d5f851d | ||
|
|
d4f4fefd1d | ||
|
|
d8080008b4 | ||
|
|
bed9aa9904 | ||
|
|
35fa0d051d | ||
|
|
0507fb4655 | ||
|
|
f4a01eb452 | ||
|
|
4954e76b28 | ||
|
|
fa1b11252e | ||
|
|
dddc1b5b4d | ||
|
|
20faa99464 | ||
|
|
dc43071f1c | ||
|
|
fdf29b970f | ||
|
|
70814fa11a | ||
|
|
529b8337ec | ||
|
|
f8dd65c7cd | ||
|
|
28a59a2b21 | ||
|
|
d3e205f201 | ||
|
|
dfe28f7ed0 | ||
|
|
bb871728c9 | ||
|
|
69dce205d3 | ||
|
|
052812bb87 | ||
|
|
0380a36c76 | ||
|
|
44f49669a3 | ||
|
|
ff244c1d1f | ||
|
|
260ac342f4 | ||
|
|
87d856339f | ||
|
|
e171463fa2 | ||
|
|
481adf8fe7 | ||
|
|
b8288b97f7 | ||
|
|
0d34f56b74 | ||
|
|
dcaf6476e8 | ||
|
|
76b2ac9cc1 | ||
|
|
b6a400ee9b | ||
|
|
78d6ec8114 | ||
|
|
88dd95980a | ||
|
|
b531001f55 | ||
|
|
1d0563212e | ||
|
|
8ca49d98c1 | ||
|
|
036c1fb0f9 | ||
|
|
19258ee18a | ||
|
|
578d8d8391 | ||
|
|
010ae580b1 | ||
|
|
951f5eaa82 | ||
|
|
3a69dd4a43 | ||
|
|
f52155a768 | ||
|
|
16b3d9101c | ||
|
|
8ff77e9d47 | ||
|
|
4361c516fd | ||
|
|
7d5772c749 | ||
|
|
f5e2f60dcc | ||
|
|
8fbb725f34 | ||
|
|
72a47e16c1 | ||
|
|
530ebecfb7 | ||
|
|
9a3dcaa10b | ||
|
|
8a121803f5 | ||
|
|
bb45fd6c6c | ||
|
|
62945bb3bc | ||
|
|
079a53e820 | ||
|
|
a23fad91a3 | ||
|
|
5f1df5b389 | ||
|
|
74d5d008bb | ||
|
|
8a9fc9237d | ||
|
|
c093b24342 | ||
|
|
29fb82d3b7 | ||
|
|
c7355b4056 | ||
|
|
4b4ca90c71 | ||
|
|
6aa7123a8c | ||
|
|
80b2fa3583 | ||
|
|
7886204690 | ||
|
|
c2dcca980e | ||
|
|
a23dfdc4ee | ||
|
|
41a038b79b | ||
|
|
a8e06874bd | ||
|
|
54ef9ad31c | ||
|
|
32f9cf072b | ||
|
|
03e8ef0b0f | ||
|
|
a2f327f729 | ||
|
|
6e204ed0dd | ||
|
|
58ddf997e3 | ||
|
|
9656311521 | ||
|
|
676fd31635 | ||
|
|
a7f8c9cc74 | ||
|
|
a247041cab | ||
|
|
59fd238a05 | ||
|
|
a64660a530 | ||
|
|
e9a1c75b7f | ||
|
|
b6f292f556 | ||
|
|
4781a6046a | ||
|
|
b16b48f458 | ||
|
|
b4e91c87a6 | ||
|
|
a668b7c658 | ||
|
|
94fd17e4f7 | ||
|
|
abd4c480cd | ||
|
|
aa2b653c71 | ||
|
|
d75f41b641 | ||
|
|
b0f898cec8 | ||
|
|
9ec5413d33 | ||
|
|
611567c385 | ||
|
|
7a04a5b9a8 | ||
|
|
2d71d66cf5 | ||
|
|
a51e26e62d | ||
|
|
5021989cb6 | ||
|
|
2284ada723 | ||
|
|
e44f34dde3 | ||
|
|
0c820c3068 | ||
|
|
990ccd6763 | ||
|
|
f631587a20 | ||
|
|
9f8fcaf827 | ||
|
|
d7893a60ca | ||
|
|
93090c56ee | ||
|
|
d750ffc129 | ||
|
|
7efa0fc82a | ||
|
|
8db9db7e25 | ||
|
|
d165671225 | ||
|
|
7a8f71e7d8 | ||
|
|
e0ad430cd9 | ||
|
|
7695687e87 | ||
|
|
94e545bdca | ||
|
|
99daa8d24b | ||
|
|
e14903cfb2 | ||
|
|
bee344d1ae | ||
|
|
713dab278c | ||
|
|
29ad93c89d | ||
|
|
7a9140821d | ||
|
|
2ba0749993 | ||
|
|
25d75ee86f | ||
|
|
a72009fb41 | ||
|
|
a934d965be | ||
|
|
1277a40b31 | ||
|
|
6f35fec5ce | ||
|
|
f58aee2ff2 | ||
|
|
f5ee7aa0ab | ||
|
|
749b0345df | ||
|
|
7e9535381a | ||
|
|
0d5fedce92 | ||
|
|
24b5c641f5 | ||
|
|
ca31bcdbb6 | ||
|
|
ae990ebcda | ||
|
|
58dae8f931 | ||
|
|
5470cf9fa9 | ||
|
|
9bde98e912 | ||
|
|
81ac386a4a | ||
|
|
c98744b914 | ||
|
|
904be103df | ||
|
|
8e82440a55 | ||
|
|
32c789c355 | ||
|
|
d4a8cbb1d6 | ||
|
|
192236a832 | ||
|
|
e223228ec0 | ||
|
|
c7dbdf876a | ||
|
|
3ffea76e11 | ||
|
|
09547f839f | ||
|
|
0bf413b260 | ||
|
|
a5b2cb6ddf | ||
|
|
779cf9248a | ||
|
|
1d06364284 | ||
|
|
833c215c45 | ||
|
|
4d95f6f7b8 | ||
|
|
46a5f04840 | ||
|
|
3c686d0eb2 | ||
|
|
7c8ff1d19c | ||
|
|
151c5b6a1d | ||
|
|
15d1751b23 | ||
|
|
b71d49e55a | ||
|
|
c3b2bfbc39 | ||
|
|
b74a8f133f | ||
|
|
873048c21c | ||
|
|
75e9986d39 | ||
|
|
863abdb1f7 | ||
|
|
03bd1bfc63 | ||
|
|
4257fcf9d0 | ||
|
|
a68da7e220 | ||
|
|
77ef2cd487 | ||
|
|
7f1aae640f | ||
|
|
0ec025c40c | ||
|
|
bc87270ca9 | ||
|
|
0e11b0929c | ||
|
|
b741105329 | ||
|
|
2f4d1647f0 | ||
|
|
4a88ddc616 | ||
|
|
99e7dbc82b | ||
|
|
c7a7965c49 | ||
|
|
f073b278f9 | ||
|
|
4969125e5a | ||
|
|
d230ccd716 | ||
|
|
3fae11595a | ||
|
|
1e546bb9d9 | ||
|
|
138daaf565 | ||
|
|
3438d8f2b0 | ||
|
|
e55ed8eb66 | ||
|
|
a55daf5367 | ||
|
|
a173883b2d | ||
|
|
61d2284eab | ||
|
|
6083480abb | ||
|
|
2e1128b417 | ||
|
|
e47208d9b3 | ||
|
|
87bd8fefa0 | ||
|
|
753ea29df8 | ||
|
|
b1dfdef0a9 | ||
|
|
2e4676dc11 | ||
|
|
eaaf91c82b | ||
|
|
4e71f359bf | ||
|
|
b3348a38d0 | ||
|
|
7854118883 | ||
|
|
ed0e1af7aa | ||
|
|
e1a9734917 | ||
|
|
589612f914 | ||
|
|
76b4c2f254 | ||
|
|
b097cec72d | ||
|
|
9689a4f58a | ||
|
|
aac0186871 | ||
|
|
f458951b17 | ||
|
|
4448778dbf | ||
|
|
dab826bef9 | ||
|
|
9fae951d9d | ||
|
|
0f2a8c6c22 | ||
|
|
68e0cf5523 | ||
|
|
d6ba65ba75 | ||
|
|
f496138855 | ||
|
|
2f272a4190 | ||
|
|
469eca7de2 | ||
|
|
ec2eae607a | ||
|
|
292c2e289e | ||
|
|
87ac61140d | ||
|
|
81ee89de15 | ||
|
|
83081aaefc | ||
|
|
fd2917c928 | ||
|
|
4cd69f9feb | ||
|
|
4e5c7f4568 | ||
|
|
647af27274 | ||
|
|
8cc7e180ca | ||
|
|
d3d45c0be5 | ||
|
|
549dd31224 | ||
|
|
36888fac5d | ||
|
|
2409f32d87 | ||
|
|
8c3cc3af8f | ||
|
|
76fe224e7c | ||
|
|
7ccc93d9df | ||
|
|
55661e7f71 | ||
|
|
ece0613e09 | ||
|
|
0dce97b09d | ||
|
|
a3d0cc6522 | ||
|
|
1df20f7076 | ||
|
|
2fc94557a0 | ||
|
|
789698cb5c | ||
|
|
3cced9baad | ||
|
|
f3cc32554c | ||
|
|
2a905c1d6e | ||
|
|
230b145c04 | ||
|
|
9f34764f4b | ||
|
|
69ac3c14e8 | ||
|
|
f98637e122 | ||
|
|
6d936654ba | ||
|
|
4dd4047c47 | ||
|
|
1710b6bab4 | ||
|
|
041f6603c3 | ||
|
|
5acced1e33 | ||
|
|
920c8012de | ||
|
|
8f1ea09558 | ||
|
|
b873c23cf2 | ||
|
|
13c7b6e827 | ||
|
|
bbce7926b9 | ||
|
|
2c445e4bfd | ||
|
|
338d54fd34 | ||
|
|
009d1f2f5b | ||
|
|
08279645ca | ||
|
|
28ecd8e908 | ||
|
|
bc8a332ee8 | ||
|
|
d52822781c | ||
|
|
bdd37e40fe | ||
|
|
4b713e9882 | ||
|
|
fd9f5ab34e | ||
|
|
d06f986b51 | ||
|
|
8638e46cb7 | ||
|
|
85909f02b3 | ||
|
|
3572bd2f1a | ||
|
|
ff1d20d50c | ||
|
|
c300075a20 | ||
|
|
4bdfc653a3 | ||
|
|
554653900a | ||
|
|
b90b81e12c | ||
|
|
bf2b4e1b6a | ||
|
|
c05c48aaf3 | ||
|
|
39143cc15a | ||
|
|
03012da11c | ||
|
|
0547108e3f | ||
|
|
1a31aa5d62 | ||
|
|
13a1240359 | ||
|
|
b7e5486baa | ||
|
|
afeca21d73 | ||
|
|
d0ec6092b3 | ||
|
|
5c923d6629 | ||
|
|
1dc6fd3d93 | ||
|
|
5b56c80830 | ||
|
|
2291d3d4c6 | ||
|
|
02e7767886 | ||
|
|
2a01365f9b | ||
|
|
91c8866ac3 | ||
|
|
798bbe98e8 | ||
|
|
a3bbf13506 | ||
|
|
650da7beb2 | ||
|
|
3bc09d49fb | ||
|
|
6c61a9aff3 | ||
|
|
a4085f3a06 | ||
|
|
3ae18af8dd | ||
|
|
811eab8fa5 | ||
|
|
4ec75b2618 | ||
|
|
5a65d27851 | ||
|
|
685ea0bc65 | ||
|
|
c48d80592e | ||
|
|
0aa8356eca | ||
|
|
670b7c5243 | ||
|
|
706679e6b1 | ||
|
|
d288488b7f | ||
|
|
b17619296a | ||
|
|
88bd479bc7 | ||
|
|
2584befa5a | ||
|
|
90215878f8 | ||
|
|
a1a74cb1d9 | ||
|
|
9f9770e722 | ||
|
|
888af29a72 | ||
|
|
5f39c69d19 | ||
|
|
e7de2c5a05 | ||
|
|
59b07529b1 | ||
|
|
a6e9bce0dd | ||
|
|
2c52119d6c | ||
|
|
48faf8d036 | ||
|
|
0484143282 | ||
|
|
0ee214a157 | ||
|
|
774ec42be4 | ||
|
|
5a6f2b661d | ||
|
|
80cba789f4 | ||
|
|
92dd8ee8f5 | ||
|
|
1665d15d4d | ||
|
|
f0fb0b05ff | ||
|
|
02e88e3848 | ||
|
|
87eef36b1c | ||
|
|
579257bc42 | ||
|
|
e2041f7450 | ||
|
|
70112438c3 | ||
|
|
175e1dde73 | ||
|
|
e990415ee0 | ||
|
|
1543b202b2 | ||
|
|
f63168a5b5 | ||
|
|
49bccb5f1b | ||
|
|
c7e1358bb7 | ||
|
|
62a58f420c | ||
|
|
dd95e033e7 | ||
|
|
371a4055b0 | ||
|
|
f251f7b774 | ||
|
|
0f3e0de891 | ||
|
|
7081ea0ede | ||
|
|
fb04765c0e | ||
|
|
b8bda729d4 | ||
|
|
195a665293 | ||
|
|
c8de3630a5 | ||
|
|
99a29acca0 | ||
|
|
48a607cc78 | ||
|
|
19170badd3 | ||
|
|
77fc771ed0 | ||
|
|
9b9a554489 | ||
|
|
0fe8c73d19 | ||
|
|
eb66e137db | ||
|
|
c2b82c293f | ||
|
|
0b7510befa | ||
|
|
140eb0a6e5 | ||
|
|
6b8f253ecd | ||
|
|
ac29393ec9 | ||
|
|
22d6bb8180 | ||
|
|
f4e4602dcb | ||
|
|
521c5c2f75 | ||
|
|
3525484730 | ||
|
|
4a58997604 | ||
|
|
ef259f63ca | ||
|
|
2f690c0530 | ||
|
|
283a5edbdb | ||
|
|
e566b5a4f5 | ||
|
|
4e4fdd3b66 | ||
|
|
434896d50c | ||
|
|
1e7611edea | ||
|
|
2890126110 | ||
|
|
07bb8c701d | ||
|
|
55ae48ac13 | ||
|
|
c83ee391bb | ||
|
|
d01b917062 | ||
|
|
b21117091b | ||
|
|
3a73d83741 | ||
|
|
9643232d36 | ||
|
|
7b41d2046d | ||
|
|
7eb1b6c32b | ||
|
|
083fb7e9c2 | ||
|
|
afb8428db4 | ||
|
|
d6923c8571 | ||
|
|
1c38744fd1 | ||
|
|
51691dfde5 | ||
|
|
409efa1249 | ||
|
|
e4ff0909dc | ||
|
|
d3670b6890 | ||
|
|
7a74ddc1af | ||
|
|
551862a55e | ||
|
|
d3fcec3e84 | ||
|
|
088862d449 | ||
|
|
e9f758ce67 | ||
|
|
b698bfd850 | ||
|
|
c9970ff822 | ||
|
|
df594ee430 | ||
|
|
201e343795 | ||
|
|
9a307c4abd | ||
|
|
657d7f257b | ||
|
|
0ec5e02ce1 | ||
|
|
cdfb2221bb | ||
|
|
f133a2811f | ||
|
|
aecf38e3ad | ||
|
|
fa32d10f39 | ||
|
|
f4fe89a8c4 | ||
|
|
675d9a641e | ||
|
|
d896f1ff08 | ||
|
|
5cb6f370e9 | ||
|
|
e04ef5d83a | ||
|
|
155dcc5658 | ||
|
|
e927536099 | ||
|
|
f623db7d68 | ||
|
|
d40f7f5167 | ||
|
|
34bb013941 | ||
|
|
ae35be9102 | ||
|
|
bde4097df2 | ||
|
|
17b70788df | ||
|
|
b1927e4fb5 | ||
|
|
c4cb26fa9a | ||
|
|
4e86e60491 | ||
|
|
d3e07b6ad9 | ||
|
|
fa4af38b0a | ||
|
|
a9635aaa2c | ||
|
|
f0cd6dd95c | ||
|
|
d8fdfa6be2 | ||
|
|
f9511e9755 | ||
|
|
cfe1f23fff | ||
|
|
8741fd17ad | ||
|
|
ffe76717c6 | ||
|
|
eb8bbcda05 | ||
|
|
ed7040adc0 | ||
|
|
48776277bd | ||
|
|
8ca45df9c7 | ||
|
|
8db9c1d227 | ||
|
|
930f35acc9 | ||
|
|
13e0fc7c27 | ||
|
|
a730daabef | ||
|
|
3c28b72897 | ||
|
|
05e5f1955e | ||
|
|
378800ee4a | ||
|
|
43a57da950 | ||
|
|
99a43b7695 | ||
|
|
59d2eea302 | ||
|
|
6f3f64e63f | ||
|
|
48c71ef76c | ||
|
|
563faeb33f | ||
|
|
9c5c77c69c | ||
|
|
4573e04488 | ||
|
|
6cb0a41857 | ||
|
|
124e3463fc | ||
|
|
1b15509a9c | ||
|
|
eb3f10399a | ||
|
|
4660806c8f | ||
|
|
6f5d1037b4 | ||
|
|
24b097b228 | ||
|
|
a0ea96b355 | ||
|
|
a663da7393 | ||
|
|
c812a9b18f | ||
|
|
367249ec84 | ||
|
|
f4acc59b82 | ||
|
|
d1da1664f0 | ||
|
|
b100615726 | ||
|
|
ec0815e9ac | ||
|
|
97e9996f0b | ||
|
|
b7af859ba3 | ||
|
|
701fa5438a | ||
|
|
004865a8b2 | ||
|
|
3e5859e5da | ||
|
|
78555b683c | ||
|
|
c2e44dbd99 | ||
|
|
18fc3e6089 | ||
|
|
f4f8ea0dcf | ||
|
|
f78c4e8490 | ||
|
|
e6fe367bdb | ||
|
|
3426ee5170 | ||
|
|
a32b8d80f9 | ||
|
|
3b81654c72 | ||
|
|
6abd556f5a | ||
|
|
31c1df638b | ||
|
|
f4cb2c8cf2 | ||
|
|
7d5e19365e | ||
|
|
6fa1ade4e0 | ||
|
|
99c619a4c9 | ||
|
|
37a4002098 | ||
|
|
45ee949cc4 | ||
|
|
54f9f4b6a9 | ||
|
|
a61178bd89 | ||
|
|
2f5c58b345 | ||
|
|
403a197e23 | ||
|
|
3a659d460d | ||
|
|
8707c88787 | ||
|
|
167cba723e | ||
|
|
7f40dd8b5b | ||
|
|
1609c23fea | ||
|
|
216fc8a212 | ||
|
|
5136ea1082 | ||
|
|
5b931faf2b | ||
|
|
a2496e041e | ||
|
|
fab268f772 | ||
|
|
550d47b7f4 | ||
|
|
a01a21db86 | ||
|
|
2082f1aa9e | ||
|
|
50a5a1ff5b | ||
|
|
1600cc01a4 | ||
|
|
b9e1d55262 | ||
|
|
0d43c14b93 | ||
|
|
87d1c10fa7 | ||
|
|
a2506a6f96 | ||
|
|
20dba7464d | ||
|
|
cb5d03ff0b | ||
|
|
2727c33219 | ||
|
|
0419ed0430 | ||
|
|
1e3c7a5496 | ||
|
|
d2dfcbca53 | ||
|
|
e779934443 | ||
|
|
a3b255b054 | ||
|
|
f5caa4b7dc | ||
|
|
8f4490628f | ||
|
|
df566bdf4d | ||
|
|
981d3ce782 | ||
|
|
b7345eb5d5 | ||
|
|
2bd2b9324f | ||
|
|
298faa84ee | ||
|
|
43377ed8b0 | ||
|
|
b18037b7e7 | ||
|
|
095b1ccb67 | ||
|
|
2a30a87580 | ||
|
|
e11bc6beeb | ||
|
|
0a9b31bb30 | ||
|
|
34e37d7bd0 | ||
|
|
164a7a7c5d | ||
|
|
67ea819d82 | ||
|
|
60f9e21d8c | ||
|
|
dc037db1cd | ||
|
|
0658af90f5 | ||
|
|
131623de34 | ||
|
|
74ae879c2f | ||
|
|
8c3b754bac | ||
|
|
e080f5c0cb | ||
|
|
2284cf595d | ||
|
|
b1cc0c54c1 | ||
|
|
4cf017d7fe | ||
|
|
25f5db4b5f | ||
|
|
3cf9606ea9 | ||
|
|
6882f8c55e | ||
|
|
2696a9a5bd | ||
|
|
abb46c9cb2 | ||
|
|
bbb223f217 | ||
|
|
570e1bc35a | ||
|
|
11da07d3b9 | ||
|
|
2cfec0ecc3 | ||
|
|
e3e7b3f2b5 | ||
|
|
fe0b210a0c | ||
|
|
c383f4868f | ||
|
|
b66fdd7421 | ||
|
|
83878325a7 | ||
|
|
490bc63eb5 | ||
|
|
947b6fd23f | ||
|
|
de44ca8df3 | ||
|
|
3cee54dfdf | ||
|
|
dace2c0a9a | ||
|
|
ca4858eb7f | ||
|
|
a6d438d111 | ||
|
|
955ed3f193 | ||
|
|
8bffb8c391 | ||
|
|
85356f464f | ||
|
|
72993ec3dd | ||
|
|
d6a294b784 | ||
|
|
864a852bca | ||
|
|
b0992406aa | ||
|
|
9e2c8aefc8 | ||
|
|
4c584c17e6 | ||
|
|
3315a6e431 | ||
|
|
ba0183131c | ||
|
|
e1580b9c3d | ||
|
|
aadd5ea509 | ||
|
|
833df6d9ea | ||
|
|
607c19a67d | ||
|
|
d5cfe1a379 | ||
|
|
6e557791c8 | ||
|
|
cd693ce02b | ||
|
|
2641bc98aa | ||
|
|
ad2862ce3f | ||
|
|
4695967185 | ||
|
|
f96e99542c | ||
|
|
7de193c2e9 | ||
|
|
442c9bc316 | ||
|
|
3203019408 | ||
|
|
bc853e260b | ||
|
|
d6e5703298 | ||
|
|
a9e50327fd | ||
|
|
6f0a36318e | ||
|
|
221fecad0b | ||
|
|
fd1e4d9e45 | ||
|
|
920ed5ca3d | ||
|
|
2537431273 | ||
|
|
13114f2efe | ||
|
|
e9f59e44a5 | ||
|
|
d4c3e35f97 | ||
|
|
02dd33b60e | ||
|
|
2bc883f3b3 | ||
|
|
29db25b70e | ||
|
|
d6bc0c712a | ||
|
|
962efa3691 | ||
|
|
4babba16d6 | ||
|
|
5363d89870 | ||
|
|
44acb08ea9 | ||
|
|
6584b4d426 | ||
|
|
9ff06c1664 | ||
|
|
1537c9badc | ||
|
|
708f875b31 | ||
|
|
0d3cb86a44 | ||
|
|
5c2b9d55b2 | ||
|
|
1dbf1be3e6 | ||
|
|
3f886f7c61 | ||
|
|
7c9fa8647c | ||
|
|
dbf68a99e8 | ||
|
|
53c2e416f4 | ||
|
|
e834b5be2d | ||
|
|
bd7689f59a | ||
|
|
3496eb80a5 | ||
|
|
839c3bf444 | ||
|
|
d4b3583307 | ||
|
|
ee130cb20d | ||
|
|
552a146f9c | ||
|
|
913679f261 | ||
|
|
d9078df650 | ||
|
|
f84592af49 | ||
|
|
5f85c89425 | ||
|
|
94f789b677 | ||
|
|
739be2f782 | ||
|
|
25b9a16bc7 | ||
|
|
9a8e68928d | ||
|
|
19cccd170e | ||
|
|
d99c8f5d44 | ||
|
|
cf111d2e1f | ||
|
|
45eb5b8a5c | ||
|
|
ce5cad17a8 | ||
|
|
ed01befc25 | ||
|
|
69a2bfee68 | ||
|
|
1cc37ad6ce | ||
|
|
2a9f29912c | ||
|
|
298e0f24d1 | ||
|
|
80b08b71aa | ||
|
|
64ba569f0d | ||
|
|
3cb4033c97 | ||
|
|
6509bac59e | ||
|
|
ec45a77d93 | ||
|
|
8044833c74 | ||
|
|
3f89bdcfac | ||
|
|
c99364b81a | ||
|
|
d841a791e6 | ||
|
|
b5b937e2f2 | ||
|
|
4a41f69293 | ||
|
|
8fd038f88e | ||
|
|
4982f63da2 | ||
|
|
71bc60fb91 | ||
|
|
0da7ecf753 | ||
|
|
25ca1af8b3 | ||
|
|
5d54fa8e6f | ||
|
|
e8c5b9faad | ||
|
|
8e0301c287 | ||
|
|
3f625fc359 | ||
|
|
72b96d5069 | ||
|
|
d1b45b8d32 | ||
|
|
5601056ed0 | ||
|
|
8ed269c77f | ||
|
|
27b7e70218 | ||
|
|
97680656d3 | ||
|
|
4202ec2ab2 | ||
|
|
4f3a816fb0 | ||
|
|
25fd8ef5c0 | ||
|
|
a9664b8d16 | ||
|
|
26a5729514 | ||
|
|
5b839699ac | ||
|
|
1315aa31ed | ||
|
|
5d8da6b4ac | ||
|
|
aac2563a07 | ||
|
|
8e44487354 | ||
|
|
1012c054e6 | ||
|
|
a8b5738b44 | ||
|
|
72845167e6 | ||
|
|
7ca2d6470a | ||
|
|
33e999e01a |
+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
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
Checks: '*,-hicpp*,-android-cloexec-fopen,-cert-dcl50-cpp,-cert-env33-c,-cert-err34-c,-cert-err58-cpp,-clang-analyzer-core.UndefinedBinaryOperatorResult,-clang-analyzer-security*,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-no-malloc,-cppcoreguidelines-owning-memory,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-constant-array-index,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-cppcoreguidelines-pro-type-const-cast,-cppcoreguidelines-pro-type-reinterpret-cast,-cppcoreguidelines-pro-type-static-cast-downcast,-cppcoreguidelines-pro-type-union-access,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-special-member-functions,-fuchsia-*,-google-default-arguments,-google-readability-todo,-google-runtime-references,-llvm-header-guard,-llvm-include-order,-misc-string-integer-assignment,-misc-string-literal-with-embedded-nul,-modernize-use-auto,-modernize-use-trailing-return-type,-readability-braces-around-statements,-readability-container-size-empty,-readability-delete-null-pointer,-readability-else-after-return,-readability-implicit-bool-conversion,-readability-named-parameter,-readability-static-accessed-through-instance'
|
Checks: '*,-hicpp*,-android-cloexec-fopen,-cert-dcl50-cpp,-cert-env33-c,-cert-err34-c,-cert-err58-cpp,-clang-analyzer-core.UndefinedBinaryOperatorResult,-clang-analyzer-security*,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-no-malloc,-cppcoreguidelines-owning-memory,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-constant-array-index,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-cppcoreguidelines-pro-type-const-cast,-cppcoreguidelines-pro-type-reinterpret-cast,-cppcoreguidelines-pro-type-static-cast-downcast,-cppcoreguidelines-pro-type-union-access,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-special-member-functions,-fuchsia-*,-google-default-arguments,-google-readability-todo,-google-runtime-references,-llvm-header-guard,-llvm-include-order,-misc-string-integer-assignment,-misc-string-literal-with-embedded-nul,-modernize-use-auto,-modernize-use-trailing-return-type,-readability-braces-around-statements,-readability-container-size-empty,-readability-delete-null-pointer,-readability-else-after-return,-readability-implicit-bool-conversion,-readability-named-parameter,-readability-static-accessed-through-instance,-llvmlibc-*,-altera-*'
|
||||||
WarningsAsErrors: ''
|
WarningsAsErrors: ''
|
||||||
HeaderFilterRegex: ''
|
HeaderFilterRegex: ''
|
||||||
FormatStyle: none
|
FormatStyle: none
|
||||||
|
|||||||
+4
-4
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
exclude_paths:
|
exclude_paths:
|
||||||
- '.github/**'
|
- ".github/**"
|
||||||
- 'ci/build_verilator.sh'
|
- "ci/build_verilator.sh"
|
||||||
- 'include/vltstd/**'
|
- "include/vltstd/**"
|
||||||
- 'nodist/fastcov.py'
|
- "nodist/fastcov.py"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "Verilator Build Environment",
|
"name": "Verilator Build Environment",
|
||||||
|
|
||||||
"build": {
|
"build": {
|
||||||
"dockerfile": "../ci/docker/buildenv/Dockerfile"
|
"dockerfile": "../ci/docker/buildenv/Dockerfile"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ assignees: ''
|
|||||||
|
|
||||||
Thanks for taking the time to report this.
|
Thanks for taking the time to report this.
|
||||||
|
|
||||||
Can you attach an example that shows the issue? (Must be openly licensed, ideally in test_regress format.)
|
Can you attach an example that shows the issue? (Must be openly licensed, completely self-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' command line do we use to run your example?
|
||||||
|
|
||||||
@@ -18,3 +18,5 @@ What 'verilator --version' are you using? Did you try it with the git master ve
|
|||||||
What OS and distribution are you using?
|
What OS and distribution are you using?
|
||||||
|
|
||||||
May we assist you in trying to fix this in Verilator yourself?
|
May we assist you in trying to fix this in Verilator yourself?
|
||||||
|
|
||||||
|
(Please avoid attaching screenshots that show text - you can convert images to text using e.g. https://ocr.space)
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ Thanks for taking the time to report this.
|
|||||||
|
|
||||||
What would you like added/supported?
|
What would you like added/supported?
|
||||||
|
|
||||||
Can you attach an example that runs on other simulators? (Must be openly licensed, ideally in test_regress format.)
|
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?
|
May we assist you in trying to fix this in Verilator yourself?
|
||||||
|
|||||||
@@ -8,3 +8,5 @@ assignees: ''
|
|||||||
---
|
---
|
||||||
|
|
||||||
How may we help - what is your question?
|
How may we help - what is your question?
|
||||||
|
|
||||||
|
(If reporting a bug or requesting a feature please use one of the other issue templates.)
|
||||||
|
|||||||
+145
-130
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
# DESCRIPTION: Github actions config
|
# DESCRIPTION: Github actions config
|
||||||
# This name is key to badges in README.rst, so we use the name build
|
# This name is key to badges in README.rst, so we use the name build
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
@@ -9,16 +10,10 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 0 * * 0' # weekly
|
- cron: '0 0 * * 0' # weekly
|
||||||
|
|
||||||
env:
|
permissions:
|
||||||
CI_OS_NAME: linux
|
contents: read
|
||||||
CI_COMMIT: ${{ github.sha }}
|
|
||||||
CCACHE_COMPRESS: 1
|
|
||||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
|
||||||
CCACHE_LIMIT_MULTIPLE: 0.95
|
|
||||||
INSTALL_DIR: ${{ github.workspace }}/install
|
|
||||||
RELOC_DIR: ${{ github.workspace }}/relloc
|
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
@@ -26,156 +21,176 @@ defaults:
|
|||||||
working-directory: repo
|
working-directory: repo
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }}
|
group: ${{ github.workflow }}-${{ github.actor }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
build:
|
build-2404-gcc:
|
||||||
|
name: Build
|
||||||
|
uses: ./.github/workflows/reusable-build.yml
|
||||||
|
with:
|
||||||
|
os: ${{ matrix.os }}
|
||||||
|
cc: ${{ matrix.cc }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-22.04, ubuntu-20.04]
|
|
||||||
compiler:
|
|
||||||
- { cc: clang, cxx: clang++ }
|
|
||||||
- { cc: gcc, cxx: g++ }
|
|
||||||
include:
|
include:
|
||||||
# Build GCC 10 on ubuntu-20.04
|
- {os: ubuntu-24.04, cc: gcc}
|
||||||
- os: ubuntu-20.04
|
|
||||||
compiler: { cc: gcc-10, cxx: g++-10 }
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
name: Build | ${{ matrix.os }} | ${{ matrix.compiler.cc }}
|
|
||||||
env:
|
|
||||||
CI_BUILD_STAGE_NAME: build
|
|
||||||
CI_RUNS_ON: ${{ matrix.os }}
|
|
||||||
CC: ${{ matrix.compiler.cc }}
|
|
||||||
CXX: ${{ matrix.compiler.cxx }}
|
|
||||||
CACHE_BASE_KEY: build-${{ matrix.os }}-${{ matrix.compiler.cc }}
|
|
||||||
CCACHE_MAXSIZE: 1000M # Per build matrix entry (* 5 = 5000M in total)
|
|
||||||
VERILATOR_ARCHIVE: verilator-${{ github.sha }}-${{ matrix.os }}-${{ matrix.compiler.cc }}.tar.gz
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: Checkout
|
build-2404-clang:
|
||||||
uses: actions/checkout@v4
|
name: Build
|
||||||
with:
|
uses: ./.github/workflows/reusable-build.yml
|
||||||
path: repo
|
with:
|
||||||
|
os: ${{ matrix.os }}
|
||||||
- name: Cache $CCACHE_DIR
|
cc: ${{ matrix.cc }}
|
||||||
uses: actions/cache@v4
|
|
||||||
env:
|
|
||||||
CACHE_KEY: ${{ env.CACHE_BASE_KEY }}-ccache
|
|
||||||
with:
|
|
||||||
path: ${{ env.CCACHE_DIR }}
|
|
||||||
key: ${{ env.CACHE_KEY }}-${{ github.sha }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ env.CACHE_KEY }}-
|
|
||||||
|
|
||||||
- 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
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-22.04, ubuntu-20.04]
|
|
||||||
compiler:
|
|
||||||
- { cc: clang, cxx: clang++ }
|
|
||||||
- { cc: gcc, cxx: g++ }
|
|
||||||
reloc: [0]
|
|
||||||
suite: [dist-vlt-0, dist-vlt-1, dist-vlt-2, dist-vlt-3, vltmt-0, vltmt-1]
|
|
||||||
include:
|
include:
|
||||||
# Test with GCC 10 on ubuntu-20.04
|
- {os: ubuntu-24.04, cc: clang}
|
||||||
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, suite: dist-vlt-0}
|
|
||||||
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, suite: dist-vlt-1}
|
|
||||||
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, suite: dist-vlt-2}
|
|
||||||
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, suite: dist-vlt-3}
|
|
||||||
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, suite: vltmt-0}
|
|
||||||
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, suite: vltmt-1}
|
|
||||||
# Test relocated installation - on most common platform only
|
|
||||||
- {os: ubuntu-22.04, compiler: { cc: gcc, cxx: g++ }, reloc: 1, suite: dist-vlt-0}
|
|
||||||
- {os: ubuntu-22.04, compiler: { cc: gcc, cxx: g++ }, reloc: 1, suite: dist-vlt-1}
|
|
||||||
- {os: ubuntu-22.04, compiler: { cc: gcc, cxx: g++ }, reloc: 1, suite: dist-vlt-2}
|
|
||||||
- {os: ubuntu-22.04, compiler: { cc: gcc, cxx: g++ }, reloc: 1, suite: dist-vlt-3}
|
|
||||||
- {os: ubuntu-22.04, compiler: { cc: gcc, cxx: g++ }, reloc: 1, suite: vltmt-0}
|
|
||||||
- {os: ubuntu-22.04, compiler: { cc: gcc, cxx: g++ }, reloc: 1, suite: vltmt-1}
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
name: Test | ${{ matrix.os }} | ${{ matrix.compiler.cc }} | ${{ matrix.reloc && 'reloc | ' || '' }} ${{ matrix.suite }}
|
|
||||||
env:
|
|
||||||
CI_BUILD_STAGE_NAME: test
|
|
||||||
CI_RUNS_ON: ${{ matrix.os }}
|
|
||||||
CI_RELOC: ${{ matrix.reloc }}
|
|
||||||
CC: ${{ matrix.compiler.cc }}
|
|
||||||
CXX: ${{ matrix.compiler.cxx }}
|
|
||||||
CACHE_BASE_KEY: test-${{ matrix.os }}-${{ matrix.compiler.cc }}-${{ matrix.reloc }}-${{ matrix.suite }}
|
|
||||||
CCACHE_MAXSIZE: 100M # Per build per suite (* 5 * 5 = 2500M in total)
|
|
||||||
VERILATOR_ARCHIVE: verilator-${{ github.sha }}-${{ matrix.os }}-${{ matrix.compiler.cc }}.tar.gz
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: Download tar archive
|
build-2204-gcc:
|
||||||
uses: actions/download-artifact@v4
|
name: Build
|
||||||
with:
|
uses: ./.github/workflows/reusable-build.yml
|
||||||
name: ${{ env.VERILATOR_ARCHIVE }}
|
with:
|
||||||
path: ${{ github.workspace }}
|
os: ${{ matrix.os }}
|
||||||
|
cc: ${{ matrix.cc }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- {os: ubuntu-22.04, cc: gcc}
|
||||||
|
|
||||||
- name: Unpack tar archive
|
build-2204-clang:
|
||||||
working-directory: ${{ github.workspace }}
|
name: Build
|
||||||
run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }}
|
uses: ./.github/workflows/reusable-build.yml
|
||||||
|
with:
|
||||||
|
os: ${{ matrix.os }}
|
||||||
|
cc: ${{ matrix.cc }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- {os: ubuntu-22.04, cc: clang}
|
||||||
|
|
||||||
- name: Cache $CCACHE_DIR
|
test-2404-gcc:
|
||||||
uses: actions/cache@v4
|
name: Test | ${{ matrix.os }} | ${{ matrix.cc }}
|
||||||
env:
|
needs: build-2404-gcc
|
||||||
CACHE_KEY: ${{ env.CACHE_BASE_KEY }}-ccache2
|
uses: ./.github/workflows/reusable-test.yml
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
os: ${{ matrix.os }}
|
||||||
key: ${{ env.CACHE_KEY }}-${{ github.sha }}
|
cc: ${{ matrix.cc }}
|
||||||
restore-keys: |
|
reloc: ${{ matrix.reloc }}
|
||||||
${{ env.CACHE_KEY }}-
|
suite: ${{ matrix.suite }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
# Ubuntu 24.04 gcc
|
||||||
|
- {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: dist-vlt-0}
|
||||||
|
- {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: dist-vlt-1}
|
||||||
|
- {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: dist-vlt-2}
|
||||||
|
- {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: dist-vlt-3}
|
||||||
|
- {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: vltmt-0}
|
||||||
|
- {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: vltmt-1}
|
||||||
|
- {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: vltmt-2}
|
||||||
|
|
||||||
- name: Install test dependencies
|
test-2404-clang:
|
||||||
run: ./ci/ci-install.bash
|
name: Test | ${{ matrix.os }} | ${{ matrix.cc }}
|
||||||
|
needs: build-2404-clang
|
||||||
|
uses: ./.github/workflows/reusable-test.yml
|
||||||
|
with:
|
||||||
|
os: ${{ matrix.os }}
|
||||||
|
cc: ${{ matrix.cc }}
|
||||||
|
reloc: ${{ matrix.reloc }}
|
||||||
|
suite: ${{ matrix.suite }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
# Ubuntu 24.04 clang
|
||||||
|
- {os: ubuntu-24.04, cc: clang, reloc: 0, suite: dist-vlt-0}
|
||||||
|
- {os: ubuntu-24.04, cc: clang, reloc: 0, suite: dist-vlt-1}
|
||||||
|
- {os: ubuntu-24.04, cc: clang, reloc: 0, suite: dist-vlt-2}
|
||||||
|
- {os: ubuntu-24.04, cc: clang, reloc: 0, suite: dist-vlt-3}
|
||||||
|
- {os: ubuntu-24.04, cc: clang, reloc: 0, suite: vltmt-0}
|
||||||
|
- {os: ubuntu-24.04, cc: clang, reloc: 0, suite: vltmt-1}
|
||||||
|
- {os: ubuntu-24.04, cc: clang, reloc: 0, suite: vltmt-2}
|
||||||
|
|
||||||
- name: Test
|
test-2204-gcc:
|
||||||
env:
|
name: Test | ${{ matrix.os }} | ${{ matrix.cc }}
|
||||||
TESTS: ${{ matrix.suite }}
|
needs: build-2204-gcc
|
||||||
run: ./ci/ci-script.bash
|
uses: ./.github/workflows/reusable-test.yml
|
||||||
|
with:
|
||||||
|
os: ${{ matrix.os }}
|
||||||
|
cc: ${{ matrix.cc }}
|
||||||
|
reloc: ${{ matrix.reloc }}
|
||||||
|
suite: ${{ matrix.suite }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
# Ubuntu 22.04 gcc
|
||||||
|
- {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: dist-vlt-0}
|
||||||
|
- {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: dist-vlt-1}
|
||||||
|
- {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: dist-vlt-2}
|
||||||
|
- {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: dist-vlt-3}
|
||||||
|
- {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: vltmt-0}
|
||||||
|
- {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: vltmt-1}
|
||||||
|
- {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: vltmt-2}
|
||||||
|
|
||||||
|
test-2204-clang:
|
||||||
|
name: Test | ${{ matrix.os }} | ${{ matrix.cc }}
|
||||||
|
needs: build-2204-clang
|
||||||
|
uses: ./.github/workflows/reusable-test.yml
|
||||||
|
with:
|
||||||
|
os: ${{ matrix.os }}
|
||||||
|
cc: ${{ matrix.cc }}
|
||||||
|
reloc: ${{ matrix.reloc }}
|
||||||
|
suite: ${{ matrix.suite }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
# Ubuntu 22.04 clang, also test relocation
|
||||||
|
- {os: ubuntu-22.04, cc: clang, reloc: 1, suite: dist-vlt-0}
|
||||||
|
- {os: ubuntu-22.04, cc: clang, reloc: 1, suite: dist-vlt-1}
|
||||||
|
- {os: ubuntu-22.04, cc: clang, reloc: 1, suite: dist-vlt-2}
|
||||||
|
- {os: ubuntu-22.04, cc: clang, reloc: 1, suite: dist-vlt-3}
|
||||||
|
- {os: ubuntu-22.04, cc: clang, reloc: 1, suite: vltmt-0}
|
||||||
|
- {os: ubuntu-22.04, cc: clang, reloc: 1, suite: vltmt-1}
|
||||||
|
- {os: ubuntu-22.04, cc: clang, reloc: 1, suite: vltmt-2}
|
||||||
|
|
||||||
lint-py:
|
lint-py:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
name: Lint Python
|
name: Lint Python
|
||||||
env:
|
env:
|
||||||
|
CI_OS_NAME: linux
|
||||||
|
CI_COMMIT: ${{ github.sha }}
|
||||||
CI_BUILD_STAGE_NAME: build
|
CI_BUILD_STAGE_NAME: build
|
||||||
CI_RUNS_ON: ubuntu-22.04
|
CI_RUNS_ON: ubuntu-22.04
|
||||||
|
CCACHE_COMPRESS: 1
|
||||||
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||||
|
CCACHE_LIMIT_MULTIPLE: 0.95
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
path: repo
|
path: repo
|
||||||
|
|
||||||
- name: Install packages for build
|
- name: Install packages for build
|
||||||
run: ./ci/ci-install.bash
|
run: ./ci/ci-install.bash
|
||||||
|
|
||||||
# We use specific version numbers, otherwise a Python package
|
# We use specific version numbers, otherwise a Python package
|
||||||
# update may add a warning and break our build
|
# update may add a warning and break our build
|
||||||
- name: Install packages for lint
|
- name: Install packages for lint
|
||||||
run: sudo pip3 install pylint==3.0.2 ruff==0.1.3 clang sphinx sphinx_rtd_theme sphinxcontrib-spelling breathe ruff
|
run: sudo pip3 install pylint==3.0.2 ruff==0.1.3 clang sphinx sphinx_rtd_theme sphinxcontrib-spelling breathe ruff
|
||||||
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: autoconf && ./configure --enable-longtests --enable-ccwarn
|
run: autoconf && ./configure --enable-longtests --enable-ccwarn
|
||||||
|
|
||||||
- name: Lint
|
- name: Lint
|
||||||
run: make -k lint-py
|
run: make -k lint-py
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
|
---
|
||||||
# DESCRIPTION: Github actions config
|
# DESCRIPTION: Github actions config
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
#
|
||||||
name: Contributor Agreement
|
name: Contributor Agreement
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
pull_request:
|
pull_request:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
jobs:
|
jobs:
|
||||||
Test:
|
Test:
|
||||||
name: "'docs/CONTRIBUTORS' was signed"
|
name: "'docs/CONTRIBUTORS' was signed"
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- run: test_regress/t/t_dist_contributors.pl
|
- run: test_regress/t/t_dist_contributors.py
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
# DESCRIPTION: Github actions config
|
# DESCRIPTION: Github actions config
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
@@ -6,7 +7,10 @@ name: coverage
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 0 * * 0' # weekly
|
- cron: '0 0 * * 0' # weekly
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
env:
|
env:
|
||||||
CI_OS_NAME: linux
|
CI_OS_NAME: linux
|
||||||
@@ -21,78 +25,73 @@ defaults:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
|
|
||||||
Build:
|
Build:
|
||||||
runs-on: ubuntu-22.04
|
# Only run scheduled jobs if explicitly enabled for that repo (e.g.: not on forks)
|
||||||
|
if: ${{ github.event_name != 'schedule' || vars.ENABLE_SCHEDULED_JOBS == 'true' }}
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
env:
|
env:
|
||||||
CI_BUILD_STAGE_NAME: build
|
CI_BUILD_STAGE_NAME: build
|
||||||
CI_RUNS_ON: ubuntu-22.04
|
CI_RUNS_ON: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
path: repo
|
path: repo
|
||||||
|
|
||||||
- name: Install packages for build
|
- name: Install packages for build
|
||||||
run: ./ci/ci-install.bash
|
run: ./ci/ci-install.bash
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: ./ci/ci-script.bash
|
run: ./ci/ci-script.bash
|
||||||
|
|
||||||
- name: Tar up repository
|
- name: Tar up repository
|
||||||
working-directory: ${{ github.workspace }}
|
working-directory: ${{ github.workspace }}
|
||||||
run: tar --posix -c -z -f ${{ env.VERILATOR_ARCHIVE }} repo
|
run: tar --posix -c -z -f ${{ env.VERILATOR_ARCHIVE }} repo
|
||||||
|
|
||||||
- name: Upload tar archive
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
path: ${{ github.workspace }}/${{ env.VERILATOR_ARCHIVE }}
|
|
||||||
name: ${{ env.VERILATOR_ARCHIVE }}
|
|
||||||
|
|
||||||
|
- name: Upload tar archive
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
path: ${{ github.workspace }}/${{ env.VERILATOR_ARCHIVE }}
|
||||||
|
name: ${{ env.VERILATOR_ARCHIVE }}
|
||||||
|
|
||||||
Test:
|
Test:
|
||||||
needs: Build
|
needs: Build
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
test:
|
test: [vlt-, vltmt-]
|
||||||
- vlt-
|
num: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
- vltmt-
|
|
||||||
num:
|
|
||||||
- 0
|
|
||||||
- 1
|
|
||||||
- 2
|
|
||||||
- 3
|
|
||||||
- 4
|
|
||||||
- 5
|
|
||||||
- 6
|
|
||||||
- 7
|
|
||||||
- 8
|
|
||||||
- 9
|
|
||||||
include:
|
include:
|
||||||
- { test: dist, num: '' }
|
- {test: dist, num: ''}
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
name: test-${{ matrix.test }}${{ matrix.num }}
|
name: test-${{ matrix.test }}${{ matrix.num }}
|
||||||
env:
|
env:
|
||||||
CI_BUILD_STAGE_NAME: test
|
CI_BUILD_STAGE_NAME: test
|
||||||
CI_RUNS_ON: ubuntu-22.04
|
CI_RUNS_ON: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Download tar archive
|
- name: Download tar archive
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ env.VERILATOR_ARCHIVE }}
|
name: ${{ env.VERILATOR_ARCHIVE }}
|
||||||
path: ${{ github.workspace }}
|
path: ${{ github.workspace }}
|
||||||
|
|
||||||
- name: Unpack tar archive
|
- name: Unpack tar archive
|
||||||
working-directory: ${{ github.workspace }}
|
working-directory: ${{ github.workspace }}
|
||||||
run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }}
|
run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }}
|
||||||
|
|
||||||
- name: Install test dependencies
|
- name: Install test dependencies
|
||||||
run: ./ci/ci-install.bash
|
run: ./ci/ci-install.bash
|
||||||
|
|
||||||
- name: Test
|
- name: Test
|
||||||
env:
|
env:
|
||||||
TESTS: coverage-${{ matrix.test }}${{ matrix.num }}
|
TESTS: coverage-${{ matrix.test }}${{ matrix.num }}
|
||||||
run: ./ci/ci-script.bash
|
run: ./ci/ci-script.bash
|
||||||
|
|
||||||
|
- name: Upload coverage data to Codecov
|
||||||
|
env:
|
||||||
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
run: |
|
||||||
|
find . -name '*.gcno' -exec rm {} \;
|
||||||
|
./ci/codecov -v upload-process -Z --sha ${{ github.sha }} -f nodist/obj_dir/coverage/app_total.info
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
# Build and push verilator docker image when tags are pushed to the repository.
|
# Build and push verilator docker image when tags are pushed to the repository.
|
||||||
# The following variable(s) must be configured in the github repository:
|
# The following variable(s) must be configured in the github repository:
|
||||||
# DOCKER_HUB_NAMESPACE: docker hub namespace.
|
# DOCKER_HUB_NAMESPACE: docker hub namespace.
|
||||||
@@ -8,7 +9,7 @@ name: Build Verilator Container
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags: [ 'v*' ]
|
tags: ['v*']
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
manual_tag:
|
manual_tag:
|
||||||
@@ -21,11 +22,14 @@ on:
|
|||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
build:
|
build:
|
||||||
|
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
@@ -34,52 +38,52 @@ jobs:
|
|||||||
# - "ci/docker/buildenv:verilator-buildenv"
|
# - "ci/docker/buildenv:verilator-buildenv"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Extract context variables
|
- name: Extract context variables
|
||||||
run: |
|
run: |
|
||||||
echo "${{ matrix.contexts }}" | sed -r 's/(.*):.*/build_context=\1/' >> "$GITHUB_ENV"
|
echo "${{ matrix.contexts }}" | sed -r 's/(.*):.*/build_context=\1/' >> "$GITHUB_ENV"
|
||||||
echo "${{ matrix.contexts }}" | sed -r 's/.*:(.*)/image_name=\1/' >> "$GITHUB_ENV"
|
echo "${{ matrix.contexts }}" | sed -r 's/.*:(.*)/image_name=\1/' >> "$GITHUB_ENV"
|
||||||
echo "git_tag=${GITHUB_REF#refs/*/}" >> "$GITHUB_ENV"
|
echo "git_tag=${GITHUB_REF#refs/*/}" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
- name: Use manual tag
|
- name: Use manual tag
|
||||||
if: ${{ inputs.manual_tag }}
|
if: ${{ inputs.manual_tag }}
|
||||||
run: |
|
run: |
|
||||||
echo "git_tag=${{ inputs.manual_tag }}" >> "$GITHUB_ENV"
|
echo "git_tag=${{ inputs.manual_tag }}" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
- name: Docker meta
|
- name: Docker meta
|
||||||
id: docker_meta
|
id: docker_meta
|
||||||
uses: docker/metadata-action@v4
|
uses: docker/metadata-action@v4
|
||||||
with:
|
with:
|
||||||
images: |
|
images: |
|
||||||
${{ vars.DOCKER_HUB_NAMESPACE }}/${{ env.image_name }}
|
${{ vars.DOCKER_HUB_NAMESPACE }}/${{ env.image_name }}
|
||||||
tags: |
|
tags: |
|
||||||
type=match,pattern=(v.*),group=1,enable=${{ startsWith(github.ref, 'refs/tags/v') }}
|
type=match,pattern=(v.*),group=1,enable=${{ startsWith(github.ref, 'refs/tags/v') }}
|
||||||
type=raw,value=${{ inputs.manual_tag }},enable=${{ inputs.manual_tag != '' }}
|
type=raw,value=${{ inputs.manual_tag }},enable=${{ inputs.manual_tag != '' }}
|
||||||
type=raw,value=latest,enable=${{ inputs.add_latest_tag == true }}
|
type=raw,value=latest,enable=${{ inputs.add_latest_tag == true }}
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v2
|
uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v2
|
||||||
with:
|
with:
|
||||||
buildkitd-flags: --debug
|
buildkitd-flags: --debug
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v2
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_HUB_USER }}
|
username: ${{ secrets.DOCKER_HUB_USER }}
|
||||||
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
||||||
|
|
||||||
- name: Build and Push to Docker
|
- name: Build and Push to Docker
|
||||||
uses: docker/build-push-action@v4
|
uses: docker/build-push-action@v4
|
||||||
if: startsWith(github.ref, 'refs/tags/v')
|
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
|
||||||
with:
|
with:
|
||||||
context: ${{ env.build_context }}
|
context: ${{ env.build_context }}
|
||||||
build-args: SOURCE_COMMIT=${{ env.git_tag }}
|
build-args: SOURCE_COMMIT=${{ env.git_tag }}
|
||||||
platforms: linux/arm64,linux/amd64
|
platforms: linux/arm64,linux/amd64
|
||||||
push: ${{ !env.ACT && startsWith(github.ref, 'refs/tags/v') }}
|
push: ${{ !env.ACT && (startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch') }}
|
||||||
tags: ${{ steps.docker_meta.outputs.tags }}
|
tags: ${{ steps.docker_meta.outputs.tags }}
|
||||||
labels: ${{ steps.docker_meta.outputs.labels }}
|
labels: ${{ steps.docker_meta.outputs.labels }}
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
|
---
|
||||||
# DESCRIPTION: Github actions config
|
# DESCRIPTION: Github actions config
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
#
|
||||||
name: format
|
name: format
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
jobs:
|
jobs:
|
||||||
format:
|
format:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
@@ -27,6 +28,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
bash ci/ci-install.bash &&
|
bash ci/ci-install.bash &&
|
||||||
sudo apt-get install clang-format-14 yapf3 &&
|
sudo apt-get install clang-format-14 yapf3 &&
|
||||||
|
sudo pip3 install gersemi mbake &&
|
||||||
git config --global user.email "[email protected]" &&
|
git config --global user.email "[email protected]" &&
|
||||||
git config --global user.name "github action"
|
git config --global user.name "github action"
|
||||||
- name: Format code
|
- name: Format code
|
||||||
|
|||||||
@@ -1,55 +1,52 @@
|
|||||||
|
---
|
||||||
# DESCRIPTION: Github actions config
|
# DESCRIPTION: Github actions config
|
||||||
# This name is key to badges in README.rst, so we use the name build
|
# This name is key to badges in README.rst, so we use the name build
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
#
|
||||||
name: msbuild
|
name: msbuild
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
pull_request:
|
pull_request:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 0 * * 0' # weekly
|
- cron: 0 0 * * 0 # weekly
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
env:
|
env:
|
||||||
CI_OS_NAME: win
|
CI_OS_NAME: win
|
||||||
CI_COMMIT: ${{ github.sha }}
|
CI_COMMIT: ${{ github.sha }}
|
||||||
CCACHE_COMPRESS: 1
|
CCACHE_COMPRESS: 1
|
||||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||||
CCACHE_LIMIT_MULTIPLE: 0.95
|
CCACHE_LIMIT_MULTIPLE: 0.95
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: repo
|
working-directory: repo
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }}
|
group: ${{ github.workflow }}-${{ github.actor }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
windows:
|
||||||
windows:
|
|
||||||
name: run on windows
|
name: run on windows
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
path: repo
|
path: repo
|
||||||
- name: Cache $CCACHE_DIR
|
- name: Cache $CCACHE_DIR
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
path: ${{ env.CCACHE_DIR }}
|
||||||
key: msbuild-msvc-cmake
|
key: msbuild-msvc-cmake
|
||||||
- name: compile
|
- name: compile
|
||||||
env:
|
env:
|
||||||
WIN_FLEX_BISON: ${{ github.workspace }}/.ccache
|
WIN_FLEX_BISON: ${{ github.workspace }}/.ccache
|
||||||
run: ./ci/ci-win-compile.ps1
|
run: ./ci/ci-win-compile.ps1
|
||||||
- name: test build
|
- name: test build
|
||||||
run: ./ci/ci-win-test.ps1
|
run: ./ci/ci-win-test.ps1
|
||||||
- name: Zip up repository
|
- name: Zip up repository
|
||||||
run: Compress-Archive -LiteralPath install -DestinationPath verilator.zip
|
run: Compress-Archive -LiteralPath install -DestinationPath verilator.zip
|
||||||
- name: Upload zip archive
|
- name: Upload zip archive
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
path: ${{ github.workspace }}/repo/verilator.zip
|
path: ${{ github.workspace }}/repo/verilator.zip
|
||||||
name: verilator-win.zip
|
name: verilator-win.zip
|
||||||
|
|||||||
@@ -0,0 +1,76 @@
|
|||||||
|
---
|
||||||
|
# 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
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
os: # e.g. ubuntu-24.04
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
cc: # gcc or clang
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
env:
|
||||||
|
CI_OS_NAME: linux
|
||||||
|
CI_COMMIT: ${{ github.sha }}
|
||||||
|
CCACHE_COMPRESS: 1
|
||||||
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||||
|
CCACHE_LIMIT_MULTIPLE: 0.95
|
||||||
|
INSTALL_DIR: ${{ github.workspace }}/install
|
||||||
|
RELOC_DIR: ${{ github.workspace }}/relloc
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
working-directory: repo
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
build:
|
||||||
|
runs-on: ${{ inputs.os }}
|
||||||
|
name: Sub-build | ${{ inputs.os }} | ${{ inputs.cc }}
|
||||||
|
env:
|
||||||
|
CI_BUILD_STAGE_NAME: build
|
||||||
|
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
|
||||||
|
with:
|
||||||
|
path: repo
|
||||||
|
|
||||||
|
- name: Cache $CCACHE_DIR
|
||||||
|
uses: actions/cache@v4
|
||||||
|
env:
|
||||||
|
CACHE_KEY: ${{ env.CACHE_BASE_KEY }}-ccache
|
||||||
|
with:
|
||||||
|
path: ${{ env.CCACHE_DIR }}
|
||||||
|
key: ${{ env.CACHE_KEY }}-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ env.CACHE_KEY }}-
|
||||||
|
|
||||||
|
- 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 }}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
---
|
||||||
|
# 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
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
runs-on:
|
||||||
|
description: "Runner to use, e.g.: ubuntu-24.04"
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
cc:
|
||||||
|
description: "Compiler to use: 'gcc' or 'clang'"
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
env:
|
||||||
|
CCACHE_DIR: ${{ github.workspace }}/ccache
|
||||||
|
CCACHE_MAXSIZE: 512M
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ${{ inputs.runs-on }}
|
||||||
|
name: Build
|
||||||
|
steps:
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install ccache mold help2man libfl-dev libgoogle-perftools-dev libsystemc-dev
|
||||||
|
|
||||||
|
- name: Use saved ccache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ccache
|
||||||
|
key: rtlmeter-build-ccache-${{ inputs.runs-on }}-${{ inputs.cc }}-${{ github.run_id }}-${{ github.run_attempt }}
|
||||||
|
restore-keys: rtlmeter-build-ccache-${{ inputs.runs-on }}-${{ inputs.cc }}
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: repo
|
||||||
|
fetch-depth: 0 # Required for 'git describe' used for 'verilator --version'
|
||||||
|
|
||||||
|
- name: Configure
|
||||||
|
working-directory: repo
|
||||||
|
run: |
|
||||||
|
autoconf
|
||||||
|
./configure --prefix=${{ github.workspace }}/install CXX=${{ inputs.cc == 'clang' && 'clang++' || 'g++' }}
|
||||||
|
|
||||||
|
- name: Make
|
||||||
|
working-directory: repo
|
||||||
|
run: make -j $(nproc)
|
||||||
|
|
||||||
|
- name: Install
|
||||||
|
working-directory: repo
|
||||||
|
run: make install
|
||||||
|
|
||||||
|
- name: Tar up installation
|
||||||
|
run: tar --posix -c -z -f verilator-rtlmeter.tar.gz install
|
||||||
|
|
||||||
|
- name: Upload Verilator installation archive
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
path: verilator-rtlmeter.tar.gz
|
||||||
|
name: verilator-rtlmeter-${{ inputs.runs-on }}-${{ inputs.cc }}
|
||||||
|
overwrite: true
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
---
|
||||||
|
# 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
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
runs-on:
|
||||||
|
description: "Runner to use, e.g.: ubuntu-24.04"
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
cc:
|
||||||
|
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
|
||||||
|
default: ""
|
||||||
|
executeArgs:
|
||||||
|
description: "Additional simulator command line arguments"
|
||||||
|
type: string
|
||||||
|
default: ""
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
env:
|
||||||
|
CCACHE_DIR: ${{ github.workspace }}/ccache
|
||||||
|
CCACHE_MAXSIZE: 512M
|
||||||
|
CCACHE_DISABLE: 1
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
runs-on: ${{ inputs.runs-on }}
|
||||||
|
name: Run
|
||||||
|
steps:
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
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
|
||||||
|
with:
|
||||||
|
name: verilator-rtlmeter-${{ inputs.runs-on }}-${{ inputs.cc }}
|
||||||
|
|
||||||
|
- name: Unpack Verilator installation archive
|
||||||
|
run: |
|
||||||
|
tar -x -z -f verilator-rtlmeter.tar.gz
|
||||||
|
echo "${{ github.workspace }}/install/bin" >> $GITHUB_PATH
|
||||||
|
|
||||||
|
- name: Use saved ccache
|
||||||
|
if: ${{ env.CCACHE_DISABLE == 0 }}
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{ env.CCACHE_DIR }}
|
||||||
|
key: rtlmeter-run-ccache-${{ inputs.runs-on }}-${{ inputs.cc }}-${{ inputs.cases }}-${{ inputs.compileArgs }}-${{ github.run_id }}-${{ github.run_attempt }}
|
||||||
|
restore-keys: rtlmeter-run-ccache-${{ inputs.runs-on }}-${{ inputs.cc }}-${{ inputs.cases }}-${{ inputs.compileArgs }}
|
||||||
|
|
||||||
|
- name: Checkout RTLMeter
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: "verilator/rtlmeter"
|
||||||
|
path: rtlmeter
|
||||||
|
|
||||||
|
- name: Setup RTLMeter venv
|
||||||
|
working-directory: rtlmeter
|
||||||
|
run: make venv
|
||||||
|
|
||||||
|
- 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: '
|
||||||
|
|
||||||
|
- name: Execute cases
|
||||||
|
working-directory: rtlmeter
|
||||||
|
continue-on-error: true # Do not fail on error, so we can at leat 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: '
|
||||||
|
|
||||||
|
- name: Collate results
|
||||||
|
id: results
|
||||||
|
working-directory: rtlmeter
|
||||||
|
run: |
|
||||||
|
# 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 --runName "${{ inputs.run-name }}" > ../results-${hash}.json
|
||||||
|
|
||||||
|
- name: Report results
|
||||||
|
working-directory: rtlmeter
|
||||||
|
run: |
|
||||||
|
./rtlmeter report --steps '*' --metrics '*' ../results-${{ steps.results.outputs.hash }}.json
|
||||||
|
|
||||||
|
- name: Upload results
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
path: results-${{ steps.results.outputs.hash }}.json
|
||||||
|
name: rtlmeter-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: '
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
---
|
||||||
|
# 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
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
os: # e.g. ubuntu-24.04
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
cc: # gcc or clang
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
reloc: # 0 or 1
|
||||||
|
required: true
|
||||||
|
type: number
|
||||||
|
suite: # e.g. dist-vlt-0
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
env:
|
||||||
|
CI_OS_NAME: linux
|
||||||
|
CI_COMMIT: ${{ github.sha }}
|
||||||
|
CCACHE_COMPRESS: 1
|
||||||
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||||
|
CCACHE_LIMIT_MULTIPLE: 0.95
|
||||||
|
INSTALL_DIR: ${{ github.workspace }}/install
|
||||||
|
RELOC_DIR: ${{ github.workspace }}/relloc
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
working-directory: repo
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
test:
|
||||||
|
runs-on: ${{ inputs.os }}
|
||||||
|
name: Sub-test | ${{ inputs.os }} | ${{ inputs.cc }} | ${{inputs.reloc && 'reloc | ' || '' }} ${{ inputs.suite }}
|
||||||
|
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
|
||||||
|
with:
|
||||||
|
name: ${{ env.VERILATOR_ARCHIVE }}
|
||||||
|
path: ${{ github.workspace }}
|
||||||
|
|
||||||
|
- name: Unpack tar archive
|
||||||
|
working-directory: ${{ github.workspace }}
|
||||||
|
run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }}
|
||||||
|
|
||||||
|
- name: Cache $CCACHE_DIR
|
||||||
|
uses: actions/cache@v4
|
||||||
|
env:
|
||||||
|
CACHE_KEY: ${{ env.CACHE_BASE_KEY }}-ccache2
|
||||||
|
with:
|
||||||
|
path: ${{ env.CCACHE_DIR }}
|
||||||
|
key: ${{ env.CACHE_KEY }}-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ env.CACHE_KEY }}-
|
||||||
|
|
||||||
|
- name: Install test dependencies
|
||||||
|
run: ./ci/ci-install.bash
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
env:
|
||||||
|
TESTS: ${{ inputs.suite }}
|
||||||
|
run: ./ci/ci-script.bash
|
||||||
@@ -0,0 +1,207 @@
|
|||||||
|
---
|
||||||
|
# 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
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 2 * * *' # Daily, starting at 02:00 UTC
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: RTLMeter
|
||||||
|
cancel-in-progress: false
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-gcc:
|
||||||
|
name: Build GCC
|
||||||
|
# Only run scheduled jobs if explicitly enabled for that repo (e.g.: not on forks)
|
||||||
|
if: ${{ github.event_name != 'schedule' || vars.ENABLE_SCHEDULED_JOBS == 'true' }}
|
||||||
|
uses: ./.github/workflows/reusable-rtlmeter-build.yml
|
||||||
|
with:
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
cc: gcc
|
||||||
|
|
||||||
|
build-clang:
|
||||||
|
name: Build Clang
|
||||||
|
# Only run scheduled jobs if explicitly enabled for that repo (e.g.: not on forks)
|
||||||
|
if: ${{ github.event_name != 'schedule' || vars.ENABLE_SCHEDULED_JOBS == 'true' }}
|
||||||
|
uses: ./.github/workflows/reusable-rtlmeter-build.yml
|
||||||
|
with:
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
cc: clang
|
||||||
|
|
||||||
|
run-gcc:
|
||||||
|
name: Run GCC | ${{ matrix.cases }}
|
||||||
|
needs: build-gcc
|
||||||
|
uses: ./.github/workflows/reusable-rtlmeter-run.yml
|
||||||
|
with:
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
cc: gcc
|
||||||
|
cases: ${{ matrix.cases }}
|
||||||
|
run-name: "gcc"
|
||||||
|
compileArgs: ""
|
||||||
|
executeArgs: ""
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
max-parallel: 2
|
||||||
|
matrix:
|
||||||
|
cases:
|
||||||
|
- "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 }}
|
||||||
|
run-name: "clang --threads 4"
|
||||||
|
compileArgs: "--threads 4"
|
||||||
|
executeArgs: ""
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
max-parallel: 2
|
||||||
|
matrix:
|
||||||
|
cases:
|
||||||
|
- "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:*"
|
||||||
|
|
||||||
|
combine-results:
|
||||||
|
name: Combine results
|
||||||
|
needs: [run-gcc, run-clang]
|
||||||
|
# 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
|
||||||
|
steps:
|
||||||
|
- name: Download all results
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: rtlmeter-results-*
|
||||||
|
path: all-results-${{ github.run_id }}
|
||||||
|
merge-multiple: true
|
||||||
|
- name: Tar up all results into single archive
|
||||||
|
run: |
|
||||||
|
# Ensure combined result directory exists in case of no results
|
||||||
|
mkdir -p all-results-${{ github.run_id }}
|
||||||
|
ls -la all-results-${{ github.run_id }}
|
||||||
|
# Tar up the results directory
|
||||||
|
tar --posix -c -z -f all-results-${{ github.run_id }}.tar.gz all-results-${{ github.run_id }}
|
||||||
|
- name: Upload combined results
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
path: all-results-${{ github.run_id }}.tar.gz
|
||||||
|
name: all-results
|
||||||
|
overwrite: true
|
||||||
|
retention-days: 30
|
||||||
|
|
||||||
|
publish-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 combined results
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: all-results
|
||||||
|
path: results
|
||||||
|
- name: Extract combined results
|
||||||
|
working-directory: results
|
||||||
|
run: |
|
||||||
|
tar xzfv all-results-${{ github.run_id }}.tar.gz
|
||||||
|
ls -la
|
||||||
|
# Pushing to verilator/verilator-rtlmeter-results requires elevated permissions
|
||||||
|
- name: Generate access token
|
||||||
|
id: generate-token
|
||||||
|
uses: actions/[email protected]
|
||||||
|
with:
|
||||||
|
app-id: ${{ vars.RTLMETER_RESULTS_CI_APP_ID }}
|
||||||
|
private-key: ${{ secrets.RTLMETER_RESULTS_CI_APP_PRIVATE_KEY }}
|
||||||
|
owner: verilator
|
||||||
|
repositories: verilator-rtlmeter-results
|
||||||
|
- name: Checkout verilator-rtlmeter-results
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
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: |
|
||||||
|
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
|
||||||
+8
-4
@@ -29,14 +29,15 @@ dddrun*
|
|||||||
doxygen-doc
|
doxygen-doc
|
||||||
gdbrun*
|
gdbrun*
|
||||||
gmon.out
|
gmon.out
|
||||||
ncverilog.history
|
|
||||||
internals.txt
|
internals.txt
|
||||||
|
ncverilog.history
|
||||||
|
nohup.out
|
||||||
|
verilator-config-version.cmake
|
||||||
|
verilator-config.cmake
|
||||||
|
verilator.pc
|
||||||
verilator.txt
|
verilator.txt
|
||||||
verilator_bin*
|
verilator_bin*
|
||||||
verilator_coverage_bin*
|
verilator_coverage_bin*
|
||||||
verilator.pc
|
|
||||||
verilator-config.cmake
|
|
||||||
verilator-config-version.cmake
|
|
||||||
**/__pycache__/*
|
**/__pycache__/*
|
||||||
**/_build/*
|
**/_build/*
|
||||||
**/obj_dir/*
|
**/obj_dir/*
|
||||||
@@ -46,3 +47,6 @@ verilator-config-version.cmake
|
|||||||
/test_regress/snapshot/
|
/test_regress/snapshot/
|
||||||
xmverilog.*
|
xmverilog.*
|
||||||
xrun.history
|
xrun.history
|
||||||
|
|
||||||
|
# Normal CMake build directory
|
||||||
|
/build
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- id: verilator
|
||||||
|
name: verilator-lint
|
||||||
|
description: Runs verilator Docker image to lint (System) Verilog designs
|
||||||
|
args: [--lint-only]
|
||||||
|
language: docker_image
|
||||||
|
entry: verilator/verilator:latest
|
||||||
|
types_or: [verilog, system-verilog]
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
[style]
|
||||||
|
based_on_style = pep8
|
||||||
|
column_limit = 99
|
||||||
|
#split_before_arithmetic_operator=True
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# See https://citation-file-format.github.io/
|
||||||
|
cff-version: 1.2.0
|
||||||
|
title: Verilator
|
||||||
|
message: >-
|
||||||
|
If you use this software, please cite it using the
|
||||||
|
metadata from this file.
|
||||||
|
type: software
|
||||||
|
authors:
|
||||||
|
- given-names: Wilson
|
||||||
|
family-names: Snyder
|
||||||
|
email: [email protected]
|
||||||
|
affiliation: Veripool
|
||||||
|
- given-names: Paul
|
||||||
|
family-names: Wasson
|
||||||
|
- given-names: Duane
|
||||||
|
family-names: Galbi
|
||||||
|
- name: 'et al'
|
||||||
|
repository-code: 'https://github.com/verilator/verilator'
|
||||||
|
url: 'https://verilator.org'
|
||||||
|
abstract: >-
|
||||||
|
The Verilator package converts Verilog and SystemVerilog hardware
|
||||||
|
description language (HDL) designs into a fast C++ or SystemC model
|
||||||
|
that, after compiling, can be executed. Verilator is not a
|
||||||
|
traditional simulator but a compiler.
|
||||||
|
license:
|
||||||
|
- LGPL-3.0-only
|
||||||
|
- Artistic-2.0
|
||||||
+78
-35
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
#
|
#
|
||||||
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you
|
# Copyright 2003-2025 by Wilson Snyder. This program is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
@@ -14,36 +14,49 @@
|
|||||||
|
|
||||||
cmake_minimum_required(VERSION 3.15)
|
cmake_minimum_required(VERSION 3.15)
|
||||||
cmake_policy(SET CMP0091 NEW) # Use MSVC_RUNTIME_LIBRARY to select the runtime
|
cmake_policy(SET CMP0091 NEW) # Use MSVC_RUNTIME_LIBRARY to select the runtime
|
||||||
project(Verilator
|
project(
|
||||||
VERSION 5.024
|
Verilator
|
||||||
|
VERSION 5.038
|
||||||
HOMEPAGE_URL https://verilator.org
|
HOMEPAGE_URL https://verilator.org
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
option(DEBUG_AND_RELEASE_AND_COVERAGE
|
# Set default build type to Release if not specified
|
||||||
"Builds both the debug and release binaries, overriding CMAKE_BUILD_TYPE. Not supported under MSBuild.")
|
if(NOT CMAKE_BUILD_TYPE)
|
||||||
|
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(
|
||||||
|
DEBUG_AND_RELEASE_AND_COVERAGE
|
||||||
|
"Builds both the debug and release binaries, overriding CMAKE_BUILD_TYPE. Not supported under MSBuild."
|
||||||
|
)
|
||||||
|
|
||||||
find_package(Python3 COMPONENTS Interpreter)
|
find_package(Python3 COMPONENTS Interpreter)
|
||||||
set(PYTHON3 Python3::Interpreter)
|
set(PYTHON3 ${Python3_EXECUTABLE})
|
||||||
set(CMAKE_INSTALL_DATADIR ${CMAKE_INSTALL_PREFIX})
|
# See also CMake built-in; CMAKE_INSTALL_PREFIX is applied by the install command.
|
||||||
|
set(CMAKE_INSTALL_DATADIR .)
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
include(CMakePackageConfigHelpers)
|
include(CMakePackageConfigHelpers)
|
||||||
include(CheckStructHasMember)
|
include(CheckStructHasMember)
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
|
include(FindThreads)
|
||||||
|
|
||||||
if (NOT WIN32)
|
if(NOT WIN32)
|
||||||
message(WARNING "CMake support on Linux/OSX is experimental.")
|
message(WARNING "CMake support on Linux/OSX is experimental.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WIN32)
|
if(WIN32)
|
||||||
if (DEFINED ENV{WIN_FLEX_BISON})
|
if(DEFINED ENV{WIN_FLEX_BISON})
|
||||||
set(WIN_FLEX_BISON "$ENV{WIN_FLEX_BISON}")
|
set(WIN_FLEX_BISON "$ENV{WIN_FLEX_BISON}")
|
||||||
endif()
|
endif()
|
||||||
if (EXISTS ${WIN_FLEX_BISON})
|
if(EXISTS ${WIN_FLEX_BISON})
|
||||||
list(APPEND CMAKE_PREFIX_PATH ${WIN_FLEX_BISON})
|
list(APPEND CMAKE_PREFIX_PATH ${WIN_FLEX_BISON})
|
||||||
endif()
|
endif()
|
||||||
if (NOT WIN_FLEX_BISON)
|
if(NOT WIN_FLEX_BISON)
|
||||||
message(FATAL_ERROR "Please install https://github.com/lexxmark/winflexbison and set WIN_FLEX_BISON environment variable. Please use install cmake target after a successful build.")
|
message(
|
||||||
|
FATAL_ERROR
|
||||||
|
"Please install https://github.com/lexxmark/winflexbison and set WIN_FLEX_BISON environment variable. Please use install cmake target after a successful build."
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
set(CMAKE_CXX_STANDARD 20)
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
endif()
|
endif()
|
||||||
@@ -51,20 +64,25 @@ endif()
|
|||||||
set(OBJCACHE "" CACHE STRING "Path for ccache, auto-detected if empty")
|
set(OBJCACHE "" CACHE STRING "Path for ccache, auto-detected if empty")
|
||||||
option(OBJCACHE_ENABLED "Compile Verilator with ccache" ON)
|
option(OBJCACHE_ENABLED "Compile Verilator with ccache" ON)
|
||||||
|
|
||||||
if (OBJCACHE_ENABLED)
|
if(OBJCACHE_ENABLED)
|
||||||
if (OBJCACHE STREQUAL "")
|
if(OBJCACHE STREQUAL "")
|
||||||
find_program(OBJCACHE_PATH ccache)
|
find_program(OBJCACHE_PATH ccache)
|
||||||
if (OBJCACHE_PATH STREQUAL "OBJCACHE_PATH-NOTFOUND")
|
if(OBJCACHE_PATH STREQUAL "OBJCACHE_PATH-NOTFOUND")
|
||||||
set(OBJCACHE_PATH "")
|
set(OBJCACHE_PATH "")
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
set(OBJCACHE_PATH "${OBJCACHE}")
|
set(OBJCACHE_PATH "${OBJCACHE}")
|
||||||
endif()
|
endif()
|
||||||
if (NOT OBJCACHE_PATH STREQUAL "")
|
if(NOT OBJCACHE_PATH STREQUAL "")
|
||||||
execute_process(COMMAND "${OBJCACHE_PATH}" --version
|
execute_process(
|
||||||
OUTPUT_VARIABLE objcache_version)
|
COMMAND "${OBJCACHE_PATH}" --version
|
||||||
|
OUTPUT_VARIABLE objcache_version
|
||||||
|
)
|
||||||
string(REGEX MATCH "[^\n\r]+" objcache_version "${objcache_version}")
|
string(REGEX MATCH "[^\n\r]+" objcache_version "${objcache_version}")
|
||||||
message(STATUS "Found ccache: ${OBJCACHE_PATH} (\"${objcache_version}\")")
|
message(
|
||||||
|
STATUS
|
||||||
|
"Found ccache: ${OBJCACHE_PATH} (\"${objcache_version}\")"
|
||||||
|
)
|
||||||
set(CMAKE_CXX_COMPILER_LAUNCHER "${OBJCACHE_PATH}")
|
set(CMAKE_CXX_COMPILER_LAUNCHER "${OBJCACHE_PATH}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@@ -75,8 +93,8 @@ find_package(FLEX)
|
|||||||
# Build
|
# Build
|
||||||
#set_property(GLOBAL PROPERTY JOB_POOLS one_job=1)
|
#set_property(GLOBAL PROPERTY JOB_POOLS one_job=1)
|
||||||
|
|
||||||
if (DEBUG_AND_RELEASE_AND_COVERAGE)
|
if(DEBUG_AND_RELEASE_AND_COVERAGE)
|
||||||
if (CMAKE_GENERATOR MATCHES "^Visual Studio ")
|
if(CMAKE_GENERATOR MATCHES "^Visual Studio ")
|
||||||
error("%Error: The DEBUG_AND_RELEASE_AND_COVERAGE option is not supported in MSBuild-based builds.")
|
error("%Error: The DEBUG_AND_RELEASE_AND_COVERAGE option is not supported in MSBuild-based builds.")
|
||||||
endif()
|
endif()
|
||||||
set(saved_build_type ${CMAKE_BUILD_TYPE})
|
set(saved_build_type ${CMAKE_BUILD_TYPE})
|
||||||
@@ -95,44 +113,69 @@ endif()
|
|||||||
|
|
||||||
set(PACKAGE_NAME ${PROJECT_NAME})
|
set(PACKAGE_NAME ${PROJECT_NAME})
|
||||||
set(PACKAGE_VERSION ${PROJECT_VERSION})
|
set(PACKAGE_VERSION ${PROJECT_VERSION})
|
||||||
|
set(CXX ${CMAKE_CXX_COMPILER})
|
||||||
|
set(AR ${CMAKE_AR})
|
||||||
|
|
||||||
configure_file(include/verilated_config.h.in include/verilated_config.h @ONLY)
|
configure_file(include/verilated_config.h.in include/verilated_config.h @ONLY)
|
||||||
|
configure_file(include/verilated.mk.in include/verilated.mk @ONLY)
|
||||||
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/verilated_config.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
|
install(
|
||||||
|
FILES ${CMAKE_CURRENT_BINARY_DIR}/include/verilated_config.h
|
||||||
configure_package_config_file(verilator-config.cmake.in verilator-config.cmake
|
DESTINATION include
|
||||||
INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}
|
)
|
||||||
|
install(
|
||||||
|
FILES ${CMAKE_CURRENT_BINARY_DIR}/include/verilated.mk
|
||||||
|
DESTINATION include
|
||||||
)
|
)
|
||||||
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/verilator-config.cmake DESTINATION ${CMAKE_INSTALL_PREFIX})
|
configure_package_config_file(
|
||||||
|
verilator-config.cmake.in
|
||||||
configure_package_config_file(verilator-config-version.cmake.in verilator-config-version.cmake
|
verilator-config.cmake
|
||||||
INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}
|
INSTALL_DESTINATION .
|
||||||
)
|
)
|
||||||
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/verilator-config-version.cmake DESTINATION ${CMAKE_INSTALL_PREFIX})
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/verilator-config.cmake DESTINATION .)
|
||||||
|
|
||||||
foreach (program
|
configure_package_config_file(
|
||||||
|
verilator-config-version.cmake.in
|
||||||
|
verilator-config-version.cmake
|
||||||
|
INSTALL_DESTINATION .
|
||||||
|
)
|
||||||
|
|
||||||
|
install(
|
||||||
|
FILES ${CMAKE_CURRENT_BINARY_DIR}/verilator-config-version.cmake
|
||||||
|
DESTINATION .
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach(
|
||||||
|
program
|
||||||
verilator
|
verilator
|
||||||
verilator_gantt
|
verilator_gantt
|
||||||
verilator_ccache_report
|
verilator_ccache_report
|
||||||
verilator_difftree
|
verilator_difftree
|
||||||
verilator_profcfunc
|
verilator_profcfunc
|
||||||
|
verilator_includer
|
||||||
)
|
)
|
||||||
install(PROGRAMS bin/${program} TYPE BIN)
|
install(PROGRAMS bin/${program} TYPE BIN)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
install(DIRECTORY examples TYPE DATA FILES_MATCHING
|
install(
|
||||||
|
DIRECTORY examples
|
||||||
|
TYPE DATA
|
||||||
|
FILES_MATCHING
|
||||||
PATTERN "examples/*/*.[chv]*"
|
PATTERN "examples/*/*.[chv]*"
|
||||||
PATTERN "examples/*/Makefile*"
|
PATTERN "examples/*/Makefile*"
|
||||||
PATTERN "examples/*/CMakeLists.txt"
|
PATTERN "examples/*/CMakeLists.txt"
|
||||||
)
|
)
|
||||||
|
|
||||||
install(DIRECTORY include TYPE DATA FILES_MATCHING
|
install(
|
||||||
|
DIRECTORY include
|
||||||
|
TYPE DATA
|
||||||
|
FILES_MATCHING
|
||||||
PATTERN "include/verilated_config.h"
|
PATTERN "include/verilated_config.h"
|
||||||
PATTERN "include/verilated.mk"
|
|
||||||
PATTERN "include/*.[chv]"
|
PATTERN "include/*.[chv]"
|
||||||
PATTERN "include/*.cpp"
|
PATTERN "include/*.cpp"
|
||||||
|
PATTERN "include/*.vlt"
|
||||||
PATTERN "include/*.sv"
|
PATTERN "include/*.sv"
|
||||||
PATTERN "include/gtkwave/*.[chv]*"
|
PATTERN "include/gtkwave/*.[chv]*"
|
||||||
PATTERN "include/vltstd/*.[chv]*"
|
PATTERN "include/vltstd/*.[chv]*"
|
||||||
|
|||||||
@@ -5,7 +5,545 @@ Revision History and Change Log
|
|||||||
===============================
|
===============================
|
||||||
|
|
||||||
The changes in each Verilator version are described below. The
|
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.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 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]
|
||||||
|
|
||||||
|
|
||||||
|
Verilator 5.036 2025-04-27
|
||||||
|
==========================
|
||||||
|
|
||||||
|
**Important:**
|
||||||
|
|
||||||
|
* 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]
|
||||||
|
|
||||||
|
**Other:**
|
||||||
|
|
||||||
|
* Change `--trace` to `--trace-vcd`.
|
||||||
|
* Support simple `checker` blocks (#4066). [Srinivasan Venkataramanan]
|
||||||
|
* Support force/release with a variable reference (#5721) (#5810). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Support constraint random for StructArray (#5805) (#5937). [Yilou Wang]
|
||||||
|
* Support command-line overriding `define (#5900) (#5908). [Brian Li]
|
||||||
|
* Support soft unions (#5912) (#5932). [Robin Heinemann]
|
||||||
|
* Support `$setuphold` (#5884). [Krzysztof Sychla]
|
||||||
|
* Support assigning unpacked arrays to queues (#5924) (#5928). [Brian Li]
|
||||||
|
* Support `systemc_interface and related inside `class`.
|
||||||
|
* Support class extends with arguments.
|
||||||
|
* Add multi-thread hierarchical simulation (#2583) (#5871). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Add check for `let` misused in statement context (#5733).
|
||||||
|
* Add used language to `--preproc-resolve` output (#5795). [Kamil Rakoczy, Antmicro Ltd.]
|
||||||
|
* Add `--make json` to enable integration with non-make/cmake build systems (#5799). [Andrew Voznytsa]
|
||||||
|
* Add numactl-like automatic assignment of processor affinity (#5911).
|
||||||
|
* Add ccache support for generated cmake files (#5926) (#5930). [Andrew Voznytsa]
|
||||||
|
* Add visualization of multi-threaded waiting time with verilator_gantt (#5929). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Add suggesting isolate_assignments to UNOPTFLAT (#5942). [John Khoo]
|
||||||
|
* Add profiling of hierarchical mtasks with verilator_gantt (#5956). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Add empty veriuser.h for legacy compatibility.
|
||||||
|
* Add DEPRECATED warning on `--xml-only` and `--xml-output`.
|
||||||
|
* Remove unused gtkwave/wavealloca.h. [Geza Lore]
|
||||||
|
* Optimize automatic splitting of some packed variables (#5843). [Geza Lore]
|
||||||
|
* Optimize trigger vector in whole words (#5857). [Geza Lore]
|
||||||
|
* Fix parameters referencing interface fields (#1593) (#5910). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix interface array assignments (#5270) (#5633) (#5869). [Nick Brereton]
|
||||||
|
* Fix change detection at time 0 (#5499) (#5864). [Geza Lore]
|
||||||
|
* Fix foreach of associative array inside a constraint block (#5727) (#5841). [Yilou Wang]
|
||||||
|
* Fix reset of automatic function variables (#5747). [Augustin Fabre]
|
||||||
|
* Fix invalid code motion over branches (#5811) (#5814). [Geza Lore]
|
||||||
|
* Fix sorting of wide SenItems (#5816). [Geza Lore]
|
||||||
|
* Fix tcmalloc static link and non-22.04 builds (#5817) (#5818). [Geza Lore]
|
||||||
|
* Fix error on out-of-range lvalue part select (#5820).
|
||||||
|
* Fix UNOPTFLAT warnings with `--coverage-trace` and always_comb (#5821).
|
||||||
|
* Fix function locals in SenExprBuilder (#5822). [Geza Lore]
|
||||||
|
* Fix type_id package scope resolution (#5826). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix `rand_mode` method with cast (#5831).
|
||||||
|
* Fix invalidating variable caches in SenExprBulider (#5834) (#5835). [Geza Lore]
|
||||||
|
* Fix assignment pattern as function argument (#5839).
|
||||||
|
* Fix checking built-in method arguments (#5839).
|
||||||
|
* Fix splitting of packed ports with non-zero based ranges (#5842). [Geza Lore]
|
||||||
|
* Fix delays inside interface functions, and classes inside interfaces (#5846).
|
||||||
|
* Fix NBA shared flag reuse (#5848). [Geza Lore]
|
||||||
|
* Fix multiple expression coverage issues (#5849 partial) (#5867) (#5870). [Todd Strader]
|
||||||
|
* Fix unresolved typedefs as parameters (#5850). [Eugene Feinberg, Brian Li]
|
||||||
|
* Fix removal of callbacks no longer in current list (#5851) (#5852). [Gilberto Abram]
|
||||||
|
* Fix segmentation fault on member compare (#5853).
|
||||||
|
* Fix recursive error on virtual interfaces (#5854). [Yilou Wang]
|
||||||
|
* Fix streaming of unpacked arrays concatenations (#5856). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix Windows paths in Perl (#5858) (#5860). [Tobias Jensen]
|
||||||
|
* Fix algorithm header portability in V3Os.cpp (for std::replace) (#5861). [William D. Jones]
|
||||||
|
* Fix `$fscanf` not returning -1 on EOF (#5881).
|
||||||
|
* Fix PGO profiling for multi-threaded hierarchical scenarios (#5888). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Fix V3Gate assertion on eliminated circular logic (#5889) (#5898). [Geza Lore]
|
||||||
|
* Fix process comparisons (#5896).
|
||||||
|
* Fix ccache with clang (#5899). [Geza Lore]
|
||||||
|
* Fix delayed assignment malformed LHS assertion (#5904).
|
||||||
|
* Fix segfault in fork synchronization (#5906). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix `new this` (#5909).
|
||||||
|
* Fix assignments with stream expressions and unpacked arrays (#5915). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix LATCH warning for automatic variables (#5918). [Yutetsu TAKATSUKASA]
|
||||||
|
* Fix %% on elaboration severity tasks (#5922). [Ethan Sifferman]
|
||||||
|
* Fix port default values with `--coverage-line` creating `0=0` (#5920). [Drew Ranck]
|
||||||
|
* Fix vlSelf error on fork repeats (#5927). [Drew Ranck]
|
||||||
|
* Fix missing C++ regeneration when Verilog files are updated (#5934). [Zhouyi Shen]
|
||||||
|
* Fix stream expressions (#5938). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix packed selection using over 32-bit index (#5957).
|
||||||
|
|
||||||
|
|
||||||
|
Verilator 5.034 2025-02-24
|
||||||
|
==========================
|
||||||
|
|
||||||
|
**Important:**
|
||||||
|
|
||||||
|
* This is likely the last version to support Ubuntu 20.04, which is at end-of-life.
|
||||||
|
* Add expression coverage (#4677) (#5719). [Todd Strader]
|
||||||
|
|
||||||
|
**Other:**
|
||||||
|
|
||||||
|
* Add `COVERIGN` warning, as a more specific UNSUPPORTED error.
|
||||||
|
* Add `--public-ignore` to ignore public metacomments (#5716). [Andrew Nolte]
|
||||||
|
* Add `--preproc-token-limit` (#5768). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Add lint error on importing package within a class (#5634) (#5679). [Nick Brereton]
|
||||||
|
* Add `--preproc-resolve` for modules in preprocessor output (#5789). [Kamil Rakoczy, Antmicro Ltd.]
|
||||||
|
* Support multidimensional array access via VPI (#2812) (#5573). [Krzysztof Starecki]
|
||||||
|
* Support nested classes (#4178) (#5778). [Kamil Rakoczy, Antmicro Ltd.]
|
||||||
|
* Support VPI array accessors (#5612). [Moubarak Jeje]
|
||||||
|
* Support unpacked structure constrained randomization (#5657) (#5759). [Yilou Wang]
|
||||||
|
* Support generated classes (#5665). [Shou-Li Hsu]
|
||||||
|
* Support constraints on associative array user-defined keys (#5671) (#5729). [Yilou Wang]
|
||||||
|
* Support `+incdir` with multiple directories.
|
||||||
|
* Support integer atom type ports in `--hierarchical` (#5748). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Support constrained random for arrays in structs (#5765) (#5802). [Yilou Wang]
|
||||||
|
* Support selects on arbitrary string expressions (#5773). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Support side effects of form 'variable[index_function()]++'.
|
||||||
|
* Improve hierarchical DPI wrapper scheduling performance (#2583) (#5734). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Improve VPI write errors (#5712). [Andrew Nolte]
|
||||||
|
* Improve `resetall support (#5728) (#5730). [Ethan Sifferman]
|
||||||
|
* Optimize labels as final `if` block statements (#5744).
|
||||||
|
* Optimize empty function definition bodies (#5750).
|
||||||
|
* Optimize splitting trigger computation and dump (#5798). [Geza Lore]
|
||||||
|
* Fix error message when call task as a function (#3089). [Matthew Ballance]
|
||||||
|
* Fix force VPI public signal visibility (#5225). [Frédéric Requin]
|
||||||
|
* Fix VPI iteration over hierarchy (#5314) (#5731). [Natan Kreimer]
|
||||||
|
* Fix constrained random for > 64-bit associative arrays (#5670) (#5682). [Yilou Wang]
|
||||||
|
* Fix mis-optimizing away `$urandom` (#5703). [Parker Schless]
|
||||||
|
* Fix packages with `--public-depth 1` (#5708). [Andrew Nolte]
|
||||||
|
* Fix V3Simulate constant reuse (#5709). [Geza Lore]
|
||||||
|
* Fix man pages what-is section (#5710). [Ahmed El-Mahmoudy]
|
||||||
|
* Fix pattern assignment to real inside struct (#5713).
|
||||||
|
* Fix %p format output for real inside struct (#5713).
|
||||||
|
* Fix segfault when only enum value referenced in package (#5714). [Dan Katz]
|
||||||
|
* Fix `BLKSEQ` on suspendable processes (#5722). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix vpiDefName issues with non-inlined scopes and dpi conflicts (#5732). [Andrew Nolte]
|
||||||
|
* Fix inlined expression with assignment under LHS of NBA (#5736) (#5740). [Geza Lore]
|
||||||
|
* Fix duplicate-named class variable equivalence (#5737).
|
||||||
|
* Fix `-j` ignored after `-f` (#5749). [Luca Colagrande]
|
||||||
|
* Fix handling forced assigns in V3Life (#5757). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Fix VFileContent reference count (#5769) (#5771). [Dave Sargeant]
|
||||||
|
* Fix ignoring joins in stringify in preprocessor (#5777). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix unpacked split_var (#5782) (#5785). [Yutetsu TAKATSUKASA]
|
||||||
|
* Fix time import error on time parameters (#5786). [Luca Colagrande]
|
||||||
|
* Fix dpi context functions (#5788). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix `$monitor` with dotted references (#5794). [Ahmed Elzeftawi]
|
||||||
|
* Fix parsing input wire with default and range (#5800). [RJ Cunningham]
|
||||||
|
* Fix matching language extension options including dots.
|
||||||
|
|
||||||
|
|
||||||
|
Verilator 5.032 2025-01-01
|
||||||
|
==========================
|
||||||
|
|
||||||
|
**Minor:**
|
||||||
|
|
||||||
|
* Support queue's assignment `push_back/push_front('{})` (#5585) (#5586). [Yilou Wang]
|
||||||
|
* Support basic constrained random for multi-dimensional dynamic array and queue (#5591). [Yilou Wang]
|
||||||
|
* Support vpiDefName (#3906) (#5572). [Krzysztof Starecki]
|
||||||
|
* Support parameter names in pattern initialization (#5593) (#5596). [Greg Davill]
|
||||||
|
* Support randomize size constraints with restrictions (#5582 partial) (#5611). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Support associative array basic constrained randomization (#5658) (#5670). [Yilou Wang]
|
||||||
|
* Support `default disable iff` and `$inferred_disable` (#4016). [Srinivasan Venkataramanan]
|
||||||
|
* Support `extern constraint` and `pure constraint`.
|
||||||
|
* Add `--no-std-waiver` and default reading of standard lint waivers file (#5607).
|
||||||
|
* Add `--no-std-package` as subset-alias of `--no-std` (#5607).
|
||||||
|
* Add `lint_off --contents` in configuration files (#5606).
|
||||||
|
* Add `--waiver-multiline` for context-sensitive `--waiver-output` (#5608).
|
||||||
|
* Add `--fno-inline-funcs` to disable function inlining.
|
||||||
|
* Add `--fno-slice` to disable array assignment slicing (#5644).
|
||||||
|
* Add error on illegal enum base type (#3010). [Iztok Jeras]
|
||||||
|
* Add error on `wait` with missing `.triggered` (#4457).
|
||||||
|
* Add error when improperly storing to parameter (#5147). [Gökçe Aydos]
|
||||||
|
* Add error on illegal `--prefix` etc. values (#5507). [Fabian Keßler]
|
||||||
|
* Add error on `--savable --timing` (#5690). [Narcis Rodas]
|
||||||
|
* Add coverage point hierarchy to coverage reports (#5575) (#5576). [Andrew Nolte]
|
||||||
|
* Add warning on global constraints (#5625). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Add default CMAKE_BUILD_TYPE (#5691) (#5692). [Anthony Moore]
|
||||||
|
* Add error on `solve before` or soft constraints of `randc` variable.
|
||||||
|
* Improve concatenation performance (#5598) (#5599) (#5602). [Geza Lore]
|
||||||
|
* Improve optimization of duplicate wide expressions (#5637). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Fix dotted reference in delay value (#2410).
|
||||||
|
* Fix `function fork...join_none` regression with unknown type (#4449).
|
||||||
|
* Fix public_module requiring a wire to become public (#4916). [Andrew Nolte]
|
||||||
|
* Fix --hierarchical on projects with dot-f dependency lists (#5199) (#5669). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Fix can't locate scope error in interface task delayed assignment (#5462) (#5568). [Zhou Shen]
|
||||||
|
* Fix BLKANDNBLK for for VARXREFs (#5569). [Todd Strader]
|
||||||
|
* Fix VPI error instead of fatal for vpi_get_value() on large signals (#5571). [Todd Strader]
|
||||||
|
* Fix --output-groups leftover files issue (#5574). [Todd Strader]
|
||||||
|
* Fix slow unsized number parsing (#5577). [Geza Lore]
|
||||||
|
* Fix negative assignment pattern keys (#5580). [Iztok Jeras]
|
||||||
|
* Fix duplicate scope identifiers decoding (#5584). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Fix `rand` dynamic arrays with null handles (#5594). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix NBAs to unpacked arrays of unpacked structs (#5603). [Geza Lore]
|
||||||
|
* Fix array of struct member overwrites on member update (#5605) (#5618) (#5628). [sumpster]
|
||||||
|
* Fix interface and struct pattern collision (#5639) (#5640). [Todd Strader]
|
||||||
|
* Fix mis-aliasing of instances with mailbox parameter types (#5632 partial).
|
||||||
|
* Fix error on duplicated declaration of gen block (#5663). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix wildcard equality and inside operators for non-fourstate expressions (#5673). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix `randomize..with` of parameterized classes (#5676). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix interface bracketed array parameter access (#5677) (#5678). [Todd Strader]
|
||||||
|
* Fix width extension of operands of `inside` operator (#5685). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix VPI + SYMRSVDWORD intersection (#5686). [Todd Strader]
|
||||||
|
* Fix verilator_gantt for hierarchically Verilated models (#5700). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
|
||||||
|
|
||||||
|
Verilator 5.030 2024-10-27
|
||||||
|
==========================
|
||||||
|
|
||||||
|
**Major:**
|
||||||
|
|
||||||
|
* Add `-output-groups` to build with concatenated .cpp files (#5257). [Mariusz Glebocki]
|
||||||
|
* Self-tests have been converted to Python, run `{test_name}.py` instead of `{test_name}.pl`.
|
||||||
|
|
||||||
|
**Minor:**
|
||||||
|
|
||||||
|
* Change .vlt config files to be read before .v files (#5185). [David Moberg]
|
||||||
|
* Change to use maximum for cover point aggregation (#5402). [Andrew Nolte]
|
||||||
|
* Change `--main` and `--binary` to use a TOP hierarchy name of "" (#5482).
|
||||||
|
* Change install of public executables into bindir instead of pkgdatadir (#5140) (#5544). [Geza Lore]
|
||||||
|
* Support IEEE-compliant intra-assign delays (#3711) (#5441). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Support `wor`, `trior`, `wand`, `triand` (#5386) (#5496). [Zhou Shen]
|
||||||
|
* Support unconstrained randomization for unions (#5395) (#5396). [Yilou Wang]
|
||||||
|
* Support basic constrained queue randomization (#5413). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support packed/unpacked and dynamic array unconstrained randomization (#5414) (#5415). [Yilou Wang]
|
||||||
|
* Support appending to queue via `[]` (#5421). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Support named event locals (#5422). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Support basic `dist` constraints (#5431). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support unpacked array constrained randomization (#5437) (#5489). [Yilou Wang]
|
||||||
|
* Support inside array constraints (#5448). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support DPI imports and exports with double underscores (#5481).
|
||||||
|
* Support ccache when compiling Verilated files with cmake.
|
||||||
|
* Support `local` and `protected` on `typedef` (#5460).
|
||||||
|
* Support unconstrained randomization for associative array and queue (#5515). [Yilou Wang]
|
||||||
|
* Support `rand` dynamic arrays of objects (#5557) (#5564). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Add error on misused genvar (#408). [Alex Solomatnikov]
|
||||||
|
* Add error on instances without parenthesis.
|
||||||
|
* Add Docker pre-commit hook (#5238) (#5452). [Chris Bachhuber]
|
||||||
|
* Add partial coverage symbol and branch data in lcov info files (#5388). [Andrew Nolte]
|
||||||
|
* Add method to check if there are VPI callbacks of the given type (#5399). [Kaleb Barrett]
|
||||||
|
* Remove warning on unsized numbers exceeding 32-bits.
|
||||||
|
* Improve Verilation thread pool (#5161). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Improve performance of V3VariableOrder with parallelism (#5406). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Improve parser error handling (#5493). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Improve process trigger performance (#5483). [Geza Lore]
|
||||||
|
* Fix suppression of WIDTH* warnings when immediately under a size cast (#3417).
|
||||||
|
* Fix `$fatal` to not be affected by `+verilator+error+limit` (#5135). [Gökçe Aydos]
|
||||||
|
* Fix equivalence checking when replacing type parameters (#5213) (#5255). [Han Qi]
|
||||||
|
* Fix display with multiple string formats (#5311). [Luiza de Melo]
|
||||||
|
* Fix performance of V3Trace when many activity blocks (#5372). [Deniz Güzel]
|
||||||
|
* Fix REALCVT warning on integral timescale conversions (#5378). [Liam Braun]
|
||||||
|
* Fix multidimensional function return value selects (#5382). [Gökçe Aydos]
|
||||||
|
* Fix internal error in out-of-range select (#5393) (#5443). [Geza Lore]
|
||||||
|
* Fix dot fallback finding wrong symbols (#5394). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Fix infinite recursion due to recursive functions/tasks (#5398). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix V3Randomize compile error on old GCC (#5403) (#5417). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix extra events in traces (#5405).
|
||||||
|
* Fix empty `foreach` in `if` in constraints (#5408). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix queue `[$-i]` select as reference argument (#5411). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix `pre`/`post_randomize` on `randomize() with` (#5412). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix capturing params in `randomize() with` (#5416) (#5418). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix `sformatf` internal error on initial automatics (#5423). [Todd Strader]
|
||||||
|
* Fix clearing trigger of events with no sensitivity trees (#5426). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Fix driving clocking block in reactive region (#5430). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix associative array next/prev/first/last mis-propagating constants (#5435). [Ethan Sifferman]
|
||||||
|
* Fix randomize treated as std::randomize in classes (#5436). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Fix `foreach` colliding index names (#5444). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Fix fault on defparam with UNSUPPORTED ignored (#5450). [Luiza de Melo]
|
||||||
|
* Fix class reference with pin that is a class reference (#5454).
|
||||||
|
* Fix not reporting class reference with extra parameters (#5467).
|
||||||
|
* Fix user-type parameter overlap (#5469). [Todd Strader]
|
||||||
|
* Fix tracing when name() is empty (#5470). [Sam Shahrestani]
|
||||||
|
* Fix timing mode not exiting on empty events (#5472).
|
||||||
|
* Fix coverage counts missing due to table optimization (#5473) (#5474). [Vito Gamberini]
|
||||||
|
* Fix `--binary` with .cpp PLI filenames under relative directory paths.
|
||||||
|
* Fix extra dot in coverage point hierarchy when using name()=''.
|
||||||
|
* Fix short-circuiting with associative array access (#5484). [Ethan Sifferman]
|
||||||
|
* Fix short-circuiting on method calls (#5486). [Ethan Sifferman]
|
||||||
|
* Fix exponential concatenate performance (#5488). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Fix V3Table trying to generate 'x' bits in the lookup table (#5491). [Geza Lore]
|
||||||
|
* Fix randomize with foreach constraints (#5492). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Fix explicit CMAKE_INSTALL_PREFIX usages (#5500). [Fabian Keßler]
|
||||||
|
* Fix configure inserting absolute paths for Python and Perl (#5504) (#5505). [Nathan Graybeal]
|
||||||
|
* Fix pattern initialization with typedef key (#5512). [Eugene Feinberg]
|
||||||
|
* Fix `-j` option without argument in hierarchical Verilation (#5514). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix `foreach` with 2-D queues and dynamic arrays (#5525) (#5529). [Yilou Wang]
|
||||||
|
* Fix struct array assignment (#5455) (#5537). [Yilou Wang]
|
||||||
|
* Fix copy constructor of classes that use std::process (#5528). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix foreach on associative array (#5530). [Yilou Wang]
|
||||||
|
* Fix multi-range indices assignment (#5534) (#5547). [Yilou Wang]
|
||||||
|
* Fix static function wrappers (#5536). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix assignments of concatenation to queues and dynamic arrays (#5540). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix container reduction methods (#5542). [Krzysztof Boroński]
|
||||||
|
* Fix complex user type problem with `--x-assign` (#5543). [Todd Strader]
|
||||||
|
* Fix long module names crashing string handling (#5546). [Filip Badáň]
|
||||||
|
* Fix array trace splitting (#5549). [Todd Strader]
|
||||||
|
* Fix queue element access (#5551). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix struct literal on pattern assignment (#5552) (#5559). [Todd Strader]
|
||||||
|
* Fix build on gcc when using the Spack wrapper (#5555). [Eric Müller]
|
||||||
|
* Fix enum name method (#5563). [Todd Strader]
|
||||||
|
* Fix `$countbits` in assert with non-tristates (#5566). [Shou-Li Hsu]
|
||||||
|
* Fix missing VlProcess handle in coroutines with splits (#5623) (#5650). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Fix imported array assignment literals (#5642) (#5648). [Todd Strader]
|
||||||
|
* Fix foreach mixed array (#5655) (#5656). [Yilou Wang]
|
||||||
|
|
||||||
|
|
||||||
|
Verilator 5.028 2024-08-21
|
||||||
|
==========================
|
||||||
|
|
||||||
|
**Minor:**
|
||||||
|
|
||||||
|
* Support state-dependent constraints (#5217). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support cross-module clocking variable access (#5184). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support inline constraints for class randomization methods (#5234). [Krzysztof Boroński]
|
||||||
|
* Support clocking blocks in virtual interfaces (#5235). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support `$assertcontrol` assertion_type (#5236). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Support conditional constraints (#5245). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support`--compiler-include` headers in user-supplied cpp files (#5271). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Support `rand_mode` (#5273). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Support `this.randomize with` (#5282). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support foreach constraints (#5302). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support `parameter type` in hierarchical blocks (#5309) (#5333). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Support assertcontrol directive type (#5310). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Support inline random variable control (#5317). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Support streaming operator on arrays and wide data (#5326). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support streams to/from arrays of wide data (#5334). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support `constraint_mode` (#5338). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Support constraining AstSel (#5344). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support default value on module input (#5358) (#5373). [Drew Ranck]
|
||||||
|
* Add `--compiler-include` for additional C++ includes (#5139) (#5202). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Add `--emit-accessors` (#5182) (#5227). [Ryan Ziegler]
|
||||||
|
* Add suggestions on misspelled PLI functions.
|
||||||
|
* Add warning on dist in constraints (#5264). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Add more `rand_mode` unsupported errors (#5329). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Add parsing but otherwise ignore std::randomize (#5354). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Add Verilated cc define when `--timing` used (#5383). [Kaleb Barrett]
|
||||||
|
* Improve emitted code to use a reference for VlSelf (#5254). [Yangyu Chen]
|
||||||
|
* Fix monitor block sensitivity items (#4040) (#4400) (#5294). [Udaya Raj Subedi]
|
||||||
|
* Fix fusing macro arguments to not ignore whitespace (#5061). [Tudor Timi]
|
||||||
|
* Fix optimized-out sensitivity trees with `--timing` (#5080) (#5349). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix classes/modules of case-similar names (#5109). [Arkadiusz Kozdra]
|
||||||
|
* Fix mis-removing $value$plusargs calls (#5127) (#5137). [Seth Pellegrino]
|
||||||
|
* Fix incorrect result of width mismatch (#5186) (#5189). [Yutetsu TAKATSUKASA]
|
||||||
|
* Fix compiler coroutine check (#5190) (#5300). [Ricardo Barbedo]
|
||||||
|
* Fix shortened module names when searching for files (#5196) (#5246). [Tim Hutt]
|
||||||
|
* Fix `--x-assign` to be independent from `+verilator+rand+reset` (#5214). [Andrew Nolte]
|
||||||
|
* Fix splitting if statements with impure conditions (#5219). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Fix unknown conversion on queues (#5220). [Alex Solomatnikov]
|
||||||
|
* Fix top-level unpacked structure resets (#5221).
|
||||||
|
* Fix concurrency for mailbox and semaphores (#5222). [Liam Braun]
|
||||||
|
* Fix forks capturing non-input ports in tasks (#5237) (#5343). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix toggle coverage aggregation on same line (#5248). [Krzysztof Obłonczek]
|
||||||
|
* Fix error on empty generate with -O0 (#5250).
|
||||||
|
* Fix unconstrained randomization of unpacked structs (#5252). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix inlining of variables driven from forced vars (#5259). [Geza Lore]
|
||||||
|
* Fix tracing with `--main-top-name -` (#5261). [Ethan Sifferman]
|
||||||
|
* Fix randomization when used with inheritance (#5268). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix inline constraints creating class random generator (#5280). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix WIDTHEXPAND on left shift of intuitive amount (#5284). [Greg Taylor]
|
||||||
|
* Fix elaborating foreach loops (#5285). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Fix initializing static array in dynamic arrays and queues (#5287). [Baruch Sterin]
|
||||||
|
* Fix static variable initializers in procedures (#5296). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Fix randomizing current object with `rand` class instance member (#5292). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix handling of rand fields not referenced in constraints (#5305). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix Python3 path discovery in make flows to avoid mixing system and user python interpreters (#5307). [Markus Krause]
|
||||||
|
* Fix make flows to pass PYTHON3 (like PERL) (#5307) (#5308). [Markus Krause]
|
||||||
|
* Fix assert on wide expression (#5319) (#5324). [Varun Koyyalagunta]
|
||||||
|
* Fix output clock variable overwriting signal (#5320) (#5347). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix stringify in nested preprocessor macros (#5323). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix $sformat with array arguments (#5330). [Abe Jordan]
|
||||||
|
* Fix -Wunused-but-set-variable clang warning (#5331). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Fix purity of functions with AstJumpBlock or AstStmtExpr (#5332). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
|
* Fix compilation error on unreachable disable fork / wait fork (#5339). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Fix missing type coercion in 'inside {array}' (#5340). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Fix +: and -: unpacked array slicing when array has nonzero low index (#5345) (#5387). [James Bailey]
|
||||||
|
* Fix tracing_{on,off} in the presence of non-inlined modules (#5346). [Geza Lore]
|
||||||
|
* Fix NBAs in suspendables (#5348). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix lint_off on Errors (#5351) (#5363). [Ethan Sifferman]
|
||||||
|
* Fix cache config file resolution performance (#5369). [Geza Lore]
|
||||||
|
* Fix capturing fields from superclass in `randomize() with` (#5389). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix virtual interface null checks (#5391). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix ==? and !=? with X values.
|
||||||
|
* Fix CPU time being zero.
|
||||||
|
* Fix inline function ref port persistence.
|
||||||
|
|
||||||
|
|
||||||
|
Verilator 5.026 2024-06-15
|
||||||
|
==========================
|
||||||
|
|
||||||
|
**Major:**
|
||||||
|
|
||||||
|
* Support constrained randomization with external solvers (#4947). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
|
||||||
|
**Minor:**
|
||||||
|
|
||||||
|
* Support `$psprintf` system function (#4314) (#5169). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support 2D dynamic array initialization (#4700) (#5122). [Valentin Atepalikhin]
|
||||||
|
* Support __en/__out signals on top level inout ports (#4812) (#4856). [Paul Wright]
|
||||||
|
* Support empty queue as dynarray default value (#5055). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support vpiInertialDelay (#5087). [Todd Strader]
|
||||||
|
* Support NBAs to arrays inside loops (#5092). [Geza Lore]
|
||||||
|
* Support parsing and otherwise ignoring inline constraints (#5126). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support `inout` clocking items (#5160). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Support StructSel in unpacked array assignments (#5176). [Geza Lore]
|
||||||
|
* Add error on zero width select (#5028).
|
||||||
|
* Add CITATION.cff (#5057) (#5058). [Gijs Burghoorn]
|
||||||
|
* Add VPI eval needed tracking (#5065). [Todd Strader]
|
||||||
|
* Add `--localize-max-size` option and optimization (#5072).
|
||||||
|
* Add parameterless assert control system tasks (#5010). [Bartłomiej Chmiel]
|
||||||
|
* Add traceCapable indication to model header (#5053). [Vito Gamberini]
|
||||||
|
* Add increasing of stack size when possible (#5071) (#5104). [Yinan Xu]
|
||||||
|
* Add assertion on reusing VerilatedContext (#5167).
|
||||||
|
* Add `--pins-sc-uint-bool` to force SystemC uint type (#5192). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Improve DFG regularization in cyclic graphs (#5142). [Geza Lore]
|
||||||
|
* Improve VerilatedVpiPutHolder storage requirements (#5144). [Kaleb Barrett]
|
||||||
|
* Fix coroutines without awaits to have a co_return (#4208) (#5175). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Fix missing flex include path variable (#4970) (#4971). [Christopher Taylor]
|
||||||
|
* Fix missing parameters with comma to be errors (#4979) (#5012). [Paul Swirhun]
|
||||||
|
* Fix 'experimental/coroutine' file not found on MacOS (#5030) (#5031) (#5151). [Paul Bowen-Huggett]
|
||||||
|
* Fix bound queue printing (#5032). [Aleksander Kiryk, Antmicro Ltd.]
|
||||||
|
* Fix consecutive zero-delays (#5038). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix attempted to destroy locked thread pool error (#5040). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Fix `$system` with string argument (#5042).
|
||||||
|
* Fix width extension on delays (#5043).
|
||||||
|
* Fix `$typename` on array.min and others (#5049). [Gökçe Aydos]
|
||||||
|
* Fix `make $(info)` which cannot be silenced (#5059). [Gökçe Aydos]
|
||||||
|
* Fix CMake builds to export VERILATOR_ROOT (#5063). [Michael Bikovitsky]
|
||||||
|
* Fix false ASSIGNIN on functions with explicit port map (#5069).
|
||||||
|
* Fix 4-state value support for $readmem (#5070) (#5078). [Ethan Sifferman]
|
||||||
|
* Fix DFG assertion with SystemC (#5076). [Geza Lore]
|
||||||
|
* Fix `$typename` string to be more standard (#5082) (#5083). [Andrew Nolte]
|
||||||
|
* Fix missed optimization in V3Delayed (#5089). [Geza Lore]
|
||||||
|
* Fix macro expansion in strings per 1800-2023 (#5094). [Geza Lore]
|
||||||
|
* Fix width extension of unpacked array select (#5095). [Varun Koyyalagunta]
|
||||||
|
* Fix MacOS missing <type_traits> header (#5096) (#5097). [Vito Gamberini]
|
||||||
|
* Fix assertion failure in V3Gate (#5101). [Yutetsu TAKATSUKASA]
|
||||||
|
* Fix aliases for forced port signals (#5105). [Geza Lore]
|
||||||
|
* Fix tracing interface functions (#5108). [Alex Solomatnikov]
|
||||||
|
* Fix method calls parsing in constraints (#5110). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Fix vpiInertialDelay for memories (#5113). [Todd Strader]
|
||||||
|
* Fix hierarchical compilation with nested -F (#5114) (#5124). [Alex Solomatnikov]
|
||||||
|
* Fix references to ports in forks (#5123). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
|
* Fix output C++ type error on change detect of I/O arrays (#5125) (#5131). [Pawel Jewstafjew]
|
||||||
|
* Fix x-valued parameters with `--x-assign unique` (#5129). [Ethan Sifferman]
|
||||||
|
* Fix overflow of string on VPI reads (#5145) (#5146). [Kaleb Barrett]
|
||||||
|
* Fix VerilatedVpiPutHolder class (#5156). [Kaleb Barrett]
|
||||||
|
* Fix extending out-of-range select (#5159) (#5164). [Geza Lore]
|
||||||
|
* Fix radix in width warnings (#5166). [Geza Lore]
|
||||||
|
* Fix SystemC BITS_PER_DIGIT in VL_ASSIGN_SBW (#5170). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Fix non-constant replication in concats (#5171). [Arkadiusz Kozdra, Antmicro Ltd.]
|
||||||
|
* Fix table optimization when applied on real data type (#5172) (#5173). [Arthur Rosa]
|
||||||
|
* Fix signed types emitted in hierarchical Verilation (#5178). [Bartłomiej Chmiel, Antmicro Ltd.]
|
||||||
|
* Fix DPI import of null C-string (#5179).
|
||||||
|
* Fix CMake installation missing verilated.mk (#5187) (#5188). [Philip Axer]
|
||||||
|
* Fix linking with pthreads on CMake (#5194). [Tim Hutt]
|
||||||
|
* Fix clang-17 coroutines configuration with -std=gnu++20 (#5200). [Gus Smith]
|
||||||
|
|
||||||
|
|
||||||
Verilator 5.024 2024-04-05
|
Verilator 5.024 2024-04-05
|
||||||
@@ -56,9 +594,10 @@ Verilator 5.024 2024-04-05
|
|||||||
* Fix preprocessor to respect strings in joins (#5007).
|
* Fix preprocessor to respect strings in joins (#5007).
|
||||||
* Fix tracing class parameters (#5014).
|
* Fix tracing class parameters (#5014).
|
||||||
* Fix memory leaks (#5016). [Geza Lore]
|
* Fix memory leaks (#5016). [Geza Lore]
|
||||||
* Fix $readmem with missing newline (#5019). [Josse Van Delm]
|
* Fix `$readmem` with missing newline (#5019). [Josse Van Delm]
|
||||||
* Fix internal error on missing pattern key (#5023).
|
* Fix internal error on missing pattern key (#5023).
|
||||||
* Fix tracing replicated hierarchical models (#5027).
|
* Fix tracing replicated hierarchical models (#5027).
|
||||||
|
* Fix false LIFETIME warning on `repeat` in `fork-join` (#5456).
|
||||||
|
|
||||||
|
|
||||||
Verilator 5.022 2024-02-24
|
Verilator 5.022 2024-02-24
|
||||||
@@ -92,7 +631,7 @@ Verilator 5.022 2024-02-24
|
|||||||
* Fix `vpi_get()` and `vpi_get64()` to return vpiUndefined on errors (#4795). [Marlon James]
|
* Fix `vpi_get()` and `vpi_get64()` to return vpiUndefined on errors (#4795). [Marlon James]
|
||||||
* Fix VPI parameter iteration (#4798). [Marlon James]
|
* Fix VPI parameter iteration (#4798). [Marlon James]
|
||||||
* Fix delays using wrong timeunit when modules inlined (#4806). [Paul Wright]
|
* Fix delays using wrong timeunit when modules inlined (#4806). [Paul Wright]
|
||||||
* Fix warnings in verilated_sc_trace.h for Clang. (#4807) (#4827). [Anthony Donlon]
|
* Fix warnings in verilated_sc_trace.h for Clang (#4807) (#4827). [Anthony Donlon]
|
||||||
* Fix null pointer dereference (#4810) (#4825). [Adrian Sampson]
|
* Fix null pointer dereference (#4810) (#4825). [Adrian Sampson]
|
||||||
* Fix compilation error on multi-inherited interface class usage (#4819).
|
* Fix compilation error on multi-inherited interface class usage (#4819).
|
||||||
* Fix maybe-uninitialized compiler warning (#4820) (#4822). [Larry Doolittle]
|
* Fix maybe-uninitialized compiler warning (#4820) (#4822). [Larry Doolittle]
|
||||||
@@ -170,7 +709,7 @@ Verilator 5.020 2024-01-01
|
|||||||
* Fix conflicted namespace for coroutines (#4701) (#4707). [Jinyan Xu]
|
* Fix conflicted namespace for coroutines (#4701) (#4707). [Jinyan Xu]
|
||||||
* Fix compilers seeing empty input due to file system races (#4708). [Flavien Solt]
|
* Fix compilers seeing empty input due to file system races (#4708). [Flavien Solt]
|
||||||
* Fix shift of > 32-bit number (#4719). [Flavien Solt]
|
* Fix shift of > 32-bit number (#4719). [Flavien Solt]
|
||||||
* Fix Windows include gates in filesystem Flush implementation. (#4720). [William D. Jones]
|
* Fix Windows include gates in filesystem Flush implementation (#4720). [William D. Jones]
|
||||||
* Fix power operator with wide numbers and constants (#4721) (#4763). [Flavien Solt]
|
* Fix power operator with wide numbers and constants (#4721) (#4763). [Flavien Solt]
|
||||||
* Fix parameter passing to ports (#4723). [Ryszard Rozak, Antmicro Ltd.]
|
* Fix parameter passing to ports (#4723). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
* Fix block names of nested do..while loops (#4728). [Ryszard Rozak, Antmicro Ltd.]
|
* Fix block names of nested do..while loops (#4728). [Ryszard Rozak, Antmicro Ltd.]
|
||||||
@@ -179,7 +718,8 @@ Verilator 5.020 2024-01-01
|
|||||||
* Fix $finish twice to no longer exit (#4757). [Tim Hutt]
|
* Fix $finish twice to no longer exit (#4757). [Tim Hutt]
|
||||||
* Fix dynamic NBA conditions (#4773). [Krzysztof Bieganski, Antmicro Ltd.]
|
* Fix dynamic NBA conditions (#4773). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
* Fix `V3Fork` stage to run only if `--timing` is set (#4778). [Krzysztof Bieganski, Antmicro Ltd.]
|
* Fix `V3Fork` stage to run only if `--timing` is set (#4778). [Krzysztof Bieganski, Antmicro Ltd.]
|
||||||
* Fix max multiply width and add runtime assertions if too small. (#4781)
|
* Fix max multiply width and add runtime assertions if too small (#4781).
|
||||||
|
* Fix select value too wide (#5148) (#5153). [Dercury]
|
||||||
|
|
||||||
|
|
||||||
Verilator 5.018 2023-10-30
|
Verilator 5.018 2023-10-30
|
||||||
@@ -396,7 +936,7 @@ Verilator 5.012 2023-06-13
|
|||||||
* Fix wide structure VL_TOSTRING_W generation (#4188) (#4189). [Aylon Chaim Porat]
|
* Fix wide structure VL_TOSTRING_W generation (#4188) (#4189). [Aylon Chaim Porat]
|
||||||
* Fix references to members of parameterized base classes (#4196). [Ryszard Rozak, Antmicro Ltd]
|
* Fix references to members of parameterized base classes (#4196). [Ryszard Rozak, Antmicro Ltd]
|
||||||
* Fix tracing undefined alignment (#4201) (#4288) [John Wehle]
|
* Fix tracing undefined alignment (#4201) (#4288) [John Wehle]
|
||||||
* Fix class specific same methods for AstVarScope, AstVar, and AstScope (#4203) (#4250). [John Wehle]
|
* Fix class-specific same methods for AstVarScope, AstVar, and AstScope (#4203) (#4250). [John Wehle]
|
||||||
* Fix dotted references in parameterized classes (#4206). [Ryszard Rozak, Antmicro Ltd]
|
* Fix dotted references in parameterized classes (#4206). [Ryszard Rozak, Antmicro Ltd]
|
||||||
* Fix bit selections under parameterized classes (#4210). [Ryszard Rozak, Antmicro Ltd]
|
* Fix bit selections under parameterized classes (#4210). [Ryszard Rozak, Antmicro Ltd]
|
||||||
* Fix duplicate std:: declaration with -I (#4215). [Harald Pretl]
|
* Fix duplicate std:: declaration with -I (#4215). [Harald Pretl]
|
||||||
@@ -552,7 +1092,7 @@ Verilator 5.006 2023-01-22
|
|||||||
**Minor:**
|
**Minor:**
|
||||||
|
|
||||||
* Support clocking blocks (#3674). [Krzysztof Bieganski, Antmicro Ltd]
|
* Support clocking blocks (#3674). [Krzysztof Bieganski, Antmicro Ltd]
|
||||||
* Support packed structs (#3802). [Aleksander Kiryk, Antmicro Ltd]
|
* Support unpacked structs (#3802). [Aleksander Kiryk, Antmicro Ltd]
|
||||||
* Support Windows-native builds using cmake (#3814). [Kritik Bhimani]
|
* Support Windows-native builds using cmake (#3814). [Kritik Bhimani]
|
||||||
* Support p format for UnpackArray (#3877). [Aleksander Kiryk, Antmicro Ltd]
|
* Support p format for UnpackArray (#3877). [Aleksander Kiryk, Antmicro Ltd]
|
||||||
* Support property calls without parenthesis (#3879) (#3893). [Ryszard Rozak, Antmicro Ltd]
|
* Support property calls without parenthesis (#3879) (#3893). [Ryszard Rozak, Antmicro Ltd]
|
||||||
@@ -843,7 +1383,7 @@ Verilator 4.218 2022-01-17
|
|||||||
|
|
||||||
* Support class static members (#2233).
|
* Support class static members (#2233).
|
||||||
* Support force/release (#2431) (#2593). [Shunyao CAD]
|
* Support force/release (#2431) (#2593). [Shunyao CAD]
|
||||||
* Add 'forceable' attribute to allow forcing from C++. (#3272). [Geza Lore, Shunyao CAD]
|
* Add 'forceable' attribute to allow forcing from C++ (#3272). [Geza Lore, Shunyao CAD]
|
||||||
* Support lower dimension looping in foreach loops (#3172). [Ehab Ibrahim]
|
* Support lower dimension looping in foreach loops (#3172). [Ehab Ibrahim]
|
||||||
* Support up to 64 bit enums for .next/.prev/.name (#3244). [Alexander Grobman]
|
* Support up to 64 bit enums for .next/.prev/.name (#3244). [Alexander Grobman]
|
||||||
* Reduce .rodata footprint of trace initialization (#3250). [Geza Lore, Shunyao CAD]
|
* Reduce .rodata footprint of trace initialization (#3250). [Geza Lore, Shunyao CAD]
|
||||||
@@ -1067,7 +1607,7 @@ Verilator 4.200 2021-03-12
|
|||||||
**Major:**
|
**Major:**
|
||||||
|
|
||||||
* Add simulation context (VerilatedContext) to allow multiple fully independent
|
* Add simulation context (VerilatedContext) to allow multiple fully independent
|
||||||
models to be in the same process. Please see the updated examples. (#2660)
|
models to be in the same process. Please see the updated examples (#2660).
|
||||||
* Add context->time() and context->timeInc() API calls, to set simulation time.
|
* Add context->time() and context->timeInc() API calls, to set simulation time.
|
||||||
These now are recommended in place of the legacy sc_time_stamp().
|
These now are recommended in place of the legacy sc_time_stamp().
|
||||||
|
|
||||||
@@ -1078,7 +1618,7 @@ Verilator 4.200 2021-03-12
|
|||||||
* Fix slice-assign overflow (#2803) (#2811). [David Turner]
|
* Fix slice-assign overflow (#2803) (#2811). [David Turner]
|
||||||
* Fix interface array connection ordering broken in v4.110 (#2827). [Don Owen]
|
* Fix interface array connection ordering broken in v4.110 (#2827). [Don Owen]
|
||||||
* Fix or-reduction on different scopes broken in 4.110 (#2828). [Yinan Xu]
|
* Fix or-reduction on different scopes broken in 4.110 (#2828). [Yinan Xu]
|
||||||
* Fix MSVC++ compile error. (#2831) (#2833) [Drew Taussig]
|
* Fix MSVC++ compile error (#2831) (#2833). [Drew Taussig]
|
||||||
|
|
||||||
|
|
||||||
Verilator 4.110 2021-02-25
|
Verilator 4.110 2021-02-25
|
||||||
@@ -1133,7 +1673,7 @@ Verilator 4.108 2021-01-10
|
|||||||
* Fix vpiLeftRange on little-endian memories (#2696). [Marlon James]
|
* Fix vpiLeftRange on little-endian memories (#2696). [Marlon James]
|
||||||
* Fix VPI module tree (#2704). [Todd Strader]
|
* Fix VPI module tree (#2704). [Todd Strader]
|
||||||
* Fix vpi_release_handle to be called implicitly per IEEE (#2706).
|
* Fix vpi_release_handle to be called implicitly per IEEE (#2706).
|
||||||
* Fix to allow inheriting 'VerilatedVcdFile' class. (#2720) [HyungKi Jeong]
|
* Fix to allow inheriting 'VerilatedVcdFile' class (#2720). [HyungKi Jeong]
|
||||||
* Fix $urandom_range maximum value (#2723). [Nandu Raj]
|
* Fix $urandom_range maximum value (#2723). [Nandu Raj]
|
||||||
* Fix tracing empty sc module (#2729).
|
* Fix tracing empty sc module (#2729).
|
||||||
* Fix generate for unrolling to be signed (#2730). [yanx21]
|
* Fix generate for unrolling to be signed (#2730). [yanx21]
|
||||||
@@ -1239,11 +1779,11 @@ Verilator 4.040 2020-08-15
|
|||||||
**Minor:**
|
**Minor:**
|
||||||
|
|
||||||
* Fix arrayed interfaces, broke in 4.038 (#2468). [Josh Redford]
|
* Fix arrayed interfaces, broke in 4.038 (#2468). [Josh Redford]
|
||||||
* Support $stable, $rose and $fell. (#2148) (#2501) [Peter Monsson]
|
* Support $stable, $rose and $fell (#2148) (#2501). [Peter Monsson]
|
||||||
* Support simple function localparams (#2461). [James Hanlon]
|
* Support simple function localparams (#2461). [James Hanlon]
|
||||||
* Miscellaneous parsing error changes towards UVM support.
|
* Miscellaneous parsing error changes towards UVM support.
|
||||||
* Fix arrayed interfaces (#2469). [Josh Redford]
|
* Fix arrayed interfaces (#2469). [Josh Redford]
|
||||||
* Fix protect lib VCS warning. (#2479) [Julien Margetts]
|
* Fix protect lib VCS warning (#2479). [Julien Margetts]
|
||||||
* Fix combining different-width parameters (#2484). [abirkmanis]
|
* Fix combining different-width parameters (#2484). [abirkmanis]
|
||||||
* Fix protect-lib without sequential logic (#2492). [Yutetsu TAKATSUKASA]
|
* Fix protect-lib without sequential logic (#2492). [Yutetsu TAKATSUKASA]
|
||||||
* Fix V3Unknown from running with flat XML output (#2494). [James Hanlon]
|
* Fix V3Unknown from running with flat XML output (#2494). [James Hanlon]
|
||||||
@@ -1299,16 +1839,16 @@ Verilator 4.036 2020-06-06
|
|||||||
waivers to the warnings emitted during a Verilator run.
|
waivers to the warnings emitted during a Verilator run.
|
||||||
* Support verilator_coverage --write-info for lcov HTML reports.
|
* Support verilator_coverage --write-info for lcov HTML reports.
|
||||||
* Line Coverage now tracks all statement lines, not just branch lines.
|
* Line Coverage now tracks all statement lines, not just branch lines.
|
||||||
* The run-time library is now compiled with -Os by default. (#2369, #2373)
|
* The run-time library is now compiled with -Os by default (#2369, #2373).
|
||||||
* Support multi channel descriptor I/O (#2190) [Stephen Henry]
|
* Support multi channel descriptor I/O (#2190) [Stephen Henry]
|
||||||
* Support $countbits. (#2287) [Yossi Nivin]
|
* Support $countbits (#2287). [Yossi Nivin]
|
||||||
* Support $isunbounded and parameter $. (#2104)
|
* Support $isunbounded and parameter $ (#2104).
|
||||||
* Support unpacked array .sum and .product.
|
* Support unpacked array .sum and .product.
|
||||||
* Support prefix/postfix increment/decrement. (#2223) [Maciej Sobkowski]
|
* Support prefix/postfix increment/decrement (#2223). [Maciej Sobkowski]
|
||||||
* Fix FST tracing of little bit endian signals. [Geza Lore]
|
* Fix FST tracing of little bit endian signals. [Geza Lore]
|
||||||
* Fix +: and -: on unpacked arrays. (#2304) [engr248]
|
* Fix +: and -: on unpacked arrays (#2304). [engr248]
|
||||||
* Fix $isunknown with constant Z's.
|
* Fix $isunknown with constant Z's.
|
||||||
* Fix queues and dynamic array wide ops. (#2352) [Vassilis Papaefstathiou]
|
* Fix queues and dynamic array wide ops (#2352). [Vassilis Papaefstathiou]
|
||||||
|
|
||||||
|
|
||||||
Verilator 4.034 2020-05-03
|
Verilator 4.034 2020-05-03
|
||||||
@@ -1443,6 +1983,7 @@ Verilator 4.026 2020-01-11
|
|||||||
* Fix expand optimization slowing --lint-only. Closes #2091. [Thomas Watts]
|
* Fix expand optimization slowing --lint-only. Closes #2091. [Thomas Watts]
|
||||||
* Fix %{number}s with strings. #2093. [agrobman]
|
* Fix %{number}s with strings. #2093. [agrobman]
|
||||||
* Fix shebang breaking some shells. Closes #2067. [zdave]
|
* Fix shebang breaking some shells. Closes #2067. [zdave]
|
||||||
|
* Fix errors on using string in incorrect format (#5240). [John Demme]
|
||||||
|
|
||||||
|
|
||||||
Verilator 4.024 2019-12-08
|
Verilator 4.024 2019-12-08
|
||||||
@@ -4620,7 +5161,7 @@ Verilator 0.0 1994-07-08
|
|||||||
Copyright
|
Copyright
|
||||||
=========
|
=========
|
||||||
|
|
||||||
Copyright 2001-2024 by Wilson Snyder. This program is free software; you
|
Copyright 2001-2025 by Wilson Snyder. This program is free software; you
|
||||||
can redistribute it and/or modify it under the terms of either the GNU
|
can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
|
|||||||
+208
-120
@@ -7,7 +7,7 @@
|
|||||||
#
|
#
|
||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
#
|
#
|
||||||
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you
|
# Copyright 2003-2025 by Wilson Snyder. This program is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
@@ -52,6 +52,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
MAKEINFO = makeinfo
|
MAKEINFO = makeinfo
|
||||||
POD2TEXT = pod2text
|
POD2TEXT = pod2text
|
||||||
|
PYTHON3 = @PYTHON3@
|
||||||
MKINSTALLDIRS = $(SHELL) $(srcdir)/src/mkinstalldirs
|
MKINSTALLDIRS = $(SHELL) $(srcdir)/src/mkinstalldirs
|
||||||
|
|
||||||
# Version (for docs/guide/conf.py)
|
# Version (for docs/guide/conf.py)
|
||||||
@@ -76,7 +77,7 @@ datadir = @datadir@
|
|||||||
# Directory in which to install documentation info files.
|
# Directory in which to install documentation info files.
|
||||||
infodir = @infodir@
|
infodir = @infodir@
|
||||||
|
|
||||||
# Directory in which to install package specific files
|
# Directory in which to install package-specific files
|
||||||
# Generally ${prefix}/share/verilator
|
# Generally ${prefix}/share/verilator
|
||||||
pkgdatadir = @pkgdatadir@
|
pkgdatadir = @pkgdatadir@
|
||||||
|
|
||||||
@@ -91,61 +92,66 @@ datarootdir = @datarootdir@
|
|||||||
CFG_WITH_CCWARN = @CFG_WITH_CCWARN@
|
CFG_WITH_CCWARN = @CFG_WITH_CCWARN@
|
||||||
CFG_WITH_DEFENV = @CFG_WITH_DEFENV@
|
CFG_WITH_DEFENV = @CFG_WITH_DEFENV@
|
||||||
CFG_WITH_LONGTESTS = @CFG_WITH_LONGTESTS@
|
CFG_WITH_LONGTESTS = @CFG_WITH_LONGTESTS@
|
||||||
|
CFG_WITH_SOLVER = @CFG_WITH_SOLVER@
|
||||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||||
|
|
||||||
#### End of system configuration section. ####
|
#### End of system configuration section. ####
|
||||||
######################################################################
|
######################################################################
|
||||||
|
# Main build targets
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
|
|
||||||
SHELL = /bin/sh
|
SHELL = /bin/sh
|
||||||
|
|
||||||
SUBDIRS = docs src test_regress \
|
SUBDIRS = docs src test_regress \
|
||||||
examples/cmake_hello_c \
|
examples/cmake_hello_c \
|
||||||
examples/cmake_hello_sc \
|
examples/cmake_hello_sc \
|
||||||
examples/cmake_tracing_c \
|
examples/cmake_tracing_c \
|
||||||
examples/cmake_tracing_sc \
|
examples/cmake_tracing_sc \
|
||||||
examples/cmake_protect_lib \
|
examples/cmake_protect_lib \
|
||||||
examples/make_hello_binary \
|
examples/make_hello_binary \
|
||||||
examples/make_hello_c \
|
examples/make_hello_c \
|
||||||
examples/make_hello_sc \
|
examples/make_hello_sc \
|
||||||
examples/make_tracing_c \
|
examples/make_tracing_c \
|
||||||
examples/make_tracing_sc \
|
examples/make_tracing_sc \
|
||||||
examples/make_protect_lib \
|
examples/make_protect_lib \
|
||||||
examples/json_py \
|
examples/json_py \
|
||||||
|
|
||||||
INFOS = verilator.html verilator.pdf
|
INFOS = verilator.html verilator.pdf
|
||||||
|
|
||||||
INFOS_OLD = README README.html README.pdf
|
INFOS_OLD = README README.html README.pdf
|
||||||
|
|
||||||
EXAMPLES_FIRST = \
|
EXAMPLES_FIRST = \
|
||||||
examples/make_hello_c \
|
examples/make_hello_c \
|
||||||
examples/make_hello_sc \
|
examples/make_hello_sc \
|
||||||
|
|
||||||
EXAMPLES = $(EXAMPLES_FIRST) $(filter-out $(EXAMPLES_FIRST), $(sort $(wildcard examples/*)))
|
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
|
# 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
|
# No verilator_ccache_report.1, verilator_difftree.1 as those are not bin/ installed
|
||||||
VL_INST_MAN_FILES = \
|
VL_INST_MAN_FILES = \
|
||||||
verilator.1 \
|
verilator.1 \
|
||||||
verilator_coverage.1 \
|
verilator_coverage.1 \
|
||||||
verilator_gantt.1 \
|
verilator_gantt.1 \
|
||||||
verilator_profcfunc.1 \
|
verilator_profcfunc.1 \
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
all: all_nomsg msg_test
|
all: all_nomsg msg_test
|
||||||
all_nomsg: verilator_exe $(VL_INST_MAN_FILES)
|
all_nomsg: verilator_exe $(VL_INST_MAN_FILES)
|
||||||
|
|
||||||
.PHONY:verilator_exe
|
.PHONY: verilator_exe
|
||||||
.PHONY:verilator_bin$(EXEEXT)
|
.PHONY: verilator_bin$(EXEEXT)
|
||||||
.PHONY:verilator_bin_dbg$(EXEEXT)
|
.PHONY: verilator_bin_dbg$(EXEEXT)
|
||||||
.PHONY:verilator_coverage_bin_dbg$(EXEEXT)
|
.PHONY: verilator_coverage_bin_dbg$(EXEEXT)
|
||||||
verilator_exe verilator_bin$(EXEEXT) verilator_bin_dbg$(EXEEXT) verilator_coverage_bin_dbg$(EXEEXT):
|
verilator_exe verilator_bin$(EXEEXT) verilator_bin_dbg$(EXEEXT) verilator_coverage_bin_dbg$(EXEEXT):
|
||||||
@echo ------------------------------------------------------------
|
@echo ------------------------------------------------------------
|
||||||
@echo "making verilator in src"
|
@echo "making verilator in src"
|
||||||
$(MAKE) -C src $(OBJCACHE_JOBS)
|
$(MAKE) -C src $(OBJCACHE_JOBS)
|
||||||
|
|
||||||
.PHONY:msg_test
|
######################################################################
|
||||||
|
# Tests
|
||||||
|
|
||||||
|
.PHONY: msg_test
|
||||||
msg_test: all_nomsg
|
msg_test: all_nomsg
|
||||||
@echo "Build complete!"
|
@echo "Build complete!"
|
||||||
@echo
|
@echo
|
||||||
@@ -155,7 +161,7 @@ msg_test: all_nomsg
|
|||||||
.PHONY: test
|
.PHONY: test
|
||||||
ifeq ($(CFG_WITH_LONGTESTS),yes) # Local... Else don't burden users
|
ifeq ($(CFG_WITH_LONGTESTS),yes) # Local... Else don't burden users
|
||||||
test: smoke-test test_regress
|
test: smoke-test test_regress
|
||||||
# examples is part of test_regress's test_regress/t/t_a2_examples.pl
|
# examples is part of test_regress's test_regress/t/t_a2_examples.py
|
||||||
# (because that allows it to run in parallel with other test_regress's)
|
# (because that allows it to run in parallel with other test_regress's)
|
||||||
else
|
else
|
||||||
test: smoke-test examples
|
test: smoke-test examples
|
||||||
@@ -167,8 +173,8 @@ endif
|
|||||||
@echo
|
@echo
|
||||||
|
|
||||||
smoke-test: all_nomsg
|
smoke-test: all_nomsg
|
||||||
test_regress/t/t_a1_first_cc.pl
|
test_regress/t/t_a1_first_cc.py
|
||||||
test_regress/t/t_a2_first_sc.pl
|
test_regress/t/t_a2_first_sc.py
|
||||||
|
|
||||||
test_regress: all_nomsg
|
test_regress: all_nomsg
|
||||||
$(MAKE) -C test_regress
|
$(MAKE) -C test_regress
|
||||||
@@ -182,8 +188,11 @@ examples: all_nomsg
|
|||||||
$(MAKE) -C $$p VERILATOR_ROOT=`pwd` || exit 10; \
|
$(MAKE) -C $$p VERILATOR_ROOT=`pwd` || exit 10; \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# Docs
|
||||||
|
|
||||||
.PHONY: docs
|
.PHONY: docs
|
||||||
docs: info
|
docs: info $(VL_INST_MAN_FILES)
|
||||||
|
|
||||||
info: $(INFOS)
|
info: $(INFOS)
|
||||||
|
|
||||||
@@ -192,7 +201,8 @@ verilator.1: ${srcdir}/bin/verilator
|
|||||||
verilator_coverage.1: ${srcdir}/bin/verilator_coverage
|
verilator_coverage.1: ${srcdir}/bin/verilator_coverage
|
||||||
pod2man $< $@
|
pod2man $< $@
|
||||||
%.1: ${srcdir}/bin/%
|
%.1: ${srcdir}/bin/%
|
||||||
help2man --no-info --no-discard-stderr --version-string=- $< -o $@
|
help2man --no-info --no-discard-stderr --version-string=- \
|
||||||
|
-n "$(shell $< --help | head -n 3 | tail -n 1)" $< -o $@
|
||||||
|
|
||||||
.PHONY: verilator.html
|
.PHONY: verilator.html
|
||||||
verilator.html:
|
verilator.html:
|
||||||
@@ -203,38 +213,60 @@ verilator.html:
|
|||||||
verilator.pdf: Makefile
|
verilator.pdf: Makefile
|
||||||
$(MAKE) -C docs verilator.pdf
|
$(MAKE) -C docs verilator.pdf
|
||||||
|
|
||||||
|
TAGFILES = ${srcdir}/*/*.cpp ${srcdir}/*/*.h ${srcdir}/*/*.in \
|
||||||
|
${srcdir}/*.in ${srcdir}/*.pod
|
||||||
|
|
||||||
|
TAGS: $(TAGFILES)
|
||||||
|
etags $(TAGFILES)
|
||||||
|
|
||||||
|
.PHONY: doxygen
|
||||||
|
|
||||||
|
doxygen:
|
||||||
|
$(MAKE) -C docs doxygen
|
||||||
|
|
||||||
|
.PHONY: spelling
|
||||||
|
spelling:
|
||||||
|
$(MAKE) -C docs spelling
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# Install
|
||||||
|
|
||||||
# Public executables intended to be invoked directly by the user
|
# Public executables intended to be invoked directly by the user
|
||||||
# Don't put wildcards in these variables, it might cause an uninstall of other stuff
|
# Don't put wildcards in these variables, it might cause an uninstall of other stuff
|
||||||
VL_INST_PUBLIC_SCRIPT_FILES = verilator \
|
VL_INST_PUBLIC_SCRIPT_FILES = \
|
||||||
verilator_coverage \
|
verilator \
|
||||||
verilator_gantt \
|
verilator_coverage \
|
||||||
verilator_profcfunc \
|
verilator_gantt \
|
||||||
|
verilator_profcfunc \
|
||||||
|
|
||||||
VL_INST_PUBLIC_BIN_FILES = verilator_bin$(EXEEXT) \
|
VL_INST_PUBLIC_BIN_FILES = \
|
||||||
verilator_bin_dbg$(EXEEXT) \
|
verilator_bin$(EXEEXT) \
|
||||||
verilator_coverage_bin_dbg$(EXEEXT) \
|
verilator_bin_dbg$(EXEEXT) \
|
||||||
|
verilator_coverage_bin_dbg$(EXEEXT) \
|
||||||
|
|
||||||
# Private executabels intended to be invoked by internals
|
# Private executabels intended to be invoked by internals
|
||||||
# Don't put wildcards in these variables, it might cause an uninstall of other stuff
|
# Don't put wildcards in these variables, it might cause an uninstall of other stuff
|
||||||
VL_INST_PRIVATE_SCRIPT_FILES = verilator_ccache_report \
|
VL_INST_PRIVATE_SCRIPT_FILES = \
|
||||||
verilator_includer \
|
verilator_ccache_report \
|
||||||
|
verilator_includer \
|
||||||
|
|
||||||
VL_INST_INC_BLDDIR_FILES = \
|
VL_INST_INC_BLDDIR_FILES = \
|
||||||
include/verilated_config.h \
|
include/verilated_config.h \
|
||||||
include/verilated.mk \
|
include/verilated.mk \
|
||||||
|
|
||||||
# Files under srcdir, instead of build time
|
# Files under srcdir, instead of build time
|
||||||
VL_INST_INC_SRCDIR_FILES = \
|
VL_INST_INC_SRCDIR_FILES = \
|
||||||
include/*.[chv]* \
|
include/*.[chv]* \
|
||||||
include/*.sv \
|
include/*.vlt \
|
||||||
include/gtkwave/*.[chv]* \
|
include/*.sv \
|
||||||
include/vltstd/*.[chv]* \
|
include/gtkwave/*.[chv]* \
|
||||||
|
include/vltstd/*.[chv]* \
|
||||||
|
|
||||||
VL_INST_DATA_SRCDIR_FILES = \
|
VL_INST_DATA_SRCDIR_FILES = \
|
||||||
examples/*/*.[chv]* \
|
examples/*/*.[chv]* \
|
||||||
examples/*/CMakeLists.txt \
|
examples/*/CMakeLists.txt \
|
||||||
examples/*/Makefile* \
|
examples/*/Makefile* \
|
||||||
examples/*/vl_* \
|
examples/*/vl_* \
|
||||||
|
|
||||||
mkbindirs:
|
mkbindirs:
|
||||||
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/bin
|
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/bin
|
||||||
@@ -243,11 +275,15 @@ mkbindirs:
|
|||||||
installbin: | mkbindirs
|
installbin: | mkbindirs
|
||||||
cd $(srcdir)/bin; \
|
cd $(srcdir)/bin; \
|
||||||
for p in $(VL_INST_PUBLIC_SCRIPT_FILES) ; do \
|
for p in $(VL_INST_PUBLIC_SCRIPT_FILES) ; do \
|
||||||
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(pkgdatadir)/bin/$$p; \
|
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \
|
||||||
done
|
done
|
||||||
|
perl -p -i -e 'use File::Spec;' \
|
||||||
|
-e' $$path = File::Spec->abs2rel("$(realpath $(DESTDIR)$(pkgdatadir))", "$(realpath $(DESTDIR)$(bindir))");' \
|
||||||
|
-e 's/my \$$verilator_pkgdatadir_relpath = .*/my \$$verilator_pkgdatadir_relpath = "$$path";/g' \
|
||||||
|
-- "$(DESTDIR)/$(bindir)/verilator"
|
||||||
cd bin; \
|
cd bin; \
|
||||||
for p in $(VL_INST_PUBLIC_BIN_FILES) ; do \
|
for p in $(VL_INST_PUBLIC_BIN_FILES) ; do \
|
||||||
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(pkgdatadir)/bin/$$p; \
|
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \
|
||||||
done
|
done
|
||||||
cd $(srcdir)/bin; \
|
cd $(srcdir)/bin; \
|
||||||
for p in $(VL_INST_PRIVATE_SCRIPT_FILES) ; do \
|
for p in $(VL_INST_PRIVATE_SCRIPT_FILES) ; do \
|
||||||
@@ -257,11 +293,11 @@ installbin: | mkbindirs
|
|||||||
installredirect: installbin | mkbindirs
|
installredirect: installbin | mkbindirs
|
||||||
cp ${srcdir}/bin/redirect ${srcdir}/bin/redirect.tmp
|
cp ${srcdir}/bin/redirect ${srcdir}/bin/redirect.tmp
|
||||||
perl -p -i -e 'use File::Spec;' \
|
perl -p -i -e 'use File::Spec;' \
|
||||||
-e' $$path = File::Spec->abs2rel("$(realpath $(DESTDIR)$(pkgdatadir)/bin)", "$(realpath $(DESTDIR)$(bindir))");' \
|
-e' $$path = File::Spec->abs2rel("$(realpath $(DESTDIR)$(bindir))", "$(realpath $(DESTDIR)$(pkgdatadir)/bin)");' \
|
||||||
-e 's/RELPATH.*/"$$path";/g' -- "${srcdir}/bin/redirect.tmp"
|
-e 's/RELPATH.*/"$$path";/g' -- "${srcdir}/bin/redirect.tmp"
|
||||||
cd $(srcdir)/bin; \
|
cd $(srcdir)/bin; \
|
||||||
for p in $(VL_INST_PUBLIC_SCRIPT_FILES) $(VL_INST_PUBLIC_BIN_FILES) ; do \
|
for p in $(VL_INST_PUBLIC_SCRIPT_FILES) $(VL_INST_PUBLIC_BIN_FILES) ; do \
|
||||||
$(INSTALL_PROGRAM) redirect.tmp $(DESTDIR)$(bindir)/$$p; \
|
$(INSTALL_PROGRAM) redirect.tmp $(DESTDIR)$(pkgdatadir)/bin/$$p; \
|
||||||
done
|
done
|
||||||
rm ${srcdir}/bin/redirect.tmp
|
rm ${srcdir}/bin/redirect.tmp
|
||||||
|
|
||||||
@@ -343,6 +379,19 @@ install-all: installbin installredirect installman installdata install-msg
|
|||||||
|
|
||||||
install-here: installman info
|
install-here: installman info
|
||||||
|
|
||||||
|
install-msg:
|
||||||
|
@echo
|
||||||
|
@echo "Installed binaries to $(DESTDIR)$(bindir)/verilator"
|
||||||
|
@echo "Installed man to $(DESTDIR)$(mandir)/man1"
|
||||||
|
@echo "Installed examples to $(DESTDIR)$(pkgdatadir)/examples"
|
||||||
|
@echo
|
||||||
|
@echo "For documentation see 'man verilator' or 'verilator --help'"
|
||||||
|
@echo "For forums and to report bugs see https://verilator.org"
|
||||||
|
@echo
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# Format/Lint
|
||||||
|
|
||||||
# Use --xml flag to see the cppcheck code to use for suppression
|
# Use --xml flag to see the cppcheck code to use for suppression
|
||||||
CPPCHECK1_CPP = $(wildcard $(srcdir)/include/*.cpp)
|
CPPCHECK1_CPP = $(wildcard $(srcdir)/include/*.cpp)
|
||||||
CPPCHECK2_CPP = $(wildcard $(srcdir)/examples/*/*.cpp)
|
CPPCHECK2_CPP = $(wildcard $(srcdir)/examples/*/*.cpp)
|
||||||
@@ -353,19 +402,22 @@ CPPCHECK6_CPP = $(wildcard $(srcdir)/src/V3[P-Z]*.cpp)
|
|||||||
CPPCHECK7_CPP = $(wildcard $(srcdir)/src/V3[L-R]*.cpp)
|
CPPCHECK7_CPP = $(wildcard $(srcdir)/src/V3[L-R]*.cpp)
|
||||||
CPPCHECK8_CPP = $(wildcard $(srcdir)/src/V3[S-Z]*.cpp)
|
CPPCHECK8_CPP = $(wildcard $(srcdir)/src/V3[S-Z]*.cpp)
|
||||||
CHECK_CPP = $(CPPCHECK1_CPP) $(CPPCHECK2_CPP) $(CPPCHECK3_CPP) $(CPPCHECK4_CPP) \
|
CHECK_CPP = $(CPPCHECK1_CPP) $(CPPCHECK2_CPP) $(CPPCHECK3_CPP) $(CPPCHECK4_CPP) \
|
||||||
$(CPPCHECK5_CPP) $(CPPCHECK6_CPP) $(CPPCHECK7_CPP) $(CPPCHECK8_CPP)
|
$(CPPCHECK5_CPP) $(CPPCHECK6_CPP) $(CPPCHECK7_CPP) $(CPPCHECK8_CPP)
|
||||||
CHECK_H = $(wildcard \
|
CHECK_H = $(wildcard \
|
||||||
$(srcdir)/include/*.h \
|
$(srcdir)/include/*.h \
|
||||||
$(srcdir)/src/*.h )
|
$(srcdir)/src/*.h )
|
||||||
CHECK_YL = $(wildcard \
|
CHECK_YL = $(wildcard \
|
||||||
$(srcdir)/src/*.y \
|
$(srcdir)/src/*.y \
|
||||||
$(srcdir)/src/*.l )
|
$(srcdir)/src/*.l )
|
||||||
CPPCHECK = src/cppcheck_filtered cppcheck
|
CPPCHECK = src/cppcheck_filtered cppcheck
|
||||||
CPPCHECK_FLAGS = --enable=all --inline-suppr \
|
CPPCHECK_FLAGS = --enable=all --inline-suppr \
|
||||||
--suppress=cstyleCast --suppress=useInitializationList \
|
--suppress=cstyleCast --suppress=ctunullpointer \
|
||||||
--suppress=nullPointer --suppress=nullPointerRedundantCheck --suppress=ctunullpointer \
|
--suppress=derefInvalidIteratorRedundantCheck \
|
||||||
--suppress=unusedFunction --suppress=unusedScopedObject \
|
--suppress=nullPointer --suppress=nullPointerRedundantCheck \
|
||||||
--suppress=useStlAlgorithm
|
--suppress=templateRecursion \
|
||||||
|
--suppress=unusedFunction --suppress=unusedScopedObject \
|
||||||
|
--suppress=useInitializationList --suppress=useStlAlgorithm \
|
||||||
|
|
||||||
CPPCHECK_FLAGS += --xml
|
CPPCHECK_FLAGS += --xml
|
||||||
CPPCHECK_DEP = $(subst .cpp,.cppcheck,$(CHECK_CPP))
|
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
|
CPPCHECK_INC = -I$(srcdir)/include -I$(srcdir)/include/gtkwave -I$(srcdir)/include/vltstd -I$(srcdir)/src/obj_dbg -I$(srcdir)/src
|
||||||
@@ -390,8 +442,8 @@ cppcheck-8:
|
|||||||
|
|
||||||
CLANGTIDY = clang-tidy
|
CLANGTIDY = clang-tidy
|
||||||
CLANGTIDY_FLAGS = -config='' \
|
CLANGTIDY_FLAGS = -config='' \
|
||||||
-header-filter='.*' \
|
-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' \
|
-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_DEP = $(subst .cpp,.cpp.tidy,$(CHECK_CPP))
|
||||||
CLANGTIDY_DEFS = -DVL_DEBUG=1 -DVL_CPPCHECK=1
|
CLANGTIDY_DEFS = -DVL_DEBUG=1 -DVL_CPPCHECK=1
|
||||||
@@ -410,81 +462,123 @@ analyzer-include:
|
|||||||
-rm -rf examples/*/obj*
|
-rm -rf examples/*/obj*
|
||||||
scan-build $(MAKE) -k examples
|
scan-build $(MAKE) -k examples
|
||||||
|
|
||||||
format: clang-format yapf format-pl-exec
|
format:
|
||||||
|
$(MAKE) -j 5 format-c format-cmake format-exec format-py
|
||||||
|
|
||||||
CLANGFORMAT = clang-format-14
|
CLANGFORMAT = clang-format-14
|
||||||
CLANGFORMAT_FLAGS = -i
|
CLANGFORMAT_FLAGS = -i
|
||||||
CLANGFORMAT_FILES = $(CHECK_CPP) $(CHECK_H) $(CHECK_YL) test_regress/t/*.c* test_regress/t/*.h
|
CLANGFORMAT_FILES = $(CHECK_CPP) $(CHECK_H) $(CHECK_YL) test_regress/t/*.c* test_regress/t/*.h
|
||||||
|
|
||||||
clang-format:
|
format-c clang-format:
|
||||||
@$(CLANGFORMAT) --version | egrep 14.0 > /dev/null \
|
@$(CLANGFORMAT) --version | egrep 14.0 > /dev/null \
|
||||||
|| echo "*** You are not using clang-format-14, indents may differ from master's ***"
|
|| echo "*** You are not using clang-format-14, indents may differ from master's ***"
|
||||||
$(CLANGFORMAT) $(CLANGFORMAT_FLAGS) $(CLANGFORMAT_FILES)
|
$(CLANGFORMAT) $(CLANGFORMAT_FLAGS) $(CLANGFORMAT_FILES)
|
||||||
|
|
||||||
PY_PROGRAMS = \
|
YAMLFIX = YAMLFIX_WHITELINES=1 YAMLFIX_LINE_LENGTH=130 YAMLFIX_preserve_quotes=true yamlfix
|
||||||
bin/verilator_ccache_report \
|
|
||||||
bin/verilator_difftree \
|
|
||||||
bin/verilator_gantt \
|
|
||||||
bin/verilator_includer \
|
|
||||||
bin/verilator_profcfunc \
|
|
||||||
examples/json_py/vl_file_copy \
|
|
||||||
examples/json_py/vl_hier_graph \
|
|
||||||
docs/guide/conf.py \
|
|
||||||
docs/bin/vl_sphinx_extract \
|
|
||||||
docs/bin/vl_sphinx_fix \
|
|
||||||
src/astgen \
|
|
||||||
src/bisonpre \
|
|
||||||
src/config_rev \
|
|
||||||
src/cppcheck_filtered \
|
|
||||||
src/flexfix \
|
|
||||||
src/vlcovgen \
|
|
||||||
src/.gdbinit.py \
|
|
||||||
test_regress/t/*.pf \
|
|
||||||
nodist/clang_check_attributes \
|
|
||||||
nodist/code_coverage \
|
|
||||||
nodist/dot_importer \
|
|
||||||
nodist/fuzzer/actual_fail \
|
|
||||||
nodist/fuzzer/generate_dictionary \
|
|
||||||
nodist/install_test \
|
|
||||||
|
|
||||||
|
yamlfix:
|
||||||
|
$(YAMLFIX) .
|
||||||
|
|
||||||
|
# CMake files
|
||||||
|
CMAKE_FILES = \
|
||||||
|
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 \
|
||||||
|
|
||||||
|
# Python files, subject to format but not lint
|
||||||
PY_FILES = \
|
PY_FILES = \
|
||||||
$(PY_PROGRAMS) \
|
$(PY_PROGRAMS) \
|
||||||
nodist/code_coverage.dat \
|
nodist/code_coverage.dat \
|
||||||
|
test_regress/t/*.py \
|
||||||
|
|
||||||
|
# Python files, test_regress tests
|
||||||
|
PY_TEST_FILES = test_regress/t/*.py
|
||||||
|
|
||||||
YAPF = yapf3
|
YAPF = yapf3
|
||||||
YAPF_FLAGS = -i
|
YAPF_FLAGS = -i --parallel
|
||||||
|
|
||||||
yapf:
|
format-py yapf:
|
||||||
$(YAPF) $(YAPF_FLAGS) $(PY_FILES)
|
$(YAPF) $(YAPF_FLAGS) $(PY_FILES)
|
||||||
|
|
||||||
|
GERSEMI = gersemi
|
||||||
|
GERSEMI_FLAGS = -i --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
|
||||||
|
|
||||||
PYLINT = pylint
|
PYLINT = pylint
|
||||||
PYLINT_FLAGS = --score=n --disable=R0801
|
PYLINT_FLAGS = --recursive=n --score=n --disable=R0801
|
||||||
|
PYLINT_TEST_FLAGS = $(PYLINT_FLAGS) --disable=C0103,C0114,C0116,C0209,C0411,C0413,C0301,R0801,R0912,R0915,R0916,R1702,W0511,W0621
|
||||||
|
|
||||||
RUFF = ruff
|
RUFF = ruff
|
||||||
RUFF_FLAGS = check --ignore=E402,E501,E701
|
RUFF_FLAGS = check --ignore=E402,E501,E701
|
||||||
|
|
||||||
# "make -k" so can see all tool result errors
|
# "make -k" so can see all tool result errors
|
||||||
lint-py:
|
lint-py:
|
||||||
$(MAKE) -k lint-py-pylint lint-py-ruff
|
$(MAKE) -k lint-py-pylint lint-py-pylint-tests lint-py-ruff
|
||||||
|
|
||||||
lint-py-pylint:
|
lint-py-pylint:
|
||||||
$(PYLINT) $(PYLINT_FLAGS) $(PY_PROGRAMS)
|
$(PYLINT) $(PYLINT_FLAGS) $(PY_PROGRAMS)
|
||||||
|
|
||||||
|
lint-py-pylint-tests:
|
||||||
|
$(PYLINT) $(PYLINT_TEST_FLAGS) $(PY_TEST_FILES) | $(PYTHON3) nodist/lint_py_test_filter
|
||||||
|
|
||||||
lint-py-ruff:
|
lint-py-ruff:
|
||||||
$(RUFF) $(RUFF_FLAGS) $(PY_PROGRAMS)
|
$(RUFF) $(RUFF_FLAGS) $(PY_PROGRAMS)
|
||||||
|
|
||||||
format-pl-exec:
|
format-exec:
|
||||||
-chmod a+x test_regress/t/*.pl
|
-chmod a+x test_regress/t/*.py
|
||||||
|
|
||||||
install-msg:
|
######################################################################
|
||||||
@echo
|
# Configure
|
||||||
@echo "Installed binaries to $(DESTDIR)$(bindir)/verilator"
|
|
||||||
@echo "Installed man to $(DESTDIR)$(mandir)/man1"
|
|
||||||
@echo "Installed examples to $(DESTDIR)$(pkgdatadir)/examples"
|
|
||||||
@echo
|
|
||||||
@echo "For documentation see 'man verilator' or 'verilator --help'"
|
|
||||||
@echo "For forums and to report bugs see https://verilator.org"
|
|
||||||
@echo
|
|
||||||
|
|
||||||
IN_WILD := ${srcdir}/*.in ${srcdir}/*/*.in
|
IN_WILD := ${srcdir}/*.in ${srcdir}/*/*.in
|
||||||
|
|
||||||
@@ -505,6 +599,9 @@ else
|
|||||||
autoconf
|
autoconf
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# Clean
|
||||||
|
|
||||||
maintainer-clean::
|
maintainer-clean::
|
||||||
@echo "This command is intended for maintainers to use;"
|
@echo "This command is intended for maintainers to use;"
|
||||||
@echo "rebuilding the deleted files requires autoconf."
|
@echo "rebuilding the deleted files requires autoconf."
|
||||||
@@ -524,6 +621,8 @@ clean mostlyclean distclean maintainer-clean::
|
|||||||
rm -f *.tex
|
rm -f *.tex
|
||||||
rm -rf examples/*/obj_dir* examples/*/logs
|
rm -rf examples/*/obj_dir* examples/*/logs
|
||||||
rm -rf test_*/obj_dir
|
rm -rf test_*/obj_dir
|
||||||
|
rm -rf src/*.tidy include/*.tidy examples/*/*.tidy
|
||||||
|
rm -rf .ruff_cache
|
||||||
rm -rf nodist/fuzzer/dictionary
|
rm -rf nodist/fuzzer/dictionary
|
||||||
rm -rf nodist/obj_dir
|
rm -rf nodist/obj_dir
|
||||||
rm -rf verilator.txt
|
rm -rf verilator.txt
|
||||||
@@ -535,17 +634,6 @@ distclean maintainer-clean::
|
|||||||
rm -f bin/verilator_bin* bin/verilator_coverage_bin*
|
rm -f bin/verilator_bin* bin/verilator_coverage_bin*
|
||||||
rm -f include/verilated.mk include/verilated_config.h
|
rm -f include/verilated.mk include/verilated_config.h
|
||||||
|
|
||||||
TAGFILES=${srcdir}/*/*.cpp ${srcdir}/*/*.h ${srcdir}/*/*.in \
|
|
||||||
${srcdir}/*.in ${srcdir}/*.pod
|
|
||||||
|
|
||||||
TAGS: $(TAGFILES)
|
|
||||||
etags $(TAGFILES)
|
|
||||||
|
|
||||||
.PHONY: doxygen
|
|
||||||
|
|
||||||
doxygen:
|
|
||||||
$(MAKE) -C docs doxygen
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Distributions
|
# Distributions
|
||||||
|
|
||||||
|
|||||||
+18
-19
@@ -1,22 +1,22 @@
|
|||||||
.. Github doesn't render images unless absolute URL
|
.. Github doesn't render images unless absolute URL
|
||||||
.. Do not know of a conditional tag, "only: github" nor "github display" works
|
.. Do not know of a conditional tag, "only: github" nor "github display" works
|
||||||
|
|
||||||
.. image:: https://img.shields.io/badge/Website-Verilator.org-181717.svg
|
|badge1| |badge2| |badge3| |badge4| |badge5| |badge7| |badge8|
|
||||||
|
|
||||||
|
.. |badge1| image:: https://img.shields.io/badge/Website-Verilator.org-181717.svg
|
||||||
:target: https://verilator.org
|
:target: https://verilator.org
|
||||||
.. image:: https://img.shields.io/badge/License-LGPL%20v3-blue.svg
|
.. |badge2| image:: https://img.shields.io/badge/License-LGPL%20v3-blue.svg
|
||||||
:target: https://www.gnu.org/licenses/lgpl-3.0
|
:target: https://www.gnu.org/licenses/lgpl-3.0
|
||||||
.. image:: https://img.shields.io/badge/License-Artistic%202.0-0298c3.svg
|
.. |badge3| image:: https://img.shields.io/badge/License-Artistic%202.0-0298c3.svg
|
||||||
:target: https://opensource.org/licenses/Artistic-2.0
|
:target: https://opensource.org/licenses/Artistic-2.0
|
||||||
.. image:: https://repology.org/badge/tiny-repos/verilator.svg?header=distro%20packages
|
.. |badge4| image:: https://repology.org/badge/tiny-repos/verilator.svg?header=distro%20packages
|
||||||
:target: https://repology.org/project/verilator/versions
|
:target: https://repology.org/project/verilator/versions
|
||||||
.. image:: https://img.shields.io/docker/pulls/verilator/verilator
|
.. |badge5| image:: https://img.shields.io/docker/pulls/verilator/verilator
|
||||||
:target: https://hub.docker.com/r/verilator/verilator
|
:target: https://hub.docker.com/r/verilator/verilator
|
||||||
.. image:: https://api.codacy.com/project/badge/Grade/fa78caa433c84a4ab9049c43e9debc6f
|
.. |badge7| image:: https://github.com/verilator/verilator/workflows/build/badge.svg
|
||||||
:target: https://www.codacy.com/gh/verilator/verilator
|
|
||||||
.. image:: https://codecov.io/gh/verilator/verilator/branch/master/graph/badge.svg
|
|
||||||
:target: https://codecov.io/gh/verilator/verilator
|
|
||||||
.. image:: https://github.com/verilator/verilator/workflows/build/badge.svg
|
|
||||||
:target: https://github.com/verilator/verilator/actions?query=workflow%3Abuild
|
:target: https://github.com/verilator/verilator/actions?query=workflow%3Abuild
|
||||||
|
.. |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
|
Welcome to Verilator
|
||||||
@@ -85,12 +85,11 @@ thread is about 100 times faster than interpreted Verilog simulators such
|
|||||||
as `Icarus Verilog`_. Another 2-10x speedup might be gained from
|
as `Icarus Verilog`_. Another 2-10x speedup might be gained from
|
||||||
multithreading (yielding 200-1000x total over interpreted simulators).
|
multithreading (yielding 200-1000x total over interpreted simulators).
|
||||||
|
|
||||||
Verilator has typically similar or better performance versus
|
Verilator has typically similar or better performance versus closed-source
|
||||||
closed-source Verilog simulators (e.g., Carbon Design Systems Carbonator,
|
Verilog simulators (e.g., Aldec Riviera-Pro, Cadence Incisive/NC-Verilog,
|
||||||
Modelsim/Questa, Cadence Incisive/NC-Verilog, Synopsys VCS, VTOC, and
|
Mentor ModelSim/Questa, Synopsys VCS, VTOC, and Pragmatic CVer/CVC). But,
|
||||||
Pragmatic CVer/CVC). But, Verilator is open-sourced, so you can spend on
|
Verilator is open-sourced, so you can spend on computes rather than
|
||||||
computes rather than licenses. Thus, Verilator gives you the best
|
licenses. Thus, Verilator gives you the best simulation cycles/dollar.
|
||||||
simulation cycles/dollar.
|
|
||||||
|
|
||||||
|
|
||||||
Installation & Documentation
|
Installation & Documentation
|
||||||
@@ -132,17 +131,17 @@ organizations; please see `Verilator Commercial Support
|
|||||||
Related Projects
|
Related Projects
|
||||||
================
|
================
|
||||||
|
|
||||||
- `GTKwave <http://gtkwave.sourceforge.net/>`_ - Waveform viewer for
|
- `GTKwave <https://gtkwave.sourceforge.net/>`_ - Waveform viewer for
|
||||||
Verilator traces.
|
Verilator traces.
|
||||||
|
|
||||||
- `Icarus Verilog`_ - Icarus is a full-featured interpreted Verilog
|
- `Icarus Verilog`_ - Icarus is a highly-featured interpreted Verilog
|
||||||
simulator. If Verilator does not support your needs, perhaps Icarus may.
|
simulator. If Verilator does not support your needs, perhaps Icarus may.
|
||||||
|
|
||||||
|
|
||||||
Open License
|
Open License
|
||||||
============
|
============
|
||||||
|
|
||||||
Verilator is Copyright 2003-2024 by Wilson Snyder. (Report bugs to
|
Verilator is Copyright 2003-2025 by Wilson Snyder. (Report bugs to
|
||||||
`Verilator Issues <https://verilator.org/issues>`_.)
|
`Verilator Issues <https://verilator.org/issues>`_.)
|
||||||
|
|
||||||
Verilator is free software; you can redistribute it and/or modify it under
|
Verilator is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env perl
|
#!/usr/bin/env perl
|
||||||
######################################################################
|
######################################################################
|
||||||
#
|
#
|
||||||
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you
|
# Copyright 2003-2025 by Wilson Snyder. This program is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
|
|||||||
+54
-32
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env perl
|
#!/usr/bin/env perl
|
||||||
######################################################################
|
######################################################################
|
||||||
#
|
#
|
||||||
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you
|
# Copyright 2003-2025 by Wilson Snyder. This program is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
@@ -69,7 +69,9 @@ if (! GetOptions(
|
|||||||
pod2usage(-exitstatus => 2, -verbose => 0);
|
pod2usage(-exitstatus => 2, -verbose => 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
my $verilator_root = realpath("$RealBin/..");
|
# WARNING: $verilator_pkgdatadir_relpath is substituted during Verilator 'make install'
|
||||||
|
my $verilator_pkgdatadir_relpath = "..";
|
||||||
|
my $verilator_root = realpath("$RealBin/$verilator_pkgdatadir_relpath");
|
||||||
if (defined $ENV{VERILATOR_ROOT}) {
|
if (defined $ENV{VERILATOR_ROOT}) {
|
||||||
if ((!-d $ENV{VERILATOR_ROOT}) || $verilator_root ne realpath($ENV{VERILATOR_ROOT})) {
|
if ((!-d $ENV{VERILATOR_ROOT}) || $verilator_root ne realpath($ENV{VERILATOR_ROOT})) {
|
||||||
warn "%Error: verilator: VERILATOR_ROOT is set to inconsistent path. Suggest leaving it unset.\n";
|
warn "%Error: verilator: VERILATOR_ROOT is set to inconsistent path. Suggest leaving it unset.\n";
|
||||||
@@ -128,7 +130,7 @@ if ($opt_gdb) {
|
|||||||
} elsif ($opt_valgrind) {
|
} elsif ($opt_valgrind) {
|
||||||
# Run under valgrind
|
# Run under valgrind
|
||||||
my $valgrind_bin = ($ENV{VERILATOR_VALGRIND} || "valgrind --error-exitcode=1 --max-stackframe=2815880"
|
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
|
# if you get warnings. See: https://valgrind.org/docs/manual/manual-core.html#opt.max-stackframe
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -254,7 +256,7 @@ sub sh_escape {
|
|||||||
# This is similar to quotemeta() but less aggressive.
|
# This is similar to quotemeta() but less aggressive.
|
||||||
# There's no need to escape hyphens, periods, or forward slashes
|
# There's no need to escape hyphens, periods, or forward slashes
|
||||||
# for the shell as these have no special meaning to the shell.
|
# for the shell as these have no special meaning to the shell.
|
||||||
$arg =~ s/([^0-9a-zA-Z_\-\+\=\.\/])/\\$1/g;
|
$arg =~ s/([^0-9a-zA-Z_\-\+\=\.\/:])/\\$1/g;
|
||||||
return $arg;
|
return $arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,8 +269,7 @@ __END__
|
|||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
Verilator - Translate and simulate SystemVerilog code using C++/SystemC
|
Verilator - Lint, compile and simulate SystemVerilog code using C++/SystemC
|
||||||
|
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
@@ -310,8 +311,8 @@ detailed descriptions of these arguments.
|
|||||||
+1800-2012ext+<ext> Use SystemVerilog 2012 with file extension <ext>
|
+1800-2012ext+<ext> Use SystemVerilog 2012 with file extension <ext>
|
||||||
+1800-2017ext+<ext> Use SystemVerilog 2017 with file extension <ext>
|
+1800-2017ext+<ext> Use SystemVerilog 2017 with file extension <ext>
|
||||||
+1800-2023ext+<ext> Use SystemVerilog 2023 with file extension <ext>
|
+1800-2023ext+<ext> Use SystemVerilog 2023 with file extension <ext>
|
||||||
--assert Enable all assertions
|
--no-assert Disable all assertions
|
||||||
--assert-case Enable unique/unique0/priority case related checks
|
--no-assert-case Disable unique/unique0/priority-case assertions
|
||||||
--autoflush Flush streams after all $displays
|
--autoflush Flush streams after all $displays
|
||||||
--bbox-sys Blackbox unknown $system calls
|
--bbox-sys Blackbox unknown $system calls
|
||||||
--bbox-unsup Blackbox unsupported language features
|
--bbox-unsup Blackbox unsupported language features
|
||||||
@@ -324,8 +325,11 @@ detailed descriptions of these arguments.
|
|||||||
--clk <signal-name> Mark specified signal as clock
|
--clk <signal-name> Mark specified signal as clock
|
||||||
--no-clk <signal-name> Prevent marking specified signal as clock
|
--no-clk <signal-name> Prevent marking specified signal as clock
|
||||||
--compiler <compiler-name> Tune for specified C++ compiler
|
--compiler <compiler-name> Tune for specified C++ compiler
|
||||||
|
--compiler-include Include additional header in the precompiled one
|
||||||
--converge-limit <loops> Tune convergence settle time
|
--converge-limit <loops> Tune convergence settle time
|
||||||
--coverage Enable all coverage
|
--coverage Enable all coverage
|
||||||
|
--coverage-expr Enable expression coverage
|
||||||
|
--coverage-expr-max <value> Maximum permutations allowed for an expression
|
||||||
--coverage-line Enable line coverage
|
--coverage-line Enable line coverage
|
||||||
--coverage-max-width <width> Maximum array depth for coverage
|
--coverage-max-width <width> Maximum array depth for coverage
|
||||||
--coverage-toggle Enable toggle coverage
|
--coverage-toggle Enable toggle coverage
|
||||||
@@ -337,11 +341,14 @@ detailed descriptions of these arguments.
|
|||||||
--no-debug-leak Disable leaking memory in --debug mode
|
--no-debug-leak Disable leaking memory in --debug mode
|
||||||
--debugi <level> Enable debugging at a specified level
|
--debugi <level> Enable debugging at a specified level
|
||||||
--debugi-<srcfile> <level> Enable debugging a source file at a level
|
--debugi-<srcfile> <level> Enable debugging a source file at a level
|
||||||
--decorations <level> Set output comment and spacing level
|
|
||||||
--no-decoration Disable comments and lower spacing level
|
--no-decoration Disable comments and lower spacing level
|
||||||
|
--decorations <level> Set output comment and spacing level
|
||||||
--default-language <lang> Default language to parse
|
--default-language <lang> Default language to parse
|
||||||
+define+<var>=<value> Set preprocessor define
|
+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
|
--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-defines Show preprocessor defines with -E
|
||||||
--dump-dfg Enable dumping DfgGraphs to .dot files
|
--dump-dfg Enable dumping DfgGraphs to .dot files
|
||||||
--dump-graph Enable dumping V3Graphs to .dot files
|
--dump-graph Enable dumping V3Graphs to .dot files
|
||||||
@@ -349,13 +356,13 @@ detailed descriptions of these arguments.
|
|||||||
--dump-tree-addrids Use short identifiers instead of addresses
|
--dump-tree-addrids Use short identifiers instead of addresses
|
||||||
--dump-tree-dot Enable dumping Ast .tree.dot debug files
|
--dump-tree-dot Enable dumping Ast .tree.dot debug files
|
||||||
--dump-tree-json Enable dumping Ast .tree.json files and .tree.meta.json file
|
--dump-tree-json Enable dumping Ast .tree.json files and .tree.meta.json file
|
||||||
--dump-<srcfile> Enable dumping everything in source file
|
--dumpi-<srcfile> <level> Enable dumping everything in source file at level
|
||||||
--dumpi-dfg <level> Enable dumping DfgGraphs to .dot files at level
|
--dumpi-dfg <level> Enable dumping DfgGraphs to .dot files at level
|
||||||
--dumpi-graph <level> Enable dumping V3Graphs to .dot files at level
|
--dumpi-graph <level> Enable dumping V3Graphs to .dot files at level
|
||||||
--dumpi-tree <level> Enable dumping Ast .tree files at level
|
--dumpi-tree <level> Enable dumping Ast .tree files at level
|
||||||
--dumpi-tree-json <level> Enable dumping Ast .tree.json files at level
|
--dumpi-tree-json <level> Enable dumping Ast .tree.json files at level
|
||||||
--dumpi-<srcfile> <level> Enable dumping everything in source file at level
|
|
||||||
-E Preprocess, but do not compile
|
-E Preprocess, but do not compile
|
||||||
|
--emit-accessors Emit getter and setter methods for model top class
|
||||||
--error-limit <value> Abort after this number of errors
|
--error-limit <value> Abort after this number of errors
|
||||||
--exe Link to create executable
|
--exe Link to create executable
|
||||||
--expand-limit <value> Set expand optimization limit
|
--expand-limit <value> Set expand optimization limit
|
||||||
@@ -371,48 +378,61 @@ detailed descriptions of these arguments.
|
|||||||
--gdb Run Verilator under GDB interactively
|
--gdb Run Verilator under GDB interactively
|
||||||
--gdbbt Run Verilator under GDB for backtrace
|
--gdbbt Run Verilator under GDB for backtrace
|
||||||
--generate-key Create random key for --protect-key
|
--generate-key Create random key for --protect-key
|
||||||
--getenv <var> Get environment variable with defaults
|
|
||||||
--get-supported <feature> Get if feature is supported
|
--get-supported <feature> Get if feature is supported
|
||||||
|
--getenv <var> Get environment variable with defaults
|
||||||
--help Show this help
|
--help Show this help
|
||||||
--hierarchical Enable hierarchical Verilation
|
--hierarchical Enable hierarchical Verilation
|
||||||
|
--hierarchical-params-file <name> Internal option that specifies parameters file for hier blocks
|
||||||
|
--hierarchical-threads <threads> Number of threads for hierarchical scheduling
|
||||||
-I<dir> Directory to search for includes
|
-I<dir> Directory to search for includes
|
||||||
--if-depth <value> Tune IFDEPTH warning
|
--if-depth <value> Tune IFDEPTH warning
|
||||||
+incdir+<dir> Directory to search for includes
|
+incdir+<dir> Directory to search for includes
|
||||||
--inline-mult <value> Tune module inlining
|
--inline-mult <value> Tune module inlining
|
||||||
--instr-count-dpi <value> Assumed dynamic instruction count of DPI imports
|
--instr-count-dpi <value> Assumed dynamic instruction count of DPI imports
|
||||||
-j <jobs> Parallelism for --build-jobs/--verilate-jobs
|
-j <jobs> Parallelism for --build-jobs/--verilate-jobs
|
||||||
|
--no-json-edit-nums Don't dump editNum in .tree.json files
|
||||||
|
--no-json-ids Don't use short identifiers instead of addresses/paths in .tree.json
|
||||||
|
--json-only Create JSON parser output (.tree.json and .meta.json)
|
||||||
|
--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
|
--l2-name <value> Verilog scope name of the top module
|
||||||
--language <lang> Default language standard to parse
|
--language <lang> Default language standard to parse
|
||||||
-LDFLAGS <flags> Linker pre-object arguments for makefile
|
-LDFLAGS <flags> Linker pre-object arguments for makefile
|
||||||
--lib-create <name> Create a DPI library
|
--lib-create <name> Create a DPI library
|
||||||
+libext+<ext>+[ext]... Extensions for finding modules
|
+libext+<ext>+[ext]... Extensions for finding modules
|
||||||
--lint-only Lint, but do not make output
|
--lint-only Lint, but do not make output
|
||||||
--make <build-tool> Generate scripts for specified build tool
|
--localize-max-size <value> Tune localize optimization variable size
|
||||||
-MAKEFLAGS <flags> Arguments to pass to make during --build
|
|
||||||
--main Generate C++ main() file
|
--main Generate C++ main() file
|
||||||
--main-top-name Specify top name passed to Verilated model in generated C++ main
|
--main-top-name Specify top name passed to Verilated model in generated C++ main
|
||||||
|
--make <build-tool> Generate scripts for specified build tool
|
||||||
|
-MAKEFLAGS <flags> Arguments to pass to make during --build
|
||||||
--max-num-width <value> Maximum number width (default: 64K)
|
--max-num-width <value> Maximum number width (default: 64K)
|
||||||
--Mdir <directory> Name of output object directory
|
--Mdir <directory> Name of output object directory
|
||||||
--MMD Create .d dependency files
|
--MMD Create .d dependency files
|
||||||
--mod-prefix <topname> Name to prepend to lower classes
|
--mod-prefix <topname> Name to prepend to lower classes
|
||||||
--MP Create phony dependency targets
|
--MP Create phony dependency targets
|
||||||
+notimingchecks Ignored
|
+notimingchecks Ignored
|
||||||
|
-o <executable> Name of final executable
|
||||||
-O0 Disable optimizations
|
-O0 Disable optimizations
|
||||||
-O3 High-performance optimizations
|
-O3 High-performance optimizations
|
||||||
-O<optimization-letter> Selectable optimizations
|
-O<optimization-letter> Selectable optimizations
|
||||||
-o <executable> Name of final executable
|
--output-groups <numfiles> Group .cpp files into larger ones
|
||||||
--output-split <statements> Split .cpp files into pieces
|
--output-split <statements> Split .cpp files into pieces
|
||||||
--output-split-cfuncs <statements> Split model functions
|
--output-split-cfuncs <statements> Split model functions
|
||||||
--output-split-ctrace <statements> Split tracing functions
|
--output-split-ctrace <statements> Split tracing functions
|
||||||
-P Disable line numbers and blanks with -E
|
-P Disable line numbers and blanks with -E
|
||||||
--pins-bv <bits> Specify types for top-level ports
|
--pins-bv <bits> Specify types for top-level ports
|
||||||
|
--pins-inout-enables Specify that __en and __out signals be created for inouts
|
||||||
--pins-sc-biguint Specify types for top-level ports
|
--pins-sc-biguint Specify types for top-level ports
|
||||||
--pins-sc-uint Specify types for top-level ports
|
--pins-sc-uint Specify types for top-level ports
|
||||||
|
--pins-sc-uint-bool Specify types for top-level ports
|
||||||
--pins-uint8 Specify types for top-level ports
|
--pins-uint8 Specify types for top-level ports
|
||||||
--no-pins64 Don't use uint64_t's for 33-64 bit sigs
|
--no-pins64 Don't use uint64_t's for 33-64 bit sigs
|
||||||
--pipe-filter <command> Filter all input through a script
|
--pipe-filter <command> Filter all input through a script
|
||||||
--pp-comments Show preprocessor comments with -E
|
--pp-comments Show preprocessor comments with -E
|
||||||
--prefix <topname> Name of top-level class
|
--prefix <topname> Name of top-level class
|
||||||
|
--preproc-resolve Include all found modules in the output with -E
|
||||||
|
--preproc-token-limit Maximum tokens on a line allowed by preprocessor
|
||||||
--private Debugging; see docs
|
--private Debugging; see docs
|
||||||
--prof-c Compile C++ code with profiling
|
--prof-c Compile C++ code with profiling
|
||||||
--prof-cfuncs Name functions for profiling
|
--prof-cfuncs Name functions for profiling
|
||||||
@@ -423,14 +443,15 @@ detailed descriptions of these arguments.
|
|||||||
--protect-lib <name> Create a DPI protected library
|
--protect-lib <name> Create a DPI protected library
|
||||||
--public Mark signals as public; see docs
|
--public Mark signals as public; see docs
|
||||||
--public-depth <level> Mark public to specified module depth
|
--public-depth <level> Mark public to specified module depth
|
||||||
--public-params Mark all parameters as public_flat
|
|
||||||
--public-flat-rw Mark all variables, etc as public_flat_rw
|
--public-flat-rw Mark all variables, etc as public_flat_rw
|
||||||
|
--public-ignore Ignore all public comment markings
|
||||||
|
--public-params Mark all parameters as public_flat
|
||||||
-pvalue+<name>=<value> Overwrite toplevel parameter
|
-pvalue+<name>=<value> Overwrite toplevel parameter
|
||||||
--quiet Minimize additional printing
|
--quiet Minimize additional printing
|
||||||
--quiet-exit Don't print the command on failure
|
--quiet-exit Don't print the command on failure
|
||||||
--quiet-stats Don't print statistics
|
--quiet-stats Don't print statistics
|
||||||
--relative-includes Resolve includes relative to current file
|
--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
|
--report-unoptflat Extra diagnostics for UNOPTFLAT
|
||||||
--rr Run Verilator and record with rr
|
--rr Run Verilator and record with rr
|
||||||
--runtime-debug Enable model runtime debugging
|
--runtime-debug Enable model runtime debugging
|
||||||
@@ -439,7 +460,9 @@ detailed descriptions of these arguments.
|
|||||||
--no-skip-identical Disable skipping identical output
|
--no-skip-identical Disable skipping identical output
|
||||||
--stats Create statistics file
|
--stats Create statistics file
|
||||||
--stats-vars Provide statistics on variables
|
--stats-vars Provide statistics on variables
|
||||||
--no-std Prevent parsing standard library
|
--no-std Prevent loading standard files
|
||||||
|
--no-std-package Prevent parsing standard package
|
||||||
|
--no-std-waiver Prevent parsing standard lint waivers
|
||||||
--no-stop-fail Do not call $stop when assertion fails
|
--no-stop-fail Do not call $stop when assertion fails
|
||||||
--structs-packed Convert all unpacked structures to packed structures
|
--structs-packed Convert all unpacked structures to packed structures
|
||||||
-sv Enable SystemVerilog parsing
|
-sv Enable SystemVerilog parsing
|
||||||
@@ -447,23 +470,25 @@ detailed descriptions of these arguments.
|
|||||||
--threads <threads> Enable multithreading
|
--threads <threads> Enable multithreading
|
||||||
--threads-dpi <mode> Enable multithreaded DPI
|
--threads-dpi <mode> Enable multithreaded DPI
|
||||||
--threads-max-mtasks <mtasks> Tune maximum mtask partitioning
|
--threads-max-mtasks <mtasks> Tune maximum mtask partitioning
|
||||||
--timing Enable timing support
|
|
||||||
--no-timing Disable timing support
|
|
||||||
--timescale <timescale> Sets default timescale
|
--timescale <timescale> Sets default timescale
|
||||||
--timescale-override <timescale> Overrides all timescales
|
--timescale-override <timescale> Overrides all timescales
|
||||||
|
--timing Enable timing support
|
||||||
|
--no-timing Disable timing support
|
||||||
--top <topname> Alias of --top-module
|
--top <topname> Alias of --top-module
|
||||||
--top-module <topname> Name of top-level input module
|
--top-module <topname> Name of top-level input module
|
||||||
--trace Enable waveform creation
|
--trace Enable VCD waveform creation
|
||||||
--trace-coverage Enable tracing of coverage
|
--trace-coverage Enable tracing of coverage
|
||||||
--trace-depth <levels> Depth of tracing
|
--trace-depth <levels> Depth of tracing
|
||||||
--trace-fst Enable FST waveform creation
|
--trace-fst Enable FST waveform creation
|
||||||
--trace-max-array <depth> Maximum bit width for tracing
|
--trace-max-array <depth> Maximum array depth for tracing
|
||||||
--trace-max-width <width> Maximum array depth for tracing
|
--trace-max-width <width> Maximum bit width for tracing
|
||||||
--trace-params Enable tracing of parameters
|
--trace-params Enable tracing of parameters
|
||||||
|
--trace-saif Enable SAIF file creation
|
||||||
--trace-structs Enable tracing structure names
|
--trace-structs Enable tracing structure names
|
||||||
--trace-threads <threads> Enable FST waveform creation on separate threads
|
--trace-threads <threads> Enable FST waveform creation on separate threads
|
||||||
--no-trace-top Do not emit traces for signals in the top module generated by verilator
|
--no-trace-top Do not emit traces for signals in the top module generated by verilator
|
||||||
--trace-underscore Enable tracing of _signals
|
--trace-underscore Enable tracing of _signals
|
||||||
|
--trace-vcd Enable VCD waveform creation
|
||||||
-U<var> Undefine preprocessor define
|
-U<var> Undefine preprocessor define
|
||||||
--no-unlimited-stack Don't disable stack size limit
|
--no-unlimited-stack Don't disable stack size limit
|
||||||
--unroll-count <loops> Tune maximum loop iterations
|
--unroll-count <loops> Tune maximum loop iterations
|
||||||
@@ -472,13 +497,14 @@ detailed descriptions of these arguments.
|
|||||||
-V Verbose version and config
|
-V Verbose version and config
|
||||||
-v <filename> Verilog library
|
-v <filename> Verilog library
|
||||||
--valgrind Run Verilator under valgrind
|
--valgrind Run Verilator under valgrind
|
||||||
--verilate-jobs Job threads for Verilation stage
|
|
||||||
--no-verilate Skip Verilation and just compile previously Verilated code
|
--no-verilate Skip Verilation and just compile previously Verilated code
|
||||||
|
--verilate-jobs Job threads for Verilation stage
|
||||||
+verilog1995ext+<ext> Synonym for +1364-1995ext+<ext>
|
+verilog1995ext+<ext> Synonym for +1364-1995ext+<ext>
|
||||||
+verilog2001ext+<ext> Synonym for +1364-2001ext+<ext>
|
+verilog2001ext+<ext> Synonym for +1364-2001ext+<ext>
|
||||||
--version Show program version and exits
|
--version Show program version and exits
|
||||||
--vpi Enable VPI compiles
|
--vpi Enable VPI compiles
|
||||||
--waiver-output <filename> Create a waiver file based on the linter warnings
|
--waiver-multiline Create multiline --match for waivers
|
||||||
|
--waiver-output <filename> Create a waiver file based on linter warnings
|
||||||
-Wall Enable all style warnings
|
-Wall Enable all style warnings
|
||||||
-Werror-<message> Convert warnings to errors
|
-Werror-<message> Convert warnings to errors
|
||||||
-Wfuture-<message> Disable unknown message warnings
|
-Wfuture-<message> Disable unknown message warnings
|
||||||
@@ -487,6 +513,7 @@ detailed descriptions of these arguments.
|
|||||||
-Wno-fatal Disable fatal exit on warnings
|
-Wno-fatal Disable fatal exit on warnings
|
||||||
-Wno-lint Disable all lint warnings
|
-Wno-lint Disable all lint warnings
|
||||||
-Wno-style Disable all style warnings
|
-Wno-style Disable all style warnings
|
||||||
|
-work <libname> Set config library for following files
|
||||||
-Wpedantic Warn on compliance-test issues
|
-Wpedantic Warn on compliance-test issues
|
||||||
-Wwarn-<message> Enable specified warning message
|
-Wwarn-<message> Enable specified warning message
|
||||||
-Wwarn-lint Enable lint warning message
|
-Wwarn-lint Enable lint warning message
|
||||||
@@ -494,11 +521,6 @@ detailed descriptions of these arguments.
|
|||||||
--x-assign <mode> Assign non-initial Xs to this value
|
--x-assign <mode> Assign non-initial Xs to this value
|
||||||
--x-initial <mode> Assign initial Xs to this value
|
--x-initial <mode> Assign initial Xs to this value
|
||||||
--x-initial-edge Enable initial X->0 and X->1 edge triggers
|
--x-initial-edge Enable initial X->0 and X->1 edge triggers
|
||||||
--no-json-edit-nums Don't dump editNum in .tree.json files
|
|
||||||
--no-json-ids Don't use short identifiers instead of adresses/paths in .tree.json
|
|
||||||
--json-only Create JSON parser output (.tree.json and .meta.json)
|
|
||||||
--json-only-output .tree.json output filename
|
|
||||||
--json-only-meta-output .tree.meta.json output filename
|
|
||||||
--xml-only Create XML parser output
|
--xml-only Create XML parser output
|
||||||
--xml-output XML output filename
|
--xml-output XML output filename
|
||||||
-y <dir> Directory to search for modules
|
-y <dir> Directory to search for modules
|
||||||
@@ -510,9 +532,9 @@ description of these arguments.
|
|||||||
|
|
||||||
=for VL_SPHINX_EXTRACT "_build/gen/args_verilated.rst"
|
=for VL_SPHINX_EXTRACT "_build/gen/args_verilated.rst"
|
||||||
|
|
||||||
|
+verilator+coverage+file+<filename> Set coverage output filename
|
||||||
+verilator+debug Enable debugging
|
+verilator+debug Enable debugging
|
||||||
+verilator+debugi+<value> Enable debugging at a level
|
+verilator+debugi+<value> Enable debugging at a level
|
||||||
+verilator+coverage+file+<filename> Set coverage output filename
|
|
||||||
+verilator+error+limit+<value> Set error limit
|
+verilator+error+limit+<value> Set error limit
|
||||||
+verilator+help Show help
|
+verilator+help Show help
|
||||||
+verilator+noassert Disable assert checking
|
+verilator+noassert Disable assert checking
|
||||||
@@ -531,7 +553,7 @@ description of these arguments.
|
|||||||
|
|
||||||
The latest version is available from L<https://verilator.org>.
|
The latest version is available from L<https://verilator.org>.
|
||||||
|
|
||||||
Copyright 2003-2024 by Wilson Snyder. This program is free software; you can
|
Copyright 2003-2025 by Wilson Snyder. This program is free software; you can
|
||||||
redistribute it and/or modify the Verilator internals under the terms of
|
redistribute it and/or modify the Verilator internals under the terms of
|
||||||
either the GNU Lesser General Public License Version 3 or the Perl Artistic
|
either the GNU Lesser General Public License Version 3 or the Perl Artistic
|
||||||
License Version 2.0.
|
License Version 2.0.
|
||||||
|
|||||||
@@ -16,8 +16,7 @@ parser = argparse.ArgumentParser(
|
|||||||
|
|
||||||
For documentation see
|
For documentation see
|
||||||
https://verilator.org/guide/latest/exe_verilator_ccache_report.html""",
|
https://verilator.org/guide/latest/exe_verilator_ccache_report.html""",
|
||||||
epilog=
|
epilog="""Copyright 2002-2025 by Wilson Snyder. This program is free software; you
|
||||||
"""Copyright 2002-2024 by Wilson Snyder. This program is free software; you
|
|
||||||
can redistribute it and/or modify it under the terms of either the GNU
|
can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
@@ -67,30 +66,23 @@ else:
|
|||||||
wnames = max(len(_) for _ in results) + 1
|
wnames = max(len(_) for _ in results) + 1
|
||||||
wresults = max(len(_) for _ in results.values()) + 1
|
wresults = max(len(_) for _ in results.values()) + 1
|
||||||
for k in sorted(results.keys()):
|
for k in sorted(results.keys()):
|
||||||
args.o.write("{:{wnames}} : {:{wresults}} : {}s\n".format(
|
args.o.write("{:{wnames}} : {:{wresults}} : {}s\n".format(k,
|
||||||
k,
|
results[k],
|
||||||
results[k],
|
elapsed[k].total_seconds(),
|
||||||
elapsed[k].total_seconds(),
|
wnames=wnames,
|
||||||
wnames=wnames,
|
wresults=wresults))
|
||||||
wresults=wresults))
|
|
||||||
|
|
||||||
args.o.write("\nSummary:\n")
|
args.o.write("\nSummary:\n")
|
||||||
counts = collections.Counter(_ for _ in results.values())
|
counts = collections.Counter(_ for _ in results.values())
|
||||||
total = sum(counts.values())
|
total = sum(counts.values())
|
||||||
for k in sorted(counts.keys()):
|
for k in sorted(counts.keys()):
|
||||||
c = counts[k]
|
c = counts[k]
|
||||||
args.o.write("{:{width}}| {} ({:.2%})\n".format(k,
|
args.o.write("{:{width}}| {} ({:.2%})\n".format(k, c, c / total, width=wresults))
|
||||||
c,
|
|
||||||
c / total,
|
|
||||||
width=wresults))
|
|
||||||
|
|
||||||
args.o.write("\nLongest:\n")
|
args.o.write("\nLongest:\n")
|
||||||
longest = sorted(list(elapsed.items()),
|
longest = sorted(list(elapsed.items()), key=lambda kv: -kv[1].total_seconds())
|
||||||
key=lambda kv: -kv[1].total_seconds())
|
|
||||||
for i, (k, v) in enumerate(longest):
|
for i, (k, v) in enumerate(longest):
|
||||||
args.o.write("{:{width}}| {}s\n".format(k,
|
args.o.write("{:{width}}| {}s\n".format(k, v.total_seconds(), width=wnames))
|
||||||
v.total_seconds(),
|
|
||||||
width=wnames))
|
|
||||||
if i > 4:
|
if i > 4:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env perl
|
#!/usr/bin/env perl
|
||||||
######################################################################
|
######################################################################
|
||||||
#
|
#
|
||||||
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you
|
# Copyright 2003-2025 by Wilson Snyder. This program is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
@@ -154,9 +154,9 @@ verilator_coverage - Verilator coverage analyzer
|
|||||||
|
|
||||||
verilator_coverage --annotate <obj>
|
verilator_coverage --annotate <obj>
|
||||||
|
|
||||||
verilator_coverage -write merged.dat -read <datafiles>...
|
verilator_coverage -write merged.dat <datafiles>...
|
||||||
|
|
||||||
verilator_coverage -write-info merged.info -read <datafiles>...
|
verilator_coverage -write-info merged.info <datafiles>...
|
||||||
|
|
||||||
Verilator_coverage processes Verilated model-generated coverage reports.
|
Verilator_coverage processes Verilated model-generated coverage reports.
|
||||||
|
|
||||||
@@ -170,6 +170,7 @@ L<https://verilator.org/guide/latest/exe_verilator_coverage.html>.
|
|||||||
--annotate-all All files should be shown.
|
--annotate-all All files should be shown.
|
||||||
--annotate-min <count> Minimum occurrence count for uncovered.
|
--annotate-min <count> Minimum occurrence count for uncovered.
|
||||||
--annotate-points Annotates info from each coverage point.
|
--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.
|
--help Displays this message and version and exits.
|
||||||
--rank Compute relative importance of tests.
|
--rank Compute relative importance of tests.
|
||||||
--unlink With --write, unlink all inputs
|
--unlink With --write, unlink all inputs
|
||||||
@@ -188,7 +189,7 @@ L<https://verilator.org/guide/latest/exe_verilator_coverage.html>.
|
|||||||
|
|
||||||
The latest version is available from L<https://verilator.org>.
|
The latest version is available from L<https://verilator.org>.
|
||||||
|
|
||||||
Copyright 2003-2024 by Wilson Snyder. This program is free software; you
|
Copyright 2003-2025 by Wilson Snyder. This program is free software; you
|
||||||
can redistribute it and/or modify the Verilator internals under the terms
|
can redistribute it and/or modify the Verilator internals under the terms
|
||||||
of either the GNU Lesser General Public License Version 3 or the Perl
|
of either the GNU Lesser General Public License Version 3 or the Perl
|
||||||
Artistic License Version 2.0.
|
Artistic License Version 2.0.
|
||||||
|
|||||||
@@ -47,8 +47,7 @@ def diff_dir(a, b):
|
|||||||
diff_file(a, b)
|
diff_file(a, b)
|
||||||
anyfile = True
|
anyfile = True
|
||||||
if not anyfile:
|
if not anyfile:
|
||||||
sys.stderr.write(
|
sys.stderr.write("%Warning: No .tree files found that have similar base names\n")
|
||||||
"%Warning: No .tree files found that have similar base names\n")
|
|
||||||
|
|
||||||
|
|
||||||
def diff_file(a, b):
|
def diff_file(a, b):
|
||||||
@@ -109,18 +108,14 @@ parser = argparse.ArgumentParser(
|
|||||||
Verilator_difftree is used for debugging Verilator tree output files.
|
Verilator_difftree is used for debugging Verilator tree output files.
|
||||||
It performs a diff between two files, or all files common between two
|
It performs a diff between two files, or all files common between two
|
||||||
directories, ignoring irrelevant pointer differences.""",
|
directories, ignoring irrelevant pointer differences.""",
|
||||||
epilog=
|
epilog="""Copyright 2005-2025 by Wilson Snyder. This program is free software; you
|
||||||
"""Copyright 2005-2024 by Wilson Snyder. This program is free software; you
|
|
||||||
can redistribute it and/or modify it under the terms of either the GNU
|
can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
|
|
||||||
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
|
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
|
||||||
|
|
||||||
parser.add_argument('--debug',
|
parser.add_argument('--debug', action='store_const', const=9, help='enable debug')
|
||||||
action='store_const',
|
|
||||||
const=9,
|
|
||||||
help='enable debug')
|
|
||||||
parser.add_argument('--no-lineno',
|
parser.add_argument('--no-lineno',
|
||||||
action='store_false',
|
action='store_false',
|
||||||
help='do not show differences in line numbering')
|
help='do not show differences in line numbering')
|
||||||
|
|||||||
+148
-94
@@ -8,9 +8,10 @@ import collections
|
|||||||
import math
|
import math
|
||||||
import re
|
import re
|
||||||
import statistics
|
import statistics
|
||||||
|
from collections import OrderedDict
|
||||||
# from pprint import pprint
|
# from pprint import pprint
|
||||||
|
|
||||||
Sections = []
|
Sections = OrderedDict()
|
||||||
LongestVcdStrValueLength = 0
|
LongestVcdStrValueLength = 0
|
||||||
Threads = collections.defaultdict(lambda: []) # List of records per thread id
|
Threads = collections.defaultdict(lambda: []) # List of records per thread id
|
||||||
Mtasks = collections.defaultdict(lambda: {'elapsed': 0, 'end': 0})
|
Mtasks = collections.defaultdict(lambda: {'elapsed': 0, 'end': 0})
|
||||||
@@ -18,11 +19,16 @@ Cpus = collections.defaultdict(lambda: {'mtask_time': 0})
|
|||||||
Global = {
|
Global = {
|
||||||
'args': {},
|
'args': {},
|
||||||
'cpuinfo': collections.defaultdict(lambda: {}),
|
'cpuinfo': collections.defaultdict(lambda: {}),
|
||||||
|
'info': {
|
||||||
|
'numa': 'no data'
|
||||||
|
},
|
||||||
'stats': {}
|
'stats': {}
|
||||||
}
|
}
|
||||||
ElapsedTime = None # total elapsed time
|
ElapsedTime = None # total elapsed time
|
||||||
ExecGraphTime = 0 # total elapsed time excuting an exec graph
|
ExecGraphTime = 0 # total elapsed time executing an exec graph
|
||||||
|
WaitingTime = 0 # total elapsed time waiting for mtasks
|
||||||
ExecGraphIntervals = [] # list of (start, end) pairs
|
ExecGraphIntervals = [] # list of (start, end) pairs
|
||||||
|
ThreadScheduleWaitIntervals = [] # list of (start, tick, ecpu) pairs
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
@@ -31,24 +37,29 @@ def read_data(filename):
|
|||||||
with open(filename, "r", encoding="utf8") as fh:
|
with open(filename, "r", encoding="utf8") as fh:
|
||||||
re_thread = re.compile(r'^VLPROFTHREAD (\d+)$')
|
re_thread = re.compile(r'^VLPROFTHREAD (\d+)$')
|
||||||
re_record = re.compile(r'^VLPROFEXEC (\S+) (\d+)(.*)$')
|
re_record = re.compile(r'^VLPROFEXEC (\S+) (\d+)(.*)$')
|
||||||
|
# The hierBlock argument is optional
|
||||||
re_payload_mtaskBegin = re.compile(
|
re_payload_mtaskBegin = re.compile(
|
||||||
r'id (\d+) predictStart (\d+) cpu (\d+)')
|
r'id (\d+) predictStart (\d+) cpu (\d+)(?: hierBlock)?\s*(\w+)?')
|
||||||
re_payload_mtaskEnd = re.compile(r'id (\d+) predictCost (\d+)')
|
re_payload_mtaskEnd = re.compile(r'predictCost (\d+)')
|
||||||
|
re_payload_wait = re.compile(r'cpu (\d+)')
|
||||||
|
|
||||||
re_arg1 = re.compile(r'VLPROF arg\s+(\S+)\+([0-9.]*)\s*')
|
re_arg1 = re.compile(r'VLPROF arg\s+(\S+)\+([0-9.]*)\s*')
|
||||||
re_arg2 = re.compile(r'VLPROF arg\s+(\S+)\s+([0-9.]*)\s*$')
|
re_arg2 = re.compile(r'VLPROF arg\s+(\S+)\s+([0-9.]*)\s*$')
|
||||||
re_stat = re.compile(r'VLPROF stat\s+(\S+)\s+([0-9.]+)')
|
re_info = re.compile(r'VLPROF info\s+(\S+)\s+(.*)$')
|
||||||
|
re_stat = re.compile(r'VLPROF stat\s+(\S+)\s+(\S+)')
|
||||||
re_proc_cpu = re.compile(r'VLPROFPROC processor\s*:\s*(\d+)\s*$')
|
re_proc_cpu = re.compile(r'VLPROFPROC processor\s*:\s*(\d+)\s*$')
|
||||||
re_proc_dat = re.compile(r'VLPROFPROC ([a-z_ ]+)\s*:\s*(.*)$')
|
re_proc_dat = re.compile(r'VLPROFPROC ([a-z_ ]+)\s*:\s*(.*)$')
|
||||||
cpu = None
|
cpu = None
|
||||||
thread = None
|
thread = 0
|
||||||
execGraphStart = None
|
|
||||||
|
|
||||||
global LongestVcdStrValueLength
|
global LongestVcdStrValueLength
|
||||||
global ExecGraphTime
|
global ExecGraphTime
|
||||||
|
global WaitingTime
|
||||||
|
|
||||||
|
ExecGraphStack = []
|
||||||
SectionStack = []
|
SectionStack = []
|
||||||
mTaskThread = {}
|
MtasksStack = []
|
||||||
|
ThreadScheduleWait = collections.defaultdict(list)
|
||||||
|
|
||||||
for line in fh:
|
for line in fh:
|
||||||
recordMatch = re_record.match(line)
|
recordMatch = re_record.match(line)
|
||||||
@@ -57,55 +68,65 @@ def read_data(filename):
|
|||||||
tick = int(tick)
|
tick = int(tick)
|
||||||
payload = payload.strip()
|
payload = payload.strip()
|
||||||
if kind == "SECTION_PUSH":
|
if kind == "SECTION_PUSH":
|
||||||
LongestVcdStrValueLength = max(LongestVcdStrValueLength,
|
LongestVcdStrValueLength = max(LongestVcdStrValueLength, len(payload))
|
||||||
len(payload))
|
|
||||||
SectionStack.append(payload)
|
SectionStack.append(payload)
|
||||||
Sections.append((tick, tuple(SectionStack)))
|
Sections[thread].append((tick, tuple(SectionStack)))
|
||||||
elif kind == "SECTION_POP":
|
elif kind == "SECTION_POP":
|
||||||
assert SectionStack, "SECTION_POP without SECTION_PUSH"
|
assert SectionStack, "SECTION_POP without SECTION_PUSH"
|
||||||
SectionStack.pop()
|
SectionStack.pop()
|
||||||
Sections.append((tick, tuple(SectionStack)))
|
Sections[thread].append((tick, tuple(SectionStack)))
|
||||||
elif kind == "MTASK_BEGIN":
|
elif kind == "MTASK_BEGIN":
|
||||||
mtask, predict_start, ecpu = re_payload_mtaskBegin.match(
|
mtask, predict_start, ecpu, hier_block = re_payload_mtaskBegin.match(
|
||||||
payload).groups()
|
payload).groups()
|
||||||
|
hier_block = "" if hier_block is None else hier_block
|
||||||
mtask = int(mtask)
|
mtask = int(mtask)
|
||||||
predict_start = int(predict_start)
|
predict_start = int(predict_start)
|
||||||
ecpu = int(ecpu)
|
ecpu = int(ecpu)
|
||||||
mTaskThread[mtask] = thread
|
|
||||||
records = Threads[thread]
|
records = Threads[thread]
|
||||||
assert not records or records[-1]['start'] <= records[-1][
|
|
||||||
'end'] <= tick
|
|
||||||
records.append({
|
records.append({
|
||||||
'start': tick,
|
'start': tick,
|
||||||
'mtask': mtask,
|
'mtask': mtask,
|
||||||
'predict_start': predict_start,
|
'predict_start': predict_start,
|
||||||
|
'hier_block': hier_block,
|
||||||
'cpu': ecpu
|
'cpu': ecpu
|
||||||
})
|
})
|
||||||
Mtasks[mtask]['begin'] = tick
|
Mtasks[(hier_block, mtask)]['begin'] = tick
|
||||||
Mtasks[mtask]['thread'] = thread
|
Mtasks[(hier_block, mtask)]['predict_start'] = predict_start
|
||||||
Mtasks[mtask]['predict_start'] = predict_start
|
Mtasks[(hier_block, mtask)]['thread'] = thread
|
||||||
|
MtasksStack.append((hier_block, mtask, records[-1]))
|
||||||
elif kind == "MTASK_END":
|
elif kind == "MTASK_END":
|
||||||
mtask, predict_cost = re_payload_mtaskEnd.match(
|
predict_cost, = re_payload_mtaskEnd.match(payload).groups()
|
||||||
payload).groups()
|
|
||||||
mtask = int(mtask)
|
mtask = int(mtask)
|
||||||
|
hier_block, mtask, record = MtasksStack.pop()
|
||||||
predict_cost = int(predict_cost)
|
predict_cost = int(predict_cost)
|
||||||
begin = Mtasks[mtask]['begin']
|
begin = Mtasks[(hier_block, mtask)]['begin']
|
||||||
record = Threads[mTaskThread[mtask]][-1]
|
|
||||||
record['end'] = tick
|
record['end'] = tick
|
||||||
|
assert record and records[-1]['start'] <= records[-1]['end'] <= tick
|
||||||
record['predict_cost'] = predict_cost
|
record['predict_cost'] = predict_cost
|
||||||
Mtasks[mtask]['elapsed'] += tick - begin
|
Mtasks[(hier_block, mtask)]['elapsed'] += tick - begin
|
||||||
Mtasks[mtask]['predict_cost'] = predict_cost
|
Mtasks[(hier_block, mtask)]['predict_cost'] = predict_cost
|
||||||
Mtasks[mtask]['end'] = max(Mtasks[mtask]['end'], tick)
|
Mtasks[(hier_block, mtask)]['end'] = max(Mtasks[(hier_block, mtask)]['end'],
|
||||||
|
tick)
|
||||||
|
elif kind == "THREAD_SCHEDULE_WAIT_BEGIN":
|
||||||
|
ecpu = int(re_payload_wait.match(payload).groups()[0])
|
||||||
|
ThreadScheduleWait[ecpu].append(tick)
|
||||||
|
elif kind == "THREAD_SCHEDULE_WAIT_END":
|
||||||
|
ecpu = int(re_payload_wait.match(payload).groups()[0])
|
||||||
|
start = ThreadScheduleWait[ecpu].pop()
|
||||||
|
WaitingTime += tick - start
|
||||||
|
ThreadScheduleWaitIntervals.append((start, tick, ecpu))
|
||||||
elif kind == "EXEC_GRAPH_BEGIN":
|
elif kind == "EXEC_GRAPH_BEGIN":
|
||||||
execGraphStart = tick
|
ExecGraphStack.append(tick)
|
||||||
elif kind == "EXEC_GRAPH_END":
|
elif kind == "EXEC_GRAPH_END":
|
||||||
|
assert ExecGraphStack, "EXEC_GRAPH_END without EXEC_GRAPH_BEGIN"
|
||||||
|
execGraphStart = ExecGraphStack.pop()
|
||||||
ExecGraphTime += tick - execGraphStart
|
ExecGraphTime += tick - execGraphStart
|
||||||
ExecGraphIntervals.append((execGraphStart, tick))
|
ExecGraphIntervals.append((execGraphStart, tick))
|
||||||
execGraphStart = None
|
|
||||||
elif Args.debug:
|
elif Args.debug:
|
||||||
print("-Unknown execution trace record: %s" % line)
|
print("-Unknown execution trace record: %s" % line)
|
||||||
elif re_thread.match(line):
|
elif re_thread.match(line):
|
||||||
thread = int(re_thread.match(line).group(1))
|
thread = int(re_thread.match(line).group(1))
|
||||||
|
Sections[thread] = []
|
||||||
elif re.match(r'^VLPROF(THREAD|VERSION)', line):
|
elif re.match(r'^VLPROF(THREAD|VERSION)', line):
|
||||||
pass
|
pass
|
||||||
elif re_arg1.match(line):
|
elif re_arg1.match(line):
|
||||||
@@ -114,6 +135,9 @@ def read_data(filename):
|
|||||||
elif re_arg2.match(line):
|
elif re_arg2.match(line):
|
||||||
match = re_arg2.match(line)
|
match = re_arg2.match(line)
|
||||||
Global['args'][match.group(1)] = match.group(2)
|
Global['args'][match.group(1)] = match.group(2)
|
||||||
|
elif re_info.match(line):
|
||||||
|
match = re_info.match(line)
|
||||||
|
Global['info'][match.group(1)] = match.group(2)
|
||||||
elif re_stat.match(line):
|
elif re_stat.match(line):
|
||||||
match = re_stat.match(line)
|
match = re_stat.match(line)
|
||||||
Global['stats'][match.group(1)] = match.group(2)
|
Global['stats'][match.group(1)] = match.group(2)
|
||||||
@@ -163,28 +187,26 @@ def report():
|
|||||||
|
|
||||||
print("\nSummary:")
|
print("\nSummary:")
|
||||||
print(" Total elapsed time = {} rdtsc ticks".format(ElapsedTime))
|
print(" Total elapsed time = {} rdtsc ticks".format(ElapsedTime))
|
||||||
print(" Parallelized code = {:.2%} of elapsed time".format(
|
print(" Parallelized code = {:.2%} of elapsed time".format(ExecGraphTime / ElapsedTime))
|
||||||
ExecGraphTime / ElapsedTime))
|
print(" Waiting time = {:.2%} of elapsed time".format(WaitingTime / ElapsedTime))
|
||||||
print(" Total threads = %d" % nthreads)
|
print(" Total threads = %d" % nthreads)
|
||||||
print(" Total CPUs used = %d" % ncpus)
|
print(" Total CPUs used = %d" % ncpus)
|
||||||
print(" Total mtasks = %d" % len(Mtasks))
|
print(" Total mtasks = %d" % len(Mtasks))
|
||||||
print(" Total yields = %d" % int(Global['stats'].get('yields', 0)))
|
print(" Total yields = %d" % int(Global['stats'].get('yields', 0)))
|
||||||
|
|
||||||
|
report_numa()
|
||||||
report_mtasks()
|
report_mtasks()
|
||||||
report_cpus()
|
report_cpus()
|
||||||
report_sections()
|
report_sections()
|
||||||
|
|
||||||
if nthreads > ncpus:
|
if nthreads > ncpus:
|
||||||
print()
|
print()
|
||||||
print("%%Warning: There were fewer CPUs (%d) than threads (%d)." %
|
print("%%Warning: There were fewer CPUs (%d) than threads (%d)." % (ncpus, nthreads))
|
||||||
(ncpus, nthreads))
|
|
||||||
print(" : See docs on use of numactl.")
|
print(" : See docs on use of numactl.")
|
||||||
else:
|
else:
|
||||||
if 'cpu_socket_cores_warning' in Global:
|
if 'cpu_socket_cores_warning' in Global:
|
||||||
print()
|
print()
|
||||||
print(
|
print("%Warning: Multiple threads scheduled on same hyperthreaded core.")
|
||||||
"%Warning: Multiple threads scheduled on same hyperthreaded core."
|
|
||||||
)
|
|
||||||
print(" : See docs on use of numactl.")
|
print(" : See docs on use of numactl.")
|
||||||
if 'cpu_sockets_warning' in Global:
|
if 'cpu_sockets_warning' in Global:
|
||||||
print()
|
print()
|
||||||
@@ -193,6 +215,11 @@ def report():
|
|||||||
print()
|
print()
|
||||||
|
|
||||||
|
|
||||||
|
def report_numa():
|
||||||
|
print("\nNUMA assignment:")
|
||||||
|
print(" NUMA status = %s" % Global['info']['numa'])
|
||||||
|
|
||||||
|
|
||||||
def report_mtasks():
|
def report_mtasks():
|
||||||
if not Mtasks:
|
if not Mtasks:
|
||||||
return
|
return
|
||||||
@@ -213,8 +240,8 @@ def report_mtasks():
|
|||||||
long_mtask = None
|
long_mtask = None
|
||||||
predict_mtask_time = 0
|
predict_mtask_time = 0
|
||||||
predict_elapsed = 0
|
predict_elapsed = 0
|
||||||
for mtaskId in Mtasks:
|
for (hier_block, mtask_id) in Mtasks:
|
||||||
record = Mtasks[mtaskId]
|
record = Mtasks[(hier_block, mtask_id)]
|
||||||
predict_mtask_time += record['predict_cost']
|
predict_mtask_time += record['predict_cost']
|
||||||
total_mtask_time += record['elapsed']
|
total_mtask_time += record['elapsed']
|
||||||
thread_mtask_time[record['thread']] += record['elapsed']
|
thread_mtask_time[record['thread']] += record['elapsed']
|
||||||
@@ -222,14 +249,14 @@ def report_mtasks():
|
|||||||
predict_elapsed = max(predict_elapsed, predict_end)
|
predict_elapsed = max(predict_elapsed, predict_end)
|
||||||
if record['elapsed'] > long_mtask_time:
|
if record['elapsed'] > long_mtask_time:
|
||||||
long_mtask_time = record['elapsed']
|
long_mtask_time = record['elapsed']
|
||||||
long_mtask = mtaskId
|
long_mtask = mtask_id
|
||||||
|
long_mtask_hier_block = hier_block
|
||||||
Global['predict_last_end'] = predict_elapsed
|
Global['predict_last_end'] = predict_elapsed
|
||||||
|
|
||||||
serialTime = ElapsedTime - ExecGraphTime
|
serialTime = ElapsedTime - ExecGraphTime
|
||||||
|
|
||||||
def subReport(elapsed, work):
|
def subReport(elapsed, work):
|
||||||
print(" Thread utilization = {:7.2%}".format(work /
|
print(" Thread utilization = {:7.2%}".format(work / (elapsed * nthreads)))
|
||||||
(elapsed * nthreads)))
|
|
||||||
print(" Speedup = {:6.3}x".format(work / elapsed))
|
print(" Speedup = {:6.3}x".format(work / elapsed))
|
||||||
|
|
||||||
print("\nParallelized code, measured:")
|
print("\nParallelized code, measured:")
|
||||||
@@ -252,36 +279,52 @@ def report_mtasks():
|
|||||||
max_p2e = -1000000
|
max_p2e = -1000000
|
||||||
max_mtask = None
|
max_mtask = None
|
||||||
|
|
||||||
for mtask in sorted(Mtasks.keys()):
|
for (hier_block, mtask_id) in sorted(Mtasks.keys()):
|
||||||
if Mtasks[mtask]['elapsed'] > 0:
|
mtask = Mtasks[(hier_block, mtask_id)]
|
||||||
if Mtasks[mtask]['predict_cost'] == 0:
|
if mtask['elapsed'] > 0:
|
||||||
Mtasks[mtask]['predict_cost'] = 1 # don't log(0) below
|
if mtask['predict_cost'] == 0:
|
||||||
p2e_ratio = math.log(Mtasks[mtask]['predict_cost'] /
|
mtask['predict_cost'] = 1 # don't log(0) below
|
||||||
Mtasks[mtask]['elapsed'])
|
p2e_ratio = math.log(mtask['predict_cost'] / mtask['elapsed'])
|
||||||
p2e_ratios.append(p2e_ratio)
|
p2e_ratios.append(p2e_ratio)
|
||||||
|
|
||||||
if p2e_ratio > max_p2e:
|
if p2e_ratio > max_p2e:
|
||||||
max_p2e = p2e_ratio
|
max_p2e = p2e_ratio
|
||||||
max_mtask = mtask
|
max_mtask = mtask_id
|
||||||
|
max_hier_block = hier_block
|
||||||
if p2e_ratio < min_p2e:
|
if p2e_ratio < min_p2e:
|
||||||
min_p2e = p2e_ratio
|
min_p2e = p2e_ratio
|
||||||
min_mtask = mtask
|
min_mtask = mtask_id
|
||||||
|
min_hier_block = hier_block
|
||||||
|
|
||||||
print("\nMTask statistics:")
|
print("\nMTask statistics:")
|
||||||
print(" Longest mtask id = {}".format(long_mtask))
|
if long_mtask_hier_block:
|
||||||
print(" Longest mtask time = {:.2%} of time elapsed in parallelized code".
|
print(" Longest mtask id = {} from hier_block '{}'".format(long_mtask,
|
||||||
format(long_mtask_time / ExecGraphTime))
|
long_mtask_hier_block))
|
||||||
|
else:
|
||||||
|
print(" Longest mtask id = {}".format(long_mtask))
|
||||||
|
print(" Longest mtask time = {:.2%} of time elapsed in parallelized code".format(
|
||||||
|
long_mtask_time / ExecGraphTime))
|
||||||
print(" min log(p2e) = %0.3f" % min_p2e, end="")
|
print(" min log(p2e) = %0.3f" % min_p2e, end="")
|
||||||
|
|
||||||
print(" from mtask %d (predict %d," %
|
if min_hier_block:
|
||||||
(min_mtask, Mtasks[min_mtask]['predict_cost']),
|
print(" from hier_block '%s' mtask %d (predict %d," %
|
||||||
end="")
|
(min_hier_block, min_mtask, Mtasks[(min_hier_block, min_mtask)]['predict_cost']),
|
||||||
print(" elapsed %d)" % Mtasks[min_mtask]['elapsed'])
|
end="")
|
||||||
|
else:
|
||||||
|
print(" from mtask %d (predict %d," %
|
||||||
|
(min_mtask, Mtasks[(min_hier_block, min_mtask)]['predict_cost']),
|
||||||
|
end="")
|
||||||
|
print(" elapsed %d)" % Mtasks[(min_hier_block, min_mtask)]['elapsed'])
|
||||||
print(" max log(p2e) = %0.3f" % max_p2e, end="")
|
print(" max log(p2e) = %0.3f" % max_p2e, end="")
|
||||||
print(" from mtask %d (predict %d," %
|
if max_hier_block:
|
||||||
(max_mtask, Mtasks[max_mtask]['predict_cost']),
|
print(" from hier_block '%s' mtask %d (predict %d," %
|
||||||
end="")
|
(max_hier_block, max_mtask, Mtasks[(max_hier_block, max_mtask)]['predict_cost']),
|
||||||
print(" elapsed %d)" % Mtasks[max_mtask]['elapsed'])
|
end="")
|
||||||
|
else:
|
||||||
|
print(" from mtask %d (predict %d," %
|
||||||
|
(max_mtask, Mtasks[(max_hier_block, max_mtask)]['predict_cost']),
|
||||||
|
end="")
|
||||||
|
print(" elapsed %d)" % Mtasks[(max_hier_block, max_mtask)]['elapsed'])
|
||||||
|
|
||||||
stddev = statistics.pstdev(p2e_ratios)
|
stddev = statistics.pstdev(p2e_ratios)
|
||||||
mean = statistics.mean(p2e_ratios)
|
mean = statistics.mean(p2e_ratios)
|
||||||
@@ -315,8 +358,8 @@ def report_cpus():
|
|||||||
model = cpuinfo['model_name']
|
model = cpuinfo['model_name']
|
||||||
|
|
||||||
print(" {:3d} | {:7.2%} / {:16d} | {:>6s} | {:>4s} | {}".format(
|
print(" {:3d} | {:7.2%} / {:16d} | {:>6s} | {:>4s} | {}".format(
|
||||||
cpu, Cpus[cpu]['mtask_time'] / ElapsedTime,
|
cpu, Cpus[cpu]['mtask_time'] / ElapsedTime, Cpus[cpu]['mtask_time'], socket, core,
|
||||||
Cpus[cpu]['mtask_time'], socket, core, model))
|
model))
|
||||||
|
|
||||||
if len(Global['cpu_sockets']) > 1:
|
if len(Global['cpu_sockets']) > 1:
|
||||||
Global['cpu_sockets_warning'] = True
|
Global['cpu_sockets_warning'] = True
|
||||||
@@ -326,23 +369,27 @@ def report_cpus():
|
|||||||
|
|
||||||
|
|
||||||
def report_sections():
|
def report_sections():
|
||||||
if not Sections:
|
for thread, section in Sections.items():
|
||||||
return
|
if section:
|
||||||
print("\nSection profile:")
|
print(f"\nSection profile for thread {thread}:")
|
||||||
|
report_section(section)
|
||||||
|
|
||||||
|
|
||||||
|
def report_section(section):
|
||||||
totalTime = collections.defaultdict(lambda: 0)
|
totalTime = collections.defaultdict(lambda: 0)
|
||||||
selfTime = collections.defaultdict(lambda: 0)
|
selfTime = collections.defaultdict(lambda: 0)
|
||||||
|
|
||||||
sectionTree = [0, {}, 1] # [selfTime, childTrees, numberOfTimesEntered]
|
sectionTree = [0, {}, 1] # [selfTime, childTrees, numberOfTimesEntered]
|
||||||
prevTime = 0
|
prevTime = 0
|
||||||
prevStack = ()
|
prevStack = ()
|
||||||
for time, stack in Sections:
|
for time, stack in section:
|
||||||
if len(stack) > len(prevStack):
|
if len(stack) > len(prevStack):
|
||||||
scope = sectionTree
|
scope = sectionTree
|
||||||
for item in stack:
|
for item in stack:
|
||||||
scope = scope[1].setdefault(item, [0, {}, 0])
|
scope = scope[1].setdefault(item, [0, {}, 0])
|
||||||
scope[2] += 1
|
scope[2] += 1
|
||||||
dt = time - prevTime
|
dt = time - prevTime
|
||||||
|
assert dt >= 0
|
||||||
scope = sectionTree
|
scope = sectionTree
|
||||||
for item in prevStack:
|
for item in prevStack:
|
||||||
scope = scope[1].setdefault(item, [0, {}, 0])
|
scope = scope[1].setdefault(item, [0, {}, 0])
|
||||||
@@ -366,8 +413,8 @@ def report_sections():
|
|||||||
|
|
||||||
def printTree(prefix, name, entries, tree):
|
def printTree(prefix, name, entries, tree):
|
||||||
print(" {:7.2%} | {:7.2%} | {:8} | {:10.2f} | {}".format(
|
print(" {:7.2%} | {:7.2%} | {:8} | {:10.2f} | {}".format(
|
||||||
treeSum(tree) / ElapsedTime, tree[0] / ElapsedTime, tree[2],
|
treeSum(tree) / ElapsedTime, tree[0] / ElapsedTime, tree[2], tree[2] / entries,
|
||||||
tree[2] / entries, prefix + name))
|
prefix + name))
|
||||||
for k in sorted(tree[1], key=lambda _: -treeSum(tree[1][_])):
|
for k in sorted(tree[1], key=lambda _: -treeSum(tree[1][_])):
|
||||||
printTree(prefix + " ", k, tree[2], tree[1][k])
|
printTree(prefix + " ", k, tree[2], tree[1][k])
|
||||||
|
|
||||||
@@ -417,6 +464,9 @@ def write_vcd(filename):
|
|||||||
val = buf.ljust(LongestVcdStrValueLength * 8, "0")
|
val = buf.ljust(LongestVcdStrValueLength * 8, "0")
|
||||||
values[time][code] = val
|
values[time][code] = val
|
||||||
|
|
||||||
|
def addXValue(code, time):
|
||||||
|
values[time][code] = 'x'
|
||||||
|
|
||||||
# Measured graph
|
# Measured graph
|
||||||
for thread in sorted(Threads):
|
for thread in sorted(Threads):
|
||||||
mcode = getCode(32, 'measured', 't%d_mtask' % thread)
|
mcode = getCode(32, 'measured', 't%d_mtask' % thread)
|
||||||
@@ -438,33 +488,39 @@ def write_vcd(filename):
|
|||||||
addValue(code, start, mtask)
|
addValue(code, start, mtask)
|
||||||
addValue(code, end, None)
|
addValue(code, end, None)
|
||||||
|
|
||||||
tStart = sorted(_['start'] for records in Threads.values()
|
tStart = sorted(_['start'] for records in Threads.values() for _ in records)
|
||||||
for _ in records)
|
tEnd = sorted(_['end'] for records in Threads.values() for _ in records)
|
||||||
tEnd = sorted(_['end'] for records in Threads.values()
|
|
||||||
for _ in records)
|
# Measured waiting time
|
||||||
|
for (start, end, cpu) in ThreadScheduleWaitIntervals:
|
||||||
|
mcode = getCode(32, 'measured', 'cpu%d_waiting' % cpu)
|
||||||
|
addXValue(mcode, start)
|
||||||
|
addValue(mcode, end, None)
|
||||||
|
|
||||||
# Predicted graph
|
# Predicted graph
|
||||||
for start, end in ExecGraphIntervals:
|
for start, end in ExecGraphIntervals:
|
||||||
# Find the earliest MTask start after the start point, and the
|
# Find the earliest MTask start after the start point, and the
|
||||||
# latest MTask end before the end point, so we can scale to the
|
# latest MTask end before the end point, so we can scale to the
|
||||||
# same range
|
# same range
|
||||||
start = tStart[bisect.bisect_left(tStart, start)]
|
tStartIdx = bisect.bisect_left(tStart, start)
|
||||||
|
if tStartIdx >= len(tStart):
|
||||||
|
continue
|
||||||
|
start = tStart[tStartIdx]
|
||||||
end = tEnd[bisect.bisect_right(tEnd, end) - 1]
|
end = tEnd[bisect.bisect_right(tEnd, end) - 1]
|
||||||
# Compute scale so predicted graph is of same width as interval
|
# Compute scale so predicted graph is of same width as interval
|
||||||
measured_scaling = (end - start) / Global['predict_last_end']
|
measured_scaling = (end - start) / Global['predict_last_end']
|
||||||
# Predict mtasks that fill the time the execution occupied
|
# Predict mtasks that fill the time the execution occupied
|
||||||
for mtask in Mtasks:
|
for (hier_block, mtask_id) in Mtasks:
|
||||||
thread = Mtasks[mtask]['thread']
|
mtask = Mtasks[(hier_block, mtask_id)]
|
||||||
pred_scaled_start = start + int(
|
thread = mtask['thread']
|
||||||
Mtasks[mtask]['predict_start'] * measured_scaling)
|
pred_scaled_start = start + int(mtask['predict_start'] * measured_scaling)
|
||||||
pred_scaled_end = start + int(
|
pred_scaled_end = start + int(
|
||||||
(Mtasks[mtask]['predict_start'] +
|
(mtask['predict_start'] + mtask['predict_cost']) * measured_scaling)
|
||||||
Mtasks[mtask]['predict_cost']) * measured_scaling)
|
|
||||||
if pred_scaled_start == pred_scaled_end:
|
if pred_scaled_start == pred_scaled_end:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
mcode = getCode(32, 'predicted', 't%d_mtask' % thread)
|
mcode = getCode(32, 'predicted', 't%d_mtask' % thread)
|
||||||
addValue(mcode, pred_scaled_start, mtask)
|
addValue(mcode, pred_scaled_start, mtask_id)
|
||||||
addValue(mcode, pred_scaled_end, None)
|
addValue(mcode, pred_scaled_end, None)
|
||||||
|
|
||||||
parallelism['predicted'][pred_scaled_start] += 1
|
parallelism['predicted'][pred_scaled_start] += 1
|
||||||
@@ -479,12 +535,13 @@ def write_vcd(filename):
|
|||||||
addValue(pcode, time, value)
|
addValue(pcode, time, value)
|
||||||
|
|
||||||
# Section graph
|
# Section graph
|
||||||
if Sections:
|
for thread, section in Sections.items():
|
||||||
scode = getCode(LongestVcdStrValueLength * 8, "section", "trace")
|
if section:
|
||||||
dcode = getCode(32, "section", "depth")
|
scode = getCode(LongestVcdStrValueLength * 8, "section", f"t{thread}_trace")
|
||||||
for time, stack in Sections:
|
dcode = getCode(32, "section", f"t{thread}_depth")
|
||||||
addValue(scode, time, stack[-1] if stack else None)
|
for time, stack in section:
|
||||||
addValue(dcode, time, len(stack))
|
addValue(scode, time, stack[-1] if stack else None)
|
||||||
|
addValue(dcode, time, len(stack))
|
||||||
|
|
||||||
# Create output file
|
# Create output file
|
||||||
fh.write("$version Generated by verilator_gantt $end\n")
|
fh.write("$version Generated by verilator_gantt $end\n")
|
||||||
@@ -526,6 +583,8 @@ def write_vcd(filename):
|
|||||||
value = values[time][code]
|
value = values[time][code]
|
||||||
if value is None:
|
if value is None:
|
||||||
fh.write("bz v%x\n" % code)
|
fh.write("bz v%x\n" % code)
|
||||||
|
elif value == 'x':
|
||||||
|
fh.write("bx v%x\n" % code)
|
||||||
elif isinstance(value, str):
|
elif isinstance(value, str):
|
||||||
fh.write("b%s v%x\n" % (value, code))
|
fh.write("b%s v%x\n" % (value, code))
|
||||||
else:
|
else:
|
||||||
@@ -537,7 +596,7 @@ def write_vcd(filename):
|
|||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
allow_abbrev=False,
|
allow_abbrev=False,
|
||||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
description="""Create Gantt chart of multi-threaded execution.
|
description="""Create Gantt chart of Verilator multi-threaded execution
|
||||||
|
|
||||||
Verilator_gantt creates a visual representation to help analyze Verilator
|
Verilator_gantt creates a visual representation to help analyze Verilator
|
||||||
#xmultithreaded simulation performance, by showing when each macro-task
|
#xmultithreaded simulation performance, by showing when each macro-task
|
||||||
@@ -545,8 +604,7 @@ Verilator_gantt creates a visual representation to help analyze Verilator
|
|||||||
|
|
||||||
For documentation see
|
For documentation see
|
||||||
https://verilator.org/guide/latest/exe_verilator_gantt.html""",
|
https://verilator.org/guide/latest/exe_verilator_gantt.html""",
|
||||||
epilog=
|
epilog="""Copyright 2018-2025 by Wilson Snyder. This program is free software; you
|
||||||
"""Copyright 2018-2024 by Wilson Snyder. This program is free software; you
|
|
||||||
can redistribute it and/or modify it under the terms of either the GNU
|
can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
@@ -554,12 +612,8 @@ Version 2.0.
|
|||||||
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
|
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
|
||||||
|
|
||||||
parser.add_argument('--debug', action='store_true', help='enable debug')
|
parser.add_argument('--debug', action='store_true', help='enable debug')
|
||||||
parser.add_argument('--no-vcd',
|
parser.add_argument('--no-vcd', help='disable creating vcd', action='store_true')
|
||||||
help='disable creating vcd',
|
parser.add_argument('--vcd', help='filename for vcd output', default='profile_exec.vcd')
|
||||||
action='store_true')
|
|
||||||
parser.add_argument('--vcd',
|
|
||||||
help='filename for vcd outpue',
|
|
||||||
default='profile_exec.vcd')
|
|
||||||
parser.add_argument('filename',
|
parser.add_argument('filename',
|
||||||
help='input profile_exec.dat filename to process',
|
help='input profile_exec.dat filename to process',
|
||||||
default='profile_exec.dat')
|
default='profile_exec.dat')
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# pylint: disable=C0114,C0209
|
# pylint: disable=C0114,C0209
|
||||||
#
|
#
|
||||||
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you
|
# Copyright 2003-2025 by Wilson Snyder. This program is free software; you
|
||||||
# can redistribute it and/or modify the Verilator internals under the terms
|
# can redistribute it and/or modify the Verilator internals under the terms
|
||||||
# of either the GNU Lesser General Public License Version 3 or the Perl
|
# of either the GNU Lesser General Public License Version 3 or the Perl
|
||||||
# Artistic License Version 2.0.
|
# Artistic License Version 2.0.
|
||||||
|
|||||||
+12
-23
@@ -34,9 +34,8 @@ def profcfunc(filename):
|
|||||||
|
|
||||||
# Older gprofs have no call column for single-call functions
|
# Older gprofs have no call column for single-call functions
|
||||||
# %time cumesec selfsec {stuff} name
|
# %time cumesec selfsec {stuff} name
|
||||||
match = re.match(
|
match = re.match(r'^\s*([0-9.]+)\s+[0-9.]+\s+([0-9.]+)\s+[^a-zA-Z_]*([a-zA-Z_].*)$',
|
||||||
r'^\s*([0-9.]+)\s+[0-9.]+\s+([0-9.]+)\s+[^a-zA-Z_]*([a-zA-Z_].*)$',
|
line)
|
||||||
line)
|
|
||||||
if match:
|
if match:
|
||||||
pct = float(match.group(1))
|
pct = float(match.group(1))
|
||||||
sec = float(match.group(2))
|
sec = float(match.group(2))
|
||||||
@@ -136,19 +135,15 @@ def profcfunc(filename):
|
|||||||
|
|
||||||
design_width = 1
|
design_width = 1
|
||||||
for func, func_item in vfuncs.items():
|
for func, func_item in vfuncs.items():
|
||||||
if design_width < len(func_item['design']):
|
design_width = max(design_width, len(func_item['design']))
|
||||||
design_width = len(func_item['design'])
|
|
||||||
|
|
||||||
print("Verilog code profile:")
|
print("Verilog code profile:")
|
||||||
print(" These are split into three categories:")
|
print(" These are split into three categories:")
|
||||||
print(" C++: Time in non-Verilated C++ code")
|
print(" C++: Time in non-Verilated C++ code")
|
||||||
print(" Prof: Time in profile overhead")
|
print(" Prof: Time in profile overhead")
|
||||||
print(" VBlock: Time attributable to a block in a" +
|
print(" VBlock: Time attributable to a block in a" + " Verilog file and line")
|
||||||
" Verilog file and line")
|
print(" VCommon: Time in a Verilated module," + " due to all parts of the design")
|
||||||
print(" VCommon: Time in a Verilated module," +
|
print(" VLib: Time in Verilated common libraries," + " called by the Verilated code")
|
||||||
" due to all parts of the design")
|
|
||||||
print(" VLib: Time in Verilated common libraries," +
|
|
||||||
" called by the Verilated code")
|
|
||||||
print()
|
print()
|
||||||
|
|
||||||
print(" % cumulative self ")
|
print(" % cumulative self ")
|
||||||
@@ -156,13 +151,11 @@ def profcfunc(filename):
|
|||||||
"s type filename and line number") % "design")
|
"s type filename and line number") % "design")
|
||||||
|
|
||||||
cume = 0
|
cume = 0
|
||||||
for func in sorted(vfuncs.keys(),
|
for func in sorted(vfuncs.keys(), key=lambda f: vfuncs[f]['sec'], reverse=True):
|
||||||
key=lambda f: vfuncs[f]['sec'],
|
|
||||||
reverse=True):
|
|
||||||
cume += vfuncs[func]['sec']
|
cume += vfuncs[func]['sec']
|
||||||
print(("%6.2f %9.2f %8.2f %10d %-" + str(design_width) + "s %s") %
|
print(("%6.2f %9.2f %8.2f %10d %-" + str(design_width) + "s %s") %
|
||||||
(vfuncs[func]['pct'], cume, vfuncs[func]['sec'],
|
(vfuncs[func]['pct'], cume, vfuncs[func]['sec'], vfuncs[func]['calls'],
|
||||||
vfuncs[func]['calls'], vfuncs[func]['design'], func))
|
vfuncs[func]['design'], func))
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
@@ -171,7 +164,7 @@ def profcfunc(filename):
|
|||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
allow_abbrev=False,
|
allow_abbrev=False,
|
||||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
description="""Read gprof report created with --prof-cfuncs.
|
description="""Read gprof report created with Verilator --prof-cfuncs
|
||||||
|
|
||||||
Verilator_profcfunc reads a profile report created by gprof. The names of
|
Verilator_profcfunc reads a profile report created by gprof. The names of
|
||||||
the functions are then transformed, assuming the user used Verilator's
|
the functions are then transformed, assuming the user used Verilator's
|
||||||
@@ -180,18 +173,14 @@ in each Verilog block.
|
|||||||
|
|
||||||
For documentation see
|
For documentation see
|
||||||
https://verilator.org/guide/latest/exe_verilator_profcfunc.html""",
|
https://verilator.org/guide/latest/exe_verilator_profcfunc.html""",
|
||||||
epilog=
|
epilog="""Copyright 2002-2025 by Wilson Snyder. This program is free software; you
|
||||||
"""Copyright 2002-2024 by Wilson Snyder. This program is free software; you
|
|
||||||
can redistribute it and/or modify it under the terms of either the GNU
|
can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
|
|
||||||
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
|
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
|
||||||
|
|
||||||
parser.add_argument('--debug',
|
parser.add_argument('--debug', action='store_const', const=9, help='enable debug')
|
||||||
action='store_const',
|
|
||||||
const=9,
|
|
||||||
help='enable debug')
|
|
||||||
parser.add_argument('filename', help='input gprof output to process')
|
parser.add_argument('filename', help='input gprof output to process')
|
||||||
|
|
||||||
Args = parser.parse_args()
|
Args = parser.parse_args()
|
||||||
|
|||||||
+11
-18
@@ -40,7 +40,7 @@ fi
|
|||||||
install-vcddiff() {
|
install-vcddiff() {
|
||||||
TMP_DIR="$(mktemp -d)"
|
TMP_DIR="$(mktemp -d)"
|
||||||
git clone https://github.com/veripool/vcddiff "$TMP_DIR"
|
git clone https://github.com/veripool/vcddiff "$TMP_DIR"
|
||||||
git -C "${TMP_DIR}" checkout e5664be5fe39d353bf3fcb50aa05214ab7ed4ac4
|
git -C "${TMP_DIR}" checkout dca845020668887fd13498c772939814d9264fd5
|
||||||
"$MAKE" -C "${TMP_DIR}"
|
"$MAKE" -C "${TMP_DIR}"
|
||||||
sudo cp "${TMP_DIR}/vcddiff" /usr/local/bin
|
sudo cp "${TMP_DIR}/vcddiff" /usr/local/bin
|
||||||
}
|
}
|
||||||
@@ -55,22 +55,19 @@ if [ "$CI_BUILD_STAGE_NAME" = "build" ]; then
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install ccache help2man libfl-dev ||
|
sudo apt-get install ccache help2man libfl-dev ||
|
||||||
sudo apt-get install ccache help2man libfl-dev
|
sudo apt-get install ccache help2man libfl-dev
|
||||||
if [ "$CI_RUNS_ON" = "ubuntu-20.04" ]; then
|
if [[ ! "$CI_RUNS_ON" =~ "ubuntu-22.04" ]]; then
|
||||||
# Some conflict of libunwind verison on 22.04, can live without it for now
|
# Some conflict of libunwind verison on 22.04, can live without it for now
|
||||||
sudo apt-get install libgoogle-perftools-dev ||
|
sudo apt-get install libgoogle-perftools-dev ||
|
||||||
sudo apt-get install libgoogle-perftools-dev
|
sudo apt-get install libgoogle-perftools-dev
|
||||||
fi
|
fi
|
||||||
if [ "$CI_RUNS_ON" = "ubuntu-20.04" ] || [ "$CI_RUNS_ON" = "ubuntu-22.04" ]; then
|
if [[ "$CI_RUNS_ON" =~ "ubuntu-20.04" ]] || [[ "$CI_RUNS_ON" =~ "ubuntu-22.04" ]] || [[ "$CI_RUNS_ON" =~ "ubuntu-24.04" ]]; then
|
||||||
sudo apt-get install libsystemc libsystemc-dev ||
|
sudo apt-get install libsystemc libsystemc-dev ||
|
||||||
sudo apt-get install libsystemc libsystemc-dev
|
sudo apt-get install libsystemc libsystemc-dev
|
||||||
fi
|
fi
|
||||||
if [ "$CI_RUNS_ON" = "ubuntu-22.04" ]; then
|
if [[ "$CI_RUNS_ON" =~ "ubuntu-22.04" ]] || [[ "$CI_RUNS_ON" =~ "ubuntu-24.04" ]]; then
|
||||||
sudo apt-get install bear mold ||
|
sudo apt-get install bear mold ||
|
||||||
sudo apt-get install bear mold
|
sudo apt-get install bear mold
|
||||||
fi
|
fi
|
||||||
if [ "$COVERAGE" = 1 ]; then
|
|
||||||
yes yes | sudo cpan -fi Parallel::Forker
|
|
||||||
fi
|
|
||||||
elif [ "$CI_OS_NAME" = "osx" ]; then
|
elif [ "$CI_OS_NAME" = "osx" ]; then
|
||||||
brew update
|
brew update
|
||||||
brew install ccache perl gperftools
|
brew install ccache perl gperftools
|
||||||
@@ -92,32 +89,28 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
|
|||||||
sudo apt-get update ||
|
sudo apt-get update ||
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
# libfl-dev needed for internal coverage's test runs
|
# libfl-dev needed for internal coverage's test runs
|
||||||
sudo apt-get install gdb gtkwave lcov libfl-dev ccache jq ||
|
sudo apt-get install gdb gtkwave lcov libfl-dev ccache jq z3 ||
|
||||||
sudo apt-get install gdb gtkwave lcov libfl-dev ccache jq
|
sudo apt-get install gdb gtkwave lcov libfl-dev ccache jq z3
|
||||||
# Required for test_regress/t/t_dist_attributes.pl
|
# Required for test_regress/t/t_dist_attributes.py
|
||||||
if [ "$CI_RUNS_ON" = "ubuntu-22.04" ]; then
|
if [[ "$CI_RUNS_ON" =~ "ubuntu-22.04" ]] || [[ "$CI_RUNS_ON" =~ "ubuntu-24.04" ]]; then
|
||||||
sudo apt-get install python3-clang mold ||
|
sudo apt-get install python3-clang mold ||
|
||||||
sudo apt-get install python3-clang mold
|
sudo apt-get install python3-clang mold
|
||||||
fi
|
fi
|
||||||
if [ "$CI_RUNS_ON" = "ubuntu-20.04" ] || [ "$CI_RUNS_ON" = "ubuntu-22.04" ]; then
|
if [[ "$CI_RUNS_ON" =~ "ubuntu-20.04" ]] || [[ "$CI_RUNS_ON" =~ "ubuntu-22.04" ]] || [[ "$CI_RUNS_ON" =~ "ubuntu-24.04" ]]; then
|
||||||
sudo apt-get install libsystemc-dev ||
|
sudo apt-get install libsystemc-dev ||
|
||||||
sudo apt-get install libsystemc-dev
|
sudo apt-get install libsystemc-dev
|
||||||
fi
|
fi
|
||||||
elif [ "$CI_OS_NAME" = "osx" ]; then
|
elif [ "$CI_OS_NAME" = "osx" ]; then
|
||||||
brew update
|
brew update
|
||||||
# brew cask install gtkwave # fst2vcd hangs at launch, so don't bother
|
# brew cask install gtkwave # fst2vcd hangs at launch, so don't bother
|
||||||
brew install ccache perl jq
|
brew install ccache perl jq z3
|
||||||
elif [ "$CI_OS_NAME" = "freebsd" ]; then
|
elif [ "$CI_OS_NAME" = "freebsd" ]; then
|
||||||
# fst2vcd fails with "Could not open '<input file>', exiting."
|
# fst2vcd fails with "Could not open '<input file>', exiting."
|
||||||
sudo pkg install -y ccache gmake perl5 python3 jq
|
sudo pkg install -y ccache gmake perl5 python3 jq z3
|
||||||
else
|
else
|
||||||
fatal "Unknown os: '$CI_OS_NAME'"
|
fatal "Unknown os: '$CI_OS_NAME'"
|
||||||
fi
|
fi
|
||||||
# Common installs
|
# Common installs
|
||||||
if [ "$CI_RUNS_ON" != "ubuntu-14.04" ]; then
|
|
||||||
CI_CPAN_REPO=https://cpan.org
|
|
||||||
fi
|
|
||||||
yes yes | sudo cpan -M $CI_CPAN_REPO -fi Parallel::Forker
|
|
||||||
install-vcddiff
|
install-vcddiff
|
||||||
# Workaround -fsanitize=address crash
|
# Workaround -fsanitize=address crash
|
||||||
sudo sysctl -w vm.mmap_rnd_bits=28
|
sudo sysctl -w vm.mmap_rnd_bits=28
|
||||||
|
|||||||
+17
-11
@@ -33,6 +33,7 @@ elif [ "$CI_OS_NAME" = "freebsd" ]; then
|
|||||||
else
|
else
|
||||||
fatal "Unknown os: '$CI_OS_NAME'"
|
fatal "Unknown os: '$CI_OS_NAME'"
|
||||||
fi
|
fi
|
||||||
|
NPROC=$(expr $NPROC '+' 1)
|
||||||
|
|
||||||
if [ "$CI_BUILD_STAGE_NAME" = "build" ]; then
|
if [ "$CI_BUILD_STAGE_NAME" = "build" ]; then
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@@ -61,6 +62,7 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
|
|||||||
# Run tests
|
# Run tests
|
||||||
|
|
||||||
export VERILATOR_TEST_NO_CONTRIBUTORS=1 # Separate workflow check
|
export VERILATOR_TEST_NO_CONTRIBUTORS=1 # Separate workflow check
|
||||||
|
export VERILATOR_TEST_NO_LINT_PY=1 # Separate workflow check
|
||||||
|
|
||||||
if [ "$CI_OS_NAME" = "osx" ]; then
|
if [ "$CI_OS_NAME" = "osx" ]; then
|
||||||
export VERILATOR_TEST_NO_GDB=1 # Pain to get GDB to work on OS X
|
export VERILATOR_TEST_NO_GDB=1 # Pain to get GDB to work on OS X
|
||||||
@@ -85,7 +87,7 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Run sanitize on Ubuntu 22.04 only
|
# Run sanitize on Ubuntu 22.04 only
|
||||||
[ "$CI_RUNS_ON" = 'ubuntu-22.04' ] && sanitize='--sanitize' || sanitize=''
|
( [[ "$CI_RUNS_ON" =~ 'ubuntu-22.04' ]] || [[ "$CI_RUNS_ON" =~ 'ubuntu-24.04' ]] ) && sanitize='--sanitize' || sanitize=''
|
||||||
|
|
||||||
TEST_REGRESS=test_regress
|
TEST_REGRESS=test_regress
|
||||||
if [ "$CI_RELOC" == 1 ]; then
|
if [ "$CI_RELOC" == 1 ]; then
|
||||||
@@ -96,6 +98,8 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
|
|||||||
export VERILATOR_ROOT="$RELOC_DIR/relocated-install/share/verilator"
|
export VERILATOR_ROOT="$RELOC_DIR/relocated-install/share/verilator"
|
||||||
TEST_REGRESS="$RELOC_DIR/test_regress"
|
TEST_REGRESS="$RELOC_DIR/test_regress"
|
||||||
mv test_regress "$TEST_REGRESS"
|
mv test_regress "$TEST_REGRESS"
|
||||||
|
NODIST="$RELOC_DIR/nodist"
|
||||||
|
mv nodist "$NODIST"
|
||||||
# Feeling brave?
|
# Feeling brave?
|
||||||
find . -delete
|
find . -delete
|
||||||
ls -la .
|
ls -la .
|
||||||
@@ -105,22 +109,25 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
|
|||||||
ccache -z
|
ccache -z
|
||||||
case $TESTS in
|
case $TESTS in
|
||||||
dist-vlt-0)
|
dist-vlt-0)
|
||||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt $sanitize" DRIVER_HASHSET=--hashset=0/4
|
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean $sanitize" DRIVER_HASHSET=--hashset=0/4
|
||||||
;;
|
;;
|
||||||
dist-vlt-1)
|
dist-vlt-1)
|
||||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt $sanitize" DRIVER_HASHSET=--hashset=1/4
|
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean $sanitize" DRIVER_HASHSET=--hashset=1/4
|
||||||
;;
|
;;
|
||||||
dist-vlt-2)
|
dist-vlt-2)
|
||||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt $sanitize" DRIVER_HASHSET=--hashset=2/4
|
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean $sanitize" DRIVER_HASHSET=--hashset=2/4
|
||||||
;;
|
;;
|
||||||
dist-vlt-3)
|
dist-vlt-3)
|
||||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt $sanitize" DRIVER_HASHSET=--hashset=3/4
|
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean $sanitize" DRIVER_HASHSET=--hashset=3/4
|
||||||
;;
|
;;
|
||||||
vltmt-0)
|
vltmt-0)
|
||||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS=--vltmt DRIVER_HASHSET=--hashset=0/2
|
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt --driver-clean" DRIVER_HASHSET=--hashset=0/3
|
||||||
;;
|
;;
|
||||||
vltmt-1)
|
vltmt-1)
|
||||||
"$MAKE" -C "$TEST_REGRESS" SCENARIOS=--vltmt DRIVER_HASHSET=--hashset=1/2
|
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt --driver-clean" DRIVER_HASHSET=--hashset=1/3
|
||||||
|
;;
|
||||||
|
vltmt-2)
|
||||||
|
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--vltmt --driver-clean" DRIVER_HASHSET=--hashset=2/3
|
||||||
;;
|
;;
|
||||||
coverage-all)
|
coverage-all)
|
||||||
nodist/code_coverage --stages 1-
|
nodist/code_coverage --stages 1-
|
||||||
@@ -192,13 +199,12 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
|
|||||||
fatal "Unknown test: $TESTS"
|
fatal "Unknown test: $TESTS"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# To see load average (1 minute, 5 minute, 15 minute)
|
||||||
|
uptime
|
||||||
# 22.04: ccache -s -v
|
# 22.04: ccache -s -v
|
||||||
ccache -s
|
ccache -s
|
||||||
|
|
||||||
# Upload coverage data
|
|
||||||
if [[ $TESTS == coverage-* ]]; then
|
|
||||||
bash <(cat ci/coverage-upload.sh) -f nodist/obj_dir/coverage/app_total.info
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Unknown build stage
|
# Unknown build stage
|
||||||
|
|||||||
+21
-8
@@ -1,13 +1,26 @@
|
|||||||
|
# DESCRIPTION: Verilator: CI Windows Power Shell - Compile Verilator
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
Set-PSDebug -Trace 1
|
||||||
|
|
||||||
if (-Not (Test-Path $PWD/../.ccache/win_bison.exe)) {
|
if (-Not (Test-Path $PWD/../.ccache/win_bison.exe)) {
|
||||||
git clone --depth 1 https://github.com/lexxmark/winflexbison
|
git clone --depth 1 https://github.com/lexxmark/winflexbison
|
||||||
cd winflexbison
|
cd winflexbison
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake .. --install-prefix $PWD/../../../.ccache
|
cmake .. --install-prefix $PWD/../../../.ccache
|
||||||
cmake --build . --config Release -j 3
|
cmake --build . --config Release -j 3
|
||||||
cmake --install . --prefix $PWD/../../../.ccache
|
cmake --install . --prefix $PWD/../../../.ccache
|
||||||
cd ../..
|
cd ../..
|
||||||
}
|
}
|
||||||
|
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake .. --install-prefix $PWD/../install
|
cmake .. --install-prefix $PWD/../install
|
||||||
|
|||||||
+17
-1
@@ -1,3 +1,16 @@
|
|||||||
|
# DESCRIPTION: Verilator: CI Windows Power Shell - Verilate a test
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
Set-PSDebug -Trace 1
|
||||||
|
|
||||||
cd install
|
cd install
|
||||||
$Env:VERILATOR_ROOT=$PWD
|
$Env:VERILATOR_ROOT=$PWD
|
||||||
cd examples/cmake_tracing_c
|
cd examples/cmake_tracing_c
|
||||||
@@ -5,6 +18,9 @@ mkdir build
|
|||||||
cd build
|
cd build
|
||||||
cmake ..
|
cmake ..
|
||||||
cmake --build . --config Release -j 3
|
cmake --build . --config Release -j 3
|
||||||
Release/example.exe
|
|
||||||
|
# TODO put this back in, see issue# 5163
|
||||||
|
# Release/example.exe
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
Remove-Item -path build -recurse
|
Remove-Item -path build -recurse
|
||||||
|
|||||||
Executable
BIN
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@
|
|||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
FROM ubuntu:22.04
|
FROM ubuntu:24.04
|
||||||
|
|
||||||
# Create the user
|
# Create the user
|
||||||
RUN groupadd verilator \
|
RUN groupadd verilator \
|
||||||
@@ -36,13 +36,16 @@ RUN apt-get update \
|
|||||||
help2man \
|
help2man \
|
||||||
libfl2 \
|
libfl2 \
|
||||||
libfl-dev \
|
libfl-dev \
|
||||||
|
libclang-rt-18-dev \
|
||||||
libgoogle-perftools-dev \
|
libgoogle-perftools-dev \
|
||||||
libsystemc \
|
libsystemc \
|
||||||
libsystemc-dev \
|
libsystemc-dev \
|
||||||
numactl \
|
numactl \
|
||||||
perl \
|
perl \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-distro \
|
||||||
wget \
|
wget \
|
||||||
|
z3 \
|
||||||
zlib1g \
|
zlib1g \
|
||||||
zlib1g-dev \
|
zlib1g-dev \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
@@ -50,8 +53,6 @@ RUN apt-get update \
|
|||||||
|
|
||||||
WORKDIR /tmp
|
WORKDIR /tmp
|
||||||
|
|
||||||
RUN cpan install -fi Parallel::Forker
|
|
||||||
|
|
||||||
RUN git clone https://github.com/veripool/vcddiff.git && \
|
RUN git clone https://github.com/veripool/vcddiff.git && \
|
||||||
make -C vcddiff && \
|
make -C vcddiff && \
|
||||||
cp -p vcddiff/vcddiff /usr/local/bin/vcddiff && \
|
cp -p vcddiff/vcddiff /usr/local/bin/vcddiff && \
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
.. _Verilator Build Docker Container:
|
||||||
|
|
||||||
Verilator Build Docker Container
|
Verilator Build Docker Container
|
||||||
================================
|
================================
|
||||||
|
|
||||||
@@ -11,7 +13,7 @@ Verilator build. It uses the following parameters:
|
|||||||
|
|
||||||
- Source revision (default: master)
|
- 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
|
The container is published as ``verilator/verilator-buildenv`` on `docker
|
||||||
hub
|
hub
|
||||||
@@ -29,18 +31,18 @@ To also run tests:
|
|||||||
|
|
||||||
docker run -ti verilator/verilator-buildenv test
|
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 CC=clang-18 -e CXX=clang++-18 verilator/verilator-buildenv test
|
||||||
|
|
||||||
The tests that involve gdb are not working due to security restrictions.
|
The tests, that involve numactl are not working due to security restrictions.
|
||||||
To run those too:
|
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
|
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
|
working copy on the local filesystem. Mount the local working copy path as
|
||||||
@@ -50,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
|
Rebuilding
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
FROM ubuntu:22.04
|
FROM ubuntu:24.04
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& DEBIAN_FRONTEND=noninteractive \
|
&& DEBIAN_FRONTEND=noninteractive \
|
||||||
@@ -48,7 +48,8 @@ RUN git clone "${REPO}" verilator && \
|
|||||||
make && \
|
make && \
|
||||||
make install && \
|
make install && \
|
||||||
cd .. && \
|
cd .. && \
|
||||||
rm -r verilator
|
rm -r verilator && \
|
||||||
|
ccache -C
|
||||||
|
|
||||||
COPY verilator-wrap.sh /usr/local/bin/verilator-wrap.sh
|
COPY verilator-wrap.sh /usr/local/bin/verilator-wrap.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
Verilator Executable Docker Container
|
Verilator Executable Docker Container
|
||||||
@@ -11,10 +11,11 @@ easily as a docker image, e.g.:
|
|||||||
|
|
||||||
docker run -ti verilator/verilator:latest --version
|
docker run -ti verilator/verilator:latest --version
|
||||||
|
|
||||||
This will install the container, run the latest Verilator and print
|
This will pull the container from `docker hub
|
||||||
|
<https://hub.docker.com/r/verilator/verilator>`_, run the latest Verilator and print
|
||||||
Verilator's version.
|
Verilator's version.
|
||||||
|
|
||||||
Containers are automatically built for all released versions, so you may
|
Containers are automatically built and pushed to docker hub for all released versions, so you may
|
||||||
easily compare results across versions, e.g.:
|
easily compare results across versions, e.g.:
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|||||||
+16
-18
@@ -1,6 +1,7 @@
|
|||||||
|
---
|
||||||
# DESCRIPTION: codecov.io config
|
# DESCRIPTION: codecov.io config
|
||||||
#
|
#
|
||||||
# Copyright 2020-2024 by Wilson Snyder. This program is free software; you
|
# Copyright 2020-2025 by Wilson Snyder. This program is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
@@ -8,31 +9,28 @@
|
|||||||
####################
|
####################
|
||||||
# Validate:
|
# Validate:
|
||||||
# curl --data-binary @codecov.yml https://codecov.io/validate
|
# curl --data-binary @codecov.yml https://codecov.io/validate
|
||||||
|
#
|
||||||
codecov:
|
codecov:
|
||||||
require_ci_to_pass: no
|
require_ci_to_pass: false
|
||||||
|
|
||||||
coverage:
|
coverage:
|
||||||
precision: 2
|
precision: 2
|
||||||
round: down
|
round: down
|
||||||
range: "50...100"
|
range: 50...100
|
||||||
ignore:
|
ignore:
|
||||||
- "ci"
|
- "ci" #
|
||||||
- "docs"
|
- "docs" #
|
||||||
- "examples"
|
- "examples" #
|
||||||
- "include/gtkwave"
|
- "include/gtkwave" #
|
||||||
- "include/vltstd"
|
- "include/vltstd" #
|
||||||
- "test_regress"
|
- "test_regress" #
|
||||||
|
|
||||||
parsers:
|
parsers:
|
||||||
gcov:
|
gcov:
|
||||||
branch_detection:
|
branch_detection:
|
||||||
conditional: yes
|
conditional: true
|
||||||
loop: yes
|
loop: true
|
||||||
method: no
|
method: false
|
||||||
macro: no
|
macro: false
|
||||||
|
|
||||||
comment:
|
comment:
|
||||||
layout: "reach,diff,flags,tree"
|
layout: "reach,diff,flags,tree"
|
||||||
behavior: default
|
behavior: default
|
||||||
require_changes: yes
|
require_changes: true
|
||||||
|
|||||||
+95
-38
@@ -1,16 +1,16 @@
|
|||||||
# DESCRIPTION: Process this file with autoconf to produce a configure script.
|
# DESCRIPTION: Process this file with autoconf to produce a configure script.
|
||||||
#
|
#
|
||||||
# Copyright 2003-2024 by Wilson Snyder. Verilator is free software; you
|
# Copyright 2003-2025 by Wilson Snyder. Verilator is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU Lesser
|
# can redistribute it and/or modify it under the terms of either the GNU Lesser
|
||||||
# General Public License Version 3 or the Perl Artistic License Version 2.0.
|
# General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
# When releasing, also update header of Changes file, and CmakeLists.txt,
|
# When releasing, also update header of Changes file, and CMakeLists.txt,
|
||||||
# and commit using "devel release" or "Version bump" message
|
# and commit using "devel release" or "Version bump" message
|
||||||
# Then 'make maintainer-dist'
|
# Then 'make maintainer-dist'
|
||||||
#AC_INIT([Verilator],[#.### YYYY-MM-DD])
|
#AC_INIT([Verilator],[#.### YYYY-MM-DD])
|
||||||
#AC_INIT([Verilator],[#.### devel])
|
#AC_INIT([Verilator],[#.### devel])
|
||||||
AC_INIT([Verilator],[5.024 2024-04-05],
|
AC_INIT([Verilator],[5.038 2025-07-08],
|
||||||
[https://verilator.org],
|
[https://verilator.org],
|
||||||
[verilator],[https://verilator.org])
|
[verilator],[https://verilator.org])
|
||||||
|
|
||||||
@@ -29,6 +29,9 @@ AC_DEFINE_UNQUOTED([PACKAGE_VERSION_STRING_CHAR],
|
|||||||
[Package version as a number])
|
[Package version as a number])
|
||||||
AC_SUBST(PACKAGE_VERSION_STRING_CHAR)
|
AC_SUBST(PACKAGE_VERSION_STRING_CHAR)
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
## Arguments/flag checking
|
||||||
|
|
||||||
# Ignore automake flags passed by Ubuntu builds
|
# Ignore automake flags passed by Ubuntu builds
|
||||||
AC_ARG_ENABLE([dependency-tracking],
|
AC_ARG_ENABLE([dependency-tracking],
|
||||||
[AS_HELP_STRING([--disable-dependency-tracking], [ignored])])
|
[AS_HELP_STRING([--disable-dependency-tracking], [ignored])])
|
||||||
@@ -134,6 +137,33 @@ AC_ARG_ENABLE([longtests],
|
|||||||
AC_SUBST(CFG_WITH_LONGTESTS)
|
AC_SUBST(CFG_WITH_LONGTESTS)
|
||||||
AC_MSG_RESULT($CFG_WITH_LONGTESTS)
|
AC_MSG_RESULT($CFG_WITH_LONGTESTS)
|
||||||
|
|
||||||
|
AC_CHECK_PROG(HAVE_Z3,z3,yes)
|
||||||
|
AC_CHECK_PROG(HAVE_CVC5,cvc5,yes)
|
||||||
|
AC_CHECK_PROG(HAVE_CVC4,cvc4,yes)
|
||||||
|
|
||||||
|
# Special Substitutions - CFG_WITH_SOLVER
|
||||||
|
AC_MSG_CHECKING(for SMT solver)
|
||||||
|
AC_ARG_WITH([solver],
|
||||||
|
[AS_HELP_STRING([--with-solver='z3 --in'],
|
||||||
|
[set default SMT solver for constrained randomization])],
|
||||||
|
[CFG_WITH_SOLVER="${withval}"],
|
||||||
|
[CFG_WITH_SOLVER=no
|
||||||
|
if test "x$HAVE_Z3" = "xyes"; then
|
||||||
|
CFG_WITH_SOLVER="z3 --in"
|
||||||
|
elif test "x$HAVE_CVC5" = "xyes"; then
|
||||||
|
CFG_WITH_SOLVER="cvc5 --incremental"
|
||||||
|
elif test "x$HAVE_CVC4" = "xyes"; then
|
||||||
|
CFG_WITH_SOLVER="cvc4 --lang=smt2 --incremental"
|
||||||
|
fi]
|
||||||
|
)
|
||||||
|
AC_SUBST(CFG_WITH_SOLVER)
|
||||||
|
AC_MSG_RESULT($CFG_WITH_SOLVER)
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
## Compiler checks
|
||||||
|
|
||||||
|
AC_MSG_RESULT([compiler CXX inbound is set to... $CXX])
|
||||||
|
|
||||||
# Compiler flags (ensure they are not empty to avoid configure defaults)
|
# Compiler flags (ensure they are not empty to avoid configure defaults)
|
||||||
CFLAGS="$CFLAGS "
|
CFLAGS="$CFLAGS "
|
||||||
CPPFLAGS="$CPPFLAGS "
|
CPPFLAGS="$CPPFLAGS "
|
||||||
@@ -146,8 +176,10 @@ AC_PROG_CXX
|
|||||||
AC_PROG_INSTALL
|
AC_PROG_INSTALL
|
||||||
|
|
||||||
AC_LANG_PUSH(C++)
|
AC_LANG_PUSH(C++)
|
||||||
cxx_version=$($CXX --version | head -1)
|
CFG_CXX_VERSION=`$CXX --version | head -1`
|
||||||
AC_MSG_RESULT([compiler is $CXX --version = $cxx_version])
|
AC_MSG_RESULT([compiler $CXX --version = $CFG_CXX_VERSION])
|
||||||
|
AC_SUBST(CFG_CXX_VERSION)
|
||||||
|
|
||||||
AC_MSG_CHECKING([that C++ compiler can compile simple program])
|
AC_MSG_CHECKING([that C++ compiler can compile simple program])
|
||||||
AC_RUN_IFELSE(
|
AC_RUN_IFELSE(
|
||||||
[AC_LANG_SOURCE([int main() { return 0; }])],
|
[AC_LANG_SOURCE([int main() { return 0; }])],
|
||||||
@@ -160,24 +192,26 @@ if test "x$AR" = "x" ; then
|
|||||||
AC_MSG_ERROR([Cannot find "ar" in your PATH, please install it])
|
AC_MSG_ERROR([Cannot find "ar" in your PATH, please install it])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_PATH_PROG(PERL,perl)
|
AC_CHECK_PROG(PERL,perl,perl)
|
||||||
if test "x$PERL" = "x" ; then
|
if test "x$PERL" = "x" ; then
|
||||||
AC_MSG_ERROR([Cannot find "perl" in your PATH, please install it])
|
AC_MSG_ERROR([Cannot find "perl" in your PATH, please install it])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_PATH_PROG(PYTHON3,python3)
|
AC_CHECK_PROG(PYTHON3,python3,python3)
|
||||||
if test "x$PYTHON3" = "x" ; then
|
if test "x$PYTHON3" = "x" ; then
|
||||||
AC_MSG_ERROR([Cannot find "python3" in your PATH, please install it])
|
AC_MSG_ERROR([Cannot find "python3" in your PATH, please install it])
|
||||||
fi
|
fi
|
||||||
|
python3_version=$($PYTHON3 --version | head -1)
|
||||||
|
AC_MSG_RESULT([$PYTHON3 --version = $python3_version])
|
||||||
|
|
||||||
AC_PATH_PROG(LEX,flex)
|
AC_CHECK_PROG(LEX,flex,flex)
|
||||||
if test "x$LEX" = "x" ; then
|
if test "x$LEX" = "x" ; then
|
||||||
AC_MSG_ERROR([Cannot find "flex" in your PATH, please install it])
|
AC_MSG_ERROR([Cannot find "flex" in your PATH, please install it])
|
||||||
fi
|
fi
|
||||||
flex_version=$($LEX --version | head -1)
|
flex_version=$($LEX --version | head -1)
|
||||||
AC_MSG_RESULT([$LEX --version = $flex_version])
|
AC_MSG_RESULT([$LEX --version = $flex_version])
|
||||||
|
|
||||||
AC_PATH_PROG(YACC,bison)
|
AC_CHECK_PROG(YACC,bison,bison)
|
||||||
if test "x$YACC" = "x" ; then
|
if test "x$YACC" = "x" ; then
|
||||||
AC_MSG_ERROR([Cannot find "bison" in your PATH, please install it])
|
AC_MSG_ERROR([Cannot find "bison" in your PATH, please install it])
|
||||||
fi
|
fi
|
||||||
@@ -266,6 +300,43 @@ AC_DEFUN([_MY_CXX_CHECK_OPT],
|
|||||||
_MY_CXX_CHECK_IFELSE($2, $1="$$1 $2")
|
_MY_CXX_CHECK_IFELSE($2, $1="$$1 $2")
|
||||||
])
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([_MY_CXX_CHECK_CORO_SET],
|
||||||
|
[# _MY_CXX_CHECK_CORO_SET(variable,option)
|
||||||
|
# Check if compiler supports coroutines with specific option. If it does,
|
||||||
|
# set variable to option, only if not previously set.
|
||||||
|
# Define HAVE_COROUTINES if supported.
|
||||||
|
if test "$$1" = ""; then
|
||||||
|
if test "$2" != ""; then
|
||||||
|
_my_msg_opt=" with $2"
|
||||||
|
else
|
||||||
|
_my_msg_opt=""
|
||||||
|
fi
|
||||||
|
AC_MSG_CHECKING([whether coroutines are supported by $CXX$_my_msg_opt])
|
||||||
|
ACO_SAVE_CXXFLAGS="$CXXFLAGS"
|
||||||
|
CXXFLAGS="$CXXFLAGS $2"
|
||||||
|
AC_LINK_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM([
|
||||||
|
#if defined(__clang__) && !defined(__cpp_impl_coroutine)
|
||||||
|
#define __cpp_impl_coroutine 1
|
||||||
|
#endif
|
||||||
|
#include <coroutine>
|
||||||
|
],[[std::coroutine_handle<> h;]])],
|
||||||
|
[_my_result=yes],
|
||||||
|
[AC_LINK_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM(
|
||||||
|
[#include <experimental/coroutine>],
|
||||||
|
[[std::experimental::coroutine_handle<> h;]])],
|
||||||
|
[_my_result=yes],
|
||||||
|
[_my_result=no])])
|
||||||
|
AC_MSG_RESULT($_my_result)
|
||||||
|
CXXFLAGS="$ACO_SAVE_CXXFLAGS"
|
||||||
|
if test "$_my_result" = "yes" ; then
|
||||||
|
$1="$2"
|
||||||
|
AC_DEFINE([HAVE_COROUTINES],[1],[Defined if coroutines are supported by $CXX])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
AC_DEFUN([_MY_LDLIBS_CHECK_FLAG],
|
AC_DEFUN([_MY_LDLIBS_CHECK_FLAG],
|
||||||
[# _MY_LDLIBS_CHECK_FLAG(flag) -- Check if linker supports specific options
|
[# _MY_LDLIBS_CHECK_FLAG(flag) -- Check if linker supports specific options
|
||||||
# Set $_my_result appropriately
|
# Set $_my_result appropriately
|
||||||
@@ -351,39 +422,20 @@ _MY_CXX_CHECK_OPT(CFG_CXXFLAGS_WEXTRA,-Wthread-safety)
|
|||||||
AC_SUBST(CFG_CXXFLAGS_WEXTRA)
|
AC_SUBST(CFG_CXXFLAGS_WEXTRA)
|
||||||
|
|
||||||
# Flags for coroutine support for dynamic scheduling
|
# Flags for coroutine support for dynamic scheduling
|
||||||
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines-ts)
|
_MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES, "")
|
||||||
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines)
|
_MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines-ts)
|
||||||
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines-ts -Wno-deprecated-experimental-coroutine)
|
_MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines)
|
||||||
|
_MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines-ts -Wno-deprecated-experimental-coroutine)
|
||||||
|
_MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES,-std=gnu++20)
|
||||||
AC_SUBST(CFG_CXXFLAGS_COROUTINES)
|
AC_SUBST(CFG_CXXFLAGS_COROUTINES)
|
||||||
|
|
||||||
# HAVE_COROUTINES
|
|
||||||
# Check if coroutines are supported at all
|
|
||||||
AC_MSG_CHECKING([whether coroutines are supported by $CXX])
|
|
||||||
ACO_SAVE_CXXFLAGS="$CXXFLAGS"
|
|
||||||
CXXFLAGS="$CXXFLAGS $CFG_CXXFLAGS_COROUTINES"
|
|
||||||
AC_LINK_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([
|
|
||||||
#ifdef __clang__
|
|
||||||
#define __cpp_impl_coroutine 1
|
|
||||||
#endif
|
|
||||||
#include <coroutine>
|
|
||||||
],[[]])],
|
|
||||||
[_my_result=yes
|
|
||||||
AC_DEFINE([HAVE_COROUTINES],[1],[Defined if coroutines are supported by $CXX])],
|
|
||||||
[AC_LINK_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([#include <experimental/coroutine>],[[]])],
|
|
||||||
[_my_result=yes
|
|
||||||
AC_DEFINE([HAVE_COROUTINES],[1],[Defined if coroutines are supported by $CXX])],
|
|
||||||
[_my_result=no])])
|
|
||||||
AC_MSG_RESULT($_my_result)
|
|
||||||
CXXFLAGS="$ACO_SAVE_CXXFLAGS"
|
|
||||||
AC_SUBST(HAVE_COROUTINES)
|
AC_SUBST(HAVE_COROUTINES)
|
||||||
|
|
||||||
# Flags for compiling Verilator internals including parser always
|
# Flags for compiling Verilator internals including parser always
|
||||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-Qunused-arguments)
|
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-Qunused-arguments)
|
||||||
_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)
|
_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)
|
||||||
AC_SUBST(CFG_CXXFLAGS_SRC)
|
AC_SUBST(CFG_CXXFLAGS_SRC)
|
||||||
|
|
||||||
# Flags for compiling Verilator parser always (in addition to above CFG_CXXFLAGS_SRC)
|
# Flags for compiling Verilator parser always (in addition to above CFG_CXXFLAGS_SRC)
|
||||||
@@ -418,6 +470,7 @@ CFG_CXX_FLAGS_CMAKE="-faligned-new"
|
|||||||
m4_foreach([cflag],[
|
m4_foreach([cflag],[
|
||||||
[-fbracket-depth=4096],
|
[-fbracket-depth=4096],
|
||||||
[-fcf-protection=none],
|
[-fcf-protection=none],
|
||||||
|
[-Xclang -fno-pch-timestamp],
|
||||||
[-mno-cet],
|
[-mno-cet],
|
||||||
[-Qunused-arguments],
|
[-Qunused-arguments],
|
||||||
[-Wno-bool-operation],
|
[-Wno-bool-operation],
|
||||||
@@ -427,6 +480,7 @@ m4_foreach([cflag],[
|
|||||||
[-Wno-parentheses-equality],
|
[-Wno-parentheses-equality],
|
||||||
[-Wno-shadow],
|
[-Wno-shadow],
|
||||||
[-Wno-sign-compare],
|
[-Wno-sign-compare],
|
||||||
|
[-Wno-subobject-linkage],
|
||||||
[-Wno-tautological-bitwise-compare],
|
[-Wno-tautological-bitwise-compare],
|
||||||
[-Wno-tautological-compare],
|
[-Wno-tautological-compare],
|
||||||
[-Wno-uninitialized],
|
[-Wno-uninitialized],
|
||||||
@@ -463,7 +517,7 @@ if test "$CFG_ENABLE_PARTIAL_STATIC" = "yes"; then
|
|||||||
_MY_LDLIBS_CHECK_OPT(CFG_LDFLAGS_SRC, -static-libgcc)
|
_MY_LDLIBS_CHECK_OPT(CFG_LDFLAGS_SRC, -static-libgcc)
|
||||||
_MY_LDLIBS_CHECK_OPT(CFG_LDFLAGS_SRC, -static-libstdc++)
|
_MY_LDLIBS_CHECK_OPT(CFG_LDFLAGS_SRC, -static-libstdc++)
|
||||||
_MY_LDLIBS_CHECK_OPT(CFG_LDFLAGS_SRC, -Xlinker -gc-sections)
|
_MY_LDLIBS_CHECK_OPT(CFG_LDFLAGS_SRC, -Xlinker -gc-sections)
|
||||||
LTCMALLOC=-l:libtcmalloc_minimal.a
|
LTCMALLOC="-Wl,--whole-archive -l:libtcmalloc_minimal.a -Wl,--no-whole-archive"
|
||||||
else
|
else
|
||||||
LTCMALLOC=-ltcmalloc_minimal
|
LTCMALLOC=-ltcmalloc_minimal
|
||||||
fi
|
fi
|
||||||
@@ -487,7 +541,7 @@ _MY_LDLIBS_CHECK_IFELSE(
|
|||||||
[if test "$CFG_WITH_TCMALLOC" != "no"; then
|
[if test "$CFG_WITH_TCMALLOC" != "no"; then
|
||||||
CFG_LIBS="$LTCMALLOC $CFG_LIBS";
|
CFG_LIBS="$LTCMALLOC $CFG_LIBS";
|
||||||
# If using tcmalloc, add some extra options to make the compiler not assume
|
# If using tcmalloc, add some extra options to make the compiler not assume
|
||||||
# it is using it's own versions of the standard library functions
|
# it is using its own versions of the standard library functions
|
||||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-malloc)
|
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-malloc)
|
||||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-calloc)
|
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-calloc)
|
||||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-realloc)
|
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-realloc)
|
||||||
@@ -584,6 +638,9 @@ AC_SUBST(HAVE_SYSTEMC)
|
|||||||
|
|
||||||
# Checks for system services
|
# Checks for system services
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
## Output
|
||||||
|
|
||||||
# Other install directories
|
# Other install directories
|
||||||
pkgdatadir=${datadir}/verilator
|
pkgdatadir=${datadir}/verilator
|
||||||
AC_SUBST(pkgdatadir)
|
AC_SUBST(pkgdatadir)
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ This contributing document contains some suggestions that may make
|
|||||||
contributions flow more efficiently.
|
contributions flow more efficiently.
|
||||||
|
|
||||||
|
|
||||||
Did you find a bug?
|
Did you find a Verilator bug?
|
||||||
-------------------
|
-----------------------------
|
||||||
|
|
||||||
- Please **ensure the bug was not already reported** by searching
|
- Please **ensure the bug was not already reported** by searching
|
||||||
`Verilator Issues <https://verilator.org/issues>`__.
|
`Verilator Issues <https://verilator.org/issues>`__.
|
||||||
@@ -28,8 +28,8 @@ Did you find a bug?
|
|||||||
<https://github.com/verilator/verilator/blob/master/docs/internals.rst>`__.
|
<https://github.com/verilator/verilator/blob/master/docs/internals.rst>`__.
|
||||||
|
|
||||||
|
|
||||||
Did you write a patch that fixes a bug?
|
Did you write a patch that fixes a Verilator bug?
|
||||||
---------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
- Please `Open a new Verilator issue <https://verilator.org/issues/new>`__
|
- Please `Open a new Verilator issue <https://verilator.org/issues/new>`__
|
||||||
if there is not one already describing the bug.
|
if there is not one already describing the bug.
|
||||||
@@ -72,8 +72,8 @@ Did you write a patch that fixes a bug?
|
|||||||
- Most important is we get your patch.
|
- Most important is we get your patch.
|
||||||
|
|
||||||
|
|
||||||
Do you have questions?
|
Do you have questions on Verilator?
|
||||||
----------------------
|
-----------------------------------
|
||||||
|
|
||||||
- Please see FAQ section and rest of the `Verilator
|
- Please see FAQ section and rest of the `Verilator
|
||||||
manual <https://verilator.org/verilator_doc.html>`__, or `Verilator
|
manual <https://verilator.org/verilator_doc.html>`__, or `Verilator
|
||||||
|
|||||||
+63
-7
@@ -3,60 +3,79 @@ under the Developer Certificate of Origin (https://developercertificate.org/).
|
|||||||
|
|
||||||
Please see the Verilator manual for 200+ additional contributors. Thanks to all.
|
Please see the Verilator manual for 200+ additional contributors. Thanks to all.
|
||||||
|
|
||||||
|
404allen404
|
||||||
Adam Bagley
|
Adam Bagley
|
||||||
Adrian Sampson
|
Adrian Sampson
|
||||||
Adrien Le Masle
|
Adrien Le Masle
|
||||||
Ahmed El-Mahmoudy
|
Ahmed El-Mahmoudy
|
||||||
|
Aidan McNay
|
||||||
Aleksander Kiryk
|
Aleksander Kiryk
|
||||||
Alex Chadwick
|
Alex Chadwick
|
||||||
Àlex Torregrosa
|
Alex Solomatnikov
|
||||||
Aliaksei Chapyzhenka
|
Aliaksei Chapyzhenka
|
||||||
Ameya Vikram Singh
|
Ameya Vikram Singh
|
||||||
|
Andrea Calabrese
|
||||||
Andreas Kuster
|
Andreas Kuster
|
||||||
Andrei Kostovski
|
Andrei Kostovski
|
||||||
Andrew Miloradovsky
|
Andrew Miloradovsky
|
||||||
Andrew Nolte
|
Andrew Nolte
|
||||||
|
Andrew Voznytsa
|
||||||
Anthony Donlon
|
Anthony Donlon
|
||||||
|
Anthony Moore
|
||||||
Arkadiusz Kozdra
|
Arkadiusz Kozdra
|
||||||
|
Arthur Rosa
|
||||||
Aylon Chaim Porat
|
Aylon Chaim Porat
|
||||||
Bartłomiej Chmiel
|
Bartłomiej Chmiel
|
||||||
|
Brian Li
|
||||||
Cameron Kirk
|
Cameron Kirk
|
||||||
Chih-Mao Chen
|
Chih-Mao Chen
|
||||||
|
Chris Bachhuber
|
||||||
Chris Randall
|
Chris Randall
|
||||||
|
Christopher Taylor
|
||||||
Chuxuan Wang
|
Chuxuan Wang
|
||||||
Chykon
|
Chykon
|
||||||
Conor McCullough
|
Conor McCullough
|
||||||
Dan Petrisko
|
Dan Petrisko
|
||||||
Daniel Bates
|
Daniel Bates
|
||||||
|
Dave Sargeant
|
||||||
David Horton
|
David Horton
|
||||||
David Ledger
|
David Ledger
|
||||||
David Metz
|
David Metz
|
||||||
David Stanford
|
David Stanford
|
||||||
David Turner
|
David Turner
|
||||||
|
Dercury
|
||||||
|
Diego Roux
|
||||||
|
Dominick Grochowina
|
||||||
Don Williamson
|
Don Williamson
|
||||||
Drew Ranck
|
Drew Ranck
|
||||||
Drew Taussig
|
Drew Taussig
|
||||||
Driss Hafdi
|
Driss Hafdi
|
||||||
Edgar E. Iglesias
|
Edgar E. Iglesias
|
||||||
|
Eric Müller
|
||||||
Eric Rippey
|
Eric Rippey
|
||||||
Ethan Sifferman
|
Ethan Sifferman
|
||||||
Eyck Jentzsch
|
Eyck Jentzsch
|
||||||
|
Fabian Keßler
|
||||||
Fan Shupei
|
Fan Shupei
|
||||||
february cozzocrea
|
|
||||||
Felix Neumärker
|
Felix Neumärker
|
||||||
Felix Yan
|
Felix Yan
|
||||||
Frans Skarman
|
Frans Skarman
|
||||||
Fuad Ismail
|
Fuad Ismail
|
||||||
|
Furqan Nadir
|
||||||
G-A. Kamendje
|
G-A. Kamendje
|
||||||
Garrett Smith
|
Garrett Smith
|
||||||
Geza Lore
|
Geza Lore
|
||||||
Gianfranco Costamagna
|
Gianfranco Costamagna
|
||||||
|
Gijs Burghoorn
|
||||||
|
Gilberto Abram
|
||||||
Glen Gibb
|
Glen Gibb
|
||||||
Gökçe Aydos
|
|
||||||
Graham Rushton
|
Graham Rushton
|
||||||
|
Greg Davill
|
||||||
Guokai Chen
|
Guokai Chen
|
||||||
Gus Smith
|
Gus Smith
|
||||||
Gustav Svensk
|
Gustav Svensk
|
||||||
|
Gökçe Aydos
|
||||||
|
Han Qi
|
||||||
Harald Heckmann
|
Harald Heckmann
|
||||||
Hennadii Chernyshchyk
|
Hennadii Chernyshchyk
|
||||||
Howard Su
|
Howard Su
|
||||||
@@ -64,12 +83,13 @@ Huang Rui
|
|||||||
Huanghuang Zhou
|
Huanghuang Zhou
|
||||||
HungMingWu
|
HungMingWu
|
||||||
HyungKi Jeong
|
HyungKi Jeong
|
||||||
Ícaro Lima
|
Igor Zaworski
|
||||||
Ilya Barkov
|
Ilya Barkov
|
||||||
Iru Cai
|
Iru Cai
|
||||||
Ivan Vnučec
|
Ivan Vnučec
|
||||||
Iztok Jeras
|
Iztok Jeras
|
||||||
Jake Merdich
|
Jake Merdich
|
||||||
|
James Bailey
|
||||||
James Hanlon
|
James Hanlon
|
||||||
James Hutchinson
|
James Hutchinson
|
||||||
James Pallister
|
James Pallister
|
||||||
@@ -77,18 +97,21 @@ James Shi
|
|||||||
Jamey Hicks
|
Jamey Hicks
|
||||||
Jamie Iles
|
Jamie Iles
|
||||||
Jan Van Winkel
|
Jan Van Winkel
|
||||||
Jiangjie Weng
|
|
||||||
Jean Berniolles
|
Jean Berniolles
|
||||||
Jeremy Bennett
|
Jeremy Bennett
|
||||||
Jesse Taube
|
Jesse Taube
|
||||||
Jevin Sweval
|
Jevin Sweval
|
||||||
Jiacheng Qian
|
Jiacheng Qian
|
||||||
Jiamin Zhu
|
Jiamin Zhu
|
||||||
|
Jiangjie Weng
|
||||||
Jinyan Xu
|
Jinyan Xu
|
||||||
|
Jitesh Nayak
|
||||||
Jiuyang Liu
|
Jiuyang Liu
|
||||||
|
Joel Bodenmann
|
||||||
Joey Liu
|
Joey Liu
|
||||||
John Coiner
|
John Coiner
|
||||||
John Demme
|
John Demme
|
||||||
|
John Khoo
|
||||||
John Wehle
|
John Wehle
|
||||||
Jonathan Drolet
|
Jonathan Drolet
|
||||||
Jonathan Schröter
|
Jonathan Schröter
|
||||||
@@ -112,8 +135,13 @@ Kritik Bhimani
|
|||||||
Krzysztof Bieganski
|
Krzysztof Bieganski
|
||||||
Krzysztof Boronski
|
Krzysztof Boronski
|
||||||
Krzysztof Boroński
|
Krzysztof Boroński
|
||||||
|
Krzysztof Obłonczek
|
||||||
|
Krzysztof Starecki
|
||||||
|
Krzysztof Sychla
|
||||||
Kuba Ober
|
Kuba Ober
|
||||||
Larry Doolittle
|
Larry Doolittle
|
||||||
|
Liam Braun
|
||||||
|
Luca Colagrande
|
||||||
Ludwig Rogiers
|
Ludwig Rogiers
|
||||||
Lukasz Dalek
|
Lukasz Dalek
|
||||||
Maarten De Braekeleer
|
Maarten De Braekeleer
|
||||||
@@ -126,28 +154,39 @@ Marlon James
|
|||||||
Marshal Qiao
|
Marshal Qiao
|
||||||
Martin Schmidt
|
Martin Schmidt
|
||||||
Martin Stadler
|
Martin Stadler
|
||||||
|
Mateusz Gancarz
|
||||||
Matthew Ballance
|
Matthew Ballance
|
||||||
|
Michael Bikovitsky
|
||||||
Michael Killough
|
Michael Killough
|
||||||
Michaël Lefebvre
|
|
||||||
Michal Czyz
|
Michal Czyz
|
||||||
|
Michaël Lefebvre
|
||||||
Mike Popoloski
|
Mike Popoloski
|
||||||
Miodrag Milanović
|
Miodrag Milanović
|
||||||
Mladen Slijepcevic
|
Mladen Slijepcevic
|
||||||
Morten Borup Petersen
|
Morten Borup Petersen
|
||||||
Mostafa Gamal
|
Mostafa Gamal
|
||||||
|
Moubarak Jeje
|
||||||
Nandu Raj
|
Nandu Raj
|
||||||
|
Natan Kreimer
|
||||||
|
Nathan Graybeal
|
||||||
Nathan Kohagen
|
Nathan Kohagen
|
||||||
Nathan Myers
|
Nathan Myers
|
||||||
|
Nick Brereton
|
||||||
Nolan Poe
|
Nolan Poe
|
||||||
Oleh Maksymenko
|
Oleh Maksymenko
|
||||||
Patrick Stewart
|
Patrick Stewart
|
||||||
|
Paul Bowen-Huggett
|
||||||
Paul Swirhun
|
Paul Swirhun
|
||||||
Paul Wright
|
Paul Wright
|
||||||
|
Pawel Jewstafjew
|
||||||
Pawel Sagan
|
Pawel Sagan
|
||||||
Pengcheng Xu
|
Pengcheng Xu
|
||||||
|
Peter Birch
|
||||||
Peter Debacker
|
Peter Debacker
|
||||||
Peter Horvath
|
Peter Horvath
|
||||||
Peter Monsson
|
Peter Monsson
|
||||||
|
Petr Nohavica
|
||||||
|
Philip Axer
|
||||||
Philipp Wagner
|
Philipp Wagner
|
||||||
Pierre-Henri Horrein
|
Pierre-Henri Horrein
|
||||||
Pieter Kapsenberg
|
Pieter Kapsenberg
|
||||||
@@ -157,15 +196,20 @@ Quentin Corradi
|
|||||||
Rafal Kapuscik
|
Rafal Kapuscik
|
||||||
Rasfunk
|
Rasfunk
|
||||||
Raynard Qiao
|
Raynard Qiao
|
||||||
|
Ricardo Barbedo
|
||||||
Richard Myers
|
Richard Myers
|
||||||
Risto Pejašinović
|
Risto Pejašinović
|
||||||
Robert Balas
|
Robert Balas
|
||||||
|
Robin Heinemann
|
||||||
Rupert Swarbrick
|
Rupert Swarbrick
|
||||||
|
Ryan Ziegler
|
||||||
Ryszard Rozak
|
Ryszard Rozak
|
||||||
Samuel Riedel
|
Samuel Riedel
|
||||||
Sean Cross
|
Sean Cross
|
||||||
Sebastien Van Cauwenberghe
|
Sebastien Van Cauwenberghe
|
||||||
Sergi Granell
|
Sergi Granell
|
||||||
|
Seth Pellegrino
|
||||||
|
Shou-Li Hsu
|
||||||
Srinivasan Venkataramanan
|
Srinivasan Venkataramanan
|
||||||
Stefan Wallentowitz
|
Stefan Wallentowitz
|
||||||
Stephen Henry
|
Stephen Henry
|
||||||
@@ -175,16 +219,21 @@ Sören Tempel
|
|||||||
Teng Huang
|
Teng Huang
|
||||||
Tim Hutt
|
Tim Hutt
|
||||||
Tim Snyder
|
Tim Snyder
|
||||||
|
Tobias Jensen
|
||||||
Tobias Rosenkranz
|
Tobias Rosenkranz
|
||||||
Tobias Wölfel
|
Tobias Wölfel
|
||||||
Todd Strader
|
Todd Strader
|
||||||
|
Tom Manner
|
||||||
Tomasz Gorochowik
|
Tomasz Gorochowik
|
||||||
Topa Topino
|
Topa Topino
|
||||||
Toru Niina
|
Toru Niina
|
||||||
|
Trung Nguyen
|
||||||
Tudor Timi
|
Tudor Timi
|
||||||
Tymoteusz Blazejczyk
|
Tymoteusz Blazejczyk
|
||||||
|
Udaya Raj Subedi
|
||||||
Udi Finkelstein
|
Udi Finkelstein
|
||||||
Unai Martinez-Corral
|
Unai Martinez-Corral
|
||||||
|
Valentin Atepalikhin
|
||||||
Varun Koyyalagunta
|
Varun Koyyalagunta
|
||||||
Vassilis Papaefstathiou
|
Vassilis Papaefstathiou
|
||||||
Veripool API Bot
|
Veripool API Bot
|
||||||
@@ -194,6 +243,8 @@ William D. Jones
|
|||||||
Wilson Snyder
|
Wilson Snyder
|
||||||
Xi Zhang
|
Xi Zhang
|
||||||
Yan Xu
|
Yan Xu
|
||||||
|
Yangyu Chen
|
||||||
|
Yilou Wang
|
||||||
Yinan Xu
|
Yinan Xu
|
||||||
Yoda Lee
|
Yoda Lee
|
||||||
Yossi Nivin
|
Yossi Nivin
|
||||||
@@ -202,6 +253,11 @@ Yuri Victorovich
|
|||||||
Yutetsu TAKATSUKASA
|
Yutetsu TAKATSUKASA
|
||||||
Yves Mathieu
|
Yves Mathieu
|
||||||
Zhanglei Wang
|
Zhanglei Wang
|
||||||
|
Zhen Yan
|
||||||
Zhou Shen
|
Zhou Shen
|
||||||
|
Zhouyi Shen
|
||||||
Zixi Li
|
Zixi Li
|
||||||
أحمد المحمودي
|
february cozzocrea
|
||||||
|
sumpster
|
||||||
|
Àlex Torregrosa
|
||||||
|
Ícaro Lima
|
||||||
|
|||||||
+4
-3
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
# Code available from: https://verilator.org
|
# Code available from: https://verilator.org
|
||||||
#
|
#
|
||||||
# Copyright 2003-2024 by Wilson Snyder. This program is free software; you
|
# Copyright 2003-2025 by Wilson Snyder. This program is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
@@ -23,9 +23,9 @@ SPHINXBUILD ?= sphinx-build
|
|||||||
SOURCEDIR = guide
|
SOURCEDIR = guide
|
||||||
BUILDDIR = _build
|
BUILDDIR = _build
|
||||||
|
|
||||||
SPHINXOPTS ?= -c guide
|
SPHINXOPTS ?= -c guide -j 4
|
||||||
ifneq ($(VERILATOR_ANALYTICS_ID),)
|
ifneq ($(VERILATOR_ANALYTICS_ID),)
|
||||||
SPHINXOPTS += -D html_theme_options.analytics_id=$(VERILATOR_ANALYTICS_ID)
|
SPHINXOPTS += -D html_theme_options.analytics_id=$(VERILATOR_ANALYTICS_ID)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
@@ -77,6 +77,7 @@ help:
|
|||||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
||||||
|
|
||||||
clean mostlyclean distclean maintainer-clean::
|
clean mostlyclean distclean maintainer-clean::
|
||||||
|
rm -rf _build
|
||||||
rm -f $(SCRIPTS) *.tmp
|
rm -f $(SCRIPTS) *.tmp
|
||||||
rm -f *.aux *.cp *.cps *.dvi *.fn *.fns *.ky *.kys *.log
|
rm -f *.aux *.cp *.cps *.dvi *.fn *.fns *.ky *.kys *.log
|
||||||
rm -f *.pg *.pgs *.toc *.tp *.tps *.vr *.vrs *.idx
|
rm -f *.pg *.pgs *.toc *.tp *.tps *.vr *.vrs *.idx
|
||||||
|
|||||||
@@ -23,9 +23,7 @@ class VlSphinxExtract:
|
|||||||
outname = match.group(1)
|
outname = match.group(1)
|
||||||
print("Writing %s" % outname)
|
print("Writing %s" % outname)
|
||||||
fhw = open(outname, "w", encoding="utf8") # pylint: disable=consider-using-with
|
fhw = open(outname, "w", encoding="utf8") # pylint: disable=consider-using-with
|
||||||
fhw.write(
|
fhw.write(".. comment: generated by vl_sphinx_extract from " + filename + "\n")
|
||||||
".. comment: generated by vl_sphinx_extract from " +
|
|
||||||
filename + "\n")
|
|
||||||
fhw.write(".. code-block::\n")
|
fhw.write(".. code-block::\n")
|
||||||
elif re.match(r'^[=a-zA-Z0-9_]', line):
|
elif re.match(r'^[=a-zA-Z0-9_]', line):
|
||||||
fhw = None
|
fhw = None
|
||||||
@@ -39,18 +37,14 @@ parser = argparse.ArgumentParser(
|
|||||||
allow_abbrev=False,
|
allow_abbrev=False,
|
||||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
description="""Read a file and extract documentation data.""",
|
description="""Read a file and extract documentation data.""",
|
||||||
epilog=
|
epilog=""" Copyright 2021-2025 by Wilson Snyder. This package is free software;
|
||||||
""" Copyright 2021-2024 by Wilson Snyder. This package is free software;
|
|
||||||
you can redistribute it and/or modify it under the terms of either the GNU
|
you can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
|
|
||||||
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
|
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
|
||||||
|
|
||||||
parser.add_argument('--debug',
|
parser.add_argument('--debug', action='store_const', const=9, help='enable debug')
|
||||||
action='store_const',
|
|
||||||
const=9,
|
|
||||||
help='enable debug')
|
|
||||||
parser.add_argument('path', help='path to extract from')
|
parser.add_argument('path', help='path to extract from')
|
||||||
Args = parser.parse_args()
|
Args = parser.parse_args()
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,7 @@ class VlSphinxFix:
|
|||||||
if os.path.isdir(path):
|
if os.path.isdir(path):
|
||||||
for basefile in os.listdir(path):
|
for basefile in os.listdir(path):
|
||||||
file = os.path.join(path, basefile)
|
file = os.path.join(path, basefile)
|
||||||
if ((basefile != ".") and (basefile != "..")
|
if ((basefile != ".") and (basefile != "..") and basefile not in self.SkipBasenames
|
||||||
and basefile not in self.SkipBasenames
|
|
||||||
and not os.path.islink(file)):
|
and not os.path.islink(file)):
|
||||||
self.process(file)
|
self.process(file)
|
||||||
elif re.search(r'\.(html|tex)$', path):
|
elif re.search(r'\.(html|tex)$', path):
|
||||||
@@ -54,18 +53,14 @@ parser = argparse.ArgumentParser(
|
|||||||
allow_abbrev=False,
|
allow_abbrev=False,
|
||||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
description="""Post-process Sphinx HTML.""",
|
description="""Post-process Sphinx HTML.""",
|
||||||
epilog=
|
epilog=""" Copyright 2021-2025 by Wilson Snyder. This package is free software;
|
||||||
""" Copyright 2021-2024 by Wilson Snyder. This package is free software;
|
|
||||||
you can redistribute it and/or modify it under the terms of either the GNU
|
you can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
|
|
||||||
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
|
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
|
||||||
|
|
||||||
parser.add_argument('--debug',
|
parser.add_argument('--debug', action='store_const', const=9, help='enable debug')
|
||||||
action='store_const',
|
|
||||||
const=9,
|
|
||||||
help='enable debug')
|
|
||||||
parser.add_argument('path', help='path to edit')
|
parser.add_argument('path', help='path to edit')
|
||||||
Args = parser.parse_args()
|
Args = parser.parse_args()
|
||||||
|
|
||||||
|
|||||||
@@ -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:4 Unknown verilator comment: '/*verilator lintt_off WIDTH <--- Warning (lint_off misspelled)*/'
|
||||||
|
7 | /*verilator lintt_off WIDTH <--- Warning (lint_off misspelled)*/
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
.. comment: generated by t_lint_pinmissing_bad
|
||||||
|
.. code-block:: sv
|
||||||
|
:linenos:
|
||||||
|
:emphasize-lines: 2
|
||||||
|
|
||||||
|
module t;
|
||||||
|
sub sub(); // <--- Warning
|
||||||
|
endmodule
|
||||||
|
module sub
|
||||||
|
(output port);
|
||||||
|
endmodule
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
.. comment: generated by t_lint_pinmissing_bad
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
%Warning-PINMISSING: example.v:1:8 Instance has missing pin: 'port'
|
||||||
@@ -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:21 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:10 ... Location of variable process write
|
||||||
|
: ... Perhaps should initialize instead using a reset in this process
|
||||||
|
30 | flop_out <= ~in;
|
||||||
|
| ^~~~~~~~
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
****************
|
****************
|
||||||
|
|||||||
+4
-14
@@ -1,7 +1,7 @@
|
|||||||
# pylint: disable=C0103,C0114,C0116,C0301,E0402,W0622
|
# pylint: disable=C0103,C0114,C0116,C0301,E0402,W0622
|
||||||
#
|
#
|
||||||
# Configuration file for Verilator's Sphinx documentation builder.
|
# Configuration file for Verilator's Sphinx documentation builder.
|
||||||
# Copyright 2003-2024 by Wilson Snyder.
|
# Copyright 2003-2025 by Wilson Snyder.
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
#
|
#
|
||||||
# This file only contains overridden options. For a full list:
|
# This file only contains overridden options. For a full list:
|
||||||
@@ -23,8 +23,7 @@ def get_vlt_version():
|
|||||||
filename = "../../Makefile"
|
filename = "../../Makefile"
|
||||||
with open(filename, "r", encoding="utf8") as fh:
|
with open(filename, "r", encoding="utf8") as fh:
|
||||||
for line in fh:
|
for line in fh:
|
||||||
match = re.search(r"PACKAGE_VERSION *= *([a-z0-9.]+) +([-0-9]+)",
|
match = re.search(r"PACKAGE_VERSION *= *([a-z0-9.]+) +([-0-9]+)", line)
|
||||||
line)
|
|
||||||
if match:
|
if match:
|
||||||
return match.group(1), match.group(2)
|
return match.group(1), match.group(2)
|
||||||
match = re.search(r"PACKAGE_VERSION *= *([a-z0-9.]+) +devel", line)
|
match = re.search(r"PACKAGE_VERSION *= *([a-z0-9.]+) +devel", line)
|
||||||
@@ -75,8 +74,7 @@ extensions = []
|
|||||||
# directories to ignore when looking for source files.
|
# directories to ignore when looking for source files.
|
||||||
# This pattern also affects html_static_path and html_extra_path.
|
# This pattern also affects html_static_path and html_extra_path.
|
||||||
exclude_patterns = [
|
exclude_patterns = [
|
||||||
'_build', 'Thumbs.db', '.DS_Store', 'internals.rst', 'xml.rst', 'gen/ex_*',
|
'_build', 'Thumbs.db', '.DS_Store', 'internals.rst', 'xml.rst', 'gen/ex_*', 'CONTRIBUTING.rst'
|
||||||
'CONTRIBUTING.rst'
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# Warn about refs
|
# Warn about refs
|
||||||
@@ -171,15 +169,7 @@ latex_elements = {
|
|||||||
# Grouping the document tree into LaTeX files. List of tuples
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
# (source start file, target name, title,
|
# (source start file, target name, title,
|
||||||
# author, documentclass [howto, manual, or own class]).
|
# author, documentclass [howto, manual, or own class]).
|
||||||
# latex_documents = [
|
# latex_documents = [ ... ]
|
||||||
# (
|
|
||||||
# master_doc,
|
|
||||||
# "Verilog-to-Routing.tex",
|
|
||||||
# "Verilog-to-Routing Documentation",
|
|
||||||
# "VTR Developers",
|
|
||||||
# "manual",
|
|
||||||
# ),
|
|
||||||
# ]
|
|
||||||
|
|
||||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||||
# not chapters.
|
# not chapters.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
.. _Connecting:
|
.. _Connecting:
|
||||||
@@ -73,8 +73,8 @@ often inlined into the root scope) will need to be updated as follows:
|
|||||||
:code:`$` character, i.e.: :code:`rootp` points to the Verilated
|
:code:`$` character, i.e.: :code:`rootp` points to the Verilated
|
||||||
SystemVerilog :code:`$root` scope.
|
SystemVerilog :code:`$root` scope.
|
||||||
|
|
||||||
* Replace :code:`modelp->internal->member->lookup` references with
|
* Replace :code:`modelp->internal->member` references with
|
||||||
:code:`modelp->rootp->internal->member->lookup` references, which
|
:code:`modelp->rootp->internal->member` references, which
|
||||||
contain one additional indirection via the :code:`rootp` pointer.
|
contain one additional indirection via the :code:`rootp` pointer.
|
||||||
|
|
||||||
|
|
||||||
@@ -407,6 +407,16 @@ only a couple of instructions.
|
|||||||
For signal callbacks to work the main loop of the program must call
|
For signal callbacks to work the main loop of the program must call
|
||||||
:code:`VerilatedVpi::callValueCbs()`.
|
:code:`VerilatedVpi::callValueCbs()`.
|
||||||
|
|
||||||
|
Verilator also tracks when the model state has been modified via the VPI with
|
||||||
|
an :code:`evalNeeded` flag. This flag can be checked with :code:`VerilatedVpi::evalNeeded()`
|
||||||
|
and it can be cleared with :code:`VerilatedVpi::clearEvalNeeded()`. Used together
|
||||||
|
it is possible to skip :code:`eval()` calls if no model state has been changed
|
||||||
|
since the last :code:`eval()`.
|
||||||
|
|
||||||
|
Any data written via :code:`vpi_put_value` with :code:`vpiInertialDelay` will
|
||||||
|
be deferred for later. These delayed values can be flushed to the model with
|
||||||
|
:code:`VerilatedVpi::doInertialPuts()`.
|
||||||
|
|
||||||
|
|
||||||
.. _VPI Example:
|
.. _VPI Example:
|
||||||
|
|
||||||
|
|||||||
+34
-12
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
*******************************
|
*******************************
|
||||||
@@ -23,24 +23,24 @@ Next, try the :vlopt:`--debug` option. This will enable additional
|
|||||||
internal assertions, and may help identify the problem.
|
internal assertions, and may help identify the problem.
|
||||||
|
|
||||||
Finally, reduce your code to the smallest possible routine that exhibits
|
Finally, reduce your code to the smallest possible routine that exhibits
|
||||||
the bug. Even better, create a test in the :file:`test_regress/t`
|
the bug (see: :ref:`Minimizing bug-inducing code`). Even better, create
|
||||||
directory, as follows:
|
a test in the :file:`test_regress/t` directory, as follows:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
cd test_regress
|
cd test_regress
|
||||||
cp -p t/t_EXAMPLE.pl t/t_BUG.pl
|
cp -p t/t_EXAMPLE.py t/t_BUG.py
|
||||||
cp -p t/t_EXAMPLE.v t/t_BUG.v
|
cp -p t/t_EXAMPLE.v t/t_BUG.v
|
||||||
|
|
||||||
There are many hints on how to write a good test in the
|
There are many hints on how to write a good test in the
|
||||||
:file:`test_regress/driver.pl` documentation which can be seen by running:
|
:file:`test_regress/driver.py` documentation which can be seen by running:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
cd $VERILATOR_ROOT # Need the original distribution kit
|
cd $VERILATOR_ROOT # Need the original distribution kit
|
||||||
test_regress/driver.pl --help
|
test_regress/driver.py --help
|
||||||
|
|
||||||
Edit :file:`t/t_BUG.pl` to suit your example; you can do anything you want
|
Edit :file:`t/t_BUG.py` to suit your example; you can do anything you want
|
||||||
in the Verilog code there; just make sure it retains the single clk input
|
in the Verilog code there; just make sure it retains the single clk input
|
||||||
and no outputs. Now, the following should fail:
|
and no outputs. Now, the following should fail:
|
||||||
|
|
||||||
@@ -48,20 +48,42 @@ and no outputs. Now, the following should fail:
|
|||||||
|
|
||||||
cd $VERILATOR_ROOT # Need the original distribution kit
|
cd $VERILATOR_ROOT # Need the original distribution kit
|
||||||
cd test_regress
|
cd test_regress
|
||||||
t/t_BUG.pl # Run on Verilator
|
t/t_BUG.py # Run on Verilator
|
||||||
t/t_BUG.pl --debug # Run on Verilator, passing --debug to Verilator
|
t/t_BUG.py --debug # Run on Verilator, passing --debug to Verilator
|
||||||
t/t_BUG.pl --vcs # Run on VCS simulator
|
t/t_BUG.py --vcs # Run on VCS simulator
|
||||||
t/t_BUG.pl --nc|--iv|--ghdl # Likewise on other simulators
|
t/t_BUG.py --nc|--iv|--ghdl # Likewise on other simulators
|
||||||
|
|
||||||
The test driver accepts a number of options, many of which mirror the main
|
The test driver accepts a number of options, many of which mirror the main
|
||||||
Verilator options. For example the previous test could have been run with
|
Verilator options. For example the previous test could have been run with
|
||||||
debugging enabled. The full set of test options can be seen by running
|
debugging enabled. The full set of test options can be seen by running
|
||||||
:command:`driver.pl --help` as shown above.
|
:command:`driver.py --help` as shown above.
|
||||||
|
|
||||||
Finally, report the bug at `Verilator Issues
|
Finally, report the bug at `Verilator Issues
|
||||||
<https://verilator.org/issues>`_. The bug will become publicly visible; if
|
<https://verilator.org/issues>`_. The bug will become publicly visible; if
|
||||||
this is unacceptable, mail the bug report to ``[email protected]``.
|
this is unacceptable, mail the bug report to ``[email protected]``.
|
||||||
|
|
||||||
|
.. _Minimizing bug-inducing code:
|
||||||
|
|
||||||
|
Minimizing bug-inducing code
|
||||||
|
============================
|
||||||
|
|
||||||
|
In some cases, the part of the code that causes the bug is clearly visible
|
||||||
|
and the design can be easily manually reduced. In other cases, the bug is
|
||||||
|
caused by a complex interaction of many parts of the design, and it is not
|
||||||
|
clear which parts are necessary to reproduce the bug. In these cases, an
|
||||||
|
Open Source tool called `sv-bugpoint
|
||||||
|
<https://github.com/antmicro/sv-bugpoint>`_ can be used to automatically
|
||||||
|
reduce a SystemVerilog design to the smallest possible reproducer.
|
||||||
|
It can be used to automatically reduce a design with hundreds of thousands of
|
||||||
|
lines to a minimal test case while preserving the bug-inducing behavior.
|
||||||
|
|
||||||
|
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`.
|
||||||
|
|
||||||
|
Please refer to `sv-bugpoint README
|
||||||
|
<https://github.com/antmicro/sv-bugpoint/blob/main/README.md>`_ for more
|
||||||
|
information on how to use `sv-bugpoint`.
|
||||||
|
|
||||||
.. Contributing
|
.. Contributing
|
||||||
.. ============
|
.. ============
|
||||||
|
|||||||
+125
-115
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
************************
|
************************
|
||||||
@@ -23,8 +23,8 @@ Contributors
|
|||||||
Many people have provided ideas and other assistance with Verilator.
|
Many people have provided ideas and other assistance with Verilator.
|
||||||
|
|
||||||
Verilator is receiving significant development support from the `CHIPS
|
Verilator is receiving significant development support from the `CHIPS
|
||||||
Alliance <https://chipsalliance.org>`_, `Antmicro Ltd
|
Alliance <https://chipsalliance.org>`_, and `Antmicro Ltd
|
||||||
<https://antmicro.com>`_ and `Shunyao CAD <https://shunyaocad.com>`_.
|
<https://antmicro.com>`_.
|
||||||
|
|
||||||
Previous major corporate sponsors of Verilator, by providing significant
|
Previous major corporate sponsors of Verilator, by providing significant
|
||||||
contributions of time or funds include: Antmicro Ltd., Atmel Corporation,
|
contributions of time or funds include: Antmicro Ltd., Atmel Corporation,
|
||||||
@@ -34,130 +34,140 @@ MicroTune Inc., picoChip Designs Ltd., Sun Microsystems Inc., Nauticus
|
|||||||
Networks Inc., SiCortex Inc, Shunyao CAD, and Western Digital Inc.
|
Networks Inc., SiCortex Inc, Shunyao CAD, and Western Digital Inc.
|
||||||
|
|
||||||
The contributors of major functionality are: Jeremy Bennett, Krzysztof
|
The contributors of major functionality are: Jeremy Bennett, Krzysztof
|
||||||
Bieganski, Byron Bradley, Lane Brooks, John Coiner, Duane Galbi, Geza Lore,
|
Bieganski, Byron Bradley, Lane Brooks, John Coiner, Duane Galbi, Arkadiusz
|
||||||
Todd Strader, Yutetsu Takatsukasa, Stefan Wallentowitz, Paul Wasson, Jie
|
Kozdra, Geza Lore, Todd Strader, Yutetsu Takatsukasa, Stefan Wallentowitz,
|
||||||
Xu, and Wilson Snyder.
|
Paul Wasson, Jie Xu, and Wilson Snyder.
|
||||||
|
|
||||||
Some of the people who have provided ideas, and feedback for Verilator
|
Some of the people who have provided ideas, and feedback for Verilator
|
||||||
include:
|
include:
|
||||||
|
|
||||||
David Addison, Tariq B. Ahmad, Nikana Anastasiadis, John David Anglin,
|
David Addison, Tariq B. Ahmad, Nikana Anastasiadis, John David Anglin,
|
||||||
Frederic Antonin, Hans Van Antwerpen, Vasu Arasanipalai, Jens Arm, Rohan
|
Frederic Antonin, Hans Van Antwerpen, Vasu Arasanipalai, Jens Arm, Rohan
|
||||||
Arshid, Gökçe Aydos, Adam Bagley, Sharad Bagri, Robert Balas, Marco
|
Arshid, Valentin Atepalikhin, Philip Axer, Gökçe Aydos, Chris Bachhuber,
|
||||||
Balboni, Matthew Ballance, Andrew Bardsley, Ilya Barkov, Matthew Barr,
|
Filip Badáň, Adam Bagley, Sharad Bagri, James Bailey, Robert Balas, Marco
|
||||||
Geoff Barrett, Kaleb Barrett, Daniel Bates, Julius Baxter, Michael Berman,
|
Balboni, Matthew Ballance, Ricardo Barbedo, Andrew Bardsley, Ilya Barkov,
|
||||||
Jean Berniolles, Victor Besyakov, Narayan Bhagavatula, Moinak
|
Matthew Barr, Geoff Barrett, Kaleb Barrett, Daniel Bates, Julius Baxter,
|
||||||
Bhattacharyya, Kritik Bhimani, David Biancolin, David Binderman, Piotr
|
Michael Berman, Jean Berniolles, Victor Besyakov, Narayan Bhagavatula,
|
||||||
Binkowski, Johan Björk, David Black, Tymoteusz Blazejczyk, Scott Bleiweiss,
|
Moinak Bhattacharyya, Kritik Bhimani, David Biancolin, Krzysztof Bieganski,
|
||||||
David van der Bokke, Daniel Bone, Guy Bonneau, Krzysztof Boroński, Gregg
|
Michael Bikovitsky, David Binderman, Piotr Binkowski, Johan Björk, David
|
||||||
Bouchard, Christopher Boumenot, Nick Bowler, Bryan Brady, Maarten De
|
Black, Tymoteusz Blazejczyk, Scott Bleiweiss, David van der Bokke, Daniel
|
||||||
Braekeleer, Charlie Brej, J Briquet, John Brownlee, KC Buckenmaier, Jeff
|
Bone, Guy Bonneau, Krzysztof Boroński, Gregg Bouchard, Christopher
|
||||||
Bush, Lawrence Butcher, Tony Bybell, Iru Cai, Ted Campbell, Anthony Campos,
|
Boumenot, Paul Bowen-Huggett, Nick Bowler, Bryan Brady, Maarten De
|
||||||
Chris Candler, Lauren Carlson, Gregory Carver, Donal Casey, Sebastien Van
|
Braekeleer, Liam Braun, Charlie Brej, J Briquet, John Brownlee, KC
|
||||||
Cauwenberghe, Alex Chadwick, Greg Chadwick, Marcel Chang, Aliaksei
|
Buckenmaier, Gijs Burghoorn, Jeff Bush, Lawrence Butcher, Tony Bybell, Iru
|
||||||
Chapyzhenka, Chih-Mao Chen, Guokai Chen, Terry Chen, Yi-Chung Chen, Yurii
|
Cai, Ted Campbell, Anthony Campos, Chris Candler, Lauren Carlson, Gregory
|
||||||
Cherkasov, Hennadii Chernyshchyk, Enzo Chi, Robert A. Clark, Ryan Clarke,
|
Carver, Donal Casey, Sebastien Van Cauwenberghe, Alex Chadwick, Greg
|
||||||
Allan Cochrane, Keith Colbert, Quentin Corradi, Nassim Corteggiani,
|
Chadwick, Marcel Chang, Aliaksei Chapyzhenka, Chih-Mao Chen, Guokai Chen,
|
||||||
|
Kefa Chen, Terry Chen, Yangyu Chen, Yi-Chung Chen, Yurii Cherkasov,
|
||||||
|
Hennadii Chernyshchyk, Enzo Chi, Bartłomiej Chmiel, Robert A. Clark, Ryan
|
||||||
|
Clarke, Allan Cochrane, Keith Colbert, Quentin Corradi, Nassim Corteggiani,
|
||||||
Gianfranco Costamagna, February Cozzocrea, Sean Cross, George Cuan, Michal
|
Gianfranco Costamagna, February Cozzocrea, Sean Cross, George Cuan, Michal
|
||||||
Czyz, Joe DErrico, Jim Dai, Lukasz Dalek, Laurens van Dam, Gunter
|
Czyz, Joe DErrico, Jim Dai, Lukasz Dalek, Laurens van Dam, Gunter
|
||||||
Dannoritzer, Ashutosh Das, Julian Daube, Bernard Deadman, Peter Debacker,
|
Dannoritzer, Ashutosh Das, Julian Daube, Greg Davill, Bernard Deadman,
|
||||||
John Demme, Mike Denio, John Deroo, Philip Derrick, Aadi Desai, John
|
Peter Debacker, Josse Van Delm, John Demme, Mike Denio, John Deroo, Philip
|
||||||
Dickol, Ruben Diez, Danny Ding, Jacko Dirks, Ivan Djordjevic, Brad Dobbie,
|
Derrick, Aadi Desai, John Dickol, Ruben Diez, Danny Ding, Jacko Dirks, Ivan
|
||||||
Paul Donahue, Jonathon Donaldson, Anthony Donlon, Caleb Donovick, Larry
|
Djordjevic, Brad Dobbie, Paul Donahue, Jonathon Donaldson, Anthony Donlon,
|
||||||
Doolittle, Leendert van Doorn, Sebastian Dressler, Jonathan Drolet, Maciej
|
Caleb Donovick, Larry Doolittle, Leendert van Doorn, Sebastian Dressler,
|
||||||
Dudek, Alex Duller, Jeff Dutton, Tomas Dzetkulic, Usuario Eda, Charles
|
Jonathan Drolet, Justin Yao Du, Maciej Dudek, Alex Duller, Jeff Dutton,
|
||||||
Eddleston, Chandan Egbert, Joe Eiler, Ahmed El-Mahmoudy, Trevor Elbourne,
|
Tomas Dzetkulic, Usuario Eda, Charles Eddleston, Chandan Egbert, Joe Eiler,
|
||||||
Mats Engstrom, Robert Farrell, Julien Faucher, Olivier Faure, Eugen Fekete,
|
Ahmed El-Mahmoudy, Trevor Elbourne, Mats Engstrom, Robert Farrell, Julien
|
||||||
Fabrizio Ferrandi, Udi Finkelstein, Brian Flachs, Bill Flynn, Andrea
|
Faucher, Olivier Faure, Eugene Feinberg, Eugen Fekete, Fabrizio Ferrandi,
|
||||||
Foletto, Alex Forencich, Aurelien Francillon, Bob Fredieu, Manuel
|
Udi Finkelstein, Brian Flachs, Bill Flynn, Andrea Foletto, Alex Forencich,
|
||||||
Freiberger, Mostafa Gamal, Vito Gamberini, Mostafa Garnal, Benjamin
|
Aurelien Francillon, Bob Fredieu, Manuel Freiberger, Mostafa Gamal, Vito
|
||||||
Gartner, Christian Gelinek, Richard E George, Peter Gerst, Glen Gibb,
|
Gamberini, Mostafa Garnal, Benjamin Gartner, Christian Gelinek, Richard E
|
||||||
Michael Gielda, Barbara Gigerl, Nimrod Gileadi, Shankar Giri, Dan
|
George, Peter Gerst, Glen Gibb, Michael Gielda, Barbara Gigerl, Nimrod
|
||||||
Gisselquist, Petr Gladkikh, Sam Gladstone, Mariusz Glebocki, Embedded Go,
|
Gileadi, Shankar Giri, Dan Gisselquist, Szymon Gizler, Petr Gladkikh, Sam
|
||||||
Andrew Goessling, Amir Gonnen, Chitlesh Goorah, Tomasz Gorochowik, Kai
|
Gladstone, Mariusz Glebocki, Embedded Go, Andrew Goessling, Amir Gonnen,
|
||||||
Gossner, Tarik Graba, Sergi Granell, Al Grant, Nathan Graybeal, Alexander
|
Chitlesh Goorah, Tomasz Gorochowik, Kai Gossner, Tarik Graba, Sergi
|
||||||
Grobman, Qian Gu, Xuan Guo, Prabhat Gupta, Driss Hafdi, Neil Hamilton,
|
Granell, Al Grant, Nathan Graybeal, Alexander Grobman, Qian Gu, Xuan Guo,
|
||||||
James Hanlon, Tang Haojin, Øyvind Harboe, Jannis Harder, David Harris,
|
Prabhat Gupta, Deniz Güzel, Driss Hafdi, Abdul Hameed, Neil Hamilton, James
|
||||||
Junji Hashimoto, Thomas Hawkins, Mitch Hayenga, Harald Heckmann, Robert
|
Hanlon, Tang Haojin, Øyvind Harboe, Jannis Harder, David Harris, Junji
|
||||||
Henry, Stephen Henry, Sebastian Hesselbarth, David Hewson, Jamey Hicks,
|
Hashimoto, Thomas Hawkins, Mitch Hayenga, Harald Heckmann, Robert Henry,
|
||||||
Joel Holdsworth, Andrew Holme, Peter Holmes, Hiroki Honda, Alex Hornung,
|
Stephen Henry, Sebastian Hesselbarth, David Hewson, Jamey Hicks, Joel
|
||||||
|
Holdsworth, Andrew Holme, Peter Holmes, Hiroki Honda, Alex Hornung,
|
||||||
Pierre-Henri Horrein, David Horton, Peter Horvath, Jae Hossell, Kuoping
|
Pierre-Henri Horrein, David Horton, Peter Horvath, Jae Hossell, Kuoping
|
||||||
Hsu, Teng Huang, Steven Hugg, Huanghuang Zhou, Alan Hunter, James
|
Hsu, Shou-Li Hsu, Teng Huang, Steven Hugg, Alan Hunter, James Hutchinson,
|
||||||
Hutchinson, Tim Hutt, Ehab Ibrahim, Edgar E. Iglesias, Shahid Ikram, Jamie
|
Tim Hutt, Ehab Ibrahim, Edgar E. Iglesias, Shahid Ikram, Jamie Iles, Fuad
|
||||||
Iles, Vighnesh Iyer, Ben Jackson, Daniel Jacques, Shareef Jalloq, Marlon
|
Ismail, Vighnesh Iyer, Ben Jackson, Daniel Jacques, Shareef Jalloq, Marlon
|
||||||
James, Krzysztof Jankowski, Eyck Jentzsch, HyungKi Jeong, Iztok Jeras,
|
James, Krzysztof Jankowski, Eyck Jentzsch, HyungKi Jeong, Iztok Jeras,
|
||||||
Alexandre Joannou, James Johnson, Christophe Joly, Justin Jones,
|
Pawel Jewstafjew, Alexandre Joannou, James Johnson, Christophe Joly, Justin
|
||||||
William D. Jones, Larry Darryl Lee Jr., Franck Jullien, James Jung,
|
Jones, William D. Jones, Abe Jordan, Larry Darryl Lee Jr., Franck Jullien,
|
||||||
Yoshitomo Kaneda, Mike Kagen, Arthur Kahlich, Kaalia Kahn, Guy-Armand
|
James Jung, Mike Kagen, Arthur Kahlich, Kaalia Kahn, Guy-Armand Kamendje,
|
||||||
Kamendje, Vasu Kandadi, Kanad Kanhere, Patricio Kaplan, Pieter Kapsenberg,
|
Vasu Kandadi, Yoshitomo Kaneda, Kanad Kanhere, Patricio Kaplan, Pieter
|
||||||
Rafal Kapuscik, Ralf Karge, Per Karlsson, Dan Katz, Sol Katzman, Ian
|
Kapsenberg, Rafal Kapuscik, Ralf Karge, Per Karlsson, Dan Katz, Sol
|
||||||
Kennedy, Ami Keren, Michael Killough, Sun Kim, Jonathan Kimmitt, Olof
|
Katzman, Ian Kennedy, Ami Keren, Fabian Keßler, Michael Killough, Sun Kim,
|
||||||
Kindgren, Kevin Kiningham, Cameron Kirk, Dan Kirkham, Aleksander Kiryk,
|
Jonathan Kimmitt, Olof Kindgren, Kevin Kiningham, Cameron Kirk, Dan
|
||||||
Sobhan Klnv, Gernot Koch, Jack Koenig, Soon Koh, Nathan Kohagen, Steve
|
Kirkham, Aleksander Kiryk, Sobhan Klnv, Gernot Koch, Jack Koenig, Soon Koh,
|
||||||
Kolecki, Brett Koonce, Will Korteland, Andrei Kostovski, Wojciech Koszek,
|
Nathan Kohagen, Steve Kolecki, Brett Koonce, Will Korteland, Andrei
|
||||||
Varun Koyyalagunta, Arkadiusz Kozdra, Markus Krause, David Kravitz, Adam
|
Kostovski, Wojciech Koszek, Varun Koyyalagunta, Arkadiusz Kozdra, Markus
|
||||||
Krolnik, Roland Kruse, Mahesh Kumashikar, Andreas Kuster, Sergey Kvachonok,
|
Krause, David Kravitz, Adam Krolnik, Roland Kruse, Mahesh Kumashikar,
|
||||||
Charles Eric LaForest, Kevin Laeufer, Ed Lander, Steve Lang, Pierre
|
Andreas Kuster, Sergey Kvachonok, Charles Eric LaForest, Kevin Laeufer, Ed
|
||||||
Laroche, Stephane Laurent, Walter Lavino, Christian Leber, David Ledger,
|
Lander, Steve Lang, Pierre Laroche, Stephane Laurent, Walter Lavino,
|
||||||
Alex Lee, Larry Lee, Yoda Lee, Michaël Lefebvre, Dag Lem, Igor Lesik, John
|
Christian Leber, David Ledger, Alex Lee, Larry Lee, Yoda Lee, Michaël
|
||||||
Li, Kay Li, Zixi Li, Davide Libenzi, Nandor Licker, Eivind Liland, Ícaro
|
Lefebvre, Dag Lem, Igor Lesik, John Li, Kay Li, Zixi Li, Davide Libenzi,
|
||||||
Lima, Kevin Lin, Yu-Sheng Lin, Charlie Lind, Andrew Ling, Jiuyang Liu, Joey
|
Nandor Licker, Eivind Liland, Ícaro Lima, Kevin Lin, Yu-Sheng Lin, Charlie
|
||||||
Liu, Paul Liu, Derek Lockhart, Jake Longo, Arthur Low, Jose Loyola, Stefan
|
Lind, Andrew Ling, Jiuyang Liu, Joey Liu, Paul Liu, Derek Lockhart, Jake
|
||||||
Ludwig, Dan Lussier, Konstantin Lübeck, Fred Ma, Liwei Ma, Duraid Madina,
|
Longo, Geza Lore, Arthur Low, Jose Loyola, Stefan Ludwig, Dan Lussier,
|
||||||
Oleh Maksymenko, Affe Mao, Julien Margetts, Chick Markley, Alexis Marquet,
|
Konstantin Lübeck, Fred Ma, Liwei Ma, Duraid Madina, Oleh Maksymenko, Affe
|
||||||
Mark Marshall, Alfonso Martinez, Unai Martinez-Corral, Adrien Le Masle,
|
Mao, Julien Margetts, Chick Markley, Alexis Marquet, Mark Marshall, Alfonso
|
||||||
Yves Mathieu, Vladimir Matveyenko, Patrick Maupin, Stan Mayer, Conor
|
Martinez, Unai Martinez-Corral, Adrien Le Masle, Yves Mathieu, Vladimir
|
||||||
McCullough, Jason McMullan, Elliot Mednick, Yuan Mei, Andy Meier,
|
Matveyenko, Patrick Maupin, Stan Mayer, Jordan McConnon, Conor McCullough,
|
||||||
|
Jason McMullan, Elliot Mednick, Yuan Mei, Andy Meier, Luiza de Melo,
|
||||||
Rodrigo A. Melo, Benjamin Menküc, Jake Merdich, David Metz, Wim Michiels,
|
Rodrigo A. Melo, Benjamin Menküc, Jake Merdich, David Metz, Wim Michiels,
|
||||||
Miodrag Milanović, Darryl Miles, Kevin Millis, Andrew Miloradovsky, Wai Sum
|
Miodrag Milanović, Darryl Miles, Kevin Millis, Andrew Miloradovsky, David
|
||||||
Mong, Peter Monsson, Sean Moore, Stuart Morris, Dennis Muhlestein, John
|
Moberg, Wai Sum Mong, Peter Monsson, Anthony Moore, Sean Moore, Stuart
|
||||||
Murphy, Matt Myers, Nathan Myers, Richard Myers, Alex Mykyta, Dimitris
|
Morris, Dennis Muhlestein, John Murphy, Matt Myers, Nathan Myers, Richard
|
||||||
Nalbantis, Peter Nelson, Felix Neumärker, Bob Newgard, Cong Van Nguyen,
|
Myers, Alex Mykyta, Eric Müller, Dimitris Nalbantis, Peter Nelson, Felix
|
||||||
Rachit Nigam, Toru Niina, Paul Nitza, Yossi Nivin, Pete Nixon, Lisa Noack,
|
Neumärker, Bob Newgard, Cong Van Nguyen, Rachit Nigam, Toru Niina, Paul
|
||||||
Mark Nodine, Michael Nolan, Andrew Nolte, Joseph Nwabueze, Kuba Ober,
|
Nitza, Yossi Nivin, Pete Nixon, Lisa Noack, Mark Nodine, Michael Nolan,
|
||||||
Andreas Olofsson, Baltazar Ortiz, Aleksander Osman, Don Owen, Tim Paine,
|
Andrew Nolte, Joseph Nwabueze, Kevin Nygaard, Kuba Ober, Krzysztof
|
||||||
Deepa Palaniappan, James Pallister, Vassilis Papaefstathiou, Sanggyu Park,
|
Obłonczek, Andreas Olofsson, Baltazar Ortiz, Aleksander Osman, Don Owen,
|
||||||
Brad Parker, Risto Pejašinović, Morten Borup Petersen, Dan Petrisko, Wesley
|
Tim Paine, Deepa Palaniappan, James Pallister, Vassilis Papaefstathiou,
|
||||||
Piard, Maciej Piechotka, David Pierce, Cody Piersall, T. Platz, Michael
|
Sanggyu Park, Brad Parker, Risto Pejašinović, Seth Pellegrino, Morten Borup
|
||||||
Platzer, Dominic Plunkett, David Poole, Michael Popoloski, Roman Popov,
|
Petersen, Dan Petrisko, Wesley Piard, Maciej Piechotka, David Pierce, Cody
|
||||||
Aylon Chaim Porat, Oron Port, Rich Porter, Rick Porter, Stefan Post,
|
Piersall, T. Platz, Michael Platzer, Dominic Plunkett, Nolan Poe, David
|
||||||
Niranjan Prabhu, Damien Pretet, Harald Pretl, Bill Pringlemeir, Usha
|
Poole, Michael Popoloski, Roman Popov, Aylon Chaim Porat, Oron Port, Rich
|
||||||
Priyadharshini, Mark Jackson Pulver, Prateek Puri, Jiacheng Qian, Marshal
|
Porter, Rick Porter, Stefan Post, Niranjan Prabhu, Damien Pretet, Harald
|
||||||
Qiao, Raynard Qiao, Yujia Qiao, Jasen Qin, Frank Qiu, Nandu Raj, Kamil
|
Pretl, Bill Pringlemeir, Usha Priyadharshini, Mark Jackson Pulver, Prateek
|
||||||
Rakoczy, Danilo Ramos, Drew Ranck, Chris Randall, Anton Rapp, Josh Redford,
|
Puri, Han Qi, Jiacheng Qian, Marshal Qiao, Raynard Qiao, Yujia Qiao, Jasen
|
||||||
Odd Magne Reitan, Frédéric Requin, Dustin Richmond, Samuel Riedel, Alberto
|
Qin, Frank Qiu, Nandu Raj, Kamil Rakoczy, Danilo Ramos, Drew Ranck, Chris
|
||||||
Del Rio, Eric Rippey, Oleg Rodionov, Ludwig Rogiers, Paul Rolfe, Michail
|
Randall, Anton Rapp, Josh Redford, Odd Magne Reitan, Frédéric Requin,
|
||||||
Rontionov, Arjen Roodselaar, Tobias Rosenkranz, Yernagula Roshit, Ryszard
|
Dustin Richmond, Samuel Riedel, Alberto Del Rio, Eric Rippey, Narcis Rodas,
|
||||||
|
Oleg Rodionov, Ludwig Rogiers, Paul Rolfe, Michail Rontionov, Arjen
|
||||||
|
Roodselaar, Arthur Rosa, Tobias Rosenkranz, Yernagula Roshit, Ryszard
|
||||||
Rozak, Huang Rui, Graham Rushton, Jan Egil Ruud, Denis Rystsov, Pawel
|
Rozak, Huang Rui, Graham Rushton, Jan Egil Ruud, Denis Rystsov, Pawel
|
||||||
Sagan, Robert Sammelson, John Sanguinetti, Josep Sans, Luca Sasselli,
|
Sagan, Robert Sammelson, Adrian Sampson, John Sanguinetti, Josep Sans, Luca
|
||||||
Martin Scharrer, Martin Schmidt, Julie Schwartz, Galen Seitz, Joseph
|
Sasselli, Martin Scharrer, Martin Schmidt, Jonathan Schröter, Julie
|
||||||
Shaker, Mark Shaw, Salman Sheikh, Zhou Shen, Hao Shi, James Shi, Michael
|
Schwartz, Galen Seitz, Sam Shahrestani, Joseph Shaker, Mark Shaw, Salman
|
||||||
Shinkarovsky, Rafael Shirakawa, Jeffrey Short, S Shuba, Fan Shupei, Ethan
|
Sheikh, Zhou Shen, Hao Shi, James Shi, Michael Shinkarovsky, Rafael
|
||||||
Sifferman, Anderson Ignacio da Silva, Rodney Sinclair, Ameya Vikram Singh,
|
Shirakawa, Jeffrey Short, S Shuba, Fan Shupei, Ethan Sifferman, Anderson
|
||||||
Sanjay Singh, Frans Skarman, Nate Slager, Steven Slatter, Mladen
|
Ignacio da Silva, Rodney Sinclair, Ameya Vikram Singh, Sanjay Singh, Frans
|
||||||
Slijepcevic, Brian Small, Garrett Smith, Gus Smith, Tim Snyder, Maciej
|
Skarman, Nate Slager, Steven Slatter, Mladen Slijepcevic, Brian Small,
|
||||||
Sobkowski, Stan Sokorac, Alex Solomatnikov, Flavien Solt, Wei Song, Trefor
|
Garrett Smith, Gus Smith, Tim Snyder, Maciej Sobkowski, Stan Sokorac, Alex
|
||||||
Southwell, Martin Stadler, Art Stamness, David Stanford, John Stevenson,
|
Solomatnikov, Flavien Solt, Wei Song, Trefor Southwell, Martin Stadler, Art
|
||||||
Pete Stevenson, Patrick Stewart, Rob Stoddard, Tood Strader, John Stroebel,
|
Stamness, David Stanford, Krzysztof Starecki, Baruch Sterin, John
|
||||||
Ray Strouble, Sven Stucki, Howard Su, Emerson Suguimoto, Gene Sullivan,
|
Stevenson, Pete Stevenson, Patrick Stewart, Rob Stoddard, Tood Strader,
|
||||||
Qingyao Sun, Renga Sundararajan, Kuba Sunderland-Ober, Gustav Svensk,
|
John Stroebel, Ray Strouble, Sven Stucki, Howard Su, Udaya Raj Subedi,
|
||||||
Rupert Swarbrick, Jevin Sweval, Shinya T-Y, Thierry Tambe, Jesse Taube,
|
Emerson Suguimoto, Gene Sullivan, Qingyao Sun, Renga Sundararajan, Kuba
|
||||||
Drew Taussig, Jose Tejada, Sören Tempel, Peter Tengstrand, Wesley Terpstra,
|
Sunderland-Ober, Gustav Svensk, Rupert Swarbrick, Jevin Sweval, Paul
|
||||||
Rui Terra, Stefan Thiede, Justin Thiel, Gary Thomas, Ian Thompson, Kevin
|
Swirhun, Shinya T-Y, Thierry Tambe, Jesse Taube, Drew Taussig, Christopher
|
||||||
Thompson, Mike Thyer, Hans Tichelaar, Tudor Timi, Viktor Tomov, Steve Tong,
|
Taylor, Greg Taylor, Jose Tejada, Sören Tempel, Peter Tengstrand, Wesley
|
||||||
Topa Topino, Àlex Torregrosa, Topa Tota, Michael Tresidder, Lenny Truong,
|
Terpstra, Rui Terra, Stefan Thiede, Justin Thiel, Gary Thomas, Ian
|
||||||
David Turner, Neil Turton, Hideto Ueno, Mike Urbach, Joel Vandergriendt,
|
Thompson, Kevin Thompson, Mike Thyer, Hans Tichelaar, Tudor Timi, Viktor
|
||||||
Srini Vemuri, Srinivasan Venkataramanan, Yuri Victorovich, Ivan Vnučec,
|
Tomov, Steve Tong, Topa Topino, Àlex Torregrosa, Topa Tota, Michael
|
||||||
Bogdan Vukobratovic, Holger Waechtler, Philipp Wagner, Johannes Walter, CY
|
Tresidder, Lenny Truong, David Turner, Neil Turton, Hideto Ueno, Mike
|
||||||
Wang, Chuxuan Wang, Shawn Wang, Zhanglei Wang, Greg Waters, Thomas Watts,
|
Urbach, Joel Vandergriendt, Srini Vemuri, Srinivasan Venkataramanan, Yuri
|
||||||
Eugene Weber, John Wehle, Tianrui Wei, David Welch, Thomas J Whatson,
|
Victorovich, Ivan Vnučec, Bogdan Vukobratovic, Holger Waechtler, Philipp
|
||||||
Martin Whitaker, Marco Widmer, Leon Wildman, Daniel S. Wilkerson, Daniel
|
Wagner, Stefan Wallentowitz, Johannes Walter, CY Wang, Chuxuan Wang, Shawn
|
||||||
Wilkerson, Gerald Williams, Trevor Williams, Don Williamson, Jan Van
|
Wang, Yilou Wang, Zhanglei Wang, Greg Waters, Thomas Watts, Eugene Weber,
|
||||||
Winkel, Jeff Winston, Joshua Wise, Clifford Wolf, Johan Wouters, Paul
|
John Wehle, Tianrui Wei, David Welch, Thomas J Whatson, Martin Whitaker,
|
||||||
Wright, Tobias Wölfel, Junyi Xi, Ding Xiaoliang, Liu Xiaoyi, Mandy Xu,
|
Marco Widmer, Leon Wildman, Daniel S. Wilkerson, Daniel Wilkerson, Gerald
|
||||||
Shanshan Xu, Yinan Xu, SU YANG, Felix Yan, Luke Yang, Amir Yazdanbakhsh,
|
Williams, Trevor Williams, Don Williamson, Jan Van Winkel, Jeff Winston,
|
||||||
Chentai (Seven) Yuan, Florian Zaruba, Mat Zeno, Keyi Zhang, Xi Zhang, Yike
|
Joshua Wise, Clifford Wolf, Johan Wouters, Paul Wright, Tobias Wölfel,
|
||||||
Zhou, Jiamin Zhu.
|
Junyi Xi, Ding Xiaoliang, Liu Xiaoyi, Jinyan Xu, Mandy Xu, Pengcheng Xu,
|
||||||
|
Shanshan Xu, Yan Xu, Yinan Xu, SU YANG, Felix Yan, Jiaxun Yang, Luke Yang,
|
||||||
|
Amir Yazdanbakhsh, Chentai (Seven) Yuan, Florian Zaruba, Mat Zeno, Keyi
|
||||||
|
Zhang, Xi Zhang, Huanghuang Zhou, Yike Zhou, Jiamin Zhu, Ryan Ziegler.
|
||||||
|
|
||||||
Thanks to them, and all those we've missed mentioning above, and to those
|
Thanks to them, and all those we've missed mentioning above, and to those
|
||||||
whom have wished to remain anonymous.
|
whom have wished to remain anonymous.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
*********
|
*********
|
||||||
@@ -8,7 +8,7 @@ Copyright
|
|||||||
The latest version of Verilator is available from `https://verilator.org
|
The latest version of Verilator is available from `https://verilator.org
|
||||||
<https://verilator.org>`_.
|
<https://verilator.org>`_.
|
||||||
|
|
||||||
Copyright 2003-2024 by Wilson Snyder. This program is free software; you
|
Copyright 2003-2025 by Wilson Snyder. This program is free software; you
|
||||||
can redistribute it and/or modify the Verilator internals under the terms
|
can redistribute it and/or modify the Verilator internals under the terms
|
||||||
of either the GNU Lesser General Public License Version 3 or the Perl
|
of either the GNU Lesser General Public License Version 3 or the Perl
|
||||||
Artistic License Version 2.0.
|
Artistic License Version 2.0.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
Deprecations
|
Deprecations
|
||||||
@@ -12,8 +12,11 @@ C++14 compiler support
|
|||||||
Verilated models with --no-timing.
|
Verilated models with --no-timing.
|
||||||
|
|
||||||
Verilator will require C++20 or newer compilers for both compiling
|
Verilator will require C++20 or newer compilers for both compiling
|
||||||
Verilator and compiling all Verilated models no sooner than January 2025.
|
Verilator and compiling all Verilated models no sooner than May 2025.
|
||||||
|
(Likely to be removed shortly after GitHub removes Ubuntu 20.04
|
||||||
|
continuous-integration action runners, which are used to test the older
|
||||||
|
C++ standard).
|
||||||
|
|
||||||
XML output
|
XML output
|
||||||
Verilator currently supports XML parser output (enabled with `--xml-only`).
|
Verilator currently supports XML parser output (enabled with `--xml-only`).
|
||||||
Support for `--xml-*` options will be deprecated no sooner than January 2025.
|
Support for `--xml-*` options will be deprecated no sooner than January 2026.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
Environment
|
Environment
|
||||||
@@ -118,6 +118,12 @@ associated programs.
|
|||||||
|
|
||||||
See :ref:`Installation` for more details.
|
See :ref:`Installation` for more details.
|
||||||
|
|
||||||
|
.. option:: VERILATOR_SOLVER
|
||||||
|
|
||||||
|
If set, the command to run as a constrained randomization backend, such
|
||||||
|
as :command:`cvc4 --lang=smt2 --incremental`. If not specified, it will use
|
||||||
|
the one supplied or found during configure, or :command:`z3 --in` if empty.
|
||||||
|
|
||||||
.. option:: VERILATOR_VALGRIND
|
.. option:: VERILATOR_VALGRIND
|
||||||
|
|
||||||
If set, the command to run when using the :vlopt:`--valgrind` option, such as
|
If set, the command to run when using the :vlopt:`--valgrind` option, such as
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
.. _Example Create-Binary Execution:
|
.. _Example Create-Binary Execution:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
.. _Example C++ Execution:
|
.. _Example C++ Execution:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
First you need Verilator installed, see :ref:`Installation`. In brief, if
|
First you need Verilator installed, see :ref:`Installation`. In brief, if
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
.. _Examples in the Distribution:
|
.. _Examples in the Distribution:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
.. _Example SystemC Execution:
|
.. _Example SystemC Execution:
|
||||||
@@ -28,6 +28,7 @@ Now, let's create an example Verilog, and SystemC wrapper file:
|
|||||||
|
|
||||||
cat >sc_main.cpp <<'EOF'
|
cat >sc_main.cpp <<'EOF'
|
||||||
#include "Vour.h"
|
#include "Vour.h"
|
||||||
|
using namespace sc_core;
|
||||||
int sc_main(int argc, char** argv) {
|
int sc_main(int argc, char** argv) {
|
||||||
Verilated::commandArgs(argc, argv);
|
Verilated::commandArgs(argc, argv);
|
||||||
sc_clock clk{"clk", 10, SC_NS, 0.5, 3, SC_NS, true};
|
sc_clock clk{"clk", 10, SC_NS, 0.5, 3, SC_NS, true};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
.. _Examples:
|
.. _Examples:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
.. _Simulation Runtime Arguments:
|
.. _Simulation Runtime Arguments:
|
||||||
@@ -40,13 +40,18 @@ Summary:
|
|||||||
.. option:: +verilator+error+limit+<value>
|
.. option:: +verilator+error+limit+<value>
|
||||||
|
|
||||||
Set number of non-fatal errors (e.g. assertion failures) before exiting
|
Set number of non-fatal errors (e.g. assertion failures) before exiting
|
||||||
simulation runtime. Also affects number of $stop calls needed before
|
simulation runtime. Also affects number of `$stop` calls needed before
|
||||||
exit. Defaults to 1.
|
exit. Does not affect `$fatal`. Defaults to 1.
|
||||||
|
|
||||||
.. option:: +verilator+help
|
.. option:: +verilator+help
|
||||||
|
|
||||||
Display help and exit.
|
Display help and exit.
|
||||||
|
|
||||||
|
.. option:: +verilator+noassert
|
||||||
|
|
||||||
|
Disable assert checking per runtime argument. This is the same as
|
||||||
|
calling :code:`VerilatedContext*->assertOn(false)` in the model.
|
||||||
|
|
||||||
.. option:: +verilator+prof+exec+file+<filename>
|
.. option:: +verilator+prof+exec+file+<filename>
|
||||||
|
|
||||||
When a model was Verilated using :vlopt:`--prof-exec`, sets the
|
When a model was Verilated using :vlopt:`--prof-exec`, sets the
|
||||||
@@ -110,11 +115,6 @@ Summary:
|
|||||||
simulation runtime random seed value. If zero or not specified picks a
|
simulation runtime random seed value. If zero or not specified picks a
|
||||||
value from the system random number generator.
|
value from the system random number generator.
|
||||||
|
|
||||||
.. option:: +verilator+noassert
|
|
||||||
|
|
||||||
Disable assert checking per runtime argument. This is the same as
|
|
||||||
calling :code:`VerilatedContext*->assertOn(false)` in the model.
|
|
||||||
|
|
||||||
.. option:: +verilator+V
|
.. option:: +verilator+V
|
||||||
|
|
||||||
Shows the verbose version, including configuration information.
|
Shows the verbose version, including configuration information.
|
||||||
|
|||||||
+563
-296
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
verilator_coverage
|
verilator_coverage
|
||||||
@@ -35,11 +35,11 @@ verilator_coverage Example Usage
|
|||||||
verilator_coverage --help
|
verilator_coverage --help
|
||||||
verilator_coverage --version
|
verilator_coverage --version
|
||||||
|
|
||||||
verilator_coverage --annotate <obj>
|
verilator_coverage --annotate obj_dir coverage.dat
|
||||||
|
|
||||||
verilator_coverage -write merged.dat -read <datafiles>...
|
verilator_coverage --write merged.dat coverage.dat ...
|
||||||
|
|
||||||
verilator_coverage -write-info merged.info -read <datafiles>...
|
verilator_coverage --write-info merged.info coverage.dat ...
|
||||||
|
|
||||||
|
|
||||||
verilator_coverage Arguments
|
verilator_coverage Arguments
|
||||||
@@ -49,115 +49,125 @@ verilator_coverage Arguments
|
|||||||
|
|
||||||
.. option:: <filename>
|
.. option:: <filename>
|
||||||
|
|
||||||
Specifies the input coverage data file. Multiple filenames may be provided
|
Specifies the input coverage data file. Multiple filenames may be
|
||||||
to read multiple inputs. If no data file is specified, by default,
|
provided to read multiple inputs. If no data file is specified, by
|
||||||
"coverage.dat" will be read.
|
default, "coverage.dat" will be read.
|
||||||
|
|
||||||
.. option:: --annotate <output_directory>
|
.. option:: --annotate <output_directory>
|
||||||
|
|
||||||
Specifies the directory name to which source files with annotated coverage
|
Specifies the directory name to which source files with annotated
|
||||||
data should be written.
|
coverage data should be written.
|
||||||
|
|
||||||
Converting from the Verilator coverage data format to the info format is
|
Points are children of each line coverage- branches, expressions or
|
||||||
lossy; the info will have all forms of coverage merged line coverage, and
|
toggle points. When point counts are aggregated into a line, the
|
||||||
if there are multiple coverage points on a single line they will merge.
|
minimum and maximum counts are used to determine the status of the line
|
||||||
The minimum coverage across all merged points will be used to report
|
(complete, partial, failing) The count is equal to the maximum of the
|
||||||
coverage of the line.
|
points.
|
||||||
|
|
||||||
Coverage data is annotated at the beginning of the line and is formatted
|
Coverage data is annotated at the beginning of the line and is formatted
|
||||||
as a special character followed by the number of coverage hits. The special
|
as a special character followed by the number of coverage hits. The
|
||||||
characters " ,%,+,-" indicate summary of the coverage, and allow use of grep
|
special characters " ,%,~,+,-" indicate summary of the coverage, and
|
||||||
to filter the report.
|
allow use of grep to filter the report.
|
||||||
|
|
||||||
* " " (whitespace) indicates that all points on the line are above the coverage limit.
|
* " " (whitespace) indicates that all points on the line are above the coverage min.
|
||||||
* "%" indicates at least one point on the line was below the coverage limit.
|
* "%" indicates that all points on the line are below the coverage min.
|
||||||
* "+" coverage point was at or above the limit. Only used with :option:`--annotate-points`.
|
* "~" indicates that some points on the line are above the coverage min and some are below.
|
||||||
* "-" coverage point was below the limit. Only used with :option:`--annotate-points`.
|
* "+" coverage point was at or above the min. Only used with :option:`--annotate-points`.
|
||||||
|
* "-" coverage point was below the min. Only used with :option:`--annotate-points`.
|
||||||
|
|
||||||
.. code-block::
|
.. code-block::
|
||||||
|
|
||||||
100000 input logic a; // Begins with whitespace, because
|
100000 input logic a; // Begins with whitespace, because
|
||||||
// number of hits (100000) is above the limit.
|
// number of hits (100000) is above the min.
|
||||||
+100000 point: comment=a // Begins with +, because
|
+100000 point: comment=a // Begins with +, because
|
||||||
// number of hits (100000) is above the limit.
|
// number of hits (100000) is above the min.
|
||||||
%000000 input logic b; // Begins with %, because
|
%000000 input logic b; // Begins with %, because
|
||||||
// number of hits (0) is below the limit.
|
// number of hits (0) is below the min.
|
||||||
-000000 point: comment=b // Begins with -, because
|
-000000 point: comment=b // Begins with -, because
|
||||||
// number of hits (0) is below the limit.
|
// number of hits (0) is below the min.
|
||||||
|
~000010 if (cyc!=0) begin // Begins with ~, because
|
||||||
|
// branches are below and above the min.
|
||||||
|
+000010 point: comment=if // The if branch is above the min.
|
||||||
|
-000000 point: comment=else // The else branch is below the min.
|
||||||
|
|
||||||
.. option:: --annotate-all
|
.. option:: --annotate-all
|
||||||
|
|
||||||
Specifies all files should be shown. By default, only those source files
|
Specifies all files should be shown. By default, only those source
|
||||||
with low coverage are written to the output directory.
|
files with low coverage are written to the output directory.
|
||||||
|
|
||||||
This option should be used together with :option:`--annotate`.
|
This option should be used together with :option:`--annotate`.
|
||||||
|
|
||||||
.. option:: --annotate-min <count>
|
.. option:: --annotate-min <count>
|
||||||
|
|
||||||
Specifies the threshold (<count>) below which coverage point is considered
|
Specifies the threshold (<count>) below which coverage point is
|
||||||
sufficient. If the threshold is not exceeded, then the annotation will begin
|
considered sufficient. If the threshold is not exceeded, then the
|
||||||
with a "%" symbol to indicate the coverage is insufficient.
|
annotation will begin with a "%" symbol to indicate the coverage is
|
||||||
|
insufficient.
|
||||||
|
|
||||||
The <count> threshold defaults to 10.
|
The <count> threshold defaults to 10.
|
||||||
|
|
||||||
This option should be used together with :option:`--annotate`.
|
This option should be used together with :option:`--annotate`.
|
||||||
|
|
||||||
|
|
||||||
.. option:: --annotate-points
|
.. option:: --annotate-points
|
||||||
|
|
||||||
Specifies all coverage points should be shown after each line of text. By
|
Specifies all coverage points should be shown after each line of text. By
|
||||||
default, only source lines are shown.
|
default, only source lines are shown.
|
||||||
|
|
||||||
.. code-block::
|
.. code-block::
|
||||||
|
|
||||||
100000 input logic a, b, c;
|
100000 input logic a, b, c;
|
||||||
+100000 point: comment=a // These lines are only shown
|
+100000 point: comment=a // These lines are only shown
|
||||||
+200000 point: comment=b // with option --annotate-points
|
+200000 point: comment=b // with option --annotate-points
|
||||||
+300000 point: comment=c // enabled.
|
+300000 point: comment=c // enabled.
|
||||||
|
|
||||||
|
|
||||||
This option should be used together with :option:`--annotate`.
|
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
|
.. option:: --help
|
||||||
|
|
||||||
Displays a help summary, the program version, and exits.
|
Displays a help summary, the program version, and exits.
|
||||||
|
|
||||||
.. option:: --rank
|
.. option:: --rank
|
||||||
|
|
||||||
Prints an experimental report listing the relative importance of each test
|
Prints an experimental report listing the relative importance of each
|
||||||
in covering all of the coverage points. The report shows "Covered" which
|
test in covering all of the coverage points. The report shows "Covered"
|
||||||
indicates the number of points the test covers; a test is considered to
|
which indicates the number of points the test covers; a test is
|
||||||
cover a point if it has a bucket count of at least 1. The "rank" column has
|
considered to cover a point if it has a bucket count of at least 1. The
|
||||||
a higher number t indicate the test is more critical, and rank 0 means the
|
"rank" column has a higher number t indicate the test is more critical,
|
||||||
test does not need to be run to cover the points. "RankPts" indicates the
|
and rank 0 means the test does not need to be run to cover the points.
|
||||||
number of coverage points this test will contribute to overall coverage if
|
"RankPts" indicates the number of coverage points this test will
|
||||||
all tests are run in the order of highest to the lowest rank.
|
contribute to overall coverage if all tests are run in the order of
|
||||||
|
highest to the lowest rank.
|
||||||
|
|
||||||
.. option:: --unlink
|
.. option:: --unlink
|
||||||
|
|
||||||
With :option:`--write`, unlink all input files after the output
|
With :option:`--write`, unlink all input files after the output has been
|
||||||
has been successfully created.
|
successfully created.
|
||||||
|
|
||||||
.. option:: --version
|
.. option:: --version
|
||||||
|
|
||||||
Displays program version and exits.
|
Displays program version and exits.
|
||||||
|
|
||||||
.. option:: --write <filename>
|
.. option:: --write <filename>
|
||||||
|
|
||||||
Specifies the aggregate coverage results, summed across all the files,
|
Specifies the aggregate coverage results, summed across all the files,
|
||||||
should be written to the given filename in verilator_coverage data format.
|
should be written to the given filename in verilator_coverage data
|
||||||
This is useful in scripts to combine many coverage data files (likely
|
format. This is useful in scripts to combine many coverage data files
|
||||||
generated from random test runs) into one master coverage file.
|
(likely generated from random test runs) into one master coverage file.
|
||||||
|
|
||||||
.. option:: --write-info <filename.info>
|
.. option:: --write-info <filename.info>
|
||||||
|
|
||||||
Specifies the aggregate coverage results, summed across all the files,
|
Specifies the aggregate coverage results, summed across all the files,
|
||||||
should be written to the given filename in :command:`lcov` .info format.
|
should be written to the given filename in :command:`lcov` .info format.
|
||||||
This may be used to feed into :command:`lcov` to aggregate or generate
|
This may be used to feed into :command:`lcov` to aggregate or generate
|
||||||
reports.
|
reports. This format lacks the comments for cover points that the
|
||||||
|
verilator_coverage format has. It can be used with :command:`genhtml` to
|
||||||
Converting from the Verilator coverage data format to the info format is
|
generate an HTML report. :command:`genhtml --branch-coverage` will also
|
||||||
lossy; the info will have all forms of coverage merged line coverage, and
|
display the branch coverage, analogous to :option:`--annotate-points`.
|
||||||
if there are multiple coverage points on a single line they will merge.
|
|
||||||
The minimum coverage across all merged points will be used to report
|
|
||||||
coverage of the line.
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
verilator_gantt
|
verilator_gantt
|
||||||
@@ -51,6 +51,10 @@ predicted_parallelism
|
|||||||
cpu#_thread
|
cpu#_thread
|
||||||
For the given CPU number, the thread number measured to be executing.
|
For the given CPU number, the thread number measured to be executing.
|
||||||
|
|
||||||
|
cpu#_waiting
|
||||||
|
For the given CPU number, aggregated waiting time for mtask dependencies.
|
||||||
|
Visualized as `X` values.
|
||||||
|
|
||||||
mtask#_cpu
|
mtask#_cpu
|
||||||
For the given mtask id, the CPU it was measured to execute on.
|
For the given mtask id, the CPU it was measured to execute on.
|
||||||
|
|
||||||
@@ -62,6 +66,17 @@ predicted_thread#_mtask
|
|||||||
executing.
|
executing.
|
||||||
|
|
||||||
|
|
||||||
|
verilator_gantt Example Usage
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
..
|
||||||
|
|
||||||
|
verilator_gantt --help
|
||||||
|
verilator_gantt --version
|
||||||
|
|
||||||
|
verilator_gantt profile_exec.dat
|
||||||
|
|
||||||
|
|
||||||
verilator_gantt Arguments
|
verilator_gantt Arguments
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
@@ -69,16 +84,16 @@ verilator_gantt Arguments
|
|||||||
|
|
||||||
.. option:: <filename>
|
.. option:: <filename>
|
||||||
|
|
||||||
The filename to read data from; the default is "profile_exec.dat".
|
The filename to read data from; the default is "profile_exec.dat".
|
||||||
|
|
||||||
.. option:: --help
|
.. option:: --help
|
||||||
|
|
||||||
Displays a help summary, the program version, and exits.
|
Displays a help summary, the program version, and exits.
|
||||||
|
|
||||||
.. option:: --no-vcd
|
.. option:: --no-vcd
|
||||||
|
|
||||||
Disables creating a .vcd file.
|
Disables creating a .vcd file.
|
||||||
|
|
||||||
.. option:: --vcd <filename>
|
.. option:: --vcd <filename>
|
||||||
|
|
||||||
Sets the output filename for vcd dump; the default is "verilator_gantt.vcd".
|
Sets the output filename for vcd dump; the default is "verilator_gantt.vcd".
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
verilator_profcfunc
|
verilator_profcfunc
|
||||||
@@ -15,6 +15,17 @@ reported as a rounding error.
|
|||||||
|
|
||||||
For an overview of the use of verilator_profcfunc, see :ref:`Profiling`.
|
For an overview of the use of verilator_profcfunc, see :ref:`Profiling`.
|
||||||
|
|
||||||
|
verilator_profcfunc Example Usage
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
..
|
||||||
|
|
||||||
|
verilator_profcfunc --help
|
||||||
|
verilator_profcfunc --version
|
||||||
|
|
||||||
|
verilator_profcfunc gprof.out
|
||||||
|
|
||||||
|
|
||||||
verilator_profcfunc Arguments
|
verilator_profcfunc Arguments
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
@@ -22,8 +33,8 @@ verilator_profcfunc Arguments
|
|||||||
|
|
||||||
.. option:: <filename>
|
.. option:: <filename>
|
||||||
|
|
||||||
The :command:`gprof`-generated filename to read data from. Typically "gprof.out".
|
The :command:`gprof`-generated filename to read data from. Typically "gprof.out".
|
||||||
|
|
||||||
.. option:: --help
|
.. option:: --help
|
||||||
|
|
||||||
Displays a help summary, the program version, and exits.
|
Displays a help summary, the program version, and exits.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
*********************************
|
*********************************
|
||||||
|
|||||||
+218
-175
@@ -1,14 +1,19 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
*******************
|
=====================
|
||||||
Language Extensions
|
Language Extensions
|
||||||
*******************
|
=====================
|
||||||
|
|
||||||
The following additional constructs are the extensions Verilator supports
|
The following additional constructs are the extensions Verilator supports
|
||||||
on top of standard Verilog code. Using these features outside of comments
|
on top of standard Verilog code. Using these features outside of comments
|
||||||
or "`ifdef`"'s may break other tools.
|
or "`ifdef`"'s may break other tools.
|
||||||
|
|
||||||
|
.. option:: """ [string] """
|
||||||
|
|
||||||
|
A triple-quoted block specifies a string that may include newlines and
|
||||||
|
single quotes. This extension was standardized in IEEE 1800-2023.
|
||||||
|
|
||||||
.. option:: `__FILE__
|
.. option:: `__FILE__
|
||||||
|
|
||||||
The :option:`\`__FILE__` define expands to the current filename as a
|
The :option:`\`__FILE__` define expands to the current filename as a
|
||||||
@@ -21,6 +26,12 @@ or "`ifdef`"'s may break other tools.
|
|||||||
C++'s __LINE__. This Verilator feature added in 2006 was incorporated
|
C++'s __LINE__. This Verilator feature added in 2006 was incorporated
|
||||||
into IEEE 1800-2009.
|
into IEEE 1800-2009.
|
||||||
|
|
||||||
|
.. option:: `coverage_block_off
|
||||||
|
|
||||||
|
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:`Verilator Control Files`.
|
||||||
|
|
||||||
.. option:: `error [string]
|
.. option:: `error [string]
|
||||||
|
|
||||||
This will report an error when the preprocessor emits it, similar to
|
This will report an error when the preprocessor emits it, similar to
|
||||||
@@ -33,10 +44,117 @@ or "`ifdef`"'s may break other tools.
|
|||||||
internal tests, so that debugging can leave the line numbers correctly
|
internal tests, so that debugging can leave the line numbers correctly
|
||||||
referring to the test file's line numbers.
|
referring to the test file's line numbers.
|
||||||
|
|
||||||
.. option:: """ [string] """
|
.. option:: `systemc_class_name
|
||||||
|
|
||||||
A triple-quoted block specifies a string that may include newlines and
|
Inside one of the :option:`\`systemc_... <\`systemc_header>` text
|
||||||
single quotes. This extension was standardized in IEEE 1800-2023.
|
blocks, replaced with the C++ class name generated for the given
|
||||||
|
containing SystemVerilog class or module. Currently this is replaced
|
||||||
|
blindly, ignoring quoting or other escapes; this behavior may change in
|
||||||
|
the future. This attribute is indented only to be used internally in
|
||||||
|
`verilated_std.sv`.
|
||||||
|
|
||||||
|
.. option:: `systemc_ctor
|
||||||
|
|
||||||
|
Take the remaining text up to the next :option:`\`verilog` or
|
||||||
|
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
||||||
|
verbatim into the C++ class constructor. Must be placed as a module or
|
||||||
|
class item, e.g., directly inside a module/endmodule or class/endclass
|
||||||
|
pair. Despite the name of this macro, this also works in pure C++ code.
|
||||||
|
|
||||||
|
.. option:: `systemc_dtor
|
||||||
|
|
||||||
|
Take the remaining text up to the next :option:`\`verilog` or
|
||||||
|
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
||||||
|
verbatim into the C++ class destructor. Must be placed as a module or
|
||||||
|
class item, e.g., directly inside a module/endmodule or class/endclass
|
||||||
|
pair. Despite the name of this macro, this also works in pure C++ code.
|
||||||
|
|
||||||
|
.. option:: `systemc_header
|
||||||
|
|
||||||
|
Take the remaining text up to the next :option:`\`verilog` or
|
||||||
|
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
||||||
|
verbatim into the output .h file's header. Must be placed as a module
|
||||||
|
or class item, e.g., directly inside a module/endmodule or
|
||||||
|
class/endclass pair. Despite the name of this macro, this also works in
|
||||||
|
pure C++ code.
|
||||||
|
|
||||||
|
.. option:: `systemc_header_post
|
||||||
|
|
||||||
|
Take the remaining text up to the next :option:`\`verilog` or
|
||||||
|
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
||||||
|
verbatim into the output .h file's header after the class definition.
|
||||||
|
Must be placed as a module or class item, e.g., directly inside a
|
||||||
|
module/endmodule or class/endclass pair. Despite the name of this macro,
|
||||||
|
this also works in pure C++ code.
|
||||||
|
|
||||||
|
.. option:: `systemc_imp_header
|
||||||
|
|
||||||
|
Take the remaining text up to the next :option:`\`verilog` or
|
||||||
|
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
||||||
|
verbatim into the header of all files for this C++ class implementation.
|
||||||
|
Must be placed as a module or class item, e.g., directly inside a
|
||||||
|
module/endmodule or class/endclass pair. Despite the name of this macro,
|
||||||
|
this also works in pure C++ code.
|
||||||
|
|
||||||
|
.. option:: `systemc_implementation
|
||||||
|
|
||||||
|
Take the remaining text up to the next :option:`\`verilog` or
|
||||||
|
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
||||||
|
verbatim into a single file of the C++ class implementation. Must be
|
||||||
|
placed as a module or class item, e.g., directly inside a
|
||||||
|
module/endmodule or class/endclass pair. Despite the name of this macro,
|
||||||
|
this also works in pure C++ code.
|
||||||
|
|
||||||
|
If you will be reading or writing any Verilog variables in the C++
|
||||||
|
functions, the Verilog signals must be declared with a
|
||||||
|
:option:`/*verilator&32;public*/` metacomment. See also the public task
|
||||||
|
feature; writing an accessor may result in cleaner code.
|
||||||
|
|
||||||
|
.. option:: `systemc_interface
|
||||||
|
|
||||||
|
Take the remaining text up to the next :option:`\`verilog` or
|
||||||
|
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
||||||
|
verbatim into the C++ class interface. Must be placed as a module or
|
||||||
|
class item, e.g., directly inside a module/endmodule or class/endclass
|
||||||
|
pair. Despite the name of this macro, this also works in pure C++ code.
|
||||||
|
|
||||||
|
.. option:: `SYSTEMVERILOG
|
||||||
|
|
||||||
|
The SYSTEMVERILOG, SV_COV_START, and related standard predefined macros
|
||||||
|
are defined by default when :vlopt:`--language <--language>` is
|
||||||
|
"1800-\*".
|
||||||
|
|
||||||
|
.. option:: `VERILATOR
|
||||||
|
|
||||||
|
.. option:: `verilator
|
||||||
|
|
||||||
|
.. option:: `verilator3
|
||||||
|
|
||||||
|
The VERILATOR, verilator and verilator3 predefined macros are defined by
|
||||||
|
default so you may "\`ifdef" around tool specific constructs.
|
||||||
|
|
||||||
|
.. option:: `verilator_config
|
||||||
|
|
||||||
|
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` control file option
|
||||||
|
nor timing metacomments.
|
||||||
|
|
||||||
|
.. option:: `verilog
|
||||||
|
|
||||||
|
Switch back to processing Verilog code after a
|
||||||
|
:option:`\`systemc_... <\`systemc_header>` mode switch. The Verilog
|
||||||
|
code returns to the last language mode specified with
|
||||||
|
"\`begin_keywords", or SystemVerilog if none was specified.
|
||||||
|
|
||||||
|
|
||||||
|
.. t_dist_docs_style restart_sort
|
||||||
|
|
||||||
.. option:: $c([string], ...);
|
.. option:: $c([string], ...);
|
||||||
|
|
||||||
@@ -86,6 +204,16 @@ or "`ifdef`"'s may break other tools.
|
|||||||
prints 5 digits per the C standard. This extension was standardized into
|
prints 5 digits per the C standard. This extension was standardized into
|
||||||
1800-2009.
|
1800-2009.
|
||||||
|
|
||||||
|
.. option:: $stacktrace
|
||||||
|
|
||||||
|
Called as a task, print a stack trace. Called as a function, return a
|
||||||
|
string with a stack trace. This relies on the C++ system trace, which
|
||||||
|
may give less meaningful results if the model is not compiled with debug
|
||||||
|
symbols. Also, the data represents the C++ stack; the SystemVerilog
|
||||||
|
functions/tasks involved may be renamed and/or inlined before becoming
|
||||||
|
the C++ functions that may be visible in the stack trace. This
|
||||||
|
extension was standardized in IEEE 1800-2023.
|
||||||
|
|
||||||
.. option:: $timeprecision
|
.. option:: $timeprecision
|
||||||
|
|
||||||
Returns the timeprecision of the model as an integer. This extension is
|
Returns the timeprecision of the model as an integer. This extension is
|
||||||
@@ -96,98 +224,6 @@ or "`ifdef`"'s may break other tools.
|
|||||||
Returns the timeunit of the current module as an integer. This
|
Returns the timeunit of the current module as an integer. This
|
||||||
extension is experimental and may be removed without deprecation.
|
extension is experimental and may be removed without deprecation.
|
||||||
|
|
||||||
.. option:: `coverage_block_off
|
|
||||||
|
|
||||||
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`.
|
|
||||||
|
|
||||||
.. option:: `systemc_header
|
|
||||||
|
|
||||||
Take the remaining text up to the next :option:`\`verilog` or
|
|
||||||
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
|
||||||
verbatim into the output .h file's header. Must be placed as a module
|
|
||||||
item, e.g., directly inside a module/endmodule pair. Despite the name of
|
|
||||||
this macro, this also works in pure C++ code.
|
|
||||||
|
|
||||||
.. option:: `systemc_ctor
|
|
||||||
|
|
||||||
Take the remaining text up to the next :option:`\`verilog` or
|
|
||||||
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
|
||||||
verbatim into the C++ class constructor. Must be placed as a module
|
|
||||||
item, e.g., directly inside a module/endmodule pair. Despite the name of
|
|
||||||
this macro, this also works in pure C++ code.
|
|
||||||
|
|
||||||
.. option:: `systemc_dtor
|
|
||||||
|
|
||||||
Take the remaining text up to the next :option:`\`verilog` or
|
|
||||||
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
|
||||||
verbatim into the C++ class destructor. Must be placed as a module
|
|
||||||
item, e.g., directly inside a module/endmodule pair. Despite the name of
|
|
||||||
this macro, this also works in pure C++ code.
|
|
||||||
|
|
||||||
.. option:: `systemc_interface
|
|
||||||
|
|
||||||
Take the remaining text up to the next :option:`\`verilog` or
|
|
||||||
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
|
||||||
verbatim into the C++ class interface. Must be placed as a module item,
|
|
||||||
e.g., directly inside a module/endmodule pair. Despite the name of this
|
|
||||||
macro, this also works in pure C++ code.
|
|
||||||
|
|
||||||
.. option:: `systemc_imp_header
|
|
||||||
|
|
||||||
Take the remaining text up to the next :option:`\`verilog` or
|
|
||||||
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
|
||||||
verbatim into the header of all files for this C++ class implementation.
|
|
||||||
Must be placed as a module item, e.g., directly inside a module/endmodule
|
|
||||||
pair. Despite the name of this macro, this also works in pure C++ code.
|
|
||||||
|
|
||||||
.. option:: `systemc_implementation
|
|
||||||
|
|
||||||
Take the remaining text up to the next :option:`\`verilog` or
|
|
||||||
:option:`\`systemc_... <\`systemc_header>` mode switch and place it
|
|
||||||
verbatim into a single file of the C++ class implementation. Must be
|
|
||||||
placed as a module item, e.g., directly inside a module/endmodule
|
|
||||||
pair. Despite the name of this macro, this also works in pure C++ code.
|
|
||||||
|
|
||||||
If you will be reading or writing any Verilog variables in the C++
|
|
||||||
functions, the Verilog signals must be declared with a
|
|
||||||
:option:`/*verilator&32;public*/` metacomment. See also the public task
|
|
||||||
feature; writing an accessor may result in cleaner code.
|
|
||||||
|
|
||||||
.. option:: `SYSTEMVERILOG
|
|
||||||
|
|
||||||
The SYSTEMVERILOG, SV_COV_START, and related standard defines are set by
|
|
||||||
default when :vlopt:`--language <--language>` is "1800-\*".
|
|
||||||
|
|
||||||
.. option:: `VERILATOR
|
|
||||||
|
|
||||||
.. option:: `verilator
|
|
||||||
|
|
||||||
.. option:: `verilator3
|
|
||||||
|
|
||||||
The VERILATOR, verilator and verilator3 defines are set by default so
|
|
||||||
you may "\`ifdef" around tool specific constructs.
|
|
||||||
|
|
||||||
.. 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`.
|
|
||||||
|
|
||||||
.. 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
|
|
||||||
nor timing metacomments.
|
|
||||||
|
|
||||||
.. option:: `verilog
|
|
||||||
|
|
||||||
Switch back to processing Verilog code after a
|
|
||||||
:option:`\`systemc_... <\`systemc_header>` mode switch. The Verilog
|
|
||||||
code returns to the last language mode specified with
|
|
||||||
"\`begin_keywords", or SystemVerilog if none was specified.
|
|
||||||
|
|
||||||
.. option:: /*verilator&32;clock_enable*/
|
.. option:: /*verilator&32;clock_enable*/
|
||||||
|
|
||||||
Deprecated and has no effect (ignored).
|
Deprecated and has no effect (ignored).
|
||||||
@@ -210,7 +246,10 @@ or "`ifdef`"'s may break other tools.
|
|||||||
the scheduling algorithm, sometimes required for correct clock behavior,
|
the scheduling algorithm, sometimes required for correct clock behavior,
|
||||||
and always improving performance.
|
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*/
|
||||||
|
|
||||||
.. option:: /*verilator&32;clocker*/
|
.. option:: /*verilator&32;clocker*/
|
||||||
|
|
||||||
@@ -226,7 +265,7 @@ or "`ifdef`"'s may break other tools.
|
|||||||
Specifies the entire begin/end block should be ignored for coverage
|
Specifies the entire begin/end block should be ignored for coverage
|
||||||
analysis purposes.
|
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*/
|
.. option:: /*verilator&32;coverage_off*/
|
||||||
|
|
||||||
@@ -274,7 +313,7 @@ or "`ifdef`"'s may break other tools.
|
|||||||
submodules will be named :code:`{submodule}__DOT__{subsignal}` as C++
|
submodules will be named :code:`{submodule}__DOT__{subsignal}` as C++
|
||||||
does not allow "." in signal names.
|
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*/
|
.. option:: /*verilator&32;isolate_assignments*/
|
||||||
|
|
||||||
@@ -317,7 +356,7 @@ or "`ifdef`"'s may break other tools.
|
|||||||
end
|
end
|
||||||
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 <msg>*/
|
||||||
|
|
||||||
@@ -356,7 +395,7 @@ or "`ifdef`"'s may break other tools.
|
|||||||
Specifies the module the comment appears in should not be inlined into
|
Specifies the module the comment appears in should not be inlined into
|
||||||
any modules that use this module.
|
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*/
|
.. option:: /*verilator&32;no_inline_task*/
|
||||||
|
|
||||||
@@ -367,7 +406,7 @@ or "`ifdef`"'s may break other tools.
|
|||||||
must be pure; they cannot reference any variables outside the task
|
must be pure; they cannot reference any variables outside the task
|
||||||
itself.
|
itself.
|
||||||
|
|
||||||
Same as :option:`no_inline` configuration file option.
|
Same as :option:`no_inline` control file option.
|
||||||
|
|
||||||
.. option:: /*verilator&32;public*/ (on parameter)
|
.. option:: /*verilator&32;public*/ (on parameter)
|
||||||
|
|
||||||
@@ -379,29 +418,6 @@ or "`ifdef`"'s may break other tools.
|
|||||||
|
|
||||||
parameter [2:0] PARAM /*verilator public*/ = 2'b0;
|
parameter [2:0] PARAM /*verilator public*/ = 2'b0;
|
||||||
|
|
||||||
.. option:: /*verilator&32;public*/ (on typedef enum)
|
|
||||||
|
|
||||||
Used after an enum typedef declaration to indicate the emitted C code
|
|
||||||
should have the enum values visible. Due to C++ language restrictions,
|
|
||||||
this may only be used on 64-bit or narrower integral enumerations.
|
|
||||||
|
|
||||||
.. code-block:: sv
|
|
||||||
|
|
||||||
typedef enum logic [2:0] { ZERO = 3'b0 } pub_t /*verilator public*/;
|
|
||||||
|
|
||||||
.. option:: /*verilator&32;public*/ (on variable)
|
|
||||||
|
|
||||||
Used after an input, output, register, or wire declaration to indicate
|
|
||||||
the signal should be declared so that C code may read or write the value
|
|
||||||
of the signal. This will also declare this module public; otherwise, use
|
|
||||||
:code:`/*verilator&32;public_flat*/`.
|
|
||||||
|
|
||||||
Instead of using public variables, consider making a DPI or public
|
|
||||||
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.
|
|
||||||
|
|
||||||
.. option:: /*verilator&32;public*/ (on task/function)
|
.. option:: /*verilator&32;public*/ (on task/function)
|
||||||
|
|
||||||
Used inside the declaration section of a function or task declaration to
|
Used inside the declaration section of a function or task declaration to
|
||||||
@@ -424,34 +440,30 @@ or "`ifdef`"'s may break other tools.
|
|||||||
You may want to use DPI exports instead, as it's compatible with other
|
You may want to use DPI exports instead, as it's compatible with other
|
||||||
simulators.
|
simulators.
|
||||||
|
|
||||||
Same as :option:`public` configuration file option.
|
Same as :option:`public` control file option.
|
||||||
|
|
||||||
.. option:: /*verilator&32;public_flat*/ (on variable)
|
.. option:: /*verilator&32;public*/ (on typedef enum)
|
||||||
|
|
||||||
|
Used after an enum typedef declaration to indicate the emitted C code
|
||||||
|
should have the enum values visible. Due to C++ language restrictions,
|
||||||
|
this may only be used on 64-bit or narrower integral enumerations.
|
||||||
|
|
||||||
|
.. code-block:: sv
|
||||||
|
|
||||||
|
typedef enum logic [2:0] { ZERO = 3'b0 } pub_t /*verilator public*/;
|
||||||
|
|
||||||
|
.. option:: /*verilator&32;public*/ (on variable)
|
||||||
|
|
||||||
Used after an input, output, register, or wire declaration to indicate
|
Used after an input, output, register, or wire declaration to indicate
|
||||||
the signal should be declared so that C code may read or write the value
|
the signal should be declared so that C code may read or write the value
|
||||||
of the signal. This will not declare this module public, which means
|
of the signal. This will also declare this module public; otherwise, use
|
||||||
the name of the signal or path to it may change based upon the module
|
:code:`/*verilator&32;public_flat*/`.
|
||||||
inlining which takes place.
|
|
||||||
|
|
||||||
Same as :option:`public_flat` configuration file option.
|
Instead of using public variables, consider making a DPI or public
|
||||||
|
function that accesses the variable. This is nicer as it provides an
|
||||||
|
obvious entry point compatible across simulators.
|
||||||
|
|
||||||
.. option:: /*verilator&32;public_flat_rd*/ (on variable)
|
Same as :option:`public` control file option.
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
.. 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.
|
|
||||||
|
|
||||||
Same as :option:`public_flat_rw` configuration file option.
|
|
||||||
|
|
||||||
.. option:: /*verilator&32;public_[|flat|flat_rd|flat_rw]_on [@(<edge_list>)]*/ (as scope)
|
.. option:: /*verilator&32;public_[|flat|flat_rd|flat_rw]_on [@(<edge_list>)]*/ (as scope)
|
||||||
|
|
||||||
@@ -476,9 +488,32 @@ or "`ifdef`"'s may break other tools.
|
|||||||
parameter width /*verilator public_flat_rw*/ = 8;
|
parameter width /*verilator public_flat_rw*/ = 8;
|
||||||
logic data;
|
logic data;
|
||||||
|
|
||||||
.. option:: /*verilator&32;public_off*/
|
.. option:: /*verilator&32;public_flat*/ (on variable)
|
||||||
|
|
||||||
Terminates the previous `/*verilator public*_on*/` directive; see above.
|
Used after an input, output, register, or wire declaration to indicate
|
||||||
|
the signal should be declared so that C code may read or write the value
|
||||||
|
of the signal. This will not declare this module public, which means
|
||||||
|
the name of the signal or path to it may change based upon the module
|
||||||
|
inlining which takes place.
|
||||||
|
|
||||||
|
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` control file option.
|
||||||
|
|
||||||
|
.. 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.
|
||||||
|
|
||||||
|
Same as :option:`public_flat_rw` control file option.
|
||||||
|
|
||||||
.. option:: /*verilator&32;public_module*/
|
.. option:: /*verilator&32;public_module*/
|
||||||
|
|
||||||
@@ -488,15 +523,11 @@ or "`ifdef`"'s may break other tools.
|
|||||||
contains public signals or \`systemc_ directives. Use of this is
|
contains public signals or \`systemc_ directives. Use of this is
|
||||||
implied when using the :vlopt:`--public` option.
|
implied when using the :vlopt:`--public` option.
|
||||||
|
|
||||||
Same as :option:`public` configuration file option.
|
Same as :option:`public` control file option.
|
||||||
|
|
||||||
.. option:: /*verilator&32;sc_clock*/
|
.. option:: /*verilator&32;public_off*/
|
||||||
|
|
||||||
Deprecated and ignored. Previously used after an input declaration to
|
Terminates the previous `/*verilator public*_on*/` directive; see above.
|
||||||
indicate the signal should be declared in SystemC as a sc_clock instead
|
|
||||||
of a bool. This was needed in SystemC 1.1 and 1.2 only; versions 2.0
|
|
||||||
and later do not require clock pins to be sc_clocks, and this is no
|
|
||||||
longer needed and is ignored.
|
|
||||||
|
|
||||||
.. option:: /*verilator&32;sc_bv*/
|
.. option:: /*verilator&32;sc_bv*/
|
||||||
|
|
||||||
@@ -507,7 +538,15 @@ or "`ifdef`"'s may break other tools.
|
|||||||
In general, you should avoid using this attribute when unnecessary, as
|
In general, you should avoid using this attribute when unnecessary, as
|
||||||
the performance decreases significantly with increasing usage of sc_bv.
|
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*/
|
||||||
|
|
||||||
|
Deprecated and ignored. Previously used after an input declaration to
|
||||||
|
indicate the signal should be declared in SystemC as a sc_clock instead
|
||||||
|
of a bool. This was needed in SystemC 1.1 and 1.2 only; versions 2.0
|
||||||
|
and later do not require clock pins to be sc_clocks, and this is no
|
||||||
|
longer needed and is ignored.
|
||||||
|
|
||||||
.. option:: /*verilator&32;sformat*/
|
.. option:: /*verilator&32;sformat*/
|
||||||
|
|
||||||
@@ -517,7 +556,7 @@ or "`ifdef`"'s may break other tools.
|
|||||||
$display-like behavior. See the :file:`test_regress/t/t_dpi_display.v`
|
$display-like behavior. See the :file:`test_regress/t/t_dpi_display.v`
|
||||||
file for an example.
|
file for an example.
|
||||||
|
|
||||||
Same as :option:`sformat` configuration file option.
|
Same as :option:`sformat` control file option.
|
||||||
|
|
||||||
.. option:: /*verilator&32;split_var*/
|
.. option:: /*verilator&32;split_var*/
|
||||||
|
|
||||||
@@ -550,7 +589,21 @@ or "`ifdef`"'s may break other tools.
|
|||||||
large arrays may slow down the Verilation speed, so use this only on
|
large arrays may slow down the Verilation speed, so use this only on
|
||||||
variables that require it.
|
variables that require it.
|
||||||
|
|
||||||
Same as :option:`split_var` configuration file option.
|
Packed variables that are only referenced locally (without hierarchical
|
||||||
|
references) via non-overlapping, constant-indexed bit or part select
|
||||||
|
expressions are split automatically. This covers the somewhat common
|
||||||
|
usage pattern:
|
||||||
|
|
||||||
|
.. code-block:: sv
|
||||||
|
|
||||||
|
logic [1:0][31:0] tmp;
|
||||||
|
|
||||||
|
assign tmp[0] = foo + a;
|
||||||
|
assign tmp[1] = tmp[1] + b;
|
||||||
|
assign bar = tmp[1] + c;
|
||||||
|
|
||||||
|
|
||||||
|
Same as :option:`split_var` control file option.
|
||||||
|
|
||||||
.. option:: /*verilator&32;tag <text...>*/
|
.. option:: /*verilator&32;tag <text...>*/
|
||||||
|
|
||||||
@@ -565,14 +618,14 @@ or "`ifdef`"'s may break other tools.
|
|||||||
:option:`--no-timing`), and :code:`fork`/:code:`join*` blocks are
|
:option:`--no-timing`), and :code:`fork`/:code:`join*` blocks are
|
||||||
converted into :code:`begin`/:code:`end` blocks.
|
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*/
|
.. option:: /*verilator&32;timing_on*/
|
||||||
|
|
||||||
Re-enable all timing constructs after this metacomment (only applicable
|
Re-enable all timing constructs after this metacomment (only applicable
|
||||||
after :option:`timing_off`).
|
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*/
|
.. option:: /*verilator&32;trace_init_task*/
|
||||||
|
|
||||||
@@ -583,7 +636,7 @@ or "`ifdef`"'s may break other tools.
|
|||||||
Attached to a DPI import to indicate that function should be called when
|
Attached to a DPI import to indicate that function should be called when
|
||||||
initializing tracing. This attribute is indented only to be used
|
initializing tracing. This attribute is indented only to be used
|
||||||
internally in code that Verilator generates when :vlopt:`--lib-create`
|
internally in code that Verilator generates when :vlopt:`--lib-create`
|
||||||
or :vlopt:`--hierarchical` is used along with :vlopt:`--trace`.
|
or :vlopt:`--hierarchical` is used along with :vlopt:`--trace-vcd`.
|
||||||
|
|
||||||
.. option:: /*verilator&32;tracing_off*/
|
.. option:: /*verilator&32;tracing_off*/
|
||||||
|
|
||||||
@@ -613,13 +666,3 @@ or "`ifdef`"'s may break other tools.
|
|||||||
following loop at the same statement level should always be fully
|
following loop at the same statement level should always be fully
|
||||||
unrolled by Verilator, ignoring :vlopt:`--unroll-count`. This is
|
unrolled by Verilator, ignoring :vlopt:`--unroll-count`. This is
|
||||||
similar to clang's ``#pragma clang loop unroll(full)``.
|
similar to clang's ``#pragma clang loop unroll(full)``.
|
||||||
|
|
||||||
.. option:: $stacktrace
|
|
||||||
|
|
||||||
Called as a task, print a stack trace. Called as a function, return a
|
|
||||||
string with a stack trace. This relies on the C++ system trace, which
|
|
||||||
may give less meaningful results if the model is not compiled with debug
|
|
||||||
symbols. Also, the data represents the C++ stack; the SystemVerilog
|
|
||||||
functions/tasks involved may be renamed and/or inlined before becoming
|
|
||||||
the C++ functions that may be visible in the stack trace. This
|
|
||||||
extension was standardized in IEEE 1800-2023.
|
|
||||||
|
|||||||
+9
-7
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
******************************
|
******************************
|
||||||
@@ -128,7 +128,7 @@ How do I generate waveforms (traces) in C++?
|
|||||||
|
|
||||||
See also the next question for tracing in SystemC mode.
|
See also the next question for tracing in SystemC mode.
|
||||||
|
|
||||||
A. Pass the :vlopt:`--trace` option to Verilator. Then you may use ``$dumpfile`` and
|
A. Pass the :vlopt:`--trace-vcd` option to Verilator. Then you may use ``$dumpfile`` and
|
||||||
``$dumpvars`` to enable traces, the same as with any Verilog simulator,
|
``$dumpvars`` to enable traces, the same as with any Verilog simulator,
|
||||||
although Verilator ignores the arguments to ``$dumpvars``. See
|
although Verilator ignores the arguments to ``$dumpvars``. See
|
||||||
``examples/make_tracing_c`` in the distribution.
|
``examples/make_tracing_c`` in the distribution.
|
||||||
@@ -177,7 +177,7 @@ file.
|
|||||||
How do I generate waveforms (traces) in SystemC?
|
How do I generate waveforms (traces) in SystemC?
|
||||||
""""""""""""""""""""""""""""""""""""""""""""""""
|
""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
A. Pass the :vlopt:`--trace` option to Verilator, and in your top-level
|
A. Pass the :vlopt:`--trace-vcd` option to Verilator, and in your top-level
|
||||||
:code:`sc_main()`, call :code:`Verilated::traceEverOn(true)`. Then you
|
:code:`sc_main()`, call :code:`Verilated::traceEverOn(true)`. Then you
|
||||||
may use :code:`$dumpfile` and code:`$dumpvars` to enable traces, as
|
may use :code:`$dumpfile` and code:`$dumpvars` to enable traces, as
|
||||||
with any Verilog simulator; see the non-SystemC example in
|
with any Verilog simulator; see the non-SystemC example in
|
||||||
@@ -259,9 +259,11 @@ How do I view waveforms (aka dumps or traces)?
|
|||||||
""""""""""""""""""""""""""""""""""""""""""""""
|
""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
Verilator creates standard VCD (Value Change Dump) and FST files. VCD
|
Verilator creates standard VCD (Value Change Dump) and FST files. VCD
|
||||||
files are viewable with the open-source GTKWave (recommended), or Dinotrace
|
files are viewable with the open-source
|
||||||
(legacy) programs, or any of the many closed-source offerings; FST is
|
`GTKWave <https://gtkwave.sourceforge.net/>`_,
|
||||||
supported only by GTKWave.
|
`Surfer <https://surfer-project.org/>`_, Dinotrace (legacy), or any of the
|
||||||
|
many closed-source viewer offerings; FST is supported only by GTKWave and
|
||||||
|
Surfer.
|
||||||
|
|
||||||
|
|
||||||
How do I speed up writing large waveform (trace) files?
|
How do I speed up writing large waveform (trace) files?
|
||||||
@@ -333,7 +335,7 @@ How do I prevent my assertions from firing during reset?
|
|||||||
|
|
||||||
Call :code:`Verilated::assertOn(false)` before you first call the model,
|
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
|
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()?
|
Why do I get "undefined reference to sc_time_stamp()?
|
||||||
|
|||||||
+19
-15
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
*****
|
*****
|
||||||
@@ -48,12 +48,6 @@ For --cc/--sc, it creates:
|
|||||||
- Make include file for compiling (from --make gmake)
|
- Make include file for compiling (from --make gmake)
|
||||||
* - *{prefix}*\ _classes.mk
|
* - *{prefix}*\ _classes.mk
|
||||||
- Make include file with class names (from --make gmake)
|
- Make include file with class names (from --make gmake)
|
||||||
* - *{prefix}*\ _hier.mk
|
|
||||||
- Make file for hierarchy blocks (from --make gmake)
|
|
||||||
* - *{prefix}*\ __hierMkArgs.f
|
|
||||||
- Arguments for hierarchical Verilation (from --make gmake)
|
|
||||||
* - *{prefix}*\ __hierCMakeArgs.f
|
|
||||||
- Arguments for hierarchical Verilation (from --make cmake)
|
|
||||||
* - *{prefix}*\ .h
|
* - *{prefix}*\ .h
|
||||||
- Model header
|
- Model header
|
||||||
* - *{prefix}*\ .cpp
|
* - *{prefix}*\ .cpp
|
||||||
@@ -71,9 +65,9 @@ For --cc/--sc, it creates:
|
|||||||
* - *{prefix}*\ ___024root\ *{__DepSet_hash__n}*\ .cpp
|
* - *{prefix}*\ ___024root\ *{__DepSet_hash__n}*\ .cpp
|
||||||
- Infrequent cold routines (hashed to reduce build times)
|
- Infrequent cold routines (hashed to reduce build times)
|
||||||
* - *{prefix}*\ ___024root__Trace\ *{__n}*\ .cpp
|
* - *{prefix}*\ ___024root__Trace\ *{__n}*\ .cpp
|
||||||
- Wave file generation code (from --trace)
|
- Wave file generation code (from --trace-\*)
|
||||||
* - *{prefix}*\ ___024root__Trace__Slow\ *{__n}*\ .cpp
|
* - *{prefix}*\ ___024root__Trace__Slow\ *{__n}*\ .cpp
|
||||||
- Wave file generation code (from --trace)
|
- Wave file generation code (from --trace-\*)
|
||||||
* - *{prefix}*\ __Dpi.h
|
* - *{prefix}*\ __Dpi.h
|
||||||
- DPI import and export declarations (from --dpi)
|
- DPI import and export declarations (from --dpi)
|
||||||
* - *{prefix}*\ __Dpi.cpp
|
* - *{prefix}*\ __Dpi.cpp
|
||||||
@@ -95,27 +89,37 @@ For --cc/--sc, it creates:
|
|||||||
* - *{prefix}{each_verilog_module}{__DepSet_hash__n}*\ .cpp
|
* - *{prefix}{each_verilog_module}{__DepSet_hash__n}*\ .cpp
|
||||||
- Additional lower C++ files (hashed to reduce build times)
|
- Additional lower C++ files (hashed to reduce build times)
|
||||||
|
|
||||||
For --hierarchy mode, it creates:
|
For --hierarchical mode, it creates:
|
||||||
|
|
||||||
.. list-table::
|
.. list-table::
|
||||||
|
|
||||||
* - V\ *{hier_block}*\ /
|
* - V\ *{hier_block}*\ /
|
||||||
- Directory to Verilate each hierarchy block (from --hierarchy)
|
- Directory to Verilate each hierarchical block (from --hierarchical)
|
||||||
* - *{prefix}*\ __hierVer.d
|
* - *{prefix}*\ __hierVer.d
|
||||||
- Make dependencies of the top module (from --hierarchy)
|
- Make dependencies of the top module (from --hierarchical)
|
||||||
|
* - *{prefix}*\ _hier.mk
|
||||||
|
- Make file for hierarchical blocks (from --make gmake)
|
||||||
|
* - *{prefix}*\ __hierCMakeArgs.f
|
||||||
|
- Arguments for hierarchical Verilation (from --make cmake)
|
||||||
|
* - *{prefix}*\ __hierMkArgs.f
|
||||||
|
- Arguments for hierarchical Verilation (from --make gmake)
|
||||||
|
* - *{prefix}*\ __hierParameters.v
|
||||||
|
- Module parameters for hierarchical blocks
|
||||||
* - *{prefix}*\ __hier.dir
|
* - *{prefix}*\ __hier.dir
|
||||||
- Directory to store .dot, .vpp, .tree of top module (from --hierarchy)
|
- Directory to store .dot, .vpp, .tree of top module (from --hierarchical)
|
||||||
|
|
||||||
In specific debug and other modes, it also creates:
|
In specific debug and other modes, it also creates:
|
||||||
|
|
||||||
.. list-table::
|
.. list-table::
|
||||||
|
|
||||||
* - *{prefix}*\ .xml
|
* - *{prefix}*\ .sarif
|
||||||
- XML tree information (from --xml)
|
- SARIF diagnostics (from --diagnostics-sarif)
|
||||||
* - *{prefix}*\ .tree.json
|
* - *{prefix}*\ .tree.json
|
||||||
- JSON tree information (from --json-only)
|
- JSON tree information (from --json-only)
|
||||||
* - *{prefix}*\ .tree.meta.json
|
* - *{prefix}*\ .tree.meta.json
|
||||||
- JSON tree metadata (from --json-only)
|
- JSON tree metadata (from --json-only)
|
||||||
|
* - *{prefix}*\ .xml
|
||||||
|
- XML tree information (from --xml)
|
||||||
* - *{prefix}*\ __cdc.txt
|
* - *{prefix}*\ __cdc.txt
|
||||||
- Clock Domain Crossing checks (from --cdc)
|
- Clock Domain Crossing checks (from --cdc)
|
||||||
* - *{prefix}*\ __stats.txt
|
* - *{prefix}*\ __stats.txt
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
######################
|
######################
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
.. _CMakeInstallation:
|
.. _CMakeInstallation:
|
||||||
|
|||||||
+86
-36
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
.. _Installation:
|
.. _Installation:
|
||||||
@@ -15,17 +15,37 @@ Package Manager Quick Install
|
|||||||
=============================
|
=============================
|
||||||
|
|
||||||
Using a distribution's package manager is the easiest way to get
|
Using a distribution's package manager is the easiest way to get
|
||||||
started. (Note packages are unlikely to have the most recent version, so
|
started. (Note distribution packages almost never have the most recent
|
||||||
:ref:`Git Install` might be a better alternative.) To install as a
|
Verilator version, so we recommend following :ref:`Git Install` below,
|
||||||
package:
|
instead.) To install as a package:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
apt-get install verilator # On Ubuntu
|
apt-get install verilator # On Ubuntu
|
||||||
|
|
||||||
For other distributions, refer to `Repology Verilator Distro Packages
|
For other distributions, refer to `Repology Verilator Distro Packages
|
||||||
<https://repology.org/project/verilator>`__.
|
<https://repology.org/project/verilator>`__.
|
||||||
|
|
||||||
|
.. _pre-commit Quick Install:
|
||||||
|
|
||||||
|
pre-commit Quick Install
|
||||||
|
=============================
|
||||||
|
|
||||||
|
You can use Verilator's `pre-commit <https://pre-commit.com/>`__ hook to
|
||||||
|
lint your code before committing it. It encapsulates the :ref:`Verilator
|
||||||
|
Build Docker Container`, so you need docker on your system to use it. The
|
||||||
|
verilator image will be downloaded automatically.
|
||||||
|
|
||||||
|
To use the hook, add the following entry to your :code:`.pre-commit-config.yaml`:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
repos:
|
||||||
|
- repo: https://github.com/verilator/verilator
|
||||||
|
rev: v5.026 # or later
|
||||||
|
hooks:
|
||||||
|
- id: verilator
|
||||||
|
|
||||||
.. _Git Install:
|
.. _Git Install:
|
||||||
|
|
||||||
Git Quick Install
|
Git Quick Install
|
||||||
@@ -36,7 +56,7 @@ options and details, see :ref:`Detailed Build Instructions` below.
|
|||||||
|
|
||||||
In brief, to install from git:
|
In brief, to install from git:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
# Prerequisites:
|
# Prerequisites:
|
||||||
#sudo apt-get install git help2man perl python3 make autoconf g++ flex bison ccache
|
#sudo apt-get install git help2man perl python3 make autoconf g++ flex bison ccache
|
||||||
@@ -89,7 +109,7 @@ Install Prerequisites
|
|||||||
|
|
||||||
To build or run Verilator, you need these standard packages:
|
To build or run Verilator, you need these standard packages:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
sudo apt-get install git help2man perl python3 make
|
sudo apt-get install git help2man perl python3 make
|
||||||
sudo apt-get install g++ # Alternatively, clang
|
sudo apt-get install g++ # Alternatively, clang
|
||||||
@@ -98,45 +118,59 @@ To build or run Verilator, you need these standard packages:
|
|||||||
sudo apt-get install libfl-dev # Ubuntu only (ignore if gives error)
|
sudo apt-get install libfl-dev # Ubuntu only (ignore if gives error)
|
||||||
sudo apt-get install zlibc zlib1g zlib1g-dev # Ubuntu only (ignore if gives error)
|
sudo apt-get install zlibc zlib1g zlib1g-dev # Ubuntu only (ignore if gives error)
|
||||||
|
|
||||||
|
For SystemC:
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
|
sudo apt-get install libsystemc libsystemc-dev
|
||||||
|
|
||||||
|
For constraints:
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
|
sudo apt-get install z3 # Optional solver
|
||||||
|
|
||||||
|
The following is optional but is recommended for nicely rendered command line
|
||||||
|
help when running Verilator:
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
|
sudo apt-get install perl-doc
|
||||||
|
|
||||||
To build or run Verilator, the following are optional but should be installed
|
To build or run Verilator, the following are optional but should be installed
|
||||||
for good performance:
|
for good performance:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
sudo apt-get install ccache # If present at build, needed for run
|
sudo apt-get install ccache # If present at build, needed for run
|
||||||
sudo apt-get install mold # If present at build, needed for run
|
sudo apt-get install mold # If present at build, needed for run
|
||||||
sudo apt-get install libgoogle-perftools-dev numactl
|
sudo apt-get install libgoogle-perftools-dev numactl
|
||||||
|
|
||||||
The following is optional but is recommended for nicely rendered command line
|
|
||||||
help when running Verilator:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
sudo apt-get install perl-doc
|
|
||||||
|
|
||||||
To build Verilator you will need to install these packages; these do not
|
To build Verilator you will need to install these packages; these do not
|
||||||
need to be present to run Verilator:
|
need to be present to run Verilator:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
sudo apt-get install git autoconf flex bison
|
sudo apt-get install git autoconf flex bison
|
||||||
|
|
||||||
Those developing Verilator itself may also want these (see internals.rst):
|
Those developing Verilator itself may also want these (see internals.rst):
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
sudo apt-get install clang clang-format-14 cmake gdb gprof graphviz lcov
|
sudo apt-get install clang clang-format-14 cmake gdb gprof graphviz lcov
|
||||||
sudo apt-get install python3-clang yapf3 bear jq
|
sudo apt-get install python3-clang python3-distro yapf3 bear jq
|
||||||
sudo pip3 install sphinx sphinx_rtd_theme sphinxcontrib-spelling breathe ruff
|
sudo pip3 install sphinx sphinx_rtd_theme sphinxcontrib-spelling breathe gersemi mbake ruff sarif-tools
|
||||||
sudo pip3 install git+https://github.com/antmicro/astsee.git
|
sudo pip3 install git+https://github.com/antmicro/astsee.git
|
||||||
cpan install Pod::Perldoc
|
cpan install Pod::Perldoc
|
||||||
cpan install Parallel::Forker
|
|
||||||
|
|
||||||
|
|
||||||
Install SystemC
|
Install SystemC
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
If you will be using SystemC (vs straight C++ output), download `SystemC
|
SystemC code can be generated from Verilator (with :vlopt:`--sc`) if it is
|
||||||
|
installed as a package (see above).
|
||||||
|
|
||||||
|
Alternatively, from their sources, download `SystemC
|
||||||
<https://www.accellera.org/downloads/standards/systemc>`__. Follow their
|
<https://www.accellera.org/downloads/standards/systemc>`__. Follow their
|
||||||
installation instructions. You will need to set the
|
installation instructions. You will need to set the
|
||||||
:option:`SYSTEMC_INCLUDE` environment variable to point to the include
|
:option:`SYSTEMC_INCLUDE` environment variable to point to the include
|
||||||
@@ -148,9 +182,24 @@ Install GTKWave
|
|||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
To make use of Verilator FST tracing you will want `GTKwave
|
To make use of Verilator FST tracing you will want `GTKwave
|
||||||
<http://gtkwave.sourceforge.net/>`__ installed, however this is not
|
<https://gtkwave.sourceforge.net/>`__ installed, however this is not
|
||||||
required at Verilator build time.
|
required at Verilator build time.
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
|
sudo apt-get install gtkwave # Optional Waveform viewer
|
||||||
|
|
||||||
|
|
||||||
|
Install Z3
|
||||||
|
^^^^^^^^^^
|
||||||
|
|
||||||
|
In order to use constrained randomization the `Z3 Theorem Prover
|
||||||
|
<https://github.com/z3prover/z3>`__ must be installed, however this is
|
||||||
|
not required at Verilator build time. There are other compatible SMT solvers,
|
||||||
|
like CVC5/CVC4, but they are not guaranteed to work. Since different solvers are
|
||||||
|
faster for different scenarios, the solver to use at run-time can be specified
|
||||||
|
by the environment variable :option:`VERILATOR_SOLVER`.
|
||||||
|
|
||||||
|
|
||||||
.. _Obtain Sources:
|
.. _Obtain Sources:
|
||||||
|
|
||||||
@@ -160,14 +209,14 @@ Obtain Sources
|
|||||||
Get the sources from the git repository: (You need to do this only once,
|
Get the sources from the git repository: (You need to do this only once,
|
||||||
ever.)
|
ever.)
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
git clone https://github.com/verilator/verilator # Only first time
|
git clone https://github.com/verilator/verilator # Only first time
|
||||||
## Note the URL above is not a page you can see with a browser; it's for git only
|
## Note the URL above is not a page you can see with a browser; it's for git only
|
||||||
|
|
||||||
Enter the checkout and determine what version/branch to use:
|
Enter the checkout and determine what version/branch to use:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
cd verilator
|
cd verilator
|
||||||
git pull # Make sure we're up-to-date
|
git pull # Make sure we're up-to-date
|
||||||
@@ -182,7 +231,7 @@ Auto Configure
|
|||||||
|
|
||||||
Create the configuration script:
|
Create the configuration script:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
autoconf # Create ./configure script
|
autoconf # Create ./configure script
|
||||||
|
|
||||||
@@ -193,8 +242,9 @@ Eventual Installation Options
|
|||||||
Before configuring the build, you must decide how you're going to
|
Before configuring the build, you must decide how you're going to
|
||||||
eventually install Verilator onto your system. Verilator will be compiling
|
eventually install Verilator onto your system. Verilator will be compiling
|
||||||
the current value of the environment variables :option:`VERILATOR_ROOT`,
|
the current value of the environment variables :option:`VERILATOR_ROOT`,
|
||||||
:option:`SYSTEMC_INCLUDE`, and :option:`SYSTEMC_LIBDIR` as defaults into
|
:option:`VERILATOR_SOLVER`, :option:`SYSTEMC_INCLUDE`, and
|
||||||
the executable, so they must be correct before configuring.
|
:option:`SYSTEMC_LIBDIR` as defaults into the executable, so they must be
|
||||||
|
correct before configuring.
|
||||||
|
|
||||||
These are the installation options:
|
These are the installation options:
|
||||||
|
|
||||||
@@ -207,7 +257,7 @@ directory (don't run ``make install``). This allows the easiest
|
|||||||
experimentation and upgrading, and allows many versions of Verilator to
|
experimentation and upgrading, and allows many versions of Verilator to
|
||||||
co-exist on a system.
|
co-exist on a system.
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
export VERILATOR_ROOT=`pwd` # if your shell is bash
|
export VERILATOR_ROOT=`pwd` # if your shell is bash
|
||||||
setenv VERILATOR_ROOT `pwd` # if your shell is csh
|
setenv VERILATOR_ROOT `pwd` # if your shell is csh
|
||||||
@@ -229,7 +279,7 @@ that may support multiple versions of every tool. Tell configure the
|
|||||||
eventual destination directory name. We recommend that the destination
|
eventual destination directory name. We recommend that the destination
|
||||||
location include the Verilator version name:
|
location include the Verilator version name:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
unset VERILATOR_ROOT # if your shell is bash
|
unset VERILATOR_ROOT # if your shell is bash
|
||||||
unsetenv VERILATOR_ROOT # if your shell is csh
|
unsetenv VERILATOR_ROOT # if your shell is csh
|
||||||
@@ -238,10 +288,10 @@ location include the Verilator version name:
|
|||||||
|
|
||||||
Note after installing (see `Installation`_), you need to add the path to
|
Note after installing (see `Installation`_), you need to add the path to
|
||||||
the ``bin`` directory to your ``PATH``. Or, if you use `modulecmd
|
the ``bin`` directory to your ``PATH``. Or, if you use `modulecmd
|
||||||
<http://modules.sourceforge.net/>`__, you'll want a module file like the
|
<https://modules.sourceforge.net/>`__, you'll want a module file like the
|
||||||
following:
|
following:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
set install_root /CAD_DISK/verilator/{version-number-used-above}
|
set install_root /CAD_DISK/verilator/{version-number-used-above}
|
||||||
unsetenv VERILATOR_ROOT
|
unsetenv VERILATOR_ROOT
|
||||||
@@ -256,7 +306,7 @@ following:
|
|||||||
The final option is to eventually install Verilator globally, using
|
The final option is to eventually install Verilator globally, using
|
||||||
configure's default system paths:
|
configure's default system paths:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
unset VERILATOR_ROOT # if your shell is bash
|
unset VERILATOR_ROOT # if your shell is bash
|
||||||
unsetenv VERILATOR_ROOT # if your shell is csh
|
unsetenv VERILATOR_ROOT # if your shell is csh
|
||||||
@@ -273,7 +323,7 @@ The command to configure the package was described in the previous step.
|
|||||||
Developers should configure to have more complete developer tests.
|
Developers should configure to have more complete developer tests.
|
||||||
Additional packages may be required for these tests.
|
Additional packages may be required for these tests.
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
export VERILATOR_AUTHOR_SITE=1 # Put in your .bashrc
|
export VERILATOR_AUTHOR_SITE=1 # Put in your .bashrc
|
||||||
./configure --enable-longtests ...above options...
|
./configure --enable-longtests ...above options...
|
||||||
@@ -284,7 +334,7 @@ Compile
|
|||||||
|
|
||||||
Compile Verilator:
|
Compile Verilator:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
make -j `nproc` # Or if error on `nproc`, the number of CPUs in system
|
make -j `nproc` # Or if error on `nproc`, the number of CPUs in system
|
||||||
|
|
||||||
@@ -294,7 +344,7 @@ Test
|
|||||||
|
|
||||||
Check the compilation by running self-tests:
|
Check the compilation by running self-tests:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
make test
|
make test
|
||||||
|
|
||||||
@@ -306,7 +356,7 @@ If you used any install option other than the `1. Run-in-Place from
|
|||||||
VERILATOR_ROOT <#_1_run_in_place_from_verilator_root>`__ scheme, install
|
VERILATOR_ROOT <#_1_run_in_place_from_verilator_root>`__ scheme, install
|
||||||
the files:
|
the files:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
make install
|
make install
|
||||||
|
|
||||||
|
|||||||
+29
-27
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
***************
|
***************
|
||||||
@@ -6,7 +6,7 @@ Input Languages
|
|||||||
***************
|
***************
|
||||||
|
|
||||||
This section describes the languages Verilator takes as input. See also
|
This section describes the languages Verilator takes as input. See also
|
||||||
:ref:`Configuration Files`.
|
:ref:`Verilator Control Files`.
|
||||||
|
|
||||||
|
|
||||||
Language Standard Support
|
Language Standard Support
|
||||||
@@ -90,14 +90,14 @@ wreal.
|
|||||||
Synthesis Directive Assertion Support
|
Synthesis Directive Assertion Support
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
|
||||||
With the :vlopt:`--assert` option, Verilator reads any
|
Verilator reads any :code:`//synopsys full_case` or :code:`//synopsys
|
||||||
|
parallel_case` directives. The same applies to any :code:`//ambit
|
||||||
|
synthesis`, :code:`//cadence` or :code:`//pragma` directives of the same
|
||||||
|
form.
|
||||||
|
|
||||||
:code:`//synopsys full_case` or :code:`//synopsys parallel_case`
|
When these synthesis directives are discovered, unless
|
||||||
directives. The same applies to any :code:`//ambit synthesis`,
|
:vlopt:`--no-assert-case` option is used, Verilator will either formally
|
||||||
:code:`//cadence` or :code:`//pragma` directives of the same form.
|
prove the directive to be true, or, failing that, will insert the
|
||||||
|
|
||||||
When these synthesis directives are discovered, Verilator will either
|
|
||||||
formally prove the directive to be true, or, failing that, will insert the
|
|
||||||
appropriate code to detect failing cases at simulation runtime and print an
|
appropriate code to detect failing cases at simulation runtime and print an
|
||||||
"Assertion failed" error message.
|
"Assertion failed" error message.
|
||||||
|
|
||||||
@@ -168,7 +168,7 @@ files. The :option:`/*verilator&32;timing_off*/` and
|
|||||||
the encompassed timing controls and forks, regardless of the chosen
|
the encompassed timing controls and forks, regardless of the chosen
|
||||||
:vlopt:`--timing` or :vlopt:`--no-timing` option. This can also be achieved
|
:vlopt:`--timing` or :vlopt:`--no-timing` option. This can also be achieved
|
||||||
using the :option:`timing_off` and :option:`timing_off` options in Verilator
|
using the :option:`timing_off` and :option:`timing_off` options in Verilator
|
||||||
configuration files.
|
Control Files.
|
||||||
|
|
||||||
|
|
||||||
.. _Language Limitations:
|
.. _Language Limitations:
|
||||||
@@ -334,7 +334,8 @@ Gate Primitives
|
|||||||
|
|
||||||
The 2-state gate primitives (and, buf, nand, nor, not, or, xnor, xor) are
|
The 2-state gate primitives (and, buf, nand, nor, not, or, xnor, xor) are
|
||||||
directly converted to behavioral equivalents. The 3-state and MOS gate
|
directly converted to behavioral equivalents. The 3-state and MOS gate
|
||||||
primitives are not supported. Tables are not supported.
|
primitives are not supported. User-defined primitive (UDP) tables are
|
||||||
|
supported.
|
||||||
|
|
||||||
|
|
||||||
Specify blocks
|
Specify blocks
|
||||||
@@ -396,8 +397,8 @@ This section describes specific limitations for each language keyword.
|
|||||||
\`begin_keywords, \`begin_keywords, \`begin_keywords, \`begin_keywords,
|
\`begin_keywords, \`begin_keywords, \`begin_keywords, \`begin_keywords,
|
||||||
\`define, \`else, \`elsif, \`end_keywords, \`endif, \`error, \`ifdef,
|
\`define, \`else, \`elsif, \`end_keywords, \`endif, \`error, \`ifdef,
|
||||||
\`ifndef, \`include, \`line, \`systemc_ctor, \`systemc_dtor,
|
\`ifndef, \`include, \`line, \`systemc_ctor, \`systemc_dtor,
|
||||||
\`systemc_header, \`systemc_imp_header, \`systemc_implementation,
|
\`systemc_header, \`systemc_header_post, \`systemc_imp_header,
|
||||||
\`systemc_interface, \`undef, \`verilog
|
\`systemc_implementation, \`systemc_interface, \`undef, \`verilog
|
||||||
|
|
||||||
|cmdslong1|
|
|cmdslong1|
|
||||||
Fully supported.
|
Fully supported.
|
||||||
@@ -451,17 +452,17 @@ disable
|
|||||||
force, release
|
force, release
|
||||||
Verilator supports the procedural `force` (and corresponding `release`)
|
Verilator supports the procedural `force` (and corresponding `release`)
|
||||||
statement. However, the behavior of the `force` statement does not
|
statement. However, the behavior of the `force` statement does not
|
||||||
entirely comply with IEEE 1800. According to the standard, when a
|
entirely comply with IEEE 1800-2023:
|
||||||
procedural statement of the form `force a = b;` is executed, the
|
|
||||||
simulation should behave as if, from that point forwards, a continuous
|
#. Using forced variable as a value to another force statement is
|
||||||
assignment `assign a = b;` has been added to override the drivers of `a`.
|
currently not supported. The dependent force statement is forced by an
|
||||||
More specifically: the value of `a` should be updated whenever the value
|
initial constant value.
|
||||||
of `b` changes, until a `release a;` statement is executed. Verilator
|
|
||||||
instead evaluates the current value of `b` when the `force` statement is
|
#. Force/release with procedural continuous assignment is not supported.
|
||||||
executed, and forces `a` to that value, without updating it until a new
|
The assignment is treated as procedural.
|
||||||
`force` or `release` statement is encountered that applies to `a`. This
|
|
||||||
non-standard behavior is nevertheless consistent with some other
|
#. Expressions using multiple variable references or function calls on
|
||||||
simulators.
|
forced right-hand side are not sensitive to dependency changes.
|
||||||
|
|
||||||
inside
|
inside
|
||||||
Inside expressions may not include unpacked array traversal or $ as an
|
Inside expressions may not include unpacked array traversal or $ as an
|
||||||
@@ -477,7 +478,8 @@ shortreal
|
|||||||
other simulators either do not support float, or convert likewise.
|
other simulators either do not support float, or convert likewise.
|
||||||
|
|
||||||
specify specparam
|
specify specparam
|
||||||
All specify blocks and timing checks are ignored.
|
All timing checks and specify blocks (except specparam, which is
|
||||||
|
supported) are ignored.
|
||||||
|
|
||||||
uwire
|
uwire
|
||||||
Verilator does not perform warning checking on uwires; it treats the
|
Verilator does not perform warning checking on uwires; it treats the
|
||||||
@@ -488,7 +490,7 @@ $bits, $countbits, $countones, $finish, $isunknown, $onehot, $onehot0, $signed,
|
|||||||
|
|
||||||
$dump/$dumpports and related
|
$dump/$dumpports and related
|
||||||
$dumpfile or $dumpports will create a VCD or FST file (based on
|
$dumpfile or $dumpports will create a VCD or FST file (based on
|
||||||
the :vlopt:`--trace` option given when the model was Verilated). This
|
the :vlopt:`--trace-vcd` option given when the model was Verilated). This
|
||||||
will take effect starting at the next eval() call. If you have multiple
|
will take effect starting at the next eval() call. If you have multiple
|
||||||
Verilated designs under the same C model, this will dump signals
|
Verilated designs under the same C model, this will dump signals
|
||||||
only from the design containing the $dumpvars.
|
only from the design containing the $dumpvars.
|
||||||
@@ -535,4 +537,4 @@ $test$plusargs, $value$plusargs
|
|||||||
{VerilatedContext*} ->commandArgs(argc, argv);
|
{VerilatedContext*} ->commandArgs(argc, argv);
|
||||||
|
|
||||||
to register the command line before calling $test$plusargs or
|
to register the command line before calling $test$plusargs or
|
||||||
$value$plusargs.
|
$value$plusargs. Or use :vlopt:`--binary` or :vlopt:`--main`.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
********
|
********
|
||||||
|
|||||||
+65
-19
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
.. _Simulating:
|
.. _Simulating:
|
||||||
@@ -18,7 +18,9 @@ Simulation Summary Report
|
|||||||
=========================
|
=========================
|
||||||
|
|
||||||
When simulation finishes, it will print a report to stdout summarizing the
|
When simulation finishes, it will print a report to stdout summarizing the
|
||||||
simulation. This requires the model being Verilated with :vlopt:`--main`.
|
simulation. This requires the model being Verilated with :vlopt:`--main`,
|
||||||
|
or the user's `main()` calling `VerilatedContext->statsPrintSummary()`.
|
||||||
|
|
||||||
The report may be disabled with :vlopt:`+verilator+quiet`.
|
The report may be disabled with :vlopt:`+verilator+quiet`.
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
@@ -74,16 +76,19 @@ Benchmarking & Optimization
|
|||||||
For best performance, run Verilator with the :vlopt:`-O3`
|
For best performance, run Verilator with the :vlopt:`-O3`
|
||||||
:vlopt:`--x-assign fast <--x-assign>`
|
:vlopt:`--x-assign fast <--x-assign>`
|
||||||
:vlopt:`--x-initial fast <--x-initial>`
|
:vlopt:`--x-initial fast <--x-initial>`
|
||||||
:vlopt:`--noassert <--assert>` options. The :vlopt:`-O3`
|
:vlopt:`--no-assert` options. The :vlopt:`-O3`
|
||||||
option will require a longer time to run Verilator, and
|
option will require a longer time to run Verilator, and
|
||||||
:vlopt:`--x-assign fast <--x-assign>`
|
:vlopt:`--x-assign fast <--x-assign>`
|
||||||
:vlopt:`--x-initial fast <--x-assign>`
|
:vlopt:`--x-initial fast <--x-assign>`
|
||||||
may increase the risk of reset bugs in trade for performance; see the above
|
may increase the risk of reset bugs in trade for performance. The
|
||||||
documentation for these options.
|
:vlopt:`--no-assert` will suppress checking assertions, which is faster and
|
||||||
|
appropriate for known-good models running software, but may hide design
|
||||||
|
errors. See the above documentation for these options.
|
||||||
|
|
||||||
If using Verilated multithreaded, use ``numactl`` to ensure you use
|
If using Verilated multithreaded, consider overriding Verilator's default
|
||||||
non-conflicting hardware resources. See :ref:`Multithreading`. Also,
|
thread-to-processor assignment by using ``numactl``; see
|
||||||
consider using profile-guided optimization; see :ref:`Thread PGO`.
|
:ref:`Multithreading`. Also, consider using profile-guided optimization;
|
||||||
|
see :ref:`Thread PGO`.
|
||||||
|
|
||||||
Minor Verilog code changes can also give big wins. You should not have any
|
Minor Verilog code changes can also give big wins. You should not have any
|
||||||
:option:`UNOPTFLAT` warnings from Verilator. Fixing these warnings can
|
:option:`UNOPTFLAT` warnings from Verilator. Fixing these warnings can
|
||||||
@@ -200,9 +205,6 @@ With :vlopt:`--coverage` or :vlopt:`--coverage-user`, Verilator will
|
|||||||
translate functional coverage points the user has inserted manually in
|
translate functional coverage points the user has inserted manually in
|
||||||
SystemVerilog code through into the Verilated model.
|
SystemVerilog code through into the Verilated model.
|
||||||
|
|
||||||
Currently, all functional coverage points are specified using SystemVerilog
|
|
||||||
assertion syntax, which must be separately enabled with :vlopt:`--assert`.
|
|
||||||
|
|
||||||
For example, the following SystemVerilog statement will add a coverage
|
For example, the following SystemVerilog statement will add a coverage
|
||||||
point under the coverage name "DefaultClock":
|
point under the coverage name "DefaultClock":
|
||||||
|
|
||||||
@@ -222,14 +224,6 @@ at branches). At each such branch, a counter is incremented. At the end
|
|||||||
of a test, the counters, filename, and line number corresponding to each
|
of a test, the counters, filename, and line number corresponding to each
|
||||||
counter are written into the coverage file.
|
counter are written into the coverage file.
|
||||||
|
|
||||||
Verilator automatically disables coverage of branches with a $stop in
|
|
||||||
them, as it is assumed that $stop branches contain an error check that should
|
|
||||||
not occur. A :option:`/*verilator&32;coverage_block_off*/` metacomment
|
|
||||||
will perform a similar function on any code in that block or below, or
|
|
||||||
:option:`/*verilator&32;coverage_off*/` and
|
|
||||||
:option:`/*verilator&32;coverage_on*/` will disable and enable coverage
|
|
||||||
respectively around a block of code.
|
|
||||||
|
|
||||||
Verilator may over-count combinatorial (non-clocked) blocks when those
|
Verilator may over-count combinatorial (non-clocked) blocks when those
|
||||||
blocks receive signals which have had the :option:`UNOPTFLAT` warning
|
blocks receive signals which have had the :option:`UNOPTFLAT` warning
|
||||||
disabled; for the most accurate results, do not disable this warning when
|
disabled; for the most accurate results, do not disable this warning when
|
||||||
@@ -276,6 +270,58 @@ A :option:`/*verilator&32;coverage_off*/`
|
|||||||
signals that do not need toggle analysis, such as RAMs and register files.
|
signals that do not need toggle analysis, such as RAMs and register files.
|
||||||
|
|
||||||
|
|
||||||
|
.. _Expression Coverage:
|
||||||
|
|
||||||
|
Expression Coverage
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
With :vlopt:`--coverage` or :vlopt:`--coverage-expr`, Verilator will
|
||||||
|
automatically add coverage analysis at each expression, indicating with a
|
||||||
|
truth table how every Boolean truth-table possibility in the expression
|
||||||
|
occurred.
|
||||||
|
|
||||||
|
Multi-bit expressions are ignored, but sub-expressions with are entirely
|
||||||
|
Boolean are analyzed. Expression coverage does not fully explore the truth
|
||||||
|
table of an expression, rather is looks at each term's contribution. E.g.
|
||||||
|
an AND operation will check coverage for TT, XF and FX.
|
||||||
|
|
||||||
|
Some expressions may produce too many cover points. Verilator limits the
|
||||||
|
maximum number of cover points per expression to 32, but this may be
|
||||||
|
controlled with :vlopt:`--coverage-expr-max`.
|
||||||
|
|
||||||
|
Below is an example showing expression coverage produced from `verilator_coverage`
|
||||||
|
as applied to the condition expression inside an if statement. Each line
|
||||||
|
shows the minimum number of terms and their values (e.g. `(t1==0 && t2==1)`) needed
|
||||||
|
to reach a result for the overall expression (e.g. `=> 1`). Each line also
|
||||||
|
shows the number of times this combination was hit. Note that individual lines
|
||||||
|
are not mutually exclusive.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
%000004 if ((~t1 && t2) || (~t3 && t4)) $write("");
|
||||||
|
-000002 point: comment=(t1==0 && t2==1) => 1 hier=top.t
|
||||||
|
-000002 point: comment=(t1==1 && t3==1) => 0 hier=top.t
|
||||||
|
-000004 point: comment=(t1==1 && t4==0) => 0 hier=top.t
|
||||||
|
-000002 point: comment=(t2==0 && t3==1) => 0 hier=top.t
|
||||||
|
-000003 point: comment=(t2==0 && t4==0) => 0 hier=top.t
|
||||||
|
-000002 point: comment=(t3==0 && t4==1) => 1 hier=top.t
|
||||||
|
|
||||||
|
.. _Suppressing Coverage:
|
||||||
|
|
||||||
|
Suppressing Coverage
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Using :option:`/*verilator&32;coverage_off*/` and
|
||||||
|
:option:`/*verilator&32;coverage_on*/` around a block of code will disable
|
||||||
|
and enable coverage respectively around that block. Or, use the
|
||||||
|
:option:`coverage_block_off` control file option.
|
||||||
|
|
||||||
|
Verilator automatically disables coverage of lines and branches with a
|
||||||
|
$stop in them, as it is assumed that $stop branches contain an error check
|
||||||
|
that should not occur. A :option:`/*verilator&32;coverage_block_off*/`
|
||||||
|
metacomment will perform a similar function on any code in that block or
|
||||||
|
below.
|
||||||
|
|
||||||
.. _Coverage Collection:
|
.. _Coverage Collection:
|
||||||
|
|
||||||
Coverage Collection
|
Coverage Collection
|
||||||
|
|||||||
+67
-20
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
**********
|
**********
|
||||||
@@ -66,6 +66,40 @@ Once a model is built, the next step is typically for the user to run it,
|
|||||||
see :ref:`Simulating`.
|
see :ref:`Simulating`.
|
||||||
|
|
||||||
|
|
||||||
|
.. _Finding and Binding Modules:
|
||||||
|
|
||||||
|
Finding and Binding Modules
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Verilator provides several mechanisms to find the source code containing a
|
||||||
|
module, primitive, interface, or program ("module" in this section) and
|
||||||
|
bind them to an instantiation. These capabilities are similar to the
|
||||||
|
"Precompiling in a single-pass" use model described in IEEE 1800-2023
|
||||||
|
33.5.1, although `config` is not yet supported.
|
||||||
|
|
||||||
|
Verilator first reads all files provided on the command line and
|
||||||
|
:vlopt:`-f` files, and parses all modules within. Each module is assigned
|
||||||
|
to the most recent library specified with :vlopt:`-work`, thus `-work liba
|
||||||
|
a.v -work libb b.v` will assign modules in `a.v` to `liba` and modules in
|
||||||
|
`b.v` to `libb`.
|
||||||
|
|
||||||
|
If a module is not defined from a file on the command-line, Verilator
|
||||||
|
attempts to find a filename constructed from the module name using
|
||||||
|
:vlopt:`-y` and `+libext`.
|
||||||
|
|
||||||
|
Binding begins with the :vlopt:`--top` module, if provided. If not provided
|
||||||
|
Verilator attempts to figure out the top module itself, and if multiple
|
||||||
|
tops result a :option:`MULTITOP` warning is issued which may be suppressed
|
||||||
|
(see details in :option:`MULTITOP`).
|
||||||
|
|
||||||
|
Verilator will attempt to bind lower unresolved instances first in the same
|
||||||
|
library name as the parent's instantiation library, and if not found search
|
||||||
|
globally across all libraries in the order modules were declared. This
|
||||||
|
allows otherwise conflicting duplicate module names between libraries to
|
||||||
|
coexist uniquely within each library name. When IEEE `config use` is
|
||||||
|
supported, more complicated selections will be able to be specified.
|
||||||
|
|
||||||
|
|
||||||
.. _Hierarchical Verilation:
|
.. _Hierarchical Verilation:
|
||||||
|
|
||||||
Hierarchical Verilation
|
Hierarchical Verilation
|
||||||
@@ -94,7 +128,7 @@ There are two ways to mark a module:
|
|||||||
|
|
||||||
* Write :option:`/*verilator&32;hier_block*/` metacomment in HDL code.
|
* Write :option:`/*verilator&32;hier_block*/` metacomment in HDL code.
|
||||||
|
|
||||||
* Add a :option:`hier_block` line in the :ref:`Configuration Files`.
|
* Add a :option:`hier_block` line in the :ref:`Verilator Control Files`.
|
||||||
|
|
||||||
Then pass the :vlopt:`--hierarchical` option to Verilator.
|
Then pass the :vlopt:`--hierarchical` option to Verilator.
|
||||||
|
|
||||||
@@ -221,7 +255,7 @@ model, it may be beneficial to performance to adjust the
|
|||||||
influences the partitioning of the model by adjusting the assumed execution
|
influences the partitioning of the model by adjusting the assumed execution
|
||||||
time of DPI imports.
|
time of DPI imports.
|
||||||
|
|
||||||
When using :vlopt:`--trace` to perform VCD tracing, the VCD trace
|
When using :vlopt:`--trace-vcd` to perform VCD tracing, the VCD trace
|
||||||
construction is parallelized using the same number of threads as specified
|
construction is parallelized using the same number of threads as specified
|
||||||
with :vlopt:`--threads`, and is executed on the same thread pool as the model.
|
with :vlopt:`--threads`, and is executed on the same thread pool as the model.
|
||||||
|
|
||||||
@@ -243,11 +277,14 @@ trace. FST tracing can utilize up to 2 offload threads, so there is no use
|
|||||||
of setting :vlopt:`--trace-threads` higher than 2 at the moment.
|
of setting :vlopt:`--trace-threads` higher than 2 at the moment.
|
||||||
|
|
||||||
When running a multithreaded model, the default Linux task scheduler often
|
When running a multithreaded model, the default Linux task scheduler often
|
||||||
works against the model by assuming short-lived threads and thus
|
works against the model by assuming short-lived threads and thus it often
|
||||||
it often schedules threads using multiple hyperthreads within the same
|
schedules threads using multiple hyperthreads within the same physical
|
||||||
physical core. For best performance, use the :command:`numactl` program to
|
core. If there is no affinity already set, on Linux only, Verilator
|
||||||
(when the threading count fits) select unique physical cores on the same
|
attempts to set thread-to-processor affinity in a reasonable way.
|
||||||
socket. The same applies for :vlopt:`--trace-threads` as well.
|
|
||||||
|
For best performance, use the :command:`numactl` program to (when the
|
||||||
|
threading count fits) select unique physical cores on the same socket. The
|
||||||
|
same applies for :vlopt:`--trace-threads` as well.
|
||||||
|
|
||||||
As an example, if a model was Verilated with
|
As an example, if a model was Verilated with
|
||||||
:vlopt:`--threads 4 <--threads>`, we consult:
|
:vlopt:`--threads 4 <--threads>`, we consult:
|
||||||
@@ -290,8 +327,8 @@ and must be called only by the eval thread.
|
|||||||
If using :vlopt:`--sc`, the SystemC kernel is not thread-safe; therefore,
|
If using :vlopt:`--sc`, the SystemC kernel is not thread-safe; therefore,
|
||||||
the eval thread and main thread must be the same.
|
the eval thread and main thread must be the same.
|
||||||
|
|
||||||
If using :vlopt:`--trace`, the tracing classes must be constructed and
|
If using :vlopt:`--trace-vcd` or other trace options, the tracing classes
|
||||||
called from the main thread.
|
must be constructed and called from the main thread.
|
||||||
|
|
||||||
If using :vlopt:`--vpi`, since SystemVerilog VPI was not architected by
|
If using :vlopt:`--vpi`, since SystemVerilog VPI was not architected by
|
||||||
IEEE to be multithreaded, Verilator requires all VPI calls are only made
|
IEEE to be multithreaded, Verilator requires all VPI calls are only made
|
||||||
@@ -304,9 +341,9 @@ GNU Make
|
|||||||
========
|
========
|
||||||
|
|
||||||
Verilator defaults to creating GNU Make makefiles for the model. Verilator
|
Verilator defaults to creating GNU Make makefiles for the model. Verilator
|
||||||
will call make automatically when the :vlopt:'--build' option is used.
|
will call make automatically when the :vlopt:`--build` option is used.
|
||||||
|
|
||||||
If calling Verilator from a makefile, the :vlopt:'-MMD' option will create
|
If calling Verilator from a makefile, the :vlopt:`--MMD` option will create
|
||||||
a dependency file, allowing Make to only run Verilator if input Verilog
|
a dependency file, allowing Make to only run Verilator if input Verilog
|
||||||
files change.
|
files change.
|
||||||
|
|
||||||
@@ -367,10 +404,11 @@ Verilate in CMake
|
|||||||
.. code-block:: CMake
|
.. code-block:: CMake
|
||||||
|
|
||||||
verilate(target SOURCES source ... [TOP_MODULE top] [PREFIX name]
|
verilate(target SOURCES source ... [TOP_MODULE top] [PREFIX name]
|
||||||
[TRACE] [TRACE_FST] [SYSTEMC] [COVERAGE]
|
[COVERAGE] [SYSTEMC]
|
||||||
|
[TRACE_FST] [TRACE_SAIF] [TRACE_VCD] [TRACE_THREADS num]
|
||||||
[INCLUDE_DIRS dir ...] [OPT_SLOW ...] [OPT_FAST ...]
|
[INCLUDE_DIRS dir ...] [OPT_SLOW ...] [OPT_FAST ...]
|
||||||
[OPT_GLOBAL ..] [DIRECTORY dir] [THREADS num]
|
[OPT_GLOBAL ..] [DIRECTORY dir] [THREADS num]
|
||||||
[TRACE_THREADS num] [VERILATOR_ARGS ...])
|
[VERILATOR_ARGS ...])
|
||||||
|
|
||||||
Lowercase and ... should be replaced with arguments; the uppercase parts
|
Lowercase and ... should be replaced with arguments; the uppercase parts
|
||||||
delimit the arguments and can be passed in any order or left out entirely
|
delimit the arguments and can be passed in any order or left out entirely
|
||||||
@@ -443,10 +481,6 @@ SystemC include directories and link to the SystemC libraries.
|
|||||||
|
|
||||||
Optional. Enable a multithreaded model; see :vlopt:`--threads`.
|
Optional. Enable a multithreaded model; see :vlopt:`--threads`.
|
||||||
|
|
||||||
.. describe:: TRACE_THREADS
|
|
||||||
|
|
||||||
Optional. Enable multithreaded FST trace; see :vlopt:`--trace-threads`.
|
|
||||||
|
|
||||||
.. describe:: TOP_MODULE
|
.. describe:: TOP_MODULE
|
||||||
|
|
||||||
Optional. Sets the name of the top module. Defaults to the name of the
|
Optional. Sets the name of the top module. Defaults to the name of the
|
||||||
@@ -454,14 +488,27 @@ SystemC include directories and link to the SystemC libraries.
|
|||||||
|
|
||||||
.. describe:: TRACE
|
.. describe:: TRACE
|
||||||
|
|
||||||
Optional. Enables VCD tracing if present, equivalent to "VERILATOR_ARGS
|
Deprecated. Same as TRACE_VCD, which should be used instead.
|
||||||
--trace".
|
|
||||||
|
|
||||||
.. describe:: TRACE_FST
|
.. describe:: TRACE_FST
|
||||||
|
|
||||||
Optional. Enables FST tracing if present, equivalent to "VERILATOR_ARGS
|
Optional. Enables FST tracing if present, equivalent to "VERILATOR_ARGS
|
||||||
--trace-fst".
|
--trace-fst".
|
||||||
|
|
||||||
|
.. describe:: TRACE_SAIF
|
||||||
|
|
||||||
|
Optional. Enables SAIF tracing if present, equivalent to "VERILATOR_ARGS
|
||||||
|
--trace-saif".
|
||||||
|
|
||||||
|
.. describe:: TRACE_THREADS
|
||||||
|
|
||||||
|
Optional. Enable multithreaded FST trace; see :vlopt:`--trace-threads`.
|
||||||
|
|
||||||
|
.. describe:: TRACE_VCD
|
||||||
|
|
||||||
|
Optional. Enables VCD tracing if present, equivalent to "VERILATOR_ARGS
|
||||||
|
--trace-vcd".
|
||||||
|
|
||||||
.. describe:: VERILATOR_ARGS
|
.. describe:: VERILATOR_ARGS
|
||||||
|
|
||||||
Optional. Extra arguments to Verilator. Do not specify :vlopt:`--Mdir`
|
Optional. Extra arguments to Verilator. Do not specify :vlopt:`--Mdir`
|
||||||
|
|||||||
+254
-73
@@ -1,9 +1,9 @@
|
|||||||
.. Copyright 2003-2024 by Wilson Snyder.
|
.. Copyright 2003-2025 by Wilson Snyder.
|
||||||
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
*******************
|
=====================
|
||||||
Errors and Warnings
|
Errors and Warnings
|
||||||
*******************
|
=====================
|
||||||
|
|
||||||
.. _Disabling Warnings:
|
.. _Disabling Warnings:
|
||||||
|
|
||||||
@@ -37,14 +37,14 @@ Warnings may be disabled in multiple ways:
|
|||||||
propagate upwards to any parent file (file that included the file with
|
propagate upwards to any parent file (file that included the file with
|
||||||
the lint_off).
|
the lint_off).
|
||||||
|
|
||||||
#. Disable the warning using :ref:`Configuration Files` with a
|
#. Disable the warning using :ref:`Verilator Control Files` with a
|
||||||
:option:`lint_off` command. This is useful when a script suppresses
|
:option:`lint_off` command. This is useful when a script suppresses
|
||||||
warnings, and the Verilog source should not be changed. This method also
|
warnings, and the Verilog source should not be changed. This method also
|
||||||
allows matching on the warning text.
|
allows matching on the warning text.
|
||||||
|
|
||||||
.. code-block:: sv
|
.. code-block:: sv
|
||||||
|
|
||||||
lint_off -rule UNSIGNED -file "*/example.v" -line 1
|
lint_off -rule UNSIGNED -file "*/example.v" -lines 1
|
||||||
|
|
||||||
|
|
||||||
Error And Warning Format
|
Error And Warning Format
|
||||||
@@ -68,6 +68,10 @@ source code corresponding to the error, prefixed by the line number and a "
|
|||||||
| ". Following this is typically an arrow and ~ pointing at the error on
|
| ". Following this is typically an arrow and ~ pointing at the error on
|
||||||
the source line directly above.
|
the source line directly above.
|
||||||
|
|
||||||
|
Instead of parsing this text diagnostic output, tools that need to
|
||||||
|
understand Verilator's warning output should read the SARIF JSON output
|
||||||
|
created with :vlopt:`--diagnostics-sarif`.
|
||||||
|
|
||||||
|
|
||||||
List Of Warnings
|
List Of Warnings
|
||||||
================
|
================
|
||||||
@@ -86,6 +90,8 @@ List Of Warnings
|
|||||||
Limitations`.
|
Limitations`.
|
||||||
|
|
||||||
|
|
||||||
|
.. t_dist_docs_style restart_sort
|
||||||
|
|
||||||
.. option:: ALWCOMBORDER
|
.. option:: ALWCOMBORDER
|
||||||
|
|
||||||
.. TODO better example
|
.. TODO better example
|
||||||
@@ -165,6 +171,28 @@ List Of Warnings
|
|||||||
'pragma protect'. Third-party pragmas not defined by IEEE 1800-2023 are
|
'pragma protect'. Third-party pragmas not defined by IEEE 1800-2023 are
|
||||||
ignored.
|
ignored.
|
||||||
|
|
||||||
|
This error may be disabled with a lint_off BADSTDPRAGMA metacomment.
|
||||||
|
|
||||||
|
Ignoring this warning will cause the pragma to be ignored.
|
||||||
|
|
||||||
|
|
||||||
|
.. option:: BADVLTPRAGMA
|
||||||
|
|
||||||
|
An error that a `/*verilator ...*/` metacomment pragma is badly formed
|
||||||
|
or not understood.
|
||||||
|
|
||||||
|
Faulty example:
|
||||||
|
|
||||||
|
.. include:: ../../docs/gen/ex_BADVLTPRAGMA_faulty.rst
|
||||||
|
|
||||||
|
Results in:
|
||||||
|
|
||||||
|
.. include:: ../../docs/gen/ex_BADVLTPRAGMA_msg.rst
|
||||||
|
|
||||||
|
This error may be disabled with a lint_off BADVLTPRAGMA metacomment.
|
||||||
|
|
||||||
|
Ignoring this warning will cause the pragma to be ignored.
|
||||||
|
|
||||||
|
|
||||||
.. option:: BLKANDNBLK
|
.. option:: BLKANDNBLK
|
||||||
|
|
||||||
@@ -183,23 +211,32 @@ List Of Warnings
|
|||||||
public task, or when the blocking and non-blocking assignments have
|
public task, or when the blocking and non-blocking assignments have
|
||||||
non-overlapping bits and structure members.
|
non-overlapping bits and structure members.
|
||||||
|
|
||||||
|
From Verilator 5.038, this warning is only issued when Verilator can't prove that
|
||||||
|
the assignments are to non-overlapping sub-parts, and the blocking
|
||||||
|
assignment is in combinational logic (which is the case where simulation
|
||||||
|
results might differ from other simulators). Review any BLKANDNBLK
|
||||||
|
cases carefully after this version, and sign them off as
|
||||||
|
described above, only if know for sure the updates are not to overlapping
|
||||||
|
parts of the signal.
|
||||||
|
|
||||||
Generally, this is caused by a register driven by both combo logic and a
|
Generally, this is caused by a register driven by both combo logic and a
|
||||||
flop:
|
flop:
|
||||||
|
|
||||||
.. code-block:: sv
|
.. code-block:: sv
|
||||||
|
|
||||||
logic [1:0] foo;
|
logic [3:0] foo;
|
||||||
always @(posedge clk) foo[0] <= ...
|
always @(posedge clk) foo[index] <= ... // With index != 0
|
||||||
always_comb foo[1] = ...
|
always_comb foo[0] = ...
|
||||||
|
|
||||||
Instead, use a different register for the flop:
|
Instead, use a different register for the flop:
|
||||||
|
|
||||||
.. code-block:: sv
|
.. code-block:: sv
|
||||||
|
|
||||||
logic [1:0] foo;
|
logic [3:0] foo;
|
||||||
always @(posedge clk) foo_flopped[0] <= ...
|
logic [3:1] foo_flopped;
|
||||||
always_comb foo[0] = foo_flopped[0];
|
always @(posedge clk) foo_flopped[index] <= ... // With index != 0
|
||||||
always_comb foo[1] = ...
|
always_comb foo[0] = ...
|
||||||
|
always_comb foo[3:1] = foo_flopped;
|
||||||
|
|
||||||
Or, this may also avoid the error:
|
Or, this may also avoid the error:
|
||||||
|
|
||||||
@@ -210,22 +247,35 @@ List Of Warnings
|
|||||||
|
|
||||||
.. option:: BLKLOOPINIT
|
.. option:: BLKLOOPINIT
|
||||||
|
|
||||||
.. TODO better example
|
Indicates certain constructs where non-blocking assignments to unpacked
|
||||||
|
arrays (memories) are not supported inside loops. These typically appear in
|
||||||
This indicates that the initialization of an array needs to use
|
initialization/reset code:
|
||||||
non-delayed assignments. This is done in the interest of speed; if
|
|
||||||
delayed assignments were used, the simulator would have to copy large
|
|
||||||
arrays every cycle. (In smaller loops, loop unrolling allows the
|
|
||||||
delayed assignment to work, though it's a bit slower than a non-delayed
|
|
||||||
assignment.) Here's an example
|
|
||||||
|
|
||||||
.. code-block:: sv
|
.. code-block:: sv
|
||||||
|
|
||||||
always @(posedge clk)
|
always @(posedge clk)
|
||||||
if (~reset_l)
|
if (~reset_l)
|
||||||
for (i=0; i<`ARRAY_SIZE; i++)
|
for (i=0; i<`ARRAY_SIZE; i++)
|
||||||
array[i] = 0; // Non-delayed for verilator
|
array[i] <= 0; // Non-blocking assignment inside loop
|
||||||
|
else
|
||||||
|
array[address] <= data;
|
||||||
|
|
||||||
|
While this is supported in typical synthesizeable code (including the
|
||||||
|
example above), some complicated cases are not supported. Namely:
|
||||||
|
|
||||||
|
1. If the above loop is inside a suspendable process or fork statement.
|
||||||
|
|
||||||
|
2. If the variable is also the target of a '<=' non-blocking assignment
|
||||||
|
in a suspendable process or fork statement (in addition to a synthesizable
|
||||||
|
loop).
|
||||||
|
|
||||||
|
3. If the element type of the array is a compound type.
|
||||||
|
|
||||||
|
4. In versions before 5.026, any delayed assignment to an array.
|
||||||
|
|
||||||
|
It might slightly improve run-time performance if you change the
|
||||||
|
non-blocking assignment inside the loop into a blocking assignment
|
||||||
|
(that is: use '=' instead of '<='), if possible.
|
||||||
|
|
||||||
This message is only seen on large or complicated loops because
|
This message is only seen on large or complicated loops because
|
||||||
Verilator generally unrolls small loops. You may want to try increasing
|
Verilator generally unrolls small loops. You may want to try increasing
|
||||||
@@ -283,8 +333,8 @@ List Of Warnings
|
|||||||
Unique case statements that select on an enumerated variable, where all
|
Unique case statements that select on an enumerated variable, where all
|
||||||
of the enumerated values are covered by case items, are considered
|
of the enumerated values are covered by case items, are considered
|
||||||
complete even if the case statement does not cover illegal
|
complete even if the case statement does not cover illegal
|
||||||
non-enumerated values (IEEE 1800-2023 12.5.3). To check that illegal
|
non-enumerated values (IEEE 1800-2023 12.5.3). Verilator checks that
|
||||||
values are not hit, use :vlopt:`--assert`.
|
illegal values are not hit, unless :vlopt:`--no-assert-case` was used.
|
||||||
|
|
||||||
Ignoring this warning will only suppress the lint check; it will
|
Ignoring this warning will only suppress the lint check; it will
|
||||||
simulate correctly.
|
simulate correctly.
|
||||||
@@ -322,8 +372,8 @@ List Of Warnings
|
|||||||
|
|
||||||
Warns that it is better style to use casez, and "?" in place of
|
Warns that it is better style to use casez, and "?" in place of
|
||||||
"x"'s. See
|
"x"'s. See
|
||||||
`http://www.sunburst-design.com/papers/CummingsSNUG1999Boston_FullParallelCase_rev1_1.pdf
|
`http://www.sunburst-design.com/papers/CummingsSNUG1999Boston_FullParallelCase.pdf
|
||||||
<http://www.sunburst-design.com/papers/CummingsSNUG1999Boston_FullParallelCase_rev1_1.pdf>`_
|
<http://www.sunburst-design.com/papers/CummingsSNUG1999Boston_FullParallelCase.pdf>`_
|
||||||
|
|
||||||
Ignoring this warning will only suppress the lint check; it will
|
Ignoring this warning will only suppress the lint check; it will
|
||||||
simulate correctly.
|
simulate correctly.
|
||||||
@@ -397,8 +447,8 @@ List Of Warnings
|
|||||||
is suppressed, Verilator, like synthesis, will convert this to a
|
is suppressed, Verilator, like synthesis, will convert this to a
|
||||||
non-delayed assignment, which may result in logic races or other
|
non-delayed assignment, which may result in logic races or other
|
||||||
nasties. See
|
nasties. See
|
||||||
`http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA_rev1_2.pdf
|
`http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf
|
||||||
<http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA_rev1_2.pdf>`_
|
<http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf>`_
|
||||||
|
|
||||||
Ignoring this warning may make Verilator simulations differ from other
|
Ignoring this warning may make Verilator simulations differ from other
|
||||||
simulators.
|
simulators.
|
||||||
@@ -406,9 +456,9 @@ List Of Warnings
|
|||||||
|
|
||||||
.. option:: CONSTRAINTIGN
|
.. option:: CONSTRAINTIGN
|
||||||
|
|
||||||
Warns that Verilator does not support :code:`constraint`,
|
Warns that Verilator does not support certain forms of
|
||||||
:code:`constraint_mode`, or :code:`rand_mode`, and the construct was are
|
:code:`constraint`, :code:`constraint_mode`, or :code:`rand_mode`, and
|
||||||
ignored.
|
the construct was are ignored.
|
||||||
|
|
||||||
Ignoring this warning may make Verilator randomize() simulations differ
|
Ignoring this warning may make Verilator randomize() simulations differ
|
||||||
from other simulators.
|
from other simulators.
|
||||||
@@ -432,6 +482,18 @@ List Of Warnings
|
|||||||
correctly.
|
correctly.
|
||||||
|
|
||||||
|
|
||||||
|
.. option:: COVERIGN
|
||||||
|
|
||||||
|
Warns that Verilator does not support certain forms of
|
||||||
|
:code:`covergroup`, :code:`coverpoint`, and coverage options, and the
|
||||||
|
construct was are ignored.
|
||||||
|
|
||||||
|
Disabling the :option:`UNSUPPORTED` error also disables this warning.
|
||||||
|
|
||||||
|
Ignoring this warning may make Verilator ignore lint checking on the
|
||||||
|
construct, and collect coverage data differently from other simulators.
|
||||||
|
|
||||||
|
|
||||||
.. option:: DECLFILENAME
|
.. option:: DECLFILENAME
|
||||||
|
|
||||||
.. TODO better example
|
.. TODO better example
|
||||||
@@ -447,6 +509,32 @@ List Of Warnings
|
|||||||
correctly.
|
correctly.
|
||||||
|
|
||||||
|
|
||||||
|
.. option:: DEFOVERRIDE
|
||||||
|
|
||||||
|
Warns that a macro definition within the code is being overridden by a
|
||||||
|
command line directive:
|
||||||
|
|
||||||
|
For example, running Verilator with :code:`<+define+\<DUP\>=\<def2\>>` and
|
||||||
|
|
||||||
|
.. code-block:: sv
|
||||||
|
:linenos:
|
||||||
|
:emphasize-lines: 1
|
||||||
|
|
||||||
|
`define DUP def2 //<--- Warning
|
||||||
|
|
||||||
|
Results in:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
%Warning-DEFOVERRIDE: example.v1:20: Overriding define: 'DEF' with value: 'def2' to existing command line define value: 'def1'
|
||||||
|
... Location of previous definition, with value: '50'
|
||||||
|
|
||||||
|
While not explicitly stated in the IEEE 1800-2023 standard, this warning
|
||||||
|
tracks with the other simulators' behavior of overriding macro
|
||||||
|
definitions within code files with the definition passed in through
|
||||||
|
the command line.
|
||||||
|
|
||||||
|
|
||||||
.. option:: DEFPARAM
|
.. option:: DEFPARAM
|
||||||
|
|
||||||
Warns that the :code:`defparam` statement was deprecated in IEEE 1364-2001,
|
Warns that the :code:`defparam` statement was deprecated in IEEE 1364-2001,
|
||||||
@@ -1029,8 +1117,6 @@ List Of Warnings
|
|||||||
|
|
||||||
.. option:: LITENDIAN
|
.. option:: LITENDIAN
|
||||||
|
|
||||||
.. TODO better example
|
|
||||||
|
|
||||||
The naming of this warning is in contradiction with the common
|
The naming of this warning is in contradiction with the common
|
||||||
interpretation of little endian. It was therefore renamed to
|
interpretation of little endian. It was therefore renamed to
|
||||||
:option:`ASCRANGE`. While :option:`LITENDIAN` remains for
|
:option:`ASCRANGE`. While :option:`LITENDIAN` remains for
|
||||||
@@ -1106,6 +1192,19 @@ List Of Warnings
|
|||||||
discarded.
|
discarded.
|
||||||
|
|
||||||
|
|
||||||
|
.. option:: MODMISSING
|
||||||
|
|
||||||
|
.. TODO better example
|
||||||
|
|
||||||
|
Error that a module, typically referenced by a cell, was not found.
|
||||||
|
This is typically fatal, but may be suppressed in some linting
|
||||||
|
situations with missing libraries.
|
||||||
|
|
||||||
|
Ignoring this error will cause the cell definition to be discarded.
|
||||||
|
Simulation results will likely be wrong, so typically used only with
|
||||||
|
lint-only.
|
||||||
|
|
||||||
|
|
||||||
.. option:: MULTIDRIVEN
|
.. option:: MULTIDRIVEN
|
||||||
|
|
||||||
Warns that the specified signal comes from multiple :code:`always`
|
Warns that the specified signal comes from multiple :code:`always`
|
||||||
@@ -1162,6 +1261,8 @@ List Of Warnings
|
|||||||
modules' signals seem identical, e.g., multiple modules with a "clk"
|
modules' signals seem identical, e.g., multiple modules with a "clk"
|
||||||
input.
|
input.
|
||||||
|
|
||||||
|
Ignoring this warning will make multiple tops, as described in (3) above.
|
||||||
|
|
||||||
|
|
||||||
.. option:: NEEDTIMINGOPT
|
.. option:: NEEDTIMINGOPT
|
||||||
|
|
||||||
@@ -1197,6 +1298,17 @@ List Of Warnings
|
|||||||
simulate correctly.
|
simulate correctly.
|
||||||
|
|
||||||
|
|
||||||
|
.. option:: NONSTD
|
||||||
|
|
||||||
|
Warns when a non-standard language feature is used that has a standard
|
||||||
|
equivalent, which might behave differently in corner cases. For example
|
||||||
|
:code:`$psprintf` system function is replaced by its standard equivalent
|
||||||
|
:code:`$sformatf`.
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check; it will
|
||||||
|
simulate correctly.
|
||||||
|
|
||||||
|
|
||||||
.. option:: NOTIMING
|
.. option:: NOTIMING
|
||||||
|
|
||||||
Error when a timing-related construct that requires :vlopt:`--timing` has
|
Error when a timing-related construct that requires :vlopt:`--timing` has
|
||||||
@@ -1228,6 +1340,7 @@ List Of Warnings
|
|||||||
Ignoring this warning will only suppress the lint check; it will
|
Ignoring this warning will only suppress the lint check; it will
|
||||||
simulate correctly.
|
simulate correctly.
|
||||||
|
|
||||||
|
|
||||||
.. option:: PINCONNECTEMPTY
|
.. option:: PINCONNECTEMPTY
|
||||||
|
|
||||||
.. TODO better example
|
.. TODO better example
|
||||||
@@ -1243,7 +1356,7 @@ List Of Warnings
|
|||||||
|
|
||||||
.. option:: PINMISSING
|
.. option:: PINMISSING
|
||||||
|
|
||||||
.. TODO better example
|
.. TODO better example (frequent)
|
||||||
|
|
||||||
Warns that a module has a pin that is not mentioned in an instance. If
|
Warns that a module has a pin that is not mentioned in an instance. If
|
||||||
a pin is not missing it should still be specified on the instance
|
a pin is not missing it should still be specified on the instance
|
||||||
@@ -1252,6 +1365,22 @@ List Of Warnings
|
|||||||
Ignoring this warning will only suppress the lint check; it will
|
Ignoring this warning will only suppress the lint check; it will
|
||||||
simulate correctly.
|
simulate correctly.
|
||||||
|
|
||||||
|
Faulty example:
|
||||||
|
|
||||||
|
.. include:: ../../docs/gen/ex_PINMISSING_faulty.rst
|
||||||
|
|
||||||
|
Results in:
|
||||||
|
|
||||||
|
.. include:: ../../docs/gen/ex_PINMISSING_msg.rst
|
||||||
|
|
||||||
|
Repaired example:
|
||||||
|
|
||||||
|
.. code-block:: sv
|
||||||
|
:emphasize-lines: 2
|
||||||
|
|
||||||
|
sub sub (
|
||||||
|
.port());
|
||||||
|
|
||||||
Other tools with similar warnings: Icarus Verilog's portbind, "warning:
|
Other tools with similar warnings: Icarus Verilog's portbind, "warning:
|
||||||
Instantiating module ... with dangling input port (...)". Slang's
|
Instantiating module ... with dangling input port (...)". Slang's
|
||||||
unconnected-port, "port '...' has no connection".
|
unconnected-port, "port '...' has no connection".
|
||||||
@@ -1283,7 +1412,7 @@ List Of Warnings
|
|||||||
generate
|
generate
|
||||||
if (A==0) begin
|
if (A==0) begin
|
||||||
b b_inst1 (.x(1'b0)); //<--- error nonexistent port
|
b b_inst1 (.x(1'b0)); //<--- error nonexistent port
|
||||||
b #(.PX(1'b0)) b_inst2 (); //<--- error nonexistent parameter
|
b #(.PX(1'b0)) b_inst2 (); //<--- error nonexistent parameter
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
endmodule
|
endmodule
|
||||||
@@ -1300,6 +1429,15 @@ List Of Warnings
|
|||||||
This error may be disabled with a lint_off PINNOTFOUND metacomment.
|
This error may be disabled with a lint_off PINNOTFOUND metacomment.
|
||||||
|
|
||||||
|
|
||||||
|
.. option:: PKGNODECL
|
||||||
|
|
||||||
|
Never issued since version 5.038. Historically an error that a
|
||||||
|
package/class appears to have been referenced that has not yet been
|
||||||
|
declared. According to IEEE 1800-2023 26.3, all packages must be
|
||||||
|
declared before being used. However, several standard libraries
|
||||||
|
including UVM violate this, and other tools do not warn.
|
||||||
|
|
||||||
|
|
||||||
.. option:: PORTSHORT
|
.. option:: PORTSHORT
|
||||||
|
|
||||||
Warns that an output port is connected to a constant.
|
Warns that an output port is connected to a constant.
|
||||||
@@ -1323,15 +1461,6 @@ List Of Warnings
|
|||||||
This error may be disabled with a lint_off PORTSHORT metacomment.
|
This error may be disabled with a lint_off PORTSHORT metacomment.
|
||||||
|
|
||||||
|
|
||||||
.. option:: PKGNODECL
|
|
||||||
|
|
||||||
.. TODO better example
|
|
||||||
|
|
||||||
An error that a package/class appears to have been referenced that has not
|
|
||||||
yet been declared. According to IEEE 1800-2023 26.3, all packages must
|
|
||||||
be declared before being used.
|
|
||||||
|
|
||||||
|
|
||||||
.. option:: PREPROCZERO
|
.. option:: PREPROCZERO
|
||||||
|
|
||||||
Warns that a preprocessor \`ifdef/\`ifndef expression (added in IEEE
|
Warns that a preprocessor \`ifdef/\`ifndef expression (added in IEEE
|
||||||
@@ -1354,7 +1483,41 @@ List Of Warnings
|
|||||||
`endif
|
`endif
|
||||||
|
|
||||||
The portable way to suppress this warning is to use a define value other
|
The portable way to suppress this warning is to use a define value other
|
||||||
than zero to when used in a preprocessor expression.
|
than zero, when it is to be used in a preprocessor expression.
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check; it will
|
||||||
|
simulate correctly.
|
||||||
|
|
||||||
|
|
||||||
|
.. option:: PROCASSINIT
|
||||||
|
|
||||||
|
Warns that the specified signal is given an initial value where it is
|
||||||
|
declared, and is also driven in an always process. Typically such
|
||||||
|
initial values should instead be set using a reset signal inside the
|
||||||
|
process, to match requirements of ASIC synthesis tools. However,
|
||||||
|
declaration initializers are a valid FPGA design idiom and therefore,
|
||||||
|
FPGA users may want to disable this warning.
|
||||||
|
|
||||||
|
Faulty example:
|
||||||
|
|
||||||
|
.. include:: ../../docs/gen/ex_PROCASSINIT_faulty.rst
|
||||||
|
|
||||||
|
Results in:
|
||||||
|
|
||||||
|
.. include:: ../../docs/gen/ex_PROCASSINIT_msg.rst
|
||||||
|
|
||||||
|
One possible fix, adding a reset to the always:
|
||||||
|
|
||||||
|
.. include:: ../../docs/gen/ex_PROCASSINIT_fixed.rst
|
||||||
|
|
||||||
|
Alternatively, use an initial block for the initialization:
|
||||||
|
|
||||||
|
.. code-block:: sv
|
||||||
|
|
||||||
|
initial flop_out = 1; // <--- Fixed
|
||||||
|
|
||||||
|
Disabled by default as this is a code-style warning; it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
|
|
||||||
.. option:: PROCASSWIRE
|
.. option:: PROCASSWIRE
|
||||||
@@ -1387,7 +1550,7 @@ List Of Warnings
|
|||||||
inside the protected region will be partly checked for correctness but is
|
inside the protected region will be partly checked for correctness but is
|
||||||
otherwise ignored.
|
otherwise ignored.
|
||||||
|
|
||||||
Suppressing the warning may make Verilator differ from a simulator that
|
Ignoring the warning may make Verilator differ from a simulator that
|
||||||
accepts the protected code.
|
accepts the protected code.
|
||||||
|
|
||||||
|
|
||||||
@@ -1405,6 +1568,9 @@ List Of Warnings
|
|||||||
Warns that a real number is being implicitly rounded to an integer, with
|
Warns that a real number is being implicitly rounded to an integer, with
|
||||||
possible loss of precision.
|
possible loss of precision.
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check; it will
|
||||||
|
simulate correctly.
|
||||||
|
|
||||||
Faulty example:
|
Faulty example:
|
||||||
|
|
||||||
.. code-block:: sv
|
.. code-block:: sv
|
||||||
@@ -1434,8 +1600,12 @@ List Of Warnings
|
|||||||
|
|
||||||
.. option:: REDEFMACRO
|
.. option:: REDEFMACRO
|
||||||
|
|
||||||
Warns that the code has redefined the same macro with a different value,
|
Warns that the code has redefined the same macro with a different value.
|
||||||
for example:
|
|
||||||
|
Ignoring this warning will only suppress the lint check; it will
|
||||||
|
simulate correctly.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
.. code-block:: sv
|
.. code-block:: sv
|
||||||
:linenos:
|
:linenos:
|
||||||
@@ -1644,6 +1814,9 @@ List Of Warnings
|
|||||||
Warning that a symbol matches a C++ reserved word, and using this as a
|
Warning that a symbol matches a C++ reserved word, and using this as a
|
||||||
symbol name would result in odd C++ compiler errors. You may disable
|
symbol name would result in odd C++ compiler errors. You may disable
|
||||||
this warning, but Verilator will rename the symbol to avoid conflict.
|
this warning, but Verilator will rename the symbol to avoid conflict.
|
||||||
|
If you are using `--vpi` and only mark things as public for VPI access
|
||||||
|
(and not C++ access) then it is advisable to disable this warning with
|
||||||
|
:code:`-Wno-SYMRSVDWORD`.
|
||||||
|
|
||||||
|
|
||||||
.. option:: SYNCASYNCNET
|
.. option:: SYNCASYNCNET
|
||||||
@@ -1876,7 +2049,8 @@ List Of Warnings
|
|||||||
|
|
||||||
.. option:: UNPACKED
|
.. option:: UNPACKED
|
||||||
|
|
||||||
Warns that unpacked structs and unions are not supported.
|
Warns that unpacked structs and unions are not supported because
|
||||||
|
:vlopt:`--structs-packed` was used, or by up through version 5.004.
|
||||||
|
|
||||||
Ignoring this warning will make Verilator treat the structure as packed,
|
Ignoring this warning will make Verilator treat the structure as packed,
|
||||||
which may make Verilator simulations differ from other simulators. This
|
which may make Verilator simulations differ from other simulators. This
|
||||||
@@ -1927,14 +2101,16 @@ List Of Warnings
|
|||||||
|
|
||||||
.. TODO better example
|
.. TODO better example
|
||||||
|
|
||||||
Warns that the specified genvar is never used/consumed.
|
Warns that the specified genvar is never used/consumed. See similar
|
||||||
|
:option:`UNUSEDSIGNAL`.
|
||||||
|
|
||||||
|
|
||||||
.. option:: UNUSEDPARAM
|
.. option:: UNUSEDPARAM
|
||||||
|
|
||||||
.. TODO better example
|
.. TODO better example
|
||||||
|
|
||||||
Warns that the specified parameter is never used/consumed.
|
Warns that the specified parameter is never used/consumed. See similar
|
||||||
|
:option:`UNUSEDSIGNAL`.
|
||||||
|
|
||||||
|
|
||||||
.. option:: UNUSEDSIGNAL
|
.. option:: UNUSEDSIGNAL
|
||||||
@@ -1955,12 +2131,12 @@ List Of Warnings
|
|||||||
|
|
||||||
.. code-block:: sv
|
.. code-block:: sv
|
||||||
|
|
||||||
wire _unused_ok = &{1'b0,
|
wire _unused_ok = 1'b0 && &{1'b0,
|
||||||
sig_not_used_a,
|
sig_not_used_a,
|
||||||
sig_not_used_yet_b, // To be fixed
|
sig_not_used_yet_b, // To be fixed
|
||||||
1'b0};
|
1'b0};
|
||||||
|
|
||||||
The reduction AND and constant zeros mean the net will always be zero,
|
The AND with constant zero mean the net will always be zero,
|
||||||
so won't use simulation runtime. The redundant leading and trailing
|
so won't use simulation runtime. The redundant leading and trailing
|
||||||
zeros avoid syntax errors if there are no signals between them. The
|
zeros avoid syntax errors if there are no signals between them. The
|
||||||
magic name "unused" (controlled by the :vlopt:`--unused-regexp` option)
|
magic name "unused" (controlled by the :vlopt:`--unused-regexp` option)
|
||||||
@@ -2052,15 +2228,11 @@ List Of Warnings
|
|||||||
|
|
||||||
.. include:: ../../docs/gen/ex_VARHIDDEN_msg.rst
|
.. include:: ../../docs/gen/ex_VARHIDDEN_msg.rst
|
||||||
|
|
||||||
To resolve this, rename the variable to an unique name.
|
To resolve this, rename the inner or outer variable to an unique name.
|
||||||
|
|
||||||
|
|
||||||
.. option:: WAITCONST
|
.. option:: WAITCONST
|
||||||
|
|
||||||
.. code-block:: sv
|
|
||||||
|
|
||||||
wait(1); // Blocks forever
|
|
||||||
|
|
||||||
Warns that a `wait` statement awaits a constant condition, which means it
|
Warns that a `wait` statement awaits a constant condition, which means it
|
||||||
either blocks forever or never blocks.
|
either blocks forever or never blocks.
|
||||||
|
|
||||||
@@ -2068,6 +2240,12 @@ List Of Warnings
|
|||||||
something that elaborates to zero), does not warn, as it is presumed the
|
something that elaborates to zero), does not warn, as it is presumed the
|
||||||
code is making the intent clear.
|
code is making the intent clear.
|
||||||
|
|
||||||
|
Faulty example:
|
||||||
|
|
||||||
|
.. code-block:: sv
|
||||||
|
|
||||||
|
wait(1); // Blocks forever
|
||||||
|
|
||||||
|
|
||||||
.. option:: WIDTH
|
.. option:: WIDTH
|
||||||
|
|
||||||
@@ -2104,7 +2282,7 @@ List Of Warnings
|
|||||||
|
|
||||||
.. include:: ../../docs/gen/ex_WIDTHEXPAND_1_faulty.rst
|
.. include:: ../../docs/gen/ex_WIDTHEXPAND_1_faulty.rst
|
||||||
|
|
||||||
Results in a WIDTHEXPAND warning:
|
Results in a :option:`WIDTHEXPAND` warning:
|
||||||
|
|
||||||
.. include:: ../../docs/gen/ex_WIDTHEXPAND_1_msg.rst
|
.. include:: ../../docs/gen/ex_WIDTHEXPAND_1_msg.rst
|
||||||
|
|
||||||
@@ -2113,18 +2291,6 @@ List Of Warnings
|
|||||||
.. include:: ../../docs/gen/ex_WIDTHEXPAND_1_fixed.rst
|
.. include:: ../../docs/gen/ex_WIDTHEXPAND_1_fixed.rst
|
||||||
|
|
||||||
|
|
||||||
.. option:: WIDTHTRUNC
|
|
||||||
|
|
||||||
A more granular WIDTH warning, for when a value is truncated.
|
|
||||||
|
|
||||||
.. option:: WIDTHEXPAND
|
|
||||||
|
|
||||||
A more granular WIDTH warning, for when a value is zero expanded.
|
|
||||||
|
|
||||||
.. option:: WIDTHXZEXPAND
|
|
||||||
|
|
||||||
A more granular WIDTH warning, for when a value is X/Z expanded.
|
|
||||||
|
|
||||||
.. option:: WIDTHCONCAT
|
.. option:: WIDTHCONCAT
|
||||||
|
|
||||||
Warns that based on the width rules of Verilog, a concatenate, or
|
Warns that based on the width rules of Verilog, a concatenate, or
|
||||||
@@ -2150,6 +2316,21 @@ List Of Warnings
|
|||||||
width to the parameter usage (:code:`{PAR[31:0], PAR[31:0]}`).
|
width to the parameter usage (:code:`{PAR[31:0], PAR[31:0]}`).
|
||||||
|
|
||||||
|
|
||||||
|
.. option:: WIDTHEXPAND
|
||||||
|
|
||||||
|
A more granular :option:`WIDTH` warning, for when a value is zero
|
||||||
|
expanded. See :option:`WIDTH`.
|
||||||
|
|
||||||
|
.. option:: WIDTHTRUNC
|
||||||
|
|
||||||
|
A more granular :option:`WIDTH` warning, for when a value is
|
||||||
|
truncated. See :option:`WIDTH`.
|
||||||
|
|
||||||
|
.. option:: WIDTHXZEXPAND
|
||||||
|
|
||||||
|
A more granular :option:`WIDTH` warning, for when a value is X/Z
|
||||||
|
expanded. See :option:`WIDTH`.
|
||||||
|
|
||||||
.. option:: ZERODLY
|
.. option:: ZERODLY
|
||||||
|
|
||||||
Warns that `#0` delays do not schedule the process to be resumed in the
|
Warns that `#0` delays do not schedule the process to be resumed in the
|
||||||
@@ -2172,7 +2353,7 @@ List Of Warnings
|
|||||||
#(parameter int MY_PARAM = 0);
|
#(parameter int MY_PARAM = 0);
|
||||||
reg [7:0] data;
|
reg [7:0] data;
|
||||||
always @* begin
|
always @* begin
|
||||||
data = {MY_PARAM{1'b1}}; //<--- WARNING
|
data = {MY_PARAM{1'b1}}; //<--- Warning
|
||||||
end
|
end
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
@@ -2193,7 +2374,7 @@ List Of Warnings
|
|||||||
:emphasize-lines: 2
|
:emphasize-lines: 2
|
||||||
|
|
||||||
module dut
|
module dut
|
||||||
#(parameter int MY_PARAM = 1); //<--- REPAIRED
|
#(parameter int MY_PARAM = 1); //<--- REPAIRED
|
||||||
reg [7:0] data;
|
reg [7:0] data;
|
||||||
always @* begin
|
always @* begin
|
||||||
data = {MY_PARAM{1'b1}};
|
data = {MY_PARAM{1'b1}};
|
||||||
|
|||||||
+177
-62
@@ -1031,6 +1031,91 @@ the evaluation process records a bitmask of variables that might have
|
|||||||
changed; if clear, checking those signals for changes may be skipped.
|
changed; if clear, checking those signals for changes may be skipped.
|
||||||
|
|
||||||
|
|
||||||
|
Constrained randomization
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Because general constrained randomization is a co-NP-hard problem, not all
|
||||||
|
cases are implemented in Verilator, and an external specialized SMT solver is
|
||||||
|
used for any non-obvious ones.
|
||||||
|
|
||||||
|
The ``randomize()`` method spawns an SMT solver in a sub-process. Then the
|
||||||
|
solver gets a setup query, then the definition of variables, then all the
|
||||||
|
constraints (SMT assertions) about the variables. Since the solver has no
|
||||||
|
information about the class' PRNG state, if the problem is satisfiable,
|
||||||
|
the solution space is further constrained by adding extra random constraints,
|
||||||
|
and querying the values satisfying the problem statement.
|
||||||
|
The constraint is currently constructed as fixing a simple xor of randomly
|
||||||
|
chosen bits of the variables being randomized.
|
||||||
|
|
||||||
|
The runtime classes used for handling the randomization are defined in
|
||||||
|
``verilated_random.h`` and ``verilated_random.cpp``.
|
||||||
|
|
||||||
|
|
||||||
|
``VlSubprocess``
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Subprocess handle, responsible for keeping track of the resources like child
|
||||||
|
PID, read and write file descriptors, and presenting them as a C++ iostream.
|
||||||
|
|
||||||
|
|
||||||
|
``VlRandomizer``
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Randomizer class, responsible for keeping track of variables and constraints,
|
||||||
|
and communicating with the solver subprocess.
|
||||||
|
|
||||||
|
The solver gets the constraints in `SMT-LIB2
|
||||||
|
<https://smtlib.cs.uiowa.edu/>`__ textual format in the following syntax:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
(set-info :smt-lib-version 2.0)
|
||||||
|
(set-option :produce-models true)
|
||||||
|
(set-logic QF_BV)
|
||||||
|
|
||||||
|
(declare-fun v () (_ BitVec 16))
|
||||||
|
(declare-fun w () (_ BitVec 64))
|
||||||
|
(declare-fun x () (_ BitVec 48))
|
||||||
|
(declare-fun z () (_ BitVec 24))
|
||||||
|
(declare-fun t () (_ BitVec 23))
|
||||||
|
(assert (or (= v #x0003) (= v #x0008)))
|
||||||
|
(assert (= w #x0000000000000009))
|
||||||
|
(assert (or (or (= x #x000000000001) (= x #x000000000002)) (or (= x #x000000000004) (= x #x000000000009))))
|
||||||
|
(assert (bvult ((_ zero_extend 8) z) #x00000015))
|
||||||
|
(assert (bvugt ((_ zero_extend 8) z) #x0000000d))
|
||||||
|
|
||||||
|
(check-sat)
|
||||||
|
|
||||||
|
The solver responds with either ``sat`` or ``unsat``. Then the initial solution
|
||||||
|
is queried with:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
(get-value (v w x z t ))
|
||||||
|
|
||||||
|
The solver then responds with e.g.:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
((v #x0008)
|
||||||
|
(w #x0000000000000005)
|
||||||
|
(x #x000000000002)
|
||||||
|
(z #x000010)
|
||||||
|
(t #b00000000000000000000000))
|
||||||
|
|
||||||
|
And then a follow-up query (or a series thereof) is asked, and the solver gets
|
||||||
|
reset, so that it can be reused by subsequent randomization attempts:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
(assert (= (bvxor (bvxor <...> (bvxor ((_ extract 21 21) z) ((_ extract 39 39) x)) ((_ extract 5 5) w)) <...> ((_ extract 10 10) w)) #b0))
|
||||||
|
(check-sat)
|
||||||
|
(get-value)
|
||||||
|
...
|
||||||
|
(reset)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Coding Conventions
|
Coding Conventions
|
||||||
==================
|
==================
|
||||||
|
|
||||||
@@ -1385,10 +1470,7 @@ Preparing to Run Tests
|
|||||||
|
|
||||||
For all tests to pass, you must install the following packages:
|
For all tests to pass, you must install the following packages:
|
||||||
|
|
||||||
- SystemC to compile the SystemC outputs, see http://systemc.org
|
- SystemC to compile the SystemC outputs, see https://systemc.org
|
||||||
|
|
||||||
- Parallel::Forker from CPAN to run tests in parallel; you can install
|
|
||||||
this with e.g. "sudo cpan install Parallel::Forker".
|
|
||||||
|
|
||||||
- vcddiff to find differences in VCD outputs. See the readme at
|
- vcddiff to find differences in VCD outputs. See the readme at
|
||||||
https://github.com/veripool/vcddiff
|
https://github.com/veripool/vcddiff
|
||||||
@@ -1399,7 +1481,7 @@ For all tests to pass, you must install the following packages:
|
|||||||
Controlling the Test Driver
|
Controlling the Test Driver
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
The test driver script `driver.pl` runs tests; see the `Test Driver`
|
The test driver script `driver.py` runs tests; see the `Test Driver`
|
||||||
section. The individual test drivers are written in Perl; see `Test
|
section. The individual test drivers are written in Perl; see `Test
|
||||||
Language`.
|
Language`.
|
||||||
|
|
||||||
@@ -1412,7 +1494,7 @@ A specific regression test can be executed manually. To start the
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
test_regress/t/t_EXAMPLE.pl
|
test_regress/t/t_EXAMPLE.py
|
||||||
|
|
||||||
|
|
||||||
Regression Testing for Developers
|
Regression Testing for Developers
|
||||||
@@ -1432,13 +1514,6 @@ Developers will also want to call ./configure with two extra flags:
|
|||||||
disabled by default, as SystemC installation problems would otherwise
|
disabled by default, as SystemC installation problems would otherwise
|
||||||
falsely indicate a Verilator problem.
|
falsely indicate a Verilator problem.
|
||||||
|
|
||||||
When enabling the long tests, some additional Perl modules are needed,
|
|
||||||
which you can install using cpan.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
cpan install Parallel::Forker
|
|
||||||
|
|
||||||
There are some traps to avoid when running regression tests
|
There are some traps to avoid when running regression tests
|
||||||
|
|
||||||
- When checking the MANIFEST, the test will fail on unexpected code in the
|
- When checking the MANIFEST, the test will fail on unexpected code in the
|
||||||
@@ -1494,6 +1569,41 @@ environment can check their branches too by enabling the build workflow:
|
|||||||
|
|
||||||
- Click Enable workflow.
|
- Click Enable workflow.
|
||||||
|
|
||||||
|
Benchmarking
|
||||||
|
------------
|
||||||
|
|
||||||
|
For benchmarking the effects of changes (simulation speed, memory consumption,
|
||||||
|
verilation time, etc.), you can use `RTLMeter
|
||||||
|
<https://github.com/verilator/rtlmeter>`__, a benchmark suite designed for this
|
||||||
|
purpose. The scripts provided with RTLMeter have many capabilities. For full
|
||||||
|
details, see the `documentation of RTLMeter
|
||||||
|
<https://verilator.github.io/rtlmeter>`__ itself.
|
||||||
|
|
||||||
|
For a quick check, you an run the following after putting ``verilator`` on your
|
||||||
|
``PATH``:
|
||||||
|
|
||||||
|
.. code:: shell
|
||||||
|
|
||||||
|
./rtlmeter run --cases "+standard" --workRoot work-a
|
||||||
|
./rtlmeter report work-a
|
||||||
|
|
||||||
|
To compare against an alternate version, again put that alternate ``verilator``
|
||||||
|
on your ``PATH`` then run:
|
||||||
|
|
||||||
|
.. code:: shell
|
||||||
|
|
||||||
|
./rtlmeter run --cases "+standard" --workRoot work-b
|
||||||
|
./rtlmeter compare work-a work-b
|
||||||
|
|
||||||
|
The continuous integration system in GitHub Actions runs this benchmark suite
|
||||||
|
nightly on the master branch. The performance numbers from these nightly runs
|
||||||
|
can be viewed via the `RTLMeter results dashboard
|
||||||
|
<https://verilator.github.io/verilator-rtlmeter-results>`__. Note that these
|
||||||
|
results are collected on GitHub hosted runners. These are virtual machines
|
||||||
|
operating in a potentially noisy environment, so time measurements can have
|
||||||
|
significant variance. Experience shows that a ~20% time difference can be
|
||||||
|
reliably measured on GitHub hosted runners, and smaller differences are
|
||||||
|
noticeable over a few days of reruns as trends emerge from the noise.
|
||||||
|
|
||||||
Fuzzing
|
Fuzzing
|
||||||
-------
|
-------
|
||||||
@@ -1558,7 +1668,7 @@ scaled so it can be more useful with large graphs.
|
|||||||
|
|
||||||
For interactive graph viewing consider `xdot
|
For interactive graph viewing consider `xdot
|
||||||
<https://github.com/jrfonseca/xdot.py>`__ or `ZGRViewer
|
<https://github.com/jrfonseca/xdot.py>`__ or `ZGRViewer
|
||||||
<http://zvtm.sourceforge.net/zgrviewer.html>`__. If you know of better
|
<https://zvtm.sourceforge.net/zgrviewer.html>`__. If you know of better
|
||||||
viewers (especially for large graphs) please let us know.
|
viewers (especially for large graphs) please let us know.
|
||||||
|
|
||||||
|
|
||||||
@@ -1581,7 +1691,7 @@ field in the section below.
|
|||||||
+---------------+--------------------------------------------------------+
|
+---------------+--------------------------------------------------------+
|
||||||
| ``1:2:`` | The hierarchy of the ``VAR`` is the ``op2p`` |
|
| ``1:2:`` | The hierarchy of the ``VAR`` is the ``op2p`` |
|
||||||
| | pointer under the ``MODULE``, which in turn is the |
|
| | pointer under the ``MODULE``, which in turn is the |
|
||||||
| | ``op1p`` pointer under the ``NETLIST`` |
|
| | ``op1p`` pointer under the ``NETLIST``. |
|
||||||
+---------------+--------------------------------------------------------+
|
+---------------+--------------------------------------------------------+
|
||||||
| ``VAR`` | The AstNodeType (e.g. ``AstVar``). |
|
| ``VAR`` | The AstNodeType (e.g. ``AstVar``). |
|
||||||
+---------------+--------------------------------------------------------+
|
+---------------+--------------------------------------------------------+
|
||||||
@@ -1595,7 +1705,7 @@ field in the section below.
|
|||||||
| | and "aa" the 27th. Then line 22 in that file, then |
|
| | and "aa" the 27th. Then line 22 in that file, then |
|
||||||
| | column 8 (aa=0, az=25, ba=26, ...). |
|
| | column 8 (aa=0, az=25, ba=26, ...). |
|
||||||
+---------------+--------------------------------------------------------+
|
+---------------+--------------------------------------------------------+
|
||||||
| ``@dt=0x...`` | The address of the data type this node contains. |
|
| ``@dt=0x...`` | The address of the data type this node references. |
|
||||||
+---------------+--------------------------------------------------------+
|
+---------------+--------------------------------------------------------+
|
||||||
| ``w32`` | The data-type width() is 32 bits. |
|
| ``w32`` | The data-type width() is 32 bits. |
|
||||||
+---------------+--------------------------------------------------------+
|
+---------------+--------------------------------------------------------+
|
||||||
@@ -1603,7 +1713,7 @@ field in the section below.
|
|||||||
| | variable. |
|
| | variable. |
|
||||||
+---------------+--------------------------------------------------------+
|
+---------------+--------------------------------------------------------+
|
||||||
| ``[O]`` | Flags which vary with the type of node, in this |
|
| ``[O]`` | Flags which vary with the type of node, in this |
|
||||||
| | case, it means the variable is an output. |
|
| | case of a VAR, it means the variable is an output. |
|
||||||
+---------------+--------------------------------------------------------+
|
+---------------+--------------------------------------------------------+
|
||||||
|
|
||||||
In more detail, the following fields are dumped common to all nodes. They
|
In more detail, the following fields are dumped common to all nodes. They
|
||||||
@@ -1786,7 +1896,7 @@ represent the pointers (``op1p``, ``op2p``, etc) between the nodes.
|
|||||||
Debugging with GDB
|
Debugging with GDB
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
The `driver.pl` script accepts ``--debug --gdb`` to start
|
The `driver.py` script accepts ``--debug --gdb`` to start
|
||||||
Verilator under gdb and break when an error is hit, or the program is about
|
Verilator under gdb and break when an error is hit, or the program is about
|
||||||
to exit. You can also use ``--debug --gdbbt`` to just backtrace and then
|
to exit. You can also use ``--debug --gdbbt`` to just backtrace and then
|
||||||
exit gdb. To debug the Verilated executable, use ``--gdbsim``.
|
exit gdb. To debug the Verilated executable, use ``--gdbsim``.
|
||||||
@@ -1797,7 +1907,7 @@ can use ``--debug`` and look at the underlying invocation of
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
t/t_alw_dly.pl --debug
|
t/t_alw_dly.py --debug
|
||||||
|
|
||||||
shows it invokes the command:
|
shows it invokes the command:
|
||||||
|
|
||||||
@@ -1828,7 +1938,7 @@ find what made a <e#*#*> line in the tree dumps):
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
watch AstNode::s_editCntGbl==####
|
watch AstNode::s_editCntGbl=####
|
||||||
|
|
||||||
Then, when the watch fires, to break at every following change to that
|
Then, when the watch fires, to break at every following change to that
|
||||||
node:
|
node:
|
||||||
@@ -1894,7 +2004,7 @@ Generally, what would you do to add a new feature?
|
|||||||
Follow the convention described above about the AstNode type hierarchy.
|
Follow the convention described above about the AstNode type hierarchy.
|
||||||
Ordering of definitions is enforced by ``astgen``.
|
Ordering of definitions is enforced by ``astgen``.
|
||||||
|
|
||||||
5. Now you can run ``test_regress/t/t_<newtestcase>.pl --debug`` and it'll
|
5. Now you can run ``test_regress/t/t_<newtestcase>.py --debug`` and it'll
|
||||||
probably fail, but you'll see a
|
probably fail, but you'll see a
|
||||||
``test_regress/obj_dir/t_<newtestcase>/*.tree`` file which you can examine
|
``test_regress/obj_dir/t_<newtestcase>/*.tree`` file which you can examine
|
||||||
to see if the parsing worked. See also the sections above on debugging.
|
to see if the parsing worked. See also the sections above on debugging.
|
||||||
@@ -1943,7 +2053,7 @@ IEEE 1800-2023 33 Config
|
|||||||
Test Driver
|
Test Driver
|
||||||
===========
|
===========
|
||||||
|
|
||||||
This section documents the test driver script, `driver.pl`. driver.pl
|
This section documents the test driver script, `driver.py`. driver.py
|
||||||
invokes Verilator or another simulator on each test file. For test file
|
invokes Verilator or another simulator on each test file. For test file
|
||||||
contents description see `Test Language`.
|
contents description see `Test Language`.
|
||||||
|
|
||||||
@@ -1955,7 +2065,7 @@ the regression tests with OBJCACHE enabled and in parallel on a machine
|
|||||||
with many cores. See the -j option and OBJCACHE environment variable.
|
with many cores. See the -j option and OBJCACHE environment variable.
|
||||||
|
|
||||||
|
|
||||||
driver.pl Non-Scenario Arguments
|
driver.py Non-Scenario Arguments
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
--benchmark [<cycles>]
|
--benchmark [<cycles>]
|
||||||
@@ -1971,6 +2081,11 @@ driver.pl Non-Scenario Arguments
|
|||||||
Same as ``verilator --debugi level``: Set Verilator internal debugging
|
Same as ``verilator --debugi level``: Set Verilator internal debugging
|
||||||
level globally to the specified debug level (1-10).
|
level globally to the specified debug level (1-10).
|
||||||
|
|
||||||
|
--driver-clean
|
||||||
|
After a test passes, remove the generated objects. Reduces storage
|
||||||
|
requirements, but may result in longer runtime if the tests are run
|
||||||
|
again.
|
||||||
|
|
||||||
--dump-tree
|
--dump-tree
|
||||||
Same as ``verilator --dump-tree``: Enable Verilator writing .tree debug
|
Same as ``verilator --dump-tree``: Enable Verilator writing .tree debug
|
||||||
files with dumping level 3, which dumps the standard critical stages.
|
files with dumping level 3, which dumps the standard critical stages.
|
||||||
@@ -2002,7 +2117,10 @@ driver.pl Non-Scenario Arguments
|
|||||||
|
|
||||||
--j #
|
--j #
|
||||||
Run number of parallel tests, or 0 to determine the count based on the
|
Run number of parallel tests, or 0 to determine the count based on the
|
||||||
number of cores installed. Requires Perl's Parallel::Forker package.
|
number of cores installed.
|
||||||
|
|
||||||
|
--obj-suffix <name>
|
||||||
|
Append the argument to the name of the ``test_regress/obj_`` directories.
|
||||||
|
|
||||||
--quiet
|
--quiet
|
||||||
Suppress all output except for failures and progress messages every 15
|
Suppress all output except for failures and progress messages every 15
|
||||||
@@ -2025,13 +2143,13 @@ driver.pl Non-Scenario Arguments
|
|||||||
memory leaks.
|
memory leaks.
|
||||||
|
|
||||||
--site
|
--site
|
||||||
Run site specific tests also.
|
Run site-specific tests also.
|
||||||
|
|
||||||
--stop
|
--stop
|
||||||
Stop on the first error.
|
Stop on the first error.
|
||||||
|
|
||||||
--trace
|
--trace
|
||||||
Set the simulator specific flags to request waveform tracing.
|
Set the simulator-specific flags to request waveform tracing.
|
||||||
|
|
||||||
--valgrind
|
--valgrind
|
||||||
Same as ``verilator --valgrind``: Run Verilator under `Valgrind <https://valgrind.org/>`_.
|
Same as ``verilator --valgrind``: Run Verilator under `Valgrind <https://valgrind.org/>`_.
|
||||||
@@ -2044,7 +2162,7 @@ driver.pl Non-Scenario Arguments
|
|||||||
For tests using the standard C++ wrapper, enable runtime debug mode.
|
For tests using the standard C++ wrapper, enable runtime debug mode.
|
||||||
|
|
||||||
|
|
||||||
driver.pl Scenario Arguments
|
driver.py Scenario Arguments
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
The following options control which simulator is used, and which tests are
|
The following options control which simulator is used, and which tests are
|
||||||
@@ -2086,7 +2204,7 @@ simultaneously.
|
|||||||
Run Xilinx XSim simulator tests.
|
Run Xilinx XSim simulator tests.
|
||||||
|
|
||||||
|
|
||||||
driver.pl Environment
|
driver.py Environment
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
HARNESS_UPDATE_GOLDEN
|
HARNESS_UPDATE_GOLDEN
|
||||||
@@ -2125,6 +2243,10 @@ VERILATOR_ROOT
|
|||||||
Standard path to Verilator distribution root; see primary Verilator
|
Standard path to Verilator distribution root; see primary Verilator
|
||||||
documentation.
|
documentation.
|
||||||
|
|
||||||
|
VERILATOR_SOLVER
|
||||||
|
SMT solver command for constrained randomization; see primary Verilator
|
||||||
|
documentation.
|
||||||
|
|
||||||
VERILATOR_TESTS_SITE
|
VERILATOR_TESTS_SITE
|
||||||
Used with ``--site``, a colon-separated list of directories with tests to
|
Used with ``--site``, a colon-separated list of directories with tests to
|
||||||
be added to testlist.
|
be added to testlist.
|
||||||
@@ -2142,30 +2264,30 @@ VERILATOR_XVLOG
|
|||||||
Test Language
|
Test Language
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This section describes the format of the ``test_regress/t/*.pl`` test
|
This section describes the format of the ``test_regress/t/*.py`` test
|
||||||
language files, executed by `driver.pl`.
|
language files, executed by `driver.py`.
|
||||||
|
|
||||||
Test Language Summary
|
Test Language Summary
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
For convenience, a summary of the most commonly used features is provided
|
For convenience, a summary of the most commonly used features is provided
|
||||||
here, with a reference in a later section. All test files typically have a
|
here, with a reference in a later section. All test files typically have a
|
||||||
call to the ``lint`` or ``compile`` subroutine to compile the test. For
|
call to the ``test.lint`` or ``test.compile`` methods to compile the
|
||||||
run-time tests, this is followed by a call to the ``execute``
|
test. For run-time tests, this is followed by a call to the
|
||||||
subroutine. Both of these functions can optionally be provided with
|
``test.execute`` method. Both of these functions can optionally be provided
|
||||||
arguments specifying additional options.
|
with arguments specifying additional options.
|
||||||
|
|
||||||
If those complete, the script calls ``ok`` to increment the count of
|
If those complete, the script calls ``test.passes`` to increment the count
|
||||||
successful tests and then returns 1 as its result.
|
of successful tests.
|
||||||
|
|
||||||
The driver.pl script assumes by default that the source Verilog file name
|
The driver.py script assumes by default that the source Verilog file name
|
||||||
matches the test script name. So a test whose driver is
|
matches the test script name. So a test whose driver is
|
||||||
``t/t_mytest.pl`` will expect a Verilog source file ``t/t_mytest.v``.
|
``t/t_mytest.py`` will expect a Verilog source file ``t/t_mytest.v``.
|
||||||
This can be changed using the ``top_filename`` subroutine, for example
|
This can be changed using the ``top_filename`` subroutine, for example
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
top_filename("t/t_myothertest.v");
|
test.top_filename = "t/t_myothertest.v"
|
||||||
|
|
||||||
By default, all tests will run with major simulators (Icarus Verilog, NC,
|
By default, all tests will run with major simulators (Icarus Verilog, NC,
|
||||||
VCS, ModelSim, etc.) as well as Verilator, to allow results to be
|
VCS, ModelSim, etc.) as well as Verilator, to allow results to be
|
||||||
@@ -2174,26 +2296,25 @@ can use the following:
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
scenarios(vlt => 1);
|
test.scenarios('vlt')
|
||||||
|
|
||||||
Of the many options that can be set through arguments to ``compiler`` and
|
Of the many options that can be set through arguments to ``test.compiler``
|
||||||
``execute``, the following are particularly useful:
|
and ``test.execute``, the following are particularly useful:
|
||||||
|
|
||||||
``verilator_flags2``
|
``verilator_flags2``
|
||||||
A list of flags to be passed to verilator when compiling.
|
A list of flags to be passed to verilator when compiling.
|
||||||
|
|
||||||
``fails``
|
``fails``
|
||||||
Set to 1 to indicate that the compilation or execution is intended to fail.
|
Set true to indicate that the compilation or execution is intended to fail.
|
||||||
|
|
||||||
For example, the following would specify that compilation requires two
|
For example, the following would specify that compilation requires two
|
||||||
defines and is expected to fail.
|
defines and is expected to fail.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
compile(
|
test.compile(
|
||||||
verilator_flags2 => ["-DSMALL_CLOCK -DGATED_COMMENT"],
|
verilator_flags2 => ["-DSMALL_CLOCK -DGATED_COMMENT"],
|
||||||
fails => 1,
|
fails = True)
|
||||||
);
|
|
||||||
|
|
||||||
Hints On Writing Tests
|
Hints On Writing Tests
|
||||||
----------------------
|
----------------------
|
||||||
@@ -2206,10 +2327,10 @@ same name as the test, but with .cpp as suffix
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
compile(
|
test.compile(
|
||||||
make_top_shell => 0,
|
make_top_shell=False,
|
||||||
make_main => 0,
|
make_main=False,
|
||||||
verilator_flags2 => ["--exe $Self->{t_dir}/$Self->{name}.cpp"], );
|
verilator_flags2=["--exe", test.t_dir + "/" + test.name + ".cpp"])
|
||||||
|
|
||||||
Tests should be self-checking, rather than producing lots of output. If a
|
Tests should be self-checking, rather than producing lots of output. If a
|
||||||
test succeeds it should print ``*-* All Finished *-*`` to standard output
|
test succeeds it should print ``*-* All Finished *-*`` to standard output
|
||||||
@@ -2249,9 +2370,8 @@ compile time, it is the only option. For example:
|
|||||||
::
|
::
|
||||||
|
|
||||||
compile(
|
compile(
|
||||||
fails => 1,
|
fails=True,
|
||||||
expect_filename => $Self->{golden_filename},
|
expect_filename=test.golden_filename)
|
||||||
);
|
|
||||||
|
|
||||||
Note ``expect_filename`` strips some debugging information from the logfile
|
Note ``expect_filename`` strips some debugging information from the logfile
|
||||||
when comparing.
|
when comparing.
|
||||||
@@ -2260,9 +2380,9 @@ when comparing.
|
|||||||
Test Language Compile/Lint/Run Arguments
|
Test Language Compile/Lint/Run Arguments
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
|
||||||
This section describes common arguments to ``compile()``, ``lint()``, and
|
This section describes common arguments to ``test.compile``, ``test.lint``,
|
||||||
``run()``. The full list of arguments can be found by looking at the
|
and ``test.run``. The full list of arguments can be found by looking at
|
||||||
``driver.pl`` source code.
|
the ``driver.py`` source code.
|
||||||
|
|
||||||
all_run_flags
|
all_run_flags
|
||||||
A list of flags to be passed when running the simulator (Verilated model
|
A list of flags to be passed when running the simulator (Verilated model
|
||||||
@@ -2273,11 +2393,6 @@ check_finished
|
|||||||
string ``*-* All Finished *-*`` being printed on standard output. This is
|
string ``*-* All Finished *-*`` being printed on standard output. This is
|
||||||
the normal way for successful tests to finish.
|
the normal way for successful tests to finish.
|
||||||
|
|
||||||
expect
|
|
||||||
A quoted list of strings or regular expression to be matched in the
|
|
||||||
output. See `Hints On Writing Tests` for more detail on how this argument
|
|
||||||
should be used.
|
|
||||||
|
|
||||||
fails
|
fails
|
||||||
True to indicate this step is expected to fail. Tests that are expected
|
True to indicate this step is expected to fail. Tests that are expected
|
||||||
to fail generally have _bad in their filename.
|
to fail generally have _bad in their filename.
|
||||||
@@ -2339,7 +2454,7 @@ xsim_flags / xsim_flags2 / xsim_run_flags
|
|||||||
Distribution
|
Distribution
|
||||||
============
|
============
|
||||||
|
|
||||||
Copyright 2008-2024 by Wilson Snyder. Verilator is free software; you can
|
Copyright 2008-2025 by Wilson Snyder. Verilator is free software; you can
|
||||||
redistribute it and/or modify it under the terms of either the GNU Lesser
|
redistribute it and/or modify it under the terms of either the GNU Lesser
|
||||||
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
.. for github, vim: syntax=reStructuredText
|
||||||
|
|
||||||
|
Security Policy
|
||||||
|
===============
|
||||||
|
|
||||||
|
If you believe you have found a security issue in any Verilator-owned
|
||||||
|
repository, create a `GitHub repository security advisory
|
||||||
|
<https://docs.github.com/en/code-security/security-advisories/working-with-repository-security-advisories/creating-a-repository-security-advisory>`__.
|
||||||
|
We request that you please not publicly disclose the issue until it has
|
||||||
|
been addressed by us.
|
||||||
|
|
||||||
|
SystemVerilog Security
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
The SystemVerilog language includes `$system`, etc. operating system calls,
|
||||||
|
and as such executables created by Verilator should be considered insecure.
|
||||||
|
In contrast, it is a security issue if a Verilator-created data file, such
|
||||||
|
as a coverage data file, when read with `verilator_coverage`, allows
|
||||||
|
arbitrary code execution.
|
||||||
|
|
||||||
|
Bug bounties
|
||||||
|
------------
|
||||||
|
|
||||||
|
While we encourage reports of suspected security problems, we are an open
|
||||||
|
source project, and do not run any bug bounty programs.
|
||||||
|
|
||||||
|
Preferred Languages
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
We prefer all communications to be in English.
|
||||||
|
|
||||||
|
Policy
|
||||||
|
------
|
||||||
|
|
||||||
|
We follow the principle of `Coordinated Vulnerability Disclosure
|
||||||
|
<https://en.wikipedia.org/wiki/Coordinated_vulnerability_disclosure>`__.
|
||||||
|
|
||||||
|
Distribution
|
||||||
|
------------
|
||||||
|
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
@@ -19,7 +19,9 @@ Asciidoc
|
|||||||
Ashutosh
|
Ashutosh
|
||||||
Ast
|
Ast
|
||||||
Atmel
|
Atmel
|
||||||
|
Augustin
|
||||||
Aurelien
|
Aurelien
|
||||||
|
Badáň
|
||||||
Bagri
|
Bagri
|
||||||
Balboni
|
Balboni
|
||||||
Baltazar
|
Baltazar
|
||||||
@@ -40,6 +42,7 @@ Brej
|
|||||||
Briquet
|
Briquet
|
||||||
Brownlee
|
Brownlee
|
||||||
Buckenmaier
|
Buckenmaier
|
||||||
|
Burghoorn
|
||||||
Bybell
|
Bybell
|
||||||
CLang
|
CLang
|
||||||
CMake
|
CMake
|
||||||
@@ -73,6 +76,7 @@ Deepa
|
|||||||
Defparams
|
Defparams
|
||||||
Delm
|
Delm
|
||||||
Denio
|
Denio
|
||||||
|
Deniz
|
||||||
Deprecations
|
Deprecations
|
||||||
Deroo
|
Deroo
|
||||||
Desai
|
Desai
|
||||||
@@ -101,15 +105,19 @@ Eiler
|
|||||||
Eivind
|
Eivind
|
||||||
El
|
El
|
||||||
Elbourne
|
Elbourne
|
||||||
|
Elzeftawi
|
||||||
Embecosm
|
Embecosm
|
||||||
Engstrom
|
Engstrom
|
||||||
Enzo
|
Enzo
|
||||||
Eugen
|
Eugen
|
||||||
|
Fabre
|
||||||
Fabrizio
|
Fabrizio
|
||||||
Faucher
|
Faucher
|
||||||
Faure
|
Faure
|
||||||
|
Feinberg
|
||||||
Fekete
|
Fekete
|
||||||
Ferrandi
|
Ferrandi
|
||||||
|
Filip
|
||||||
Flachs
|
Flachs
|
||||||
Flavien
|
Flavien
|
||||||
Florian
|
Florian
|
||||||
@@ -131,10 +139,12 @@ Gernot
|
|||||||
Gerst
|
Gerst
|
||||||
Gielda
|
Gielda
|
||||||
Gigerl
|
Gigerl
|
||||||
|
Gijs
|
||||||
Gileadi
|
Gileadi
|
||||||
Giri
|
Giri
|
||||||
Gisselquist
|
Gisselquist
|
||||||
Gladkikh
|
Gladkikh
|
||||||
|
GmbH
|
||||||
Goessling
|
Goessling
|
||||||
Gonnen
|
Gonnen
|
||||||
Goorah
|
Goorah
|
||||||
@@ -147,6 +157,7 @@ Grulfen
|
|||||||
Gu
|
Gu
|
||||||
Gunter
|
Gunter
|
||||||
Guo
|
Guo
|
||||||
|
Güzel
|
||||||
Hameed
|
Hameed
|
||||||
Hao
|
Hao
|
||||||
Haojin
|
Haojin
|
||||||
@@ -164,6 +175,7 @@ Homebrew
|
|||||||
Hornung
|
Hornung
|
||||||
Hossell
|
Hossell
|
||||||
Hsu
|
Hsu
|
||||||
|
Huggett
|
||||||
Hutt
|
Hutt
|
||||||
Hyperthreading
|
Hyperthreading
|
||||||
Ibrahim
|
Ibrahim
|
||||||
@@ -235,11 +247,14 @@ Lesik
|
|||||||
Libenzi
|
Libenzi
|
||||||
Licker
|
Licker
|
||||||
Liland
|
Liland
|
||||||
|
LinkDot
|
||||||
Liu
|
Liu
|
||||||
Liwei
|
Liwei
|
||||||
Lockhart
|
Lockhart
|
||||||
Longo
|
Longo
|
||||||
|
LteS
|
||||||
Luca
|
Luca
|
||||||
|
Luiza
|
||||||
Lussier
|
Lussier
|
||||||
Lübeck
|
Lübeck
|
||||||
MMD
|
MMD
|
||||||
@@ -261,6 +276,7 @@ Mednick
|
|||||||
Mei
|
Mei
|
||||||
Melo
|
Melo
|
||||||
Menküc
|
Menküc
|
||||||
|
Menon
|
||||||
Michail
|
Michail
|
||||||
Michiels
|
Michiels
|
||||||
Microsystems
|
Microsystems
|
||||||
@@ -270,6 +286,8 @@ MinW
|
|||||||
Mindspeed
|
Mindspeed
|
||||||
MingW
|
MingW
|
||||||
Miodrag
|
Miodrag
|
||||||
|
Moberg
|
||||||
|
Mobert
|
||||||
ModelSim
|
ModelSim
|
||||||
Modport
|
Modport
|
||||||
Moinak
|
Moinak
|
||||||
@@ -283,11 +301,13 @@ NaN
|
|||||||
Nalbantis
|
Nalbantis
|
||||||
Nandor
|
Nandor
|
||||||
Narayan
|
Narayan
|
||||||
|
Narcis
|
||||||
Nassim
|
Nassim
|
||||||
Nauticus
|
Nauticus
|
||||||
Newgard
|
Newgard
|
||||||
Nigam
|
Nigam
|
||||||
Nikana
|
Nikana
|
||||||
|
Niraj
|
||||||
Niranjan
|
Niranjan
|
||||||
Nitza
|
Nitza
|
||||||
Noack
|
Noack
|
||||||
@@ -314,6 +334,7 @@ Prabhat
|
|||||||
Prabhu
|
Prabhu
|
||||||
Prateek
|
Prateek
|
||||||
Pre
|
Pre
|
||||||
|
Precompiling
|
||||||
Preprocess
|
Preprocess
|
||||||
Pretet
|
Pretet
|
||||||
Pretl
|
Pretl
|
||||||
@@ -332,6 +353,7 @@ Redhat
|
|||||||
Reitan
|
Reitan
|
||||||
Renga
|
Renga
|
||||||
Requin
|
Requin
|
||||||
|
Rodas
|
||||||
Rodionov
|
Rodionov
|
||||||
Rohan
|
Rohan
|
||||||
Rolfe
|
Rolfe
|
||||||
@@ -349,8 +371,10 @@ Sanguinetti
|
|||||||
Sanjay
|
Sanjay
|
||||||
Sasselli
|
Sasselli
|
||||||
Scharrer
|
Scharrer
|
||||||
|
Schless
|
||||||
Seitz
|
Seitz
|
||||||
Shahid
|
Shahid
|
||||||
|
Shahrestani
|
||||||
Shankar
|
Shankar
|
||||||
Shanshan
|
Shanshan
|
||||||
Sharad
|
Sharad
|
||||||
@@ -361,6 +385,7 @@ Shi
|
|||||||
Shinkarovsky
|
Shinkarovsky
|
||||||
Shinya
|
Shinya
|
||||||
Shirakawa
|
Shirakawa
|
||||||
|
Shou
|
||||||
Shuba
|
Shuba
|
||||||
Shunyao
|
Shunyao
|
||||||
Slager
|
Slager
|
||||||
@@ -372,15 +397,18 @@ Solaris
|
|||||||
Solomatnikov
|
Solomatnikov
|
||||||
Solt
|
Solt
|
||||||
Southwell
|
Southwell
|
||||||
|
Spack
|
||||||
Srini
|
Srini
|
||||||
Srinivasan
|
Srinivasan
|
||||||
Stamness
|
Stamness
|
||||||
Stephane
|
Stephane
|
||||||
|
Sterin
|
||||||
Stoddard
|
Stoddard
|
||||||
Stroebel
|
Stroebel
|
||||||
Strouble
|
Strouble
|
||||||
Stucki
|
Stucki
|
||||||
Su
|
Su
|
||||||
|
Subst
|
||||||
Suguimoto
|
Suguimoto
|
||||||
Sundararajan
|
Sundararajan
|
||||||
Sunderland
|
Sunderland
|
||||||
@@ -416,6 +444,7 @@ UNOPTFLAT
|
|||||||
Ubixum
|
Ubixum
|
||||||
Ueno
|
Ueno
|
||||||
Uints
|
Uints
|
||||||
|
Undefine
|
||||||
Undefines
|
Undefines
|
||||||
Unsized
|
Unsized
|
||||||
Urbach
|
Urbach
|
||||||
@@ -458,6 +487,7 @@ Wojciech
|
|||||||
Wolfel
|
Wolfel
|
||||||
Wouters
|
Wouters
|
||||||
Wpedantic
|
Wpedantic
|
||||||
|
Wunused
|
||||||
Wwarn
|
Wwarn
|
||||||
XSim
|
XSim
|
||||||
Xcelium
|
Xcelium
|
||||||
@@ -494,6 +524,7 @@ architected
|
|||||||
args
|
args
|
||||||
arrarys
|
arrarys
|
||||||
assertOn
|
assertOn
|
||||||
|
assertcontrol
|
||||||
astgen
|
astgen
|
||||||
async
|
async
|
||||||
atClone
|
atClone
|
||||||
@@ -510,9 +541,12 @@ basename
|
|||||||
bbox
|
bbox
|
||||||
benchmarking
|
benchmarking
|
||||||
biguint
|
biguint
|
||||||
|
binToOneHot
|
||||||
|
bindir
|
||||||
biops
|
biops
|
||||||
bisonpre
|
bisonpre
|
||||||
bitOpTree
|
bitOpTree
|
||||||
|
bitaggregat
|
||||||
bitop
|
bitop
|
||||||
bitstoreal
|
bitstoreal
|
||||||
blackbox
|
blackbox
|
||||||
@@ -557,7 +591,9 @@ conf
|
|||||||
config
|
config
|
||||||
const
|
const
|
||||||
constexpr
|
constexpr
|
||||||
|
constification
|
||||||
constpool
|
constpool
|
||||||
|
contify
|
||||||
coredump
|
coredump
|
||||||
coroutine
|
coroutine
|
||||||
coroutines
|
coroutines
|
||||||
@@ -579,6 +615,7 @@ datadir
|
|||||||
datafiles
|
datafiles
|
||||||
david
|
david
|
||||||
ddd
|
ddd
|
||||||
|
de
|
||||||
deassign
|
deassign
|
||||||
debugi
|
debugi
|
||||||
defenv
|
defenv
|
||||||
@@ -586,9 +623,12 @@ defname
|
|||||||
defparam
|
defparam
|
||||||
demangling
|
demangling
|
||||||
dep
|
dep
|
||||||
|
deparametrized
|
||||||
der
|
der
|
||||||
dereference
|
dereference
|
||||||
|
dereferenced
|
||||||
desassign
|
desassign
|
||||||
|
deserialize
|
||||||
destructor
|
destructor
|
||||||
desynchronization
|
desynchronization
|
||||||
detections
|
detections
|
||||||
@@ -626,6 +666,7 @@ elike
|
|||||||
elsif
|
elsif
|
||||||
endcase
|
endcase
|
||||||
endcelldefine
|
endcelldefine
|
||||||
|
endclass
|
||||||
endfunction
|
endfunction
|
||||||
endgenerate
|
endgenerate
|
||||||
endian
|
endian
|
||||||
@@ -673,6 +714,7 @@ fno
|
|||||||
fopen
|
fopen
|
||||||
forceable
|
forceable
|
||||||
foreach
|
foreach
|
||||||
|
fourstate
|
||||||
fprintf
|
fprintf
|
||||||
fprofile
|
fprofile
|
||||||
fread
|
fread
|
||||||
@@ -698,6 +740,7 @@ genvar
|
|||||||
genvars
|
genvars
|
||||||
getenv
|
getenv
|
||||||
getline
|
getline
|
||||||
|
getter
|
||||||
ggdb
|
ggdb
|
||||||
glibc
|
glibc
|
||||||
gmake
|
gmake
|
||||||
@@ -711,7 +754,10 @@ hh
|
|||||||
hier
|
hier
|
||||||
hierCMakeArgs
|
hierCMakeArgs
|
||||||
hierMkArgs
|
hierMkArgs
|
||||||
|
hierParameters
|
||||||
hierVer
|
hierVer
|
||||||
|
html
|
||||||
|
https
|
||||||
hx
|
hx
|
||||||
hyperthreading
|
hyperthreading
|
||||||
hyperthreads
|
hyperthreads
|
||||||
@@ -760,6 +806,7 @@ libtcmalloc
|
|||||||
libverilated
|
libverilated
|
||||||
linkers
|
linkers
|
||||||
linter
|
linter
|
||||||
|
linters
|
||||||
linux
|
linux
|
||||||
liu
|
liu
|
||||||
livelock
|
livelock
|
||||||
@@ -809,6 +856,7 @@ multithread
|
|||||||
multithreaded
|
multithreaded
|
||||||
multithreading
|
multithreading
|
||||||
musl
|
musl
|
||||||
|
mutex
|
||||||
mutexes
|
mutexes
|
||||||
mux
|
mux
|
||||||
muzafferkal
|
muzafferkal
|
||||||
@@ -833,15 +881,19 @@ noprivate
|
|||||||
noreturn
|
noreturn
|
||||||
notif
|
notif
|
||||||
nullptr
|
nullptr
|
||||||
|
numactl
|
||||||
onehot
|
onehot
|
||||||
ooo
|
ooo
|
||||||
oprofile
|
oprofile
|
||||||
ortegon
|
ortegon
|
||||||
|
oversized
|
||||||
oversubscription
|
oversubscription
|
||||||
parallelized
|
parallelized
|
||||||
param
|
param
|
||||||
parameterization
|
parameterization
|
||||||
parameterized
|
parameterized
|
||||||
|
parameterized
|
||||||
|
parameterless
|
||||||
params
|
params
|
||||||
parens
|
parens
|
||||||
pawel
|
pawel
|
||||||
@@ -854,6 +906,7 @@ phelter
|
|||||||
picoChip
|
picoChip
|
||||||
pinIndex
|
pinIndex
|
||||||
pinout
|
pinout
|
||||||
|
pkgdatadir
|
||||||
plusargs
|
plusargs
|
||||||
pmos
|
pmos
|
||||||
poping
|
poping
|
||||||
@@ -870,9 +923,11 @@ pre
|
|||||||
precisions
|
precisions
|
||||||
precompiled
|
precompiled
|
||||||
predefines
|
predefines
|
||||||
|
prefetch
|
||||||
prepareClone
|
prepareClone
|
||||||
prepend
|
prepend
|
||||||
prepended
|
prepended
|
||||||
|
preproc
|
||||||
preprocess
|
preprocess
|
||||||
preprocessed
|
preprocessed
|
||||||
preprocessing
|
preprocessing
|
||||||
@@ -885,7 +940,9 @@ profcfunc
|
|||||||
profiler
|
profiler
|
||||||
prototyptes
|
prototyptes
|
||||||
ps
|
ps
|
||||||
|
psprintf
|
||||||
pthread
|
pthread
|
||||||
|
pthreads
|
||||||
ptr
|
ptr
|
||||||
pulldown
|
pulldown
|
||||||
pulldowns
|
pulldowns
|
||||||
@@ -916,6 +973,7 @@ redeclaring
|
|||||||
regs
|
regs
|
||||||
reloop
|
reloop
|
||||||
replaceShiftOp
|
replaceShiftOp
|
||||||
|
reproducibility
|
||||||
resetall
|
resetall
|
||||||
respecified
|
respecified
|
||||||
rodata
|
rodata
|
||||||
@@ -926,6 +984,8 @@ runtime
|
|||||||
runtimes
|
runtimes
|
||||||
rw
|
rw
|
||||||
sVerilator
|
sVerilator
|
||||||
|
saif
|
||||||
|
sarif
|
||||||
sawatzke
|
sawatzke
|
||||||
sc
|
sc
|
||||||
scalared
|
scalared
|
||||||
@@ -968,6 +1028,9 @@ submakes
|
|||||||
submodule
|
submodule
|
||||||
submodules
|
submodules
|
||||||
substring
|
substring
|
||||||
|
superclass
|
||||||
|
suspendable
|
||||||
|
suspendables
|
||||||
sv
|
sv
|
||||||
svBitVal
|
svBitVal
|
||||||
svBitVecVal
|
svBitVecVal
|
||||||
@@ -978,8 +1041,11 @@ svLogicVal
|
|||||||
svdpi
|
svdpi
|
||||||
svgGetTimeUnit
|
svgGetTimeUnit
|
||||||
swrite
|
swrite
|
||||||
|
synthesizeable
|
||||||
sys
|
sys
|
||||||
systemc
|
systemc
|
||||||
|
taskify
|
||||||
|
tcmalloc
|
||||||
tenghtt
|
tenghtt
|
||||||
testbench
|
testbench
|
||||||
threadsafe
|
threadsafe
|
||||||
@@ -996,10 +1062,13 @@ toolchain
|
|||||||
topcell
|
topcell
|
||||||
toplevel
|
toplevel
|
||||||
toupper
|
toupper
|
||||||
|
traceCapable
|
||||||
traceEverOn
|
traceEverOn
|
||||||
tran
|
tran
|
||||||
treei
|
treei
|
||||||
tri
|
tri
|
||||||
|
triand
|
||||||
|
trior
|
||||||
tristate
|
tristate
|
||||||
tristates
|
tristates
|
||||||
trunc
|
trunc
|
||||||
@@ -1013,6 +1082,7 @@ typename
|
|||||||
uint
|
uint
|
||||||
un
|
un
|
||||||
unbased
|
unbased
|
||||||
|
uncomment
|
||||||
undef
|
undef
|
||||||
undefineall
|
undefineall
|
||||||
undriven
|
undriven
|
||||||
@@ -1052,7 +1122,9 @@ verilator
|
|||||||
verilog
|
verilog
|
||||||
verilogmod
|
verilogmod
|
||||||
verimake
|
verimake
|
||||||
|
veriuser
|
||||||
vl
|
vl
|
||||||
|
vlSelf
|
||||||
vlopt
|
vlopt
|
||||||
vlt
|
vlt
|
||||||
vltstd
|
vltstd
|
||||||
@@ -1060,6 +1132,7 @@ vluint
|
|||||||
vpi
|
vpi
|
||||||
vpiConstType
|
vpiConstType
|
||||||
vpiDefName
|
vpiDefName
|
||||||
|
vpiInertialDelay
|
||||||
vpiInstance
|
vpiInstance
|
||||||
vpiLeftRange
|
vpiLeftRange
|
||||||
vpiModule
|
vpiModule
|
||||||
@@ -1071,9 +1144,11 @@ vpiUndefined
|
|||||||
vpm
|
vpm
|
||||||
vpp
|
vpp
|
||||||
warmup
|
warmup
|
||||||
|
wavealloca
|
||||||
waveforms
|
waveforms
|
||||||
whitespace
|
whitespace
|
||||||
widthed
|
widthed
|
||||||
|
wor
|
||||||
wreal
|
wreal
|
||||||
writeb
|
writeb
|
||||||
writeme
|
writeme
|
||||||
|
|||||||
+1
-1
@@ -70,7 +70,7 @@ The XML document consists of 4 sections within the top level
|
|||||||
Distribution
|
Distribution
|
||||||
============
|
============
|
||||||
|
|
||||||
Copyright 2020-2024 by Wilson Snyder. Verilator is free software; you can
|
Copyright 2020-2025 by Wilson Snyder. Verilator is free software; you can
|
||||||
redistribute it and/or modify it under the terms of either the GNU Lesser
|
redistribute it and/or modify it under the terms of either the GNU Lesser
|
||||||
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
|
|
||||||
|
|||||||
@@ -24,8 +24,11 @@ cmake_policy(SET CMP0074 NEW)
|
|||||||
project(cmake_hello_c)
|
project(cmake_hello_c)
|
||||||
|
|
||||||
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
|
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
|
||||||
if (NOT verilator_FOUND)
|
if(NOT verilator_FOUND)
|
||||||
message(FATAL_ERROR "Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable")
|
message(
|
||||||
|
FATAL_ERROR
|
||||||
|
"Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable"
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Create a new executable target that will contain all your sources
|
# Create a new executable target that will contain all your sources
|
||||||
@@ -35,4 +38,5 @@ target_compile_features(example PUBLIC cxx_std_14)
|
|||||||
# Add the Verilated circuit to the target
|
# Add the Verilated circuit to the target
|
||||||
verilate(example
|
verilate(example
|
||||||
INCLUDE_DIRS "../make_hello_c"
|
INCLUDE_DIRS "../make_hello_c"
|
||||||
SOURCES ../make_hello_c/top.v)
|
SOURCES ../make_hello_c/top.v
|
||||||
|
)
|
||||||
|
|||||||
@@ -20,26 +20,28 @@
|
|||||||
# binary relative to $VERILATOR_ROOT (such as when inside the git sources).
|
# binary relative to $VERILATOR_ROOT (such as when inside the git sources).
|
||||||
|
|
||||||
ifeq ($(VERILATOR_ROOT),)
|
ifeq ($(VERILATOR_ROOT),)
|
||||||
VERILATOR_COVERAGE = verilator_coverage
|
VERILATOR = verilator
|
||||||
|
VERILATOR_COVERAGE = verilator_coverage
|
||||||
else
|
else
|
||||||
export VERILATOR_ROOT
|
export VERILATOR_ROOT
|
||||||
VERILATOR_COVERAGE = $(VERILATOR_ROOT)/bin/verilator_coverage
|
VERILATOR = $(VERILATOR_ROOT)/bin/verilator
|
||||||
|
VERILATOR_COVERAGE = $(VERILATOR_ROOT)/bin/verilator_coverage
|
||||||
endif
|
endif
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
# Check if CMake is installed and of correct version
|
# Check if CMake is installed and of correct version
|
||||||
ifeq ($(shell which cmake),)
|
ifeq ($(shell which cmake),)
|
||||||
TARGET := nocmake
|
TARGET := nocmake
|
||||||
else
|
else
|
||||||
CMAKE_VERSION := $(shell cmake --version | grep -o '[0-9][.0-9]\+')
|
CMAKE_VERSION := $(shell cmake --version | grep -o '[0-9][.0-9]\+')
|
||||||
CMAKE_MAJOR := $(shell echo $(CMAKE_VERSION) | cut -f1 -d.)
|
CMAKE_MAJOR := $(shell echo $(CMAKE_VERSION) | cut -f1 -d.)
|
||||||
CMAKE_MINOR := $(shell echo $(CMAKE_VERSION) | cut -f2 -d.)
|
CMAKE_MINOR := $(shell echo $(CMAKE_VERSION) | cut -f2 -d.)
|
||||||
CMAKE_GT_3_8 := $(shell [ $(CMAKE_MAJOR) -gt 3 -o \( $(CMAKE_MAJOR) -eq 3 -a $(CMAKE_MINOR) -ge 8 \) ] && echo true)
|
CMAKE_GT_3_8 := $(shell [ $(CMAKE_MAJOR) -gt 3 -o \( $(CMAKE_MAJOR) -eq 3 -a $(CMAKE_MINOR) -ge 8 \) ] && echo true)
|
||||||
ifeq ($(CMAKE_GT_3_8),true)
|
ifeq ($(CMAKE_GT_3_8),true)
|
||||||
TARGET := run
|
TARGET := run
|
||||||
else
|
else
|
||||||
TARGET := oldcmake
|
TARGET := oldcmake
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
default: $(TARGET)
|
default: $(TARGET)
|
||||||
|
|||||||
@@ -24,8 +24,11 @@ cmake_policy(SET CMP0074 NEW)
|
|||||||
project(cmake_hello_sc CXX)
|
project(cmake_hello_sc CXX)
|
||||||
|
|
||||||
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
|
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
|
||||||
if (NOT verilator_FOUND)
|
if(NOT verilator_FOUND)
|
||||||
message(FATAL_ERROR "Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable")
|
message(
|
||||||
|
FATAL_ERROR
|
||||||
|
"Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable"
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# SystemC dependencies
|
# SystemC dependencies
|
||||||
@@ -39,14 +42,12 @@ find_package(SystemCLanguage QUIET)
|
|||||||
add_executable(example ../make_hello_sc/sc_main.cpp)
|
add_executable(example ../make_hello_sc/sc_main.cpp)
|
||||||
target_compile_features(example PUBLIC cxx_std_14)
|
target_compile_features(example PUBLIC cxx_std_14)
|
||||||
|
|
||||||
set_property(
|
set_property(TARGET example PROPERTY CXX_STANDARD ${SystemC_CXX_STANDARD})
|
||||||
TARGET example
|
|
||||||
PROPERTY CXX_STANDARD ${SystemC_CXX_STANDARD}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Add the Verilated circuit to the target
|
# Add the Verilated circuit to the target
|
||||||
verilate(example SYSTEMC
|
verilate(example SYSTEMC
|
||||||
INCLUDE_DIRS "../make_hello_sc"
|
INCLUDE_DIRS "../make_hello_sc"
|
||||||
SOURCES ../make_hello_sc/top.v)
|
SOURCES ../make_hello_sc/top.v
|
||||||
|
)
|
||||||
|
|
||||||
verilator_link_systemc(example)
|
verilator_link_systemc(example)
|
||||||
|
|||||||
@@ -20,44 +20,44 @@
|
|||||||
# binary relative to $VERILATOR_ROOT (such as when inside the git sources).
|
# binary relative to $VERILATOR_ROOT (such as when inside the git sources).
|
||||||
|
|
||||||
ifeq ($(VERILATOR_ROOT),)
|
ifeq ($(VERILATOR_ROOT),)
|
||||||
VERILATOR_COVERAGE = verilator_coverage
|
VERILATOR = verilator
|
||||||
|
VERILATOR_COVERAGE = verilator_coverage
|
||||||
else
|
else
|
||||||
export VERILATOR_ROOT
|
export VERILATOR_ROOT
|
||||||
VERILATOR_COVERAGE = $(VERILATOR_ROOT)/bin/verilator_coverage
|
VERILATOR = $(VERILATOR_ROOT)/bin/verilator
|
||||||
|
VERILATOR_COVERAGE = $(VERILATOR_ROOT)/bin/verilator_coverage
|
||||||
endif
|
endif
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
# Check if CMake is installed and of correct version
|
# Check if CMake is installed and of correct version
|
||||||
ifeq ($(shell which cmake),)
|
ifeq ($(shell which cmake),)
|
||||||
TARGET := nocmake
|
TARGET := nocmake
|
||||||
else
|
|
||||||
CMAKE_VERSION := $(shell cmake --version | grep -o '[0-9][.0-9]\+')
|
|
||||||
CMAKE_MAJOR := $(shell echo $(CMAKE_VERSION) | cut -f1 -d.)
|
|
||||||
CMAKE_MINOR := $(shell echo $(CMAKE_VERSION) | cut -f2 -d.)
|
|
||||||
CMAKE_GT_3_8 := $(shell [ $(CMAKE_MAJOR) -gt 3 -o \( $(CMAKE_MAJOR) -eq 3 -a $(CMAKE_MINOR) -ge 8 \) ] && echo true)
|
|
||||||
ifneq ($(CMAKE_GT_3_8),true)
|
|
||||||
TARGET := oldcmake
|
|
||||||
else
|
else
|
||||||
|
CMAKE_VERSION := $(shell cmake --version | grep -o '[0-9][.0-9]\+')
|
||||||
|
CMAKE_MAJOR := $(shell echo $(CMAKE_VERSION) | cut -f1 -d.)
|
||||||
|
CMAKE_MINOR := $(shell echo $(CMAKE_VERSION) | cut -f2 -d.)
|
||||||
|
CMAKE_GT_3_8 := $(shell [ $(CMAKE_MAJOR) -gt 3 -o \( $(CMAKE_MAJOR) -eq 3 -a $(CMAKE_MINOR) -ge 8 \) ] && echo true)
|
||||||
|
ifneq ($(CMAKE_GT_3_8),true)
|
||||||
|
TARGET := oldcmake
|
||||||
|
else
|
||||||
|
# Check if SC exists via a verilator call (empty if not)
|
||||||
|
SYSTEMC_EXISTS := $(shell $(VERILATOR) --get-supported SYSTEMC)
|
||||||
|
|
||||||
# Check if SC exists via a verilator call (empty if not)
|
# Test whether SystemC is installed with CMake support
|
||||||
SYSTEMC_EXISTS := $(shell $(VERILATOR) --get-supported SYSTEMC)
|
# This will print a CMake error about processing arguments that can (currently) be ignored.
|
||||||
|
ifneq (,$(SYSTEMC_EXISTS))
|
||||||
|
FINDSC := $(shell mkdir -p build && cd build && cmake --find-package -DNAME=SystemCLanguage -DCMAKE_USE_PTHREADS_INIT=ON -DCOMPILER_ID=GNU -DLANGUAGE=CXX -DMODE=EXIST -DThreads_FOUND=ON)
|
||||||
|
ifneq (,$(findstring SystemCLanguage found,$(FINDSC)))
|
||||||
|
SYSTEMC_SET := true
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
# Test whether SystemC is installed with CMake support
|
ifeq ($(SYSTEMC_SET), true)
|
||||||
# This will print a CMake error about processing arguments that can (currently) be ignored.
|
TARGET := run
|
||||||
ifneq (,$(SYSTEMC_EXISTS))
|
else
|
||||||
FINDSC := $(shell mkdir -p build && cd build && cmake --find-package -DNAME=SystemCLanguage -DCMAKE_USE_PTHREADS_INIT=ON -DCOMPILER_ID=GNU -DLANGUAGE=CXX -DMODE=EXIST -DThreads_FOUND=ON)
|
TARGET := nosc
|
||||||
ifneq (,$(findstring SystemCLanguage found,$(FINDSC)))
|
endif
|
||||||
SYSTEMC_SET := true
|
endif
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(SYSTEMC_SET), true)
|
|
||||||
TARGET := run
|
|
||||||
else
|
|
||||||
TARGET := nosc
|
|
||||||
endif
|
|
||||||
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
default: $(TARGET)
|
default: $(TARGET)
|
||||||
|
|||||||
@@ -24,8 +24,11 @@ cmake_policy(SET CMP0074 NEW)
|
|||||||
project(cmake_protect_lib)
|
project(cmake_protect_lib)
|
||||||
|
|
||||||
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
|
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
|
||||||
if (NOT verilator_FOUND)
|
if(NOT verilator_FOUND)
|
||||||
message(FATAL_ERROR "Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable")
|
message(
|
||||||
|
FATAL_ERROR
|
||||||
|
"Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable"
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Create the main executable target
|
# Create the main executable target
|
||||||
@@ -55,9 +58,11 @@ verilate(verilated_secret
|
|||||||
VERILATOR_ARGS --protect-lib verilated_secret
|
VERILATOR_ARGS --protect-lib verilated_secret
|
||||||
--protect-key ${PROTECT_KEY}
|
--protect-key ${PROTECT_KEY}
|
||||||
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/verilated_secret
|
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/verilated_secret
|
||||||
SOURCES ../make_protect_lib/secret_impl.v)
|
SOURCES ../make_protect_lib/secret_impl.v
|
||||||
|
)
|
||||||
|
|
||||||
# Include location of verilated_secret.sv wrapper
|
# Include location of verilated_secret.sv wrapper
|
||||||
verilate(example
|
verilate(example
|
||||||
VERILATOR_ARGS "-I${CMAKE_CURRENT_BINARY_DIR}/verilated_secret"
|
VERILATOR_ARGS "-I${CMAKE_CURRENT_BINARY_DIR}/verilated_secret"
|
||||||
SOURCES ../make_protect_lib/top.v)
|
SOURCES ../make_protect_lib/top.v
|
||||||
|
)
|
||||||
|
|||||||
@@ -20,26 +20,28 @@
|
|||||||
# binary relative to $VERILATOR_ROOT (such as when inside the git sources).
|
# binary relative to $VERILATOR_ROOT (such as when inside the git sources).
|
||||||
|
|
||||||
ifeq ($(VERILATOR_ROOT),)
|
ifeq ($(VERILATOR_ROOT),)
|
||||||
VERILATOR_COVERAGE = verilator_coverage
|
VERILATOR = verilator
|
||||||
|
VERILATOR_COVERAGE = verilator_coverage
|
||||||
else
|
else
|
||||||
export VERILATOR_ROOT
|
export VERILATOR_ROOT
|
||||||
VERILATOR_COVERAGE = $(VERILATOR_ROOT)/bin/verilator_coverage
|
VERILATOR = $(VERILATOR_ROOT)/bin/verilator
|
||||||
|
VERILATOR_COVERAGE = $(VERILATOR_ROOT)/bin/verilator_coverage
|
||||||
endif
|
endif
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
# Check if CMake is installed and of correct version
|
# Check if CMake is installed and of correct version
|
||||||
ifeq ($(shell which cmake),)
|
ifeq ($(shell which cmake),)
|
||||||
TARGET := nocmake
|
TARGET := nocmake
|
||||||
else
|
else
|
||||||
CMAKE_VERSION := $(shell cmake --version | grep -o '[0-9][.0-9]\+')
|
CMAKE_VERSION := $(shell cmake --version | grep -o '[0-9][.0-9]\+')
|
||||||
CMAKE_MAJOR := $(shell echo $(CMAKE_VERSION) | cut -f1 -d.)
|
CMAKE_MAJOR := $(shell echo $(CMAKE_VERSION) | cut -f1 -d.)
|
||||||
CMAKE_MINOR := $(shell echo $(CMAKE_VERSION) | cut -f2 -d.)
|
CMAKE_MINOR := $(shell echo $(CMAKE_VERSION) | cut -f2 -d.)
|
||||||
CMAKE_GT_3_8 := $(shell [ $(CMAKE_MAJOR) -gt 3 -o \( $(CMAKE_MAJOR) -eq 3 -a $(CMAKE_MINOR) -ge 8 \) ] && echo true)
|
CMAKE_GT_3_8 := $(shell [ $(CMAKE_MAJOR) -gt 3 -o \( $(CMAKE_MAJOR) -eq 3 -a $(CMAKE_MINOR) -ge 8 \) ] && echo true)
|
||||||
ifeq ($(CMAKE_GT_3_8),true)
|
ifeq ($(CMAKE_GT_3_8),true)
|
||||||
TARGET := run
|
TARGET := run
|
||||||
else
|
else
|
||||||
TARGET := oldcmake
|
TARGET := oldcmake
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
default: $(TARGET)
|
default: $(TARGET)
|
||||||
|
|||||||
@@ -24,8 +24,11 @@ cmake_policy(SET CMP0074 NEW)
|
|||||||
project(cmake_tracing_c)
|
project(cmake_tracing_c)
|
||||||
|
|
||||||
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
|
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
|
||||||
if (NOT verilator_FOUND)
|
if(NOT verilator_FOUND)
|
||||||
message(FATAL_ERROR "Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable")
|
message(
|
||||||
|
FATAL_ERROR
|
||||||
|
"Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable"
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Create a new executable target that will contain all your sources
|
# Create a new executable target that will contain all your sources
|
||||||
@@ -33,7 +36,8 @@ add_executable(example ../make_tracing_c/sim_main.cpp)
|
|||||||
target_compile_features(example PUBLIC cxx_std_14)
|
target_compile_features(example PUBLIC cxx_std_14)
|
||||||
|
|
||||||
# Add the Verilated circuit to the target
|
# Add the Verilated circuit to the target
|
||||||
verilate(example COVERAGE TRACE
|
verilate(example COVERAGE TRACE_VCD
|
||||||
INCLUDE_DIRS "../make_tracing_c"
|
INCLUDE_DIRS "../make_tracing_c"
|
||||||
VERILATOR_ARGS -f ../make_tracing_c/input.vc -x-assign fast
|
VERILATOR_ARGS -f ../make_tracing_c/input.vc -x-assign fast
|
||||||
SOURCES ../make_tracing_c/top.v)
|
SOURCES ../make_tracing_c/top.v
|
||||||
|
)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user