Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / dmu / rtl / dmu_cru_csr.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: dmu_cru_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_cru_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 dmc_dbg_sel_a_reg_block_sel_hw_read,
50 dmc_dbg_sel_a_reg_sub_sel_hw_read,
51 dmc_dbg_sel_a_reg_signal_sel_hw_read,
52 dmc_dbg_sel_b_reg_block_sel_hw_read,
53 dmc_dbg_sel_b_reg_sub_sel_hw_read,
54 dmc_dbg_sel_b_reg_signal_sel_hw_read,
55 dmc_pcie_cfg_bus_num_hw_read,
56 dmc_pcie_cfg_req_id_hw_read
57 );
58
59//====================================================
60// Polarity declarations
61//====================================================
62input clk; // Clock signal
63input [`FIRE_CSRBUS_ADDR_WIDTH-1:0] csrbus_addr; // Address bus
64input [`FIRE_CSRBUS_DATA_WIDTH-1:0] csrbus_wr_data; // SW write data
65input csrbus_wr; // Read/Write signal
66input csrbus_valid; // Valid address
67output csrbus_mapped; // Address is mapped
68output csrbus_done; // Operation is done
69output [`FIRE_CSRBUS_DATA_WIDTH-1:0] csrbus_read_data; // SW read data bus
70input rst_l; // Reset signal
71input [1:0] csrbus_src_bus; // Source bus
72output csrbus_acc_vio; // Violation signal
73input instance_id; // Instance ID
74output [`FIRE_DLC_CRU_CSR_DMC_DBG_SEL_A_REG_BLOCK_SEL_INT_SLC] dmc_dbg_sel_a_reg_block_sel_hw_read;
75 // This signal provides the current value of dmc_dbg_sel_a_reg_block_sel.
76output [`FIRE_DLC_CRU_CSR_DMC_DBG_SEL_A_REG_SUB_SEL_INT_SLC] dmc_dbg_sel_a_reg_sub_sel_hw_read;
77 // This signal provides the current value of dmc_dbg_sel_a_reg_sub_sel.
78output [`FIRE_DLC_CRU_CSR_DMC_DBG_SEL_A_REG_SIGNAL_SEL_INT_SLC] dmc_dbg_sel_a_reg_signal_sel_hw_read;
79 // This signal provides the current value of dmc_dbg_sel_a_reg_signal_sel.
80output [`FIRE_DLC_CRU_CSR_DMC_DBG_SEL_B_REG_BLOCK_SEL_INT_SLC] dmc_dbg_sel_b_reg_block_sel_hw_read;
81 // This signal provides the current value of dmc_dbg_sel_b_reg_block_sel.
82output [`FIRE_DLC_CRU_CSR_DMC_DBG_SEL_B_REG_SUB_SEL_INT_SLC] dmc_dbg_sel_b_reg_sub_sel_hw_read;
83 // This signal provides the current value of dmc_dbg_sel_b_reg_sub_sel.
84output [`FIRE_DLC_CRU_CSR_DMC_DBG_SEL_B_REG_SIGNAL_SEL_INT_SLC] dmc_dbg_sel_b_reg_signal_sel_hw_read;
85 // This signal provides the current value of dmc_dbg_sel_b_reg_signal_sel.
86output [`FIRE_DLC_CRU_CSR_DMC_PCIE_CFG_BUS_NUM_INT_SLC] dmc_pcie_cfg_bus_num_hw_read;
87 // This signal provides the current value of dmc_pcie_cfg_bus_num.
88output [`FIRE_DLC_CRU_CSR_DMC_PCIE_CFG_REQ_ID_INT_SLC] dmc_pcie_cfg_req_id_hw_read;
89 // This signal provides the current value of dmc_pcie_cfg_req_id.
90
91//====================================================
92// Type declarations
93//====================================================
94wire clk; // Clock signal
95wire [`FIRE_CSRBUS_ADDR_WIDTH-1:0] csrbus_addr; // Address bus
96wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] csrbus_wr_data; // SW write data
97wire csrbus_wr; // Read/Write signal
98wire csrbus_valid; // Valid address
99wire csrbus_mapped; // Address is mapped
100wire csrbus_done; // Operation is done
101wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] csrbus_read_data; // SW read data bus
102wire rst_l; // Reset signal
103wire [1:0] csrbus_src_bus; // Source bus
104wire csrbus_acc_vio; // Violation signal
105wire instance_id; // Instance ID
106wire [`FIRE_DLC_CRU_CSR_DMC_DBG_SEL_A_REG_BLOCK_SEL_INT_SLC] dmc_dbg_sel_a_reg_block_sel_hw_read;
107 // This signal provides the current value of dmc_dbg_sel_a_reg_block_sel.
108wire [`FIRE_DLC_CRU_CSR_DMC_DBG_SEL_A_REG_SUB_SEL_INT_SLC] dmc_dbg_sel_a_reg_sub_sel_hw_read;
109 // This signal provides the current value of dmc_dbg_sel_a_reg_sub_sel.
110wire [`FIRE_DLC_CRU_CSR_DMC_DBG_SEL_A_REG_SIGNAL_SEL_INT_SLC] dmc_dbg_sel_a_reg_signal_sel_hw_read;
111 // This signal provides the current value of dmc_dbg_sel_a_reg_signal_sel.
112wire [`FIRE_DLC_CRU_CSR_DMC_DBG_SEL_B_REG_BLOCK_SEL_INT_SLC] dmc_dbg_sel_b_reg_block_sel_hw_read;
113 // This signal provides the current value of dmc_dbg_sel_b_reg_block_sel.
114wire [`FIRE_DLC_CRU_CSR_DMC_DBG_SEL_B_REG_SUB_SEL_INT_SLC] dmc_dbg_sel_b_reg_sub_sel_hw_read;
115 // This signal provides the current value of dmc_dbg_sel_b_reg_sub_sel.
116wire [`FIRE_DLC_CRU_CSR_DMC_DBG_SEL_B_REG_SIGNAL_SEL_INT_SLC] dmc_dbg_sel_b_reg_signal_sel_hw_read;
117 // This signal provides the current value of dmc_dbg_sel_b_reg_signal_sel.
118wire [`FIRE_DLC_CRU_CSR_DMC_PCIE_CFG_BUS_NUM_INT_SLC] dmc_pcie_cfg_bus_num_hw_read;
119 // This signal provides the current value of dmc_pcie_cfg_bus_num.
120wire [`FIRE_DLC_CRU_CSR_DMC_PCIE_CFG_REQ_ID_INT_SLC] dmc_pcie_cfg_req_id_hw_read;
121 // This signal provides the current value of dmc_pcie_cfg_req_id.
122
123//====================================================
124// Logic
125//====================================================
126wire daemon_transaction_in_progress;
127wire daemon_csrbus_mapped;
128wire daemon_csrbus_valid;
129// vlint flag_dangling_net_within_module off
130// vlint flag_net_has_no_load off
131wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] daemon_csrbus_wr_data_tmp;
132wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] daemon_csrbus_wr_data;
133// vlint flag_dangling_net_within_module on
134// vlint flag_net_has_no_load on
135wire daemon_csrbus_done;
136wire [`FIRE_CSRBUS_ADDR_WIDTH-1:0] daemon_csrbus_addr;
137wire daemon_csrbus_wr_tmp;
138wire daemon_csrbus_wr;
139
140//summit modcovoff -bepgnv
141pcie_dcm_daemon #(`FIRE_CSRBUS_ADDR_WIDTH,`FIRE_CSRBUS_DATA_WIDTH) pcie_dcm_daemon (
142 .daemon_csrbus_valid (daemon_csrbus_valid),
143 .daemon_csrbus_mapped (daemon_csrbus_mapped),
144 .daemon_csrbus_wr_data (daemon_csrbus_wr_data_tmp),
145 .daemon_csrbus_done (daemon_csrbus_done),
146 .daemon_csrbus_addr (daemon_csrbus_addr),
147 .daemon_csrbus_wr (daemon_csrbus_wr_tmp),
148 .daemon_transaction_in_progress (daemon_transaction_in_progress),
149// synopsys translate_off
150 .clk(clk),
151 .csrbus_read_data (csrbus_read_data),
152 .rst_l (rst_l),
153// synopsys translate_on
154 .csrbus_valid (csrbus_valid),
155 .csrbus_mapped (csrbus_mapped),
156 .csrbus_wr_data (csrbus_wr_data),
157 .csrbus_done (csrbus_done),
158 .csrbus_addr (csrbus_addr),
159 .csrbus_wr (csrbus_wr)
160 );
161//summit modcovon -bepgnv
162
163//====================================================================
164// Address decode
165//====================================================================
166wire dmc_dbg_sel_a_reg_select_pulse;
167wire dmc_dbg_sel_b_reg_select_pulse;
168wire dmc_pcie_cfg_select_pulse;
169
170dmu_cru_addr_decode dmu_cru_addr_decode
171 (
172 .clk (clk),
173 .rst_l (rst_l),
174 .daemon_csrbus_valid (daemon_csrbus_valid),
175 .daemon_csrbus_addr (daemon_csrbus_addr),
176 .csrbus_src_bus (csrbus_src_bus),
177 .daemon_csrbus_wr (daemon_csrbus_wr_tmp),
178 .daemon_csrbus_wr_out (daemon_csrbus_wr),
179 .daemon_csrbus_wr_data (daemon_csrbus_wr_data_tmp),
180 .daemon_csrbus_wr_data_out (daemon_csrbus_wr_data),
181 .daemon_csrbus_mapped (daemon_csrbus_mapped),
182 .csrbus_acc_vio (csrbus_acc_vio),
183 .daemon_transaction_in_progress (daemon_transaction_in_progress),
184 .instance_id (instance_id),
185 .daemon_csrbus_done (daemon_csrbus_done),
186 .dmc_dbg_sel_a_reg_select_pulse (dmc_dbg_sel_a_reg_select_pulse),
187 .dmc_dbg_sel_b_reg_select_pulse (dmc_dbg_sel_b_reg_select_pulse),
188 .dmc_pcie_cfg_select_pulse (dmc_pcie_cfg_select_pulse)
189 );
190
191//====================================================================
192// OUTPUT: csrbus_read_data (pipelining)
193//====================================================================
194//----- connecting wires
195wire stage_mux_only_rst_l;
196wire stage_mux_only_daemon_csrbus_wr;
197wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] stage_mux_only_daemon_csrbus_wr_data;
198
199//----- Stage: 1 / Grp: default_grp (3 inputs / 1 outputs)
200wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] default_grp_read_data_0_out;
201wire default_grp_dmc_dbg_sel_a_reg_select_pulse;
202wire default_grp_dmc_dbg_sel_b_reg_select_pulse;
203wire default_grp_dmc_pcie_cfg_select_pulse;
204
205dmu_cru_default_grp dmu_cru_default_grp
206 (
207 .clk (clk),
208 .dmc_dbg_sel_a_reg_block_sel_hw_read (dmc_dbg_sel_a_reg_block_sel_hw_read),
209 .dmc_dbg_sel_a_reg_sub_sel_hw_read (dmc_dbg_sel_a_reg_sub_sel_hw_read),
210 .dmc_dbg_sel_a_reg_signal_sel_hw_read (dmc_dbg_sel_a_reg_signal_sel_hw_read),
211 .dmc_dbg_sel_a_reg_select_pulse (default_grp_dmc_dbg_sel_a_reg_select_pulse),
212 .dmc_dbg_sel_b_reg_block_sel_hw_read (dmc_dbg_sel_b_reg_block_sel_hw_read),
213 .dmc_dbg_sel_b_reg_sub_sel_hw_read (dmc_dbg_sel_b_reg_sub_sel_hw_read),
214 .dmc_dbg_sel_b_reg_signal_sel_hw_read (dmc_dbg_sel_b_reg_signal_sel_hw_read),
215 .dmc_dbg_sel_b_reg_select_pulse (default_grp_dmc_dbg_sel_b_reg_select_pulse),
216 .dmc_pcie_cfg_bus_num_hw_read (dmc_pcie_cfg_bus_num_hw_read),
217 .dmc_pcie_cfg_req_id_hw_read (dmc_pcie_cfg_req_id_hw_read),
218 .dmc_pcie_cfg_select_pulse (default_grp_dmc_pcie_cfg_select_pulse),
219 .rst_l (stage_mux_only_rst_l),
220 .daemon_csrbus_wr_in (stage_mux_only_daemon_csrbus_wr),
221 .daemon_csrbus_wr_data_in (stage_mux_only_daemon_csrbus_wr_data),
222 .read_data_0_out (default_grp_read_data_0_out)
223 );
224
225//----- Stage: 2 / Grp: stage_mux_only (1 inputs / 1 outputs) (Mux only)
226wire [`FIRE_CSRBUS_DATA_WIDTH-1:0] stage_mux_only_read_data_0_out;
227
228dmu_cru_stage_mux_only dmu_cru_stage_mux_only
229 (
230 .clk (clk),
231 .read_data_0 (default_grp_read_data_0_out),
232 .dmc_dbg_sel_a_reg_select_pulse (dmc_dbg_sel_a_reg_select_pulse),
233 .dmc_dbg_sel_a_reg_select_pulse_out (default_grp_dmc_dbg_sel_a_reg_select_pulse),
234 .dmc_dbg_sel_b_reg_select_pulse (dmc_dbg_sel_b_reg_select_pulse),
235 .dmc_dbg_sel_b_reg_select_pulse_out (default_grp_dmc_dbg_sel_b_reg_select_pulse),
236 .dmc_pcie_cfg_select_pulse (dmc_pcie_cfg_select_pulse),
237 .dmc_pcie_cfg_select_pulse_out (default_grp_dmc_pcie_cfg_select_pulse),
238 .daemon_csrbus_wr_in (daemon_csrbus_wr),
239 .daemon_csrbus_wr_out (stage_mux_only_daemon_csrbus_wr),
240 .daemon_csrbus_wr_data_in (daemon_csrbus_wr_data),
241 .daemon_csrbus_wr_data_out (stage_mux_only_daemon_csrbus_wr_data),
242 .read_data_0_out (stage_mux_only_read_data_0_out),
243 .rst_l (rst_l),
244 .rst_l_out (stage_mux_only_rst_l)
245 );
246
247//----- OUTPUT: csrbus_read_data
248assign csrbus_read_data = stage_mux_only_read_data_0_out;
249
250endmodule // dmu_cru_csr