Analog-to-digital converters (ADCs) in FPGAs are fairly common these days. (See: Programmable Analog in Digital FPGAs? and Need Another Bit or 2 of A/D Resolution?)
There are many types of ADCs in FPGAs. The most common type is the Successive Approximation ADC, which is used in many of the IP (intellectual property) cores out there. Another type of ADC that's quite simple to implement using an FPGA is the Flash ADC (also known as a "direct conversion ADC"). Flash ADCs are one of the most common and intuitively obvious type of ADCs. They basically work by having a string of equal value resistors with taps for a bank of comparators. This drives some kind of priority encoding circuit followed by a synchronizer for driving clocked digital logic.
Simple FPGA Flash ADC.
In the ADC diagram shown above, the comparator inputs are LVDS (low-voltage differential signaling) signal inputs (see Max's blog on Differential Signaling), with one pin of each differential pair being tied to a common signal input net on the PCB, while the other pins are tied to their respective resistor taps.
This LVDS I/O -- or comparators and single-ended I/O -- drives the priority encoder circuit, which drives the output stage (synchronizers).
Analog considerations beyond the scope of this figure include some type of sample/hold circuit and buffer for the input voltage net on the PCB. These are simple enough to find or make now. The other item is a precision reference and the buffer used to drive the resistive ladder.
Below is the HDL code for the priority encoder and synchronizers. This is a simple prototype created for the purposes of this blog -- it can be refined in many ways, such as making the generics more functional. (Click here to see a larger, more detailed version of this image.):
As can be seen, this is a very simple example with limited capability. Where this technique can be more useful in terms of resolution is to combine this with a Successive Approximation approach and make a semi-flash converter.
Have you used anything like this in your designs? If not, would something like this be useful?