lpandadp 发表于 2020-6-24 21:26:21

请教LVDS sensor图像数据FPGA解析问题

在Xilinx KU FPGA LVDS接口解析如下sensor图像数据,LVDS速率最大600M/channel,4对差分数据,1对差分时钟,1对差分控制信号(包含同步字信息),LVDS串化因子为10,


差分控制信号ctrl lane:10'h82: 同步字,128pixel周期出现;   10'h381: pixel有效标识。

LVDS接收这块还没啥经验,请教在Kintex U FPGA中怎么设计LVDS接收框架,主要是怎么检测差分控制信号ctrl lane的同步字调节各个通道的IDELAY3的延时。

看了Xilinx Xapp1315的参考设计,串化因子为7,主要调节了差分时钟IDELAY3的延时,给出一个延时值给到5个数据通道的IDELAY3延时。我这个问题中不需要调节差分时钟的延时吗?具体如何动态调节延时接收数据请大神多多指点。

wye11083 发表于 2020-6-24 22:07:21

600mbps建议用iddr来搞,后面每5个周期打一拍出去(10位),用熟了再往iserdes迁移。idelay配合bufio用的,bufio延时需要查表,配合idelay使采样时钟对齐到数据眼中心。

zxq6 发表于 2020-6-24 22:43:44

本帖最后由 zxq6 于 2020-6-24 22:45 编辑

wye11083 发表于 2020-6-24 22:07
600mbps建议用iddr来搞,后面每5个周期打一拍出去(10位),用熟了再往iserdes迁移。idelay配合bufio用的, ...

LVDS有如此复杂呀?
我准备搞一个自定义的lvds,发送端是zynq,接收端是ep4ce6,准备一路时钟,一路数据,一共2对,4根线(不含地线)传输速度能够到200-300M bps就可以了。
不知道从原理上有没有问题?

lpandadp 发表于 2020-6-24 23:26:20

wye11083 发表于 2020-6-24 22:07
600mbps建议用iddr来搞,后面每5个周期打一拍出去(10位),用熟了再往iserdes迁移。idelay配合bufio用的, ...

为何建议用iddr呢,我准备用iserdes,KU上是iserdes3,输出位宽只有8位和4位两种,参考官网参考设计不难输出10位,关键是怎么动态的调节延时,通过ctrl lane检测出同步字,得到ctr lane这一路的延时,然后其他四路差分数据的延时怎么控制呢?这点有点懵。

wye11083 发表于 2020-6-24 23:33:50

zxq6 发表于 2020-6-24 22:43
LVDS有如此复杂呀?
我准备搞一个自定义的lvds,发送端是zynq,接收端是ep4ce6,准备一路时钟,一路数据 ...

你这速度随便。z7用oddr可以到1200mbps,用oserdes可以到1600mbps,随便写也就400mbps出头。

wye11083 发表于 2020-6-24 23:40:27

lpandadp 发表于 2020-6-24 23:26
为何建议用iddr呢,我准备用iserdes,KU上是iserdes3,输出位宽只有8位和4位两种,参考官网参考设计不难 ...

你频率不高,iddr更容易控制,时序是确定的。iserdes位对齐是不确定的。

还有一点,iddr可以无缝迁移,比如国产安路。iserdes是xilinx专用。除非你不做任何全国产化项目。

lpandadp 发表于 2020-6-24 23:51:19

wye11083 发表于 2020-6-24 23:40
你频率不高,iddr更容易控制,时序是确定的。iserdes位对齐是不确定的。

还有一点,iddr可以无缝迁移, ...

可以指点指点怎么用iserdes,动态调节idelay的延时吗{:lol:} ,用iddr的话,调延时跟用iserdes原理一样吗?

wye11083 发表于 2020-6-25 01:04:44

lpandadp 发表于 2020-6-24 23:51
可以指点指点怎么用iserdes,动态调节idelay的延时吗 ,用iddr的话,调延时跟用iserdes原理一样吗 ...

自己看ug

lpandadp 发表于 2020-6-28 20:47:39

wye11083 发表于 2020-6-25 01:04
自己看ug

用IDDR的话,那进入IDDR前经过IDELAY3原语的CLK是用LVDS差分转成单端的时钟吗? 手册上说在用ISERDESE3解串时,这个IDELAY3的CLK用的是ISERDESE3 CLKDIV时钟

wye11083 发表于 2020-6-28 21:14:25

lpandadp 发表于 2020-6-28 20:47
用IDDR的话,那进入IDDR前经过IDELAY3原语的CLK是用LVDS差分转成单端的时钟吗? 手册上说在用ISERDESE3解 ...

idelay接ibufds后面,时钟要么bufio要么直接bufg怼,但是注意bufg有额外的~2ns延迟。idelay的固有0.6ns延迟差不多匹配bufio的延迟(估计也在0.6ns左右)。bufr延迟要大一些,这样来增大setup。国产安路的bufio延迟则在~2ns左右,时序就不一样了。

ackyee 发表于 2020-6-28 22:37:03

wye11083 发表于 2020-6-28 21:14
idelay接ibufds后面,时钟要么bufio要么直接bufg怼,但是注意bufg有额外的~2ns延迟。idelay的固有0.6ns ...

我后面要接收的sensor 信号是10对 SUBLVDS 信号 应该没有那么复杂吧

wye11083 发表于 2020-6-28 23:55:53

ackyee 发表于 2020-6-28 22:37
我后面要接收的sensor 信号是10对 SUBLVDS 信号 应该没有那么复杂吧

用generate生成10套ibufds+idelay+iddr或iserdes。

isakura 发表于 2020-6-28 23:59:55

很好奇楼主的行业......{:biggrin:},很感兴趣.....

lpandadp 发表于 2020-7-6 14:30:59

wye11083 发表于 2020-6-28 23:55
用generate生成10套ibufds+idelay+iddr或iserdes。

如果LVDS数据是SDR单边沿的,是否也可以用ibufds+idelay+iddr?每次取IDDR的一个沿的输出,每10拍输出一个10bit数据,LVDS单边沿速率最大为600M,用IDDR能接收这么高的速率吗?

jianbo513 发表于 2020-7-6 17:03:09

最近准备用安路最新得PH1A100芯片,内置8个Serders。用来直接接SFP模块,要实现1000BASE-X,能够实现么?

wye11083 发表于 2020-7-6 19:02:16

lpandadp 发表于 2020-7-6 14:30
如果LVDS数据是SDR单边沿的,是否也可以用ibufds+idelay+iddr?每次取IDDR的一个沿的输出,每10拍输出 ...

最好用ddr输入。否则时序很难。

lpandadp 发表于 2020-7-6 19:36:37

wye11083 发表于 2020-7-6 19:02
最好用ddr输入。否则时序很难。

嗯嗯,LVDS SDR单边沿速率最大为600M,用IDDR KU系列FPGA可以满足不?手册上没找到IDDR的频率参数

wye11083 发表于 2020-7-6 20:16:08

lpandadp 发表于 2020-7-6 19:36
嗯嗯,LVDS SDR单边沿速率最大为600M,用IDDR KU系列FPGA可以满足不?手册上没找到IDDR的频率参数 ...

随便找个FPGA都能实现800Mbps起步。你找ILOGIC

lpandadp 发表于 2020-7-13 19:52:48

wye11083 发表于 2020-7-6 20:16
随便找个FPGA都能实现800Mbps起步。你找ILOGIC

LVDS SDR单边沿速率600M时,用IDDR每10个周期拍出一个10bit数据,10bit数据同步于一个600M的时钟,FPGA能跑这么高的时钟吗,这里该怎么处理呢?

wye11083 发表于 2020-7-13 22:48:51

lpandadp 发表于 2020-7-13 19:52
LVDS SDR单边沿速率600M时,用IDDR每10个周期拍出一个10bit数据,10bit数据同步于一个600M的时钟,FPGA能 ...

你300mhz都能跑起来。

lpandadp 发表于 2020-7-14 09:05:42

wye11083 发表于 2020-7-13 22:48
你300mhz都能跑起来。

将输入的600M时钟,2分频为300M,IDDR双沿采样吗,想到这样,不敢确认

wye11083 发表于 2020-7-14 11:49:01

lpandadp 发表于 2020-7-14 09:05
将输入的600M时钟,2分频为300M,IDDR双沿采样吗,想到这样,不敢确认

根据你的需求,仔细看时序图,在你脑子里好好想想,多画波形图。

lpandadp 发表于 2020-7-17 18:55:05

wye11083 发表于 2020-7-14 11:49
根据你的需求,仔细看时序图,在你脑子里好好想想,多画波形图。

再请教一下{:lol:} ,如果要保证系统一启动后,IDDR采样时钟采到数据的稳定区,不是采到数据的跳变区,IDELAY的延时选择为固定模式,不进行动态调节IDELAY的延时,那么这个IDELAY的延时该怎么估算呢?

wye11083 发表于 2020-7-17 19:02:03

lpandadp 发表于 2020-7-17 18:55
再请教一下 ,如果要保证系统一启动后,IDDR采样时钟采到数据的稳定区,不是采到数据的跳变区,ID ...

你没听话。我说过了,你把手册好好看看。

ocam-vesta 发表于 2020-7-17 20:33:48

lpandadp 发表于 2020-7-17 18:55
再请教一下 ,如果要保证系统一启动后,IDDR采样时钟采到数据的稳定区,不是采到数据的跳变区,ID ...

xilinx的器件一般要动态调整采样相位,它每个版本编译出来的延迟是不定的(我曾经遇到这个问题,xinlin FAE也未解决),之后就再也不用固定延迟了,IDELAYE用
法很简单,给你个例子,输入数据是datain_p,输入时钟inclock_p,最终输出数据为dataout_h,dataout_l;你调整value_in这个参数,然后去检测你的同步头是否能采集稳定
--------------------------------------------------------------------------------------------
uIDELAYE : IDELAYE3
    generic map (
      CASCADE                                                               => "NONE"    ,      -- Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE)
      DELAY_FORMAT                                                            => "COUNT"   ,      -- Units of the DELAY_VALUE (COUNT, TIME)
      DELAY_SRC                                                               => "IDATAIN" ,      -- Delay input (IDATAIN, DATAIN)
      DELAY_TYPE                                                            => "VAR_LOAD" ,      -- FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE
      DELAY_VALUE                                                             => 0          ,      -- Input delay tap setting (0-31)
      IS_CLK_INVERTED                                                         => '0'      ,   -- Optional inversion for CLK
      IS_RST_INVERTED                                                         => '0'      ,   -- Optional inversion for RST
      REFCLK_FREQUENCY                                                      => 250.0      ,   -- IDELAYCTRL clock input frequency in MHz (200.0-2667.0)
      SIM_DEVICE                                                            => "ULTRASCALE_PLUS",-- Set the device version (ULTRASCALE, ULTRASCALE_PLUS, ULTRASCALE_PLUS_ES1,ULTRASCALE_PLUS_ES2)
      UPDATE_MODE                                                             => "ASYNC"      -- Determines when updates to the delay will take effect (ASYNC, MANUAL,SYNC)
      )                                                                     
    port map (
      CASC_OUT                                                                => open               , -- 1-bit output: Cascade delay output to ODELAY input cascade                                                      
      CNTVALUEOUT                                                             => open               , -- 5-bit output: Counter value output
      DATAOUT                                                               => dataout            , -- 1-bit output: Delayed data output
      CASC_IN                                                               => '0'                  , -- 1-bit input: Dynamic clock inversion input
      CASC_RETURN                                                             => '0'                  , -- 1-bit input: Cascade delay returning from slave ODELAY DATAOUT
      CE                                                                      => '0'                  , -- 1-bit input: Active high enable increment/decrement input
      CLK                                                                     => inclock_p            , -- 1-bit input: Clock input
      CNTVALUEIN                                                            => value_in(8 downto 0) , -- 5-bit input: Counter value input
      DATAIN                                                                  => '0'                  , -- 1-bit input: Internal delay data input
      EN_VTC                                                                  => '0'                  , -- 1-bit input: Keep delay constant over VT
      IDATAIN                                                               => datain_p               , -- 1-bit input: Data input from the I/O
      INC                                                                     => '0'                  , -- 1-bit input: Increment / Decrement tap delay input
      LOAD                                                                  => '1',--load_in            , -- 1-bit input: Load IDELAY_VALUE input
      RST                                                                     => '0'               -- 1-bit input: Active-high reset tap-delay input
      );
--------------------------------------------------------------------------------------------
uIDDR : IDDRE1
    generic map (
      DDR_CLK_EDGE   => "OPPOSITE_EDGE", -- IDDRE1 mode (OPPOSITE_EDGE, SAME_EDGE, SAME_EDGE_PIPELINED)
      IS_CB_INVERTED => '1',             -- Optional inversion for CB
      IS_C_INVERTED=> '0')             -- Optional inversion for C'
    port map (
      Q1                                                                      => dataout_h, -- 1-bit output: Registered parallel output 1
      Q2                                                                      => dataout_l, -- 1-bit output: Registered parallel output 2
      C                                                                     => inclock_p, -- 1-bit input: High-speed clock
      CB                                                                      => inclock_p, -- 1-bit input: Inversion of High-speed clock C
      D                                                                     => dataout    , -- 1-bit input: Serial Data Input
      R                                                                     => '0'         -- 1-bit input: Active High Async Reset
      );

yimengxiaoyao 发表于 2022-4-21 21:53:52

请问,您xapp 1315 里面时钟是怎么设计的呢
页: [1]
查看完整版本: 请教LVDS sensor图像数据FPGA解析问题