back.rtlil: mask memory init values.

This handles both init values that are too wide, which happens if
their magnitude is too high, or if they're negative.

Fixes #96.
This commit is contained in:
whitequark 2019-06-11 03:43:09 +00:00
parent 58e39f90ce
commit d2d8c2b8bf

View file

@ -729,9 +729,10 @@ def convert_fragment(builder, fragment, hierarchy):
name=memory.name)
addr_bits = bits_for(memory.depth)
data_parts = []
data_mask = (1 << memory.width) - 1
for addr in range(memory.depth):
if addr < len(memory.init):
data = memory.init[addr]
data = memory.init[addr] & data_mask
else:
data = 0
data_parts.append("{:0{}b}".format(data, memory.width))