*BSD News Article 6993


Return to BSD News archive

Xref: sserve comp.sys.ibm.pc.hardware:34292 comp.unix.bsd:7042
Newsgroups: comp.sys.ibm.pc.hardware,comp.unix.bsd
Path: sserve!manuel.anu.edu.au!munnari.oz.au!spool.mu.edu!sol.ctr.columbia.edu!ira.uka.de!math.fu-berlin.de!informatik.tu-muenchen.de!roell
From: roell@informatik.tu-muenchen.de (Thomas Roell)
Subject: Re: Question on Diamond Clock Synthesizer
In-Reply-To: kenny@osf.org's message of Mon, 19 Oct 1992 15:14:09 GMT
References: <1b7tmgINNi06@agate.berkeley.edu>
	<1992Oct19.082420.16353@Informatik.TU-Muenchen.DE>
	<1992Oct19.151409.24581@osf.org>
Sender: news@Informatik.TU-Muenchen.DE (USENET Newssystem)
Organization: Inst. fuer Informatik, Technische Univ. Muenchen, Germany
Date: Sat, 24 Oct 1992 18:18:37 GMT
Message-ID: <1992Oct24.181837.19994@Informatik.TU-Muenchen.DE>
Lines: 182

Ok, folks here are again my basic thoughts. Maybe some people have
misread
them, or I was simply miswording them:

1) I don not appreaciate in any way that Diamond keeps this thing
   about the clock propreterian. On the other hand I do respect
   Diamonds decision to not give the details away to the public.

2) I am opposed to the talk going on about Diamond beeing the
   bad guys, and everybody else beeing good. I truely believe that STB
   is giving away the info about the PLL only cause Diamond isn't.
   Kind of little childs behaviour. But's that's my personal opinion,
   which might be wrong. I also cannot understand the talk about not
   buying diamon products. That's rediculus. Just because they didn't
   give you ALL the details ? Some examples here:

        - ATI doesn't give you infos about the NON 8514/A registers on
          their boards, without letting you sign an agreenment.

        - The i486 has some chiptesting opcodes which you only get
          under a strict NDA.

  So what ? Not buying an ATI Ultra cause they didn't pass you every
  detail ? Gitting rid of your 486 box ? You would say no, and that's
  just the point. As long as you get all details you have to know for
  your application, you do not worry about this. In the Diamond case
  they simply were wrong in assuming nobody would like to know how to
  programm the pll. Due to that the Diamond products are useless for a
  certain class of applications. Bad luck. Go and buy the piece of
  hardware that works for you. But don't start bitching about them and
  start a campain. That's childish and not appropriate for todays
  people.

3) I can understand (and do respect Diamonds) descision. Just because
   the discussion was that one direction, I tried to give you some
   possible reason that might have lead them to this behaviour:

   - Technical advantage over competitors

   - Possible fears of misusing the information, so that HW is damaged
     due to wrong use. There is a problem of liability.

   - Frequent changes of the PLL, which is easy for them to handle if
     they keep the number of people that do have to programm the PLL
     without BIOS small.

   
   I'm not sure whether all these points are justified in the future,
   since the same PLL is used by other peoples (with a different name)
   which don't think that this is a tradsecret.

4) I'm no EE person, so I have to believe what engeers are telling me
   about overheating. I also didn't look that closely at the stuff
   that Batman wrote (actually it is very discusting that people are
   posting something without their name). From what I saw, I do
   believe that these values are wrong, and programm the PLL into an
   illegal damaging way. Again, I might be wrong, but do you really
   trust somebody who doesn't even sign his letter ?


To clarify some things about this new generation of clock chips here a
few points made by some people:

        - a programmable PLL is just a divider

        - a programmable PLL just has more clock select signals

        - all programmable PLLs have builtin features to avoid
          overheating.

I would say most of them are wrong (and due to my experiance I can
tell you the last point is certainly wrong). To give people an idea
what really happens here, I will give an example, that of the SC11410
(Sierra Semiconductors). Here a short cut from the spec:

    The oscillator and the VCO output is divided ny M and N integer
numbers
    in the range of 1 and 127. The divided outputs are phase-locked to
    each other by the PLL circut. The VCO output is divided by the
post
    scaler modulo 'P. The VCO output frequency (CLKOUT) can be
calculated
    by using the following equation:

        CLKOUT = (N / MP) * Fosc,

        where:  Fosc = Osciallor frequency (normally 14.318MHz)
                P = 1,2,4,8
                M,N = 1 to 127 

The cips itself is programmed via a 18bit shift register. I have here
some code for you to make it more clearly how to programm that beast.
Basically I have there a function that computes the 18bit value and
one that deals with downloading the value. Note that this code is
actually from the SGCS X386 1.3 server (which by the way does support
the Diamond boards) and hence copywrited. So, please competitors,
don't  use this stuff or even look at it ...


/*
 * SC11410ShiftRegister --
 *
 *      Compute the value for the shift register of the SC11410 for a
given
 *      oscillator frequency and a desiged output frequency. The
values for
 *      n, m, p are so computed that they are relatively prime to each
other.
 */

unsigned long
SC11410ShiftRegister(fout, fosc)
     unsigned long fout;
     unsigned long fosc;
{
  unsigned int  n, m, nout, mout, pout;
  unsigned long diff, diffout, ftmp;

  fout /= 1000;
  fosc /= 1000;

  nout = n = 2;
  mout = m = 2;
  ftmp = (fosc * n) / m;
  diffout = (fout - ftmp) * (fout - ftmp);

  while ((n < 128) && (m < 128))
    {
      ftmp = (fosc * n) / m;

      /*
       * Only accept new values, if n is no multiple of m and if the
new
       * pair is nearer to the desired frequency than the old pair
(this
       * prevents us implecitely from accepting a new pair which is
only
       * a multiple of the old pair).
       */
      if ((n % m) && (diff = (fout - ftmp) * (fout - ftmp)) < diffout)
        {
          nout    = n;
          mout    = m;
          diffout = diff;
        }

      if (ftmp > fout) m++; else n++; /* move on into the new
direction */
    }

  /*
   * At least try to make use of the postscaler to optimize for low
jitter
   */
  pout = 0;

  if (fout < 40000)
    {
      if (!(mout & 7))      { pout = 3; mout >>= 3; }
      else if (!(mout & 3)) { pout = 2; mout >>= 2; }
      else if (!(mout & 1)) { pout = 1; mout >>= 1; }
    }

  return (mout << 11) | (nout << 4) | (pout << 1);
}



And some final things. This SC11410 is not used by Diamond. I used
this as an example, cause the principles show up here more clearly.
he Diamond PLL is much more complicated to deal with. And there are
at least two revs of this chip, which are somewhat different to
programm. But I hope that the principles of what we are dealing with
are more clearly. And never forget, you could programm 1818 MHZ (!!!!)
with that baby. Maybe you'll see some smoke, maybe not. 

- Thomas
--
-------------------------------------------------------------------------------
Das Reh springt hoch, 				e-mail: roell@sgcs.com
das Reh springt weit,				#include <sys/pizza.h>
was soll es tun, es hat ja Zeit ...