FPGARelated.com
Forums

Camera link interface

Started by Unknown May 15, 2008
Hello,

I've implemented a camera link deserializer interface based on a
virtex 4 FPGA (using ML402 development board). I'm using the LVDS 2.5
V inputs of the board and a cable with one end open.

The module works fine when i use a short cable. However, my
application needs to use a long cable (with a discontinuity) which
doesn't work so fine. The thing is that I guess there is a match
problem in the board reception side, because when i represent the eye
diagram of the incoming signals (once it's converted to LVTTL) and the
long cable is used, it's really bad.

I know that it is possible to use this long cable because it works
with a generic frame grabber.
I've tried using the DCI (Digital Control impedance) of the FPGA,
LVDS_EXT standard... but i don't reach a solution...

If someone could have some experience in this field...

Thank very much in advace !
On 15 May=FDs, 04:41, Crhono...@gmail.com wrote:
> Hello, > > I've implemented a camera link deserializer interface based on a > virtex 4 FPGA (using ML402 development board). I'm using the LVDS 2.5 > V inputs of the board and a cable with one end open. > > The module works fine when i use a short cable. However, my > application needs to use a long cable (with a discontinuity) which > doesn't work so fine. The thing is that I guess there is a match > problem in the board reception side, because when i represent the eye > diagram of the incoming signals (once it's converted to LVTTL) and the > long cable is used, it's really bad. > > I know that it is possible to use this long cable because it works > with a generic frame grabber. > I've tried using the DCI (Digital Control impedance) of the FPGA, > LVDS_EXT standard... but i don't reach a solution... > > If someone could have some experience in this field... > > Thank very much in advace !
Hi, What is the length of your cable? Do you know the impedance of your cable? Mismatch can also accur because of the cable. As an example I have used LVDS signaling through a 3m. cable with 100 Mbps successfully.
Also I must say that I was also unsuccessful through a 5m. cable with
a very bad one which includes several connectors and a long solid flat
cable in it.
Have you instantiated the differential input buffers (IBUFDS) with the
diffterm generic set to true?
On May 15, 7:41=A0pm, Crhono...@gmail.com wrote:
> Hello, > > I've implemented a camera link deserializer interface based on a > virtex 4 FPGA (using ML402 development board). I'm using the LVDS 2.5 > V inputs of the board and a cable with one end open. > > The module works fine when i use a short cable. However, my > application needs to use a long cable (with a discontinuity) which > doesn't work so fine. The thing is that I guess there is a match > problem in the board reception side, because when i represent the eye > diagram of the incoming signals (once it's converted to LVTTL) and the > long cable is used, it's really bad. > > I know that it is possible to use this long cable because it works > with a generic frame grabber. > I've tried using the DCI (Digital Control impedance) of the FPGA, > LVDS_EXT standard... but i don't reach a solution... > > If someone could have some experience in this field... > > Thank very much in advace !
I think the length and the bps is the key factor, i am now doing the saming work, could you send me you codes for reference? thanks a lot. Best Regards, Wicky
I have camera link working at 40MHz, a 2 meter cable,
VHDL code using the ISERDES Xilinx primitives, a ML402
with a daughter board of my own design that had matched
length traces.

I did not use Digital Control Impedance.

What do you mean "one end open"?

Setting up the ISERDES,the terminated IOBs, and your
DCMs are all critical:

from UCF file:
# CAMERA LINK 2 INPUT
NET "cam2_in<0>"  LOC = "AC20" ; # X0NEG
NET "cam2_in<1>"  LOC = "AB20" ; # X0POS
NET "cam2_in<2>"  LOC = "AD21" ; # X1NEG
NET "cam2_in<3>"  LOC = "AE21" ; # X1POS
NET "cam2_in<4>"  LOC = "AD20" ; # X2NEG
NET "cam2_in<5>"  LOC = "AE20" ; # X2POS
NET "cam2_in<6>"  LOC = "AC19" ; # CLKNEG
NET "cam2_in<7>"  LOC = "AD19" ; # CLKPOS
NET "cam2_in<8>"  LOC = "AB18" ; # X3NEG
NET "cam2_in<9>"  LOC = "AC18" ; # X3POS

from VHDL:

 attribute DIFF_TERM : boolean;
 attribute DIFF_TERM of cam2_x0_ibufd_inst:label is true;
 attribute DIFF_TERM of cam2_x1_ibufd_inst:label is true;
 attribute DIFF_TERM of cam2_x2_ibufd_inst:label is true;
 attribute DIFF_TERM of cam2_x3_ibufd_inst:label is true;
 attribute DIFF_TERM of cam2_xclk_ibufd_inst:label is true;
 attribute DIFF_TERM of serial_from_cam2_IBUFDS:label is true;

   cam2_xclk_ibufd_inst : IBUFDS
 port map (
   O  => cam2_xclk,
   I  => cam2_in(7),
   IB => cam2_in(6) );

   cam2_x0_ibufd_inst : IBUFDS
 port map (
   O  => cam2_x0,
   I  => cam2_in(1),
   IB => cam2_in(0) );

   cam2_x1_ibufd_inst : IBUFDS
 port map (
   O  => cam2_x1,
   I  => cam2_in(3),
   IB => cam2_in(2) );

   cam2_x2_ibufd_inst : IBUFDS
 port map (
   O  => cam2_x2,
   I  => cam2_in(5),
   IB => cam2_in(4) );

   cam2_x3_ibufd_inst : IBUFDS
 port map (
   O  => cam2_x3,
   I  => cam2_in(9),
   IB => cam2_in(8) );


   iserdes_master : ISERDES
   generic map (
      BITSLIP_ENABLE => FALSE,   -- TRUE FALSE
      DATA_RATE      => "SDR",   -- DDR SDR
      DATA_WIDTH     => 7,       -- DDR 4,6,8,10  SDR 2,3,4,5,6,7,8
      INIT_Q1        => '0',
      INIT_Q2        => '0',
      INIT_Q3        => '0',
      INIT_Q4        => '0',
      INTERFACE_TYPE => "MEMORY",  -- model - "MEMORY" or "NETWORKING"
      IOBDELAY       => "NONE",     -- delay chain 
"NONE","IBUF","IFD","BOTH"
      IOBDELAY_TYPE  => "DEFAULT",   -- tap delay "DEFAULT", 
"FIXED","VARIABLE"
      IOBDELAY_VALUE =>  0,        -- initial tap delay 0 to 63
      NUM_CE         =>  1,        -- clock enables 1,2
      SERDES_MODE    => "MASTER",  -- "MASTER" or "SLAVE"
      SRVAL_Q1       => '0',
      SRVAL_Q2       => '0',
      SRVAL_Q3       => '0',
      SRVAL_Q4       => '0')
   port map (
      O         => open,
      Q1        => dout(0),
      Q2        => dout(1),
      Q3        => dout(2),
      Q4        => dout(3),
      Q5        => dout(4),
      Q6        => dout(5),
      SHIFTOUT1 => shift1,
      SHIFTOUT2 => shift2,
      BITSLIP   => '0',
      CE1       => '1',
      CE2       => '1',
      CLK       => fclk,
      CLKDIV    => xclk,
      D         => din,
      DLYCE     => dlyce,
      DLYINC    => dlyinc,
      DLYRST    => dlyrst,
      OCLK      => oclk,
      REV       => '0',
      SHIFTIN1  => '0',
      SHIFTIN2  => '0',
      SR        => reset );

   iserdes_slave : ISERDES
   generic map (
      BITSLIP_ENABLE => FALSE,   -- TRUE FALSE
      DATA_RATE      => "SDR",   -- DDR SDR
      DATA_WIDTH     => 7,      -- DDR 4,6,8,10  SDR 2,3,4,5,6,7,8
      INIT_Q1        => '0',
      INIT_Q2        => '0',
      INIT_Q3        => '0',
      INIT_Q4        => '0',
      INTERFACE_TYPE => "MEMORY",  -- model - "MEMORY" or "NETWORKING"
      IOBDELAY       => "NONE",     -- delay chain 
"NONE","IBUF","IFD","BOTH"
      IOBDELAY_TYPE  => "DEFAULT",   -- tap delay "DEFAULT", 
"FIXED","VARIABLE"
      IOBDELAY_VALUE =>  0,        -- initial tap delay 0 to 63
      NUM_CE         =>  1,        -- clock enables 1,2
      SERDES_MODE    => "SLAVE",   -- "MASTER" or "SLAVE"
      SRVAL_Q1       => '0',
      SRVAL_Q2       => '0',
      SRVAL_Q3       => '0',
      SRVAL_Q4       => '0')
   port map (
      O         => open,
      Q1        => open,
      Q2        => open,
      Q3        => dout(6),
      Q4        => dout(7),
      Q5        => dout(8),
      Q6        => dout(9),
      SHIFTOUT1 => open,
      SHIFTOUT2 => open,
      BITSLIP   => '0',
      CE1       => '1',
      CE2       => '1',
      CLK       => fclk,
      CLKDIV    => xclk,
      D         => '0',
      DLYCE     => dlyce,
      DLYINC    => dlyinc,
      DLYRST    => dlyrst,
      OCLK      => oclk,
      REV       => '0',
      SHIFTIN1  => shift1,
      SHIFTIN2  => shift2,
      SR        => reset );

Brad Smallridge
AiVision

<Crhonos04@gmail.com> wrote in message 
news:aaab7574-dcb3-49ce-a927-9ecb5926d1a0@34g2000hsf.googlegroups.com...
> Hello, > > I've implemented a camera link deserializer interface based on a > virtex 4 FPGA (using ML402 development board). I'm using the LVDS 2.5 > V inputs of the board and a cable with one end open. > > The module works fine when i use a short cable. However, my > application needs to use a long cable (with a discontinuity) which > doesn't work so fine. The thing is that I guess there is a match > problem in the board reception side, because when i represent the eye > diagram of the incoming signals (once it's converted to LVTTL) and the > long cable is used, it's really bad. > > I know that it is possible to use this long cable because it works > with a generic frame grabber. > I've tried using the DCI (Digital Control impedance) of the FPGA, > LVDS_EXT standard... but i don't reach a solution... > > If someone could have some experience in this field... > > Thank very much in advace !
We need data...

You have told us nothing about speed, length (long doesn't count), 
type/specs of cable, etc..........

I've transmitted 400mbps over 5m using 3M MDR cable assemblies, driven 
by an FPGA.  I've received up to 300mbps, FPGA's on both ends, Xilinx 
(tx) and Altera (rx)--this is evidence that two foes can play nice 
together :)

Rob

Crhonos04@gmail.com wrote:
> Hello, > > I've implemented a camera link deserializer interface based on a > virtex 4 FPGA (using ML402 development board). I'm using the LVDS 2.5 > V inputs of the board and a cable with one end open. > > The module works fine when i use a short cable. However, my > application needs to use a long cable (with a discontinuity) which > doesn't work so fine. The thing is that I guess there is a match > problem in the board reception side, because when i represent the eye > diagram of the incoming signals (once it's converted to LVTTL) and the > long cable is used, it's really bad. > > I know that it is possible to use this long cable because it works > with a generic frame grabber. > I've tried using the DCI (Digital Control impedance) of the FPGA, > LVDS_EXT standard... but i don't reach a solution... > > If someone could have some experience in this field... > > Thank very much in advace !
First of all, thank you for your answers.

I answer some of your questions:

- cam_clk = 40 MHz
- Data rate = (about) 378 Mbps [30 fps; frame size 1024 x 1024; 12 bit
digitalization]
- My ucf and vhdl is the same that Brad's one (but without ISERDES)

About the cable, is 5 meters in length. The problem is that there is
an intermediate sub-D connector which is joining two 2.5 m cables, id
est, the cable consists in a camera link connector - a sub-D female -
a sub-D male - pins to FPGA board.
I really know that this is not the most suitable for high frequency
signals, but the thing is that this cable works when the receiver is a
frame grabber or a board using the NI deserializer chip.

Once the input signals are received by the FPGA, they're wrong,
so...if there's a problem I guess it's a mismatch or something like
that. Anyway I'm not an expert...if you have more ideas...

Thank you,
Chronos
> About the cable, is 5 meters in length. The problem is that there is > an intermediate sub-D connector which is joining two 2.5 m cables
I'm not sure you can daisy chain Camera Link Cables like this. Are you doing that for the frame grabber set up? There was something about the Camera Link spec that made me think that you can't connect them like other cables, besides the fact they don't have male/female connectors. Your signals maybe mirrored.
> idest
? Brad Smallridge AiVision
Are you sure you are doing a Camera Link interface?  The interface is a 
7x interface.  So, a 40MHz clock would yield each lane running at 
280MHz.  I'm a little confused why you say your running at 378Mbps.

You said your receiver worked with the short cable but now with the 
longer one.  It could be a few things but I would analyze the timing on 
your receiver to assure yourself you have the best skew margin.  Some 
National receivers have de-skew technology.  Most of the higher end 
FPGA's can implement this, too.  My guess is that V4 has the power to do so.

Another thought, shy don't you just buy a 5m camera link cable and see 
if your problems go away.  Why are you using two 2.5m cables?



JPiqueras.M@gmail.com wrote:
> First of all, thank you for your answers. > > I answer some of your questions: > > - cam_clk = 40 MHz > - Data rate = (about) 378 Mbps [30 fps; frame size 1024 x 1024; 12 bit > digitalization] > - My ucf and vhdl is the same that Brad's one (but without ISERDES) > > About the cable, is 5 meters in length. The problem is that there is > an intermediate sub-D connector which is joining two 2.5 m cables, id > est, the cable consists in a camera link connector - a sub-D female - > a sub-D male - pins to FPGA board. > I really know that this is not the most suitable for high frequency > signals, but the thing is that this cable works when the receiver is a > frame grabber or a board using the NI deserializer chip. > > Once the input signals are received by the FPGA, they're wrong, > so...if there's a problem I guess it's a mismatch or something like > that. Anyway I'm not an expert...if you have more ideas... > > Thank you, > Chronos