Hi Matthew. Thanks for your answer first of all. Generation of the control signals is in a big if block because the component has two modes: it either accepts write-through and read requests from the Wishbone bus or the module is in computing mode, in which the SRAMs are actually used for something productive, and the component does not access bus accesses. Within each mode, there is also a case split on what is currently happening. Depending on the mode, addrA0 and other signals are driven differently.
While it's quite difficult to tell, I believe that the address signal is not the problem and capturing the output of the SRAM is also not the problem. The reason for saying this is that I build a test program running on a caravel that accepts read and write accesses via UART, and on the host PC I built a small hex editor program accessing the UART port. The design has two SRAMs (1kb and 2kb, both with 32-bit wide data busses), and both are mapped into the address space by the design (when the core functionality of the design idles). When reading from the SRAM with this test program setup, the data read stays consistent between complete reads of the memories if not writing to the memory (screenshot 1 shows how the memory content could look after booting up the system without a write - the data will stay the same after refreshing the view with the memory content).
However, if I write to the memories, then some bits flip early and I've also observed that some bits only flip after a few seconds (so that the flip only becomes visible after a few successive total read-outs of the memory).
The problem occurs on both the 1kb and 2kb SRAMs. The different ICs that I got shipped seem to behave differently regarding which bits flip.