Skip to content

Commit

Permalink
Merge pull request f4pga#92 from SymbiFlow/tilegrid-ng
Browse files Browse the repository at this point in the history
Tilegrid changes for BRAM and DSP tiles
  • Loading branch information
cliffordwolf committed Feb 15, 2018
2 parents 563b543 + 1ec9706 commit d2979d7
Show file tree
Hide file tree
Showing 39 changed files with 687 additions and 397 deletions.
1 change: 1 addition & 0 deletions fuzzers/001-part-yaml/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
/specimen_*/
*.yaml
/run.ok
1 change: 1 addition & 0 deletions fuzzers/005-tilegrid/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
/specimen_*/
/tilegrid.json
/run.ok
33 changes: 33 additions & 0 deletions fuzzers/005-tilegrid/generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,39 @@
segname = database["tiles"][tiles_by_grid[(grid_x, grid_y)]]["segment"]
database["segments"][segname]["baseaddr"] = [framebase, wordbase]

#######################################
# Transfer segment data into tiles

for segment_name in database["segments"].keys():
baseaddr, offset = database["segments"][segment_name]["baseaddr"]
for tile_name in database["segments"][segment_name]["tiles"]:
tile_type = database["tiles"][tile_name]["type"]
if tile_type in ["CLBLL_L", "CLBLL_R", "CLBLM_L", "CLBLM_R", "INT_L",
"INT_R"]:
database["tiles"][tile_name]["baseaddr"] = baseaddr
database["tiles"][tile_name]["offset"] = offset
database["tiles"][tile_name]["height"] = 2
elif tile_type in ["HCLK_L", "HCLK_R"]:
database["tiles"][tile_name]["baseaddr"] = baseaddr
database["tiles"][tile_name]["offset"] = offset
database["tiles"][tile_name]["height"] = 1
elif tile_type in ["BRAM_L", "BRAM_R", "DSP_L", "DSP_R"]:
database["tiles"][tile_name]["baseaddr"] = baseaddr
database["tiles"][tile_name]["offset"] = offset
database["tiles"][tile_name]["height"] = 10
elif tile_type in ["INT_INTERFACE_L", "INT_INTERFACE_R",
"BRAM_INT_INTERFACE_L", "BRAM_INT_INTERFACE_R"]:
continue
else:
# print(tile_type, offset)
assert False

database = database["tiles"]

for tiledata in database.values():
if "segment" in tiledata:
del tiledata["segment"]

#######################################
# Write

Expand Down
1 change: 1 addition & 0 deletions fuzzers/010-lutinit/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
/specimen_[0-9][0-9][0-9]/
/seg_clbl[lm].segbits
/run.ok
1 change: 1 addition & 0 deletions fuzzers/011-ffconfig/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@
/specimen_*
/__pycache__/
/*.segbits
/run.ok
1 change: 1 addition & 0 deletions fuzzers/012-clbn5ffmux/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
/*.segbits
/vivado.log
/vivado.jou
/run.ok
1 change: 1 addition & 0 deletions fuzzers/013-clbncy0/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
/specimen_*/
/*.segbits
/run.ok
1 change: 1 addition & 0 deletions fuzzers/014-ffsrcemux/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@
/vivado*
/specimen_*
/*.segbits
/run.ok
1 change: 1 addition & 0 deletions fuzzers/017-clbprecyinit/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
/*.segbits
/vivado.log
/vivado.jou
/run.ok
1 change: 1 addition & 0 deletions fuzzers/050-intpips/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/specimen_[0-9][0-9][0-9]/
/seg_int_[lr].segbits
/mask_clbl[lm]_[lr].segbits
/run.ok
12 changes: 6 additions & 6 deletions fuzzers/050-intpips/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))

database: $(SPECIMENS_OK)
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_clbl[lm]_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_clbl[lm]_r.txt,$(SPECIMENS))
${XRAY_MASKMERGE} mask_clbll_l.segbits $(addsuffix /segdata_clbll_l.txt,$(SPECIMENS))
${XRAY_MASKMERGE} mask_clbll_r.segbits $(addsuffix /segdata_clbll_r.txt,$(SPECIMENS))
${XRAY_MASKMERGE} mask_clblm_l.segbits $(addsuffix /segdata_clblm_l.txt,$(SPECIMENS))
${XRAY_MASKMERGE} mask_clblm_r.segbits $(addsuffix /segdata_clblm_r.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_int_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))
${XRAY_MASKMERGE} mask_clbll_l.segbits $(addsuffix /segdata_int_l.txt,$(SPECIMENS))
${XRAY_MASKMERGE} mask_clbll_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))
${XRAY_MASKMERGE} mask_clblm_l.segbits $(addsuffix /segdata_int_l.txt,$(SPECIMENS))
${XRAY_MASKMERGE} mask_clblm_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))

pushdb:
${XRAY_MERGEDB} int_l seg_int_l.segbits
Expand Down
1 change: 1 addition & 0 deletions fuzzers/051-imuxlout/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@
/specimen_[0-9][0-9][0-9]/
/todo.txt
/vivado*
/run.ok
4 changes: 2 additions & 2 deletions fuzzers/051-imuxlout/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))

database: $(SPECIMENS_OK)
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_clbl[lm]_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_clbl[lm]_r.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_int_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))

pushdb:
${XRAY_MERGEDB} int_l seg_int_l.segbits
Expand Down
1 change: 1 addition & 0 deletions fuzzers/052-clkin/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@
/specimen_[0-9][0-9][0-9]/
/todo.txt
/vivado*
/run.ok
4 changes: 2 additions & 2 deletions fuzzers/052-clkin/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))

database: $(SPECIMENS_OK)
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_clbl[lm]_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_clbl[lm]_r.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_int_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))

pushdb:
${XRAY_MERGEDB} int_l seg_int_l.segbits
Expand Down
1 change: 1 addition & 0 deletions fuzzers/053-ctrlin/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@
/specimen_[0-9][0-9][0-9]/
/todo.txt
/vivado*
/run.ok
4 changes: 2 additions & 2 deletions fuzzers/053-ctrlin/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))

database: $(SPECIMENS_OK)
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_clbl[lm]_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_clbl[lm]_r.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_int_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))

pushdb:
${XRAY_MERGEDB} int_l seg_int_l.segbits
Expand Down
4 changes: 2 additions & 2 deletions fuzzers/054-gfan/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))

database: $(SPECIMENS_OK)
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_clbl[lm]_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_clbl[lm]_r.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_int_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))

pushdb:
${XRAY_MERGEDB} int_l seg_int_l.segbits
Expand Down
1 change: 1 addition & 0 deletions fuzzers/055-gnd/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@
/specimen_[0-9][0-9][0-9]/
/todo.txt
/vivado*
/run.ok
4 changes: 2 additions & 2 deletions fuzzers/055-gnd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))

database: $(SPECIMENS_OK)
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_clbl[lm]_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_clbl[lm]_r.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_int_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))

pushdb:
${XRAY_MERGEDB} int_l seg_int_l.segbits
Expand Down
1 change: 1 addition & 0 deletions fuzzers/056-rempips/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@
/specimen_[0-9][0-9][0-9]/
/todo.txt
/vivado*
/run.ok
4 changes: 2 additions & 2 deletions fuzzers/056-rempips/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))

database: $(SPECIMENS_OK)
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_clbl[lm]_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_clbl[lm]_r.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_int_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))

pushdb:
${XRAY_MERGEDB} int_l seg_int_l.segbits
Expand Down
1 change: 1 addition & 0 deletions fuzzers/057-bipips/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@
/specimen_[0-9][0-9][0-9]/
/todo.txt
/vivado*
/run.ok
4 changes: 2 additions & 2 deletions fuzzers/057-bipips/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))

database: $(SPECIMENS_OK)
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_clbl[lm]_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_clbl[lm]_r.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_l.segbits $(addsuffix /segdata_int_l.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))

pushdb:
${XRAY_MERGEDB} int_l seg_int_l.segbits
Expand Down
1 change: 1 addition & 0 deletions fuzzers/070-tileconn/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
/specimen_*/
/tileconn.json
/run.ok
8 changes: 4 additions & 4 deletions fuzzers/070-tileconn/generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
os.getenv("XRAY_DATABASE")), "r") as f:
grid = json.load(f)

for tile, tiledata in grid["tiles"].items():
for tile, tiledata in grid.items():
grid_xy = (tiledata["grid_x"], tiledata["grid_y"])
grid2tile[grid_xy] = tile

Expand Down Expand Up @@ -61,8 +61,8 @@ def handle_pair(tile1, tile2):
if tile1 not in tilenodes: return
if tile2 not in tilenodes: return

tile1data = grid["tiles"][tile1]
tile2data = grid["tiles"][tile2]
tile1data = grid[tile1]
tile2data = grid[tile2]

grid1_xy = (tile1data["grid_x"], tile1data["grid_y"])
grid2_xy = (tile2data["grid_x"], tile2data["grid_y"])
Expand Down Expand Up @@ -91,7 +91,7 @@ def handle_pair(tile1, tile2):
database[key] &= wire_pairs


for tile, tiledata in grid["tiles"].items():
for tile, tiledata in grid.items():
grid_right_xy = (tiledata["grid_x"] + 1, tiledata["grid_y"])
grid_below_xy = (tiledata["grid_x"], tiledata["grid_y"] + 1)

Expand Down
1 change: 1 addition & 0 deletions fuzzers/071-ppips/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/specimen_*/
/ppips_clbl[ml]_[lr].txt
/ppips_int_[lr].txt
/run.ok
3 changes: 3 additions & 0 deletions fuzzers/100-dsp-mskpat/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/specimen_[0-9][0-9][0-9]/
/seg_dsp_[lr].segbits
/run.ok
29 changes: 29 additions & 0 deletions fuzzers/100-dsp-mskpat/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@

N := 1
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))

database: $(SPECIMENS_OK)
${XRAY_SEGMATCH} -o seg_dsp_l.segbits $(addsuffix /segdata_dsp_l_*.txt,$(SPECIMENS))
${XRAY_SEGMATCH} -o seg_dsp_r.segbits $(addsuffix /segdata_dsp_r_*.txt,$(SPECIMENS))

pushdb:
${XRAY_MERGEDB} dsp_l seg_dsp_l.segbits
${XRAY_MERGEDB} dsp_r seg_dsp_r.segbits
${XRAY_DBFIXUP}

$(SPECIMENS_OK):
bash generate.sh $(subst /OK,,$@)
touch $@

run:
$(MAKE) clean
$(MAKE) database
$(MAKE) pushdb
touch run.ok

clean:
rm -rf specimen_[0-9][0-9][0-9]/ seg_dsp_l.segbits seg_dsp_r.segbits run.ok

.PHONY: database pushdb run clean

27 changes: 27 additions & 0 deletions fuzzers/100-dsp-mskpat/generate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/env python3

import sys, os, re

sys.path.append("../../../utils/")
from segmaker import segmaker

segmk = segmaker("design_%s.bits" % sys.argv[1])

pipdata = dict()
ignpip = set()

print("Loading tags from design.txt.")
with open("design_%s.txt" % sys.argv[1], "r") as f:
for line in f:
tile, loc, mask, pattern = line.split()
dsp = "DSP_0" if loc[-1] in "02468" else "DSP_1"

mask = int(mask.replace("48'h", ""), 16)
pattern = int(pattern.replace("48'h", ""), 16)

for i in range(48):
segmk.addtag(tile, "%s.MASK[%d]" % (dsp, i), (mask >> i) & 1)
segmk.addtag(tile, "%s.PATTERN[%d]" % (dsp, i), (pattern >> i) & 1)

segmk.compile()
segmk.write(suffix=sys.argv[1])
11 changes: 11 additions & 0 deletions fuzzers/100-dsp-mskpat/generate.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/bash

source ${XRAY_GENHEADER}

vivado -mode batch -source ../generate.tcl

for i in {10..29}; do
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o design_${i}.bits -z -y design_${i}.bit
python3 ../generate.py $i
done

71 changes: 71 additions & 0 deletions fuzzers/100-dsp-mskpat/generate.tcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
create_project -force -part $::env(XRAY_PART) design design

read_verilog ../top.v
synth_design -top top

set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_00) IOSTANDARD LVCMOS33" [get_ports i]
set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_01) IOSTANDARD LVCMOS33" [get_ports o]

create_pblock roi
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

write_checkpoint -force design.dcp

source ../../../utils/utils.tcl
set cells [list]

set gnd_net [create_net gnd_net]
set gnd_cell [create_cell -reference GND gnd_cell]
connect_net -net $gnd_net -objects [get_pins $gnd_cell/G]

foreach site [get_sites -of_objects [filter [roi_tiles] -filter {TYPE == "DSP_L" || TYPE == "DSP_R"}] -filter {SITE_TYPE =~ DSP*}] {
set cell [create_cell -reference DSP48E1 ${site}_cell]
lappend cells $cell
set_property LOC $site $cell
foreach pin [get_pins -of_objects $cell -filter {DIRECTION == "IN"}] {
connect_net -net $gnd_net -objects $pin
}
}

route_design

proc write_txtdata {filename} {
upvar 1 cells cells
puts "Writing $filename."
set fp [open $filename w]
foreach cell $cells {
set loc [get_property LOC $cell]
set mask [get_property MASK $cell]
set pattern [get_property PATTERN $cell]
set tile [get_tiles -of_objects [get_sites -filter "NAME == $loc"]]
puts $fp "$tile $loc $mask $pattern"
}
close $fp
}

proc randhex {len} {
set s ""
for {set i 0} {$i < $len} {incr i} {
set s "$s[format %x [expr {int(rand()*16)}]]"
}
return $s
}

for {set i 10} {$i < 30} {incr i} {
foreach cell $cells {
set_property MASK "48'h[randhex 12]" $cell
set_property PATTERN "48'h[randhex 12]" $cell
}
write_checkpoint -force design_${i}.dcp
write_bitstream -force design_${i}.bit
write_txtdata design_${i}.txt
}

3 changes: 3 additions & 0 deletions fuzzers/100-dsp-mskpat/top.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module top (input i, output o);
assign o = i;
endmodule

0 comments on commit d2979d7

Please sign in to comment.