aboutsummaryrefslogtreecommitdiffstats
path: root/ice40/main.cc
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2018-06-06 16:01:31 +0200
committerClifford Wolf <clifford@clifford.at>2018-06-06 16:01:31 +0200
commitf07682f515a7f4ddccf24e40c802f79feba7bed8 (patch)
tree5252c8a83dd229e0e36da3062c4757be7aa71820 /ice40/main.cc
parent9afa6a2016d3137ba61d924f25f4f077215f3eda (diff)
downloadnextpnr-f07682f515a7f4ddccf24e40c802f79feba7bed8.tar.gz
nextpnr-f07682f515a7f4ddccf24e40c802f79feba7bed8.tar.bz2
nextpnr-f07682f515a7f4ddccf24e40c802f79feba7bed8.zip
Add ice40 --test mode
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'ice40/main.cc')
-rw-r--r--ice40/main.cc62
1 files changed, 57 insertions, 5 deletions
diff --git a/ice40/main.cc b/ice40/main.cc
index e02930bb..afdd1a4a 100644
--- a/ice40/main.cc
+++ b/ice40/main.cc
@@ -32,7 +32,7 @@ int main(int argc, char *argv[])
po::options_description options("Allowed options");
options.add_options()("help,h","show help");
- options.add_options()("debug","just a check");
+ options.add_options()("test","just a check");
options.add_options()("gui","start gui");
options.add_options()("file", po::value<std::string>(), "python file to execute");
options.add_options()("version,v","show version");
@@ -80,14 +80,66 @@ int main(int argc, char *argv[])
return a.exec();
}
- if (vm.count("debug"))
+ if (vm.count("test"))
{
ChipArgs chipArgs;
chipArgs.type = ChipArgs::LP384;
- Design design(chipArgs);
- for (auto bel : design.chip.getBels())
- printf("%s\n", design.chip.getBelName(bel).c_str());
+ Design design(chipArgs);
+ int bel_count = 0, wire_count = 0, pip_count = 0;
+
+ std::cout << "Checking bel names.\n";
+ for (auto bel : design.chip.getBels()) {
+ auto name = design.chip.getBelName(bel);
+ assert(bel == design.chip.getBelByName(name));
+ bel_count++;
+ }
+ std::cout << " checked " << bel_count << " bels.\n";
+
+ std::cout << "Checking wire names.\n";
+ for (auto wire : design.chip.getWires()) {
+ auto name = design.chip.getWireName(wire);
+ assert(wire == design.chip.getWireByName(name));
+ wire_count++;
+ }
+ std::cout << " checked " << wire_count << " wires.\n";
+
+ std::cout << "Checking pip names.\n";
+ for (auto pip : design.chip.getPips()) {
+ auto name = design.chip.getPipName(pip);
+ assert(pip == design.chip.getPipByName(name));
+ pip_count++;
+ }
+ std::cout << " checked " << pip_count << " pips.\n";
+
+ std::cout << "Checking uphill -> downhill consistency.\n";
+ for (auto dst : design.chip.getWires()) {
+ for (auto uphill_pip : design.chip.getPipsUphill(dst)) {
+ bool found_downhill = false;
+ for (auto downhill_pip : design.chip.getPipsDownhill(design.chip.getPipSrcWire(uphill_pip))) {
+ if (uphill_pip == downhill_pip) {
+ assert(!found_downhill);
+ found_downhill = true;
+ }
+ }
+ assert(found_downhill);
+ }
+ }
+
+ std::cout << "Checking downhill -> uphill consistency.\n";
+ for (auto dst : design.chip.getWires()) {
+ for (auto downhill_pip : design.chip.getPipsDownhill(dst)) {
+ bool found_uphill = false;
+ for (auto uphill_pip : design.chip.getPipsUphill(design.chip.getPipDstWire(downhill_pip))) {
+ if (uphill_pip == downhill_pip) {
+ assert(!found_uphill);
+ found_uphill = true;
+ }
+ }
+ assert(found_uphill);
+ }
+ }
+
return 0;
}