yosys.git
3 years agoAdd support for parsing the SystemVerilog 'bind' construct
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).

3 years agoMerge pull request #2874 from whitequark/cxxrtl-fix-2589
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

3 years agoMerge pull request #2873 from whitequark/cxxrtl-fix-2500
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

3 years agoMerge pull request #2872 from whitequark/cxxrtl-fix-2521
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

3 years agocxxrtl: run hierarchy pass regardless of (*top*) attribute presence.
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.

3 years agocxxrtl: emit debug items for unused public wires.
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.

3 years agocxxrtl: don't expect user cell inputs to be wires.
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.

3 years agoMerge pull request #2871 from whitequark/cxxrtl-fix-2540-2841
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

3 years agocxxrtl: 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.

3 years agoMerge pull request #2870 from whitequark/cxxrtl-fix-2739
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

3 years agocxxrtl: 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.

3 years agosv: fix two struct access bugs
Zachary Snow [Tue, 22 Jun 2021 14:39:57 +0000 (10:39 -0400)]
sv: fix two struct access bugs

- preserve signedness of struct members
- fix initial width detection of struct members (e.g., in case expressions)

3 years agoAdd a test for interfaces on modules loaded on-demand
Rupert Swarbrick [Wed, 14 Jul 2021 16:27:13 +0000 (17:27 +0100)]
Add a test for interfaces on modules loaded on-demand

3 years agoExtract missing module support in hierarchy.cc to a helper function
Rupert Swarbrick [Wed, 27 May 2020 09:42:37 +0000 (10:42 +0100)]
Extract missing module support in hierarchy.cc to a helper function

I think the code is now a bit easier to follow (and has lost some
levels of indentation!).

The only non-trivial change is that I removed the check for
cell->type[0] != '$' when deciding whether to complain if we couldn't
find a module. This will always be true because of the early exit
earlier in the function.

3 years agoMerge pull request #2866 from rswarbrick/found-init
whitequark [Wed, 14 Jul 2021 12:00:30 +0000 (12:00 +0000)]
Merge pull request #2866 from rswarbrick/found-init

Delete unused found_init variable

3 years agoDelete unused found_init variable
Rupert Swarbrick [Wed, 14 Jul 2021 09:19:07 +0000 (10:19 +0100)]
Delete unused found_init variable

Spotted during compilation:

    passes/proc/proc_init.cc: In function ‘void {anonymous}::proc_init(Yosys::RTLIL::Module*, Yosys::SigMap&, Yosys::RTLIL::Process*)’:
    passes/proc/proc_init.cc:31:7: warning: variable ‘found_init’ set but not used [-Wunused-but-set-variable]

3 years agokernel/mem: Add a coalesce_inits helper.
Marcelina Kościelnicka [Mon, 12 Jul 2021 18:04:59 +0000 (20:04 +0200)]
kernel/mem: Add a coalesce_inits helper.

While this helper is already useful to squash sequential initializations
into one in cxxrtl, its main purpose is to squash overlapping masked memory
initializations (when they land) and avoid having to deal with them in
cxxrtl runtime.

3 years agoAdd support for the Bitwuzla solver
GCHQDeveloper560 [Wed, 16 Jun 2021 12:19:43 +0000 (13:19 +0100)]
Add support for the Bitwuzla solver

3 years agokernel/mem: Use delayed removal for inits as well.
Marcelina Kościelnicka [Mon, 12 Jul 2021 15:10:40 +0000 (17:10 +0200)]
kernel/mem: Use delayed removal for inits as well.

3 years agokernel/mem: Add documentation for more helper functions.
Marcelina Kościelnicka [Mon, 12 Jul 2021 15:40:12 +0000 (17:40 +0200)]
kernel/mem: Add documentation for more helper functions.

3 years agocxxrtl: Support memory writes in processes.
Marcelina Kościelnicka [Sun, 11 Jul 2021 23:00:57 +0000 (01:00 +0200)]
cxxrtl: Support memory writes in processes.

3 years agocxxrtl: Add support for memory read port reset.
Marcelina Kościelnicka [Sat, 10 Jul 2021 21:47:01 +0000 (23:47 +0200)]
cxxrtl: Add support for memory read port reset.

3 years agocxxrtl: Add support for mem read port initial data.
Marcelina Kościelnicka [Sat, 10 Jul 2021 12:33:16 +0000 (14:33 +0200)]
cxxrtl: Add support for mem read port initial data.

3 years agocxxrtl: Convert to Mem helpers.
Marcelina Kościelnicka [Sat, 10 Jul 2021 01:55:51 +0000 (03:55 +0200)]
cxxrtl: Convert to Mem helpers.

This *only* does conversion, but doesn't add any new functionality —
support for memory read port init/reset is still upcoming.

3 years agokernel/mem: Commit new values of attributes in emit.
Marcelina Kościelnicka [Mon, 12 Jul 2021 04:26:13 +0000 (06:26 +0200)]
kernel/mem: Commit new values of attributes in emit.

3 years agokernel/mem: Make the Mem helpers inherit from AttrObject.
Marcelina Kościelnicka [Mon, 12 Jul 2021 00:11:54 +0000 (02:11 +0200)]
kernel/mem: Make the Mem helpers inherit from AttrObject.

3 years agortlil: Make Process handling more uniform with Cell and Wire.
Marcelina Kościelnicka [Sun, 11 Jul 2021 21:57:53 +0000 (23:57 +0200)]
rtlil: Make Process handling more uniform with Cell and Wire.

- add a backlink to module from Process
- make constructor and destructor protected, expose Module functions
  to add and remove processes

3 years agoice40: Fix LUT input indices in opt_lut -dlogic (again).
Marcelina Kościelnicka [Sat, 10 Jul 2021 18:46:48 +0000 (20:46 +0200)]
ice40: Fix LUT input indices in opt_lut -dlogic (again).

Fixes #2061.

3 years agoUpdate to latest Verific with extensions for initial assertions
Miodrag Milanovic [Fri, 9 Jul 2021 07:02:27 +0000 (09:02 +0200)]
Update to latest Verific with extensions for initial assertions

3 years agosv: fix a few struct and enum memory leaks
Zachary Snow [Thu, 17 Jun 2021 19:59:59 +0000 (15:59 -0400)]
sv: fix a few struct and enum memory leaks

3 years agoecp5: Add DCSC blackbox
gatecat [Tue, 6 Jul 2021 10:46:45 +0000 (11:46 +0100)]
ecp5: Add DCSC blackbox

Signed-off-by: gatecat <gatecat@ds0.me>
3 years agoMerge pull request #2835 from YosysHQ/verific_command
Claire Xen [Mon, 5 Jul 2021 14:59:37 +0000 (16:59 +0200)]
Merge pull request #2835 from YosysHQ/verific_command

Support command files in Verific

3 years agoMakefile: allow running multiple sanitizers at once
Xiretza [Tue, 16 Mar 2021 15:41:31 +0000 (16:41 +0100)]
Makefile: allow running multiple sanitizers at once

3 years agoMakefile: use git/make -C instead of cd
Xiretza [Mon, 14 Jun 2021 11:54:47 +0000 (13:54 +0200)]
Makefile: use git/make -C instead of cd

3 years agoMakefile: pass PRETTY=0 to ABC
Xiretza [Mon, 14 Jun 2021 10:16:19 +0000 (12:16 +0200)]
Makefile: pass PRETTY=0 to ABC

3 years agoMakefile: don't bake DESTDIR into libyosys DT_SONAME
Xiretza [Mon, 14 Jun 2021 09:35:38 +0000 (11:35 +0200)]
Makefile: don't bake DESTDIR into libyosys DT_SONAME

DESTDIR is only used as a temporary destination for installed files
before they are packaged into an archive; the "real" installed location
is determined by PREFIX/{BIN,LIB,DAT}DIR.

3 years agoMakefile: clean up PYOSYS configuration
Xiretza [Mon, 14 Jun 2021 06:55:22 +0000 (08:55 +0200)]
Makefile: clean up PYOSYS configuration

3 years agoAdd additional help
Miodrag Milanovic [Mon, 5 Jul 2021 07:16:54 +0000 (09:16 +0200)]
Add additional help

3 years agoMerge pull request #2842 from whitequark/fix-wasi-build
whitequark [Sat, 19 Jun 2021 12:10:29 +0000 (12:10 +0000)]
Merge pull request #2842 from whitequark/fix-wasi-build

Fix WASI build after commit 1d88bea1

3 years agoFix WASI build after commit 1d88bea1.
whitequark [Sat, 19 Jun 2021 02:59:57 +0000 (02:59 +0000)]
Fix WASI build after commit 1d88bea1.

3 years agoMerge pull request #2836 from YosysHQ/gatecat/pyosys-sigint
Miodrag Milanović [Fri, 18 Jun 2021 10:07:50 +0000 (12:07 +0200)]
Merge pull request #2836 from YosysHQ/gatecat/pyosys-sigint

pyosys: Clear SIGINT handler after Python loads

3 years agoMove interface expansion in hierarchy.cc into a helper class
Rupert Swarbrick [Tue, 26 May 2020 16:46:10 +0000 (17:46 +0100)]
Move interface expansion in hierarchy.cc into a helper class

There should be no functional change, but this splits up the control
flow across functions, using class fields to hold the state that's
being tracked. The result should be a bit easier to read.

This is part of work to add bind support, but I'm doing some
refactoring in the hierarchy pass to make the code a bit easier to
work with. The idea is that (eventually) the IFExpander object will
hold all the logic for expanding interfaces, and then other code can
do bind insertion.

3 years agosv: fix up end label checking
Zachary Snow [Mon, 14 Jun 2021 19:32:01 +0000 (15:32 -0400)]
sv: fix up end label checking

- disallow [gen]blocks with an end label but not begin label
- check validity of module end label
- fix memory leak of package name and end label
- fix memory leak of module end label

3 years agoInclude blif reader header in public facing extension header files.
Ashton Snelgrove [Wed, 16 Jun 2021 19:47:47 +0000 (13:47 -0600)]
Include blif reader header in public facing extension header files.

3 years agopyosys: Clear SIGINT handler after Python loads
gatecat [Wed, 16 Jun 2021 11:34:36 +0000 (12:34 +0100)]
pyosys: Clear SIGINT handler after Python loads

Signed-off-by: gatecat <gatecat@ds0.me>
3 years agoSupport command files in Verific
Miodrag Milanovic [Wed, 16 Jun 2021 09:21:44 +0000 (11:21 +0200)]
Support command files in Verific

3 years agoverilog: fix leaking of type names in parser
Xiretza [Thu, 18 Mar 2021 20:52:06 +0000 (21:52 +0100)]
verilog: fix leaking of type names in parser

3 years agoverilog: fix wildcard port connections leaking memory
Xiretza [Thu, 18 Mar 2021 09:38:36 +0000 (10:38 +0100)]
verilog: fix wildcard port connections leaking memory

3 years agoast: delete wires and localparams after finishing const evaluation
Xiretza [Tue, 16 Mar 2021 23:14:27 +0000 (00:14 +0100)]
ast: delete wires and localparams after finishing const evaluation

3 years agoverilog: fix leaking ASTNodes
Xiretza [Tue, 16 Mar 2021 15:43:03 +0000 (16:43 +0100)]
verilog: fix leaking ASTNodes

3 years agoast: fix error condition causing assert to fail
Xiretza [Tue, 16 Mar 2021 23:08:43 +0000 (00:08 +0100)]
ast: fix error condition causing assert to fail

type2str returns a string that doesn't start with $ or \, so it can't be
assigned to an IdString.

3 years agomacos: fix leak in proc_self_dirname()
Zachary Snow [Mon, 14 Jun 2021 15:59:01 +0000 (11:59 -0400)]
macos: fix leak in proc_self_dirname()

3 years agoSimplify some RTLIL destructors
Rupert Swarbrick [Mon, 20 Apr 2020 14:58:30 +0000 (15:58 +0100)]
Simplify some RTLIL destructors

No change in behaviour, but use range-based for loops instead of
iterators.

3 years agoverilog: Squash a memory leak.
Marcelina Kościelnicka [Mon, 14 Jun 2021 14:28:10 +0000 (16:28 +0200)]
verilog: Squash a memory leak.

That was added in ecc22f7fedfa639482dbc55a05709da85116a60f

3 years agoAdd regression test for #2824.
Marcelina Kościelnicka [Fri, 11 Jun 2021 10:19:21 +0000 (12:19 +0200)]
Add regression test for #2824.

3 years agoopt_muxtree: Update port_off and port_idx even for constant bits
gatecat [Fri, 11 Jun 2021 10:11:12 +0000 (11:11 +0100)]
opt_muxtree: Update port_off and port_idx even for constant bits

Signed-off-by: gatecat <gatecat@ds0.me>
3 years agoopt_expr: Fix mul/div/mod by POT patterns to support >= 32 bits.
Marcelina Kościelnicka [Wed, 9 Jun 2021 16:41:57 +0000 (18:41 +0200)]
opt_expr: Fix mul/div/mod by POT patterns to support >= 32 bits.

The previous code, in addition to being needlessly limitted to 32 bits
in the first place, also had UB for the 31th bit (doing 1 << 31).

3 years agoopt_expr: Optimize div/mod by const 1.
Marcelina Kościelnicka [Wed, 9 Jun 2021 14:14:16 +0000 (16:14 +0200)]
opt_expr: Optimize div/mod by const 1.

Turns out the code for div by a power of 2 is already almost capable of
optimizing this to a shift-by-0 or and-with-0, which will be further
folded into nothingness; let's beef it up to handle div by 1 as well.

Fixes #2820.

3 years agoMerge pull request #2817 from YosysHQ/claire/fixemails
Claire Xen [Wed, 9 Jun 2021 11:22:52 +0000 (13:22 +0200)]
Merge pull request #2817 from YosysHQ/claire/fixemails

Fixing old e-mail addresses and deadnames

3 years agoFix deadname SVN links
Claire Xenia Wolf [Wed, 9 Jun 2021 10:44:37 +0000 (12:44 +0200)]
Fix deadname SVN links

Signed-off-by: Claire Xenia Wolf <claire@clairexen.net>
3 years agoIntersynth URL
Claire Xenia Wolf [Wed, 9 Jun 2021 10:42:52 +0000 (12:42 +0200)]
Intersynth URL

Signed-off-by: Claire Xenia Wolf <claire@clairexen.net>
3 years agoMore deadname stuff
Claire Xenia Wolf [Wed, 9 Jun 2021 10:40:33 +0000 (12:40 +0200)]
More deadname stuff

Signed-off-by: Claire Xenia Wolf <claire@clairexen.net>
3 years agoFix icestorm links
Claire Xenia Wolf [Wed, 9 Jun 2021 10:39:12 +0000 (12:39 +0200)]
Fix icestorm links

Signed-off-by: Claire Xenia Wolf <claire@clairexen.net>
3 years agoMore deadname stuff
Claire Xenia Wolf [Wed, 9 Jun 2021 10:33:41 +0000 (12:33 +0200)]
More deadname stuff

3 years agoUse HTTPS for website links, gatecat email
Claire Xenia Wolf [Wed, 9 Jun 2021 10:16:56 +0000 (12:16 +0200)]
Use HTTPS for website links, gatecat email

git ls-tree -r --name-only HEAD | xargs sed -i -rf ~/fixemails.sed

s/((Claire|Xen|Xenia|Clifford)\s+)+(Wolf|Xen)\s+<(claire|clifford)@(symbioticeda.com|clifford.at|yosyshq.com)>/Claire Xenia Wolf <claire@yosyshq.com>/gi;
s/((Nina|Nak|N\.)\s+)+Engelhardt\s+<nak@(symbioticeda.com|yosyshq.com)>/N. Engelhardt <nak@yosyshq.com>/gi;
s/((David)\s+)+(Shah|gatecat)\s+<(dave|david|gatecat)@(symbioticeda.com|yosyshq.com|ds0.me)>/gatecat <gatecat@ds0.me>/gi;
s/((Miodrag)\s+)+Milanovic\s+<(miodrag|micko)@(symbioticeda.com|yosyshq.com)>/Miodrag Milanovic <micko@yosyshq.com>/gi;
s,https?://www.clifford.at/yosys/|http://yosyshq.net/yosys/,https://yosyshq.net/yosys/,g;

3 years agoFix files with CRLF line endings
Claire Xenia Wolf [Wed, 9 Jun 2021 10:16:33 +0000 (12:16 +0200)]
Fix files with CRLF line endings

3 years agoverilog: check for module scope identifiers during width detection
Zachary Snow [Sat, 5 Jun 2021 20:21:09 +0000 (16:21 -0400)]
verilog: check for module scope identifiers during width detection

The recent fix for case expression width detection causes the width of
the expressions to be queried before they are simplified. Because the
logic supporting module scope identifiers only existed in simplify,
looking them up would fail during width detection. This moves the logic
to a common helper used in both simplify() and detectSignWidthWorker().

3 years agomem2reg: tolerate out of bounds constant accesses
Zachary Snow [Wed, 26 May 2021 22:22:31 +0000 (18:22 -0400)]
mem2reg: tolerate out of bounds constant accesses

This brings the mem2reg behavior in line with the nomem2reg behavior.

3 years agoautoname: simple perf optimizations
Zachary Snow [Tue, 8 Jun 2021 16:06:32 +0000 (12:06 -0400)]
autoname: simple perf optimizations

3 years agoFixing old e-mail addresses and deadnames
Claire Xenia Wolf [Mon, 7 Jun 2021 22:39:36 +0000 (00:39 +0200)]
Fixing old e-mail addresses and deadnames

s/((Claire|Xen|Xenia|Clifford)\s+)+(Wolf|Xen)\s+<(claire|clifford)@(symbioticeda.com|clifford.at|yosyshq.com)>/Claire Xenia Wolf <claire@yosyshq.com>/gi;
s/((Nina|Nak|N\.)\s+)+Engelhardt\s+<nak@(symbioticeda.com|yosyshq.com)>/N. Engelhardt <nak@yosyshq.com>/gi;
s/((David)\s+)+Shah\s+<(dave|david)@(symbioticeda.com|yosyshq.com|ds0.me)>/David Shah <dave@ds0.me>/gi;
s/((Miodrag)\s+)+Milanovic\s+<(miodrag|micko)@(symbioticeda.com|yosyshq.com)>/Miodrag Milanovic <micko@yosyshq.com>/gi;
s,https?://www.clifford.at/yosys/,http://yosyshq.net/yosys/,g;

3 years agoAdd claire deadname stuff to .mailmap
Claire Xenia Wolf [Mon, 7 Jun 2021 22:20:55 +0000 (00:20 +0200)]
Add claire deadname stuff to .mailmap

Signed-off-by: Claire Xenia Wolf <claire@clairexen.net>
3 years agosv: support tasks and functions within packages
Zachary Snow [Thu, 27 May 2021 20:47:02 +0000 (16:47 -0400)]
sv: support tasks and functions within packages

3 years agokernel/mem: Recognize some deprecated memory port configs.
Marcelina Kościelnicka [Mon, 31 May 2021 23:48:35 +0000 (01:48 +0200)]
kernel/mem: Recognize some deprecated memory port configs.

Transparency is meaningless for asynchronous ports, so we assume
transparent == false to simplify the code in this case.  Likewise,
enable is meaningless, and we assume it is const-1.  However,
turns out that nMigen emits the former, and Verilog frontend emits
the latter, so squash these issues when ingesting a $memrd cell.

Fixes #2811.

3 years agomemory_map: Improve start_offset handling.
Marcelina Kościelnicka [Mon, 31 May 2021 13:53:18 +0000 (15:53 +0200)]
memory_map: Improve start_offset handling.

Fixes #2775.

3 years agomemory_share: Add read port merging.
Marcelina Kościelnicka [Sun, 25 Oct 2020 23:44:37 +0000 (00:44 +0100)]
memory_share: Add read port merging.

This is mostly meant for wide port recognition, but may also happen to
merge some ports with compatible initial/reset values (eg. 0 vs x).

3 years agomemory_share: Improve sat-based port sharing.
Marcelina Kościelnicka [Mon, 26 Oct 2020 02:20:57 +0000 (03:20 +0100)]
memory_share: Improve sat-based port sharing.

3 years agoMake a few passes auto-call Mem::narrow instead of rejecting wide ports.
Marcelina Kościelnicka [Thu, 27 May 2021 21:43:25 +0000 (23:43 +0200)]
Make a few passes auto-call Mem::narrow instead of rejecting wide ports.

This essentially adds wide port support for free in passes that don't
have a usefully better way of handling wide ports than just breaking
them up to narrow ports, avoiding "please run memory_narrow" annoyance.

3 years agobackends/verilog: Add support for memory read port reset and init value.
Marcelina Kościelnicka [Thu, 27 May 2021 15:50:59 +0000 (17:50 +0200)]
backends/verilog: Add support for memory read port reset and init value.

3 years agobackends/verilog: Add wide port support.
Marcelina Kościelnicka [Tue, 25 May 2021 23:18:29 +0000 (01:18 +0200)]
backends/verilog: Add wide port support.

3 years agomemory_share: Improve same-address merging, recognize wide write ports.
Marcelina Kościelnicka [Sun, 25 Oct 2020 22:01:59 +0000 (23:01 +0100)]
memory_share: Improve same-address merging, recognize wide write ports.

3 years agokernel/mem: Add helpers for write port widening.
Marcelina Kościelnicka [Wed, 26 May 2021 01:07:51 +0000 (03:07 +0200)]
kernel/mem: Add helpers for write port widening.

3 years agokernel/mem: Add sub_addr helpers.
Marcelina Kościelnicka [Wed, 26 May 2021 00:49:50 +0000 (02:49 +0200)]
kernel/mem: Add sub_addr helpers.

3 years agokernel/mem: Add prepare_wr_merge helper.
Marcelina Kościelnicka [Wed, 26 May 2021 00:06:44 +0000 (02:06 +0200)]
kernel/mem: Add prepare_wr_merge helper.

3 years agobackends/verilog: Try to preserve mem write port priorities.
Marcelina Kościelnicka [Tue, 25 May 2021 20:37:03 +0000 (22:37 +0200)]
backends/verilog: Try to preserve mem write port priorities.

3 years agomem/extract_rdff: Fix "no FF made" edge case.
Marcelina Kościelnicka [Tue, 25 May 2021 20:39:50 +0000 (22:39 +0200)]
mem/extract_rdff: Fix "no FF made" edge case.

When converting a sync transparent read port with const address to async
read port, nothing at all needs to be done other than clk_enable change,
and thus we have no FF cell to return.  Handle this case correctly in
the helper and in its users.

3 years agomemory_bram: Reuse extract_rdff helper for make_outreg.
Marcelina Kościelnicka [Tue, 25 May 2021 17:31:53 +0000 (19:31 +0200)]
memory_bram: Reuse extract_rdff helper for make_outreg.

Also properly skip read ports with init value or reset when not making
use of make_outreg.  Proper support for matching those will land later.

3 years agoverilog: fix case expression sign and width handling
Zachary Snow [Thu, 25 Mar 2021 18:06:05 +0000 (14:06 -0400)]
verilog: fix case expression sign and width handling

- The case expression and case item expressions are extended to the
  maximum width among them, and are only interpreted as signed if all of
  them are signed
- Add overall width and sign detection for AST_CASE
- Add sign argument to genWidthRTLIL helper
- Coverage for both const and non-const case statements

3 years agosv: support remaining assignment operators
Zachary Snow [Sat, 27 Mar 2021 19:59:48 +0000 (15:59 -0400)]
sv: support remaining assignment operators

- Add support for: *=, /=, %=, <<=, >>=, <<<=, >>>=
- Unify existing support for: +=, -=, &=, |=, ^=

3 years agomem/extract_rdff: Add alternate transparency handling.
Marcelina Kościelnicka [Tue, 25 May 2021 18:42:34 +0000 (20:42 +0200)]
mem/extract_rdff: Add alternate transparency handling.

When extracting read register from a transparent port that has an
enable, reset, or initial value, the usual trick of putting a register
on the address instead of data doesn't work.  In this case, create soft
transparency logic instead.

When transparency masks land, this will also be used to handle ports
that are transparent to only a subset of write ports.

3 years agoopt_mem: Add reset/init value support.
Marcelina Kościelnicka [Tue, 25 May 2021 16:49:17 +0000 (18:49 +0200)]
opt_mem: Add reset/init value support.

3 years agokernel/mem: Add model support for read port init value and resets.
Marcelina Kościelnicka [Sat, 22 May 2021 15:18:59 +0000 (17:18 +0200)]
kernel/mem: Add model support for read port init value and resets.

Like wide port support, this is still completely unusable, and support
in various passes will be gradually added later.  It also has no support
at all in the cell library, so attempting to create a read port with
a reset or initial value will cause an assert failure for now.

3 years agomem/extract_rdff: Fix wire naming and wide port support.
Marcelina Kościelnicka [Tue, 25 May 2021 13:48:52 +0000 (15:48 +0200)]
mem/extract_rdff: Fix wire naming and wide port support.

3 years agomemory_bram: Respect write port priority.
Marcelina Kościelnicka [Tue, 25 May 2021 13:34:12 +0000 (15:34 +0200)]
memory_bram: Respect write port priority.

3 years agoopt_mem_feedback: Respect write port priority.
Marcelina Kościelnicka [Tue, 25 May 2021 13:17:29 +0000 (15:17 +0200)]
opt_mem_feedback: Respect write port priority.

3 years agokernel/mem: Add emulate_priority helper.
Marcelina Kościelnicka [Tue, 25 May 2021 00:56:35 +0000 (02:56 +0200)]
kernel/mem: Add emulate_priority helper.

3 years agoAdd memory_narrow pass.
Marcelina Kościelnicka [Tue, 25 May 2021 00:12:55 +0000 (02:12 +0200)]
Add memory_narrow pass.

3 years agomemory_share: Add wide port support.
Marcelina Kościelnicka [Mon, 24 May 2021 23:55:44 +0000 (01:55 +0200)]
memory_share: Add wide port support.

3 years agoopt_mem_feedback: Add wide port support.
Marcelina Kościelnicka [Mon, 24 May 2021 23:52:52 +0000 (01:52 +0200)]
opt_mem_feedback: Add wide port support.

3 years agomemory_map: Add wide port support.
Marcelina Kościelnicka [Mon, 24 May 2021 14:35:25 +0000 (16:35 +0200)]
memory_map: Add wide port support.

3 years agosim: Add wide port support.
Marcelina Kościelnicka [Mon, 24 May 2021 23:12:19 +0000 (01:12 +0200)]
sim: Add wide port support.