Hello,
I am running into a strange problem with the dual-port block RAM in Virtex-II and at this point have run out of ideas :(
In my design I am trying to perform data acquisition on a 32-bit parallel data stream running at 125 MHz. I have two memory blocks into which I want to be able to direct the data: internal block RAM and external SRAM. Internal RAM is dual ported with one port connected to the local bus. SRAM controller has can be switched between the local bus and the data port. Data source is the same for both block RAM and the SRAM - their inputs are taken from a single signal. Within the design I have a little test pattern generator to produce a fake data stream for testing.
So here is the problem: the data is written correctly into the SRAM, but not into the block RAM. It is a timing problem - errors go away if I lower the clock frequency.
The same problem persist with both ISE 8.2i and 9.1i. Here are some numbers:
The part is XC2V3000-4FF1152. Clock constraint is 7.6 ns. Static timing analysis gives me 7.632 ns. Experimentally-determined maximum clock frequency for error-free acquisition into the block RAM is 105 MHz. Maximum clock frequency for SRAM - around 150 MHz.
As I play around with block RAM (instantiated vs. inferred, pipelining in front of the memory), maximum frequency moves in the range from 90 to
120 MHz. SRAM maximum frequency is consistently around 150 MHz. Block RAM errors are typically single-bit, sometimes two bits. Which bit it is seems to move around from one compilation to another.