aboutsummaryrefslogtreecommitdiffstats
path: root/nexus/arch.h
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2020-11-09 11:43:54 +0000
committerDavid Shah <dave@ds0.me>2020-11-30 08:45:28 +0000
commit4e5ad7feac5b41876e3b09162cea8815fe0821bf (patch)
treebec0d03b7a1209da1fe98cfb2d07ef32408903ca /nexus/arch.h
parent629a06b0ae20f93448881c2e534703e067f997c3 (diff)
downloadnextpnr-4e5ad7feac5b41876e3b09162cea8815fe0821bf.tar.gz
nextpnr-4e5ad7feac5b41876e3b09162cea8815fe0821bf.tar.bz2
nextpnr-4e5ad7feac5b41876e3b09162cea8815fe0821bf.zip
nexus: Add timing structures to BBA
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'nexus/arch.h')
-rw-r--r--nexus/arch.h50
1 files changed, 49 insertions, 1 deletions
diff --git a/nexus/arch.h b/nexus/arch.h
index c6064ea2..88660ca1 100644
--- a/nexus/arch.h
+++ b/nexus/arch.h
@@ -108,7 +108,7 @@ enum PipFlags
NPNR_PACKED_STRUCT(struct PipInfoPOD {
uint16_t from_wire, to_wire;
uint16_t flags;
- uint16_t padding;
+ uint16_t timing_class;
int32_t tile_type;
});
@@ -273,13 +273,61 @@ NPNR_PACKED_STRUCT(struct IdStringDBPOD {
RelPtr<RelPtr<char>> bba_id_strs;
});
+// Timing structures are generally sorted using IdString indices as keys for fast binary searches
+// All delays are integer picoseconds
+
+// Sort key: (from_port, to_port) for binary search by IdString
+NPNR_PACKED_STRUCT(struct CellPropDelayPOD {
+ int32_t from_port;
+ int32_t to_port;
+ int32_t min_delay;
+ int32_t max_delay;
+});
+
+// Sort key: (sig_port, clock_port) for binary search by IdString
+NPNR_PACKED_STRUCT(struct CellSetupHoldPOD {
+ int32_t sig_port;
+ int32_t clock_port;
+ int32_t min_setup;
+ int32_t max_setup;
+ int32_t min_hold;
+ int32_t max_hold;
+});
+
+// Sort key: (cell_type, cell_variant) for binary search by IdString
+NPNR_PACKED_STRUCT(struct CellTimingPOD {
+ int32_t cell_type;
+ int32_t cell_variant;
+ int32_t num_prop_delays;
+ int32_t num_setup_holds;
+ RelPtr<CellPropDelayPOD> prop_delays;
+ RelPtr<CellSetupHoldPOD> setup_holds;
+});
+
+NPNR_PACKED_STRUCT(struct PipTimingPOD {
+ int32_t min_delay;
+ int32_t max_delay;
+ int32_t min_fanout_adder;
+ int32_t max_fanout_adder;
+});
+
+NPNR_PACKED_STRUCT(struct SpeedGradePOD {
+ RelPtr<char> name;
+ int32_t num_cell_types;
+ int32_t num_pip_classes;
+ RelPtr<CellTimingPOD> cell_types;
+ RelPtr<PipTimingPOD> pip_classes;
+});
+
NPNR_PACKED_STRUCT(struct DatabasePOD {
uint32_t version;
uint32_t num_chips;
uint32_t num_loctypes;
+ uint32_t num_speed_grades;
RelPtr<char> family;
RelPtr<ChipInfoPOD> chips;
RelPtr<LocTypePOD> loctypes;
+ RelPtr<SpeedGradePOD> speed_grades;
RelPtr<IdStringDBPOD> ids;
});