cxxrtl: don't overwrite buffered inputs.
authorwhitequark <whitequark@whitequark.org>
Fri, 11 Dec 2020 23:30:32 +0000 (23:30 +0000)
committerwhitequark <whitequark@whitequark.org>
Fri, 11 Dec 2020 23:32:06 +0000 (23:32 +0000)
commite4aa8bc96b1650ef17d70a0ba7cd88b21b7e38dc
treeb209e2e462f3fa72fbd9533c706a4afeed098680
parentec410c9b1934c5c06ad6f71e60f2337fabe5b055
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.
backends/cxxrtl/cxxrtl.h
backends/cxxrtl/cxxrtl_backend.cc