[Fpga-synth] Clocks and Enables

Magnus Danielson magnus at rubidium.dyndns.org
Sun Sep 14 14:42:11 CEST 2008


Mike Ravkine wrote:
> I second this strategy, it's exactly how I implemented my synth.
> 
> Xilinx seems to have some information on their async FIFOs available at:
> 
> http://www.xilinx.com/support/documentation/ipmeminterfacestorelement_fifo_asynchfifo.htm 

If you have two unlocked clocks, asynchronous FIFOs is the way to go in 
general. You can usually get by on 3-8 words in the FIFO.

If you have two unlocked clocks, but data rate is sufficiently low for 
any of them, you can implement handshaking over the clock boundary which 
is safe (using two DFFs in series to clock the signal in from the other 
side). This will avoid asynchronous FIFOs for a slightly more complex 
upfront design. You however need to guarantee that the minimum time 
between words to be transferred is longer than the worst case transition 
time for the hand-shaking design. The goal is that the word sampling 
occurs when the data is stable from the other side. The whole issue is 
really that you want to make sure you sample at the correct time to 
avoid meta-stability and that handshaking ensures that no sample is 
dropped or sampled twice. The normal meta-stability handling is only 
performed at the handshaking. This method is simpler in design, but pays 
by less performance.

If you have two locked clocks, you can get by with simpler approaches, 
since the clock ratios is known and the phase relationship is 
(relatively) stable. Control and fifo can be much simpler in this 
particular case as you have a statical pattern to handle.

Cheers,
Magnus


More information about the Fpga-synth mailing list