I want to design a little oscilloscope that is able to analyze signals up to 1 MHz using a Xilinx FPGA. I want use the VGA interface in order to display the signals. Is it possible obtain a good result using only FPGA and an external RAM for signal elaboration? Or is it necessary to use an external microprocessor? With the Xilinx ISE Webpack license I can't use the MicroBlaze softcore processor, but only the PicoBlaze. What is the better way to obtain a good result with a simple and cheap design?
1 MHz is slow enough that this should be doable without a FPGA. Perhaps you may want to use a external A/D or sample memory, but orchestrating all that should be possible with just a decently fast microcontroller.
Some of the dsPIC 33F have built-in A/Ds that can sample at 1 MHz, if I remember right. You don't typically need lots of bits for a oscilloscope, since the user will adjust the gain and offset to zoom in on what they want to see. Entry level scopes don't have more than 256 pixels vertically anyway, so obviously aren't showing more than 8 bit of information per sample. The 10 bits the internal A/D of a dsPIC can do should be sufficient.
I think this is quite doable. I'll assume you've selected a part with a built in ADC per channel that you want.
The architecture depends on whether you want to have a framebuffer or not; it will consume RAM but make it easier to debug. Non-framebuffer designs would probably have a character generator ROM approach instead for numbers in the UI.
Either way, the key to getting it working nicely is not to involve the microprocessor in putting the trace on screen. Each ADC should be connected to a ring buffer of the N most recent samples, where N is the number of samples across the width of the screen. On the VGA vertical blanking interval, capture this to another buffer which will represent the set of samples to display. You can then either translate them into pixels in the framebuffer; or generate a one-line framebuffer for each line of the display by scanning the sample buffer for any situation where there is a sample below the scanline next to one above the scanline.
(This might involve two different RAMs, one being written to by the ADCs and one being the display one, swapping roles every frame).
An oscilloscope is comprised of many parts, but what truly defines an oscilloscope's performance and utility is it's trigger circuits. Being able to define when to start a sample, the conditions that are needed to capture an event beyond just sampling and displaying really define/extend the usefulness of the instrument.
I would argue that if you truly wanted to build something special and useful that you really only have the choice of implementing an 'Scope of that sort of bandwidth in a FPGA. With line buffers and decision logic you can implement some non-causal filters and signal processing that can isolate out those certain events that truly help you debug. It is after all those intermittent (perhaps even singular) events that make debugging very difficult.
While a sound card like (Sample and then display) system is where you should start at that should not be the end goal.
Basically, I think it is doable with pure hardware. We need more information to tell You if You need microprocessor or not. If You want to display one waveform at fixed frequency and fixed amplitude, I would say it is easy to do in hardware, but remember, that You'll have to configure ADC and other peripherals, probably using SPI, so at least picoblaze will be needed.