[URC] Using a SVGA card as part of a direct synthesis SDR?
David Basden
basded01 at tartarus.uwa.edu.au
Sun Nov 21 13:27:15 WST 2004
Hi guys,
Does anyone know much about how SVGA cards work?
Specifically, i'm wondering if I can use the RAMDAC in a boring
SVGA card as an output for a software defined radio.
People have been doing this for a long time with soundcards
(I played with this for a while, and it's pretty easy to generate
moderately low bandwidth stuff, such as AFSK1200, DTMF or Slow Scan
TV. You just generate a buffer with a modulated sine wave[0] in it
and throw it at your friendly local sound driver.[1])
This makes a lot of sense, especially seeing as there is no
difference between using a sound card to generate music and
generating a low bandwidth signal that doesn't happen to be
music[2]. Also, until recently, there wasn't really the CPU
time to directly synth a higher bandwidth signal in real
time.
Looking at a boring SVGA card these days, it's basically a chunk
of memory, some programmable clocks, and a few DACs. To output
a video signal, it iterates across the chunk of RAM containing
the display bitmap (framebuffer), going to the next pixel at
each dot-clock cycle, and setting the output level appropriately
on the signal pin.
Even the most boring cards can program the dot-clocks at 90MHz,
giving you a theoretical output bandwidth of 45MHz. A bit cooler
than the 22kHz of a bog-standard sound card. Admittedly, these
are probably only 8 bit DACs, making life a bit harder for AM,
but you have 3 channels you can drive simultaniously[3]
I think that at simplest you would have to disable the vertical (and
horizontal) blanking, because it would be unhelpful to stop the
DAC during this time. I don't know if this is hard or not. As
for the sync signals happily provided, you can either ignore them,
or use them as a reference clock for external hardware[4]. The only
other problem I can think of would be the lack of a vertical blanking
period to update the buffer.
Does anyone know if modern SVGA hardware is this flexible? Looking
at the XFree86 server, it seems to be so (given you can manually
specify timings and dotclocks). You even have megabytes of really
fast output buffer hooked into a speedy bus, while helpful people
have already put fast software pipelines in for graphics stuff.
This is, also, without looking at GPUs, which quite possibly could
do much of the modulation for you. They already do this with bitmap
images (stretching, mixing etc). Why not with a sine wave?
David
[0] Or not modulated if you want a really boring constant tone
[1] A resistor step-down DAC on a parallel port works just as well,
albeit without the bandwidth or sample resolution. You can
still get AFSK1200 out of it though. I get the idea you could
whistle AFSK1200 if you were really desperate given the crap
home-made hardware I managed to generate it from.
[2] You do notice crap soundcards though, and where they have
noise, and bad frequency response, and filters, and more such
evilness. Anything onboard is probably going to be useless for
this
[3] If you really wanted you could mix them on the output, but you
would have to filter the output of the mixer, which might defeat
the purpose of an SDR. Not that you wouldn't want to filter
anything you were transmitting anyway...
[4] or possibly even as a couple of generic digital output lines, although
this might be a bit CPU intensive for fast signalling, and not worth
the effort
More information about the URC
mailing list