I'm a newbie, playing around with a very simple single port block RAM (on an FPGA actually).
Its 'read'-timing is standard stuff -
i) An address on the RAM input gets latched on a first rising clock edge (call this edge 'one').
ii) Data stored at this address then appears on the ram output on the next rising edge ('two')
Now, obviously for step 'i' I need to make sure my address is set up and stable before (and for a hold-time after) rising edge 'one'.
My simple question is: what is normal practice for when to do this?
I could set up the address a full rising edge (edge 'zero') before its needed for latching at edge 'one' - but somehow this feels inefficient as it seems I'm taking at least 3 rising edges to get data out of my RAM.
Alternatively I could set up my addresses on the falling edge of clock, immediately prior to it being needed at rising edge 'one'. But I've read that using both rising and falling clocks in designs is also not an entirely typical approach.
What's best? Have I misunderstood something basic?