原创 【博客大赛】高速差分IO评估(LVDS)

2015-5-4 10:46 3740 16 18 分类: FPGA/CPLD 文集: ALTERA FPGA

高速差分IO评估(LVDS

概述

    很多人在使用ALTERA的高速差分接口,即LVDS,老是遇到问题,作为参考笔者基于AlteraStratix II器件评估其LVDS接口。Altera的高端器件的LVDS接口集成了专用的硬件资源,而且逻辑设计的时候可以直接调用LVDS设计模块。相对于低端的Cyclone系列,用户在使用的时候需要投入更多的精力。

学习目标

l  创建高速差分接口LVDS发送和接收器

l  学习如何分配高速差分I/O

l  使用片上自带的匹配电阻(Cyclone系列没有)

l  使用ModelSim仿真LVDS接口

 

 

开始进行专用高速差分I/O设计

    如图1所示,我将要在StratixII器件上实现如下的设计。该设计利用器件专用的SERDES高速差分I/O运行在840 Mbps。接收器的两个8-bit输出使用内部的专用乘法器相乘,相乘的结果送入LVDS发送器。下面我们开始使用Megawizard来创建两个通道的LVDS RxTx设计文件以及顶层文件。

无标题.jpg

 

 

1LVDS高速差分设计实例

第一步:创建LVDS接收器

    使用Megawizard生成LVDS接收器,速率为840 Mbps,时钟为105 MHzX8模式。

1、 首先创建一个Quartus II工程,命名为Diff_io_top.qpf,并打开此工程。

2、 从工程的工具菜单选择Tools à MegaWizard Plug-In Manager。在弹出的插件管理器界面选择Create a New Custom Megafunction Variation。然后点击下一步。

3、 在出现的界面中,展开“I/O”项并选择“ALTLVDS”。选择好生成的源文件HDL输出类型(VerilogVHDL)并指定器件为Stratix II。输入源文件输出名字为lvds_rx,点击下一步,如图2所示。

20150428143754988002.png

2:生成LVDS接收器第二页

4、  在下一个窗口选择生成LVDS receiver模块。指定Stratix II作为器件家族。选择通道数为2通道。选择解串化因子为8,如图3所示。

20150428143800752003.png

3

5、 点击下一步(Next)继续

6、在接着出现的窗口中选择接口速率为840 Mbps。勾选“Use rx_locked output port”。“ alignment of data with respect to rx_inclock”默认为“EDGE_ALIGNED”。通过时钟频率来指定输入时钟速度,并指定为105 MHz。勾选“Use shared PLLs for Rx and Tx”。如图4所示。

20150428143806753004.png

4

7、 点击下一步(Next)继续。

8、 在出现的窗口中勾选“Use the “rx_data_align” input port”。勾选后界面如图5所示,点击“Finish”后选择生成所有文件,并再次点击“Finish”按钮。

20150428143814608005.png

5

至此,我们已经创建了一个LVDS接收器模块,此时我们会在工程目录下得到一个lvds_rx.vhd文件。

第二步:创建LVDS发送器

    和上一步一样我们再生成一个对应的LVDS发送器模块,速率840 Mbps,时钟105 MHzX8模式。

1、 Quartus II工程的工具菜单中选择MegaWizard插件管理器,在弹出的窗口中选择“Create a New Custom Megafunction Variation”,并点击“Next”按钮继续。

2、 在出现的窗口中展开I/O项,并从中选择ALTLVDS。同样这里选择生成VHDL输出源文件。为生成的模块命名为lvds_tx。点击Next继续,如图6所示。

20150428143823368006.png

6

3、 在出现的窗口中,确认选择生出的是发送模块。选择Stratix II器件,修改通道数为2,修改解串因子为8,点击Next继续,如图7所示。

20150428143828280007.png

7

4、 在出现的窗口中,修改输出数据率为840 Mbps。在指定输入时钟速率框下勾选“clock frequency”并指定时钟速率为105 MHz。勾选“Register input”和“Use shared PLL for receiver and transmitter.”,然后点击Next继续,如图8所示。

20150428143836394008.png

8

5、 在出现的窗口中设置“outclock divide factor”为8,不要勾选“Use ‘tx_locked”output port”,并点击Finish按钮后选择生成所有文件后再次点击Finish按钮完成模块生成,如图9所示。

20150428143844529009.png

9

    至此LVDS发送模块已经生成,此时我们可以在工程目录下看到生成的源文件lvds_tx.vhd

第三步到第六步省略了

    这就几步分别介绍了:

l  如何在设计中例化LVDS收发模块

l  LVDS收发模块分配输入输出LVDS标准的 I/O引脚

l  编译设计

l  检查底层布局布线

l 

第七步 使用ModelSimLVDS模块进行仿真

    在我们进行仿真之前,非常有必要了解下LVDS高速接口中的数据帧格式。上面我们各创建了2LVDS收发通路,串化因子为8,这意味着高速串行通道在每个rx-inclock周期内传输一组8-bit的数据。在接收端,8-bit字边界由接收器时钟的下降沿来确定,如图10所示,每个时钟周期给FPGA逻辑发送一个8-bit数据。

20150428143849738010.jpg

10:串化因子为8时的解串方式

    根据图10那么我们来看图11给出的例子,图中与时钟下降沿对齐的两个字节的数据,应该分别是数值48,因为每个时钟周期内,rx_in上的只有一个bit为‘1’,且分别位于bit2bit3的位置。

20150428143856140011.jpg

11:接收端串行数据解串举例

    下面开始使用ModelSimLVDS模块设计进行仿真,这里我们采用自动化仿真方式。建立批处理文件、脚本文件(sim.dowave.do),当然最重要的是是设计合适的测试激励文件。这些文件都以附件的形式给出,这里不做过多解释,图12显示了仿真的最终结果。

20150428143902304012.jpg

12LVDS仿真结果

 

          这里对于仿真的过程不再过多赘述,博主前面有详细的博文介绍,本文附件里也给出了详细的仿真工程,大家除了可以直接拿来仿真lvds以外,最重要的是理解仿真工程里的相关lvds的测试激励。

 

 

 

文章评论2条评论)

登录后参与讨论

用户1208903 2015-5-4 10:22

感谢分享!

用户1828471 2015-5-2 18:06

谢谢分享。

用户1661642 2008-4-15 15:40

总结的很好

用户1053025 2006-11-20 15:31

谢谢herald的文章!
相关推荐阅读
coyoo 2024-11-16 13:54
不同ADC采样同一前端模拟信号时转换用时差异分析
概述 同一组前端模拟信号接入由不同型号ADC组成的模数转换电路时,采样后在FPGA中发现采样用时差异较大。本文主要分析这个时间差异形成的原因,并记录该差异产生对系统造成的影响。系统数字化简介 项目前端...
coyoo 2024-11-10 13:04
ALTERA Cyclone 10器件的使用-7:FPGA片内RAM资源利用率思考
概述 项目使用的FPGA目标器件为Cyclone 10 GX系列规模最大一颗料,由于功能升级增加了功能模块更多,发现器件片内RAM不够使用了。为了探索片内RAM使用的利用率问题,从代码RTL级与编译软...
coyoo 2024-11-10 12:30
转知乎:幽灵般的人体成像技术-PET
幽灵般的人体成像技术——PET - 知乎...
coyoo 2024-11-09 10:26
AD9633默认情况下调试记录(二)
概述 所谓默认情况,即如器件手册中图2所标示那样。对应AD9633的调试,除了涉及到ADC自身,还需要兼顾前端驱动器,系统中AD9633驱动器使用了差分运算放大器,这里不在赘述,笔者已有相关文章论述。...
coyoo 2024-11-07 10:40
AD9633默认情况下调试记录(一)
AD9633在旁路SPI接口时如何在FPGA逻辑中确认字边界概述 AD9633与FPGA之间的LVDS接口初调试,ADC可以通过SPI接口对其内部寄存器进行各项配置。在SPI接口未调通之前,对LVDS...
coyoo 2024-11-02 12:18
比较器检测模拟脉冲说明(三)
概述 继续说明(二)探讨的比较器使用问题,然后延展到高速比较器选型问题。第四次迭代已经修正了比较器与后级或门器件的互联端接问题,然而比较器输出仍然在较低参考阈值电压设置时出现了问题。本文主要探索该问题...
我要评论
2
16
关闭 站长推荐上一条 /2 下一条