Vivado中使用IP核SelectIO配置LVDS学习笔记

这篇具有很好参考价值的文章主要介绍了Vivado中使用IP核SelectIO配置LVDS学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        Ps.1:起初将PLL、OSERDESE、ISERDESE的复位都接系统复位,但是由于PLL初始化需要一段时间导致data异常,将PLL复位取消后data正常(且系统复位要在PLL初始化完成之后)。

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

         Ps.2:bitslip不使能时,ISERDESE不能解串。Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

         顶层模块代码如下:

module lvds_loop(
    clk_50M,
    rst_n,
    bitslip,
    data_o
    );
    
input clk_50M;
input rst_n;
input bitslip;
output [7:0]data_o;

wire clk_6M;
reg [7:0]data_i;
always@(posedge clk_6M or negedge rst_n)
if(~rst_n)
    data_i<='d0;
else
    data_i<=data_i+'d1;

pll pll_0
   (
    // Clock out ports
    .clk_6M(clk_6M),     // output clk_6M
    // Status and control signals
    .resetn(), // input resetn
   // Clock in ports
    .clk_in1(clk_50M));      // input clk_in1

wire data_p;
wire data_n;
lvds_oserdese 
  lvds_oserdese_0
 (
   .data_out_from_device(data_i), // input [7:0] data_out_from_device
   .data_out_to_pins_p(data_p), // output [0:0] data_out_to_pins_p
   .data_out_to_pins_n(data_n), // output [0:0] data_out_to_pins_n
   .clk_in(clk_50M), // input clk_in                            
   .clk_div_in(clk_6M), // input clk_div_in                        
   .io_reset(~rst_n) // input io_reset
); 

lvds_iserdese 
  lvds_iserdese_0
 (
   .data_in_from_pins_p(data_p), // input [0:0] data_in_from_pins_p
   .data_in_from_pins_n(data_n), // input [0:0] data_in_from_pins_n
   .data_in_to_device(data_o), // output [7:0] data_in_to_device
   .bitslip(bitslip), // input bitslip                           
   .clk_in(clk_50M), // input clk_in                            
   .clk_div_in(clk_6M), // input clk_div_in                        
   .io_reset(~rst_n) // input io_reset
); 
    
endmodule

        

        使用转串器OSERDESE与解串器ISERDESE实现自加数回环(数据不匹配)功能仿真。

        仿真图如下:

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

        仿真代码如下:

`timescale 1ns / 1ps

module lvds_loop_tb();

reg clk_50M;
reg rst_n;
reg bitslip;
wire [7:0]data_o;

lvds_loop lvds_loop_0(
    clk_50M,
    rst_n,
    bitslip,
    data_o
    );

initial clk_50M=1;
always #10 clk_50M=~clk_50M;

initial begin
rst_n=0;
bitslip=0;
#1000;
rst_n=1;
bitslip=1;
#20;
bitslip=0;
#20000;
$stop;
end

endmodule

         之后搭建LVDS数据环回工程功能仿真通过。

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

        Ps.3:差分信号两根线但I/O Planning里只能分配p端引脚,因为p/n是一一对应的关系,分配的p端引脚其n端必须与原理图对应。

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记       

        Ps.4:设计实现时报错([DRC REQP-1712] Input clock driver: Unsupported PLLE2_ADV connectivity. The signal u0_pll/inst/clk_in1 on the u0_pll/inst/plle2_adv_inst/CLKIN1 pin of u0_pll/inst/plle2_adv_inst with COMPENSATION mode ZHOLD must be driven by a clock capable IO.) ,将锁相环IP中输入时钟源设置为Global buffer即可解决。

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记        

        Ps.5:设计实现时报错([DRC BIVC-1] Bank IO standard Vcc: Conflicting Vcc voltages in bank 16. For example, the following two ports in this bank have conflicting VCCOs: rst_n (LVCMOS33, requiring VCCO=3.300) and tx_data_p (LVDS_25, requiring VCCO=2.500)
),FPGA为了同时能和多种不同的电平标准接口芯片通信,Vcco通常以BANK为界,互相之间相互独立,也就是说在一颗FPGA芯片上同时存在几种不同的I/O电压。当然同一个BANK只能存在1种I/O电压。

         Ps.6:板级验证如下图所示:Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

         如上图所示,lvds_rx模块不能正确接收lvds_tx模块在空闲时持续发送的数据0xa6,使得位对齐模块位对齐移位信号rx_data_bit_align持续拉高且位对齐完成信号rx_bit_align_done不能拉高,初步推断rx_data为误码的原因是lvds_tx模块发送的差分信号有误,使用示波器抓取tx_data_p(蓝)、tx_data_n(黄)的波形如下:

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

        如上图所示,差分信号异常。

        差分信号在FPGA内部环回时功能仿真图如下:

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

        如上图所示,差分信号无异常 。

        Ps.7:Vivado中不能debug差分信号?

                ([Chipscope 16-3] Cannot debug net 'tx_data_n'; it is not accessible from the fabric routing.无法调试网络'tx_data_n';无法从结构路由访问它。)

        Ps.8:Vivado一直处于 initialiazing design:重启电脑解决。

        Ps.9:管脚配置中off-chip termination和IN TERM \ OUT TERM分别指什么啊?

                Xilinx FPGA可以选择端接电阻是在FPGA内实现还是外部实现,一般都是采用在FPGA内实现可以省却PCB上布板的不便,对接口速率较低的来说,有时候不端接也看不出问题来,但是速率一高问题就容易出现了,会影响到FPGA接收数据的准确性,就是信号完整性方面的内容。

                Off-Chip Termination:显示每个I/O标准的默认端接。比如FP_VTT_50表示远端并联50Ω的VTT端接类型;HSTL_1表示远端并联40Ω的VTT端口类型。具体的端接类型可以在ug471(7系列)和ug571(UltraScale系列)中查看。

                端接方法:LVDS电平在接收端增加100Ω并联电阻来实现端接。相比于LVPECL,端接方法更简单。端接电阻的作用:实现电流向电压的转化;实现阻抗匹配。

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

        Ps.10:什么是阻抗匹配,有什么作用,具体在那些电路?

        【阻抗匹配】是指信号源或者传输线跟负载之间的一种合适的搭配方式。阻抗匹配分为【低频】和【高频】两种情况讨论。

        【低频】我们先从直流电压源驱动一个负载入手。由于实际的电压源,总是有内阻的,我们可以把一个实际电压源,等效成一个理想的电压源跟一个电阻r串联的模型。假设负载电阻为R,电源电动势为U,内阻为r,那么我们可以计算出流过电阻R的电流为:I=U/(R+r),可以看出,负载电阻R越小,则输出电流越大。负载R上的电压为:Uo=IR=U*[1+(r/R)],可以看出,负载电阻R越大,则输出电压Uo越高。再来计算一下电阻R消耗的功率为:
        P=I*I*R=[U/(R+r)]*[U/(R+r)]*R=U*U*R/(R*R+2*R*r+r*r)=U*U*R/[(R-r)*(R-r)+4*R*r]=U*U/{[(R-r)*(R-r)/R]+4*r}
        

        对于一个给定的信号源,其内阻r是固定的,而负载电阻R则是由我们来选择的。注意式中[(R-r)*(R-r)/R],当R=r时,[(R-r)*(R-r)/R]可取得最小值0,这时负载电阻R上可获得最大输出功率Pmax=U*U/(4*r)。即,当负载电阻跟信号源内阻相等时,负载可获得最大输出功率,这就是我们常说的阻抗匹配之一。对于纯电阻电路,此结论同样适用于低频电路及高频电路。当交流电路中含有容性或感性阻抗时,结论有所改变,就是需要信号源与负载阻抗的的实部相等,虚部互为相反数,这叫做共厄匹配。在低频电路中,我们一般不考虑传输线的匹配问题,只考虑信号源跟负载之间的情况,因为低频信号的波长相对于传输线来说很长,传输线可以看成是“短线”,反射可以不考虑(可以这么理解:因为线短,即使反射回来,跟原信号还是一样的)。

        从以上分析我们可以得出结论:
        如果我们需要输出电流大,则选择小的负载R;
        如果我们需要输出电压大,则选择大的负载R;
        如果我们需要输出功率最大,则选择跟信号源内阻匹配的电阻R。
        有时阻抗不匹配还有另外一层意思,例如一些仪器输出端是在特定的负载条件下设计的,如果负载条件改变了,则可能达不到原来的性能,这时我们也会叫做阻抗失配。

        【高频、微波】在高频电路中,我们还必须考虑反射的问题。当信号的频率很高时,则信号的波长就很短,当波长短得跟传输线长度可以比拟时,反射信号叠加在原信号上将会改变原信号的形状。如果传输线的特征阻抗跟负载阻抗不匹配(相等)时,在负载端就会产生反射。为什么阻抗不匹配时会产生反射以及特征阻抗的求解方法,牵涉到二阶偏微分方程的求解,有兴趣的可参看电磁场与微波方面书籍中的传输线理论。

        传输线的【特征阻抗】(也叫做特性阻抗)是由传输线的结构以及材料决定的,而与传输线的长度,以及信号的幅度、频率等均无关。例如,常用的闭路电视同轴电缆特性阻抗为75欧,而一些射频设备上则常用特征阻抗为50欧的同轴电缆。另外还有一种常见的传输线是特性阻抗为300欧的扁平平行线,这在农村使用的电视天线架上比较常见,用来做八木天线的馈线。因为电视机的射频输入端输入阻抗为75欧,所以300欧的馈线将与其不能匹配。实际中是如何解决这个问题的呢?不知道大家有没有留意到,电视机的附件中,有一个300欧到75欧的阻抗转换器(一个塑料包装的,一端有一个圆形的插头的那个东东,大概有两个大拇指那么大的)?它里面其实就是一个传输线变压器,将300欧的阻抗,变换成75欧的,这样就可以匹配起来了。

        这里需要强调一点的是,特性阻抗跟我们通常理解的电阻不是一个概念,它与传输线的长度无关,也不能通过使用欧姆表来测量。为了不产生反射,负载阻抗跟传输线的特征阻抗应该相等,这就是传输线的阻抗匹配。如果阻抗不匹配会有什么不良后果呢?如果不匹配,则会形成反射,能量传递不过去,降低效率;会在传输线上形成驻波(简单的理解,就是有些地方信号强,有些地方信号弱),导致传输线的有效功率容量降低;功率发射不出去,甚至会损坏发射设备。如果是电路板上的高速信号线与负载阻抗不匹配时,会产生震荡,辐射干扰等。

        当阻抗不匹配时,有哪些办法让它匹配呢?
        第一,可以考虑使用变压器来做阻抗转换,就像上面所说的电视机中的那个例子那样。
        第二,可以考虑使用串联/并联电容或电感的办法,这在调试射频电路时常使用。
        第三,可以考虑使用串联/并联电阻的办法。一些驱动器的阻抗比较低,可以串联一个合适的电阻来跟传输线匹配,例如高速信号线,有时会串联一个几十欧的电阻。而一些接收器的输入阻抗则比较高,可以使用并联电阻的方法,来跟传输线匹配,例如,485总线接收器,常在数据线终端并联120欧的匹配电阻。

        Ps.11:为什么lvds的终端电阻为100欧姆?

        由于lvds接收器的输入阻抗很大和传输线阻抗不匹配,这里的终端电阻时做阻抗匹配消除或减少反射,至于为什么是100欧姆,我想这个是经典值不是绝对值,我们知道lvds传输线是差分线。

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

        一般控制差分阻抗为90-100欧姆,并且有时这个100欧姆电阻时集成在接收端ic芯片里了,个人这样理解的。

        高频信号传输时,信号波长相对传输线较短,信号在传输线终端会形成反射波,干扰原信号,所以需要在传输线末端加终端电阻,使信号到达传输线末端后不反射。

        对于低频信号则不用。在长线信号传输时,一般为了避免信号的反射和回波,也需要在接收端接入终端匹配电阻。

         Ps.12:400M传输速率下将LVDS的串行时钟由lvds_tx输出,输入lvds_rx后,lvds_rx不能接收到tx_data异常,板级验证分析如下:

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

        Ps.13:将PLL输出一端设为800M时显示:WARNING : clk _out1 output frequencies are out of range for the corresponding buffers. Timing violations may be present.

        译为:警告:clk _out1输出频率超出相应缓冲区的范围。可能存在时间违例的情况。

        但在之后板极验证没能发现此处警告产生的影响。

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

        Ps.14:将串并转换器的输入输出时钟调整为100M,800M后板极验证在逻辑分析仪由于用50M的抓取时钟所以只显示奇数数,一个50M时钟传输两个8位数速率达到800Mbps。

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

        Ps.15:Vivado中OSERDESE的差分时钟从外部输入所以限制了单通道的传输速率最高为PLL能生成的最大速率800Mbps,所以要达到1.6Gbps则至少需要两通道?而Quartus中OSERDESE的差分时钟是IP内部产生的,其速率=内部时钟*串化因子,只需要200M内部时钟即可?

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记

         Ps.16:我总结出的关于Vivado中使用SelectIO配置LVDS接口频率关系如下:

        LVDS传输速率=单通道串行数据传输速率(clk_in)*通道数*[1(SDR)或者2(DDR)];

        单通道串行数据传输速率=clk_in*[1(SDR)或者2(DDR)];

        并行数据位数=串化因子*通道数;

        并行数据速率=clk_div。

        Ps.17:通过用示波器抓取数据,时钟差分线信号对比不带端接电阻的信号可以得出XILINX的XC7A35TFGG484-2芯片差分线端接电阻在TX输出端,与Vivado中引脚分配时显示的Off-Chip Termination一致。

Vivado中使用IP核SelectIO配置LVDS学习笔记,学习,笔记文章来源地址https://www.toymoban.com/news/detail-615035.html

到了这里,关于Vivado中使用IP核SelectIO配置LVDS学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VIVADO FFT IP核使用之SCALE_SCH的配置

    分为流水线架构,基-4突发架构,基-2突发架构,基-2LITE突发架构,原文 1 如下: 基-2和基-4是FFT算法的不同实现形式,简而言之,基-2算法按照时间或频率对序列进行抽取,将序列一分为二,基-4是一分为四。流水线算法能实现数据的连续输出。基-2LITE突发架构基于基-2架构,

    2024年02月07日
    浏览(26)
  • Vivado DDS IP配置

            本文记录Vivado中DDS IP核相关配置方法,主要涉及输出信号位宽、频率、频率分辨率、相位等相关内容。       一、点击 IP Catalog,打开DDS IP配置界面 Configuration界面: 1、System Requirement         System Clock:产生DDS的时钟         Number of Channels:默认为1 2、System Par

    2024年02月15日
    浏览(28)
  • Vivado clocking wizard IP核PLL/MCMM配置

           PLL的英文全称是Phase Locked Loop,即锁相环,是一种反馈控制电路。PLL对时钟网络进行系统级的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移和可编程占空比的功能。Xilinx 7系列器件中的时钟资源包含了时钟管理单元CMT,每个CMT由一个MMCM和一个PLL组成。对于一个

    2024年02月12日
    浏览(37)
  • 【Microsemi PolarFire】PCIe学习笔记(一)——PCIe IP核配置

    根据对GUI的输入生成参考时钟,PCIESS系统的参考时钟使用差分HCSL/LVDS。 根据PCIe时钟架构,有以下三种参考时钟可供选择:收发端共享同一个参考时钟、收发端采用独立的参考时钟、仅发送端需要参考时钟(适用于PCIe 2.0以上)。 考虑到系统稳定性,这里使用同源的PCIe插槽提

    2024年02月08日
    浏览(25)
  • 学习笔记-静态路由配置有来无回导致无法访问目标IP

    配置拓扑图: 已经在R1、R2、R3相应端口配置了相应IP。 在R2上配置静态路由: 执行tracert 10.0.3.3,可以到达目标IP 执行tracert 10.0.13.3,可以到达目标IP 执行tracert 10.0.13.1,无法到达R1的gi0/0/0 display ip routing-table查看R2上的路由表: 可以看到有到10.0.13.0/24的路由,即数据可以到达

    2024年02月08日
    浏览(30)
  • vivado 使用IP Integrator源

    使用IP Integrator源 在Vivado Design Suite中,您可以在RTL中添加和管理IP子系统块设计(.bd)项目或设计。使用Vivado IP集成程序,您可以创建IP子系统块设计。IP集成程序使您能够通过实例化和将Vivado IP目录中的多个IP核互连。可以交互创建设计通过Vivado IDE中的IP integrator画布或通过

    2024年01月18日
    浏览(26)
  • 【Vivado】clock ip核的使用

    ​ Clock在时序逻辑的设计中是不可或缺的,同时对于Clock的编写和优化也能体现一个FPGA工程师的技术水平,Clock的分频,倍频在设计项目时都有可能用到,对于分频,可以通过代码的方式进行实现,而倍频,就要用到我们今天的主角——Clock IP核。熟练使用Clock IP核是学习FPG

    2024年01月16日
    浏览(44)
  • 【Vivado】ram ip核的使用

    ​ ram 的英文全称是 Random Access Memory,即随机存取存储器, 它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据, 其读写速度是由时钟频率决定的。 ram 主要用来存放程序及程序执行过程中产生的中间数据、 运算结果等。 ​ rom为只读存储

    2024年02月02日
    浏览(24)
  • xilinx FPGA 除法器ip核(divider)的学习和仿真(Vivado)

    在设计中,经常出现除法运算, 实现方法 : 1、移位操作 2、取模取余 3、调用除法器IP核 4、查找表 简单学习除法器IP。 网上很多IP翻译文档,不详细介绍,记录几个重要的点: 1、三种算法模式(不同模式所消耗的资源类型不同) 2、分清除数和被除数;余数模式的选择 3、延

    2024年04月28日
    浏览(62)
  • Vivado中VIO IP核的使用

      Vivado中的VIO(Virtual Input/Output) IP核是一种用于调试和测试FPGA设计的IP核。它允许设计者通过使用JTAG接口读取和写入FPGA内部的寄存器,从而检查设计的运行状态并修改其行为。VIO IP核提供了一个简单易用的接口,使得用户可以轻松地与FPGA内部寄存器进行交互。通过使用

    2024年02月06日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包