Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / niu_smx_status.v
// ========== Copyright Header Begin ==========================================
//
// OpenSPARC T2 Processor File: niu_smx_status.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 ============================================
module niu_smx_status(
/*AUTOARG*/
// Outputs
tid_valid_rdata, tid_valid_rdata_bus, tid_newarr_rdata,
tid_newarr_rdata_bus, resp_rcv_rdata, resp_rcv_rdata_bus,
timeout_rdata, timeout_rdata_bus, tid_xmited_rdata_bus,
tid_dirty_rdata_bus,
// Inputs
clk, reset_l, tid_valid_rst0, tid_valid_rst1, tid_valid_rst_addr0,
tid_valid_rst_addr1, tid_valid_set, tid_valid_set_addr,
tid_valid_rd, tid_valid_raddr, tid_newarr_rst,
tid_newarr_rst_addr, tid_newarr_set, tid_newarr_set_addr,
tid_newarr_rd, tid_newarr_raddr, resp_rcv_rst, resp_rcv_rst_addr,
resp_rcv_set, resp_rcv_set_addr, resp_rcv_rd, resp_rcv_raddr,
timeout_set, timeout_rst, timeout_set_addr, timeout_rst_addr,
timeout_rd, timeout_raddr, tid_xmited_set, tid_xmited_set_addr
);
input clk;
input reset_l;
input tid_valid_rst0; // rst by resp_cmdproc
input tid_valid_rst1; // rst by timer
input [5:0] tid_valid_rst_addr0;
input [5:0] tid_valid_rst_addr1;
input tid_valid_set; // set by req_cmd
input [5:0] tid_valid_set_addr;
input tid_valid_rd; // rd by resp_cmdproc
input [5:0] tid_valid_raddr;
output tid_valid_rdata;
output [63:0] tid_valid_rdata_bus; // rd by timer
input tid_newarr_rst; // rst by timer
input [5:0] tid_newarr_rst_addr;
input tid_newarr_set; // set by req_cmd
input [5:0] tid_newarr_set_addr;
input tid_newarr_rd; // rd by timer
input [5:0] tid_newarr_raddr;
output tid_newarr_rdata;
output [63:0] tid_newarr_rdata_bus; // rd by timer
input resp_rcv_rst; // rst by timer
input [5:0] resp_rcv_rst_addr;
input resp_rcv_set; // set by resp_cmdproc
input [5:0] resp_rcv_set_addr;
input resp_rcv_rd; // rd by timer
input [5:0] resp_rcv_raddr;
output resp_rcv_rdata;
output [63:0] resp_rcv_rdata_bus; // (rd by timer)
input timeout_set; // set by timer
input timeout_rst; // rst by tohdlr
input [5:0] timeout_set_addr;
input [5:0] timeout_rst_addr;
input timeout_rd; // rd by tohdlr
input [5:0] timeout_raddr;
output timeout_rdata;
output [63:0] timeout_rdata_bus; // rd by tohdlr
input tid_xmited_set; // rst by sii_req
input [5:0] tid_xmited_set_addr;
output [63:0] tid_xmited_rdata_bus; // rd by timer
output [63:0] tid_dirty_rdata_bus;
/*
niu_smx_arb_2c #(6) arb_tid_valid(
.req_a (tid_valid_rst0),
.req_b (tid_valid_rst1),
.muxin_a (tid_valid_rst_addr0 [5:0]),
.muxin_b (tid_valid_rst_addr1 [5:0]),
.ack_a (tid_valid_rst0_ack),
.ack_b (tid_valid_rst1_ack),
.selout (tid_valid_rst_addr [5:0])
);
*/
// 1 - valid
// 0 - non-valid
niu_smx_regflag tid_valid_flag(
.clk (clk),
.reset_l (reset_l),
.set (tid_valid_set),
.rst0 (tid_valid_rst0),
.rst1 (tid_valid_rst1),
.set_addr (tid_valid_set_addr [5:0]),
.rst_addr0 (tid_valid_rst_addr0 [5:0]),
.rst_addr1 (tid_valid_rst_addr1 [5:0]),
.rst_first (1'b1),
.rd (tid_valid_rd),
.raddr (tid_valid_raddr [5:0]),
.rdata (tid_valid_rdata),
.rdata_bus (tid_valid_rdata_bus [63:0])
);
wire tid_dirty_rdata;
wire tid_dirty_set= tid_valid_rst1 | // set this same time as valid rst by timer
(tid_dirty_rdata & 1'b0); // avoid vlint since tid_dirty_rdata not use
wire [5:0] tid_dirty_set_addr= tid_valid_rst_addr1;
wire tid_dirty_rst0= tid_valid_set; // reset dirty same time as valid entry set;
wire [5:0] tid_dirty_rst_addr0= tid_valid_set_addr;
niu_smx_regflag tid_dirty_flag(
.clk (clk),
.reset_l (reset_l),
.set (tid_dirty_set),
.rst0 (tid_dirty_rst0),
.rst1 (1'b0),
.set_addr (tid_dirty_set_addr [5:0]),
.rst_addr0 (tid_dirty_rst_addr0 [5:0]),
.rst_addr1 (tid_dirty_rst_addr0 [5:0]),
.rst_first (1'b1),
.rd (1'b0),
.raddr (6'h0),
.rdata (tid_dirty_rdata),
.rdata_bus (tid_dirty_rdata_bus [63:0])
);
/*
niu_smx_arb_2c #(6) arb_resp_rcv(
.req_a (resp_rcv_rst0),
.req_b (resp_rcv_rst1),
.muxin_a (resp_rcv_rst_addr0 [5:0]),
.muxin_b (resp_rcv_rst_addr1 [5:0]),
.ack_a (resp_rcv_rst0_ack),
.ack_b (resp_rcv_rst1_ack),
.selout (resp_rcv_rst_addr [5:0])
);
*/
niu_smx_regflag resp_rcv_flag(
.clk (clk),
.reset_l (reset_l),
.set (resp_rcv_set),
.rst0 (resp_rcv_rst),
.rst1 (1'b0),
.set_addr (resp_rcv_set_addr [5:0]),
.rst_addr0 (resp_rcv_rst_addr [5:0]),
.rst_addr1 (resp_rcv_rst_addr [5:0]),
.rst_first (1'b0),
.rd (resp_rcv_rd),
.raddr (resp_rcv_raddr [5:0]),
.rdata (resp_rcv_rdata),
.rdata_bus (resp_rcv_rdata_bus [63:0])
);
niu_smx_regflag timeout_flag(
.clk (clk),
.reset_l (reset_l),
.set (timeout_set),
.rst0 (timeout_rst),
.rst1 (1'b0),
.set_addr (timeout_set_addr [5:0]),
.rst_addr0 (timeout_rst_addr [5:0]),
.rst_addr1 (timeout_rst_addr [5:0]),
.rst_first (1'b0),
.rd (timeout_rd),
.raddr (timeout_raddr [5:0]),
.rdata (timeout_rdata ),
.rdata_bus (timeout_rdata_bus [63:0])
);
niu_smx_regflag tid_newarr_flag(
.clk (clk),
.reset_l (reset_l),
.set (tid_newarr_set),
.rst0 (tid_newarr_rst),
.rst1 (1'b0),
.set_addr (tid_newarr_set_addr [5:0]),
.rst_addr0 (tid_newarr_rst_addr [5:0]),
.rst_addr1 (tid_newarr_rst_addr [5:0]),
.rst_first (1'b0),
.rd (tid_newarr_rd),
.raddr (tid_newarr_raddr [5:0]),
.rdata (tid_newarr_rdata ),
.rdata_bus (tid_newarr_rdata_bus [63:0])
);
wire tid_xmited_rdata; // not use; put this to avoid vlint null port
// rst xmited bit at beginning of a transaction request
wire tid_xmited_rst= tid_valid_set | (tid_xmited_rdata & (1'b0));
wire [5:0] tid_xmited_rst_addr= tid_valid_set_addr;
niu_smx_regflag tid_xmited_flag(
.clk (clk),
.reset_l (reset_l),
.set (tid_xmited_set),
.rst0 (tid_xmited_rst),
.rst1 (1'b0),
.set_addr (tid_xmited_set_addr [5:0]),
.rst_addr0 (tid_xmited_rst_addr [5:0]),
.rst_addr1 (tid_xmited_rst_addr [5:0]),
.rst_first (1'b0),
.rd (1'b0),
.raddr (6'h0),
.rdata (tid_xmited_rdata),
.rdata_bus (tid_xmited_rdata_bus [63:0])
);
endmodule