Merge pull request #346 from mcmasterg/iob_pull

Iob pull
This commit is contained in:
John McMaster 2018-12-17 18:11:09 -08:00 committed by GitHub
commit 1fccc2fbcd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 54 additions and 23 deletions

View File

@ -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

1
fuzzers/030-iob/bits.dbf Normal file
View File

@ -0,0 +1 @@
38_98 39_97 39_99,LIOB33.IOB_Y1.PULLTYPE.PULLDOWN

View File

@ -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()

View File

@ -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 ""

View File

@ -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

View File

@ -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" ;;