一、LVDS概述
LVDS,Low Voltage Differential Signaling,低电压差分信号;是一种数字信号的传输方式,特点是功耗低,噪声低;是在一对PCB走线上通过差分信号进行数据的传输。
多数公司是使用IP固化的方式集成在IC内部,提高吞吐。
二、IP调用
如图打开interface designer,在LVDS TX或者LVDS RX选项中创建一个新的block;
以TX模块为例,随后更改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 | 减小输出摆幅 |
在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(tx和rx)资源和两个全局时钟(快速和慢速)资源,
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的;
没有回复内容