From 81c3582c17872434aa1ca2c0e0547de504e10b3c Mon Sep 17 00:00:00 2001 From: John McMaster Date: Tue, 27 Nov 2018 13:48:31 -0800 Subject: [PATCH 1/7] rempips: makefile stricter error checking Signed-off-by: John McMaster --- fuzzers/056-rempips/Makefile | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/fuzzers/056-rempips/Makefile b/fuzzers/056-rempips/Makefile index 7795944a..5e4ab572 100644 --- a/fuzzers/056-rempips/Makefile +++ b/fuzzers/056-rempips/Makefile @@ -18,10 +18,23 @@ $(SPECIMENS_OK): todo.txt todo.txt: vivado -mode batch -source piplist.tcl - python3 maketodo.py | sort -R | head -n10 > todo.txt + python3 maketodo.py | sort -R | head -n10 > todo.txt.tmp + mv todo.txt.tmp todo.txt +# Conider moving to script run: - +set -ex; while make clean; make todo.txt; test -s todo.txt; do if make database; then make pushdb; fi; done; true + \ + +set -ex; \ + while \ + make clean; \ + make todo.txt || exit 1; \ + test -s todo.txt; \ + do \ + if make database; then \ + make pushdb; \ + fi; \ + done; \ + true touch run.ok clean: From 9bb3b49619441c6f6bcc5e662d83ef7c7983dc54 Mon Sep 17 00:00:00 2001 From: John McMaster Date: Tue, 27 Nov 2018 13:49:05 -0800 Subject: [PATCH 2/7] rempips: maketodo logging, --no-strict option Signed-off-by: John McMaster --- fuzzers/056-rempips/maketodo.py | 63 +++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 11 deletions(-) diff --git a/fuzzers/056-rempips/maketodo.py b/fuzzers/056-rempips/maketodo.py index de136587..98585551 100644 --- a/fuzzers/056-rempips/maketodo.py +++ b/fuzzers/056-rempips/maketodo.py @@ -1,26 +1,67 @@ #!/usr/bin/env python3 -import os, re +import os, re, sys +from prjxray import util -def maketodo(pipfile, dbfile): +def maketodo(pipfile, dbfile, strict=True): + '''Print name of all pips in pipfile but not dbfile''' todos = set() with open(pipfile, "r") as f: for line in f: line = line.split() todos.add(line[0]) + print('%s: %u entries' % (pipfile, len(todos)), file=sys.stderr) with open(dbfile, "r") as f: for line in f: line = line.split() - todos.remove(line[0]) + pip = line[0] + try: + todos.remove(pip) + except KeyError: + # DB (incorrectly) had multiple entries + # Workaround for testing on old DB revision + if strict: + raise + print( + 'WARNING: failed to remove pip %s' % pip, file=sys.stderr) + print('Remove %s: %u entries' % (dbfile, len(todos)), file=sys.stderr) + drops = 0 + lines = 0 for line in todos: - if not line.endswith(".VCC_WIRE"): - print(line) + if line.endswith(".VCC_WIRE"): + drops += 1 + continue + print(line) + lines += 1 + print('Print %u entries w/ %u drops' % (lines, drops), file=sys.stderr) -maketodo( - "pips_int_l.txt", "%s/%s/segbits_int_l.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo( - "pips_int_r.txt", "%s/%s/segbits_int_r.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) +def run(strict=True): + maketodo( + "pips_int_l.txt", + "%s/%s/segbits_int_l.db" % + (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE")), + strict=strict) + maketodo( + "pips_int_r.txt", + "%s/%s/segbits_int_r.db" % + (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE")), + strict=strict) + + +def main(): + import argparse + + parser = argparse.ArgumentParser( + description="Print list of known but unsolved PIPs") + + # util.db_root_arg(parser) + parser.add_argument('--no-strict', action='store_true', help='') + args = parser.parse_args() + + run(strict=not args.no_strict) + + +if __name__ == '__main__': + main() From 3e7bad6f3fadf390e90d2b11b1c22c005c3096b1 Mon Sep 17 00:00:00 2001 From: John McMaster Date: Tue, 27 Nov 2018 14:24:16 -0800 Subject: [PATCH 3/7] rempips: makefile todo.txt vivado only once Signed-off-by: John McMaster --- fuzzers/056-rempips/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fuzzers/056-rempips/Makefile b/fuzzers/056-rempips/Makefile index 5e4ab572..62b81f16 100644 --- a/fuzzers/056-rempips/Makefile +++ b/fuzzers/056-rempips/Makefile @@ -16,8 +16,10 @@ $(SPECIMENS_OK): todo.txt bash generate.sh $(subst /OK,,$@) touch $@ -todo.txt: +pips_int_l.txt: piplist.tcl vivado -mode batch -source piplist.tcl + +todo.txt: pips_int_l.txt python3 maketodo.py | sort -R | head -n10 > todo.txt.tmp mv todo.txt.tmp todo.txt From 2477aecd8f12c87fe0bba124f893ceb012cbfe96 Mon Sep 17 00:00:00 2001 From: John McMaster Date: Tue, 27 Nov 2018 14:27:05 -0800 Subject: [PATCH 4/7] rempips: support generate without existing db Signed-off-by: John McMaster --- fuzzers/056-rempips/maketodo.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/fuzzers/056-rempips/maketodo.py b/fuzzers/056-rempips/maketodo.py index 98585551..8702c95d 100644 --- a/fuzzers/056-rempips/maketodo.py +++ b/fuzzers/056-rempips/maketodo.py @@ -12,19 +12,22 @@ def maketodo(pipfile, dbfile, strict=True): line = line.split() todos.add(line[0]) print('%s: %u entries' % (pipfile, len(todos)), file=sys.stderr) - with open(dbfile, "r") as f: - for line in f: - line = line.split() - pip = line[0] - try: - todos.remove(pip) - except KeyError: - # DB (incorrectly) had multiple entries - # Workaround for testing on old DB revision - if strict: - raise - print( - 'WARNING: failed to remove pip %s' % pip, file=sys.stderr) + # Support generate without existing DB + if os.path.exists(dbfile) or strict: + with open(dbfile, "r") as f: + for line in f: + line = line.split() + pip = line[0] + try: + todos.remove(pip) + except KeyError: + # DB (incorrectly) had multiple entries + # Workaround for testing on old DB revision + if strict: + raise + print( + 'WARNING: failed to remove pip %s' % pip, + file=sys.stderr) print('Remove %s: %u entries' % (dbfile, len(todos)), file=sys.stderr) drops = 0 lines = 0 From b07ea0a3a12006fba246543f526d82310612366f Mon Sep 17 00:00:00 2001 From: John McMaster Date: Tue, 27 Nov 2018 15:46:30 -0800 Subject: [PATCH 5/7] rempips: build dir Signed-off-by: John McMaster --- fuzzers/056-rempips/.gitignore | 17 +++---------- fuzzers/056-rempips/Makefile | 41 +++++++++++++++++--------------- fuzzers/056-rempips/generate.sh | 1 + fuzzers/056-rempips/generate.tcl | 8 +++++-- fuzzers/056-rempips/maketodo.py | 4 ++-- fuzzers/056-rempips/piplist.tcl | 4 ++-- utils/top_generate.sh | 6 ++++- 7 files changed, 41 insertions(+), 40 deletions(-) diff --git a/fuzzers/056-rempips/.gitignore b/fuzzers/056-rempips/.gitignore index 145bd747..0c1760e4 100644 --- a/fuzzers/056-rempips/.gitignore +++ b/fuzzers/056-rempips/.gitignore @@ -1,14 +1,3 @@ -/filtered_seg_int_l.segbits -/filtered_seg_int_r.segbits -/pattern_l.txt -/pattern_r.txt -/piplist.dcp -/piplist/ -/pips_int_l.txt -/pips_int_r.txt -/seg_int_l.segbits -/seg_int_r.segbits -/specimen_[0-9][0-9][0-9]/ -/todo.txt -/vivado* -/run.ok +build +run.ok + diff --git a/fuzzers/056-rempips/Makefile b/fuzzers/056-rempips/Makefile index 62b81f16..47567eb4 100644 --- a/fuzzers/056-rempips/Makefile +++ b/fuzzers/056-rempips/Makefile @@ -1,36 +1,41 @@ - +# WARNING: N cannot be reduced or -m will always fail N := 10 -SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N))) +SPECIMENS := $(addprefix build/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.db $(addsuffix /segdata_int_l.txt,$(SPECIMENS)) - ${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.db $(addsuffix /segdata_int_r.txt,$(SPECIMENS)) + ${XRAY_SEGMATCH} -m 5 -M 15 -o build/seg_int_l.db $(addsuffix /segdata_int_l.txt,$(SPECIMENS)) + ${XRAY_SEGMATCH} -m 5 -M 15 -o build/seg_int_r.db $(addsuffix /segdata_int_r.txt,$(SPECIMENS)) pushdb: ${XRAY_DBFIXUP} --db-root . --clb-int - ${XRAY_MERGEDB} int_l seg_int_l.db - ${XRAY_MERGEDB} int_r seg_int_r.db + ${XRAY_MERGEDB} int_l build/seg_int_l.db + ${XRAY_MERGEDB} int_r build/seg_int_r.db -$(SPECIMENS_OK): todo.txt - bash generate.sh $(subst /OK,,$@) +$(SPECIMENS_OK): build/todo.txt + mkdir -p build + bash ${XRAY_DIR}/utils/top_generate.sh $(subst /OK,,$@) touch $@ -pips_int_l.txt: piplist.tcl - vivado -mode batch -source piplist.tcl +build/pips_int_l.txt: piplist.tcl + mkdir -p build + cd build && vivado -mode batch -source ../piplist.tcl -todo.txt: pips_int_l.txt - python3 maketodo.py | sort -R | head -n10 > todo.txt.tmp - mv todo.txt.tmp todo.txt +# Used 1) to see if we are done 2) pips to try in generate.tcl +build/todo.txt: build/pips_int_l.txt + #python3 maketodo.py --no-strict | sort -R | head -n10 > build/todo.txt.tmp + python3 maketodo.py --no-strict | sort -R | head -n10 > build/todo.txt.tmp + mv build/todo.txt.tmp build/todo.txt -# Conider moving to script + +# XXX: conider moving to script run: \ +set -ex; \ while \ make clean; \ - make todo.txt || exit 1; \ - test -s todo.txt; \ + make build/todo.txt || exit 1; \ + test -s build/todo.txt; \ do \ if make database; then \ make pushdb; \ @@ -40,9 +45,7 @@ run: touch run.ok clean: - rm -rf .Xil/ .cache/ filtered_seg_int_[lr].db run.ok - rm -rf todo.txt vivado* piplist/ piplist.dcp pattern_[lr].txt pips_int_[lr].txt - rm -rf specimen_[0-9][0-9][0-9]/ seg_int_[lr].db + rm -rf build run.ok .PHONY: database pushdb run clean diff --git a/fuzzers/056-rempips/generate.sh b/fuzzers/056-rempips/generate.sh index 9f904105..60b0c180 100644 --- a/fuzzers/056-rempips/generate.sh +++ b/fuzzers/056-rempips/generate.sh @@ -1,5 +1,6 @@ #!/bin/bash +FUZDIR=$PWD source ${XRAY_GENHEADER} vivado -mode batch -source ../generate.tcl diff --git a/fuzzers/056-rempips/generate.tcl b/fuzzers/056-rempips/generate.tcl index 5f160173..286a3afd 100644 --- a/fuzzers/056-rempips/generate.tcl +++ b/fuzzers/056-rempips/generate.tcl @@ -1,6 +1,6 @@ create_project -force -part $::env(XRAY_PART) design design -read_verilog ../top.v +read_verilog ../../top.v synth_design -top top set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_00) IOSTANDARD LVCMOS33" [get_ports i] @@ -19,7 +19,7 @@ route_design # write_checkpoint -force design.dcp -source ../../../utils/utils.tcl +source "$::env(XRAY_DIR)/utils/utils.tcl" set fp [open "../todo.txt" r] set todo_lines {} @@ -77,6 +77,10 @@ proc write_txtdata {filename} { } route_design + +# Ex: ERROR: [DRC RTSTAT-5] Partial antennas: 1 net(s) have a partial antenna. The problem bus(es) and/or net(s) are mynet_2. +# set_property IS_ENABLED 0 [get_drc_checks {RTSTAT-5}] + write_checkpoint -force design.dcp write_bitstream -force design.bit write_txtdata design.txt diff --git a/fuzzers/056-rempips/maketodo.py b/fuzzers/056-rempips/maketodo.py index 8702c95d..59391a8a 100644 --- a/fuzzers/056-rempips/maketodo.py +++ b/fuzzers/056-rempips/maketodo.py @@ -42,12 +42,12 @@ def maketodo(pipfile, dbfile, strict=True): def run(strict=True): maketodo( - "pips_int_l.txt", + "build/pips_int_l.txt", "%s/%s/segbits_int_l.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE")), strict=strict) maketodo( - "pips_int_r.txt", + "build/pips_int_r.txt", "%s/%s/segbits_int_r.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE")), strict=strict) diff --git a/fuzzers/056-rempips/piplist.tcl b/fuzzers/056-rempips/piplist.tcl index 4b2c87cc..0086ab9b 100644 --- a/fuzzers/056-rempips/piplist.tcl +++ b/fuzzers/056-rempips/piplist.tcl @@ -1,6 +1,6 @@ create_project -force -part $::env(XRAY_PART) piplist piplist -read_verilog top.v +read_verilog ../top.v synth_design -top top set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_00) IOSTANDARD LVCMOS33" [get_ports i] @@ -18,7 +18,7 @@ route_design write_checkpoint -force piplist.dcp -source ../../utils/utils.tcl +source "$::env(XRAY_DIR)/utils/utils.tcl" proc print_tile_pips {tile_type filename} { set tile [lindex [get_tiles -filter "TYPE == $tile_type"] 0] diff --git a/utils/top_generate.sh b/utils/top_generate.sh index f07384aa..41056b6b 100644 --- a/utils/top_generate.sh +++ b/utils/top_generate.sh @@ -7,7 +7,11 @@ set -ex FUZDIR=$PWD source ${XRAY_GENHEADER} -python3 $FUZDIR/top.py >top.v +# Some projects have hard coded top.v, others are generated +if [ -f $FUZDIR/top.py ] ; then + python3 $FUZDIR/top.py >top.v +fi + vivado -mode batch -source $FUZDIR/generate.tcl test -z "$(fgrep CRITICAL vivado.log)" From 58e6b50b50b45075a3ef97387b9c197a66610108 Mon Sep 17 00:00:00 2001 From: John McMaster Date: Tue, 27 Nov 2018 18:50:14 -0800 Subject: [PATCH 6/7] rempips: log progress Signed-off-by: John McMaster --- fuzzers/056-rempips/.gitignore | 2 +- fuzzers/056-rempips/Makefile | 20 +++++++++++++++----- fuzzers/056-rempips/generate.sh | 4 ++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/fuzzers/056-rempips/.gitignore b/fuzzers/056-rempips/.gitignore index 0c1760e4..a747a2b4 100644 --- a/fuzzers/056-rempips/.gitignore +++ b/fuzzers/056-rempips/.gitignore @@ -1,3 +1,3 @@ build run.ok - +todo diff --git a/fuzzers/056-rempips/Makefile b/fuzzers/056-rempips/Makefile index 47567eb4..4a0fa62f 100644 --- a/fuzzers/056-rempips/Makefile +++ b/fuzzers/056-rempips/Makefile @@ -24,19 +24,25 @@ build/pips_int_l.txt: piplist.tcl # Used 1) to see if we are done 2) pips to try in generate.tcl build/todo.txt: build/pips_int_l.txt #python3 maketodo.py --no-strict | sort -R | head -n10 > build/todo.txt.tmp - python3 maketodo.py --no-strict | sort -R | head -n10 > build/todo.txt.tmp + python3 maketodo.py --no-strict >build/todo_all.txt + cat build/todo_all.txt | sort -R | head -n10 > build/todo.txt.tmp mv build/todo.txt.tmp build/todo.txt # XXX: conider moving to script run: \ - +set -ex; \ + set -ex; \ + make clean; \ + mkdir -p todo; \ while \ - make clean; \ + make cleanprj; \ make build/todo.txt || exit 1; \ test -s build/todo.txt; \ do \ + i=$$((i+1)); \ + cp build/todo.txt todo/$${i}.txt; \ + cp build/todo_all.txt todo/$${i}_all.txt; \ if make database; then \ make pushdb; \ fi; \ @@ -45,7 +51,11 @@ run: touch run.ok clean: - rm -rf build run.ok + rm -rf build run.ok todo -.PHONY: database pushdb run clean +# Remove iteration specific files, but keep piplist.tcl output +cleanprj: + rm -rf build/specimen_* build/todo.txt build/*.db + +.PHONY: database pushdb run clean cleanprj diff --git a/fuzzers/056-rempips/generate.sh b/fuzzers/056-rempips/generate.sh index 60b0c180..ec525cf8 100644 --- a/fuzzers/056-rempips/generate.sh +++ b/fuzzers/056-rempips/generate.sh @@ -3,8 +3,8 @@ FUZDIR=$PWD source ${XRAY_GENHEADER} -vivado -mode batch -source ../generate.tcl +vivado -mode batch -source $FUZDIR/generate.tcl ${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o design.bits -z -y design.bit -python3 ../generate.py +python3 $FUZDIR/generate.py From 5c82555a04dfa2cb88da7adb04d03255761b98ef Mon Sep 17 00:00:00 2001 From: John McMaster Date: Tue, 27 Nov 2018 21:17:33 -0800 Subject: [PATCH 7/7] Rename seg_*.db => segbits_*.db for DBFIXUP Signed-off-by: John McMaster --- fuzzers/056-rempips/Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fuzzers/056-rempips/Makefile b/fuzzers/056-rempips/Makefile index 4a0fa62f..f24f5df5 100644 --- a/fuzzers/056-rempips/Makefile +++ b/fuzzers/056-rempips/Makefile @@ -4,13 +4,13 @@ SPECIMENS := $(addprefix build/specimen_,$(shell seq -f '%03.0f' $(N))) SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS)) database: $(SPECIMENS_OK) - ${XRAY_SEGMATCH} -m 5 -M 15 -o build/seg_int_l.db $(addsuffix /segdata_int_l.txt,$(SPECIMENS)) - ${XRAY_SEGMATCH} -m 5 -M 15 -o build/seg_int_r.db $(addsuffix /segdata_int_r.txt,$(SPECIMENS)) + ${XRAY_SEGMATCH} -m 5 -M 15 -o build/segbits_int_l.db $(addsuffix /segdata_int_l.txt,$(SPECIMENS)) + ${XRAY_SEGMATCH} -m 5 -M 15 -o build/segbits_int_r.db $(addsuffix /segdata_int_r.txt,$(SPECIMENS)) pushdb: ${XRAY_DBFIXUP} --db-root . --clb-int - ${XRAY_MERGEDB} int_l build/seg_int_l.db - ${XRAY_MERGEDB} int_r build/seg_int_r.db + ${XRAY_MERGEDB} int_l build/segbits_int_l.db + ${XRAY_MERGEDB} int_r build/segbits_int_r.db $(SPECIMENS_OK): build/todo.txt mkdir -p build @@ -24,7 +24,7 @@ build/pips_int_l.txt: piplist.tcl # Used 1) to see if we are done 2) pips to try in generate.tcl build/todo.txt: build/pips_int_l.txt #python3 maketodo.py --no-strict | sort -R | head -n10 > build/todo.txt.tmp - python3 maketodo.py --no-strict >build/todo_all.txt + python3 maketodo.py >build/todo_all.txt cat build/todo_all.txt | sort -R | head -n10 > build/todo.txt.tmp mv build/todo.txt.tmp build/todo.txt