From 7e25affa0e6779ca9f6506c00abfa15c0407d11a Mon Sep 17 00:00:00 2001 From: John McMaster Date: Mon, 17 Dec 2018 17:52:37 -0800 Subject: [PATCH 1/3] segmaker: add_site_group_zero() utility Signed-off-by: John McMaster --- prjxray/segmaker.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/prjxray/segmaker.py b/prjxray/segmaker.py index 1443a0ad..0c3ec6f3 100644 --- a/prjxray/segmaker.py +++ b/prjxray/segmaker.py @@ -38,6 +38,38 @@ def json_hex2i(s): return int(s[2:], 16) +def add_site_group_zero(segmk, site, prefix, vals, zero_val, val): + ''' + Correctly add tags for a multi-bit enumerated value + Naively adding them directly doesn't work correctly because overlapping bits won't solve correctly + Instead, you need to carefully diff against a known zero value + Good zero values: + -An enum known to be zero + -A site that doesn't contain the enum + + segmak: Segmaker object + site: the site to add tags to + prefix: tag string to prefix onto vals + vals: all possible tag enum vals + zero_val: tag value known to have no bits set + ''' + assert zero_val in vals, "Got %s, need %s" % (zero_val, vals) + assert val in vals, "Got %s, need %s" % (val, vals) + + if val == zero_val: + # Zero symbol occured, none of the others did + for aval in vals: + tag = prefix + aval + segmk.add_site_tag(site, tag, aval == val) + else: + # Only add the occured symbol + tag = prefix + val + segmk.add_site_tag(site, tag, 1) + # And zero so that it has something to solve against + tag = prefix + zero_val + segmk.add_site_tag(site, tag, 0) + + class Segmaker: def __init__(self, bitsfile, verbose=None, db_root=None): self.db_root = db_root From 2dee2b329bf64e5e2f48cca3d45a5e06909cbb7e Mon Sep 17 00:00:00 2001 From: John McMaster Date: Mon, 17 Dec 2018 17:52:16 -0800 Subject: [PATCH 2/3] iob: PULLTYPE Signed-off-by: John McMaster --- fuzzers/030-iob/Makefile | 28 +++++++++------------------- fuzzers/030-iob/bits.dbf | 1 + fuzzers/030-iob/generate.py | 7 ++++++- fuzzers/030-iob/generate.tcl | 6 +++--- 4 files changed, 19 insertions(+), 23 deletions(-) create mode 100644 fuzzers/030-iob/bits.dbf diff --git a/fuzzers/030-iob/Makefile b/fuzzers/030-iob/Makefile index 3c7a4289..24e5cfd1 100644 --- a/fuzzers/030-iob/Makefile +++ b/fuzzers/030-iob/Makefile @@ -1,26 +1,16 @@ N := 1 -SPECIMENS := $(addprefix build/specimen_,$(shell seq -f '%03.0f' $(N))) -SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS)) +include ../fuzzer.mk -database: $(SPECIMENS_OK) - ${XRAY_SEGMATCH} -o build/segbits_ioblx.db $(addsuffix /segdata_liob33.txt,$(SPECIMENS)) +database: build/segbits_liob33.db -#pushdb: -# ${XRAY_MERGEDB} ioblm_l build/segbits_ioblx.db -# ${XRAY_MERGEDB} ioblm_r build/segbits_ioblx.db +build/segbits_liob33.rdb: + ${XRAY_SEGMATCH} -o build/segbits_liob33.rdb $(addsuffix /segdata_liob33.txt,$(SPECIMENS)) -$(SPECIMENS_OK): - bash generate.sh $(subst /OK,,$@) - touch $@ +build/segbits_liob33.db: build/segbits_liob33.rdb + ${XRAY_DBFIXUP} --db-root build --zero-db bits.dbf --seg-fn-in $^ --seg-fn-out $@ -run: - $(MAKE) clean - $(MAKE) database - $(MAKE) pushdb - touch run.ok +pushdb: + ${XRAY_MERGEDB} liob33 build/segbits_liob33.db -clean: - rm -rf build - -.PHONY: database pushdb run clean +.PHONY: database pushdb diff --git a/fuzzers/030-iob/bits.dbf b/fuzzers/030-iob/bits.dbf new file mode 100644 index 00000000..57741c98 --- /dev/null +++ b/fuzzers/030-iob/bits.dbf @@ -0,0 +1 @@ +38_98 39_97 39_99,LIOB33.IOB_Y1.PULLTYPE.PULLDOWN diff --git a/fuzzers/030-iob/generate.py b/fuzzers/030-iob/generate.py index 53d41f3f..a7055d1c 100644 --- a/fuzzers/030-iob/generate.py +++ b/fuzzers/030-iob/generate.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 from prjxray.segmaker import Segmaker +from prjxray import segmaker segmk = Segmaker("design.bits") @@ -22,7 +23,11 @@ for l in f: PULLDOWN PULLUP X X ''' - segmk.add_site_tag(site, "PULL.NONE", val in ("", "KEEPER", "PULLUP")) + if val == "": + val = "NONE" + segmaker.add_site_group_zero( + segmk, site, "PULLTYPE.", ("NONE", "KEEPER", "PULLDOWN", "PULLUP"), + "PULLDOWN", val) segmk.compile() segmk.write() diff --git a/fuzzers/030-iob/generate.tcl b/fuzzers/030-iob/generate.tcl index 7d111506..171fec1a 100644 --- a/fuzzers/030-iob/generate.tcl +++ b/fuzzers/030-iob/generate.tcl @@ -55,10 +55,10 @@ proc loc_pins {} { set_property -dict "PACKAGE_PIN $pin IOSTANDARD LVCMOS33" $port - # list_property isn't working + # list_property isn't working (maybe due to empty?) # set keys [list_property_value PULLTYPE $port] - set keys "PULLUP PULLDOWN KEEPER" - # set keys "NONE KEEPER" + # NONE placeholder for "" + set keys "NONE PULLUP PULLDOWN KEEPER" set val [randsample_list 1 $keys] if { $val == "NONE" } { set val "" From bce9837aeec523fe1fbabe47c2557ad3b7a4aeaa Mon Sep 17 00:00:00 2001 From: John McMaster Date: Mon, 17 Dec 2018 17:54:30 -0800 Subject: [PATCH 3/3] mergedb: liob33 support Signed-off-by: John McMaster --- utils/mergedb.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/utils/mergedb.sh b/utils/mergedb.sh index e653fb8f..7be4a9a4 100755 --- a/utils/mergedb.sh +++ b/utils/mergedb.sh @@ -72,6 +72,9 @@ case "$1" in hclk_r) sed < "$2" > "$tmp1" -e 's/^HCLK\./HCLK_R./' ;; + liob33) + cp "$2" "$tmp1" ;; + mask_*) db=$XRAY_DATABASE_DIR/$XRAY_DATABASE/$1.db cp "$2" "$tmp1" ;;