Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / dmu / rtl / dmu_psb_csr.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: dmu_psb_csr.v
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 ============================================
35module dmu_psb_csr
36 (
37 clk,
38 csrbus_addr,
39 csrbus_wr_data,
40 csrbus_wr,
41 csrbus_valid,
42 csrbus_mapped,
43 csrbus_done,
44 csrbus_read_data,
45 rst_l,
46 csrbus_src_bus,
47 csrbus_acc_vio,
48 instance_id,
49 ext_addr,
50 psb_dma_ext_select,
51 psb_dma_entry_ext_read_data,
52 psb_dma_ext_done,
53 psb_pio_ext_select,
54 psb_pio_entry_ext_read_data,
55 psb_pio_ext_done
56 );
57
58//====================================================
59// Polarity declarations
60//====================================================
61input clk; // Clock signal
62input [`FIRE_CSRBUS_ADDR_WIDTH-1:0] csrbus_addr; // Address bus
63input [`FIRE_CSRBUS_DATA_WIDTH-1:0] csrbus_wr_data; // SW write data
64input csrbus_wr; // Read/Write signal
65input csrbus_valid; // Valid address
66output csrbus_mapped; // Address is mapped
67output csrbus_done; // Operation is done
68output [`FIRE_CSRBUS_DATA_WIDTH-1:0] csrbus_read_data; // SW read data bus
69input rst_l; // Reset signal
70input [1:0] csrbus_src_bus; // Source bus
71output csrbus_acc_vio; // Violation signal
72input instance_id; // Instance ID
73output [4:0] ext_addr; // External address bus for dcm psb
74output psb_dma_ext_select; // When set, register psb_dma is selected. This
75 // signal is a level.
76input [40:0] psb_dma_entry_ext_read_data; // Read data from the external
77 // bypass register
78input psb_dma_ext_done; // This signal acknowledges read and write operations
79 // for register psb_dma. For read operations, it
80 // indicates that the psb_dma_ext_read_data signals
81 // are valid. For write operations, it indicates that
82 // the write operation is complete, and that
83 // <dcm>_ext_wr_data may be removed on the next cycle.
84output psb_pio_ext_select; // When set, register psb_pio is selected. This
85 // signal is a level.
86input [6:0] psb_pio_entry_ext_read_data; // Read data from the external bypass
87 // register
88input psb_pio_ext_done; // This signal acknowledges read and write operations
89 // for register psb_pio. For read operations, it
90 // indicates that the psb_pio_ext_read_data signals
91 // are valid. For write operations, it indicates that
92 // the write operation is complete, and that
93 // <dcm>_ext_wr_data may be removed on the next cycle.
94
95//====================================================
96// Type declarations
97//====================================================
98wire clk; // Clock signal
99wire [`FIRE_CSRBUS_ADDR_WIDTH-1:0] csrbus_addr; // Address bus
100wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] csrbus_wr_data; // SW write data
101wire csrbus_wr; // Read/Write signal
102wire csrbus_valid; // Valid address
103wire csrbus_mapped; // Address is mapped
104wire csrbus_done; // Operation is done
105wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] csrbus_read_data; // SW read data bus
106wire rst_l; // Reset signal
107wire [1:0] csrbus_src_bus; // Source bus
108wire csrbus_acc_vio; // Violation signal
109wire instance_id; // Instance ID
110wire [4:0] ext_addr; // External address bus for dcm psb
111wire psb_dma_ext_select; // When set, register psb_dma is selected. This signal
112 // is a level.
113wire [40:0] psb_dma_entry_ext_read_data; // Read data from the external bypass
114 // register
115wire psb_dma_ext_done; // This signal acknowledges read and write operations
116 // for register psb_dma. For read operations, it
117 // indicates that the psb_dma_ext_read_data signals are
118 // valid. For write operations, it indicates that the
119 // write operation is complete, and that
120 // <dcm>_ext_wr_data may be removed on the next cycle.
121wire psb_pio_ext_select; // When set, register psb_pio is selected. This signal
122 // is a level.
123wire [6:0] psb_pio_entry_ext_read_data; // Read data from the external bypass
124 // register
125wire psb_pio_ext_done; // This signal acknowledges read and write operations
126 // for register psb_pio. For read operations, it
127 // indicates that the psb_pio_ext_read_data signals are
128 // valid. For write operations, it indicates that the
129 // write operation is complete, and that
130 // <dcm>_ext_wr_data may be removed on the next cycle.
131
132//====================================================
133// Logic
134//====================================================
135wire daemon_transaction_in_progress;
136wire daemon_csrbus_mapped;
137wire daemon_csrbus_valid;
138// vlint flag_dangling_net_within_module off
139// vlint flag_net_has_no_load off
140wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] daemon_csrbus_wr_data;
141// vlint flag_dangling_net_within_module on
142// vlint flag_net_has_no_load on
143wire daemon_csrbus_done;
144wire [`FIRE_CSRBUS_ADDR_WIDTH-1:0] daemon_csrbus_addr;
145wire daemon_csrbus_wr;
146
147//summit modcovoff -bepgnv
148pcie_dcm_daemon #(`FIRE_CSRBUS_ADDR_WIDTH,`FIRE_CSRBUS_DATA_WIDTH) pcie_dcm_daemon (
149 .daemon_csrbus_valid (daemon_csrbus_valid),
150 .daemon_csrbus_mapped (daemon_csrbus_mapped),
151 .daemon_csrbus_wr_data (daemon_csrbus_wr_data),
152 .daemon_csrbus_done (daemon_csrbus_done),
153 .daemon_csrbus_addr (daemon_csrbus_addr),
154 .daemon_csrbus_wr (daemon_csrbus_wr),
155 .daemon_transaction_in_progress (daemon_transaction_in_progress),
156// synopsys translate_off
157 .clk(clk),
158 .csrbus_read_data (csrbus_read_data),
159 .rst_l (rst_l),
160// synopsys translate_on
161 .csrbus_valid (csrbus_valid),
162 .csrbus_mapped (csrbus_mapped),
163 .csrbus_wr_data (csrbus_wr_data),
164 .csrbus_done (csrbus_done),
165 .csrbus_addr (csrbus_addr),
166 .csrbus_wr (csrbus_wr)
167 );
168//summit modcovon -bepgnv
169
170//====================================================================
171// Address decode
172//====================================================================
173wire psb_dma_select;
174wire psb_pio_select;
175wire stage_mux_only_ext_done_0_out;
176
177dmu_psb_addr_decode dmu_psb_addr_decode
178 (
179 .clk (clk),
180 .rst_l (rst_l),
181 .daemon_csrbus_valid (daemon_csrbus_valid),
182 .daemon_csrbus_addr (daemon_csrbus_addr),
183 .csrbus_src_bus (csrbus_src_bus),
184 .daemon_csrbus_wr (daemon_csrbus_wr),
185 .daemon_csrbus_mapped (daemon_csrbus_mapped),
186 .csrbus_acc_vio (csrbus_acc_vio),
187 .daemon_transaction_in_progress (daemon_transaction_in_progress),
188 .instance_id (instance_id),
189 .daemon_csrbus_done (daemon_csrbus_done),
190 .stage_mux_only_ext_done_0_out (stage_mux_only_ext_done_0_out),
191 .psb_dma_select (psb_dma_select),
192 .psb_pio_select (psb_pio_select)
193 );
194
195//====================================================
196// ext_read_data: field-based to register-based
197//====================================================
198wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] psb_dma_ext_read_data =
199 {
200 23'b0,
201 psb_dma_entry_ext_read_data
202 };
203
204wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] psb_pio_ext_read_data =
205 {
206 57'b0,
207 psb_pio_entry_ext_read_data
208 };
209
210
211//====================================================================
212// OUTPUT: csrbus_read_data (pipelining)
213//====================================================================
214//----- connecting wires
215wire stage_mux_only_rst_l;
216wire [4:0] stage_mux_only_ext_addr;
217
218//----- Stage: 1 / Grp: default_grp (2 inputs / 1 outputs)
219wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] default_grp_read_data_0_out;
220wire default_grp_ext_done_0_out;
221wire default_grp_psb_dma_select;
222wire default_grp_psb_pio_select;
223
224dmu_psb_default_grp dmu_psb_default_grp
225 (
226 .clk (clk),
227 .psb_dma_ext_select (psb_dma_ext_select),
228 .psb_dma_select (default_grp_psb_dma_select),
229 .psb_dma_ext_read_data (psb_dma_ext_read_data),
230 .psb_dma_ext_done (psb_dma_ext_done),
231 .psb_pio_ext_select (psb_pio_ext_select),
232 .psb_pio_select (default_grp_psb_pio_select),
233 .psb_pio_ext_read_data (psb_pio_ext_read_data),
234 .psb_pio_ext_done (psb_pio_ext_done),
235 .rst_l (stage_mux_only_rst_l),
236 .ext_addr_in (stage_mux_only_ext_addr[4:0]),
237 .ext_addr_out (ext_addr),
238 .read_data_0_out (default_grp_read_data_0_out),
239 .ext_done_0_out (default_grp_ext_done_0_out)
240 );
241
242//----- Stage: 2 / Grp: stage_mux_only (1 inputs / 1 outputs) (Mux only)
243wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] stage_mux_only_read_data_0_out;
244
245dmu_psb_stage_mux_only dmu_psb_stage_mux_only
246 (
247 .clk (clk),
248 .read_data_0 (default_grp_read_data_0_out),
249 .ext_done_0 (default_grp_ext_done_0_out),
250 .psb_dma_select (psb_dma_select),
251 .psb_dma_select_out (default_grp_psb_dma_select),
252 .psb_pio_select (psb_pio_select),
253 .psb_pio_select_out (default_grp_psb_pio_select),
254 .ext_addr_in (daemon_csrbus_addr[4:0]),
255 .ext_addr_out (stage_mux_only_ext_addr),
256 .read_data_0_out (stage_mux_only_read_data_0_out),
257 .ext_done_0_out (stage_mux_only_ext_done_0_out),
258 .rst_l (rst_l),
259 .rst_l_out (stage_mux_only_rst_l)
260 );
261
262//----- OUTPUT: csrbus_read_data
263assign csrbus_read_data = stage_mux_only_read_data_0_out;
264
265endmodule // dmu_psb_csr