From 10f4ea1de5f48358e83c4c715f70f50669785da6 Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Mon, 18 Jan 2021 15:27:25 +0100 Subject: [PATCH] 063-gtp-common: handle both gtp_common and gtp_common_mid Signed-off-by: Alessandro Comodi --- fuzzers/063-gtp-common-conf/Makefile | 33 +++++++-- fuzzers/063-gtp-common-conf/generate.py | 74 ++++++++++---------- fuzzers/063-gtp-common-conf/pushdb.sh | 15 +++++ fuzzers/063-gtp-common-conf/top.py | 90 +++++++++++++------------ 4 files changed, 128 insertions(+), 84 deletions(-) create mode 100644 fuzzers/063-gtp-common-conf/pushdb.sh diff --git a/fuzzers/063-gtp-common-conf/Makefile b/fuzzers/063-gtp-common-conf/Makefile index 2992e447..386d2b3f 100644 --- a/fuzzers/063-gtp-common-conf/Makefile +++ b/fuzzers/063-gtp-common-conf/Makefile @@ -5,23 +5,46 @@ # https://opensource.org/licenses/ISC # # SPDX-License-Identifier: ISC + +SHELL = bash + N ?= 20 -include ../fuzzer.mk +SPECIMENS := $(addprefix build/specimen_,$(shell seq -f '%03.0f' $(N))) +SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS)) +FUZDIR ?= ${PWD} + +all: database + +# generate.sh / top_generate.sh call make, hence the command must +# have a + before it. +$(SPECIMENS_OK): $(SPECIMENS_DEPS) + mkdir -p build + bash ${XRAY_DIR}/utils/top_generate.sh $(subst /OK,,$@) + +run: + $(MAKE) clean + $(MAKE) database + $(MAKE) pushdb + touch run.${XRAY_PART}.ok + +clean: + rm -rf build run.ok + +.PHONY: all run clean database: build/segbits_gtp_common.db build/segbits_gtp_common.rdb: $(SPECIMENS_OK) - ${XRAY_SEGMATCH} -o build/segbits_gtp_common.rdb $(addsuffix /segdata_gtp_common.txt,$(SPECIMENS)) + ${XRAY_SEGMATCH} -o build/segbits_gtp_common.rdb $$(find $(SPECIMENS) -name "segdata_gtp_common*") build/segbits_gtp_common.db: build/segbits_gtp_common.rdb ${XRAY_DBFIXUP} --db-root build --zero-db bits.dbf \ --seg-fn-in build/segbits_gtp_common.rdb \ --seg-fn-out build/segbits_gtp_common.db - ${XRAY_MASKMERGE} build/mask_gtp_common.db $(addsuffix /segdata_gtp_common.txt,$(SPECIMENS)) + ${XRAY_MASKMERGE} build/mask_gtp_common.db $$(find $(SPECIMENS) -name "segdata_gtp_common*") pushdb: - ${XRAY_MERGEDB} gtp_common build/segbits_gtp_common.db - ${XRAY_MERGEDB} mask_gtp_common build/mask_gtp_common.db + source pushdb.sh .PHONY: database pushdb diff --git a/fuzzers/063-gtp-common-conf/generate.py b/fuzzers/063-gtp-common-conf/generate.py index efe3d5ca..14ed3c88 100644 --- a/fuzzers/063-gtp-common-conf/generate.py +++ b/fuzzers/063-gtp-common-conf/generate.py @@ -21,7 +21,7 @@ BIN = "BIN" def bitfilter(frame, bit): # Filter out interconnect bits. - if frame not in [28, 29]: + if frame not in [28, 29, 0, 1]: return False return True @@ -37,47 +37,51 @@ def main(): print("Loading tags") with open("params.json") as f: - params = json.load(f) + params_list = json.load(f) - site = params["site"] - in_use = params["IN_USE"] + for params in params_list: + site = params["site"] + in_use = params["IN_USE"] - segmk.add_site_tag(site, "IN_USE", in_use) + segmk.add_site_tag(site, "IN_USE", in_use) - if in_use: - for param, param_info in attrs.items(): - value = params[param] - param_type = param_info["type"] - param_digits = param_info["digits"] - param_values = param_info["values"] + if in_use: + for param, param_info in attrs.items(): + value = params[param] + param_type = param_info["type"] + param_digits = param_info["digits"] + param_values = param_info["values"] - if param_type == INT: - param_encodings = param_info["encoding"] - param_encoding = param_encodings[param_values.index(value)] - bitstr = [ - int(x) for x in "{value:0{digits}b}".format( - value=param_encoding, digits=param_digits)[::-1] - ] + if param_type == INT: + param_encodings = param_info["encoding"] + param_encoding = param_encodings[param_values.index(value)] + bitstr = [ + int(x) for x in "{value:0{digits}b}".format( + value=param_encoding, digits=param_digits)[::-1] + ] - for i in range(param_digits): - segmk.add_site_tag(site, '%s[%u]' % (param, i), bitstr[i]) - else: - assert param_type == BIN - bitstr = [ - int(x) for x in "{value:0{digits}b}".format( - value=value, digits=param_digits)[::-1] - ] + for i in range(param_digits): + segmk.add_site_tag( + site, '%s[%u]' % (param, i), bitstr[i]) + else: + assert param_type == BIN + bitstr = [ + int(x) for x in "{value:0{digits}b}".format( + value=value, digits=param_digits)[::-1] + ] - for i in range(param_digits): - segmk.add_site_tag(site, "%s[%u]" % (param, i), bitstr[i]) + for i in range(param_digits): + segmk.add_site_tag( + site, "%s[%u]" % (param, i), bitstr[i]) - for param, invert in [("GTGREFCLK1", 0), ("GTGREFCLK0", 0), - ("PLL0LOCKDETCLK", 1), ("PLL1LOCKDETCLK", - 1), ("DRPCLK", 1)]: - if invert: - segmk.add_site_tag(site, "ZINV_" + param, 1 ^ params[param]) - else: - segmk.add_site_tag(site, "INV_" + param, params[param]) + for param, invert in [("GTGREFCLK1", 0), ("GTGREFCLK0", 0), + ("PLL0LOCKDETCLK", 1), ("PLL1LOCKDETCLK", + 1), ("DRPCLK", 1)]: + if invert: + segmk.add_site_tag( + site, "ZINV_" + param, 1 ^ params[param]) + else: + segmk.add_site_tag(site, "INV_" + param, params[param]) segmk.compile(bitfilter=bitfilter) segmk.write() diff --git a/fuzzers/063-gtp-common-conf/pushdb.sh b/fuzzers/063-gtp-common-conf/pushdb.sh new file mode 100644 index 00000000..b383f17f --- /dev/null +++ b/fuzzers/063-gtp-common-conf/pushdb.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if ! test $(find . -name "segdata_gtp_common_mid_right.txt" | wc -c) -eq 0 +then + ${XRAY_MERGEDB} gtp_common_mid_right build/segbits_gtp_common.db + ${XRAY_MERGEDB} mask_gtp_common_mid_right build/mask_gtp_common.db + ${XRAY_MERGEDB} gtp_common_mid_left build/segbits_gtp_common.db + ${XRAY_MERGEDB} mask_gtp_common_mid_left build/mask_gtp_common.db +fi + +if ! test $(find . -name "segdata_gtp_common.txt" | wc -c) -eq 0 +then + ${XRAY_MERGEDB} gtp_common build/segbits_gtp_common.db + ${XRAY_MERGEDB} mask_gtp_common build/mask_gtp_common.db +fi diff --git a/fuzzers/063-gtp-common-conf/top.py b/fuzzers/063-gtp-common-conf/top.py index f4b6dda2..abd9b318 100644 --- a/fuzzers/063-gtp-common-conf/top.py +++ b/fuzzers/063-gtp-common-conf/top.py @@ -33,7 +33,6 @@ def gen_sites(): if gridinfo.tile_type not in [ "GTP_COMMON", "GTP_COMMON_MID_RIGHT", - "GTP_COMMON_MID_RIGHT", ]: continue @@ -41,7 +40,7 @@ def gen_sites(): if site_type != "GTPE2_COMMON": continue - return site_name, site_type + yield site_name, site_type def main(): @@ -55,66 +54,69 @@ module top( assign out = in; ''') - site_name, site_type = gen_sites() + params_list = list() - params = dict() - params['site'] = site_name + for site_name, site_type in gen_sites(): + params = dict() + params['site'] = site_name - verilog_attr = "" + verilog_attr = "" - verilog_attr = "#(" + verilog_attr = "#(" - fuz_dir = os.getenv("FUZDIR", None) - assert fuz_dir - with open(os.path.join(fuz_dir, "attrs.json"), "r") as attrs_file: - attrs = json.load(attrs_file) + fuz_dir = os.getenv("FUZDIR", None) + assert fuz_dir + with open(os.path.join(fuz_dir, "attrs.json"), "r") as attrs_file: + attrs = json.load(attrs_file) - in_use = bool(random.randint(0, 9)) - params["IN_USE"] = in_use + in_use = bool(random.randint(0, 9)) + params["IN_USE"] = in_use - if in_use: - for param, param_info in attrs.items(): - param_type = param_info["type"] - param_values = param_info["values"] - param_digits = param_info["digits"] + if in_use: + for param, param_info in attrs.items(): + param_type = param_info["type"] + param_values = param_info["values"] + param_digits = param_info["digits"] - if param_type == INT: - value = random.choice(param_values) - value_str = value - else: - assert param_type == BIN - value = random.randint(0, param_values[0]) - value_str = "{digits}'b{value:0{digits}b}".format( - value=value, digits=param_digits) + if param_type == INT: + value = random.choice(param_values) + value_str = value + else: + assert param_type == BIN + value = random.randint(0, param_values[0]) + value_str = "{digits}'b{value:0{digits}b}".format( + value=value, digits=param_digits) - params[param] = value + params[param] = value - verilog_attr += """ - .{}({}),""".format(param, value_str) + verilog_attr += """ + .{}({}),""".format(param, value_str) - for param in ["GTGREFCLK1", "GTGREFCLK0", "PLL0LOCKDETCLK", - "PLL1LOCKDETCLK", "DRPCLK"]: - is_inverted = random.randint(0, 1) + for param in ["GTGREFCLK1", "GTGREFCLK0", "PLL0LOCKDETCLK", + "PLL1LOCKDETCLK", "DRPCLK"]: + is_inverted = random.randint(0, 1) - params[param] = is_inverted + params[param] = is_inverted - verilog_attr += """ - .IS_{}_INVERTED({}),""".format(param, is_inverted) + verilog_attr += """ + .IS_{}_INVERTED({}),""".format(param, is_inverted) - verilog_attr = verilog_attr.rstrip(",") - verilog_attr += "\n)" + verilog_attr = verilog_attr.rstrip(",") + verilog_attr += "\n)" - print("(* KEEP, DONT_TOUCH *)") - print( - """GTPE2_COMMON {} gtp_common ( - .GTREFCLK0(1'b0), - .GTREFCLK1(1'b0) -);""".format(verilog_attr)) + print("(* KEEP, DONT_TOUCH, LOC=\"{}\" *)".format(site_name)) + print( + """GTPE2_COMMON {attrs} {site} ( + .GTREFCLK0(1'b0), + .GTREFCLK1(1'b0) + );""".format(attrs=verilog_attr, site=site_name)) + + params_list.append(params) print("endmodule") with open('params.json', 'w') as f: - json.dump(params, f, indent=2) + json.dump(params_list, f, indent=2) if __name__ == '__main__':