From 3b2673eae2f46eb5f7a3933df7bd48e6b40f1cb3 Mon Sep 17 00:00:00 2001 From: whitequark Date: Tue, 11 Jun 2019 03:43:09 +0000 Subject: [PATCH] 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. --- nmigen/back/rtlil.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nmigen/back/rtlil.py b/nmigen/back/rtlil.py index 1a1fabc..a33630a 100644 --- a/nmigen/back/rtlil.py +++ b/nmigen/back/rtlil.py @@ -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)) -- 2.30.2