hdl.mem: allow changing init value after creating memory.
This commit is contained in:
parent
6ee80408bb
commit
8730895d8c
|
@ -27,15 +27,29 @@ class Memory:
|
|||
self.width = width
|
||||
self.depth = depth
|
||||
|
||||
self.init = [] if init is None else list(init)
|
||||
# Array of signals for simulation.
|
||||
self._array = Array()
|
||||
for addr in range(self.depth):
|
||||
self._array.append(Signal(self.width, name="{}({})".format(name, addr)))
|
||||
|
||||
self.init = init
|
||||
|
||||
@property
|
||||
def init(self):
|
||||
return self._init
|
||||
|
||||
@init.setter
|
||||
def init(self, new_init):
|
||||
self._init = [] if new_init is None else list(new_init)
|
||||
if len(self.init) > self.depth:
|
||||
raise ValueError("Memory initialization value count exceed memory depth ({} > {})"
|
||||
.format(len(self.init), self.depth))
|
||||
|
||||
# Array of signals for simulation.
|
||||
self._array = Array()
|
||||
for addr, data in enumerate(self.init + [0 for _ in range(self.depth - len(self.init))]):
|
||||
self._array.append(Signal(self.width, reset=data, name="{}({})".format(name, addr)))
|
||||
for addr in range(self.depth):
|
||||
if addr < len(self._init):
|
||||
self._array[addr].reset = self._init[addr]
|
||||
else:
|
||||
self._array[addr].reset = 0
|
||||
|
||||
def read_port(self, domain="sync", synchronous=True, transparent=True):
|
||||
if not synchronous and not transparent:
|
||||
|
|
Loading…
Reference in a new issue