From 766032c5f85e33c8aabb69d1868c3493f254695f Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Fri, 27 May 2016 17:55:03 +0200 Subject: [PATCH] Fixed procedural assignments to non-unique lvalues, e.g. {y,y} = {a,b} --- frontends/ast/genrtlil.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/frontends/ast/genrtlil.cc b/frontends/ast/genrtlil.cc index e5446dae6..0e5029eb4 100644 --- a/frontends/ast/genrtlil.cc +++ b/frontends/ast/genrtlil.cc @@ -429,6 +429,17 @@ struct AST_INTERNAL::ProcessGenerator { RTLIL::SigSpec unmapped_lvalue = ast->children[0]->genRTLIL(), lvalue = unmapped_lvalue; RTLIL::SigSpec rvalue = ast->children[1]->genWidthRTLIL(lvalue.size(), &subst_rvalue_map.stdmap()); + + pool lvalue_sigbits; + for (int i = 0; i < GetSize(lvalue); i++) { + if (lvalue_sigbits.count(lvalue[i]) > 0) { + unmapped_lvalue.remove(i); + lvalue.remove(i); + rvalue.remove(i--); + } else + lvalue_sigbits.insert(lvalue[i]); + } + lvalue.replace(subst_lvalue_map.stdmap()); if (ast->type == AST_ASSIGN_EQ) { -- 2.30.2