11 December 2012 7 10K Report

Say you have several blocks and a source of samples (be it an analog-to-digital converter (ADC) or communication from some other device), but say for the time being that the blocks operate at a clock frequency greater than the ADC. Also you are outputting them somewhere (be it a digital-to-analog converter (DAC) or some other device). In this situation some form of flow-control is required. What if a sample is ready, but the DAC is not. What if we are ready to process but the ADC has no sample available?

So far, I have ended up using two types in my designs. The first is to apply some clock enable in the overall circuit whenever a valid sample is available. Only enable when a new sample is ready and the module connected to the output is also ready to receive a sample. Alternatively, each block could have a controller that keeps track of when it may or may not receive data (i.e., a busy signal) and buffers (e.g., FIFOs) could be setup in between blocks to ensure no loss of data. As long as each block can keep up, then this should not cause a problem.

I have used both of these techniques. The first one offers a very simple design, but it tends to require more resources and be able to operate at lower clock speeds if the fanout grows too large. When implementing the alternative technique with the state machines, I always spend a significant amount of time debugging. That said, I think it is a superior method most of the time. It tends to result in smaller designs and higher clock speeds after synthesis.

I'm curious what techniques other people use and why they use them. The more detail the better. Also, do you have rules-of-thumb or a clear strategy on how to use the different signals that you can recycle from one block to the next? I believe that having this clear strategy set up as a kind of template would greatly increase my effectiveness.

My research is based around the design of real-time DSP algorithms and implementing them in FPGAs for applications in wireless communications.

More Daryl Wasden's questions See All
Similar questions and discussions