跳转到主要内容

FPGA中应用LVDS信号

judy 提交于

本文转载自:<span id="profileBt"><a href="https://mp.weixin.qq.com/s/dESXihDJK797-gGmyZyMYg"&gt; 硬码农二毛哥微信公众号</a></span>

<font color="#FF8000">注:本文由作者授权转发,如需转载请联系作者本人</font>

FPGA开发中经常会用到LVDS信号,本文分别介绍intel fpga和xilinx fpga的LVDS信号处理方法。

<strong>intel fpga</strong>
<strong>LVDS输入</strong>

LVDS信号输入到intel FPGA,在Pin Planner中将信号设置成LVDS。例如输入信号为data_p和data_n,只需要分配data_p引脚,data_n引脚软件自动分配。写代码时直接操作data_p就可以。
<center><img src="http://xilinx.eetrend.com/files/2022-09/%E5%8D%9A%E5%AE%A2/100563599-26…; alt=""></center>

在进行硬件设计时需要注意,LVDS输入信号要选择DIFFIO_RX引脚,如果选择成DIFFIO_TX,编译会出错。
<center><img src="http://xilinx.eetrend.com/files/2022-09/%E5%8D%9A%E5%AE%A2/100563599-26…; alt=""></center>

<strong>LVDS输出</strong>

intel FPGA输出LVDS信号。只需要将要输出的信号在Pin Planner中设置成LVDS电平,将原理图中差分信号P端引脚配置到输出信号,N端软件自动配置。
<center><img src="http://xilinx.eetrend.com/files/2022-09/%E5%8D%9A%E5%AE%A2/100563599-26…; alt=""></center>

在进行硬件设计时要LVDS输出信号要选择DIFFIO_TX引脚,如果选择成DIFFIO_RX,编译会出错。

<strong>xilnx fpga</strong>
xilinx fpga对lvds信号处理与intel不同,通常使用原语处理差分信号。

<strong>LVDS输入</strong>

LVDS信号输入使用IBUFDS。
<center><img src="http://xilinx.eetrend.com/files/2022-09/%E5%8D%9A%E5%AE%A2/100563599-26…; alt=""></center>

原语如下:

IBUFDS #(
.DIFF_TERM("FALSE"), // Differential Termination
.IBUF_LOW_PWR("TRUE"), // Low power="TRUE", Highest performance="FALSE"
.IOSTANDARD("DEFAULT") // Specify the input I/O standard
) IBUFDS_inst (
.O(O), // Buffer output
.I(I), // Diff_p buffer input (connect directly to top-level port)
.IB(IB) // Diff_n buffer input (connect directly to top-level port)
)

<strong>LVDS输出</strong>

LVDS信号输入使用OBUFDS。
<center><img src="http://xilinx.eetrend.com/files/2022-09/%E5%8D%9A%E5%AE%A2/100563599-26…; alt=""></center>

原语如下:

OBUFDS #(
.IOSTANDARD("DEFAULT"), // Specify the output I/O standard
.SLEW("SLOW") // Specify the output slew rate
) OBUFDS_inst (
.O(O), // Diff_p output (connect directly to top-level port)
.OB(OB), // Diff_n output (connect directly to top-level port)
.I(I) // Buffer input
);