Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / model / pcie / peu / peu_csr.hpp
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: peu_csr.hpp
4// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
5// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
6//
7// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8//
9// This program is free software; you can redistribute it and/or modify
10// it under the terms of the GNU General Public License as published by
11// the Free Software Foundation; version 2 of the License.
12//
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21//
22// For the avoidance of doubt, and except that if any non-GPL license
23// choice is available it will apply instead, Sun elects to use only
24// the General Public License version 2 (GPLv2) at this time for any
25// software where a choice of GPL license versions is made
26// available with the language indicating that GPLv2 or any later version
27// may be used, or where a choice of which version of the GPL is applied is
28// otherwise unspecified.
29//
30// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
31// CA 95054 USA or visit www.sun.com if you need additional information or
32// have any questions.
33//
34// ========== Copyright Header End ============================================
35#ifndef INC_peu_csr_hpp__
36#define INC_peu_csr_hpp__
37
38#include <systemc.h>
39
40#include "pcie_common/config.hpp"
41#include "peu_defines.hpp"
42#include "pcie_common/csr_if_port.hpp"
43
44#include "pcie_common/data_port.hpp"
45#include "pcie_common/logger.hpp"
46
47#include <queue>
48
49#define CSR_ADDR_T sc_uint<32>
50#define CSR_DATA_T sc_uint<64>
51
52namespace pcie {
53
54 /** CSR Ring Intf packet format */
55 class csr_pkt {
56 public:
57 bool is_rsp;
58 sc_uint<CSR_CMND_WDTH> cmd;
59 sc_uint<CSR_SRCB_WDTH> srcb;
60 sc_uint<1> write;
61 sc_uint<CSR_ADDR_WDTH> addr;
62 sc_uint<CSR_DATA_WDTH> data;
63 csr_pkt() {
64 is_rsp = false;
65 cmd = 0x0;
66 srcb = 0x0;
67 addr = 0x0;
68 data = 0x0;
69 }
70 };
71
72 /**
73 * CSR Ring Interface protocol, specific to the T2 design
74 */
75 class peu_csr : public sc_module
76 {
77 public:
78 peu_csr(sc_module_name module_name) :
79 sc_module (module_name),
80 csr_port("csr_port")
81 {
82 LOG_DEBUG << "> PEU_CSR(): CTOR() ";
83 SC_THREAD(init);
84
85 SC_THREAD(read_csr_ring);
86 SC_THREAD(write_csr_ring);
87 SC_THREAD(process_ring_req);
88 LOG_DEBUG << "< PEU_CSR(): CTOR() ";
89 }
90
91 SC_HAS_PROCESS( peu_csr );
92
93 sc_in < sc_bv < CSR_RING_WDTH > > ring_data_in;
94 sc_out < sc_bv < CSR_RING_WDTH > > ring_data_out;
95 sc_in < bool > csr_if_clk;
96 sc_in < bool > rst_l;
97
98 sc_event csr_init_lock;
99
100 csr_if_port<CSR_ADDR_T, CSR_DATA_T> csr_port;
101
102 private:
103 void read_csr_ring();
104 void write_csr_ring();
105 void process_ring_req();
106 void init();
107
108 USE_NAMESPACE(std)queue<csr_pkt*> ring_in_q;
109 USE_NAMESPACE(std)queue<csr_pkt*> ring_out_q;
110 };
111
112} // namespace pcie_tl
113
114#endif // INC_etl_hpp__