diff --git a/fuzzers/035a-iob-idelay/Makefile b/fuzzers/035a-iob-idelay/Makefile index 3066c3a1..60040127 100644 --- a/fuzzers/035a-iob-idelay/Makefile +++ b/fuzzers/035a-iob-idelay/Makefile @@ -4,7 +4,7 @@ include ../fuzzer.mk database: build/segbits_xiob33.db build/segbits_xiob33.rdb: $(SPECIMENS_OK) - ${XRAY_SEGMATCH} -m 2 -M 2 -o build/segbits_xiob33.rdb $$(find -name segdata_*.txt) + ${XRAY_SEGMATCH} -m 1 -M 1 -o build/segbits_xiob33.rdb $$(find -name segdata_*.txt) build/segbits_xiob33.db: build/segbits_xiob33.rdb ${XRAY_DBFIXUP} --db-root build --zero-db bits.dbf --seg-fn-in $^ --seg-fn-out $@ @@ -16,5 +16,5 @@ pushdb: ${XRAY_MERGEDB} mask_liob33 build/mask_xiob33.db ${XRAY_MERGEDB} mask_riob33 build/mask_xiob33.db -.PHONY: todo database pushdb +.PHONY: database pushdb diff --git a/fuzzers/035a-iob-idelay/bits.dbf b/fuzzers/035a-iob-idelay/bits.dbf new file mode 100644 index 00000000..e69de29b diff --git a/fuzzers/035a-iob-idelay/generate.py b/fuzzers/035a-iob-idelay/generate.py index d0ce1d8c..e83cd373 100644 --- a/fuzzers/035a-iob-idelay/generate.py +++ b/fuzzers/035a-iob-idelay/generate.py @@ -11,9 +11,8 @@ segmk = Segmaker("design.bits", verbose=True) with open("params.json", "r") as fp: data = json.load(fp) -idelay_types = ["FIXED", "VARIABLE", "VAR_LOAD"] +idelay_types = ["FIXED", "VARIABLE", "VAR_LOAD"] delay_srcs = ["IDATAIN", "DATAIN"] -signal_patterns = ["DATA", "CLOCK"] # Output tags for params in data: @@ -21,31 +20,35 @@ for params in data: # Delay type value = verilog.unquote(params["IDELAY_TYPE"]) - value = value.replace("_PIPE", "") # VAR_LOAD and VAR_LOAD_PIPE are the same + value = value.replace( + "_PIPE", "") # VAR_LOAD and VAR_LOAD_PIPE are the same for x in idelay_types: - segmk.add_site_tag(loc, "IDELAY_TYPE_%s" % x, int(value == x)) - + segmk.add_site_tag(loc, "IDELAY_TYPE_%s" % x, int(value == x)) + # Delay value value = int(params["IDELAY_VALUE"]) for i in range(5): - segmk.add_site_tag(loc, "IDELAY_VALUE[%01d]" % i, ((value >> i) & 1) != 0) + segmk.add_site_tag( + loc, "IDELAY_VALUE[%01d]" % i, ((value >> i) & 1) != 0) # Delay source value = verilog.unquote(params["DELAY_SRC"]) for x in delay_srcs: - segmk.add_site_tag(loc, "DELAY_SRC_%s" % x, int(value == x)) + segmk.add_site_tag(loc, "DELAY_SRC_%s" % x, int(value == x)) value = verilog.unquote(params["HIGH_PERFORMANCE_MODE"]) - segmk.add_site_tag(loc, "HIGH_PERFORMANCE_MODE", int(value == "TRUE")) + segmk.add_site_tag(loc, "HIGH_PERFORMANCE_MODE", int(value == "TRUE")) value = verilog.unquote(params["CINVCTRL_SEL"]) - segmk.add_site_tag(loc, "CINVCTRL_SEL", int(value == "TRUE")) - + segmk.add_site_tag(loc, "CINVCTRL_SEL", int(value == "TRUE")) + value = verilog.unquote(params["PIPE_SEL"]) - segmk.add_site_tag(loc, "PIPE_SEL", int(value == "TRUE")) + segmk.add_site_tag(loc, "PIPE_SEL", int(value == "TRUE")) + def bitfilter(frame_idx, bit_idx): - return True + return True + segmk.compile(bitfilter=bitfilter) segmk.write() diff --git a/fuzzers/035a-iob-idelay/top.py b/fuzzers/035a-iob-idelay/top.py index a0f2c812..119279f7 100644 --- a/fuzzers/035a-iob-idelay/top.py +++ b/fuzzers/035a-iob-idelay/top.py @@ -11,13 +11,18 @@ from prjxray.db import Database # ============================================================================= + def get_loc(name): m = re.match("^\S+_X([0-9]+)Y([0-9]+)$", name) assert m != None x = int(m.group(1)) y = int(m.group(2)) - return (x, y,) + return ( + x, + y, + ) + def gen_sites(): db = Database(util.get_db_root()) @@ -36,20 +41,22 @@ def gen_sites(): tile_list.sort(key=key) for iob_tile_name in tile_list: - iob_gridinfo = grid.gridinfo_at_loc(grid.loc_of_tilename(iob_tile_name)) + iob_gridinfo = grid.gridinfo_at_loc( + grid.loc_of_tilename(iob_tile_name)) # Find IOI tile adjacent to IOB for suffix in ["IOI3", "IOI3_TBYTESRC", "IOI3_TBYTETERM"]: try: ioi_tile_name = iob_tile_name.replace("IOB33", suffix) - ioi_gridinfo = grid.gridinfo_at_loc(grid.loc_of_tilename(ioi_tile_name)) + ioi_gridinfo = grid.gridinfo_at_loc( + grid.loc_of_tilename(ioi_tile_name)) break except KeyError: pass #idelay = [k for k,v in ioi_gridinfo.sites.items() if v == "IDELAYE2"][0] - iob33s = [k for k,v in iob_gridinfo.sites.items() if v == "IOB33S"][0] - iob33m = [k for k,v in iob_gridinfo.sites.items() if v == "IOB33M"][0] + iob33s = [k for k, v in iob_gridinfo.sites.items() if v == "IOB33S"][0] + iob33m = [k for k, v in iob_gridinfo.sites.items() if v == "IOB33M"][0] idelay_s = iob33s.replace("IOB", "IDELAY") idelay_m = iob33m.replace("IOB", "IDELAY") @@ -57,14 +64,15 @@ def gen_sites(): def run(): - + # Get all [LR]IOI3 tiles tiles = list(gen_sites()) # Header print("// Tile count: %d" % len(tiles)) print("// Seed: '%s'" % os.getenv("SEED")) - print(''' + print( + ''' module top ( input wire [{N}:0] di, output wire [{N}:0] do @@ -88,13 +96,21 @@ wire [{N}:0] do_buf; idelay = sites[3] params = { - "LOC": "\"" + idelay + "\"", - "IDELAY_TYPE": "\"" + random.choice(["FIXED", "VARIABLE", "VAR_LOAD", "VAR_LOAD_PIPE"]) + "\"", - "IDELAY_VALUE": random.randint(0, 31), - "DELAY_SRC": "\"" + random.choice(["IDATAIN", "DATAIN"]) + "\"", - "HIGH_PERFORMANCE_MODE": "\"" + random.choice(["TRUE", "FALSE"]) + "\"", - "CINVCTRL_SEL": "\"" + random.choice(["TRUE", "FALSE"]) + "\"", - "PIPE_SEL": "\"" + random.choice(["TRUE", "FALSE"]) + "\"", + "LOC": + "\"" + idelay + "\"", + "IDELAY_TYPE": + "\"" + random.choice( + ["FIXED", "VARIABLE", "VAR_LOAD", "VAR_LOAD_PIPE"]) + "\"", + "IDELAY_VALUE": + random.randint(0, 31), + "DELAY_SRC": + "\"" + random.choice(["IDATAIN", "DATAIN"]) + "\"", + "HIGH_PERFORMANCE_MODE": + "\"" + random.choice(["TRUE", "FALSE"]) + "\"", + "CINVCTRL_SEL": + "\"" + random.choice(["TRUE", "FALSE"]) + "\"", + "PIPE_SEL": + "\"" + random.choice(["TRUE", "FALSE"]) + "\"", } if params["IDELAY_TYPE"] != "\"VAR_LOAD_PIPE\"": @@ -115,7 +131,8 @@ wire [{N}:0] do_buf; print('IBUF ibuf_%03d (.I(di[%3d]), .O(di_buf[%3d]));' % (i, i, i)) print('(* LOC="%s", KEEP, DONT_TOUCH *)' % iob_o) print('OBUF obuf_%03d (.I(do_buf[%3d]), .O(do[%3d]));' % (i, i, i)) - print('mod #(%s) mod_%03d (.I(di_buf[%3d]), .O(do_buf[%3d]));' % + print( + 'mod #(%s) mod_%03d (.I(di_buf[%3d]), .O(do_buf[%3d]));' % (param_str, i, i, i)) data.append(params) @@ -124,7 +141,8 @@ wire [{N}:0] do_buf; with open("params.json", "w") as fp: json.dump(data, fp, sort_keys=True, indent=1) - print(''' + print( + ''' // IDELAYCTRL (* KEEP, DONT_TOUCH *) IDELAYCTRL idelayctrl(); @@ -190,4 +208,5 @@ LUT6 #(.INIT(32'hDEADBEEF)) lut ( endmodule ''') + run() diff --git a/fuzzers/Makefile b/fuzzers/Makefile index b0662990..0c425cf8 100644 --- a/fuzzers/Makefile +++ b/fuzzers/Makefile @@ -86,6 +86,7 @@ $(eval $(call fuzzer,030-iob,005-tilegrid)) $(eval $(call fuzzer,032-cmt-pll,005-tilegrid)) $(eval $(call fuzzer,034-cmt-pll-pips,005-tilegrid)) $(eval $(call fuzzer,035-iob-ilogic,005-tilegrid)) +$(eval $(call fuzzer,035a-iob-idelay,005-tilegrid)) $(eval $(call fuzzer,036-iob-ologic,005-tilegrid)) $(eval $(call fuzzer,038-cfg,005-tilegrid)) $(eval $(call fuzzer,040-clk-hrow-config,005-tilegrid))