This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TLK1501 synchronization and initialization problem.

Other Parts Discussed in Thread: TLK1501

hi..

 

My Board Structure.

ADC(Video, NTSC)-->FPGA --> TLK1501 -->SFP -------------------------------------- fiber ----------------------------------------- SFP-->TLK1501-->FPGA-->DAC(Video, NTSC)

 

Process about TLK1501 synchronization and initialization

1. FPGA Configration

2. TLK1501 TxClock 50MHz input(from FPGA), Enable is pull up, Loopen & PRBSEN is pull down.

3. 3 times(Txen = Txer = 0)

4. normal Operation(Txen = 1, Txer = 0)

 

but almost Link is fail.(somtimes Link is good)

what is the problem?

--------------------------- My source code ----------------------------------

 -- Data Transmit --
 process(GReset, SerdesClock)
 variable CntTx : integer range 0 to 10;
 begin
  if(GReset = '0') then  -- FPGA Reset
   CntTx := 0;
   OpticSync <= '0';
   SerdesTxData(9 downto 0) <= (others => '0');  -- Video
   SerdesTxData(12 downto 10) <= (others => '0');  -- Ethernet
   SerdesTxData(14 downto 13) <= (others => '0');  -- Audio
   SerdesTxData(15) <= '0';       -- Serial


  elsif falling_edge(SerdesClock) then
   if(OpticSync = '0') then
    case CntTx is
     -- IDLE State(3 times) --
     when 0 => SerdesTxEn <= '0';
        SerdesTxEr <= '0';
        CntTx := CntTx + 1;
        
     when 1 => SerdesTxEn <= '0';
        SerdesTxEr <= '0';
        CntTx := CntTx + 1;
        
     when 2 => SerdesTxEn <= '0';
        SerdesTxEr <= '0';
        OpticSync <= '1';
     
     when others =>
    end case;


   else -- Normal Operation
    CntTx := 0; 
    SerdesTxData(12 downto 10) <= EthRxDataBuf & EthRxDvBuf;
    SerdesTxData(14 downto 13) <= AudioAdcLrck & AudioAdcDout;
    SerdesTxData(15) <= VideoADC_Clock1;
    
    if(VideoADC_Clock1 = '1') then
     SerdesTxData(9 downto 0) <= VideoInputCh1;
    elsif(VideoADC_Clock2 = '1') then
     SerdesTxData(9 downto 0) <= VideoInputCh2;
    end if;
    
  end if;
 end process;

 

  • Hi Seung Wan Jang,

    Does the FPGA wait for some time after it enables the TLK1501 before sending the IDLE patterns?  The TLK1501's PLL can take up to 0.4 ms to start up, so if you try to send data too soon it may have errors.

    When the link fails, what sort of behavior do you observe?  Are RX_DV and RX_ER both constantly asserted high at the far end of the link (at the DAC)?

    Is data being sent only in one direction (i.e., from the ADC side to the DAC side), or is the link bi-directional?  If the link is not bi-directional, have you tried setting the LCKREFN signal low on the ADC-side TLK1501 to put it in a transmit-only mode?

    Do both sides of the link operate off of independent clock signals, or are they synchronized somehow?  If the clocks are independent, what is their frequency accuracy?  For the TLK1501, the reference clocks used for both ends of the link should be accurate to within 100 ppm.

    Regards,
    Max Robertson
    Analog Applications Engineer
    Texas Instruments