| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When the register being merged into the EN signal happens to be a $sdff,
the current code creates a new $mux for every bit, even if they happen
to be identical (as is usually the case), preventing proper grouping
further down the flow. Fix this by adding a simple cache.
Fixes #2409.
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
|/ / |
|
| |
| |
| |
| |
| |
| |
| |
| | |
Previously, `$memwr` and `$meminit` cells were always preserved (along
with the memory itself). With this change, they are instead part of the
main cell mark-and-sweep pass: a memory (and its `$meminit` and `$memwr`
cells) is only preserved iff any associated `$memrd` cell needs to be
preserved.
|
| | |
|
| | |
|
|\ \
| | |
| | | |
flatten, techmap: don't canonicalize tpl driven bits via sigmap
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
For connection `assign a = b;`, `sigmap(a)` returns `b`. This is
exactly the opposite of the desired canonicalization for driven bits.
Consider the following code:
module foo(inout a, b);
assign a = b;
endmodule
module bar(output c);
foo f(c, 1'b0);
endmodule
Before this commit, the inout ports would be swapped after flattening
(and cause a crash while attempting to drive a constant value).
This issue was introduced in 9f772eb9.
Fixes #2183.
|
|\ \ \
| | | |
| | | | |
Replace "ILANG" with "RTLIL" everywhere
|
| |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The only difference between "RTLIL" and "ILANG" is that the latter is
the text representation of the former, as opposed to the in-memory
graph representation. This distinction serves no purpose but confuses
people: it is not obvious that the ILANG backend writes RTLIL graphs.
Passes `write_ilang` and `read_ilang` are provided as aliases to
`write_rtlil` and `read_rtlil` for compatibility.
|
|/ /
| |
| |
| |
| |
| |
| |
| | |
When an adffe is being legalized, and is not natively supported,
prioritize unmapping to adff over converting to dffsre if dffsre is not
natively supported itself.
Fixes #2361.
|
| |
| |
| |
| | |
running proc -nomux will ommit the proc_mux pass
|
|\ \
| | |
| | | |
opt_share: Refactor, fix some bugs.
|
| | |
| | |
| | |
| | |
| | |
| | | |
Fixes #2334.
Fixes #2335.
Fixes #2336.
|
|\ \ \
| | | |
| | | | |
opt_clean: Fix module keep rules.
|
| |/ /
| | |
| | |
| | |
| | |
| | | |
- wires with keep attribute now force a module to be kept
- presence of $memwr and $meminit cells no longer forces a module to be
kept
|
|\ \ \
| | | |
| | | | |
peeopt.shiftmul: Add a signedness check.
|
| | | |
| | | |
| | | |
| | | | |
Fixes #2332.
|
|\ \ \ \
| | | | |
| | | | | |
Remove passes redundant with opt_dff
|
| | | | | |
|
| | | | | |
|
| | | | | |
|
| | |/ /
| |/| | |
|
|\ \ \ \
| | | | |
| | | | | |
techmap.CONSTMAP: Handle outputs before inputs.
|
| | |/ /
| |/| |
| | | |
| | | | |
Fixes #2321.
|
|\ \ \ \
| | | | |
| | | | | |
peepopt.muldiv: Add a signedness check.
|
| |/ / /
| | | |
| | | |
| | | | |
Fixes #2318.
|
|\ \ \ \
| | | | |
| | | | | |
techmap: Add support for [] wildcards in techmap_celltype.
|
| |/ / /
| | | |
| | | |
| | | | |
Fixes #1826.
|
| |/ /
|/| |
| | |
| | |
| | | |
It has no effect on the output ($shiftx doesn't perform any sign
extension whatsoever), so an attempt to use it should be caught early.
|
|/ / |
|
| |
| |
| |
| |
| | |
To be used with backends that cannot deal with fancy FF types (like blif
or smt).
|
| |
| |
| |
| |
| | |
Adds -noclkinv option just in case the old behavior was actually useful
to someone.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The main part is converting ice40_dsp to recognize the new FF types
created in opt_dff instead of trying to recognize the mux patterns on
its own.
The fsm call has been moved upwards because the passes cannot deal with
$dffe/$sdff*, and other optimizations don't help it much anyway.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The main part is converting xilinx_dsp to recognize the new FF types
created in opt_dff instead of trying to recognize the patterns on its
own.
The fsm call has been moved upwards because the passes cannot deal with
$dffe/$sdff*, and other optimizations don't help it much anyway.
|
| | |
|
| | |
|
| |
| |
| |
| | |
Fixes #2311.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Before this fix, equiv_induct only assumed that one of the following is
true:
- defined value of A is equal to defined value of B
- A is undefined
This lets through valuations where A is defined, B is undefined, and
the defined (meaningless) value of B happens to match the defined value
of A. Instead, tighten this up to OR of the following:
- defined value of A is equal to defined value of B, and B is not
undefined
- A is undefined
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|