Merge pull request #3840 from povik/cellaigs-cmp-cells

This commit is contained in:
Jannis Harder 2023-07-31 16:23:39 +02:00 committed by GitHub
commit 0a3f805daa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 20 additions and 0 deletions

View File

@ -385,6 +385,26 @@ Aig::Aig(Cell *cell)
goto optimize;
}
if (cell->type.in({ID($lt), ID($gt), ID($le), ID($ge)}))
{
int width = std::max(GetSize(cell->getPort(ID::A)),
GetSize(cell->getPort(ID::B))) + 1;
vector<int> A = mk.inport_vec(ID::A, width);
vector<int> B = mk.inport_vec(ID::B, width);
if (cell->type.in({ID($gt), ID($ge)}))
std::swap(A, B);
int carry = mk.bool_node(!cell->type.in({ID($le), ID($ge)}));
for (auto &n : B)
n = mk.not_gate(n);
vector<int> Y = mk.adder(A, B, carry);
mk.outport(Y.back(), ID::Y);
for (int i = 1; i < GetSize(cell->getPort(ID::Y)); i++)
mk.outport(mk.bool_node(false), ID::Y, i);
goto optimize;
}
if (cell->type == ID($alu))
{
int width = GetSize(cell->getPort(ID::Y));