Hi,
I am using a C to RTL generator that creates memories (VHDL) that result in inferred Block RAMS. During PAR, I get hold time violations. There seems to be an implicit 0ns hold time on the data out of the BRAM. However, the output of the BRAM goes to a latch and the enable on the latch is a function of my clock and an enable in the generated code. So, the latch enable is considered a clock, but appears to be a large skew between it and my real clock. The Xilinx timing wizard suggests making sure the two clocks use the same type of routing resources.
the standard approach to creating a memory (and inferring a BRAM); address is latched on the clock edge, data out is in an assignment statement.
Are the timing problems I see typical? If so, how do I deal with it? Or, do I need a different memory description where the data out is explicitly a function of the input clock edge?
thanks for your advice!