基于FPGA的LVDS接口设计

基于FPGA的LVDS接口设计实验内容 通过 LVDS 接口 完成数据的收发测试

实验内容:

通过LVDS接口,完成数据的收发测试。

上周居然开启了咸鱼模式,检讨一下 = =||


前集回顾:

《Xilinx – UG471中文翻译》(1)IDELAYE2原语介绍

《Xilinx – UG471中文翻译》(2)ISERDESE2原语介绍

《Xilinx – UG471中文翻译》(3)OSERDESE2原语介绍


目录

一、系统架构

二、IP核配置

三、系统方案

3.1发送部分

3.2接收部分

3.3逻辑代码

四、仿真验证


一、系统架构

基于FPGA的LVDS接口设计

 用户数据通过LVDS接口发送与接收,验证接收到的数据是否与发送数据一致。

本着简单上手的原则,发送与接收均采用IP核进行设计。后续看情况补充原语设计。

二、IP核配置

发送TX:

基于FPGA的LVDS接口设计

 先取个名:lvds_tx

数据方向选择输出output

数据速率选择SDR,DDR可选;

串行化因子选择8;通道选择1个;

基于FPGA的LVDS接口设计

 时钟选择内部时钟,即由MMCM产生。下面的转发时钟勾选上。

第三页的数据和时钟延迟不选择,测试说明嘛,怎么简单怎么来。

注:以上为测试用例,具体应用视情况而定。

接收RX:

基于FPGA的LVDS接口设计

先取个名:lvds_rx

数据方向选择输入input

下面的跟输出选择一致就好。

基于FPGA的LVDS接口设计

 时钟选择外部时钟;我们知道LVDS接口是1对时钟线+n对数据线。

数据和时钟延迟照样略过。

三、系统方案

3.1发送部分

发送没什么好说的,并行的用户数据tx_data[7:0]通过IP核/OSERDESE2串行化输出。

注意一点,我们在MMCM生成相应时钟时,clk与clk_div之间是存在比例关系的,也就是串行化因子。

3.2接收部分

接收部分则与发送相反,串行接收的数据通过IP核/ISERDESE2并行化送给用户逻辑。

接收部分需要注意的是数据对齐操作-bitslip。下面展开说说:

  1. 发送部分,先发送同步码pattern(这里使用8’hb9);
  2. 接收时,如果rx_data等于pattern或它的移位数据,那么就开始数据同步操作:bitslip
  3. 当经过bitslip移位,rx_data == pattern时,同步完成,给出同步完成信号并将bitslip拉低;
  4. 同步完成后(发送模块收到同步完成信号),发送模块开始发送有用的数据。
  5. 如果选择了多通道lvds,则需等所有通道完成同步后再进行数据的收发。

3.3逻辑代码

代码都是浮云,重要的是方案~理清思路一切都好说。

四、仿真验证

仿真设计为发送累加数,在发送到49时停止仿真$finish。

基于FPGA的LVDS接口设计

 发送tx_data:

        可以看到,开始发送数据之前,先发送同步码8’hb9用于数据同步操作;同步完成后发送累加数进行测试。

接收rx_data:

  1. 接收数据先是8’h73  (8’b0111_0011);
  2. bitslip拉高,rx_data左移一位后为:8’hb9  / 8’b1011_1001,与pattern相等,同步完成
  3. 同步完成,开始时发送数据(0,1,2,3,4….)
  4. 接收数据(0,1,2,3,4….)
  5. 测试完成。

本文补一下之前的内容。

咱们下期见。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222817.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午2:57
下一篇 2026年3月17日 下午2:57


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号