Forums

LVDS pin assignment

Started by Unknown April 20, 2005
Hi,

I am designing the following converter: LVDS -> some processing -> LVDS. 
Each LVDS Interface has 3 channels and 1 clock channel at about 300 MHz 
(differential clock rate).

My question is if I should use GLCK pins for the incoming LVDS clock?

Should I also use GLCK pins for the outgoing LVDS clock? I don't think 
so, because there is no OBUFGDS. Or does it make sense to use GCLK pins 
for OBUFDS?

Another question is the bank assignment. Should I put the complete 
Interface (both LVDS) on the same bank? Or better each LVDS on its own 
bank? Or do banks not matter at all?

regards,
Benjamin
Let us see if I can provide you with some guidance,

Austin

Benjamin Menk�c wrote:

> Hi, > > I am designing the following converter: LVDS -> some processing -> LVDS. > Each LVDS Interface has 3 channels and 1 clock channel at about 300 MHz > (differential clock rate). > > My question is if I should use GLCK pins for the incoming LVDS clock?
Yes. Use an IBUFG for the clock, using a dedicated clock input pin. These have the lowest skew (delay) to get in the chip).
> > Should I also use GLCK pins for the outgoing LVDS clock?
No such thing. Any OBUF can duplicate a clock by using the DDR FF. Tie the top FF D input to a '1', and the bottom FF D input to a '0', and on the rising edge you will get an outgoing rising edge, and on the falling edge you will get an outgoing falling edge. All clocks internally should be on a BUFG so they may drive any IOB FF, or any CLB FF with the least skew. I don't think
> so, because there is no OBUFGDS. Or does it make sense to use GCLK pins > for OBUFDS? > > Another question is the bank assignment. Should I put the complete > Interface (both LVDS) on the same bank?
Yes. This is the least skew (delay) from the data bits to the clock (if they are adjacent). Or better each LVDS on its own
> bank?
Nope. Too much skew possible. Or do banks not matter at all? They do matter.
> > regards, > Benjamin
Hi Austin,

thanks for the answer.

 >No such thing.  Any OBUF can duplicate a clock by using the DDR FF. 
 >Tie the top FF D input to a '1', and the bottom FF D input to a '0', 
 >and on the rising edge you will get an outgoing rising edge, and on 
the >falling edge you will get an outgoing falling edge.

How can I set the FF connections in the IOBs manually? In the lib.pdf I 
find only how to instantiate an OBUF, however I can only choose an input 
and output there.

With this construction I have only a single clock, not a differential 
clk_n and clk_p. Is this correct?

Shouldn't I generate the differential outgoing clock signal using a 
OBUFDS where I have just the clk_n or clk_p input.

regards,
Benjamin
Hello

> Hi Austin, > > thanks for the answer. > > >No such thing. Any OBUF can duplicate a clock by using the DDR FF. > >Tie the top FF D input to a '1', and the bottom FF D input to a '0', > >and on the rising edge you will get an outgoing rising edge, and on > the >falling edge you will get an outgoing falling edge. > > How can I set the FF connections in the IOBs manually? In the lib.pdf I > find only how to instantiate an OBUF, however I can only choose an input > and output there. > > With this construction I have only a single clock, not a differential > clk_n and clk_p. Is this correct? > > Shouldn't I generate the differential outgoing clock signal using a > OBUFDS where I have just the clk_n or clk_p input.
I think you should, if you want full LVDS link. About input LVDS pair clock... It could be placed in ordinary input pair I/O P&N, don't forget about termination resistors on PCB. Look at Phase Alignment on xilinx website, 300MHz is not a toy. Best regards Jerzy Gbur
Here is code snippet for generating clock using DDR filpflops and LVDS 
output.

clkn <= not clk;

Instantiate DDR flip flops. clk_out is now a replica of clk signal but 
with same delay as the data bits being clocked out using clk signal.

U1 : FDDRRSE
port map (	Q => clk_out,
                 C0 => clk,
                 C1 => clkn,
                 CE => '1',
                 D0 => '1',
                 D1 => '0',
                 R => '0',
                 S => '0'
            );		

Use LVDS buffers for clk_out signal. In UCF file lock the location of 
atleast the clk_out_p which is the P output of the LVDS signal.

U2 : OBUFDS_LVDSEXT_33
port map(
	I	=> clk_out,
	O	=> clk_out_p,
	OB	=> clk_out_n
);		

I think its not necessary to instantiate the LVDS buffer. If you chose 
the drive type as LVDS in the UCF file, its automatically taken care of. 
Need to cross check.

Brijesh


> Hi Austin, > > thanks for the answer. > > >No such thing. Any OBUF can duplicate a clock by using the DDR FF. > >Tie the top FF D input to a '1', and the bottom FF D input to a '0', > >and on the rising edge you will get an outgoing rising edge, and on > the >falling edge you will get an outgoing falling edge. > > How can I set the FF connections in the IOBs manually? In the lib.pdf I > find only how to instantiate an OBUF, however I can only choose an input > and output there. > > With this construction I have only a single clock, not a differential > clk_n and clk_p. Is this correct? > > Shouldn't I generate the differential outgoing clock signal using a > OBUFDS where I have just the clk_n or clk_p input. > > regards, > Benjamin