Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | // ========== Copyright Header Begin ========================================== |
2 | // | |
3 | // OpenSPARC T2 Processor File: jdia_checkers.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 | module jdia_checkers; | |
36 | ||
37 | `define jdia_top `CPU.dmu | |
38 | //`define jdia_clk `jdia_top.iol2clk | |
39 | `define jdia_clk `jdia_top.iol2clk | |
40 | //`define jdia_rst ~`jdia_top.rst_wmr_ | |
41 | `define jdia_rst ~`jdia_top.wmr_ | |
42 | ||
43 | ||
44 | //////////////////////// | |
45 | // known/driven checkers | |
46 | ||
47 | `ifdef X_GUARD | |
48 | ||
49 | /* 0in known_driven -var `jdia_top.j2d_di_cmd_vld | |
50 | -clock `jdia_clk -reset `jdia_rst */ | |
51 | /* 0in known_driven -var `jdia_top.j2d_di_cmd | |
52 | -active `jdia_top.j2d_di_cmd_vld | |
53 | -clock `jdia_clk -reset `jdia_rst */ | |
54 | /* 0in known_driven -var `jdia_top.j2d_di_ctag | |
55 | -active `jdia_top.j2d_di_cmd_vld | |
56 | -clock `jdia_clk -reset `jdia_rst */ | |
57 | ||
58 | /* 0in known_driven -var `jdia_top.j2d_d_data_vld | |
59 | -clock `jdia_clk -reset `jdia_rst */ | |
60 | /* 0in known_driven -var `jdia_top.j2d_d_data | |
61 | -active `jdia_top.j2d_d_data_vld | |
62 | -clock `jdia_clk -reset `jdia_rst */ | |
63 | /* 0in known_driven -var `jdia_top.j2d_d_data_par | |
64 | -active `jdia_top.j2d_d_data_vld | |
65 | -clock `jdia_clk -reset `jdia_rst */ | |
66 | /* 0in known_driven -var `jdia_top.j2d_d_data_err | |
67 | -active `jdia_top.j2d_d_data_vld | |
68 | -clock `jdia_clk -reset `jdia_rst */ | |
69 | ||
70 | /* 0in known_driven -var `jdia_top.j2d_d_wrack_vld | |
71 | -clock `jdia_clk -reset `jdia_rst */ | |
72 | /* 0in known_driven -var `jdia_top.j2d_d_wrack_tag | |
73 | -active `jdia_top.j2d_d_wrack_vld | |
74 | -clock `jdia_clk -reset `jdia_rst */ | |
75 | ||
76 | /* 0in known_driven -var `jdia_top.j2d_p_cmd_vld | |
77 | -clock `jdia_clk -reset `jdia_rst */ | |
78 | /* 0in known_driven -var `jdia_top.j2d_p_cmd | |
79 | -active `jdia_top.j2d_p_cmd_vld | |
80 | -clock `jdia_clk -reset `jdia_rst */ | |
81 | /* 0in known_driven -var `jdia_top.j2d_p_addr | |
82 | -active `jdia_top.j2d_p_cmd_vld | |
83 | -clock `jdia_clk -reset `jdia_rst */ | |
84 | /* 0in known_driven -var `jdia_top.j2d_p_bmsk | |
85 | -active `jdia_top.j2d_p_cmd_vld | |
86 | -clock `jdia_clk -reset `jdia_rst */ | |
87 | /* 0in known_driven -var `jdia_top.j2d_p_ctag | |
88 | -active `jdia_top.j2d_p_cmd_vld | |
89 | -clock `jdia_clk -reset `jdia_rst */ | |
90 | ||
91 | /* 0in known_driven -var `jdia_top.d2j_cmd_vld | |
92 | -clock `jdia_clk -reset `jdia_rst */ | |
93 | /* 0in known_driven -var `jdia_top.d2j_cmd | |
94 | -active `jdia_top.d2j_cmd_vld | |
95 | -clock `jdia_clk -reset `jdia_rst */ | |
96 | /* 0in known_driven -var `jdia_top.d2j_addr | |
97 | -active `jdia_top.d2j_cmd_vld | |
98 | -clock `jdia_clk -reset `jdia_rst */ | |
99 | /* 0in known_driven -var `jdia_top.d2j_ctag | |
100 | -active `jdia_top.d2j_cmd_vld | |
101 | -clock `jdia_clk -reset `jdia_rst */ | |
102 | ||
103 | /* 0in known_driven -var `jdia_top.d2j_data_vld | |
104 | -clock `jdia_clk -reset `jdia_rst */ | |
105 | /* 0in known_driven -var `jdia_top.d2j_data | |
106 | -active `jdia_top.d2j_data_vld | |
107 | -clock `jdia_clk -reset `jdia_rst */ | |
108 | /* 0in known_driven -var `jdia_top.d2j_data_par | |
109 | -active `jdia_top.d2j_data_vld | |
110 | -clock `jdia_clk -reset `jdia_rst */ | |
111 | /* 0in known_driven -var `jdia_top.d2j_bmsk | |
112 | -active `jdia_top.d2j_data_vld | |
113 | -clock `jdia_clk -reset `jdia_rst */ | |
114 | ||
115 | /* 0in known_driven -var `jdia_top.d2j_p_wrack_vld | |
116 | -clock `jdia_clk -reset `jdia_rst */ | |
117 | /* 0in known_driven -var `jdia_top.d2j_p_wrack_tag | |
118 | -active `jdia_top.d2j_p_wrack_vld | |
119 | -clock `jdia_clk -reset `jdia_rst */ | |
120 | ||
121 | /* 0in known_driven -var `jdia_top.j2d_mmu_addr_vld | |
122 | -clock `jdia_clk -reset `jdia_rst */ | |
123 | /* 0in known_driven -var `jdia_top.j2d_mmu_addr | |
124 | -active `jdia_top.j2d_mmu_addr_vld | |
125 | -clock `jdia_clk -reset `jdia_rst */ | |
126 | ||
127 | `endif // `ifdef X_GUARD | |
128 | ||
129 | /////////////////////// | |
130 | // valid value checkers | |
131 | ||
132 | /* 0in value -var `jdia_top.j2d_p_cmd | |
133 | -val 4'h4 4'h5 4'h6 4'h7 4'hc 4'hd 4'he 4'hf | |
134 | -active `jdia_top.j2d_p_cmd_vld | |
135 | -clock `jdia_clk -reset `jdia_rst */ | |
136 | ||
137 | /* 0in value -var `jdia_top.d2j_cmd | |
138 | -val 4'h0 4'h1 4'h2 4'h3 4'h4 4'h8 4'ha 4'hb | |
139 | -active `jdia_top.d2j_cmd_vld | |
140 | -clock `jdia_clk -reset `jdia_rst */ | |
141 | ||
142 | // d2j_ctag[15] = 0 for dma rd, 1 for dma rds, 0 for int | |
143 | ||
144 | ||
145 | ////////////////// | |
146 | // parity checkers | |
147 | ||
148 | /* 0in value -var `jdia_top.j2d_d_data_par[3] | |
149 | -val ~^(`jdia_top.j2d_d_data[127:96]) | |
150 | -active `jdia_top.j2d_d_data_vld | |
151 | -clock `jdia_clk -reset `jdia_rst */ | |
152 | /* 0in value -var `jdia_top.j2d_d_data_par[2] | |
153 | -val ~^(`jdia_top.j2d_d_data[95:64]) | |
154 | -active `jdia_top.j2d_d_data_vld | |
155 | -clock `jdia_clk -reset `jdia_rst */ | |
156 | /* 0in value -var `jdia_top.j2d_d_data_par[1] | |
157 | -val ~^(`jdia_top.j2d_d_data[63:32]) | |
158 | -active `jdia_top.j2d_d_data_vld | |
159 | -clock `jdia_clk -reset `jdia_rst */ | |
160 | /* 0in value -var `jdia_top.j2d_d_data_par[0] | |
161 | -val ~^(`jdia_top.j2d_d_data[31:0]) | |
162 | -active `jdia_top.j2d_d_data_vld | |
163 | -clock `jdia_clk -reset `jdia_rst */ | |
164 | ||
165 | /* 0in value -var `jdia_top.j2d_p_data_par[3] | |
166 | -val ~^(`jdia_top.j2d_p_data[127:96]) | |
167 | -active `jdia_top.j2d_p_data_vld | |
168 | -clock `jdia_clk -reset `jdia_rst */ | |
169 | /* 0in value -var `jdia_top.j2d_p_data_par[2] | |
170 | -val ~^(`jdia_top.j2d_p_data[95:64]) | |
171 | -active `jdia_top.j2d_p_data_vld | |
172 | -clock `jdia_clk -reset `jdia_rst */ | |
173 | /* 0in value -var `jdia_top.j2d_p_data_par[1] | |
174 | -val ~^(`jdia_top.j2d_p_data[63:32]) | |
175 | -active `jdia_top.j2d_p_data_vld | |
176 | -clock `jdia_clk -reset `jdia_rst */ | |
177 | /* 0in value -var `jdia_top.j2d_p_data_par[0] | |
178 | -val ~^(`jdia_top.j2d_p_data[31:0]) | |
179 | -active `jdia_top.j2d_p_data_vld | |
180 | -clock `jdia_clk -reset `jdia_rst */ | |
181 | ||
182 | /* 0in value -var `jdia_top.d2j_data_par[4] | |
183 | -val ~^(`jdia_top.d2j_data[127:96]) | |
184 | -active `jdia_top.d2j_data_vld | |
185 | -clock `jdia_clk -reset `jdia_rst */ | |
186 | /* 0in value -var `jdia_top.d2j_data_par[3] | |
187 | -val ~^(`jdia_top.d2j_data[95:64]) | |
188 | -active `jdia_top.d2j_data_vld | |
189 | -clock `jdia_clk -reset `jdia_rst */ | |
190 | /* 0in value -var `jdia_top.d2j_data_par[2] | |
191 | -val ~^(`jdia_top.d2j_data[63:32]) | |
192 | -active `jdia_top.d2j_data_vld | |
193 | -clock `jdia_clk -reset `jdia_rst */ | |
194 | /* 0in value -var `jdia_top.d2j_data_par[1] | |
195 | -val ~^(`jdia_top.d2j_data[31:0]) | |
196 | -active `jdia_top.d2j_data_vld | |
197 | -clock `jdia_clk -reset `jdia_rst */ | |
198 | /* 0in value -var `jdia_top.d2j_data_par[0] | |
199 | -val ~^(`jdia_top.d2j_bmsk) | |
200 | -active `jdia_top.d2j_data_vld | |
201 | -clock `jdia_clk -reset `jdia_rst */ | |
202 | ||
203 | ||
204 | //////////////////// | |
205 | // protocol checkers | |
206 | ||
207 | wire [63:0] dma_wr_current_fifo_entries, | |
208 | dma_rd_current_fifo_entries, | |
209 | interrupt_current_fifo_entries ; | |
210 | ||
211 | // dma full write / dma partial write | |
212 | /* 0in fifo -depth 16 | |
213 | -enq ( `jdia_top.d2j_cmd_vld & ( ( `jdia_top.d2j_cmd == 4'h0 ) | |
214 | | ( `jdia_top.d2j_cmd == 4'h1 ) ) ) | |
215 | -deq `jdia_top.j2d_d_wrack_vld | |
216 | -current_fifo_entries dma_wr_current_fifo_entries | |
217 | -name enq_deq_dmawr | |
218 | -clock `jdia_clk | |
219 | -reset `jdia_rst | |
220 | */ | |
221 | ||
222 | // dma read / dma read shared | |
223 | /* 0in fifo -depth 16 | |
224 | -enq ( `jdia_top.d2j_cmd_vld & ( ( `jdia_top.d2j_cmd == 4'h2 ) | |
225 | | ( `jdia_top.d2j_cmd == 4'h3 ) ) ) | |
226 | -deq ( `jdia_top.j2d_di_cmd_vld & ( ( `jdia_top.j2d_di_cmd == 2'h0 ) | |
227 | | ( `jdia_top.j2d_di_cmd == 2'h1 ) ) ) | |
228 | -current_fifo_entries dma_rd_current_fifo_entries | |
229 | -name enq_deq_dmard | |
230 | -clock `jdia_clk | |
231 | -reset `jdia_rst | |
232 | */ | |
233 | ||
234 | // interrupt | |
235 | /* 0in fifo -depth 4 | |
236 | -enq ( `jdia_top.d2j_cmd_vld & ( `jdia_top.d2j_cmd == 4'b0100 ) ) | |
237 | -deq ( `jdia_top.j2d_di_cmd_vld & ( ( `jdia_top.j2d_di_cmd == 2'h2 ) | |
238 | | ( `jdia_top.j2d_di_cmd == 2'h3 ) ) ) | |
239 | -current_fifo_entries interrupt_current_fifo_entries | |
240 | -name enq_deq_int | |
241 | -clock `jdia_clk | |
242 | -reset `jdia_rst | |
243 | */ | |
244 | ||
245 | // sum of dma rd/wr and interrupt entries does not exceed 16 | |
246 | /* 0in max 16 | |
247 | -var ( dma_wr_current_fifo_entries + | |
248 | dma_rd_current_fifo_entries + | |
249 | interrupt_current_fifo_entries ) | |
250 | -clock `jdia_clk | |
251 | -reset `jdia_rst | |
252 | */ | |
253 | ||
254 | wire [63:0] pio_wr_current_fifo_entries, | |
255 | pio_rd_current_fifo_entries ; | |
256 | ||
257 | // pio read | |
258 | /* 0in fifo -depth 16 | |
259 | -enq ( `jdia_top.j2d_p_cmd_vld & ( ( `jdia_top.j2d_p_cmd == 4'hc ) | |
260 | | ( `jdia_top.j2d_p_cmd == 4'hd ) | |
261 | | ( `jdia_top.j2d_p_cmd == 4'he ) | |
262 | | ( `jdia_top.j2d_p_cmd == 4'hf ) ) ) | |
263 | -deq ( `jdia_top.d2j_cmd_vld & ( ( `jdia_top.d2j_cmd == 4'h8 ) | |
264 | | ( `jdia_top.d2j_cmd == 4'ha ) | |
265 | | ( `jdia_top.d2j_cmd == 4'hb ) ) ) | |
266 | -current_fifo_entries pio_rd_current_fifo_entries | |
267 | -clock `jdia_clk | |
268 | -reset `jdia_rst | |
269 | */ | |
270 | ||
271 | // pio write | |
272 | /* 0in fifo -depth 16 | |
273 | -enq ( `jdia_top.j2d_p_cmd_vld & ( ( `jdia_top.j2d_p_cmd == 4'h4 ) | |
274 | | ( `jdia_top.j2d_p_cmd == 4'h5 ) | |
275 | | ( `jdia_top.j2d_p_cmd == 4'h6 ) | |
276 | | ( `jdia_top.j2d_p_cmd == 4'h7 ) ) ) | |
277 | -deq `jdia_top.d2j_p_wrack_vld | |
278 | -current_fifo_entries pio_wr_current_fifo_entries | |
279 | -clock `jdia_clk | |
280 | -reset `jdia_rst | |
281 | */ | |
282 | ||
283 | ||
284 | // sum of pio rd/wr entries does not exceed 16 | |
285 | /* 0in max 16 | |
286 | -var ( pio_rd_current_fifo_entries + | |
287 | pio_wr_current_fifo_entries ) | |
288 | -clock `jdia_clk | |
289 | -reset `jdia_rst | |
290 | */ | |
291 | ||
292 | //////////////// | |
293 | // data checkers | |
294 | ||
295 | // dma full write / dma partial write | |
296 | /* 0in assert_follower | |
297 | -leader ( `jdia_top.d2j_cmd_vld & ( ( `jdia_top.d2j_cmd == 4'h0 ) | |
298 | | ( `jdia_top.d2j_cmd == 4'h1 ) ) ) | |
299 | -follower `jdia_top.d2j_data_vld | |
300 | -clock `jdia_clk -reset `jdia_rst */ | |
301 | /* 0in change_window | |
302 | -start ( `jdia_top.d2j_cmd_vld & ( ( `jdia_top.d2j_cmd == 4'h0 ) | |
303 | | ( `jdia_top.d2j_cmd == 4'h1 ) ) ) | |
304 | -stop_count 3 | |
305 | -not_in `jdia_top.d2j_data_vld | |
306 | -clock `jdia_clk -reset `jdia_rst */ | |
307 | ||
308 | ||
309 | // dma read (no error) | |
310 | /* 0in assert_follower | |
311 | -leader ( `jdia_top.j2d_di_cmd_vld & ( `jdia_top.j2d_di_cmd == 2'h0 ) ) | |
312 | -follower `jdia_top.j2d_d_data_vld | |
313 | -clock `jdia_clk -reset `jdia_rst */ | |
314 | /* 0in change_window | |
315 | -start ( `jdia_top.j2d_di_cmd_vld & ( `jdia_top.j2d_di_cmd == 2'h0 ) ) | |
316 | -stop_count 3 | |
317 | -not_in `jdia_top.j2d_d_data_vld | |
318 | -clock `jdia_clk -reset `jdia_rst */ | |
319 | ||
320 | // pio write | |
321 | /* 0in assert_follower | |
322 | -leader ( `jdia_top.j2d_p_cmd_vld & ( ( `jdia_top.j2d_p_cmd == 4'h4 ) | |
323 | | ( `jdia_top.j2d_p_cmd == 4'h5 ) | |
324 | | ( `jdia_top.j2d_p_cmd == 4'h6 ) | |
325 | | ( `jdia_top.j2d_p_cmd == 4'h7 ) ) ) | |
326 | -follower `jdia_top.j2d_p_data_vld | |
327 | -clock `jdia_clk -reset `jdia_rst */ | |
328 | ||
329 | // pio read | |
330 | /* 0in assert_follower | |
331 | -leader ( `jdia_top.d2j_cmd_vld & ( `jdia_top.d2j_cmd == 4'h8 ) ) | |
332 | -follower `jdia_top.d2j_data_vld | |
333 | -clock `jdia_clk -reset `jdia_rst */ | |
334 | ||
335 | ||
336 | ////////////////////////// | |
337 | // transaction id checkers | |
338 | ||
339 | // dma full write / dma partial write | |
340 | /* 0in bus_id | |
341 | -req ( `jdia_top.d2j_cmd_vld & ( ( `jdia_top.d2j_cmd == 4'h0 ) | |
342 | | ( `jdia_top.d2j_cmd == 4'h1 ) ) ) | |
343 | -req_id `jdia_top.d2j_ctag[14:11] | |
344 | -ret `jdia_top.j2d_d_wrack_vld | |
345 | -ret_id `jdia_top.j2d_d_wrack_tag | |
346 | -clock `jdia_clk -reset `jdia_rst */ | |
347 | ||
348 | // dma read / dma read shared | |
349 | /* 0in bus_id | |
350 | -req ( `jdia_top.d2j_cmd_vld & ( ( `jdia_top.d2j_cmd == 4'h2 ) | |
351 | | ( `jdia_top.d2j_cmd == 4'h3 ) ) ) | |
352 | -req_id `jdia_top.d2j_ctag[14:11] | |
353 | -ret ( `jdia_top.j2d_di_cmd_vld & ( ( `jdia_top.j2d_di_cmd == 2'h0 ) | |
354 | | ( `jdia_top.j2d_di_cmd == 2'h1 ) ) ) | |
355 | -ret_id `jdia_top.j2d_di_ctag[14:11] | |
356 | -clock `jdia_clk -reset `jdia_rst */ | |
357 | ||
358 | // pio read | |
359 | /* 0in bus_id | |
360 | -req ( `jdia_top.j2d_p_cmd_vld & ( ( `jdia_top.j2d_p_cmd == 4'hc ) | |
361 | | ( `jdia_top.j2d_p_cmd == 4'hd ) | |
362 | | ( `jdia_top.j2d_p_cmd == 4'he ) | |
363 | | ( `jdia_top.j2d_p_cmd == 4'hf ) ) ) | |
364 | -req_id `jdia_top.j2d_p_ctag[10:7] | |
365 | -ret ( `jdia_top.d2j_cmd_vld & ( ( `jdia_top.d2j_cmd == 4'h8 ) | |
366 | | ( `jdia_top.d2j_cmd == 4'ha ) | |
367 | | ( `jdia_top.d2j_cmd == 4'hb ) ) ) | |
368 | -ret_id `jdia_top.d2j_ctag[11:8] | |
369 | -clock `jdia_clk -reset `jdia_rst */ | |
370 | ||
371 | // pio write | |
372 | /* 0in bus_id | |
373 | -req ( `jdia_top.j2d_p_cmd_vld & ( ( `jdia_top.j2d_p_cmd == 4'h4 ) | |
374 | | ( `jdia_top.j2d_p_cmd == 4'h5 ) | |
375 | | ( `jdia_top.j2d_p_cmd == 4'h6 ) | |
376 | | ( `jdia_top.j2d_p_cmd == 4'h7 ) ) ) | |
377 | -req_id `jdia_top.j2d_p_ctag[10:7] | |
378 | -ret `jdia_top.d2j_p_wrack_vld | |
379 | -ret_id `jdia_top.d2j_p_wrack_tag | |
380 | -clock `jdia_clk -reset `jdia_rst */ | |
381 | ||
382 | // interrupt | |
383 | ///* x0in bus_id | |
384 | // -req ( `jdia_top.d2j_cmd_vld & ( `jdia_top.d2j_cmd == 4'b0100 ) ) | |
385 | // -req_id `jdia_top.d2j_ctag[14:11] | |
386 | // -ret ( `jdia_top.j2d_di_cmd_vld & ( ( `jdia_top.j2d_di_cmd == 2'h2 ) | |
387 | // | ( `jdia_top.j2d_di_cmd == 2'h3 ) ) ) | |
388 | // -ret_id `jdia_top.j2d_di_ctag[14:11] | |
389 | // -clock `jdia_clk -reset `jdia_rst */ | |
390 | ||
391 | ||
392 | endmodule // jdia_checkers |