LVDS高速接口测试

article/2025/9/11 17:21:32

话不多说,直接测试

1. OUTPUT:LVDS_TX

2. SDR:代表着速率,测试选的SDR(单速率)

3. 8:串换因子,就是一对LVDS转化几bit的并行数据(和后面的clk,clk_div有关系)

4. 8:8对LVDS

5. LVDS都是差分电压,这个根据板卡上的电压选择

6. 类型肯定是差分的

1. 输出差分时钟

2. 时钟类型选择LVDS,和前面匹配

第三页是数据和时钟的延时,默认

下面说一下测试过程

发送端

1. 发送的数据(需要发送十几个周期的同步码,后面是递增数0~255)

2. 输出的差分时钟(频率和clk_in一致,500M)

3. 串行数据的时钟 (测试的500M)clk_in

4. 并行数据的时钟(测试125M)clk_div_in

clk_in和clk_div的关系就是就是图1中的串换因子以及SDR的关系: 8:1(DDR的话就是4:1)

1. LVDS_TX 核的输出时钟,连接在MMCM上

2. 输出500M和125M,用作LVDS_RX的CLK_IN和CLK_DIV_IN

接收端

LVDS接收需要考虑一个问题是:如何将数据和时钟对齐,这里的bitslip叫位移操作,用它来将同步码找出,进行数据的同步

1. 接收数据,先进行数据的同步

2. bitslip用来同步数据

3. clk_in和clk_div_in分别来自MMCM

4. 复位也来自MMCM

注意: bitslip是一个脉冲信号,产生一个脉冲,数据就移位一次,直到找出同步码为止

下面看下仿真的结果

1. 这是发送数据的同步码:EB90_01DC_EF18_EB90

2. 接收端经过bitslip的同步,最终得到的同步码

3.我用的8通道LVDS,所以bitslip是8bit,每个bit都需要移位,所以是FF

可以看到,发送的数据和接收的数据都是连续的,说明LVDS通信OK

附上代码

module lvds_module

#(
//    parameter     LVDS_DATA_HEAD = 64'hFF00_00FF_FF00_FFFF,          // 同步码
    parameter     LVDS_DATA_HEAD = 64'hEB90_01DC_EF18_EB90,          // 同步码    
    parameter     LVDS_DATA_HEAD_CNT = 8'h40,                                //  同步码的frame        
    parameter    BITSLIP_FRAME   = 4'h8                                           //  bitslip的参数
)

(

   input                          clk_div_in,
   input                          clk_in,

   input                          clk_reset,
   input                          io_reset
  
    );
    
    wire    [63:0]   data_out_from_device;  
    wire    [7:0]   data_out_to_pins_p;
    wire    [7:0]   data_out_to_pins_n;
    
    wire    [63:0]   data_in_to_device;  
    wire    [7:0]   data_in_from_pins_p;
    wire    [7:0]   data_in_from_pins_n;

    reg     [7:0]   bitslip;
        
    reg    [63:0]   data;
    reg     [7:0]   head_cnt; 
    reg     [7:0]   data_cnt;
    
    reg                 bitslip_head_flag;   
    reg     [3:0]     bitslip_cnt;
    
    wire    clk_to_pins_p;
    wire    clk_to_pins_n;
    wire    clk_rx;
    wire    clk_rx_div;    
    
    wire    locked;

  selectio_wiz_0 
  lvds_tx
 (
   .data_out_from_device(data_out_from_device), // input [63:0] data_out_from_device
   .data_out_to_pins_p(data_out_to_pins_p), // output [7:0] data_out_to_pins_p
   .data_out_to_pins_n(data_out_to_pins_n), // output [7:0] data_out_to_pins_n
   .clk_to_pins_p(clk_to_pins_p), // output clk_to_pins_p
   .clk_to_pins_n(clk_to_pins_n), // output clk_to_pins_n
   .clk_in(clk_in), // input clk_in                            
   .clk_div_in(clk_div_in), // input clk_div_in                        
   .clk_reset(clk_reset), // input clk_reset
   .io_reset(io_reset) // input io_reset
); 

  clk_wiz_1 clk_wiz_1
   (
    // Clock out ports
    .clk_out1(clk_rx),     // output clk_out1
    .clk_out2(clk_rx_div),     // output clk_out2
    // Status and control signals
    .locked(locked),       // output locked
   // Clock in ports
    .clk_in1_p(clk_to_pins_p),    // input clk_in1_p
    .clk_in1_n(clk_to_pins_n));    // input clk_in1_n
// INST_TAG_END ------ End INSTANTIATION Template ---------
  
    selectio_wiz_3 
    lvds_rx
   (
     .data_in_from_pins_p(data_in_from_pins_p), // input [0:0] data_in_from_pins_p
     .data_in_from_pins_n(data_in_from_pins_n), // input [0:0] data_in_from_pins_n
     .data_in_to_device(data_in_to_device), // output [7:0] data_in_to_device
     .bitslip(bitslip), // input bitslip                                                     
     .clk_in(clk_rx), // input clk_in                            
     .clk_div_in(clk_rx_div), // input clk_div_in   
     .io_reset(~locked) // input io_reset     
  );     
    
    assign data_out_from_device = data;
    assign data_in_from_pins_p = data_out_to_pins_p;
    assign data_in_from_pins_n = data_out_to_pins_n;               
            
    always @(posedge clk_div_in) begin
//        if (io_reset) begin
                if (~locked) begin
            head_cnt <= 0;
        end else if (head_cnt < LVDS_DATA_HEAD_CNT) begin
            head_cnt <= head_cnt + 1;
        end 
    end

    always @(posedge clk_div_in) begin
//        if (io_reset) begin
                if (~locked) begin
            data_cnt <= 0;
        end else if (head_cnt == LVDS_DATA_HEAD_CNT) begin
            data_cnt <= data_cnt + 1;
        end 
    end    
    
    always @(posedge clk_div_in) begin
//        if (io_reset) begin
                if (~locked) begin
            data <= 0;
        end else if (head_cnt == LVDS_DATA_HEAD_CNT) begin
            data <= data_cnt;
        end else begin
            data <= LVDS_DATA_HEAD;
        end          
    end    

    always @(posedge clk_div_in) begin
//        if (io_reset) begin
                if (~locked) begin
            bitslip_head_flag <= 0;
        end else if (data_in_to_device == LVDS_DATA_HEAD) begin
            bitslip_head_flag <= 1;
        end
    end    

    always @(posedge clk_div_in) begin
//        if (io_reset) begin
                if (~locked) begin
            bitslip_cnt <= 0;
        end else if (bitslip_cnt < BITSLIP_FRAME & ~bitslip_head_flag) begin
            bitslip_cnt <= bitslip_cnt + 1;
        end else begin
            bitslip_cnt <= 0;
        end
    end
    
    always @(posedge clk_div_in) begin
//        if (io_reset) begin
                if (~locked) begin
            bitslip <= 0;
        end else if (bitslip_cnt == BITSLIP_FRAME) begin    
            bitslip <= 8'hff;
        end else begin
            bitslip <= 0;
        end
    end         

endmodule

激励测试

module tb;

    reg clk_in;
    reg clk_div_in;
    reg clk_reset;     
    reg io_reset;   
    
lvds_module lvds_module(
//flash_spi flash_spi(

        .clk_in(clk_in),
        .clk_div_in(clk_div_in),
        .clk_reset(clk_reset),
        .io_reset(io_reset)        

    );
    
    initial begin
        clk_in <= 0;
        clk_div_in <= 1;
        clk_reset <= 1;
        io_reset <= 1;
        #500
        clk_reset <= 0;
        #500
        io_reset <= 0;  
        #1000_000 
        $stop;     
    end  
       
  //  500m
    always #2 clk_in = ~clk_in;   
    //  125M 
    always #8 clk_div_in = ~clk_div_in; 
    
endmodule


http://chatgpt.dhexx.cn/article/FCq4tBrj.shtml

相关文章

MIPI、LVDS、RGB、HDMI等接口对比

液晶屏有RGB TTL、LVDS、MIPI、HDMI接口&#xff0c;这些接口区别于信号的类型&#xff08;种类&#xff09;&#xff0c;也区别于信号内容。 具体RGB TTL接口信号类型是TTL电平&#xff0c;信号的内容是RGB666或者RGB888还有行场同步和时钟&#xff1b; LVDS接口信号类型是LVD…

LVDS接口液晶屏定义(lcd)

转载于&#xff1a;https://blog.csdn.net/linphusen/article/details/6389032 LVDS接口液晶屏定义 LVDS接口又称RS-644总线接口 20PIN单6定义&#xff1a; 1&#xff1a;电源2&#xff1a;电源3&#xff1a;地 4&#xff1a;地 5&#xff1a;R0- 6&#xff1a;R0 7&…

基于FPGA的LVDS接口设计

实验内容&#xff1a; 通过LVDS接口&#xff0c;完成数据的收发测试。 上周居然开启了咸鱼模式&#xff0c;检讨一下 || 前集回顾&#xff1a; 《Xilinx - UG471中文翻译》&#xff08;1&#xff09;IDELAYE2原语介绍 《Xilinx - UG471中文翻译》&#xff08;2&#xff09;…

LVDS屏的俩种接口:JEIDAVESA

一、LVDS数据格式 LVDS信号格式有两种&#xff0c;一种JEIDA的标准&#xff0c;一种是VESA的标准; LCD屏老一点的有6bit的&#xff0c;现在普通的是8bit&#xff0c;新的就是10bit了; 每个clock周期内7bit数据&#xff08;跟TMDS标准有差别&#xff09;&#xff1a; 对应的…

LVDS接口是什么接口?

目前&#xff0c;有2种数字显示接口标准&#xff0c;一是由美国国家半导体公司&#xff08;National Semiconductor,NS&#xff09;推出的OpenLDI数字显示接口标准&#xff0c;另一个是由Silicon Image、Intel、Compaq、IBM、HP、NEC、Fujitsu等公司共同组成数字显示工作组&…

sensor lvds接口介绍

1.项目简介 用索尼的imx264 sensor采集图像&#xff0c;在内部模数转换之后&#xff0c;由lvds接收&#xff0c;然后解码&#xff0c;最后送给后端显示 2.框图 imx264配置成从模式&#xff0c;由spi总线配置&#xff0c;需要由FPGA提供 行、场信号&#xff0c;imx264根据接收到…

LVDS,CML,LVPECL,VML接口详细介绍

在平时的工作中&#xff0c;经常会接触到各种差分电平的转换&#xff0c;网上也有很多这样的资料&#xff0c;但发现有些混乱&#xff0c;所以找了TI的这份文档进行翻译&#xff0c;一是系统的归类一下&#xff0c;二是自己也能通过这个来加深理解和学习。这个文档对于各个电平…

LVDS,接口,时序讲解,非常好的文章

1.1.1 LVDS接口分类 1.1.1.1 单路6bit LVDS 这种接口电路中&#xff0c;采用单路方式传输&#xff0c;每个基色信号采用6位数据&#xff0c;共18位RGB数据&#xff0c;因此&#xff0c;也称18位或18bit LVDS接口。此&#xff0c;也称18位或18bit LVDS接口。 1.1.1.2 双路…

嵌入式--接口(二)液晶屏接口:RGB、LVDS、MIPI、HDMI

目录 RGB接口&#xff08;1&#xff09;接口定义&#xff08;2&#xff09;接口类型&#xff08;3&#xff09;接口特点&#xff08;4&#xff09;最大分辨率和时钟频率 LVDS接口&#xff08;1&#xff09;接口定义&#xff08;2&#xff09;接口类型&#xff08;3&#xff09;…

LVDS接口介绍

1、LVDS接口概述 LVDS&#xff0c;即Low Voltage Differential Signaling&#xff0c;是一种低压差分信号技术接口。克服以TTL电平方式传输宽带高码率数据时功耗大、EMI电磁干扰大等缺点而研制的一种数字视频信号传输方式。LVDS输出接口利用非常低的电压摆幅&#xff08;约350m…

LVDS接口和LVDS技术

LVDS接口 目前6.5寸及以上尺寸的液晶屏大多都是LVDS接口的了&#xff0c;而LVDS接口的屏主要是应用于工控行业。 如下图就是LVDS接口的使用场景&#xff1a; 下图所示为五通道LVDS发送芯片(DS90C385)内部框图。包含了四个数据信号&#xff08;其中包括RGB、数据使能DE、行同步…

LVDS接口分类,时序,输出格式

1.1.1 LVDS接口分类 1.1.1.1 单路6bit LVDS 这种接口电路中&#xff0c;采用单路方式传输&#xff0c;每个基色信号采用6位数据&#xff0c;共18位RGB数据&#xff0c;因此&#xff0c;也称18位或18bit LVDS接口。此&#xff0c;也称18位或18bit LV…

Lvds

Lvds 编辑 Lvds &#xff1a;Low-Voltage Differential Signaling 低电压差分信号 1994年由美国国家半导体公司提出的一种信号传输模式&#xff0c;是一种电平标准&#xff0c;LVDS接口又称RS-644总线接口&#xff0c;是20世纪90年代才出现的一种数据传输和接口技术。 中文名 L…

LVDS接口详解

一&#xff1a;LVDS输出接口概述 二&#xff1a;LVDS接口电路的组成 三&#xff1a;LVDS输出接口电路类型 四&#xff1a;典型LVDS发送芯片介绍 五&#xff1a;LVDS发送芯片的输入与输出信号 六&#xff1a;LVDS数据输出格式 七 &#xff1a;LVDS 参数分析 / 一&#x…

硬件接口之LVDS

LVDS接口 &#xff08;1&#xff09;接口定义 LVDS&#xff0c;即Low Voltage Differential Signaling&#xff0c;是一种低压差分信号技术接口。它是美国NS公司为克服以TTL电平方式传输宽带高码率数据时功耗大、EMI电磁干扰大等缺点而研制的一种数字视频信号传输方式。   L…

LVDS通信接口详细介绍

1. 概述 LVDS Low-Voltage Differential Signaling 低电压差分信号&#xff0c;属于平衡传输信号。 这种技术的核心是采用极低的电压摆幅高速差动传输数据&#xff0c;从而有以下特点&#xff1a; 低功耗---低误码率---低串扰---低抖动---低辐射 良好的信号完整性。 推…

Dubbo与SpringCloud框架详解

一、互联网架构演进 1、互联网项目架构 1. 互联网项目与传统项目 互联网项目架构的特点&#xff1a; 用户多流量大&#xff0c;并发高海量数据易受攻击功能繁琐变更快 传统项目和互联网项目的不同&#xff1a; 用户体验&#xff1a; 美观功能速度稳定性 大型互联网项目架…

网站系统分布式架构

写这篇文章之前,需要有些论点和论据,以表明网络系统在极端情况下的情况,先来看看世界上排名靠前的网站。 1、 FaceBook 2、 Google 从这两个站可以看出&

【操作系统】Operating System Conceptions第一章知识整理总结

1.2 Computer-System Organization 1&#xff09;Computer-System Operation 什么是操作系统(OS)&#xff1f; 计算机系统由硬件和软件两部分组成。计算机操作系统是配置在计算机硬件上的第一层软件&#xff0c;是对硬件系统的首次扩充。而其他的程序、系统软件、应用软件都…

腾讯组织架构整改引思考:中小团队要怎样搭建架构?

原文网址&#xff1a;https://www.infoq.cn/article/UoWc9uUtVIrm-azWOglu 2019 年 1 月 4 日&#xff0c;腾讯宣布成立技术委员会&#xff0c;也代表之前宣布的架构调整终于拉开序幕。那么中小团队要如何搭建自己的团队架构呢&#xff1f;本文将会对此展开讨论…… 平时我们…