mirror of https://github.com/openXC7/prjxray.git
commit
1fccc2fbcd
|
|
@ -1,26 +1,16 @@
|
||||||
N := 1
|
N := 1
|
||||||
SPECIMENS := $(addprefix build/specimen_,$(shell seq -f '%03.0f' $(N)))
|
include ../fuzzer.mk
|
||||||
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
|
|
||||||
|
|
||||||
database: $(SPECIMENS_OK)
|
database: build/segbits_liob33.db
|
||||||
${XRAY_SEGMATCH} -o build/segbits_ioblx.db $(addsuffix /segdata_liob33.txt,$(SPECIMENS))
|
|
||||||
|
|
||||||
#pushdb:
|
build/segbits_liob33.rdb:
|
||||||
# ${XRAY_MERGEDB} ioblm_l build/segbits_ioblx.db
|
${XRAY_SEGMATCH} -o build/segbits_liob33.rdb $(addsuffix /segdata_liob33.txt,$(SPECIMENS))
|
||||||
# ${XRAY_MERGEDB} ioblm_r build/segbits_ioblx.db
|
|
||||||
|
|
||||||
$(SPECIMENS_OK):
|
build/segbits_liob33.db: build/segbits_liob33.rdb
|
||||||
bash generate.sh $(subst /OK,,$@)
|
${XRAY_DBFIXUP} --db-root build --zero-db bits.dbf --seg-fn-in $^ --seg-fn-out $@
|
||||||
touch $@
|
|
||||||
|
|
||||||
run:
|
pushdb:
|
||||||
$(MAKE) clean
|
${XRAY_MERGEDB} liob33 build/segbits_liob33.db
|
||||||
$(MAKE) database
|
|
||||||
$(MAKE) pushdb
|
|
||||||
touch run.ok
|
|
||||||
|
|
||||||
clean:
|
.PHONY: database pushdb
|
||||||
rm -rf build
|
|
||||||
|
|
||||||
.PHONY: database pushdb run clean
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
38_98 39_97 39_99,LIOB33.IOB_Y1.PULLTYPE.PULLDOWN
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from prjxray.segmaker import Segmaker
|
from prjxray.segmaker import Segmaker
|
||||||
|
from prjxray import segmaker
|
||||||
|
|
||||||
segmk = Segmaker("design.bits")
|
segmk = Segmaker("design.bits")
|
||||||
|
|
||||||
|
|
@ -22,7 +23,11 @@ for l in f:
|
||||||
PULLDOWN
|
PULLDOWN
|
||||||
PULLUP X X
|
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.compile()
|
||||||
segmk.write()
|
segmk.write()
|
||||||
|
|
|
||||||
|
|
@ -55,10 +55,10 @@ proc loc_pins {} {
|
||||||
|
|
||||||
set_property -dict "PACKAGE_PIN $pin IOSTANDARD LVCMOS33" $port
|
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 [list_property_value PULLTYPE $port]
|
||||||
set keys "PULLUP PULLDOWN KEEPER"
|
# NONE placeholder for ""
|
||||||
# set keys "NONE KEEPER"
|
set keys "NONE PULLUP PULLDOWN KEEPER"
|
||||||
set val [randsample_list 1 $keys]
|
set val [randsample_list 1 $keys]
|
||||||
if { $val == "NONE" } {
|
if { $val == "NONE" } {
|
||||||
set val ""
|
set val ""
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,38 @@ def json_hex2i(s):
|
||||||
return int(s[2:], 16)
|
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:
|
class Segmaker:
|
||||||
def __init__(self, bitsfile, verbose=None, db_root=None):
|
def __init__(self, bitsfile, verbose=None, db_root=None):
|
||||||
self.db_root = db_root
|
self.db_root = db_root
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,9 @@ case "$1" in
|
||||||
hclk_r)
|
hclk_r)
|
||||||
sed < "$2" > "$tmp1" -e 's/^HCLK\./HCLK_R./' ;;
|
sed < "$2" > "$tmp1" -e 's/^HCLK\./HCLK_R./' ;;
|
||||||
|
|
||||||
|
liob33)
|
||||||
|
cp "$2" "$tmp1" ;;
|
||||||
|
|
||||||
mask_*)
|
mask_*)
|
||||||
db=$XRAY_DATABASE_DIR/$XRAY_DATABASE/$1.db
|
db=$XRAY_DATABASE_DIR/$XRAY_DATABASE/$1.db
|
||||||
cp "$2" "$tmp1" ;;
|
cp "$2" "$tmp1" ;;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue