OpenCores
URL https://opencores.org/ocsvn/rxaui_interface_and_xaui_to_rxaui_interface_adapter/rxaui_interface_and_xaui_to_rxaui_interface_adapter/trunk

Subversion Repositories rxaui_interface_and_xaui_to_rxaui_interface_adapter

[/] [rxaui_interface_and_xaui_to_rxaui_interface_adapter/] [RxPath/] [sip_rxaui_rx_top.v] - Rev 2

Compare with Previous | Blame | View Log

//-----------------------------------------------------------------------------
// Title         : Rxaui Rx top
// Project       : SIP
//-----------------------------------------------------------------------------
// File          : sip_rxaui_rx_top.v
// Author        : Lior Valency
// Created       : 17/02/2008 
// Last modified : 17/02/2008 
//-----------------------------------------------------------------------------
// Description : This is the top of rxaui receive block the purpose of this block
// is to receive data from serdes and to separate it to 2 different lanes.     
//-----------------------------------------------------------------------------
// Copyright (c) 2007  Marvell International Ltd.
//
// THIS CODE CONTAINS CONFIDENTIAL INFORMATION OF MARVELL SEMICONDUCTOR, INC.
// NO RIGHTS ARE GRANTED HEREIN UNDER ANY PATENT, MASK WORK RIGHT OR COPYRIGHT
// OF MARVELL OR ANY THIRD PARTY. MARVELL RESERVES THE RIGHT AT ITS SOLE
// DISCRETION TO REQUEST THAT THIS CODE BE IMMEDIATELY RETURNED TO MARVELL.
// THIS CODE IS PROVIDED "AS IS". MARVELL MAKES NO WARRANTIES, EXPRESS,
// IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, COMPLETENESS OR PERFORMANCE.
//
//------------------------------------------------------------------------------
// Modification history :
// 12/12/2007  : created
//-----------------------------------------------------------------------------
`timescale 10ps / 10ps
 
 
module sip_rxaui_rx_top(/*AUTOARG*/
   // Outputs
   lock, rxdata_serdes0, rxdata_serdes1, rxaui_status,
   // Inputs
   serdes_rx_clk, serdes_rx_clk_div2, serdes_rx_clk_reset_,
   serdes_rx_clk_reset, serdes_rx_clk_div2_reset_, rx_clk0, rx_clk1,
   media_interface_mode, serdes_mode, lane0_sync_ok, lane1_sync_ok,
   s_sigdet, serdes_rx_data
   );
 
`include "sip_rxaui_params.inc"
 
   /* AUTO_CONSTANT (1'b0 or 1'b1 or 10'd0)*/
 
   ///////////////
   // INTERFACE //
   ///////////////
 
   // General
   input                               serdes_rx_clk;
   input 			       serdes_rx_clk_div2;
   input 			       serdes_rx_clk_reset_;
   input 			       serdes_rx_clk_reset;
   input 			       serdes_rx_clk_div2_reset_;
   input 			       rx_clk0;	
   input 			       rx_clk1;	
 
   // Configuration
   input 			       media_interface_mode;	
   input 			       serdes_mode;
 
   // XPCS interface
   input 			       lane0_sync_ok;	
   input 			       lane1_sync_ok;	
   output 			       lock;
   output [SERDES_DATA_W-1:0] 	       rxdata_serdes0;		
   output [SERDES_DATA_W-1:0] 	       rxdata_serdes1;	
 
   // Serdes interface
   input 			       s_sigdet;
   input [SERDES_DATA_W-1:0] 	       serdes_rx_data;
 
   // Status
   output [STATUS_REG_W-1:0] 	       rxaui_status;
 
 
   // 
 
   /*AUTOOUTPUT*/
   // Beginning of automatic outputs (from unused autoinst outputs)
   // End of automatics
   /*AUTOINPUT*/
   // Beginning of automatic inputs (from unused autoinst inputs)
   // End of automatics
   /*AUTOWIRE*/
   // Beginning of automatic wires (for undeclared instantiated-module outputs)
   // End of automatics
 
 
 
   ////////////////////
   // INTERNAL WIRES //
   ////////////////////
   wire			               comma_aligned_en;		
   wire [SERDES_DATA_W-1:0] 	       rxdata_rxaui_lane0;	
   wire [SERDES_DATA_W-1:0] 	       rxdata_rxaui_lane1;	
   wire [STD_DATA_W-1:0] 	       lane0_rx;		
   wire [STD_DATA_W-1:0] 	       lane1_rx;		
   wire [19:0] 			       rx_aligned_data;	
 
   /* sip_xpcs_comma_detect AUTO_TEMPLATE(
    .rout		 (rx_aligned_data[SERDES_DATA_W-1:0]),
    .bypass		 ({1'b0}),
    .clk		 (serdes_rx_clk),
    .comma_valid0	 ({1'b0}), // Only if use internal sync-sm
    .comma_valid1	 ({1'b0}), // Only if use internal sync-sm
    .commaa		 ({10'd0}), // Not in use 
    .commab		 ({10'd0}), // Not in use
    .data_special_valid0 ({1'b0}), // Only if use internal sync-sm
    .data_special_valid1 ({1'b0}), // Only if use internal sync-sm
    .reset		 (serdes_rx_clk_reset),
    .rin                 (serdes_rx_data[SERDES_DATA_W-1:0]),
    .sel_comma		 ({1'b1}), // use standard 7 bits comma
    .en_comma_align_glob (comma_aligned_en),
    .rf_en_2sync	 ({1'b0}), // Use external sync-sm   
    .sigdet		 (s_sigdet),
    );*/
 
   sip_xpcs_comma_detect
     xpcs_comma_detect(/*AUTOINST*/
			  // Outputs
			  .lock			(lock),
			  .rout			(rx_aligned_data[SERDES_DATA_W-1:0]), // Templated
			  // Inputs
			  .bypass		({1'b0}),	 // Templated
			  .clk			(serdes_rx_clk), // Templated
			  .comma_valid0		({1'b0}),	 // Templated
			  .comma_valid1		({1'b0}),	 // Templated
			  .commaa		({10'd0}),	 // Templated
			  .commab		({10'd0}),	 // Templated
			  .data_special_valid0	({1'b0}),	 // Templated
			  .data_special_valid1	({1'b0}),	 // Templated
			  .reset		(serdes_rx_clk_reset), // Templated
			  .rin			(serdes_rx_data[SERDES_DATA_W-1:0]), // Templated
			  .sel_comma		({1'b1}),	 // Templated
			  .sigdet		(s_sigdet),	 // Templated
			  .en_comma_align_glob	(comma_aligned_en), // Templated
			  .rf_en_2sync		({1'b0}));	 // Templated
 
   /* sip_rxaui_aa_detection AUTO_TEMPLATE(
    .reset_		(serdes_rx_clk_reset_),
    .clk		(serdes_rx_clk),
    );*/
 
   sip_rxaui_aa_detection
     sip_rxaui_aa_detection(/*AUTOINST*/
			    // Outputs
			    .lane0_rx		(lane0_rx[STD_DATA_W-1:0]),
			    .lane1_rx		(lane1_rx[STD_DATA_W-1:0]),
			    .rxaui_status	(rxaui_status[STATUS_REG_W-1:0]),
			    // Inputs
			    .clk		(serdes_rx_clk), // Templated
			    .reset_		(serdes_rx_clk_reset_), // Templated
			    .serdes_mode	(serdes_mode),
			    .rx_aligned_data	(rx_aligned_data[SERDES_DATA_W-1:0]),
			    .serdes_rx_data	(serdes_rx_data[SERDES_DATA_W-1:0]));
 
   /* sip_phase_sync_fifo_fast_2_slow AUTO_TEMPLATE(
    .fifo_data_out	({rxdata_rxaui_lane1[SERDES_DATA_W-1:STD_DATA_W],rxdata_rxaui_lane0[SERDES_DATA_W-1:STD_DATA_W],rxdata_rxaui_lane1[STD_DATA_W-1:0],rxdata_rxaui_lane0[STD_DATA_W-1:0]}),
    .fifo_data_in	({lane1_rx[STD_DATA_W-1:0],lane0_rx[STD_DATA_W-1:0]}),
    .wr_clk		(serdes_rx_clk),
    .rd_clk		(serdes_rx_clk_div2),
    .wr_reset_		(serdes_rx_clk_reset_),
    .rd_reset_		(serdes_rx_clk_div2_reset_),
    );*/
 
   sip_phase_sync_fifo_fast_2_slow
     sip_phase_sync_fifo_fast_2_slow(/*AUTOINST*/
				     // Outputs
				     .fifo_data_out	({rxdata_rxaui_lane1[SERDES_DATA_W-1:STD_DATA_W],rxdata_rxaui_lane0[SERDES_DATA_W-1:STD_DATA_W],rxdata_rxaui_lane1[STD_DATA_W-1:0],rxdata_rxaui_lane0[STD_DATA_W-1:0]}), // Templated
				     // Inputs
				     .wr_clk		(serdes_rx_clk), // Templated
				     .rd_clk		(serdes_rx_clk_div2), // Templated
				     .wr_reset_		(serdes_rx_clk_reset_), // Templated
				     .rd_reset_		(serdes_rx_clk_div2_reset_), // Templated
				     .fifo_data_in	({lane1_rx[STD_DATA_W-1:0],lane0_rx[STD_DATA_W-1:0]})); // Templated
 
   /*sip_rxaui_rx_glue  AUTO_TEMPLATE(
   );*/   
   sip_rxaui_rx_glue
     sip_rxaui_rx_glue(/*AUTOINST*/
		       // Outputs
		       .comma_aligned_en(comma_aligned_en),
		       .rxdata_serdes0	(rxdata_serdes0[SERDES_DATA_W-1:0]),
		       .rxdata_serdes1	(rxdata_serdes1[SERDES_DATA_W-1:0]),
		       // Inputs
		       .rx_clk0		(rx_clk0),
		       .rx_clk1		(rx_clk1),
		       .media_interface_mode(media_interface_mode),
		       .serdes_mode	(serdes_mode),
		       .rxdata_rxaui_lane0(rxdata_rxaui_lane0[SERDES_DATA_W-1:0]),
		       .rxdata_rxaui_lane1(rxdata_rxaui_lane1[SERDES_DATA_W-1:0]),
		       .serdes_rx_data	(serdes_rx_data[SERDES_DATA_W-1:0]),
		       .lane0_sync_ok	(lane0_sync_ok),
		       .lane1_sync_ok	(lane1_sync_ok));
 
endmodule // sip_rxaui_rx_top
 
// Local Variables:
// verilog-library-directories:( "." "/proj1/galileo101/tomcat/MODELS/current/Model_link/")
// End:
 
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.