Merge pull request #17 from SymbiFlow/next-clifford

Improvements in fuzzers (some for kintex), and some BRAM/DSP stuff
This commit is contained in:
Clifford Wolf 2017-12-23 00:08:59 +01:00 committed by GitHub
commit c6caeb17e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 108 additions and 28 deletions

View File

@ -10,6 +10,7 @@ set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_03) IOSTANDARD LVCMOS33" [get_po
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_param tcl.collectionResultDisplayLimit 0
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -109,7 +109,7 @@ for tile_name, tile_data in database["tiles"].items():
database["segments"][segment_name] = dict()
database["segments"][segment_name]["type"] = segtype
database["segments"][segment_name]["frames"] = 28
database["segments"][segment_name]["words"] = 1
database["segments"][segment_name]["words"] = 2
if k == 0:
database["segments"][segment_name]["tiles"] = [tile_name, interface_tile_name, int_tile_name]
@ -158,7 +158,7 @@ for segment_name in database["segments"].keys():
if "baseaddr" in database["segments"][seg]:
assert database["segments"][seg]["baseaddr"] == [framebase, wordbase]
else:
database["segments"][seg]["baseaddr"] = (framebase, wordbase)
database["segments"][seg]["baseaddr"] = [framebase, wordbase]
#######################################

View File

@ -15,6 +15,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -18,6 +18,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -15,6 +15,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -15,6 +15,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -15,6 +15,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -15,6 +15,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -15,6 +15,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -15,6 +15,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -15,6 +15,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -15,6 +15,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -15,6 +15,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -1,6 +0,0 @@
Experiment looking into the INT PIPs
====================================
Results: ???

View File

@ -0,0 +1,7 @@
Generic fuzzer for INT PIPs
---------------------------
Run this fuzzer a few times until it stops adding new PIPs to the
database.

View File

@ -0,0 +1,6 @@
Fuzzer for INT LOGIC\_OUTS -> IMUX PIPs
---------------------------------------
Run this fuzzer a few times until it produces an empty todo.txt file.

View File

@ -12,6 +12,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
place_design
route_design

View File

@ -0,0 +1,6 @@
Fuzzer for INT PIPs driving the CLK wires
-----------------------------------------
Run this fuzzer a few times until it produces an empty todo.txt file.

View File

@ -59,7 +59,7 @@ for tile, pips_srcs_dsts in tiledata.items():
segmk.addtag(tile, "%s.%s" % (dst, src), 0)
def bitfilter(frame_idx, bit_idx):
assert os.getenv("XRAY_DATABASE") == "artix7"
assert os.getenv("XRAY_DATABASE") in ["artix7", "kintex7"]
if frame_idx == 0 and bit_idx == 48:
return False
if frame_idx == 1 and bit_idx == 31:

View File

@ -12,6 +12,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
place_design
route_design

View File

@ -0,0 +1,6 @@
Fuzzer for INT PIPs driving the CTRL wires
------------------------------------------
Run this fuzzer a few times until it produces an empty todo.txt file.

View File

@ -59,7 +59,7 @@ for tile, pips_srcs_dsts in tiledata.items():
segmk.addtag(tile, "%s.%s" % (dst, src), 0)
def bitfilter(frame_idx, bit_idx):
assert os.getenv("XRAY_DATABASE") == "artix7"
assert os.getenv("XRAY_DATABASE") in ["artix7", "kintex7"]
if (frame_idx, bit_idx) in [(0, 48), (1, 31), (0, 32), (1, 35)]:
return False
return frame_idx in [0, 1]

View File

@ -12,6 +12,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
place_design
route_design

View File

@ -0,0 +1,6 @@
Fuzzer for INT PIPs driving the GFAN wires
------------------------------------------
Run this fuzzer a few times until it produces an empty todo.txt file.

View File

@ -12,6 +12,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
place_design
route_design

View File

@ -0,0 +1,6 @@
Fuzzer for INT PIPs driving the GFAN wires with GND
---------------------------------------------------
Run this fuzzer once.

View File

@ -12,6 +12,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
place_design
route_design

View File

@ -0,0 +1,6 @@
Fuzzer for the remaining INT PIPs
---------------------------------
Run this fuzzer a few times until it produces an empty todo.txt file.

View File

@ -12,6 +12,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
place_design
route_design

View File

@ -0,0 +1,6 @@
Fuzzer for bidirectional INT PIPs
---------------------------------
Run this fuzzer a few times until it produces an empty todo.txt file.

View File

@ -41,7 +41,7 @@ for tile, pips_nodes in tiledata.items():
segmk.addtag(tile, "%s.%s" % (dst, src), 0)
def bitfilter(frame_idx, bit_idx):
assert os.getenv("XRAY_DATABASE") == "artix7"
assert os.getenv("XRAY_DATABASE") in ["artix7", "kintex7"]
return frame_idx in [0, 1]
segmk.compile(bitfilter=bitfilter)

View File

@ -12,6 +12,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
place_design
route_design

View File

@ -0,0 +1,6 @@
Fuzzer for PIPs in HCLK titles
------------------------------
Run this fuzzer once.

View File

@ -12,6 +12,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
place_design
route_design

View File

@ -12,6 +12,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
place_design
route_design

View File

@ -12,6 +12,7 @@ resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_param tcl.collectionResultDisplayLimit 0
place_design
route_design

View File

@ -164,6 +164,8 @@ for segname, segdata in grid["segments"].items():
segtype = segdata["type"].lower()
if segtype not in segbits:
print("Loading data for %s segments:" % segtype)
segbits[segtype] = dict()
segbits_r[segtype] = dict()
routebits[segtype] = dict()
@ -194,7 +196,7 @@ for segname, segdata in grid["segments"].items():
segbits_r[segtype][bit_pos] = bit_name
if segtype not in ["hclk_l", "hclk_r"]:
print("Loading %s segbits." % segtype)
print(" loading %s segbits." % segtype)
with db_open("segbits_%s.db" % segtype) as f:
for line in f:
if re.search(r"(\.[ABCD]MUX\.)|(\.PRECYINIT\.)", line):
@ -202,15 +204,17 @@ for segname, segdata in grid["segments"].items():
else:
add_single_bit(line)
print("Loading %s segbits." % re.sub("clbl[lm]", "int", segtype))
with db_open("segbits_%s.db" % re.sub("clbl[lm]", "int", segtype)) as f:
int_tile_type = re.sub("clbl[lm]|bram[0-4]|dsp[0-4]", "int", segtype)
print(" loading %s segbits." % int_tile_type)
with db_open("segbits_%s.db" % int_tile_type) as f:
for line in f:
if segtype in ["hclk_l", "hclk_r"] and ".ENABLE_BUFFER." in line:
add_single_bit(line)
else:
add_pip_bits(line)
print("Loading %s maskbits." % segtype)
print(" loading %s maskbits." % segtype)
with db_open("mask_%s.db" % segtype) as f:
for line in f:
_, bit = line.split()
@ -310,7 +314,7 @@ for segtype in sorted(segbits.keys()):
print("<h3>X-Ray %s Database: %s Segment</h3>" % (get_setting("XRAY_DATABASE").upper(), segtype.upper()), file=f)
else:
print("<h3>X-Ray %s Database: %s Segment (%s Tile + %s Tile)</h3>" % (get_setting("XRAY_DATABASE").upper(), segtype.upper(),
segtype.upper(), re.sub("clbl[lm]", "int", segtype).upper()), file=f)
segtype.upper(), re.sub("clbl[lm]|bram[0-4]|dsp[0-4]", "int", segtype).upper()), file=f)
print("""
<script><!--

View File

@ -88,15 +88,13 @@ def update_mask(mask_db, *src_dbs):
bits = set()
mask_db_file = "%s/%s/mask_%s.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), mask_db)
if not os.path.exists(mask_db_file):
return
with open(mask_db_file, "r") as f:
for line in f:
line = line.split()
assert len(line) == 2
assert line[0] == "bit"
bits.add(line[1])
if os.path.exists(mask_db_file):
with open(mask_db_file, "r") as f:
for line in f:
line = line.split()
assert len(line) == 2
assert line[0] == "bit"
bits.add(line[1])
for src_db in src_dbs:
seg_db_file = "%s/%s/segbits_%s.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), src_db)
@ -111,9 +109,10 @@ def update_mask(mask_db, *src_dbs):
if bit[0] != "!":
bits.add(bit)
with open(mask_db_file, "w") as f:
for bit in sorted(bits):
print("bit %s" % bit, file=f)
if len(bits) > 0:
with open(mask_db_file, "w") as f:
for bit in sorted(bits):
print("bit %s" % bit, file=f)
add_zero_bits("int_l")
add_zero_bits("int_r")
@ -129,3 +128,9 @@ update_mask("clblm_r", "clblm_r", "int_r")
update_mask("hclk_l", "hclk_l")
update_mask("hclk_r", "hclk_r")
for k in range(5):
update_mask("bram%d_l" % k, "bram%d_l" % k, "int_l")
update_mask("bram%d_r" % k, "bram%d_r" % k, "int_r")
update_mask("dsp%d_l" % k, "dsp%d_l" % k, "int_l")
update_mask("dsp%d_r" % k, "dsp%d_r" % k, "int_r")