易灵思FPGA的LVDS设置使用

  • 一、LVDS概述
  • 二、IP调用
  • 三.代码定义
  • 小结



一、LVDS概述

LVDS,Low Voltage Differential Signaling,低电压差分信号;是一种数字信号的传输方式,特点是功耗低,噪声低;是在一对PCB走线上通过差分信号进行数据的传输。
多数公司是使用IP固化的方式集成在IC内部,提高吞吐。

二、IP调用

如图打开interface designer,在LVDS TX或者LVDS RX选项中创建一个新的block;

以TX模块为例,随后更改LVDS的定义参数,

lvds bios 去黑边 在bios中设置lvds输出_数据

功能

命名

功能的定义

Instance name

lvds_tx1

这个模块的名称

LVDS Resource

GPIOB_TX01

这个模块对应硬件的是哪个LVDS资源

LVDS Transmitter-Mode

serial data output / reference clock output

将这对差分信号设置数据或者时钟

LVDS Transmitter-output pin

tx_data1(自定义)

输出数据的名称

Serialization Width

输出数据位宽

从2到8bit 可选

Reduce VOD Swing

true/off

减小输出摆幅

lvds bios 去黑边 在bios中设置lvds输出_fpga_02


在Serial Clock 和 Parallel Clock 空格处 ,填设置的时钟频率

Serial即Lvds线上的速度 ,Parallel即逻辑这边的速度。

三.代码定义

如上图所示的使用一组TX资源

我们在使用了一个PLL资源,VCO输出tx_fastclk和tx_slowclk;
tx_slowclk对应我们正常工程中的频率,tx_fastclk对应我们LVDS引脚跑的速率;
如上图的示例,选择资源,并设置对应时钟
代码中我们只需要添加

input tx_slowclk,
output [7:0] tx_data1,

如果是LVDS RX模块,则添加

input rx_slowclk,
input [7:0] rx_data1,

小结

实际使用时的一些注意事项

1.易灵思使用Lvds和其他的FPGA不一样的是,它的调用需要在interface designer 和 代码中都设置关联才行,而且引脚没有直接实例化,编程的时候需要注意下;

2.并行和串行时钟之间的关系:
串行时钟频率=并行时钟频率*(串行化/ 2);串行时钟必须使用90度相移;
采集时钟是根据输入时钟产生的,所以要根据输入时钟和数据的相位来调整;
之所以要相移90度/0度,是因为环境默认时钟和数据是边沿对齐的;
如果本身的时钟和数据是中心对齐,那我们可以调整相位45度/135度做尝试调整;

3.在实际设计的项目中,本身PLL的配置通常会影响采集相位,我们通常会对Lvds-PLL的设计中,tx的反馈模式3种都行,选用慢速(并行)时钟作为反馈;rx的反馈建议选用core,local模式反馈不包含clkmux的延迟,绝对不能使用internal模式,因为会相位不准;

4.一组随路时钟可以驱动n多对数据,举例时钟挂在bankA,对应的数据信号在bankB,bankC 是可行的;

5.Lvds管脚是可以当做GPIO来使用的,不过同一个Lvds-bank,最多不能驱动超过14个GPIO,因为这会引起SSN风险,无论什么IC设计都是遵循这样的原理;

6.如果需要在Lvds里差分信号同单端信号混用,必须隔开2对差分IO才行,意味着RX9当做单端,那么RX 7/8/10/11 都不能当做差分;

7.Lvds的时钟通道各占一个PLL(txrx)资源和两个全局时钟(快速慢速)资源,
Lvds的rx时钟会占用特定的PLL资源,参考每个器件手册的: PLL Reference Clock Resource Assignments;
举例,即使是同样的F324的封装,在PLL资源分配上也有稍微的差距,实际设计中请注意;

8.T13/T20的F169和F256只能选择BR_PLL0作为PLL RX的时钟资源;

9.Lvds RX时钟的PLL设置软件上有个限制是0-400M的限制,不过实际PLL的范围是到500M的,T20是可以跑到1G的;