Fix handling of defparam for when default_nettype is none
authorClifford Wolf <clifford@clifford.at>
Sun, 24 Feb 2019 19:09:41 +0000 (20:09 +0100)
committerClifford Wolf <clifford@clifford.at>
Sun, 24 Feb 2019 19:09:41 +0000 (20:09 +0100)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
frontends/ast/simplify.cc
tests/simple/hierdefparam.v

index 737fb300cc00677565440baa8be56928bbfab509..46013544b6ae26e3bb5365652f2d5697728b75ec 100644 (file)
@@ -642,6 +642,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
        // (iterate by index as e.g. auto wires can add new children in the process)
        for (size_t i = 0; i < children.size(); i++) {
                bool did_something_here = true;
+               bool backup_flag_autowire = flag_autowire;
                if ((type == AST_GENFOR || type == AST_FOR) && i >= 3)
                        break;
                if ((type == AST_GENIF || type == AST_GENCASE) && i >= 1)
@@ -652,6 +653,8 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
                        break;
                if (type == AST_PREFIX && i >= 1)
                        break;
+               if (type == AST_DEFPARAM && i == 0)
+                       flag_autowire = true;
                while (did_something_here && i < children.size()) {
                        bool const_fold_here = const_fold, in_lvalue_here = in_lvalue;
                        int width_hint_here = width_hint;
@@ -686,6 +689,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
                        children.erase(children.begin() + (i--));
                        did_something = true;
                }
+               flag_autowire = backup_flag_autowire;
        }
        for (auto &attr : attributes) {
                while (attr.second->simplify(true, false, false, stage, -1, false, true))
index ff92c38bd993ec87a8ee17b96374fa3ea91ccb0f..c9368ca7ad6bbc71597c8d39478d6e54b1a21267 100644 (file)
@@ -1,3 +1,5 @@
+`default_nettype none
+
 module hierdefparam_top(input [7:0] A, output [7:0] Y);
   generate begin:foo
     hierdefparam_a mod_a(.A(A), .Y(Y));