Eddie Hung [Thu, 9 Sep 2021 17:06:31 +0000 (10:06 -0700)]
abc9: make re-entrant (#2993)
* Add testcase
* Cleanup some state at end of abc9
* Re-assign abc9_box_id from scratch
* Suppress delete unless prep_bypass did something
Eddie Hung [Thu, 9 Sep 2021 17:06:20 +0000 (10:06 -0700)]
abc9: holes module to instantiate cells with NEW_ID (#2992)
* Add testcase
* holes module to instantiate cells with NEW_ID
Eddie Hung [Thu, 9 Sep 2021 17:05:55 +0000 (10:05 -0700)]
abc9: replace cell type/parameters if derived type already processed (#2991)
* Add close bracket
* Add testcase
* Replace cell type/param if in unmap_design
* Improve abc9_box error message too
* Update comment as per review
github-actions[bot] [Fri, 3 Sep 2021 00:50:30 +0000 (00:50 +0000)]
Bump version
Miodrag Milanovic [Thu, 2 Sep 2021 12:59:16 +0000 (14:59 +0200)]
update required verific version
github-actions[bot] [Wed, 1 Sep 2021 00:55:51 +0000 (00:55 +0000)]
Bump version
Zachary Snow [Tue, 31 Aug 2021 17:45:02 +0000 (11:45 -0600)]
sv: support declaration in generate for initialization
This is accomplished by generating a unique name for the genvar,
renaming references to the genvar only in the loop's initialization,
guard, and incrementation, and finally adding a localparam inside the
loop body with the original name so that the genvar can be shadowed as
expected.
github-actions[bot] [Tue, 31 Aug 2021 00:51:55 +0000 (00:51 +0000)]
Bump version
Zachary Snow [Mon, 30 Aug 2021 17:35:36 +0000 (11:35 -0600)]
sv: support declaration in procedural for initialization
In line with other tools, this adds an extra wrapping block around such
for loops to appropriately scope the variable.
github-actions[bot] [Mon, 30 Aug 2021 00:49:03 +0000 (00:49 +0000)]
Bump version
kittennbfive [Sun, 29 Aug 2021 09:45:23 +0000 (09:45 +0000)]
[ECP5] fix wrong link for syn_* attributes description (#2984)
github-actions[bot] [Mon, 23 Aug 2021 00:46:01 +0000 (00:46 +0000)]
Bump version
ECP5-PCIe [Sun, 22 Aug 2021 16:08:04 +0000 (18:08 +0200)]
Add DLLDELD
Marcelina Kościelnicka [Sun, 22 Aug 2021 15:01:58 +0000 (17:01 +0200)]
opt_merge: Remove and reinsert init when connecting nets.
Mutating the SigMap by adding a new connection will throw off FfInitVals
index. Work around this by removing the relevant init values from index
whenever we connect nets, then re-add the new init value.
Should fix #2920.
Marcelina Kościelnicka [Sat, 21 Aug 2021 21:36:00 +0000 (23:36 +0200)]
opt_clean: Make the init attribute follow the FF's Q.
Previously, opt_clean would reconnect all ports (including FF Q ports)
to a "canonical" SigBit chosen by complex rules, but would leave the
init attribute on the old wire. This change applies the same
canonicalization rules to the init attributes, ensuring that init moves
to wherever the Q port moved.
Part of another jab at #2920.
github-actions[bot] [Sat, 21 Aug 2021 00:48:23 +0000 (00:48 +0000)]
Bump version
Pepijn de Vos [Fri, 20 Aug 2021 19:21:06 +0000 (21:21 +0200)]
Gowin: deal with active-low tristate (#2971)
* deal with active-low tristate
* remove empty port
* update sim models
* add expected lut1 to tests
Miodrag Milanović [Fri, 20 Aug 2021 14:09:55 +0000 (16:09 +0200)]
Merge pull request #2973 from YosysHQ/micko/optional_extensions
Make Verific extensions optional
Miodrag Milanovic [Fri, 20 Aug 2021 08:19:04 +0000 (10:19 +0200)]
Make Verific extensions optional
github-actions[bot] [Wed, 18 Aug 2021 00:51:20 +0000 (00:51 +0000)]
Bump version
Sylvain Munaut [Tue, 17 Aug 2021 08:21:04 +0000 (10:21 +0200)]
ice40: Fix typo in SB_CARRY specify for LP/UltraPlus
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
github-actions[bot] [Tue, 17 Aug 2021 00:49:33 +0000 (00:49 +0000)]
Bump version
Marcelina Kościelnicka [Mon, 16 Aug 2021 10:31:01 +0000 (12:31 +0200)]
kernel/mem: Remove old parameter when upgrading $mem to $mem_v2.
Fixes #2967.
github-actions[bot] [Sun, 15 Aug 2021 00:50:04 +0000 (00:50 +0000)]
Bump version
Marcelina Kościelnicka [Sat, 14 Aug 2021 12:23:12 +0000 (14:23 +0200)]
proc_prune: Make assign removal and promotion per-bit, remember promoted bits.
Fixes #2962.
github-actions[bot] [Sat, 14 Aug 2021 00:46:42 +0000 (00:46 +0000)]
Bump version
Rupert Swarbrick [Mon, 20 Apr 2020 15:06:53 +0000 (16:06 +0100)]
Generate an RTLIL representation of bind constructs
This code now takes the AST nodes of type AST_BIND and generates a
representation in the RTLIL for them.
This is a little tricky, because a binding of the form:
bind baz foo_t foo_i (.arg (1 + bar));
means "make an instance of foo_t called foo_i, instantiate it inside
baz and connect the port arg to the result of the expression 1+bar".
Of course, 1+bar needs a cell for the addition. Where should that cell
live?
With this patch, the Binding structure that represents the construct
is itself an AST::AstModule module. This lets us put the adder cell
inside it. We'll pull the contents out and plonk them into 'baz' when
we actually do the binding operation as part of the hierarchy pass.
Of course, we don't want RTLIL::Binding to contain an
AST::AstModule (since kernel code shouldn't depend on a frontend), so
we define RTLIL::Binding as an abstract base class and put the
AST-specific code into an AST::Binding subclass. This is analogous to
the AST::AstModule class.
Marcelina Kościelnicka [Thu, 12 Aug 2021 22:43:15 +0000 (00:43 +0200)]
Add opt_mem_widen pass.
If all of us are wide, then none of us are!
Marcelina Kościelnicka [Sat, 29 May 2021 15:45:05 +0000 (17:45 +0200)]
memory_share: Add -nosat and -nowiden options.
This unlocks wide port recognition by default.
Marcelina Kościelnicka [Tue, 10 Aug 2021 17:42:10 +0000 (19:42 +0200)]
memory_dff: Recognize soft transparency logic.
Marcelina Kościelnicka [Thu, 12 Aug 2021 01:31:56 +0000 (03:31 +0200)]
Add new opt_mem_priority pass.
Miodrag Milanović [Fri, 13 Aug 2021 09:45:20 +0000 (11:45 +0200)]
Merge pull request #2932 from YosysHQ/mwk/logger-check-expected
logger: Add -check-expected subcommand.
Brett Witherspoon [Tue, 22 Jun 2021 14:51:41 +0000 (09:51 -0500)]
sv: improve support for wire and var with user-defined types
- User-defined types must be data types. Using a net type (e.g. wire) is
a syntax error.
- User-defined types without a net type are always variables (i.e.
logic).
- Nets and variables can now be explicitly declared using user-defined
types:
typedef logic [1:0] W;
wire W w;
typedef logic [1:0] V;
var V v;
Fixes #2846
github-actions[bot] [Fri, 13 Aug 2021 00:50:48 +0000 (00:50 +0000)]
Bump version
Marcelina Kościelnicka [Thu, 12 Aug 2021 21:06:51 +0000 (23:06 +0200)]
memory_share: Pass addresses through sigmap_xmux everywhere.
This fixes wide port recognition in some cases.
Marcelina Kościelnicka [Thu, 12 Aug 2021 15:36:03 +0000 (17:36 +0200)]
logger: Add -check-expected subcommand.
This allows us to have multiple "expect this warning" calls in a single
long script, covering only as many passes as necessary.
github-actions[bot] [Thu, 12 Aug 2021 00:49:51 +0000 (00:49 +0000)]
Bump version
Marcelina Kościelnicka [Wed, 11 Aug 2021 12:14:45 +0000 (14:14 +0200)]
test/arch/{ecp5,ice40}/memories.ys: Use read_verilog -defer.
These parts keep rereading a Verilog module, then using chparam
to test it with various parameter combinations. Since the default
parameters are on the large side, this spends a lot of time
needlessly elaborating the default parametrization that will then
be discarded. Fix it with -deref and manual hierarchy call.
Shaves 30s off the test time on my machine.
Marcelina Kościelnicka [Thu, 27 May 2021 19:08:11 +0000 (21:08 +0200)]
memory_dff: Recognize read ports with reset / initial value.
Marcelina Kościelnicka [Thu, 27 May 2021 18:55:09 +0000 (20:55 +0200)]
proc_memwr: Use the v2 memwr cell.
Marcelina Kościelnicka [Thu, 27 May 2021 18:54:29 +0000 (20:54 +0200)]
Add v2 memory cells.
github-actions[bot] [Wed, 11 Aug 2021 00:52:20 +0000 (00:52 +0000)]
Bump version
Marcelina Kościelnicka [Sat, 31 Jul 2021 21:21:37 +0000 (23:21 +0200)]
kernel/mem: Introduce transparency masks.
Michael Singer [Thu, 5 Aug 2021 19:02:35 +0000 (21:02 +0200)]
Allow optional comma after last entry in enum
github-actions[bot] [Tue, 10 Aug 2021 00:52:49 +0000 (00:52 +0000)]
Bump version
Marcelina Kościelnicka [Tue, 3 Aug 2021 22:02:16 +0000 (00:02 +0200)]
Refactor common parts of SAT-using optimizations into a helper.
This also aligns the functionality:
- in all cases, the onehot attribute is used to create appropriate
constraints (previously, opt_dff didn't do it at all, and share
created one-hot constraints based on $pmux presence alone, which
is unsound)
- in all cases, shift and mul/div/pow cells are now skipped when
importing the SAT problem (previously only memory_share did this)
— this avoids creating clauses for hard cells that are unlikely
to help with proving the UNSATness needed for optimization
github-actions[bot] [Sun, 8 Aug 2021 00:50:48 +0000 (00:50 +0000)]
Bump version
Marcelina Kościelnicka [Sat, 7 Aug 2021 22:33:31 +0000 (00:33 +0200)]
opt_merge: Use FfInitVals.
Partial #2920 fix.
github-actions[bot] [Sat, 7 Aug 2021 00:45:55 +0000 (00:45 +0000)]
Bump version
Marcelina Kościelnicka [Fri, 6 Aug 2021 18:49:41 +0000 (20:49 +0200)]
verilog: Support tri/triand/trior wire types.
These are, by the standard, just aliases for wire/wand/wor.
Fixes #2918.
github-actions[bot] [Thu, 5 Aug 2021 00:51:08 +0000 (00:51 +0000)]
Bump version
Marcelina Kościelnicka [Wed, 4 Aug 2021 01:33:41 +0000 (03:33 +0200)]
memory_share: Don't skip ports with EN wired to input for SAT sharing.
Fixes #2912.
github-actions[bot] [Wed, 4 Aug 2021 00:49:53 +0000 (00:49 +0000)]
Bump version
Marcelina Kościelnicka [Tue, 3 Aug 2021 12:28:10 +0000 (14:28 +0200)]
memory_bram: Move init data swizzling before other swizzling.
Fixes #2907.
github-actions[bot] [Tue, 3 Aug 2021 00:55:22 +0000 (00:55 +0000)]
Bump version
Miodrag Milanovic [Mon, 2 Aug 2021 08:29:16 +0000 (10:29 +0200)]
Require latest verific
github-actions[bot] [Mon, 2 Aug 2021 00:50:24 +0000 (00:50 +0000)]
Bump version
Marcelina Kościelnicka [Tue, 25 May 2021 21:42:58 +0000 (23:42 +0200)]
backend/verilog: Add alternate mode for transparent read port output.
This mode will be used whenever read port cannot be handled in the
"extract address register" way, ie. whenever it has enable, reset,
init functionality or (in the future) mixed transparency mask.
Marcelina Kościelnicka [Sat, 31 Jul 2021 23:29:49 +0000 (01:29 +0200)]
memory_bram: Some refactoring
This will make more sense when the new transparency masks land.
Fixes #2902.
github-actions[bot] [Sat, 31 Jul 2021 00:50:30 +0000 (00:50 +0000)]
Bump version
Miodrag Milanović [Fri, 30 Jul 2021 17:50:02 +0000 (19:50 +0200)]
Update version.yml
Maciej Dudek [Thu, 29 Jul 2021 19:10:02 +0000 (21:10 +0200)]
Fixes xc7 BRAM36s
UG473 from Xilinx states that 15 bit should always be set if RAMB isn't in cascade mode.
Signed-off-by: Maciej Dudek <mdudek@antmicro.com>
Zachary Snow [Wed, 28 Jul 2021 21:34:24 +0000 (17:34 -0400)]
proc_rmdead: use explicit pattern set when there are no wildcards
If width of a case expression was large, explicit patterns could cause
the existing logic to take an extremely long time, or exhaust the
maximum size of the underlying set. For cases where all of the patterns
are fully defined and there are no constants in the case expression,
this change uses a simple set to track which patterns have been seen.
Zachary Snow [Thu, 29 Jul 2021 16:35:22 +0000 (12:35 -0400)]
genrtlil: add width detection for AST_PREFIX nodes
github-actions[bot] [Fri, 30 Jul 2021 00:52:33 +0000 (00:52 +0000)]
Bump version
Marcelina Kościelnicka [Thu, 29 Jul 2021 14:55:15 +0000 (16:55 +0200)]
opt_lut: Allow more than one -dlogic per cell type.
Fixes #2061.
Zachary Snow [Thu, 15 Jul 2021 14:36:50 +0000 (10:36 -0400)]
verilog: save and restore overwritten macro arguments
github-actions[bot] [Thu, 29 Jul 2021 00:49:14 +0000 (00:49 +0000)]
Bump version
Marcelina Kościelnicka [Fri, 21 May 2021 00:27:06 +0000 (02:27 +0200)]
verilog: Emit $meminit_v2 cell.
Fixes #2447.
Marcelina Kościelnicka [Mon, 12 Jul 2021 18:43:09 +0000 (20:43 +0200)]
backends/verilog: Support meminit with mask.
Marcelina Kościelnicka [Fri, 21 May 2021 00:26:52 +0000 (02:26 +0200)]
memory: Introduce $meminit_v2 cell, with EN input.
github-actions[bot] [Wed, 28 Jul 2021 00:52:46 +0000 (00:52 +0000)]
Bump version
Marcelina Kościelnicka [Tue, 27 Jul 2021 13:43:36 +0000 (15:43 +0200)]
proc: Run opt_expr at the end
Marcelina Kościelnicka [Tue, 27 Jul 2021 13:24:48 +0000 (15:24 +0200)]
opt_expr: Propagate constants to port connections.
This adds one simple piece of functionality to opt_expr: when a cell
port is connected to a fully-constant signal (as determined by sigmap),
the port is reconnected directly to the constant value. This is just
enough optimization to fix the "non-constant $meminit input" problem
without requiring a full opt_clean or a separate pass.
github-actions[bot] [Tue, 27 Jul 2021 00:52:14 +0000 (00:52 +0000)]
Bump version
Miodrag Milanovic [Mon, 26 Jul 2021 09:25:32 +0000 (11:25 +0200)]
Add version bump workflow
Miodrag Milanovic [Wed, 21 Jul 2021 07:46:53 +0000 (09:46 +0200)]
Update to latest verific
Rupert Swarbrick [Mon, 19 Jul 2021 08:23:41 +0000 (09:23 +0100)]
Use new read_id_num helper function elsewhere in hierarchy.cc
Rupert Swarbrick [Wed, 27 May 2020 14:54:42 +0000 (15:54 +0100)]
Extract connection checking logic from expand_module in hierarchy.cc
No functional change, but pulls more logic out of the expand_module
function.
whitequark [Tue, 20 Jul 2021 13:12:11 +0000 (13:12 +0000)]
Merge pull request #2885 from whitequark/cxxrtl-fix-2883
cxxrtl: treat wires with multiple defs as not inlinable
whitequark [Tue, 20 Jul 2021 13:12:03 +0000 (13:12 +0000)]
Merge pull request #2884 from whitequark/cxxrtl-fix-2882
cxxrtl: treat assignable internal wires used only for debug as locals
whitequark [Tue, 20 Jul 2021 10:30:39 +0000 (10:30 +0000)]
cxxrtl: treat wires with multiple defs as not inlinable.
Fixes #2883.
whitequark [Tue, 20 Jul 2021 10:10:42 +0000 (10:10 +0000)]
cxxrtl: treat assignable internal wires used only for debug as locals.
This issue was introduced in commit
4aa65f40 while fixing #2739.
Fixes #2882.
whitequark [Tue, 20 Jul 2021 09:30:08 +0000 (09:30 +0000)]
Merge pull request #2881 from whitequark/cxxrtl-sideways-colon
cxxrtl: escape colon in variable names in VCD writer
whitequark [Mon, 19 Jul 2021 16:20:49 +0000 (16:20 +0000)]
cxxrtl: escape colon in variable names in VCD writer.
The following VCD file crashes GTKWave's VCD loader:
$var wire 1 ! x:1 $end
$enddefinitions $end
In practice, a colon can be a part of a variable name that is
translated from a Verilog function, something like:
update$func$.../hdl/hazard3_csr.v:350$2534.$result
whitequark [Sun, 18 Jul 2021 07:35:23 +0000 (07:35 +0000)]
Merge pull request #2880 from whitequark/cxxrtl-fix-2877
cxxrtl: add debug_item::{get,set}
whitequark [Sun, 18 Jul 2021 06:07:27 +0000 (06:07 +0000)]
cxxrtl: add debug_item::{get,set}.
Fixes #2877.
whitequark [Sat, 17 Jul 2021 17:22:15 +0000 (17:22 +0000)]
Merge pull request #2879 from whitequark/cxxrtl-fix-2739-again
cxxrtl: treat internal wires used only for debug as constants
whitequark [Sat, 17 Jul 2021 14:23:57 +0000 (14:23 +0000)]
cxxrtl: treat internal wires used only for debug as constants.
Fixes #2739 (again).
Rupert Swarbrick [Thu, 21 May 2020 16:36:29 +0000 (17:36 +0100)]
Add support for parsing the SystemVerilog 'bind' construct
This doesn't do anything useful yet: the patch just adds support for
the syntax to the lexer and parser and adds some tests to check the
syntax parses properly. This generates AST nodes, but doesn't yet
generate RTLIL.
Since our existing hierarchical_identifier parser doesn't allow bit
selects (so you can't do something like foo[1].bar[2].baz), I've also
not added support for a trailing bit select (the "constant_bit_select"
non-terminal in "bind_target_instance" in the spec). If we turn out to
need this in future, we'll want to augment hierarchical_identifier and
its other users too.
Note that you can't easily use the BNF from the spec:
bind_directive ::=
"bind" bind_target_scope [ : bind_target_instance_list]
bind_instantiation ;
| "bind" bind_target_instance bind_instantiation ;
even if you fix the lookahead problem, because code like this matches
both branches in the BNF:
bind a b b_i (.*);
The problem is that 'a' could either be a module name or a degenerate
hierarchical reference. This seems to be a genuine syntactic
ambiguity, which the spec resolves (p739) by saying that we have to
wait until resolution time (the hierarchy pass) and take whatever is
defined, treating 'a' as an instance name if it names both an instance
and a module.
To keep the parser simple, it currently accepts this invalid syntax:
bind a.b : c d e (.*);
This is invalid because we're in the first branch of the BNF above, so
the "a.b" term should match bind_target_scope: a module or interface
identifier, not an arbitrary hierarchical identifier.
This will fail in the hierarchy pass (when it's implemented in a
future patch).
whitequark [Fri, 16 Jul 2021 11:12:19 +0000 (11:12 +0000)]
Merge pull request #2874 from whitequark/cxxrtl-fix-2589
cxxrtl: run hierarchy pass regardless of (*top*) attribute presence
whitequark [Fri, 16 Jul 2021 11:01:10 +0000 (11:01 +0000)]
Merge pull request #2873 from whitequark/cxxrtl-fix-2500
cxxrtl: emit debug items for unused public wires
whitequark [Fri, 16 Jul 2021 10:34:30 +0000 (10:34 +0000)]
Merge pull request #2872 from whitequark/cxxrtl-fix-2521
cxxrtl: don't expect user cell inputs to be wires
whitequark [Fri, 16 Jul 2021 10:27:47 +0000 (10:27 +0000)]
cxxrtl: run hierarchy pass regardless of (*top*) attribute presence.
The hierarchy pass does a lot more than just finding the top module,
mainly resolving implicit (positional, wildcard) module connections.
Fixes #2589.
whitequark [Fri, 16 Jul 2021 10:05:24 +0000 (10:05 +0000)]
cxxrtl: emit debug items for unused public wires.
This greatly improves debug information coverage.
Fixes #2500.
whitequark [Fri, 16 Jul 2021 09:51:15 +0000 (09:51 +0000)]
cxxrtl: don't expect user cell inputs to be wires.
Ports can be connected to constants, too. (Usually resets.)
Fixes #2521.
whitequark [Fri, 16 Jul 2021 08:33:30 +0000 (08:33 +0000)]
Merge pull request #2871 from whitequark/cxxrtl-fix-2540-2841
cxxrtl: don't mark buffered internal wires as UNUSED for debug
whitequark [Fri, 16 Jul 2021 07:36:18 +0000 (07:36 +0000)]
cxxrtl: don't mark buffered internal wires as UNUSED for debug.
Public wires may alias buffered internal wires, so keep BUFFERED
wires in debug information even if they are private. Debug items are
only created for public wires, so this does not otherwise affect how
debug information is emitted.
Fixes #2540.
Fixes #2841.
whitequark [Fri, 16 Jul 2021 00:13:16 +0000 (00:13 +0000)]
Merge pull request #2870 from whitequark/cxxrtl-fix-2739
cxxrtl: mark dead local wires as unused even with inlining disabled
whitequark [Thu, 15 Jul 2021 22:27:27 +0000 (22:27 +0000)]
cxxrtl: mark dead local wires as unused even with inlining disabled.
Fixes #2739.