aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcelina Koƛcielnicka <mwk@0x04.net>2020-07-29 10:00:01 +0200
committerMarcelina Koƛcielnicka <mwk@0x04.net>2020-07-29 12:41:43 +0200
commitdc18bf1969e3550a629ffa4722ad40758fc32535 (patch)
tree52f7991cd916997c925543a83736951390b80f64
parent773b056ffbdf8ab2ee78febd2d3029a61e526f55 (diff)
downloadyosys-dc18bf1969e3550a629ffa4722ad40758fc32535.tar.gz
yosys-dc18bf1969e3550a629ffa4722ad40758fc32535.tar.bz2
yosys-dc18bf1969e3550a629ffa4722ad40758fc32535.zip
opt_expr: Fix handling of $_XNOR_ cells with A = B.
Fixes #2311.
-rw-r--r--passes/opt/opt_expr.cc2
-rw-r--r--tests/opt/bug2311.ys14
2 files changed, 15 insertions, 1 deletions
diff --git a/passes/opt/opt_expr.cc b/passes/opt/opt_expr.cc
index 649ad83a6..8aae1a731 100644
--- a/passes/opt/opt_expr.cc
+++ b/passes/opt/opt_expr.cc
@@ -604,7 +604,7 @@ void replace_const_cells(RTLIL::Design *design, RTLIL::Module *module, bool cons
if (cell->type.in(ID($xnor), ID($_XNOR_))) {
cover("opt.opt_expr.const_xnor");
// For consistency since simplemap does $xnor -> $_XOR_ + $_NOT_
- int width = cell->getParam(ID::Y_WIDTH).as_int();
+ int width = GetSize(cell->getPort(ID::Y));
replace_cell(assign_map, module, cell, "const_xnor", ID::Y, SigSpec(RTLIL::State::S1, width));
goto next_cell;
}
diff --git a/tests/opt/bug2311.ys b/tests/opt/bug2311.ys
new file mode 100644
index 000000000..455147cd3
--- /dev/null
+++ b/tests/opt/bug2311.ys
@@ -0,0 +1,14 @@
+read_verilog -icells << EOT
+
+module top(...);
+
+input A;
+output Y;
+
+$_XNOR_ x (.A(A), .B(A), .Y(Y));
+
+endmodule
+
+EOT
+
+equiv_opt -assert opt_expr