搜索
bottom↓
回复: 25

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

[复制链接]

出0入0汤圆

发表于 2020-6-24 21:26:21 | 显示全部楼层 |阅读模式
在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延时。我这个问题中不需要调节差分时钟的延时吗?具体如何动态调节延时接收数据请大神多多指点。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入442汤圆

发表于 2020-6-24 22:07:21 来自手机 | 显示全部楼层
600mbps建议用iddr来搞,后面每5个周期打一拍出去(10位),用熟了再往iserdes迁移。idelay配合bufio用的,bufio延时需要查表,配合idelay使采样时钟对齐到数据眼中心。

出0入22汤圆

发表于 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就可以了。
不知道从原理上有没有问题?

出0入0汤圆

 楼主| 发表于 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这一路的延时,然后其他四路差分数据的延时怎么控制呢?这点有点懵。

出0入442汤圆

发表于 2020-6-24 23:33:50 来自手机 | 显示全部楼层
zxq6 发表于 2020-6-24 22:43
LVDS有如此复杂呀?
我准备搞一个自定义的lvds,发送端是zynq,接收端是ep4ce6,准备一路时钟,一路数据 ...

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

出0入442汤圆

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

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

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

出0入0汤圆

 楼主| 发表于 2020-6-24 23:51:19 | 显示全部楼层
wye11083 发表于 2020-6-24 23:40
你频率不高,iddr更容易控制,时序是确定的。iserdes位对齐是不确定的。

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

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

出0入442汤圆

发表于 2020-6-25 01:04:44 来自手机 | 显示全部楼层
lpandadp 发表于 2020-6-24 23:51
可以指点指点怎么用iserdes,动态调节idelay的延时吗 ,用iddr的话,调延时跟用iserdes原理一样吗 ...

自己看ug

出0入0汤圆

 楼主| 发表于 2020-6-28 20:47:39 | 显示全部楼层

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入442汤圆

发表于 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左右,时序就不一样了。

出0入91汤圆

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

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

出0入442汤圆

发表于 2020-6-28 23:55:53 来自手机 | 显示全部楼层
ackyee 发表于 2020-6-28 22:37
我后面要接收的sensor 信号是10对 SUBLVDS 信号 应该没有那么复杂吧

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

出0入14汤圆

发表于 2020-6-28 23:59:55 | 显示全部楼层
很好奇楼主的行业......,很感兴趣.....

出0入0汤圆

 楼主| 发表于 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能接收这么高的速率吗?

出0入0汤圆

发表于 2020-7-6 17:03:09 | 显示全部楼层
最近准备用安路最新得PH1A100芯片,内置8个Serders。用来直接接SFP模块,要实现1000BASE-X,能够实现么?

出0入442汤圆

发表于 2020-7-6 19:02:16 来自手机 | 显示全部楼层
lpandadp 发表于 2020-7-6 14:30
如果LVDS数据是SDR单边沿的,是否也可以用ibufds+idelay+iddr?每次取IDDR的一个沿的输出,每10拍输出 ...

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

出0入0汤圆

 楼主| 发表于 2020-7-6 19:36:37 | 显示全部楼层
wye11083 发表于 2020-7-6 19:02
最好用ddr输入。否则时序很难。

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

出0入442汤圆

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

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

出0入0汤圆

 楼主| 发表于 2020-7-13 19:52:48 | 显示全部楼层
wye11083 发表于 2020-7-6 20:16
随便找个FPGA都能实现800Mbps起步。你找ILOGIC

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

出0入442汤圆

发表于 2020-7-13 22:48:51 来自手机 | 显示全部楼层
lpandadp 发表于 2020-7-13 19:52
LVDS SDR单边沿速率600M时,用IDDR每10个周期拍出一个10bit数据,10bit数据同步于一个600M的时钟,FPGA能 ...

你300mhz都能跑起来。

出0入0汤圆

 楼主| 发表于 2020-7-14 09:05:42 | 显示全部楼层
wye11083 发表于 2020-7-13 22:48
你300mhz都能跑起来。

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

出0入442汤圆

发表于 2020-7-14 11:49:01 来自手机 | 显示全部楼层
lpandadp 发表于 2020-7-14 09:05
将输入的600M时钟,2分频为300M,IDDR双沿采样吗,想到这样,不敢确认

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

出0入0汤圆

 楼主| 发表于 2020-7-17 18:55:05 | 显示全部楼层
wye11083 发表于 2020-7-14 11:49
根据你的需求,仔细看时序图,在你脑子里好好想想,多画波形图。

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

出0入442汤圆

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

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

出0入0汤圆

发表于 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
        );

出0入0汤圆

发表于 2022-4-21 21:53:52 | 显示全部楼层
请问,您xapp 1315 里面时钟是怎么设计的呢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 02:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表