Preface: seasoned programmer, but completely new to hardware design.
I'm confused about the BSRAM available on the simple and cheap GW1N that I'm targeting. For my use case, I have a piece of state machine where on one clock cycle I determine a memory address from which I want to fetch data. On a later clock cycle, I want to retrieve said stored data. I'm using a BSRAM configured in (true) dual port mode.
Relevant timing diagrams for the BSRAM are given in
UG285E, and look as follows for the configuration that I picked (Read Mode = Bypass, Write Mode = Normal):
This suggests to me that if on clock cycle
n I update
AD <= my_address, then on clock cycle
n+1 the data I want to retrieve should be available on the
DO of the port. The address update is done in an 'always @' block which triggers off the posedge on the same clock signal that is fed to the BRAM.
From my testing however, I must add one additional clock cycle of delay before I can sample the data on the BRAM output. Is this expected, and if so, where is the flaw in my expectation?