Hello,
I'm current designing a device which will digitally convert an analog (NTSC) signal to RGB (for use in VGA). I have some questions at the bottom of this post. The system design consists of:
- 50 MHz FPGA
- 50 MSPS 10-bit ADC with video clamping
- Matching DAC
- Baseband NTSC composite video source
- VGA monitor
The FPGA includes the following sub-blocks
- Polyphase resampler - converts sampled data to 4 * color subcarrier frequency (I think this is the correct term, but I'm not sure. I'm basically interpolating and then decimating by integer factors)
- Low pass filters - I plan on using windowed sinc (FIR) filters for everything, unless there is a compelling reason not to
- Numerically controlled oscillator - I will store a table with a quarter cycle of a sinusoid, and use trig properties to calculate the rest. The index will be N-bits long, and the table will have significantly less than 2^N entries. Only the most significant bits of the index will be used, and the lower bits will actually be used for interpolation (this idea isn't originally mine).
- Digital PLL or digital Costas loop - Any advice as to which to use? Needed to lock onto color burst to generate reference color subcarrier. I plan on using TWO seperate PLL's, since the chroma subcarrier is phase-inverted on each line. Each PLL will be updated alternately, every other color burst. This will minimize tracking requirements, I think.
- 2D adaptive comb filter - takes advantage of the fact that the chroma subcarrier is phase inverted on each sucessive line to allow good seperation of luminance and chrominance. Since the data has been resampled to 4 * Fsc, there will be a constant number of samples per line, and the pixels will "line up", making the comb filter easier to implement.
- QAM demodulator - Uses the PLL or Costas loop reference color subcarrier to demodulate the chroma signal. Needs only multiplier(s) and low pass filters. I'm going to use narrowband color and demodulate I and Q with 0.5 MHz bandwidth each.
- Sync detector
- Matrix to convert from (Y, I, V) to (R, G, B)
- Video buffer at 640x480. Each time a field is digitized, every other line of the buffer will be updated. The VGA output will run at 60 Hz, giving the same interlaced appearance as a regular TV. There may be better ways to do this, but this is simple and easy. I'd rather not deal with motion compensation.
- VGA output generator - Reads video buffer, generates RGB, sync pulses, etc
QUESTIONS:
- I have found a few ADC's that are up to the task, but does anyone know of one that is particularly easy for prototyping? I've never done any surface mount soldering before. I did read about a way to use solder paste and reflow in a toaster oven, but it'll probably be trickier than it sounds. I don't suppose anyone makes a high speed video flash-ADC in a DIP format? :-)
- Low pass filters are used in a few places above (in the Costas loop, in the chroma demodulator, and in the interpolation part of the polyphase resampler). I planned on using windowed sinc filters everywhere, just because that's what I'm most comfortable with. Can anyone give me a reason not to? And if so, what would be recommended?
- If anyone is willing to go over polyphase resampling or digital PLL's / Costas loops, let me know. I'll post my current understanding (courtesy of google), and see if it is flawed. I think I get it, but... this is all fairly new to me. The best resources I found were from a place called "ChipCenter", but there wasn't a whole lot of other material that was helpful. Lots of IC datasheet results, which made it hard to find info on the theory.
- Any other pointers, or things to watch out for? A lot of this is fairly new to me, though I can at least "hold my own" on the FPGA side of things.
Thanks in advance !
Sean