Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | // ========== Copyright Header Begin ========================================== |
2 | // | |
3 | // OpenSPARC T2 Processor File: dmu_siu_chkr.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 | `ifdef SIU | |
36 | `define TOP siu_top | |
37 | `else | |
38 | `define TOP tb_top | |
39 | `endif | |
40 | module dmu_siu_chkr(); | |
41 | ||
42 | // set this to -constraint to constrain input signals to SIU | |
43 | `define SIU_CONSTRAINT | |
44 | // set this to -constraint to constrain input signals to DMU | |
45 | `define DMU_CONSTRAINT | |
46 | ||
47 | `define WRI_ORD_PST 7'b0100100 | |
48 | `define WRM_ORD_PST 7'b0101100 | |
49 | `define RDD_ORD_NPT 7'b0010100 | |
50 | `define INT_ORD_NPT 7'b0000010 | |
51 | `define PIO_BYP_NPT 7'b1x1x011 | |
52 | ||
53 | `ifdef FC_BENCH | |
54 | `else | |
55 | `ifdef IOS | |
56 | // 0in set_clock iol2clk -default -module dmu | |
57 | `else | |
58 | // 0in set_clock ccu_io_out -default -module cpu | |
59 | `endif | |
60 | `endif | |
61 | ||
62 | `ifdef FC_BENCH | |
63 | `define TOP_DESIGN_DMU_INTF dmu | |
64 | `else | |
65 | `define TOP_DESIGN_DMU_INTF cpu | |
66 | `endif | |
67 | ||
68 | ||
69 | `ifdef FC_BENCH | |
70 | reg bid_chk_off; | |
71 | initial begin // { | |
72 | @(posedge tb_top.cpu.ncu.iol2clk) ; | |
73 | if ($test$plusargs("dmusiu_bid_chk_off")) | |
74 | bid_chk_off <= 1; | |
75 | else | |
76 | bid_chk_off <= 0; | |
77 | end //} | |
78 | ||
79 | // 0in disable_checker bid_chk_off -name *dmu_bus_id* | |
80 | `endif | |
81 | ||
82 | /////////////////////////////////////////////////////////////////////////////// | |
83 | // Check that all interface signals are not X or Z. This check can be disabled | |
84 | // by not including the +define+X_GUARD arg on the command line. | |
85 | /////////////////////////////////////////////////////////////////////////////// | |
86 | `ifdef X_GUARD | |
87 | // 0in known_driven -var dmu_sii_hdr_vld -name dmu_sii_hdr_vld_x_guard -module `TOP_DESIGN_DMU_INTF | |
88 | // 0in known_driven -var dmu_sii_reqbypass -name dmu_sii_reqbypass_x_guard -module `TOP_DESIGN_DMU_INTF | |
89 | // 0in known_driven -var dmu_sii_datareq -name dmu_sii_datareq_x_guard -module `TOP_DESIGN_DMU_INTF | |
90 | // 0in known_driven -var dmu_sii_datareq16 -name dmu_sii_datareq16_x_guard -module `TOP_DESIGN_DMU_INTF | |
91 | // 0in known_driven -var dmu_sii_data -name dmu_sii_data_x_guard -module `TOP_DESIGN_DMU_INTF | |
92 | // 0in known_driven -var dmu_sii_parity -name dmu_sii_parity_x_guard -module `TOP_DESIGN_DMU_INTF | |
93 | // 0in known_driven -var dmu_sii_be -name dmu_sii_be_x_guard -module `TOP_DESIGN_DMU_INTF | |
94 | // 0in known_driven -var sii_dmu_wrack_vld -name sii_dmu_wrack_vld_x_guard -module `TOP_DESIGN_DMU_INTF | |
95 | // 0in known_driven -var sii_dmu_wrack_tag -name sii_dmu_wrack_tag_x_guard -module `TOP_DESIGN_DMU_INTF | |
96 | ||
97 | // 0in known_driven -var sio_dmu_hdr_vld -name sio_dmu_hdr_vld_x_guard -module `TOP_DESIGN_DMU_INTF | |
98 | // 0in known_driven -var sio_dmu_data -name sio_dmu_data_x_guard -module `TOP_DESIGN_DMU_INTF | |
99 | // 0in known_driven -var sio_dmu_parity -name sio_dmu_parity_x_guard -module `TOP_DESIGN_DMU_INTF | |
100 | `endif | |
101 | ||
102 | `define DMU_SII_COMMAND {dmu_sii_data[127:122], dmu_sii_reqbypass} | |
103 | `define DMC_TAG dmu_sii_data[79:64] | |
104 | ||
105 | /////////////////////////////////////////////////////////////////////////////// | |
106 | // Check for valid commands from DMU to SIU | |
107 | /////////////////////////////////////////////////////////////////////////////// | |
108 | ||
109 | /* 0in value -var `DMU_SII_COMMAND -casex | |
110 | -val `WRI_ORD_PST `WRM_ORD_PST `RDD_ORD_NPT `INT_ORD_NPT `PIO_BYP_NPT | |
111 | -active dmu_sii_hdr_vld -module `TOP_DESIGN_DMU_INTF -name dmu_sii_hdr_cmd_vld | |
112 | -message "Bad value for dmu_siu header" | |
113 | `SIU_CONSTRAINT | |
114 | */ | |
115 | ||
116 | ||
117 | // check for reserved bits of header | |
118 | /* 0in value | |
119 | -var {dmu_sii_data[121:85],dmu_sii_data[63], dmu_sii_data[55:40], dmu_sii_data[5:0]} | |
120 | -val 0 | |
121 | -active dmu_sii_hdr_vld -module `TOP_DESIGN_DMU_INTF -name dmu_sii_hdr_rsrvd_bits | |
122 | -message "reserved bits in header are not all zero" | |
123 | `SIU_CONSTRAINT | |
124 | */ | |
125 | ||
126 | ||
127 | /////////////////////////////////////////////////////////////////////////////// | |
128 | // Check for no overlap of transactions: | |
129 | // 1. After dmu_sii_hdr_vld & dmu_sii_datareq16, | |
130 | // dmu_sii_hdr_vld and datareq signals are 0 for 1 cycle. | |
131 | // 2. After dmu_sii_datareq and not dmu_sii_datareq16, | |
132 | // dmu_sii_hdr_vld and datareq signals are 0 for 4 cycles. | |
133 | /////////////////////////////////////////////////////////////////////////////// | |
134 | ||
135 | /* 0in assert_window | |
136 | -start (dmu_sii_hdr_vld & dmu_sii_datareq16) | |
137 | -start_count 0 | |
138 | -stop_count 1 | |
139 | -not_in dmu_sii_hdr_vld dmu_sii_datareq16 dmu_sii_datareq | |
140 | -module `TOP_DESIGN_DMU_INTF -name dmu_siu_no_overlap_chk1 `SIU_CONSTRAINT | |
141 | */ | |
142 | ||
143 | /* 0in assert_window | |
144 | -start (dmu_sii_hdr_vld & dmu_sii_datareq & !dmu_sii_datareq16) | |
145 | -start_count 0 | |
146 | -stop_count 4 | |
147 | -not_in dmu_sii_hdr_vld dmu_sii_datareq16 dmu_sii_datareq | |
148 | -module `TOP_DESIGN_DMU_INTF -name dmu_siu_no_overlap_chk2 `SIU_CONSTRAINT | |
149 | */ | |
150 | ||
151 | ||
152 | /////////////////////////////////////////////////////////////////////////////// | |
153 | // Check for good parity on header | |
154 | /////////////////////////////////////////////////////////////////////////////// | |
155 | ||
156 | /* x0in | |
157 | even_parity -var {dmu_sii_data[127:64], dmu_sii_parity[1]} | |
158 | -active dmu_sii_hdr_vld -module `TOP_DESIGN_DMU_INTF `SIU_CONSTRAINT | |
159 | -name dmu_sii_hdr_parity1 ; | |
160 | even_parity -var {dmu_sii_data[ 63: 0], dmu_sii_parity[0]} | |
161 | -active dmu_sii_hdr_vld -module `TOP_DESIGN_DMU_INTF `SIU_CONSTRAINT | |
162 | -name dmu_sii_hdr_parity0 | |
163 | */ | |
164 | ||
165 | /* x0in | |
166 | even_parity -var {dmu_sii_data[127:96], dmu_sii_parity[3]} | |
167 | -active dmu_sii_hdr_vld -module `TOP_DESIGN_DMU_INTF `SIU_CONSTRAINT | |
168 | -name dmu_sii_hdr_parity3 ; | |
169 | even_parity -var {dmu_sii_data[ 95:64], dmu_sii_parity[2]} | |
170 | -active dmu_sii_hdr_vld -module `TOP_DESIGN_DMU_INTF `SIU_CONSTRAINT | |
171 | -name dmu_sii_hdr_parity2 ; | |
172 | even_parity -var {dmu_sii_data[ 63:32], dmu_sii_parity[1]} | |
173 | -active dmu_sii_hdr_vld -module `TOP_DESIGN_DMU_INTF `SIU_CONSTRAINT | |
174 | -name dmu_sii_hdr_parity1 ; | |
175 | even_parity -var {dmu_sii_data[ 31: 0], dmu_sii_parity[0]} | |
176 | -active dmu_sii_hdr_vld -module `TOP_DESIGN_DMU_INTF `SIU_CONSTRAINT | |
177 | -name dmu_sii_hdr_parity0 | |
178 | */ | |
179 | ||
180 | ||
181 | /////////////////////////////////////////////////////////////////////////////// | |
182 | // Check for good parity on data0, data1, data2, and data3 | |
183 | // - DSN spec says that there are 4 parity bits, but sii rtl only has 2. | |
184 | /////////////////////////////////////////////////////////////////////////////// | |
185 | ||
186 | /* x0in | |
187 | even_parity -var {dmu_sii_data[127:64], dmu_sii_parity[1]} `SIU_CONSTRAINT | |
188 | -active $0in_delay((dmu_sii_hdr_vld & (dmu_sii_datareq16|dmu_sii_datareq)), 1 ) | |
189 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data0_parity1 ; | |
190 | even_parity -var {dmu_sii_data[ 63: 0], dmu_sii_parity[0]} `SIU_CONSTRAINT | |
191 | -active $0in_delay((dmu_sii_hdr_vld & (dmu_sii_datareq16|dmu_sii_datareq)), 1 ) | |
192 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data0_parity0 | |
193 | */ | |
194 | ||
195 | /* x0in | |
196 | even_parity -var {dmu_sii_data[127:64], dmu_sii_parity[1]} `SIU_CONSTRAINT | |
197 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq & !dmu_sii_datareq16), 2 ) | |
198 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data1_parity1 ; | |
199 | even_parity -var {dmu_sii_data[ 63: 0], dmu_sii_parity[0]} `SIU_CONSTRAINT | |
200 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq & !dmu_sii_datareq16), 2 ) | |
201 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data1_parity0 | |
202 | */ | |
203 | ||
204 | /* x0in | |
205 | even_parity -var {dmu_sii_data[127:64], dmu_sii_parity[1]} `SIU_CONSTRAINT | |
206 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq & !dmu_sii_datareq16), 3 ) | |
207 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data2_parity1 ; | |
208 | even_parity -var {dmu_sii_data[ 63: 0], dmu_sii_parity[0]} `SIU_CONSTRAINT | |
209 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq & !dmu_sii_datareq16), 3 ) | |
210 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data2_parity0 | |
211 | */ | |
212 | ||
213 | /* x0in | |
214 | even_parity -var {dmu_sii_data[127:64], dmu_sii_parity[1]} `SIU_CONSTRAINT | |
215 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq & !dmu_sii_datareq16), 4 ) | |
216 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data3_parity1 ; | |
217 | even_parity -var {dmu_sii_data[ 63: 0], dmu_sii_parity[0]} `SIU_CONSTRAINT | |
218 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq & !dmu_sii_datareq16), 4 ) | |
219 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data3_parity0 | |
220 | */ | |
221 | ||
222 | ||
223 | /* x0in | |
224 | even_parity -var {dmu_sii_data[127:96], dmu_sii_parity[3]} `SIU_CONSTRAINT | |
225 | -active $0in_delay((dmu_sii_hdr_vld & (dmu_sii_datareq16|dmu_sii_datareq)), 1 ) | |
226 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data0_parity3 ; | |
227 | even_parity -var {dmu_sii_data[ 95:64], dmu_sii_parity[2]} `SIU_CONSTRAINT | |
228 | -active $0in_delay((dmu_sii_hdr_vld & (dmu_sii_datareq16|dmu_sii_datareq)), 1 ) | |
229 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data0_parity2 ; | |
230 | even_parity -var {dmu_sii_data[ 63:32], dmu_sii_parity[1]} `SIU_CONSTRAINT | |
231 | -active $0in_delay((dmu_sii_hdr_vld & (dmu_sii_datareq16|dmu_sii_datareq)), 1 ) | |
232 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data0_parity1 ; | |
233 | even_parity -var {dmu_sii_data[ 31: 0], dmu_sii_parity[0]} `SIU_CONSTRAINT | |
234 | -active $0in_delay((dmu_sii_hdr_vld & (dmu_sii_datareq16|dmu_sii_datareq)), 1 ) | |
235 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data0_parity0 | |
236 | */ | |
237 | ||
238 | /* x0in | |
239 | even_parity -var {dmu_sii_data[127:96], dmu_sii_parity[3]} | |
240 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq), 2 ) `SIU_CONSTRAINT | |
241 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data1_parity3 ; | |
242 | even_parity -var {dmu_sii_data[ 95:64], dmu_sii_parity[2]} | |
243 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq), 2 ) `SIU_CONSTRAINT | |
244 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data1_parity2 ; | |
245 | even_parity -var {dmu_sii_data[ 63:32], dmu_sii_parity[1]} | |
246 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq), 2 ) `SIU_CONSTRAINT | |
247 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data1_parity1 ; | |
248 | even_parity -var {dmu_sii_data[ 31: 0], dmu_sii_parity[0]} | |
249 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq), 2 ) `SIU_CONSTRAINT | |
250 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data1_parity0 | |
251 | */ | |
252 | ||
253 | /* x0in | |
254 | even_parity -var {dmu_sii_data[127:96], dmu_sii_parity[3]} | |
255 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq), 3 ) `SIU_CONSTRAINT | |
256 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data2_parity3 ; | |
257 | even_parity -var {dmu_sii_data[ 95:64], dmu_sii_parity[2]} | |
258 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq), 3 ) `SIU_CONSTRAINT | |
259 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data2_parity2 ; | |
260 | even_parity -var {dmu_sii_data[ 63:32], dmu_sii_parity[1]} | |
261 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq), 3 ) `SIU_CONSTRAINT | |
262 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data2_parity1 ; | |
263 | even_parity -var {dmu_sii_data[ 31: 0], dmu_sii_parity[0]} | |
264 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq), 3 ) `SIU_CONSTRAINT | |
265 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data2_parity0 | |
266 | */ | |
267 | ||
268 | /* x0in | |
269 | even_parity -var {dmu_sii_data[127:96], dmu_sii_parity[3]} | |
270 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq), 4 ) `SIU_CONSTRAINT | |
271 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data3_parity3 ; | |
272 | even_parity -var {dmu_sii_data[ 95:64], dmu_sii_parity[2]} | |
273 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq), 4 ) `SIU_CONSTRAINT | |
274 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data3_parity2 ; | |
275 | even_parity -var {dmu_sii_data[ 63:32], dmu_sii_parity[1]} | |
276 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq), 4 ) `SIU_CONSTRAINT | |
277 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data3_parity1 ; | |
278 | even_parity -var {dmu_sii_data[ 31: 0], dmu_sii_parity[0]} | |
279 | -active $0in_delay((dmu_sii_hdr_vld & dmu_sii_datareq), 4 ) `SIU_CONSTRAINT | |
280 | -module `TOP_DESIGN_DMU_INTF -name dmu_sii_data3_parity0 | |
281 | */ | |
282 | ||
283 | ||
284 | ||
285 | ||
286 | /////////////////////////////////////////////////////////////////////////////// | |
287 | // Check for no overlap of transactions from sio to dmu: | |
288 | // After dmu_sii_datareq and not dmu_sii_datareq16, | |
289 | // dmu_sii_hdr_vld and datareq signals are 0 for 4 cycles. | |
290 | /////////////////////////////////////////////////////////////////////////////// | |
291 | ||
292 | `define SIO_DMU_COMMAND sio_dmu_data[127:122] | |
293 | `define SIO_DMC_TAG sio_dmu_data[79:64] | |
294 | ||
295 | `ifdef FC_BENCH | |
296 | /* 0in | |
297 | assert_window | |
298 | -start (sio_dmu_hdr_vld) | |
299 | -start_count 0 | |
300 | -stop_count 4 | |
301 | -not_in sio_dmu_hdr_vld | |
302 | -module cpu | |
303 | -clock tb_top.cpu.dmu.iol2clk | |
304 | -name sio_dmu_pkt_no_overlap `DMU_CONSTRAINT | |
305 | */ | |
306 | `else | |
307 | /* 0in | |
308 | assert_window | |
309 | -start (sio_dmu_hdr_vld) | |
310 | -start_count 0 | |
311 | -stop_count 4 | |
312 | -not_in sio_dmu_hdr_vld | |
313 | -module `TOP_DESIGN_DMU_INTF | |
314 | -name sio_dmu_pkt_no_overlap `DMU_CONSTRAINT | |
315 | */ | |
316 | `endif | |
317 | ||
318 | /* x0in value | |
319 | -var `SIO_DMU_COMMAND | |
320 | -casex | |
321 | -val 6'b101010 | |
322 | -active sio_dmu_hdr_vld | |
323 | -module `TOP_DESIGN_DMU_INTF | |
324 | -name sio_dmu_cmd_chk | |
325 | -message "Bad value for sio_dmu header" | |
326 | */ | |
327 | ||
328 | ||
329 | // check for reserved bits of header | |
330 | // UPDATE/check for the differences with RAS changes for RSVD bits | |
331 | /* 0in assert | |
332 | -var ( |{sio_dmu_data[121:82],sio_dmu_data[63:62], sio_dmu_data[55:40]} == 1'b0) | |
333 | -active sio_dmu_hdr_vld | |
334 | -module `TOP_DESIGN_DMU_INTF | |
335 | -name sio_dmu_hdr_rsrvd_bits | |
336 | -message "reserved bits in header are not all zero" | |
337 | */ | |
338 | ||
339 | `ifdef FC_BENCH | |
340 | // RDD | |
341 | /* 0in assert_together | |
342 | -leader ((`SIO_DMU_COMMAND==6'b101010) & sio_dmu_hdr_vld) | |
343 | -follower (sio_dmu_hdr_vld) | |
344 | -module cpu | |
345 | -clock tb_top.cpu.dmu.iol2clk | |
346 | -name sio_dmu_cmd_rdd | |
347 | */ | |
348 | `else | |
349 | /* 0in assert_together | |
350 | -leader ((sio_dmu_data[127]==1'b1) & sio_dmu_hdr_vld) | |
351 | -follower (sio_dmu_hdr_vld) | |
352 | -module `TOP_DESIGN_DMU_INTF | |
353 | -name sio_dmu_cmd_rdd | |
354 | */ | |
355 | `endif | |
356 | ||
357 | /////////////////////////////////////////////////////////////////////////////// | |
358 | // NO check for good parity on header in sio_dmu_data, since SIU does not | |
359 | // generate parity during the header cycle. | |
360 | /////////////////////////////////////////////////////////////////////////////// | |
361 | ||
362 | /* x0inx | |
363 | even_parity -var {sio_dmu_data[127:96], sio_dmu_parity[3]} | |
364 | -active sio_dmu_hdr_vld -module `TOP_DESIGN_DMU_INTF `DMU_CONSTRAINT | |
365 | -name sio_dmu_hdr_parity3 ; | |
366 | even_parity -var {sio_dmu_data[ 95:64], sio_dmu_parity[2]} | |
367 | -active sio_dmu_hdr_vld -module `TOP_DESIGN_DMU_INTF `DMU_CONSTRAINT | |
368 | -name sio_dmu_hdr_parity2 ; | |
369 | even_parity -var {sio_dmu_data[ 63:32], sio_dmu_parity[1]} | |
370 | -active sio_dmu_hdr_vld -module `TOP_DESIGN_DMU_INTF `DMU_CONSTRAINT | |
371 | -name sio_dmu_hdr_parity1 ; | |
372 | even_parity -var {sio_dmu_data[ 31: 0], sio_dmu_parity[0]} | |
373 | -active sio_dmu_hdr_vld -module `TOP_DESIGN_DMU_INTF `DMU_CONSTRAINT | |
374 | -name sio_dmu_hdr_parity0 | |
375 | */ | |
376 | ||
377 | /////////////////////////////////////////////////////////////////////////////// | |
378 | // Check for good parity in sio_dmu_data during data xfer cycles | |
379 | /////////////////////////////////////////////////////////////////////////////// | |
380 | ||
381 | /* x0in | |
382 | even_parity -var {sio_dmu_data[127:96], sio_dmu_parity[3]} `DMU_CONSTRAINT | |
383 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 1 ) -module `TOP_DESIGN_DMU_INTF | |
384 | -name sio_dmu_data0_parity3 ; | |
385 | even_parity -var {sio_dmu_data[ 95:64], sio_dmu_parity[2]} `DMU_CONSTRAINT | |
386 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 1 ) -module `TOP_DESIGN_DMU_INTF | |
387 | -name sio_dmu_data0_parity2 ; | |
388 | even_parity -var {sio_dmu_data[ 63:32], sio_dmu_parity[1]} `DMU_CONSTRAINT | |
389 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 1 ) -module `TOP_DESIGN_DMU_INTF | |
390 | -name sio_dmu_data0_parity1 ; | |
391 | even_parity -var {sio_dmu_data[ 31: 0], sio_dmu_parity[0]} `DMU_CONSTRAINT | |
392 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 1 ) -module `TOP_DESIGN_DMU_INTF | |
393 | -name sio_dmu_data0_parity0 | |
394 | */ | |
395 | ||
396 | /* x0in | |
397 | even_parity -var {sio_dmu_data[127:96], sio_dmu_parity[3]} `DMU_CONSTRAINT | |
398 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 2 ) -module `TOP_DESIGN_DMU_INTF | |
399 | -name sio_dmu_data1_parity3 ; | |
400 | even_parity -var {sio_dmu_data[ 95:64], sio_dmu_parity[2]} `DMU_CONSTRAINT | |
401 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 2 ) -module `TOP_DESIGN_DMU_INTF | |
402 | -name sio_dmu_data1_parity2 ; | |
403 | even_parity -var {sio_dmu_data[ 63:32], sio_dmu_parity[1]} `DMU_CONSTRAINT | |
404 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 2 ) -module `TOP_DESIGN_DMU_INTF | |
405 | -name sio_dmu_data1_parity1 ; | |
406 | even_parity -var {sio_dmu_data[ 31: 0], sio_dmu_parity[0]} `DMU_CONSTRAINT | |
407 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 2 ) -module `TOP_DESIGN_DMU_INTF | |
408 | -name sio_dmu_data1_parity0 | |
409 | */ | |
410 | ||
411 | /* x0in | |
412 | even_parity -var {sio_dmu_data[127:96], sio_dmu_parity[3]} `DMU_CONSTRAINT | |
413 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 3 ) -module `TOP_DESIGN_DMU_INTF | |
414 | -name sio_dmu_data2_parity3 ; | |
415 | even_parity -var {sio_dmu_data[ 95:64], sio_dmu_parity[2]} `DMU_CONSTRAINT | |
416 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 3 ) -module `TOP_DESIGN_DMU_INTF | |
417 | -name sio_dmu_data2_parity2 ; | |
418 | even_parity -var {sio_dmu_data[ 63:32], sio_dmu_parity[1]} `DMU_CONSTRAINT | |
419 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 3 ) -module `TOP_DESIGN_DMU_INTF | |
420 | -name sio_dmu_data2_parity1 ; | |
421 | even_parity -var {sio_dmu_data[ 31: 0], sio_dmu_parity[0]} `DMU_CONSTRAINT | |
422 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 3 ) -module `TOP_DESIGN_DMU_INTF | |
423 | -name sio_dmu_data2_parity0 | |
424 | */ | |
425 | ||
426 | /* x0in | |
427 | even_parity -var {sio_dmu_data[127:96], sio_dmu_parity[3]} `DMU_CONSTRAINT | |
428 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 4 ) -module `TOP_DESIGN_DMU_INTF | |
429 | -name sio_dmu_data3_parity3 ; | |
430 | even_parity -var {sio_dmu_data[ 95:64], sio_dmu_parity[2]} `DMU_CONSTRAINT | |
431 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 4 ) -module `TOP_DESIGN_DMU_INTF | |
432 | -name sio_dmu_data3_parity2 ; | |
433 | even_parity -var {sio_dmu_data[ 63:32], sio_dmu_parity[1]} `DMU_CONSTRAINT | |
434 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 4 ) -module `TOP_DESIGN_DMU_INTF | |
435 | -name sio_dmu_data3_parity1 ; | |
436 | even_parity -var {sio_dmu_data[ 31: 0], sio_dmu_parity[0]} `DMU_CONSTRAINT | |
437 | -active $0in_delay((sio_dmu_hdr_vld & sio_dmu_datareq), 4 ) -module `TOP_DESIGN_DMU_INTF | |
438 | -name sio_dmu_data3_parity0 | |
439 | */ | |
440 | ||
441 | /* 0in bus_id | |
442 | -req (dmu_sii_hdr_vld & ~dmu_sii_data[126] & dmu_sii_data[123]) | |
443 | -ret sio_dmu_hdr_vld | |
444 | -req_id dmu_sii_data[79:64] | |
445 | -ret_id sio_dmu_data[79:64] | |
446 | -max_ids 65536 | |
447 | -max_ids_check off | |
448 | -module `TOP_DESIGN_DMU_INTF | |
449 | -name dmu_bus_id | |
450 | */ | |
451 | ||
452 | ||
453 | //////////////////////////////////////////////////////////////////////////////// | |
454 | // Each WRI and WRM Transaction to sii has to be followed by a sii_dmu_wrack_vld | |
455 | // and the other way also | |
456 | ||
457 | //////////////////////////////////////////////////////////////////////////////// | |
458 | /* 0in assert_follower | |
459 | -leader (dmu_sii_hdr_vld & ((`DMU_SII_COMMAND==`WRI_ORD_PST) || (`DMU_SII_COMMAND==`WRM_ORD_PST))) | |
460 | -follower sii_dmu_wrack_vld | |
461 | -min 2 | |
462 | -max 48000 | |
463 | -max_leader 16 | |
464 | -clock ccu_io_out | |
465 | -module `TOP_DESIGN_DMU_INTF | |
466 | -name dmu_sii_wriack_assert_follower | |
467 | */ | |
468 | ||
469 | ||
470 | /* 0in assert_leader | |
471 | -leader (dmu_sii_hdr_vld & ((`DMU_SII_COMMAND==`WRI_ORD_PST) || (`DMU_SII_COMMAND==`WRM_ORD_PST))) | |
472 | -follower sii_dmu_wrack_vld | |
473 | -min 2 | |
474 | -max 48000 | |
475 | -max_leader 16 | |
476 | -clock ccu_io_out | |
477 | -module `TOP_DESIGN_DMU_INTF | |
478 | -name dmu_sii_wriack_assert_leader | |
479 | */ | |
480 | ||
481 | ///////////////////////////////////////////////////////// | |
482 | // Header and signals with Transactions from DMU to SII: | |
483 | // RDD, WRI, INT, PIO | |
484 | ////////////////////////////////////////////////////////// | |
485 | // RDD | |
486 | /* 0in assert_together | |
487 | -leader ((dmu_sii_data[127:122]==6'b001010) & dmu_sii_hdr_vld) | |
488 | -follower (dmu_sii_hdr_vld & ~dmu_sii_datareq & ~dmu_sii_datareq16 & ~dmu_sii_reqbypass) | |
489 | -module `TOP_DESIGN_DMU_INTF | |
490 | -name dmu_sii_cmd_rdd | |
491 | */ | |
492 | ||
493 | // WRI or WRM | |
494 | /* 0in assert_together | |
495 | -leader ((dmu_sii_data[127:122]==6'b010x10) & dmu_sii_hdr_vld) | |
496 | -follower (dmu_sii_hdr_vld & dmu_sii_datareq & ~dmu_sii_datareq16 & ~dmu_sii_reqbypass) | |
497 | -module `TOP_DESIGN_DMU_INTF | |
498 | -name dmu_sii_cmd_wri_wrm | |
499 | */ | |
500 | ||
501 | // INT | |
502 | /* 0in assert_together | |
503 | -leader ((dmu_sii_data[127:122]==6'b000001) & dmu_sii_hdr_vld) | |
504 | -follower (dmu_sii_hdr_vld & dmu_sii_datareq & dmu_sii_datareq16 & ~dmu_sii_reqbypass) | |
505 | -module `TOP_DESIGN_DMU_INTF | |
506 | -name dmu_sii_cmd_int | |
507 | */ | |
508 | ||
509 | // PIO | |
510 | /* 0in assert_together | |
511 | -leader ((dmu_sii_data[127:122]==6'b1x1001) & dmu_sii_hdr_vld) | |
512 | -follower (dmu_sii_hdr_vld & dmu_sii_datareq & dmu_sii_datareq16 & dmu_sii_reqbypass) | |
513 | -module `TOP_DESIGN_DMU_INTF | |
514 | -name dmu_sii_cmd_pio | |
515 | */ | |
516 | ||
517 | ||
518 | ||
519 | endmodule // dmu_siu_chkr |