请教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延时。我这个问题中不需要调节差分时钟的延时吗?具体如何动态调节延时接收数据请大神多多指点。 600mbps建议用iddr来搞,后面每5个周期打一拍出去(10位),用熟了再往iserdes迁移。idelay配合bufio用的,bufio延时需要查表,配合idelay使采样时钟对齐到数据眼中心。 本帖最后由 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就可以了。
不知道从原理上有没有问题? wye11083 发表于 2020-6-24 22:07
600mbps建议用iddr来搞,后面每5个周期打一拍出去(10位),用熟了再往iserdes迁移。idelay配合bufio用的, ...
为何建议用iddr呢,我准备用iserdes,KU上是iserdes3,输出位宽只有8位和4位两种,参考官网参考设计不难输出10位,关键是怎么动态的调节延时,通过ctrl lane检测出同步字,得到ctr lane这一路的延时,然后其他四路差分数据的延时怎么控制呢?这点有点懵。 zxq6 发表于 2020-6-24 22:43
LVDS有如此复杂呀?
我准备搞一个自定义的lvds,发送端是zynq,接收端是ep4ce6,准备一路时钟,一路数据 ...
你这速度随便。z7用oddr可以到1200mbps,用oserdes可以到1600mbps,随便写也就400mbps出头。 lpandadp 发表于 2020-6-24 23:26
为何建议用iddr呢,我准备用iserdes,KU上是iserdes3,输出位宽只有8位和4位两种,参考官网参考设计不难 ...
你频率不高,iddr更容易控制,时序是确定的。iserdes位对齐是不确定的。
还有一点,iddr可以无缝迁移,比如国产安路。iserdes是xilinx专用。除非你不做任何全国产化项目。 wye11083 发表于 2020-6-24 23:40
你频率不高,iddr更容易控制,时序是确定的。iserdes位对齐是不确定的。
还有一点,iddr可以无缝迁移, ...
可以指点指点怎么用iserdes,动态调节idelay的延时吗{:lol:} ,用iddr的话,调延时跟用iserdes原理一样吗? lpandadp 发表于 2020-6-24 23:51
可以指点指点怎么用iserdes,动态调节idelay的延时吗 ,用iddr的话,调延时跟用iserdes原理一样吗 ...
自己看ug wye11083 发表于 2020-6-25 01:04
自己看ug
用IDDR的话,那进入IDDR前经过IDELAY3原语的CLK是用LVDS差分转成单端的时钟吗? 手册上说在用ISERDESE3解串时,这个IDELAY3的CLK用的是ISERDESE3 CLKDIV时钟
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左右,时序就不一样了。 wye11083 发表于 2020-6-28 21:14
idelay接ibufds后面,时钟要么bufio要么直接bufg怼,但是注意bufg有额外的~2ns延迟。idelay的固有0.6ns ...
我后面要接收的sensor 信号是10对 SUBLVDS 信号 应该没有那么复杂吧 ackyee 发表于 2020-6-28 22:37
我后面要接收的sensor 信号是10对 SUBLVDS 信号 应该没有那么复杂吧
用generate生成10套ibufds+idelay+iddr或iserdes。 很好奇楼主的行业......{:biggrin:},很感兴趣..... wye11083 发表于 2020-6-28 23:55
用generate生成10套ibufds+idelay+iddr或iserdes。
如果LVDS数据是SDR单边沿的,是否也可以用ibufds+idelay+iddr?每次取IDDR的一个沿的输出,每10拍输出一个10bit数据,LVDS单边沿速率最大为600M,用IDDR能接收这么高的速率吗? 最近准备用安路最新得PH1A100芯片,内置8个Serders。用来直接接SFP模块,要实现1000BASE-X,能够实现么? lpandadp 发表于 2020-7-6 14:30
如果LVDS数据是SDR单边沿的,是否也可以用ibufds+idelay+iddr?每次取IDDR的一个沿的输出,每10拍输出 ...
最好用ddr输入。否则时序很难。 wye11083 发表于 2020-7-6 19:02
最好用ddr输入。否则时序很难。
嗯嗯,LVDS SDR单边沿速率最大为600M,用IDDR KU系列FPGA可以满足不?手册上没找到IDDR的频率参数 lpandadp 发表于 2020-7-6 19:36
嗯嗯,LVDS SDR单边沿速率最大为600M,用IDDR KU系列FPGA可以满足不?手册上没找到IDDR的频率参数 ...
随便找个FPGA都能实现800Mbps起步。你找ILOGIC wye11083 发表于 2020-7-6 20:16
随便找个FPGA都能实现800Mbps起步。你找ILOGIC
LVDS SDR单边沿速率600M时,用IDDR每10个周期拍出一个10bit数据,10bit数据同步于一个600M的时钟,FPGA能跑这么高的时钟吗,这里该怎么处理呢? lpandadp 发表于 2020-7-13 19:52
LVDS SDR单边沿速率600M时,用IDDR每10个周期拍出一个10bit数据,10bit数据同步于一个600M的时钟,FPGA能 ...
你300mhz都能跑起来。 wye11083 发表于 2020-7-13 22:48
你300mhz都能跑起来。
将输入的600M时钟,2分频为300M,IDDR双沿采样吗,想到这样,不敢确认 lpandadp 发表于 2020-7-14 09:05
将输入的600M时钟,2分频为300M,IDDR双沿采样吗,想到这样,不敢确认
根据你的需求,仔细看时序图,在你脑子里好好想想,多画波形图。 wye11083 发表于 2020-7-14 11:49
根据你的需求,仔细看时序图,在你脑子里好好想想,多画波形图。
再请教一下{:lol:} ,如果要保证系统一启动后,IDDR采样时钟采到数据的稳定区,不是采到数据的跳变区,IDELAY的延时选择为固定模式,不进行动态调节IDELAY的延时,那么这个IDELAY的延时该怎么估算呢? lpandadp 发表于 2020-7-17 18:55
再请教一下 ,如果要保证系统一启动后,IDDR采样时钟采到数据的稳定区,不是采到数据的跳变区,ID ...
你没听话。我说过了,你把手册好好看看。 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
); 请问,您xapp 1315 里面时钟是怎么设计的呢
页:
[1]