Skip to content

&synch2 crash caused by lf mapping: create wrong mapping (FIXED) #468

@phyzhenli

Description

@phyzhenli

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:

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions