From 6b234bf48434153513651b7081188690671f90d0 Mon Sep 17 00:00:00 2001 From: Maciej Kurc Date: Mon, 9 Dec 2019 13:40:05 +0100 Subject: [PATCH] Added support for having a set of required features in the prjxray db. Signed-off-by: Maciej Kurc --- prjxray/db.py | 27 +++++++++++++++++++++++++++ utils/fasm2frames.py | 5 +++++ 2 files changed, 32 insertions(+) diff --git a/prjxray/db.py b/prjxray/db.py index d0fa2f3a..2700b6be 100644 --- a/prjxray/db.py +++ b/prjxray/db.py @@ -87,6 +87,14 @@ class Database(object): self.tile_types_obj = {} + # Load set of required fasm features for given part. + self.required_features = {} + fname = os.path.join(self.db_root, "required_features.json") + + if os.path.isfile(fname): + with open(fname, "r") as fp: + self.required_features = json.load(fp) + def get_tile_types(self): """ Return list of tile types """ return self.tile_types.keys() @@ -147,3 +155,22 @@ class Database(object): self.tile_types[tile_type.upper()]) return self.tile_segbits[tile_type] + + def get_required_fasm_features(self, part=None): + """ + Assembles a set of required fasm features for given part. Returns a list + of fasm features. + """ + + # No required features in the db, return empty list + if self.required_features is None: + return set() + + # Get a list of required features for all parts + features = set() + if "all" in self.required_features: + features |= set(self.required_features["all"]) + + # TODO: Add a support for required features for a specific part. + + return features diff --git a/utils/fasm2frames.py b/utils/fasm2frames.py index 5551527e..00270475 100755 --- a/utils/fasm2frames.py +++ b/utils/fasm2frames.py @@ -120,6 +120,11 @@ def run( extra_features = fasm.parse_fasm_string( '\n'.join(roi_j['required_features'])) + # Get required features for the part + # TODO: Specify the part explicitly ? + required_features = db.get_required_fasm_features(None) + extra_features += fasm.parse_fasm_string('\n'.join(required_features)) + assembler.parse_fasm_filename(filename_in, extra_features=extra_features) if emit_pudc_b_pullup and not pudc_b_in_use and pudc_b_tile_site is not None: