mirror of
https://github.com/verilator/verilator.git
synced 2026-10-06 01:54:01 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
51cdf52d0f | ||
|
|
6a14facf48 | ||
|
|
7bb38d21b9 | ||
|
|
ca2c40347b | ||
|
|
b0044da8a7 | ||
|
|
3770273637 | ||
|
|
c33f2b42aa | ||
|
|
14ec6258d9 | ||
|
|
b6ecffeb60 | ||
|
|
712ff95a48 | ||
|
|
fbfd1f12dd | ||
|
|
40dda323fe | ||
|
|
91ae4c35b7 | ||
|
|
a3d7b7d779 | ||
|
|
91d138248d | ||
|
|
8868d459a2 | ||
|
|
1043a6c6be | ||
|
|
409e036eca | ||
|
|
e32108713d | ||
|
|
54efa86a6c | ||
|
|
ac21d25d43 | ||
|
|
a841a962ce | ||
|
|
5f23bf95f6 | ||
|
|
ac2859bf24 | ||
|
|
703f0d8c5d | ||
|
|
3d76bb9944 | ||
|
|
02e64f0795 | ||
|
|
c2cac8a7fd | ||
|
|
ac2a75fbb5 | ||
|
|
7affb3e580 | ||
|
|
b226be7f98 | ||
|
|
f45b811c22 | ||
|
|
ee1ab074dc | ||
|
|
a9aa2f11b8 | ||
|
|
353a2e3d20 | ||
|
|
34315a4f70 | ||
|
|
d56d1a7719 | ||
|
|
1c86ff0af2 | ||
|
|
f506aa878b | ||
|
|
b95a974ff1 | ||
|
|
b19215770b | ||
|
|
457fcc267b | ||
|
|
e202cb31d8 | ||
|
|
b96f35b8fe | ||
|
|
997d5ecdf1 | ||
|
|
631714c50a | ||
|
|
327d55d13d | ||
|
|
bd91b619ad | ||
|
|
dc5a17fea0 | ||
|
|
254eb407ff | ||
|
|
92d47ca23a | ||
|
|
67da797816 | ||
|
|
3d3462b209 | ||
|
|
11667160f2 | ||
|
|
95c8b7bb00 | ||
|
|
9b2f55ab39 | ||
|
|
f71b8e6195 | ||
|
|
d1f71f2342 | ||
|
|
a0edd4e907 | ||
|
|
636a6b8cd2 | ||
|
|
6a67c0a0e5 | ||
|
|
6b9cc8a36e | ||
|
|
0bf9fc270f | ||
|
|
c9a6d06544 | ||
|
|
c90f9e53b7 | ||
|
|
53c59e7ac7 | ||
|
|
9dc31e4556 | ||
|
|
c172cc2ab0 | ||
|
|
25d71a43a5 | ||
|
|
88046c8063 | ||
|
|
dbdf235115 | ||
|
|
eaecdf7477 | ||
|
|
f6edf26eb2 | ||
|
|
b14539569f | ||
|
|
7126293086 | ||
|
|
36c4a24661 | ||
|
|
49ca1cfdd7 | ||
|
|
48a12fb0f4 | ||
|
|
340d1aff4a | ||
|
|
000d697b51 | ||
|
|
a300bfc538 | ||
|
|
6f69c990fd | ||
|
|
d273e2cbd0 | ||
|
|
ece4469869 | ||
|
|
9c11f5e05d | ||
|
|
e753480b19 | ||
|
|
047a12cc62 | ||
|
|
75c6745868 | ||
|
|
60cbbf0ec1 | ||
|
|
762c5f573c | ||
|
|
7696b0651c | ||
|
|
e6e52dd60a | ||
|
|
eb80db9397 | ||
|
|
641dd756c0 | ||
|
|
a74a3bb689 | ||
|
|
d28436dccc | ||
|
|
3ca1c9b6dd | ||
|
|
1eccfa64b5 | ||
|
|
1d05028087 | ||
|
|
16d32cdd4a | ||
|
|
d1f851e1e1 | ||
|
|
6a225d5d00 | ||
|
|
b12b1c9658 | ||
|
|
dbb8cbece2 | ||
|
|
9ddbf5f4b8 | ||
|
|
b2388faa5e | ||
|
|
188a12f609 | ||
|
|
6bd6663dc9 | ||
|
|
5b7188fcaf | ||
|
|
dc049fdd74 | ||
|
|
218659f4e8 | ||
|
|
6c1cfc68cf | ||
|
|
fbaff52668 | ||
|
|
06c570e159 | ||
|
|
c005486acf | ||
|
|
6467351752 | ||
|
|
4bd17f0a6f | ||
|
|
870c398094 | ||
|
|
86c56e8e14 | ||
|
|
25d968b833 | ||
|
|
2c41a7bbf6 | ||
|
|
158a54a7ff | ||
|
|
8c9a4fec83 | ||
|
|
53332ae03e | ||
|
|
4a5935d248 | ||
|
|
78c9e7773a | ||
|
|
d2edab458e | ||
|
|
d415757b0e | ||
|
|
7d2b6bd921 | ||
|
|
52ac3b3a0d | ||
|
|
f106c1eaec | ||
|
|
309129ebcf | ||
|
|
deed20fb78 | ||
|
|
36577bb549 | ||
|
|
de9671d4a3 | ||
|
|
12355270b3 | ||
|
|
473d54aa95 | ||
|
|
dca504c706 | ||
|
|
7bb790f7e4 | ||
|
|
f9bdab65f0 | ||
|
|
61f4c97f40 | ||
|
|
d0f0919830 | ||
|
|
bd1ac03828 | ||
|
|
00948a45a3 | ||
|
|
5faaa7ec58 | ||
|
|
d8f1e1113a | ||
|
|
9d38e63269 | ||
|
|
9d2adf3e49 | ||
|
|
2b62f5a625 | ||
|
|
0da9f6eb03 | ||
|
|
2ff6ee9613 | ||
|
|
833c31b031 | ||
|
|
a5b0a0d9dd | ||
|
|
0bd291e6cd | ||
|
|
5c1d7f3ce9 | ||
|
|
e69df457fd | ||
|
|
47c5b220b3 | ||
|
|
64a82508f2 | ||
|
|
7c71bdf2d6 | ||
|
|
bd2cb989d1 | ||
|
|
92a4bff047 | ||
|
|
d359fffcdc | ||
|
|
55b836e25a | ||
|
|
c4b3f1e99c | ||
|
|
895b85a16e | ||
|
|
1725ee9c52 | ||
|
|
d93abd002f | ||
|
|
470f99694e | ||
|
|
f3560837ec | ||
|
|
d8dbb08a95 | ||
|
|
c2e0f496bd | ||
|
|
39a5c731ac | ||
|
|
42e1c83875 | ||
|
|
504884b7d5 | ||
|
|
94ef630490 | ||
|
|
d289934ca9 | ||
|
|
20bd80698d | ||
|
|
f1826a7c20 | ||
|
|
fa62cd3486 | ||
|
|
10ac99ac05 | ||
|
|
b408e097f6 | ||
|
|
94bebb2bcb | ||
|
|
2be257369a | ||
|
|
04c38d5b3b | ||
|
|
4882a3c827 | ||
|
|
e995646898 | ||
|
|
2287d420ee | ||
|
|
db5b2669fc | ||
|
|
460bfbf181 | ||
|
|
050e5ddb5b | ||
|
|
393f0e4acb | ||
|
|
7c5d462564 | ||
|
|
763183f067 | ||
|
|
2958a5aaae | ||
|
|
344fabf56a | ||
|
|
9f04ee68c8 | ||
|
|
b5126a6abe | ||
|
|
74d4b0c0ea | ||
|
|
7401a8a43a | ||
|
|
7646e7d89c | ||
|
|
a8dca71ed0 | ||
|
|
98b8d43a4a | ||
|
|
d419c49921 | ||
|
|
a50ea2a1a6 | ||
|
|
078bb21a89 | ||
|
|
b8b9478938 | ||
|
|
f535a73ea7 | ||
|
|
641e0e5672 | ||
|
|
9d146eae16 | ||
|
|
7d43a935bd | ||
|
|
9b99d9697f | ||
|
|
a21ecb2ab9 | ||
|
|
28808f38bb | ||
|
|
7a6775ca84 | ||
|
|
e527ff49a3 | ||
|
|
c1506deef9 | ||
|
|
87050670b4 | ||
|
|
fb1373b854 | ||
|
|
7f1011e5f7 | ||
|
|
7a32771c7e | ||
|
|
94b043d6c9 | ||
|
|
8c5ba3a0d7 | ||
|
|
826e5b0826 | ||
|
|
abd509ce53 | ||
|
|
1bf24c7eb4 | ||
|
|
1f0357ba93 | ||
|
|
db6b17fdb4 | ||
|
|
f3e109d8c5 | ||
|
|
371ac07c6f | ||
|
|
caf3522364 | ||
|
|
03e0d49d99 | ||
|
|
e2e5d9eaf1 | ||
|
|
2f199f20cf | ||
|
|
cefe1845df | ||
|
|
1044398f95 | ||
|
|
77180c4020 | ||
|
|
2fc12d951e | ||
|
|
0982260d3b | ||
|
|
58b867c39c | ||
|
|
4e8a8a0398 | ||
|
|
4dc6a31276 | ||
|
|
ce77bac99a | ||
|
|
31c279a7b3 | ||
|
|
9ad0de1efd | ||
|
|
d89df33fcd | ||
|
|
d1462f3120 | ||
|
|
9fc7143fce | ||
|
|
597b973f7b | ||
|
|
a84c5d2010 | ||
|
|
dbfbc657e1 | ||
|
|
8b3a6ba542 | ||
|
|
8ba7cec15b | ||
|
|
f037ac50b4 | ||
|
|
1f0e767b61 | ||
|
|
5777ab75c7 | ||
|
|
e494cf22a4 | ||
|
|
5a6d5ed96b | ||
|
|
26c7f1adb6 | ||
|
|
f77af4e6f6 | ||
|
|
1cd65e90bd | ||
|
|
e3c7dee6ef | ||
|
|
6c9cbaef62 | ||
|
|
08fef668cd | ||
|
|
92970bd9a0 | ||
|
|
e0c3b42262 | ||
|
|
4ddc649836 | ||
|
|
77908447e6 | ||
|
|
bb41c6b26b | ||
|
|
ae0f29ed37 | ||
|
|
73ca2ab997 | ||
|
|
7a3f1f16ca | ||
|
|
e015805194 | ||
|
|
73da5e51a6 | ||
|
|
9598ef9315 | ||
|
|
cd0f35fe67 | ||
|
|
d455ec6229 | ||
|
|
db854fc3d2 | ||
|
|
b27bd6526a | ||
|
|
916a89761e | ||
|
|
c3d86626ee | ||
|
|
5d32fc56ac | ||
|
|
93f447dd4a | ||
|
|
bc892deacc | ||
|
|
b914cda1c7 | ||
|
|
62e5e3aa0c | ||
|
|
f508dadc97 | ||
|
|
189d094202 | ||
|
|
3defaf8ffb | ||
|
|
73696f0a71 | ||
|
|
17c2512d03 | ||
|
|
75229cc03d | ||
|
|
e422c183ff | ||
|
|
68e1ed55f6 | ||
|
|
993f65f3b4 | ||
|
|
2c5e9a785a | ||
|
|
d183b4edde | ||
|
|
818e6d3ebf | ||
|
|
2df0390c04 | ||
|
|
6cd0948c8c | ||
|
|
3209bee3b3 | ||
|
|
88d0d85ca6 | ||
|
|
51545b36ca | ||
|
|
6af694b04b | ||
|
|
f9f70383fa | ||
|
|
916d473eff | ||
|
|
a9e9ab50bd | ||
|
|
544cb4a90f | ||
|
|
11998ccc58 | ||
|
|
2daa09a255 | ||
|
|
d35e4a2b60 | ||
|
|
c0b505849c | ||
|
|
49fe129634 | ||
|
|
75df36bc8f | ||
|
|
48600c77b5 | ||
|
|
5b410e9331 | ||
|
|
277611bcdd | ||
|
|
de2818c733 | ||
|
|
832629c602 | ||
|
|
5e5b5ab69d | ||
|
|
173e9d2a94 | ||
|
|
4c2eb8c0b8 | ||
|
|
d059806dbd | ||
|
|
bca2e2c16e | ||
|
|
47f5a6a52b | ||
|
|
206a0b4fd2 | ||
|
|
dc307270f7 | ||
|
|
4990b44120 | ||
|
|
4925f9ad73 | ||
|
|
ac06b6fc4f | ||
|
|
58ea7ad361 | ||
|
|
75a36a6ef8 | ||
|
|
b553502d8a | ||
|
|
1c357ba508 | ||
|
|
86d2ea8c70 | ||
|
|
07394fcafa | ||
|
|
d9534ec626 | ||
|
|
a6bae7f196 | ||
|
|
5b2dc52681 | ||
|
|
a044697990 | ||
|
|
54e637c72b | ||
|
|
db03b95389 | ||
|
|
d49efa79df | ||
|
|
9fc223d3ee | ||
|
|
1a3fd92063 | ||
|
|
ed46878f7b | ||
|
|
593da4e38f | ||
|
|
cfbcfd913c | ||
|
|
79de1ff507 | ||
|
|
8a8f04153a | ||
|
|
8031ca2616 | ||
|
|
40881d7e79 | ||
|
|
b0d1f720e0 | ||
|
|
7dbe4f1807 | ||
|
|
5fcd0e52e7 | ||
|
|
76aced4d40 | ||
|
|
66259d8909 | ||
|
|
4b041c636f | ||
|
|
e84fe36518 | ||
|
|
9cc4cc0efd | ||
|
|
c9fa54536e | ||
|
|
22d484d54d | ||
|
|
90d4cf1361 | ||
|
|
7c427d4cc3 | ||
|
|
46c7b69c64 | ||
|
|
091be59f0d | ||
|
|
af30436357 | ||
|
|
7b2dc46399 | ||
|
|
2491f25da7 | ||
|
|
d400584460 | ||
|
|
de08655c5b | ||
|
|
f8359adcc0 | ||
|
|
a227aad13d | ||
|
|
80ea173390 | ||
|
|
6d257ef52c | ||
|
|
25cb31c38b | ||
|
|
bed0456eca | ||
|
|
ad08302e5f | ||
|
|
f74c67da46 | ||
|
|
27eb8cfe8a | ||
|
|
b26658fd96 | ||
|
|
0c8c7fb03c | ||
|
|
6bb16d6c52 | ||
|
|
2c465d9741 | ||
|
|
19be36dbcb | ||
|
|
3b632739a8 | ||
|
|
640339ec36 | ||
|
|
647404ec1e | ||
|
|
338a456f09 | ||
|
|
66667b6172 | ||
|
|
7a5c223ccf | ||
|
|
2dbe897e1b | ||
|
|
fc700538a5 | ||
|
|
8d3b47a18a | ||
|
|
1bcd5ee0c1 | ||
|
|
9430960b18 | ||
|
|
4581023805 | ||
|
|
73b3648262 | ||
|
|
6b42d789af | ||
|
|
6db599da45 | ||
|
|
2f6ecd1853 | ||
|
|
4c4fdb5dfe | ||
|
|
3dfd53a549 | ||
|
|
91c52a4972 | ||
|
|
ac2313ecb7 | ||
|
|
8100bc64a0 | ||
|
|
aee5051526 | ||
|
|
0162e15b6e | ||
|
|
295fae0edc | ||
|
|
fe4ad7de64 | ||
|
|
680236b03e | ||
|
|
0f528d136d | ||
|
|
d9dcde60a6 | ||
|
|
d0424862f9 | ||
|
|
100e3d7702 | ||
|
|
d22608a49f | ||
|
|
5d0fd8b9a7 | ||
|
|
7191a0ba8b | ||
|
|
c2d289dc71 | ||
|
|
5f4646f617 | ||
|
|
a80aa07de6 | ||
|
|
2358f5c2a2 | ||
|
|
bc3bf6ab5e | ||
|
|
b099d6fe63 | ||
|
|
d5f773f385 | ||
|
|
da5eb620bf | ||
|
|
2ed754d5ea | ||
|
|
fe562d4715 | ||
|
|
49e5c305a4 | ||
|
|
69eb76ad66 | ||
|
|
a3662cc3f5 | ||
|
|
1e74451534 | ||
|
|
66e105b444 | ||
|
|
413183bad8 | ||
|
|
11cfa61f80 | ||
|
|
27ad648c16 | ||
|
|
d47b88a30c | ||
|
|
51616ecf2f | ||
|
|
01e66ac349 | ||
|
|
223bb9ba9a | ||
|
|
70c84d3abd | ||
|
|
ea65bcd86b | ||
|
|
e837f780a2 | ||
|
|
1a1c6e8797 | ||
|
|
15ebbd309f | ||
|
|
3b8d10cae5 | ||
|
|
2c0372acdf | ||
|
|
8b52bd817f | ||
|
|
38dd9a344e | ||
|
|
cbf46d0ded | ||
|
|
b10b22d09f | ||
|
|
0664cf407c | ||
|
|
4e667fabb7 | ||
|
|
5ca62de167 | ||
|
|
d3016b62f5 | ||
|
|
7d4d618d98 | ||
|
|
9b3fccdcb7 | ||
|
|
8da539ed8a | ||
|
|
3658e5f0f1 | ||
|
|
5083972536 | ||
|
|
f983ce4875 | ||
|
|
4c4a39a115 | ||
|
|
cb1661f9d0 | ||
|
|
eb5676366b | ||
|
|
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 | ||
|
|
522bead374 | ||
|
|
030286142f | ||
|
|
8a4ceb5717 | ||
|
|
63fa6accc4 | ||
|
|
28718f964a | ||
|
|
1d486e3a59 | ||
|
|
9b396f7125 | ||
|
|
e16cbce52e | ||
|
|
840970e8f7 | ||
|
|
e390d6779d | ||
|
|
39ee522f92 | ||
|
|
9526efcf72 | ||
|
|
d397e0d838 | ||
|
|
8301fdc6d3 | ||
|
|
f645382f11 | ||
|
|
1ed5557d2d | ||
|
|
28b9216f8a | ||
|
|
0114cb67ca | ||
|
|
ea8f86dd30 | ||
|
|
0ff77fc352 | ||
|
|
341963e820 | ||
|
|
db60b92613 | ||
|
|
98206a4f04 | ||
|
|
4df9e2e0e5 | ||
|
|
34e4cffb62 | ||
|
|
71d76c993c | ||
|
|
e67bdb4c08 | ||
|
|
23f013f2d7 | ||
|
|
9b729b80e0 | ||
|
|
38ad328956 | ||
|
|
f767f0cfaa | ||
|
|
1c79df8630 | ||
|
|
248573205b | ||
|
|
88831ca21b | ||
|
|
26f15e11c4 | ||
|
|
5c0a7e06dc | ||
|
|
290b313dc0 | ||
|
|
93e5ca3f6d | ||
|
|
6ffff8565f | ||
|
|
494e05b326 | ||
|
|
a24f61403a | ||
|
|
292cc54768 | ||
|
|
e8a9662eb5 | ||
|
|
0262819c20 | ||
|
|
d3b93a1113 | ||
|
|
5f8c06c805 | ||
|
|
a5ad26cd28 | ||
|
|
5802818b9a | ||
|
|
df519ff16e | ||
|
|
bf8a88a0ad | ||
|
|
878204db73 | ||
|
|
08c76b1da6 | ||
|
|
e82c9db6da | ||
|
|
65c3cb4708 | ||
|
|
0cab076b86 | ||
|
|
3a28ed24ea | ||
|
|
71775eae4c | ||
|
|
953249aa43 | ||
|
|
229dbbb100 | ||
|
|
4a439beae5 | ||
|
|
49022c3e73 | ||
|
|
c92ced4ac7 | ||
|
|
ba47da6587 | ||
|
|
2c27f22900 | ||
|
|
c0391990ad | ||
|
|
2247e1e345 | ||
|
|
e4847464d4 | ||
|
|
7694a7bf41 | ||
|
|
a686e547cf | ||
|
|
1481d34959 | ||
|
|
04512e5d04 | ||
|
|
9a3aed57b1 | ||
|
|
5a69321be3 | ||
|
|
5ee938fd1c | ||
|
|
f78783e187 | ||
|
|
11bfe7a7bb | ||
|
|
8ba494c71f | ||
|
|
acb63c929b | ||
|
|
26dd5d4550 | ||
|
|
32f288084a | ||
|
|
6db149c588 | ||
|
|
0fed5f8b3e | ||
|
|
a30930bdcc | ||
|
|
3a1355fb54 | ||
|
|
97db128d66 | ||
|
|
3d57256070 | ||
|
|
5dc8fb5b4f | ||
|
|
3f0d434f82 | ||
|
|
2cdc5ea48b | ||
|
|
745605efe3 | ||
|
|
0fbd4313b2 | ||
|
|
9f8f61ef2f | ||
|
|
4b1f4938b8 | ||
|
|
5f1dc73a1b | ||
|
|
5e1fc6e24d | ||
|
|
0ec32ee404 | ||
|
|
97b21b3849 | ||
|
|
214173c6b8 | ||
|
|
3786f59e03 | ||
|
|
fa7234ff68 | ||
|
|
91dd3c5fac | ||
|
|
a378dbd9b2 | ||
|
|
da9521a351 | ||
|
|
af51107587 | ||
|
|
e60f652a64 | ||
|
|
a4813ec677 | ||
|
|
01dadb0a8d | ||
|
|
9dcb7ea6a9 | ||
|
|
adfe072b89 | ||
|
|
b12f8b3d73 | ||
|
|
f56f318217 | ||
|
|
3af0eb7fa0 | ||
|
|
a69cb9b044 | ||
|
|
b68a696859 | ||
|
|
e320b0b581 | ||
|
|
42041f2403 | ||
|
|
881c6ee655 | ||
|
|
d8b2993974 | ||
|
|
30e711aa5c | ||
|
|
51ae8e13fb | ||
|
|
0892b39ad2 | ||
|
|
5964d5cf63 | ||
|
|
2162a31d3a | ||
|
|
e00e4d4245 | ||
|
|
4b9532fe24 | ||
|
|
c3ff52208a | ||
|
|
cfb73923bd | ||
|
|
a951446f9b | ||
|
|
a187a16e56 | ||
|
|
d1dec38f38 | ||
|
|
65b632a7dd | ||
|
|
ec0787015e | ||
|
|
cbc76a7816 | ||
|
|
d667b73e8d | ||
|
|
248de2be2e | ||
|
|
365537d8e3 | ||
|
|
a23cf1ceea | ||
|
|
be471e9ccc | ||
|
|
d0e7eaafc9 | ||
|
|
13b7cce8be | ||
|
|
efff630763 | ||
|
|
e2e0795538 | ||
|
|
c20634e4f8 | ||
|
|
715dce546f | ||
|
|
07d86bf91d | ||
|
|
fe8c7c5a94 | ||
|
|
7ada5195d8 | ||
|
|
a6ad85244f | ||
|
|
f13f2296de | ||
|
|
b1d901f100 | ||
|
|
8ab576f7e6 | ||
|
|
6f92c9c974 | ||
|
|
7425037db6 | ||
|
|
6ca60429ce | ||
|
|
c702fc944e | ||
|
|
999c9ae21c | ||
|
|
c715cfc254 | ||
|
|
22687a6901 | ||
|
|
eecdf4b0f3 | ||
|
|
e3e5f30ba1 | ||
|
|
ce174743bb | ||
|
|
a84be1844f | ||
|
|
9ccef4180f | ||
|
|
3bf896f7db | ||
|
|
e4a0e5aad6 | ||
|
|
d6f8ccd20b | ||
|
|
94460867d3 | ||
|
|
5b70325e52 | ||
|
|
3aece189ac | ||
|
|
188f0eb4ad | ||
|
|
d4c8a15407 | ||
|
|
354a534d68 | ||
|
|
c8a40e0b52 | ||
|
|
771cb5f60b | ||
|
|
23836ee8d0 | ||
|
|
8a7f36c34b | ||
|
|
31262e81f9 | ||
|
|
3d006afacc | ||
|
|
74ec50f933 | ||
|
|
21e85f87bc | ||
|
|
0b8daf4ae4 | ||
|
|
6c0c88cfc4 | ||
|
|
f0d010d9c5 | ||
|
|
2989e54eaa | ||
|
|
1a2c9ca813 | ||
|
|
e3f3e3399f | ||
|
|
6b8531f0a6 | ||
|
|
50df902b54 | ||
|
|
3a5248a919 | ||
|
|
1a92502788 | ||
|
|
a38fea1f9e | ||
|
|
d595d4c7ac | ||
|
|
a43fd06f85 | ||
|
|
375a121377 | ||
|
|
fef0502d50 | ||
|
|
c30b9d04a8 | ||
|
|
89cfa0737f | ||
|
|
8b03f2d47b | ||
|
|
f80c167d65 | ||
|
|
db3ce29b36 | ||
|
|
6f96c6763d | ||
|
|
372cdf1fc8 | ||
|
|
54922c036a | ||
|
|
2e999a5441 | ||
|
|
5073f208af | ||
|
|
c9d7486d16 | ||
|
|
27d906a6b3 | ||
|
|
21bf2d62d2 | ||
|
|
fcdd8e5da6 | ||
|
|
ab47fc6656 | ||
|
|
5f52c066e5 | ||
|
|
19cb366e5d | ||
|
|
55d1b87b34 | ||
|
|
eec41fd039 | ||
|
|
69043549d6 | ||
|
|
68e4eeb53e | ||
|
|
0ca90257a5 | ||
|
|
7507c5f56c | ||
|
|
acbbb2594a | ||
|
|
5294140753 | ||
|
|
a36a07c297 | ||
|
|
47b129bf07 | ||
|
|
1a0c8f1573 | ||
|
|
2be6f03848 | ||
|
|
4172c0f29e | ||
|
|
ec01008fe3 | ||
|
|
8ea814e4b4 | ||
|
|
0195fe9dfd | ||
|
|
e430ea13f4 | ||
|
|
719954a24a | ||
|
|
3adb31f53b | ||
|
|
3eaed3b6f5 | ||
|
|
22de598456 | ||
|
|
5c5314b39c | ||
|
|
e76f29e5ba | ||
|
|
5a83209b9b | ||
|
|
4655ee014b | ||
|
|
12f0017d4a | ||
|
|
ca3b5fbe99 | ||
|
|
9de6612cde | ||
|
|
2d7e8b58e4 | ||
|
|
f3a97841bd | ||
|
|
40f0378136 | ||
|
|
17b6ce1379 | ||
|
|
14ac24cacc | ||
|
|
6bf253deda | ||
|
|
aa4346a0e3 | ||
|
|
8c541a6e4d | ||
|
|
1a43afe6f7 | ||
|
|
9882c4c761 | ||
|
|
54ad04b6e9 | ||
|
|
540cd772e4 | ||
|
|
621de301c7 | ||
|
|
8769c1a92b | ||
|
|
8e1c0b0852 | ||
|
|
56d6791205 | ||
|
|
016e630ecf | ||
|
|
69b779b4a8 | ||
|
|
7a537765bc | ||
|
|
21b2e874ce | ||
|
|
55ad950609 | ||
|
|
654ab117f2 | ||
|
|
5ec9bfc47d | ||
|
|
1066f06ec1 | ||
|
|
668dbb25ab | ||
|
|
fced4d6e57 | ||
|
|
c5ba6e22fa | ||
|
|
6012ec8eb7 | ||
|
|
75a44e5aa9 | ||
|
|
a811f2e17d | ||
|
|
b65f2509a2 | ||
|
|
b60117c713 | ||
|
|
d3142736c8 | ||
|
|
1ececf1127 | ||
|
|
a09f7713ce | ||
|
|
f3bace10ae | ||
|
|
39d9bd4d47 | ||
|
|
eb2cfe1d19 | ||
|
|
ca5a7d7656 | ||
|
|
ea2084392f | ||
|
|
5d99534d54 | ||
|
|
f048cff093 | ||
|
|
f571181d36 | ||
|
|
fc9b66b078 | ||
|
|
f039a94744 | ||
|
|
b4baa7ce02 | ||
|
|
bd38c8fe3c | ||
|
|
9a0748d8ed | ||
|
|
feae9ca4aa | ||
|
|
d1ee9827a0 | ||
|
|
1fe591ae20 | ||
|
|
b820e1b587 | ||
|
|
ebfc2a4942 | ||
|
|
7167d4bdc0 | ||
|
|
a022b672a0 | ||
|
|
a7a48221d3 | ||
|
|
e5118661a7 | ||
|
|
58d9a5ebac | ||
|
|
fae7f11222 | ||
|
|
1986e62477 | ||
|
|
0ee2a0e6d7 | ||
|
|
2b28ddd0c6 | ||
|
|
b15ef49c57 | ||
|
|
ed05caec93 | ||
|
|
25ca965938 | ||
|
|
ead27db9f0 | ||
|
|
4650105d90 | ||
|
|
b8417abee5 | ||
|
|
cc982ec7fe | ||
|
|
2dba76a7c2 | ||
|
|
9fd5634778 | ||
|
|
c8063e5732 | ||
|
|
ee3ba7c761 | ||
|
|
2882737bcd | ||
|
|
47588f343b | ||
|
|
1c0af6c7bc | ||
|
|
b07ffb3c78 | ||
|
|
bea82def10 | ||
|
|
671a857560 | ||
|
|
eff2d977c1 | ||
|
|
30a0d62436 | ||
|
|
91d0f25442 | ||
|
|
4a10c9ef6f | ||
|
|
9d7f5bdc26 | ||
|
|
99dbd23f1b | ||
|
|
673f086e87 | ||
|
|
4103925835 | ||
|
|
cad2780219 | ||
|
|
4636a7f14b | ||
|
|
a64bdf50fb | ||
|
|
706534ffe1 | ||
|
|
4286af3599 | ||
|
|
9a0254a118 | ||
|
|
f3ae4b8786 | ||
|
|
6566e853cd | ||
|
|
ab06ace1f6 | ||
|
|
9a65ed4ce2 | ||
|
|
5ba7084815 | ||
|
|
dc10118d3b | ||
|
|
27102ea0fb | ||
|
|
c563175ff0 | ||
|
|
b110c55993 | ||
|
|
dc346b7ffa | ||
|
|
88fcbf5f1d | ||
|
|
eace1d9c67 | ||
|
|
d0d39c13e7 | ||
|
|
2733d43ea7 | ||
|
|
ae6ec411d0 | ||
|
|
8a77af7a6d | ||
|
|
2a57ead7e3 | ||
|
|
839315b271 | ||
|
|
67dfa37c56 | ||
|
|
590188820d | ||
|
|
a764c70b4a | ||
|
|
a27abab65f | ||
|
|
c241ec90ec | ||
|
|
f789d28277 | ||
|
|
c1c8b30a35 | ||
|
|
15046c6c59 | ||
|
|
1da15181da | ||
|
|
3c6b755352 | ||
|
|
3c144ada53 | ||
|
|
7ba6647c4f | ||
|
|
e708670f9a | ||
|
|
de4c6065dc | ||
|
|
d60f180f43 | ||
|
|
30318a6654 | ||
|
|
d8420413b7 | ||
|
|
a5951babfc | ||
|
|
2cba167634 | ||
|
|
89743aae5d | ||
|
|
e6135981a5 | ||
|
|
739521333c | ||
|
|
64af83161a | ||
|
|
98252634fc | ||
|
|
a87fb57656 | ||
|
|
34708bbba1 | ||
|
|
f91259f46d | ||
|
|
cf6e362972 | ||
|
|
95c4ade718 | ||
|
|
84125d7c92 | ||
|
|
17721aff55 | ||
|
|
d1b6224c2b | ||
|
|
1bd31742b9 | ||
|
|
165a2ef1b8 | ||
|
|
774c10396c | ||
|
|
33c5b5feb8 | ||
|
|
b83b9974ee | ||
|
|
bcbe5059a9 | ||
|
|
5bda901146 | ||
|
|
82565690c7 | ||
|
|
978d900e36 | ||
|
|
d330100542 | ||
|
|
4c0edd2efb | ||
|
|
146cdc020d | ||
|
|
52f2b9ef58 | ||
|
|
a09506a0ad | ||
|
|
10d33238b9 | ||
|
|
b78ea06829 | ||
|
|
eae942b91c | ||
|
|
1075b006b5 | ||
|
|
afaa02709c | ||
|
|
332a687aef | ||
|
|
d1c7875406 | ||
|
|
cbc2f9eb32 | ||
|
|
26e3785963 | ||
|
|
f8b7fb72b8 | ||
|
|
7b12f6a1dd | ||
|
|
c7a0613c57 | ||
|
|
83a0085c4d | ||
|
|
05bb7fa821 | ||
|
|
4cc42133b5 | ||
|
|
a773a52559 | ||
|
|
5af271cf3a | ||
|
|
0c2bab1f69 | ||
|
|
b7233d063f | ||
|
|
8720841c48 | ||
|
|
263697e491 | ||
|
|
493f1da266 | ||
|
|
8b44a54bb2 | ||
|
|
b5828a7ce9 | ||
|
|
51a18225ad | ||
|
|
28625451dd | ||
|
|
3914176bc4 | ||
|
|
13989b965d | ||
|
|
770cd24f27 | ||
|
|
431bb1ed16 | ||
|
|
3bb9c7ee92 | ||
|
|
45edcbb03e | ||
|
|
e99fd2892b | ||
|
|
99ea16d7fd | ||
|
|
bc9ff6d1bf | ||
|
|
ad3bcbb1bb | ||
|
|
25dde58297 | ||
|
|
bba3487dc4 | ||
|
|
4fdaa46328 | ||
|
|
4427f03b08 | ||
|
|
4e2c63c8cb | ||
|
|
afecde87d8 | ||
|
|
c14eae6d56 | ||
|
|
684aba0e90 | ||
|
|
46f8a659b3 | ||
|
|
3940a214d0 | ||
|
|
411f563cbe | ||
|
|
b5a6b34968 | ||
|
|
fa8eaf7355 | ||
|
|
7eb09c3445 | ||
|
|
edfd3d7206 | ||
|
|
d699caf255 | ||
|
|
bd4eede6b4 | ||
|
|
1fd8e772b0 | ||
|
|
7ce0bd1181 | ||
|
|
a4b7c39a9a | ||
|
|
a5ee8b39ef | ||
|
|
5b06c60318 | ||
|
|
b306715b4a | ||
|
|
8d99bdac25 | ||
|
|
e114dfda6d | ||
|
|
472ad90d83 | ||
|
|
622f0c047c | ||
|
|
7f38414276 | ||
|
|
1d3d59243c | ||
|
|
e2343c03e0 | ||
|
|
0e0df1fb3b | ||
|
|
800a789f50 | ||
|
|
106664b942 | ||
|
|
1c738c6b83 | ||
|
|
25fa1d7c6a | ||
|
|
45162652de | ||
|
|
537650a2cd | ||
|
|
f849073137 | ||
|
|
a3c154dcd3 | ||
|
|
1b8228b642 | ||
|
|
732d03f4e5 | ||
|
|
33787c6add | ||
|
|
44e7d2ebe6 | ||
|
|
e49ae663a6 | ||
|
|
2385ab8294 | ||
|
|
84ccb23098 | ||
|
|
ad343f8260 | ||
|
|
018d766179 | ||
|
|
a948be184c | ||
|
|
72b4a74245 | ||
|
|
36c824d973 | ||
|
|
229ce1aecf | ||
|
|
be45a9b7d5 | ||
|
|
d2c72a7f21 | ||
|
|
60e9827ffe | ||
|
|
a9256d4758 | ||
|
|
750b5be5d3 | ||
|
|
28bd7e5b19 | ||
|
|
d64c023099 | ||
|
|
429cb1f7f7 | ||
|
|
9f75068059 | ||
|
|
4636e9cffb | ||
|
|
4b2bf556d8 | ||
|
|
a16ea94836 | ||
|
|
b9ea249f81 | ||
|
|
470f480bc1 | ||
|
|
24ff3155ae | ||
|
|
47b3f464a9 | ||
|
|
cd201f8eb8 | ||
|
|
016278a759 | ||
|
|
b68f101e81 | ||
|
|
ab13548018 | ||
|
|
f507ee56b0 | ||
|
|
761adf1cf0 | ||
|
|
cd1fe64e6c | ||
|
|
8f43e74288 | ||
|
|
cef3960a4e | ||
|
|
783b7ecdab | ||
|
|
8bd1c63b32 | ||
|
|
e6fb7e970d | ||
|
|
891cc0f9b6 | ||
|
|
10fbe74cef | ||
|
|
05d04a3959 | ||
|
|
19f7279542 | ||
|
|
aa608472ae | ||
|
|
26ed2a06a0 | ||
|
|
07013da13d | ||
|
|
d840c612d4 | ||
|
|
188cf85b3f | ||
|
|
c52ba28dd0 | ||
|
|
10c1653e72 | ||
|
|
2fbd41e13b | ||
|
|
96857c5f95 | ||
|
|
131eb319e0 | ||
|
|
6e589377f4 | ||
|
|
2c84b37bf7 | ||
|
|
0d67caff77 | ||
|
|
3dde57d539 | ||
|
|
ec2e3ec0e4 | ||
|
|
9fe459c820 | ||
|
|
823e0723fb | ||
|
|
8bd6d7c5b1 | ||
|
|
839a8fa4d9 | ||
|
|
24917a187a | ||
|
|
6c6f03cf7c | ||
|
|
5676443139 | ||
|
|
e77d847671 | ||
|
|
0baee84e96 | ||
|
|
c446cc2596 | ||
|
|
b66c4153b1 | ||
|
|
d72f1b89fc | ||
|
|
b5b278d072 | ||
|
|
cb5466a90b | ||
|
|
4de25369da | ||
|
|
cdd8953085 | ||
|
|
2f2f0164ff | ||
|
|
6e977e1024 | ||
|
|
70b11f91b4 | ||
|
|
014301587f | ||
|
|
139e93d371 | ||
|
|
fb1fc46b06 | ||
|
|
9882ab6c67 | ||
|
|
1a1f919882 | ||
|
|
91227d26bb | ||
|
|
11b5dae88d | ||
|
|
0c7d485417 | ||
|
|
c40e34b134 | ||
|
|
6cdf8da3f7 | ||
|
|
c65265477f | ||
|
|
de77f1ee5c | ||
|
|
c8c980c49d | ||
|
|
ad329612fd | ||
|
|
c324895cbc | ||
|
|
679a4314dc | ||
|
|
36932d31c4 | ||
|
|
ed25aaaad9 | ||
|
|
147aa41ba5 | ||
|
|
5b7e32581b | ||
|
|
2f90fb2bec | ||
|
|
8c480fd39e | ||
|
|
ffbbd438ae | ||
|
|
96ee81fa3f | ||
|
|
3d2399ea0f | ||
|
|
6d5dde8645 | ||
|
|
048c9f3fe2 | ||
|
|
373265752f | ||
|
|
5e6519c1b0 | ||
|
|
ccdb52c1d9 | ||
|
|
b4b74d72f0 | ||
|
|
ca6ab584d0 | ||
|
|
799a502cac | ||
|
|
8d1570db28 | ||
|
|
2a30bbe493 | ||
|
|
cf6566b9bc | ||
|
|
c3e19f2821 | ||
|
|
e24197fd16 | ||
|
|
63db60f646 | ||
|
|
e66b28823d | ||
|
|
77bd565ef6 | ||
|
|
00d63883f8 | ||
|
|
10dd675371 | ||
|
|
2daa32b98b | ||
|
|
e8e7912871 | ||
|
|
90079c2974 | ||
|
|
967a8530dd | ||
|
|
ef4794e36d | ||
|
|
7c7c92d2dd | ||
|
|
95f3dd0535 | ||
|
|
768b78e7d0 | ||
|
|
4370254e73 | ||
|
|
436f72582b | ||
|
|
af3aba7821 | ||
|
|
7479db6ffc | ||
|
|
e9cc2786b7 | ||
|
|
cbdee5a804 | ||
|
|
0f66262fa1 | ||
|
|
6c80457262 | ||
|
|
16008acdf1 | ||
|
|
5447ed2629 | ||
|
|
9eba61018a | ||
|
|
bc97319402 | ||
|
|
709db5c648 | ||
|
|
b752faa107 | ||
|
|
8d512c3187 | ||
|
|
2d9bc73709 | ||
|
|
b0942ed8c7 | ||
|
|
b1c1aa53a9 | ||
|
|
f79749e7b2 | ||
|
|
1a77030c9b | ||
|
|
817ade27fb | ||
|
|
4afa14b612 | ||
|
|
9caa79a7ea | ||
|
|
446f21d2a0 | ||
|
|
06521f6cf1 | ||
|
|
75336670d7 | ||
|
|
106a9fe67f | ||
|
|
a5eccc199b | ||
|
|
837d9f9d77 | ||
|
|
959387b69f | ||
|
|
fd0703b8c8 | ||
|
|
3ff608b9cb | ||
|
|
edc0a0e982 | ||
|
|
1549ff9185 | ||
|
|
3454641244 | ||
|
|
5dedf25e3b | ||
|
|
7214c180ae | ||
|
|
aa0ef554b3 | ||
|
|
a6015863d8 | ||
|
|
5a694ccb8a | ||
|
|
f7d09c671a | ||
|
|
4de1b22672 | ||
|
|
4bdda3f240 | ||
|
|
ced1dfeffd | ||
|
|
0774f825cf | ||
|
|
23fe5c1b93 | ||
|
|
bd4afeea69 | ||
|
|
3ee9b33f8a | ||
|
|
5be0813893 | ||
|
|
f94c1b32e5 | ||
|
|
ff4923cf67 | ||
|
|
5788bc8048 | ||
|
|
5749662194 | ||
|
|
d5d1cc47e0 | ||
|
|
da043ca16d | ||
|
|
9aa90569bf | ||
|
|
294d78e0e2 | ||
|
|
8182c3fe2c | ||
|
|
6f7bc38088 | ||
|
|
dcbc0ccfdc | ||
|
|
399319dc1c | ||
|
|
35d6da391b | ||
|
|
fcbd7c87af | ||
|
|
97feba6898 | ||
|
|
9249ffdb84 | ||
|
|
71df9e3381 | ||
|
|
3c964147be | ||
|
|
54b4b6b378 | ||
|
|
cff37f0775 | ||
|
|
8b1cc3b303 | ||
|
|
65b6121186 | ||
|
|
3d30527860 | ||
|
|
24a9f7c650 | ||
|
|
242f661644 | ||
|
|
32019d2bc4 | ||
|
|
b252bb048f | ||
|
|
ba47c01a01 | ||
|
|
51266898ec | ||
|
|
f9164ab0d2 | ||
|
|
c43e707f43 | ||
|
|
85b7f828b3 | ||
|
|
7005a65d32 | ||
|
|
776d4e6ac2 | ||
|
|
1c88c3083c | ||
|
|
4522834f7a | ||
|
|
9ee5fd0585 | ||
|
|
63b2dbb827 | ||
|
|
5bee8ef15b | ||
|
|
e7de3d368f | ||
|
|
d45deccc0a | ||
|
|
d5b03ab721 | ||
|
|
d1ff81a41c | ||
|
|
43fa6858f6 | ||
|
|
db7eb45433 | ||
|
|
21c01ba97b | ||
|
|
b517fb5ee3 | ||
|
|
9dbc669199 | ||
|
|
7d2d32420a | ||
|
|
48e98ea2bd | ||
|
|
01d0f0327b | ||
|
|
0dc887720d | ||
|
|
e08bbcdb07 | ||
|
|
70d26ec123 | ||
|
|
a06f260f42 | ||
|
|
d42f76c346 | ||
|
|
66c3d6d2d1 | ||
|
|
81affad2dc | ||
|
|
2488af9066 | ||
|
|
5cf9d78516 | ||
|
|
3a9eeabdb2 | ||
|
|
ac4315e145 | ||
|
|
5094e94df1 | ||
|
|
4b7b185d05 | ||
|
|
6cb0335d28 | ||
|
|
c248318958 | ||
|
|
c3e5db5f04 | ||
|
|
058233fc87 | ||
|
|
186c851695 | ||
|
|
5aa36357f6 | ||
|
|
191d30cf1c | ||
|
|
d8c2ecaaf8 | ||
|
|
a7b0551d23 | ||
|
|
dc34968fe7 | ||
|
|
45f064f7cb | ||
|
|
545caba720 | ||
|
|
0e24f36fef | ||
|
|
db7935faf3 | ||
|
|
9cc218db3e | ||
|
|
15f8ebc562 | ||
|
|
205cae963b | ||
|
|
df2746de71 | ||
|
|
7f471d862e | ||
|
|
338acabe2b | ||
|
|
4f1f487ae4 | ||
|
|
77502aeb97 | ||
|
|
ba82d43ca1 | ||
|
|
e9135598b3 | ||
|
|
1c0739db10 | ||
|
|
dfd3907787 | ||
|
|
1069652701 | ||
|
|
70b82f1aec | ||
|
|
5573bdb219 | ||
|
|
cf68578261 | ||
|
|
f407d442d4 | ||
|
|
7f12ad9d91 | ||
|
|
5efe9367d2 | ||
|
|
cfce92645f | ||
|
|
519792d02b | ||
|
|
bfa1f2d7ce | ||
|
|
42beaf467c | ||
|
|
8303938d0e | ||
|
|
0ece155418 | ||
|
|
4f7e155e59 | ||
|
|
ff324625e4 | ||
|
|
fd7515b046 | ||
|
|
607f853bc7 | ||
|
|
09fb1174f1 | ||
|
|
542eaab3dd | ||
|
|
a301a498f5 | ||
|
|
d66e749ec8 | ||
|
|
c8ca54ea31 | ||
|
|
5704552053 | ||
|
|
426069a4dd | ||
|
|
19d0aabe7a | ||
|
|
fb0d735f68 | ||
|
|
167a30be1c | ||
|
|
5982528274 | ||
|
|
de3095e3b4 | ||
|
|
8e0682f442 | ||
|
|
140994d2c4 | ||
|
|
950e29d56e | ||
|
|
65667356b6 | ||
|
|
6b393e9d7c | ||
|
|
4818130e4f | ||
|
|
9da3aacd08 | ||
|
|
729f8b9334 | ||
|
|
279216048b | ||
|
|
2ce7a348df | ||
|
|
46f719ceaa | ||
|
|
949be301de | ||
|
|
be429a5800 | ||
|
|
e7714e0902 | ||
|
|
4835ed6967 | ||
|
|
0198a3fc52 | ||
|
|
e095bf1af0 | ||
|
|
d5de67c6dc | ||
|
|
2267db093f | ||
|
|
5aecfa98a1 | ||
|
|
485e230dd8 | ||
|
|
befb415f27 | ||
|
|
c0490627bf | ||
|
|
d269fbb446 | ||
|
|
444020f7c7 | ||
|
|
6188083baa | ||
|
|
c2a524d80b | ||
|
|
e6f5a0495f | ||
|
|
0606a29f13 | ||
|
|
c6052830e1 | ||
|
|
4bb876aee5 | ||
|
|
a3640c1767 | ||
|
|
250c6950cf | ||
|
|
76f5de6e54 | ||
|
|
1a1c5c5d44 | ||
|
|
4ae80f9a9f | ||
|
|
8a3cb8daa8 | ||
|
|
64ab537b68 | ||
|
|
fdea386727 | ||
|
|
28944ed862 | ||
|
|
3250ee5707 | ||
|
|
d308a561e4 | ||
|
|
584f8cc9e7 | ||
|
|
61e1483b74 | ||
|
|
3bb4e34044 | ||
|
|
832b17d4d2 | ||
|
|
76c5875912 | ||
|
|
266dc7679a | ||
|
|
d693dc85e4 | ||
|
|
add68130b8 | ||
|
|
d9b5680a45 | ||
|
|
dc25be536c | ||
|
|
7708c88e32 | ||
|
|
707f230353 | ||
|
|
49d2eb9a08 | ||
|
|
128186ea68 | ||
|
|
949be9d0a1 | ||
|
|
3e986517c3 |
+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
|
||||||
@@ -63,6 +63,8 @@ ForEachMacros:
|
|||||||
SortIncludes: true
|
SortIncludes: true
|
||||||
IncludeBlocks: Regroup
|
IncludeBlocks: Regroup
|
||||||
IncludeCategories:
|
IncludeCategories:
|
||||||
|
- Regex: '"V3Pch.*\.h"'
|
||||||
|
Priority: -2 # Precompiled headers
|
||||||
- Regex: '"(config_build|verilated_config|verilatedos)\.h"'
|
- Regex: '"(config_build|verilated_config|verilatedos)\.h"'
|
||||||
Priority: -1 # Sepecials before main header
|
Priority: -1 # Sepecials before main header
|
||||||
- Regex: '(<|")verilated.*'
|
- Regex: '(<|")verilated.*'
|
||||||
@@ -112,6 +114,9 @@ SpacesBeforeTrailingComments: 2
|
|||||||
SpacesInAngles: false
|
SpacesInAngles: false
|
||||||
SpacesInContainerLiterals: true
|
SpacesInContainerLiterals: true
|
||||||
SpacesInCStyleCastParentheses: false
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInLineCommentPrefix:
|
||||||
|
Minimum: 0
|
||||||
|
Maximum: -1
|
||||||
SpacesInParentheses: false
|
SpacesInParentheses: false
|
||||||
SpacesInSquareBrackets: false
|
SpacesInSquareBrackets: false
|
||||||
Standard: Cpp11
|
Standard: Cpp11
|
||||||
|
|||||||
+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"
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"name": "Verilator Build Environment",
|
||||||
|
|
||||||
|
"build": {
|
||||||
|
"dockerfile": "../ci/docker/buildenv/Dockerfile"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -9,10 +9,14 @@ 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 --version' are you using? Did you try it with the git master version?
|
What 'verilator --version' are you using? Did you try it with the git master version?
|
||||||
|
|
||||||
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.)
|
||||||
|
|||||||
+163
-127
@@ -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,152 +10,187 @@ 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
|
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: repo
|
working-directory: repo
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.actor }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }}
|
||||||
|
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++ }
|
|
||||||
m32: [0, 1]
|
|
||||||
exclude:
|
|
||||||
# Build pull requests only with ubuntu-22.04 and without m32
|
|
||||||
- os: ${{ github.event_name == 'pull_request' && 'ubuntu-18.04' || 'do-not-exclude' }}
|
|
||||||
- os: ${{ github.event_name == 'pull_request' && 'ubuntu-20.04' || 'do-not-exclude' }}
|
|
||||||
- m32: ${{ github.event_name == 'pull_request' && 1 || 'do-not-exclude' }}
|
|
||||||
# Build -m32 only on ubuntu-22.04
|
|
||||||
- {os: ubuntu-18.04, m32: 1}
|
|
||||||
- {os: ubuntu-20.04, m32: 1}
|
|
||||||
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 }
|
build-2404-clang:
|
||||||
m32: 0
|
name: Build
|
||||||
runs-on: ${{ matrix.os }}
|
uses: ./.github/workflows/reusable-build.yml
|
||||||
name: Build | ${{ matrix.os }} | ${{ matrix.compiler.cc }} ${{ matrix.m32 && '| -m32' || '' }}
|
with:
|
||||||
|
os: ${{ matrix.os }}
|
||||||
|
cc: ${{ matrix.cc }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- {os: ubuntu-24.04, cc: clang}
|
||||||
|
|
||||||
|
build-2204-gcc:
|
||||||
|
name: Build
|
||||||
|
uses: ./.github/workflows/reusable-build.yml
|
||||||
|
with:
|
||||||
|
os: ${{ matrix.os }}
|
||||||
|
cc: ${{ matrix.cc }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- {os: ubuntu-22.04, cc: gcc}
|
||||||
|
|
||||||
|
build-2204-clang:
|
||||||
|
name: Build
|
||||||
|
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}
|
||||||
|
|
||||||
|
test-2404-gcc:
|
||||||
|
name: Test | ${{ matrix.os }} | ${{ matrix.cc }}
|
||||||
|
needs: build-2404-gcc
|
||||||
|
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 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}
|
||||||
|
|
||||||
|
test-2404-clang:
|
||||||
|
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}
|
||||||
|
|
||||||
|
test-2204-gcc:
|
||||||
|
name: Test | ${{ matrix.os }} | ${{ matrix.cc }}
|
||||||
|
needs: build-2204-gcc
|
||||||
|
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:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
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: ${{ matrix.os }}
|
CI_RUNS_ON: ubuntu-22.04
|
||||||
CI_M32: ${{ matrix.m32 }}
|
CCACHE_COMPRESS: 1
|
||||||
CC: ${{ matrix.compiler.cc }}
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||||
CXX: ${{ matrix.compiler.cxx }}
|
CCACHE_LIMIT_MULTIPLE: 0.95
|
||||||
CACHE_BASE_KEY: build-${{ matrix.os }}-${{ matrix.compiler.cc }}-m32=${{ matrix.m32 }}
|
|
||||||
CCACHE_MAXSIZE: 250M # Per build matrix entry (2000M in total)
|
|
||||||
VERILATOR_ARCHIVE: verilator-${{ github.sha }}-${{ matrix.os }}-${{ matrix.compiler.cc }}${{ matrix.m32 && '-m32' || '' }}.tar.gz
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
path: repo
|
|
||||||
|
|
||||||
- name: Cache $CCACHE_DIR
|
|
||||||
uses: actions/cache@v3
|
|
||||||
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@v3
|
|
||||||
with:
|
|
||||||
path: ${{ github.workspace }}/${{ env.VERILATOR_ARCHIVE }}
|
|
||||||
name: ${{ env.VERILATOR_ARCHIVE }}
|
|
||||||
|
|
||||||
|
|
||||||
test:
|
|
||||||
needs: build
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
|
||||||
os: [ubuntu-22.04, ubuntu-20.04]
|
|
||||||
compiler:
|
|
||||||
- { cc: clang, cxx: clang++ }
|
|
||||||
- { cc: gcc, cxx: g++ }
|
|
||||||
m32: [0, 1]
|
|
||||||
suite: [dist-vlt-0, dist-vlt-1, dist-vlt-2, vltmt-0, vltmt-1]
|
|
||||||
exclude:
|
|
||||||
# Build pull requests only with ubuntu-22.04 and without m32
|
|
||||||
- os: ${{ github.event_name == 'pull_request' && 'ubuntu-18.04' || 'do-not-exclude' }}
|
|
||||||
- os: ${{ github.event_name == 'pull_request' && 'ubuntu-20.04' || 'do-not-exclude' }}
|
|
||||||
- m32: ${{ github.event_name == 'pull_request' && 1 || 'do-not-exclude' }}
|
|
||||||
# Build -m32 only on ubuntu-22.04
|
|
||||||
- {os: ubuntu-18.04, m32: 1}
|
|
||||||
- {os: ubuntu-20.04, m32: 1}
|
|
||||||
include:
|
|
||||||
# Test with GCC 10 on ubuntu-20.04 without m32
|
|
||||||
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, m32: 0, suite: dist-vlt-0}
|
|
||||||
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, m32: 0, suite: dist-vlt-1}
|
|
||||||
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, m32: 0, suite: dist-vlt-2}
|
|
||||||
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, m32: 0, suite: vltmt-0}
|
|
||||||
- {os: ubuntu-20.04, compiler: { cc: gcc-10, cxx: g++-10 }, m32: 0, suite: vltmt-1}
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
name: Test | ${{ matrix.os }} | ${{ matrix.compiler.cc }} | ${{ matrix.suite }} ${{ matrix.m32 && '| -m32' || '' }}
|
|
||||||
env:
|
|
||||||
CI_BUILD_STAGE_NAME: test
|
|
||||||
CI_RUNS_ON: ${{ matrix.os }}
|
|
||||||
CI_M32: ${{ matrix.m32 }}
|
|
||||||
CC: ${{ matrix.compiler.cc }}
|
|
||||||
CXX: ${{ matrix.compiler.cxx }}
|
|
||||||
CACHE_BASE_KEY: test-${{ matrix.os }}-${{ matrix.compiler.cc }}-m32=${{ matrix.m32 }}-${{ matrix.suite }}
|
|
||||||
CCACHE_MAXSIZE: 64M # Per build matrix entry (2160M in total)
|
|
||||||
VERILATOR_ARCHIVE: verilator-${{ github.sha }}-${{ matrix.os }}-${{ matrix.compiler.cc }}${{ matrix.m32 && '-m32' || '' }}.tar.gz
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: repo
|
||||||
|
|
||||||
- name: Download tar archive
|
- name: Install packages for build
|
||||||
uses: actions/download-artifact@v3
|
run: ./ci/ci-install.bash
|
||||||
with:
|
|
||||||
name: ${{ env.VERILATOR_ARCHIVE }}
|
|
||||||
path: ${{ github.workspace }}
|
|
||||||
|
|
||||||
- name: Unpack tar archive
|
# We use specific version numbers, otherwise a Python package
|
||||||
working-directory: ${{ github.workspace }}
|
# update may add a warning and break our build
|
||||||
run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }}
|
- name: Install packages for lint
|
||||||
|
run: sudo pip3 install pylint==3.0.2 ruff==0.1.3 clang sphinx sphinx_rtd_theme sphinxcontrib-spelling breathe ruff
|
||||||
|
|
||||||
- name: Cache $CCACHE_DIR
|
- name: Configure
|
||||||
uses: actions/cache@v3
|
run: autoconf && ./configure --enable-longtests --enable-ccwarn
|
||||||
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 test dependencies
|
- name: Lint
|
||||||
run: ./ci/ci-install.bash
|
run: make -k lint-py
|
||||||
|
|
||||||
- name: Test
|
|
||||||
env:
|
|
||||||
TESTS: ${{ matrix.suite }}
|
|
||||||
run: ./ci/ci-script.bash
|
|
||||||
|
|||||||
@@ -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@v3
|
- 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,12 +7,14 @@ 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
|
||||||
CI_COMMIT: ${{ github.sha }}
|
CI_COMMIT: ${{ github.sha }}
|
||||||
CI_M32: 0
|
|
||||||
COVERAGE: 1
|
COVERAGE: 1
|
||||||
VERILATOR_ARCHIVE: verilator-coverage-${{ github.sha }}.tar.gz
|
VERILATOR_ARCHIVE: verilator-coverage-${{ github.sha }}.tar.gz
|
||||||
|
|
||||||
@@ -22,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@v3
|
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@v3
|
|
||||||
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@v3
|
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
|
||||||
|
|||||||
@@ -0,0 +1,89 @@
|
|||||||
|
---
|
||||||
|
# Build and push verilator docker image when tags are pushed to the repository.
|
||||||
|
# The following variable(s) must be configured in the github repository:
|
||||||
|
# DOCKER_HUB_NAMESPACE: docker hub namespace.
|
||||||
|
# The following secrets must be configured in the github repository:
|
||||||
|
# DOCKER_HUB_USER: user name for logging into docker hub
|
||||||
|
# DOCKER_HUB_ACCESS_TOKEN: docker hub access token.
|
||||||
|
name: Build Verilator Container
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags: ['v*']
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
manual_tag:
|
||||||
|
description: 'Git tag to use for image build'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
add_latest_tag:
|
||||||
|
description: 'Tag workflow_dispatch docker image as "latest"'
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
contexts:
|
||||||
|
- "ci/docker/run:verilator"
|
||||||
|
# - "ci/docker/buildenv:verilator-buildenv"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Extract context variables
|
||||||
|
run: |
|
||||||
|
echo "${{ matrix.contexts }}" | sed -r 's/(.*):.*/build_context=\1/' >> "$GITHUB_ENV"
|
||||||
|
echo "${{ matrix.contexts }}" | sed -r 's/.*:(.*)/image_name=\1/' >> "$GITHUB_ENV"
|
||||||
|
echo "git_tag=${GITHUB_REF#refs/*/}" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
|
- name: Use manual tag
|
||||||
|
if: ${{ inputs.manual_tag }}
|
||||||
|
run: |
|
||||||
|
echo "git_tag=${{ inputs.manual_tag }}" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
|
- name: Docker meta
|
||||||
|
id: docker_meta
|
||||||
|
uses: docker/metadata-action@v4
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
${{ vars.DOCKER_HUB_NAMESPACE }}/${{ env.image_name }}
|
||||||
|
tags: |
|
||||||
|
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=latest,enable=${{ inputs.add_latest_tag == true }}
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
with:
|
||||||
|
buildkitd-flags: --debug
|
||||||
|
|
||||||
|
- name: Login to Docker Hub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_HUB_USER }}
|
||||||
|
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build and Push to Docker
|
||||||
|
uses: docker/build-push-action@v4
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
|
||||||
|
with:
|
||||||
|
context: ${{ env.build_context }}
|
||||||
|
build-args: SOURCE_COMMIT=${{ env.git_tag }}
|
||||||
|
platforms: linux/arm64,linux/amd64
|
||||||
|
push: ${{ !env.ACT && (startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch') }}
|
||||||
|
tags: ${{ steps.docker_meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.docker_meta.outputs.labels }}
|
||||||
@@ -1,25 +1,25 @@
|
|||||||
|
---
|
||||||
# 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-24.04
|
||||||
name: Ubuntu 22.04 | format
|
name: Ubuntu 24.04 | format
|
||||||
env:
|
env:
|
||||||
CI_OS_NAME: linux
|
CI_OS_NAME: linux
|
||||||
CI_RUNS_ON: ubuntu-22.04
|
CI_RUNS_ON: ubuntu-24.04
|
||||||
CI_COMMIT: ${{ github.sha }}
|
CI_COMMIT: ${{ github.sha }}
|
||||||
CI_M32: 0
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
- name: Install packages for build
|
- name: Install packages for build
|
||||||
@@ -27,14 +27,15 @@ jobs:
|
|||||||
CI_BUILD_STAGE_NAME: build
|
CI_BUILD_STAGE_NAME: build
|
||||||
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-18 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
|
||||||
run: |
|
run: |
|
||||||
autoconf &&
|
autoconf &&
|
||||||
./configure &&
|
./configure &&
|
||||||
make -j 2 format CLANGFORMAT=clang-format-14 &&
|
make -j 2 format CLANGFORMAT=clang-format-18 &&
|
||||||
git status
|
git status
|
||||||
- name: Push
|
- name: Push
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -1,51 +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:
|
||||||
|
group: ${{ github.workflow }}-${{ github.actor }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
jobs:
|
jobs:
|
||||||
|
windows:
|
||||||
windows:
|
|
||||||
name: run on windows
|
name: run on windows
|
||||||
runs-on: windows-latest
|
runs-on: windows-2025
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
path: repo
|
path: repo
|
||||||
- name: Cache $CCACHE_DIR
|
- name: Cache $CCACHE_DIR
|
||||||
uses: actions/cache@v3
|
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@v3
|
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,75 @@
|
|||||||
|
---
|
||||||
|
# DESCRIPTION: Github actions config
|
||||||
|
# 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,72 @@
|
|||||||
|
---
|
||||||
|
# DESCRIPTION: Github actions config
|
||||||
|
# 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,128 @@
|
|||||||
|
---
|
||||||
|
# DESCRIPTION: Github actions config
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
name: reusable-rtlmeter-run
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
tag:
|
||||||
|
description: "Unique identifier for storing results"
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
runs-on:
|
||||||
|
description: "Runner to use, e.g.: ubuntu-24.04"
|
||||||
|
type: string
|
||||||
|
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-${{ inputs.tag }}-${{ 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,79 @@
|
|||||||
|
---
|
||||||
|
# DESCRIPTION: Github actions config
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
name: reusable-test
|
||||||
|
|
||||||
|
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,322 @@
|
|||||||
|
---
|
||||||
|
# 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
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- synchronize
|
||||||
|
- reopened
|
||||||
|
- labeled
|
||||||
|
- unlabeled
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}
|
||||||
|
cancel-in-progress: ${{ github.event_name != 'schedule' }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
start:
|
||||||
|
name: Start
|
||||||
|
# Only run scheduled jobs if explicitly enabled for that repo (e.g.: not on forks)
|
||||||
|
# Only run pull request jobs if labelled as needing an RTLMeter run
|
||||||
|
# Always run workflow dispatch jobs
|
||||||
|
if: |
|
||||||
|
(github.event_name == 'schedule'
|
||||||
|
&& vars.ENABLE_SCHEDULED_JOBS == 'true') ||
|
||||||
|
(github.event_name == 'pull_request'
|
||||||
|
&& contains(github.event.pull_request.labels.*.name, 'pr: rtlmeter')) ||
|
||||||
|
(github.event_name == 'workflow_dispatch')
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
- name: Startup
|
||||||
|
run: echo
|
||||||
|
|
||||||
|
build-gcc:
|
||||||
|
name: Build GCC
|
||||||
|
needs: start
|
||||||
|
uses: ./.github/workflows/reusable-rtlmeter-build.yml
|
||||||
|
with:
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
cc: gcc
|
||||||
|
|
||||||
|
build-clang:
|
||||||
|
name: Build Clang
|
||||||
|
needs: start
|
||||||
|
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:
|
||||||
|
tag: gcc
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
cc: gcc
|
||||||
|
cases: ${{ matrix.cases }}
|
||||||
|
run-name: "gcc"
|
||||||
|
compileArgs: ""
|
||||||
|
executeArgs: ""
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
max-parallel: ${{ github.event == 'schedule' && 2 || 7 }}
|
||||||
|
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:
|
||||||
|
tag: clang
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
cc: clang
|
||||||
|
cases: ${{ matrix.cases }}
|
||||||
|
run-name: "clang --threads 4"
|
||||||
|
compileArgs: "--threads 4"
|
||||||
|
executeArgs: ""
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
max-parallel: ${{ github.event == 'schedule' && 2 || 7 }}
|
||||||
|
matrix:
|
||||||
|
cases:
|
||||||
|
- "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
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
tag:
|
||||||
|
- gcc
|
||||||
|
- clang
|
||||||
|
steps:
|
||||||
|
- name: Checkout RTLMeter
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: "verilator/rtlmeter"
|
||||||
|
path: rtlmeter
|
||||||
|
- name: Setup RTLMeter venv
|
||||||
|
working-directory: rtlmeter
|
||||||
|
run: make venv
|
||||||
|
- name: Download all results
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: rtlmeter-results-${{ matrix.tag }}-*
|
||||||
|
path: all-results-${{ matrix.tag }}
|
||||||
|
merge-multiple: true
|
||||||
|
- name: Combine results
|
||||||
|
working-directory: rtlmeter
|
||||||
|
run: |
|
||||||
|
./rtlmeter collate ../all-results-${{ matrix.tag }}/*.json > ../all-results-${{ matrix.tag }}.json
|
||||||
|
- name: Upload combined results
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
path: all-results-${{ matrix.tag }}.json
|
||||||
|
name: all-results-${{ matrix.tag }}
|
||||||
|
overwrite: true
|
||||||
|
retention-days: 30
|
||||||
|
|
||||||
|
publish-scheduled-results:
|
||||||
|
name: Publish results to verilator/verilator-rtlmeter-results
|
||||||
|
needs: combine-results
|
||||||
|
# Only run on scheduled builds on the main repository. We also restrict
|
||||||
|
# the publishing to run only on the first run_attempt. This is required
|
||||||
|
# to prevent multiple uploads the same day (if rerunning), as the
|
||||||
|
# dashboard UI currently assumes there is only one data point per
|
||||||
|
# calendar day. Results from reruns can be imported manually if needed.
|
||||||
|
if: ${{ github.event_name == 'schedule' && github.repository == 'verilator/verilator' && github.run_attempt == 1 && contains(needs.*.result, 'success') && !cancelled() }}
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
- name: Download combined results
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: all-results-*
|
||||||
|
path: results
|
||||||
|
merge-multiple: true
|
||||||
|
- name: Upload published results
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
path: results/*.json
|
||||||
|
name: published-results
|
||||||
|
# Pushing to verilator/verilator-rtlmeter-results requires elevated permissions
|
||||||
|
- name: Generate access token
|
||||||
|
id: generate-token
|
||||||
|
uses: actions/[email protected]
|
||||||
|
with:
|
||||||
|
app-id: ${{ vars.VERILATOR_CI_ID }}
|
||||||
|
private-key: ${{ secrets.VERILATOR_CI_KEY }}
|
||||||
|
owner: verilator
|
||||||
|
repositories: verilator-rtlmeter-results
|
||||||
|
permission-contents: write
|
||||||
|
- name: Checkout verilator-rtlmeter-results
|
||||||
|
uses: actions/checkout@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
|
||||||
|
|
||||||
|
#publish-pr-results:
|
||||||
|
# name: Publish results to Pull Request
|
||||||
|
# needs: combine-results
|
||||||
|
# if: ${{ github.event_name == 'pull_request' && github.repository == 'verilator/verilator' && github.run_attempt == 1 && contains(needs.*.result, 'success') && !cancelled() }}
|
||||||
|
# runs-on: ubuntu-24.04
|
||||||
|
# steps:
|
||||||
|
# - name: Checkout RTLMeter
|
||||||
|
# uses: actions/checkout@v4
|
||||||
|
# with:
|
||||||
|
# repository: "verilator/rtlmeter"
|
||||||
|
# path: rtlmeter
|
||||||
|
# - name: Setup RTLMeter venv
|
||||||
|
# working-directory: rtlmeter
|
||||||
|
# run: make venv
|
||||||
|
# - name: Download combined results
|
||||||
|
# uses: actions/download-artifact@v4
|
||||||
|
# with:
|
||||||
|
# pattern: all-results-*
|
||||||
|
# path: all-results
|
||||||
|
# merge-multiple: true
|
||||||
|
# - name: Get scheduled run info
|
||||||
|
# id: scheduled-info
|
||||||
|
# run:
|
||||||
|
# IDLATEST=$(gh run list --workflow RTLMeter --event schedule --status success --limit 1 --json databaseId --jq ".[0].databaseId")
|
||||||
|
# echo "id=$IDLATEST" >> $GITHUB_OUTPUT
|
||||||
|
# URL=$(gh run view $IDLATEST --json url --jq ".url")
|
||||||
|
# echo "url=$URL" >> $GITHUB_OUTPUT
|
||||||
|
# NUM=$(gh run view $IDLATEST --json number --jq ".number")
|
||||||
|
# echo "num=$NUM" >> $GITHUB_OUTPUT
|
||||||
|
# # Fetching artifacts from different workflow requires elevated privilege
|
||||||
|
# - name: Generate access token
|
||||||
|
# id: generate-token
|
||||||
|
# uses: actions/[email protected]
|
||||||
|
# with:
|
||||||
|
# app-id: ${{ vars.VERILATOR_CI_ID }}
|
||||||
|
# private-key: ${{ secrets.VERILATOR_CI_KEY }}
|
||||||
|
# owner: verilator
|
||||||
|
# repositories: verilator
|
||||||
|
# permission-actions: read
|
||||||
|
# - name: Download scheduled run results
|
||||||
|
# uses: actions/download-artifact@v4
|
||||||
|
# with:
|
||||||
|
# name: published-results
|
||||||
|
# path: nightly-results
|
||||||
|
# run-id: ${{ steps.schedueld-info.outputs.id }}
|
||||||
|
# github-token: ${{ steps.generate-token.outputs.token }}
|
||||||
|
# # TODO: diff and present
|
||||||
|
|
||||||
|
# Create GitHub issue for failed schedueld jobs
|
||||||
|
# This should always be the last job (we want an issue if anything breaks)
|
||||||
|
create-issue:
|
||||||
|
name: Create issue on failure
|
||||||
|
needs: publish-scheduled-results
|
||||||
|
if: ${{ github.event_name == 'schedule' && github.repository == 'verilator/verilator' && github.run_attempt == 1 && failure() && !cancelled() }}
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
# Creating issues requires elevated privilege
|
||||||
|
- name: Generate access token
|
||||||
|
id: generate-token
|
||||||
|
uses: actions/[email protected]
|
||||||
|
with:
|
||||||
|
app-id: ${{ vars.VERILATOR_CI_ID }}
|
||||||
|
private-key: ${{ secrets.VERILATOR_CI_KEY }}
|
||||||
|
owner: verilator
|
||||||
|
repositories: verilator
|
||||||
|
permission-issues: write
|
||||||
|
- name: Create issue
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
|
run: |
|
||||||
|
echo "This issue was created automatically by the GitHub Actions CI due to the failure of a scheduled RTLMeter run." >> body.txt
|
||||||
|
echo "" >> body.txt
|
||||||
|
echo "Workflow status: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> body.txt
|
||||||
|
gh issue --repo ${{ github.repository }} create \
|
||||||
|
--title "RTLMeter run #${{ github.run_number }} Failed" \
|
||||||
|
--body-file body.txt \
|
||||||
|
--label new \
|
||||||
|
--assignee gezalore,wsnyder
|
||||||
+13
-4
@@ -29,15 +29,24 @@ 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/*
|
||||||
/.vscode/
|
/.vscode/
|
||||||
|
/.idea/
|
||||||
|
/cmake-build-*/
|
||||||
|
/test_regress/snapshot/
|
||||||
|
xmverilog.*
|
||||||
|
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
|
||||||
+92
-28
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
#
|
#
|
||||||
# Copyright 2003-2023 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,48 +14,87 @@
|
|||||||
|
|
||||||
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.010
|
Verilator
|
||||||
|
VERSION 5.040
|
||||||
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 (MSVC)
|
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()
|
||||||
|
|
||||||
|
set(OBJCACHE "" CACHE STRING "Path for ccache, auto-detected if empty")
|
||||||
|
option(OBJCACHE_ENABLED "Compile Verilator with ccache" ON)
|
||||||
|
|
||||||
|
if(OBJCACHE_ENABLED)
|
||||||
|
if(OBJCACHE STREQUAL "")
|
||||||
|
find_program(OBJCACHE_PATH ccache)
|
||||||
|
if(OBJCACHE_PATH STREQUAL "OBJCACHE_PATH-NOTFOUND")
|
||||||
|
set(OBJCACHE_PATH "")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(OBJCACHE_PATH "${OBJCACHE}")
|
||||||
|
endif()
|
||||||
|
if(NOT OBJCACHE_PATH STREQUAL "")
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${OBJCACHE_PATH}" --version
|
||||||
|
OUTPUT_VARIABLE objcache_version
|
||||||
|
)
|
||||||
|
string(REGEX MATCH "[^\n\r]+" objcache_version "${objcache_version}")
|
||||||
|
message(
|
||||||
|
STATUS
|
||||||
|
"Found ccache: ${OBJCACHE_PATH} (\"${objcache_version}\")"
|
||||||
|
)
|
||||||
|
set(CMAKE_CXX_COMPILER_LAUNCHER "${OBJCACHE_PATH}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
find_package(BISON)
|
find_package(BISON)
|
||||||
find_package(FLEX)
|
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})
|
||||||
@@ -74,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]*"
|
||||||
|
|||||||
+294
-171
@@ -7,7 +7,7 @@
|
|||||||
#
|
#
|
||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
#
|
#
|
||||||
# Copyright 2003-2023 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/xml_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,19 +173,26 @@ 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
|
||||||
|
|
||||||
|
.PHONY: test-snap test-diff
|
||||||
|
test-snap test-diff:
|
||||||
|
$(MAKE) -C test_regress $@
|
||||||
|
|
||||||
examples: all_nomsg
|
examples: all_nomsg
|
||||||
for p in $(EXAMPLES) ; do \
|
for p in $(EXAMPLES) ; do \
|
||||||
$(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)
|
||||||
|
|
||||||
@@ -188,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:
|
||||||
@@ -199,42 +213,93 @@ verilator.html:
|
|||||||
verilator.pdf: Makefile
|
verilator.pdf: Makefile
|
||||||
$(MAKE) -C docs verilator.pdf
|
$(MAKE) -C docs verilator.pdf
|
||||||
|
|
||||||
# See uninstall also - don't put wildcards in this variable, it might uninstall other stuff
|
TAGFILES = ${srcdir}/*/*.cpp ${srcdir}/*/*.h ${srcdir}/*/*.in \
|
||||||
VL_INST_BIN_FILES = verilator verilator_bin$(EXEEXT) verilator_bin_dbg$(EXEEXT) verilator_coverage_bin_dbg$(EXEEXT) \
|
${srcdir}/*.in ${srcdir}/*.pod
|
||||||
verilator_ccache_report verilator_coverage verilator_difftree verilator_gantt verilator_includer verilator_profcfunc
|
|
||||||
# Some scripts go into both the search path and pkgdatadir,
|
TAGS: $(TAGFILES)
|
||||||
# so they can be found by the user, and under $VERILATOR_ROOT.
|
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
|
||||||
|
# Don't put wildcards in these variables, it might cause an uninstall of other stuff
|
||||||
|
VL_INST_PUBLIC_SCRIPT_FILES = \
|
||||||
|
verilator \
|
||||||
|
verilator_coverage \
|
||||||
|
verilator_gantt \
|
||||||
|
verilator_profcfunc \
|
||||||
|
|
||||||
|
VL_INST_PUBLIC_BIN_FILES = \
|
||||||
|
verilator_bin$(EXEEXT) \
|
||||||
|
verilator_bin_dbg$(EXEEXT) \
|
||||||
|
verilator_coverage_bin_dbg$(EXEEXT) \
|
||||||
|
|
||||||
|
# Private executabels intended to be invoked by internals
|
||||||
|
# Don't put wildcards in these variables, it might cause an uninstall of other stuff
|
||||||
|
VL_INST_PRIVATE_SCRIPT_FILES = \
|
||||||
|
verilator_ccache_report \
|
||||||
|
verilator_includer \
|
||||||
|
|
||||||
VL_INST_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_* \
|
||||||
|
|
||||||
installbin:
|
mkbindirs:
|
||||||
$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
|
|
||||||
( cd ${srcdir}/bin ; $(INSTALL_PROGRAM) verilator $(DESTDIR)$(bindir)/verilator )
|
|
||||||
( cd ${srcdir}/bin ; $(INSTALL_PROGRAM) verilator_coverage $(DESTDIR)$(bindir)/verilator_coverage )
|
|
||||||
( cd ${srcdir}/bin ; $(INSTALL_PROGRAM) verilator_gantt $(DESTDIR)$(bindir)/verilator_gantt )
|
|
||||||
( cd ${srcdir}/bin ; $(INSTALL_PROGRAM) verilator_profcfunc $(DESTDIR)$(bindir)/verilator_profcfunc )
|
|
||||||
( cd bin ; $(INSTALL_PROGRAM) verilator_bin$(EXEEXT) $(DESTDIR)$(bindir)/verilator_bin$(EXEEXT) )
|
|
||||||
( cd bin ; $(INSTALL_PROGRAM) verilator_bin_dbg$(EXEEXT) $(DESTDIR)$(bindir)/verilator_bin_dbg$(EXEEXT) )
|
|
||||||
( cd bin ; $(INSTALL_PROGRAM) verilator_coverage_bin_dbg$(EXEEXT) $(DESTDIR)$(bindir)/verilator_coverage_bin_dbg$(EXEEXT) )
|
|
||||||
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/bin
|
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/bin
|
||||||
( cd ${srcdir}/bin ; $(INSTALL_PROGRAM) verilator_includer $(DESTDIR)$(pkgdatadir)/bin/verilator_includer )
|
$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
|
||||||
( cd ${srcdir}/bin ; $(INSTALL_PROGRAM) verilator_ccache_report $(DESTDIR)$(pkgdatadir)/bin/verilator_ccache_report )
|
|
||||||
( cd ${srcdir}/bin ; $(INSTALL_PROGRAM) verilator_difftree $(DESTDIR)$(pkgdatadir)/bin/verilator_difftree )
|
installbin: | mkbindirs
|
||||||
|
cd $(srcdir)/bin; \
|
||||||
|
for p in $(VL_INST_PUBLIC_SCRIPT_FILES) ; do \
|
||||||
|
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \
|
||||||
|
done
|
||||||
|
perl -p -i -e 'use File::Spec;' \
|
||||||
|
-e' $$path = File::Spec->abs2rel("$(realpath $(DESTDIR)$(pkgdatadir))", "$(realpath $(DESTDIR)$(bindir))");' \
|
||||||
|
-e 's/my \$$verilator_pkgdatadir_relpath = .*/my \$$verilator_pkgdatadir_relpath = "$$path";/g' \
|
||||||
|
-- "$(DESTDIR)/$(bindir)/verilator"
|
||||||
|
cd bin; \
|
||||||
|
for p in $(VL_INST_PUBLIC_BIN_FILES) ; do \
|
||||||
|
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \
|
||||||
|
done
|
||||||
|
cd $(srcdir)/bin; \
|
||||||
|
for p in $(VL_INST_PRIVATE_SCRIPT_FILES) ; do \
|
||||||
|
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(pkgdatadir)/bin/$$p; \
|
||||||
|
done
|
||||||
|
|
||||||
|
installredirect: installbin | mkbindirs
|
||||||
|
cp ${srcdir}/bin/redirect ${srcdir}/bin/redirect.tmp
|
||||||
|
perl -p -i -e 'use File::Spec;' \
|
||||||
|
-e' $$path = File::Spec->abs2rel("$(realpath $(DESTDIR)$(bindir))", "$(realpath $(DESTDIR)$(pkgdatadir)/bin)");' \
|
||||||
|
-e 's/RELPATH.*/"$$path";/g' -- "${srcdir}/bin/redirect.tmp"
|
||||||
|
cd $(srcdir)/bin; \
|
||||||
|
for p in $(VL_INST_PUBLIC_SCRIPT_FILES) $(VL_INST_PUBLIC_BIN_FILES) ; do \
|
||||||
|
$(INSTALL_PROGRAM) redirect.tmp $(DESTDIR)$(pkgdatadir)/bin/$$p; \
|
||||||
|
done
|
||||||
|
rm ${srcdir}/bin/redirect.tmp
|
||||||
|
|
||||||
# Man files can either be part of the original kit, or built in current directory
|
# Man files can either be part of the original kit, or built in current directory
|
||||||
# So important we use $^ so VPATH is searched
|
# So important we use $^ so VPATH is searched
|
||||||
@@ -265,7 +330,7 @@ installdata:
|
|||||||
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/examples/cmake_tracing_c
|
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/examples/cmake_tracing_c
|
||||||
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/examples/cmake_tracing_sc
|
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/examples/cmake_tracing_sc
|
||||||
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/examples/cmake_protect_lib
|
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/examples/cmake_protect_lib
|
||||||
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/examples/xml_py
|
$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/examples/json_py
|
||||||
cd $(srcdir) \
|
cd $(srcdir) \
|
||||||
; for p in $(VL_INST_DATA_SRCDIR_FILES) ; do \
|
; for p in $(VL_INST_DATA_SRCDIR_FILES) ; do \
|
||||||
$(INSTALL_DATA) $$p $(DESTDIR)$(pkgdatadir)/$$p; \
|
$(INSTALL_DATA) $$p $(DESTDIR)$(pkgdatadir)/$$p; \
|
||||||
@@ -277,8 +342,11 @@ installdata:
|
|||||||
|
|
||||||
# We don't trust rm -rf, so rmdir instead as it will fail if user put in other files
|
# We don't trust rm -rf, so rmdir instead as it will fail if user put in other files
|
||||||
uninstall:
|
uninstall:
|
||||||
-cd $(DESTDIR)$(bindir) && rm -f $(VL_INST_BIN_FILES)
|
-cd $(DESTDIR)$(bindir) && rm -f $(VL_INST_PUBLIC_SCRIPT_FILES)
|
||||||
-cd $(DESTDIR)$(pkgdatadir)/bin && rm -f $(VL_INST_BIN_FILES)
|
-cd $(DESTDIR)$(bindir) && rm -f $(VL_INST_PUBLIC_BIN_FILES)
|
||||||
|
-cd $(DESTDIR)$(pkgdatadir)/bin && rm -f $(VL_INST_PUBLIC_SCRIPT_FILES)
|
||||||
|
-cd $(DESTDIR)$(pkgdatadir)/bin && rm -f $(VL_INST_PUBLIC_BIN_FILES)
|
||||||
|
-cd $(DESTDIR)$(pkgdatadir)/bin && rm -f $(VL_INST_PRIVATE_SCRIPT_FILES)
|
||||||
-cd $(DESTDIR)$(mandir)/man1 && rm -f $(VL_INST_MAN_FILES)
|
-cd $(DESTDIR)$(mandir)/man1 && rm -f $(VL_INST_MAN_FILES)
|
||||||
-cd $(DESTDIR)$(pkgdatadir) && rm -f $(VL_INST_INC_BLDDIR_FILES)
|
-cd $(DESTDIR)$(pkgdatadir) && rm -f $(VL_INST_INC_BLDDIR_FILES)
|
||||||
-cd $(DESTDIR)$(pkgdatadir) && rm -f $(VL_INST_INC_SRCDIR_FILES)
|
-cd $(DESTDIR)$(pkgdatadir) && rm -f $(VL_INST_INC_SRCDIR_FILES)
|
||||||
@@ -301,65 +369,78 @@ uninstall:
|
|||||||
-rmdir $(DESTDIR)$(pkgdatadir)/examples/cmake_tracing_c
|
-rmdir $(DESTDIR)$(pkgdatadir)/examples/cmake_tracing_c
|
||||||
-rmdir $(DESTDIR)$(pkgdatadir)/examples/cmake_tracing_sc
|
-rmdir $(DESTDIR)$(pkgdatadir)/examples/cmake_tracing_sc
|
||||||
-rmdir $(DESTDIR)$(pkgdatadir)/examples/cmake_protect_lib
|
-rmdir $(DESTDIR)$(pkgdatadir)/examples/cmake_protect_lib
|
||||||
-rmdir $(DESTDIR)$(pkgdatadir)/examples/xml_py
|
-rmdir $(DESTDIR)$(pkgdatadir)/examples/json_py
|
||||||
-rmdir $(DESTDIR)$(pkgdatadir)/examples
|
-rmdir $(DESTDIR)$(pkgdatadir)/examples
|
||||||
-rmdir $(DESTDIR)$(pkgdatadir)
|
-rmdir $(DESTDIR)$(pkgdatadir)
|
||||||
-rmdir $(DESTDIR)$(pkgconfigdir)
|
-rmdir $(DESTDIR)$(pkgconfigdir)
|
||||||
|
|
||||||
install: all_nomsg install-all
|
install: all_nomsg install-all
|
||||||
install-all: installbin installman installdata install-msg
|
install-all: installbin installredirect installman installdata install-msg
|
||||||
|
|
||||||
install-here: installman info
|
install-here: installman info
|
||||||
|
|
||||||
# Use --xml flag to see the cppcheck code to use for suppression
|
install-msg:
|
||||||
CPPCHECK1_CPP = $(wildcard $(srcdir)/include/*.cpp)
|
@echo
|
||||||
CPPCHECK2_CPP = $(wildcard $(srcdir)/examples/*/*.cpp)
|
@echo "Installed binaries to $(DESTDIR)$(bindir)/verilator"
|
||||||
CPPCHECK3_CPP = $(wildcard $(srcdir)/src/Vlc*.cpp)
|
@echo "Installed man to $(DESTDIR)$(mandir)/man1"
|
||||||
CPPCHECK4_CPP = $(wildcard $(srcdir)/src/V3[A-D]*.cpp $(srcdir)/src/Verilator*.cpp)
|
@echo "Installed examples to $(DESTDIR)$(pkgdatadir)/examples"
|
||||||
CPPCHECK5_CPP = $(wildcard $(srcdir)/src/V3[E-I]*.cpp)
|
@echo
|
||||||
CPPCHECK6_CPP = $(wildcard $(srcdir)/src/V3[P-Z]*.cpp)
|
@echo "For documentation see 'man verilator' or 'verilator --help'"
|
||||||
CPPCHECK7_CPP = $(wildcard $(srcdir)/src/V3[L-R]*.cpp)
|
@echo "For forums and to report bugs see https://verilator.org"
|
||||||
CPPCHECK8_CPP = $(wildcard $(srcdir)/src/V3[S-Z]*.cpp)
|
@echo
|
||||||
CHECK_CPP = $(CPPCHECK1_CPP) $(CPPCHECK2_CPP) $(CPPCHECK3_CPP) $(CPPCHECK4_CPP) \
|
|
||||||
$(CPPCHECK5_CPP) $(CPPCHECK6_CPP) $(CPPCHECK7_CPP) $(CPPCHECK8_CPP)
|
|
||||||
CHECK_H = $(wildcard \
|
|
||||||
$(srcdir)/include/*.h \
|
|
||||||
$(srcdir)/src/*.h )
|
|
||||||
CHECK_YL = $(wildcard \
|
|
||||||
$(srcdir)/src/*.y \
|
|
||||||
$(srcdir)/src/*.l )
|
|
||||||
CPPCHECK = src/cppcheck_filtered cppcheck
|
|
||||||
CPPCHECK_FLAGS = --enable=all --inline-suppr \
|
|
||||||
--suppress=cstyleCast --suppress=useInitializationList \
|
|
||||||
--suppress=nullPointer --suppress=nullPointerRedundantCheck --suppress=ctunullpointer \
|
|
||||||
--suppress=unusedFunction --suppress=unusedScopedObject \
|
|
||||||
--suppress=useStlAlgorithm
|
|
||||||
CPPCHECK_FLAGS += --xml
|
|
||||||
CPPCHECK_DEP = $(subst .cpp,.cppcheck,$(CHECK_CPP))
|
|
||||||
CPPCHECK_INC = -I$(srcdir)/include -I$(srcdir)/src/obj_dbg -I$(srcdir)/src
|
|
||||||
|
|
||||||
cppcheck: cppcheck-1 cppcheck-2 cppcheck-3 cppcheck-4 cppcheck-5 cppcheck-6 cppcheck-7 cppcheck-8
|
######################################################################
|
||||||
cppcheck-1:
|
# Format/Lint
|
||||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK1_CPP)
|
|
||||||
cppcheck-2:
|
CPPCHECK_VERILATOR_CPP = $(wildcard $(srcdir)/src/V3*.cpp $(srcdir)/src/Verilator*.cpp)
|
||||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK2_CPP)
|
CPPCHECK_RUNTIME_CPP = $(wildcard $(srcdir)/include/*.cpp)
|
||||||
cppcheck-3:
|
CPPCHECK_VLC_CPP = $(wildcard $(srcdir)/src/Vlc*.cpp)
|
||||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK3_CPP)
|
CPPCHECK_EXAMPLES_CPP = $(wildcard $(srcdir)/examples/*/*.cpp)
|
||||||
cppcheck-4:
|
CHECK_CPP = $(CPPCHECK_VERILATOR_CPP) $(CPPCHECK_RUNTIME_CPP) $(CPPCHECK_VLC_CPP) $(CPPCHECK_EXAMPLES_CPP)
|
||||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK4_CPP)
|
CHECK_H = $(wildcard \
|
||||||
cppcheck-5:
|
$(srcdir)/include/*.h \
|
||||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK5_CPP)
|
$(srcdir)/src/*.h )
|
||||||
cppcheck-6:
|
CHECK_YL = $(wildcard \
|
||||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK6_CPP)
|
$(srcdir)/src/*.y \
|
||||||
cppcheck-7:
|
$(srcdir)/src/*.l )
|
||||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK7_CPP)
|
CPPCHECK = cppcheck
|
||||||
cppcheck-8:
|
CPPCHECK_JOBS = $(shell nproc)
|
||||||
$(CPPCHECK) $(CPPCHECK_FLAGS) -DVL_DEBUG=1 -DVL_CPPCHECK=1 $(CPPCHECK_INC) $(CPPCHECK8_CPP)
|
CPPCHECK_CACHE = $(srcdir)/src/obj_dbg/cppcheck-cache
|
||||||
|
CPPCHECK_FLAGS = --enable=all
|
||||||
|
CPPCHECK_FLAGS += --inline-suppr
|
||||||
|
CPPCHECK_FLAGS += --suppressions-list=$(srcdir)/src/cppcheck-suppressions.txt
|
||||||
|
CPPCHECK_FLAGS += --cppcheck-build-dir=$(CPPCHECK_CACHE)
|
||||||
|
CPPCHECK_FLAGS += -DVL_DEBUG=1 -DVL_CPPCHECK=1 -DINFILTER_PIPE=1 -D__GNUC__=1
|
||||||
|
CPPCHECK_FLAGS += -j$(CPPCHECK_JOBS)
|
||||||
|
CPPCHECK_INC = -I$(srcdir)/include
|
||||||
|
CPPCHECK_INC += -I$(srcdir)/include/gtkwave
|
||||||
|
CPPCHECK_INC += -I$(srcdir)/include/vltstd
|
||||||
|
CPPCHECK_INC += -I$(srcdir)/src/obj_dbg
|
||||||
|
CPPCHECK_INC += -I$(srcdir)/src
|
||||||
|
|
||||||
|
$(CPPCHECK_CACHE): $(CHECK_CPP) $(CHECK_H) $(CHECK_YL)
|
||||||
|
/bin/rm -rf $@
|
||||||
|
/bin/mkdir -p $@
|
||||||
|
|
||||||
|
cppcheck-verilator: | $(CPPCHECK_CACHE)
|
||||||
|
$(CPPCHECK) $(CPPCHECK_FLAGS) $(CPPCHECK_INC) $(CPPCHECK_VERILATOR_CPP)
|
||||||
|
cppcheck-runtime: | $(CPPCHECK_CACHE)
|
||||||
|
$(CPPCHECK) $(CPPCHECK_FLAGS) $(CPPCHECK_INC) $(CPPCHECK_RUNTIME_CPP)
|
||||||
|
cppcheck-vlc: | $(CPPCHECK_CACHE)
|
||||||
|
$(CPPCHECK) $(CPPCHECK_FLAGS) $(CPPCHECK_INC) $(CPPCHECK_VLC_CPP)
|
||||||
|
cppcheck-examples: | $(CPPCHECK_CACHE)
|
||||||
|
$(CPPCHECK) $(CPPCHECK_FLAGS) $(CPPCHECK_INC) $(CPPCHECK_EXAMPLES_CPP)
|
||||||
|
|
||||||
|
cppcheck:
|
||||||
|
$(MAKE) cppcheck-vlc
|
||||||
|
$(MAKE) cppcheck-examples
|
||||||
|
$(MAKE) cppcheck-runtime
|
||||||
|
$(MAKE) cppcheck-verilator
|
||||||
|
|
||||||
CLANGTIDY = clang-tidy
|
CLANGTIDY = 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
|
||||||
@@ -378,81 +459,129 @@ 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-18
|
||||||
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
|
||||||
|| echo "*** You are not using clang-format-14, indents may differ from master's ***"
|
@$(CLANGFORMAT) --version | fgrep 'version 18' > /dev/null \
|
||||||
|
|| echo "*** You are not using clang-format-18, indents may differ from master's ***"
|
||||||
$(CLANGFORMAT) $(CLANGFORMAT_FLAGS) $(CLANGFORMAT_FILES)
|
$(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/xml_py/vl_file_copy \
|
|
||||||
examples/xml_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 \
|
|
||||||
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/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) --version
|
||||||
$(YAPF) $(YAPF_FLAGS) $(PY_FILES)
|
$(YAPF) $(YAPF_FLAGS) $(PY_FILES)
|
||||||
|
|
||||||
FLAKE8 = flake8
|
GERSEMI = gersemi
|
||||||
FLAKE8_FLAGS = \
|
GERSEMI_FLAGS = -i --no-warn-about-unknown-commands
|
||||||
--extend-exclude=fastcov.py \
|
|
||||||
--ignore=E123,E129,E251,E402,E501,W503,W504,E701
|
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_FLAGS = check --ignore=E402,E501,E701
|
||||||
|
|
||||||
|
# "make -k" so can see all tool result errors
|
||||||
lint-py:
|
lint-py:
|
||||||
-$(FLAKE8) $(FLAKE8_FLAGS) $(PY_PROGRAMS)
|
$(MAKE) -k lint-py-pylint lint-py-pylint-tests lint-py-ruff
|
||||||
-$(PYLINT) $(PYLINT_FLAGS) $(PY_PROGRAMS)
|
|
||||||
|
|
||||||
format-pl-exec:
|
lint-py-pylint:
|
||||||
-chmod a+x test_regress/t/*.pl
|
$(PYLINT) $(PYLINT_FLAGS) $(PY_PROGRAMS)
|
||||||
|
|
||||||
install-msg:
|
lint-py-pylint-tests:
|
||||||
@echo
|
$(PYLINT) $(PYLINT_TEST_FLAGS) $(PY_TEST_FILES) | $(PYTHON3) nodist/lint_py_test_filter
|
||||||
@echo "Installed binaries to $(DESTDIR)$(bindir)/verilator"
|
|
||||||
@echo "Installed man to $(DESTDIR)$(mandir)/man1"
|
lint-py-ruff:
|
||||||
@echo "Installed examples to $(DESTDIR)$(pkgdatadir)/examples"
|
$(RUFF) $(RUFF_FLAGS) $(PY_PROGRAMS)
|
||||||
@echo
|
|
||||||
@echo "For documentation see 'man verilator' or 'verilator --help'"
|
format-exec:
|
||||||
@echo "For forums and to report bugs see https://verilator.org"
|
-chmod a+x test_regress/t/*.py
|
||||||
@echo
|
|
||||||
|
######################################################################
|
||||||
|
# Configure
|
||||||
|
|
||||||
IN_WILD := ${srcdir}/*.in ${srcdir}/*/*.in
|
IN_WILD := ${srcdir}/*.in ${srcdir}/*/*.in
|
||||||
|
|
||||||
# autoheader might not change config_build.h.in, so touch it
|
# autoheader might not change config_package.h.in, so touch it
|
||||||
${srcdir}/config_build.h: ${srcdir}/config_build.h.in configure
|
${srcdir}/config_package.h: ${srcdir}/config_package.h.in configure
|
||||||
cd ${srcdir} && autoheader
|
cd ${srcdir} && autoheader
|
||||||
touch $@
|
touch $@
|
||||||
Makefile: Makefile.in config.status $(IN_WILD)
|
Makefile: Makefile.in config.status $(IN_WILD)
|
||||||
@@ -468,6 +597,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."
|
||||||
@@ -487,6 +619,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
|
||||||
@@ -498,17 +632,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
|
||||||
|
|
||||||
|
|||||||
+29
-27
@@ -1,18 +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/License-LGPL%20v3-blue.svg
|
|badge1| |badge2| |badge3| |badge4| |badge5| |badge7| |badge8|
|
||||||
:target: https://www.gnu.org/licenses/lgpl-3.0]
|
|
||||||
.. image:: https://img.shields.io/badge/License-Artistic%202.0-0298c3.svg
|
.. |badge1| image:: https://img.shields.io/badge/Website-Verilator.org-181717.svg
|
||||||
|
:target: https://verilator.org
|
||||||
|
.. |badge2| image:: https://img.shields.io/badge/License-LGPL%20v3-blue.svg
|
||||||
|
:target: https://www.gnu.org/licenses/lgpl-3.0
|
||||||
|
.. |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://api.codacy.com/project/badge/Grade/fa78caa433c84a4ab9049c43e9debc6f
|
.. |badge5| image:: https://img.shields.io/docker/pulls/verilator/verilator
|
||||||
:target: https://www.codacy.com/gh/verilator/verilator
|
:target: https://hub.docker.com/r/verilator/verilator
|
||||||
.. image:: https://codecov.io/gh/verilator/verilator/branch/master/graph/badge.svg
|
.. |badge7| image:: https://github.com/verilator/verilator/workflows/build/badge.svg
|
||||||
:target: https://codecov.io/gh/verilator/verilator
|
|
||||||
.. image:: https://github.com/verilator/verilator/workflows/build/badge.svg
|
|
||||||
:target: https://github.com/verilator/verilator/actions?query=workflow%3Abuild
|
:target: https://github.com/verilator/verilator/actions?query=workflow%3Abuild
|
||||||
|
.. |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
|
||||||
@@ -57,17 +61,16 @@ files, the "Verilated" code.
|
|||||||
|
|
||||||
These Verilated C++/SystemC files are then compiled by a C++ compiler
|
These Verilated C++/SystemC files are then compiled by a C++ compiler
|
||||||
(gcc/clang/MSVC++), optionally along with a user's own C++/SystemC wrapper
|
(gcc/clang/MSVC++), optionally along with a user's own C++/SystemC wrapper
|
||||||
file to instantiate the Verilated model. Executing the resulting executable
|
file, to instantiate the Verilated model. Executing the resulting
|
||||||
performs the design simulation. Verilator also supports linking Verilated
|
executable performs the design simulation. Verilator also supports linking
|
||||||
generated libraries, optionally encrypted, into other simulators.
|
Verilated generated libraries, optionally encrypted, into other simulators.
|
||||||
|
|
||||||
Verilator may not be the best choice if you are expecting a full-featured
|
Verilator may not be the best choice if you are expecting a full-featured
|
||||||
replacement for a closed-source Verilog simulator, needs SDF annotation,
|
replacement for a closed-source Verilog simulator, need SDF annotation,
|
||||||
mixed-signal simulation, or are doing a quick class project (we recommend
|
mixed-signal simulation, or are doing a quick class project (we recommend
|
||||||
`Icarus Verilog`_ for classwork.) However, if you are looking for a path
|
`Icarus Verilog`_ for classwork). However, if you are looking for a path
|
||||||
to migrate SystemVerilog to C++/SystemC, or want high-speed simulation of
|
to migrate SystemVerilog to C++/SystemC, or want high-speed simulation of
|
||||||
synthesizable designs containing limited verification constructs, Verilator
|
designs, Verilator is the tool for you.
|
||||||
is the tool for you.
|
|
||||||
|
|
||||||
|
|
||||||
Performance
|
Performance
|
||||||
@@ -77,17 +80,16 @@ Verilator does not directly translate Verilog HDL to C++ or SystemC. Rather,
|
|||||||
Verilator compiles your code into a much faster optimized and optionally
|
Verilator compiles your code into a much faster optimized and optionally
|
||||||
thread-partitioned model, which is in turn wrapped inside a C++/SystemC
|
thread-partitioned model, which is in turn wrapped inside a C++/SystemC
|
||||||
module. The results are a compiled Verilog model that executes even on a
|
module. The results are a compiled Verilog model that executes even on a
|
||||||
single-thread over 10x faster than standalone SystemC, and on a single
|
single thread over 10x faster than standalone SystemC, and on a single
|
||||||
thread is about 100 times faster than interpreted Verilog simulators such
|
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 the
|
Verilator has typically similar or better performance versus closed-source
|
||||||
closed-source Verilog simulators (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.
|
||||||
cycles/dollar.
|
|
||||||
|
|
||||||
|
|
||||||
Installation & Documentation
|
Installation & Documentation
|
||||||
@@ -129,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-2023 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
|
||||||
@@ -147,7 +149,7 @@ the terms of either the GNU Lesser General Public License Version 3 or the
|
|||||||
Perl Artistic License Version 2.0. See the documentation for more details.
|
Perl Artistic License Version 2.0. See the documentation for more details.
|
||||||
|
|
||||||
.. _CHIPS Alliance: https://chipsalliance.org
|
.. _CHIPS Alliance: https://chipsalliance.org
|
||||||
.. _Icarus Verilog: http://iverilog.icarus.com
|
.. _Icarus Verilog: https://steveicarus.github.io/iverilog
|
||||||
.. _Linux Foundation: https://www.linuxfoundation.org
|
.. _Linux Foundation: https://www.linuxfoundation.org
|
||||||
.. |Logo| image:: https://www.veripool.org/img/verilator_256_200_min.png
|
.. |Logo| image:: https://www.veripool.org/img/verilator_256_200_min.png
|
||||||
.. |verilator multithreaded performance| image:: https://www.veripool.org/img/verilator_multithreaded_performance_bg-min.png
|
.. |verilator multithreaded performance| image:: https://www.veripool.org/img/verilator_multithreaded_performance_bg-min.png
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
######################################################################
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
# 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
|
||||||
|
#
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
require 5.006_001;
|
||||||
|
use warnings;
|
||||||
|
use FindBin qw($RealBin $RealScript);
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
my $relpath = RELPATH; # Substituted during Verilator 'make install'
|
||||||
|
|
||||||
|
unshift @ARGV, $RealScript;
|
||||||
|
|
||||||
|
exec { "$RealBin/$relpath/$RealScript" } @ARGV;
|
||||||
|
die "%Error: Exec failed,";
|
||||||
+111
-57
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env perl
|
#!/usr/bin/env perl
|
||||||
######################################################################
|
######################################################################
|
||||||
#
|
#
|
||||||
# Copyright 2003-2023 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.
|
||||||
@@ -15,6 +15,7 @@ use Getopt::Long;
|
|||||||
use FindBin qw($RealBin $RealScript);
|
use FindBin qw($RealBin $RealScript);
|
||||||
use IO::File;
|
use IO::File;
|
||||||
use Pod::Usage;
|
use Pod::Usage;
|
||||||
|
use Cwd qw(realpath);
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use vars qw($Debug @Opt_Verilator_Sw);
|
use vars qw($Debug @Opt_Verilator_Sw);
|
||||||
@@ -32,6 +33,7 @@ my $opt_rr;
|
|||||||
my $opt_gdbbt;
|
my $opt_gdbbt;
|
||||||
my $opt_quiet_exit;
|
my $opt_quiet_exit;
|
||||||
my $opt_unlimited_stack = 1;
|
my $opt_unlimited_stack = 1;
|
||||||
|
my $opt_valgrind;
|
||||||
|
|
||||||
# No arguments can't do anything useful. Give help
|
# No arguments can't do anything useful. Give help
|
||||||
if ($#ARGV < 0) {
|
if ($#ARGV < 0) {
|
||||||
@@ -56,15 +58,31 @@ if (! GetOptions(
|
|||||||
# Switches
|
# Switches
|
||||||
"gdb!" => \$opt_gdb,
|
"gdb!" => \$opt_gdb,
|
||||||
"gdbbt!" => \$opt_gdbbt,
|
"gdbbt!" => \$opt_gdbbt,
|
||||||
|
"quiet!" => \$opt_quiet_exit, # As -quiet implies -quiet-exit
|
||||||
"quiet-exit!" => \$opt_quiet_exit,
|
"quiet-exit!" => \$opt_quiet_exit,
|
||||||
"rr!" => \$opt_rr,
|
"rr!" => \$opt_rr,
|
||||||
"unlimited-stack!" => \$opt_unlimited_stack,
|
"unlimited-stack!" => \$opt_unlimited_stack,
|
||||||
|
"valgrind!" => \$opt_valgrind,
|
||||||
# Additional parameters
|
# Additional parameters
|
||||||
"<>" => sub {}, # Ignored
|
"<>" => sub {}, # Ignored
|
||||||
)) {
|
)) {
|
||||||
pod2usage(-exitstatus => 2, -verbose => 0);
|
pod2usage(-exitstatus => 2, -verbose => 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 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 ((!-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_ROOT=$ENV{VERILATOR_ROOT}\n";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print "export VERILATOR_ROOT='$verilator_root'\n" if $Debug;
|
||||||
|
$ENV{VERILATOR_ROOT} = $verilator_root;
|
||||||
|
}
|
||||||
|
|
||||||
if ($opt_gdbbt && !gdb_works()) {
|
if ($opt_gdbbt && !gdb_works()) {
|
||||||
warn "-Info: --gdbbt ignored: gdb doesn't seem to be working\n" if $Debug;
|
warn "-Info: --gdbbt ignored: gdb doesn't seem to be working\n" if $Debug;
|
||||||
$opt_gdbbt = 0;
|
$opt_gdbbt = 0;
|
||||||
@@ -109,6 +127,18 @@ if ($opt_gdb) {
|
|||||||
. " -ex \"run " . join(' ', @quoted_sw)."\""
|
. " -ex \"run " . join(' ', @quoted_sw)."\""
|
||||||
. " -ex 'set width 0'"
|
. " -ex 'set width 0'"
|
||||||
. " -ex 'bt' -ex 'quit'");
|
. " -ex 'bt' -ex 'quit'");
|
||||||
|
} elsif ($opt_valgrind) {
|
||||||
|
# Run under valgrind
|
||||||
|
my $valgrind_bin = ($ENV{VERILATOR_VALGRIND} || "valgrind --error-exitcode=1 --max-stackframe=2815880"
|
||||||
|
# Magic number suggested by Valgrind, may need to be increased in future
|
||||||
|
# if you get warnings. See: https://valgrind.org/docs/manual/manual-core.html#opt.max-stackframe
|
||||||
|
);
|
||||||
|
|
||||||
|
run (ulimit_stack_unlimited()
|
||||||
|
. aslr_off()
|
||||||
|
. $valgrind_bin
|
||||||
|
. " " . verilator_bin()
|
||||||
|
. " " . join(' ', @quoted_sw));
|
||||||
} elsif ($Debug) {
|
} elsif ($Debug) {
|
||||||
# Debug
|
# Debug
|
||||||
run(ulimit_stack_unlimited()
|
run(ulimit_stack_unlimited()
|
||||||
@@ -137,30 +167,13 @@ sub debug {
|
|||||||
# Builds
|
# Builds
|
||||||
|
|
||||||
sub verilator_bin {
|
sub verilator_bin {
|
||||||
my $bin = "";
|
|
||||||
# Use VERILATOR_ROOT if defined, else assume verilator_bin is in the search path
|
|
||||||
my $basename = ($ENV{VERILATOR_BIN}
|
my $basename = ($ENV{VERILATOR_BIN}
|
||||||
|| ($Debug ? "verilator_bin_dbg" : "verilator_bin"));
|
|| ($Debug ? "verilator_bin_dbg" : "verilator_bin"));
|
||||||
if (defined($ENV{VERILATOR_ROOT})) {
|
if (-x "$RealBin/$basename" || -x "$RealBin/$basename.exe") {
|
||||||
my $dir = $ENV{VERILATOR_ROOT};
|
return "$RealBin/$basename";
|
||||||
if (-x "$dir/bin/$basename"
|
|
||||||
|| -x "$dir/bin/$basename.exe") { # From a "make install" into VERILATOR_ROOT
|
|
||||||
$bin = "$dir/bin/$basename";
|
|
||||||
} else {
|
|
||||||
$bin = "$dir/$basename"; # From pointing to kit directory
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (-x "$RealBin/$basename"
|
return $basename; # Find in PATH
|
||||||
|| -x "$RealBin/$basename.exe") {
|
|
||||||
$bin = "$RealBin/$basename"; # From path/to/verilator with verilator_bin installed
|
|
||||||
} else {
|
|
||||||
$bin = $basename; # Find in PATH
|
|
||||||
}
|
|
||||||
# Note we don't look under bin/$basename which would be right if running
|
|
||||||
# in the kit dir. Running that would likely break, since
|
|
||||||
# VERILATOR_ROOT wouldn't be set and Verilator won't find internal files.
|
|
||||||
}
|
}
|
||||||
return $bin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
@@ -243,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,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
|
||||||
|
|
||||||
@@ -298,7 +310,9 @@ detailed descriptions of these arguments.
|
|||||||
+1800-2009ext+<ext> Use SystemVerilog 2009 with file extension <ext>
|
+1800-2009ext+<ext> Use SystemVerilog 2009 with file extension <ext>
|
||||||
+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>
|
||||||
--assert Enable all assertions
|
+1800-2023ext+<ext> Use SystemVerilog 2023 with file extension <ext>
|
||||||
|
--no-assert Disable all assertions
|
||||||
|
--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
|
||||||
@@ -307,13 +321,15 @@ detailed descriptions of these arguments.
|
|||||||
--build-dep-bin <filename> Override build dependency Verilator binary
|
--build-dep-bin <filename> Override build dependency Verilator binary
|
||||||
--build-jobs <jobs> Parallelism for --build
|
--build-jobs <jobs> Parallelism for --build
|
||||||
--cc Create C++ output
|
--cc Create C++ output
|
||||||
--cdc Clock domain crossing analysis
|
|
||||||
-CFLAGS <flags> C++ compiler arguments for makefile
|
-CFLAGS <flags> C++ compiler arguments for makefile
|
||||||
--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
|
||||||
@@ -325,21 +341,28 @@ 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
|
||||||
--no-decoration Disable comments and symbol decorations
|
--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
|
||||||
--dump-tree Enable dumping Ast .tree files
|
--dump-tree Enable dumping Ast .tree files
|
||||||
--dump-tree-addrids Use short identifiers instead of addresses
|
--dump-tree-addrids Use short identifiers instead of addresses
|
||||||
--dump-<srcfile> Enable dumping everything in source file
|
--dump-tree-dot Enable dumping Ast .tree.dot debug files
|
||||||
|
--dump-tree-json Enable dumping Ast .tree.json files and .tree.meta.json 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-<srcfile> <level> Enable dumping everything in source file at level
|
--dumpi-tree-json <level> Enable dumping Ast .tree.json files 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
|
||||||
@@ -347,54 +370,69 @@ detailed descriptions of these arguments.
|
|||||||
-f <file> Parse arguments from a file
|
-f <file> Parse arguments from a file
|
||||||
-FI <file> Force include of a file
|
-FI <file> Force include of a file
|
||||||
--flatten Force inlining of all modules, tasks and functions
|
--flatten Force inlining of all modules, tasks and functions
|
||||||
|
--future0 <option> Ignore an option for compatibility
|
||||||
|
--future1 <option> Ignore an option with argument for compatibility
|
||||||
-fno-<optimization> Disable internal optimization stage
|
-fno-<optimization> Disable internal optimization stage
|
||||||
-G<name>=<value> Overwrite top-level parameter
|
-G<name>=<value> Overwrite top-level parameter
|
||||||
--gate-stmts <value> Tune gate optimizer depth
|
--gate-stmts <value> Tune gate optimizer depth
|
||||||
--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
|
||||||
--help Display this help
|
--getenv <var> Get environment variable with defaults
|
||||||
|
--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
|
||||||
|
--localize-max-size <value> Tune localize optimization variable size
|
||||||
|
--main Generate C++ main() file
|
||||||
|
--main-top-name Specify top name passed to Verilated model in generated C++ main
|
||||||
--make <build-tool> Generate scripts for specified build tool
|
--make <build-tool> Generate scripts for specified build tool
|
||||||
-MAKEFLAGS <flags> Arguments to pass to make during --build
|
-MAKEFLAGS <flags> Arguments to pass to make during --build
|
||||||
--main Generate C++ main() file
|
|
||||||
--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
|
||||||
--no-order-clock-delay Disable ordering clock enable assignments
|
|
||||||
--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
|
||||||
@@ -403,43 +441,54 @@ detailed descriptions of these arguments.
|
|||||||
--protect-ids Hash identifier names for obscurity
|
--protect-ids Hash identifier names for obscurity
|
||||||
--protect-key <key> Key for symbol protection
|
--protect-key <key> Key for symbol protection
|
||||||
--protect-lib <name> Create a DPI protected library
|
--protect-lib <name> Create a DPI protected library
|
||||||
--public Debugging; see docs
|
--public Mark signals as public; see docs
|
||||||
--public-params Mark all parameters as public_flat
|
--public-depth <level> Mark public to specified module depth
|
||||||
--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-exit Don't print the command on failure
|
--quiet-exit Don't print the command on failure
|
||||||
|
--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
|
||||||
--savable Enable model save-restore
|
--savable Enable model save-restore
|
||||||
--sc Create SystemC output
|
--sc Create SystemC output
|
||||||
--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
|
||||||
--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
|
||||||
+systemverilogext+<ext> Synonym for +1800-2017ext+<ext>
|
+systemverilogext+<ext> Synonym for +1800-2023ext+<ext>
|
||||||
--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
|
||||||
--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
|
||||||
@@ -447,13 +496,15 @@ detailed descriptions of these arguments.
|
|||||||
--unused-regexp <regexp> Tune UNUSED lint signals
|
--unused-regexp <regexp> Tune UNUSED lint signals
|
||||||
-V Verbose version and config
|
-V Verbose version and config
|
||||||
-v <filename> Verilog library
|
-v <filename> Verilog library
|
||||||
--verilate-jobs Job threads for Verilation stage
|
--valgrind Run Verilator under valgrind
|
||||||
--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 Displays 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
|
||||||
@@ -462,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
|
||||||
@@ -480,26 +532,28 @@ description of these arguments.
|
|||||||
|
|
||||||
=for VL_SPHINX_EXTRACT "_build/gen/args_verilated.rst"
|
=for VL_SPHINX_EXTRACT "_build/gen/args_verilated.rst"
|
||||||
|
|
||||||
+verilator+debug Enable debugging
|
+verilator+coverage+file+<filename> Set coverage output filename
|
||||||
+verilator+debugi+<value> Enable debugging at a level
|
+verilator+debug Enable debugging
|
||||||
+verilator+error+limit+<value> Set error limit
|
+verilator+debugi+<value> Enable debugging at a level
|
||||||
+verilator+help Display help
|
+verilator+error+limit+<value> Set error limit
|
||||||
+verilator+noassert Disable assert checking
|
+verilator+help Show help
|
||||||
|
+verilator+noassert Disable assert checking
|
||||||
+verilator+prof+exec+file+<filename> Set execution profile filename
|
+verilator+prof+exec+file+<filename> Set execution profile filename
|
||||||
+verilator+prof+exec+start+<value> Set execution profile starting point
|
+verilator+prof+exec+start+<value> Set execution profile starting point
|
||||||
+verilator+prof+exec+window+<value> Set execution profile duration
|
+verilator+prof+exec+window+<value> Set execution profile duration
|
||||||
+verilator+prof+vlt+file+<filename> Set PGO profile filename
|
+verilator+prof+vlt+file+<filename> Set PGO profile filename
|
||||||
+verilator+rand+reset+<value> Set random reset technique
|
+verilator+quiet Minimize additional printing
|
||||||
+verilator+seed+<value> Set random seed
|
+verilator+rand+reset+<value> Set random reset technique
|
||||||
+verilator+V Verbose version and config
|
+verilator+seed+<value> Set random seed
|
||||||
+verilator+version Show version and exit
|
+verilator+V Show verbose version and config
|
||||||
|
+verilator+version Show version and exit
|
||||||
|
|
||||||
|
|
||||||
=head1 DISTRIBUTION
|
=head1 DISTRIBUTION
|
||||||
|
|
||||||
The latest version is available from L<https://verilator.org>.
|
The latest version is available from L<https://verilator.org>.
|
||||||
|
|
||||||
Copyright 2003-2023 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-2023 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
|
||||||
|
|
||||||
|
|||||||
+11
-10
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env perl
|
#!/usr/bin/env perl
|
||||||
######################################################################
|
######################################################################
|
||||||
#
|
#
|
||||||
# Copyright 2003-2023 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
|
||||||
@@ -177,18 +178,18 @@ L<https://verilator.org/guide/latest/exe_verilator_coverage.html>.
|
|||||||
--write <filename> Write aggregate coverage results.
|
--write <filename> Write aggregate coverage results.
|
||||||
--write-info <filename.info> Write lcov .info.
|
--write-info <filename.info> Write lcov .info.
|
||||||
|
|
||||||
+libext+I<ext>+I<ext>... Extensions for Verilog files.
|
+libext+<ext>+<ext>... Extensions for Verilog files.
|
||||||
+define+I<var>+I<value> Defines the given variable.
|
+define+<var>+<value> Defines the given variable.
|
||||||
-DI<var>=I<value> Defines the given variable.
|
-D<var>=<value> Defines the given variable.
|
||||||
+incdir+I<dir> Add directory for finding include files.
|
+incdir+<dir> Add directory for finding include files.
|
||||||
-II<dir> Add directory for finding include files.
|
-I<dir> Add directory for finding include files.
|
||||||
-y I<dir> Specifies module search directory.
|
-y <dir> Specifies module search directory.
|
||||||
|
|
||||||
=head1 DISTRIBUTION
|
=head1 DISTRIBUTION
|
||||||
|
|
||||||
The latest version is available from L<https://verilator.org>.
|
The latest version is available from L<https://verilator.org>.
|
||||||
|
|
||||||
Copyright 2003-2023 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-2023 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')
|
||||||
|
|||||||
+421
-300
@@ -1,52 +1,65 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# pylint: disable=C0103,C0114,C0116,C0209,C0301,R0914,R0912,R0915,W0511,eval-used
|
# pylint: disable=C0103,C0114,C0116,C0209,C0301,R0914,R0912,R0915,W0511,W0603,eval-used
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import bisect
|
||||||
import collections
|
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
|
||||||
|
|
||||||
Threads = collections.defaultdict(lambda: collections.defaultdict(lambda: {}))
|
Sections = OrderedDict()
|
||||||
Mtasks = collections.defaultdict(lambda: {})
|
LongestVcdStrValueLength = 0
|
||||||
Evals = collections.defaultdict(lambda: {})
|
Threads = collections.defaultdict(lambda: []) # List of records per thread id
|
||||||
EvalLoops = collections.defaultdict(lambda: {})
|
Mtasks = collections.defaultdict(lambda: {'elapsed': 0, 'end': 0})
|
||||||
|
Cpus = collections.defaultdict(lambda: {'mtask_time': 0})
|
||||||
Global = {
|
Global = {
|
||||||
'args': {},
|
'args': {},
|
||||||
'cpuinfo': collections.defaultdict(lambda: {}),
|
'cpuinfo': collections.defaultdict(lambda: {}),
|
||||||
'rdtsc_cycle_time': 0,
|
'info': {
|
||||||
|
'numa': 'no data'
|
||||||
|
},
|
||||||
'stats': {}
|
'stats': {}
|
||||||
}
|
}
|
||||||
|
ElapsedTime = None # total elapsed time
|
||||||
|
ExecGraphTime = 0 # total elapsed time executing an exec graph
|
||||||
|
WaitingTime = 0 # total elapsed time waiting for mtasks
|
||||||
|
ExecGraphIntervals = [] # list of (start, end) pairs
|
||||||
|
ThreadScheduleWaitIntervals = [] # list of (start, tick, ecpu) pairs
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
|
|
||||||
def process(filename):
|
|
||||||
read_data(filename)
|
|
||||||
report()
|
|
||||||
|
|
||||||
|
|
||||||
def read_data(filename):
|
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_time = re.compile(r'rdtsc time = (\d+) ticks')
|
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
|
||||||
|
|
||||||
lastEvalBeginTick = None
|
global LongestVcdStrValueLength
|
||||||
lastEvalLoopBeginTick = None
|
global ExecGraphTime
|
||||||
|
global WaitingTime
|
||||||
|
|
||||||
|
ExecGraphStack = []
|
||||||
|
SectionStack = []
|
||||||
|
MtasksStack = []
|
||||||
|
ThreadScheduleWait = collections.defaultdict(list)
|
||||||
|
|
||||||
for line in fh:
|
for line in fh:
|
||||||
recordMatch = re_record.match(line)
|
recordMatch = re_record.match(line)
|
||||||
@@ -54,47 +67,66 @@ def read_data(filename):
|
|||||||
kind, tick, payload = recordMatch.groups()
|
kind, tick, payload = recordMatch.groups()
|
||||||
tick = int(tick)
|
tick = int(tick)
|
||||||
payload = payload.strip()
|
payload = payload.strip()
|
||||||
if kind == "EVAL_BEGIN":
|
if kind == "SECTION_PUSH":
|
||||||
Evals[tick]['start'] = tick
|
LongestVcdStrValueLength = max(LongestVcdStrValueLength, len(payload))
|
||||||
lastEvalBeginTick = tick
|
SectionStack.append(payload)
|
||||||
elif kind == "EVAL_END":
|
Sections[thread].append((tick, tuple(SectionStack)))
|
||||||
Evals[lastEvalBeginTick]['end'] = tick
|
elif kind == "SECTION_POP":
|
||||||
lastEvalBeginTick = None
|
assert SectionStack, "SECTION_POP without SECTION_PUSH"
|
||||||
elif kind == "EVAL_LOOP_BEGIN":
|
SectionStack.pop()
|
||||||
EvalLoops[tick]['start'] = tick
|
Sections[thread].append((tick, tuple(SectionStack)))
|
||||||
lastEvalLoopBeginTick = tick
|
|
||||||
elif kind == "EVAL_LOOP_END":
|
|
||||||
EvalLoops[lastEvalLoopBeginTick]['end'] = tick
|
|
||||||
lastEvalLoopBeginTick = None
|
|
||||||
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)
|
||||||
Threads[thread][tick]['mtask'] = mtask
|
records = Threads[thread]
|
||||||
Threads[thread][tick]['predict_start'] = predict_start
|
records.append({
|
||||||
Threads[thread][tick]['cpu'] = ecpu
|
'start': tick,
|
||||||
if 'elapsed' not in Mtasks[mtask]:
|
'mtask': mtask,
|
||||||
Mtasks[mtask] = {'end': 0, 'elapsed': 0}
|
'predict_start': predict_start,
|
||||||
Mtasks[mtask]['begin'] = tick
|
'hier_block': hier_block,
|
||||||
Mtasks[mtask]['thread'] = thread
|
'cpu': ecpu
|
||||||
Mtasks[mtask]['predict_start'] = predict_start
|
})
|
||||||
|
Mtasks[(hier_block, mtask)]['begin'] = tick
|
||||||
|
Mtasks[(hier_block, 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']
|
||||||
Threads[thread][begin]['end'] = tick
|
record['end'] = tick
|
||||||
Threads[thread][begin]['predict_cost'] = predict_cost
|
assert record and records[-1]['start'] <= records[-1]['end'] <= tick
|
||||||
Mtasks[mtask]['elapsed'] += tick - begin
|
record['predict_cost'] = predict_cost
|
||||||
Mtasks[mtask]['predict_cost'] = predict_cost
|
Mtasks[(hier_block, mtask)]['elapsed'] += tick - begin
|
||||||
Mtasks[mtask]['end'] = max(Mtasks[mtask]['end'], tick)
|
Mtasks[(hier_block, mtask)]['predict_cost'] = predict_cost
|
||||||
|
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":
|
||||||
|
ExecGraphStack.append(tick)
|
||||||
|
elif kind == "EXEC_GRAPH_END":
|
||||||
|
assert ExecGraphStack, "EXEC_GRAPH_END without EXEC_GRAPH_BEGIN"
|
||||||
|
execGraphStart = ExecGraphStack.pop()
|
||||||
|
ExecGraphTime += tick - execGraphStart
|
||||||
|
ExecGraphIntervals.append((execGraphStart, tick))
|
||||||
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):
|
||||||
@@ -103,13 +135,16 @@ 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)
|
||||||
elif re_proc_cpu.match(line):
|
elif re_proc_cpu.match(line):
|
||||||
match = re_proc_cpu.match(line)
|
match = re_proc_cpu.match(line)
|
||||||
cpu = int(match.group(1))
|
cpu = int(match.group(1))
|
||||||
elif cpu and re_proc_dat.match(line):
|
elif cpu is not None and re_proc_dat.match(line):
|
||||||
match = re_proc_dat.match(line)
|
match = re_proc_dat.match(line)
|
||||||
term = match.group(1)
|
term = match.group(1)
|
||||||
value = match.group(2)
|
value = match.group(2)
|
||||||
@@ -121,11 +156,6 @@ def read_data(filename):
|
|||||||
pass
|
pass
|
||||||
elif Args.debug:
|
elif Args.debug:
|
||||||
print("-Unk: %s" % line)
|
print("-Unk: %s" % line)
|
||||||
# TODO -- this is parsing text printed by a client.
|
|
||||||
# Really, verilator proper should generate this
|
|
||||||
# if it's useful...
|
|
||||||
if re_time.match(line):
|
|
||||||
Global['rdtsc_cycle_time'] = re_time.group(1)
|
|
||||||
|
|
||||||
|
|
||||||
def re_match_result(regexp, line, result_to):
|
def re_match_result(regexp, line, result_to):
|
||||||
@@ -144,34 +174,57 @@ def report():
|
|||||||
plus = "+" if re.match(r'^\+', arg) else " "
|
plus = "+" if re.match(r'^\+', arg) else " "
|
||||||
print(" %s%s%s" % (arg, plus, Global['args'][arg]))
|
print(" %s%s%s" % (arg, plus, Global['args'][arg]))
|
||||||
|
|
||||||
nthreads = int(Global['stats']['threads'])
|
for records in Threads.values():
|
||||||
Global['cpus'] = {}
|
for record in records:
|
||||||
for thread in Threads:
|
cpu = record['cpu']
|
||||||
# Make potentially multiple characters per column
|
elapsed = record['end'] - record['start']
|
||||||
for start in Threads[thread]:
|
Cpus[cpu]['mtask_time'] += elapsed
|
||||||
if not Threads[thread][start]:
|
|
||||||
continue
|
|
||||||
cpu = Threads[thread][start]['cpu']
|
|
||||||
elapsed = Threads[thread][start]['end'] - start
|
|
||||||
if cpu not in Global['cpus']:
|
|
||||||
Global['cpus'][cpu] = {'cpu_time': 0}
|
|
||||||
Global['cpus'][cpu]['cpu_time'] += elapsed
|
|
||||||
|
|
||||||
measured_mt_mtask_time = 0
|
global ElapsedTime
|
||||||
predict_mt_mtask_time = 0
|
ElapsedTime = int(Global['stats']['ticks'])
|
||||||
long_mtask_time = 0
|
nthreads = int(Global['stats']['threads'])
|
||||||
measured_last_end = 0
|
ncpus = max(len(Cpus), 1)
|
||||||
predict_last_end = 0
|
|
||||||
for mtask in Mtasks:
|
print("\nSummary:")
|
||||||
measured_mt_mtask_time += Mtasks[mtask]['elapsed']
|
print(" Total elapsed time = {} rdtsc ticks".format(ElapsedTime))
|
||||||
predict_mt_mtask_time += Mtasks[mtask]['predict_cost']
|
print(" Parallelized code = {:.2%} of elapsed time".format(ExecGraphTime / ElapsedTime))
|
||||||
measured_last_end = max(measured_last_end, Mtasks[mtask]['end'])
|
print(" Waiting time = {:.2%} of elapsed time".format(WaitingTime / ElapsedTime))
|
||||||
predict_last_end = max(
|
print(" Total threads = %d" % nthreads)
|
||||||
predict_last_end,
|
print(" Total CPUs used = %d" % ncpus)
|
||||||
Mtasks[mtask]['predict_start'] + Mtasks[mtask]['predict_cost'])
|
print(" Total mtasks = %d" % len(Mtasks))
|
||||||
long_mtask_time = max(long_mtask_time, Mtasks[mtask]['elapsed'])
|
print(" Total yields = %d" % int(Global['stats'].get('yields', 0)))
|
||||||
Global['measured_last_end'] = measured_last_end
|
|
||||||
Global['predict_last_end'] = predict_last_end
|
report_numa()
|
||||||
|
report_mtasks()
|
||||||
|
report_cpus()
|
||||||
|
report_sections()
|
||||||
|
|
||||||
|
if nthreads > ncpus:
|
||||||
|
print()
|
||||||
|
print("%%Warning: There were fewer CPUs (%d) than threads (%d)." % (ncpus, nthreads))
|
||||||
|
print(" : See docs on use of numactl.")
|
||||||
|
else:
|
||||||
|
if 'cpu_socket_cores_warning' in Global:
|
||||||
|
print()
|
||||||
|
print("%Warning: Multiple threads scheduled on same hyperthreaded core.")
|
||||||
|
print(" : See docs on use of numactl.")
|
||||||
|
if 'cpu_sockets_warning' in Global:
|
||||||
|
print()
|
||||||
|
print("%Warning: Threads scheduled on multiple sockets.")
|
||||||
|
print(" : See docs on use of numactl.")
|
||||||
|
print()
|
||||||
|
|
||||||
|
|
||||||
|
def report_numa():
|
||||||
|
print("\nNUMA assignment:")
|
||||||
|
print(" NUMA status = %s" % Global['info']['numa'])
|
||||||
|
|
||||||
|
|
||||||
|
def report_mtasks():
|
||||||
|
if not Mtasks:
|
||||||
|
return
|
||||||
|
|
||||||
|
nthreads = int(Global['stats']['threads'])
|
||||||
|
|
||||||
# If we know cycle time in the same (rdtsc) units,
|
# If we know cycle time in the same (rdtsc) units,
|
||||||
# this will give us an actual utilization number,
|
# this will give us an actual utilization number,
|
||||||
@@ -181,130 +234,136 @@ def report():
|
|||||||
# serial mode, to estimate the overhead of data sharing,
|
# serial mode, to estimate the overhead of data sharing,
|
||||||
# which will show up in the total elapsed time. (Overhead
|
# which will show up in the total elapsed time. (Overhead
|
||||||
# of synchronization and scheduling should not.)
|
# of synchronization and scheduling should not.)
|
||||||
print("\nAnalysis:")
|
total_mtask_time = 0
|
||||||
print(" Total threads = %d" % nthreads)
|
thread_mtask_time = collections.defaultdict(lambda: 0)
|
||||||
print(" Total mtasks = %d" % len(Mtasks))
|
long_mtask_time = 0
|
||||||
ncpus = max(len(Global['cpus']), 1)
|
long_mtask = None
|
||||||
print(" Total cpus used = %d" % ncpus)
|
long_mtask_hier_block = None
|
||||||
print(" Total yields = %d" %
|
predict_mtask_time = 0
|
||||||
int(Global['stats'].get('yields', 0)))
|
predict_elapsed = 0
|
||||||
print(" Total evals = %d" % len(Evals))
|
for (hier_block, mtask_id) in Mtasks:
|
||||||
print(" Total eval loops = %d" % len(EvalLoops))
|
record = Mtasks[(hier_block, mtask_id)]
|
||||||
if Mtasks:
|
predict_mtask_time += record['predict_cost']
|
||||||
print(" Total eval time = %d rdtsc ticks" %
|
total_mtask_time += record['elapsed']
|
||||||
Global['measured_last_end'])
|
thread_mtask_time[record['thread']] += record['elapsed']
|
||||||
print(" Longest mtask time = %d rdtsc ticks" % long_mtask_time)
|
predict_end = record['predict_start'] + record['predict_cost']
|
||||||
print(" All-thread mtask time = %d rdtsc ticks" %
|
predict_elapsed = max(predict_elapsed, predict_end)
|
||||||
measured_mt_mtask_time)
|
if record['elapsed'] > long_mtask_time:
|
||||||
long_efficiency = long_mtask_time / (Global.get(
|
long_mtask_time = record['elapsed']
|
||||||
'measured_last_end', 1) or 1)
|
long_mtask = mtask_id
|
||||||
print(" Longest-thread efficiency = %0.1f%%" %
|
long_mtask_hier_block = hier_block
|
||||||
(long_efficiency * 100.0))
|
Global['predict_last_end'] = predict_elapsed
|
||||||
mt_efficiency = measured_mt_mtask_time / (
|
|
||||||
Global.get('measured_last_end', 1) * nthreads or 1)
|
|
||||||
print(" All-thread efficiency = %0.1f%%" %
|
|
||||||
(mt_efficiency * 100.0))
|
|
||||||
print(" All-thread speedup = %0.1f" %
|
|
||||||
(mt_efficiency * nthreads))
|
|
||||||
if Global['rdtsc_cycle_time'] > 0:
|
|
||||||
ut = measured_mt_mtask_time / Global['rdtsc_cycle_time']
|
|
||||||
print("tot_mtask_cpu=" + measured_mt_mtask_time + " cyc=" +
|
|
||||||
Global['rdtsc_cycle_time'] + " ut=" + ut)
|
|
||||||
|
|
||||||
predict_mt_efficiency = predict_mt_mtask_time / (
|
serialTime = ElapsedTime - ExecGraphTime
|
||||||
Global.get('predict_last_end', 1) * nthreads or 1)
|
|
||||||
print("\nPrediction (what Verilator used for scheduling):")
|
|
||||||
print(" All-thread efficiency = %0.1f%%" %
|
|
||||||
(predict_mt_efficiency * 100.0))
|
|
||||||
print(" All-thread speedup = %0.1f" %
|
|
||||||
(predict_mt_efficiency * nthreads))
|
|
||||||
|
|
||||||
p2e_ratios = []
|
def subReport(elapsed, work):
|
||||||
min_p2e = 1000000
|
print(" Thread utilization = {:7.2%}".format(work / (elapsed * nthreads)))
|
||||||
min_mtask = None
|
print(" Speedup = {:6.3}x".format(work / elapsed))
|
||||||
max_p2e = -1000000
|
|
||||||
max_mtask = None
|
|
||||||
|
|
||||||
for mtask in sorted(Mtasks.keys()):
|
print("\nParallelized code, measured:")
|
||||||
if Mtasks[mtask]['elapsed'] > 0:
|
subReport(ExecGraphTime, total_mtask_time)
|
||||||
if Mtasks[mtask]['predict_cost'] == 0:
|
|
||||||
Mtasks[mtask]['predict_cost'] = 1 # don't log(0) below
|
|
||||||
p2e_ratio = math.log(Mtasks[mtask]['predict_cost'] /
|
|
||||||
Mtasks[mtask]['elapsed'])
|
|
||||||
p2e_ratios.append(p2e_ratio)
|
|
||||||
|
|
||||||
if p2e_ratio > max_p2e:
|
print("\nParallelized code, predicted during static scheduling:")
|
||||||
max_p2e = p2e_ratio
|
subReport(predict_elapsed, predict_mtask_time)
|
||||||
max_mtask = mtask
|
|
||||||
if p2e_ratio < min_p2e:
|
|
||||||
min_p2e = p2e_ratio
|
|
||||||
min_mtask = mtask
|
|
||||||
|
|
||||||
print("\nMTask statistics:")
|
print("\nAll code, measured:")
|
||||||
print(" min log(p2e) = %0.3f" % min_p2e, end="")
|
subReport(ElapsedTime, serialTime + total_mtask_time)
|
||||||
print(" from mtask %d (predict %d," %
|
|
||||||
(min_mtask, Mtasks[min_mtask]['predict_cost']),
|
|
||||||
end="")
|
|
||||||
print(" elapsed %d)" % Mtasks[min_mtask]['elapsed'])
|
|
||||||
print(" max log(p2e) = %0.3f" % max_p2e, end="")
|
|
||||||
print(" from mtask %d (predict %d," %
|
|
||||||
(max_mtask, Mtasks[max_mtask]['predict_cost']),
|
|
||||||
end="")
|
|
||||||
print(" elapsed %d)" % Mtasks[max_mtask]['elapsed'])
|
|
||||||
|
|
||||||
stddev = statistics.pstdev(p2e_ratios)
|
print("\nAll code, measured, scaled by predicted speedup:")
|
||||||
mean = statistics.mean(p2e_ratios)
|
expectedParallelSpeedup = predict_mtask_time / predict_elapsed
|
||||||
print(" mean = %0.3f" % mean)
|
scaledElapsed = serialTime + total_mtask_time / expectedParallelSpeedup
|
||||||
print(" stddev = %0.3f" % stddev)
|
subReport(scaledElapsed, serialTime + total_mtask_time)
|
||||||
print(" e ^ stddev = %0.3f" % math.exp(stddev))
|
|
||||||
|
|
||||||
report_cpus()
|
p2e_ratios = []
|
||||||
|
min_p2e = 1000000
|
||||||
|
min_mtask = None
|
||||||
|
max_p2e = -1000000
|
||||||
|
max_mtask = None
|
||||||
|
|
||||||
if nthreads > ncpus:
|
min_hier_block = None
|
||||||
print()
|
max_hier_block = None
|
||||||
print("%%Warning: There were fewer CPUs (%d) then threads (%d)." %
|
|
||||||
(ncpus, nthreads))
|
for (hier_block, mtask_id) in sorted(Mtasks.keys()):
|
||||||
print(" : See docs on use of numactl.")
|
mtask = Mtasks[(hier_block, mtask_id)]
|
||||||
|
if mtask['elapsed'] > 0:
|
||||||
|
if mtask['predict_cost'] == 0:
|
||||||
|
mtask['predict_cost'] = 1 # don't log(0) below
|
||||||
|
p2e_ratio = math.log(mtask['predict_cost'] / mtask['elapsed'])
|
||||||
|
p2e_ratios.append(p2e_ratio)
|
||||||
|
|
||||||
|
if p2e_ratio > max_p2e:
|
||||||
|
max_p2e = p2e_ratio
|
||||||
|
max_mtask = mtask_id
|
||||||
|
max_hier_block = hier_block
|
||||||
|
if p2e_ratio < min_p2e:
|
||||||
|
min_p2e = p2e_ratio
|
||||||
|
min_mtask = mtask_id
|
||||||
|
min_hier_block = hier_block
|
||||||
|
|
||||||
|
print("\nMTask statistics:")
|
||||||
|
if long_mtask_hier_block:
|
||||||
|
print(" Longest mtask id = {} from hier_block '{}'".format(long_mtask,
|
||||||
|
long_mtask_hier_block))
|
||||||
else:
|
else:
|
||||||
if 'cpu_socket_cores_warning' in Global:
|
print(" Longest mtask id = {}".format(long_mtask))
|
||||||
print()
|
print(" Longest mtask time = {:.2%} of time elapsed in parallelized code".format(
|
||||||
print(
|
long_mtask_time / ExecGraphTime))
|
||||||
"%Warning: Multiple threads scheduled on same hyperthreaded core."
|
print(" min log(p2e) = %0.3f" % min_p2e, end="")
|
||||||
)
|
|
||||||
print(" : See docs on use of numactl.")
|
if min_hier_block:
|
||||||
if 'cpu_sockets_warning' in Global:
|
print(" from hier_block '%s' mtask %d (predict %d," %
|
||||||
print()
|
(min_hier_block, min_mtask, Mtasks[(min_hier_block, min_mtask)]['predict_cost']),
|
||||||
print("%Warning: Threads scheduled on multiple sockets.")
|
end="")
|
||||||
print(" : See docs on use of numactl.")
|
else:
|
||||||
print()
|
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="")
|
||||||
|
if max_hier_block:
|
||||||
|
print(" from hier_block '%s' mtask %d (predict %d," %
|
||||||
|
(max_hier_block, max_mtask, Mtasks[(max_hier_block, max_mtask)]['predict_cost']),
|
||||||
|
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)
|
||||||
|
mean = statistics.mean(p2e_ratios)
|
||||||
|
print(" mean = %0.3f" % mean)
|
||||||
|
print(" stddev = %0.3f" % stddev)
|
||||||
|
print(" e ^ stddev = %0.3f" % math.exp(stddev))
|
||||||
|
|
||||||
|
|
||||||
def report_cpus():
|
def report_cpus():
|
||||||
print("\nCPUs:")
|
print("\nCPU info:")
|
||||||
|
|
||||||
Global['cpu_sockets'] = collections.defaultdict(lambda: 0)
|
Global['cpu_sockets'] = collections.defaultdict(lambda: 0)
|
||||||
Global['cpu_socket_cores'] = collections.defaultdict(lambda: 0)
|
Global['cpu_socket_cores'] = collections.defaultdict(lambda: 0)
|
||||||
|
|
||||||
for cpu in sorted(Global['cpus'].keys()):
|
print(" Id | Time spent executing MTask | Socket | Core | Model")
|
||||||
print(" cpu %d: " % cpu, end='')
|
print(" | % of elapsed ticks / ticks | | |")
|
||||||
print("cpu_time=%d" % Global['cpus'][cpu]['cpu_time'], end='')
|
print(" ====|============================|========|======|======")
|
||||||
|
for cpu in sorted(Cpus):
|
||||||
socket = None
|
socket = ""
|
||||||
|
core = ""
|
||||||
|
model = ""
|
||||||
if cpu in Global['cpuinfo']:
|
if cpu in Global['cpuinfo']:
|
||||||
cpuinfo = Global['cpuinfo'][cpu]
|
cpuinfo = Global['cpuinfo'][cpu]
|
||||||
if 'physical_id' in cpuinfo and 'core_id' in cpuinfo:
|
if 'physical_id' in cpuinfo and 'core_id' in cpuinfo:
|
||||||
socket = int(cpuinfo['physical_id'])
|
socket = cpuinfo['physical_id']
|
||||||
Global['cpu_sockets'][socket] += 1
|
Global['cpu_sockets'][socket] += 1
|
||||||
print(" socket=%d" % socket, end='')
|
core = cpuinfo['core_id']
|
||||||
|
Global['cpu_socket_cores'][socket + "__" + core] += 1
|
||||||
core = int(cpuinfo['core_id'])
|
|
||||||
Global['cpu_socket_cores'][str(socket) + "__" + str(core)] += 1
|
|
||||||
print(" core=%d" % core, end='')
|
|
||||||
|
|
||||||
if 'model_name' in cpuinfo:
|
if 'model_name' in cpuinfo:
|
||||||
model = cpuinfo['model_name']
|
model = cpuinfo['model_name']
|
||||||
print(" %s" % model, end='')
|
|
||||||
print()
|
print(" {:3d} | {:7.2%} / {:16d} | {:>6s} | {:>4s} | {}".format(
|
||||||
|
cpu, Cpus[cpu]['mtask_time'] / ElapsedTime, Cpus[cpu]['mtask_time'], socket, core,
|
||||||
|
model))
|
||||||
|
|
||||||
if len(Global['cpu_sockets']) > 1:
|
if len(Global['cpu_sockets']) > 1:
|
||||||
Global['cpu_sockets_warning'] = True
|
Global['cpu_sockets_warning'] = True
|
||||||
@@ -313,25 +372,72 @@ def report_cpus():
|
|||||||
Global['cpu_socket_cores_warning'] = True
|
Global['cpu_socket_cores_warning'] = True
|
||||||
|
|
||||||
|
|
||||||
|
def report_sections():
|
||||||
|
for thread, section in Sections.items():
|
||||||
|
if section:
|
||||||
|
print(f"\nSection profile for thread {thread}:")
|
||||||
|
report_section(section)
|
||||||
|
|
||||||
|
|
||||||
|
def report_section(section):
|
||||||
|
totalTime = collections.defaultdict(lambda: 0)
|
||||||
|
selfTime = collections.defaultdict(lambda: 0)
|
||||||
|
|
||||||
|
sectionTree = [0, {}, 1] # [selfTime, childTrees, numberOfTimesEntered]
|
||||||
|
prevTime = 0
|
||||||
|
prevStack = ()
|
||||||
|
for time, stack in section:
|
||||||
|
if len(stack) > len(prevStack):
|
||||||
|
scope = sectionTree
|
||||||
|
for item in stack:
|
||||||
|
scope = scope[1].setdefault(item, [0, {}, 0])
|
||||||
|
scope[2] += 1
|
||||||
|
dt = time - prevTime
|
||||||
|
assert dt >= 0
|
||||||
|
scope = sectionTree
|
||||||
|
for item in prevStack:
|
||||||
|
scope = scope[1].setdefault(item, [0, {}, 0])
|
||||||
|
scope[0] += dt
|
||||||
|
|
||||||
|
if prevStack:
|
||||||
|
for name in prevStack:
|
||||||
|
totalTime[name] += dt
|
||||||
|
selfTime[prevStack[-1]] += dt
|
||||||
|
prevTime = time
|
||||||
|
prevStack = stack
|
||||||
|
|
||||||
|
def treeSum(tree):
|
||||||
|
n = tree[0]
|
||||||
|
for subTree in tree[1].values():
|
||||||
|
n += treeSum(subTree)
|
||||||
|
return n
|
||||||
|
|
||||||
|
# Make sure the tree sums to the elapsed time
|
||||||
|
sectionTree[0] += ElapsedTime - treeSum(sectionTree)
|
||||||
|
|
||||||
|
def printTree(prefix, name, entries, tree):
|
||||||
|
print(" {:7.2%} | {:7.2%} | {:8} | {:10.2f} | {}".format(
|
||||||
|
treeSum(tree) / ElapsedTime, tree[0] / ElapsedTime, tree[2], tree[2] / entries,
|
||||||
|
prefix + name))
|
||||||
|
for k in sorted(tree[1], key=lambda _: -treeSum(tree[1][_])):
|
||||||
|
printTree(prefix + " ", k, tree[2], tree[1][k])
|
||||||
|
|
||||||
|
print(" Total | Self | Total | Relative | Section")
|
||||||
|
print(" time | time | entries | entries | name ")
|
||||||
|
print("==========|=========|==========|============|========")
|
||||||
|
printTree("", "*TOTAL*", 1, sectionTree)
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
|
|
||||||
def write_vcd(filename):
|
def write_vcd(filename):
|
||||||
print("Writing %s" % filename)
|
print("Writing %s" % filename)
|
||||||
with open(filename, "w", encoding="utf8") as fh:
|
with open(filename, "w", encoding="utf8") as fh:
|
||||||
vcd = {
|
# dict of dicts of hierarchy elements/signal name -> (code, width)
|
||||||
'values':
|
scopeSigs = {}
|
||||||
collections.defaultdict(lambda: {}), # {<time>}{<code>} = value
|
# map from time -> code -> value
|
||||||
'sigs': {
|
values = collections.defaultdict(lambda: {})
|
||||||
'predicted_threads': {},
|
|
||||||
'measured_threads': {},
|
|
||||||
'cpus': {},
|
|
||||||
'evals': {},
|
|
||||||
'mtasks': {},
|
|
||||||
'Stats': {}
|
|
||||||
} # {<module>}{<sig}} = code
|
|
||||||
}
|
|
||||||
code = 0
|
|
||||||
|
|
||||||
parallelism = {
|
parallelism = {
|
||||||
'measured': collections.defaultdict(lambda: 0),
|
'measured': collections.defaultdict(lambda: 0),
|
||||||
@@ -340,132 +446,151 @@ def write_vcd(filename):
|
|||||||
parallelism['measured'][0] = 0
|
parallelism['measured'][0] = 0
|
||||||
parallelism['predicted'][0] = 0
|
parallelism['predicted'][0] = 0
|
||||||
|
|
||||||
# Measured graph
|
nextFreeCode = 0
|
||||||
for thread in sorted(Threads.keys()):
|
|
||||||
sig = "thread%d_mtask" % thread
|
|
||||||
if sig not in vcd['sigs']['measured_threads']:
|
|
||||||
vcd['sigs']['measured_threads'][sig] = code
|
|
||||||
code += 1
|
|
||||||
mcode = vcd['sigs']['measured_threads'][sig]
|
|
||||||
|
|
||||||
for start in sorted(Threads[thread]):
|
def getCode(width, *names):
|
||||||
mtask = Threads[thread][start]['mtask']
|
nonlocal nextFreeCode
|
||||||
end = Threads[thread][start]['end']
|
scope = scopeSigs
|
||||||
cpu = Threads[thread][start]['cpu']
|
*path, name = names
|
||||||
vcd['values'][start][mcode] = mtask
|
for item in path:
|
||||||
vcd['values'][end][mcode] = None
|
scope = scope.setdefault(item, {})
|
||||||
|
code, oldWidth = scope.setdefault(name, (nextFreeCode, width))
|
||||||
|
assert oldWidth == width
|
||||||
|
if code == nextFreeCode:
|
||||||
|
nextFreeCode += 1
|
||||||
|
return code
|
||||||
|
|
||||||
|
def addValue(code, time, val):
|
||||||
|
if isinstance(val, str):
|
||||||
|
buf = ""
|
||||||
|
for c in val:
|
||||||
|
buf += bin(ord(c))[2:].rjust(8, "0")
|
||||||
|
val = buf.ljust(LongestVcdStrValueLength * 8, "0")
|
||||||
|
values[time][code] = val
|
||||||
|
|
||||||
|
def addXValue(code, time):
|
||||||
|
values[time][code] = 'x'
|
||||||
|
|
||||||
|
# Measured graph
|
||||||
|
for thread in sorted(Threads):
|
||||||
|
mcode = getCode(32, 'measured', 't%d_mtask' % thread)
|
||||||
|
for record in Threads[thread]:
|
||||||
|
start = record['start']
|
||||||
|
mtask = record['mtask']
|
||||||
|
end = record['end']
|
||||||
|
cpu = record['cpu']
|
||||||
|
addValue(mcode, start, mtask)
|
||||||
|
addValue(mcode, end, None)
|
||||||
parallelism['measured'][start] += 1
|
parallelism['measured'][start] += 1
|
||||||
parallelism['measured'][end] -= 1
|
parallelism['measured'][end] -= 1
|
||||||
|
|
||||||
sig = "cpu%d_thread" % cpu
|
code = getCode(32, 'measured', 'cpu%d_thread' % cpu)
|
||||||
if sig not in vcd['sigs']['cpus']:
|
addValue(code, start, thread)
|
||||||
vcd['sigs']['cpus'][sig] = code
|
addValue(code, end, None)
|
||||||
code += 1
|
|
||||||
ccode = vcd['sigs']['cpus'][sig]
|
|
||||||
vcd['values'][start][ccode] = thread
|
|
||||||
vcd['values'][end][ccode] = None
|
|
||||||
|
|
||||||
sig = "mtask%d_cpu" % mtask
|
code = getCode(32, 'measured', 'cpu%d_mtask' % cpu)
|
||||||
if sig not in vcd['sigs']['mtasks']:
|
addValue(code, start, mtask)
|
||||||
vcd['sigs']['mtasks'][sig] = code
|
addValue(code, end, None)
|
||||||
code += 1
|
|
||||||
ccode = vcd['sigs']['mtasks'][sig]
|
|
||||||
vcd['values'][start][ccode] = cpu
|
|
||||||
vcd['values'][end][ccode] = None
|
|
||||||
|
|
||||||
# Eval graph
|
tStart = sorted(_['start'] for records in Threads.values() for _ in records)
|
||||||
vcd['sigs']['evals']["eval"] = code
|
tEnd = sorted(_['end'] for records in Threads.values() for _ in records)
|
||||||
elcode = code
|
|
||||||
code += 1
|
|
||||||
n = 0
|
|
||||||
for eval_start in Evals:
|
|
||||||
eval_end = Evals[eval_start]['end']
|
|
||||||
n += 1
|
|
||||||
vcd['values'][eval_start][elcode] = n
|
|
||||||
vcd['values'][eval_end][elcode] = None
|
|
||||||
|
|
||||||
# Eval_loop graph
|
# Measured waiting time
|
||||||
vcd['sigs']['evals']["eval_loop"] = code
|
for (start, end, cpu) in ThreadScheduleWaitIntervals:
|
||||||
elcode = code
|
mcode = getCode(32, 'measured', 'cpu%d_waiting' % cpu)
|
||||||
code += 1
|
addXValue(mcode, start)
|
||||||
n = 0
|
addValue(mcode, end, None)
|
||||||
for eval_start in EvalLoops:
|
|
||||||
eval_end = EvalLoops[eval_start]['end']
|
|
||||||
n += 1
|
|
||||||
vcd['values'][eval_start][elcode] = n
|
|
||||||
vcd['values'][eval_end][elcode] = None
|
|
||||||
|
|
||||||
if Mtasks:
|
# Predicted graph
|
||||||
# Predicted graph
|
for start, end in ExecGraphIntervals:
|
||||||
for eval_start in EvalLoops:
|
# Find the earliest MTask start after the start point, and the
|
||||||
eval_end = EvalLoops[eval_start]['end']
|
# latest MTask end before the end point, so we can scale to the
|
||||||
# Compute scale so predicted graph is of same width as eval
|
# same range
|
||||||
measured_scaling = (eval_end -
|
tStartIdx = bisect.bisect_left(tStart, start)
|
||||||
eval_start) / Global['predict_last_end']
|
if tStartIdx >= len(tStart):
|
||||||
# Predict mtasks that fill the time the eval occupied
|
continue
|
||||||
for mtask in Mtasks:
|
start = tStart[tStartIdx]
|
||||||
thread = Mtasks[mtask]['thread']
|
end = tEnd[bisect.bisect_right(tEnd, end) - 1]
|
||||||
pred_scaled_start = eval_start + int(
|
# Compute scale so predicted graph is of same width as interval
|
||||||
Mtasks[mtask]['predict_start'] * measured_scaling)
|
measured_scaling = (end - start) / Global['predict_last_end']
|
||||||
pred_scaled_end = eval_start + int(
|
# Predict mtasks that fill the time the execution occupied
|
||||||
(Mtasks[mtask]['predict_start'] +
|
for (hier_block, mtask_id) in Mtasks:
|
||||||
Mtasks[mtask]['predict_cost']) * measured_scaling)
|
mtask = Mtasks[(hier_block, mtask_id)]
|
||||||
if pred_scaled_start == pred_scaled_end:
|
thread = mtask['thread']
|
||||||
continue
|
pred_scaled_start = start + int(mtask['predict_start'] * measured_scaling)
|
||||||
|
pred_scaled_end = start + int(
|
||||||
|
(mtask['predict_start'] + mtask['predict_cost']) * measured_scaling)
|
||||||
|
if pred_scaled_start == pred_scaled_end:
|
||||||
|
continue
|
||||||
|
|
||||||
sig = "predicted_thread%d_mtask" % thread
|
mcode = getCode(32, 'predicted', 't%d_mtask' % thread)
|
||||||
if sig not in vcd['sigs']['predicted_threads']:
|
addValue(mcode, pred_scaled_start, mtask_id)
|
||||||
vcd['sigs']['predicted_threads'][sig] = code
|
addValue(mcode, pred_scaled_end, None)
|
||||||
code += 1
|
|
||||||
mcode = vcd['sigs']['predicted_threads'][sig]
|
|
||||||
|
|
||||||
vcd['values'][pred_scaled_start][mcode] = mtask
|
parallelism['predicted'][pred_scaled_start] += 1
|
||||||
vcd['values'][pred_scaled_end][mcode] = None
|
parallelism['predicted'][pred_scaled_end] -= 1
|
||||||
|
|
||||||
parallelism['predicted'][pred_scaled_start] += 1
|
# Parallelism graph
|
||||||
parallelism['predicted'][pred_scaled_end] -= 1
|
for measpred in ('measured', 'predicted'):
|
||||||
|
pcode = getCode(32, 'stats', '%s_parallelism' % measpred)
|
||||||
|
value = 0
|
||||||
|
for time in sorted(parallelism[measpred].keys()):
|
||||||
|
value += parallelism[measpred][time]
|
||||||
|
addValue(pcode, time, value)
|
||||||
|
|
||||||
# Parallelism graph
|
# Section graph
|
||||||
for measpred in ('measured', 'predicted'):
|
for thread, section in Sections.items():
|
||||||
vcd['sigs']['Stats']["%s_parallelism" % measpred] = code
|
if section:
|
||||||
pcode = code
|
scode = getCode(LongestVcdStrValueLength * 8, "section", f"t{thread}_trace")
|
||||||
code += 1
|
dcode = getCode(32, "section", f"t{thread}_depth")
|
||||||
value = 0
|
for time, stack in section:
|
||||||
for time in sorted(parallelism[measpred].keys()):
|
addValue(scode, time, stack[-1] if stack else None)
|
||||||
value += parallelism[measpred][time]
|
addValue(dcode, time, len(stack))
|
||||||
vcd['values'][time][pcode] = value
|
|
||||||
|
|
||||||
# Create output file
|
# Create output file
|
||||||
fh.write("$version Generated by verilator_gantt $end\n")
|
fh.write("$version Generated by verilator_gantt $end\n")
|
||||||
fh.write("$timescale 1ns $end\n")
|
fh.write("$timescale 1ns $end\n")
|
||||||
fh.write("\n")
|
fh.write("\n")
|
||||||
|
|
||||||
all_codes = {}
|
all_codes = set()
|
||||||
|
|
||||||
|
def writeScope(scope):
|
||||||
|
assert isinstance(scope, dict)
|
||||||
|
for key in sorted(scope):
|
||||||
|
val = scope[key]
|
||||||
|
if isinstance(val, dict):
|
||||||
|
fh.write(" $scope module %s $end\n" % key)
|
||||||
|
writeScope(val)
|
||||||
|
fh.write(" $upscope $end\n")
|
||||||
|
else:
|
||||||
|
(code, width) = val
|
||||||
|
all_codes.add(code)
|
||||||
|
fh.write(" $var wire %d v%x %s [%d:0] $end\n" %
|
||||||
|
(width, code, key, width - 1))
|
||||||
|
|
||||||
fh.write(" $scope module gantt $end\n")
|
fh.write(" $scope module gantt $end\n")
|
||||||
for module in sorted(vcd['sigs'].keys()):
|
writeScope(scopeSigs)
|
||||||
fh.write(" $scope module %s $end\n" % module)
|
|
||||||
for sig in sorted(vcd['sigs'][module].keys()):
|
|
||||||
code = vcd['sigs'][module][sig]
|
|
||||||
fh.write(" $var wire 32 v%x %s [31:0] $end\n" % (code, sig))
|
|
||||||
all_codes[code] = 1
|
|
||||||
fh.write(" $upscope $end\n")
|
|
||||||
fh.write(" $upscope $end\n")
|
fh.write(" $upscope $end\n")
|
||||||
fh.write("$enddefinitions $end\n")
|
fh.write("$enddefinitions $end\n")
|
||||||
fh.write("\n")
|
fh.write("\n")
|
||||||
|
|
||||||
first = True
|
first = True
|
||||||
for time in sorted(vcd['values']):
|
for time in sorted(values):
|
||||||
if first:
|
if first:
|
||||||
first = False
|
first = False
|
||||||
# Start with Z for any signals without time zero data
|
# Start with Z for any signals without time zero data
|
||||||
for code in sorted(all_codes.keys()):
|
for code in sorted(all_codes):
|
||||||
if code not in vcd['values'][time]:
|
if code not in values[time]:
|
||||||
vcd['values'][time][code] = None
|
addValue(code, time, None)
|
||||||
fh.write("#%d\n" % time)
|
fh.write("#%d\n" % time)
|
||||||
for code in sorted(vcd['values'][time].keys()):
|
for code in sorted(values[time]):
|
||||||
value = vcd['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):
|
||||||
|
fh.write("b%s v%x\n" % (value, code))
|
||||||
else:
|
else:
|
||||||
fh.write("b%s v%x\n" % (format(value, 'b'), code))
|
fh.write("b%s v%x\n" % (format(value, 'b'), code))
|
||||||
|
|
||||||
@@ -475,7 +600,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
|
||||||
@@ -483,8 +608,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-2023 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.
|
||||||
@@ -492,19 +616,16 @@ 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')
|
||||||
|
|
||||||
Args = parser.parse_args()
|
Args = parser.parse_args()
|
||||||
|
|
||||||
process(Args.filename)
|
read_data(Args.filename)
|
||||||
|
report()
|
||||||
if not Args.no_vcd:
|
if not Args.no_vcd:
|
||||||
write_vcd(Args.vcd)
|
write_vcd(Args.vcd)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# pylint: disable=C0114,C0209
|
# pylint: disable=C0114,C0209
|
||||||
#
|
#
|
||||||
# Copyright 2003-2023 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-2023 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()
|
||||||
|
|||||||
@@ -26,4 +26,5 @@ if git log --format=%B -n 1 "$COMMIT" | grep -q -i '\[CI\s\+ccache\s\+clear\]';
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Dump stats, then zero stats
|
# Dump stats, then zero stats
|
||||||
|
# 22.04: ccache -s -v -z
|
||||||
ccache -s -z
|
ccache -s -z
|
||||||
|
|||||||
+17
-33
@@ -27,12 +27,6 @@ fatal() {
|
|||||||
echo "ERROR: $(basename "$0"): $1" >&2; exit 1;
|
echo "ERROR: $(basename "$0"): $1" >&2; exit 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ "$CI_M32" = "0" ]; then
|
|
||||||
unset CI_M32
|
|
||||||
elif [ "$CI_M32" != "1" ]; then
|
|
||||||
fatal "\$CI_M32 must be '0' or '1'";
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$CI_OS_NAME" = "linux" ]; then
|
if [ "$CI_OS_NAME" = "linux" ]; then
|
||||||
MAKE=make
|
MAKE=make
|
||||||
elif [ "$CI_OS_NAME" = "osx" ]; then
|
elif [ "$CI_OS_NAME" = "osx" ]; then
|
||||||
@@ -46,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
|
||||||
}
|
}
|
||||||
@@ -61,21 +55,18 @@ 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-22.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 [ "$COVERAGE" = 1 ]; then
|
if [[ "$CI_RUNS_ON" =~ "ubuntu-22.04" ]] || [[ "$CI_RUNS_ON" =~ "ubuntu-24.04" ]]; then
|
||||||
yes yes | sudo cpan -fi Parallel::Forker
|
sudo apt-get install bear mold ||
|
||||||
fi
|
sudo apt-get install bear mold
|
||||||
if [ "$CI_M32" = 1 ]; then
|
|
||||||
sudo apt-get install gcc-multilib g++-multilib ||
|
|
||||||
sudo apt-get install gcc-multilib g++-multilib
|
|
||||||
fi
|
fi
|
||||||
elif [ "$CI_OS_NAME" = "osx" ]; then
|
elif [ "$CI_OS_NAME" = "osx" ]; then
|
||||||
brew update
|
brew update
|
||||||
@@ -98,38 +89,31 @@ 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 ||
|
sudo apt-get install gdb gtkwave lcov libfl-dev ccache jq z3 ||
|
||||||
sudo apt-get install gdb gtkwave lcov libfl-dev ccache
|
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 libclang-dev ||
|
sudo apt-get install python3-clang mold ||
|
||||||
sudo apt-get install libclang-dev
|
sudo apt-get install python3-clang mold
|
||||||
pip3 install clang==14.0
|
|
||||||
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
|
||||||
if [ "$CI_M32" = 1 ]; then
|
|
||||||
sudo apt-get install lib32z1-dev gcc-multilib g++-multilib ||
|
|
||||||
sudo apt-get install lib32z1-dev gcc-multilib g++-multilib
|
|
||||||
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
|
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
|
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
|
||||||
|
sudo sysctl -w vm.mmap_rnd_bits=28
|
||||||
else
|
else
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Unknown build stage
|
# Unknown build stage
|
||||||
|
|||||||
+37
-18
@@ -21,12 +21,6 @@ fatal() {
|
|||||||
echo "ERROR: $(basename "$0"): $1" >&2; exit 1;
|
echo "ERROR: $(basename "$0"): $1" >&2; exit 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ "$CI_M32" = "0" ]; then
|
|
||||||
unset CI_M32
|
|
||||||
elif [ "$CI_M32" != "1" ]; then
|
|
||||||
fatal "\$CI_M32 must be '0' or '1'";
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$CI_OS_NAME" = "linux" ]; then
|
if [ "$CI_OS_NAME" = "linux" ]; then
|
||||||
export MAKE=make
|
export MAKE=make
|
||||||
NPROC=$(nproc)
|
NPROC=$(nproc)
|
||||||
@@ -39,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
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@@ -46,9 +41,10 @@ if [ "$CI_BUILD_STAGE_NAME" = "build" ]; then
|
|||||||
|
|
||||||
if [ "$COVERAGE" != 1 ]; then
|
if [ "$COVERAGE" != 1 ]; then
|
||||||
autoconf
|
autoconf
|
||||||
./configure --enable-longtests --enable-ccwarn ${CI_M32:+--enable-m32}
|
./configure --enable-longtests --enable-ccwarn --prefix="$INSTALL_DIR"
|
||||||
ccache -z
|
ccache -z
|
||||||
"$MAKE" -j "$NPROC" -k
|
"$MAKE" -j "$NPROC" -k
|
||||||
|
# 22.04: ccache -s -v
|
||||||
ccache -s
|
ccache -s
|
||||||
if [ "$CI_OS_NAME" = "osx" ]; then
|
if [ "$CI_OS_NAME" = "osx" ]; then
|
||||||
file bin/verilator_bin
|
file bin/verilator_bin
|
||||||
@@ -66,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
|
||||||
@@ -89,26 +86,48 @@ elif [ "$CI_BUILD_STAGE_NAME" = "test" ]; then
|
|||||||
export VERILATOR_TEST_NO_GPROF=1 # gprof is a bit different on FreeBSD, disable
|
export VERILATOR_TEST_NO_GPROF=1 # gprof is a bit different on FreeBSD, disable
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Run sanitize on Ubuntu 20.04 only
|
# Run sanitize on Ubuntu 22.04 only
|
||||||
[ "$CI_RUNS_ON" = 'ubuntu-20.04' ] && [ "$CI_M32" = "" ] && sanitize='--sanitize' || sanitize=''
|
( [[ "$CI_RUNS_ON" =~ 'ubuntu-22.04' ]] || [[ "$CI_RUNS_ON" =~ 'ubuntu-24.04' ]] ) && sanitize='--sanitize' || sanitize=''
|
||||||
|
|
||||||
|
TEST_REGRESS=test_regress
|
||||||
|
if [ "$CI_RELOC" == 1 ]; then
|
||||||
|
# Testing that the installation is relocatable.
|
||||||
|
"$MAKE" install
|
||||||
|
mkdir -p "$RELOC_DIR"
|
||||||
|
mv "$INSTALL_DIR" "$RELOC_DIR/relocated-install"
|
||||||
|
export VERILATOR_ROOT="$RELOC_DIR/relocated-install/share/verilator"
|
||||||
|
TEST_REGRESS="$RELOC_DIR/test_regress"
|
||||||
|
mv test_regress "$TEST_REGRESS"
|
||||||
|
NODIST="$RELOC_DIR/nodist"
|
||||||
|
mv nodist "$NODIST"
|
||||||
|
# Feeling brave?
|
||||||
|
find . -delete
|
||||||
|
ls -la .
|
||||||
|
fi
|
||||||
|
|
||||||
# Run the specified test
|
# Run the specified test
|
||||||
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/3
|
"$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/3
|
"$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/3
|
"$MAKE" -C "$TEST_REGRESS" SCENARIOS="--dist --vlt --driver-clean $sanitize" DRIVER_HASHSET=--hashset=2/4
|
||||||
|
;;
|
||||||
|
dist-vlt-3)
|
||||||
|
"$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-
|
||||||
@@ -180,12 +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
|
||||||
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,17 @@
|
|||||||
# 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
|
||||||
|
RUN groupadd verilator \
|
||||||
|
&& useradd -g verilator -m verilator -s /bin/bash \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get install --no-install-recommends -y sudo \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
|
&& echo verilator ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/verilator \
|
||||||
|
&& chmod 0440 /etc/sudoers.d/verilator
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& DEBIAN_FRONTEND=noninteractive \
|
&& DEBIAN_FRONTEND=noninteractive \
|
||||||
@@ -26,14 +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 \
|
||||||
zlibc \
|
z3 \
|
||||||
zlib1g \
|
zlib1g \
|
||||||
zlib1g-dev \
|
zlib1g-dev \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
@@ -41,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 && \
|
||||||
@@ -52,6 +62,8 @@ COPY build.sh /tmp/build.sh
|
|||||||
|
|
||||||
ENV VERILATOR_AUTHOR_SITE=1
|
ENV VERILATOR_AUTHOR_SITE=1
|
||||||
|
|
||||||
|
USER verilator
|
||||||
|
|
||||||
WORKDIR /work
|
WORKDIR /work
|
||||||
|
|
||||||
ENTRYPOINT [ "/tmp/build.sh" ]
|
ENTRYPOINT [ "/tmp/build.sh" ]
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
.. Copyright 2003-2023 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 \
|
||||||
@@ -19,10 +19,16 @@ RUN apt-get update \
|
|||||||
ccache \
|
ccache \
|
||||||
flex \
|
flex \
|
||||||
git \
|
git \
|
||||||
|
help2man \
|
||||||
|
libfl2 \
|
||||||
libfl-dev \
|
libfl-dev \
|
||||||
libgoogle-perftools-dev \
|
libgoogle-perftools-dev \
|
||||||
|
numactl \
|
||||||
perl \
|
perl \
|
||||||
|
perl-doc \
|
||||||
python3 \
|
python3 \
|
||||||
|
zlib1g \
|
||||||
|
zlib1g-dev \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
@@ -39,10 +45,11 @@ RUN git clone "${REPO}" verilator && \
|
|||||||
git checkout "${SOURCE_COMMIT}" && \
|
git checkout "${SOURCE_COMMIT}" && \
|
||||||
autoconf && \
|
autoconf && \
|
||||||
./configure && \
|
./configure && \
|
||||||
make -j "$(nproc)" && \
|
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-2023 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-2023 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
|
||||||
|
|||||||
+145
-78
@@ -1,20 +1,21 @@
|
|||||||
# DESCRIPTION: Process this file with autoconf to produce a configure script.
|
# DESCRIPTION: Process this file with autoconf to produce a configure script.
|
||||||
#
|
#
|
||||||
# Copyright 2003-2023 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,
|
# 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 distclean' 'autoconf' './configure' 'make' 'make test'
|
||||||
# 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.010 2023-04-30],
|
AC_INIT([Verilator],[5.040 2025-08-30],
|
||||||
[https://verilator.org],
|
[https://verilator.org],
|
||||||
[verilator],[https://verilator.org])
|
[verilator],[https://verilator.org])
|
||||||
|
|
||||||
AC_CONFIG_HEADERS(src/config_build.h)
|
AC_CONFIG_HEADERS(src/config_package.h)
|
||||||
AC_CONFIG_FILES(Makefile src/Makefile src/Makefile_obj include/verilated.mk include/verilated_config.h verilator.pc verilator-config.cmake verilator-config-version.cmake)
|
AC_CONFIG_FILES(Makefile src/Makefile src/Makefile_obj include/verilated.mk include/verilated_config.h verilator.pc verilator-config.cmake verilator-config-version.cmake)
|
||||||
|
|
||||||
# Version
|
# Version
|
||||||
@@ -24,6 +25,13 @@ AC_SUBST(PACKAGE_VERSION_NUMBER)
|
|||||||
AC_DEFINE_UNQUOTED([PACKAGE_VERSION_NUMBER_STRING],["$PACKAGE_VERSION_NUMBER"],[Package version as a number])
|
AC_DEFINE_UNQUOTED([PACKAGE_VERSION_NUMBER_STRING],["$PACKAGE_VERSION_NUMBER"],[Package version as a number])
|
||||||
VERILATOR_VERSION_INTEGER=`AS_ECHO("$PACKAGE_VERSION") | [sed 's/\([0-9]\)\.\([0-9][0-9][0-9]\) .*/\1\2000/g']`
|
VERILATOR_VERSION_INTEGER=`AS_ECHO("$PACKAGE_VERSION") | [sed 's/\([0-9]\)\.\([0-9][0-9][0-9]\) .*/\1\2000/g']`
|
||||||
AC_SUBST(VERILATOR_VERSION_INTEGER)
|
AC_SUBST(VERILATOR_VERSION_INTEGER)
|
||||||
|
AC_DEFINE_UNQUOTED([PACKAGE_VERSION_STRING_CHAR],
|
||||||
|
[static const char* const PACKAGE_STRING_UNUSED = "$PACKAGE_STRING";],
|
||||||
|
[Package version as a number])
|
||||||
|
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],
|
||||||
@@ -61,22 +69,9 @@ AC_ARG_ENABLE([tcmalloc],
|
|||||||
*) AC_MSG_ERROR([bad value '${enableval}' for --enable-tcmalloc]) ;;
|
*) AC_MSG_ERROR([bad value '${enableval}' for --enable-tcmalloc]) ;;
|
||||||
esac],
|
esac],
|
||||||
[CFG_WITH_TCMALLOC=check;])
|
[CFG_WITH_TCMALLOC=check;])
|
||||||
|
AC_SUBST(CFG_WITH_TCMALLOC)
|
||||||
AC_MSG_RESULT($CFG_WITH_TCMALLOC)
|
AC_MSG_RESULT($CFG_WITH_TCMALLOC)
|
||||||
|
|
||||||
# Flag to enable -m32 build
|
|
||||||
AC_MSG_CHECKING(whether to use -m32)
|
|
||||||
AC_ARG_ENABLE([m32],
|
|
||||||
[AS_HELP_STRING([--enable-m32],
|
|
||||||
[Use -m32 for all compilation and link,
|
|
||||||
including Verilator and generated models.])],
|
|
||||||
[case "${enableval}" in
|
|
||||||
yes) CFG_ENABLE_M32=yes ;;
|
|
||||||
no) CFG_ENABLE_M32=no ;;
|
|
||||||
*) AC_MSG_ERROR([bad value '${enableval}' for --enable-m32]) ;;
|
|
||||||
esac],
|
|
||||||
CFG_ENABLE_M32=no)
|
|
||||||
AC_MSG_RESULT($CFG_ENABLE_M32)
|
|
||||||
|
|
||||||
# Flag to enable coverage build
|
# Flag to enable coverage build
|
||||||
AC_MSG_CHECKING(whether to build for coverage collection)
|
AC_MSG_CHECKING(whether to build for coverage collection)
|
||||||
AC_ARG_ENABLE([coverage],
|
AC_ARG_ENABLE([coverage],
|
||||||
@@ -144,6 +139,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 "
|
||||||
@@ -156,8 +178,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 version... $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; }])],
|
||||||
@@ -170,24 +194,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
|
||||||
@@ -276,6 +302,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
|
||||||
@@ -315,15 +378,7 @@ AC_DEFUN([_MY_LDLIBS_CHECK_OPT],
|
|||||||
_MY_LDLIBS_CHECK_IFELSE($2, $1="$$1 $2")
|
_MY_LDLIBS_CHECK_IFELSE($2, $1="$$1 $2")
|
||||||
])
|
])
|
||||||
|
|
||||||
# When using -m32. Check this first as later checks may fail with the -m32 flag.
|
# Add the coverage flags early as they influence later checks.
|
||||||
if test "$CFG_ENABLE_M32" = "yes"; then
|
|
||||||
_MY_CXX_CHECK_IFELSE(
|
|
||||||
-m32,
|
|
||||||
[CXX="$CXX -m32"],
|
|
||||||
[AC_MSG_ERROR([--enable-m32 was given but compiler does not support -m32])])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Similarly, add the coverage flags early as they influence later checks.
|
|
||||||
if test "$CFG_ENABLE_COVERAGE" = "yes"; then
|
if test "$CFG_ENABLE_COVERAGE" = "yes"; then
|
||||||
_MY_CXX_CHECK_OPT(CXX,--coverage)
|
_MY_CXX_CHECK_OPT(CXX,--coverage)
|
||||||
# Otherwise inline may not show as uncovered
|
# Otherwise inline may not show as uncovered
|
||||||
@@ -350,7 +405,7 @@ AC_SUBST(CFG_CXXFLAGS_PROFILE)
|
|||||||
# Macros work such that first option that passes is the one we take
|
# Macros work such that first option that passes is the one we take
|
||||||
# Currently enable c++17/c++14 due to packaged SystemC dependency
|
# Currently enable c++17/c++14 due to packaged SystemC dependency
|
||||||
# c++17 is the newest that Verilator is regularly tested to support
|
# c++17 is the newest that Verilator is regularly tested to support
|
||||||
# c++11 is the oldest that Verilator supports
|
# c++14 is the oldest that Verilator supports
|
||||||
# gnu is required for Cygwin to compile verilated.h successfully
|
# gnu is required for Cygwin to compile verilated.h successfully
|
||||||
#_MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=gnu++20)
|
#_MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=gnu++20)
|
||||||
#_MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=c++20)
|
#_MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=c++20)
|
||||||
@@ -358,8 +413,6 @@ _MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=gnu++17)
|
|||||||
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=c++17)
|
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=c++17)
|
||||||
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=gnu++14)
|
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=gnu++14)
|
||||||
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=c++14)
|
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=c++14)
|
||||||
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=gnu++11)
|
|
||||||
_MY_CXX_CHECK_SET(CFG_CXXFLAGS_STD_NEWEST,-std=c++11)
|
|
||||||
AC_SUBST(CFG_CXXFLAGS_STD_NEWEST)
|
AC_SUBST(CFG_CXXFLAGS_STD_NEWEST)
|
||||||
|
|
||||||
# Flags for compiling Verilator internals including parser, and Verilated files
|
# Flags for compiling Verilator internals including parser, and Verilated files
|
||||||
@@ -371,40 +424,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_IFELSE(
|
_MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES, "")
|
||||||
-fcoroutines-ts,
|
_MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines-ts)
|
||||||
[CFG_CXXFLAGS_COROUTINES="-fcoroutines-ts"],
|
_MY_CXX_CHECK_CORO_SET(CFG_CXXFLAGS_COROUTINES,-fcoroutines)
|
||||||
[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)
|
||||||
@@ -439,17 +472,25 @@ 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],
|
||||||
[-Wno-tautological-bitwise-compare],
|
[-Wno-c++11-narrowing],
|
||||||
|
[-Wno-constant-logical-operand],
|
||||||
|
[-Wno-int-in-bool-context],
|
||||||
|
[-Wno-non-pod-varargs],
|
||||||
[-Wno-parentheses-equality],
|
[-Wno-parentheses-equality],
|
||||||
|
[-Wno-shadow],
|
||||||
[-Wno-sign-compare],
|
[-Wno-sign-compare],
|
||||||
|
[-Wno-subobject-linkage],
|
||||||
|
[-Wno-tautological-bitwise-compare],
|
||||||
|
[-Wno-tautological-compare],
|
||||||
[-Wno-uninitialized],
|
[-Wno-uninitialized],
|
||||||
|
[-Wno-unused-but-set-parameter],
|
||||||
[-Wno-unused-but-set-variable],
|
[-Wno-unused-but-set-variable],
|
||||||
[-Wno-unused-parameter],
|
[-Wno-unused-parameter],
|
||||||
[-Wno-unused-variable],
|
[-Wno-unused-variable]],[
|
||||||
[-Wno-shadow]],[
|
|
||||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_NO_UNUSED,cflag)
|
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_NO_UNUSED,cflag)
|
||||||
# CMake will test what flags work itself, so pass all flags through to it
|
# CMake will test what flags work itself, so pass all flags through to it
|
||||||
CFG_CXX_FLAGS_CMAKE="$CFG_CXX_FLAGS_CMAKE cflag"
|
CFG_CXX_FLAGS_CMAKE="$CFG_CXX_FLAGS_CMAKE cflag"
|
||||||
@@ -470,22 +511,28 @@ m4_foreach([ldflag], [
|
|||||||
AC_SUBST(CFG_LDLIBS_THREADS)
|
AC_SUBST(CFG_LDLIBS_THREADS)
|
||||||
AC_SUBST(CFG_LDFLAGS_THREADS_CMAKE)
|
AC_SUBST(CFG_LDFLAGS_THREADS_CMAKE)
|
||||||
|
|
||||||
|
# If 'mold' is installed, use it to link for faster buildtimes
|
||||||
|
_MY_LDLIBS_CHECK_OPT(CFG_LDFLAGS_SRC, -fuse-ld=mold)
|
||||||
|
_MY_LDLIBS_CHECK_OPT(CFG_LDFLAGS_VERILATED, -fuse-ld=mold)
|
||||||
|
|
||||||
# When linking partially statically
|
# When linking partially statically
|
||||||
if test "$CFG_ENABLE_PARTIAL_STATIC" = "yes"; then
|
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
|
||||||
AC_SUBST(CFG_LDFLAGS_SRC)
|
AC_SUBST(CFG_LDFLAGS_SRC)
|
||||||
|
AC_SUBST(CFG_LDFLAGS_VERILATED)
|
||||||
|
|
||||||
# The pthread library is required by tcmalloc, so add it if it exists. If it
|
# The pthread library is required by tcmalloc, so add it if it exists. If it
|
||||||
# does not, the tcmalloc check below will fail anyway, and linking against
|
# does not, the tcmalloc check below will fail anyway, and linking against
|
||||||
# pthreads is harmless otherwise.
|
# pthreads is harmless otherwise.
|
||||||
CFG_LIBS="$LIBS $CFG_LIBS"
|
CFG_LIBS="$LIBS $CFG_LIBS"
|
||||||
_MY_LDLIBS_CHECK_OPT(CFG_LIBS, -lpthread)
|
_MY_LDLIBS_CHECK_OPT(CFG_LIBS, -lpthread)
|
||||||
|
_MY_LDLIBS_CHECK_OPT(CFG_LIBS, -latomic)
|
||||||
|
|
||||||
# Check libraries for MingW
|
# Check libraries for MingW
|
||||||
_MY_LDLIBS_CHECK_OPT(CFG_LIBS, -lbcrypt)
|
_MY_LDLIBS_CHECK_OPT(CFG_LIBS, -lbcrypt)
|
||||||
@@ -497,25 +544,27 @@ _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)
|
||||||
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-free)
|
_MY_CXX_CHECK_OPT(CFG_CXXFLAGS_SRC,-fno-builtin-free)
|
||||||
|
AC_DEFINE([HAVE_TCMALLOC],[1],[Defined if have tcmalloc])
|
||||||
fi],
|
fi],
|
||||||
[if test "$CFG_WITH_TCMALLOC" = "yes"; then
|
[if test "$CFG_WITH_TCMALLOC" = "yes"; then
|
||||||
AC_MSG_ERROR([--enable-tcmalloc was given but test for ${LTCMALLOC} failed])
|
AC_MSG_ERROR([--enable-tcmalloc was given but test for ${LTCMALLOC} failed])
|
||||||
fi])
|
fi])
|
||||||
|
AC_SUBST(HAVE_TCMALLOC)
|
||||||
AC_SUBST(CFG_LIBS)
|
AC_SUBST(CFG_LIBS)
|
||||||
|
|
||||||
# Need C++11 at least
|
# Need C++14 at least
|
||||||
#Alternative: AX_CXX_COMPILE_STDCXX([11])
|
#Alternative: AX_CXX_COMPILE_STDCXX([14])
|
||||||
AC_DEFUN([_MY_CXX_CHECK_CXX_VER],
|
AC_DEFUN([_MY_CXX_CHECK_CXX_VER],
|
||||||
[# _MY_CXX_CHECK_CXX_VER(flag) -- Check if compiler runs C++11
|
[# _MY_CXX_CHECK_CXX_VER(flag) -- Check if compiler runs C++14
|
||||||
# Set $_my_result
|
# Set $_my_result
|
||||||
AC_LINK_IFELSE(
|
AC_LINK_IFELSE(
|
||||||
[AC_LANG_PROGRAM([#include <thread>
|
[AC_LANG_PROGRAM([#include <thread>
|
||||||
#if (__cplusplus < 201103L)
|
#if (__cplusplus < 201402L)
|
||||||
# error "Too old"
|
# error "Too old"
|
||||||
#endif
|
#endif
|
||||||
], [[ ]])],
|
], [[ ]])],
|
||||||
@@ -531,13 +580,13 @@ AC_DEFUN([_MY_CXX_CHECK_CXX_VER],
|
|||||||
# Add $CFG_CXXFLAGS_STD only if can't compile correctly otherwise,
|
# Add $CFG_CXXFLAGS_STD only if can't compile correctly otherwise,
|
||||||
# as adding std= when not needed can cause errors with the C++ std library.
|
# as adding std= when not needed can cause errors with the C++ std library.
|
||||||
CFG_CXXFLAGS_STD=$CFG_CXXFLAGS_STD_NEWEST
|
CFG_CXXFLAGS_STD=$CFG_CXXFLAGS_STD_NEWEST
|
||||||
AC_MSG_CHECKING(whether $CXX supports C++11)
|
AC_MSG_CHECKING(whether $CXX supports C++14)
|
||||||
_MY_CXX_CHECK_CXX_VER()
|
_MY_CXX_CHECK_CXX_VER()
|
||||||
AC_MSG_RESULT($_my_result)
|
AC_MSG_RESULT($_my_result)
|
||||||
if test "$_my_result" = "no" ; then
|
if test "$_my_result" = "no" ; then
|
||||||
CXXFLAGS="$CXXFLAGS $CFG_CXXFLAGS_STD"
|
CXXFLAGS="$CXXFLAGS $CFG_CXXFLAGS_STD"
|
||||||
CFG_CXX_FLAGS_CMAKE="$CFG_CXX_FLAGS_CMAKE $CFG_CXXFLAGS_STD"
|
CFG_CXX_FLAGS_CMAKE="$CFG_CXX_FLAGS_CMAKE $CFG_CXXFLAGS_STD"
|
||||||
AC_MSG_CHECKING(whether $CXX supports C++11 with $CFG_CXXFLAGS_STD)
|
AC_MSG_CHECKING(whether $CXX supports C++14 with $CFG_CXXFLAGS_STD)
|
||||||
_MY_CXX_CHECK_CXX_VER()
|
_MY_CXX_CHECK_CXX_VER()
|
||||||
AC_MSG_RESULT($_my_result)
|
AC_MSG_RESULT($_my_result)
|
||||||
else
|
else
|
||||||
@@ -547,13 +596,28 @@ else
|
|||||||
fi
|
fi
|
||||||
if test "$_my_result" = "no" ; then
|
if test "$_my_result" = "no" ; then
|
||||||
AC_MSG_NOTICE([[]])
|
AC_MSG_NOTICE([[]])
|
||||||
AC_MSG_ERROR([[the $CXX compiler appears to not support C++11.
|
AC_MSG_ERROR([[the $CXX compiler appears to not support C++14.
|
||||||
|
|
||||||
Verilator requires a C++11 or newer compiler.]])
|
Verilator requires a C++14 or newer compiler.]])
|
||||||
|
|
||||||
fi
|
fi
|
||||||
AC_SUBST(CFG_CXXFLAGS_STD)
|
AC_SUBST(CFG_CXXFLAGS_STD)
|
||||||
|
|
||||||
|
# Compiler precompiled header options (assumes either gcc or clang++)
|
||||||
|
AC_MSG_CHECKING([for $CXX precompile header include option])
|
||||||
|
if $CXX --help | grep include-pch >/dev/null 2>/dev/null ; then
|
||||||
|
# clang
|
||||||
|
CFG_CXXFLAGS_PCH_I=-include-pch
|
||||||
|
CFG_GCH_IF_CLANG=.gch
|
||||||
|
else
|
||||||
|
# GCC
|
||||||
|
CFG_CXXFLAGS_PCH_I=-include
|
||||||
|
CFG_GCH_IF_CLANG=
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT($CFG_CXXFLAGS_PCH_I)
|
||||||
|
AC_SUBST(CFG_CXXFLAGS_PCH_I)
|
||||||
|
AC_SUBST(CFG_GCH_IF_CLANG)
|
||||||
|
|
||||||
# Checks for library functions.
|
# Checks for library functions.
|
||||||
AC_CHECK_MEMBER([struct stat.st_mtim.tv_nsec],
|
AC_CHECK_MEMBER([struct stat.st_mtim.tv_nsec],
|
||||||
[AC_DEFINE([HAVE_STAT_NSEC],[1],[Defined if struct stat has st_mtim.tv_nsec])],
|
[AC_DEFINE([HAVE_STAT_NSEC],[1],[Defined if struct stat has st_mtim.tv_nsec])],
|
||||||
@@ -568,7 +632,7 @@ ACO_SAVE_LIBS="$LIBS"
|
|||||||
LIBS="$LIBS -lsystemc"
|
LIBS="$LIBS -lsystemc"
|
||||||
AC_LINK_IFELSE(
|
AC_LINK_IFELSE(
|
||||||
[AC_LANG_PROGRAM([[#include <systemc.h>
|
[AC_LANG_PROGRAM([[#include <systemc.h>
|
||||||
extern "C" int sc_main(int argc, char* argv[]) {}
|
extern "C" int sc_main(int argc, char* argv[]) { return 0; }
|
||||||
]],[[sc_version()]])],
|
]],[[sc_version()]])],
|
||||||
[_my_result=yes
|
[_my_result=yes
|
||||||
AC_DEFINE([HAVE_SYSTEMC],[1],[Defined if have SystemC library])],
|
AC_DEFINE([HAVE_SYSTEMC],[1],[Defined if have SystemC library])],
|
||||||
@@ -579,6 +643,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
|
||||||
|
|||||||
+114
-6
@@ -3,56 +3,98 @@ 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
|
||||||
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
|
||||||
|
Andrew Miloradovsky
|
||||||
Andrew Nolte
|
Andrew Nolte
|
||||||
|
Andrew Voznytsa
|
||||||
|
Anthony Donlon
|
||||||
|
Anthony Moore
|
||||||
Arkadiusz Kozdra
|
Arkadiusz Kozdra
|
||||||
|
Arthur Rosa
|
||||||
|
Artur Bieniek
|
||||||
|
Aylon Chaim Porat
|
||||||
|
Bartłomiej Chmiel
|
||||||
|
Brian Li
|
||||||
Cameron Kirk
|
Cameron Kirk
|
||||||
|
Chih-Mao Chen
|
||||||
|
Chris Bachhuber
|
||||||
Chris Randall
|
Chris Randall
|
||||||
|
Christopher Taylor
|
||||||
Chuxuan Wang
|
Chuxuan Wang
|
||||||
|
Chykon
|
||||||
|
Congcong Cai
|
||||||
Conor McCullough
|
Conor McCullough
|
||||||
Dan Petrisko
|
Dan Petrisko
|
||||||
|
Danny Oler
|
||||||
Daniel Bates
|
Daniel Bates
|
||||||
|
Dave Sargeant
|
||||||
David Horton
|
David Horton
|
||||||
|
David Ledger
|
||||||
David Metz
|
David Metz
|
||||||
David Stanford
|
David Stanford
|
||||||
David Turner
|
David Turner
|
||||||
|
Dercury
|
||||||
|
Diego Roux
|
||||||
|
Dominick Grochowina
|
||||||
|
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
|
||||||
Eyck Jentzsch
|
Eyck Jentzsch
|
||||||
|
Fabian Keßler
|
||||||
Fan Shupei
|
Fan Shupei
|
||||||
Felix Neumärker
|
Felix Neumärker
|
||||||
Felix Yan
|
Felix Yan
|
||||||
|
Frans Skarman
|
||||||
|
Fuad Ismail
|
||||||
|
Furqan Nadir
|
||||||
|
G-A. Kamendje
|
||||||
Garrett Smith
|
Garrett Smith
|
||||||
|
George Polack
|
||||||
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
|
||||||
Gustav Svensk
|
Gustav Svensk
|
||||||
G-A. Kamendje
|
Gökçe Aydos
|
||||||
|
Han Qi
|
||||||
Harald Heckmann
|
Harald Heckmann
|
||||||
|
Hennadii Chernyshchyk
|
||||||
Howard Su
|
Howard Su
|
||||||
Huang Rui
|
Huang Rui
|
||||||
Huanghuang Zhou
|
Huanghuang Zhou
|
||||||
HungMingWu
|
HungMingWu
|
||||||
HyungKi Jeong
|
HyungKi Jeong
|
||||||
|
Ibrahim Burak Yorulmaz
|
||||||
|
Igor Zaworski
|
||||||
|
Ilya Barkov
|
||||||
Iru Cai
|
Iru Cai
|
||||||
Ivan Vnučec
|
Ivan Vnučec
|
||||||
Ilya Barkov
|
|
||||||
Iztok Jeras
|
Iztok Jeras
|
||||||
Jake Merdich
|
Jake Merdich
|
||||||
|
James Bailey
|
||||||
James Hanlon
|
James Hanlon
|
||||||
James Hutchinson
|
James Hutchinson
|
||||||
James Pallister
|
James Pallister
|
||||||
@@ -65,26 +107,46 @@ Jeremy Bennett
|
|||||||
Jesse Taube
|
Jesse Taube
|
||||||
Jevin Sweval
|
Jevin Sweval
|
||||||
Jiacheng Qian
|
Jiacheng Qian
|
||||||
|
Jiamin Zhu
|
||||||
|
Jiangjie Weng
|
||||||
|
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
|
||||||
Jonathan Drolet
|
Jonathan Drolet
|
||||||
Joseph Nwabueze
|
Jonathan Schröter
|
||||||
|
Jordan McConnon
|
||||||
|
Jose Loyola
|
||||||
Josep Sans
|
Josep Sans
|
||||||
|
Joseph Nwabueze
|
||||||
Josh Redford
|
Josh Redford
|
||||||
|
Julian Daube
|
||||||
Julie Schwartz
|
Julie Schwartz
|
||||||
Julien Margetts
|
Julien Margetts
|
||||||
|
Justin Thiel
|
||||||
Kaleb Barrett
|
Kaleb Barrett
|
||||||
Kamil Rakoczy
|
Kamil Rakoczy
|
||||||
Kanad Kanhere
|
Kanad Kanhere
|
||||||
|
Kefa Chen
|
||||||
Keith Colbert
|
Keith Colbert
|
||||||
Kevin Kiningham
|
Kevin Kiningham
|
||||||
|
Kevin Nygaard
|
||||||
Kritik Bhimani
|
Kritik Bhimani
|
||||||
Krzysztof Bieganski
|
Krzysztof Bieganski
|
||||||
|
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
|
||||||
@@ -97,68 +159,114 @@ Marlon James
|
|||||||
Marshal Qiao
|
Marshal Qiao
|
||||||
Martin Schmidt
|
Martin Schmidt
|
||||||
Martin Stadler
|
Martin Stadler
|
||||||
|
Mateusz Gancarz
|
||||||
Matthew Ballance
|
Matthew Ballance
|
||||||
|
Max Wipfli
|
||||||
|
Michael Bedford Taylor
|
||||||
|
Michael Bikovitsky
|
||||||
Michael Killough
|
Michael Killough
|
||||||
|
Michal Czyz
|
||||||
Michaël Lefebvre
|
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
|
||||||
|
Oleh Maksymenko
|
||||||
Patrick Stewart
|
Patrick Stewart
|
||||||
|
Paul Bowen-Huggett
|
||||||
|
Paul Swirhun
|
||||||
Paul Wright
|
Paul Wright
|
||||||
|
Pawel Jewstafjew
|
||||||
Pawel Sagan
|
Pawel Sagan
|
||||||
|
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
|
||||||
Piotr Binkowski
|
Piotr Binkowski
|
||||||
Qingyao Sun
|
Qingyao Sun
|
||||||
|
Quentin Corradi
|
||||||
Rafal Kapuscik
|
Rafal Kapuscik
|
||||||
|
Rasfunk
|
||||||
Raynard Qiao
|
Raynard Qiao
|
||||||
|
Ricardo Barbedo
|
||||||
Richard Myers
|
Richard Myers
|
||||||
Risto Pejašinović
|
Risto Pejašinović
|
||||||
Robert Balas
|
Robert Balas
|
||||||
|
Robin Heinemann
|
||||||
|
Rodrigo Batista de Moraes
|
||||||
Rupert Swarbrick
|
Rupert Swarbrick
|
||||||
|
Ryan Ziegler
|
||||||
Ryszard Rozak
|
Ryszard Rozak
|
||||||
Samuel Riedel
|
Samuel Riedel
|
||||||
Sean Cross
|
Sean Cross
|
||||||
Sebastien Van Cauwenberghe
|
Sebastien Van Cauwenberghe
|
||||||
|
Sergey Fedorov
|
||||||
Sergi Granell
|
Sergi Granell
|
||||||
|
Seth Pellegrino
|
||||||
|
Shou-Li Hsu
|
||||||
Srinivasan Venkataramanan
|
Srinivasan Venkataramanan
|
||||||
Stefan Wallentowitz
|
Stefan Wallentowitz
|
||||||
Stephen Henry
|
Stephen Henry
|
||||||
Steven Hugg
|
Steven Hugg
|
||||||
|
Szymon Gizler
|
||||||
Sören Tempel
|
Sören Tempel
|
||||||
Teng Huang
|
Teng Huang
|
||||||
|
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
|
||||||
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
|
||||||
Victor Besyakov
|
Victor Besyakov
|
||||||
|
Vito Gamberini
|
||||||
William D. Jones
|
William D. Jones
|
||||||
Wilson Snyder
|
Wilson Snyder
|
||||||
Xi Zhang
|
Xi Zhang
|
||||||
|
Yan Xu
|
||||||
|
Yangyu Chen
|
||||||
|
Yilou Wang
|
||||||
Yinan Xu
|
Yinan Xu
|
||||||
Yoda Lee
|
Yoda Lee
|
||||||
Yossi Nivin
|
Yossi Nivin
|
||||||
|
Yu-Sheng Lin
|
||||||
Yuri Victorovich
|
Yuri Victorovich
|
||||||
Yutetsu TAKATSUKASA
|
Yutetsu TAKATSUKASA
|
||||||
Yu-Sheng Lin
|
|
||||||
Yves Mathieu
|
Yves Mathieu
|
||||||
Zhanglei Wang
|
Zhanglei Wang
|
||||||
|
Zhen Yan
|
||||||
|
Zhou Shen
|
||||||
|
Zhouyi Shen
|
||||||
Zixi Li
|
Zixi Li
|
||||||
|
february cozzocrea
|
||||||
|
sumpster
|
||||||
|
Àlex Torregrosa
|
||||||
|
Ícaro Lima
|
||||||
|
|||||||
+13
-3
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
# Code available from: https://verilator.org
|
# Code available from: https://verilator.org
|
||||||
#
|
#
|
||||||
# Copyright 2003-2023 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.
|
||||||
@@ -18,12 +18,16 @@
|
|||||||
RST2HTML = rst2html
|
RST2HTML = rst2html
|
||||||
PYTHON3 = python3
|
PYTHON3 = python3
|
||||||
DOXYGEN = doxygen
|
DOXYGEN = doxygen
|
||||||
SPHINXOPTS ?= -c guide
|
|
||||||
SPHINXBUILD ?= sphinx-build
|
SPHINXBUILD ?= sphinx-build
|
||||||
|
|
||||||
SOURCEDIR = guide
|
SOURCEDIR = guide
|
||||||
BUILDDIR = _build
|
BUILDDIR = _build
|
||||||
|
|
||||||
|
SPHINXOPTS ?= -c guide -j 4
|
||||||
|
ifneq ($(VERILATOR_ANALYTICS_ID),)
|
||||||
|
SPHINXOPTS += -D html_theme_options.analytics_id=$(VERILATOR_ANALYTICS_ID)
|
||||||
|
endif
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
@@ -64,15 +68,21 @@ pdf:
|
|||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
html latex linkcheck spelling::
|
html latex linkcheck::
|
||||||
$(MAKE) vl-extract
|
$(MAKE) vl-extract
|
||||||
$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
||||||
$(PYTHON3) bin/vl_sphinx_fix _build
|
$(PYTHON3) bin/vl_sphinx_fix _build
|
||||||
|
|
||||||
|
spelling::
|
||||||
|
$(MAKE) vl-extract
|
||||||
|
$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
||||||
|
sort -o guide/spelling.txt guide/spelling.txt
|
||||||
|
|
||||||
help:
|
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
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
Verilator Documentation
|
||||||
|
=======================
|
||||||
|
|
||||||
|
This folder contains sources for Verilator documentation.
|
||||||
|
|
||||||
|
For formatted documentation see:
|
||||||
|
|
||||||
|
- `Verilator README <https://github.com/verilator/verilator>`_
|
||||||
|
|
||||||
|
- `Verilator installation and package directory structure
|
||||||
|
<https://verilator.org/install>`_
|
||||||
|
|
||||||
|
- `Verilator manual (HTML) <https://verilator.org/verilator_doc.html>`_,
|
||||||
|
or `Verilator manual (PDF) <https://verilator.org/verilator_doc.pdf>`_
|
||||||
|
|
||||||
|
- `Subscribe to Verilator announcements
|
||||||
|
<https://github.com/verilator/verilator-announce>`_
|
||||||
|
|
||||||
|
- `Verilator forum <https://verilator.org/forum>`_
|
||||||
|
|
||||||
|
- `Verilator issues <https://verilator.org/issues>`_
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# pylint: disable=C0112,C0114,C0115,C0116,C0209,C0301,R0201,R0903
|
# pylint: disable=C0112,C0114,C0115,C0116,C0209,C0301,R0903
|
||||||
# -*- Python -*- See copyright, etc below
|
# -*- Python -*- See copyright, etc below
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
@@ -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-2023 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-2023 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,4 @@
|
|||||||
|
.. comment: generated by t_event_control_star_never_bad
|
||||||
|
.. code-block:: sv
|
||||||
|
|
||||||
|
always @* a = 100;
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
.. comment: generated by t_event_control_star_never_bad
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
%Warning-ALWNEVER: example.v:1:3 'always @*' will never execute as expression list is empty (no variables read)
|
||||||
@@ -0,0 +1,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)*/
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
.. comment: generated by t_lint_didnotconverge_bad
|
.. comment: generated by t_lint_didnotconverge_bad
|
||||||
.. code-block::
|
.. code-block::
|
||||||
|
|
||||||
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] a)
|
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] b)
|
||||||
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge.
|
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge.
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
.. comment: generated by t_lint_paramnodefault_bad
|
||||||
|
.. code-block:: sv
|
||||||
|
:linenos:
|
||||||
|
:emphasize-lines: 2
|
||||||
|
|
||||||
|
module sub;
|
||||||
|
parameter NODEF; //<--- Warning
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
.. comment: generated by t_lint_paramnodefault_bad
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
%Error-PARAMNODEFAULT: example.v:1:13 Parameter without default requires ANSI-style parameter list (IEEE 1800-2023 6.20.1): 'NODEF'
|
||||||
|
8 | parameter NODEF;
|
||||||
|
| ^~~~~
|
||||||
@@ -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;
|
||||||
|
| ^~~~~~~~
|
||||||
@@ -3,6 +3,6 @@
|
|||||||
:linenos:
|
:linenos:
|
||||||
:emphasize-lines: 3
|
:emphasize-lines: 3
|
||||||
|
|
||||||
int array[5];
|
logic [31:0] array[5];
|
||||||
bit [1:0] rd_addr;
|
bit [1:0] rd_addr;
|
||||||
wire int rd_value = array[rd_addr]; //<--- Warning
|
wire [31:0] rd_value = array[rd_addr]; //<--- Warning
|
||||||
|
|||||||
@@ -2,4 +2,4 @@
|
|||||||
.. code-block:: sv
|
.. code-block:: sv
|
||||||
:emphasize-lines: 1
|
:emphasize-lines: 1
|
||||||
|
|
||||||
wire int rd_value = array[{1'b0, rd_addr}]; //<--- Fixed
|
wire [31:0] rd_value = array[{1'b0, rd_addr}]; //<--- Fixed
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. comment: generated by t_lint_widthexpand_docs_bad
|
.. comment: generated by t_lint_widthexpand_docs_bad
|
||||||
.. code-block::
|
.. code-block::
|
||||||
|
|
||||||
%Warning-WIDTHEXPAND: example.v:3:29 Bit extraction of array[4:0] requires 3 bit index, not 2 bits.
|
%Warning-WIDTHEXPAND: example.v:3:31 Bit extraction of array[4:0] requires 3 bit index, not 2 bits.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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
|
||||||
|
|
||||||
****************
|
****************
|
||||||
|
|||||||
+7
-18
@@ -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-2023 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,15 +23,14 @@ 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)
|
||||||
if match:
|
if match:
|
||||||
try:
|
try:
|
||||||
data = os.popen('git log -n 1 --pretty=%cs').read()
|
data = os.popen('git log -n 1 --pretty=%cs').read()
|
||||||
except Exception:
|
except Exception: # pylint: disable=broad-except
|
||||||
data = "" # fallback, and Sphinx will fill in today's date
|
data = "" # fallback, and Sphinx will fill in today's date
|
||||||
return "Devel " + match.group(1), data
|
return "Devel " + match.group(1), data
|
||||||
return "unknown", "unknown"
|
return "unknown", "unknown"
|
||||||
@@ -45,7 +44,7 @@ def setup(app):
|
|||||||
# -- Project information
|
# -- Project information
|
||||||
|
|
||||||
project = 'Verilator'
|
project = 'Verilator'
|
||||||
copyright = '2022 by Wilson Snyder, under LGPL-3.0 or Artistic-2.0'
|
copyright = '2024 by Wilson Snyder, under LGPL-3.0 or Artistic-2.0'
|
||||||
author = 'Wilson Snyder'
|
author = 'Wilson Snyder'
|
||||||
|
|
||||||
# The master toctree document.
|
# The master toctree document.
|
||||||
@@ -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
|
||||||
@@ -115,7 +113,6 @@ html_theme = 'sphinx_rtd_theme'
|
|||||||
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
|
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
|
||||||
|
|
||||||
html_theme_options = {
|
html_theme_options = {
|
||||||
'analytics_id': 'G-D27B0C9QEB',
|
|
||||||
'logo_only': True,
|
'logo_only': True,
|
||||||
'style_nav_header_background': "#45acf8", # Default is #2980B9
|
'style_nav_header_background': "#45acf8", # Default is #2980B9
|
||||||
# 'canonical_url':
|
# 'canonical_url':
|
||||||
@@ -172,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.
|
||||||
@@ -231,4 +220,4 @@ spelling_ignore_contributor_names = True
|
|||||||
|
|
||||||
breathe_projects = {"verilated": "_build/doxygen/verilated/xml/"}
|
breathe_projects = {"verilated": "_build/doxygen/verilated/xml/"}
|
||||||
breathe_default_project = "verilated"
|
breathe_default_project = "verilated"
|
||||||
breathe_default_members = ('members')
|
breathe_default_members = 'members'
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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.
|
||||||
|
|
||||||
|
|
||||||
@@ -128,6 +128,43 @@ in the distribution. These headers use Doxygen comments, `///` and `//<`,
|
|||||||
to indicate and document those functions that are part of the Verilated
|
to indicate and document those functions that are part of the Verilated
|
||||||
public API.
|
public API.
|
||||||
|
|
||||||
|
Process-Level Clone APIs
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Modern operating systems support process-level clone (a.k.a copying, forking)
|
||||||
|
with system call interfaces in C/C++, e.g., :code:`fork()` in Linux.
|
||||||
|
|
||||||
|
However, after cloning a parent process, some resources cannot be inherited
|
||||||
|
in the child process. For example, in POSIX systems, when you fork a process,
|
||||||
|
the child process inherits all the memory of the parent process. However,
|
||||||
|
only the thread that called fork is replicated in the child process. Other
|
||||||
|
threads are not.
|
||||||
|
|
||||||
|
Therefore, to support the process-level clone mechanisms, Verilator supports
|
||||||
|
:code:`prepareClone()` and :code:`atClone()` APIs to allow the user to manually
|
||||||
|
re-construct the model in the child process. The two APIs handle all necessary
|
||||||
|
resources required for releasing and re-initializing before and after cloning.
|
||||||
|
|
||||||
|
The two APIs are supported in the verilated models. Here is an example of usage
|
||||||
|
with Linux :code:`fork()` and :code:`pthread_atfork` APIs:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
// static function pointers to fit pthread_atfork
|
||||||
|
static auto prepareClone = [](){ topp->prepareClone(); };
|
||||||
|
static auto atClone = [](){ topp->atClone(); };
|
||||||
|
|
||||||
|
// in main function, register the handlers:
|
||||||
|
pthread_atfork(prepareClone, atClone, atClone);
|
||||||
|
|
||||||
|
For better flexibility, you can also manually call the handlers before and
|
||||||
|
after :code:`fork()`.
|
||||||
|
|
||||||
|
With the process-level clone APIs, users can create process-level snapshots
|
||||||
|
for the verilated models. While the Verilator save/restore option provides
|
||||||
|
persistent and circuit-dependent snapshots, the process-level clone APIs
|
||||||
|
enable in-memory, circuit-transparent, and highly efficient snapshots.
|
||||||
|
|
||||||
|
|
||||||
Direct Programming Interface (DPI)
|
Direct Programming Interface (DPI)
|
||||||
==================================
|
==================================
|
||||||
@@ -370,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:
|
||||||
|
|
||||||
@@ -463,7 +510,7 @@ the user should call:
|
|||||||
any delayed events pending,
|
any delayed events pending,
|
||||||
* :code:`designp->nextTimeSlot()`, which returns the simulation time of the
|
* :code:`designp->nextTimeSlot()`, which returns the simulation time of the
|
||||||
next delayed event. This method can only be called if
|
next delayed event. This method can only be called if
|
||||||
:code:`designp->nextTimeSlot()` returned :code:`true`.
|
:code:`designp->eventsPending()` returned :code:`true`.
|
||||||
|
|
||||||
Call :code:`eventsPending()` to check if you should continue with the
|
Call :code:`eventsPending()` to check if you should continue with the
|
||||||
simulation, and then :code:`nextTimeSlot()` to move simulation time forward.
|
simulation, and then :code:`nextTimeSlot()` to move simulation time forward.
|
||||||
|
|||||||
+34
-12
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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
|
||||||
.. ============
|
.. ============
|
||||||
|
|||||||
+138
-98
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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,111 +23,151 @@ 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: Atmel Corporation, Cavium
|
contributions of time or funds include: Antmicro Ltd., Atmel Corporation,
|
||||||
Inc., Compaq Corporation, Digital Equipment Corporation, Embecosm Ltd.,
|
Compaq Corporation, Digital Equipment Corporation, Embecosm Ltd., Hicamp
|
||||||
Hicamp Systems, Intel Corporation, Mindspeed Technologies Inc., MicroTune
|
Systems, Intel Corporation, Marvell Inc., Mindspeed Technologies Inc.,
|
||||||
Inc., picoChip Designs Ltd., Sun Microsystems Inc., Nauticus Networks Inc.,
|
MicroTune Inc., picoChip Designs Ltd., Sun Microsystems Inc., Nauticus
|
||||||
SiCortex Inc, and Shunyao CAD.
|
Networks Inc., SiCortex Inc, Shunyao CAD, and Western Digital Inc.
|
||||||
|
|
||||||
The contributors of major functionality are: Krzysztof
|
The contributors of major functionality are: Jeremy Bennett, Krzysztof
|
||||||
Bieganski, Byron Bradley, Jeremy Bennett, Lane Brooks, John Coiner, Duane
|
Bieganski, Byron Bradley, Lane Brooks, John Coiner, Duane Galbi, Arkadiusz
|
||||||
Galbi, Geza Lore, Todd Strader, Stefan Wallentowitz, Paul Wasson, Jie Xu,
|
Kozdra, Geza Lore, Todd Strader, Yutetsu Takatsukasa, Stefan Wallentowitz,
|
||||||
and Wilson Snyder. Major testers included Jeff Dutton, Jonathon Donaldson,
|
Paul Wasson, Jie Xu, and Wilson Snyder.
|
||||||
Ralf Karge, David Hewson, Iztok Jeras, Wim Michiels, Alex Solomatnikov,
|
|
||||||
Sebastien Van Cauwenberghe, Gene Weber, and Clifford Wolf.
|
|
||||||
|
|
||||||
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, Vasu Arasanipalai, Jens
|
David Addison, Tariq B. Ahmad, Nikana Anastasiadis, John David Anglin,
|
||||||
Arm, Sharad Bagri, Matthew Ballance, Andrew Bardsley, Matthew Barr, Geoff
|
Frederic Antonin, Hans Van Antwerpen, Vasu Arasanipalai, Jens Arm, Rohan
|
||||||
Barrett, Kaleb Barrett, Julius Baxter, Jeremy Bennett, Michael Berman, Jean
|
Arshid, Valentin Atepalikhin, Philip Axer, Gökçe Aydos, Chris Bachhuber,
|
||||||
Berniolles, Victor Besyakov, Moinak Bhattacharyya, Krzysztof Bieganski,
|
Filip Badáň, Adam Bagley, Sharad Bagri, James Bailey, Robert Balas, Marco
|
||||||
David Binderman, Piotr Binkowski, Johan Bjork, David Black, Tymoteusz
|
Balboni, Matthew Ballance, Ricardo Barbedo, Andrew Bardsley, Ilya Barkov,
|
||||||
Blazejczyk, Daniel Bone, Gregg Bouchard, Christopher Boumenot, Nick Bowler,
|
Matthew Barr, Geoff Barrett, Kaleb Barrett, Daniel Bates, Julius Baxter,
|
||||||
Byron Bradley, Bryan Brady, Maarten De Braekeleer, Charlie Brej, J Briquet,
|
Michael Berman, Jean Berniolles, Victor Besyakov, Narayan Bhagavatula,
|
||||||
Lane Brooks, John Brownlee, Jeff Bush, Lawrence Butcher, Tony Bybell, Iru
|
Moinak Bhattacharyya, Kritik Bhimani, David Biancolin, Krzysztof Bieganski,
|
||||||
Cai, Ted Campbell, Chris Candler, Lauren Carlson, Donal Casey, Alex
|
Michael Bikovitsky, David Binderman, Piotr Binkowski, Johan Björk, David
|
||||||
Chadwick, Marcel Chang, Aliaksei Chapyzhenka, Guokai Chen, Terry Chen,
|
Black, Tymoteusz Blazejczyk, Scott Bleiweiss, David van der Bokke, Daniel
|
||||||
Yi-Chung Chen, Enzo Chi, Robert A. Clark, Ryan Clarke, Allan Cochrane, John
|
Bone, Guy Bonneau, Krzysztof Boroński, Gregg Bouchard, Christopher
|
||||||
Coiner, Keith Colbert, Gianfranco Costamagna, Sean Cross, George Cuan, Joe
|
Boumenot, Paul Bowen-Huggett, Nick Bowler, Bryan Brady, Maarten De
|
||||||
DErrico, Lukasz Dalek, Gunter Dannoritzer, Ashutosh Das, Bernard Deadman,
|
Braekeleer, Liam Braun, Charlie Brej, J Briquet, John Brownlee, KC
|
||||||
John Demme, Mike Denio, John Deroo, Philip Derrick, John Dickol, Ruben
|
Buckenmaier, Gijs Burghoorn, Jeff Bush, Lawrence Butcher, Tony Bybell, Iru
|
||||||
Diez, Danny Ding, Jacko Dirks, Ivan Djordjevic, Jonathon Donaldson, Larry
|
Cai, Ted Campbell, Anthony Campos, Chris Candler, Lauren Carlson, Gregory
|
||||||
Doolittle, Sebastian Dressler, Jonathan Drolet, Alex Duller, Jeff Dutton,
|
Carver, Donal Casey, Sebastien Van Cauwenberghe, Alex Chadwick, Greg
|
||||||
|
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
|
||||||
|
Czyz, Joe DErrico, Jim Dai, Lukasz Dalek, Laurens van Dam, Gunter
|
||||||
|
Dannoritzer, Ashutosh Das, Julian Daube, Greg Davill, Bernard Deadman,
|
||||||
|
Peter Debacker, Josse Van Delm, John Demme, Mike Denio, John Deroo, Philip
|
||||||
|
Derrick, Aadi Desai, John Dickol, Ruben Diez, Danny Ding, Jacko Dirks, Ivan
|
||||||
|
Djordjevic, Brad Dobbie, Paul Donahue, Jonathon Donaldson, Anthony Donlon,
|
||||||
|
Caleb Donovick, Larry Doolittle, Leendert van Doorn, Sebastian Dressler,
|
||||||
|
Jonathan Drolet, Justin Yao Du, Maciej Dudek, Alex Duller, Jeff Dutton,
|
||||||
Tomas Dzetkulic, Usuario Eda, Charles Eddleston, Chandan Egbert, Joe Eiler,
|
Tomas Dzetkulic, Usuario Eda, Charles Eddleston, Chandan Egbert, Joe Eiler,
|
||||||
Ahmed El-Mahmoudy, Trevor Elbourne, Mats Engstrom, Robert Farrell, Eugen
|
Ahmed El-Mahmoudy, Trevor Elbourne, Mats Engstrom, Robert Farrell, Julien
|
||||||
Fekete, Fabrizio Ferrandi, Udi Finkelstein, Brian Flachs, Bill Flynn,
|
Faucher, Olivier Faure, Eugene Feinberg, Eugen Fekete, Fabrizio Ferrandi,
|
||||||
Andrea Foletto, Bob Fredieu, Duane Galbi, Mostafa Gamal, Benjamin Gartner,
|
Udi Finkelstein, Brian Flachs, Bill Flynn, Andrea Foletto, Alex Forencich,
|
||||||
Christian Gelinek, Richard E George, Peter Gerst, Glen Gibb, Michael
|
Aurelien Francillon, Bob Fredieu, Manuel Freiberger, Mostafa Gamal, Vito
|
||||||
Gielda, Barbara Gigerl, Shankar Giri, Dan Gisselquist, Petr Gladkikh, Sam
|
Gamberini, Mostafa Garnal, Benjamin Gartner, Christian Gelinek, Richard E
|
||||||
Gladstone, Mariusz Glebocki, Andrew Goessling, Amir Gonnen, Chitlesh
|
George, Peter Gerst, Glen Gibb, Michael Gielda, Barbara Gigerl, Nimrod
|
||||||
Goorah, Tomasz Gorochowik, Kai Gossner, Sergi Granell, Al Grant, Nathan
|
Gileadi, Shankar Giri, Dan Gisselquist, Szymon Gizler, Petr Gladkikh, Sam
|
||||||
Graybeal, Alexander Grobman, Graham Rushton, Xuan Guo, Driss Hafdi, Neil
|
Gladstone, Mariusz Glebocki, Embedded Go, Andrew Goessling, Amir Gonnen,
|
||||||
Hamilton, James Hanlon, Oyvind Harboe, Jannis Harder, Junji Hashimoto,
|
Chitlesh Goorah, Tomasz Gorochowik, Kai Gossner, Tarik Graba, Sergi
|
||||||
Thomas Hawkins, Mitch Hayenga, Harald Heckmann, Robert Henry, Stephen
|
Granell, Al Grant, Nathan Graybeal, Alexander Grobman, Qian Gu, Xuan Guo,
|
||||||
Henry, David Hewson, Jamey Hicks, Joel Holdsworth, Andrew Holme, Hiroki
|
Prabhat Gupta, Deniz Güzel, Driss Hafdi, Abdul Hameed, Neil Hamilton, James
|
||||||
Honda, Alex Hornung, Pierre-Henri Horrein, David Horton, Peter Horvath, Jae
|
Hanlon, Tang Haojin, Øyvind Harboe, Jannis Harder, David Harris, Junji
|
||||||
Hossell, Kuoping Hsu, Teng Huang, Steven Hugg, Alan Hunter, James
|
Hashimoto, Thomas Hawkins, Mitch Hayenga, Harald Heckmann, Robert Henry,
|
||||||
Hutchinson, Ehab Ibrahim, Edgar E. Iglesias, Jamie Iles, Vighnesh Iyer, Ben
|
Stephen Henry, Sebastian Hesselbarth, David Hewson, Jamey Hicks, Joel
|
||||||
Jackson, Shareef Jalloq, Marlon James, Krzysztof Jankowski, HyungKi Jeong,
|
Holdsworth, Andrew Holme, Peter Holmes, Hiroki Honda, Alex Hornung,
|
||||||
Iztok Jeras, Alexandre Joannou, James Johnson, Christophe Joly, Franck
|
Pierre-Henri Horrein, David Horton, Peter Horvath, Jae Hossell, Kuoping
|
||||||
Jullien, James Jung, Mike Kagen, Arthur Kahlich, Kaalia Kahn, Guy-Armand
|
Hsu, Shou-Li Hsu, Teng Huang, Steven Hugg, Alan Hunter, James Hutchinson,
|
||||||
Kamendje, Vasu Kandadi, Kanad Kanhere, Patricio Kaplan, Pieter Kapsenberg,
|
Tim Hutt, Ehab Ibrahim, Edgar E. Iglesias, Shahid Ikram, Jamie Iles, Fuad
|
||||||
Rafal Kapuscik, Ralf Karge, Per Karlsson, Dan Katz, Sol Katzman, Ian
|
Ismail, Vighnesh Iyer, Ben Jackson, Daniel Jacques, Shareef Jalloq, Marlon
|
||||||
Kennedy, Michael Killough, Sun Kim, Jonathan Kimmitt, Olof Kindgren, Kevin
|
James, Krzysztof Jankowski, Eyck Jentzsch, HyungKi Jeong, Iztok Jeras,
|
||||||
Kiningham, Dan Kirkham, Aleksander Kiryk, Sobhan Klnv, Gernot Koch, Jack
|
Pawel Jewstafjew, Alexandre Joannou, James Johnson, Christophe Joly, Justin
|
||||||
Koenig, Soon Koh, Nathan Kohagen, Steve Kolecki, Brett Koonce, Will
|
Jones, William D. Jones, Abe Jordan, Larry Darryl Lee Jr., Franck Jullien,
|
||||||
Korteland, Wojciech Koszek, Varun Koyyalagunta, Arkadiusz Kozdra, Markus
|
James Jung, Mike Kagen, Arthur Kahlich, Kaalia Kahn, Guy-Armand Kamendje,
|
||||||
Krause, David Kravitz, Roland Kruse, Andreas Kuster, Sergey Kvachonok,
|
Vasu Kandadi, Yoshitomo Kaneda, Kanad Kanhere, Patricio Kaplan, Pieter
|
||||||
Charles Eric LaForest, Ed Lander, Steve Lang, Stephane Laurent, Walter
|
Kapsenberg, Rafal Kapuscik, Ralf Karge, Per Karlsson, Dan Katz, Sol
|
||||||
Lavino, Christian Leber, Larry Lee, Yoda Lee, Michaël Lefebvre, Igor Lesik,
|
Katzman, Ian Kennedy, Ami Keren, Fabian Keßler, Michael Killough, Sun Kim,
|
||||||
John Li, Eivind Liland, Yu Sheng Lin, Charlie Lind, Andrew Ling, Jiuyang
|
Jonathan Kimmitt, Olof Kindgren, Kevin Kiningham, Cameron Kirk, Dan
|
||||||
Liu, Paul Liu, Derek Lockhart, Jake Longo, Geza Lore, Arthur Low, Stefan
|
Kirkham, Aleksander Kiryk, Sobhan Klnv, Gernot Koch, Jack Koenig, Soon Koh,
|
||||||
Ludwig, Dan Lussier, Fred Ma, Duraid Madina, Affe Mao, Julien Margetts,
|
Nathan Kohagen, Steve Kolecki, Brett Koonce, Will Korteland, Andrei
|
||||||
Mark Marshall, Alfonso Martinez, Unai Martinez-Corral, Adrien Le Masle,
|
Kostovski, Wojciech Koszek, Varun Koyyalagunta, Arkadiusz Kozdra, Markus
|
||||||
Yves Mathieu, Patrick Maupin, Conor McCullough, Jason McMullan, Elliot
|
Krause, David Kravitz, Adam Krolnik, Roland Kruse, Mahesh Kumashikar,
|
||||||
Mednick, David Metz, Wim Michiels, Miodrag Milanovic, Kevin Millis, Wai Sum
|
Andreas Kuster, Sergey Kvachonok, Charles Eric LaForest, Kevin Laeufer, Ed
|
||||||
Mong, Peter Monsson, Sean Moore, Dennis Muhlestein, John Murphy, Matt
|
Lander, Steve Lang, Pierre Laroche, Stephane Laurent, Walter Lavino,
|
||||||
Myers, Nathan Myers, Richard Myers, Dimitris Nalbantis, Peter Nelson, Bob
|
Christian Leber, David Ledger, Alex Lee, Larry Lee, Yoda Lee, Michaël
|
||||||
Newgard, Rachit Nigam, Paul Nitza, Yossi Nivin, Pete Nixon, Lisa Noack,
|
Lefebvre, Dag Lem, Igor Lesik, John Li, Kay Li, Zixi Li, Davide Libenzi,
|
||||||
Mark Nodine, Kuba Ober, Andreas Olofsson, Baltazar Ortiz, Aleksander Osman,
|
Nandor Licker, Eivind Liland, Ícaro Lima, Kevin Lin, Yu-Sheng Lin, Charlie
|
||||||
Don Owen, James Pallister, Vassilis Papaefstathiou, Brad Parker, Morten
|
Lind, Andrew Ling, Jiuyang Liu, Joey Liu, Paul Liu, Derek Lockhart, Jake
|
||||||
Borup Petersen, Dan Petrisko, Maciej Piechotka, David Pierce, Cody
|
Longo, Geza Lore, Arthur Low, Jose Loyola, Stefan Ludwig, Dan Lussier,
|
||||||
Piersall, Michael Platzer, Dominic Plunkett, David Poole, Mike Popoloski,
|
Konstantin Lübeck, Fred Ma, Liwei Ma, Duraid Madina, Oleh Maksymenko, Affe
|
||||||
Roman Popov, Rich Porter, Stefan Post, Niranjan Prabhu, Damien Pretet, Usha
|
Mao, Julien Margetts, Chick Markley, Alexis Marquet, Mark Marshall, Alfonso
|
||||||
Priyadharshini, Mark Jackson Pulver, Prateek Puri, Marshal Qiao, Nandu Raj,
|
Martinez, Unai Martinez-Corral, Adrien Le Masle, Yves Mathieu, Vladimir
|
||||||
Kamil Rakoczy, Danilo Ramos, Drew Ranck, Chris Randall, Anton Rapp, Josh
|
Matveyenko, Patrick Maupin, Stan Mayer, Jordan McConnon, Conor McCullough,
|
||||||
Redford, Odd Magne Reitan, Frederic Requin, Dustin Richmond, Samuel Riedel,
|
Jason McMullan, Elliot Mednick, Yuan Mei, Andy Meier, Luiza de Melo,
|
||||||
Alberto Del Rio, Eric Rippey, Oleg Rodionov, Ludwig Rogiers, Paul Rolfe,
|
Rodrigo A. Melo, Benjamin Menküc, Jake Merdich, David Metz, Wim Michiels,
|
||||||
Arjen Roodselaar, Tobias Rosenkranz, Ryszard Rozak, Huang Rui, Graham
|
Miodrag Milanović, Darryl Miles, Kevin Millis, Andrew Miloradovsky, David
|
||||||
Rushton, Jan Egil Ruud, Denis Rystsov, John Sanguinetti, Martin Schmidt,
|
Moberg, Wai Sum Mong, Peter Monsson, Anthony Moore, Sean Moore, Stuart
|
||||||
Julie Schwartz, Galen Seitz, Joseph Shaker, Salman Sheikh, Hao Shi, Mike
|
Morris, Dennis Muhlestein, John Murphy, Matt Myers, Nathan Myers, Richard
|
||||||
Shinkarovsky, Rafael Shirakawa, Jeffrey Short, Fan Shupei, Anderson Ignacio
|
Myers, Alex Mykyta, Eric Müller, Dimitris Nalbantis, Peter Nelson, Felix
|
||||||
da Silva, Rodney Sinclair, Ameya Vikram Singh, Steven Slatter, Mladen
|
Neumärker, Bob Newgard, Cong Van Nguyen, Rachit Nigam, Toru Niina, Paul
|
||||||
Slijepcevic, Brian Small, Garrett Smith, Tim Snyder, Wilson Snyder, Maciej
|
Nitza, Yossi Nivin, Pete Nixon, Lisa Noack, Mark Nodine, Michael Nolan,
|
||||||
Sobkowski, Stan Sokorac, Alex Solomatnikov, Flavien Solt, Wei Song, Trefor
|
Andrew Nolte, Joseph Nwabueze, Kevin Nygaard, Kuba Ober, Krzysztof
|
||||||
Southwell, Martin Stadler, Art Stamness, David Stanford, John Stevenson,
|
Obłonczek, Andreas Olofsson, Baltazar Ortiz, Aleksander Osman, Don Owen,
|
||||||
Pete Stevenson, Patrick Stewart, Rob Stoddard, Todd Strader, John Stroebel,
|
Tim Paine, Deepa Palaniappan, James Pallister, Vassilis Papaefstathiou,
|
||||||
Sven Stucki, Howard Su, Emerson Suguimoto, Gene Sullivan, Qingyao Sun,
|
Sanggyu Park, Brad Parker, Risto Pejašinović, Seth Pellegrino, Morten Borup
|
||||||
Renga Sundararajan, Gustav Svensk, Rupert Swarbrick, Yutetsu Takatsukasa,
|
Petersen, Dan Petrisko, Wesley Piard, Maciej Piechotka, David Pierce, Cody
|
||||||
Thierry Tambe, Drew Taussig, Jose Tejada, Peter Tengstrand, Wesley
|
Piersall, T. Platz, Michael Platzer, Dominic Plunkett, Nolan Poe, David
|
||||||
Terpstra, Rui Terra, Stefan Thiede, Gary Thomas, Ian Thompson, Kevin
|
Poole, Michael Popoloski, Roman Popov, Aylon Chaim Porat, Oron Port, Rich
|
||||||
Thompson, Mike Thyer, Hans Tichelaar, Viktor Tomov, Steve Tong, Topa
|
Porter, Rick Porter, Stefan Post, Niranjan Prabhu, Damien Pretet, Harald
|
||||||
Topino, Alex Torregrosa, Michael Tresidder, David Turner, Neil Turton, Mike
|
Pretl, Bill Pringlemeir, Usha Priyadharshini, Mark Jackson Pulver, Prateek
|
||||||
Urbach, Hans Van Antwerpen, Sebastien Van Cauwenberghe, Laurens van Dam,
|
Puri, Han Qi, Jiacheng Qian, Marshal Qiao, Raynard Qiao, Yujia Qiao, Jasen
|
||||||
Leendert van Doorn, Cong Van Nguyen, Jan Van Winkel, Srini Vemuri, Yuri
|
Qin, Frank Qiu, Nandu Raj, Kamil Rakoczy, Danilo Ramos, Drew Ranck, Chris
|
||||||
Victorovich, Bogdan Vukobratovic, Holger Waechtler, Philipp Wagner, Stefan
|
Randall, Anton Rapp, Josh Redford, Odd Magne Reitan, Frédéric Requin,
|
||||||
Wallentowitz, Shawn Wang, Zhanglei Wang, Paul Wasson, Greg Waters, Thomas
|
Dustin Richmond, Samuel Riedel, Alberto Del Rio, Eric Rippey, Narcis Rodas,
|
||||||
Watts, Eugene Weber, David Welch, Thomas J Whatson, Martin Whitaker, Marco
|
Oleg Rodionov, Ludwig Rogiers, Paul Rolfe, Michail Rontionov, Arjen
|
||||||
Widmer, Leon Wildman, Daniel Wilkerson, Gerald Williams, Trevor Williams,
|
Roodselaar, Arthur Rosa, Tobias Rosenkranz, Yernagula Roshit, Ryszard
|
||||||
Jeff Winston, Joshua Wise, Clifford Wolf, Tobias Wolfel, Johan Wouters,
|
Rozak, Huang Rui, Graham Rushton, Jan Egil Ruud, Denis Rystsov, Pawel
|
||||||
Paul Wright, Junyi Xi, Ding Xiaoliang, Jie Xu, Mandy Xu, Yinan Xu, Luke
|
Sagan, Robert Sammelson, Adrian Sampson, John Sanguinetti, Josep Sans, Luca
|
||||||
Yang, Amir Yazdanbakhsh, Keyi Zhang, and Xi Zhang.
|
Sasselli, Martin Scharrer, Martin Schmidt, Jonathan Schröter, Julie
|
||||||
|
Schwartz, Galen Seitz, Sam Shahrestani, Joseph Shaker, Mark Shaw, Salman
|
||||||
|
Sheikh, Zhou Shen, Hao Shi, James Shi, Michael Shinkarovsky, Rafael
|
||||||
|
Shirakawa, Jeffrey Short, S Shuba, Fan Shupei, Ethan Sifferman, Anderson
|
||||||
|
Ignacio da Silva, Rodney Sinclair, Ameya Vikram Singh, Sanjay Singh, Frans
|
||||||
|
Skarman, Nate Slager, Steven Slatter, Mladen Slijepcevic, Brian Small,
|
||||||
|
Garrett Smith, Gus Smith, Tim Snyder, Maciej Sobkowski, Stan Sokorac, Alex
|
||||||
|
Solomatnikov, Flavien Solt, Wei Song, Trefor Southwell, Martin Stadler, Art
|
||||||
|
Stamness, David Stanford, Krzysztof Starecki, Baruch Sterin, John
|
||||||
|
Stevenson, Pete Stevenson, Patrick Stewart, Rob Stoddard, Tood Strader,
|
||||||
|
John Stroebel, Ray Strouble, Sven Stucki, Howard Su, Udaya Raj Subedi,
|
||||||
|
Emerson Suguimoto, Gene Sullivan, Qingyao Sun, Renga Sundararajan, Kuba
|
||||||
|
Sunderland-Ober, Gustav Svensk, Rupert Swarbrick, Jevin Sweval, Paul
|
||||||
|
Swirhun, Shinya T-Y, Thierry Tambe, Jesse Taube, Drew Taussig, Christopher
|
||||||
|
Taylor, Greg Taylor, Jose Tejada, Sören Tempel, Peter Tengstrand, Wesley
|
||||||
|
Terpstra, Rui Terra, Stefan Thiede, Justin Thiel, Gary Thomas, Ian
|
||||||
|
Thompson, Kevin Thompson, Mike Thyer, Hans Tichelaar, Tudor Timi, Viktor
|
||||||
|
Tomov, Steve Tong, Topa Topino, Àlex Torregrosa, Topa Tota, Michael
|
||||||
|
Tresidder, Lenny Truong, David Turner, Neil Turton, Hideto Ueno, Mike
|
||||||
|
Urbach, Joel Vandergriendt, Srini Vemuri, Srinivasan Venkataramanan, Yuri
|
||||||
|
Victorovich, Ivan Vnučec, Bogdan Vukobratovic, Holger Waechtler, Philipp
|
||||||
|
Wagner, Stefan Wallentowitz, Johannes Walter, CY Wang, Chuxuan Wang, Shawn
|
||||||
|
Wang, Yilou Wang, Zhanglei Wang, Greg Waters, Thomas Watts, Eugene Weber,
|
||||||
|
John Wehle, Tianrui Wei, David Welch, Thomas J Whatson, Martin Whitaker,
|
||||||
|
Marco Widmer, Leon Wildman, Daniel S. Wilkerson, Daniel Wilkerson, Gerald
|
||||||
|
Williams, Trevor Williams, Don Williamson, Jan Van Winkel, Jeff Winston,
|
||||||
|
Joshua Wise, Clifford Wolf, Johan Wouters, Paul Wright, Tobias Wölfel,
|
||||||
|
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-2023 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-2023 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.
|
||||||
|
|||||||
+11
-28
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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
|
||||||
@@ -6,34 +6,17 @@ Deprecations
|
|||||||
|
|
||||||
The following deprecated items are scheduled for future removal:
|
The following deprecated items are scheduled for future removal:
|
||||||
|
|
||||||
C++11 compiler support
|
C++14 compiler support
|
||||||
Verilator currently requires a C++20 or newer compiler for timing, and a
|
Verilator currently requires a C++20 or newer compiler for timing, and a
|
||||||
C++11 or newer compiler for no-timing.
|
C++14 or newer compiler for both compiling Verilator and compiling
|
||||||
|
Verilated models with --no-timing.
|
||||||
Verilator will require C++14 or newer compilers for both compiling
|
|
||||||
Verilator and compiling Verilated models with --no-timing no sooner than
|
|
||||||
January 2023.
|
|
||||||
|
|
||||||
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).
|
||||||
|
|
||||||
Verilated_heavy.h
|
XML output
|
||||||
The legacy "verilated_heavy.h" include was replaced with just including
|
Verilator currently supports XML parser output (enabled with `--xml-only`).
|
||||||
"verilated.h". Verilated_heavy.h is planned for removal no sooner than
|
Support for `--xml-*` options will be deprecated no sooner than January 2026.
|
||||||
July 2022.
|
|
||||||
|
|
||||||
Option `-O<letter>`
|
|
||||||
The debug `-O<letter>` options have been replaced with
|
|
||||||
`-fno-<optimization>` debug options to match GCC. The old options are
|
|
||||||
planned for removal no sooner than June 2023.
|
|
||||||
|
|
||||||
Option `--prof-threads`
|
|
||||||
The `--prof-threads` option has been superseded by the `--prof-exec` and
|
|
||||||
`--prof-pgo` options and is planned for removal no sooner than April 2023.
|
|
||||||
|
|
||||||
Verilated model options `+verilator+prof+threads+*`
|
|
||||||
The `+verilator+prof+threads+start`, `+verilator+prof+threads+window` and
|
|
||||||
`+verilator+prof+threads+file` options have been superseded by the
|
|
||||||
`+verilator+prof+exec+start`, `+verilator+prof+exec+window` and
|
|
||||||
`+verilator+prof+exec+file` options respectively and are planned for removal
|
|
||||||
no sooner than April 2023.
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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
|
||||||
@@ -29,7 +29,7 @@ associated programs.
|
|||||||
.. option:: OBJCACHE
|
.. option:: OBJCACHE
|
||||||
|
|
||||||
Optionally specifies a caching or distribution program to place in front
|
Optionally specifies a caching or distribution program to place in front
|
||||||
of all runs of the C++ compiler. For example, "ccache". If using
|
of all runs of the C++ compiler. For example, "ccache" or "sccache". If using
|
||||||
:command:`distcc` or :command:`icecc`/:command:`icecream`, they would
|
:command:`distcc` or :command:`icecc`/:command:`icecream`, they would
|
||||||
generally be run under :command:`ccache`; see the documentation for
|
generally be run under :command:`ccache`; see the documentation for
|
||||||
those programs. If OBJCACHE is not set, and at configure time ccache
|
those programs. If OBJCACHE is not set, and at configure time ccache
|
||||||
@@ -91,9 +91,83 @@ associated programs.
|
|||||||
|
|
||||||
.. option:: VERILATOR_ROOT
|
.. option:: VERILATOR_ROOT
|
||||||
|
|
||||||
Specifies the directory containing the distribution kit. This is used
|
The ``VERILATOR_ROOT`` environment variable is used in several places:
|
||||||
to find the executable, Perl library, and include files. If not
|
|
||||||
specified, it will come from a default optionally specified at configure
|
* At ``./configure`` time: If set, it is embedded into the binary, and
|
||||||
time (before Verilator was compiled). It should not be specified if
|
at runtime if ``VERILATOR_ROOT`` is not set, the embedded value is
|
||||||
using a pre-compiled Verilator package as the hard-coded value should be
|
used for the runtime default.
|
||||||
correct. See :ref:`Installation`.
|
|
||||||
|
* When ``verilator`` is run: If ``VERILATOR_ROOT`` is set it will be
|
||||||
|
used to find the ``verilator_bin`` executable (this is the actual
|
||||||
|
Verilator binary; ``verilator`` is a Perl wrapper). If not set, the
|
||||||
|
``verilator`` script uses other methods to find ``verilator_bin``
|
||||||
|
(looking in the same directory and falling back to ``$PATH``).
|
||||||
|
|
||||||
|
* When ``make`` is run on the Makefile generated by ``verilator``: The
|
||||||
|
value of ``VERILATOR_ROOT`` (falling back to the value embedded in the
|
||||||
|
binary if not set) is used to find the include files
|
||||||
|
(``include/verilated.mk``).
|
||||||
|
|
||||||
|
If you are using a pre-compiled Verilator package, you should not need
|
||||||
|
to set ``VERILATOR_ROOT`` - the value embedded in the binary should be
|
||||||
|
correct. In fact this option *does not work* with Verilator packages
|
||||||
|
that have been installed with ``make install``. If a Verilator package
|
||||||
|
has been installed using ``./configure --prefix=/some/path && make
|
||||||
|
install`` and then moved to another location, you cannot use
|
||||||
|
``VERILATOR_ROOT`` to point to the new version.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
If set, the command to run when using the :vlopt:`--valgrind` option, such as
|
||||||
|
"valgrind --tool=callgrind". If not specified, it will use "valgrind".
|
||||||
|
|
||||||
|
|
||||||
|
Make Variables
|
||||||
|
==============
|
||||||
|
|
||||||
|
This section describes the make variables used by Verilator. These may be
|
||||||
|
set by passing them to make e.g. ``make CXX=my-gcc ...``.
|
||||||
|
|
||||||
|
.. option:: AR
|
||||||
|
|
||||||
|
Optionally overrides the default :command:`ar` (archive) binary used by
|
||||||
|
the Verilated makefiles. If AR is not set, the version found at
|
||||||
|
configure time is used.
|
||||||
|
|
||||||
|
.. option:: CXX
|
||||||
|
|
||||||
|
Optionally overrides the default compiler binary used by the Verilated
|
||||||
|
makefiles. If CXX is not set, the version found at configure time is
|
||||||
|
used. Note the default flags passed to the compiler are determined at
|
||||||
|
configuration time, so changing the CXX compiler version using this
|
||||||
|
variable, as opposed to passing it at configuration time, may not give
|
||||||
|
desired results.
|
||||||
|
|
||||||
|
.. option:: LINK
|
||||||
|
|
||||||
|
Optionally overrides the default linker binary used by the Verilated
|
||||||
|
makefiles. If LINK is not set, the version found at configure time is
|
||||||
|
used. Note the default flags passed to the linker are determined at
|
||||||
|
configuration time, so changing the LINK version using this variable, as
|
||||||
|
opposed to passing it at configuration time, may not give desired
|
||||||
|
results.
|
||||||
|
|
||||||
|
.. option:: PERL
|
||||||
|
|
||||||
|
Optionally overrides the default :command:`perl` binary used by the
|
||||||
|
Verilated makefiles. If PERL is not set, the version found at configure
|
||||||
|
time, and compiled into the Verilator binary, is used.
|
||||||
|
|
||||||
|
.. option:: PYTHON3
|
||||||
|
|
||||||
|
Optionally overrides the default :command:`python3` binary used by the
|
||||||
|
Verilated makefiles. If PYTHON3 is not set, the version found at
|
||||||
|
configure time is used.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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-2023 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-2023 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-2023 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-2023 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-2023 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:
|
||||||
@@ -9,6 +9,7 @@ Examples
|
|||||||
|
|
||||||
This section covers the following examples:
|
This section covers the following examples:
|
||||||
|
|
||||||
|
* :ref:`Example Create-Binary Execution`
|
||||||
* :ref:`Example C++ Execution`
|
* :ref:`Example C++ Execution`
|
||||||
* :ref:`Example SystemC Execution`
|
* :ref:`Example SystemC Execution`
|
||||||
* :ref:`Examples in the Distribution`
|
* :ref:`Examples in the Distribution`
|
||||||
|
|||||||
+28
-11
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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:
|
||||||
@@ -19,11 +19,20 @@ Summary:
|
|||||||
.. include:: ../_build/gen/args_verilated.rst
|
.. include:: ../_build/gen/args_verilated.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. option:: +verilator+coverage+file+<filename>
|
||||||
|
|
||||||
|
When a model was Verilated using :vlopt:`--coverage`, sets the filename
|
||||||
|
to write coverage data into. Defaults to :file:`coverage.dat`.
|
||||||
|
|
||||||
.. option:: +verilator+debug
|
.. option:: +verilator+debug
|
||||||
|
|
||||||
Enable simulation runtime debugging. Equivalent to
|
Enable simulation runtime debugging. Equivalent to
|
||||||
:vlopt:`+verilator+debugi+4 <+verilator+debugi+\<value\>>`.
|
:vlopt:`+verilator+debugi+4 <+verilator+debugi+\<value\>>`.
|
||||||
|
|
||||||
|
To be useful, the model typically must first be compiled with debug
|
||||||
|
capabilities by Verilating with :vlopt:`--runtime-debug` or `-CFLAGS
|
||||||
|
-DVL_DEBUG=1`.
|
||||||
|
|
||||||
.. option:: +verilator+debugi+<value>
|
.. option:: +verilator+debugi+<value>
|
||||||
|
|
||||||
Enable simulation runtime debugging at the provided level.
|
Enable simulation runtime debugging at the provided level.
|
||||||
@@ -31,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
|
||||||
@@ -64,15 +78,18 @@ Summary:
|
|||||||
|
|
||||||
.. option:: +verilator+prof+threads+file+<filename>
|
.. option:: +verilator+prof+threads+file+<filename>
|
||||||
|
|
||||||
Deprecated. Alias for :vlopt:`+verilator+prof+exec+file+\<filename\>`
|
Removed in 5.020. Was an alias for
|
||||||
|
:vlopt:`+verilator+prof+exec+file+\<filename\>`
|
||||||
|
|
||||||
.. option:: +verilator+prof+threads+start+<value>
|
.. option:: +verilator+prof+threads+start+<value>
|
||||||
|
|
||||||
Deprecated. Alias for :vlopt:`+verilator+prof+exec+start+\<value\>`
|
Removed in 5.020. Was an alias for
|
||||||
|
:vlopt:`+verilator+prof+exec+start+\<value\>`
|
||||||
|
|
||||||
.. option:: +verilator+prof+threads+window+<value>
|
.. option:: +verilator+prof+threads+window+<value>
|
||||||
|
|
||||||
Deprecated. Alias for :vlopt:`+verilator+prof+exec+window+\<value\>`
|
Removed in 5.020. Was an alias for
|
||||||
|
:vlopt:`+verilator+prof+exec+window+\<value\>`
|
||||||
|
|
||||||
.. option:: +verilator+prof+vlt+file+<filename>
|
.. option:: +verilator+prof+vlt+file+<filename>
|
||||||
|
|
||||||
@@ -80,6 +97,11 @@ Summary:
|
|||||||
profile-guided optimization data runtime filename to dump to. Defaults
|
profile-guided optimization data runtime filename to dump to. Defaults
|
||||||
to :file:`profile.vlt`.
|
to :file:`profile.vlt`.
|
||||||
|
|
||||||
|
.. option:: +verilator+quiet
|
||||||
|
|
||||||
|
Disable printing the simulation summary report, see :ref:`Simulation
|
||||||
|
Summary Report`.
|
||||||
|
|
||||||
.. option:: +verilator+rand+reset+<value>
|
.. option:: +verilator+rand+reset+<value>
|
||||||
|
|
||||||
When a model was Verilated using
|
When a model was Verilated using
|
||||||
@@ -93,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.
|
||||||
|
|||||||
+745
-284
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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,86 +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.
|
||||||
|
|
||||||
The first character of the line shows a summary of the coverage; this
|
Coverage data is annotated at the beginning of the line and is formatted
|
||||||
allows use of grep to filter the report. `%` indicates at least one point
|
as a special character followed by the number of coverage hits. The
|
||||||
on the line was below the coverage limit. `+` indicates an
|
special characters " ,%,~,+,-" indicate summary of the coverage, and
|
||||||
:option:`--annotate-points` point was at or above the limit, and `-` that
|
allow use of grep to filter the report.
|
||||||
the point was below the limit.
|
|
||||||
|
* " " (whitespace) indicates that all points on the line are above the coverage min.
|
||||||
|
* "%" indicates that all points on the line are below the coverage min.
|
||||||
|
* "~" indicates that some points on the line are above the coverage min and some are below.
|
||||||
|
* "+" 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::
|
||||||
|
|
||||||
|
100000 input logic a; // Begins with whitespace, because
|
||||||
|
// number of hits (100000) is above the min.
|
||||||
|
+100000 point: comment=a // Begins with +, because
|
||||||
|
// number of hits (100000) is above the min.
|
||||||
|
%000000 input logic b; // Begins with %, because
|
||||||
|
// number of hits (0) is below the min.
|
||||||
|
-000000 point: comment=b // Begins with -, because
|
||||||
|
// 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`.
|
||||||
|
|
||||||
.. option:: --annotate-min <count>
|
.. option:: --annotate-min <count>
|
||||||
|
|
||||||
Specifies if the coverage point does not include the count number of
|
Specifies the threshold (<count>) below which coverage point is
|
||||||
coverage hits, then the coverage point will be considered above the
|
considered sufficient. If the threshold is not exceeded, then the
|
||||||
threshold, and the coverage report will put a "%" to indicate the coverage
|
annotation will begin with a "%" symbol to indicate the coverage is
|
||||||
is insufficient. Defaults to 10.
|
insufficient.
|
||||||
|
|
||||||
|
The <count> threshold defaults to 10.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
with low coverage are written to the output directory.
|
.. code-block::
|
||||||
|
|
||||||
|
100000 input logic a, b, c;
|
||||||
|
+100000 point: comment=a // These lines are only shown
|
||||||
|
+200000 point: comment=b // with option --annotate-points
|
||||||
|
+300000 point: comment=c // enabled.
|
||||||
|
|
||||||
|
|
||||||
|
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-2023 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
|
||||||
@@ -30,15 +30,13 @@ Gantt Chart VCD Signals
|
|||||||
In waveforms, there are the following signals. In GTKWave, use "decimal"
|
In waveforms, there are the following signals. In GTKWave, use "decimal"
|
||||||
data format to remove the leading zeros and make the traces easier to read.
|
data format to remove the leading zeros and make the traces easier to read.
|
||||||
|
|
||||||
evals
|
trace/section
|
||||||
Increments each time when eval_step was measured to be active. This
|
Shows the name of the current top of the execution section stack.
|
||||||
allow visualization of how much time eval_step was active.
|
Set GTKWave data format to "ASCII".
|
||||||
|
|
||||||
eval_loop
|
trace/depth
|
||||||
Increments each time when the evaluation loop within eval_step was
|
Shows the depth of the execution section stack.
|
||||||
measured to be active. For best performance, there is only a single
|
Set GTKWave data format to "Analog".
|
||||||
evaluation loop within each eval_step call; that is, the eval_loop
|
|
||||||
waveform looks identical to the evals waveform.
|
|
||||||
|
|
||||||
measured_parallelism
|
measured_parallelism
|
||||||
The number of mtasks active at this time, for best performance, this will
|
The number of mtasks active at this time, for best performance, this will
|
||||||
@@ -53,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.
|
||||||
|
|
||||||
@@ -64,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
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
@@ -71,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-2023 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-2023 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
|
||||||
|
|
||||||
*********************************
|
*********************************
|
||||||
|
|||||||
+249
-178
@@ -1,14 +1,19 @@
|
|||||||
.. Copyright 2003-2023 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
|
||||||
@@ -17,19 +22,139 @@ or "`ifdef`"'s may break other tools.
|
|||||||
|
|
||||||
.. option:: `__LINE__
|
.. option:: `__LINE__
|
||||||
|
|
||||||
The :option:`\`__LINE__` define expands to the current filename as a
|
The :option:`\`__LINE__` define expands to the current line number like
|
||||||
string, like C++'s __LINE__. This Verilator feature added in 2006 was
|
C++'s __LINE__. This Verilator feature added in 2006 was incorporated
|
||||||
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 encountered, like C++'s #error.
|
This will report an error when the preprocessor emits it, similar to
|
||||||
|
C++'s #error.
|
||||||
|
|
||||||
.. option:: """ [string] """
|
.. option:: `line
|
||||||
|
|
||||||
A triple-quoted block specifies a string that may include newlines and
|
As a special case `\`line \`__LINE__ "filename"` allows setting the
|
||||||
single quotes. This extension is experimental and may be removed
|
filename, without changing the line number. This is used for some
|
||||||
without deprecation.
|
internal tests, so that debugging can leave the line numbers correctly
|
||||||
|
referring to the test file's line numbers.
|
||||||
|
|
||||||
|
.. option:: `systemc_class_name
|
||||||
|
|
||||||
|
Inside one of the :option:`\`systemc_... <\`systemc_header>` text
|
||||||
|
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], ...);
|
||||||
|
|
||||||
@@ -79,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
|
||||||
@@ -89,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).
|
||||||
@@ -203,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*/
|
||||||
|
|
||||||
@@ -219,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*/
|
||||||
|
|
||||||
@@ -267,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*/
|
||||||
|
|
||||||
@@ -310,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>*/
|
||||||
|
|
||||||
@@ -349,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*/
|
||||||
|
|
||||||
@@ -360,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)
|
||||||
|
|
||||||
@@ -372,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
|
||||||
@@ -417,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)
|
||||||
|
|
||||||
@@ -469,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*/
|
||||||
|
|
||||||
@@ -481,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*/
|
||||||
|
|
||||||
@@ -500,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*/
|
||||||
|
|
||||||
@@ -510,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*/
|
||||||
|
|
||||||
@@ -543,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...>*/
|
||||||
|
|
||||||
@@ -558,21 +618,25 @@ 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*/
|
||||||
|
|
||||||
|
Removed.
|
||||||
|
|
||||||
|
In versions before 5.024:
|
||||||
|
|
||||||
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*/
|
||||||
|
|
||||||
@@ -586,12 +650,19 @@ or "`ifdef`"'s may break other tools.
|
|||||||
Re-enable waveform tracing for all future signals or instances that are
|
Re-enable waveform tracing for all future signals or instances that are
|
||||||
declared.
|
declared.
|
||||||
|
|
||||||
.. option:: $stacktrace
|
.. option:: /*verilator&32;unroll_disable*/
|
||||||
|
|
||||||
Called as a task, print a stack trace. Called as a function, return a
|
Used in a statement position to indicate the immediately following loop
|
||||||
string with a stack trace. This relies on the C++ system trace, which
|
at the same statement level should not be unrolled by Verilator,
|
||||||
may give less meaningful results if the model is not compiled with debug
|
ignoring :vlopt:`--unroll-count`. This is similar to clang's ``#pragma
|
||||||
symbols. Also, the data represents the C++ stack; the SystemVerilog
|
clang loop unroll(disable)``.
|
||||||
functions/tasks involved may be renamed and/or inlined before becoming
|
|
||||||
the C++ functions that may be visible in the stack trace. This
|
This option does not currently disable the C++ compiler's unrolling (or
|
||||||
extension is experimental and may be removed without deprecation.
|
not) of any loops that make it through to the Verilated C++ code.
|
||||||
|
|
||||||
|
.. option:: /*verilator&32;unroll_full*/
|
||||||
|
|
||||||
|
Rarely needed. Used in a statement position to indicate the immediately
|
||||||
|
following loop at the same statement level should always be fully
|
||||||
|
unrolled by Verilator, ignoring :vlopt:`--unroll-count`. This is
|
||||||
|
similar to clang's ``#pragma clang loop unroll(full)``.
|
||||||
|
|||||||
+27
-26
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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,10 +128,13 @@ 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, and in your top-level C
|
A. Pass the :vlopt:`--trace-vcd` option to Verilator. Then you may use ``$dumpfile`` and
|
||||||
code, call ``Verilated::traceEverOn(true)``. Then you may use
|
``$dumpvars`` to enable traces, the same as with any Verilog simulator,
|
||||||
``$dumpfile`` and ``$dumpvars`` to enable traces, the same as with any
|
although Verilator ignores the arguments to ``$dumpvars``. See
|
||||||
Verilog simulator. See ``examples/make_tracing_c`` in the distribution.
|
``examples/make_tracing_c`` in the distribution.
|
||||||
|
|
||||||
|
If writing the top-level C code, call ``Verilated::traceEverOn(true)``;
|
||||||
|
this is done for you if using :vlopt:`--binary`.
|
||||||
|
|
||||||
B. Or, for finer-grained control, or C++ files with multiple Verilated
|
B. Or, for finer-grained control, or C++ files with multiple Verilated
|
||||||
modules, you may also create the trace purely from C++. Create a
|
modules, you may also create the trace purely from C++. Create a
|
||||||
@@ -174,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
|
||||||
@@ -220,24 +223,20 @@ This is done for you if you are using the Verilator :vlopt:`--binary` or
|
|||||||
You can call :code:`->trace()` on multiple Verilated objects with the same
|
You can call :code:`->trace()` on multiple Verilated objects with the same
|
||||||
trace file if you want all data to land in the same output file.
|
trace file if you want all data to land in the same output file.
|
||||||
|
|
||||||
When using SystemC 2.3, the SystemC library must have been built with the
|
|
||||||
experimental simulation phase callback-based tracing disabled. This is
|
|
||||||
disabled by default when building SystemC with its configure based build
|
|
||||||
system, but when building SystemC with CMake, you must pass
|
|
||||||
``-DENABLE_PHASE_CALLBACKS_TRACING=OFF`` to disable this feature.
|
|
||||||
|
|
||||||
|
|
||||||
How do I generate FST waveforms (traces) in C++ or SystemC?
|
How do I generate FST waveforms (traces) in C++ or SystemC?
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
FST is a trace file format developed by GTKWave. Verilator provides basic
|
FST is a trace file format developed by GTKWave. Verilator provides basic
|
||||||
FST support. To dump traces in FST format, add the :vlopt:`--trace-fst`
|
FST support. To dump traces in FST format, add the :vlopt:`--trace-fst`
|
||||||
option to Verilator and either A. use :code:`$dumpfile & $dumpvars` in
|
option to Verilator and either:
|
||||||
Verilog as described in the VCD example above,
|
|
||||||
|
Use :code:`$dumpfile & $dumpvars` in Verilog as described in the VCD
|
||||||
|
example above,
|
||||||
|
|
||||||
Or, in C++ change the include described in the VCD example above:
|
Or, in C++ change the include described in the VCD example above:
|
||||||
|
|
||||||
.. code-block:: C++
|
.. code-block:: C++
|
||||||
|
|
||||||
#include "verilated_fst_c.h"
|
#include "verilated_fst_c.h"
|
||||||
VerilatedFstC* tfp = new VerilatedFstC;
|
VerilatedFstC* tfp = new VerilatedFstC;
|
||||||
@@ -245,14 +244,14 @@ Or, in C++ change the include described in the VCD example above:
|
|||||||
|
|
||||||
Or, in SystemC, change the include described in the VCD example above:
|
Or, in SystemC, change the include described in the VCD example above:
|
||||||
|
|
||||||
.. code-block:: C++
|
.. code-block:: C++
|
||||||
|
|
||||||
#include "verilated_fst_sc.h"
|
#include "verilated_fst_sc.h"
|
||||||
VerilatedFstC* tfp = new VerilatedFstSc;
|
VerilatedFstC* tfp = new VerilatedFstSc;
|
||||||
|
|
||||||
|
|
||||||
Currently, supporting FST and VCD in a single simulation is impossible, but
|
Currently, supporting FST and VCD in a single simulation is not supported,
|
||||||
such requirement should be rare. You can however ifdef around the trace
|
but such usage should be unlikely. You can however ifdef around the trace
|
||||||
format in your C++ main loop, and select VCD or FST at compile time.
|
format in your C++ main loop, and select VCD or FST at compile time.
|
||||||
|
|
||||||
|
|
||||||
@@ -260,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?
|
||||||
@@ -334,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()?
|
||||||
@@ -356,8 +357,8 @@ Why do I get "undefined reference to \`VL_RAND_RESET_I' or \`Verilated::...'"?
|
|||||||
You need to link your compiled Verilated code against the
|
You need to link your compiled Verilated code against the
|
||||||
:code:`verilated.cpp` file found in the include directory of the Verilator
|
:code:`verilated.cpp` file found in the include directory of the Verilator
|
||||||
kit. This is one target in the ``$(VK_GLOBAL_OBJS)`` make variable, which
|
kit. This is one target in the ``$(VK_GLOBAL_OBJS)`` make variable, which
|
||||||
should be part of your Makefile's link rule. If you use :vlopt:`--exe`,
|
should be part of your Makefile's link rule. If you use :vlopt:`--exe` or
|
||||||
this is done for you.
|
:vlopt:`--binary`, this is done for you.
|
||||||
|
|
||||||
|
|
||||||
Is the PLI supported?
|
Is the PLI supported?
|
||||||
@@ -401,7 +402,7 @@ How do I get faster build times?
|
|||||||
* Use a recent compiler. Newer compilers tend to be faster.
|
* Use a recent compiler. Newer compilers tend to be faster.
|
||||||
|
|
||||||
* Compile in parallel on many machines and use caching; see the web for the
|
* Compile in parallel on many machines and use caching; see the web for the
|
||||||
ccache, distcc, and icecream packages. ccache will skip GCC runs between
|
ccache, sccache, distcc, or icecream packages. ccache will skip GCC runs between
|
||||||
identical source builds, even across different users. If ccache was
|
identical source builds, even across different users. If ccache was
|
||||||
installed when Verilator was built, it is used, or see OBJCACHE
|
installed when Verilator was built, it is used, or see OBJCACHE
|
||||||
environment variable to override this. Also see the
|
environment variable to override this. Also see the
|
||||||
@@ -486,7 +487,7 @@ From the sc_main.cpp file, you'd then:
|
|||||||
|
|
||||||
#include "Vour.h"
|
#include "Vour.h"
|
||||||
#include "Vour_our.h"
|
#include "Vour_our.h"
|
||||||
cout << "clock is " << top->our->clk << endl;
|
std::cout << "clock is " << top->our->clk << std::endl;
|
||||||
|
|
||||||
|
|
||||||
In this example, clk is a bool you can read or set as any other variable.
|
In this example, clk is a bool you can read or set as any other variable.
|
||||||
|
|||||||
+29
-15
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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,21 +89,35 @@ 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}*\ .sarif
|
||||||
|
- SARIF diagnostics (from --diagnostics-sarif)
|
||||||
|
* - *{prefix}*\ .tree.json
|
||||||
|
- JSON tree information (from --json-only)
|
||||||
|
* - *{prefix}*\ .tree.meta.json
|
||||||
|
- JSON tree metadata (from --json-only)
|
||||||
* - *{prefix}*\ .xml
|
* - *{prefix}*\ .xml
|
||||||
- XML tree information (from --xml)
|
- XML tree information (from --xml)
|
||||||
* - *{prefix}*\ __cdc.txt
|
* - *{prefix}*\ __cdc.txt
|
||||||
@@ -126,8 +134,10 @@ In specific debug and other modes, it also creates:
|
|||||||
- Debugging graph files (from --debug)
|
- Debugging graph files (from --debug)
|
||||||
* - *{prefix}{misc}*\ .tree
|
* - *{prefix}{misc}*\ .tree
|
||||||
- Debugging files (from --debug)
|
- Debugging files (from --debug)
|
||||||
* - {mod_prefix}_{each_verilog_base_filename}*\ .vpp
|
* - *{prefix}*\ __inputs\ .vpp
|
||||||
- Pre-processed verilog (from --debug)
|
- Pre-processed verilog for all files (from --debug)
|
||||||
|
* - *{prefix}*\ _ *{each_verilog_base_filename}*\ .vpp
|
||||||
|
- Pre-processed verilog for each file (from --debug)
|
||||||
|
|
||||||
After running Make, the C++ compiler may produce the following:
|
After running Make, the C++ compiler may produce the following:
|
||||||
|
|
||||||
@@ -143,6 +153,10 @@ After running Make, the C++ compiler may produce the following:
|
|||||||
- Intermediate objects
|
- Intermediate objects
|
||||||
* - *{prefix}*\
|
* - *{prefix}*\
|
||||||
- Final executable (from --exe)
|
- Final executable (from --exe)
|
||||||
|
* - lib\ *{prefix}*\ .a
|
||||||
|
- Final archive (default lib mode)
|
||||||
|
* - libverilated.a
|
||||||
|
- Runtime for verilated model (default lib mode)
|
||||||
* - *{prefix}*\ __ALL.a
|
* - *{prefix}*\ __ALL.a
|
||||||
- Library of all Verilated objects
|
- Library of all Verilated objects
|
||||||
* - *{prefix}*\ __ALL.cpp
|
* - *{prefix}*\ __ALL.cpp
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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-2023 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:
|
||||||
|
|||||||
+106
-67
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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,10 +56,10 @@ 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 perl python3 make autoconf g++ flex bison ccache
|
#sudo apt-get install git help2man perl python3 make autoconf g++ flex bison ccache
|
||||||
#sudo apt-get install libgoogle-perftools-dev numactl perl-doc
|
#sudo apt-get install libgoogle-perftools-dev numactl perl-doc
|
||||||
#sudo apt-get install libfl2 # Ubuntu only (ignore if gives error)
|
#sudo apt-get install libfl2 # Ubuntu only (ignore if gives error)
|
||||||
#sudo apt-get install libfl-dev # Ubuntu only (ignore if gives error)
|
#sudo apt-get install libfl-dev # Ubuntu only (ignore if gives error)
|
||||||
@@ -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,43 +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)
|
||||||
|
|
||||||
To build or run Verilator, the following are optional but should be installed
|
For SystemC:
|
||||||
for good performance:
|
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
sudo apt-get install ccache # If present at build, needed for run
|
sudo apt-get install libsystemc libsystemc-dev
|
||||||
sudo apt-get install libgoogle-perftools-dev numactl
|
|
||||||
|
For constraints:
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
|
sudo apt-get install z3 # Optional solver
|
||||||
|
|
||||||
The following is optional but is recommended for nicely rendered command line
|
The following is optional but is recommended for nicely rendered command line
|
||||||
help when running Verilator:
|
help when running Verilator:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
sudo apt-get install perl-doc
|
sudo apt-get install perl-doc
|
||||||
|
|
||||||
|
To build or run Verilator, the following are optional but should be installed
|
||||||
|
for good performance:
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
|
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 libgoogle-perftools-dev numactl
|
||||||
|
|
||||||
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 also need these (see internals.rst):
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
sudo apt-get install gdb graphviz cmake clang clang-format-14 gprof lcov
|
sudo apt-get install clang clang-format-18 cmake gdb gprof graphviz lcov
|
||||||
sudo apt-get install libclang-dev yapf3
|
sudo apt-get install python3-clang python3-distro yapf3 bear jq
|
||||||
sudo pip3 install clang sphinx sphinx_rtd_theme sphinxcontrib-spelling breathe
|
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
|
||||||
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
|
||||||
@@ -146,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:
|
||||||
|
|
||||||
@@ -158,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
|
||||||
@@ -180,7 +231,7 @@ Auto Configure
|
|||||||
|
|
||||||
Create the configuration script:
|
Create the configuration script:
|
||||||
|
|
||||||
::
|
.. code-block:: shell
|
||||||
|
|
||||||
autoconf # Create ./configure script
|
autoconf # Create ./configure script
|
||||||
|
|
||||||
@@ -191,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:
|
||||||
|
|
||||||
@@ -201,42 +253,45 @@ These are the installation options:
|
|||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Our personal favorite is to always run Verilator in-place from its Git
|
Our personal favorite is to always run Verilator in-place from its Git
|
||||||
directory. This allows the easiest experimentation and upgrading, and
|
directory (don't run ``make install``). This allows the easiest
|
||||||
allows many versions of Verilator to co-exist on a system.
|
experimentation and upgrading, and allows many versions of Verilator to
|
||||||
|
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
|
||||||
./configure
|
./configure
|
||||||
# Running will use files from $VERILATOR_ROOT, so no install needed
|
# Running will use files from $VERILATOR_ROOT, so no install needed
|
||||||
|
|
||||||
Note after installing (below steps), a calling program or shell must set
|
Note after installing (see `Installation`_), a calling program or shell
|
||||||
the environment variable :option:`VERILATOR_ROOT` to point to this Git
|
must set the environment variable :option:`VERILATOR_ROOT` to point to this
|
||||||
directory, then execute ``$VERILATOR_ROOT/bin/verilator``, which will find
|
Git directory, then execute ``$VERILATOR_ROOT/bin/verilator``, which will
|
||||||
the path to all needed files.
|
find the path to all needed files.
|
||||||
|
|
||||||
|
|
||||||
2. Install into a specific location
|
2. Install into a Specific Prefix
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
You may eventually be installing onto a project/company-wide "CAD" tools
|
You may be an OS package maintainer building a Verilator package, or you
|
||||||
disk that may support multiple versions of every tool. Tell configure the
|
may eventually be installing onto a project/company-wide "CAD" tools disk
|
||||||
|
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
|
||||||
# For the tarball, use the version number instead of git describe
|
# For the tarball, use the version number instead of git describe
|
||||||
./configure --prefix /CAD_DISK/verilator/`git describe | sed "s/verilator_//"`
|
./configure --prefix /CAD_DISK/verilator/`git describe | sed "s/verilator_//"`
|
||||||
|
|
||||||
Note after installing (below steps), if you use `modulecmd
|
Note after installing (see `Installation`_), you need to add the path to
|
||||||
<http://modules.sourceforge.net/>`__, you'll want a module file like the
|
the ``bin`` directory to your ``PATH``. Or, if you use `modulecmd
|
||||||
|
<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
|
||||||
@@ -245,36 +300,20 @@ following:
|
|||||||
prepend-path PKG_CONFIG_PATH $install_root/share/pkgconfig
|
prepend-path PKG_CONFIG_PATH $install_root/share/pkgconfig
|
||||||
|
|
||||||
|
|
||||||
3. Install into a Specific Path
|
3. Install System Globally
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
You may eventually install Verilator into a specific installation prefix,
|
|
||||||
as most GNU tools support:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
unset VERILATOR_ROOT # if your shell is bash
|
|
||||||
unsetenv VERILATOR_ROOT # if your shell is csh
|
|
||||||
./configure --prefix /opt/verilator-VERSION
|
|
||||||
|
|
||||||
Then after installing (below steps), you will need to add
|
|
||||||
``/opt/verilator-VERSION/bin`` to your ``$PATH`` environment variable.
|
|
||||||
|
|
||||||
|
|
||||||
4. Install System Globally
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
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
|
||||||
./configure
|
./configure
|
||||||
|
|
||||||
Then after installing (below), the binaries should be in a location
|
Then after installing (see `Installation`_), the binaries should be in a
|
||||||
already in your ``$PATH`` environment variable.
|
location already in your ``$PATH`` environment variable.
|
||||||
|
|
||||||
|
|
||||||
Configure
|
Configure
|
||||||
@@ -284,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...
|
||||||
@@ -295,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
|
||||||
|
|
||||||
@@ -305,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
|
||||||
|
|
||||||
@@ -317,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
|
||||||
|
|
||||||
|
|||||||
+48
-54
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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
|
||||||
@@ -62,12 +62,23 @@ Verilator supports the 2017 "for" loop constructs and several cleanups IEEE
|
|||||||
made in 1800-2017.
|
made in 1800-2017.
|
||||||
|
|
||||||
|
|
||||||
|
SystemVerilog 2023 (IEEE 1800-2023) Support
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
Verilator supports some of the 2023 improvements, including triple-quoted
|
||||||
|
string blocks that may include newlines and single quotes.
|
||||||
|
|
||||||
|
Verilator implements a full IEEE 1800-2023 compliant preprocessor,
|
||||||
|
including triple-quoted strings, and \`ifdef expressions.
|
||||||
|
|
||||||
|
|
||||||
Verilog AMS Support
|
Verilog AMS Support
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Verilator implements a very small subset of Verilog AMS (Verilog Analog and
|
Verilator implements a very small subset of Verilog AMS (Verilog Analog and
|
||||||
Mixed-Signal Extensions) with the subset corresponding to those VMS
|
Mixed-Signal Extensions) with the subset corresponding to those VMS
|
||||||
keywords with near-equivalents in Verilog 2005 or SystemVerilog 2017.
|
keywords with near-equivalents in Verilog IEEE 1364 or SystemVerilog
|
||||||
|
IEEE 1800.
|
||||||
|
|
||||||
AMS parsing is enabled with :vlopt:`--language VAMS <--language>` or
|
AMS parsing is enabled with :vlopt:`--language VAMS <--language>` or
|
||||||
:vlopt:`--language 1800+VAMS <--language>`.
|
:vlopt:`--language 1800+VAMS <--language>`.
|
||||||
@@ -79,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.
|
||||||
|
|
||||||
@@ -157,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:
|
||||||
@@ -237,11 +248,9 @@ optimizations will be disabled around the latch.
|
|||||||
Structures and Unions
|
Structures and Unions
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
Presently Verilator only supports packed structs and packed unions. Rand
|
All structures and unions are scheduled together, which means that
|
||||||
and randc tags on members are ignored. All structures and unions are
|
generating one member of a structure from blocking, and another from
|
||||||
represented as a single vector, which means that generating one member of a
|
non-blocking assignments is unsupported.
|
||||||
structure from blocking, and another from non-blocking assignments is
|
|
||||||
unsupported.
|
|
||||||
|
|
||||||
|
|
||||||
.. _Unknown States:
|
.. _Unknown States:
|
||||||
@@ -320,26 +329,13 @@ there will be considered a two-state variable that is read and written
|
|||||||
instead of a four-state variable.
|
instead of a four-state variable.
|
||||||
|
|
||||||
|
|
||||||
Functions & Tasks
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
All functions and tasks will be inlined (will not become functions in C.)
|
|
||||||
The only support provided is simple statements in tasks (which may
|
|
||||||
affect global variables).
|
|
||||||
|
|
||||||
Recursive functions and tasks are not supported. All inputs and outputs
|
|
||||||
are automatic as if they had the Verilog 2001 "automatic" keyword
|
|
||||||
prepended. (If you don't know what this means, Verilator will do what you
|
|
||||||
probably expect, what C does. The default behavior of Verilog is
|
|
||||||
different.)
|
|
||||||
|
|
||||||
|
|
||||||
Gate Primitives
|
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
|
||||||
@@ -383,24 +379,6 @@ Verilator does not support SEREs yet. All assertion and coverage
|
|||||||
statements must be simple expressions that complete in one cycle.
|
statements must be simple expressions that complete in one cycle.
|
||||||
|
|
||||||
|
|
||||||
Force statement
|
|
||||||
---------------
|
|
||||||
|
|
||||||
Verilator supports the procedural `force` (and corresponding `release`)
|
|
||||||
statement. However, the behavior of the `force` statement does not entirely
|
|
||||||
comply with IEEE 1800. According to the standard,
|
|
||||||
when a procedural statement of the form `force a = b;` is executed, the
|
|
||||||
simulation should behave as if, from that point forwards, a continuous
|
|
||||||
assignment `assign a = b;` has been added to override the drivers of `a`.
|
|
||||||
More specifically: the value of `a` should be updated whenever the value of
|
|
||||||
`b` changes, until a `release a;` statement is executed.
|
|
||||||
Verilator instead evaluates the current value of `b` when the `force`
|
|
||||||
statement is executed, and forces `a` to that value, without updating it
|
|
||||||
until a new `force` or `release` statement is encountered that applies to
|
|
||||||
`a`. This non-standard behavior is nevertheless consistent with some other
|
|
||||||
simulators.
|
|
||||||
|
|
||||||
|
|
||||||
Encrypted Verilog
|
Encrypted Verilog
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
@@ -419,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.
|
||||||
@@ -471,6 +449,21 @@ disable
|
|||||||
provide loop break and continue functionality before SystemVerilog added
|
provide loop break and continue functionality before SystemVerilog added
|
||||||
the break and continue keywords.
|
the break and continue keywords.
|
||||||
|
|
||||||
|
force, release
|
||||||
|
Verilator supports the procedural `force` (and corresponding `release`)
|
||||||
|
statement. However, the behavior of the `force` statement does not
|
||||||
|
entirely comply with IEEE 1800-2023:
|
||||||
|
|
||||||
|
#. Using forced variable as a value to another force statement is
|
||||||
|
currently not supported. The dependent force statement is forced by an
|
||||||
|
initial constant value.
|
||||||
|
|
||||||
|
#. Force/release with procedural continuous assignment is not supported.
|
||||||
|
The assignment is treated as procedural.
|
||||||
|
|
||||||
|
#. Expressions using multiple variable references or function calls on
|
||||||
|
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
|
||||||
upper bound. Case inside and case matches are also unsupported.
|
upper bound. Case inside and case matches are also unsupported.
|
||||||
@@ -485,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
|
||||||
@@ -496,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.
|
||||||
@@ -543,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-2023 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,12 +23,12 @@ resulting model's C++ or SystemC code is output as .cpp and .h files. This
|
|||||||
is referred to as "Verilating", and the process is "to Verilate"; the
|
is referred to as "Verilating", and the process is "to Verilate"; the
|
||||||
output is a "Verilated" model.
|
output is a "Verilated" model.
|
||||||
|
|
||||||
2. For simulation, a small-user written C++ wrapper file is required, the
|
2. For simulation, a small user-written C++ wrapper file is required, the
|
||||||
"wrapper". This wrapper defines the C++ standard function "main()", which
|
"wrapper". This wrapper defines the C++ standard function "main()", which
|
||||||
instantiates the Verilated model as a C++/SystemC object.
|
instantiates the Verilated model as a C++/SystemC object.
|
||||||
|
|
||||||
3. The user C++ wrapper, the files created by Verilator, a "runtime
|
3. The user C++ wrapper, the files created by Verilator, a "runtime
|
||||||
library" provided by Verilator, and, if applicable SystemC libraries are
|
library" provided by Verilator, and, if applicable, SystemC libraries are
|
||||||
then compiled using a C++ compiler to create a simulation executable.
|
then compiled using a C++ compiler to create a simulation executable.
|
||||||
|
|
||||||
4. The resulting executable will perform the actual simulation during
|
4. The resulting executable will perform the actual simulation during
|
||||||
@@ -44,12 +44,12 @@ The best place to get started is to try the :ref:`Examples`.
|
|||||||
.. [#] Verilog is defined by the `Institute of Electrical and Electronics
|
.. [#] Verilog is defined by the `Institute of Electrical and Electronics
|
||||||
Engineers (IEEE) Standard for Verilog Hardware Description
|
Engineers (IEEE) Standard for Verilog Hardware Description
|
||||||
Language`, Std. 1364, released in 1995, 2001, and 2005. The
|
Language`, Std. 1364, released in 1995, 2001, and 2005. The
|
||||||
Verilator documentation uses the shorthand, e.g., "IEEE 1394-2005",
|
Verilator documentation uses the shorthand, e.g., "IEEE 1364-2005",
|
||||||
to refer to the, e.g., 2005 version of this standard.
|
to refer to the, e.g., 2005 version of this standard.
|
||||||
|
|
||||||
.. [#] SystemVerilog is defined by the `Institute of Electrical and
|
.. [#] SystemVerilog is defined by the `Institute of Electrical and
|
||||||
Electronics Engineers (IEEE) Standard for SystemVerilog - Unified
|
Electronics Engineers (IEEE) Standard for SystemVerilog - Unified
|
||||||
Hardware Design, Specification, and Verification Language`, Standard
|
Hardware Design, Specification, and Verification Language`, Standard
|
||||||
1800, released in 2005, 2009, 2012, and 2017. The Verilator
|
1800, released in 2005, 2009, 2012, 2017, and 2023. The Verilator
|
||||||
documentation uses the shorthand e.g., "IEEE 1800-2017", to refer to
|
documentation uses the shorthand e.g., "IEEE 1800-2023", to refer to
|
||||||
the, e.g., 2017 version of this standard.
|
the, e.g., 2023 version of this standard.
|
||||||
|
|||||||
+167
-40
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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:
|
||||||
@@ -12,6 +12,62 @@ Verilated model's executable. For the runtime arguments to a simulated
|
|||||||
model, see :ref:`Simulation Runtime Arguments`.
|
model, see :ref:`Simulation Runtime Arguments`.
|
||||||
|
|
||||||
|
|
||||||
|
.. _Simulation Summary Report:
|
||||||
|
|
||||||
|
Simulation Summary Report
|
||||||
|
=========================
|
||||||
|
|
||||||
|
When simulation finishes, it will print a report to stdout summarizing the
|
||||||
|
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`.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
- S i m u l a t i o n R e p o r t: Verilator ...
|
||||||
|
- Verilator: End at simtime 123 ns; walltime 1234.001 s; speed 123 ns/s
|
||||||
|
- Verilator: cpu 22.001 s on 4 threads; alloced 123 MB
|
||||||
|
|
||||||
|
The information in this report is:
|
||||||
|
|
||||||
|
.. describe:: "Verilator ..."
|
||||||
|
|
||||||
|
Program version.
|
||||||
|
|
||||||
|
.. describe:: "End at simtime 123 ns"
|
||||||
|
|
||||||
|
Verilog $time at which the model finished or stopped.
|
||||||
|
|
||||||
|
.. describe:: "walltime 1234.001 s"
|
||||||
|
|
||||||
|
Real elapsed wall time in seconds.
|
||||||
|
|
||||||
|
.. describe:: "speed 123.1 ns/s"
|
||||||
|
|
||||||
|
Simulated time (if non-zero) divided by wall time. e.g. `123 ns/s` means
|
||||||
|
123 simulated nanoseconds took 1 second of wall time; for a model with
|
||||||
|
only a 1 GHz clock that would be equivalent to 123.1 cycles per
|
||||||
|
second. The units are automatically selected to give a number between 1
|
||||||
|
and 1000. The wall time includes initialization, initial and final
|
||||||
|
process blocks, so indicates a slower speed than if the model had a
|
||||||
|
longer runtime.
|
||||||
|
|
||||||
|
.. describe:: "cpu 22 s"
|
||||||
|
|
||||||
|
CPU time used total across all CPU threads in seconds.
|
||||||
|
|
||||||
|
.. describe:: "4 threads"
|
||||||
|
|
||||||
|
Number of simultaneous threads used.
|
||||||
|
|
||||||
|
.. describe:: "alloced 123 MB"
|
||||||
|
|
||||||
|
Total memory used during simulation in megabytes.
|
||||||
|
|
||||||
|
|
||||||
.. _Benchmarking & Optimization:
|
.. _Benchmarking & Optimization:
|
||||||
|
|
||||||
Benchmarking & Optimization
|
Benchmarking & Optimization
|
||||||
@@ -20,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
|
||||||
@@ -143,12 +202,9 @@ Functional Coverage
|
|||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
With :vlopt:`--coverage` or :vlopt:`--coverage-user`, Verilator will
|
With :vlopt:`--coverage` or :vlopt:`--coverage-user`, Verilator will
|
||||||
translate functional coverage points the user has inserted manually win
|
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":
|
||||||
|
|
||||||
@@ -168,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
|
||||||
@@ -222,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
|
||||||
@@ -230,14 +330,20 @@ Coverage Collection
|
|||||||
When any coverage flag is used to Verilate, Verilator will add appropriate
|
When any coverage flag is used to Verilate, Verilator will add appropriate
|
||||||
coverage point insertions into the model and collect the coverage data.
|
coverage point insertions into the model and collect the coverage data.
|
||||||
|
|
||||||
To get the coverage data from the model, in the user wrapper code,
|
To get the coverage data from the model, write the coverage with either:
|
||||||
typically at the end once a test passes, call
|
|
||||||
:code:`Verilated::threadContextp()->coveragep()->write` with an argument of the filename for
|
1. Using :vlopt:`--binary` or :vlopt:`--main`, and Verilator will dump
|
||||||
the coverage data file to write coverage data to (typically
|
coverage when the test completes to the filename specified with
|
||||||
"logs/coverage.dat").
|
:vlopt:`+verilator+coverage+file+\<filename\>`.
|
||||||
|
|
||||||
|
2. In the user wrapper code, typically at the end once a test passes, call
|
||||||
|
:code:`Verilated::threadContextp()->coveragep()->write` with an argument
|
||||||
|
of the filename for the coverage data file to write coverage data to
|
||||||
|
(typically "logs/coverage.dat").
|
||||||
|
|
||||||
Run each of your tests in different directories, potentially in parallel.
|
Run each of your tests in different directories, potentially in parallel.
|
||||||
Each test will create a :file:`logs/coverage.dat` file.
|
Each test will create the file specified above,
|
||||||
|
e.g. :file:`logs/coverage.dat`.
|
||||||
|
|
||||||
After running all of the tests, execute the :command:`verilator_coverage`
|
After running all of the tests, execute the :command:`verilator_coverage`
|
||||||
command, passing arguments pointing to the filenames of all the
|
command, passing arguments pointing to the filenames of all the
|
||||||
@@ -273,13 +379,17 @@ profiled C++ code functions.
|
|||||||
|
|
||||||
To use profiling:
|
To use profiling:
|
||||||
|
|
||||||
#. Use Verilator's :vlopt:`--prof-cfuncs`.
|
#. Make sure the Verilog code will call `$finish` at the end of simulation
|
||||||
|
(otherwise the C library may not correctly create the `gmon.out` file in
|
||||||
|
the later steps below).
|
||||||
|
#. Run Verilator, adding the :vlopt:`--prof-cfuncs` option.
|
||||||
#. Build and run the simulation model.
|
#. Build and run the simulation model.
|
||||||
#. The model will create gmon.out.
|
#. The model will create `gmon.out`.
|
||||||
#. Run :command:`gprof` to see where in the C++ code the time is spent.
|
#. Run :command:`gprof gmon.out > gprof.log` to see where in the C++ code
|
||||||
#. Run the gprof output through the :command:`verilator_profcfunc` program,
|
the time is spent.
|
||||||
and it will tell you what Verilog line numbers on which most of the time
|
#. Run :command:`verilator_profcfunc gprof.log > profcfunc.log` to take the
|
||||||
is being spent.
|
gprof output and translate into output showing the Verilog line numbers
|
||||||
|
on which most of the time is being spent.
|
||||||
|
|
||||||
|
|
||||||
.. _Execution Profiling:
|
.. _Execution Profiling:
|
||||||
@@ -500,18 +610,35 @@ feedback-directed optimization. See the appropriate compiler
|
|||||||
documentation.
|
documentation.
|
||||||
|
|
||||||
|
|
||||||
.. _Runtime Debugging
|
.. _Runtime Debugging:
|
||||||
|
|
||||||
Runtime Debugging
|
Runtime Debugging
|
||||||
=================
|
=================
|
||||||
|
|
||||||
To debug a Verilated executable, use the standard GNU debugger ``gdb`` or a
|
To debug a Verilated executable, Verilate with :vlopt:`--runtime-debug`.
|
||||||
similar tool. Typically you will want to have debugger symbols inserted by
|
This will instruct the compiler to insert debugger, and enable various
|
||||||
the compiler, assertions enabled in the C library, and assertions enabled
|
library assertions. These options slow down the executable, so do this
|
||||||
in the Verilated library. (These options slow down the executable, so do
|
only when debugging.
|
||||||
this only when debugging.) To enable this, Verilate with:
|
|
||||||
|
|
||||||
-CFLAGS -ggdb -LDFLAGS -ggdb -CFLAGS -DVL_DEBUG=1 -CFLAGS -D_GLIBCXX_DEBUG
|
If you are using your own Makefiles, adapt appropriately to pass the
|
||||||
|
options documented under :vlopt:`--runtime-debug` to the compiler and
|
||||||
|
linker.
|
||||||
|
|
||||||
The :vlopt:`-CFLAGS` and/or :vlopt:`-LDFLAGS` options pass arguments
|
Once you have a debugging-enabled executable, run it using the the standard
|
||||||
directly to the compiler or linker.
|
GNU debugger ``gdb`` or a similar tool, and create a backtrace; e.g.:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
gdb obj_dir/Vtop
|
||||||
|
run {Vtop_command_arguments}
|
||||||
|
{Vtop prints output, perhaps a segmentation faults}
|
||||||
|
bt
|
||||||
|
|
||||||
|
Rarely the bug may disappear with :vlopt:`--runtime-debug`; if so, try
|
||||||
|
instead using the sub-options that :vlopt:`--runtime-debug` documents, to
|
||||||
|
find the maximum subset that still shows the issue. E.g. it is likely that
|
||||||
|
using `-CFLAGS -D_GLIBCXX_DEBUG` will not hide any bug, so may be used.
|
||||||
|
|
||||||
|
Using :vlopt:`--runtime-debug` or `-CFLAGS -DVL_DEBUG=1` will only print a
|
||||||
|
message if something goes wrong. To enable debug print messages at
|
||||||
|
runtime, additionally use the :vlopt:`+verilator+debug` runtime option.
|
||||||
|
|||||||
+166
-35
@@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2003-2023 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
|
||||||
|
|
||||||
**********
|
**********
|
||||||
@@ -7,9 +7,13 @@ Verilating
|
|||||||
|
|
||||||
Verilator may be used in five major ways:
|
Verilator may be used in five major ways:
|
||||||
|
|
||||||
|
* With the :vlopt:`--binary` option, Verilator will translate the design
|
||||||
|
into an executable, via generating C++ and compiling it. See
|
||||||
|
:ref:`Binary, C++ and SystemC Generation`.
|
||||||
|
|
||||||
* With the :vlopt:`--cc` or :vlopt:`--sc` options, Verilator will translate
|
* With the :vlopt:`--cc` or :vlopt:`--sc` options, Verilator will translate
|
||||||
the design into C++ or SystemC code, respectively. See :ref:`C++ and
|
the design into C++ or SystemC code, respectively. See :ref:`Binary, C++
|
||||||
SystemC Generation`.
|
and SystemC Generation`.
|
||||||
|
|
||||||
* With the :vlopt:`--lint-only` option, Verilator will lint the design to
|
* With the :vlopt:`--lint-only` option, Verilator will lint the design to
|
||||||
check for warnings but will not typically create any output files.
|
check for warnings but will not typically create any output files.
|
||||||
@@ -24,13 +28,15 @@ Verilator may be used in five major ways:
|
|||||||
expanded.
|
expanded.
|
||||||
|
|
||||||
|
|
||||||
.. _C++ and SystemC Generation:
|
.. _Binary, C++ and SystemC Generation:
|
||||||
|
|
||||||
C++ and SystemC Generation
|
Binary, C++ and SystemC Generation
|
||||||
==========================
|
==================================
|
||||||
|
|
||||||
Verilator will translate a SystemVerilog design into C++ with the
|
Verilator will translate a SystemVerilog design into C++ with the
|
||||||
:vlopt:`--cc` option, or into SystemC with the :vlopt:`--sc` option.
|
:vlopt:`--cc` option, or into SystemC with the :vlopt:`--sc` option. It
|
||||||
|
will translate into C++ and compile it into an executable binary with the
|
||||||
|
:vlopt:`--binary` option.
|
||||||
|
|
||||||
When using these options:
|
When using these options:
|
||||||
|
|
||||||
@@ -45,14 +51,53 @@ When using these options:
|
|||||||
The prefix is set with :vlopt:`--prefix`, or defaults to the name of the
|
The prefix is set with :vlopt:`--prefix`, or defaults to the name of the
|
||||||
top module.
|
top module.
|
||||||
|
|
||||||
#. If :vlopt:`--exe` is used, Verilator creates makefiles to generate a
|
#. If :vlopt:`--binary` or :vlopt:`--main` is used, Verilator creates a C++
|
||||||
simulation executable, otherwise, it creates makefiles to generate an
|
top wrapper to read command line arguments, create the model, and
|
||||||
archive (.a) containing the objects.
|
execute the model.
|
||||||
|
|
||||||
#. If :vlopt:`--build` option was used, it calls :ref:`GNU Make` or
|
#. If :vlopt:`--binary` or :vlopt:`--exe` is used, Verilator creates
|
||||||
:ref:`CMake` to build the model.
|
makefiles to generate a simulation executable, otherwise, it creates
|
||||||
|
makefiles to generate an archive (.a) containing the objects.
|
||||||
|
|
||||||
Once a model is built, it is then typically run, see :ref:`Simulating`.
|
#. If :vlopt:`--binary` or :vlopt:`--build` is used, it calls :ref:`GNU
|
||||||
|
Make` or :ref:`CMake` to build the model.
|
||||||
|
|
||||||
|
Once a model is built, the next step is typically for the user to run it,
|
||||||
|
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:
|
||||||
@@ -83,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.
|
||||||
|
|
||||||
@@ -102,8 +147,6 @@ Hierarchy blocks have some limitations, including:
|
|||||||
* The hierarchy block cannot be accessed using dot (.) from the upper
|
* The hierarchy block cannot be accessed using dot (.) from the upper
|
||||||
module(s) or other hierarchy blocks.
|
module(s) or other hierarchy blocks.
|
||||||
|
|
||||||
* Signals in the block cannot be traced.
|
|
||||||
|
|
||||||
* Modport cannot be used at the hierarchical block boundary.
|
* Modport cannot be used at the hierarchical block boundary.
|
||||||
|
|
||||||
* The simulation speed is likely not as fast as flat Verilation, in which
|
* The simulation speed is likely not as fast as flat Verilation, in which
|
||||||
@@ -165,7 +208,7 @@ compiled on the different target system.
|
|||||||
|
|
||||||
To support this, none of the files that Verilator produces will reference
|
To support this, none of the files that Verilator produces will reference
|
||||||
any configure-generated build-system-specific files, such as
|
any configure-generated build-system-specific files, such as
|
||||||
:file:`config.h` (which is renamed in Verilator to :file:`config_build.h`
|
:file:`config.h` (which is renamed in Verilator to :file:`config_package.h`
|
||||||
to reduce confusion.) The disadvantage of this approach is that
|
to reduce confusion.) The disadvantage of this approach is that
|
||||||
:file:`include/verilatedos.h` must self-detect the requirements of the
|
:file:`include/verilatedos.h` must self-detect the requirements of the
|
||||||
target system, rather than using configure.
|
target system, rather than using configure.
|
||||||
@@ -210,7 +253,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.
|
||||||
|
|
||||||
@@ -232,11 +275,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:
|
||||||
@@ -279,8 +325,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
|
||||||
@@ -293,9 +339,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.
|
||||||
|
|
||||||
@@ -356,10 +402,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
|
||||||
@@ -432,10 +479,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
|
||||||
@@ -443,14 +486,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`
|
||||||
@@ -487,3 +543,78 @@ The search paths can be configured by setting some variables:
|
|||||||
|
|
||||||
Sets the installation prefix of an installed SystemC library. (Same as
|
Sets the installation prefix of an installed SystemC library. (Same as
|
||||||
SYSTEMC_ROOT).
|
SYSTEMC_ROOT).
|
||||||
|
|
||||||
|
|
||||||
|
.. _Verilation Summary Report:
|
||||||
|
|
||||||
|
Verilation Summary Report
|
||||||
|
=========================
|
||||||
|
|
||||||
|
When Verilator generates code, unless :vlopt:`--quiet-stats` is used, it
|
||||||
|
will print a report to stdout summarizing the build. For example:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
- V e r i l a t i o n R e p o r t: Verilator ....
|
||||||
|
- Verilator: Built from 354 MB sources in 247 modules,
|
||||||
|
into 74 MB in 89 C++ files needing 0.192 MB
|
||||||
|
- Verilator: Walltime 26.580 s (elab=2.096, cvt=18.268,
|
||||||
|
bld=2.100); cpu 26.548 s on 1 threads; alloced 2894.672 MB
|
||||||
|
|
||||||
|
The information in this report is:
|
||||||
|
|
||||||
|
.. describe:: "Verilator ..."
|
||||||
|
|
||||||
|
Program version.
|
||||||
|
|
||||||
|
.. describe:: "234 MB sources"
|
||||||
|
|
||||||
|
Characters of post-preprocessed text in all input
|
||||||
|
Verilog and Verilator Control files in megabytes.
|
||||||
|
|
||||||
|
.. describe:: "247 modules"
|
||||||
|
|
||||||
|
Number of interfaces/modules/classes/packages in design before
|
||||||
|
elaboration.
|
||||||
|
|
||||||
|
.. describe:: "into 74 MB"
|
||||||
|
|
||||||
|
Characters of output C++ code, including comments in megabytes.
|
||||||
|
|
||||||
|
.. describe:: "89 C++ files"
|
||||||
|
|
||||||
|
Number of .cpp files created.
|
||||||
|
|
||||||
|
.. describe:: "needing 192MB"
|
||||||
|
|
||||||
|
Verilation-time minimum-bound estimate of memory needed to run model in
|
||||||
|
megabytes. (Expect to need significantly more.)
|
||||||
|
|
||||||
|
.. describe:: "Walltime 26.580 s"
|
||||||
|
|
||||||
|
Real elapsed wall time for Verilation and build.
|
||||||
|
|
||||||
|
.. describe:: "elab=2.096"
|
||||||
|
|
||||||
|
Wall time to read in files and complete elaboration.
|
||||||
|
|
||||||
|
.. describe:: "cvt=18.268"
|
||||||
|
|
||||||
|
Wall time for Verilator to process and write output.
|
||||||
|
|
||||||
|
.. describe:: "bld=2.1"
|
||||||
|
|
||||||
|
Wall time to compile gcc/clang (if using :vlopt:`--build`).
|
||||||
|
|
||||||
|
.. describe:: "cpu 22.548 s"
|
||||||
|
|
||||||
|
CPU time used, total across all CPU threads.
|
||||||
|
|
||||||
|
.. describe:: "4 threads"
|
||||||
|
|
||||||
|
Number of simultaneous threads used.
|
||||||
|
|
||||||
|
.. describe:: "alloced 123 MB"
|
||||||
|
|
||||||
|
Total memory used during build by Verilator executable (excludes
|
||||||
|
:vlopt:`--build` compiler's usage) in megabytes.
|
||||||
|
|||||||
+696
-89
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user