11 IOBs - alex-aleyan/xilinx GitHub Wiki

Sources:

Typical scenarios:

  • Serial with Diff paris
    • Driving data ( o_ser_data -> OBUFDS(IOSTANDARD=LVDS_25) => O_SER_P|O_SER_N ):
      attribute IOB
      attribute IOB of o_ser : signal is "TRUE":
      
      obuf_out: OBUFDS
        generic map (IOSTANDARD => "LVDS_25")
        port map ( O  => o_ser_p,
                   OB => o_ser_n,
                   I  => o_ser );
      
    • Driving clock:
      
      oddr_swap_polarity <= '0' when gen_swap_polarity = false else 1'1;
      oddr_en <= fsm_oddr_en;
      
      oddr_clk_out: OBUFDS
        generic map (IOSTANDARD => "LVDS_25")
        port map ( c_ => i_clk_core
                   d1 => oddr_swap_polarity,
                   d2 => oddr_en,
                   ce => '1',
                   r => '0',
                   s => '0',
                   q  => o_clk   );
      
      obuf_clk_out: OBUFDS
        generic map (IOSTANDARD => "LVDS_25")
        port map ( I  => o_clk  ,
                   O  => o_clk_p,
                   OB => o_clk_n);
      
    • Receiving clock:
      ibufds_clk_in: IBUFDS
        generic map ( DIFF_TERM     => TRUE,
                      IBUF_LOW_PWR  => TRUE,
                      IOSTANDARD    => "LVDS_25")
        port map ( I  => i_clk_p,
                   IB => i_clk_n,
                   O  => i_clk_bufds);
      
      ibufr_clk_in: BUFR
        port map ( I   => i_clk_bufds,
                   O   => i_clk,
                   CE  => '1'  ,
                   CLR => '0' );
      
    • Receiving Data:
      attribute IOB
      attribute IOB of o_ser : signal is "TRUE":
      
      ibuf_in: IBUFDS
        generic map ( DIFF_TERM    => TRUE,
                      IBUF_LOW_PWR => TRUE,
                      IOSTANDARD   => "LVDS_25")
        port map ( I  => i_ser_data_p,
                   IB => i_ser_data_n,
                   O  => i_ser_data  );