diff options
author | David Shah <dave@ds0.me> | 2019-03-20 16:05:43 +0000 |
---|---|---|
committer | David Shah <dave@ds0.me> | 2019-03-20 16:07:47 +0000 |
commit | 997a66791e13c8e983fcd01473d51a66cbb971b7 (patch) | |
tree | 013f1e858cc2e38041431a00b0ae1de8a15a4b74 | |
parent | cadbf42054f224d84e5c5800baf82c0fa3a2a6db (diff) | |
download | nextpnr-997a66791e13c8e983fcd01473d51a66cbb971b7.tar.gz nextpnr-997a66791e13c8e983fcd01473d51a66cbb971b7.tar.bz2 nextpnr-997a66791e13c8e983fcd01473d51a66cbb971b7.zip |
json: Fix inputs directly driving inouts
Signed-off-by: David Shah <dave@ds0.me>
-rw-r--r-- | common/placer1.cc | 2 | ||||
-rw-r--r-- | json/jsonparse.cc | 17 | ||||
m--------- | tests | 0 |
3 files changed, 17 insertions, 2 deletions
diff --git a/common/placer1.cc b/common/placer1.cc index cec37847..5b72602f 100644 --- a/common/placer1.cc +++ b/common/placer1.cc @@ -230,7 +230,7 @@ class SAPlacer double upper = 0.6, lower = 0.4; - if (curr_metric < 0.95 * avg_metric) { + if (curr_metric < 0.95 * avg_metric && curr_metric > 0) { avg_metric = 0.8 * avg_metric + 0.2 * curr_metric; } else { if (Raccept >= 0.8) { diff --git a/json/jsonparse.cc b/json/jsonparse.cc index 5f4df0a2..a0479c2e 100644 --- a/json/jsonparse.cc +++ b/json/jsonparse.cc @@ -758,11 +758,26 @@ void json_import(Context *ctx, string modname, JsonNode *node) // N.B. ports must be imported after cells for tristate behaviour // to be correct - // Loop through all ports + // Loop through all ports, first non-tristate then tristate to handle + // interconnected ports correctly for (int portid = 0; portid < GetSize(ports_parent->data_dict_keys); portid++) { JsonNode *here; here = ports_parent->data_dict.at(ports_parent->data_dict_keys[portid]); + JsonNode *dir_node = here->data_dict.at("direction"); + NPNR_ASSERT(dir_node->type == 'S'); + if (dir_node->data_string == "inout") + continue; + json_import_toplevel_port(ctx, modname, netids, ports_parent->data_dict_keys[portid], here); + } + for (int portid = 0; portid < GetSize(ports_parent->data_dict_keys); portid++) { + JsonNode *here; + + here = ports_parent->data_dict.at(ports_parent->data_dict_keys[portid]); + JsonNode *dir_node = here->data_dict.at("direction"); + NPNR_ASSERT(dir_node->type == 'S'); + if (dir_node->data_string != "inout") + continue; json_import_toplevel_port(ctx, modname, netids, ports_parent->data_dict_keys[portid], here); } } diff --git a/tests b/tests -Subproject ee3ff3c4bdce20c47bd6c35a2f7430497b28380 +Subproject f29dcbe187b517d01964b1074eb7ff0b90849ee |