aboutsummaryrefslogtreecommitdiffstats
path: root/backends/cxxrtl/cxxrtl_capi.cc
diff options
context:
space:
mode:
authorwhitequark <whitequark@whitequark.org>2020-12-13 07:03:16 +0000
committerwhitequark <whitequark@whitequark.org>2020-12-14 01:27:27 +0000
commitece25a45d4b12f0436be238a13e622b58282036e (patch)
tree28ffff0e325e2dd9f9df3c3edbc017619ec85633 /backends/cxxrtl/cxxrtl_capi.cc
parent3b5a1314cd02d093cb1328d7c2f7abced876a514 (diff)
downloadyosys-ece25a45d4b12f0436be238a13e622b58282036e.tar.gz
yosys-ece25a45d4b12f0436be238a13e622b58282036e.tar.bz2
yosys-ece25a45d4b12f0436be238a13e622b58282036e.zip
cxxrtl: implement debug information outlining.
Aggressive wire localization and inlining is necessary for CXXRTL to achieve high performance. However, that comes with a cost: reduced debug information coverage. Previously, as a workaround, the `-Og` option could have been used to guarantee complete coverage, at a cost of a significant performance penalty. This commit introduces debug information outlining. The main eval() function is compiled with the user-specified optimization settings. In tandem, an auxiliary debug_eval() function, compiled from the same netlist, can be used to reconstruct the values of localized/inlined signals on demand. To the extent that it is possible, debug_eval() reuses the results of computations performed by eval(), only filling in the missing values. Benchmarking a representative design (Minerva SoC SRAM) shows that: * Switching from `-O4`/`-Og` to `-O6` reduces runtime by ~40%. * Switching from `-g1` to `-g2`, both used with `-O6`, increases compile time by ~25%. * Although `-g2` increases the resident size of generated modules, this has no effect on runtime. Because the impact of `-g2` is minimal and the benefits of having unconditional 100% debug information coverage (and the performance improvement as well) are major, this commit removes `-Og` and changes the defaults to `-O6 -g2`. We'll have our cake and eat it too!
Diffstat (limited to 'backends/cxxrtl/cxxrtl_capi.cc')
-rw-r--r--backends/cxxrtl/cxxrtl_capi.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/backends/cxxrtl/cxxrtl_capi.cc b/backends/cxxrtl/cxxrtl_capi.cc
index f92709b46..227173ba8 100644
--- a/backends/cxxrtl/cxxrtl_capi.cc
+++ b/backends/cxxrtl/cxxrtl_capi.cc
@@ -86,3 +86,7 @@ void cxxrtl_enum(cxxrtl_handle handle, void *data,
for (auto &it : handle->objects.table)
callback(data, it.first.c_str(), static_cast<cxxrtl_object*>(&it.second[0]), it.second.size());
}
+
+void cxxrtl_outline_eval(cxxrtl_outline outline) {
+ outline->eval();
+}