@@ -52,6 +52,10 @@ struct t_pb_type_power;
52
52
struct t_mode_power ;
53
53
struct t_interconnect_power ;
54
54
struct t_port_power ;
55
+ struct t_physical_port ;
56
+ struct t_equivalent_site ;
57
+ struct t_physical_tile_type ;
58
+ struct t_logical_block_type ;
55
59
struct t_pb_type ;
56
60
struct t_pb_graph_pin_power ;
57
61
struct t_mode ;
@@ -584,6 +588,10 @@ typedef const t_logical_block_type* t_logical_block_type_ptr;
584
588
struct t_physical_tile_type {
585
589
char * name = nullptr ;
586
590
int num_pins = 0 ;
591
+ int num_input_pins = 0 ;
592
+ int num_output_pins = 0 ;
593
+ int num_clock_pins = 0 ;
594
+
587
595
int capacity = 0 ;
588
596
589
597
int width = 0 ;
@@ -598,6 +606,7 @@ struct t_physical_tile_type {
598
606
int num_class = 0 ;
599
607
t_class* class_inf = nullptr ; /* [0..num_class-1] */
600
608
609
+ std::vector<t_physical_port> ports;
601
610
std::vector<int > pin_width_offset; // [0..num_pins-1]
602
611
std::vector<int > pin_height_offset; // [0..num_pins-1]
603
612
int * pin_class = nullptr ; /* [0..num_pins-1] */
@@ -619,11 +628,56 @@ struct t_physical_tile_type {
619
628
620
629
int logical_block_index = -1 ; /* index of the corresponding logical block type */
621
630
631
+ std::vector<t_equivalent_site> equivalent_sites;
632
+
622
633
/* Returns the indices of pins that contain a clock for this physical logic block */
623
- std::vector<int > get_clock_pins_indices (t_logical_block_type_ptr logic_block ) const ;
634
+ std::vector<int > get_clock_pins_indices () const ;
624
635
};
625
636
typedef const t_physical_tile_type* t_physical_tile_type_ptr;
626
637
638
+ /* * Describes I/O and clock ports of a physical tile type
639
+ *
640
+ * It corresponds to <port/> tags in the FPGA architecture description
641
+ *
642
+ * Data members:
643
+ * name: name of the port
644
+ * is_clock: whether or not this port is a clock
645
+ * is_non_clock_global: Applies to top level pb_type, this pin is not a clock but
646
+ * is a global signal (useful for stuff like global reset signals,
647
+ * perhaps useful for VCC and GND)
648
+ * num_pins: the number of pins this port has
649
+ * tile_type: pointer to the associated tile type
650
+ * port_class: port belongs to recognized set of ports in class library
651
+ * index: port index by index in array of parent pb_type
652
+ * port_index_by_type index of port by type (index by input, output, or clock)
653
+ * equivalence: Applies to logic block I/Os and to primitive inputs only
654
+ */
655
+ struct t_physical_port {
656
+ char * name;
657
+ enum PORTS type;
658
+ bool is_clock;
659
+ bool is_non_clock_global;
660
+ int num_pins;
661
+ PortEquivalence equivalent;
662
+
663
+ int index;
664
+ int port_index_by_type;
665
+ int tile_type_index;
666
+ };
667
+
668
+ /* * Describes the equivalent sites related to a specific tile type
669
+ *
670
+ * It corresponds to the <tile> tags in the FPGA architecture description
671
+ *
672
+ */
673
+ struct t_equivalent_site {
674
+ char * pb_type_name;
675
+
676
+ // XXX Variables to hold information on mapping between site and tile
677
+ // XXX as well as references to the belonging pb_type and tile_type
678
+ // t_logical_block_type* block_type;
679
+ };
680
+
627
681
/* ************************************************************************************************
628
682
* PB Type Hierarchy *
629
683
*************************************************************************************************
0 commit comments