Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / common / verilog / soc_sync / fc_l2_csr_probe.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: fc_l2_csr_probe.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 ============================================
35`include "fc.vh"
36`include "defines.vh"
37`include "ccx.vri"
38`include "cmp.vri"
39
40
41
42`define NIU_UCB `CPU.rdp.niu_pio_ucb
43`define NIU_PIO `CPU.rdp.niu_pio
44
45`timescale 1 ps/ 1 ps
46
47module fc_l2_csr_probe;
48//connect wires
49wire l20_arbdp_inst_diag_c2;
50wire l20_arbdp_inst_load_c2;
51wire [39:0] l20_arbdp_addr_c2;
52wire [63:0] l20_csr_rd_data_c8;
53wire [63:0] l20_tmp_inval_data_c7;
54
55wire l21_arbdp_inst_diag_c2;
56wire l21_arbdp_inst_load_c2;
57wire [39:0] l21_arbdp_addr_c2;
58wire [63:0] l21_csr_rd_data_c8;
59wire [63:0] l21_tmp_inval_data_c7;
60
61
62wire l22_arbdp_inst_diag_c2;
63wire l22_arbdp_inst_load_c2;
64wire [39:0] l22_arbdp_addr_c2;
65wire [63:0] l22_csr_rd_data_c8;
66wire [63:0] l22_tmp_inval_data_c7;
67
68
69wire l23_arbdp_inst_diag_c2;
70wire l23_arbdp_inst_load_c2;
71wire [39:0] l23_arbdp_addr_c2;
72wire [63:0] l23_csr_rd_data_c8;
73wire [63:0] l23_tmp_inval_data_c7;
74
75
76wire l24_arbdp_inst_diag_c2;
77wire l24_arbdp_inst_load_c2;
78wire [39:0] l24_arbdp_addr_c2;
79wire [63:0] l24_csr_rd_data_c8;
80wire [63:0] l24_tmp_inval_data_c7;
81
82
83wire l25_arbdp_inst_diag_c2;
84wire l25_arbdp_inst_load_c2;
85wire [39:0] l25_arbdp_addr_c2;
86wire [63:0] l25_csr_rd_data_c8;
87wire [63:0] l25_tmp_inval_data_c7;
88
89
90wire l26_arbdp_inst_diag_c2;
91wire l26_arbdp_inst_load_c2;
92wire [39:0] l26_arbdp_addr_c2;
93wire [63:0] l26_csr_rd_data_c8;
94wire [63:0] l26_tmp_inval_data_c7;
95
96
97wire l27_arbdp_inst_diag_c2;
98wire l27_arbdp_inst_load_c2;
99wire [39:0] l27_arbdp_addr_c2;
100wire [63:0] l27_csr_rd_data_c8;
101wire [63:0] l27_tmp_inval_data_c7;
102
103wire l20_ld_c2, l21_ld_c2, l22_ld_c2, l23_ld_c2;
104wire l24_ld_c2, l25_ld_c2, l26_ld_c2, l27_ld_c2;
105
106assign l20_arbdp_addr_c2 = `CPU.l2t0.arbadr.arbdp_addr_c2;
107assign l20_arb_decdp_ld_inst_c2 = `CPU.l2t0.arb.arb_csr_rd_en_c2;
108assign l20_csr_rd_data_c8 = `CPU.l2t0.csr_rd_data_c8;
109assign l20_arbdp_inst_diag_c2 = `CPU.l2t0.arb.arb_inst_diag_c2;
110assign l20_tmp_inval_data_c7 = `CPU.l2t0.oque.tmp_inval_data_c7;
111assign l20_ld_c2 = `CPU.l2t0.arb.arb_decdp_ld_inst_c2;
112assign #1 l20_clk = `CPU.l2t0.gclk;
113
114assign l21_arbdp_addr_c2 = `CPU.l2t1.arbadr.arbdp_addr_c2;
115assign l21_arb_decdp_ld_inst_c2 = `CPU.l2t1.arb.arb_csr_rd_en_c2;
116assign l21_csr_rd_data_c8 = `CPU.l2t1.csr_rd_data_c8;
117assign l21_arbdp_inst_diag_c2 = `CPU.l2t1.arb.arb_inst_diag_c2;
118assign l21_tmp_inval_data_c7 = `CPU.l2t1.oque.tmp_inval_data_c7;
119assign l21_ld_c2 = `CPU.l2t1.arb.arb_decdp_ld_inst_c2;
120assign #1 l21_clk = `CPU.l2t1.gclk;
121
122
123assign l22_arbdp_addr_c2 = `CPU.l2t2.arbadr.arbdp_addr_c2;
124assign l22_arb_decdp_ld_inst_c2 = `CPU.l2t2.arb.arb_csr_rd_en_c2;
125assign l22_csr_rd_data_c8 = `CPU.l2t2.csr_rd_data_c8;
126assign l22_arbdp_inst_diag_c2 = `CPU.l2t2.arb.arb_inst_diag_c2;
127assign l22_tmp_inval_data_c7 = `CPU.l2t2.oque.tmp_inval_data_c7;
128assign l22_ld_c2 = `CPU.l2t2.arb.arb_decdp_ld_inst_c2;
129assign #1 l22_clk = `CPU.l2t2.gclk;
130
131assign l23_arbdp_addr_c2 = `CPU.l2t3.arbadr.arbdp_addr_c2;
132assign l23_arb_decdp_ld_inst_c2 = `CPU.l2t3.arb.arb_csr_rd_en_c2;
133assign l23_csr_rd_data_c8 = `CPU.l2t3.csr_rd_data_c8;
134assign l23_arbdp_inst_diag_c2 = `CPU.l2t3.arb.arb_inst_diag_c2;
135assign l23_tmp_inval_data_c7 = `CPU.l2t3.oque.tmp_inval_data_c7;
136assign l23_ld_c2 = `CPU.l2t3.arb.arb_decdp_ld_inst_c2;
137assign #1 l23_clk = `CPU.l2t3.gclk;
138
139assign l24_arbdp_addr_c2 = `CPU.l2t4.arbadr.arbdp_addr_c2;
140assign l24_arb_decdp_ld_inst_c2 = `CPU.l2t4.arb.arb_csr_rd_en_c2;
141assign l24_csr_rd_data_c8 = `CPU.l2t4.csr_rd_data_c8;
142assign l24_arbdp_inst_diag_c2 = `CPU.l2t4.arb.arb_inst_diag_c2;
143assign l24_tmp_inval_data_c7 = `CPU.l2t4.oque.tmp_inval_data_c7;
144assign l24_ld_c2 = `CPU.l2t4.arb.arb_decdp_ld_inst_c2;
145assign #1 l24_clk = `CPU.l2t4.gclk;
146
147
148assign l25_arbdp_addr_c2 = `CPU.l2t5.arbadr.arbdp_addr_c2;
149assign l25_arb_decdp_ld_inst_c2 = `CPU.l2t5.arb.arb_csr_rd_en_c2;
150assign l25_csr_rd_data_c8 = `CPU.l2t5.csr_rd_data_c8;
151assign l25_arbdp_inst_diag_c2 = `CPU.l2t5.arb.arb_inst_diag_c2;
152assign l25_tmp_inval_data_c7 = `CPU.l2t5.oque.tmp_inval_data_c7;
153assign l25_ld_c2 = `CPU.l2t5.arb.arb_decdp_ld_inst_c2;
154assign #1 l25_clk = `CPU.l2t5.gclk;
155
156
157assign l26_arbdp_addr_c2 = `CPU.l2t6.arbadr.arbdp_addr_c2;
158assign l26_arb_decdp_ld_inst_c2 = `CPU.l2t6.arb.arb_csr_rd_en_c2;
159assign l26_csr_rd_data_c8 = `CPU.l2t6.csr_rd_data_c8;
160assign l26_arbdp_inst_diag_c2 = `CPU.l2t6.arb.arb_inst_diag_c2;
161assign l26_tmp_inval_data_c7 = `CPU.l2t6.oque.tmp_inval_data_c7;
162assign l26_ld_c2 = `CPU.l2t6.arb.arb_decdp_ld_inst_c2;
163assign #1 l26_clk = `CPU.l2t6.gclk;
164
165
166assign l27_arbdp_addr_c2 = `CPU.l2t7.arbadr.arbdp_addr_c2;
167assign l27_arb_decdp_ld_inst_c2 = `CPU.l2t7.arb.arb_csr_rd_en_c2;
168assign l27_csr_rd_data_c8 = `CPU.l2t7.csr_rd_data_c8;
169assign l27_arbdp_inst_diag_c2 = `CPU.l2t7.arb.arb_inst_diag_c2;
170assign l27_tmp_inval_data_c7 = `CPU.l2t7.oque.tmp_inval_data_c7;
171assign l27_ld_c2 = `CPU.l2t7.arb.arb_decdp_ld_inst_c2;
172assign #1 l27_clk = `CPU.l2t7.gclk;
173
174
175l2_csr_probe l20_csr_probe( .bank_id(3'b000), .l2_clk(l20_clk), .ld_inst_c2(l20_arb_decdp_ld_inst_c2), .addr_c2(l20_arbdp_addr_c2), .rd_data_c8(l20_csr_rd_data_c8), .diag_inst(l20_arbdp_inst_diag_c2), .mux_data(l20_tmp_inval_data_c7), .diag_ld_inst_c2(l20_ld_c2));
176
177l2_csr_probe l21_csr_probe( .bank_id(3'b001), .l2_clk(l21_clk), .ld_inst_c2(l21_arb_decdp_ld_inst_c2), .addr_c2(l21_arbdp_addr_c2), .rd_data_c8(l21_csr_rd_data_c8), .diag_inst(l21_arbdp_inst_diag_c2), .mux_data(l21_tmp_inval_data_c7), .diag_ld_inst_c2(l21_ld_c2));
178
179l2_csr_probe l22_csr_probe( .bank_id(3'b010), .l2_clk(l22_clk), .ld_inst_c2(l22_arb_decdp_ld_inst_c2), .addr_c2(l22_arbdp_addr_c2), .rd_data_c8(l22_csr_rd_data_c8), .diag_inst(l22_arbdp_inst_diag_c2), .mux_data(l22_tmp_inval_data_c7), .diag_ld_inst_c2(l22_ld_c2));
180
181l2_csr_probe l23_csr_probe( .bank_id(3'b011), .l2_clk(l23_clk), .ld_inst_c2(l23_arb_decdp_ld_inst_c2), .addr_c2(l23_arbdp_addr_c2), .rd_data_c8(l23_csr_rd_data_c8), .diag_inst(l23_arbdp_inst_diag_c2), .mux_data(l23_tmp_inval_data_c7), .diag_ld_inst_c2(l23_ld_c2));
182
183
184l2_csr_probe l24_csr_probe( .bank_id(3'b100), .l2_clk(l24_clk), .ld_inst_c2(l24_arb_decdp_ld_inst_c2), .addr_c2(l24_arbdp_addr_c2), .rd_data_c8(l24_csr_rd_data_c8), .diag_inst(l24_arbdp_inst_diag_c2), .mux_data(l24_tmp_inval_data_c7), .diag_ld_inst_c2(l24_ld_c2));
185
186
187l2_csr_probe l25_csr_probe( .bank_id(3'b101), .l2_clk(l25_clk), .ld_inst_c2(l25_arb_decdp_ld_inst_c2), .addr_c2(l25_arbdp_addr_c2), .rd_data_c8(l25_csr_rd_data_c8), .diag_inst(l25_arbdp_inst_diag_c2), .mux_data(l25_tmp_inval_data_c7), .diag_ld_inst_c2(l25_ld_c2));
188
189l2_csr_probe l26_csr_probe( .bank_id(3'b110), .l2_clk(l26_clk), .ld_inst_c2(l26_arb_decdp_ld_inst_c2), .addr_c2(l26_arbdp_addr_c2), .rd_data_c8(l26_csr_rd_data_c8), .diag_inst(l26_arbdp_inst_diag_c2), .mux_data(l26_tmp_inval_data_c7), .diag_ld_inst_c2(l26_ld_c2));
190
191l2_csr_probe l27_csr_probe( .bank_id(3'b111), .l2_clk(l27_clk), .ld_inst_c2(l27_arb_decdp_ld_inst_c2), .addr_c2(l27_arbdp_addr_c2), .rd_data_c8(l27_csr_rd_data_c8), .diag_inst(l27_arbdp_inst_diag_c2), .mux_data(l27_tmp_inval_data_c7), .diag_ld_inst_c2(l27_ld_c2));
192
193
194
195
196
197endmodule
198
199module l2_csr_probe ( bank_id, l2_clk, ld_inst_c2, addr_c2, rd_data_c8, diag_inst, mux_data, diag_ld_inst_c2);
200
201input [2:0] bank_id;
202input ld_inst_c2, diag_inst;
203input [39:0] addr_c2;
204input [63:0] rd_data_c8, mux_data;
205input l2_clk;
206input diag_ld_inst_c2;
207
208integer l2_probe;
209
210reg [2:0] state;
211wire [39:0] addr_c2;
212wire [63:0] rd_data_c8;
213
214reg csr_rd_c3, diag_ld_c3;
215reg csr_rd_c4, diag_ld_c4;
216reg csr_rd_c5, diag_ld_c5;
217reg csr_rd_c6, diag_ld_c6;
218reg csr_rd_c7, diag_ld_c7;
219reg csr_rd_c8, diag_ld_c8;
220reg csr_rd_c9, diag_ld_c9;
221
222reg [39:0] csr_addr_c3;
223reg [39:0] csr_addr_c4;
224reg [39:0] csr_addr_c5;
225reg [39:0] csr_addr_c6;
226reg [39:0] csr_addr_c7;
227reg [39:0] csr_addr_c8;
228reg [39:0] csr_addr_c9;
229wire eer;
230assign eer = ( addr_c2[39:32] == 8'hBA) | ( addr_c2[39:32] == 8'hAA);
231wire esr;
232assign esr = ( addr_c2[39:32] == 8'hBB) | ( addr_c2[39:32] == 8'hAB);
233wire ear;
234assign ear = ( addr_c2[39:32] == 8'hBC) | ( addr_c2[39:32] == 8'hAC);
235wire notData;
236assign notData = ( addr_c2[39:32] == 8'hBE) | ( addr_c2[39:32] == 8'hAE);
237wire eir;
238assign eir = ( addr_c2[39:32] == 8'hBD) | ( addr_c2[39:32] == 8'hAD);
239wire l2_csr;
240assign l2_csr = (eer | esr | ear | notData | eir);
241wire csr_rd_c2;
242assign csr_rd_c2 = ( ld_inst_c2 & l2_csr );
243wire diag_ld_c2;
244assign diag_ld_c2 = (diag_ld_inst_c2 & diag_inst );
245
246//follow the pipeline
247
248always @(posedge l2_clk)
249 begin
250 csr_rd_c3 <= csr_rd_c2;
251 csr_rd_c4 <= csr_rd_c3;
252 csr_rd_c5 <= csr_rd_c4;
253 csr_rd_c6 <= csr_rd_c5;
254 csr_rd_c7 <= csr_rd_c6;
255 csr_rd_c8 <= csr_rd_c7;
256 csr_rd_c9 <= csr_rd_c8;
257
258 csr_addr_c3 <= addr_c2;
259 csr_addr_c4 <= csr_addr_c3;
260 csr_addr_c5 <= csr_addr_c4;
261 csr_addr_c6 <= csr_addr_c5;
262 csr_addr_c7 <= csr_addr_c6;
263 csr_addr_c8 <= csr_addr_c7;
264 csr_addr_c9 <= csr_addr_c8;
265 end
266
267always @(posedge l2_clk) begin
268 diag_ld_c3 <= diag_ld_c2 & ~csr_rd_c2;
269 diag_ld_c4 <= diag_ld_c3;
270 diag_ld_c5 <= diag_ld_c4;
271 diag_ld_c6 <= diag_ld_c5;
272 diag_ld_c7 <= diag_ld_c6;
273 diag_ld_c8 <= diag_ld_c7;
274 diag_ld_c9 <= diag_ld_c8;
275end
276
277
278//csr data should be ready at c8
279always @(negedge l2_clk)
280 begin
281 if( csr_rd_c9 ) begin
282 $display("l2csr access addr=%x, data=%x\n", csr_addr_c8, rd_data_c8);
283 if (`PARGS.nas_check_on )
284 l2_probe = $sim_send(`PLI_CSR_READ, {24'b0, csr_addr_c9}, rd_data_c8, 8'h0);
285 end
286 end
287
288//diagnostic load data should be ready at c8
289always @(negedge l2_clk)
290 begin
291 if( diag_ld_c9 ) begin
292 $display("l2 diagnostic access addr=%x, data=%x\n", csr_addr_c9, mux_data);
293 if (`PARGS.nas_check_on )
294// l2_probe = $sim_send(`PLI_CSR_READ, {24'b0, csr_addr_c9}, mux_data, 8'h0);
295 $display("l2 diagnostic access addr=%x, data=%x\n", csr_addr_c9, mux_data);
296 end
297 end
298
299endmodule
300
301
302