| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|\
| |
| | |
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.
|
| | |
|
| |
| |
| |
| | |
Fixes #1092.
|
| |
| |
| |
| | |
Fixes #1693.
|
|\ \
| | |
| | | |
Fix handling of ternary with constant condition
|
| | | |
|
| | |
| | |
| | |
| | | |
Signed-off-by: Claire Wolf <claire@symbioticeda.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
By operating at a layer of abstraction over the rather clumsy Intel primitives,
we can avoid special hacks like `dffinit -highlow` in favour of simple techmapping.
This also makes the primitives much easier to manipulate, and more descriptive
(no more cyclonev_lcell_comb to mean anything from a LUT2 to a LUT6).
|
| | | |
|
|\ \ \
| | | |
| | | | |
cxxrtl: Fix handling of unclocked memory read ports
|
| |/ /
| | |
| | |
| | | |
Signed-off-by: David Shah <dave@ds0.me>
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Detect the places in the $alu where the carry bit is constant (due to
const A[i] == B[i] ^ BI) and split it into smaller $alu at these points.
Also, make the existing const-carry detection for low bits more generic
(now handles cases where both BI and CI are constant, but not equal to
one another).
Fixes #1912.
|
| |
| |
| |
| | |
Fixes #1704.
|
| | |
|
| | |
|
|\ \
| | |
| | | |
write_cxxrtl: ignore disconnected module ports
|
| |/
| |
| |
| |
| |
| | |
E.g. port `q` in `submod x(.p(p), .q());`.
Fixes #1920.
|
|\ \
| | |
| | | |
write_cxxrtl: enable separate compilation
|
| | | |
|
| |/
| |
| |
| |
| |
| | |
This commit makes it possible to use several cxxrtl-generated files
in one application, as well as compiling cxxrtl-generated code as
a separate compilation unit.
|
|\ \
| | |
| | | |
xaiger: add check for $__ABC9_DELAY model
|
| | | |
|
|\ \ \
| | | |
| | | | |
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
|
| |/ / |
|
|\ \ \
| |_|/
|/| | |
zinit: fixes for $_DFF_[NP][NP][01]_and $adff cells with init = 1'b1
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
|/ / |
|
| |
| |
| |
| | |
Fixes #1500.
|
|\ \
| | |
| | | |
Clean up pseudo-private member usage in `frontends/ilang/ilang_parser.y`.
|
| | | |
|
| | | |
|
|\ \ \
| | | |
| | | | |
verilog: Fix write to deleted object
|
|/ / /
| | |
| | |
| | | |
Signed-off-by: David Shah <dave@ds0.me>
|
|\ \ \
| | | |
| | | | |
ice40/ecp5: add support for both 1364.1 and Synplify/LSE RAM/ROM attributes
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Before this commit, memory_map (which is always a part of a synth
script) would always pick up any $mem cell that was not processed
by a preceding pass and lower it down to $dff/$mux cells.
This is undesirable for two reasons:
* If there is an explicit inference attribute set on a $mem cell,
e.g. (* ram_block *), then it is arguably incorrect to map such
a memory to $dff/$mux cells.
* If memory_map tries to lower a memory that was intended to
be mapped to a large BRAM, it often takes extraordinarily long
time to finish, produces an extremely large log file, and outputs
an unusable design.
After this commit, properly invoked memory_map will not map any
memory that has an explicit inference attribute specified, solving
the first issue, and alleviating the second. The default behavior
is not changed.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This commit tries to carefully follow the documented behavior of LSE
and Synplify. It will use `syn_ramstyle` attribute if there are any
write ports, and `syn_romstyle` attribute otherwise.
* LSE supports both `syn_ramstyle` and `syn_romstyle`.
* Synplify only supports `syn_ramstyle`, with same values as LSE.
* Synplify also supports `syn_rw_conflict_logic`, which is not
documented as supported for LSE.
Limitations of the Yosys implementation:
* LSE/Synplify support `syn_ramstyle="block_ram,no_rw_check"`
syntax to turn off insertion of transparency logic. There is
currently no way to support multiple valued attributes in
memory_bram. It is also not clear if that is a good idea, since
it can cause sim/synth mismatches.
* LSE/Synplify/1364.1 support block ROM inference from full case
statements. Yosys does not currently perform this transformation.
* LSE/Synplify propagate `syn_ramstyle`/`syn_romstyle` attributes
from the module to the inner memories. There is currently no way
to do this in Yosys (attrmvcp only works on cells and wires).
|
| | | |
| | | |
| | | |
| | | | |
LSE/Synplify use case insensitive matching.
|
| | | |
| | | |
| | | |
| | | |
| | | | |
Some vendor toolchains use case insensitive matching for values of
attributes that control BRAM inference.
|