| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | | |
|
| | | |
|
|/ /
| |
| |
| |
| | |
The only difference in behavior is that this removes the attribute
when the pool becomes empty.
|
|\ \
| | |
| | | |
flatten: make hygienic
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Before this commit, `flatten` matched the template objects with
the newly created objects solely by their name. Because of this,
it could be confused by code such as:
module bar();
$dff a();
endmodule
module foo();
bar b();
$dff \b.a ();
endmodule
After this commit, `flatten` avoids every possible case of name
collision.
Fixes #2106.
|
|\ \
| | |
| | | |
cxxrtl: improve design visibility
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This commit changes the VCD writer such that for all signals that
have `debug_item.type == VALUE && debug_item.next == nullptr`, it
would only sample the value once.
Commit f2d7a187 added more debug information by including constant
wires, and decreased the performance of VCD writer proportionally
because the constant wires were still repeatedly sampled; this commit
eliminates the performance hit.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Constant wires can represent a significant chunk of the design in
generic designs or after optimization. Emitting them in VCD files
significantly improves usability because gtkwave removes all traces
that are not present in the VCD file after reload, and iterative
development suffers if switching a varying signal to a constant
disrupts the workflow.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This commit changes the VCD writer such that for all signals that
share `debug_item.curr`, it would only emit a single VCD identifier,
and sample the value once.
Commit 9b39c6f7 added redundancy to debug information by including
alias wires, and increased the size of VCD files proportionally; this
commit eliminates the redundancy from VCD files so that their size
is the same as before.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Alias wires can represent a significant chunk of the design in highly
hierarchical designs; in Minerva SRAM, there are 273 member wires and
527 alias wires. Showing them in every hierarchy level significantly
improves usability.
|
| | | |
|
| | | |
|
| | | |
|
|\ \ \
| | | |
| | | | |
Silence warning in select.cc and pass some more args by ref
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Before this patch, the code passed around std::string objects by
value. It's probably not a hot-spot, but it can't hurt to avoid the
copying.
Removing the copy and clean-up code means the resulting code is ~6.1kb
smaller when compiled with GCC 9.3 and standard settings.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
- Pass a string argument by reference
- Avoid multiple calls to IdString::str and IdString::c_str
- Avoid combining checks for size > 0 and first char (C strings are
null terminated, so foo[0] != '\0' implies that foo has positive
length)
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
With GCC 9.3, at least, compiling select.cc spits out a warning about
an implausible bound being passed to strncmp. This comes from inlining
IdString::compare(): it turns out that passing std::string::npos as a
bound to strncmp triggers it.
This patch replaces the compare call with a memcmp with the same
effect. The repeated calls to IdString::c_str are slightly
inefficient, but I'll address that in a follow-up commit.
|
|\ \ \ \
| | | | |
| | | | | |
Simplify a modport check in hierarchy.cc
|
| |/ / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This code originally comes from commit 458a940. When an interface is
used via a modport, code in genrtlil.cc sets '\\interface_type' and
'\\interface_modport' properties on the wire.
In hierarchy.cc, we pick up the modport name and add it to a dict
called modports_used_in_submodule (that maps connection source to
modport name).
Before this patch, the modport name is retrieved as a strpool and then
iterated over in an arbitrary order, discarding all entries but the
last. In practice, the pool will always have 0 or 1 entries because
the string used to construct it is a valid identifier, so doesn't
contain any pipe symbols.
This patch changes the code to retrieve the modport name as just a
string. This will have the same effect in practice, but may be a bit
less confusing!
The code also gets moved down closer to where the result is used,
which might be a bit more efficient since we won't always get as far
as the check.
The patch also removes some commented-out code, which I think was
intended to add some typechecking at some point, but was never
implemented. Since this dates back to October 2018, I think it makes
more sense to just take it out.
|
|\ \ \ \
| | | | |
| | | | | |
Split `flatten` from `techmap` and simplify it
|
| | | | | |
|
| | | | | |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
`flatten` cannot derive modules in most cases because that would just
yield processes, and it does not support `-autoproc`; in practice
`flatten` has to be preceded by a call to `hierarchy`, which makes
deriving unnecessary.
|
| | | | |
| | | | |
| | | | |
| | | | | |
Remove redundant sigmaps.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Flattening does not benefit from topologically sorting cells within
a module when processing them.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Flatten is non-recursive and doesn't need to keep track of handled
cells.
|
| | | | |
| | | | |
| | | | |
| | | | | |
Flattening always does "non-recursive" mapping.
|
| | | | |
| | | | |
| | | | |
| | | | | |
The `celltypeMap` always maps `x` to `{x}`.
|
| | | | |
| | | | |
| | | | |
| | | | | |
The `design` and `map` designs are always the same when flattening.
|
| | | | | |
|
| | | | | |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
After splitting the passes, some options can never be activated,
and most conditions involving them become dead. Remove them, and also
all of the newly dead code.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Although the two passes started out very similar, they diverged over
time and now have little in common. Moreover, `techmap` is extremely
complex while `flatten` does not have to be, and this complexity
interferes with improving `flatten`.
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Support packed arrays in struct/union.
|
| | | | | | |
|
|\ \ \ \ \ \
| |_|_|_|/ /
|/| | | | | |
fsm_extract: avoid calling log_signal to determine wire name
|
|/ / / / /
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
log_signal can result in a string with spaces (when bit selection is
involved), which breaks the rule of IdString not containing whitespace.
Instead, remove the sigspec from the name entirely — given that the
resulting wire will have no users, it will be removed later anyway,
so its name doesn't really matter.
Fixes #2118
|
|\ \ \ \ \
| |/ / / /
|/| | | | |
cxxrtl: add a VCD writer using debug information
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
To avoid confusion with the C++ source files that are a part of
the simulation itself and not a part of Yosys build.
|
| | | | |
| | | | |
| | | | |
| | | | | |
This C API is fully featured.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
On a representative design (Minerva SoC) this reduces VCD file size
by ~20× and runtime by ~3×.
|
|/ / / / |
|
|\ \ \ \
| | | | |
| | | | | |
cxxrtl: add debug information to the C++ API, and add introspection via a new C API
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Compared to the C++ API, the C API currently has two limitations:
1. Memories cannot be updated in a race-free way.
2. Black boxes cannot be implemented in C.
|
|/ / / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Debug information describes values, wires, and memories with a simple
C-compatible layout. It can be emitted on demand into a map, which
has no runtime cost when it is unused, and allows late bound designs.
The `hdlname` attribute is used as the lookup key such that original
names, as emitted by the frontend, can be used for debugging and
introspection.
|
|\ \ \ \
| | | | |
| | | | | |
MacOS has even stricter stack limits in catalina.
|
| | | | | |
|
| | | | |
| | | | |
| | | | | |
Invoking sby in macOS Catalina fails because of bizarre stack limits in Catalina.
|
|\ \ \ \ \
| | | | | |
| | | | | | |
cxxrtl: fix implementation of $sshr cell
|
| | |/ / /
| |/| | |
| | | | |
| | | | | |
Fixes #2111.
|