[Tool] Now repack consider design constraints; test pending
This commit is contained in:
parent
d0e05b3575
commit
2efe513122
|
@ -17,6 +17,9 @@
|
||||||
|
|
||||||
#include "repack_design_constraints_fwd.h"
|
#include "repack_design_constraints_fwd.h"
|
||||||
|
|
||||||
|
/* Constants */
|
||||||
|
constexpr char* REPACK_DESIGN_CONSTRAINT_OPEN_NET = "OPEN";
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
* A data structure to describe the design constraints for repacking tools
|
* A data structure to describe the design constraints for repacking tools
|
||||||
* This data structure may include a number of design constraints
|
* This data structure may include a number of design constraints
|
||||||
|
|
|
@ -410,6 +410,33 @@ void add_lb_router_nets(LbRouter& lb_router,
|
||||||
|
|
||||||
/* Find the net mapped to this pin in clustering results*/
|
/* Find the net mapped to this pin in clustering results*/
|
||||||
AtomNetId atom_net_id = pb_pin_mapped_nets[source_pb_pin];
|
AtomNetId atom_net_id = pb_pin_mapped_nets[source_pb_pin];
|
||||||
|
|
||||||
|
/* Check if the net information is constrained or not */
|
||||||
|
std::string constrained_net_name;
|
||||||
|
for (const RepackDesignConstraintId& design_constraint : design_constraints.design_constraints()) {
|
||||||
|
/* All the pin must have only 1 bit */
|
||||||
|
VTR_ASSERT_SAFE(1 == design_constraints.pin(design_constraint).get_width());
|
||||||
|
/* If found a constraint, record the net name */
|
||||||
|
if ( (std::string(lb_type->pb_type->name) == design_constraints.pb_type(design_constraint))
|
||||||
|
&& (std::string(source_pb_pin->port->name) == design_constraints.pin(design_constraint).get_name())
|
||||||
|
&& (size_t(source_pb_pin->pin_number) == design_constraints.pin(design_constraint).get_lsb())) {
|
||||||
|
constrained_net_name = design_constraints.net(design_constraint);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* If the pin is constrained, we need to
|
||||||
|
* - if this is an open net, for invalid net then
|
||||||
|
* - if this is valid net name, find the net id from atom_netlist and overwrite the atom net id to mapped
|
||||||
|
*/
|
||||||
|
if (!constrained_net_name.empty()) {
|
||||||
|
if (std::string(REPACK_DESIGN_CONSTRAINT_OPEN_NET) == constrained_net_name) {
|
||||||
|
atom_net_id == AtomNetId::INVALID();
|
||||||
|
} else {
|
||||||
|
VTR_ASSERT_SAFE(std::string(REPACK_DESIGN_CONSTRAINT_OPEN_NET) != constrained_net_name);
|
||||||
|
atom_net_id = atom_ctx.nlist.find_net(constrained_net_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Bypass unmapped pins */
|
/* Bypass unmapped pins */
|
||||||
if (AtomNetId::INVALID() == atom_net_id) {
|
if (AtomNetId::INVALID() == atom_net_id) {
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue