
LVDS接口处理
文章平均质量分 87
LVDS接口处理
尤老师FPGA
对我们的培训感兴趣可以联系我们
V;1 5 9 2 1 9 9 9 2 3 2
T B 店: 威 三 科 教
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LVDS系列25:Xilinx 7系 OSERDESE2原语(一)
1bit,输入,高有效复位,可异步复位,复位时所有CLK和CLK_DIV驱动的触发器将被异步置为低电平,当与CLKDIV同步解除复位时,内部逻辑将重新定位到CLK的第一个上升沿,所以解除复位的时刻,将会影响原语内部的并转串的逻辑,所以当同时使用多个OSERDESE2原语时,每个OSERDESE2原语都应该使用同一个复位信号去驱动,每个OSERDESE2原语解除复位的时刻相同,确保多个原语状态同步;1bit,输出,OSERDESE2原语的三态控制的输出,使用时将该端口连接到IOB的三态输入或控制端口;原创 2025-08-20 15:54:40 · 409 阅读 · 0 评论 -
LVDS系列24:Xilinx Ultrascale系ISERDESE3原语(二)
此时得到的解串数据是8’h 33和8’h c3,其中8’h 33是8’b00110011,8’h c3是8’b11000011,可以看到Q6、Q4、Q2、Q0和Q7、Q5、Q3、Q1的值分别相等,这是由于CLK和CLK_B相同,两者同时采一个值,所以解串得到的数据是4’b0101和4’b1001。下图为使用FIFO时,输出数据都一致,数据输出时间,可以看到是在FIFO_RD_CLK上升沿后一小段时间输出,FIFO_RD_CLK这里使用一个与CLK_DIV不同相的时钟,原创 2025-08-07 16:52:56 · 271 阅读 · 0 评论 -
LVDS系列23:Xilinx Ultrascale系ISERDESE3原语(一)
当FIFO_RD_CLK与CLKDIV对齐时,也就是Latency With Late FIFO Empty情况时,延迟比前一种情况长一个FIFO_RD_CLK时钟周期,也就是在FIFO_RD_CLK上升沿后一点,CLKDIV才成功驱动完FIFO_EMPTY的变化,于是读侧要得到FIFO_EMPTY为0的情况则要等到下一个FIFO_RD_CLK的上升沿采集时;IS_CLK_INVERTED、IS_CLK_B_INVERTED设置CLK和CLK_B是否反转,一般情况下设置0;原创 2025-08-01 13:40:52 · 535 阅读 · 0 评论 -
LVDS系列21:Xilinx 7系ISERDESE2原语(二)
BITSLIP模块仅在NETWORKING网络模式下可用,执行BITSLIP操作时,bitslip端口必须在一个CLKDIV周期内保持高电平,保持1个CLKDIV高电平则是成功执行一次bitslip操作,但是不能连续拉高两个周期高电平,两次移位操作之前至少需要CLKDIV保持一个周期的低电平;其中网络模式下SDR有2~8的转换位宽选择,DDR模式有4/6/8/10/14的位宽选择,但其中大于8的位宽,需要一对ISERDESE2主从配置后级联实现;原创 2025-07-17 14:24:12 · 543 阅读 · 0 评论 -
LVDS系列20:Xilinx 7系ISERDESE2原语(一)
1bit,组合输出,该端口为组件未经过寄存器的输出,可以直接来自输入D端口或DDLY端口,从组件的框图可以看出O端口的产生结构,来自一个由OFB、DDLY、D端口输入的IOB多路复用器的输出,没有经过ISERDESE2的组件;可以看到,OSERDESE2输出端位序与ISERDESE2输入端的位序相反,OSERDESE2输入一个D1~D8,对应ABCDEFGH的数据,输出时,按D1到D8,也就是A到H的并行数据种低位先发的顺序发送数据,1bit,高电平有效时执行位滑动操作,与CLKDIV同步;原创 2025-07-10 16:42:51 · 982 阅读 · 0 评论 -
LVDS系列19:Xilinx Ultrascale系I/ODELAYE3级联(二)
4级延时在3级基础上,添加一个ODELAYE3作为第4级,其中CASCADE设置为,第1级MASTER,第2级SLAVE_MIDDLE,第3级SLAVE_ MIDDLE,第3级SLAVE_END;3级延时在2级基础上,添加一个IDELAYE3作为第3级,其中CASCADE设置为,第1级MASTER,第2级SLAVE_MIDDLE,第3级SLAVE_END;代码中第1级为IDELAYE3,CASCADE设置为MATER,第2级为ODELAYE3,CASCADE设置为SLAVE_END;原创 2025-07-01 09:52:04 · 582 阅读 · 0 评论 -
LVDS系列18:Xilinx Ultrascale系I/ODELAYE3级联(一)
这里虽然画了四级级联,但其实理论上还可以更多级,但是一般常用的级联级数都较少,因为级联操作是要实际使用到输入输出延迟原语的,而每个IO管脚就一对输入输出原语,想要级联更多级,一是实际的物理电路中该电路邻近是否有空闲可用于布线使用的输入输出延迟原语,二是级联过多会导致信号抖动误差等累计起来影响信号完整性,性能可能会严重恶化。其中输入延迟级联,输入延迟线连接到输出延迟线,最后输出延迟线回到输入延迟内由输入延迟输出,这个使用方法也符合之前IDELAYE3和ODELAYE3文档中对级联结构的描述;原创 2025-06-25 14:08:42 · 725 阅读 · 0 评论 -
LVDS系列17:Xilinx Ultrascale系输出延迟ODELAYE3
由于输入延迟执行BISC时,需要消除内部偏差并补偿第一个捕获触发器的输入路径的时钟和数据插入延迟之间的内部偏差,也就是IDELAYE3的输入数据和内部捕获时钟是异步的,两者的路径有偏差,需要align_delay去补偿,这样采样时才能更稳定,使用TIME模式时,使用IDELAYCTRL,REFCLK_FREQUENCY时钟频率必须与IDELAYCTRL的时钟频率相同,在修改延迟线时必须先拉低EN_VTC管脚,在校准逻辑未工作的情况下进行延迟线的修改,修改完毕后EN_VTC置高;原创 2025-06-18 14:08:59 · 499 阅读 · 0 评论 -
LVDS系列16:Xilinx 7系输出延迟ODELAYE2
动态流水线加载延迟模式(ODELAY_TYPE = VAR_LOAD_PIPE),VAR_LOAD模式添加流水线的版本,除了可以使用INC&CE修改延迟,拉高LDPIPEEN先将CNTVALUEIN线上的值存入原语内部寄存器,后续将LD拉高,才会将流水线寄存器中的值作为新抽头值使用;7系列提供了两种I/O bank,分别是高性能HP bank,高范围HR bank,HP bank主要用于高速存储器或是芯片间高速互联,bank电压最高1.8V,HR bank主要用于支持更大范围的IO标准,电压最高3.3V。原创 2025-06-11 14:57:48 · 802 阅读 · 0 评论 -
LVDS系列15:Xilinx Ultrascale系可编程输入延迟(五)
前面曾讲述过,TIME模式下,在BISC过程中将使用输入延迟线的多个抽头来消除接收器的第一个数据捕获器处的数据与时钟之间的插入延迟差Align_Delay,当数据经过IDELAYE3,输出数据线的延时总量是Align_Delay和DELAY_VALUE的总和,当然这里应该也要加上仿真中我们看到的一个0.144ns(不一定是该值)的固有的延时。如果需要的延时值不是非常精确,我们可以取官方提供的Align_Dealy抽头值的中间值54,作为要进行计算的Align_Dealy的抽头值;原创 2025-06-03 09:13:19 · 831 阅读 · 0 评论 -
LVDS系列14:Xilinx Ultrascale系可编程输入延迟(四)
IDELAYE3在仿真时,只有在EN_VTC拉低,也就是原语补偿功能关闭时,输出的CNTVALUEOUT值才是一个正常值,当EN_VTC拉高,补偿功能开启时,CNTVALUEOUT输出为红色的不定态的值,出现这种情况的原因大概是因为原语的仿真没有实现补偿功能,所以仿真时补偿功能开启就无法给出一个确定值,所以显示不定态;可以看到,0ps时抽头为0,延时0.144ns,1100ps时抽头为275,延时1.244ns;8 等待1个时钟周期,将LOAD置1保持1个周期, 更新值稳定1个周期后再拉高LOAD;原创 2025-05-29 15:02:21 · 814 阅读 · 0 评论 -
LVDS系列13:Xilinx Ultrascale系可编程输入延迟(三)
可以看到同步模式下,在抽头0变化到抽头511,变化前的数据沿延时0.2ns,变化后的第一个数据沿延时0.2ns,变化后的第二个数据沿延时2.755ns,延时在inc和ce属于有效后,再等到datain信号一个跳变沿才生效,所以变化后第二个沿延时生效;其中抽头为0时,延时0.2ns,抽头为100时,延时0.7ns,抽头为511时,延时2.755ns,这里仿真中单个抽头延时为5ps,DELAY_TYPE设置为FIXED,该模式下DELAY_VALUE参数设置的值为抽头值,范围0~511,且配置后不能更改;原创 2025-05-21 15:05:56 · 686 阅读 · 0 评论 -
LVDS系列12:Xilinx Ultrascale系可编程输入延迟(二)
使用VARIABLE或VAR_LOAD模式时,需主动操作EN_VTC管脚,也就是要修改抽头值时,将EN_VTC管脚置0,停止校准操作,等待写入修改抽头值完毕后,再将EN_VTC管脚置1,也就是组件正常工作时要将EN_VTC管脚置1,保证工作时EN_VTC管脚置1能校准延迟;12ps,至于使用时延迟时间具体为其中哪个值,这个没法获取,所以该模式下不要纠结延时多少,延时多长时间不重要,延迟线的抽头数量才重要,所以COUNT模式下延时的计量靠抽头数量而不是延时时间;此模式适用于始终定期切换的时钟或数据。原创 2025-05-14 14:05:41 · 1060 阅读 · 0 评论 -
LVDS系列11:Xilinx Ultrascale系可编程输入延迟(一)
按照IDELAYCTRL的参考时钟频率可以准确计算获取到,如200M参考时钟抽头分辨率为78ps,Ultrascale系列相对于7系列架构大改,体现便是U/U+系列的抽头增加到512个,同时每个抽头的分辨率就无法像7系列那样能得到一个准确的值,是一个波动的范围值,抽头分辨率随着工艺温度电压的变化而变化。EN_VTC:电压温度补偿开启的使用信号,COUNT模式下不能使用,必须保持为0,TIME模式下需要使用,在延迟工作时要启用温度电压补偿,在修改抽头值时需要关闭温度电压补偿,修改完后启用;原创 2025-05-09 09:46:36 · 1322 阅读 · 0 评论 -
LVDS系列10:Xilinx 7系可编程输入延迟(三)
效果如上图所示,ldpipeen端口拉高了几次去寄存,最后图中三次ld拉高,实际加载到线上的抽头值为3、7、11,都是在拉高ld前的最后一次ldpipeen拉高寄存的值,说明ldpipeen使能后加载到寄存器里的值会被新值覆盖,最后ld加载时以最新的值为准。从上图中可以看到,VAR_LOAD模式下,inc=1/ce=1和ld同时使能时,ld控制的cntvaluein端口值成功写入,inc/ce的递增操作未生效,说明在该模式下ld控制的优先级较高,但是在使用改模似时,尽量避免出现控制逻辑冲突的情况;原创 2025-04-28 11:45:26 · 764 阅读 · 0 评论 -
LVDS系列9:Xilinx 7系可编程输入延迟(二)
可以看到上图中,此时IDELAY_VALUE设置为0,此时cntvalueout为0,表示此时原语正在工作的抽头值为0,idatain和dout的两个上升沿间隔了0.6ns,也就是之前所讲的200M的延时基准;上图为将IDELAY_VALUE参数设置为30(0x1e),此时cntvalueout为0x1e,可以看到此时的idatain和dout的延时为2.94ns=0.6ns+30*78ps,与理论的延时时间相符;REFCLK如果出现异常如保持一个周期的1或0,RDY就会拉低,此时就需要重新复位该原语;原创 2025-04-24 15:42:27 · 1086 阅读 · 0 评论 -
LVDS系列8:Xilinx 7系可编程输入延迟(一)
INC:抽头延迟的增量减量,搭配CE使用,只有当CE为高时,INC才有效,当CE为低时INC值不起作用,其中INC=1时抽头值递增,INC=0时抽头值递减,且INC和CE都与时钟C同步,且当CE保持高,每个C的时钟周期,根据INC的值设置,抽头值会在下一个时钟C的上升沿开始进行抽头值的递增递减操作;IDELAYE2原语的可编程延迟抽头会执行环绕操作,原语的延迟抽头值为0~31共32个数,环绕是指当抽头值当前到达边界,如0或31,在0时如果递减,抽头值将变为31,在31时如果递增,抽头值将变为0;原创 2025-04-16 10:05:44 · 996 阅读 · 0 评论 -
LVDS系列7:Xilinx Ultrascale系ODDRE1原语
Clk上升沿(C_inter上升沿)采集din1和din2,din1在上升沿采集后立刻输出到dout,din2在上升沿采集后寄存到clk下降沿(C_inter下降沿)再输出到dout;Clk下降沿(C_inter上升沿)采集din1和din2,din1在下降沿采集后立刻输出到dout,din2在下降沿采集后寄存到clk上升沿(C_inter下降沿)再输出到dout;SR:异步置位复位端口,高有效,在正常工作前,输出Q将保持4个时钟周期的复位值;参数IS_C_INVERTED:反转输入时钟C,置1有效;原创 2025-04-09 09:19:51 · 843 阅读 · 0 评论 -
LVDS系列4:Xilinx 7系ODDR原语
由于从上面截取的官方文档的时序波形图中可以看出,正确的数据输入应该是din1和din2每个clk时钟周期保持不变,但是如此按时序图提供的输入方式的话这两种模式下,输出格式都是一致的,那么我们就无法看到这两种模式有何区别了,所以这里将输入改为半个周期变换一次,所以我们就可以看出,上图两个模式下,输入信号其实是完全一致的,但是输出的dout信号却大不相同;每个时钟周期内,Q输出两个数据,上升沿输出D1,下降沿输出D2,两个模式下输出数据格式相同;每个时钟周期内,Q输出两个数据,上升沿输出D1,下降沿输出D2;原创 2025-04-01 17:51:49 · 907 阅读 · 0 评论 -
LVDS系列5:Xilinx Ultrascale系IDDRE1原语
C)=C=C_inter,此时C_inter和CB_inter同相,那么原语功能就会失效,此时C_inter和CB_inter的上升沿都在C的上升沿,C的下降沿处没有上升沿的采集时钟,没有双沿的采样时钟就无法触发DDR的双沿采集功能,原语无法工作,且有可能造成亚稳态时序违例等影响系统稳定的错误;sclk,CB_inter=clk_b=sclk,符合C_inter和CB_inter互补情况,此时仿真图中clk和C_inter反相,clk_b和CB_inter同相,原创 2025-03-25 14:37:05 · 754 阅读 · 0 评论 -
LVDS系列4:Xilinx 7系IDDR原语
注意:在使用置位S和复位R端口时,两者不能同时置1有效,否则可能会导致输出状态不确定,还会有出现亚稳态时序风险导致系统异常,且两个端口同时控制还增加了逻辑复杂度,所以推荐在使用时优先R复位端口,将S置位端口置0,减少逻辑复杂度的同时避免出错,置位端口置1有效时,Q1、Q2将强制输出1;Q1在第一个时钟周期上升沿采样的数据D0A在第一个时钟周期的上升沿采样后直接输出,Q2在第一个时钟周期下降沿采样的数据D1A在第二个时钟周期的上升沿采样才输出,第一个时钟周期时Q2保持不关心的无效值;原创 2025-03-18 15:16:12 · 1023 阅读 · 0 评论 -
LVDS系列3:Xilinx的IOBUFDS原语
前述的IBUFDS原语只能接收外部差分信号,此时连接管脚为input管脚,OBUFDS只能向外部输出差分信号,此时连接管脚为output管脚,但差分信号还有可能出现IO类型,也就是inout管脚,一对差分信号,可以输入,也可以输出,此时使用IBUFDS和OBUFDS就不能解决问题,需要使用到IOBUFDS原语;此时T=1,输出缓存启用,可以看到在原语的图中,IO、IOB到O的路径没有受到T端口开关的影响,此时O的输出来自IO、IOB,而IO、IOB的值此时来自于I,所以O值与I值相同。原创 2025-03-11 17:29:38 · 1767 阅读 · 0 评论 -
LVDS系列2:Xilinx的OBUFDS原语
前面一讲说到差分信号用于信号传输输入到FPGA内部处理时,需要使用IBUFDS原语将外部的差分信号变为单端使用,而如果FPGA想要输出差分信号,那么就需要将内部的单端信号转为差分信号输出,这个操作需要使用到OBUFDS原语去实现。参数SLEW:控制输出信号的压摆率(Slew Rate),控制输出信号电压从逻辑0(1)变到逻辑1(0)的速度,影响信号边沿的陡峭程度;在第1个黄线处,data输入0,dout_p输出0,dout_n输出1,输出正确;可以看到,输出的正端与输入相同,输出的负端与输入相反;原创 2025-03-04 17:34:40 · 890 阅读 · 0 评论 -
LVDS系列1:Xilinx的IBUFDS原语
如下图所示,LVDS使用一对相位相反的差分信号传输数据,通过两者电压差来判断逻辑值,在发送端单端转差分,在接收端差分转单端。差分信号用于信号传输,但是在FPGA内部数据处理时,需要将差分信号变为单端使用,所以就需要将外来的差分信号转为单端,可以使用IBUFDS原语实现,将内部的单端信号转为差分信号输出,可以使用OBUFDS原语实现。上图中,左侧的输入管脚I和IB从FPGA焊盘输入的外部信号,其中I为差分信号的正端P端,IB为差分信号的负端P端;原创 2025-02-26 09:57:06 · 1560 阅读 · 0 评论