Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!gatech!hao!husc6!mit-eddie!ll-xn!ames!oliveb!sun!pepper!cmcmanis
From: cmcmanis%pepper@Sun.COM (Chuck McManis)
Newsgroups: sci.electronics,rec.music.synth
Subject: Re: DCO's revisited - an inquiry into hardware implementation
Message-ID: <22755@sun.uucp>
Date: Mon, 6-Jul-87 20:46:09 EDT
Article-I.D.: sun.22755
Posted: Mon Jul  6 20:46:09 1987
Date-Received: Wed, 8-Jul-87 01:49:51 EDT
References: <235@cogent.UUCP.>
Sender: news@sun.uucp
Reply-To: cmcmanis@sun.UUCP (Chuck McManis)
Distribution: world
Organization: Sun Microsystems, Mountain View
Lines: 48
Keywords: now for the real work...
Xref: mnetor sci.electronics:902 rec.music.synth:1031

In article <235@cogent.UUCP.> mark@cogent.UUCP (Mark Steven Jeghers) writes:
.>
.>I recently posted an article discussing the design of a totally digital
.>oscillator for use in a musical synthesizer.  It was posted in the
.>"rec.music.synth" group, I forget what the distribution was.  If anyone
.>did not receive it and wishes for a copy, email me.  Anyway, in an attempt
.>to actually work out the hardware implementation, I have run into a problem.
.>
.>The key part of the DCO is the adder-latch feedback loop.  Theoretically,
.>as my article described, you can run it at a clock rate of your choosing and
.>use the number of bits of your choosing, in order to achieve the desired
.>range and accuracy.  The problem, however, is getting circuitry that will
.>run fast enough.  Specifically:
.>
.>The only binary adder that I can locate that is reasonably simple and
.>readily available is the 7483 IC.  For faster speed, the CMOS version,
.>the 74HC283, is available (slightly different pinout, but same stuff).
.>The 74HC283 is plenty fast, BUT it is only 4 bits wide.  To handle a
.>large number of bits (between 20 and 32), this means cascading a bunch
.>of them (so their carry-bits can be connected together).  The propogation
.>delays for the carry bits add up to a large amount.  The bottom line is
.>this: the adder gets REAL slow due to the required rippling of so many
.>carry bits.

The secret (one of them) is to use an adder with carry 'look ahead' so 
that each adder only adds one gate delay to the loop. The second secret
is to use smaller wave tables. A DCO built with a 256 byte lookup table
needs a clock rate of 5.12 Mhz to generate a 20Khz tone. Since 20K
is at the top of the audio spectrum and 5.12 Mhz is well with in TTL
limits you can do reasonably well at that rate. Now for generating 
music (with frequencies accurate to say three decimal digits) you will
need to 'overclock' the circuit to get the appropriate frequencies. 
Waving the hands here and throwing out some math, lets see, add three
orders of magnitude to 20K, which gives you 20Meg, multiply by 256
and wow we're up to 5 gigahertz. Fortunately if you are using the
DCO for music you can cheat because you 'know' that A in one octave is
half the frequency of the next octave up, or twice the frequency of the
next octave down. And for that means you simply set up 12 oscillators
that have the desired frequencies and switch between them depending on
the note. Say your top note is a *very* high A at 28,160Hz then your
A oscillator would be running at 7.208960 Mhz. And although that particular
value may be hard to find you can find one close and use a trimmer capacitor
to detune it to the appropriate frequency. 


--Chuck McManis
uucp: {anywhere}!sun!cmcmanis   BIX: cmcmanis  ARPAnet: cmcmanis@sun.com
These opinions are my own and no one elses, but you knew that didn't you.