[time-nuts] Thought experiment on a low cost timing board

Hal Murray hmurray at suespammers.org
Sat Feb 25 16:49:38 EST 2006

> PCI 3.3v board with:
>     10Mhz OCXO (provision for external clock source?)
>     Uart (serial is an endangered on many PC's)
>     Free running counter driven from the OCXO and readable by PC
>     inputs to latch the counter (how many?) with the latched result
> also readable (for PPS) 

I've been daydreaming along the same line but haven't hit a combination of 
ideas that feels good enough to actually do anything.

My list has a FPGA in the middle.  The problem with that is that newer FPGAs 
don't work on 5V PCI which is what all of my PCs have.  The only 3V slots 
I've seen are in high end (noisy, expensive) servers.  The PCI slots on 
Soekris boards are 3V.  That adds another option to think about.

There are several possibilities for dealing with 5V PCI.
  1: Ignore the problem.  Even though the slot is keyed for 5V, nobody 
actually builds 5V systems any more.  You would need to check your system 
with a scope.  This is probably what I would do if I was just making 
something for myself.  There are lots of risks if you want other people to 
use them.
  2: Use QuickSwitch style FET bus switches to protect the FPGA.  This is 
ugly and violates the official PCI spec but probably works in practice.
  3: Use an old technology FPGA.
  4: Add a PCI-PCI bridge.  Run the on-board PCI bus at 3V.
  5: PLX makes PCI to ??? chips.  This avoids having to make the FPGA talk to 

One of the things I was thinking about putting in the FPGA was a pair of 32 
bit counters for implementing the unix date/time directly.

Anybody know if Intel chips can do a 64 bit atomic read over a PCI bus?  
Years ago they would always break it into 2 separate 32 bit reads.  How about 
AMD chips or what is on the Soekris boards?  The idea is to map the FPGA into 
user space (uncached) so reading the time is just reading a memory location.

Without atomic reads, you might get the date on one day and the time from the 
next day if you read at midnight.  The standard trick is to read date, time, 
date again and try again if the dates are different.  You could also make the 
FPGA save a copy of the date when you read the time.  You would need a copy 
per job/thread, gets complicated.

Touching the PCI bus might be a step backwards on fast CPUs.

A major complication for my doing this sort of project is gold fingers and 
BGAs.   Anybody know where to get PCI cards made and/or BGAs mounted at 
hobbyist quantities/prices?

I've used PCBExpress.  Their prices are within my budget, but they don't do 
gold fingers.  I haven't checked their Pro prices.

I haven't tried the toaster oven approach.  There are a couple of web sites 
that make it look almost reasonable, but it seems like enough 
time/trouble/clutter that I'd like to avoid it if I can.

The suespammers.org mail server is located in California.  So are all my
other mailboxes.  Please do not send unsolicited bulk e-mail or unsolicited
commercial e-mail to my suespammers.org address or any of my other addresses.
These are my opinions, not necessarily my employer's.  I hate spam.

More information about the time-nuts mailing list