mirror of https://github.com/YosysHQ/yosys.git
opt_share: Fix X and CO signal width for shifted $alu in opt_share.
These need to be the same length as actual Y, not visible part of Y. Fixes #2538.
This commit is contained in:
parent
7cd044bbc4
commit
01626e6746
|
@ -244,8 +244,8 @@ void merge_operators(RTLIL::Module *module, RTLIL::Cell *mux, const std::vector<
|
|||
}
|
||||
|
||||
if (shared_op->type.in(ID($alu))) {
|
||||
shared_op->setPort(ID::X, module->addWire(NEW_ID, GetSize(new_sig_out)));
|
||||
shared_op->setPort(ID::CO, module->addWire(NEW_ID, GetSize(new_sig_out)));
|
||||
shared_op->setPort(ID::X, module->addWire(NEW_ID, GetSize(new_out)));
|
||||
shared_op->setPort(ID::CO, module->addWire(NEW_ID, GetSize(new_out)));
|
||||
}
|
||||
|
||||
bool is_fine = shared_op->type.in(FINE_BITWISE_OPS);
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
read_verilog <<EOT
|
||||
|
||||
module top(...);
|
||||
|
||||
input [3:0] A;
|
||||
input S;
|
||||
output [1:0] Y;
|
||||
|
||||
wire [3:0] A1 = A + 1;
|
||||
wire [3:0] A2 = A + 2;
|
||||
assign Y = S ? A1[3:2] : A2[3:2];
|
||||
|
||||
endmodule
|
||||
|
||||
EOT
|
||||
|
||||
proc
|
||||
alumacc
|
||||
equiv_opt -assert opt_share
|
||||
|
Loading…
Reference in New Issue