diff --git a/Makefile b/Makefile index 03cae068..9b5078d6 100644 --- a/Makefile +++ b/Makefile @@ -139,9 +139,31 @@ $(foreach DB,$(DATABASES),$(eval $(call database,$(DB)))) .PHONY: db-extras-artix7 db-extras-kintex7 db-extras-zynq7 +# Targets related to Project X-Ray parts +# -------------------------------------- + +ARTIX_PARTS=artix50t artix200t +ZYNQ_PARTS=zynq020 +KINTEX_PARTS=kintex70t + +XRAY_PARTS=${ARTIX_PARTS} ${ZYNQ_PARTS} ${KINTEX_PARTS} + +define multiple-parts + +# $(1): PART to be used + +db-part-only-$(1): + +source settings/$(1).sh && $(MAKE) -C fuzzers part_only + +endef + +$(foreach PART,$(XRAY_PARTS),$(eval $(call multiple-parts,$(PART)))) + +db-extras-artix7-parts: $(addprefix db-part-only-,$(ARTIX_PARTS)) + db-extras-artix7: - +source minitests/roi_harness/basys3-swbut.sh && $(MAKE) -C fuzzers part_only - +source minitests/roi_harness/arty-uart.sh && $(MAKE) -C fuzzers part_only + +source minitests/roi_harness/basys3-swbut.sh && $(MAKE) -C fuzzers roi_only + +source minitests/roi_harness/arty-uart.sh && $(MAKE) -C fuzzers roi_only +source minitests/roi_harness/basys3-swbut.sh && \ $(MAKE) -C minitests/roi_harness \ HARNESS_DIR=$(XRAY_DATABASE_DIR)/artix7/harness/basys3/swbut run copy @@ -158,6 +180,8 @@ db-extras-artix7: +source minitests/roi_harness/arty-swbut.sh && \ $(MAKE) -C minitests/roi_harness \ HARNESS_DIR=$(XRAY_DATABASE_DIR)/artix7/harness/arty-a7/swbut run copy + # Generate multiple part support + +$(MAKE) db-extras-artix7-parts db-extras-kintex7: @true diff --git a/fuzzers/005-tilegrid/generate_tiles.tcl b/fuzzers/005-tilegrid/generate_tiles.tcl index 64b62656..bdfb4304 100644 --- a/fuzzers/005-tilegrid/generate_tiles.tcl +++ b/fuzzers/005-tilegrid/generate_tiles.tcl @@ -3,6 +3,7 @@ source "$::env(FUZDIR)/util.tcl" proc write_tiles_txt {} { # Get all tiles, ie not just the selected LUTs set tiles [get_tiles] + set not_allowed_sites [get_sites -of_objects [get_pblocks exclude_roi]] # Write tiles.txt with site metadata set fp [open "tiles.txt" w] @@ -12,6 +13,23 @@ proc write_tiles_txt {} { set grid_x [get_property GRID_POINT_X $tile] set grid_y [get_property GRID_POINT_Y $tile] set sites [get_sites -quiet -of_objects $tile] + + # There are some sites which are not allowed to be placed. + # This check excludes tiles in the EXCLUDE_ROI pblock + # be added to tilegrid.json + set skip_tile 0 + foreach site $sites { + set res [lsearch $not_allowed_sites $site] + if { $res != -1 } { + set skip_tile 1 + break + } + } + + if { $skip_tile == 1 } { + continue + } + set typed_sites {} set clock_region "NA" @@ -41,7 +59,7 @@ proc write_tiles_txt {} { proc run {} { # Generate grid of entire part - make_project_roi XRAY_ROI_TILEGRID + make_project_roi XRAY_ROI_TILEGRID XRAY_EXCLUDE_ROI_TILEGRID place_design route_design diff --git a/fuzzers/005-tilegrid/util.tcl b/fuzzers/005-tilegrid/util.tcl index dc9b511c..3765fff3 100644 --- a/fuzzers/005-tilegrid/util.tcl +++ b/fuzzers/005-tilegrid/util.tcl @@ -138,10 +138,10 @@ proc assign_iobs {} { proc make_project {} { # Generate .bit only over ROI - make_project_roi XRAY_ROI_TILEGRID + make_project_roi XRAY_ROI_TILEGRID XRAY_EXCLUDE_ROI_TILEGRID } -proc make_project_roi { roi_var } { +proc make_project_roi { roi_var exclude_roi_var } { # 6 CMTs in our reference part # What is the largest? set n_di 16 @@ -160,6 +160,13 @@ proc make_project_roi { roi_var } { resize_pblock [get_pblocks roi] -add "$roi" } + create_pblock exclude_roi + add_cells_to_pblock [get_pblocks roi] [get_cells roi] + foreach roi "$::env($exclude_roi_var)" { + puts "ROI: $roi" + resize_pblock [get_pblocks exclude_roi] -add "$roi" + } + set_property CFGBVS VCCO [current_design] set_property CONFIG_VOLTAGE 3.3 [current_design] set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design] diff --git a/fuzzers/Makefile b/fuzzers/Makefile index cea2fe41..1a1d4ac7 100644 --- a/fuzzers/Makefile +++ b/fuzzers/Makefile @@ -127,11 +127,46 @@ $(eval $(call fuzzer,100-dsp-mskpat,005-tilegrid)) quick: $(MAKE) QUICK=Y -# part_only runs the fuzzers required for supporting additional parts. -# Note: In theory this includes 005-tilegrid, but there isn't support for -# multiple tilegrid's per family at this time. -part_only: +# roi_only runs the fuzzers required for supporting additional parts when building +# an roi harness. +roi_only: +$(MAKE) -C 001-part-yaml run +$(MAKE) -C 075-pins run -.PHONY: all clean clean_fuzzers clean_logs quick part_only +# Part only targets +# ----------------- + +part_only_yaml: + echo ${XRAY_FAMILY_DIR}/${XRAY_PART}/part.yaml + +$(MAKE) -C 001-part-yaml run + cp ${XRAY_FAMILY_DIR}/${XRAY_PART}.yaml ${XRAY_FAMILY_DIR}/${XRAY_PART}/part.yaml + cp ${XRAY_FAMILY_DIR}/${XRAY_PART}.json ${XRAY_FAMILY_DIR}/${XRAY_PART}/part.json + +part_only_tilegrid: + +$(MAKE) -C 005-tilegrid run + cp ${XRAY_FAMILY_DIR}/tilegrid.json ${XRAY_FAMILY_DIR}/${XRAY_PART}/tilegrid.json + +part_only_tileconn: + +$(MAKE) -C 072-ordered_wires run + +$(MAKE) -C 073-get_counts run + +$(MAKE) -C 074-dump_all run + cp ${XRAY_FAMILY_DIR}/tileconn.json ${XRAY_FAMILY_DIR}/${XRAY_PART}/tileconn.json + +part_only_pins: + +$(MAKE) -C 075-pins run + cp ${XRAY_FAMILY_DIR}/${XRAY_PART}_package_pins.csv ${XRAY_FAMILY_DIR}/${XRAY_PART}/package_pins.csv + +part_only: + # Create PART-specific directory + mkdir -p ${XRAY_FAMILY_DIR}/${XRAY_PART} + # Generate YAML + +$(MAKE) part_only_yaml + # Generate Tile grid + +$(MAKE) part_only_tilegrid + # Generate Tile connections + +$(MAKE) part_only_tileconn + # Generate package pins + +$(MAKE) part_only_pins + + +.PHONY: all clean clean_fuzzers clean_logs quick part_only roi_only diff --git a/settings/artix200t.sh b/settings/artix200t.sh new file mode 100644 index 00000000..ea58e36d --- /dev/null +++ b/settings/artix200t.sh @@ -0,0 +1,19 @@ +export XRAY_DATABASE="artix7" +export XRAY_PART="xc7a200tffg1156-1" +export XRAY_ROI_FRAMES="0x00000000:0xffffffff" + +# All CLB's in part, all BRAM's in part, all DSP's in part. +# tcl queries IOB => don't bother adding +export XRAY_ROI_TILEGRID="SLICE_X0Y0:SLICE_X163Y249 RAMB18_X0Y0:RAMB18_X8Y99 RAMB36_X0Y0:RAMB36_X8Y49 DSP48_X0Y0:DSP48_X8Y99 IOB_X0Y0:IOB_X1Y249" + +export XRAY_EXCLUDE_ROI_TILEGRID="SLICE_X82Y200:SLICE_X83Y249 SLICE_X82Y0:SLICE_X83Y49" + +export XRAY_PIN_00="R26" +export XRAY_PIN_01="P26" +export XRAY_PIN_02="N26" +export XRAY_PIN_03="M27" +export XRAY_PIN_04="U25" +export XRAY_PIN_05="T25" +export XRAY_PIN_06="P24" + +source $(dirname ${BASH_SOURCE[0]})/../utils/environment.sh diff --git a/settings/artix50t.sh b/settings/artix50t.sh new file mode 100644 index 00000000..726fb337 --- /dev/null +++ b/settings/artix50t.sh @@ -0,0 +1,19 @@ +export XRAY_DATABASE="artix7" +export XRAY_PART="xc7a50tfgg484-1" +export XRAY_ROI_FRAMES="0x00000000:0xffffffff" + +# All CLB's in part, all BRAM's in part, all DSP's in part. +# tcl queries IOB => don't bother adding +export XRAY_ROI_TILEGRID="SLICE_X0Y0:SLICE_X65Y99 SLICE_X0Y100:SLICE_X57Y149 RAMB18_X0Y0:RAMB18_X1Y59 RAMB36_X0Y0:RAMB36_X1Y29 RAMB18_X2Y0:RAMB18_X2Y39 RAMB36_X2Y0:RAMB36_X2Y19 DSP48_X0Y0:DSP48_X1Y59" + +export XRAY_EXCLUDE_ROI_TILEGRID="" + +export XRAY_PIN_00="E22" +export XRAY_PIN_01="D22" +export XRAY_PIN_02="E21" +export XRAY_PIN_03="D21" +export XRAY_PIN_04="G21" +export XRAY_PIN_05="G22" +export XRAY_PIN_06="F21" + +source $(dirname ${BASH_SOURCE[0]})/../utils/environment.sh diff --git a/settings/artix7.sh b/settings/artix7.sh index 7c8a9386..a6322781 100644 --- a/settings/artix7.sh +++ b/settings/artix7.sh @@ -6,6 +6,8 @@ export XRAY_ROI_FRAMES="0x00000000:0xffffffff" # tcl queries IOB => don't bother adding export XRAY_ROI_TILEGRID="SLICE_X0Y0:SLICE_X65Y99 SLICE_X0Y100:SLICE_X57Y149 RAMB18_X0Y0:RAMB18_X1Y59 RAMB36_X0Y0:RAMB36_X1Y29 RAMB18_X2Y0:RAMB18_X2Y39 RAMB36_X2Y0:RAMB36_X2Y19 DSP48_X0Y0:DSP48_X1Y59" +export XRAY_EXCLUDE_ROI_TILEGRID="" + # These settings must remain in sync export XRAY_ROI="SLICE_X0Y100:SLICE_X35Y149 RAMB18_X0Y40:RAMB18_X0Y59 RAMB36_X0Y20:RAMB36_X0Y29 DSP48_X0Y40:DSP48_X0Y59 IOB_X0Y100:IOB_X0Y149" # Most of CMT X0Y2. diff --git a/settings/kintex7.sh b/settings/kintex7.sh index acd366a3..a2a66ea0 100644 --- a/settings/kintex7.sh +++ b/settings/kintex7.sh @@ -5,6 +5,8 @@ export XRAY_ROI_FRAMES="0x00000000:0xffffffff" # FIXME: make entire part export XRAY_ROI_TILEGRID="SLICE_X0Y50:SLICE_X19Y99 DSP48_X0Y20:DSP48_X0Y39 RAMB18_X0Y20:RAMB18_X0Y39 RAMB36_X0Y10:RAMB36_X0Y19" +export XRAY_EXCLUDE_ROI_TILEGRID="" + # These settings must remain in sync export XRAY_ROI="SLICE_X0Y50:SLICE_X19Y99 DSP48_X0Y20:DSP48_X0Y39 RAMB18_X0Y20:RAMB18_X0Y39 RAMB36_X0Y10:RAMB36_X0Y19 IOB_X0Y50:IOB_X0Y99" # Part of CMT X0Y1 diff --git a/settings/zynq7.sh b/settings/zynq7.sh index 64c75b87..97a9b826 100644 --- a/settings/zynq7.sh +++ b/settings/zynq7.sh @@ -5,6 +5,8 @@ export XRAY_ROI_FRAMES="0x00000000:0xffffffff" # All CLB's in part, all BRAM's in part, all DSP's in part. export XRAY_ROI_TILEGRID="SLICE_X0Y0:SLICE_X43Y99 RAMB18_X0Y0:RAMB18_X2Y39 RAMB36_X0Y0:RAMB36_X2Y19 DSP48_X0Y0:DSP48_X1Y39" +export XRAY_EXCLUDE_ROI_TILEGRID="" + # These settings must remain in sync export XRAY_ROI="SLICE_X00Y50:SLICE_X43Y99 RAMB18_X0Y20:RAMB18_X2Y39 RAMB36_X0Y10:RAMB36_X2Y19 IOB_X0Y50:IOB_X0Y99" diff --git a/utils/environment.sh b/utils/environment.sh index 90b328b7..3158ad03 100644 --- a/utils/environment.sh +++ b/utils/environment.sh @@ -10,6 +10,7 @@ export XRAY_DIR="$( dirname "$XRAY_UTILS_DIR" )" export XRAY_DATABASE_DIR="${XRAY_DIR}/database" export XRAY_TOOLS_DIR="${XRAY_DIR}/build/tools" export XRAY_FUZZERS_DIR="${XRAY_DIR}/fuzzers" +export XRAY_FAMILY_DIR="${XRAY_DATABASE_DIR}/${XRAY_DATABASE}" if [ -e "${XRAY_DIR}/env/bin/activate" ]; then source "${XRAY_DIR}/env/bin/activate"