mirror of https://github.com/openXC7/prjxray.git
tilegrid: params on fuzzaddr/generate.py
Signed-off-by: John McMaster <johndmcmaster@gmail.com>
This commit is contained in:
parent
535769ad04
commit
cecba098fc
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
from prjxray import bitsmaker
|
||||
|
||||
def run(bits_fn, design_fn, fnout, oneval, verbose=False):
|
||||
# Raw: IOB_X0Y101 00020027_003_03
|
||||
metastr = "DFRAME:27.DWORD:3.DBIT:3"
|
||||
|
||||
def run(bits_fn, design_fn, fnout, oneval, dframe, dword, dbit, verbose=False):
|
||||
metastr = "DFRAME:%02x.DWORD:%u.DBIT:%u" % (dframe, dword, dbit)
|
||||
|
||||
tags = dict()
|
||||
f = open(design_fn, 'r')
|
||||
|
|
@ -29,9 +29,32 @@ def main():
|
|||
parser.add_argument("--design", default="design.csv", help="")
|
||||
parser.add_argument("--fnout", default="/dev/stdout", help="")
|
||||
parser.add_argument("--oneval", required=True, help="")
|
||||
parser.add_argument(
|
||||
"--dframe",
|
||||
type=str,
|
||||
required=True,
|
||||
help="Reference frame delta (base 16)")
|
||||
parser.add_argument(
|
||||
"--dword",
|
||||
type=str,
|
||||
required=True,
|
||||
help="Reference word delta (base 10)")
|
||||
parser.add_argument(
|
||||
"--dbit",
|
||||
type=str,
|
||||
required=True,
|
||||
help="Reference bit delta (base 10)")
|
||||
args = parser.parse_args()
|
||||
|
||||
run(args.bits_file, args.design, args.fnout, oneval=args.oneval, verbose=args.verbose)
|
||||
run(
|
||||
args.bits_file,
|
||||
args.design,
|
||||
args.fnout,
|
||||
args.oneval,
|
||||
int(args.dframe, 16),
|
||||
int(args.dword, 10),
|
||||
int(args.dbit, 10),
|
||||
verbose=args.verbose)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
N ?= 15
|
||||
GENERATE_ARGS?="--oneval KEEPER"
|
||||
GENERATE_ARGS?="--oneval KEEPER --dframe 27 --dword 3 --dbit 3"
|
||||
include ../fuzzaddr/common.mk
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ def gen_iobs():
|
|||
yield site_name, site_type
|
||||
|
||||
|
||||
def write_pins(ports):
|
||||
def write_params(ports):
|
||||
pinstr = ''
|
||||
for site, (name, dir_, cell) in sorted(ports.items(), key=lambda x: x[1]):
|
||||
# pinstr += 'set_property -dict "PACKAGE_PIN %s IOSTANDARD LVCMOS33" [get_ports %s]' % (packpin, port)
|
||||
|
|
@ -76,7 +76,7 @@ def run():
|
|||
else:
|
||||
assign_o(rand_site(), 'do[%u]' % DOUT_N)
|
||||
|
||||
write_pins(ports)
|
||||
write_params(ports)
|
||||
|
||||
print(
|
||||
'''
|
||||
|
|
|
|||
|
|
@ -197,3 +197,40 @@ def specn():
|
|||
# ex: build/specimen_001
|
||||
specdir = os.getenv("SPECDIR")
|
||||
return int(re.match(".*specimen_([0-9]*)", specdir).group(1), 10)
|
||||
|
||||
|
||||
def gen_fuzz_states(nvals):
|
||||
'''
|
||||
Generates an optimal encoding to solve single bits as quickly as possible
|
||||
|
||||
tilegrid's initial solve for 4 bits works like this:
|
||||
Initial reference value of all 0s:
|
||||
0000
|
||||
Then one-hot for each:
|
||||
0001
|
||||
0010
|
||||
0100
|
||||
1000
|
||||
Which requires 5 samples total to diff these
|
||||
|
||||
However, using correlation instead its possible to resolve n bits using ceil(log(n, 2)) + 1 samples
|
||||
With 4 positions it takes only 3 samples:
|
||||
0000
|
||||
0101
|
||||
1010
|
||||
'''
|
||||
bits = 0
|
||||
# First pass all 0's
|
||||
for speci in range(2, specn() + 1):
|
||||
# First pass do nothing
|
||||
# Second pass invert every other bit (mod 2)
|
||||
# Third pass invert blocks of two (mod 4)
|
||||
block_size = 2**(speci - 1)
|
||||
for maski in range(nvals):
|
||||
mask = (1 << maski)
|
||||
if maski % block_size < block_size / 2:
|
||||
bits ^= mask
|
||||
|
||||
for i in range(nvals):
|
||||
mask = (1 << i)
|
||||
yield int(bool(bits & mask))
|
||||
|
|
|
|||
Loading…
Reference in New Issue