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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions