From f4778dbfda44fa5d0ac7e5f081c25d1ddd77d7c4 Mon Sep 17 00:00:00 2001 From: Maciej Kurc Date: Wed, 29 Jul 2020 16:24:56 +0200 Subject: [PATCH 1/2] Changed ISERDES feature names to conform to fasm syntax Signed-off-by: Maciej Kurc --- fuzzers/035b-iob-iserdes/generate.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fuzzers/035b-iob-iserdes/generate.py b/fuzzers/035b-iob-iserdes/generate.py index daa3469a..63784373 100644 --- a/fuzzers/035b-iob-iserdes/generate.py +++ b/fuzzers/035b-iob-iserdes/generate.py @@ -64,10 +64,10 @@ def run(): if i == "NETWORKING": for j in data_rates: for k in data_widths[j]: - tag = "ISERDES.%s.%s.%s" % (i, j, k) + tag = "ISERDES.%s.%s.W%s" % (i, j, k) segmk.add_site_tag(loc, tag, 0) else: - segmk.add_site_tag(loc, "ISERDES.%s.DDR.4" % i, 0) + segmk.add_site_tag(loc, "ISERDES.%s.DDR.W4" % i, 0) segmk.add_site_tag(loc, "ISERDES.NUM_CE.N1", 0) segmk.add_site_tag(loc, "ISERDES.NUM_CE.N2", 0) @@ -120,7 +120,7 @@ def run(): if i == "NETWORKING": for j in data_rates: for k in data_widths[j]: - tag = "ISERDES.%s.%s.%s" % (i, j, k) + tag = "ISERDES.%s.%s.W%s" % (i, j, k) val = 0 if i == iface_type: @@ -129,7 +129,7 @@ def run(): segmk.add_site_tag(loc, tag, 1) else: if i == iface_type: - segmk.add_site_tag(loc, "ISERDES.%s.DDR.4" % i, 1) + segmk.add_site_tag(loc, "ISERDES.%s.DDR.W4" % i, 1) if "NUM_CE" in params: value = params["NUM_CE"] From 0ac02c2d2771ad98f2f98c7d3bdcf58ed8577410 Mon Sep 17 00:00:00 2001 From: Maciej Kurc Date: Wed, 29 Jul 2020 16:33:18 +0200 Subject: [PATCH 2/2] Added a feature name check to mergedb.py Signed-off-by: Maciej Kurc --- utils/mergedb.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/utils/mergedb.py b/utils/mergedb.py index f3d477a3..4aa412ef 100755 --- a/utils/mergedb.py +++ b/utils/mergedb.py @@ -9,9 +9,39 @@ # # SPDX-License-Identifier: ISC -import os, sys +import os, sys, re from prjxray import util +TAG_PART_RE = re.compile(r"^[a-zA-Z][0-9a-zA-Z_]*(\[[0-9]+\])?$") + + +def check_tag_name(tag): + ''' + Checks if the tag name given by the used conforms to the valid fasm + name rules. + + >>> check_tag_name("CELL.feature19.ENABLED") + True + >>> check_tag_name("FEATURE") + True + >>> check_tag_name("TAG.") + False + >>> check_tag_name(".TAG") + False + >>> check_tag_name("CELL..FEATURE") + False + >>> check_tag_name("CELL.3ENABLE") + False + >>> check_tag_name("FEATURE.12.ON") + False + ''' + + for part in tag.split("."): + if not len(part) or TAG_PART_RE.match(part) is None: + return False + + return True + def run(fn_ins, fn_out, strict=False, track_origin=False, verbose=False): # tag to bits @@ -27,6 +57,9 @@ def run(fn_ins, fn_out, strict=False, track_origin=False, verbose=False): assert mode is not None or mode != "always", "strict: got ill defined line: %s" % ( line, ) + if not check_tag_name(tag): + assert not strict, "strict: Invalid tag name '{}'".format(tag) + if tag in tags: orig_bits, orig_line, orig_origin = tags[tag] if orig_bits != bits: