| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | | |
| | | |
| | | |
| | | | |
and CVC4.
|
|\ \ \ \
| | | | |
| | | | | |
Fix modulo/remainder semantics
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
The $div and $mod cells use truncating division semantics (rounding
towards 0), as defined by e.g. Verilog. Another rounding mode, flooring
(rounding towards negative infinity), can be used in e.g. VHDL. The
new $divfloor cell provides this flooring division.
This commit also fixes the handling of $div in opt_expr, which was
previously optimized as if it was $divfloor.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
The $div and $mod cells use truncating division semantics (rounding
towards 0), as defined by e.g. Verilog. Another rounding mode, flooring
(rounding towards negative infinity), can be used in e.g. VHDL. The
new $modfloor cell provides this flooring modulo (also known as "remainder"
in several languages, but this name is ambiguous).
This commit also fixes the handling of $mod in opt_expr, which was
previously optimized as if it was $modfloor.
|
|\ \ \ \ \
| |/ / / /
|/| / / /
| |/ / / |
qbfsat: Add `-solver` option and allow choice of Z3 or Yices, making Yices the default.
|
| | | | |
|
| |/ /
| | |
| | |
| | |
| | |
| | | |
the default.
Ensures that "BV" is the logic whenever solving an exists-forall problem with Yices, moves the "(set-logic ...)" directive above any non-info line, sets the `ef-max-iters` parameter to a very high number when using Yices in exists-forall mode so as not to prematurely abandon difficult problems, and does not provide the incompatible "--incremental" Yices argument when in exists-forall mode.
|
|\ \ \
| | | |
| | | | |
Add extmodule support to firrtl backend
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The current firrtl backend emits blackboxes as standard modules
with an empty body, but this causes the firrtl compiler to
optimize out entire circuits due to the absence of any drivers.
Yosys already tags blackboxes with a (*blackbox*) attribute, so this
commit just propagates this change to firrtl's syntax for blackboxes.
|
|\ \ \ \
| | | | |
| | | | | |
firrtl: Accept techmapped cell types in FIRRTL backend.
|
| | | | | |
|
| | | | | |
|
| |_|/ /
|/| | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This isn't actually necessary anymore after scheduling was improved,
and `clean -purge` disrupts the mapping between wires in the input
RTLIL netlist and the output CXXRTL code.
|
|\ \ \ \
| | | | |
| | | | | |
smtbmc: Fix return status handling.
|
| | | | |
| | | | |
| | | | |
| | | | | |
Co-Authored-By: N. Engelhardt <nak@symbioticeda.com>
|
| |/ / / |
|
| | | |
| | | |
| | | |
| | | | |
instead of moving them to $__ prefix
|
| | | |
| | | |
| | | |
| | | | |
replacing _all_ (* abc9_box *) instantiations with their derived types
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | | |
This reverts commit 759283fa65b1195ebe3a5bc6890ec622febca0eb, reversing
changes made to f41c7ccfff4bf104c646ca4b85e079a0f91c9151.
|
| | | |
| | | |
| | | |
| | | | |
redundant for normal design, but necessary for holes
|
| | | | |
|
| | | |
| | | |
| | | |
| | | | |
Since abc9 doesn't like negative mergeability values
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
|/ / / |
|
| | |
| | |
| | |
| | |
| | |
| | | |
log_assert(false) never returns and thus can't fall through, but gcc
doesn't seem to think that far. Making it the last case avoids the
problem entirely.
|
|/ /
| |
| |
| |
| | |
C++17 introduced [[fallthrough]], GCC and clang had their own vendored
attributes before that. MSVC doesn't seem to have such a warning at all.
|
| | |
|
| |
| |
| |
| | |
Signed-off-by: David Shah <dave@ds0.me>
|
| |
| |
| |
| |
| | |
The former prefix does not need to be escaped in Verilog, unlike
the latter, and the Yosys convention is to use the former.
|
| | |
|
|/
|
|
| |
These have a `$paramod$` prefix, not `$paramod\\`.
|
|
|
|
|
|
|
| |
Strategically inserting the pending memory write in memory::update to keep the
queue sorted allows us to skip the queue sort in memory::commit.
The Minerva SRAM SoC runs ~7% faster as a result.
|
|\
| |
| | |
cxxrtl: Gas gas gas! I'm gonna step on the gas! Tonight I'll fly!
|
| |
| |
| |
| | |
As a result, Minerva SRAM SoC runs ~15% faster.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This is quite possibly the worst way to implement this, but it does
work for a subset of well-behaved designs, and can be used to measure
how much performance is lost simulating the inactive edge of a clock.
It should be replaced with a clock tree analyzer generating safe
code once it is clear how should such a thing look like.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
If the annotations are not used, this commit does not alter semantics
at all, other than removing elision of outputs of black box cells.
(Elision of such outputs is expected to be too rare to have any
noticeable benefit, and the implementation was somewhat of a hack.)
The (* cxxrtl.comb *) annotation alters the semantics of the output
of the black box it is applied to such that, if the black box
converges immediately, no additional delta cycle is necessary to
propagate the computed combinatorial value upwards in hierarchy.
The (* cxxrtl.sync *) annotation alters the semantics of the output
of the black box it is applied to such as to remove any uses of
the black box by the wires connected to this output, and break false
feedback arcs arising from conservative modeling of dependencies of
the black box.
Although currently these attributes are only recognized on black
boxes, if separate compilation is added in the future, it could also
emit and consume them.
|
| |
| |
| |
| |
| |
| |
| | |
The attribute for this is called (* cxxrtl.edge *), and there is
a planned attribute (* cxxrtl.sync *) that would cause blackbox
cell outputs to be added to sync defs rather than comb defs.
Rename the edge detector related stuff to avoid confusion.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
If it is statically known that eval() will converge in one delta
cycle (that is, the second commit() will always return `false`)
because the design contains no feedback or buffered wires, then
there is no need to run the second delta cycle at all.
After this commit, the case where eval() always converges immediately
is detected and the second delta cycle is omitted. As a result,
Minerva SRAM SoC runs ~25% faster.
|
| |
| |
| |
| |
| |
| |
| | |
People judge a compiler backend by the first impression, and
the metric they judge it for is speed. -O6 does severely impact
debuggability, but it provides equally massive gains in performance,
so use it by default.
|
| |
| |
| |
| |
| |
| |
| |
| | |
Module input wires are never set by the module, so it is unnecessary
to buffer them. Although important for all inputs, this is especially
critical for clocks, since after this commit, hierarchy levels no
longer add delta cycles. As a result, Minerva SRAM SoC runs ~73%
faster when flattened, and ~264% (!!) faster when hierarchical.
|