FPGARelated.com
Forums

Driving fpga pin out over long cable

Started by Tom Derham May 24, 2004
I am using 3 Xilinx SpartanIIE boards, each loaded with a similar design
running with a 100MHz master clock.  This clock is derived from a single
source and distributed to each board so they are synchronised.  The boards
are postioned about 50m apart.

I need to synchronise events on the boards, but occasionally sending a
single pulse (say 10ns long) from the output pin of one of the FPGAs to the
other boards, to allow them to synchronise internal timers.  I need to make
sure that the pulse arrives at the other two boards at the same time so that
it is 'recognised' on the same rising edge of the reference clock in each
case, so that the boards synchronise together.

Clearly the attenuation of any 50m length of cable is such that I cannot
connect them directly, but nor do I want the complexity of converting the
pulse to optical fibre and back again.
For the distribution of the reference clock I am using National CLC005/012
driver and equaliser chipset over UTP, using equal length wires so as to not
introduce propagation skew.  For practical reasons I can't use the same
cable for sending this event pulse, and ideally would like a simple, elegant
solution.
I was just wondering if anyone had done anything similar before... if not, I
have a back-up plan using more of the National drivers, but I thought they
might be a sledgehammer to crack a nut - and am unsure what levels of skew
they may introduce themselves... jitter is not so important because the
event is resynced at the receiving fpga, as long as the total difference in
edge is less than half of the reference clock cycle (so 5ns).

Thank you in advance for any ideas....


Tom Derham wrote:
> I am using 3 Xilinx SpartanIIE boards, each loaded with a similar design > running with a 100MHz master clock. This clock is derived from a single > source and distributed to each board so they are synchronised. The boards > are postioned about 50m apart. > > I need to synchronise events on the boards, but occasionally sending a > single pulse (say 10ns long) from the output pin of one of the FPGAs to the > other boards, to allow them to synchronise internal timers. I need to make > sure that the pulse arrives at the other two boards at the same time so that > it is 'recognised' on the same rising edge of the reference clock in each > case, so that the boards synchronise together. > > Clearly the attenuation of any 50m length of cable is such that I cannot > connect them directly, but nor do I want the complexity of converting the > pulse to optical fibre and back again. > For the distribution of the reference clock I am using National CLC005/012 > driver and equaliser chipset over UTP, using equal length wires so as to not > introduce propagation skew. For practical reasons I can't use the same > cable for sending this event pulse, and ideally would like a simple, elegant > solution. > I was just wondering if anyone had done anything similar before... if not, I > have a back-up plan using more of the National drivers, but I thought they > might be a sledgehammer to crack a nut - and am unsure what levels of skew > they may introduce themselves... jitter is not so important because the > event is resynced at the receiving fpga, as long as the total difference in > edge is less than half of the reference clock cycle (so 5ns). > > Thank you in advance for any ideas....
The natsemi drivers might seem an over-kill, but they do give you tracking with your clock system, and since that sounds like it rather matters, anything you a) already know and b) tracks what you already use sounds to me like a simple, elegant solution ? Another scheme for global sync, (but that some systems cannot tolerate), is to send a break in the clock stream - can be as simple as a single missing pulse. Gives you a time-Zero, and all units thereafter are in-phase. -jg
Tom Derham wrote:

> I am using 3 Xilinx SpartanIIE boards, each loaded with a similar design > running with a 100MHz master clock. This clock is derived from a single > source and distributed to each board so they are synchronised. The boards > are postioned about 50m apart. > > I need to synchronise events on the boards, but occasionally sending a > single pulse (say 10ns long) from the output pin of one of the FPGAs to the > other boards, to allow them to synchronise internal timers. I need to make > sure that the pulse arrives at the other two boards at the same time so that > it is 'recognised' on the same rising edge of the reference clock in each > case, so that the boards synchronise together. > > Clearly the attenuation of any 50m length of cable is such that I cannot > connect them directly, but nor do I want the complexity of converting the > pulse to optical fibre and back again. > For the distribution of the reference clock I am using National CLC005/012 > driver and equaliser chipset over UTP, using equal length wires so as to not > introduce propagation skew. For practical reasons I can't use the same > cable for sending this event pulse, and ideally would like a simple, elegant > solution. > I was just wondering if anyone had done anything similar before... if not, I > have a back-up plan using more of the National drivers, but I thought they > might be a sledgehammer to crack a nut - and am unsure what levels of skew > they may introduce themselves... jitter is not so important because the > event is resynced at the receiving fpga, as long as the total difference in > edge is less than half of the reference clock cycle (so 5ns). > > Thank you in advance for any ideas....
100 MHz on a long cable calls for either 50 Ohms, ECL or perhaps LVDS. There also are the AnalogDevices ADum1400 family of magnetocouplers, some of which are spec'ed for 100MBit. Rene -- Ing.Buero R.Tschaggelar - http://www.ibrtses.com & commercial newsgroups - http://www.talkto.net
Rene Tschaggelar <none@none.net> wrote in message news:<40b32543$0$718$5402220f@news.sunrise.ch>...

> 100 MHz on a long cable calls for either 50 Ohms, ECL or perhaps LVDS. > > There also are the AnalogDevices ADum1400 family of magnetocouplers, > some of which are spec'ed for 100MBit. > > Rene
One more vote for LVDS. Here's an app note for TI M-LVDS technology. http://focus.ti.com/lit/an/slla127/slla127.pdf Basically they say -6dB at 30m over UTP for 100 Mbps, and a little over 10% jitter at 50m. I expect you may be able to do better with co-ax cable -- look for a type with low-loss dielectric and, for lower power consumption, higher characteristic impedance -- co-ax goes upto about 100ohm. You will need to be careful about ground differences between the two ends. Regards, -rajeev-
How about this weird idea:  Don't send a pulse, send an edge.  Your
attenuation might provide a little phase shift but it would be pretty easy
to alter the phase to match the clocks.  Rather than a smeared pulse with
low high-level amplitudes, you get a full transition with a consistent 50%
point.


"Tom Derham" <uceeted@ucl.ac.uk> wrote in message
news:xtvsc.1724$hu1.16883825@news-text.cableinet.net...
> I am using 3 Xilinx SpartanIIE boards, each loaded with a similar design > running with a 100MHz master clock. This clock is derived from a single > source and distributed to each board so they are synchronised. The boards > are postioned about 50m apart. > > I need to synchronise events on the boards, but occasionally sending a > single pulse (say 10ns long) from the output pin of one of the FPGAs to
the
> other boards, to allow them to synchronise internal timers. I need to
make
> sure that the pulse arrives at the other two boards at the same time so
that
> it is 'recognised' on the same rising edge of the reference clock in each > case, so that the boards synchronise together. > > Clearly the attenuation of any 50m length of cable is such that I cannot > connect them directly, but nor do I want the complexity of converting the > pulse to optical fibre and back again. > For the distribution of the reference clock I am using National CLC005/012 > driver and equaliser chipset over UTP, using equal length wires so as to
not
> introduce propagation skew. For practical reasons I can't use the same > cable for sending this event pulse, and ideally would like a simple,
elegant
> solution. > I was just wondering if anyone had done anything similar before... if not,
I
> have a back-up plan using more of the National drivers, but I thought they > might be a sledgehammer to crack a nut - and am unsure what levels of skew > they may introduce themselves... jitter is not so important because the > event is resynced at the receiving fpga, as long as the total difference
in
> edge is less than half of the reference clock cycle (so 5ns). > > Thank you in advance for any ideas.... > >
Here is another suggestion:
Normally transmit a clock that is 30% High, 70% Low, but at the
synchronization moment, change one time to 70% High, 30%Low.
In the receiver, use the DLL to generate 50% duty cycle (the DLL is
always triggered on the rising clock edge). Then use the falling output
edge from the DLL to clock the incoming clock level into a flip-flop.
This flip-flop will be High for just one clock cycle.
This idea is similar to the "missing clock pulse synchronization"
mentioned before, but avoids its problems...
BTW: You must dc-couple the clock for this suggestion !
Peter Alfke, Xilinx Applications.
=====================================
John_H wrote:
> > How about this weird idea: Don't send a pulse, send an edge. Your > attenuation might provide a little phase shift but it would be pretty easy > to alter the phase to match the clocks. Rather than a smeared pulse with > low high-level amplitudes, you get a full transition with a consistent 50% > point. > > "Tom Derham" <uceeted@ucl.ac.uk> wrote in message > news:xtvsc.1724$hu1.16883825@news-text.cableinet.net... > > I am using 3 Xilinx SpartanIIE boards, each loaded with a similar design > > running with a 100MHz master clock. This clock is derived from a single > > source and distributed to each board so they are synchronised. The boards > > are postioned about 50m apart. > > > > I need to synchronise events on the boards, but occasionally sending a > > single pulse (say 10ns long) from the output pin of one of the FPGAs to > the > > other boards, to allow them to synchronise internal timers. I need to > make > > sure that the pulse arrives at the other two boards at the same time so > that > > it is 'recognised' on the same rising edge of the reference clock in each > > case, so that the boards synchronise together. > > > > Clearly the attenuation of any 50m length of cable is such that I cannot > > connect them directly, but nor do I want the complexity of converting the > > pulse to optical fibre and back again. > > For the distribution of the reference clock I am using National CLC005/012 > > driver and equaliser chipset over UTP, using equal length wires so as to > not > > introduce propagation skew. For practical reasons I can't use the same > > cable for sending this event pulse, and ideally would like a simple, > elegant > > solution. > > I was just wondering if anyone had done anything similar before... if not, > I > > have a back-up plan using more of the National drivers, but I thought they > > might be a sledgehammer to crack a nut - and am unsure what levels of skew > > they may introduce themselves... jitter is not so important because the > > event is resynced at the receiving fpga, as long as the total difference > in > > edge is less than half of the reference clock cycle (so 5ns). > > > > Thank you in advance for any ideas.... > > > >
Peter Alfke <peter@xilinx.com> wrote in message news:<40B38A28.FDBF2E3F@xilinx.com>...
> Here is another suggestion: > Normally transmit a clock that is 30% High, 70% Low, but at the > synchronization moment, change one time to 70% High, 30%Low. > In the receiver, use the DLL to generate 50% duty cycle (the DLL is > always triggered on the rising clock edge). Then use the falling output > edge from the DLL to clock the incoming clock level into a flip-flop. > This flip-flop will be High for just one clock cycle. > This idea is similar to the "missing clock pulse synchronization" > mentioned before, but avoids its problems... > BTW: You must dc-couple the clock for this suggestion ! > Peter Alfke, Xilinx Applications.
Great solution, Peter. Some years ago I used this scheme to communicate two systems ... until I change to Manchester ;-). Anyway, has someone thought that the signal needs about 250 ns (25 clock cycles at 100 MHz) to fly from one board to the others. 50m are 50m, and light speed is light speed.
To go one step further with Peter's idea, you can AC couple if instead
of sending an occasional "pulse" (one cycle of 70% high) you send a
"square wave" of say 50 cycles of 30% high followed by 50 cycles of 70%
high.  This gives you synchronizing events at each edge of the wave and
keeps the DC balance over the period of 1uS.
Peter Alfke <peter@xilinx.com> wrote in message news:<40B38A28.FDBF2E3F@xilinx.com>...
> Here is another suggestion: > Normally transmit a clock that is 30% High, 70% Low, but at the > synchronization moment, change one time to 70% High, 30%Low. > In the receiver, use the DLL to generate 50% duty cycle (the DLL is > always triggered on the rising clock edge). Then use the falling output > edge from the DLL to clock the incoming clock level into a flip-flop. > This flip-flop will be High for just one clock cycle. > This idea is similar to the "missing clock pulse synchronization" > mentioned before, but avoids its problems... > BTW: You must dc-couple the clock for this suggestion ! > Peter Alfke, Xilinx Applications. > ===================================== > John_H wrote: > > > > How about this weird idea: Don't send a pulse, send an edge. Your > > attenuation might provide a little phase shift but it would be pretty easy > > to alter the phase to match the clocks. Rather than a smeared pulse with > > low high-level amplitudes, you get a full transition with a consistent 50% > > point. > > > > "Tom Derham" <uceeted@ucl.ac.uk> wrote in message > > news:xtvsc.1724$hu1.16883825@news-text.cableinet.net... > > > I am using 3 Xilinx SpartanIIE boards, each loaded with a similar design > > > running with a 100MHz master clock. This clock is derived from a single > > > source and distributed to each board so they are synchronised. The boards > > > are postioned about 50m apart. > > > > > > I need to synchronise events on the boards, but occasionally sending a > > > single pulse (say 10ns long) from the output pin of one of the FPGAs to > the > > > other boards, to allow them to synchronise internal timers. I need to > make > > > sure that the pulse arrives at the other two boards at the same time so > that > > > it is 'recognised' on the same rising edge of the reference clock in each > > > case, so that the boards synchronise together. > > > > > > Clearly the attenuation of any 50m length of cable is such that I cannot > > > connect them directly, but nor do I want the complexity of converting the > > > pulse to optical fibre and back again. > > > For the distribution of the reference clock I am using National CLC005/012 > > > driver and equaliser chipset over UTP, using equal length wires so as to > not > > > introduce propagation skew. For practical reasons I can't use the same > > > cable for sending this event pulse, and ideally would like a simple, > elegant > > > solution. > > > I was just wondering if anyone had done anything similar before... if not, > I > > > have a back-up plan using more of the National drivers, but I thought they > > > might be a sledgehammer to crack a nut - and am unsure what levels of skew > > > they may introduce themselves... jitter is not so important because the > > > event is resynced at the receiving fpga, as long as the total difference > in > > > edge is less than half of the reference clock cycle (so 5ns). > > > > > > Thank you in advance for any ideas.... > > > > > >
sanpab@eis.uva.es wrote:

> Peter Alfke <peter@xilinx.com> wrote in message news:<40B38A28.FDBF2E3F@xilinx.com>... > >>Here is another suggestion: >>Normally transmit a clock that is 30% High, 70% Low, but at the >>synchronization moment, change one time to 70% High, 30%Low. >>In the receiver, use the DLL to generate 50% duty cycle (the DLL is >>always triggered on the rising clock edge). Then use the falling output >>edge from the DLL to clock the incoming clock level into a flip-flop. >>This flip-flop will be High for just one clock cycle. >>This idea is similar to the "missing clock pulse synchronization" >>mentioned before, but avoids its problems... >>BTW: You must dc-couple the clock for this suggestion ! >>Peter Alfke, Xilinx Applications. > > > Great solution, Peter. Some years ago I used this scheme to > communicate two systems ... until I change to Manchester ;-). > > Anyway, has someone thought that the signal needs about 250 ns (25 > clock cycles at 100 MHz) to fly from one board to the others. 50m are > 50m, and light speed is light speed.
And you want us to give you a link to a cheap, or better to a free time machine ? Rene -- Ing.Buero R.Tschaggelar - http://www.ibrtses.com & commercial newsgroups - http://www.talkto.net
sanpab@eis.uva.es wrote:

> Peter Alfke <peter@xilinx.com> wrote in message news:<40B38A28.FDBF2E3F@xilinx.com>... > >>Here is another suggestion: >>Normally transmit a clock that is 30% High, 70% Low, but at the >>synchronization moment, change one time to 70% High, 30%Low. >>In the receiver, use the DLL to generate 50% duty cycle (the DLL is >>always triggered on the rising clock edge). Then use the falling output >>edge from the DLL to clock the incoming clock level into a flip-flop. >>This flip-flop will be High for just one clock cycle. >>This idea is similar to the "missing clock pulse synchronization" >>mentioned before, but avoids its problems... >>BTW: You must dc-couple the clock for this suggestion ! >>Peter Alfke, Xilinx Applications. > > > Great solution, Peter. Some years ago I used this scheme to > communicate two systems ... until I change to Manchester ;-). > > Anyway, has someone thought that the signal needs about 250 ns (25 > clock cycles at 100 MHz) to fly from one board to the others. 50m are > 50m, and light speed is light speed.
Yes, but the OP did say the cable lengths were equal ? Gabor Szakacs wrote: > To go one step further with Peter's idea, you can AC couple if instead > of sending an occasional "pulse" (one cycle of 70% high) you send a > "square wave" of say 50 cycles of 30% high followed by 50 cycles of 70% > high. This gives you synchronizing events at each edge of the wave and > keeps the DC balance over the period of 1uS. This is how TV frame sync pulses are sent, and is a good idea. -jg