基于Altera FPGA的LVDS配置应用一例
在特权同学发表博文《Cyclone III的LVDS接口注意事项》后,不少网友发邮件询问LVDS具体应用的一些问题。这些网友,归根到底,估计是文档看得太少了,或许还缺少动手实践的摸索。做原型开发的知识储备,无外乎两种方式,要么理论,要么实践。理论上前面说的文档是一方面,但是说理论不要被文档框住了,以为理论就是书本和文字。其实换一个角度来理解理论,你也可以认为是间接获得知识的手段,包括一些可用的论坛资源、博文资源,甚至FAE资源等等。不要金口难开,发个邮件打个电话,可能那些吃这个饭的FAE们一句话就帮你搞定问题了。当然了,在你什么都没搞明白前,还是不建议你一通瞎问。比较合适的方式是先自己去消化官方提供的文档,然后动手实践过程中实在是遇到百思不得其解的问题时再通过请教他人的方式得以解决。
而可能很多“菜鸟”百思不得其解的是文档到底从哪里找,茫茫网络浩如烟海,找个对口文档岂非易事?呵呵,其实,这个文档正可谓“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”。瞧,有心的朋友早已发现这个不是秘密的秘密了。当我们使用Quartus II的MegaWizard选择并进入某个IP核的配置界面后,如图1所示,我们总能够在右上角看到一个名为“Documentation”的按钮,他就是传说中的“灯火阑珊处”了,点击后有两个二级子按钮,“On the Web”指向三级菜单的两个网络链接,“altlvds_tx Megafunction User Guide”则直接链接打开本地的帮助文档。
图1
关于文档,除此以外,特权同学比较习惯的做法是在Quartus II handbook或Help中搜索关键词,如这里的altlvds_tx或LVDS,从而找到相关内容的介绍说明。在实践前,这些理论知识的储备是必须的,否则咱的“高楼”很可能就是建立在“空穴”之上,指不定哪天就像咱上海前些年那座莲花河畔景苑一样在风雨过后居然楼体完整的“体面”倒下了。
这里的altlvds_tx/ altlvds_rx实际上不过是一个并串/串并转换器而已,但由于LVDS速度比较高,而且接口上使用了差分信号,所以不是用户随便用逻辑就能“模拟”出来的,因此势必要有官方在FPGA器件上硬件级和Quartus II上软件级的双重支持。那么到用户这边,一切都变得“傻瓜”化配置操作了,而用户真正要关心的,只是要实现的LVDS接口的时序需求,并把这些需求都转化为IP核配置上的参数。
下面简单的说一下整个IP核的配置和例化使用。具体的配置说明还望大家仔细研究官方的User Guider,特权同学这里的一些内容充其量不过是一个简化版的快速入门教程。
如图2所示,先创建一个新的ALTLVDS核,然后进入相关配置页面。
图2
参数设置共有3个配置页面,分别如图3、图4和图5所示。
如图3所示,这里选择LVDS transmitter,然后设置3个LVDS通道(channels);每个通道对应7个解串因子,即7并1串处理。最下面的Use External PLL如果勾选上,则这个IP核内的其他两个配置页面不可设置,用户的时序频率方面的配置主要在外部的PLL时钟上下文章了;若不勾选上,我们接着来看后面两个配置页面。
图3
如图4所示,在Frequency/PLL settings中,需要配置好LVDS串行数据传输速率(此处为245Mbps),而输入时钟速率通常为LVDS串行传输速率除以解串因子得到(245/7=35)。其他几个选项一般使用默认设置,大家可以参考altlvds_tx Megafunction User Guide中有详细说明。
图4
如图5所示,Transmitter settings中有多个Transmitter outclock配置选项,主要是LVDS输出时钟与输出差分信号的时钟以及相位设置,具体如何配置还是需要根据用户本身这个LVDS信号的传输需求而定。
图5
配置完成后,可以在工程目录下的*_inst.v中找到新配置IP核的例化模板,本实例如下:
lcdlvds lcdlvds_inst (
.pll_areset ( pll_areset_sig ),
.tx_in ( tx_in_sig ),
.tx_inclock ( tx_inclock_sig ),
.tx_out ( tx_out_sig ),
.tx_outclock ( tx_outclock_sig )
);
这些信号接口的简单说明如下,方向为相对于LVDS内部模块而言。
信号名 |
方向 |
位宽 |
描述 |
pll_areset |
Input |
1 |
异步复位信号,复位LVDS内部所有计数器 |
tx_in |
input |
21 |
待解串的数据,3个通道的7bit即21bit |
tx_inclock |
Input |
1 |
传输PLL的输入参考时钟,即设置好的35MHz |
tx_out |
Output |
3 |
LVDS输出数据 |
tx_outclock |
Output |
1 |
LVDS输出时钟 |
最后,在管脚分配时,需要选择I/O Standard为LVDS,然后会自动参数另一个*(n)的配对差分管脚,如图6所示。
图6