之前记录过赛灵思高速收发器的一些基础知识和ip的使用方法,但一直没有在开发板上进行验证,今天利用HDMI输出视频经过光口回环之后在显示屏上进行显示。首先生成GTX的ip核具体配置如下图所示:
然后生成官方例程,具体方法如下图所示:
然后对例程的顶层模块进行更改,变成如下的形式
需要注意的是数据在经过光口传输之后很可能出现乱码的情况,因此我们需要对数据进行编解码后再进行数据对齐。将顶层模块做如下修改:
////////////////////////////////////////////////////////////////////////////////
// ____ ____
// / /\/ /
// /___/ \ / Vendor: Xilinx
// \ \ \/ Version : 3.6
// \ \ Application : 7 Series FPGAs Transceivers Wizard
// / / Filename : gtwizard_0_exdes.v
// /___/ /\
// \ \ / \
// \___\/\___\
//
//
// Module gtwizard_0_exdes
// Generated by Xilinx 7 Series FPGAs Transceivers Wizard
//
//
// (c) Copyright 2010-2012 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. and is protected under U.S. and
// international copyright and other intellectual property
// laws.
//
// DISCLAIMER
// This disclaimer is not a license and does not grant any
// rights to the materials distributed herewith. Except as
// otherwise provided in a valid license issued to you by
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
// (2) Xilinx shall not be liable (whether in contract or tort,
// including negligence, or under any other theory of
// liability) for any loss or damage of any kind or nature
// related to, arising under or in connection with these
// materials, including for any direct, or any indirect,
// special, incidental, or consequential loss or damage
// (including loss of data, profits, goodwill, or any type of
// loss or damage suffered as a result of any action brought
// by a third party) even if such damage or loss was
// reasonably foreseeable or Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx products are not designed or intended to be fail-
// safe, or for use in any application requiring fail-safe
// performance, such as life-support or safety devices or
// systems, Class III medical devices, nuclear facilities,
// applications related to the deployment of airbags, or any
// other applications that could lead to death, personal
// injury, or severe property or environmental damage
// (individually and collectively, "Critical
// Applications"). Customer assumes the sole risk and
// liability of any use of Xilinx products in Critical
// Applications, subject only to applicable laws and
// regulations governing limitations on product liability.
//
// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
// PART OF THIS FILE AT ALL TIMES.
`timescale 1ns / 1ps
`define DLY #1
(* DowngradeIPIdentifiedWarnings="yes" *)
//***********************************Entity Declaration************************
(* CORE_GENERATION_INFO = "gtwizard_0,gtwizard_v3_6_13,{protocol_file=aurora_8b10b_single_lane_4byte}" *)
module gtwizard_0_exdes
(
input wire GTREFCLK_PAD_N_IN,
input wire GTREFCLK_PAD_P_IN,
input wire drp_clk,
output tx0_clk ,
input [31:0] tx0_data ,
input [3 :0] tx0_kchar ,
output rx0_clk ,
output [31:0] rx0_data ,
output [3 :0] rx0_kchar ,
output gt0_tx_system_rstn ,
output gt0_rx_system_rstn ,
output tx1_clk ,
input [31:0] tx1_data ,
input [3 :0] tx1_kchar ,
output rx1_clk ,
output [31:0] rx1_data ,
output [3 :0] rx1_kchar ,
output gt1_tx_system_rstn ,
output gt1_rx_system_rstn ,
input wire [1:0] RXN_IN,
input wire [1:0] RXP_IN,
output wire [1:0] TXN_OUT,
output wire [1:0] TXP_OUT
);
wire soft_reset_i;
(*mark_debug = "TRUE" *) wire soft_reset_vio_i;
//************************** Register Declarations ****************************
wire gt_txfsmresetdone_i;
wire gt_rxfsmresetdone_i;
(* ASYNC_REG = "TRUE" *)reg gt_txfsmresetdone_r;
(* ASYNC_REG = "TRUE" *)reg gt_txfsmresetdone_r2;
wire gt0_txfsmresetdone_i;
wire gt0_rxfsmresetdone_i;
(* ASYNC_REG = "TRUE" *)reg gt0_txfsmresetdone_r;
(* ASYNC_REG = "TRUE" *)reg gt0_txfsmresetdone_r2;
(* ASYNC_REG = "TRUE" *)reg gt0_rxfsmresetdone_r;
(* ASYNC_REG = "TRUE" *)reg gt0_rxfsmresetdone_r2;
(* ASYNC_REG = "TRUE" *)reg gt0_rxresetdone_r;
(* ASYNC_REG = "TRUE" *)reg gt0_rxresetdone_r2;
(* ASYNC_REG = "TRUE" *)reg gt0_rxresetdone_r3;
(* ASYNC_REG = "TRUE" *)reg gt0_rxresetdone_vio_r;
(* ASYNC_REG = "TRUE" *)reg gt0_rxresetdone_vio_r2;
(* ASYNC_REG = "TRUE" *)reg gt0_rxresetdone_vio_r3;
wire gt1_txfsmresetdone_i;
wire gt1_rxfsmresetdone_i;
(* ASYNC_REG = "TRUE" *)reg gt1_txfsmresetdone_r;
(* ASYNC_REG = "TRUE" *)reg gt1_txfsmresetdone_r2;
(* ASYNC_REG = "TRUE" *)reg gt1_rxfsmresetdone_r;
(* ASYNC_REG = "TRUE" *)reg gt1_rxfsmresetdone_r2;
(* ASYNC_REG = "TRUE" *)reg gt1_rxresetdone_r;
(* ASYNC_REG = "TRUE" *)reg gt1_rxresetdone_r2;
(* ASYNC_REG = "TRUE" *)reg gt1_rxresetdone_r3;
(* ASYNC_REG = "TRUE" *)reg gt1_rxresetdone_vio_r;
(* ASYNC_REG = "TRUE" *)reg gt1_rxresetdone_vio_r2;
(* ASYNC_REG = "TRUE" *)reg gt1_rxresetdone_vio_r3;
reg [5:0] reset_counter = 0;
reg [3:0] reset_pulse;
//**************************** Wire Declarations ******************************//
//------------------------ GT Wrapper Wires ------------------------------
//________________________________________________________________________
//________________________________________________________________________
//GT0 (X1Y12)
//-------------------------- Channel - DRP Ports --------------------------
wire [8:0] gt0_drpaddr_i;
wire [15:0] gt0_drpdi_i;
wire [15:0] gt0_drpdo_i;
wire gt0_drpen_i;
wire gt0_drprdy_i;
wire gt0_drpwe_i;
//------------------------- Digital Monitor Ports --------------------------
wire [7:0] gt0_dmonitorout_i;
//----------------------------- Loopback Ports -----------------------------
wire [2:0] gt0_loopback_i;
//---------------------------- Power-Down Ports ----------------------------
wire [1:0] gt0_rxpd_i;
wire [1:0] gt0_txpd_i;
//------------------- RX Initialization and Reset Ports --------------------
wire gt0_eyescanreset_i;
wire gt0_rxuserrdy_i;
//------------------------ RX Margin Analysis Ports ------------------------
wire gt0_eyescandataerror_i;
wire gt0_eyescantrigger_i;
//----------------------- Receive Ports - CDR Ports ------------------------
wire gt0_rxcdrhold_i;
wire gt0_rxcdrovrden_i;
//----------------- Receive Ports - Clock Correction Ports -----------------
wire [1:0] gt0_rxclkcorcnt_i;
//---------------- Receive Ports - FPGA RX interface Ports -----------------
wire [31:0] gt0_rxdata_i;
//----------------- Receive Ports - Pattern Checker Ports ------------------
wire gt0_rxprbserr_i;
wire [2:0] gt0_rxprbssel_i;
//----------------- Receive Ports - Pattern Checker ports ------------------
wire gt0_rxprbscntreset_i;
//---------------- Receive Ports - RX 8B/10B Decoder Ports -----------------
wire [3:0] gt0_rxdisperr_i;
wire [3:0] gt0_rxnotintable_i;
//------------------------- Receive Ports - RX AFE -------------------------
wire gt0_gtxrxp_i;
//---------------------- Receive Ports - RX AFE Ports ----------------------
wire gt0_gtxrxn_i;
//----------------- Receive Ports - RX Buffer Bypass Ports -----------------
wire gt0_rxbufreset_i;
wire [2:0] gt0_rxbufstatus_i;
//------------ Receive Ports - RX Byte and Word Alignment Ports ------------
wire gt0_rxbyteisaligned_i;
wire gt0_rxbyterealign_i;
wire gt0_rxcommadet_i;
wire gt0_rxmcommaalignen_i;
wire gt0_rxpcommaalignen_i;
//------------------- Receive Ports - RX Equalizer Ports -------------------
wire gt0_rxdfelpmreset_i;
wire [6:0] gt0_rxmonitorout_i;
wire [1:0] gt0_rxmonitorsel_i;
//------------- Receive Ports - RX Fabric Output Control Ports -------------
wire gt0_rxoutclk_i;
wire gt0_rxoutclkfabric_i;
//----------- Receive Ports - RX Initialization and Reset Ports ------------
wire gt0_gtrxreset_i;
wire gt0_rxpcsreset_i;
wire gt0_rxpmareset_i;
//---------------- Receive Ports - RX Margin Analysis ports ----------------
wire gt0_rxlpmen_i;
//--------------- Receive Ports - RX Polarity Control Ports ----------------
wire gt0_rxpolarity_i;
//----------------- Receive Ports - RX8B/10B Decoder Ports -----------------
wire [3:0] gt0_rxchariscomma_i;
wire [3:0] gt0_rxcharisk_i;
//------------ Receive Ports -RX Initialization and Reset Ports ------------
wire gt0_rxresetdone_i;
//---------------------- TX Configurable Driver Ports ----------------------
wire [4:0] gt0_txpostcursor_i;
wire [4:0] gt0_txprecursor_i;
//------------------- TX Initialization and Reset Ports --------------------
wire gt0_gttxreset_i;
wire gt0_txuserrdy_i;
//-------------- Transmit Ports - 8b10b Encoder Control Ports --------------
wire [3:0] gt0_txchardispmode_i;
wire [3:0] gt0_txchardispval_i;
//---------------- Transmit Ports - Pattern Generator Ports ----------------
wire gt0_txprbsforceerr_i;
//-------------------- Transmit Ports - TX Buffer Ports --------------------
wire [1:0] gt0_txbufstatus_i;
//------------- Transmit Ports - TX Configurable Driver Ports --------------
wire [3:0] gt0_txdiffctrl_i;
wire [6:0] gt0_txmaincursor_i;
//---------------- Transmit Ports - TX Data Path interface -----------------
wire [31:0] gt0_txdata_i;
//-------------- Transmit Ports - TX Driver and OOB signaling --------------
wire gt0_gtxtxn_i;
wire gt0_gtxtxp_i;
//--------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
wire gt0_txoutclk_i;
wire gt0_txoutclkfabric_i;
wire gt0_txoutclkpcs_i;
//------------------- Transmit Ports - TX Gearbox Ports --------------------
wire [3:0] gt0_txcharisk_i;
//----------- Transmit Ports - TX Initialization and Reset Ports -----------
wire gt0_txpcsreset_i;
wire gt0_txpmareset_i;
wire gt0_txresetdone_i;
//--------------- Transmit Ports - TX Polarity Control Ports ---------------
wire gt0_txpolarity_i;
//---------------- Transmit Ports - pattern Generator Ports ----------------
wire [2:0] gt0_txprbssel_i;
//________________________________________________________________________
//________________________________________________________________________
//GT1 (X1Y13)
//-------------------------- Channel - DRP Ports --------------------------
wire [8:0] gt1_drpaddr_i;
wire [15:0] gt1_drpdi_i;
wire [15:0] gt1_drpdo_i;
wire