//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//// ////
|
//// ////
|
//// MAC_top.v ////
|
//// MAC_top.v ////
|
//// ////
|
//// ////
|
//// This file is part of the Ethernet IP core project ////
|
//// This file is part of the Ethernet IP core project ////
|
//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
|
//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
|
//// ////
|
//// ////
|
//// Author(s): ////
|
//// Author(s): ////
|
//// - Jon Gao (gaojon@yahoo.com) ////
|
//// - Jon Gao (gaojon@yahoo.com) ////
|
//// ////
|
//// ////
|
//// ////
|
//// ////
|
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//// ////
|
//// ////
|
//// Copyright (C) 2001 Authors ////
|
//// Copyright (C) 2001 Authors ////
|
//// ////
|
//// ////
|
//// This source file may be used and distributed without ////
|
//// This source file may be used and distributed without ////
|
//// restriction provided that this copyright statement is not ////
|
//// restriction provided that this copyright statement is not ////
|
//// removed from the file and that any derivative work contains ////
|
//// removed from the file and that any derivative work contains ////
|
//// the original copyright notice and the associated disclaimer. ////
|
//// the original copyright notice and the associated disclaimer. ////
|
//// ////
|
//// ////
|
//// This source file is free software; you can redistribute it ////
|
//// This source file is free software; you can redistribute it ////
|
//// and/or modify it under the terms of the GNU Lesser General ////
|
//// and/or modify it under the terms of the GNU Lesser General ////
|
//// Public License as published by the Free Software Foundation; ////
|
//// Public License as published by the Free Software Foundation; ////
|
//// either version 2.1 of the License, or (at your option) any ////
|
//// either version 2.1 of the License, or (at your option) any ////
|
//// later version. ////
|
//// later version. ////
|
//// ////
|
//// ////
|
//// This source is distributed in the hope that it will be ////
|
//// This source is distributed in the hope that it will be ////
|
//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
|
//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
|
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
|
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
|
//// PURPOSE. See the GNU Lesser General Public License for more ////
|
//// PURPOSE. See the GNU Lesser General Public License for more ////
|
//// details. ////
|
//// details. ////
|
//// ////
|
//// ////
|
//// You should have received a copy of the GNU Lesser General ////
|
//// You should have received a copy of the GNU Lesser General ////
|
//// Public License along with this source; if not, download it ////
|
//// Public License along with this source; if not, download it ////
|
//// from http://www.opencores.org/lgpl.shtml ////
|
//// from http://www.opencores.org/lgpl.shtml ////
|
//// ////
|
//// ////
|
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
// Revision 1.3 2006/01/19 14:07:52 maverickist
|
// Revision 1.3 2006/01/19 14:07:52 maverickist
|
// verification is complete.
|
// verification is complete.
|
//
|
//
|
// Revision 1.2 2005/12/16 06:44:13 Administrator
|
// Revision 1.2 2005/12/16 06:44:13 Administrator
|
// replaced tab with space.
|
// replaced tab with space.
|
// passed 9.6k length frame test.
|
// passed 9.6k length frame test.
|
//
|
//
|
// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
|
// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
|
// no message
|
// no message
|
//
|
//
|
|
|
module MAC_top(
|
module MAC_top(
|
//system signals
|
//system signals
|
input Reset ,
|
input Reset ,
|
input Clk_125M ,
|
input Clk_125M ,
|
input Clk_user ,
|
input Clk_user ,
|
input Clk_reg ,
|
input Clk_reg ,
|
output [2:0] Speed ,
|
output [2:0] Speed ,
|
//user interface
|
//user interface
|
output Rx_mac_ra ,
|
output Rx_mac_ra ,
|
input Rx_mac_rd ,
|
input Rx_mac_rd ,
|
output [31:0] Rx_mac_data ,
|
output [31:0] Rx_mac_data ,
|
output [1:0] Rx_mac_BE ,
|
output [1:0] Rx_mac_BE ,
|
output Rx_mac_pa ,
|
output Rx_mac_pa ,
|
output Rx_mac_sop ,
|
output Rx_mac_sop ,
|
output Rx_mac_eop ,
|
output Rx_mac_eop ,
|
//user interface
|
//user interface
|
output Tx_mac_wa ,
|
output Tx_mac_wa ,
|
input Tx_mac_wr ,
|
input Tx_mac_wr ,
|
input [31:0] Tx_mac_data ,
|
input [31:0] Tx_mac_data ,
|
input [1:0] Tx_mac_BE ,//big endian
|
input [1:0] Tx_mac_BE ,//big endian
|
input Tx_mac_sop ,
|
input Tx_mac_sop ,
|
input Tx_mac_eop ,
|
input Tx_mac_eop ,
|
//pkg_lgth fifo
|
//pkg_lgth fifo
|
input Pkg_lgth_fifo_rd ,
|
input Pkg_lgth_fifo_rd ,
|
output Pkg_lgth_fifo_ra ,
|
output Pkg_lgth_fifo_ra ,
|
output [15:0] Pkg_lgth_fifo_data ,
|
output [15:0] Pkg_lgth_fifo_data ,
|
//Phy interface
|
//Phy interface
|
//Phy interface
|
//Phy interface
|
output Gtx_clk ,//used only in GMII mode
|
output Gtx_clk ,//used only in GMII mode
|
input Rx_clk ,
|
input Rx_clk ,
|
input Tx_clk ,//used only in MII mode
|
input Tx_clk ,//used only in MII mode
|
output Tx_er ,
|
output Tx_er ,
|
output Tx_en ,
|
output Tx_en ,
|
output [7:0] Txd ,
|
output [7:0] Txd ,
|
input Rx_er ,
|
input Rx_er ,
|
input Rx_dv ,
|
input Rx_dv ,
|
input [7:0] Rxd ,
|
input [7:0] Rxd ,
|
input Crs ,
|
input Crs ,
|
input Col ,
|
input Col ,
|
//host interface
|
//host interface
|
input CSB ,
|
input CSB ,
|
input WRB ,
|
input WRB ,
|
input [15:0] CD_in ,
|
input [15:0] CD_in ,
|
output [15:0] CD_out ,
|
output [15:0] CD_out ,
|
input [7:0] CA ,
|
input [7:0] CA ,
|
//mdx
|
//mdx
|
output Mdo, // MII Management Data Output
|
output Mdo, // MII Management Data Output
|
output MdoEn, // MII Management Data Output Enable
|
output MdoEn, // MII Management Data Output Enable
|
input Mdi,
|
input Mdi,
|
output Mdc // MII Management Data Clock
|
output Mdc // MII Management Data Clock
|
|
|
);
|
);
|
//******************************************************************************
|
//******************************************************************************
|
//internal signals
|
//internal signals
|
//******************************************************************************
|
//******************************************************************************
|
//RMON interface
|
//RMON interface
|
wire [15:0] Rx_pkt_length_rmon ;
|
wire [15:0] Rx_pkt_length_rmon ;
|
wire Rx_apply_rmon ;
|
wire Rx_apply_rmon ;
|
wire [2:0] Rx_pkt_err_type_rmon ;
|
wire [2:0] Rx_pkt_err_type_rmon ;
|
wire [2:0] Rx_pkt_type_rmon ;
|
wire [2:0] Rx_pkt_type_rmon ;
|
wire [2:0] Tx_pkt_type_rmon ;
|
wire [2:0] Tx_pkt_type_rmon ;
|
wire [15:0] Tx_pkt_length_rmon ;
|
wire [15:0] Tx_pkt_length_rmon ;
|
wire Tx_apply_rmon ;
|
wire Tx_apply_rmon ;
|
wire [2:0] Tx_pkt_err_type_rmon ;
|
wire [2:0] Tx_pkt_err_type_rmon ;
|
//PHY interface
|
//PHY interface
|
wire MCrs_dv ;
|
wire MCrs_dv ;
|
wire [7:0] MRxD ;
|
wire [7:0] MRxD ;
|
wire MRxErr ;
|
wire MRxErr ;
|
//flow_control signals
|
//flow_control signals
|
wire [15:0] pause_quanta ;
|
wire [15:0] pause_quanta ;
|
wire pause_quanta_val ;
|
wire pause_quanta_val ;
|
//PHY interface
|
//PHY interface
|
wire [7:0] MTxD ;
|
wire [7:0] MTxD ;
|
wire MTxEn ;
|
wire MTxEn ;
|
wire MCRS ;
|
wire MCRS ;
|
//interface clk signals
|
//interface clk signals
|
wire MAC_tx_clk ;
|
wire MAC_tx_clk ;
|
wire MAC_rx_clk ;
|
wire MAC_rx_clk ;
|
wire MAC_tx_clk_div ;
|
wire MAC_tx_clk_div ;
|
wire MAC_rx_clk_div ;
|
wire MAC_rx_clk_div ;
|
//reg signals
|
//reg signals
|
wire [4:0] Tx_Hwmark ;
|
wire [4:0] Tx_Hwmark ;
|
wire [4:0] Tx_Lwmark ;
|
wire [4:0] Tx_Lwmark ;
|
wire pause_frame_send_en ;
|
wire pause_frame_send_en ;
|
wire [15:0] pause_quanta_set ;
|
wire [15:0] pause_quanta_set ;
|
wire MAC_tx_add_en ;
|
wire MAC_tx_add_en ;
|
wire FullDuplex ;
|
wire FullDuplex ;
|
wire [3:0] MaxRetry ;
|
wire [3:0] MaxRetry ;
|
wire [5:0] IFGset ;
|
wire [5:0] IFGset ;
|
wire [7:0] MAC_tx_add_prom_data ;
|
wire [7:0] MAC_tx_add_prom_data ;
|
wire [2:0] MAC_tx_add_prom_add ;
|
wire [2:0] MAC_tx_add_prom_add ;
|
wire MAC_tx_add_prom_wr ;
|
wire MAC_tx_add_prom_wr ;
|
wire tx_pause_en ;
|
wire tx_pause_en ;
|
wire xoff_cpu ;
|
wire xoff_cpu ;
|
wire xon_cpu ;
|
wire xon_cpu ;
|
//Rx host interface
|
//Rx host interface
|
wire MAC_rx_add_chk_en ;
|
wire MAC_rx_add_chk_en ;
|
wire [7:0] MAC_rx_add_prom_data ;
|
wire [7:0] MAC_rx_add_prom_data ;
|
wire [2:0] MAC_rx_add_prom_add ;
|
wire [2:0] MAC_rx_add_prom_add ;
|
wire MAC_rx_add_prom_wr ;
|
wire MAC_rx_add_prom_wr ;
|
wire broadcast_filter_en ;
|
wire broadcast_filter_en ;
|
wire [15:0] broadcast_MAX ;
|
wire [15:0] broadcast_MAX ;
|
wire RX_APPEND_CRC ;
|
wire RX_APPEND_CRC ;
|
wire [4:0] Rx_Hwmark ;
|
wire [4:0] Rx_Hwmark ;
|
wire [4:0] Rx_Lwmark ;
|
wire [4:0] Rx_Lwmark ;
|
wire CRC_chk_en ;
|
wire CRC_chk_en ;
|
wire [5:0] RX_IFG_SET ;
|
wire [5:0] RX_IFG_SET ;
|
wire [15:0] RX_MAX_LENGTH ;
|
wire [15:0] RX_MAX_LENGTH ;
|
wire [6:0] RX_MIN_LENGTH ;
|
wire [6:0] RX_MIN_LENGTH ;
|
//RMON host interface
|
//RMON host interface
|
wire [5:0] CPU_rd_addr ;
|
wire [5:0] CPU_rd_addr ;
|
wire CPU_rd_apply ;
|
wire CPU_rd_apply ;
|
wire CPU_rd_grant ;
|
wire CPU_rd_grant ;
|
wire [31:0] CPU_rd_dout ;
|
wire [31:0] CPU_rd_dout ;
|
//Phy int host interface
|
//Phy int host interface
|
wire Line_loop_en ;
|
wire Line_loop_en ;
|
//MII to CPU
|
//MII to CPU
|
wire [7:0] Divider ;
|
wire [7:0] Divider ;
|
wire [15:0] CtrlData ;
|
wire [15:0] CtrlData ;
|
wire [4:0] Rgad ;
|
wire [4:0] Rgad ;
|
wire [4:0] Fiad ;
|
wire [4:0] Fiad ;
|
wire NoPre ;
|
wire NoPre ;
|
wire WCtrlData ;
|
wire WCtrlData ;
|
wire RStat ;
|
wire RStat ;
|
wire ScanStat ;
|
wire ScanStat ;
|
wire Busy ;
|
wire Busy ;
|
wire LinkFail ;
|
wire LinkFail ;
|
wire Nvalid ;
|
wire Nvalid ;
|
wire [15:0] Prsd ;
|
wire [15:0] Prsd ;
|
wire WCtrlDataStart ;
|
wire WCtrlDataStart ;
|
wire RStatStart ;
|
wire RStatStart ;
|
wire UpdateMIIRX_DATAReg ;
|
wire UpdateMIIRX_DATAReg ;
|
wire [15:0] broadcast_bucket_depth ;
|
wire [15:0] broadcast_bucket_depth ;
|
wire [15:0] broadcast_bucket_interval ;
|
wire [15:0] broadcast_bucket_interval ;
|
wire Pkg_lgth_fifo_empty;
|
wire Pkg_lgth_fifo_empty;
|
|
|
reg rx_pkg_lgth_fifo_wr_tmp;
|
reg rx_pkg_lgth_fifo_wr_tmp;
|
reg rx_pkg_lgth_fifo_wr_tmp_pl1;
|
reg rx_pkg_lgth_fifo_wr_tmp_pl1;
|
reg rx_pkg_lgth_fifo_wr;
|
reg rx_pkg_lgth_fifo_wr;
|
|
|
//******************************************************************************
|
//******************************************************************************
|
//internal signals
|
//internal signals
|
//******************************************************************************
|
//******************************************************************************
|
MAC_rx U_MAC_rx(
|
MAC_rx U_MAC_rx(
|
.Reset (Reset ),
|
.Reset (Reset ),
|
.Clk_user (Clk_user ),
|
.Clk_user (Clk_user ),
|
.Clk (MAC_rx_clk_div ),
|
.Clk (MAC_rx_clk_div ),
|
//RMII interface (//PHY interface ),
|
//RMII interface (//PHY interface ),
|
.MCrs_dv (MCrs_dv ),
|
.MCrs_dv (MCrs_dv ),
|
.MRxD (MRxD ),
|
.MRxD (MRxD ),
|
.MRxErr (MRxErr ),
|
.MRxErr (MRxErr ),
|
//flow_control signals (//flow_control signals ),
|
//flow_control signals (//flow_control signals ),
|
.pause_quanta (pause_quanta ),
|
.pause_quanta (pause_quanta ),
|
.pause_quanta_val (pause_quanta_val ),
|
.pause_quanta_val (pause_quanta_val ),
|
//user interface (//user interface ),
|
//user interface (//user interface ),
|
.Rx_mac_ra (Rx_mac_ra ),
|
.Rx_mac_ra (Rx_mac_ra ),
|
.Rx_mac_rd (Rx_mac_rd ),
|
.Rx_mac_rd (Rx_mac_rd ),
|
.Rx_mac_data (Rx_mac_data ),
|
.Rx_mac_data (Rx_mac_data ),
|
.Rx_mac_BE (Rx_mac_BE ),
|
.Rx_mac_BE (Rx_mac_BE ),
|
.Rx_mac_pa (Rx_mac_pa ),
|
.Rx_mac_pa (Rx_mac_pa ),
|
.Rx_mac_sop (Rx_mac_sop ),
|
.Rx_mac_sop (Rx_mac_sop ),
|
.Rx_mac_eop (Rx_mac_eop ),
|
.Rx_mac_eop (Rx_mac_eop ),
|
//CPU (//CPU ),
|
//CPU (//CPU ),
|
.MAC_rx_add_chk_en (MAC_rx_add_chk_en ),
|
.MAC_rx_add_chk_en (MAC_rx_add_chk_en ),
|
.MAC_add_prom_data (MAC_rx_add_prom_data ),
|
.MAC_add_prom_data (MAC_rx_add_prom_data ),
|
.MAC_add_prom_add (MAC_rx_add_prom_add ),
|
.MAC_add_prom_add (MAC_rx_add_prom_add ),
|
.MAC_add_prom_wr (MAC_rx_add_prom_wr ),
|
.MAC_add_prom_wr (MAC_rx_add_prom_wr ),
|
.broadcast_filter_en (broadcast_filter_en ),
|
.broadcast_filter_en (broadcast_filter_en ),
|
.broadcast_bucket_depth (broadcast_bucket_depth ),
|
.broadcast_bucket_depth (broadcast_bucket_depth ),
|
.broadcast_bucket_interval (broadcast_bucket_interval ),
|
.broadcast_bucket_interval (broadcast_bucket_interval ),
|
.RX_APPEND_CRC (RX_APPEND_CRC ),
|
.RX_APPEND_CRC (RX_APPEND_CRC ),
|
.Rx_Hwmark (Rx_Hwmark ),
|
.Rx_Hwmark (Rx_Hwmark ),
|
.Rx_Lwmark (Rx_Lwmark ),
|
.Rx_Lwmark (Rx_Lwmark ),
|
.CRC_chk_en (CRC_chk_en ),
|
.CRC_chk_en (CRC_chk_en ),
|
.RX_IFG_SET (RX_IFG_SET ),
|
.RX_IFG_SET (RX_IFG_SET ),
|
.RX_MAX_LENGTH (RX_MAX_LENGTH ),
|
.RX_MAX_LENGTH (RX_MAX_LENGTH ),
|
.RX_MIN_LENGTH (RX_MIN_LENGTH ),
|
.RX_MIN_LENGTH (RX_MIN_LENGTH ),
|
//RMON interface (//RMON interface ),
|
//RMON interface (//RMON interface ),
|
.Rx_pkt_length_rmon (Rx_pkt_length_rmon ),
|
.Rx_pkt_length_rmon (Rx_pkt_length_rmon ),
|
.Rx_apply_rmon (Rx_apply_rmon ),
|
.Rx_apply_rmon (Rx_apply_rmon ),
|
.Rx_pkt_err_type_rmon (Rx_pkt_err_type_rmon ),
|
.Rx_pkt_err_type_rmon (Rx_pkt_err_type_rmon ),
|
.Rx_pkt_type_rmon (Rx_pkt_type_rmon )
|
.Rx_pkt_type_rmon (Rx_pkt_type_rmon )
|
);
|
);
|
|
|
MAC_tx U_MAC_tx(
|
MAC_tx U_MAC_tx(
|
.Reset (Reset ),
|
.Reset (Reset ),
|
.Clk (MAC_tx_clk_div ),
|
.Clk (MAC_tx_clk_div ),
|
.Clk_user (Clk_user ),
|
.Clk_user (Clk_user ),
|
//PHY interface (//PHY interface ),
|
//PHY interface (//PHY interface ),
|
.TxD (MTxD ),
|
.TxD (MTxD ),
|
.TxEn (MTxEn ),
|
.TxEn (MTxEn ),
|
.CRS (MCRS ),
|
.CRS (MCRS ),
|
//RMON (//RMON ),
|
//RMON (//RMON ),
|
.Tx_pkt_type_rmon (Tx_pkt_type_rmon ),
|
.Tx_pkt_type_rmon (Tx_pkt_type_rmon ),
|
.Tx_pkt_length_rmon (Tx_pkt_length_rmon ),
|
.Tx_pkt_length_rmon (Tx_pkt_length_rmon ),
|
.Tx_apply_rmon (Tx_apply_rmon ),
|
.Tx_apply_rmon (Tx_apply_rmon ),
|
.Tx_pkt_err_type_rmon (Tx_pkt_err_type_rmon ),
|
.Tx_pkt_err_type_rmon (Tx_pkt_err_type_rmon ),
|
//user interface (//user interface ),
|
//user interface (//user interface ),
|
.Tx_mac_wa (Tx_mac_wa ),
|
.Tx_mac_wa (Tx_mac_wa ),
|
.Tx_mac_wr (Tx_mac_wr ),
|
.Tx_mac_wr (Tx_mac_wr ),
|
.Tx_mac_data (Tx_mac_data ),
|
.Tx_mac_data (Tx_mac_data ),
|
.Tx_mac_BE (Tx_mac_BE ),
|
.Tx_mac_BE (Tx_mac_BE ),
|
.Tx_mac_sop (Tx_mac_sop ),
|
.Tx_mac_sop (Tx_mac_sop ),
|
.Tx_mac_eop (Tx_mac_eop ),
|
.Tx_mac_eop (Tx_mac_eop ),
|
//host interface (//host interface ),
|
//host interface (//host interface ),
|
.Tx_Hwmark (Tx_Hwmark ),
|
.Tx_Hwmark (Tx_Hwmark ),
|
.Tx_Lwmark (Tx_Lwmark ),
|
.Tx_Lwmark (Tx_Lwmark ),
|
.pause_frame_send_en (pause_frame_send_en ),
|
.pause_frame_send_en (pause_frame_send_en ),
|
.pause_quanta_set (pause_quanta_set ),
|
.pause_quanta_set (pause_quanta_set ),
|
.MAC_tx_add_en (MAC_tx_add_en ),
|
.MAC_tx_add_en (MAC_tx_add_en ),
|
.FullDuplex (FullDuplex ),
|
.FullDuplex (FullDuplex ),
|
.MaxRetry (MaxRetry ),
|
.MaxRetry (MaxRetry ),
|
.IFGset (IFGset ),
|
.IFGset (IFGset ),
|
.MAC_add_prom_data (MAC_tx_add_prom_data ),
|
.MAC_add_prom_data (MAC_tx_add_prom_data ),
|
.MAC_add_prom_add (MAC_tx_add_prom_add ),
|
.MAC_add_prom_add (MAC_tx_add_prom_add ),
|
.MAC_add_prom_wr (MAC_tx_add_prom_wr ),
|
.MAC_add_prom_wr (MAC_tx_add_prom_wr ),
|
.tx_pause_en (tx_pause_en ),
|
.tx_pause_en (tx_pause_en ),
|
.xoff_cpu (xoff_cpu ),
|
.xoff_cpu (xoff_cpu ),
|
.xon_cpu (xon_cpu ),
|
.xon_cpu (xon_cpu ),
|
//MAC_rx_flow (//MAC_rx_flow ),
|
//MAC_rx_flow (//MAC_rx_flow ),
|
.pause_quanta (pause_quanta ),
|
.pause_quanta (pause_quanta ),
|
.pause_quanta_val (pause_quanta_val )
|
.pause_quanta_val (pause_quanta_val )
|
);
|
);
|
|
|
|
|
assign Pkg_lgth_fifo_ra=!Pkg_lgth_fifo_empty;
|
assign Pkg_lgth_fifo_ra=!Pkg_lgth_fifo_empty;
|
always @ (posedge Reset or posedge MAC_rx_clk_div)
|
always @ (posedge Reset or posedge MAC_rx_clk_div)
|
if (Reset)
|
if (Reset)
|
rx_pkg_lgth_fifo_wr_tmp <=0;
|
rx_pkg_lgth_fifo_wr_tmp <=0;
|
else if(Rx_apply_rmon&&Rx_pkt_err_type_rmon==3'b100)
|
else if(Rx_apply_rmon&&Rx_pkt_err_type_rmon==3'b100)
|
rx_pkg_lgth_fifo_wr_tmp <=1;
|
rx_pkg_lgth_fifo_wr_tmp <=1;
|
else
|
else
|
rx_pkg_lgth_fifo_wr_tmp <=0;
|
rx_pkg_lgth_fifo_wr_tmp <=0;
|
|
|
always @ (posedge Reset or posedge MAC_rx_clk_div)
|
always @ (posedge Reset or posedge MAC_rx_clk_div)
|
if (Reset)
|
if (Reset)
|
rx_pkg_lgth_fifo_wr_tmp_pl1 <=0;
|
rx_pkg_lgth_fifo_wr_tmp_pl1 <=0;
|
else
|
else
|
rx_pkg_lgth_fifo_wr_tmp_pl1 <=rx_pkg_lgth_fifo_wr_tmp;
|
rx_pkg_lgth_fifo_wr_tmp_pl1 <=rx_pkg_lgth_fifo_wr_tmp;
|
|
|
always @ (posedge Reset or posedge MAC_rx_clk_div)
|
always @ (posedge Reset or posedge MAC_rx_clk_div)
|
if (Reset)
|
if (Reset)
|
rx_pkg_lgth_fifo_wr <=0;
|
rx_pkg_lgth_fifo_wr <=0;
|
else if(rx_pkg_lgth_fifo_wr_tmp&!rx_pkg_lgth_fifo_wr_tmp_pl1)
|
else if(rx_pkg_lgth_fifo_wr_tmp&!rx_pkg_lgth_fifo_wr_tmp_pl1)
|
rx_pkg_lgth_fifo_wr <=1;
|
rx_pkg_lgth_fifo_wr <=1;
|
else
|
else
|
rx_pkg_lgth_fifo_wr <=0;
|
rx_pkg_lgth_fifo_wr <=0;
|
|
|
afifo U_rx_pkg_lgth_fifo (
|
afifo U_rx_pkg_lgth_fifo (
|
.din (RX_APPEND_CRC?Rx_pkt_length_rmon:Rx_pkt_length_rmon-4),
|
.din (RX_APPEND_CRC?Rx_pkt_length_rmon:Rx_pkt_length_rmon-4),
|
.wr_en (rx_pkg_lgth_fifo_wr ),
|
.wr_en (rx_pkg_lgth_fifo_wr ),
|
.wr_clk (MAC_rx_clk_div ),
|
.wr_clk (MAC_rx_clk_div ),
|
.rd_en (Pkg_lgth_fifo_rd ),
|
.rd_en (Pkg_lgth_fifo_rd ),
|
.rd_clk (Clk_user ),
|
.rd_clk (Clk_user ),
|
.ainit (Reset ),
|
.ainit (Reset ),
|
.dout (Pkg_lgth_fifo_data ),
|
.dout (Pkg_lgth_fifo_data ),
|
.full ( ),
|
.full ( ),
|
.almost_full ( ),
|
.almost_full ( ),
|
.empty (Pkg_lgth_fifo_empty ),
|
.empty (Pkg_lgth_fifo_empty ),
|
.wr_count ( ),
|
.wr_count ( ),
|
.rd_count ( ),
|
.rd_count ( ),
|
.rd_ack ( ),
|
.rd_ack ( ),
|
.wr_ack ( ));
|
.wr_ack ( ));
|
|
|
|
|
RMON U_RMON(
|
RMON U_RMON(
|
.Clk (Clk_reg ),
|
.Clk (Clk_reg ),
|
.Reset (Reset ),
|
.Reset (Reset ),
|
//Tx_RMON (//Tx_RMON ),
|
//Tx_RMON (//Tx_RMON ),
|
.Tx_pkt_type_rmon (Tx_pkt_type_rmon ),
|
.Tx_pkt_type_rmon (Tx_pkt_type_rmon ),
|
.Tx_pkt_length_rmon (Tx_pkt_length_rmon ),
|
.Tx_pkt_length_rmon (Tx_pkt_length_rmon ),
|
.Tx_apply_rmon (Tx_apply_rmon ),
|
.Tx_apply_rmon (Tx_apply_rmon ),
|
.Tx_pkt_err_type_rmon (Tx_pkt_err_type_rmon ),
|
.Tx_pkt_err_type_rmon (Tx_pkt_err_type_rmon ),
|
//Tx_RMON (//Tx_RMON ),
|
//Tx_RMON (//Tx_RMON ),
|
.Rx_pkt_type_rmon (Rx_pkt_type_rmon ),
|
.Rx_pkt_type_rmon (Rx_pkt_type_rmon ),
|
.Rx_pkt_length_rmon (Rx_pkt_length_rmon ),
|
.Rx_pkt_length_rmon (Rx_pkt_length_rmon ),
|
.Rx_apply_rmon (Rx_apply_rmon ),
|
.Rx_apply_rmon (Rx_apply_rmon ),
|
.Rx_pkt_err_type_rmon (Rx_pkt_err_type_rmon ),
|
.Rx_pkt_err_type_rmon (Rx_pkt_err_type_rmon ),
|
//CPU (//CPU ),
|
//CPU (//CPU ),
|
.CPU_rd_addr (CPU_rd_addr ),
|
.CPU_rd_addr (CPU_rd_addr ),
|
.CPU_rd_apply (CPU_rd_apply ),
|
.CPU_rd_apply (CPU_rd_apply ),
|
.CPU_rd_grant (CPU_rd_grant ),
|
.CPU_rd_grant (CPU_rd_grant ),
|
.CPU_rd_dout (CPU_rd_dout )
|
.CPU_rd_dout (CPU_rd_dout )
|
);
|
);
|
|
|
Phy_int U_Phy_int(
|
Phy_int U_Phy_int(
|
.Reset (Reset ),
|
.Reset (Reset ),
|
.MAC_rx_clk (MAC_rx_clk ),
|
.MAC_rx_clk (MAC_rx_clk ),
|
.MAC_tx_clk (MAC_tx_clk ),
|
.MAC_tx_clk (MAC_tx_clk ),
|
//Rx interface (//Rx interface ),
|
//Rx interface (//Rx interface ),
|
.MCrs_dv (MCrs_dv ),
|
.MCrs_dv (MCrs_dv ),
|
.MRxD (MRxD ),
|
.MRxD (MRxD ),
|
.MRxErr (MRxErr ),
|
.MRxErr (MRxErr ),
|
//Tx interface (//Tx interface ),
|
//Tx interface (//Tx interface ),
|
.MTxD (MTxD ),
|
.MTxD (MTxD ),
|
.MTxEn (MTxEn ),
|
.MTxEn (MTxEn ),
|
.MCRS (MCRS ),
|
.MCRS (MCRS ),
|
//Phy interface (//Phy interface ),
|
//Phy interface (//Phy interface ),
|
.Tx_er (Tx_er ),
|
.Tx_er (Tx_er ),
|
.Tx_en (Tx_en ),
|
.Tx_en (Tx_en ),
|
.Txd (Txd ),
|
.Txd (Txd ),
|
.Rx_er (Rx_er ),
|
.Rx_er (Rx_er ),
|
.Rx_dv (Rx_dv ),
|
.Rx_dv (Rx_dv ),
|
.Rxd (Rxd ),
|
.Rxd (Rxd ),
|
.Crs (Crs ),
|
.Crs (Crs ),
|
.Col (Col ),
|
.Col (Col ),
|
//host interface (//host interface ),
|
//host interface (//host interface ),
|
.Line_loop_en (Line_loop_en ),
|
.Line_loop_en (Line_loop_en ),
|
.Speed (Speed )
|
.Speed (Speed )
|
);
|
);
|
|
|
Clk_ctrl U_Clk_ctrl(
|
Clk_ctrl U_Clk_ctrl(
|
.Reset (Reset ),
|
.Reset (Reset ),
|
.Clk_125M (Clk_125M ),
|
.Clk_125M (Clk_125M ),
|
//host interface (//host interface ),
|
//host interface (//host interface ),
|
.Speed (Speed ),
|
.Speed (Speed ),
|
//Phy interface (//Phy interface ),
|
//Phy interface (//Phy interface ),
|
.Gtx_clk (Gtx_clk ),
|
.Gtx_clk (Gtx_clk ),
|
.Rx_clk (Rx_clk ),
|
.Rx_clk (Rx_clk ),
|
.Tx_clk (Tx_clk ),
|
.Tx_clk (Tx_clk ),
|
//interface clk (//interface clk ),
|
//interface clk (//interface clk ),
|
.MAC_tx_clk (MAC_tx_clk ),
|
.MAC_tx_clk (MAC_tx_clk ),
|
.MAC_rx_clk (MAC_rx_clk ),
|
.MAC_rx_clk (MAC_rx_clk ),
|
.MAC_tx_clk_div (MAC_tx_clk_div ),
|
.MAC_tx_clk_div (MAC_tx_clk_div ),
|
.MAC_rx_clk_div (MAC_rx_clk_div )
|
.MAC_rx_clk_div (MAC_rx_clk_div )
|
);
|
);
|
|
|
eth_miim U_eth_miim(
|
eth_miim U_eth_miim(
|
.Clk (Clk_reg ),
|
.Clk (Clk_reg ),
|
.Reset (Reset ),
|
.Reset (Reset ),
|
.Divider (Divider ),
|
.Divider (Divider ),
|
.NoPre (NoPre ),
|
.NoPre (NoPre ),
|
.CtrlData (CtrlData ),
|
.CtrlData (CtrlData ),
|
.Rgad (Rgad ),
|
.Rgad (Rgad ),
|
.Fiad (Fiad ),
|
.Fiad (Fiad ),
|
.WCtrlData (WCtrlData ),
|
.WCtrlData (WCtrlData ),
|
.RStat (RStat ),
|
.RStat (RStat ),
|
.ScanStat (ScanStat ),
|
.ScanStat (ScanStat ),
|
.Mdo (Mdo ),
|
.Mdo (Mdo ),
|
.MdoEn (MdoEn ),
|
.MdoEn (MdoEn ),
|
.Mdi (Mdi ),
|
.Mdi (Mdi ),
|
.Mdc (Mdc ),
|
.Mdc (Mdc ),
|
.Busy (Busy ),
|
.Busy (Busy ),
|
.Prsd (Prsd ),
|
.Prsd (Prsd ),
|
.LinkFail (LinkFail ),
|
.LinkFail (LinkFail ),
|
.Nvalid (Nvalid ),
|
.Nvalid (Nvalid ),
|
.WCtrlDataStart (WCtrlDataStart ),
|
.WCtrlDataStart (WCtrlDataStart ),
|
.RStatStart (RStatStart ),
|
.RStatStart (RStatStart ),
|
.UpdateMIIRX_DATAReg (UpdateMIIRX_DATAReg ));
|
.UpdateMIIRX_DATAReg (UpdateMIIRX_DATAReg ));
|
|
|
Reg_int U_Reg_int(
|
Reg_int U_Reg_int(
|
.Reset (Reset ),
|
.Reset (Reset ),
|
.Clk_reg (Clk_reg ),
|
.Clk_reg (Clk_reg ),
|
.CSB (CSB ),
|
.CSB (CSB ),
|
.WRB (WRB ),
|
.WRB (WRB ),
|
.CD_in (CD_in ),
|
.CD_in (CD_in ),
|
.CD_out (CD_out ),
|
.CD_out (CD_out ),
|
.CA (CA ),
|
.CA (CA ),
|
//Tx host interface (//Tx host interface ),
|
//Tx host interface (//Tx host interface ),
|
.Tx_Hwmark (Tx_Hwmark ),
|
.Tx_Hwmark (Tx_Hwmark ),
|
.Tx_Lwmark (Tx_Lwmark ),
|
.Tx_Lwmark (Tx_Lwmark ),
|
.pause_frame_send_en (pause_frame_send_en ),
|
.pause_frame_send_en (pause_frame_send_en ),
|
.pause_quanta_set (pause_quanta_set ),
|
.pause_quanta_set (pause_quanta_set ),
|
.MAC_tx_add_en (MAC_tx_add_en ),
|
.MAC_tx_add_en (MAC_tx_add_en ),
|
.FullDuplex (FullDuplex ),
|
.FullDuplex (FullDuplex ),
|
.MaxRetry (MaxRetry ),
|
.MaxRetry (MaxRetry ),
|
.IFGset (IFGset ),
|
.IFGset (IFGset ),
|
.MAC_tx_add_prom_data (MAC_tx_add_prom_data ),
|
.MAC_tx_add_prom_data (MAC_tx_add_prom_data ),
|
.MAC_tx_add_prom_add (MAC_tx_add_prom_add ),
|
.MAC_tx_add_prom_add (MAC_tx_add_prom_add ),
|
.MAC_tx_add_prom_wr (MAC_tx_add_prom_wr ),
|
.MAC_tx_add_prom_wr (MAC_tx_add_prom_wr ),
|
.tx_pause_en (tx_pause_en ),
|
.tx_pause_en (tx_pause_en ),
|
.xoff_cpu (xoff_cpu ),
|
.xoff_cpu (xoff_cpu ),
|
.xon_cpu (xon_cpu ),
|
.xon_cpu (xon_cpu ),
|
//Rx host interface (//Rx host interface ),
|
//Rx host interface (//Rx host interface ),
|
.MAC_rx_add_chk_en (MAC_rx_add_chk_en ),
|
.MAC_rx_add_chk_en (MAC_rx_add_chk_en ),
|
.MAC_rx_add_prom_data (MAC_rx_add_prom_data ),
|
.MAC_rx_add_prom_data (MAC_rx_add_prom_data ),
|
.MAC_rx_add_prom_add (MAC_rx_add_prom_add ),
|
.MAC_rx_add_prom_add (MAC_rx_add_prom_add ),
|
.MAC_rx_add_prom_wr (MAC_rx_add_prom_wr ),
|
.MAC_rx_add_prom_wr (MAC_rx_add_prom_wr ),
|
.broadcast_filter_en (broadcast_filter_en ),
|
.broadcast_filter_en (broadcast_filter_en ),
|
.broadcast_bucket_depth (broadcast_bucket_depth ),
|
.broadcast_bucket_depth (broadcast_bucket_depth ),
|
.broadcast_bucket_interval (broadcast_bucket_interval ),
|
.broadcast_bucket_interval (broadcast_bucket_interval ),
|
.RX_APPEND_CRC (RX_APPEND_CRC ),
|
.RX_APPEND_CRC (RX_APPEND_CRC ),
|
.Rx_Hwmark (Rx_Hwmark ),
|
.Rx_Hwmark (Rx_Hwmark ),
|
.Rx_Lwmark (Rx_Lwmark ),
|
.Rx_Lwmark (Rx_Lwmark ),
|
.CRC_chk_en (CRC_chk_en ),
|
.CRC_chk_en (CRC_chk_en ),
|
.RX_IFG_SET (RX_IFG_SET ),
|
.RX_IFG_SET (RX_IFG_SET ),
|
.RX_MAX_LENGTH (RX_MAX_LENGTH ),
|
.RX_MAX_LENGTH (RX_MAX_LENGTH ),
|
.RX_MIN_LENGTH (RX_MIN_LENGTH ),
|
.RX_MIN_LENGTH (RX_MIN_LENGTH ),
|
//RMON host interface (//RMON host interface ),
|
//RMON host interface (//RMON host interface ),
|
.CPU_rd_addr (CPU_rd_addr ),
|
.CPU_rd_addr (CPU_rd_addr ),
|
.CPU_rd_apply (CPU_rd_apply ),
|
.CPU_rd_apply (CPU_rd_apply ),
|
.CPU_rd_grant (CPU_rd_grant ),
|
.CPU_rd_grant (CPU_rd_grant ),
|
.CPU_rd_dout (CPU_rd_dout ),
|
.CPU_rd_dout (CPU_rd_dout ),
|
//Phy int host interface (//Phy int host interface ),
|
//Phy int host interface (//Phy int host interface ),
|
.Line_loop_en (Line_loop_en ),
|
.Line_loop_en (Line_loop_en ),
|
.Speed (Speed ),
|
.Speed (Speed ),
|
//MII to CPU (//MII to CPU ),
|
//MII to CPU (//MII to CPU ),
|
.Divider (Divider ),
|
.Divider (Divider ),
|
.CtrlData (CtrlData ),
|
.CtrlData (CtrlData ),
|
.Rgad (Rgad ),
|
.Rgad (Rgad ),
|
.Fiad (Fiad ),
|
.Fiad (Fiad ),
|
.NoPre (NoPre ),
|
.NoPre (NoPre ),
|
.WCtrlData (WCtrlData ),
|
.WCtrlData (WCtrlData ),
|
.RStat (RStat ),
|
.RStat (RStat ),
|
.ScanStat (ScanStat ),
|
.ScanStat (ScanStat ),
|
.Busy (Busy ),
|
.Busy (Busy ),
|
.LinkFail (LinkFail ),
|
.LinkFail (LinkFail ),
|
.Nvalid (Nvalid ),
|
.Nvalid (Nvalid ),
|
.Prsd (Prsd ),
|
.Prsd (Prsd ),
|
.WCtrlDataStart (WCtrlDataStart ),
|
.WCtrlDataStart (WCtrlDataStart ),
|
.RStatStart (RStatStart ),
|
.RStatStart (RStatStart ),
|
.UpdateMIIRX_DATAReg (UpdateMIIRX_DATAReg )
|
.UpdateMIIRX_DATAReg (UpdateMIIRX_DATAReg )
|
);
|
);
|
|
|
endmodule
|
endmodule
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|