foboot-bitstream: use new-style random rom
Use a new pattern with a new function to generate the random ROM, used for ROM patching. Signed-off-by: Sean Cross <sean@xobs.io>
This commit is contained in:
parent
21cdcaaee8
commit
49b22a1962
@ -82,14 +82,29 @@ class _CRG(Module):
|
|||||||
]
|
]
|
||||||
|
|
||||||
class RandomFirmwareROM(wishbone.SRAM):
|
class RandomFirmwareROM(wishbone.SRAM):
|
||||||
|
"""
|
||||||
|
Seed the random data with a fixed number, so different bitstreams
|
||||||
|
can all share firmware.
|
||||||
|
"""
|
||||||
def __init__(self, size, seed=2373):
|
def __init__(self, size, seed=2373):
|
||||||
import random
|
def xorshift32(x):
|
||||||
# Seed the random data with a fixed number, so different bitstreams
|
x = x ^ (x << 13) & 0xffffffff
|
||||||
# can all share firmware.
|
x = x ^ (x >> 17) & 0xffffffff
|
||||||
random.seed(seed)
|
x = x ^ (x << 5) & 0xffffffff
|
||||||
|
return x & 0xffffffff
|
||||||
|
|
||||||
|
def get_rand(x):
|
||||||
|
out = 0
|
||||||
|
for i in range(32):
|
||||||
|
x = xorshift32(x)
|
||||||
|
if (x & 1) == 1:
|
||||||
|
out = out | (1 << i)
|
||||||
|
return out & 0xffffffff
|
||||||
data = []
|
data = []
|
||||||
|
seed = 1
|
||||||
for d in range(int(size / 4)):
|
for d in range(int(size / 4)):
|
||||||
data.append(random.getrandbits(32))
|
seed = get_rand(seed)
|
||||||
|
data.append(seed)
|
||||||
print("Firmware {} bytes of random data".format(size))
|
print("Firmware {} bytes of random data".format(size))
|
||||||
wishbone.SRAM.__init__(self, size, read_only=True, init=data)
|
wishbone.SRAM.__init__(self, size, read_only=True, init=data)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user