| -- This is the database schema for relating a tile grid to a VPR routing |
| -- graph. |
| -- |
| -- Terms: |
| -- grid - A 2D matrix of tiles |
| -- |
| -- phy_tile - A location with the physical grid. A tile is always of a |
| -- particular tile type. The tile type specifies what wires, pips and |
| -- sites a tile contains. |
| -- |
| -- The physical grid is defined by the underlying hardware, and has |
| -- expliotable regularity. However it is not ideal to place using this |
| -- grid, as there are various empty tiles to match the hardware (e.g. |
| -- VBRK tiles). |
| -- |
| -- tile - A location within the VPR grid. A tile is always of a partial |
| -- tile type. The tile type specifies what wires, pips and |
| -- sites a tile contains. |
| -- |
| -- The VRP grid may have one phy_tile split across two tiles (e.g. |
| -- CLBLL_L) or may combine multiple phy_tile's into one (e.g. INT_L |
| -- into the tile to it's left. |
| -- |
| -- This table contains the information on the grid output to arch.xml. |
| -- |
| -- wires - A partial net within a tile. It may start or end at a site pins |
| -- or a pip, or can connect to wires in other tiles. |
| -- |
| -- pip - Programable interconnect point, connecting two wires within a |
| -- tile. |
| -- |
| -- node - A complete net made of one or more wires. |
| -- |
| -- site - A location within a tile that contains site pins and BELs. |
| -- BELs are not described in this database. |
| -- |
| -- site - Site pins are the connections to/from the site to a wire in a |
| -- tile. A site pin may be associated with one wire in the tile. |
| -- |
| -- graph_node - A VPR type representing either a pb_type IPIN or OPIN or |
| -- a routing wire CHANX or CHANY. |
| -- |
| -- IPIN/OPIN are similiar to site pin. |
| -- CHANX/CHANY are how VPR express routing nodes. |
| -- |
| -- track - A collection of graph_node's that represents one routing node. |
| -- |
| -- graph_edge - A VPR type representing a connection between an IPIN, OPIN, |
| -- CHANX, or CHANY. All graph_edge's require a switch. |
| -- |
| -- switch - See VPR documentation :http://docs.verilogtorouting.org/en/latest/arch/reference/--tag-fpga-device-information-switch_block |
| -- |
| -- This database provides a relational description between the terms above. |
| |
| -- Tile type table, used to track tile_type using a pkey, and provide |
| -- the tile_type_pkey <-> name mapping. |
| CREATE TABLE tile_type( |
| pkey INTEGER PRIMARY KEY, |
| name TEXT |
| ); |
| |
| -- Site type table, used to track site_type using a pkey, and provide |
| -- the site_type_pkey <-> name mapping. |
| CREATE TABLE site_type( |
| pkey INTEGER PRIMARY KEY, |
| name TEXT |
| ); |
| |
| CREATE TABLE clock_region( |
| pkey INTEGER PRIMARY KEY, |
| name TEXT, |
| x_coord INT, |
| y_coord INT |
| ); |
| |
| -- Physical tile table, contains type and name of tile and location in the prjxray grid. |
| CREATE TABLE phy_tile( |
| pkey INTEGER PRIMARY KEY, |
| name TEXT, |
| tile_type_pkey INT, |
| grid_x INT, |
| grid_y INT, |
| clock_region_pkey INT, |
| FOREIGN KEY(tile_type_pkey) REFERENCES tile_type(pkey), |
| FOREIGN KEY(clock_region_pkey) REFERENCES clock_region(pkey) |
| ); |
| |
| -- Site pin table, contains names of pins and their direction, along |
| -- with parent site type information. |
| CREATE TABLE site_pin( |
| pkey INTEGER PRIMARY KEY, |
| name TEXT, |
| site_type_pkey INT, |
| direction TEXT, |
| FOREIGN KEY(site_type_pkey) REFERENCES site_type(pkey) |
| ); |
| |
| -- Concreate site instance within tiles. Used to relate connect |
| -- wire_in_tile instead to site_type's, along with providing metadata |
| -- about the site. |
| CREATE TABLE site( |
| pkey INTEGER PRIMARY KEY, |
| name TEXT, |
| x_coord INT, |
| y_coord INT, |
| site_type_pkey INT, |
| tile_type_pkey INT, |
| FOREIGN KEY(site_type_pkey) REFERENCES site_type(pkey), |
| FOREIGN KEY(tile_type_pkey) REFERENCES tile_type(pkey) |
| ); |
| |
| -- Table recording each site instance in the grid, useful for lookups. |
| CREATE TABLE site_instance( |
| pkey INTEGER PRIMARY KEY, |
| name TEXT, |
| x_coord INT, |
| y_coord INT, |
| site_pkey INT, |
| phy_tile_pkey INT, |
| prohibited BOOLEAN, |
| FOREIGN KEY(site_pkey) REFERENCES site(pkey), |
| FOREIGN KEY(phy_tile_pkey) REFERENCES phy_tile(pkey) |
| ); |
| |
| -- This table provides a reference of synthetic tile types generated to |
| -- support tile splits. When a tile is split, each contained site becomes a |
| -- new tile type, which is keyed in this table as the "parent_tile_type_pkey". |
| -- |
| -- The tile_type and site that the parent_tile_type_pkey was generated |
| -- from is within the "tile_type_pkey" and "site_pkey". |
| -- |
| -- All tile rows that are split tiles will set site_as_tile_pkey to point to |
| -- a row in this table mapping the synthetic tile_type back to the original |
| -- tile type and site that was used to generate it. |
| CREATE TABLE site_as_tile( |
| pkey INTEGER PRIMARY KEY, |
| parent_tile_type_pkey INT, |
| tile_type_pkey INT, |
| site_pkey INT, |
| FOREIGN KEY(parent_tile_type_pkey) REFERENCES tile_type(pkey), |
| FOREIGN KEY(tile_type_pkey) REFERENCES tile_type(pkey), |
| FOREIGN KEY(site_pkey) REFERENCES site(pkey) |
| ); |
| |
| -- Logical tile table, contains tile type and location within the VPR grid. |
| -- |
| -- For tiles that represent split tiles, site_as_tile_pkey indicates the |
| -- original tile_type and site that was used to generate this tile. |
| -- |
| -- phy_tile_pkey refers to the physical tile that is responsible for holding |
| -- the configuration of this tile. When multiple tiles are merged, it is only |
| -- legal if only one of the tiles being merged has bitstream output, and that |
| -- physical tile should be referenced here. |
| -- |
| -- If it is neccesary to determine where tiles without bitstream output ended |
| -- up, the tile_map table can be used. |
| CREATE TABLE tile( |
| pkey INTEGER PRIMARY KEY, |
| phy_tile_pkey INT, |
| tile_type_pkey INT, |
| site_as_tile_pkey INT, |
| grid_x INT, |
| grid_y INT, |
| FOREIGN KEY(phy_tile_pkey) REFERENCES phy_tile(pkey), |
| FOREIGN KEY(tile_type_pkey) REFERENCES tile_type(pkey), |
| FOREIGN KEY(site_as_tile_pkey) REFERENCES site_as_tile(pkey) |
| ); |
| |
| -- Bimap between physical and logical grids. |
| -- |
| -- All rows in the tile and phy_tile tables appear at least once. |
| -- |
| -- Both tile_pkey's and phy_tile_pkey's may be repeated depending on what |
| -- operatations were performed to form the VPR grid. Generally speaking, a tile |
| -- split will cause multiple instances of a phy_tile_pkey to appear in this |
| -- table. A tile merge will cause multiple instances of a tile_pkey to appear |
| -- in this table. |
| CREATE TABLE tile_map( |
| tile_pkey INT, |
| phy_tile_pkey INT, |
| FOREIGN KEY(tile_pkey) REFERENCES tile(pkey), |
| FOREIGN KEY(phy_tile_pkey) REFERENCES phy_tile(pkey) |
| ); |
| |
| -- Table of switches. |
| CREATE TABLE switch( |
| pkey INTEGER PRIMARY KEY, |
| name TEXT, |
| internal_capacitance REAL, |
| drive_resistance REAL, |
| intrinsic_delay REAL, |
| switch_type TEXT |
| ); |
| |
| -- Table of segments. |
| -- VPR's map lookahead uses segments to determine "wire types". Each |
| -- significantly different interconnect type should have a segment. |
| CREATE TABLE segment( |
| pkey INTEGER PRIMARY KEY, |
| name TEXT, |
| length INT |
| ); |
| |
| -- Table of tile type wires. This table is the of uninstanced tile type |
| -- wires. Site pins wires will reference their site and site pin rows in |
| -- the site and site_pin tables. |
| -- |
| -- All concrete wire instances will related to a row in this table. |
| CREATE TABLE wire_in_tile( |
| pkey INTEGER PRIMARY KEY, |
| name TEXT, |
| phy_tile_type_pkey INT, |
| tile_type_pkey INT, |
| site_pkey INT, |
| site_pin_pkey INT, |
| capacitance REAL, |
| resistance REAL, |
| site_pin_switch_pkey INT, |
| FOREIGN KEY(phy_tile_type_pkey) REFERENCES phy_tile_type(pkey), |
| FOREIGN KEY(tile_type_pkey) REFERENCES tile_type(pkey), |
| FOREIGN KEY(site_pkey) REFERENCES site(pkey), |
| FOREIGN KEY(site_pin_pkey) REFERENCES site_pin(pkey), |
| FOREIGN KEY(site_pin_switch_pkey) REFERENCES switch(pkey) |
| ); |
| |
| -- Table of tile type pips. This table is the table of uninstanced pips. |
| -- No concreate table of pips is created, instead this table is used to |
| -- add rows in the graph_edge table. |
| CREATE TABLE pip_in_tile( |
| pkey INTEGER PRIMARY KEY, |
| name TEXT, |
| tile_type_pkey INT, |
| src_wire_in_tile_pkey INT, |
| dest_wire_in_tile_pkey INT, |
| can_invert BOOLEAN, |
| is_directional BOOLEAN, |
| is_pseudo BOOLEAN, |
| is_pass_transistor BOOLEAN, |
| switch_pkey INT, |
| backward_switch_pkey INT, |
| FOREIGN KEY(tile_type_pkey) REFERENCES tile_type(pkey), |
| FOREIGN KEY(src_wire_in_tile_pkey) REFERENCES wire_in_tile(pkey), |
| FOREIGN KEY(dest_wire_in_tile_pkey) REFERENCES wire_in_tile(pkey), |
| FOREIGN KEY(switch_pkey) REFERENCES switch(pkey), |
| FOREIGN KEY(backward_switch_pkey) REFERENCES switch(pkey) |
| ); |
| |
| -- Table for find pips associated with a wire_in_tile_pkey, without considering |
| -- the direction of the pip. |
| CREATE TABLE undirected_pips( |
| wire_in_tile_pkey INT, |
| pip_in_tile_pkey INT, |
| other_wire_in_tile_pkey INT, |
| FOREIGN KEY(wire_in_tile_pkey) REFERENCES wire_in_tile(pkey), |
| FOREIGN KEY(pip_in_tile_pkey) REFERENCES pip_in_tile(pkey), |
| FOREIGN KEY(other_wire_in_tile_pkey) REFERENCES wire_in_tile(pkey) |
| ); |
| |
| |
| -- Table of tracks. alive is a flag used during routing import to indicate |
| -- whether this a particular track is connected and should be imported. |
| CREATE TABLE track( |
| pkey INTEGER PRIMARY KEY, |
| alive BOOL, |
| segment_pkey INT, |
| canon_phy_tile_pkey INT, |
| FOREIGN KEY(segment_pkey) REFERENCES segment_pkey(pkey), |
| FOREIGN KEY(canon_phy_tile_pkey) REFERENCES phy_tile(pkey) |
| ); |
| |
| -- Table of nodes. Provides the concrete relation for connected wire |
| -- instances. Generally speaking nodes are either routing nodes or a site |
| -- pin node. |
| -- |
| -- Routing nodes will have track_pkey set. |
| -- Site pin nodes will have a site_wire_pkey to the wire that is the wire |
| -- connected to a site pin. |
| CREATE TABLE node( |
| pkey INTEGER PRIMARY KEY, |
| number_pips INT, |
| track_pkey INT, |
| site_wire_pkey INT, |
| classification INT, |
| FOREIGN KEY(track_pkey) REFERENCES track_pkey(pkey), |
| FOREIGN KEY(site_wire_pkey) REFERENCES wire(pkey) |
| ); |
| |
| -- Table of edge with mux. An edge_with_mux needs special handling in VPR, |
| -- in the form of architecture level direct connections. |
| -- |
| -- This table is the list of these direct connections. |
| CREATE TABLE edge_with_mux( |
| pkey INTEGER PRIMARY KEY, |
| src_wire_pkey INT, |
| dest_wire_pkey INT, |
| pip_in_tile_pkey INT, |
| switch_pkey INT, |
| FOREIGN KEY(src_wire_pkey) REFERENCES wire(pkey), |
| FOREIGN KEY(dest_wire_pkey) REFERENCES wire(pkey), |
| FOREIGN KEY(pip_in_tile_pkey) REFERENCES pip_in_tile(pkey), |
| FOREIGN KEY(switch_pkey) REFERENCES switch(pkey) |
| ); |
| |
| -- Table of graph nodes. This is a direction mapping of an VPR rr_node |
| -- instance. |
| CREATE TABLE graph_node( |
| pkey INTEGER PRIMARY KEY, |
| graph_node_type INT, |
| track_pkey INT, |
| connection_box_wire_pkey INT, |
| node_pkey INT, |
| x_low INT, |
| x_high INT, |
| y_low INT, |
| y_high INT, |
| ptc INT, |
| capacity INT, |
| capacitance REAL, |
| resistance REAL, |
| FOREIGN KEY(connection_box_wire_pkey) REFERENCES wire(pkey), |
| FOREIGN KEY(track_pkey) REFERENCES track(pkey), |
| FOREIGN KEY(node_pkey) REFERENCES node(pkey) |
| ); |
| |
| -- Table of wires. This table is the complete list of all wires in the |
| -- grid. All wires will belong to exactly one node. |
| -- |
| -- Rows will relate back to their parent tile, and generic wire instance. |
| -- |
| -- If the wire is connected to both a site pin and a pip, then |
| -- top_graph_node_pkey, bottom_graph_node_pkey, left_graph_node_pkey, and |
| -- right_graph_node_pkey will be set to the IPIN or OPIN instances, based |
| -- on the pin directions for the tile. |
| -- |
| -- If the wire is a member of a routing node, then graph_node_pkey will be |
| -- set to the graph_node this wire is a member of. |
| -- |
| -- The wire has two columns for tile location. phy_tile_pkey points to the |
| -- physical prjxray tile that contains this wire. The tile_pkey points to the |
| -- VPR tile that contains this wire. |
| -- |
| -- Do note that unless this wire is connected to a IPIN or OPIN, VPR does not |
| -- model exact tile locations for wires. Instead the wire will have been |
| -- lumped into a CHANX or CHANY node. |
| CREATE TABLE wire( |
| pkey INTEGER PRIMARY KEY, |
| node_pkey INT, |
| phy_tile_pkey INT, |
| tile_pkey INT, |
| wire_in_tile_pkey INT, |
| graph_node_pkey INT, |
| top_graph_node_pkey INT, |
| bottom_graph_node_pkey INT, |
| left_graph_node_pkey INT, |
| right_graph_node_pkey INT, |
| site_pin_graph_node_pkey INT, |
| FOREIGN KEY(node_pkey) REFERENCES node(pkey), |
| FOREIGN KEY(phy_tile_pkey) REFERENCES phy_tile(pkey), |
| FOREIGN KEY(tile_pkey) REFERENCES tile(pkey), |
| FOREIGN KEY(wire_in_tile_pkey) REFERENCES wire_in_tile(pkey), |
| FOREIGN KEY(graph_node_pkey) REFERENCES graph_node(pkey), |
| FOREIGN KEY(top_graph_node_pkey) REFERENCES graph_node(pkey), |
| FOREIGN KEY(bottom_graph_node_pkey) REFERENCES graph_node(pkey), |
| FOREIGN KEY(left_graph_node_pkey) REFERENCES graph_node(pkey), |
| FOREIGN KEY(right_graph_node_pkey) REFERENCES graph_node(pkey), |
| FOREIGN KEY(site_pin_graph_node_pkey) REFERENCES graph_node(pkey) |
| ); |
| |
| -- Table of graph edges. |
| CREATE TABLE graph_edge( |
| src_graph_node_pkey INT, |
| dest_graph_node_pkey INT, |
| switch_pkey INT, |
| track_pkey INT, |
| phy_tile_pkey INT, |
| pip_in_tile_pkey INT, |
| backward BOOLEAN, |
| FOREIGN KEY(src_graph_node_pkey) REFERENCES graph_node(pkey), |
| FOREIGN KEY(dest_graph_node_pkey) REFERENCES graph_node(pkey), |
| FOREIGN KEY(track_pkey) REFERENCES track(pkey), |
| FOREIGN KEY(phy_tile_pkey) REFERENCES phy_tile(pkey), |
| FOREIGN KEY(pip_in_tile_pkey) REFERENCES pip(pkey) |
| ); |
| |
| -- channel, x_list and y_list are direct mappings of the channel object |
| -- present in the rr_graph. |
| CREATE TABLE channel( |
| chan_width_max INT, |
| x_min INT, |
| y_min INT, |
| x_max INT, |
| y_max INT |
| ); |
| CREATE TABLE x_list( |
| idx INT, |
| info INT |
| ); |
| CREATE TABLE y_list( |
| idx INT, |
| info INT |
| ); |
| |
| -- Table that represents the (optional) VCC and GND global sources. |
| -- VPR cannot natively take advantage of local VCC and GND sources, so |
| -- a global source is generated, and local sources will connect to the global |
| -- sources. |
| CREATE TABLE constant_sources( |
| vcc_track_pkey INT, |
| gnd_track_pkey INT, |
| FOREIGN KEY(vcc_track_pkey) REFERENCES track(pkey), |
| FOREIGN KEY(gnd_track_pkey) REFERENCES track(pkey) |
| ); |