Merge pull request #1620 from lnis-uofu/xt_plocf

Support fabric pin physical location file
This commit is contained in:
tangxifan 2024-04-11 19:16:46 -07:00 committed by GitHub
commit ffdf40cad6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
31 changed files with 4310 additions and 15 deletions

View File

@ -0,0 +1,109 @@
.. _file_format_fabric_pin_physical_location_file:
Fabric Pin Physical Location File (.xml)
----------------------------------------
This file is generated by command :ref:`openfpga_setup_commands_write_fabric_pin_physical_location`
The fabric pin physical location file aims to show
- Pin names of each module in an eFPGA fabric
- Preferred physical side of each pin on its module
This file is created for pin guidelines during physical design steps
An example of the file is shown as follows.
.. code-block:: xml
<pin_location>
<module name="sb_1__1_">
<loc pin="chany_bottom_in[0:0]" side="bottom"/>
<loc pin="chany_bottom_in[1:1]" side="bottom"/>
<loc pin="chany_bottom_in[2:2]" side="bottom"/>
<loc pin="chany_bottom_in[3:3]" side="bottom"/>
<loc pin="chany_bottom_in[4:4]" side="bottom"/>
<loc pin="chany_bottom_in[5:5]" side="bottom"/>
<loc pin="chany_bottom_in[6:6]" side="bottom"/>
<loc pin="chany_bottom_in[7:7]" side="bottom"/>
<loc pin="chany_bottom_in[8:8]" side="bottom"/>
<loc pin="chany_bottom_in[9:9]" side="bottom"/>
<loc pin="chany_bottom_in[10:10]" side="bottom"/>
<loc pin="chany_bottom_in[11:11]" side="bottom"/>
<loc pin="chany_bottom_in[12:12]" side="bottom"/>
<loc pin="chany_bottom_out[0:0]" side="bottom"/>
<loc pin="chany_bottom_out[1:1]" side="bottom"/>
<loc pin="chany_bottom_out[2:2]" side="bottom"/>
<loc pin="chany_bottom_out[3:3]" side="bottom"/>
<loc pin="chany_bottom_out[4:4]" side="bottom"/>
<loc pin="chany_bottom_out[5:5]" side="bottom"/>
<loc pin="chany_bottom_out[6:6]" side="bottom"/>
<loc pin="chany_bottom_out[7:7]" side="bottom"/>
<loc pin="chany_bottom_out[8:8]" side="bottom"/>
<loc pin="chany_bottom_out[9:9]" side="bottom"/>
<loc pin="chany_bottom_out[10:10]" side="bottom"/>
<loc pin="chany_bottom_out[11:11]" side="bottom"/>
<loc pin="chany_bottom_out[12:12]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_0__pin_O_3_[0:0]" side="bottom"/>
<loc pin="chanx_left_in[0:0]" side="left"/>
<loc pin="chanx_left_in[1:1]" side="left"/>
<loc pin="chanx_left_in[2:2]" side="left"/>
<loc pin="chanx_left_in[3:3]" side="left"/>
<loc pin="chanx_left_in[4:4]" side="left"/>
<loc pin="chanx_left_in[5:5]" side="left"/>
<loc pin="chanx_left_in[6:6]" side="left"/>
<loc pin="chanx_left_in[7:7]" side="left"/>
<loc pin="chanx_left_in[8:8]" side="left"/>
<loc pin="chanx_left_in[9:9]" side="left"/>
<loc pin="chanx_left_in[10:10]" side="left"/>
<loc pin="chanx_left_in[11:11]" side="left"/>
<loc pin="chanx_left_in[12:12]" side="left"/>
<loc pin="chanx_left_out[0:0]" side="left"/>
<loc pin="chanx_left_out[1:1]" side="left"/>
<loc pin="chanx_left_out[2:2]" side="left"/>
<loc pin="chanx_left_out[3:3]" side="left"/>
<loc pin="chanx_left_out[4:4]" side="left"/>
<loc pin="chanx_left_out[5:5]" side="left"/>
<loc pin="chanx_left_out[6:6]" side="left"/>
<loc pin="chanx_left_out[7:7]" side="left"/>
<loc pin="chanx_left_out[8:8]" side="left"/>
<loc pin="chanx_left_out[9:9]" side="left"/>
<loc pin="chanx_left_out[10:10]" side="left"/>
<loc pin="chanx_left_out[11:11]" side="left"/>
<loc pin="chanx_left_out[12:12]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_0__pin_O_2_[0:0]" side="left"/>
</module>
</pin_location>
.. option:: name="<string>"
The module name in FPGA fabric, which should be a valid module defined in output Verilog netlist.
.. note:: You should be find the exact module in the FPGA fabric if you output the Verilog netlists.
.. option:: pin="<string>"
The name of the pin in FPGA fabric. Note that all the bus port will be flatten in this file.
.. note:: You should be find the exact pin in the module if you output the Verilog netlists.
.. option:: side="<string>"
The physical side of the pin should appear on the perimeter of the module.

View File

@ -41,3 +41,5 @@ OpenFPGA widely uses XML format for interchangeable files
module_naming_file
tile_config_file
fabric_pin_physical_location_file

View File

@ -392,7 +392,7 @@ write_fabric_io_info
.. option:: --no_time_stamp
Do not print time stamp in bitstream files
Do not print time stamp in output files
.. option:: --verbose
@ -433,7 +433,7 @@ pcf2place
.. option:: --no_time_stamp
Do not print time stamp in bitstream files
Do not print time stamp in output files
.. option:: --verbose
@ -467,7 +467,34 @@ write_module_naming_rules
.. option:: --no_time_stamp
Do not print time stamp in bitstream files
Do not print time stamp in output files
.. option:: --verbose
Show verbose log
.. _openfpga_setup_commands_write_fabric_pin_physical_location:
write_fabric_pin_physical_location
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Output the physical location of each pin for each module of an FPGA fabric to a given file
.. option:: --file <string>
Specify the file path to be written to. See details in :ref:`file_format_fabric_pin_physical_location_file`.
.. option:: --module <string>
Specify the name of modules to be considered. Support regular expression, e.g., ``tile*``. When provided, only pins of selected modules will be outputted. By default, a wildcard ``*`` is considered, which means all the modules will be considered.
.. option:: --show_invalid_side
Show sides for each pin, even these pin does not have a specific valid side. This is mainly used for debugging.
.. option:: --no_time_stamp
Do not print time stamp in output files
.. option:: --verbose

View File

@ -23,6 +23,7 @@
#include "rename_modules.h"
#include "vtr_log.h"
#include "vtr_time.h"
#include "write_xml_fabric_pin_physical_location.h"
#include "write_xml_module_name_map.h"
/* begin namespace openfpga */
@ -419,6 +420,41 @@ int write_module_naming_rules_template(const T& openfpga_ctx,
cmd_context.option_enable(cmd, opt_verbose));
}
/********************************************************************
* Write fabric pin physical location to a file
*******************************************************************/
template <class T>
int write_fabric_pin_physical_location_template(
const T& openfpga_ctx, const Command& cmd,
const CommandContext& cmd_context) {
CommandOptionId opt_verbose = cmd.option("verbose");
CommandOptionId opt_no_time_stamp = cmd.option("no_time_stamp");
CommandOptionId opt_show_invalid_side = cmd.option("show_invalid_side");
/* Check the option '--file' is enabled or not
* Actually, it must be enabled as the shell interface will check
* before reaching this fuction
*/
CommandOptionId opt_file = cmd.option("file");
VTR_ASSERT(true == cmd_context.option_enable(cmd, opt_file));
VTR_ASSERT(false == cmd_context.option_value(cmd, opt_file).empty());
std::string file_name = cmd_context.option_value(cmd, opt_file);
std::string module_name("*"); /* Use a wildcard for everything */
CommandOptionId opt_module = cmd.option("module");
if (true == cmd_context.option_enable(cmd, opt_module)) {
module_name = cmd_context.option_value(cmd, opt_module);
}
/* Write hierarchy to a file */
return write_xml_fabric_pin_physical_location(
file_name.c_str(), module_name, openfpga_ctx.module_graph(),
cmd_context.option_enable(cmd, opt_show_invalid_side),
!cmd_context.option_enable(cmd, opt_no_time_stamp),
cmd_context.option_enable(cmd, opt_verbose));
}
} /* end namespace openfpga */
#endif

View File

@ -413,6 +413,35 @@ std::string generate_sb_module_track_port_name(const t_rr_type& chan_type,
return port_name;
}
/*********************************************************************
* Get the physical side for a routing track in a Connection Block module
* Upper_location: specify if an upper/lower prefix to be added.
* The location indicates where the bus port should be
* placed on the perimeter of the connection block
* - For X-directional CB:
* - upper is the left side
* - lower is the right side
* - For Y-directional CB:
* - upper is the bottom side
* - lower is the top side
*********************************************************************/
e_side get_cb_module_track_port_side(const t_rr_type& chan_type,
const bool& upper_location) {
/* Channel must be either CHANX or CHANY */
VTR_ASSERT((CHANX == chan_type) || (CHANY == chan_type));
/* Create a map between chan_type and module_prefix */
std::map<t_rr_type, std::map<bool, e_side>> port_side_map;
/* TODO: use a constexpr string to replace the fixed name? */
/* IMPORTANT: This part must be consistent with the mapping in the
* generate_cb_module_track_port_name() !!! */
port_side_map[CHANX][true] = LEFT;
port_side_map[CHANX][false] = RIGHT;
port_side_map[CHANY][true] = BOTTOM;
port_side_map[CHANY][false] = TOP;
return port_side_map[chan_type][upper_location];
}
/*********************************************************************
* Generate the port name for a routing track in a Connection Block module
* This function is created to ease the PnR for each unique routing module

View File

@ -97,6 +97,9 @@ std::string generate_sb_module_track_port_name(const t_rr_type& chan_type,
const e_side& module_side,
const PORTS& port_direction);
e_side get_cb_module_track_port_side(const t_rr_type& chan_type,
const bool& upper_location);
std::string generate_cb_module_track_port_name(const t_rr_type& chan_type,
const PORTS& port_direction,
const bool& upper_location);

View File

@ -858,6 +858,55 @@ ShellCommandId add_write_module_naming_rules_command_template(
return shell_cmd_id;
}
/********************************************************************
* - Add a command to Shell environment: write_pin_physical_location
* - Add associated options
* - Add command dependency
*******************************************************************/
template <class T>
ShellCommandId add_write_fabric_pin_physical_location_command_template(
openfpga::Shell<T>& shell, const ShellCommandClassId& cmd_class_id,
const std::vector<ShellCommandId>& dependent_cmds, const bool& hidden) {
Command shell_cmd("write_fabric_pin_physical_location");
/* Add an option '--file' in short '-f'*/
CommandOptionId opt_file = shell_cmd.add_option(
"file", true,
"file path to the XML file that contains pin physical location");
shell_cmd.set_option_short_name(opt_file, "f");
shell_cmd.set_option_require_value(opt_file, openfpga::OPT_STRING);
/* Add an option '--module'*/
CommandOptionId opt_module = shell_cmd.add_option(
"module", false,
"specify the module whose pin physical location should be outputted");
shell_cmd.set_option_require_value(opt_module, openfpga::OPT_STRING);
/* Add an option '--no_time_stamp' */
shell_cmd.add_option("no_time_stamp", false,
"Do not print time stamp in output files");
shell_cmd.add_option(
"show_invalid_side", false,
"Include pins with invalid sides in output files. Recommended for "
"debugging as the output file may include a lot of useless information");
shell_cmd.add_option("verbose", false, "Show verbose outputs");
/* Add command to the Shell */
ShellCommandId shell_cmd_id = shell.add_command(
shell_cmd,
"Output the pin physical location of an FPGA fabric to a given file",
hidden);
shell.set_command_class(shell_cmd_id, cmd_class_id);
shell.set_command_const_execute_function(
shell_cmd_id, write_fabric_pin_physical_location_template<T>);
/* Add command dependency to the Shell */
shell.set_command_dependency(shell_cmd_id, dependent_cmds);
return shell_cmd_id;
}
template <class T>
void add_setup_command_templates(openfpga::Shell<T>& shell,
const bool& hidden = false) {
@ -1098,6 +1147,17 @@ void add_setup_command_templates(openfpga::Shell<T>& shell,
add_write_module_naming_rules_command_template<T>(
shell, openfpga_setup_cmd_class, cmd_dependency_write_module_naming_rules,
hidden);
/********************************
* Command 'write_fabric_pin_physical_location'
*/
/* The command should NOT be executed before 'build_fabric' */
std::vector<ShellCommandId> cmd_dependency_write_fabric_pin_physical_location;
cmd_dependency_write_fabric_pin_physical_location.push_back(
build_fabric_cmd_id);
add_write_fabric_pin_physical_location_command_template<T>(
shell, openfpga_setup_cmd_class,
cmd_dependency_write_fabric_pin_physical_location, hidden);
}
} /* end namespace openfpga */

View File

@ -123,8 +123,10 @@ void add_grid_module_duplicated_pb_type_ports(
}
BasicPort grid_port(port_name, 0, 0);
/* Add the port to the module */
module_manager.add_port(grid_module, grid_port,
pin_type2type_map[pin_class_type]);
ModulePortId grid_port_id = module_manager.add_port(
grid_module, grid_port, pin_type2type_map[pin_class_type]);
/* Set port side */
module_manager.set_port_side(grid_module, grid_port_id, side);
} else {
/* For each DRIVER pin, we create two copies.
* One with a postfix of upper, indicating it is located on the
@ -136,15 +138,19 @@ void add_grid_module_duplicated_pb_type_ports(
iwidth, iheight, subtile_index, side, pin_info, true);
BasicPort grid_upper_port(upper_port_name, 0, 0);
/* Add the port to the module */
module_manager.add_port(grid_module, grid_upper_port,
pin_type2type_map[pin_class_type]);
ModulePortId grid_upper_port_id = module_manager.add_port(
grid_module, grid_upper_port, pin_type2type_map[pin_class_type]);
/* Set port side */
module_manager.set_port_side(grid_module, grid_upper_port_id, side);
std::string lower_port_name = generate_grid_duplicated_port_name(
iwidth, iheight, subtile_index, side, pin_info, false);
BasicPort grid_lower_port(lower_port_name, 0, 0);
/* Add the port to the module */
module_manager.add_port(grid_module, grid_lower_port,
pin_type2type_map[pin_class_type]);
ModulePortId grid_lower_port_id = module_manager.add_port(
grid_module, grid_lower_port, pin_type2type_map[pin_class_type]);
/* Set port side */
module_manager.set_port_side(grid_module, grid_lower_port_id, side);
}
}
}

View File

@ -103,8 +103,10 @@ static void add_grid_module_pb_type_ports(
}
BasicPort grid_port(port_name, 0, 0);
/* Add the port to the module */
module_manager.add_port(grid_module, grid_port,
pin_type2type_map[pin_class_type]);
ModulePortId grid_port_id = module_manager.add_port(
grid_module, grid_port, pin_type2type_map[pin_class_type]);
/* Set port side */
module_manager.set_port_side(grid_module, grid_port_id, side);
}
}
}

View File

@ -435,6 +435,9 @@ static void build_switch_block_module(
BasicPort chan_input_port(chan_input_port_name, chan_input_port_size);
ModulePortId chan_input_port_id = module_manager.add_port(
sb_module, chan_input_port, ModuleManager::MODULE_INPUT_PORT);
/* Add side to the port */
module_manager.set_port_side(sb_module, chan_input_port_id,
side_manager.get_side());
/* Cache the input net */
for (const size_t& pin : chan_input_port.pins()) {
@ -446,8 +449,11 @@ static void build_switch_block_module(
std::string chan_output_port_name = generate_sb_module_track_port_name(
chan_type, side_manager.get_side(), OUT_PORT);
BasicPort chan_output_port(chan_output_port_name, chan_output_port_size);
module_manager.add_port(sb_module, chan_output_port,
ModuleManager::MODULE_OUTPUT_PORT);
ModulePortId chan_output_port_id = module_manager.add_port(
sb_module, chan_output_port, ModuleManager::MODULE_OUTPUT_PORT);
/* Add side to the port */
module_manager.set_port_side(sb_module, chan_output_port_id,
side_manager.get_side());
}
/* Dump OPINs of adjacent CLBs */
@ -468,6 +474,9 @@ static void build_switch_block_module(
/* Grid outputs are inputs of switch blocks */
ModulePortId input_port_id = module_manager.add_port(
sb_module, module_port, ModuleManager::MODULE_INPUT_PORT);
/* Add side to the port */
module_manager.set_port_side(sb_module, input_port_id,
side_manager.get_side());
/* Cache the input net */
ModuleNetId net = create_module_source_pin_net(
@ -925,6 +934,9 @@ static void build_connection_block_module(
rr_gsb.get_cb_chan_width(cb_type) / 2);
ModulePortId chan_upper_input_port_id = module_manager.add_port(
cb_module, chan_upper_input_port, ModuleManager::MODULE_INPUT_PORT);
/* Add side to the port */
module_manager.set_port_side(cb_module, chan_upper_input_port_id,
get_cb_module_track_port_side(cb_type, true));
/* Lower input port: W/2 == 1 tracks */
std::string chan_lower_input_port_name =
@ -933,6 +945,9 @@ static void build_connection_block_module(
rr_gsb.get_cb_chan_width(cb_type) / 2);
ModulePortId chan_lower_input_port_id = module_manager.add_port(
cb_module, chan_lower_input_port, ModuleManager::MODULE_INPUT_PORT);
/* Add side to the port */
module_manager.set_port_side(cb_module, chan_lower_input_port_id,
get_cb_module_track_port_side(cb_type, false));
/* Upper output port: W/2 == 0 tracks */
std::string chan_upper_output_port_name =
@ -941,6 +956,9 @@ static void build_connection_block_module(
rr_gsb.get_cb_chan_width(cb_type) / 2);
ModulePortId chan_upper_output_port_id = module_manager.add_port(
cb_module, chan_upper_output_port, ModuleManager::MODULE_OUTPUT_PORT);
/* Add side to the port */
module_manager.set_port_side(cb_module, chan_upper_output_port_id,
get_cb_module_track_port_side(cb_type, true));
/* Lower output port: W/2 == 1 tracks */
std::string chan_lower_output_port_name =
@ -949,6 +967,9 @@ static void build_connection_block_module(
rr_gsb.get_cb_chan_width(cb_type) / 2);
ModulePortId chan_lower_output_port_id = module_manager.add_port(
cb_module, chan_lower_output_port, ModuleManager::MODULE_OUTPUT_PORT);
/* Add side to the port */
module_manager.set_port_side(cb_module, chan_lower_output_port_id,
get_cb_module_track_port_side(cb_type, false));
/* Add the input pins of grids, which are output ports of the connection block
*/
@ -965,8 +986,10 @@ static void build_connection_block_module(
BasicPort module_port(port_name,
1); /* Every grid output has a port size of 1 */
/* Grid outputs are inputs of switch blocks */
module_manager.add_port(cb_module, module_port,
ModuleManager::MODULE_OUTPUT_PORT);
ModulePortId module_port_id = module_manager.add_port(
cb_module, module_port, ModuleManager::MODULE_OUTPUT_PORT);
/* Add side to the port */
module_manager.set_port_side(cb_module, module_port_id, cb_ipin_side);
}
}

View File

@ -211,6 +211,10 @@ static int build_tile_module_port_and_nets_between_sb_and_pb(
ModulePortId src_tile_port_id = module_manager.add_port(
tile_module, src_grid_port,
ModuleManager::e_module_port_type::MODULE_INPUT_PORT);
/* Set port side, inherit from the child module */
module_manager.set_port_side(
tile_module, src_tile_port_id,
module_manager.port_side(sink_sb_module, sink_sb_port_id));
VTR_LOGV(
verbose,
"Adding ports '%s' to tile as required by the switch block '%s'...\n",
@ -442,6 +446,10 @@ static int build_tile_module_port_and_nets_between_cb_and_pb(
ModulePortId sink_tile_port_id = module_manager.add_port(
tile_module, src_cb_port,
ModuleManager::e_module_port_type::MODULE_OUTPUT_PORT);
/* Set port side, inherit from the child module */
module_manager.set_port_side(
tile_module, sink_tile_port_id,
module_manager.port_side(src_cb_module, src_cb_port_id));
VTR_LOGV(verbose,
"Adding ports '%s' to tile as required by the connection "
"block '%s'...\n",
@ -739,6 +747,10 @@ static int build_tile_module_port_and_nets_between_sb_and_cb(
ModulePortId tile_chan_output_port_id = module_manager.add_port(
tile_module, chan_output_port,
ModuleManager::e_module_port_type::MODULE_OUTPUT_PORT);
/* Set port side, inherit from the child module */
module_manager.set_port_side(
tile_module, tile_chan_output_port_id,
module_manager.port_side(sb_module_id, sb_chan_output_port_id));
VTR_LOGV(
verbose,
"Adding ports '%s' to tile as required by the switch block '%s'...\n",
@ -816,6 +828,10 @@ static int build_tile_module_one_port_from_cb(
* avoid naming conflicts */
ModulePortId tile_module_port_id =
module_manager.add_port(tile_module, tile_chan_port, chan_port_type);
/* Set port side, inherit from the child module */
module_manager.set_port_side(
tile_module, tile_module_port_id,
module_manager.port_side(cb_module, chan_port_id));
if (!frame_view) {
for (size_t pin_id = 0; pin_id < chan_port.pins().size(); ++pin_id) {
@ -1161,6 +1177,10 @@ static int build_tile_port_and_nets_from_pb(
ModulePortId tile_module_port_id = module_manager.add_port(
tile_module, pb_port,
ModuleManager::e_module_port_type::MODULE_OUTPUT_PORT);
/* Set port side, inherit from the child module */
module_manager.set_port_side(
tile_module, tile_module_port_id,
module_manager.port_side(pb_module, pb_module_port_id));
if (!frame_view) {
ModuleNetId net = create_module_source_pin_net(
module_manager, tile_module, pb_module, pb_instance,

View File

@ -0,0 +1,13 @@
#ifndef FABRIC_PIN_PHYSICAL_LOCATION_XML_CONSTANTS_H
#define FABRIC_PIN_PHYSICAL_LOCATION_XML_CONSTANTS_H
/* Constants required by XML parser */
constexpr const char* XML_PINLOC_ROOT_NAME = "pin_location";
constexpr const char* XML_MODULE_NODE_NAME = "module";
constexpr const char* XML_MODULE_ATTRIBUTE_NAME = "name";
constexpr const char* XML_MODULE_PINLOC_NODE_NAME = "loc";
constexpr const char* XML_MODULE_PINLOC_ATTRIBUTE_PIN = "pin";
constexpr const char* XML_MODULE_PINLOC_ATTRIBUTE_SIDE = "side";
#endif

View File

@ -304,6 +304,12 @@ std::vector<BasicPort> ModuleManager::module_ports_by_type(
return ports;
}
e_side ModuleManager::port_side(const ModuleId& module_id,
const ModulePortId& port_id) const {
VTR_ASSERT(valid_module_port_id(module_id, port_id));
return port_sides_[module_id][port_id];
}
/* Find a list of port ids of a module by a given types */
std::vector<ModulePortId> ModuleManager::module_port_ids_by_type(
const ModuleId& module_id, const enum e_module_port_type& port_type) const {
@ -746,6 +752,7 @@ ModuleId ModuleManager::add_module(const std::string& name) {
port_is_wire_.emplace_back();
port_is_mappable_io_.emplace_back();
port_is_register_.emplace_back();
port_sides_.emplace_back();
port_preproc_flags_.emplace_back();
num_nets_.emplace_back(0);
@ -789,6 +796,8 @@ ModulePortId ModuleManager::add_port(const ModuleId& module,
port_ids_[module].push_back(port);
ports_[module].push_back(port_info);
port_types_[module].push_back(port_type);
/* Deposit invalid value for each side */
port_sides_[module].push_back(NUM_SIDES);
port_is_wire_[module].push_back(false);
port_is_mappable_io_[module].push_back(false);
port_is_register_[module].push_back(false);
@ -893,6 +902,15 @@ void ModuleManager::set_port_preproc_flag(const ModuleId& module,
port_preproc_flags_[module][port] = preproc_flag;
}
/* Set the side for a pin of a port port */
void ModuleManager::set_port_side(const ModuleId& module,
const ModulePortId& port,
const e_side& pin_side) {
/* Must find something, otherwise drop an error */
VTR_ASSERT(valid_module_port_id(module, port));
port_sides_[module][port] = pin_side;
}
/* Add a child module to a parent module */
void ModuleManager::add_child_module(const ModuleId& parent_module,
const ModuleId& child_module,

View File

@ -9,6 +9,7 @@
#include "module_manager_fwd.h"
#include "openfpga_port.h"
#include "physical_types.h"
#include "vtr_geometry.h"
#include "vtr_vector.h"
@ -273,6 +274,10 @@ class ModuleManager {
/* Find the type of a port */
ModuleManager::e_module_port_type port_type(const ModuleId& module,
const ModulePortId& port) const;
/* Get the physical side of a port. Note that not every pin has a valid side.
* An invalid value NUM_SIDES will be returned when the pin does not has a
* specific physical location */
e_side port_side(const ModuleId& module, const ModulePortId& port) const;
/* Find if a port is a wire connection */
bool port_is_wire(const ModuleId& module, const ModulePortId& port) const;
/* Find if a port is mappable to an I/O from users' implementations */
@ -369,6 +374,11 @@ class ModuleManager {
/* Set the preprocessing flag for a port */
void set_port_preproc_flag(const ModuleId& module, const ModulePortId& port,
const std::string& preproc_flag);
/* Set side to a given pin of a module port. Note that the pin id must be a
* valid one. Otherwise, abort and error out. The valid pin range can be get
* from module_port().pins() */
void set_port_side(const ModuleId& module, const ModulePortId& port,
const e_side& pin_side);
/** @brief Add a child module to a parent module.
* By default, it considers the child module as an I/O child, and update the
* children list of I/O modules inside It not needed, just turn it off. Then
@ -626,6 +636,8 @@ class ModuleManager {
ports_; /* List of ports for each Module */
vtr::vector<ModuleId, vtr::vector<ModulePortId, enum e_module_port_type>>
port_types_; /* Type of ports */
vtr::vector<ModuleId, vtr::vector<ModulePortId, e_side>>
port_sides_; /* Type of ports */
vtr::vector<ModuleId, vtr::vector<ModulePortId, bool>>
port_is_mappable_io_; /* If the port is mappable to an I/O for user's
implementations */

View File

@ -0,0 +1,192 @@
/***************************************************************************************
* Output internal structure of module graph to XML format
***************************************************************************************/
/* Headers from system goes first */
#include <algorithm>
#include <chrono>
#include <ctime>
#include <regex>
#include <string>
/* Headers from vtrutil library */
#include "vtr_assert.h"
#include "vtr_log.h"
#include "vtr_time.h"
/* Headers from openfpgautil library */
#include "command_exit_codes.h"
#include "openfpga_digest.h"
#include "openfpga_side_manager.h"
/* Headers from arch openfpga library */
#include "fabric_pin_physical_location_xml_constants.h"
#include "write_xml_fabric_pin_physical_location.h"
#include "write_xml_utils.h"
/* begin namespace openfpga */
namespace openfpga {
/********************************************************************
* This function write header information to a pin location file
*******************************************************************/
static void write_xml_fabric_pin_physical_location_file_head(
std::fstream& fp, const bool& include_time_stamp) {
valid_file_stream(fp);
fp << "<!--" << std::endl;
fp << "\t- Fabric Pin Physical Location" << std::endl;
fp << "\t- Author: Xifan TANG" << std::endl;
fp << "\t- Organization: RapidFlex" << std::endl;
if (include_time_stamp) {
auto end = std::chrono::system_clock::now();
std::time_t end_time = std::chrono::system_clock::to_time_t(end);
fp << "\t- Date: " << std::ctime(&end_time);
}
fp << "-->" << std::endl;
fp << std::endl;
}
/********************************************************************
* This function write header information to a pin location file
*******************************************************************/
static int write_xml_fabric_module_pin_phy_loc(
std::fstream& fp, const ModuleManager& module_manager,
const ModuleId& curr_module, const bool& show_invalid_side,
const bool& verbose) {
valid_file_stream(fp);
/* If show invalid side is off, we should check if there is any valid side. If
* there are not any, skip this module */
bool skip_curr_module = true;
for (ModulePortId curr_port_id : module_manager.module_ports(curr_module)) {
SideManager side_mgr(module_manager.port_side(curr_module, curr_port_id));
if (side_mgr.validate()) {
skip_curr_module = false;
break;
}
}
if (!show_invalid_side && skip_curr_module) {
VTR_LOGV(verbose, "Skip module '%s' as it contains no valid sides\n",
module_manager.module_name(curr_module).c_str());
return CMD_EXEC_SUCCESS;
}
/* Print a head */
write_tab_to_file(fp, 1);
fp << "<" << XML_MODULE_NODE_NAME;
write_xml_attribute(fp, XML_MODULE_ATTRIBUTE_NAME,
module_manager.module_name(curr_module).c_str());
fp << ">"
<< "\n";
size_t cnt = 0;
for (ModulePortId curr_port_id : module_manager.module_ports(curr_module)) {
BasicPort curr_port = module_manager.module_port(curr_module, curr_port_id);
SideManager side_mgr(module_manager.port_side(curr_module, curr_port_id));
if (!side_mgr.validate() && !show_invalid_side) {
continue;
}
for (int curr_pin_id : curr_port.pins()) {
BasicPort curr_pin(curr_port.get_name(), curr_pin_id, curr_pin_id);
std::string curr_port_str = generate_xml_port_name(curr_pin);
write_tab_to_file(fp, 2);
fp << "<" << XML_MODULE_PINLOC_NODE_NAME;
write_xml_attribute(fp, XML_MODULE_PINLOC_ATTRIBUTE_PIN,
curr_port_str.c_str());
write_xml_attribute(fp, XML_MODULE_PINLOC_ATTRIBUTE_SIDE,
side_mgr.c_str());
fp << "/>";
fp << std::endl;
}
cnt++;
}
VTR_LOGV(verbose, "Output %lu ports with physical sides for module '%s'\n",
cnt, module_manager.module_name(curr_module).c_str());
/* Print a tail */
write_tab_to_file(fp, 1);
fp << "</" << XML_MODULE_NODE_NAME;
fp << ">"
<< "\n";
return CMD_EXEC_SUCCESS;
}
/********************************************************************
* Top-level function
*******************************************************************/
int write_xml_fabric_pin_physical_location(const char* fname,
const std::string& module_name,
const ModuleManager& module_manager,
const bool& show_invalid_side,
const bool& include_time_stamp,
const bool& verbose) {
vtr::ScopedStartFinishTimer timer("Write fabric pin physical location");
/* Create a file handler */
std::fstream fp;
/* Open the file stream */
fp.open(std::string(fname), std::fstream::out | std::fstream::trunc);
/* Validate the file stream */
openfpga::check_file_stream(fname, fp);
write_xml_fabric_pin_physical_location_file_head(fp, include_time_stamp);
/* Write the root node */
fp << "<" << XML_PINLOC_ROOT_NAME;
fp << ">"
<< "\n";
/* If module name is not specified, walk through all the modules and write
* physical pin location when any is specified */
short cnt = 0;
/* Use regular expression to capture the module whose name matches the pattern
*/
for (ModuleId curr_module : module_manager.modules()) {
std::string curr_module_name = module_manager.module_name(curr_module);
std::string pattern = module_name;
std::regex star_replace("\\*");
std::regex questionmark_replace("\\?");
std::string wildcard_pattern =
std::regex_replace(std::regex_replace(pattern, star_replace, ".*"),
questionmark_replace, ".");
std::regex wildcard_regex(wildcard_pattern);
if (!std::regex_match(curr_module_name, wildcard_regex)) {
continue;
}
VTR_LOGV(verbose, "Outputted pin physical location of module '%s'.\n",
curr_module_name.c_str());
/* Write the pin physical location for this module */
int err_code = write_xml_fabric_module_pin_phy_loc(
fp, module_manager, curr_module, show_invalid_side, verbose);
if (err_code != CMD_EXEC_SUCCESS) {
return CMD_EXEC_FATAL_ERROR;
}
cnt++;
}
/* Finish writing the root node */
fp << "</" << XML_PINLOC_ROOT_NAME << ">"
<< "\n";
/* Close the file stream */
fp.close();
/* If there is no match, error out! */
if (cnt == 0) {
VTR_LOG_ERROR(
"Invalid regular expression for module name '%s' which does not match "
"any in current fabric!\n",
module_name.c_str());
return CMD_EXEC_FATAL_ERROR;
}
VTR_LOGV(verbose, "Outputted %lu modules with pin physical location.\n", cnt);
return CMD_EXEC_SUCCESS;
}
} /* end namespace openfpga */

View File

@ -0,0 +1,27 @@
#ifndef WRITE_XML_FABRIC_PIN_PHYSICAL_LOCATION_H
#define WRITE_XML_FABRIC_PIN_PHYSICAL_LOCATION_H
/********************************************************************
* Include header files that are required by function declaration
*******************************************************************/
#include <string>
#include "module_manager.h"
/********************************************************************
* Function declaration
*******************************************************************/
/* begin namespace openfpga */
namespace openfpga {
int write_xml_fabric_pin_physical_location(const char* fname,
const std::string& module_name,
const ModuleManager& module_manager,
const bool& show_invalid_side,
const bool& include_time_stamp,
const bool& verbose);
} /* end namespace openfpga */
#endif

View File

@ -0,0 +1,79 @@
# Run VPR for the 'and' design
#--write_rr_graph example_rr_graph.xml
vpr ${VPR_ARCH_FILE} ${VPR_TESTBENCH_BLIF} --device ${OPENFPGA_VPR_DEVICE} --route_chan_width ${OPENFPGA_VPR_ROUTE_CHAN_WIDTH} --clock_modeling ideal ${OPENFPGA_VPR_EXTRA_OPTIONS}
# Read OpenFPGA architecture definition
read_openfpga_arch -f ${OPENFPGA_ARCH_FILE}
# Read OpenFPGA simulation settings
read_openfpga_simulation_setting -f ${OPENFPGA_SIM_SETTING_FILE}
# Annotate the OpenFPGA architecture to VPR data base
# to debug use --verbose options
link_openfpga_arch --sort_gsb_chan_node_in_edges
# Check and correct any naming conflicts in the BLIF netlist
check_netlist_naming_conflict --fix --report ./netlist_renaming.xml
# Optionally pb pin fixup
${OPENFPGA_PB_PIN_FIXUP_COMMAND}
# Apply fix-up to Look-Up Table truth tables based on packing results
lut_truth_table_fixup
# Build the module graph
# - Enabled compression on routing architecture modules
# - Enable pin duplication on grid modules
build_fabric --compress_routing --group_tile ${OPENFPGA_GROUP_TILE_CONFIG_FILE} #--verbose
# Write fabric phyiscal pin location to file
write_fabric_pin_physical_location --file ${OPENFPGA_FABRIC_PIN_PHY_LOC_FILE} ${OPENFPGA_FABRIC_PIN_PHY_LOC_MODULE} --verbose
# Write the fabric hierarchy of module graph to a file
# This is used by hierarchical PnR flows
write_fabric_hierarchy --file ./fabric_hierarchy.txt
# Repack the netlist to physical pbs
# This must be done before bitstream generator and testbench generation
# Strongly recommend it is done after all the fix-up have been applied
repack #--verbose
# Build the bitstream
# - Output the fabric-independent bitstream to a file
build_architecture_bitstream --verbose --write_file fabric_independent_bitstream.xml
# Build fabric-dependent bitstream
build_fabric_bitstream --verbose
# Write fabric-dependent bitstream
write_fabric_bitstream --file fabric_bitstream.bit --format plain_text
# Write the Verilog netlist for FPGA fabric
# - Enable the use of explicit port mapping in Verilog netlist
write_fabric_verilog --file ./SRC --explicit_port_mapping --include_timing --print_user_defined_template --verbose
# Write the Verilog testbench for FPGA fabric
# - We suggest the use of same output directory as fabric Verilog netlists
# - Must specify the reference benchmark file if you want to output any testbenches
# - Enable top-level testbench which is a full verification including programming circuit and core logic of FPGA
# - Enable pre-configured top-level testbench which is a fast verification skipping programming phase
# - Simulation ini file is optional and is needed only when you need to interface different HDL simulators using openfpga flow-run scripts
write_preconfigured_fabric_wrapper --embed_bitstream iverilog --file ./SRC ${OPENFPGA_VERILOG_TESTBENCH_OPTIONS}
write_preconfigured_testbench --file ./SRC --reference_benchmark_file_path ${REFERENCE_VERILOG_TESTBENCH} ${OPENFPGA_VERILOG_TESTBENCH_OPTIONS}
# Write the SDC files for PnR backend
# - Turn on every options here
# FIXME: Not supported yet.
#write_pnr_sdc --file ./SDC
# Write SDC to disable timing for configure ports
#write_sdc_disable_timing_configure_ports --file ./SDC/disable_configure_ports.sdc
# Write the SDC to run timing analysis for a mapped FPGA fabric
#write_analysis_sdc --file ./SDC_analysis
# Finish and exit OpenFPGA
exit
# Note :
# To run verification at the end of the flow maintain source in ./SRC directory

View File

@ -32,6 +32,7 @@ write_fabric_hierarchy --file ./fabric_hierarchy.txt
# Write the fabric I/O attributes to a file
# This is used by pin constraint files
write_fabric_io_info --file ${OPENFPGA_OUTPUT_DIR}/fabric_io_location.xml --verbose --no_time_stamp
write_fabric_pin_physical_location --file ${OPENFPGA_OUTPUT_DIR}/fabric_pin_phy_loc.xml --verbose --no_time_stamp --module *
# Write gsb to XML
write_gsb_to_xml --file ${OPENFPGA_OUTPUT_DIR}/gsb_xml --verbose

View File

@ -252,6 +252,12 @@ run-task basic_tests/write_gsb/write_gsb_to_xml_compress_routing $@
run-task basic_tests/write_gsb/write_unique_gsb_to_xml $@
run-task basic_tests/write_gsb/write_unique_gsb_to_xml_compress_routing $@
echo -e "Testing fabric pin physical location file"
run-task basic_tests/write_fabric_pin_phy_loc/write_fabric_pin_phy_loc_default $@
run-task basic_tests/write_fabric_pin_phy_loc/write_fabric_pin_phy_loc_for_tiles $@
run-task basic_tests/write_fabric_pin_phy_loc/write_fabric_pin_phy_loc_show_invalid_sides $@
run-task basic_tests/write_fabric_pin_phy_loc/write_fabric_pin_phy_loc_wildcards $@
echo -e "Testing bus group features";
run-task basic_tests/bus_group/preconfig_testbench_explicit_mapping $@
run-task basic_tests/bus_group/preconfig_testbench_implicit_mapping $@

View File

@ -0,0 +1,644 @@
<!--
- Fabric Pin Physical Location
- Author: Xifan TANG
- Organization: RapidFlex
-->
<pin_location>
<module name="grid_io_top">
<loc pin="bottom_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="bottom"/>
</module>
<module name="grid_io_right">
<loc pin="left_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="left"/>
</module>
<module name="grid_io_bottom">
<loc pin="top_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="top"/>
</module>
<module name="grid_io_left">
<loc pin="right_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="right"/>
</module>
<module name="grid_clb">
<loc pin="top_width_0_height_0_subtile_0__pin_I_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_0__pin_I_4_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_0__pin_I_8_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_0__pin_O_2_[0:0]" side="top"/>
<loc pin="right_width_0_height_0_subtile_0__pin_I_1_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_0__pin_I_5_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_0__pin_I_9_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_0__pin_O_3_[0:0]" side="right"/>
<loc pin="bottom_width_0_height_0_subtile_0__pin_I_2_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_0__pin_I_6_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_0__pin_O_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_0__pin_clk_0_[0:0]" side="bottom"/>
<loc pin="left_width_0_height_0_subtile_0__pin_I_3_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_0__pin_I_7_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_0__pin_O_1_[0:0]" side="left"/>
</module>
<module name="sb_0__0_">
<loc pin="chany_top_in[0:0]" side="top"/>
<loc pin="chany_top_in[1:1]" side="top"/>
<loc pin="chany_top_in[2:2]" side="top"/>
<loc pin="chany_top_in[3:3]" side="top"/>
<loc pin="chany_top_in[4:4]" side="top"/>
<loc pin="chany_top_in[5:5]" side="top"/>
<loc pin="chany_top_in[6:6]" side="top"/>
<loc pin="chany_top_in[7:7]" side="top"/>
<loc pin="chany_top_in[8:8]" side="top"/>
<loc pin="chany_top_in[9:9]" side="top"/>
<loc pin="chany_top_in[10:10]" side="top"/>
<loc pin="chany_top_in[11:11]" side="top"/>
<loc pin="chany_top_in[12:12]" side="top"/>
<loc pin="chany_top_out[0:0]" side="top"/>
<loc pin="chany_top_out[1:1]" side="top"/>
<loc pin="chany_top_out[2:2]" side="top"/>
<loc pin="chany_top_out[3:3]" side="top"/>
<loc pin="chany_top_out[4:4]" side="top"/>
<loc pin="chany_top_out[5:5]" side="top"/>
<loc pin="chany_top_out[6:6]" side="top"/>
<loc pin="chany_top_out[7:7]" side="top"/>
<loc pin="chany_top_out[8:8]" side="top"/>
<loc pin="chany_top_out[9:9]" side="top"/>
<loc pin="chany_top_out[10:10]" side="top"/>
<loc pin="chany_top_out[11:11]" side="top"/>
<loc pin="chany_top_out[12:12]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_0__pin_O_1_[0:0]" side="top"/>
<loc pin="chanx_right_in[0:0]" side="right"/>
<loc pin="chanx_right_in[1:1]" side="right"/>
<loc pin="chanx_right_in[2:2]" side="right"/>
<loc pin="chanx_right_in[3:3]" side="right"/>
<loc pin="chanx_right_in[4:4]" side="right"/>
<loc pin="chanx_right_in[5:5]" side="right"/>
<loc pin="chanx_right_in[6:6]" side="right"/>
<loc pin="chanx_right_in[7:7]" side="right"/>
<loc pin="chanx_right_in[8:8]" side="right"/>
<loc pin="chanx_right_in[9:9]" side="right"/>
<loc pin="chanx_right_in[10:10]" side="right"/>
<loc pin="chanx_right_in[11:11]" side="right"/>
<loc pin="chanx_right_in[12:12]" side="right"/>
<loc pin="chanx_right_out[0:0]" side="right"/>
<loc pin="chanx_right_out[1:1]" side="right"/>
<loc pin="chanx_right_out[2:2]" side="right"/>
<loc pin="chanx_right_out[3:3]" side="right"/>
<loc pin="chanx_right_out[4:4]" side="right"/>
<loc pin="chanx_right_out[5:5]" side="right"/>
<loc pin="chanx_right_out[6:6]" side="right"/>
<loc pin="chanx_right_out[7:7]" side="right"/>
<loc pin="chanx_right_out[8:8]" side="right"/>
<loc pin="chanx_right_out[9:9]" side="right"/>
<loc pin="chanx_right_out[10:10]" side="right"/>
<loc pin="chanx_right_out[11:11]" side="right"/>
<loc pin="chanx_right_out[12:12]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_0__pin_O_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="right"/>
</module>
<module name="sb_0__1_">
<loc pin="chanx_right_in[0:0]" side="right"/>
<loc pin="chanx_right_in[1:1]" side="right"/>
<loc pin="chanx_right_in[2:2]" side="right"/>
<loc pin="chanx_right_in[3:3]" side="right"/>
<loc pin="chanx_right_in[4:4]" side="right"/>
<loc pin="chanx_right_in[5:5]" side="right"/>
<loc pin="chanx_right_in[6:6]" side="right"/>
<loc pin="chanx_right_in[7:7]" side="right"/>
<loc pin="chanx_right_in[8:8]" side="right"/>
<loc pin="chanx_right_in[9:9]" side="right"/>
<loc pin="chanx_right_in[10:10]" side="right"/>
<loc pin="chanx_right_in[11:11]" side="right"/>
<loc pin="chanx_right_in[12:12]" side="right"/>
<loc pin="chanx_right_out[0:0]" side="right"/>
<loc pin="chanx_right_out[1:1]" side="right"/>
<loc pin="chanx_right_out[2:2]" side="right"/>
<loc pin="chanx_right_out[3:3]" side="right"/>
<loc pin="chanx_right_out[4:4]" side="right"/>
<loc pin="chanx_right_out[5:5]" side="right"/>
<loc pin="chanx_right_out[6:6]" side="right"/>
<loc pin="chanx_right_out[7:7]" side="right"/>
<loc pin="chanx_right_out[8:8]" side="right"/>
<loc pin="chanx_right_out[9:9]" side="right"/>
<loc pin="chanx_right_out[10:10]" side="right"/>
<loc pin="chanx_right_out[11:11]" side="right"/>
<loc pin="chanx_right_out[12:12]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_0__pin_O_2_[0:0]" side="right"/>
<loc pin="chany_bottom_in[0:0]" side="bottom"/>
<loc pin="chany_bottom_in[1:1]" side="bottom"/>
<loc pin="chany_bottom_in[2:2]" side="bottom"/>
<loc pin="chany_bottom_in[3:3]" side="bottom"/>
<loc pin="chany_bottom_in[4:4]" side="bottom"/>
<loc pin="chany_bottom_in[5:5]" side="bottom"/>
<loc pin="chany_bottom_in[6:6]" side="bottom"/>
<loc pin="chany_bottom_in[7:7]" side="bottom"/>
<loc pin="chany_bottom_in[8:8]" side="bottom"/>
<loc pin="chany_bottom_in[9:9]" side="bottom"/>
<loc pin="chany_bottom_in[10:10]" side="bottom"/>
<loc pin="chany_bottom_in[11:11]" side="bottom"/>
<loc pin="chany_bottom_in[12:12]" side="bottom"/>
<loc pin="chany_bottom_out[0:0]" side="bottom"/>
<loc pin="chany_bottom_out[1:1]" side="bottom"/>
<loc pin="chany_bottom_out[2:2]" side="bottom"/>
<loc pin="chany_bottom_out[3:3]" side="bottom"/>
<loc pin="chany_bottom_out[4:4]" side="bottom"/>
<loc pin="chany_bottom_out[5:5]" side="bottom"/>
<loc pin="chany_bottom_out[6:6]" side="bottom"/>
<loc pin="chany_bottom_out[7:7]" side="bottom"/>
<loc pin="chany_bottom_out[8:8]" side="bottom"/>
<loc pin="chany_bottom_out[9:9]" side="bottom"/>
<loc pin="chany_bottom_out[10:10]" side="bottom"/>
<loc pin="chany_bottom_out[11:11]" side="bottom"/>
<loc pin="chany_bottom_out[12:12]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_0__pin_O_1_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="bottom"/>
</module>
<module name="sb_1__0_">
<loc pin="chany_top_in[0:0]" side="top"/>
<loc pin="chany_top_in[1:1]" side="top"/>
<loc pin="chany_top_in[2:2]" side="top"/>
<loc pin="chany_top_in[3:3]" side="top"/>
<loc pin="chany_top_in[4:4]" side="top"/>
<loc pin="chany_top_in[5:5]" side="top"/>
<loc pin="chany_top_in[6:6]" side="top"/>
<loc pin="chany_top_in[7:7]" side="top"/>
<loc pin="chany_top_in[8:8]" side="top"/>
<loc pin="chany_top_in[9:9]" side="top"/>
<loc pin="chany_top_in[10:10]" side="top"/>
<loc pin="chany_top_in[11:11]" side="top"/>
<loc pin="chany_top_in[12:12]" side="top"/>
<loc pin="chany_top_out[0:0]" side="top"/>
<loc pin="chany_top_out[1:1]" side="top"/>
<loc pin="chany_top_out[2:2]" side="top"/>
<loc pin="chany_top_out[3:3]" side="top"/>
<loc pin="chany_top_out[4:4]" side="top"/>
<loc pin="chany_top_out[5:5]" side="top"/>
<loc pin="chany_top_out[6:6]" side="top"/>
<loc pin="chany_top_out[7:7]" side="top"/>
<loc pin="chany_top_out[8:8]" side="top"/>
<loc pin="chany_top_out[9:9]" side="top"/>
<loc pin="chany_top_out[10:10]" side="top"/>
<loc pin="chany_top_out[11:11]" side="top"/>
<loc pin="chany_top_out[12:12]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_0__pin_O_3_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="top"/>
<loc pin="chanx_left_in[0:0]" side="left"/>
<loc pin="chanx_left_in[1:1]" side="left"/>
<loc pin="chanx_left_in[2:2]" side="left"/>
<loc pin="chanx_left_in[3:3]" side="left"/>
<loc pin="chanx_left_in[4:4]" side="left"/>
<loc pin="chanx_left_in[5:5]" side="left"/>
<loc pin="chanx_left_in[6:6]" side="left"/>
<loc pin="chanx_left_in[7:7]" side="left"/>
<loc pin="chanx_left_in[8:8]" side="left"/>
<loc pin="chanx_left_in[9:9]" side="left"/>
<loc pin="chanx_left_in[10:10]" side="left"/>
<loc pin="chanx_left_in[11:11]" side="left"/>
<loc pin="chanx_left_in[12:12]" side="left"/>
<loc pin="chanx_left_out[0:0]" side="left"/>
<loc pin="chanx_left_out[1:1]" side="left"/>
<loc pin="chanx_left_out[2:2]" side="left"/>
<loc pin="chanx_left_out[3:3]" side="left"/>
<loc pin="chanx_left_out[4:4]" side="left"/>
<loc pin="chanx_left_out[5:5]" side="left"/>
<loc pin="chanx_left_out[6:6]" side="left"/>
<loc pin="chanx_left_out[7:7]" side="left"/>
<loc pin="chanx_left_out[8:8]" side="left"/>
<loc pin="chanx_left_out[9:9]" side="left"/>
<loc pin="chanx_left_out[10:10]" side="left"/>
<loc pin="chanx_left_out[11:11]" side="left"/>
<loc pin="chanx_left_out[12:12]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_0__pin_O_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="left"/>
</module>
<module name="sb_1__1_">
<loc pin="chany_bottom_in[0:0]" side="bottom"/>
<loc pin="chany_bottom_in[1:1]" side="bottom"/>
<loc pin="chany_bottom_in[2:2]" side="bottom"/>
<loc pin="chany_bottom_in[3:3]" side="bottom"/>
<loc pin="chany_bottom_in[4:4]" side="bottom"/>
<loc pin="chany_bottom_in[5:5]" side="bottom"/>
<loc pin="chany_bottom_in[6:6]" side="bottom"/>
<loc pin="chany_bottom_in[7:7]" side="bottom"/>
<loc pin="chany_bottom_in[8:8]" side="bottom"/>
<loc pin="chany_bottom_in[9:9]" side="bottom"/>
<loc pin="chany_bottom_in[10:10]" side="bottom"/>
<loc pin="chany_bottom_in[11:11]" side="bottom"/>
<loc pin="chany_bottom_in[12:12]" side="bottom"/>
<loc pin="chany_bottom_out[0:0]" side="bottom"/>
<loc pin="chany_bottom_out[1:1]" side="bottom"/>
<loc pin="chany_bottom_out[2:2]" side="bottom"/>
<loc pin="chany_bottom_out[3:3]" side="bottom"/>
<loc pin="chany_bottom_out[4:4]" side="bottom"/>
<loc pin="chany_bottom_out[5:5]" side="bottom"/>
<loc pin="chany_bottom_out[6:6]" side="bottom"/>
<loc pin="chany_bottom_out[7:7]" side="bottom"/>
<loc pin="chany_bottom_out[8:8]" side="bottom"/>
<loc pin="chany_bottom_out[9:9]" side="bottom"/>
<loc pin="chany_bottom_out[10:10]" side="bottom"/>
<loc pin="chany_bottom_out[11:11]" side="bottom"/>
<loc pin="chany_bottom_out[12:12]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_0__pin_O_3_[0:0]" side="bottom"/>
<loc pin="chanx_left_in[0:0]" side="left"/>
<loc pin="chanx_left_in[1:1]" side="left"/>
<loc pin="chanx_left_in[2:2]" side="left"/>
<loc pin="chanx_left_in[3:3]" side="left"/>
<loc pin="chanx_left_in[4:4]" side="left"/>
<loc pin="chanx_left_in[5:5]" side="left"/>
<loc pin="chanx_left_in[6:6]" side="left"/>
<loc pin="chanx_left_in[7:7]" side="left"/>
<loc pin="chanx_left_in[8:8]" side="left"/>
<loc pin="chanx_left_in[9:9]" side="left"/>
<loc pin="chanx_left_in[10:10]" side="left"/>
<loc pin="chanx_left_in[11:11]" side="left"/>
<loc pin="chanx_left_in[12:12]" side="left"/>
<loc pin="chanx_left_out[0:0]" side="left"/>
<loc pin="chanx_left_out[1:1]" side="left"/>
<loc pin="chanx_left_out[2:2]" side="left"/>
<loc pin="chanx_left_out[3:3]" side="left"/>
<loc pin="chanx_left_out[4:4]" side="left"/>
<loc pin="chanx_left_out[5:5]" side="left"/>
<loc pin="chanx_left_out[6:6]" side="left"/>
<loc pin="chanx_left_out[7:7]" side="left"/>
<loc pin="chanx_left_out[8:8]" side="left"/>
<loc pin="chanx_left_out[9:9]" side="left"/>
<loc pin="chanx_left_out[10:10]" side="left"/>
<loc pin="chanx_left_out[11:11]" side="left"/>
<loc pin="chanx_left_out[12:12]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_0__pin_O_2_[0:0]" side="left"/>
</module>
<module name="cbx_1__0_">
<loc pin="chanx_left_in[0:0]" side="left"/>
<loc pin="chanx_left_in[1:1]" side="left"/>
<loc pin="chanx_left_in[2:2]" side="left"/>
<loc pin="chanx_left_in[3:3]" side="left"/>
<loc pin="chanx_left_in[4:4]" side="left"/>
<loc pin="chanx_left_in[5:5]" side="left"/>
<loc pin="chanx_left_in[6:6]" side="left"/>
<loc pin="chanx_left_in[7:7]" side="left"/>
<loc pin="chanx_left_in[8:8]" side="left"/>
<loc pin="chanx_left_in[9:9]" side="left"/>
<loc pin="chanx_left_in[10:10]" side="left"/>
<loc pin="chanx_left_in[11:11]" side="left"/>
<loc pin="chanx_left_in[12:12]" side="left"/>
<loc pin="chanx_right_in[0:0]" side="right"/>
<loc pin="chanx_right_in[1:1]" side="right"/>
<loc pin="chanx_right_in[2:2]" side="right"/>
<loc pin="chanx_right_in[3:3]" side="right"/>
<loc pin="chanx_right_in[4:4]" side="right"/>
<loc pin="chanx_right_in[5:5]" side="right"/>
<loc pin="chanx_right_in[6:6]" side="right"/>
<loc pin="chanx_right_in[7:7]" side="right"/>
<loc pin="chanx_right_in[8:8]" side="right"/>
<loc pin="chanx_right_in[9:9]" side="right"/>
<loc pin="chanx_right_in[10:10]" side="right"/>
<loc pin="chanx_right_in[11:11]" side="right"/>
<loc pin="chanx_right_in[12:12]" side="right"/>
<loc pin="chanx_left_out[0:0]" side="left"/>
<loc pin="chanx_left_out[1:1]" side="left"/>
<loc pin="chanx_left_out[2:2]" side="left"/>
<loc pin="chanx_left_out[3:3]" side="left"/>
<loc pin="chanx_left_out[4:4]" side="left"/>
<loc pin="chanx_left_out[5:5]" side="left"/>
<loc pin="chanx_left_out[6:6]" side="left"/>
<loc pin="chanx_left_out[7:7]" side="left"/>
<loc pin="chanx_left_out[8:8]" side="left"/>
<loc pin="chanx_left_out[9:9]" side="left"/>
<loc pin="chanx_left_out[10:10]" side="left"/>
<loc pin="chanx_left_out[11:11]" side="left"/>
<loc pin="chanx_left_out[12:12]" side="left"/>
<loc pin="chanx_right_out[0:0]" side="right"/>
<loc pin="chanx_right_out[1:1]" side="right"/>
<loc pin="chanx_right_out[2:2]" side="right"/>
<loc pin="chanx_right_out[3:3]" side="right"/>
<loc pin="chanx_right_out[4:4]" side="right"/>
<loc pin="chanx_right_out[5:5]" side="right"/>
<loc pin="chanx_right_out[6:6]" side="right"/>
<loc pin="chanx_right_out[7:7]" side="right"/>
<loc pin="chanx_right_out[8:8]" side="right"/>
<loc pin="chanx_right_out[9:9]" side="right"/>
<loc pin="chanx_right_out[10:10]" side="right"/>
<loc pin="chanx_right_out[11:11]" side="right"/>
<loc pin="chanx_right_out[12:12]" side="right"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_0__pin_I_2_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_0__pin_I_6_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_0__pin_clk_0_[0:0]" side="top"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="bottom"/>
</module>
<module name="cbx_1__1_">
<loc pin="chanx_left_in[0:0]" side="left"/>
<loc pin="chanx_left_in[1:1]" side="left"/>
<loc pin="chanx_left_in[2:2]" side="left"/>
<loc pin="chanx_left_in[3:3]" side="left"/>
<loc pin="chanx_left_in[4:4]" side="left"/>
<loc pin="chanx_left_in[5:5]" side="left"/>
<loc pin="chanx_left_in[6:6]" side="left"/>
<loc pin="chanx_left_in[7:7]" side="left"/>
<loc pin="chanx_left_in[8:8]" side="left"/>
<loc pin="chanx_left_in[9:9]" side="left"/>
<loc pin="chanx_left_in[10:10]" side="left"/>
<loc pin="chanx_left_in[11:11]" side="left"/>
<loc pin="chanx_left_in[12:12]" side="left"/>
<loc pin="chanx_right_in[0:0]" side="right"/>
<loc pin="chanx_right_in[1:1]" side="right"/>
<loc pin="chanx_right_in[2:2]" side="right"/>
<loc pin="chanx_right_in[3:3]" side="right"/>
<loc pin="chanx_right_in[4:4]" side="right"/>
<loc pin="chanx_right_in[5:5]" side="right"/>
<loc pin="chanx_right_in[6:6]" side="right"/>
<loc pin="chanx_right_in[7:7]" side="right"/>
<loc pin="chanx_right_in[8:8]" side="right"/>
<loc pin="chanx_right_in[9:9]" side="right"/>
<loc pin="chanx_right_in[10:10]" side="right"/>
<loc pin="chanx_right_in[11:11]" side="right"/>
<loc pin="chanx_right_in[12:12]" side="right"/>
<loc pin="chanx_left_out[0:0]" side="left"/>
<loc pin="chanx_left_out[1:1]" side="left"/>
<loc pin="chanx_left_out[2:2]" side="left"/>
<loc pin="chanx_left_out[3:3]" side="left"/>
<loc pin="chanx_left_out[4:4]" side="left"/>
<loc pin="chanx_left_out[5:5]" side="left"/>
<loc pin="chanx_left_out[6:6]" side="left"/>
<loc pin="chanx_left_out[7:7]" side="left"/>
<loc pin="chanx_left_out[8:8]" side="left"/>
<loc pin="chanx_left_out[9:9]" side="left"/>
<loc pin="chanx_left_out[10:10]" side="left"/>
<loc pin="chanx_left_out[11:11]" side="left"/>
<loc pin="chanx_left_out[12:12]" side="left"/>
<loc pin="chanx_right_out[0:0]" side="right"/>
<loc pin="chanx_right_out[1:1]" side="right"/>
<loc pin="chanx_right_out[2:2]" side="right"/>
<loc pin="chanx_right_out[3:3]" side="right"/>
<loc pin="chanx_right_out[4:4]" side="right"/>
<loc pin="chanx_right_out[5:5]" side="right"/>
<loc pin="chanx_right_out[6:6]" side="right"/>
<loc pin="chanx_right_out[7:7]" side="right"/>
<loc pin="chanx_right_out[8:8]" side="right"/>
<loc pin="chanx_right_out[9:9]" side="right"/>
<loc pin="chanx_right_out[10:10]" side="right"/>
<loc pin="chanx_right_out[11:11]" side="right"/>
<loc pin="chanx_right_out[12:12]" side="right"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="top"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_0__pin_I_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_0__pin_I_4_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_0__pin_I_8_[0:0]" side="bottom"/>
</module>
<module name="cby_0__1_">
<loc pin="chany_bottom_in[0:0]" side="bottom"/>
<loc pin="chany_bottom_in[1:1]" side="bottom"/>
<loc pin="chany_bottom_in[2:2]" side="bottom"/>
<loc pin="chany_bottom_in[3:3]" side="bottom"/>
<loc pin="chany_bottom_in[4:4]" side="bottom"/>
<loc pin="chany_bottom_in[5:5]" side="bottom"/>
<loc pin="chany_bottom_in[6:6]" side="bottom"/>
<loc pin="chany_bottom_in[7:7]" side="bottom"/>
<loc pin="chany_bottom_in[8:8]" side="bottom"/>
<loc pin="chany_bottom_in[9:9]" side="bottom"/>
<loc pin="chany_bottom_in[10:10]" side="bottom"/>
<loc pin="chany_bottom_in[11:11]" side="bottom"/>
<loc pin="chany_bottom_in[12:12]" side="bottom"/>
<loc pin="chany_top_in[0:0]" side="top"/>
<loc pin="chany_top_in[1:1]" side="top"/>
<loc pin="chany_top_in[2:2]" side="top"/>
<loc pin="chany_top_in[3:3]" side="top"/>
<loc pin="chany_top_in[4:4]" side="top"/>
<loc pin="chany_top_in[5:5]" side="top"/>
<loc pin="chany_top_in[6:6]" side="top"/>
<loc pin="chany_top_in[7:7]" side="top"/>
<loc pin="chany_top_in[8:8]" side="top"/>
<loc pin="chany_top_in[9:9]" side="top"/>
<loc pin="chany_top_in[10:10]" side="top"/>
<loc pin="chany_top_in[11:11]" side="top"/>
<loc pin="chany_top_in[12:12]" side="top"/>
<loc pin="chany_bottom_out[0:0]" side="bottom"/>
<loc pin="chany_bottom_out[1:1]" side="bottom"/>
<loc pin="chany_bottom_out[2:2]" side="bottom"/>
<loc pin="chany_bottom_out[3:3]" side="bottom"/>
<loc pin="chany_bottom_out[4:4]" side="bottom"/>
<loc pin="chany_bottom_out[5:5]" side="bottom"/>
<loc pin="chany_bottom_out[6:6]" side="bottom"/>
<loc pin="chany_bottom_out[7:7]" side="bottom"/>
<loc pin="chany_bottom_out[8:8]" side="bottom"/>
<loc pin="chany_bottom_out[9:9]" side="bottom"/>
<loc pin="chany_bottom_out[10:10]" side="bottom"/>
<loc pin="chany_bottom_out[11:11]" side="bottom"/>
<loc pin="chany_bottom_out[12:12]" side="bottom"/>
<loc pin="chany_top_out[0:0]" side="top"/>
<loc pin="chany_top_out[1:1]" side="top"/>
<loc pin="chany_top_out[2:2]" side="top"/>
<loc pin="chany_top_out[3:3]" side="top"/>
<loc pin="chany_top_out[4:4]" side="top"/>
<loc pin="chany_top_out[5:5]" side="top"/>
<loc pin="chany_top_out[6:6]" side="top"/>
<loc pin="chany_top_out[7:7]" side="top"/>
<loc pin="chany_top_out[8:8]" side="top"/>
<loc pin="chany_top_out[9:9]" side="top"/>
<loc pin="chany_top_out[10:10]" side="top"/>
<loc pin="chany_top_out[11:11]" side="top"/>
<loc pin="chany_top_out[12:12]" side="top"/>
<loc pin="right_grid_left_width_0_height_0_subtile_0__pin_I_3_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_0__pin_I_7_[0:0]" side="right"/>
<loc pin="left_grid_right_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="left"/>
</module>
<module name="cby_1__1_">
<loc pin="chany_bottom_in[0:0]" side="bottom"/>
<loc pin="chany_bottom_in[1:1]" side="bottom"/>
<loc pin="chany_bottom_in[2:2]" side="bottom"/>
<loc pin="chany_bottom_in[3:3]" side="bottom"/>
<loc pin="chany_bottom_in[4:4]" side="bottom"/>
<loc pin="chany_bottom_in[5:5]" side="bottom"/>
<loc pin="chany_bottom_in[6:6]" side="bottom"/>
<loc pin="chany_bottom_in[7:7]" side="bottom"/>
<loc pin="chany_bottom_in[8:8]" side="bottom"/>
<loc pin="chany_bottom_in[9:9]" side="bottom"/>
<loc pin="chany_bottom_in[10:10]" side="bottom"/>
<loc pin="chany_bottom_in[11:11]" side="bottom"/>
<loc pin="chany_bottom_in[12:12]" side="bottom"/>
<loc pin="chany_top_in[0:0]" side="top"/>
<loc pin="chany_top_in[1:1]" side="top"/>
<loc pin="chany_top_in[2:2]" side="top"/>
<loc pin="chany_top_in[3:3]" side="top"/>
<loc pin="chany_top_in[4:4]" side="top"/>
<loc pin="chany_top_in[5:5]" side="top"/>
<loc pin="chany_top_in[6:6]" side="top"/>
<loc pin="chany_top_in[7:7]" side="top"/>
<loc pin="chany_top_in[8:8]" side="top"/>
<loc pin="chany_top_in[9:9]" side="top"/>
<loc pin="chany_top_in[10:10]" side="top"/>
<loc pin="chany_top_in[11:11]" side="top"/>
<loc pin="chany_top_in[12:12]" side="top"/>
<loc pin="chany_bottom_out[0:0]" side="bottom"/>
<loc pin="chany_bottom_out[1:1]" side="bottom"/>
<loc pin="chany_bottom_out[2:2]" side="bottom"/>
<loc pin="chany_bottom_out[3:3]" side="bottom"/>
<loc pin="chany_bottom_out[4:4]" side="bottom"/>
<loc pin="chany_bottom_out[5:5]" side="bottom"/>
<loc pin="chany_bottom_out[6:6]" side="bottom"/>
<loc pin="chany_bottom_out[7:7]" side="bottom"/>
<loc pin="chany_bottom_out[8:8]" side="bottom"/>
<loc pin="chany_bottom_out[9:9]" side="bottom"/>
<loc pin="chany_bottom_out[10:10]" side="bottom"/>
<loc pin="chany_bottom_out[11:11]" side="bottom"/>
<loc pin="chany_bottom_out[12:12]" side="bottom"/>
<loc pin="chany_top_out[0:0]" side="top"/>
<loc pin="chany_top_out[1:1]" side="top"/>
<loc pin="chany_top_out[2:2]" side="top"/>
<loc pin="chany_top_out[3:3]" side="top"/>
<loc pin="chany_top_out[4:4]" side="top"/>
<loc pin="chany_top_out[5:5]" side="top"/>
<loc pin="chany_top_out[6:6]" side="top"/>
<loc pin="chany_top_out[7:7]" side="top"/>
<loc pin="chany_top_out[8:8]" side="top"/>
<loc pin="chany_top_out[9:9]" side="top"/>
<loc pin="chany_top_out[10:10]" side="top"/>
<loc pin="chany_top_out[11:11]" side="top"/>
<loc pin="chany_top_out[12:12]" side="top"/>
<loc pin="right_grid_left_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="right"/>
<loc pin="left_grid_right_width_0_height_0_subtile_0__pin_I_1_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_0__pin_I_5_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_0__pin_I_9_[0:0]" side="left"/>
</module>
</pin_location>

View File

@ -0,0 +1,644 @@
<!--
- Fabric Pin Physical Location
- Author: Xifan TANG
- Organization: RapidFlex
-->
<pin_location>
<module name="grid_io_top">
<loc pin="bottom_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="bottom"/>
</module>
<module name="grid_io_right">
<loc pin="left_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="left"/>
</module>
<module name="grid_io_bottom">
<loc pin="top_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="top"/>
</module>
<module name="grid_io_left">
<loc pin="right_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="right"/>
</module>
<module name="grid_clb">
<loc pin="top_width_0_height_0_subtile_0__pin_I_0_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_0__pin_I_4_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_0__pin_I_8_[0:0]" side="top"/>
<loc pin="top_width_0_height_0_subtile_0__pin_O_2_[0:0]" side="top"/>
<loc pin="right_width_0_height_0_subtile_0__pin_I_1_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_0__pin_I_5_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_0__pin_I_9_[0:0]" side="right"/>
<loc pin="right_width_0_height_0_subtile_0__pin_O_3_[0:0]" side="right"/>
<loc pin="bottom_width_0_height_0_subtile_0__pin_I_2_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_0__pin_I_6_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_0__pin_O_0_[0:0]" side="bottom"/>
<loc pin="bottom_width_0_height_0_subtile_0__pin_clk_0_[0:0]" side="bottom"/>
<loc pin="left_width_0_height_0_subtile_0__pin_I_3_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_0__pin_I_7_[0:0]" side="left"/>
<loc pin="left_width_0_height_0_subtile_0__pin_O_1_[0:0]" side="left"/>
</module>
<module name="sb_0__0_">
<loc pin="chany_top_in[0:0]" side="top"/>
<loc pin="chany_top_in[1:1]" side="top"/>
<loc pin="chany_top_in[2:2]" side="top"/>
<loc pin="chany_top_in[3:3]" side="top"/>
<loc pin="chany_top_in[4:4]" side="top"/>
<loc pin="chany_top_in[5:5]" side="top"/>
<loc pin="chany_top_in[6:6]" side="top"/>
<loc pin="chany_top_in[7:7]" side="top"/>
<loc pin="chany_top_in[8:8]" side="top"/>
<loc pin="chany_top_in[9:9]" side="top"/>
<loc pin="chany_top_in[10:10]" side="top"/>
<loc pin="chany_top_in[11:11]" side="top"/>
<loc pin="chany_top_in[12:12]" side="top"/>
<loc pin="chany_top_out[0:0]" side="top"/>
<loc pin="chany_top_out[1:1]" side="top"/>
<loc pin="chany_top_out[2:2]" side="top"/>
<loc pin="chany_top_out[3:3]" side="top"/>
<loc pin="chany_top_out[4:4]" side="top"/>
<loc pin="chany_top_out[5:5]" side="top"/>
<loc pin="chany_top_out[6:6]" side="top"/>
<loc pin="chany_top_out[7:7]" side="top"/>
<loc pin="chany_top_out[8:8]" side="top"/>
<loc pin="chany_top_out[9:9]" side="top"/>
<loc pin="chany_top_out[10:10]" side="top"/>
<loc pin="chany_top_out[11:11]" side="top"/>
<loc pin="chany_top_out[12:12]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_0__pin_O_1_[0:0]" side="top"/>
<loc pin="chanx_right_in[0:0]" side="right"/>
<loc pin="chanx_right_in[1:1]" side="right"/>
<loc pin="chanx_right_in[2:2]" side="right"/>
<loc pin="chanx_right_in[3:3]" side="right"/>
<loc pin="chanx_right_in[4:4]" side="right"/>
<loc pin="chanx_right_in[5:5]" side="right"/>
<loc pin="chanx_right_in[6:6]" side="right"/>
<loc pin="chanx_right_in[7:7]" side="right"/>
<loc pin="chanx_right_in[8:8]" side="right"/>
<loc pin="chanx_right_in[9:9]" side="right"/>
<loc pin="chanx_right_in[10:10]" side="right"/>
<loc pin="chanx_right_in[11:11]" side="right"/>
<loc pin="chanx_right_in[12:12]" side="right"/>
<loc pin="chanx_right_out[0:0]" side="right"/>
<loc pin="chanx_right_out[1:1]" side="right"/>
<loc pin="chanx_right_out[2:2]" side="right"/>
<loc pin="chanx_right_out[3:3]" side="right"/>
<loc pin="chanx_right_out[4:4]" side="right"/>
<loc pin="chanx_right_out[5:5]" side="right"/>
<loc pin="chanx_right_out[6:6]" side="right"/>
<loc pin="chanx_right_out[7:7]" side="right"/>
<loc pin="chanx_right_out[8:8]" side="right"/>
<loc pin="chanx_right_out[9:9]" side="right"/>
<loc pin="chanx_right_out[10:10]" side="right"/>
<loc pin="chanx_right_out[11:11]" side="right"/>
<loc pin="chanx_right_out[12:12]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_0__pin_O_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="right"/>
</module>
<module name="sb_0__1_">
<loc pin="chanx_right_in[0:0]" side="right"/>
<loc pin="chanx_right_in[1:1]" side="right"/>
<loc pin="chanx_right_in[2:2]" side="right"/>
<loc pin="chanx_right_in[3:3]" side="right"/>
<loc pin="chanx_right_in[4:4]" side="right"/>
<loc pin="chanx_right_in[5:5]" side="right"/>
<loc pin="chanx_right_in[6:6]" side="right"/>
<loc pin="chanx_right_in[7:7]" side="right"/>
<loc pin="chanx_right_in[8:8]" side="right"/>
<loc pin="chanx_right_in[9:9]" side="right"/>
<loc pin="chanx_right_in[10:10]" side="right"/>
<loc pin="chanx_right_in[11:11]" side="right"/>
<loc pin="chanx_right_in[12:12]" side="right"/>
<loc pin="chanx_right_out[0:0]" side="right"/>
<loc pin="chanx_right_out[1:1]" side="right"/>
<loc pin="chanx_right_out[2:2]" side="right"/>
<loc pin="chanx_right_out[3:3]" side="right"/>
<loc pin="chanx_right_out[4:4]" side="right"/>
<loc pin="chanx_right_out[5:5]" side="right"/>
<loc pin="chanx_right_out[6:6]" side="right"/>
<loc pin="chanx_right_out[7:7]" side="right"/>
<loc pin="chanx_right_out[8:8]" side="right"/>
<loc pin="chanx_right_out[9:9]" side="right"/>
<loc pin="chanx_right_out[10:10]" side="right"/>
<loc pin="chanx_right_out[11:11]" side="right"/>
<loc pin="chanx_right_out[12:12]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_top_grid_bottom_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="right"/>
<loc pin="right_bottom_grid_top_width_0_height_0_subtile_0__pin_O_2_[0:0]" side="right"/>
<loc pin="chany_bottom_in[0:0]" side="bottom"/>
<loc pin="chany_bottom_in[1:1]" side="bottom"/>
<loc pin="chany_bottom_in[2:2]" side="bottom"/>
<loc pin="chany_bottom_in[3:3]" side="bottom"/>
<loc pin="chany_bottom_in[4:4]" side="bottom"/>
<loc pin="chany_bottom_in[5:5]" side="bottom"/>
<loc pin="chany_bottom_in[6:6]" side="bottom"/>
<loc pin="chany_bottom_in[7:7]" side="bottom"/>
<loc pin="chany_bottom_in[8:8]" side="bottom"/>
<loc pin="chany_bottom_in[9:9]" side="bottom"/>
<loc pin="chany_bottom_in[10:10]" side="bottom"/>
<loc pin="chany_bottom_in[11:11]" side="bottom"/>
<loc pin="chany_bottom_in[12:12]" side="bottom"/>
<loc pin="chany_bottom_out[0:0]" side="bottom"/>
<loc pin="chany_bottom_out[1:1]" side="bottom"/>
<loc pin="chany_bottom_out[2:2]" side="bottom"/>
<loc pin="chany_bottom_out[3:3]" side="bottom"/>
<loc pin="chany_bottom_out[4:4]" side="bottom"/>
<loc pin="chany_bottom_out[5:5]" side="bottom"/>
<loc pin="chany_bottom_out[6:6]" side="bottom"/>
<loc pin="chany_bottom_out[7:7]" side="bottom"/>
<loc pin="chany_bottom_out[8:8]" side="bottom"/>
<loc pin="chany_bottom_out[9:9]" side="bottom"/>
<loc pin="chany_bottom_out[10:10]" side="bottom"/>
<loc pin="chany_bottom_out[11:11]" side="bottom"/>
<loc pin="chany_bottom_out[12:12]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_0__pin_O_1_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="bottom"/>
</module>
<module name="sb_1__0_">
<loc pin="chany_top_in[0:0]" side="top"/>
<loc pin="chany_top_in[1:1]" side="top"/>
<loc pin="chany_top_in[2:2]" side="top"/>
<loc pin="chany_top_in[3:3]" side="top"/>
<loc pin="chany_top_in[4:4]" side="top"/>
<loc pin="chany_top_in[5:5]" side="top"/>
<loc pin="chany_top_in[6:6]" side="top"/>
<loc pin="chany_top_in[7:7]" side="top"/>
<loc pin="chany_top_in[8:8]" side="top"/>
<loc pin="chany_top_in[9:9]" side="top"/>
<loc pin="chany_top_in[10:10]" side="top"/>
<loc pin="chany_top_in[11:11]" side="top"/>
<loc pin="chany_top_in[12:12]" side="top"/>
<loc pin="chany_top_out[0:0]" side="top"/>
<loc pin="chany_top_out[1:1]" side="top"/>
<loc pin="chany_top_out[2:2]" side="top"/>
<loc pin="chany_top_out[3:3]" side="top"/>
<loc pin="chany_top_out[4:4]" side="top"/>
<loc pin="chany_top_out[5:5]" side="top"/>
<loc pin="chany_top_out[6:6]" side="top"/>
<loc pin="chany_top_out[7:7]" side="top"/>
<loc pin="chany_top_out[8:8]" side="top"/>
<loc pin="chany_top_out[9:9]" side="top"/>
<loc pin="chany_top_out[10:10]" side="top"/>
<loc pin="chany_top_out[11:11]" side="top"/>
<loc pin="chany_top_out[12:12]" side="top"/>
<loc pin="top_left_grid_right_width_0_height_0_subtile_0__pin_O_3_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="top"/>
<loc pin="top_right_grid_left_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="top"/>
<loc pin="chanx_left_in[0:0]" side="left"/>
<loc pin="chanx_left_in[1:1]" side="left"/>
<loc pin="chanx_left_in[2:2]" side="left"/>
<loc pin="chanx_left_in[3:3]" side="left"/>
<loc pin="chanx_left_in[4:4]" side="left"/>
<loc pin="chanx_left_in[5:5]" side="left"/>
<loc pin="chanx_left_in[6:6]" side="left"/>
<loc pin="chanx_left_in[7:7]" side="left"/>
<loc pin="chanx_left_in[8:8]" side="left"/>
<loc pin="chanx_left_in[9:9]" side="left"/>
<loc pin="chanx_left_in[10:10]" side="left"/>
<loc pin="chanx_left_in[11:11]" side="left"/>
<loc pin="chanx_left_in[12:12]" side="left"/>
<loc pin="chanx_left_out[0:0]" side="left"/>
<loc pin="chanx_left_out[1:1]" side="left"/>
<loc pin="chanx_left_out[2:2]" side="left"/>
<loc pin="chanx_left_out[3:3]" side="left"/>
<loc pin="chanx_left_out[4:4]" side="left"/>
<loc pin="chanx_left_out[5:5]" side="left"/>
<loc pin="chanx_left_out[6:6]" side="left"/>
<loc pin="chanx_left_out[7:7]" side="left"/>
<loc pin="chanx_left_out[8:8]" side="left"/>
<loc pin="chanx_left_out[9:9]" side="left"/>
<loc pin="chanx_left_out[10:10]" side="left"/>
<loc pin="chanx_left_out[11:11]" side="left"/>
<loc pin="chanx_left_out[12:12]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_0__pin_O_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="left"/>
</module>
<module name="sb_1__1_">
<loc pin="chany_bottom_in[0:0]" side="bottom"/>
<loc pin="chany_bottom_in[1:1]" side="bottom"/>
<loc pin="chany_bottom_in[2:2]" side="bottom"/>
<loc pin="chany_bottom_in[3:3]" side="bottom"/>
<loc pin="chany_bottom_in[4:4]" side="bottom"/>
<loc pin="chany_bottom_in[5:5]" side="bottom"/>
<loc pin="chany_bottom_in[6:6]" side="bottom"/>
<loc pin="chany_bottom_in[7:7]" side="bottom"/>
<loc pin="chany_bottom_in[8:8]" side="bottom"/>
<loc pin="chany_bottom_in[9:9]" side="bottom"/>
<loc pin="chany_bottom_in[10:10]" side="bottom"/>
<loc pin="chany_bottom_in[11:11]" side="bottom"/>
<loc pin="chany_bottom_in[12:12]" side="bottom"/>
<loc pin="chany_bottom_out[0:0]" side="bottom"/>
<loc pin="chany_bottom_out[1:1]" side="bottom"/>
<loc pin="chany_bottom_out[2:2]" side="bottom"/>
<loc pin="chany_bottom_out[3:3]" side="bottom"/>
<loc pin="chany_bottom_out[4:4]" side="bottom"/>
<loc pin="chany_bottom_out[5:5]" side="bottom"/>
<loc pin="chany_bottom_out[6:6]" side="bottom"/>
<loc pin="chany_bottom_out[7:7]" side="bottom"/>
<loc pin="chany_bottom_out[8:8]" side="bottom"/>
<loc pin="chany_bottom_out[9:9]" side="bottom"/>
<loc pin="chany_bottom_out[10:10]" side="bottom"/>
<loc pin="chany_bottom_out[11:11]" side="bottom"/>
<loc pin="chany_bottom_out[12:12]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_right_grid_left_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_left_grid_right_width_0_height_0_subtile_0__pin_O_3_[0:0]" side="bottom"/>
<loc pin="chanx_left_in[0:0]" side="left"/>
<loc pin="chanx_left_in[1:1]" side="left"/>
<loc pin="chanx_left_in[2:2]" side="left"/>
<loc pin="chanx_left_in[3:3]" side="left"/>
<loc pin="chanx_left_in[4:4]" side="left"/>
<loc pin="chanx_left_in[5:5]" side="left"/>
<loc pin="chanx_left_in[6:6]" side="left"/>
<loc pin="chanx_left_in[7:7]" side="left"/>
<loc pin="chanx_left_in[8:8]" side="left"/>
<loc pin="chanx_left_in[9:9]" side="left"/>
<loc pin="chanx_left_in[10:10]" side="left"/>
<loc pin="chanx_left_in[11:11]" side="left"/>
<loc pin="chanx_left_in[12:12]" side="left"/>
<loc pin="chanx_left_out[0:0]" side="left"/>
<loc pin="chanx_left_out[1:1]" side="left"/>
<loc pin="chanx_left_out[2:2]" side="left"/>
<loc pin="chanx_left_out[3:3]" side="left"/>
<loc pin="chanx_left_out[4:4]" side="left"/>
<loc pin="chanx_left_out[5:5]" side="left"/>
<loc pin="chanx_left_out[6:6]" side="left"/>
<loc pin="chanx_left_out[7:7]" side="left"/>
<loc pin="chanx_left_out[8:8]" side="left"/>
<loc pin="chanx_left_out[9:9]" side="left"/>
<loc pin="chanx_left_out[10:10]" side="left"/>
<loc pin="chanx_left_out[11:11]" side="left"/>
<loc pin="chanx_left_out[12:12]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_0__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_1__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_2__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_3__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_4__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_5__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_6__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_top_grid_bottom_width_0_height_0_subtile_7__pin_inpad_0_[0:0]" side="left"/>
<loc pin="left_bottom_grid_top_width_0_height_0_subtile_0__pin_O_2_[0:0]" side="left"/>
</module>
<module name="cbx_1__0_">
<loc pin="chanx_left_in[0:0]" side="left"/>
<loc pin="chanx_left_in[1:1]" side="left"/>
<loc pin="chanx_left_in[2:2]" side="left"/>
<loc pin="chanx_left_in[3:3]" side="left"/>
<loc pin="chanx_left_in[4:4]" side="left"/>
<loc pin="chanx_left_in[5:5]" side="left"/>
<loc pin="chanx_left_in[6:6]" side="left"/>
<loc pin="chanx_left_in[7:7]" side="left"/>
<loc pin="chanx_left_in[8:8]" side="left"/>
<loc pin="chanx_left_in[9:9]" side="left"/>
<loc pin="chanx_left_in[10:10]" side="left"/>
<loc pin="chanx_left_in[11:11]" side="left"/>
<loc pin="chanx_left_in[12:12]" side="left"/>
<loc pin="chanx_right_in[0:0]" side="right"/>
<loc pin="chanx_right_in[1:1]" side="right"/>
<loc pin="chanx_right_in[2:2]" side="right"/>
<loc pin="chanx_right_in[3:3]" side="right"/>
<loc pin="chanx_right_in[4:4]" side="right"/>
<loc pin="chanx_right_in[5:5]" side="right"/>
<loc pin="chanx_right_in[6:6]" side="right"/>
<loc pin="chanx_right_in[7:7]" side="right"/>
<loc pin="chanx_right_in[8:8]" side="right"/>
<loc pin="chanx_right_in[9:9]" side="right"/>
<loc pin="chanx_right_in[10:10]" side="right"/>
<loc pin="chanx_right_in[11:11]" side="right"/>
<loc pin="chanx_right_in[12:12]" side="right"/>
<loc pin="chanx_left_out[0:0]" side="left"/>
<loc pin="chanx_left_out[1:1]" side="left"/>
<loc pin="chanx_left_out[2:2]" side="left"/>
<loc pin="chanx_left_out[3:3]" side="left"/>
<loc pin="chanx_left_out[4:4]" side="left"/>
<loc pin="chanx_left_out[5:5]" side="left"/>
<loc pin="chanx_left_out[6:6]" side="left"/>
<loc pin="chanx_left_out[7:7]" side="left"/>
<loc pin="chanx_left_out[8:8]" side="left"/>
<loc pin="chanx_left_out[9:9]" side="left"/>
<loc pin="chanx_left_out[10:10]" side="left"/>
<loc pin="chanx_left_out[11:11]" side="left"/>
<loc pin="chanx_left_out[12:12]" side="left"/>
<loc pin="chanx_right_out[0:0]" side="right"/>
<loc pin="chanx_right_out[1:1]" side="right"/>
<loc pin="chanx_right_out[2:2]" side="right"/>
<loc pin="chanx_right_out[3:3]" side="right"/>
<loc pin="chanx_right_out[4:4]" side="right"/>
<loc pin="chanx_right_out[5:5]" side="right"/>
<loc pin="chanx_right_out[6:6]" side="right"/>
<loc pin="chanx_right_out[7:7]" side="right"/>
<loc pin="chanx_right_out[8:8]" side="right"/>
<loc pin="chanx_right_out[9:9]" side="right"/>
<loc pin="chanx_right_out[10:10]" side="right"/>
<loc pin="chanx_right_out[11:11]" side="right"/>
<loc pin="chanx_right_out[12:12]" side="right"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_0__pin_I_2_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_0__pin_I_6_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_0__pin_clk_0_[0:0]" side="top"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="bottom"/>
</module>
<module name="cbx_1__1_">
<loc pin="chanx_left_in[0:0]" side="left"/>
<loc pin="chanx_left_in[1:1]" side="left"/>
<loc pin="chanx_left_in[2:2]" side="left"/>
<loc pin="chanx_left_in[3:3]" side="left"/>
<loc pin="chanx_left_in[4:4]" side="left"/>
<loc pin="chanx_left_in[5:5]" side="left"/>
<loc pin="chanx_left_in[6:6]" side="left"/>
<loc pin="chanx_left_in[7:7]" side="left"/>
<loc pin="chanx_left_in[8:8]" side="left"/>
<loc pin="chanx_left_in[9:9]" side="left"/>
<loc pin="chanx_left_in[10:10]" side="left"/>
<loc pin="chanx_left_in[11:11]" side="left"/>
<loc pin="chanx_left_in[12:12]" side="left"/>
<loc pin="chanx_right_in[0:0]" side="right"/>
<loc pin="chanx_right_in[1:1]" side="right"/>
<loc pin="chanx_right_in[2:2]" side="right"/>
<loc pin="chanx_right_in[3:3]" side="right"/>
<loc pin="chanx_right_in[4:4]" side="right"/>
<loc pin="chanx_right_in[5:5]" side="right"/>
<loc pin="chanx_right_in[6:6]" side="right"/>
<loc pin="chanx_right_in[7:7]" side="right"/>
<loc pin="chanx_right_in[8:8]" side="right"/>
<loc pin="chanx_right_in[9:9]" side="right"/>
<loc pin="chanx_right_in[10:10]" side="right"/>
<loc pin="chanx_right_in[11:11]" side="right"/>
<loc pin="chanx_right_in[12:12]" side="right"/>
<loc pin="chanx_left_out[0:0]" side="left"/>
<loc pin="chanx_left_out[1:1]" side="left"/>
<loc pin="chanx_left_out[2:2]" side="left"/>
<loc pin="chanx_left_out[3:3]" side="left"/>
<loc pin="chanx_left_out[4:4]" side="left"/>
<loc pin="chanx_left_out[5:5]" side="left"/>
<loc pin="chanx_left_out[6:6]" side="left"/>
<loc pin="chanx_left_out[7:7]" side="left"/>
<loc pin="chanx_left_out[8:8]" side="left"/>
<loc pin="chanx_left_out[9:9]" side="left"/>
<loc pin="chanx_left_out[10:10]" side="left"/>
<loc pin="chanx_left_out[11:11]" side="left"/>
<loc pin="chanx_left_out[12:12]" side="left"/>
<loc pin="chanx_right_out[0:0]" side="right"/>
<loc pin="chanx_right_out[1:1]" side="right"/>
<loc pin="chanx_right_out[2:2]" side="right"/>
<loc pin="chanx_right_out[3:3]" side="right"/>
<loc pin="chanx_right_out[4:4]" side="right"/>
<loc pin="chanx_right_out[5:5]" side="right"/>
<loc pin="chanx_right_out[6:6]" side="right"/>
<loc pin="chanx_right_out[7:7]" side="right"/>
<loc pin="chanx_right_out[8:8]" side="right"/>
<loc pin="chanx_right_out[9:9]" side="right"/>
<loc pin="chanx_right_out[10:10]" side="right"/>
<loc pin="chanx_right_out[11:11]" side="right"/>
<loc pin="chanx_right_out[12:12]" side="right"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="top"/>
<loc pin="top_grid_bottom_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="top"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_0__pin_I_0_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_0__pin_I_4_[0:0]" side="bottom"/>
<loc pin="bottom_grid_top_width_0_height_0_subtile_0__pin_I_8_[0:0]" side="bottom"/>
</module>
<module name="cby_0__1_">
<loc pin="chany_bottom_in[0:0]" side="bottom"/>
<loc pin="chany_bottom_in[1:1]" side="bottom"/>
<loc pin="chany_bottom_in[2:2]" side="bottom"/>
<loc pin="chany_bottom_in[3:3]" side="bottom"/>
<loc pin="chany_bottom_in[4:4]" side="bottom"/>
<loc pin="chany_bottom_in[5:5]" side="bottom"/>
<loc pin="chany_bottom_in[6:6]" side="bottom"/>
<loc pin="chany_bottom_in[7:7]" side="bottom"/>
<loc pin="chany_bottom_in[8:8]" side="bottom"/>
<loc pin="chany_bottom_in[9:9]" side="bottom"/>
<loc pin="chany_bottom_in[10:10]" side="bottom"/>
<loc pin="chany_bottom_in[11:11]" side="bottom"/>
<loc pin="chany_bottom_in[12:12]" side="bottom"/>
<loc pin="chany_top_in[0:0]" side="top"/>
<loc pin="chany_top_in[1:1]" side="top"/>
<loc pin="chany_top_in[2:2]" side="top"/>
<loc pin="chany_top_in[3:3]" side="top"/>
<loc pin="chany_top_in[4:4]" side="top"/>
<loc pin="chany_top_in[5:5]" side="top"/>
<loc pin="chany_top_in[6:6]" side="top"/>
<loc pin="chany_top_in[7:7]" side="top"/>
<loc pin="chany_top_in[8:8]" side="top"/>
<loc pin="chany_top_in[9:9]" side="top"/>
<loc pin="chany_top_in[10:10]" side="top"/>
<loc pin="chany_top_in[11:11]" side="top"/>
<loc pin="chany_top_in[12:12]" side="top"/>
<loc pin="chany_bottom_out[0:0]" side="bottom"/>
<loc pin="chany_bottom_out[1:1]" side="bottom"/>
<loc pin="chany_bottom_out[2:2]" side="bottom"/>
<loc pin="chany_bottom_out[3:3]" side="bottom"/>
<loc pin="chany_bottom_out[4:4]" side="bottom"/>
<loc pin="chany_bottom_out[5:5]" side="bottom"/>
<loc pin="chany_bottom_out[6:6]" side="bottom"/>
<loc pin="chany_bottom_out[7:7]" side="bottom"/>
<loc pin="chany_bottom_out[8:8]" side="bottom"/>
<loc pin="chany_bottom_out[9:9]" side="bottom"/>
<loc pin="chany_bottom_out[10:10]" side="bottom"/>
<loc pin="chany_bottom_out[11:11]" side="bottom"/>
<loc pin="chany_bottom_out[12:12]" side="bottom"/>
<loc pin="chany_top_out[0:0]" side="top"/>
<loc pin="chany_top_out[1:1]" side="top"/>
<loc pin="chany_top_out[2:2]" side="top"/>
<loc pin="chany_top_out[3:3]" side="top"/>
<loc pin="chany_top_out[4:4]" side="top"/>
<loc pin="chany_top_out[5:5]" side="top"/>
<loc pin="chany_top_out[6:6]" side="top"/>
<loc pin="chany_top_out[7:7]" side="top"/>
<loc pin="chany_top_out[8:8]" side="top"/>
<loc pin="chany_top_out[9:9]" side="top"/>
<loc pin="chany_top_out[10:10]" side="top"/>
<loc pin="chany_top_out[11:11]" side="top"/>
<loc pin="chany_top_out[12:12]" side="top"/>
<loc pin="right_grid_left_width_0_height_0_subtile_0__pin_I_3_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_0__pin_I_7_[0:0]" side="right"/>
<loc pin="left_grid_right_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="left"/>
</module>
<module name="cby_1__1_">
<loc pin="chany_bottom_in[0:0]" side="bottom"/>
<loc pin="chany_bottom_in[1:1]" side="bottom"/>
<loc pin="chany_bottom_in[2:2]" side="bottom"/>
<loc pin="chany_bottom_in[3:3]" side="bottom"/>
<loc pin="chany_bottom_in[4:4]" side="bottom"/>
<loc pin="chany_bottom_in[5:5]" side="bottom"/>
<loc pin="chany_bottom_in[6:6]" side="bottom"/>
<loc pin="chany_bottom_in[7:7]" side="bottom"/>
<loc pin="chany_bottom_in[8:8]" side="bottom"/>
<loc pin="chany_bottom_in[9:9]" side="bottom"/>
<loc pin="chany_bottom_in[10:10]" side="bottom"/>
<loc pin="chany_bottom_in[11:11]" side="bottom"/>
<loc pin="chany_bottom_in[12:12]" side="bottom"/>
<loc pin="chany_top_in[0:0]" side="top"/>
<loc pin="chany_top_in[1:1]" side="top"/>
<loc pin="chany_top_in[2:2]" side="top"/>
<loc pin="chany_top_in[3:3]" side="top"/>
<loc pin="chany_top_in[4:4]" side="top"/>
<loc pin="chany_top_in[5:5]" side="top"/>
<loc pin="chany_top_in[6:6]" side="top"/>
<loc pin="chany_top_in[7:7]" side="top"/>
<loc pin="chany_top_in[8:8]" side="top"/>
<loc pin="chany_top_in[9:9]" side="top"/>
<loc pin="chany_top_in[10:10]" side="top"/>
<loc pin="chany_top_in[11:11]" side="top"/>
<loc pin="chany_top_in[12:12]" side="top"/>
<loc pin="chany_bottom_out[0:0]" side="bottom"/>
<loc pin="chany_bottom_out[1:1]" side="bottom"/>
<loc pin="chany_bottom_out[2:2]" side="bottom"/>
<loc pin="chany_bottom_out[3:3]" side="bottom"/>
<loc pin="chany_bottom_out[4:4]" side="bottom"/>
<loc pin="chany_bottom_out[5:5]" side="bottom"/>
<loc pin="chany_bottom_out[6:6]" side="bottom"/>
<loc pin="chany_bottom_out[7:7]" side="bottom"/>
<loc pin="chany_bottom_out[8:8]" side="bottom"/>
<loc pin="chany_bottom_out[9:9]" side="bottom"/>
<loc pin="chany_bottom_out[10:10]" side="bottom"/>
<loc pin="chany_bottom_out[11:11]" side="bottom"/>
<loc pin="chany_bottom_out[12:12]" side="bottom"/>
<loc pin="chany_top_out[0:0]" side="top"/>
<loc pin="chany_top_out[1:1]" side="top"/>
<loc pin="chany_top_out[2:2]" side="top"/>
<loc pin="chany_top_out[3:3]" side="top"/>
<loc pin="chany_top_out[4:4]" side="top"/>
<loc pin="chany_top_out[5:5]" side="top"/>
<loc pin="chany_top_out[6:6]" side="top"/>
<loc pin="chany_top_out[7:7]" side="top"/>
<loc pin="chany_top_out[8:8]" side="top"/>
<loc pin="chany_top_out[9:9]" side="top"/>
<loc pin="chany_top_out[10:10]" side="top"/>
<loc pin="chany_top_out[11:11]" side="top"/>
<loc pin="chany_top_out[12:12]" side="top"/>
<loc pin="right_grid_left_width_0_height_0_subtile_0__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_1__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_2__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_3__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_4__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_5__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_6__pin_outpad_0_[0:0]" side="right"/>
<loc pin="right_grid_left_width_0_height_0_subtile_7__pin_outpad_0_[0:0]" side="right"/>
<loc pin="left_grid_right_width_0_height_0_subtile_0__pin_I_1_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_0__pin_I_5_[0:0]" side="left"/>
<loc pin="left_grid_right_width_0_height_0_subtile_0__pin_I_9_[0:0]" side="left"/>
</module>
</pin_location>

View File

@ -0,0 +1,43 @@
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
# Configuration file for running experiments
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
# timeout_each_job : FPGA Task script splits fpga flow into multiple jobs
# Each job execute fpga_flow script on combination of architecture & benchmark
# timeout_each_job is timeout for each job
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
[GENERAL]
run_engine=openfpga_shell
power_tech_file = ${PATH:OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.xml
power_analysis = false
spice_output=false
verilog_output=true
timeout_each_job = 20*60
fpga_flow=yosys_vpr
[OpenFPGA_SHELL]
openfpga_shell_template=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_shell_scripts/group_tile_write_fabric_pin_phy_loc_preconfig_testbench_example_script.openfpga
openfpga_arch_file=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_arch/k4_N4_40nm_cc_openfpga.xml
openfpga_sim_setting_file=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_simulation_settings/fixed_sim_openfpga.xml
openfpga_vpr_extra_options=
openfpga_pb_pin_fixup_command=
openfpga_vpr_device=auto
openfpga_vpr_route_chan_width=20
openfpga_group_tile_config_file=${PATH:TASK_DIR}/config/tile_config.xml
openfpga_verilog_testbench_options=--explicit_port_mapping
openfpga_fabric_pin_phy_loc_file=fabric_pin_phy_loc.xml
openfpga_fabric_pin_phy_loc_module=
[ARCHITECTURES]
arch0=${PATH:OPENFPGA_PATH}/openfpga_flow/vpr_arch/k4_N4_tileable_TileOrgzTl_40nm.xml
[BENCHMARKS]
bench0=${PATH:OPENFPGA_PATH}/openfpga_flow/benchmarks/micro_benchmark/or2/or2.v
[SYNTHESIS_PARAM]
bench_read_verilog_options_common = -nolatches
bench0_top = or2
[SCRIPT_PARAM_MIN_ROUTE_CHAN_WIDTH]
end_flow_with_test=
vpr_fpga_verilog_formal_verification_top_netlist=

View File

@ -0,0 +1,43 @@
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
# Configuration file for running experiments
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
# timeout_each_job : FPGA Task script splits fpga flow into multiple jobs
# Each job execute fpga_flow script on combination of architecture & benchmark
# timeout_each_job is timeout for each job
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
[GENERAL]
run_engine=openfpga_shell
power_tech_file = ${PATH:OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.xml
power_analysis = false
spice_output=false
verilog_output=true
timeout_each_job = 20*60
fpga_flow=yosys_vpr
[OpenFPGA_SHELL]
openfpga_shell_template=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_shell_scripts/group_tile_write_fabric_pin_phy_loc_preconfig_testbench_example_script.openfpga
openfpga_arch_file=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_arch/k4_N4_40nm_cc_openfpga.xml
openfpga_sim_setting_file=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_simulation_settings/fixed_sim_openfpga.xml
openfpga_vpr_extra_options=
openfpga_pb_pin_fixup_command=
openfpga_vpr_device=auto
openfpga_vpr_route_chan_width=20
openfpga_group_tile_config_file=${PATH:TASK_DIR}/config/tile_config.xml
openfpga_verilog_testbench_options=--explicit_port_mapping
openfpga_fabric_pin_phy_loc_file=fabric_pin_phy_loc.xml
openfpga_fabric_pin_phy_loc_module=--module tile*
[ARCHITECTURES]
arch0=${PATH:OPENFPGA_PATH}/openfpga_flow/vpr_arch/k4_N4_tileable_TileOrgzTl_40nm.xml
[BENCHMARKS]
bench0=${PATH:OPENFPGA_PATH}/openfpga_flow/benchmarks/micro_benchmark/or2/or2.v
[SYNTHESIS_PARAM]
bench_read_verilog_options_common = -nolatches
bench0_top = or2
[SCRIPT_PARAM_MIN_ROUTE_CHAN_WIDTH]
end_flow_with_test=
vpr_fpga_verilog_formal_verification_top_netlist=

View File

@ -0,0 +1,43 @@
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
# Configuration file for running experiments
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
# timeout_each_job : FPGA Task script splits fpga flow into multiple jobs
# Each job execute fpga_flow script on combination of architecture & benchmark
# timeout_each_job is timeout for each job
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
[GENERAL]
run_engine=openfpga_shell
power_tech_file = ${PATH:OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.xml
power_analysis = false
spice_output=false
verilog_output=true
timeout_each_job = 20*60
fpga_flow=yosys_vpr
[OpenFPGA_SHELL]
openfpga_shell_template=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_shell_scripts/group_tile_write_fabric_pin_phy_loc_preconfig_testbench_example_script.openfpga
openfpga_arch_file=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_arch/k4_N4_40nm_cc_openfpga.xml
openfpga_sim_setting_file=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_simulation_settings/fixed_sim_openfpga.xml
openfpga_vpr_extra_options=
openfpga_pb_pin_fixup_command=
openfpga_vpr_device=auto
openfpga_vpr_route_chan_width=20
openfpga_group_tile_config_file=${PATH:TASK_DIR}/config/tile_config.xml
openfpga_verilog_testbench_options=--explicit_port_mapping
openfpga_fabric_pin_phy_loc_file=fabric_pin_phy_loc.xml
openfpga_fabric_pin_phy_loc_module=--module tile* --show_invalid_side
[ARCHITECTURES]
arch0=${PATH:OPENFPGA_PATH}/openfpga_flow/vpr_arch/k4_N4_tileable_TileOrgzTl_40nm.xml
[BENCHMARKS]
bench0=${PATH:OPENFPGA_PATH}/openfpga_flow/benchmarks/micro_benchmark/or2/or2.v
[SYNTHESIS_PARAM]
bench_read_verilog_options_common = -nolatches
bench0_top = or2
[SCRIPT_PARAM_MIN_ROUTE_CHAN_WIDTH]
end_flow_with_test=
vpr_fpga_verilog_formal_verification_top_netlist=

View File

@ -0,0 +1,43 @@
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
# Configuration file for running experiments
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
# timeout_each_job : FPGA Task script splits fpga flow into multiple jobs
# Each job execute fpga_flow script on combination of architecture & benchmark
# timeout_each_job is timeout for each job
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
[GENERAL]
run_engine=openfpga_shell
power_tech_file = ${PATH:OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.xml
power_analysis = false
spice_output=false
verilog_output=true
timeout_each_job = 20*60
fpga_flow=yosys_vpr
[OpenFPGA_SHELL]
openfpga_shell_template=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_shell_scripts/group_tile_write_fabric_pin_phy_loc_preconfig_testbench_example_script.openfpga
openfpga_arch_file=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_arch/k4_N4_40nm_cc_openfpga.xml
openfpga_sim_setting_file=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_simulation_settings/fixed_sim_openfpga.xml
openfpga_vpr_extra_options=
openfpga_pb_pin_fixup_command=
openfpga_vpr_device=auto
openfpga_vpr_route_chan_width=20
openfpga_group_tile_config_file=${PATH:TASK_DIR}/config/tile_config.xml
openfpga_verilog_testbench_options=--explicit_port_mapping
openfpga_fabric_pin_phy_loc_file=fabric_pin_phy_loc.xml
openfpga_fabric_pin_phy_loc_module=--module *
[ARCHITECTURES]
arch0=${PATH:OPENFPGA_PATH}/openfpga_flow/vpr_arch/k4_N4_tileable_TileOrgzTl_40nm.xml
[BENCHMARKS]
bench0=${PATH:OPENFPGA_PATH}/openfpga_flow/benchmarks/micro_benchmark/or2/or2.v
[SYNTHESIS_PARAM]
bench_read_verilog_options_common = -nolatches
bench0_top = or2
[SCRIPT_PARAM_MIN_ROUTE_CHAN_WIDTH]
end_flow_with_test=
vpr_fpga_verilog_formal_verification_top_netlist=