diff --git a/libs/libpcf/src/base/pcf2place.cpp b/libs/libpcf/src/base/pcf2place.cpp index 7895667e76..539aa0a374 100644 --- a/libs/libpcf/src/base/pcf2place.cpp +++ b/libs/libpcf/src/base/pcf2place.cpp @@ -41,6 +41,8 @@ int pcf2place(const PcfData& pcf_data, VTR_LOG("PCF basic check passed\n"); } + /* Map from location to net */ + std::map, std::string> net_map; /* Build the I/O place */ for (const PcfIoConstraintId& io_id : pcf_data.io_constraints()) { /* Find the net name */ @@ -102,6 +104,20 @@ int pcf2place(const PcfData& pcf_data, continue; } + std::array loc = {x, y, z}; + auto itr = net_map.find(loc); + if (itr == net_map.end()) { + net_map.insert({loc, net}); + } else { + VTR_LOG_ERROR( + "Illegal pin constraint: Two nets '%s' and '%s' are mapped to the I/O " + "pin '%s[%lu]' which belongs to the same coordinate (%ld, %ld, %ld)!\n", + itr->second.c_str(), net.c_str(), int_pin.get_name().c_str(), + int_pin.get_lsb(), x, y, z); + num_err++; + continue; + } + /* Add a fixed prefix to net namei, this is hard coded by VPR */ if (IoPinTable::OUTPUT == pin_direction) { net = "out:" + net;