Open
Description
Issue by whitequark
Friday Sep 20, 2019 at 20:02 GMT
Originally opened as m-labs/nmigen#217
The behavior of a dual port block RAM with read and write ports in different clock domains is not defined during a simultaneous read and write to the same address. (In fact it is not possible to make it defined.) However, this is exactly what is happening when an element is written into an empty AsyncFIFO[Buffered]
, since the produce and consume pointers are equal. If the phase of read and write clocks is just wrong, the output register of the BRAM could end in a metastable state.
It is not clear how this can be fixed. A workaround is to use AsyncFIFOBuffered
instead, which resynchronizes the BRAM output.