Fixes for OAI4 cell implementation
authorDavid Shah <dave@ds0.me>
Tue, 23 Apr 2019 16:54:00 +0000 (17:54 +0100)
committerDavid Shah <dave@ds0.me>
Tue, 23 Apr 2019 16:54:00 +0000 (17:54 +0100)
Fixes #955 and the underlying issue in #954

Signed-off-by: David Shah <dave@ds0.me>
kernel/cellaigs.cc
kernel/celltypes.h

index 5fd76afe53954615d7d50670281939d86ca2a769..26c625f89a62d2f3ab1f18e3fce70eba82664333 100644 (file)
@@ -453,7 +453,7 @@ Aig::Aig(Cell *cell)
                int B = mk.inport("\\B");
                int C = mk.inport("\\C");
                int D = mk.inport("\\D");
-               int Y = mk.nand_gate(mk.nor_gate(A, B), mk.nor_gate(C, D));
+               int Y = mk.nand_gate(mk.or_gate(A, B), mk.or_gate(C, D));
                mk.outport(Y, "\\Y");
                goto optimize;
        }
index ae88f4aaf90e0e114a0bb31bc803f45bd44f7948..0da78c313e90defb9e3bc0db252aabf43c52c4d3 100644 (file)
@@ -464,7 +464,7 @@ struct CellTypes
                if (cell->type == "$_AOI4_")
                        return eval_not(const_or(const_and(arg1, arg2, false, false, 1), const_and(arg3, arg4, false, false, 1), false, false, 1));
                if (cell->type == "$_OAI4_")
-                       return eval_not(const_and(const_or(arg1, arg2, false, false, 1), const_and(arg3, arg4, false, false, 1), false, false, 1));
+                       return eval_not(const_and(const_or(arg1, arg2, false, false, 1), const_or(arg3, arg4, false, false, 1), false, false, 1));
 
                log_assert(arg4.bits.size() == 0);
                return eval(cell, arg1, arg2, arg3, errp);