3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-25 10:05:33 +00:00
Commit graph

10625 commits

Author SHA1 Message Date
whitequark
40ca9d038b cxxrtl: speed up commits on clang.
On Minerva SoC SRAM compiled with clang-11, this change cuts commit
time in half (!) and overall time by 20%. When compiled with gcc-10,
there is no difference.
2020-12-21 02:20:30 +00:00
whitequark
3d3ea5099d cxxrtl: use static inline instead of inline in the C API.
In C, non-static inline functions require an implementation elsewhere
(even though the body is right there in the header). It is basically
never desirable to use those as opposed to static inline ones.
2020-12-20 14:48:16 +00:00
Yosys Bot
b90d51e35d Bump version 2020-12-20 00:10:10 +00:00
whitequark
ab9e2f4fda
Merge pull request from whitequark/cxxrtl-outlining
CXXRTL: implement zero-cost full coverage debug information through the magic of outlining🪄🎀🧹
2020-12-19 04:14:31 +00:00
Zachary Snow
0d8e5d965f Sign extend port connections where necessary
- Signed cell outputs are sign extended when bound to larger wires
- Signed connections are sign extended when bound to larger cell inputs
- Sign extension is performed in hierarchy and flatten phases
- genrtlil indirects signed constants through signed wires
- Other phases producing RTLIL may need to be updated to preserve
  signedness information
- Resolves 
- Resolves 
2020-12-18 20:33:14 -07:00
Yosys Bot
eaf6b551b6 Bump version 2020-12-18 00:10:05 +00:00
Marcelina Kościelnicka
871fc34ad4 xilinx: Add FDDRCPE and FDDRRSE blackbox cells.
These are necessary primitives for proper DDR support on Virtex 2 and
Spartan 3.
2020-12-17 03:25:07 +01:00
whitequark
d889a3df35 cxxrtl: print names of cells inlined in connections. 2020-12-15 11:02:38 +00:00
whitequark
f75bc6c7aa cxxrtl: disable optimization of debug_items().
Implementing outlining has greatly increased the amount of debug
information in a typical build, and consequently exposed performance
issues in C++ compilers, which are similar for both GCC and Clang;
the compile time of Minerva SoC SRAM increased almost twofold.

Although one would expect the slowdown to be caused by the increased
use of templates in `debug_eval()`, it is actually almost entirely
attributable to optimizations and codegen for `debug_items()`.

Fortunately, it is neither possible nor desirable to optimize
`debug_items()`: in most cases it is called exactly once, and its
body is a linear sequence of calls with unique arguments.

This commit turns off optimizations for `debug_items()` on GCC and
Clang, improving -Os compile time of Minerva SoC SRAM by ~40% (!)
2020-12-15 11:02:38 +00:00
whitequark
4d40595d64 cxxrtl: make alias analysis outlining-aware.
Before this commit, if a sequence of wires assigned in a chain would
terminate on a cell, none of the wires would get marked as aliases,
and typically all of the public wires would get outlined. The reason
for this behavior is that alias analysis predates outlining and in
fact runs before it.

After this commit, alias analysis runs after outlining and considers
outlined wires valid aliasees. More importantly, if the chained wires
contain any valid aliasees, then all of the wires are aliased to
the one that is topologically deepest.

Aliased wires incur virtually no overhead for the VCD writer, unlike
outlined wires that would otherwise take their place. On Minerva SoC
SRAM, size of the full VCD dump is reduced by ~65%, and throughput
is increased by ~55%.
2020-12-15 11:02:38 +00:00
Yosys Bot
40e35993af Bump version 2020-12-15 00:10:06 +00:00
Marcelina Kościelnicka
de99197738 timinginfo: Error instead of segfault on const signals.
Reported by @Ravenslofty
2020-12-15 00:51:16 +01:00
whitequark
dd6a761db0 cxxrtl: add a "bare minimum" debug information level.
Useful to reduce overhead when no debug capabilities are necessary
except for access to design state.
2020-12-14 01:27:56 +00:00
whitequark
ece25a45d4 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!
2020-12-14 01:27:27 +00:00
whitequark
3b5a1314cd cxxrtl: rename "elision" to "inlining". NFC.
"Elision" in this context is an unusual and not very descriptive term
whereas "inlining" is common and straightforward. Also, introducing
"inlining" makes it easier to introduce its dual under the obvious
name "outlining".
2020-12-13 15:34:00 +00:00
whitequark
57759c3d1f cxxrtl: fix outdated comment. NFC. 2020-12-13 15:33:58 +00:00
whitequark
ac1a78923a cxxrtl: use IdString::isPublic(). NFC. 2020-12-13 15:33:55 +00:00
Yosys Bot
5a881497e1 Bump version 2020-12-13 00:10:07 +00:00
whitequark
080f311040 kernel: make IdString::isPublic() const. 2020-12-12 20:50:44 +00:00
whitequark
d1b7007e59
Merge pull request from whitequark/cxxrtl-cell-input-buffering
cxxrtl: don't overwrite buffered inputs
2020-12-12 19:55:57 +00:00
whitequark
e4aa8bc96b cxxrtl: don't overwrite buffered inputs.
Before this commit, a cell's input was always assigned like:

    p_cell.p_input = (value...);

If `p_input` is buffered (e.g. if the design is built at -O0), this
is not correct. (In practice, this breaks clocking.) Unfortunately,
the incorrect design was compiled without diagnostics because wire<>
was move-assignable and also implicitly constructible from value<>.

After this commit, cell inputs are no longer incorrectly assumed to
always be unbuffered, and wires are not assignable from values.
2020-12-11 23:32:06 +00:00
Yosys Bot
442d19f647 Bump version 2020-12-10 00:10:10 +00:00
Miodrag Milanović
08510d7248
Merge pull request from YosysHQ/pmgen_nice_error
Return nice error in pmgen generated code, fixes 
2020-12-09 11:19:30 +01:00
Miodrag Milanovic
82dcf78cd9 Return nice error in pmgen generated code, fixes 2020-12-09 11:06:22 +01:00
Yosys Bot
c46452221e Bump version 2020-12-09 00:10:04 +00:00
David Shah
f5cc1224f9 nexus: Add MULTADDSUB9X9WIDE sim model
Signed-off-by: David Shah <dave@ds0.me>
2020-12-08 15:49:20 +00:00
whitequark
ec410c9b19
Merge pull request from whitequark/improve-bugpoint
bugpoint: various improvements
2020-12-08 07:32:11 +00:00
Zachary Snow
186d6df4c3 Allow constant function calls in constant function arguments 2020-12-07 13:53:27 -07:00
David Shah
17812a1560 nexus: Add LRAM inference
Signed-off-by: David Shah <dave@ds0.me>
2020-12-07 13:27:17 +00:00
whitequark
1838edf35c bugpoint: add -wires option. 2020-12-07 09:24:35 +00:00
whitequark
2b474a01e1 bugpoint: try to remove whole processes first. 2020-12-07 08:42:54 +00:00
whitequark
b1135a88dd bugpoint: accept quoted strings in -grep. 2020-12-07 08:42:54 +00:00
whitequark
75f9e9cb45 bugpoint: add -command option. 2020-12-07 08:42:54 +00:00
Yosys Bot
95c6086681 Bump version 2020-12-04 00:10:06 +00:00
whitequark
13a270555b
Merge pull request from whitequark/cxxrtl-create_at
cxxrtl: allow customizing the root module path in the C API
2020-12-03 02:35:23 +00:00
whitequark
e89f6ae819 cxxrtl: allow customizing the root module path in the C API. 2020-12-03 01:58:02 +00:00
Yosys Bot
5a15307926 Bump version 2020-12-03 00:10:09 +00:00
whitequark
3e13cfe53d
Merge pull request from whitequark/cxxrtl-assert
cxxrtl: use CXXRTL_ASSERT for RTL contract violations instead of assert
2020-12-02 23:36:22 +00:00
whitequark
3cb109f54b
Merge pull request from whitequark/cxxrtl-no-clk
cxxrtl: fix crashes caused by a floating or constant clock input
2020-12-02 23:36:03 +00:00
whitequark
98f7b435b0
Merge pull request from whitequark/cxxrtl-reset
cxxrtl: provide a way to perform unobtrusive power-on reset
2020-12-02 23:35:54 +00:00
whitequark
90724ea9e7
Merge pull request from Zottel/master
Return correct modname when found in cache.
2020-12-02 22:20:02 +00:00
whitequark
975b2d4283
Merge pull request from gsomlo/gls-fedpkg-fixes
Fixes for building Fedora distro RPMs of yosys
2020-12-02 22:19:52 +00:00
David Shah
c3eb346e1e
Merge pull request from YosysHQ/dave/nexus-carry-fix
nexus: More efficient CO mapping
2020-12-02 22:07:25 +00:00
whitequark
7067f0d788 cxxrtl: fix crashes caused by a floating or constant clock input.
E.g. in:

    module test;
        wire clk = 0;
        reg data;
        always @(posedge clk)
            data <= 0;
    endmodule
2020-12-02 21:43:25 +00:00
whitequark
2945e27020
Merge pull request from RobertBaruch/rtlil_format
Adds appendix on RTLIL text format
2020-12-02 19:50:51 +00:00
whitequark
aa0a15a42c cxxrtl: use CXXRTL_ASSERT for RTL contract violations instead of assert.
RTL contract violations and C++ contract violations are different:
the former depend on the netlist and will never violate memory safety
whereas the latter may. When loading a CXXRTL simulation into another
process, RTL contract violations should generally not crash it, while
C++ contract violations should.
2020-12-02 19:41:00 +00:00
David Shah
264e924abb nexus: More efficient CO mapping
Signed-off-by: David Shah <dave@ds0.me>
2020-12-02 17:08:39 +00:00
Miodrag Milanovic
1c4a18f66f Bump required Verific version 2020-12-02 15:18:04 +01:00
whitequark
5beab5bc17 cxxrtl: provide a way to perform unobtrusive power-on reset.
Although it is always possible to destroy and recreate the design to
simulate a power-on reset, this has two drawbacks:
  * Black boxes are also destroyed and recreated, which causes them
    to reacquire their resources, which might be costly and/or erase
    important state.
  * Pointers into the design are invalidated and have to be acquired
    again, which is costly and might be very inconvenient if they are
    captured elsewhere (especially through the C API).
2020-12-02 08:25:27 +00:00
Yosys Bot
d021f4b400 Bump version 2020-12-02 00:10:06 +00:00