-
Notifications
You must be signed in to change notification settings - Fork 719
Description
Version
The latest version of ABC.
Details
&synch2 use 3 GIAs to generate a new netlist with choice node, and the problem occur in the second GIA which is derived by a mapping solution after performing lf.
&synch2 enable fCutMin and fCoarsen which extract and create real XOR and MUX node before cut mapping, then lf will optimize the cut based on a xor a = 0 in the cut enumeration process.
Assuming that there is a network with all nodes are XORs and the best cuts for some nodes are:
node 75: { 3 12 30 43 51 }
node 76: { 69 70 72 }
node 98: { 76 }
node 146: { 75 76 98}
When deriving 98, it will return 76 without creating a buffer. Then the cut of node 146 becomes { 75 76 76 } and deriveing 146 will return 75 (76 xor 76 = 0). Next the code will wrongly overwrite node 75 cut infomation to { 75 76 76 }. Obviously it's not correct because the proper cut of node 75 is { 3 12 30 43 51 }.
The solution is to drop cut infomation when the node is a constant or buffer:
