aboutsummaryrefslogtreecommitdiffstats
path: root/ice40
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2018-06-14 15:09:13 +0200
committerClifford Wolf <clifford@clifford.at>2018-06-14 15:09:13 +0200
commit312699e590183d80e6dc4d1fbd74ea364c56baf3 (patch)
tree7c712c707b3ddd429d3441667fd482b60696ffcf /ice40
parent7787ce5fd934b2d794e1fa15b6e8007ed07080e6 (diff)
downloadnextpnr-312699e590183d80e6dc4d1fbd74ea364c56baf3.tar.gz
nextpnr-312699e590183d80e6dc4d1fbd74ea364c56baf3.tar.bz2
nextpnr-312699e590183d80e6dc4d1fbd74ea364c56baf3.zip
Add route-ripup routing loop
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'ice40')
-rw-r--r--ice40/chip.h18
-rw-r--r--ice40/main.cc2
2 files changed, 13 insertions, 7 deletions
diff --git a/ice40/chip.h b/ice40/chip.h
index 54e8e368..e2b54cdf 100644
--- a/ice40/chip.h
+++ b/ice40/chip.h
@@ -441,7 +441,7 @@ struct Chip
std::vector<IdString> bel_to_cell;
std::vector<IdString> wire_to_net;
std::vector<IdString> pip_to_net;
- std::vector<bool> switches_locked;
+ std::vector<IdString> switches_locked;
Chip(ChipArgs args);
ChipArgs args;
@@ -592,18 +592,21 @@ struct Chip
{
assert(pip != PipId());
assert(pip_to_net[pip.index] == IdString());
- assert(!switches_locked[chip_info.pip_data[pip.index].switch_index]);
+ assert(switches_locked[chip_info.pip_data[pip.index].switch_index] ==
+ IdString());
pip_to_net[pip.index] = net;
- switches_locked[chip_info.pip_data[pip.index].switch_index] = true;
+ switches_locked[chip_info.pip_data[pip.index].switch_index] = net;
}
void unbindPip(PipId pip)
{
assert(pip != PipId());
assert(pip_to_net[pip.index] != IdString());
- assert(switches_locked[chip_info.pip_data[pip.index].switch_index]);
+ assert(switches_locked[chip_info.pip_data[pip.index].switch_index] !=
+ IdString());
pip_to_net[pip.index] = IdString();
- switches_locked[chip_info.pip_data[pip.index].switch_index] = false;
+ switches_locked[chip_info.pip_data[pip.index].switch_index] =
+ IdString();
}
bool checkPipAvail(PipId pip) const
@@ -614,12 +617,15 @@ struct Chip
if (x == 0 || x == (chip_info.width - 1))
return false;
}
- return !switches_locked[chip_info.pip_data[pip.index].switch_index];
+ return switches_locked[chip_info.pip_data[pip.index].switch_index] ==
+ IdString();
}
IdString getPipNet(PipId pip, bool conflicting = false) const
{
assert(pip != PipId());
+ if (conflicting)
+ return switches_locked[chip_info.pip_data[pip.index].switch_index];
return pip_to_net[pip.index];
}
diff --git a/ice40/main.cc b/ice40/main.cc
index 094e6a75..d4177fb1 100644
--- a/ice40/main.cc
+++ b/ice40/main.cc
@@ -81,7 +81,7 @@ int main(int argc, char *argv[])
"PCF constraints file to ingest");
options.add_options()("asc", po::value<std::string>(),
"asc bitstream file to write");
- options.add_options()("version,v", "show version");
+ options.add_options()("version,V", "show version");
options.add_options()("lp384", "set device type to iCE40LP384");
options.add_options()("lp1k", "set device type to iCE40LP1K");
options.add_options()("lp8k", "set device type to iCE40LP8K");