| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|/
|
|
| |
Signed-off-by: David Shah <dave@ds0.me>
|
|\
| |
| | |
ast/simplify: improve enum handling
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Before this commit, enum values were serialized as attributes of form
\enum_<width>_<value>
where <value> was a decimal signed integer.
This has multiple drawbacks:
* Enums with large values would be hard to process for downstream
tooling that cannot parse arbitrary precision decimals. (In fact
Yosys also did not correctly process enums with large values,
and would overflow `int`.)
* Enum value attributes were not confined to their own namespace,
making it harder for downstream tooling to enumerate all such
attributes, as opposed to looking up any specific value.
* Enum values could not include x or z, which are explicitly
permitted in the SystemVerilog standard.
After this commit, enum values are serialized as attributes of form
\enum_value_<value>
where <value> is a bit sequence of the appropriate width.
|
| |
| |
| |
| | |
Signed-off-by: Claire Wolf <claire@symbioticeda.com>
|
|\ \
| | |
| | | |
support using previously declared types/localparams/parameters in package
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
(parameters in systemverilog packages can't actually be overridden, so
allowing parameters in addition to localparams doesn't actually add any
new functionality, but it's useful to be able to use the parameter
keyword also)
|
|\ \ \
| |_|/
|/| | |
duplicated enum item names should result in an error
|
| |/ |
|
|\ \
| | |
| | | |
Clean up pseudo-private member usage in `frontends/ilang/ilang_parser.y`.
|
| | | |
|
|/ /
| |
| |
| | |
Signed-off-by: David Shah <dave@ds0.me>
|
|\ \
| | |
| | | |
Improve handling of integer literals in RTLIL frontend
|
| | |
| | |
| | | |
Co-Authored-By: Alberto Gonzalez <61295559+boqwxp@users.noreply.github.com>
|
| | |
| | |
| | |
| | | |
Fixes #1838.
|
| |/ |
|
|/ |
|
|\
| |
| | |
ast: cap dynamic range select to size of signal, suppresses warnings
|
| | |
|
|\ \
| | |
| | | |
IdString: use more ID::*, make them easier to use, speed up IdString::in()
|
| | | |
|
| | | |
|
|\ \ \
| |/ /
|/| | |
Adding error message for when size (width) of number literal is zero
|
| | | |
|
| | | |
|
|\ \ \
| | | |
| | | | |
kernel: speedup by using more pass-by-const-ref
|
| | | | |
|
|\ \ \ \
| | | | |
| | | | | |
verilog: Add location info for generate constructs
|
| | | | |
| | | | |
| | | | |
| | | | | |
Signed-off-by: David Shah <dave@ds0.me>
|
|\ \ \ \ \
| |_|_|/ /
|/| | | /
| | |_|/
| |/| | |
ast: simplify to fully populate dynamic slicing case transformation
|
| | |/
| |/| |
|
|\ \ \
| |_|/
|/| | |
Clean up pseudo-private member usage in `frontends/ast/ast.cc`.
|
| | |
| | |
| | |
| | |
| | |
| | | |
superfluous call to `fixup_ports()`.
Co-Authored-By: Eddie Hung <eddie@fpgeh.com>
|
| | | |
|
| | | |
|
|\ \ \
| | | |
| | | | |
Support module/package/interface/block scope for typedef names.
|
| | | | |
|
| | | | |
|
| | | | |
|
|\ \ \ \
| | | | |
| | | | | |
Add support for SystemVerilog-style `define to Verilog frontend
|
| |/ / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This patch should support things like
`define foo(a, b = 3, c) a+b+c
`foo(1, ,2)
which will evaluate to 1+3+2. It also spots mistakes like
`foo(1)
(the 3rd argument doesn't have a default value, so a call site is
required to set it).
Most of the patch is a simple parser for the format in preproc.cc, but
I've also taken the opportunity to wrap up the "name -> definition"
map in a type, rather than use multiple std::map's.
Since this type needs to be visible to code that touches defines, I've
pulled it (and the frontend_verilog_preproc declaration) out into a
new file at frontends/verilog/preproc.h and included that where
necessary.
Finally, the patch adds a few tests in tests/various to check that we
are parsing everything correctly.
|
|\ \ \ \
| |/ / /
|/| | | |
ast: avoid intermediate wires/assigns when lowering to AST_MEMINIT
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Before this commit, every initial assignment to a memory generated
two wires and four assigns in a process. For unknown reasons (I did
not investigate), large amounts of assigns cause quadratic slowdown
later in the AST frontend, in processAst/removeSignalFromCaseTree.
As a consequence, common and reasonable Verilog code, such as:
reg [`WIDTH:0] mem [0:`DEPTH];
integer i; initial for (i = 0; i <= `DEPTH; i++) mem[i] = 0;
took extremely long time to be processed; around 80 s for a 8-wide,
8192-deep memory.
After this commit, initial assignments where address and/or data are
constant (after `generate`) do not incur the cost of intermediate
wires; expressions like `mem[i+1]=i^(i<<1)` are considered constant.
This results in speedups of orders of magnitude for common memory
sizes; it now takes merely 0.4 s to process a 8-wide, 8192-deep
memory, and only 5.8 s to process a 8-wide, 131072-deep one.
As a bonus, this change also results in nontrivial speedups later
in the synthesis pipeline, since pass sequencing issues meant that
all of these intermediate wires were subject to transformations such
as width reduction, even though they existed solely to be constant
folded away in `memory_collect`.
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
|\ \ \ \
| | | | |
| | | | | |
Fix NDEBUG warnings
|
| | | | | |
|
|\ \ \ \ \
| |/ / / /
|/| | | | |
Add dependency to verilog_lexer.cc
|
| | |/ /
| |/| | |
|