Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / MDIO2P_IO.v
// ========== Copyright Header Begin ==========================================
//
// OpenSPARC T2 Processor File: MDIO2P_IO.v
// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
//
// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// For the avoidance of doubt, and except that if any non-GPL license
// choice is available it will apply instead, Sun elects to use only
// the General Public License version 2 (GPLv2) at this time for any
// software where a choice of GPL license versions is made
// available with the language indicating that GPLv2 or any later version
// may be used, or where a choice of which version of the GPL is applied is
// otherwise unspecified.
//
// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
// CA 95054 USA or visit www.sun.com if you need additional information or
// have any questions.
//
// ========== Copyright Header End ============================================
////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2003 Texas Instruments, Inc.
// All rights reserved
//
// This is an unpublished work created in the year stated above.
// Texas Instruments owns all rights in and to the work and intends to
// maintain it and protect it as unpublished copyright. In the event
// of either inadvertant or deliberate publication, the above stated
// date shall be treated as the year of first publication. In the event
// of such publication, Texas Instruments intends to enforce its rights
// in the work under the copyright laws as a published work.
//
// These commodities are under U.S. Government distribution license
// control. As such, they are not be re-exported without prior approval
// from the U.S. Department of Commerce.
//
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//
// FUNCTION: MDIO Clock muxing and CFG decode
// COMMENTS:
// VERSION: #VERSION#
// DATE: #DATE#
//
////////////////////////////////////////////////////////////////////////////////
`timescale 1ns / 1ps
module MDIO2P_IO
(
tcu_clk_stop,
tcu_scan_mode,
RESET,
MDCLK,
SCANEN,
SCANCLK,
CFG,
IO_MDCLK,
IO_RESET,
IO_CLAUSE45,
IO_PRTID,
IO_DEVID,
IO_BASEAD,
IO_ACRAD,
IO_IPRAD
);
////////////////////////////////////////////////////////////////////////////////
//
// Port Declarations
//
////////////////////////////////////////////////////////////////////////////////
input RESET; // Global reset
// Scan clock control
input tcu_clk_stop; // For N2 DFT clock control
input tcu_scan_mode; // For N2 DFT clock control
// MDIO Interface
input MDCLK; // Clock
// Scan Interface
input SCANEN; // Bypass MDIO2P clocks for scan
input SCANCLK; // Scan clock source
// Configuration Interface
input[15:0] CFG; // Configuration
output IO_CLAUSE45; // Clause45
output[4:0] IO_PRTID; // Port address ID
output[4:0] IO_DEVID; // Device address ID
output[4:0] IO_BASEAD; // Base address
output[3:0] IO_ACRAD; // AddrCtl register address
output[3:0] IO_IPRAD; // Indirect port register address
// Internal Connections
output IO_MDCLK; // Internal clock, after DFT muxing
output IO_RESET; // Internal reset, after DFT override
////////////////////////////////////////////////////////////////////////////////
//
// Clock muxing and reset control for test
//
////////////////////////////////////////////////////////////////////////////////
wire IO_MDCLK_mux;
wire tcu_clk_stop_sync;
wire tcu_clk_stop_sync_mux;
cl_a1_clk_mux2_8x hedwig_mdio2p_io_mux (
.in0(SCANCLK),
.in1(MDCLK),
.sel0(tcu_scan_mode),
.out(IO_MDCLK_mux));
// assign IO_MDCLK_mux = tcu_scan_mode ? SCANCLK : MDCLK;
assign IO_RESET = ~SCANEN & RESET;
SYNC_CELL SYNC_CELL_mdio (.D(tcu_clk_stop),.CP(IO_MDCLK_mux),.Q(tcu_clk_stop_sync));
assign tcu_clk_stop_sync_mux = tcu_scan_mode ? tcu_clk_stop : tcu_clk_stop_sync;
cl_a1_l1hdr_12x hedwig_mdio2p_io_l1 (
.l2clk(IO_MDCLK_mux),
.se(SCANEN),
.pce(1'b1),
.pce_ov(1'b0),
.stop(tcu_clk_stop_sync_mux),
.l1clk(IO_MDCLK));
////////////////////////////////////////////////////////////////////////////////
//
// General decode
// - CFG bus fields are extracted and named for clarity
// - vsmmdbase identifies LS 16 register locations, which must be readable if
// mapped to DEVID 30 or 31 (Clause 45 only).
//
////////////////////////////////////////////////////////////////////////////////
assign IO_CLAUSE45 = CFG[15];
assign IO_PRTID = CFG[14:10];
assign IO_DEVID = CFG[9:5];
assign IO_BASEAD = CFG[4:0];
assign IO_ACRAD = CFG[8:5];
assign IO_IPRAD = CFG[3:0];
endmodule