1
0
mirror of https://github.com/YosysHQ/nextpnr.git synced 2026-01-11 23:53:21 +00:00

Gowin. Optimize ALU. (#1556)

By replacing the operation of adding the input to itself with a
specially formed LUT, we free up two PIPs.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
This commit is contained in:
YRabbit 2025-09-17 15:50:41 +10:00 committed by GitHub
parent 00cf81e463
commit 4ab735c690
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1894,15 +1894,11 @@ struct GowinPacker
return cin_ci;
}
// CIN from logic
cin_ci->addInput(id_I0);
cin_ci->connectPort(id_I0, ctx->nets.at(ctx->id("$PACKER_GND")).get());
cin_ci->addInput(id_I1);
cin_ci->addInput(id_I3);
cin_ci->connectPort(id_I1, cin_net);
cin_ci->connectPort(id_I3, cin_net);
cin_ci->addInput(id_I2);
cin_ci->connectPort(id_I2, ctx->nets.at(ctx->id("$PACKER_VCC")).get());
cin_ci->setParam(id_ALU_MODE, std::string("0")); // ADD
cin_ci->addInput(id_I0);
cin_ci->connectPort(id_I0, cin_net);
cin_ci->setParam(id_RAW_ALU_LUT, 0x505a); // 0101_0000_0101_1010 -> ignore I1 and I3, out carry = I0
cin_ci->setParam(id_CIN_NETTYPE, Property("LOGIC"));
return cin_ci;
}