基于FPGA的光纤数据传输 您所在的位置:网站首页 fpga误码率测量方法 基于FPGA的光纤数据传输

基于FPGA的光纤数据传输

#基于FPGA的光纤数据传输| 来源: 网络整理| 查看: 265

基于FPGA的光纤数据传输 项目简述Aurora 8B10B的调用Aurora 8B10B接口的描述光纤项目的代码设计MZ7015开发板工程MZ7015开发板测试代码MA7035FA开发板代码 仿真结果下板结果总结

项目简述

在这次的实验中我们主要学习SFP接口的使用,该接口是高速接口主要是使用GTP接口来完成的。本次项目的简述为,一块FPGA开发板通过光纤发送递增数据,另一块FPGA开发板通过光纤接收数据并且验证数据的正确性。本次实验所用到的软硬件环境如下: 1、VIVIADO 2019.1软件开发环境 2、米联客MA7035FA开发板 3、米联客MZ7015开发板

Aurora 8B10B的调用

我们接下来将对Aurora 8B10B IP进行讲解 在这里插入图片描述 1、传输数据的位宽,这里选择4Byte,也就是说IP的用户接口数据为32位宽 2、GTP接口的串行传输速率,GTP几口最大传输6.25Gbps,这里我们直接选择最大速率传输 3、Aurora 8B10B IP的GTP底层接口时钟,这个与FPGA开发板的GTP时钟有关,我使用的这两款开发板都是125MHz,所以我们这里选择125MHz 4、Aurora 8B10B IP的初始化时钟,我们选择50MHz 5、DRP时钟,我们在程序中没有用到DRP有关的操作,这里也给成50MHz 6、选择该Aurora 8B10B IP的通信模式,这里选择双工通信 7、数据传输的用户接口,我们这里使用简单的AXI4-stream数据接口 8、这里我们的数据使用小端模式。 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。 在这里插入图片描述 1、这个按照GTP口的顺序进行选择,该款FPGA一共4对GTP接口,从左下角逆时针循环时0,1,2,3。具体选择哪一个看FPGA开发板上面的GTP接口使用的第几对。 在这里插入图片描述 1、这里我们只使用1个IP核,不使用示例工程,所以我们选择第一个 2、我们这个IP核的初始化时钟是单端信号,参考时钟是双端时钟,进行相应的选择。

Aurora 8B10B接口的描述

接下来我们对我们使用的Aurora 8B10B接口进行简单的描述。

aurora_8b10b_0 your_instance_name ( .s_axi_tx_tdata (s_axi_tx_tdata ), // input wire [31 : 0] s_axi_tx_tdata .s_axi_tx_tvalid (s_axi_tx_tvalid ), // input wire s_axi_tx_tvalid .s_axi_tx_tready (s_axi_tx_tready ), // output wire s_axi_tx_tready .m_axi_rx_tdata (m_axi_rx_tdata ), // output wire [31 : 0] m_axi_rx_tdata .m_axi_rx_tvalid (m_axi_rx_tvalid ), // output wire m_axi_rx_tvalid .hard_err (hard_err ), // output wire hard_err .soft_err (soft_err ), // output wire soft_err .channel_up (channel_up ), // output wire channel_up .lane_up (lane_up ), // output wire [0 : 0] lane_up .txp (txp ), // output wire [0 : 0] txp .txn (txn ), // output wire [0 : 0] txn .reset (reset ), // input wire reset .gt_reset (gt_reset ), // input wire gt_reset .loopback (loopback ), // input wire [2 : 0] loopback .rxp (rxp ), // input wire [0 : 0] rxp .rxn (rxn ), // input wire [0 : 0] rxn .drpclk_in (drpclk_in ), // input wire drpclk_in .drpaddr_in (drpaddr_in ),// input wire [8 : 0] drpaddr_in .drpen_in (drpen_in ), // input wire drpen_in .drpdi_in (drpdi_in ), // input wire [15 : 0] drpdi_in .drprdy_out (drprdy_out ),// output wire drprdy_out .drpdo_out (drpdo_out ), // output wire [15 : 0] drpdo_out .drpwe_in (drpwe_in ), // input wire drpwe_in .power_down (power_down ),// input wire power_down .tx_lock (tx_lock ), // output wire tx_lock .tx_resetdone_out (tx_resetdone_out ), // output wire tx_resetdone_out .rx_resetdone_out (rx_resetdone_out ), // output wire rx_resetdone_out .link_reset_out (link_reset_out ), // output wire link_reset_out .init_clk_in (init_clk_in ), // input wire init_clk_in .user_clk_out (user_clk_out ), // output wire user_clk_out .pll_not_locked_out (pll_not_locked_out ), // output wire pll_not_locked_out .sys_reset_out (sys_reset_out ), // output wire sys_reset_out .gt_refclk1_p (gt_refclk1_p ), // input wire gt_refclk1_p .gt_refclk1_n (gt_refclk1_n ), // input wire gt_refclk1_n .sync_clk_out (sync_clk_out ), // output wire sync_clk_out .gt_reset_out (gt_reset_out ), // output wire gt_reset_out .gt_refclk1_out (gt_refclk1_out ), // output wire gt_refclk1_out .gt0_pll0refclklost_out (gt0_pll0refclklost_out ), // output wire gt0_pll0refclklost_out .quad1_common_lock_out (quad1_common_lock_out ), // output wire quad1_common_lock_out .gt0_pll0outclk_out (gt0_pll0outclk_out ), // output wire gt0_pll0outclk_out .gt0_pll1outclk_out (gt0_pll1outclk_out ), // output wire gt0_pll1outclk_out .gt0_pll0outrefclk_out (gt0_pll0outrefclk_out ), // output wire gt0_pll0outrefclk_out .gt0_pll1outrefclk_out (gt0_pll1outrefclk_out ) // output wire gt0_pll1outrefclk_out );

1、s_axi_tx_tdata、s_axi_tx_tvalid、s_axi_tx_tready、m_axi_rx_tdata、 m_axi_rx_tvalid信号:AXI4-stream协议的信号,具体的时序要求可以查找一下该协议特别容易理解,如果同学们对这个协议不熟悉,一定要学完这个协议继续学习。 2、hard_err 、soft_err信号:Aurora 8B10B IP硬件、软件出错的提示信号。 3、channel_up 、lane_up信号:两个Aurora 8B10B IP的初始化完成信号,只有将两个信号拉高之后,我们才可以进行进一步的操作。 4、txp、txn信号:GTP的写差分接口,也就是我们绑引脚的接口。 5、reset、gt_reset信号:分别是Aurora 8B10B IP与GTP接口的复位信号,高有效,通常先复位reset再复位gt_reset,高电平复位。这里需要注意的是Aurora 8B10B IP在正常使用前一定要复位一段时间。 6、loopback信号:环回[2:0]端口在收发机的正常工作和不同的环回模式之间进行选择,这里我们默认为 0。在这里插入图片描述 7、rxp、rxn信号: GTP的读差分接口,也是我们绑引脚的接口。 8、drpclk_in、drpaddr_in、drpen_in、drpdi_in、drprdy_out、drpdo_out、drpwe_in信号:DRP相关信号,与资源分配相关一般用不到,时钟连接定制IP时选择的50MHz时钟,其余的信号输入写0输出忽视即可。 9、power_down信号:掉电信号,1表示IP掉电,正常工作的情况下该位是0信号。 10、init_clk_in信号:Aurora 8B10B IP的初始化时钟信号。 11、user_clk_out信号:用户操作的时钟信号也就是前面AXI4-stream信号的时钟信号,所有的数据操作都是在这个时钟域里面完成的。 其余的输出我们这里用不到也就不进行详细的详解,感兴趣的同学可以查阅技术手册。

光纤项目的代码设计 MZ7015开发板工程

gtp_top模块:

`timescale 1ns / 1ps // ********************************************************************************* // Project Name : OSXXXX // Author : zhangningning // Email : [email protected] // Website : // Module Name : gtp_top.v // Create Time : 2019-12-01 14:20:41 // Editor : sublime text3, tab size (4) // CopyRight(c) : All Rights Reserved // // ********************************************************************************* // Modification History: // Date By Version Change Description // ----------------------------------------------------------------------- // XXXX zhangningning 1.0 Original // // ********************************************************************************* module gtp_top( input GTPQ0_P , input GTPQ0_N , output wire txp , output wire txn , input rxp , input rxn , input sclk , output wire sfp_tx_disable ); //========================================================================================\ //**************Define Parameter and Internal Signals********************************** //========================================================================================/ reg [31:0] s_axi_tx_tdata ; reg s_axi_tx_tvalid ; wire s_axi_tx_tready ; wire [31:0] m_axi_rx_tdata ; wire m_axi_rx_tvalid ; wire hard_err ; wire soft_err ; wire channel_up ; wire lane_up ; reg reset ; reg gt_reset ; wire [ 3:0] loopback ; wire drpclk_in ; wire [ 8:0] drpaddr_in ; wire drpen_in ; wire [15:0] drpdi_in ; wire drprdy_out ; wire [15:0] drpdo_out ; wire drpwe_in ; wire power_down ; wire tx_lock ; wire tx_resetdone_out ; wire rx_resetdone_out ; wire link_reset_out ; wire init_clk_in ; wire user_clk_out ; wire pll_not_locked_out ; wire sys_reset_out ; wire sync_clk_out ; wire gt_reset_out ; wire gt_refclk1_out ; wire gt0_pll0refclklost_out; wire quad1_common_lock_out; wire gt0_pll0outclk_out ; wire gt0_pll1outclk_out ; wire gt0_pll0outrefclk_out; wire gt0_pll1outrefclk_out; wire locked ; reg [10:0] gt_reset_cnt ; reg start_flag ; reg [31:0] data_cnt ; reg [11:0] err_cnt ; //========================================================================================\ //************** Main Code ********************************** //========================================================================================/ assign drpaddr_in = 9'b000; assign drpen_in = 1'b0; assign drpdi_in = 16'd0; assign drpwe_in = 1'b0; assign loopback = 3'b000; assign power_down = ~locked; assign sfp_tx_disable = 1'b0; always @(posedge init_clk_in or negedge locked) if(locked == 1'b0) gt_reset = 'd500) s_axi_tx_tvalid


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有