基于GTX 8B10B编码的自定义PHY上板测试(高速收发器十四)

  前文整理了GTX IP,完成了自定义PHY协议的收发模块设计,本文将通过光纤回环,对这些模块上板测试,首先需要编写一个用于生成测试数据的用户模块。

1、测试数据生成模块

  本模块用于生成自定义PHY协议的测试数据,通过axi_stream接口向PHY发送模块生成测试数据。

  对应代码如下所示,通过计数器发送每字节递增的数据,代码比较简单。

//--###############################################################################################
//--#
//--# File Name		: axi_s_gen
//--# Designer		: 数字站
//--# Tool			: Vivado 2021.1
//--# Design Date	: 2024.3.18
//--# Description	: 生成测试数据;
//--# Version		: 0.0
//--# Coding scheme	: GBK(If the Chinese comment of the file is garbled, please do not save it and check whether the file is opened in GBK encoding mode)
//--#
//--###############################################################################################
module axi_s_gen #(
    parameter			KEEP		=		4'b1111      //一帧数据的最后一个数据的有效位,高电平有效;
)(
    input									clk		    ,//系统时钟信号;
    input									rst  	    ,//系统复位信号,高电平有效;

    input                                   axi_s_ready ,//AXI总线的数据应答信号;
    output  reg [31 : 0]                    axi_s_data  ,//AXI总线的数据信号,先发送高字节数据;
    output  reg [3 : 0]                     axi_s_keep  ,//AXI总线的数据掩码信号;
    output  reg                             axi_s_last  ,//AXI总线的最后一个数据指示信号;
    output  reg                             axi_s_valid  //AXI总线的数据有效指示信号;
);
    localparam          DATA_NUM    =       6'd50       ;//一帧数据发送的个数;
    reg         [5 : 0]                     cnt         ;//
    wire        [7 : 0]                     cnt_r       ;

    always@(posedge clk)begin
        if(rst)begin//初始值为0;
            cnt <= 6'd0;
        end
        else if(axi_s_ready)begin
            cnt <= cnt + 1;
        end
    end

    assign cnt_r = {cnt,2'd0};

    //生成输出数据;
    always@(posedge clk)begin
        if(rst)begin//初始值为0;
            axi_s_data <= 0;
        end
        else begin
            axi_s_data <= {cnt_r[7:0],(cnt_r[7:0]+8'd1),(cnt_r[7:0]+8'd2),(cnt_r[7:0]+8'd3)};
        end
    end

    //生成数据掩码信号,高电平表示对应数据有效;
    always@(posedge clk)begin
        if(rst)begin//初始值为0;
            axi_s_keep <= 4'hf;
        end
        else if(cnt == DATA_NUM - 1)begin
            axi_s_keep <= KEEP;
        end
        else begin
            axi_s_keep <= 4'b1111;
        end
    end

    //生成一帧数据最后一个数据的指示信号;
    always@(posedge clk)begin
        if(rst)begin//初始值为0;
            axi_s_last <= 1'b0;
        end
        else if((cnt == DATA_NUM - 1) && axi_s_ready)begin
            axi_s_last <= 1'b1;
        end
        else begin
            axi_s_last <= 1'b0;
        end
    end

    //生成数据有效指示信号,高电平有效。
    always@(posedge clk)begin
        if(rst)begin//初始值为0;
            axi_s_valid <= 1'b0;
        end
        else if(axi_s_last)begin
            axi_s_valid <= 1'b0;
        end
        else if((cnt == 0) && axi_s_ready)begin
            axi_s_valid <= 1'b1;
        end
    end

endmodule

  该模块对应的RTL结构如下所示,输出数据直接与自定义的PHY芯片连接。

在这里插入图片描述

图1 测试数据生成模块与自定义PHY芯片连接

2、顶层模块生成

  本次自定义PHY包含两个高手收发器通道,因此需要将前文的GT收发器模块和PHY顶层模块,测试数据模块例化。

  最后顶层模块的RTL结构如下所示,包含两个自定义的PHY模块、测试数据生成模块。

在这里插入图片描述

图2 顶层模块RTL

  在例化的时候需要设置收发器的加重参数和幅度参数,具体参数可以通过眼图扫描获取,前文讲解眼图时已经讲解过具体扫描方法。

  此处直接使用眼图扫描的参数设置两个收发器通道的gt0_txpostcursor_in、gt0_txprecursor_in、gt0_txdiffctrl_in参数。

  仿真激励文件如下所示,但是由于前文已经对各个模块仿真过了,此处就不再留仿真细节了,直接进行上板测试,读者可自行仿真。

//--###############################################################################################
//--#
//--# File Name		: tb_top
//--# Designer		: 数字站
//--# Tool			: Vivado 2021.1
//--# Design Date	: 20
//--# Description	: top的testbench文件
//--# Version		: 0.0
//--# Coding scheme	: GBK(If the Chinese comment of the file is garbled, please do not save it and check whether the file is opened in GBK encoding mode)
//--#
//--###############################################################################################
`timescale 1ns / 1ps
module tp_top ();
    parameter	CYCLE		= 	10		;//系统时钟周期,单位ns,默认10ns;
    parameter	RST_TIME	= 	10		;//系统复位持续时间,默认10个系统时钟周期;
    parameter	STOP_TIME	= 	1000	;//仿真运行时间,复位完成后运行1000个系统时钟后停止;

    reg			        clk             ;//系统时钟,默认100MHz;
    reg			        rst_n           ;//系统复位,默认低电平有效;
    reg                 gt_refclk_p     ;//GT差分参考时钟信号;
    wire                gt_refclk_n     ;//GT差分参考时钟信号;
    wire    [1 : 0]     gt_tx_p         ;//gt发送差分信号;
    wire    [1 : 0]     gt_tx_n         ;//gt发送差分信号;
    wire    [1 : 0]     gt_rx_p         ;//GT接收差分信号;
    wire    [1 : 0]     gt_rx_n         ;//GT接收差分信号;
    wire    [1 : 0]     sfp_disable     ;//光纤失能信号,高电平有效;

    assign gt_rx_p = gt_tx_p;
    assign gt_rx_n = gt_tx_n;

    top u_top(
        .clk            ( clk		    ),//系统时钟信号;
        .rst_n	        ( rst_n	        ),//系统复位信号,低电平有效;
        .gt_refclk_p    ( gt_refclk_p   ),//GT差分参考时钟信号;
        .gt_refclk_n    ( gt_refclk_n   ),//GT差分参考时钟信号;
        .gt_tx_p        ( gt_tx_p       ),//gt发送差分信号;
        .gt_tx_n        ( gt_tx_n       ),//gt发送差分信号;
        .gt_rx_p        ( gt_rx_p       ),//GT接收差分信号;
        .gt_rx_n        ( gt_rx_n       ),//GT接收差分信号;
        .sfp_disable    ( sfp_disable   ) //光纤失能信号,高电平有效;
    );

    //生成周期为CYCLE数值的系统时钟;
    initial begin
        clk = 0;
        forever #(CYCLE/2) clk = ~clk;
    end

    //生成差分时钟信号;
    initial begin
        gt_refclk_p = 1;
        forever #3.2 gt_refclk_p = ~gt_refclk_p;
    end

    assign gt_refclk_n = ~gt_refclk_p;

    //生成复位信号;
    initial begin
        rst_n = 1;
        #2;
        rst_n = 0;//开始时复位10个时钟;
        #(RST_TIME*CYCLE);
        rst_n = 1;
        #(STOP_TIME*CYCLE);
        $stop;//停止仿真;
    end

endmodule

3、上板测试

  对上述工程进行综合,然后光纤的引脚,本次使用双通道,可以直接使用光纤将数据回环,通过ILA抓取回环前后的数据,确定自定义PHY协议的设计是否正确。

在这里插入图片描述

图3 引脚分配

  注意差分引脚只需要分配引脚P就行了,因为差分对是绑定关系,分配一个引脚之后,另一个引脚的位置就已经确定了。

  至于vivado怎么知道这两个信号就是差分信号?

  这是因为差分信号输入FPGA后,都需要经过IBUFDS或者IBUFGDS这种差分转单端器件,这个器件的两个输入信号当然是差分信号,猜测vivado就是通过IBUFDS的输入或者OBUFDS的输出确定差分信号的。

  可以直接在需要通过ILA观测的信号前面加上下面的约束,之后可以在vivaodo中将这些信号添加到ILA进行观测。

在这里插入图片描述

图4 加上debug约束

  当工程综合完毕之后,进行如下操作,点击“SYNTHE SIS”下的“Open Synthesized Design”,然后点击“Set Up Debug”,进入界面后点击下一步即可。

在这里插入图片描述

图5 set up debug

  然后进入信号添加界面,如下所示,这种方式添加的信号只能是变化的信号,如果该信号位固定电平,则该界面会报错。如下图所示,数据掩码的最高位始终为高电平,此时就会报错,需要删除这一位信号,后面再分析时,默认其为高电平即可。

在这里插入图片描述

图6 添加带观测信号到ILA中

  然后需要设置ILA的数据深度,深度可以尽量设置大一点,方便一次抓取更多数据,另外2处可以启用其余的模式,如果需要对某个条件的信号需要特别关注,则可以勾选,本文随机抓取发送和接收数据即可,因此可以不勾选这两个选项。

在这里插入图片描述

图7 ILA深度设置

  最后时汇总界面,如下图所示,点击完成即可。

在这里插入图片描述

图8 ILA设置汇总界面

  之后生成比特流文件,然后下载到开发板中进行测试,用光纤连接FPGA的两个光口,如下所示。

在这里插入图片描述

图9 光纤连接光口

  注意这种方式连接,高速收发器0的发送通道与高速收发器1的接收通道连接,高速收发器0的接收通道连接高速收发器1的发送通道,在后续波形查看时需要注意。

  为加快测试速度,模块0与模块1发送数据时,一帧数据的最后一个数据掩码设置成不同数值,如下图所示。

在这里插入图片描述

图10 数据掩码设置

  将比特流下载到FPGA中,然后抓取高速收发器0的发送时序。如下图所示,用户发送一帧数据的开始位置。注意用户数据w_axi_s0_data是大端对齐,先发高字节数据,而GTX IP的输入数据gt_0_tx_data是小端对齐,先发低字节数据。

  在一帧数据开始前会先发送逗号和起始位,之后跟数据。

在这里插入图片描述

图11 高速收发器0发送一帧数据的开始时序

  下图是一帧数据的结尾部分,用户发送最后一个数据只有高三字节有效,及最后一个有效数据为8’hc6。组帧完成的信号在发送停止位前,最后一个数据为8’hc6,由此证明自定义PHY发送模块功能正常。

在这里插入图片描述

图12 高速收发器0发送一帧数据的结束时序

  下图时高速收发器1接收通道,接收一帧数据的开始时序,首先检测到逗号和起始位组成的帧头,然后向用户输出第一个数据为32’h00010203,与图11用户发送的第一个数据一致。

在这里插入图片描述

图13 高速收发器1接收一帧数据的开始时序

  下图是接收一帧数据末尾时序,停止位8’hfd之前最后一个数据为8’hc6,与图12发送的数据一致,证明GTX IP的发送和接收均正确。

  其次,输出给用户的最后一个数据高三位有效(最高位在添加ILA时,表示为高电平,被删除了,没有在下图体现),最后一个数据为8’hc6,与图12用户发送的最后一个数据保持一致,证明PHY收发和GTX收发均没有问题。

在这里插入图片描述

图14 高速收发器1接收一帧数据的结束时序

  前面验证了用户发送最后一个数据高三位有效时,接收和发送的时序正确性,后续还需要对另外三种情况进行验证,发送端的起始位只能在固定位置,因此起始位的位置就不进行验证了,前文也仿真了所有情况,不再赘述了。

  下图是高速收发器1的发送通道,发送一帧数据的开始时序。与图11基本一致。

在这里插入图片描述

图15 高速收发器1发送一帧数据的开始时序

  下图是发送一帧数据的结尾时序,由图可知,用户发送的最后一个数据所有位均有效,最后一个数据为8’hc7。

  然后在组帧结束时,停止位8’hfd之前的最后一个数据是8’hc7,证明这种情况下,自定义PHY的发送模块代码也没有问题。

在这里插入图片描述

图16 高速收发器1发送一帧数据的结束时序

  下图是高速收发器0接收通道,开始接收数据的起始时序,发送给用户的第一个数据为32’h00010203,与图15用户发送的数据一致。

在这里插入图片描述

图17 高速收发器0接收一帧数据的开始时序

  下图是接收一帧数据的结束时序,接收数据的停止位8’hfd之前的最后一个数据为8’hc7,发送给用户的最后一个数据为8’hc7,与图16用户发送的最后一个数据保持一致。由此证明这种情况下,自定义PH收发模块和GTX IP收发功能均正常。

在这里插入图片描述

图18 高速收发器0接收一帧数据的结束时序

  由两个收发器测试完两种结尾格式,之后更改顶层模块生成一帧测试数据,最后一个数据的有效字节,分别设置为一个字节和两个字节有效,如下图所示。

在这里插入图片描述

图19 帧结尾数据有效字节设置

  下图是高速收发器1的发送通道,发送一帧数据的结束时序(因为开始时序与图11和图15基本一致,后续不再抓取)。用户发送最后一个的高两字节有效,最后一个数据为8’hc5。

  组帧完成之后,在停止位8’hfd之前,最后一个数据为8’hc5。

在这里插入图片描述

图20 高速收发器1发送一帧数据的结束时序

  下图是高速收发器0接收一帧数据的开始时序,检测到帧头数据之后,向用户数据第一个数据为32’h00010203,与发送数据一致。

在这里插入图片描述

图21 高速收发器0接收一帧数据的开始时序

  下图是接收一帧数据的结束位置,接收停止位8’hfd之前最后一字节数据为8’hc5,之后向用户输出的最后一个数据也为8’hc5。证明在这种情况下自定义PHY收发模块、GTX收发均正确。

在这里插入图片描述

图22 高速收发器0接收一帧数据的结束时序

  下图开始验证最后一种情况,首先是高速收发器0的发送通道,发送一帧数据的结束时序,用户最后一个数据只有最高字节有效,最后一字节数据为8’hc4。

  组帧后停止位8’hfd前的最后一个数据也是8’hc4,因此证明发送数据没有问题。

在这里插入图片描述

图23 高速收发器0发送一帧数据的结束时序

  下图是高速收发器1的接收通道,接收一帧数据的起始时序,由于起始位的位置一致,所以每次抓取接收通道的起始时序基本也是一致的,不再赘述含义。

在这里插入图片描述

图24 高速收发器1接收一帧数据的开始时序

  下图是接收一帧数据结尾时序,检测到停止位8’hfd前的最后一个字节为8’hc4,最终输出给用户的最后一个字节数据为8’hc4。

  注意下图中框中输出给用户的掩码信号低3位为0,但是最高位固定为高电平,没有被添加到ILA中,因此最后一个字节数据是8’hc4,与图23发送的最后一个数据保持一致。

在这里插入图片描述

图25 高速收发器1接收一帧数据的结束时序

4、总结

  本文算是对整理的GTX IP、自定义的PHY收发模块进行了验证,结合前文的接收数据仿真,可以认为收发数据模块没有问题了。

  当自己写过这种自定义PHY协议,并且在板子上验证之后,会对GTX IP的认识清晰很多。


  如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!

  如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/683464.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【微信小程序】页面导航

声明式导航 导航到 tabbar 页 tabBar页面指的是被配置为tabBar的页面。 在使用<navigator>组件跳转到指定的tabBar页面时&#xff0c;需要指定url属性和open-type属性&#xff0c;其中&#xff1a; url 表示要跳转的页面的地址&#xff0c;必须以/开头open-type表示跳…

Python轻量级嵌入式关系数据库之apsw使用详解

概要 在现代应用开发中,数据库是一个非常重要的组成部分。SQLite 是一个轻量级的嵌入式关系数据库管理系统,被广泛应用于各种应用程序中。APSW(Another Python SQLite Wrapper)库是一个专门用于访问 SQLite 数据库的 Python 包,它提供了 SQLite 所有的功能,并且比标准库…

usb设备在主机和VMWare虚拟机中切换连接

操作&#xff1a;点击菜单栏虚拟机(M)>可移动设备>选择自己的usb设备>连接(断开与 主机 的连接)

【会议征稿,ACM出版】2024年图像处理、智能控制与计算机工程国际学术会议(IPICE 2024,7月9-11)

2024年图像处理、智能控制与计算机工程国际学术会议&#xff08;IPICE 2024&#xff09;将于2024年7月9-11日在中国福州举行。本届会议由阳光学院、福建省空间信息感知与智能处理重点实验室、空间数据挖掘与应用福建省高校工程研究中心联合主办。 会议主要围绕图像处理、智能控…

巨详细Linux安装Tomcat教程

巨详细Linux安装Tomcat教程 1、检查是否残留其他版本2、上传安装包至服务器2.1安装包获取2.2创建相关目录 3、安装Tomcat3.1安装3.2启动3.3web页面 4、配置Tomcat4.1把tomcat进程交给systemctl管理4.2设置tomcat开机自启动 1、检查是否残留其他版本 #检查残留数据 rpm -qa|gre…

Eclipse添加C和C++编译成汇编文件的选项

在miscellaneous中添加assemble listing选项就可以生成汇编文件了

C++标准模板(STL)- 迭代器库-迭代器适配器- 逆序遍历的迭代器适配器 (二)

迭代器库-迭代器原语 迭代器库提供了五种迭代器的定义&#xff0c;同时还提供了迭代器特征、适配器及相关的工具函数。 迭代器分类 迭代器共有五 (C17 前)六 (C17 起)种&#xff1a;遗留输入迭代器 (LegacyInputIterator) 、遗留输出迭代器 (LegacyOutputIterator) 、遗留向前…

网站安全小白也能搞定的SSL证书安装免费方法

大家都知道&#xff0c;部署一个网站&#xff0c;除了购买域名&#xff0c;现在基本标配SSL证书。 我们以aliyun为例 大家看到这个&#xff0c;收费的SSL证书几千-几万1年不等。这时候&#xff0c;你就会想有没有免费的可以搞。linux老鸟都知道&#xff0c; Let’s Encrypt 、…

微信小程序多端框架打包后发布到华为市场

app上架华为应用市场 一、android 发布到华为应用市场 1、华为应用市场注册开发者账号 https://developer.huawei.com/consumer/cn/?ha_sourcesem&ha_sourceId89000605 2、进行企业认证 3、app隐私弹窗 miniapp-privacy.json 1、协议弹窗内容&#xff1a; {"tit…

创新“智”领长江经济带高质量发展研讨会调研实在智能

近日&#xff0c;创新“智”领长江经济带高质量发展研讨会暨央企智库沙龙第46期在浙江杭州顺利召开。 会议由中国联通主办&#xff0c;中国联通研究院、浙江联通、浙江省人民政府国有资产监督管理委员会联合承办&#xff0c;长江经济带沿线中央企业、地方国资国企等60余家单位…

SwiftUI中ContentUnavailableView的使用(iOS 17、tvOS 17推出的新组件)

iOS 17为SwiftUI带来了一个新的组件ContentUnavailableView&#xff0c;它允许我们向用户呈现一个空状态&#xff0c;而不需要创建自定义错误或者无内容视图。 ContentUnavailableView易于使用&#xff0c;可自定义&#xff0c;并且具有用于空搜索状态的预定义视图。 建议在无…

113、python-第四阶段-10-正则表达式-元字符匹配

为啥这个找到了呢&#xff0c;咱们看一下&#xff0c;这个少了一个开头和结尾&#xff0c;如果从开头开始肯定是不符合的&#xff0c;进行下边的修改

数据分析:小红书黏土风走红,洞察年轻人消费密码

导语 近期&#xff0c;一组由“AI黏土滤镜”生成的黏土风图片刷屏小红书。治愈系的颜色、粗糙的肌理感、带着几分可爱的傻气的人物形象…一夜之间&#xff0c;这个世界仿佛已经被黏土星人占领。 图 | 千瓜数据 越丑越上头&#xff1f;黏土风掀起反传统的审美观 当各类美颜滤…

疯狂星期四,如何向朋友暗示“KFCV50”

疯狂星期四快到了&#xff0c;看看普通人和Python程序员是如何向朋友暗示“KFCV50” 普通人暗示 程序员暗示 普通打印版 print("KFCV50") # 输出&#xff1a;KFCV50Unicode版 # 暗示文 s "\u004B\u0046\u0043\u0056\u0035\u0030" print("Unicode…

kube-promethesu调整coredns监控

K8s集群版本是二进制部署的1.20.4&#xff0c;kube-prometheus对应选择的版本是kube-prometheus-0.8.0 Coredns是在安装集群的时候部署的&#xff0c;采用的也是该版本的官方文档&#xff0c;kube-prometheus中也有coredns的监控配置信息&#xff0c;但是在prometheus的监控页…

数据流通与智能家居的未来

在科技飞速发展的今天&#xff0c;智能家居逐渐融入我们的日常生活&#xff0c;改变了传统的居住方式。智能生态网络&#xff08;IEN&#xff09;作为智能家居的核心&#xff0c;集成了家庭内的各种智能设备和传感器&#xff0c;实现了对家庭环境的智能化管理。而数据要素流通则…

敦煌网、ebay、速卖通等平台一直被差评怎么办?

在电商行业里一直都有一句话&#xff0c;有评行走天下&#xff0c;无评寸步难行 而没有review打造爆款的案例是少之甚少&#xff0c;众所周知&#xff0c;review已经成为用户衡量一件商品的标尺&#xff0c;目前我也是看到一个文章上面写到&#xff0c;一个卖家表示自己平时运…

arcpy批量导出图且图名为shp属性值

1.打开arcmap加载需要导出的图。需求是逐村显示“村界内图斑”并导出为图&#xff0c;在导出每个村时不显示周围的村和“村界内图斑” 2.arcmap上方空白处右键打开“数据驱动页面” 3.在“数据驱动页面”工具条点击第一个图标&#xff0c;打开“设置数据驱动页面” 4.在“设置…

2023年全国消费品“增品种、提品质、创品牌”三品战略发展成果报告

来源&#xff1a;赛迪&欧特欧 近期历史回顾&#xff1a; 2023工业无线电磁环境白皮书——有色金属制造行业.pdf 2024出海企业人才发展实践指南.pdf 2024年全球电子商务市场.pdf 宝钢低碳钢铁技术策划及开发-钟勇.pdf 2023-2024年度中国智能制造产业发展报告.pdf 2024精准医…