aboutsummaryrefslogtreecommitdiffstats
path: root/passes/opt/opt_lut_ins.cc
diff options
context:
space:
mode:
authorPepijn de Vos <pepijndevos@gmail.com>2021-11-06 16:09:30 +0100
committerGitHub <noreply@github.com>2021-11-06 16:09:30 +0100
commit0c7461fe5e7ff8deacf4a16fa0e67e6666a17441 (patch)
treeb367bdcf186bbe7fda694c38eb7640ff31637c00 /passes/opt/opt_lut_ins.cc
parent8f08908d8debd467c0c8c7c28ba37b2296355fcf (diff)
downloadyosys-0c7461fe5e7ff8deacf4a16fa0e67e6666a17441.tar.gz
yosys-0c7461fe5e7ff8deacf4a16fa0e67e6666a17441.tar.bz2
yosys-0c7461fe5e7ff8deacf4a16fa0e67e6666a17441.zip
gowin: widelut support (#3042)
Diffstat (limited to 'passes/opt/opt_lut_ins.cc')
-rw-r--r--passes/opt/opt_lut_ins.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/passes/opt/opt_lut_ins.cc b/passes/opt/opt_lut_ins.cc
index 99043ef7e..2f7c392b2 100644
--- a/passes/opt/opt_lut_ins.cc
+++ b/passes/opt/opt_lut_ins.cc
@@ -193,6 +193,12 @@ struct OptLutInsPass : public Pass {
swz += extra;
}
}
+ if (techname == "gowin") {
+ // Pad the LUT to 1 input, adding consts from the front.
+ if (new_inputs.empty()) {
+ new_inputs.insert(new_inputs.begin(), State::S0);
+ }
+ }
Const new_lut(0, 1 << GetSize(new_inputs));
for (int i = 0; i < GetSize(new_lut); i++) {
int lidx = 0;
@@ -209,9 +215,9 @@ struct OptLutInsPass : public Pass {
}
new_lut[i] = lut[lidx];
}
- // For ecp5, do not replace with a const driver — the nextpnr
+ // For ecp5, and gowin do not replace with a const driver — the nextpnr
// packer requires a complete set of LUTs for wide LUT muxes.
- if (new_inputs.empty() && techname != "ecp5") {
+ if (new_inputs.empty() && techname != "ecp5" && techname != "gowin") {
// const driver.
remove_cells.push_back(cell);
module->connect(output, new_lut[0]);