mirror of https://github.com/openXC7/prjxray.git
Merge pull request #17 from SymbiFlow/next-clifford
Improvements in fuzzers (some for kintex), and some BRAM/DSP stuff
This commit is contained in:
commit
c6caeb17e2
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
||||
#######################################
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
|
||||
Experiment looking into the INT PIPs
|
||||
====================================
|
||||
|
||||
Results: ???
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
|
||||
Generic fuzzer for INT PIPs
|
||||
---------------------------
|
||||
|
||||
Run this fuzzer a few times until it stops adding new PIPs to the
|
||||
database.
|
||||
|
||||
|
|
@ -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.
|
||||
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
|
||||
Fuzzer for INT PIPs driving the GFAN wires with GND
|
||||
---------------------------------------------------
|
||||
|
||||
Run this fuzzer once.
|
||||
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
|
||||
Fuzzer for the remaining INT PIPs
|
||||
---------------------------------
|
||||
|
||||
Run this fuzzer a few times until it produces an empty todo.txt 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
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
|
||||
Fuzzer for bidirectional INT PIPs
|
||||
---------------------------------
|
||||
|
||||
Run this fuzzer a few times until it produces an empty todo.txt 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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
|
||||
Fuzzer for PIPs in HCLK titles
|
||||
------------------------------
|
||||
|
||||
Run this fuzzer once.
|
||||
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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><!--
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue