coolrunner2: Fix invalid multiple fanouts of XOR/OR gates
authorR. Ou <rqou@robertou.com>
Mon, 2 Mar 2020 09:06:03 +0000 (01:06 -0800)
committerR. Ou <rqou@robertou.com>
Mon, 2 Mar 2020 09:07:15 +0000 (01:07 -0800)
commitb9c98e010039ca0cf9b8944feb49220a82fc5e74
treeed2198b5afee54fcd801086e9cc235ae80b04483
parenta6180048970802a4b8726a2a8d6abcbb4aebc942
coolrunner2: Fix invalid multiple fanouts of XOR/OR gates

In some cases where multiple output pins share identical combinatorial
logic, yosys would only generate one $sop cell and therefore one
MACROCELL_XOR cell to try to feed the multiple sinks. This is not valid,
so make the fixup pass duplicate cells when necessary. For example,
fixes the following code:

module top(input a, input b, input clk_, output reg o, output o2);

wire clk;

BUFG bufg0 (
    .I(clk_),
    .O(clk),
);

always @(posedge clk)
    o = a ^ b;
assign o2 = a ^ b;

endmodule
techlibs/coolrunner2/coolrunner2_fixup.cc