interconnect/csr_bus/SRAM: add mem_size check
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Fri, 1 Nov 2019 10:33:43 +0000 (11:33 +0100)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Fri, 1 Nov 2019 10:33:50 +0000 (11:33 +0100)
Memory size is limited to 512 bytes:
- CSR region size is 0x800 (4096)
- default csr_data_width is 8
maximum size = 4096/8 = 512 bytes.

litex/soc/interconnect/csr_bus.py

index dac45972bd454955d35bc5b32ad37dcff27adf3f..5c60aa0a205b425a25a83df219a90a6a288a2691 100644 (file)
@@ -84,6 +84,9 @@ class SRAM(Module):
             mem = mem_or_size
         else:
             mem = Memory(data_width, mem_or_size//(data_width//8), init=init)
+        mem_size = int(mem.width*mem.depth/8)
+        if mem_size > 512:
+            raise ValueError("Memory too large to fit in CSR region ({} > 512 bytes)".format(mem_size))
         csrw_per_memw = (mem.width + data_width - 1)//data_width
         word_bits = log2_int(csrw_per_memw)
         page_bits = log2_int((mem.depth*csrw_per_memw + 511)//512, False)