基于FPGA的光纤数据传输 | 您所在的位置:网站首页 › fpga误码率测量方法 › 基于FPGA的光纤数据传输 |
基于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进行讲解 接下来我们对我们使用的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。 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 实验室设备网 版权所有 |