give specific name to mux so that we can bind it to SDC generator
This commit is contained in:
parent
3d711823e5
commit
8e8e59b0ca
|
@ -758,6 +758,25 @@ std::string generate_grid_block_module_name(const std::string& prefix,
|
|||
return module_name;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* Generate the instance name for a programmable routing multiplexer module
|
||||
* in a Switch Block
|
||||
* To keep a unique name in each module and also consider unique routing modules,
|
||||
* please do NOT include any coordinates in the naming!!!
|
||||
* Consider only relative coordinate, such as side!
|
||||
********************************************************************/
|
||||
std::string generate_sb_mux_instance_name(const std::string& prefix,
|
||||
const e_side& sb_side,
|
||||
const size_t& track_id,
|
||||
const std::string& postfix) {
|
||||
std::string instance_name(prefix);
|
||||
instance_name += Side(sb_side).to_string();
|
||||
instance_name += std::string("_track_") + std::to_string(track_id);
|
||||
instance_name += postfix;
|
||||
|
||||
return instance_name;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* Generate the instance name for a configurable memory module in a Switch Block
|
||||
* To keep a unique name in each module and also consider unique routing modules,
|
||||
|
@ -776,6 +795,26 @@ std::string generate_sb_memory_instance_name(const std::string& prefix,
|
|||
return instance_name;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* Generate the instance name for a programmable routing multiplexer module
|
||||
* in a Connection Block
|
||||
* To keep a unique name in each module and also consider unique routing modules,
|
||||
* please do NOT include any coordinates in the naming!!!
|
||||
* Consider only relative coordinate, such as side!
|
||||
********************************************************************/
|
||||
std::string generate_cb_mux_instance_name(const std::string& prefix,
|
||||
const e_side& cb_side,
|
||||
const size_t& pin_id,
|
||||
const std::string& postfix) {
|
||||
std::string instance_name(prefix);
|
||||
|
||||
instance_name += Side(cb_side).to_string();
|
||||
instance_name += std::string("_ipin_") + std::to_string(pin_id);
|
||||
instance_name += postfix;
|
||||
|
||||
return instance_name;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* Generate the instance name for a configurable memory module in a Connection Block
|
||||
* To keep a unique name in each module and also consider unique routing modules,
|
||||
|
@ -795,6 +834,38 @@ std::string generate_cb_memory_instance_name(const std::string& prefix,
|
|||
return instance_name;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* Generate the instance name for a programmable routing multiplexer
|
||||
* module in a physical block of a grid
|
||||
* To guarentee a unique name for pb_graph pin,
|
||||
* the instance name includes the index of parent node
|
||||
* as well as the port name and pin index of this pin
|
||||
*
|
||||
* Exceptions:
|
||||
* For OUTPUT ports, due to hierarchical module organization,
|
||||
* their parent nodes will be uniquified
|
||||
* So, we should not add any index here
|
||||
********************************************************************/
|
||||
std::string generate_pb_mux_instance_name(const std::string& prefix,
|
||||
t_pb_graph_pin* pb_graph_pin,
|
||||
const std::string& postfix) {
|
||||
std::string instance_name(prefix);
|
||||
instance_name += std::string(pb_graph_pin->parent_node->pb_type->name);
|
||||
|
||||
if (IN_PORT == pb_graph_pin->port->type) {
|
||||
instance_name += std::string("_");
|
||||
instance_name += std::to_string(pb_graph_pin->parent_node->placement_index);
|
||||
}
|
||||
|
||||
instance_name += std::string("_");
|
||||
instance_name += std::string(pb_graph_pin->port->name);
|
||||
instance_name += std::string("_");
|
||||
instance_name += std::to_string(pb_graph_pin->pin_number);
|
||||
instance_name += postfix;
|
||||
|
||||
return instance_name;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* Generate the instance name for a configurable memory module in a
|
||||
* physical block of a grid
|
||||
|
|
|
@ -78,16 +78,30 @@ std::string generate_switch_block_module_name(const vtr::Point<size_t>& coordina
|
|||
std::string generate_connection_block_module_name(const t_rr_type& cb_type,
|
||||
const vtr::Point<size_t>& coordinate);
|
||||
|
||||
std::string generate_sb_mux_instance_name(const std::string& prefix,
|
||||
const e_side& sb_side,
|
||||
const size_t& track_id,
|
||||
const std::string& postfix);
|
||||
|
||||
std::string generate_sb_memory_instance_name(const std::string& prefix,
|
||||
const e_side& sb_side,
|
||||
const size_t& track_id,
|
||||
const std::string& postfix);
|
||||
|
||||
std::string generate_cb_mux_instance_name(const std::string& prefix,
|
||||
const e_side& cb_side,
|
||||
const size_t& pin_id,
|
||||
const std::string& postfix);
|
||||
|
||||
std::string generate_cb_memory_instance_name(const std::string& prefix,
|
||||
const e_side& cb_side,
|
||||
const size_t& pin_id,
|
||||
const std::string& postfix);
|
||||
|
||||
std::string generate_pb_mux_instance_name(const std::string& prefix,
|
||||
t_pb_graph_pin* pb_graph_pin,
|
||||
const std::string& postfix);
|
||||
|
||||
std::string generate_pb_memory_instance_name(const std::string& prefix,
|
||||
t_pb_graph_pin* pb_graph_pin,
|
||||
const std::string& postfix);
|
||||
|
|
|
@ -16,6 +16,10 @@ constexpr char* SWITCH_BLOCK_MEM_INSTANCE_PREFIX = "mem_";
|
|||
constexpr char* CONNECTION_BLOCK_MEM_INSTANCE_PREFIX = "mem_";
|
||||
constexpr char* MEMORY_MODULE_POSTFIX = "_mem";
|
||||
|
||||
/* Multiplexer naming constant strings */
|
||||
constexpr char* GRID_MUX_INSTANCE_PREFIX = "mux_";
|
||||
constexpr char* SWITCH_BLOCK_MUX_INSTANCE_PREFIX = "mux_";
|
||||
constexpr char* CONNECTION_BLOCK_MUX_INSTANCE_PREFIX = "mux_";
|
||||
|
||||
/* Bitstream file strings */
|
||||
constexpr char* BITSTREAM_XML_FILE_NAME_POSTFIX = "_bitstream.xml";
|
||||
|
|
|
@ -559,6 +559,11 @@ void add_module_pb_graph_pin_interc(ModuleManager& module_manager,
|
|||
/* Instanciate the MUX */
|
||||
size_t mux_instance = module_manager.num_instance(pb_module, mux_module);
|
||||
module_manager.add_child_module(pb_module, mux_module);
|
||||
/* Give an instance name: this name should be consistent with the block name given in SDC generator,
|
||||
* If you want to bind the SDC generation to modules
|
||||
*/
|
||||
std::string mux_instance_name = generate_pb_mux_instance_name(GRID_MUX_INSTANCE_PREFIX, des_pb_graph_pin, std::string(""));
|
||||
module_manager.set_child_instance_name(pb_module, mux_module, mux_instance, mux_instance_name);
|
||||
|
||||
/* Instanciate a memory module for the MUX */
|
||||
std::string mux_mem_module_name = generate_mux_subckt_name(circuit_lib,
|
||||
|
|
|
@ -128,6 +128,12 @@ void build_switch_block_mux_module(ModuleManager& module_manager,
|
|||
/* Instanciate the MUX Module */
|
||||
module_manager.add_child_module(sb_module, mux_module);
|
||||
|
||||
/* Give an instance name: this name should be consistent with the block name given in SDC manager,
|
||||
* If you want to bind the SDC generation to modules
|
||||
*/
|
||||
std::string mux_instance_name = generate_sb_memory_instance_name(SWITCH_BLOCK_MUX_INSTANCE_PREFIX, chan_side, chan_node_id, std::string(""));
|
||||
module_manager.set_child_instance_name(sb_module, mux_module, mux_instance_id, mux_instance_name);
|
||||
|
||||
/* Generate input ports that are wired to the input bus of the routing multiplexer */
|
||||
std::vector<ModulePortId> sb_input_port_ids = find_switch_block_module_input_ports(module_manager, sb_module, rr_gsb, grids, drive_rr_nodes);
|
||||
|
||||
|
@ -515,6 +521,12 @@ void build_connection_block_mux_module(ModuleManager& module_manager,
|
|||
size_t mux_instance_id = module_manager.num_instance(cb_module, mux_module);
|
||||
module_manager.add_child_module(cb_module, mux_module);
|
||||
|
||||
/* Give an instance name: this name should be consistent with the block name given in SDC manager,
|
||||
* If you want to bind the SDC generation to modules
|
||||
*/
|
||||
std::string mux_instance_name = generate_cb_mux_instance_name(CONNECTION_BLOCK_MUX_INSTANCE_PREFIX, rr_gsb.get_ipin_node_grid_side(cb_ipin_side, ipin_index), ipin_index, std::string(""));
|
||||
module_manager.set_child_instance_name(cb_module, mux_module, mux_instance_id, mux_instance_name);
|
||||
|
||||
/* TODO: Generate input ports that are wired to the input bus of the routing multiplexer */
|
||||
std::vector<ModulePortId> cb_input_port_ids = find_connection_block_module_input_ports(module_manager, cb_module, rr_gsb, cb_type, drive_rr_nodes);
|
||||
|
||||
|
|
Loading…
Reference in New Issue