Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / niu_smx_sm_req_siireq.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: niu_smx_sm_req_siireq.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
36
37module niu_smx_sm_req_siireq(
38/*AUTOARG*/
39 // Outputs
40 niu_sii_hdr_vld, niu_sii_reqbypass, niu_sii_datareq, niu_sii_data,
41 niu_sii_parity, nxt_xmit, wreq_dataff_rd, sii_cs, siireq_idle,
42 tid_xmited_set, tid_xmited_set_addr,
43 // Inputs
44 clk, reset_l, xmitflag, rwflag, hdr_data, bypass,
45 wreq_dataff_rdata, wreq_dataff_empty
46 );
47
48input clk;
49input reset_l;
50
51// sii interface
52output niu_sii_hdr_vld;
53output niu_sii_reqbypass;
54output niu_sii_datareq;
55output [127:0] niu_sii_data;
56output [7:0] niu_sii_parity;
57
58
59// arb interface
60input xmitflag;
61input rwflag; // 0= rd, 1= wr
62input [128:0] hdr_data; // [128] valid bit
63input bypass;
64output nxt_xmit; // arb to update xmit flag
65
66
67// dataff if
68output wreq_dataff_rd;
69input [127:0] wreq_dataff_rdata;
70input wreq_dataff_empty; // not use for now???
71
72output [1:0] sii_cs;
73
74// stall_hdlr if
75output siireq_idle;
76
77// status file interface
78output tid_xmited_set; // rst by sii_req
79output [5:0] tid_xmited_set_addr;
80
81parameter sii_s0= 2'h0,
82 sii_s1= 2'h1;
83
84reg inc_wcnt_n, rst_wcnt_n;
85reg [2:0] wcnt;
86reg nxt_xmit_n;
87wire nxt_xmit= nxt_xmit_n;
88wire wcnt_done_n= (wcnt==`SMX_DATA_CYCLES);
89
90reg niu_sii_hdr_vld_n, niu_sii_hdr_vld ;
91reg niu_sii_datareq_n, niu_sii_datareq;
92reg ld_hdr_n;
93reg ld_data_n;
94reg wreq_dataff_rd_n;
95reg [1:0] sii_ns, sii_cs;
96
97wire siireq_idle= (sii_cs==sii_s0) && !xmitflag;
98
99wire tag_is_valid_n= hdr_data[128]; // added 121405 - end
100reg tid_xmited_set;
101wire [5:0] tid_xmited_set_addr= hdr_data[79:74];
102
103always @(/*AUTOSENSE*/`SMX_REQARB_WR or rwflag or sii_cs
104 or tag_is_valid_n or wcnt_done_n or xmitflag) begin
105 tid_xmited_set= 1'b0;
106 niu_sii_hdr_vld_n= 1'b0;
107 niu_sii_datareq_n= 1'b0;
108 nxt_xmit_n= 1'b0;
109 ld_hdr_n= 1'b0;
110 ld_data_n= 1'b0;
111 wreq_dataff_rd_n= 1'b0;
112 inc_wcnt_n= 1'b0;
113 rst_wcnt_n= 1'b0;
114 sii_ns= sii_cs;
115 case(sii_cs)
116 sii_s0: begin
117 if(xmitflag) begin
118 niu_sii_hdr_vld_n= tag_is_valid_n; // changed 121405
119 niu_sii_datareq_n= (rwflag==`SMX_REQARB_WR);
120 ld_hdr_n= 1'b1;
121 sii_ns= (rwflag==`SMX_REQARB_WR)? sii_s1 : sii_s0;
122 nxt_xmit_n= 1'b1;
123 rst_wcnt_n= 1'b1;
124 tid_xmited_set= tag_is_valid_n; // set xmited flag; use by timer
125 end
126 end
127 sii_s1: begin // wr data xfer
128 ld_data_n= 1'b1;
129 wreq_dataff_rd_n= 1'b1;
130 inc_wcnt_n= 1'b1;
131 sii_ns= (wcnt_done_n)? sii_s0 : sii_s1;
132 end
133 endcase
134end
135
136reg niu_sii_reqbypass;
137reg [127:0] niu_sii_data;
138
139wire [7:0] niu_hdr_parity_n= 8'h0;
140
141 // little endian -> big endian
142wire [127:0] niu_sii_data_n= { wreq_dataff_rdata[`SMX_LE_B0],
143 wreq_dataff_rdata[`SMX_LE_B1],
144 wreq_dataff_rdata[`SMX_LE_B2],
145 wreq_dataff_rdata[`SMX_LE_B3],
146 wreq_dataff_rdata[`SMX_LE_B4],
147 wreq_dataff_rdata[`SMX_LE_B5],
148 wreq_dataff_rdata[`SMX_LE_B6],
149 wreq_dataff_rdata[`SMX_LE_B7],
150 wreq_dataff_rdata[`SMX_LE_B8],
151 wreq_dataff_rdata[`SMX_LE_B9],
152 wreq_dataff_rdata[`SMX_LE_B10],
153 wreq_dataff_rdata[`SMX_LE_B11],
154 wreq_dataff_rdata[`SMX_LE_B12],
155 wreq_dataff_rdata[`SMX_LE_B13],
156 wreq_dataff_rdata[`SMX_LE_B14],
157 wreq_dataff_rdata[`SMX_LE_B15]
158 };
159/*
160wire [15:0] e0_niu_sii_data_n={
161 niu_sii_data_n[30], niu_sii_data_n[28],
162 niu_sii_data_n[26], niu_sii_data_n[24],
163 niu_sii_data_n[22], niu_sii_data_n[20],
164 niu_sii_data_n[18], niu_sii_data_n[16],
165 niu_sii_data_n[14], niu_sii_data_n[12],
166 niu_sii_data_n[10], niu_sii_data_n[8],
167 niu_sii_data_n[6], niu_sii_data_n[4],
168 niu_sii_data_n[2], niu_sii_data_n[0]
169 };
170wire [15:0] e1_niu_sii_data_n={
171 niu_sii_data_n[62], niu_sii_data_n[60],
172 niu_sii_data_n[58], niu_sii_data_n[56],
173 niu_sii_data_n[54], niu_sii_data_n[52],
174 niu_sii_data_n[50], niu_sii_data_n[48],
175 niu_sii_data_n[46], niu_sii_data_n[44],
176 niu_sii_data_n[42], niu_sii_data_n[40],
177 niu_sii_data_n[38], niu_sii_data_n[36],
178 niu_sii_data_n[34], niu_sii_data_n[32]
179 };
180wire [15:0] e2_niu_sii_data_n={
181 niu_sii_data_n[94], niu_sii_data_n[92],
182 niu_sii_data_n[90], niu_sii_data_n[88],
183 niu_sii_data_n[86], niu_sii_data_n[84],
184 niu_sii_data_n[82], niu_sii_data_n[80],
185 niu_sii_data_n[78], niu_sii_data_n[76],
186 niu_sii_data_n[74], niu_sii_data_n[72],
187 niu_sii_data_n[70], niu_sii_data_n[68],
188 niu_sii_data_n[66], niu_sii_data_n[64]
189 };
190wire [15:0] e3_niu_sii_data_n={
191 niu_sii_data_n[126], niu_sii_data_n[124],
192 niu_sii_data_n[122], niu_sii_data_n[120],
193 niu_sii_data_n[118], niu_sii_data_n[116],
194 niu_sii_data_n[114], niu_sii_data_n[112],
195 niu_sii_data_n[110], niu_sii_data_n[108],
196 niu_sii_data_n[106], niu_sii_data_n[104],
197 niu_sii_data_n[102], niu_sii_data_n[100],
198 niu_sii_data_n[98], niu_sii_data_n[96]
199 };
200
201wire [15:0] o0_niu_sii_data_n={
202 niu_sii_data_n[31], niu_sii_data_n[29],
203 niu_sii_data_n[27], niu_sii_data_n[25],
204 niu_sii_data_n[23], niu_sii_data_n[21],
205 niu_sii_data_n[19], niu_sii_data_n[17],
206 niu_sii_data_n[15], niu_sii_data_n[13],
207 niu_sii_data_n[11], niu_sii_data_n[9],
208 niu_sii_data_n[7], niu_sii_data_n[5],
209 niu_sii_data_n[3], niu_sii_data_n[1]
210 };
211wire [15:0] o1_niu_sii_data_n={
212 niu_sii_data_n[63], niu_sii_data_n[61],
213 niu_sii_data_n[59], niu_sii_data_n[57],
214 niu_sii_data_n[55], niu_sii_data_n[53],
215 niu_sii_data_n[51], niu_sii_data_n[49],
216 niu_sii_data_n[47], niu_sii_data_n[45],
217 niu_sii_data_n[43], niu_sii_data_n[41],
218 niu_sii_data_n[39], niu_sii_data_n[37],
219 niu_sii_data_n[35], niu_sii_data_n[33]
220 };
221wire [15:0] o2_niu_sii_data_n={
222 niu_sii_data_n[95], niu_sii_data_n[93],
223 niu_sii_data_n[91], niu_sii_data_n[89],
224 niu_sii_data_n[87], niu_sii_data_n[85],
225 niu_sii_data_n[83], niu_sii_data_n[81],
226 niu_sii_data_n[79], niu_sii_data_n[77],
227 niu_sii_data_n[75], niu_sii_data_n[73],
228 niu_sii_data_n[71], niu_sii_data_n[69],
229 niu_sii_data_n[67], niu_sii_data_n[65]
230 };
231wire [15:0] o3_niu_sii_data_n={
232 niu_sii_data_n[127], niu_sii_data_n[125],
233 niu_sii_data_n[123], niu_sii_data_n[121],
234 niu_sii_data_n[119], niu_sii_data_n[117],
235 niu_sii_data_n[115], niu_sii_data_n[113],
236 niu_sii_data_n[111], niu_sii_data_n[109],
237 niu_sii_data_n[107], niu_sii_data_n[105],
238 niu_sii_data_n[103], niu_sii_data_n[101],
239 niu_sii_data_n[99], niu_sii_data_n[97]
240 };
241*/
242
243/*
244assign niu_sii_parity_n[0]= ~(^e0_niu_sii_data_n);
245assign niu_sii_parity_n[2]= ~(^e1_niu_sii_data_n);
246assign niu_sii_parity_n[4]= ~(^e2_niu_sii_data_n);
247assign niu_sii_parity_n[6]= ~(^e3_niu_sii_data_n);
248
249assign niu_sii_parity_n[1]= ~(^o0_niu_sii_data_n);
250assign niu_sii_parity_n[3]= ~(^o1_niu_sii_data_n);
251assign niu_sii_parity_n[5]= ~(^o2_niu_sii_data_n);
252assign niu_sii_parity_n[7]= ~(^o3_niu_sii_data_n);
253*/
254
255reg [7:0] niu_sii_parity;
256wire [7:0] niu_sii_parity_n;
257
258niu_smx_gen_siudp gen_siudp( // gen parity per N2 ras
259 .data (niu_sii_data_n [127:0]),
260 .parity (niu_sii_parity_n [7:0])
261 );
262
263
264wire cmd_parity_n= ~(^hdr_data[`SMX_SICMD_POS_CMD]);
265
266wire [39:0] pa_hdr_data= hdr_data[`SMX_SICMD_POS_PA];
267wire [19:0] e_pa_hdr_data={
268 pa_hdr_data[38], pa_hdr_data[36],
269 pa_hdr_data[34], pa_hdr_data[32],
270 pa_hdr_data[30], pa_hdr_data[28],
271 pa_hdr_data[26], pa_hdr_data[24],
272 pa_hdr_data[22], pa_hdr_data[20],
273 pa_hdr_data[18], pa_hdr_data[16],
274 pa_hdr_data[14], pa_hdr_data[12],
275 pa_hdr_data[10], pa_hdr_data[8],
276 pa_hdr_data[6], pa_hdr_data[4],
277 pa_hdr_data[2], pa_hdr_data[0]
278 };
279wire [19:0] o_pa_hdr_data={
280 pa_hdr_data[39], pa_hdr_data[37],
281 pa_hdr_data[35], pa_hdr_data[33],
282 pa_hdr_data[31], pa_hdr_data[29],
283 pa_hdr_data[27], pa_hdr_data[25],
284 pa_hdr_data[23], pa_hdr_data[21],
285 pa_hdr_data[19], pa_hdr_data[17],
286 pa_hdr_data[15], pa_hdr_data[13],
287 pa_hdr_data[11], pa_hdr_data[9],
288 pa_hdr_data[7], pa_hdr_data[5],
289 pa_hdr_data[3], pa_hdr_data[1]
290 };
291wire [1:0] pa_parity_n= {~(^o_pa_hdr_data), ~(^e_pa_hdr_data)};
292
293wire [5:0] tid_ecc_n;
294
295niu_smx_ecc16_genpar ecc_genpar(
296 .data (hdr_data[`SMX_SICMD_POS_ID]),
297 .chkbit (5'h0),
298 .parity (tid_ecc_n[5:0]),
299 .cor_parity_5 () // nc
300 );
301
302wire [127:0] niu_hdr_data_n= { hdr_data[`SMX_SICMD_POS_CMD],
303 hdr_data[`SMX_SICMD_POS_RSV0],
304 pa_parity_n,
305 hdr_data[`SMX_SICMD_POS_ERR],
306 hdr_data[`SMX_SICMD_POS_ID],
307 hdr_data[`SMX_SICMD_POS_RSV1],
308 cmd_parity_n,
309 tid_ecc_n,
310 hdr_data[`SMX_SICMD_POS_RSV2],
311 hdr_data[`SMX_SICMD_POS_PA]
312 };
313
314always @(posedge clk) begin
315 if(!reset_l) begin
316 sii_cs<= `SMX_PD sii_s0;
317 niu_sii_hdr_vld<= `SMX_PD 1'b0;
318 niu_sii_datareq<= `SMX_PD 1'b0;
319 niu_sii_reqbypass<= `SMX_PD 1'b0;
320 niu_sii_data<= `SMX_PD 128'h0;
321 niu_sii_parity<= `SMX_PD 8'h0;
322 end
323 else begin
324 sii_cs<= `SMX_PD sii_ns;
325 niu_sii_hdr_vld<= `SMX_PD niu_sii_hdr_vld_n;
326 niu_sii_datareq<= `SMX_PD niu_sii_datareq_n;
327 if(ld_hdr_n)
328 niu_sii_reqbypass<= `SMX_PD bypass;
329 else
330 niu_sii_reqbypass<= `SMX_PD 1'b0;
331 if(ld_hdr_n) begin
332 niu_sii_data<= `SMX_PD niu_hdr_data_n;
333 niu_sii_parity<= `SMX_PD niu_hdr_parity_n;
334 end
335 else if (ld_data_n) begin
336 niu_sii_data<= `SMX_PD niu_sii_data_n;
337 niu_sii_parity<= `SMX_PD niu_sii_parity_n;
338 end
339 end
340end
341
342always @(posedge clk) begin
343 if(!reset_l)
344 wcnt<= `SMX_PD 3'h1;
345 else begin
346 if(rst_wcnt_n) wcnt<= `SMX_PD 3'h1; // start with 1
347 else if(inc_wcnt_n) wcnt<= `SMX_PD wcnt + 1'b1;
348 end
349end
350
351wire wreq_dataff_rd= wreq_dataff_rd_n;
352endmodule
353
354
355
356