This avoids reading 'x from the memory in simulation. In general,
FPGA memories can only be initialized in block granularity, and
zero-initializing is cheap, so this is not a significant issue with
resource consumption.
                             memories[memory] = module.memory(width=memory.width, size=memory.depth,
                                                              name=memory.name)
                             addr_bits = bits_for(memory.depth)
-                            for addr, data in enumerate(memory.init):
+                            for addr in range(memory.depth):
+                                if addr < len(memory.init):
+                                    data = memory.init[addr]
+                                else:
+                                    data = 0
                                 module.cell("$meminit", ports={
                                     "\\ADDR": rhs_compiler(ast.Const(addr, addr_bits)),
                                     "\\DATA": rhs_compiler(ast.Const(data, memory.width)),