Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / niu_tdmc_sendmbox.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: niu_tdmc_sendmbox.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 *
37 * NIU TDMC - Mailbox Write Interface to Meta
38 *
39 * Orignal Author(s): Arvind Srinivasan
40 * Modifier(s):
41 * Project(s): Neptune
42 *
43 * Copyright (c) 2004 Sun Microsystems, Inc.
44 *
45 * All Rights Reserved.
46 *
47 * This verilog model is the confidential and proprietary property of
48 * Sun Microsystems, Inc., and the possession or use of this model
49 * requires a written license from Sun Microsystems, Inc.
50 *
51 **********************************************************************/
52
53`include "txc_defines.h"
54`include "niu_dmc_reg_defines.h"
55
56module niu_tdmc_sendmbox (/*AUTOJUNK*/
57 // Outputs
58 mbox_dma0_scheduled, done_mbox_dma0, mbox_ack_dma0_received,
59 mbox_dma1_scheduled, done_mbox_dma1, mbox_ack_dma1_received,
60 mbox_dma2_scheduled, done_mbox_dma2, mbox_ack_dma2_received,
61 mbox_dma3_scheduled, done_mbox_dma3, mbox_ack_dma3_received,
62 mbox_dma4_scheduled, done_mbox_dma4, mbox_ack_dma4_received,
63 mbox_dma5_scheduled, done_mbox_dma5, mbox_ack_dma5_received,
64 mbox_dma6_scheduled, done_mbox_dma6, mbox_ack_dma6_received,
65 mbox_dma7_scheduled, done_mbox_dma7, mbox_ack_dma7_received,
66 mbox_dma8_scheduled, done_mbox_dma8, mbox_ack_dma8_received,
67 mbox_dma9_scheduled, done_mbox_dma9, mbox_ack_dma9_received,
68 mbox_dma10_scheduled, done_mbox_dma10, mbox_ack_dma10_received,
69 mbox_dma11_scheduled, done_mbox_dma11, mbox_ack_dma11_received,
70 mbox_dma12_scheduled, done_mbox_dma12, mbox_ack_dma12_received,
71 mbox_dma13_scheduled, done_mbox_dma13, mbox_ack_dma13_received,
72 mbox_dma14_scheduled, done_mbox_dma14, mbox_ack_dma14_received,
73 mbox_dma15_scheduled, done_mbox_dma15, mbox_ack_dma15_received,
74`ifdef NEPTUNE
75 mbox_dma16_scheduled, done_mbox_dma16, mbox_ack_dma16_received,
76 mbox_dma17_scheduled, done_mbox_dma17, mbox_ack_dma17_received,
77 mbox_dma18_scheduled, done_mbox_dma18, mbox_ack_dma18_received,
78 mbox_dma19_scheduled, done_mbox_dma19, mbox_ack_dma19_received,
79 mbox_dma20_scheduled, done_mbox_dma20, mbox_ack_dma20_received,
80 mbox_dma21_scheduled, done_mbox_dma21, mbox_ack_dma21_received,
81 mbox_dma22_scheduled, done_mbox_dma22, mbox_ack_dma22_received,
82 mbox_dma23_scheduled, done_mbox_dma23, mbox_ack_dma23_received,
83`else
84`endif
85 set_mbox_part_error_dma, mbox_ack_dma_err_received,
86 mbox_err_received, meta_data_req, tdmc_arb0_data,
87 tdmc_arb0_data_valid, tdmc_arb0_req, tdmc_arb0_req_address,
88 tdmc_arb0_req_byteenable, tdmc_arb0_req_cmd,
89 tdmc_arb0_req_dma_num, tdmc_arb0_req_length,
90 tdmc_arb0_req_port_num, tdmc_arb0_status,
91 tdmc_arb0_transfer_complete, tdmc_arb0_req_func_num,
92 dmc_meta_ack_accept, mbox_debug_state,
93 // Inputs
94 SysClk, Reset_L, send_mbox_dma0, mbox_dma0_data_valid,
95 mbox_dma0_data_done, mbox_dma0_data, dmc_txc_dma0_page_handle,
96 tx_dma_cfg_dma0_mbaddr, page0_mask_dma0, page0_value_dma0,
97 page0_reloc_dma0, page0_valid_dma0, page1_mask_dma0,
98 page1_value_dma0, page1_reloc_dma0, page1_valid_dma0,
99 send_mbox_dma1, mbox_dma1_data_valid, mbox_dma1_data_done,
100 mbox_dma1_data, dmc_txc_dma1_page_handle, tx_dma_cfg_dma1_mbaddr,
101 page0_mask_dma1, page0_value_dma1, page0_reloc_dma1,
102 page0_valid_dma1, page1_mask_dma1, page1_value_dma1,
103 page1_reloc_dma1, page1_valid_dma1, send_mbox_dma2,
104 mbox_dma2_data_valid, mbox_dma2_data_done, mbox_dma2_data,
105 dmc_txc_dma2_page_handle, tx_dma_cfg_dma2_mbaddr, page0_mask_dma2,
106 page0_value_dma2, page0_reloc_dma2, page0_valid_dma2,
107 page1_mask_dma2, page1_value_dma2, page1_reloc_dma2,
108 page1_valid_dma2, send_mbox_dma3, mbox_dma3_data_valid,
109 mbox_dma3_data_done, mbox_dma3_data, dmc_txc_dma3_page_handle,
110 tx_dma_cfg_dma3_mbaddr, page0_mask_dma3, page0_value_dma3,
111 page0_reloc_dma3, page0_valid_dma3, page1_mask_dma3,
112 page1_value_dma3, page1_reloc_dma3, page1_valid_dma3,
113 send_mbox_dma4, mbox_dma4_data_valid, mbox_dma4_data_done,
114 mbox_dma4_data, dmc_txc_dma4_page_handle, tx_dma_cfg_dma4_mbaddr,
115 page0_mask_dma4, page0_value_dma4, page0_reloc_dma4,
116 page0_valid_dma4, page1_mask_dma4, page1_value_dma4,
117 page1_reloc_dma4, page1_valid_dma4, send_mbox_dma5,
118 mbox_dma5_data_valid, mbox_dma5_data_done, mbox_dma5_data,
119 dmc_txc_dma5_page_handle, tx_dma_cfg_dma5_mbaddr, page0_mask_dma5,
120 page0_value_dma5, page0_reloc_dma5, page0_valid_dma5,
121 page1_mask_dma5, page1_value_dma5, page1_reloc_dma5,
122 page1_valid_dma5, send_mbox_dma6, mbox_dma6_data_valid,
123 mbox_dma6_data_done, mbox_dma6_data, dmc_txc_dma6_page_handle,
124 tx_dma_cfg_dma6_mbaddr, page0_mask_dma6, page0_value_dma6,
125 page0_reloc_dma6, page0_valid_dma6, page1_mask_dma6,
126 page1_value_dma6, page1_reloc_dma6, page1_valid_dma6,
127 send_mbox_dma7, mbox_dma7_data_valid, mbox_dma7_data_done,
128 mbox_dma7_data, dmc_txc_dma7_page_handle, tx_dma_cfg_dma7_mbaddr,
129 page0_mask_dma7, page0_value_dma7, page0_reloc_dma7,
130 page0_valid_dma7, page1_mask_dma7, page1_value_dma7,
131 page1_reloc_dma7, page1_valid_dma7, send_mbox_dma8,
132 mbox_dma8_data_valid, mbox_dma8_data_done, mbox_dma8_data,
133 dmc_txc_dma8_page_handle, tx_dma_cfg_dma8_mbaddr, page0_mask_dma8,
134 page0_value_dma8, page0_reloc_dma8, page0_valid_dma8,
135 page1_mask_dma8, page1_value_dma8, page1_reloc_dma8,
136 page1_valid_dma8, send_mbox_dma9, mbox_dma9_data_valid,
137 mbox_dma9_data_done, mbox_dma9_data, dmc_txc_dma9_page_handle,
138 tx_dma_cfg_dma9_mbaddr, page0_mask_dma9, page0_value_dma9,
139 page0_reloc_dma9, page0_valid_dma9, page1_mask_dma9,
140 page1_value_dma9, page1_reloc_dma9, page1_valid_dma9,
141 send_mbox_dma10, mbox_dma10_data_valid, mbox_dma10_data_done,
142 mbox_dma10_data, dmc_txc_dma10_page_handle,
143 tx_dma_cfg_dma10_mbaddr, page0_mask_dma10, page0_value_dma10,
144 page0_reloc_dma10, page0_valid_dma10, page1_mask_dma10,
145 page1_value_dma10, page1_reloc_dma10, page1_valid_dma10,
146 send_mbox_dma11, mbox_dma11_data_valid, mbox_dma11_data_done,
147 mbox_dma11_data, dmc_txc_dma11_page_handle,
148 tx_dma_cfg_dma11_mbaddr, page0_mask_dma11, page0_value_dma11,
149 page0_reloc_dma11, page0_valid_dma11, page1_mask_dma11,
150 page1_value_dma11, page1_reloc_dma11, page1_valid_dma11,
151 send_mbox_dma12, mbox_dma12_data_valid, mbox_dma12_data_done,
152 mbox_dma12_data, dmc_txc_dma12_page_handle,
153 tx_dma_cfg_dma12_mbaddr, page0_mask_dma12, page0_value_dma12,
154 page0_reloc_dma12, page0_valid_dma12, page1_mask_dma12,
155 page1_value_dma12, page1_reloc_dma12, page1_valid_dma12,
156 send_mbox_dma13, mbox_dma13_data_valid, mbox_dma13_data_done,
157 mbox_dma13_data, dmc_txc_dma13_page_handle,
158 tx_dma_cfg_dma13_mbaddr, page0_mask_dma13, page0_value_dma13,
159 page0_reloc_dma13, page0_valid_dma13, page1_mask_dma13,
160 page1_value_dma13, page1_reloc_dma13, page1_valid_dma13,
161 send_mbox_dma14, mbox_dma14_data_valid, mbox_dma14_data_done,
162 mbox_dma14_data, dmc_txc_dma14_page_handle,
163 tx_dma_cfg_dma14_mbaddr, page0_mask_dma14, page0_value_dma14,
164 page0_reloc_dma14, page0_valid_dma14, page1_mask_dma14,
165 page1_value_dma14, page1_reloc_dma14, page1_valid_dma14,
166 send_mbox_dma15, mbox_dma15_data_valid, mbox_dma15_data_done,
167 mbox_dma15_data, dmc_txc_dma15_page_handle,
168 tx_dma_cfg_dma15_mbaddr, page0_mask_dma15, page0_value_dma15,
169 page0_reloc_dma15, page0_valid_dma15, page1_mask_dma15,
170 page1_value_dma15, page1_reloc_dma15, page1_valid_dma15,
171`ifdef NEPTUNE
172 send_mbox_dma16, mbox_dma16_data_valid, mbox_dma16_data_done,
173 mbox_dma16_data, dmc_txc_dma16_page_handle,
174 tx_dma_cfg_dma16_mbaddr, page0_mask_dma16, page0_value_dma16,
175 page0_reloc_dma16, page0_valid_dma16, page1_mask_dma16,
176 page1_value_dma16, page1_reloc_dma16, page1_valid_dma16,
177 send_mbox_dma17, mbox_dma17_data_valid, mbox_dma17_data_done,
178 mbox_dma17_data, dmc_txc_dma17_page_handle,
179 tx_dma_cfg_dma17_mbaddr, page0_mask_dma17, page0_value_dma17,
180 page0_reloc_dma17, page0_valid_dma17, page1_mask_dma17,
181 page1_value_dma17, page1_reloc_dma17, page1_valid_dma17,
182 send_mbox_dma18, mbox_dma18_data_valid, mbox_dma18_data_done,
183 mbox_dma18_data, dmc_txc_dma18_page_handle,
184 tx_dma_cfg_dma18_mbaddr, page0_mask_dma18, page0_value_dma18,
185 page0_reloc_dma18, page0_valid_dma18, page1_mask_dma18,
186 page1_value_dma18, page1_reloc_dma18, page1_valid_dma18,
187 send_mbox_dma19, mbox_dma19_data_valid, mbox_dma19_data_done,
188 mbox_dma19_data, dmc_txc_dma19_page_handle,
189 tx_dma_cfg_dma19_mbaddr, page0_mask_dma19, page0_value_dma19,
190 page0_reloc_dma19, page0_valid_dma19, page1_mask_dma19,
191 page1_value_dma19, page1_reloc_dma19, page1_valid_dma19,
192 send_mbox_dma20, mbox_dma20_data_valid, mbox_dma20_data_done,
193 mbox_dma20_data, dmc_txc_dma20_page_handle,
194 tx_dma_cfg_dma20_mbaddr, page0_mask_dma20, page0_value_dma20,
195 page0_reloc_dma20, page0_valid_dma20, page1_mask_dma20,
196 page1_value_dma20, page1_reloc_dma20, page1_valid_dma20,
197 send_mbox_dma21, mbox_dma21_data_valid, mbox_dma21_data_done,
198 mbox_dma21_data, dmc_txc_dma21_page_handle,
199 tx_dma_cfg_dma21_mbaddr, page0_mask_dma21, page0_value_dma21,
200 page0_reloc_dma21, page0_valid_dma21, page1_mask_dma21,
201 page1_value_dma21, page1_reloc_dma21, page1_valid_dma21,
202 send_mbox_dma22, mbox_dma22_data_valid, mbox_dma22_data_done,
203 mbox_dma22_data, dmc_txc_dma22_page_handle,
204 tx_dma_cfg_dma22_mbaddr, page0_mask_dma22, page0_value_dma22,
205 page0_reloc_dma22, page0_valid_dma22, page1_mask_dma22,
206 page1_value_dma22, page1_reloc_dma22, page1_valid_dma22,
207 send_mbox_dma23, mbox_dma23_data_valid, mbox_dma23_data_done,
208 mbox_dma23_data, dmc_txc_dma23_page_handle,
209 tx_dma_cfg_dma23_mbaddr, page0_mask_dma23, page0_value_dma23,
210 page0_reloc_dma23, page0_valid_dma23, page1_mask_dma23,
211 page1_value_dma23, page1_reloc_dma23, page1_valid_dma23,
212`else
213`endif
214 dmc_txc_dma0_func_num, dmc_txc_dma1_func_num,
215 dmc_txc_dma2_func_num, dmc_txc_dma3_func_num,
216 dmc_txc_dma4_func_num, dmc_txc_dma5_func_num,
217 dmc_txc_dma6_func_num, dmc_txc_dma7_func_num,
218 dmc_txc_dma8_func_num, dmc_txc_dma9_func_num,
219 dmc_txc_dma10_func_num, dmc_txc_dma11_func_num,
220 dmc_txc_dma12_func_num, dmc_txc_dma13_func_num,
221 dmc_txc_dma14_func_num, dmc_txc_dma15_func_num,
222`ifdef NEPTUNE
223 dmc_txc_dma16_func_num, dmc_txc_dma17_func_num,
224 dmc_txc_dma18_func_num, dmc_txc_dma19_func_num,
225 dmc_txc_dma20_func_num, dmc_txc_dma21_func_num,
226 dmc_txc_dma22_func_num, dmc_txc_dma23_func_num,
227`else
228`endif
229 arb0_tdmc_data_req, arb0_tdmc_req_accept, meta_dmc_ack_dma_num,
230 meta_dmc_ack_client, meta_dmc_ack_complete, meta_dmc_ack_ready,
231 meta_dmc_ack_cmd, meta_dmc_ack_cmd_status
232 ) ;
233
234 input SysClk;
235 input Reset_L;
236
237 input send_mbox_dma0;
238 input mbox_dma0_data_valid;
239 input mbox_dma0_data_done;
240 input [127:0] mbox_dma0_data;
241 input [19:0] dmc_txc_dma0_page_handle;
242 input [37:0] tx_dma_cfg_dma0_mbaddr;
243 // page table information
244 input [31:0] page0_mask_dma0;
245 input [31:0] page0_value_dma0;
246 input [31:0] page0_reloc_dma0;
247 input page0_valid_dma0;
248 input [31:0] page1_mask_dma0;
249 input [31:0] page1_value_dma0;
250 input [31:0] page1_reloc_dma0;
251 input page1_valid_dma0 ;
252
253 output mbox_dma0_scheduled;
254 output done_mbox_dma0;
255 output mbox_ack_dma0_received;
256
257 input send_mbox_dma1;
258 input mbox_dma1_data_valid;
259 input mbox_dma1_data_done;
260 input [127:0] mbox_dma1_data;
261 input [19:0] dmc_txc_dma1_page_handle;
262 input [37:0] tx_dma_cfg_dma1_mbaddr;
263 // page table information
264 input [31:0] page0_mask_dma1;
265 input [31:0] page0_value_dma1;
266 input [31:0] page0_reloc_dma1;
267 input page0_valid_dma1;
268 input [31:0] page1_mask_dma1;
269 input [31:0] page1_value_dma1;
270 input [31:0] page1_reloc_dma1;
271 input page1_valid_dma1 ;
272
273 output mbox_dma1_scheduled;
274 output done_mbox_dma1;
275 output mbox_ack_dma1_received;
276
277 input send_mbox_dma2;
278 input mbox_dma2_data_valid;
279 input mbox_dma2_data_done;
280 input [127:0] mbox_dma2_data;
281 input [19:0] dmc_txc_dma2_page_handle;
282 input [37:0] tx_dma_cfg_dma2_mbaddr;
283 // page table information
284 input [31:0] page0_mask_dma2;
285 input [31:0] page0_value_dma2;
286 input [31:0] page0_reloc_dma2;
287 input page0_valid_dma2;
288 input [31:0] page1_mask_dma2;
289 input [31:0] page1_value_dma2;
290 input [31:0] page1_reloc_dma2;
291 input page1_valid_dma2 ;
292
293 output mbox_dma2_scheduled;
294 output done_mbox_dma2;
295 output mbox_ack_dma2_received;
296
297 input send_mbox_dma3;
298 input mbox_dma3_data_valid;
299 input mbox_dma3_data_done;
300 input [127:0] mbox_dma3_data;
301 input [19:0] dmc_txc_dma3_page_handle;
302 input [37:0] tx_dma_cfg_dma3_mbaddr;
303 // page table information
304 input [31:0] page0_mask_dma3;
305 input [31:0] page0_value_dma3;
306 input [31:0] page0_reloc_dma3;
307 input page0_valid_dma3;
308 input [31:0] page1_mask_dma3;
309 input [31:0] page1_value_dma3;
310 input [31:0] page1_reloc_dma3;
311 input page1_valid_dma3 ;
312
313 output mbox_dma3_scheduled;
314 output done_mbox_dma3;
315 output mbox_ack_dma3_received;
316
317 input send_mbox_dma4;
318 input mbox_dma4_data_valid;
319 input mbox_dma4_data_done;
320 input [127:0] mbox_dma4_data;
321 input [19:0] dmc_txc_dma4_page_handle;
322 input [37:0] tx_dma_cfg_dma4_mbaddr;
323 // page table information
324 input [31:0] page0_mask_dma4;
325 input [31:0] page0_value_dma4;
326 input [31:0] page0_reloc_dma4;
327 input page0_valid_dma4;
328 input [31:0] page1_mask_dma4;
329 input [31:0] page1_value_dma4;
330 input [31:0] page1_reloc_dma4;
331 input page1_valid_dma4 ;
332
333 output mbox_dma4_scheduled;
334 output done_mbox_dma4;
335 output mbox_ack_dma4_received;
336
337 input send_mbox_dma5;
338 input mbox_dma5_data_valid;
339 input mbox_dma5_data_done;
340 input [127:0] mbox_dma5_data;
341 input [19:0] dmc_txc_dma5_page_handle;
342 input [37:0] tx_dma_cfg_dma5_mbaddr;
343 // page table information
344 input [31:0] page0_mask_dma5;
345 input [31:0] page0_value_dma5;
346 input [31:0] page0_reloc_dma5;
347 input page0_valid_dma5;
348 input [31:0] page1_mask_dma5;
349 input [31:0] page1_value_dma5;
350 input [31:0] page1_reloc_dma5;
351 input page1_valid_dma5 ;
352
353 output mbox_dma5_scheduled;
354 output done_mbox_dma5;
355 output mbox_ack_dma5_received;
356
357 input send_mbox_dma6;
358 input mbox_dma6_data_valid;
359 input mbox_dma6_data_done;
360 input [127:0] mbox_dma6_data;
361 input [19:0] dmc_txc_dma6_page_handle;
362 input [37:0] tx_dma_cfg_dma6_mbaddr;
363 // page table information
364 input [31:0] page0_mask_dma6;
365 input [31:0] page0_value_dma6;
366 input [31:0] page0_reloc_dma6;
367 input page0_valid_dma6;
368 input [31:0] page1_mask_dma6;
369 input [31:0] page1_value_dma6;
370 input [31:0] page1_reloc_dma6;
371 input page1_valid_dma6 ;
372
373 output mbox_dma6_scheduled;
374 output done_mbox_dma6;
375 output mbox_ack_dma6_received;
376
377 input send_mbox_dma7;
378 input mbox_dma7_data_valid;
379 input mbox_dma7_data_done;
380 input [127:0] mbox_dma7_data;
381 input [19:0] dmc_txc_dma7_page_handle;
382 input [37:0] tx_dma_cfg_dma7_mbaddr;
383 // page table information
384 input [31:0] page0_mask_dma7;
385 input [31:0] page0_value_dma7;
386 input [31:0] page0_reloc_dma7;
387 input page0_valid_dma7;
388 input [31:0] page1_mask_dma7;
389 input [31:0] page1_value_dma7;
390 input [31:0] page1_reloc_dma7;
391 input page1_valid_dma7 ;
392
393 output mbox_dma7_scheduled;
394 output done_mbox_dma7;
395 output mbox_ack_dma7_received;
396
397 input send_mbox_dma8;
398 input mbox_dma8_data_valid;
399 input mbox_dma8_data_done;
400 input [127:0] mbox_dma8_data;
401 input [19:0] dmc_txc_dma8_page_handle;
402 input [37:0] tx_dma_cfg_dma8_mbaddr;
403 // page table information
404 input [31:0] page0_mask_dma8;
405 input [31:0] page0_value_dma8;
406 input [31:0] page0_reloc_dma8;
407 input page0_valid_dma8;
408 input [31:0] page1_mask_dma8;
409 input [31:0] page1_value_dma8;
410 input [31:0] page1_reloc_dma8;
411 input page1_valid_dma8 ;
412
413 output mbox_dma8_scheduled;
414 output done_mbox_dma8;
415 output mbox_ack_dma8_received;
416
417 input send_mbox_dma9;
418 input mbox_dma9_data_valid;
419 input mbox_dma9_data_done;
420 input [127:0] mbox_dma9_data;
421 input [19:0] dmc_txc_dma9_page_handle;
422 input [37:0] tx_dma_cfg_dma9_mbaddr;
423 // page table information
424 input [31:0] page0_mask_dma9;
425 input [31:0] page0_value_dma9;
426 input [31:0] page0_reloc_dma9;
427 input page0_valid_dma9;
428 input [31:0] page1_mask_dma9;
429 input [31:0] page1_value_dma9;
430 input [31:0] page1_reloc_dma9;
431 input page1_valid_dma9 ;
432
433 output mbox_dma9_scheduled;
434 output done_mbox_dma9;
435 output mbox_ack_dma9_received;
436
437 input send_mbox_dma10;
438 input mbox_dma10_data_valid;
439 input mbox_dma10_data_done;
440 input [127:0] mbox_dma10_data;
441 input [19:0] dmc_txc_dma10_page_handle;
442 input [37:0] tx_dma_cfg_dma10_mbaddr;
443 // page table information
444 input [31:0] page0_mask_dma10;
445 input [31:0] page0_value_dma10;
446 input [31:0] page0_reloc_dma10;
447 input page0_valid_dma10;
448 input [31:0] page1_mask_dma10;
449 input [31:0] page1_value_dma10;
450 input [31:0] page1_reloc_dma10;
451 input page1_valid_dma10 ;
452
453 output mbox_dma10_scheduled;
454 output done_mbox_dma10;
455 output mbox_ack_dma10_received;
456
457 input send_mbox_dma11;
458 input mbox_dma11_data_valid;
459 input mbox_dma11_data_done;
460 input [127:0] mbox_dma11_data;
461 input [19:0] dmc_txc_dma11_page_handle;
462 input [37:0] tx_dma_cfg_dma11_mbaddr;
463 // page table information
464 input [31:0] page0_mask_dma11;
465 input [31:0] page0_value_dma11;
466 input [31:0] page0_reloc_dma11;
467 input page0_valid_dma11;
468 input [31:0] page1_mask_dma11;
469 input [31:0] page1_value_dma11;
470 input [31:0] page1_reloc_dma11;
471 input page1_valid_dma11 ;
472
473 output mbox_dma11_scheduled;
474 output done_mbox_dma11;
475 output mbox_ack_dma11_received;
476
477 input send_mbox_dma12;
478 input mbox_dma12_data_valid;
479 input mbox_dma12_data_done;
480 input [127:0] mbox_dma12_data;
481 input [19:0] dmc_txc_dma12_page_handle;
482 input [37:0] tx_dma_cfg_dma12_mbaddr;
483 // page table information
484 input [31:0] page0_mask_dma12;
485 input [31:0] page0_value_dma12;
486 input [31:0] page0_reloc_dma12;
487 input page0_valid_dma12;
488 input [31:0] page1_mask_dma12;
489 input [31:0] page1_value_dma12;
490 input [31:0] page1_reloc_dma12;
491 input page1_valid_dma12 ;
492
493 output mbox_dma12_scheduled;
494 output done_mbox_dma12;
495 output mbox_ack_dma12_received;
496
497 input send_mbox_dma13;
498 input mbox_dma13_data_valid;
499 input mbox_dma13_data_done;
500 input [127:0] mbox_dma13_data;
501 input [19:0] dmc_txc_dma13_page_handle;
502 input [37:0] tx_dma_cfg_dma13_mbaddr;
503 // page table information
504 input [31:0] page0_mask_dma13;
505 input [31:0] page0_value_dma13;
506 input [31:0] page0_reloc_dma13;
507 input page0_valid_dma13;
508 input [31:0] page1_mask_dma13;
509 input [31:0] page1_value_dma13;
510 input [31:0] page1_reloc_dma13;
511 input page1_valid_dma13 ;
512
513 output mbox_dma13_scheduled;
514 output done_mbox_dma13;
515 output mbox_ack_dma13_received;
516
517 input send_mbox_dma14;
518 input mbox_dma14_data_valid;
519 input mbox_dma14_data_done;
520 input [127:0] mbox_dma14_data;
521 input [19:0] dmc_txc_dma14_page_handle;
522 input [37:0] tx_dma_cfg_dma14_mbaddr;
523 // page table information
524 input [31:0] page0_mask_dma14;
525 input [31:0] page0_value_dma14;
526 input [31:0] page0_reloc_dma14;
527 input page0_valid_dma14;
528 input [31:0] page1_mask_dma14;
529 input [31:0] page1_value_dma14;
530 input [31:0] page1_reloc_dma14;
531 input page1_valid_dma14 ;
532
533 output mbox_dma14_scheduled;
534 output done_mbox_dma14;
535 output mbox_ack_dma14_received;
536
537 input send_mbox_dma15;
538 input mbox_dma15_data_valid;
539 input mbox_dma15_data_done;
540 input [127:0] mbox_dma15_data;
541 input [19:0] dmc_txc_dma15_page_handle;
542 input [37:0] tx_dma_cfg_dma15_mbaddr;
543 // page table information
544 input [31:0] page0_mask_dma15;
545 input [31:0] page0_value_dma15;
546 input [31:0] page0_reloc_dma15;
547 input page0_valid_dma15;
548 input [31:0] page1_mask_dma15;
549 input [31:0] page1_value_dma15;
550 input [31:0] page1_reloc_dma15;
551 input page1_valid_dma15 ;
552
553 output mbox_dma15_scheduled;
554 output done_mbox_dma15;
555 output mbox_ack_dma15_received;
556
557
558`ifdef NEPTUNE
559 input send_mbox_dma16;
560 input mbox_dma16_data_valid;
561 input mbox_dma16_data_done;
562 input [127:0] mbox_dma16_data;
563 input [19:0] dmc_txc_dma16_page_handle;
564 input [37:0] tx_dma_cfg_dma16_mbaddr;
565 // page table information
566 input [31:0] page0_mask_dma16;
567 input [31:0] page0_value_dma16;
568 input [31:0] page0_reloc_dma16;
569 input page0_valid_dma16;
570 input [31:0] page1_mask_dma16;
571 input [31:0] page1_value_dma16;
572 input [31:0] page1_reloc_dma16;
573 input page1_valid_dma16 ;
574
575 output mbox_dma16_scheduled;
576 output done_mbox_dma16;
577 output mbox_ack_dma16_received;
578
579 input send_mbox_dma17;
580 input mbox_dma17_data_valid;
581 input mbox_dma17_data_done;
582 input [127:0] mbox_dma17_data;
583 input [19:0] dmc_txc_dma17_page_handle;
584 input [37:0] tx_dma_cfg_dma17_mbaddr;
585 // page table information
586 input [31:0] page0_mask_dma17;
587 input [31:0] page0_value_dma17;
588 input [31:0] page0_reloc_dma17;
589 input page0_valid_dma17;
590 input [31:0] page1_mask_dma17;
591 input [31:0] page1_value_dma17;
592 input [31:0] page1_reloc_dma17;
593 input page1_valid_dma17 ;
594
595 output mbox_dma17_scheduled;
596 output done_mbox_dma17;
597 output mbox_ack_dma17_received;
598
599 input send_mbox_dma18;
600 input mbox_dma18_data_valid;
601 input mbox_dma18_data_done;
602 input [127:0] mbox_dma18_data;
603 input [19:0] dmc_txc_dma18_page_handle;
604 input [37:0] tx_dma_cfg_dma18_mbaddr;
605 // page table information
606 input [31:0] page0_mask_dma18;
607 input [31:0] page0_value_dma18;
608 input [31:0] page0_reloc_dma18;
609 input page0_valid_dma18;
610 input [31:0] page1_mask_dma18;
611 input [31:0] page1_value_dma18;
612 input [31:0] page1_reloc_dma18;
613 input page1_valid_dma18 ;
614
615 output mbox_dma18_scheduled;
616 output done_mbox_dma18;
617 output mbox_ack_dma18_received;
618
619 input send_mbox_dma19;
620 input mbox_dma19_data_valid;
621 input mbox_dma19_data_done;
622 input [127:0] mbox_dma19_data;
623 input [19:0] dmc_txc_dma19_page_handle;
624 input [37:0] tx_dma_cfg_dma19_mbaddr;
625 // page table information
626 input [31:0] page0_mask_dma19;
627 input [31:0] page0_value_dma19;
628 input [31:0] page0_reloc_dma19;
629 input page0_valid_dma19;
630 input [31:0] page1_mask_dma19;
631 input [31:0] page1_value_dma19;
632 input [31:0] page1_reloc_dma19;
633 input page1_valid_dma19 ;
634
635 output mbox_dma19_scheduled;
636 output done_mbox_dma19;
637 output mbox_ack_dma19_received;
638
639 input send_mbox_dma20;
640 input mbox_dma20_data_valid;
641 input mbox_dma20_data_done;
642 input [127:0] mbox_dma20_data;
643 input [19:0] dmc_txc_dma20_page_handle;
644 input [37:0] tx_dma_cfg_dma20_mbaddr;
645 // page table information
646 input [31:0] page0_mask_dma20;
647 input [31:0] page0_value_dma20;
648 input [31:0] page0_reloc_dma20;
649 input page0_valid_dma20;
650 input [31:0] page1_mask_dma20;
651 input [31:0] page1_value_dma20;
652 input [31:0] page1_reloc_dma20;
653 input page1_valid_dma20 ;
654
655 output mbox_dma20_scheduled;
656 output done_mbox_dma20;
657 output mbox_ack_dma20_received;
658
659 input send_mbox_dma21;
660 input mbox_dma21_data_valid;
661 input mbox_dma21_data_done;
662 input [127:0] mbox_dma21_data;
663 input [19:0] dmc_txc_dma21_page_handle;
664 input [37:0] tx_dma_cfg_dma21_mbaddr;
665 // page table information
666 input [31:0] page0_mask_dma21;
667 input [31:0] page0_value_dma21;
668 input [31:0] page0_reloc_dma21;
669 input page0_valid_dma21;
670 input [31:0] page1_mask_dma21;
671 input [31:0] page1_value_dma21;
672 input [31:0] page1_reloc_dma21;
673 input page1_valid_dma21 ;
674
675 output mbox_dma21_scheduled;
676 output done_mbox_dma21;
677 output mbox_ack_dma21_received;
678
679 input send_mbox_dma22;
680 input mbox_dma22_data_valid;
681 input mbox_dma22_data_done;
682 input [127:0] mbox_dma22_data;
683 input [19:0] dmc_txc_dma22_page_handle;
684 input [37:0] tx_dma_cfg_dma22_mbaddr;
685 // page table information
686 input [31:0] page0_mask_dma22;
687 input [31:0] page0_value_dma22;
688 input [31:0] page0_reloc_dma22;
689 input page0_valid_dma22;
690 input [31:0] page1_mask_dma22;
691 input [31:0] page1_value_dma22;
692 input [31:0] page1_reloc_dma22;
693 input page1_valid_dma22 ;
694
695 output mbox_dma22_scheduled;
696 output done_mbox_dma22;
697 output mbox_ack_dma22_received;
698
699 input send_mbox_dma23;
700 input mbox_dma23_data_valid;
701 input mbox_dma23_data_done;
702 input [127:0] mbox_dma23_data;
703 input [19:0] dmc_txc_dma23_page_handle;
704 input [37:0] tx_dma_cfg_dma23_mbaddr;
705
706
707
708 // page table information
709 input [31:0] page0_mask_dma23;
710 input [31:0] page0_value_dma23;
711 input [31:0] page0_reloc_dma23;
712 input page0_valid_dma23;
713 input [31:0] page1_mask_dma23;
714 input [31:0] page1_value_dma23;
715 input [31:0] page1_reloc_dma23;
716 input page1_valid_dma23 ;
717
718 output mbox_dma23_scheduled;
719 output done_mbox_dma23;
720 output mbox_ack_dma23_received;
721
722`else
723`endif
724// function number for requests
725 input [1:0] dmc_txc_dma0_func_num;
726 input [1:0] dmc_txc_dma1_func_num;
727 input [1:0] dmc_txc_dma2_func_num;
728 input [1:0] dmc_txc_dma3_func_num;
729 input [1:0] dmc_txc_dma4_func_num;
730 input [1:0] dmc_txc_dma5_func_num;
731 input [1:0] dmc_txc_dma6_func_num;
732 input [1:0] dmc_txc_dma7_func_num;
733 input [1:0] dmc_txc_dma8_func_num;
734 input [1:0] dmc_txc_dma9_func_num;
735 input [1:0] dmc_txc_dma10_func_num;
736 input [1:0] dmc_txc_dma11_func_num;
737 input [1:0] dmc_txc_dma12_func_num;
738 input [1:0] dmc_txc_dma13_func_num;
739 input [1:0] dmc_txc_dma14_func_num;
740 input [1:0] dmc_txc_dma15_func_num;
741`ifdef NEPTUNE
742 input [1:0] dmc_txc_dma16_func_num;
743 input [1:0] dmc_txc_dma17_func_num;
744 input [1:0] dmc_txc_dma18_func_num;
745 input [1:0] dmc_txc_dma19_func_num;
746 input [1:0] dmc_txc_dma20_func_num;
747 input [1:0] dmc_txc_dma21_func_num;
748 input [1:0] dmc_txc_dma22_func_num;
749 input [1:0] dmc_txc_dma23_func_num;
750`else
751`endif
752 output [`NO_OF_DMAS - 1:0] set_mbox_part_error_dma;
753 output [`NO_OF_DMAS - 1:0] mbox_ack_dma_err_received;
754 output mbox_err_received;
755
756 output meta_data_req;
757
758 // Meta Signals
759 output [127:0] tdmc_arb0_data; // Transfer Data
760 output tdmc_arb0_data_valid; // Transfer Data Ack
761 output tdmc_arb0_req; // Req Command Request
762 output [63:0] tdmc_arb0_req_address; // Memory Address
763 output [15:0] tdmc_arb0_req_byteenable; // First/Last BE
764 output [7:0] tdmc_arb0_req_cmd; // Command Request
765 output [4:0] tdmc_arb0_req_dma_num; // Channel Number
766 output [13:0] tdmc_arb0_req_length; // Packet Length
767 output [1:0] tdmc_arb0_req_port_num; // Port Number
768 output [3:0] tdmc_arb0_status; // Transfer Data Status
769 output tdmc_arb0_transfer_complete; // Transfer Data Complete
770 output [1:0] tdmc_arb0_req_func_num; // FUNCTION Number
771
772 input arb0_tdmc_data_req; // Memory line request
773 input arb0_tdmc_req_accept; // Response to REQ
774
775 // Write Ack Signals
776
777 input [4:0] meta_dmc_ack_dma_num;
778 input meta_dmc_ack_client;
779 input meta_dmc_ack_complete;
780 input meta_dmc_ack_ready;
781 input [7:0] meta_dmc_ack_cmd;
782 input [3:0] meta_dmc_ack_cmd_status;
783 output dmc_meta_ack_accept;
784
785 output [11:0] mbox_debug_state; // to debug port
786
787 // Wires and Regs
788
789 wire mbox_dma0_scheduled;
790 wire done_mbox_dma0;
791 wire mbox_ack_dma0_received;
792 wire mbox_dma1_scheduled;
793 wire done_mbox_dma1;
794 wire mbox_ack_dma1_received;
795 wire mbox_dma2_scheduled;
796 wire done_mbox_dma2;
797 wire mbox_ack_dma2_received;
798 wire mbox_dma3_scheduled;
799 wire done_mbox_dma3;
800 wire mbox_ack_dma3_received;
801 wire mbox_dma4_scheduled;
802 wire done_mbox_dma4;
803 wire mbox_ack_dma4_received;
804 wire mbox_dma5_scheduled;
805 wire done_mbox_dma5;
806 wire mbox_ack_dma5_received;
807 wire mbox_dma6_scheduled;
808 wire done_mbox_dma6;
809 wire mbox_ack_dma6_received;
810 wire mbox_dma7_scheduled;
811 wire done_mbox_dma7;
812 wire mbox_ack_dma7_received;
813 wire mbox_dma8_scheduled;
814 wire done_mbox_dma8;
815 wire mbox_ack_dma8_received;
816 wire mbox_dma9_scheduled;
817 wire done_mbox_dma9;
818 wire mbox_ack_dma9_received;
819 wire mbox_dma10_scheduled;
820 wire done_mbox_dma10;
821 wire mbox_ack_dma10_received;
822 wire mbox_dma11_scheduled;
823 wire done_mbox_dma11;
824 wire mbox_ack_dma11_received;
825 wire mbox_dma12_scheduled;
826 wire done_mbox_dma12;
827 wire mbox_ack_dma12_received;
828 wire mbox_dma13_scheduled;
829 wire done_mbox_dma13;
830 wire mbox_ack_dma13_received;
831 wire mbox_dma14_scheduled;
832 wire done_mbox_dma14;
833 wire mbox_ack_dma14_received;
834 wire mbox_dma15_scheduled;
835 wire done_mbox_dma15;
836 wire mbox_ack_dma15_received;
837`ifdef NEPTUNE
838 wire mbox_dma16_scheduled;
839 wire done_mbox_dma16;
840 wire mbox_ack_dma16_received;
841 wire mbox_dma17_scheduled;
842 wire done_mbox_dma17;
843 wire mbox_ack_dma17_received;
844 wire mbox_dma18_scheduled;
845 wire done_mbox_dma18;
846 wire mbox_ack_dma18_received;
847 wire mbox_dma19_scheduled;
848 wire done_mbox_dma19;
849 wire mbox_ack_dma19_received;
850 wire mbox_dma20_scheduled;
851 wire done_mbox_dma20;
852 wire mbox_ack_dma20_received;
853 wire mbox_dma21_scheduled;
854 wire done_mbox_dma21;
855 wire mbox_ack_dma21_received;
856 wire mbox_dma22_scheduled;
857 wire done_mbox_dma22;
858 wire mbox_ack_dma22_received;
859 wire mbox_dma23_scheduled;
860 wire done_mbox_dma23;
861 wire mbox_ack_dma23_received;
862
863`else
864`endif
865
866
867
868
869 wire ArbDone;
870 wire [4:0] mbox_dma_num;
871 wire [31:0] dma_num_selected;
872 wire [31:0] dmas_available_for_mbox;
873 wire SendMbox;
874 reg [3:0] mbox_req_state;
875 reg [`NO_OF_DMAS - 1:0] done_mbox_update;
876 reg [`NO_OF_DMAS - 1:0] mbox_dma_scheduled;
877 reg choose_dmas_for_mbox;
878 reg [37:0] mbox_address;
879 reg mbox_send_data;
880 wire mbox_dma_data_done;
881
882 reg latch_mbox_contexts;
883 reg [3:0] mbox_ack_state ;
884 reg [4:0] resp_dma_num;
885 reg dmc_meta_ack_accept ;
886 reg send_ack_received ;
887 reg [`NO_OF_DMAS - 1:0] mbox_ack_dma_received;
888
889 reg [127:0] tdmc_arb0_data; // Transfer Data
890 reg tdmc_arb0_data_valid; // Transfer Data Ack
891 reg tdmc_arb0_req; // Req Command Request
892 reg [63:0] tdmc_arb0_req_address; // Memory Address
893 reg [15:0] tdmc_arb0_req_byteenable; // First/Last BE
894 reg [7:0] tdmc_arb0_req_cmd; // Command Request
895 reg [4:0] tdmc_arb0_req_dma_num; // Channel Number
896 reg [13:0] tdmc_arb0_req_length; // Packet Length
897 reg [1:0] tdmc_arb0_req_port_num; // Port Number
898 reg [1:0] tdmc_arb0_req_func_num; // Port Number
899 reg [3:0] tdmc_arb0_status; // Transfer Data Status
900 reg tdmc_arb0_transfer_complete; // Transfer Data Complete
901
902 reg meta_data_req;
903
904 // Logic for Pagetable translation
905 reg xlate_done;
906 reg start_page_xlate;
907 reg [43:0] xlate_mbaddr;
908 reg [3:0] page_xlate_state;
909 reg page0_match;
910 reg page1_match;
911 reg [19:0] page_handle;
912 reg [1:0] func_num;
913
914 reg [31:0] page0_mask_dma;
915 reg [31:0] page0_value_dma;
916 reg [31:0] page0_reloc_dma;
917 reg page0_valid_dma;
918 reg [31:0] page1_mask_dma;
919 reg [31:0] page1_value_dma;
920 reg [31:0] page1_reloc_dma;
921 reg page1_valid_dma;
922 reg [31:0] page0_reloc_addr;
923 reg [31:0] page1_reloc_addr;
924
925 reg set_mbox_part_error;
926 reg [`NO_OF_DMAS - 1:0] set_mbox_part_error_dma;
927 reg [`NO_OF_DMAS - 1:0] mbox_ack_dma_err_received;
928 reg mbox_err_received;
929 reg [7:0] cmd_received;
930
931 wire [11:0] mbox_debug_state;
932 //
933 // parameters
934 parameter ACK_IDLE = 4'h0,
935 WAIT_FOR_COMPLETE = 4'h1;
936
937 parameter MBOX_REQ_IDLE = 4'h0,
938 MBOX_ARB_DMA = 4'h1,
939 MBOX_XLATE_ADDR = 4'h2,
940 MBOX_SEND_REQ = 4'h3,
941 MBOX_WAIT_FOR_ACCEPT = 4'h4,
942 MBOX_SEND_DATA = 4'h5,
943 MBOX_DONE = 4'h6,
944 MBOX_ERROR = 4'h7;
945
946
947 parameter PAGE_XLATE_IDLE = 4'h0,
948 CHECK_PAGE_STATUS = 4'h1,
949 PAGE_XLATE_ERROR = 4'h2,
950 PAGE_XLATE_DONE = 4'h3;
951 //VCS coverage off
952 // synopsys translate_off
953 reg [192:1] ACK_STATE;
954 always @(mbox_ack_state)
955 begin
956 case(mbox_ack_state)
957 ACK_IDLE : ACK_STATE = "ACK_IDLE";
958 WAIT_FOR_COMPLETE: ACK_STATE = "WAIT_FOR_COMPLETE";
959 default : ACK_STATE = "UNKNOWN";
960 endcase
961 end
962
963 reg [192:1] REQ_STATE;
964 always@(mbox_req_state) begin
965 case(mbox_req_state)
966 MBOX_REQ_IDLE: REQ_STATE = "MBOX_REQ_IDLE";
967 MBOX_ARB_DMA: REQ_STATE = "MBOX_ARB_DMA";
968 MBOX_XLATE_ADDR: REQ_STATE = "MBOX_XLATE_ADDR";
969 MBOX_SEND_REQ: REQ_STATE = "MBOX_SEND_REQ";
970 MBOX_WAIT_FOR_ACCEPT: REQ_STATE = "MBOX_WAIT_FOR_ACCEPT";
971 MBOX_SEND_DATA: REQ_STATE = "MBOX_SEND_DATA";
972 MBOX_DONE: REQ_STATE = "MBOX_DONE";
973 MBOX_ERROR: REQ_STATE = "MBOX_ERROR";
974 default: REQ_STATE = "UNKNOWN";
975 endcase
976 end
977 reg [192:1] PAGE_XLATE_STATE;
978
979 always @(page_xlate_state)
980 begin
981 case(page_xlate_state)
982 PAGE_XLATE_IDLE : PAGE_XLATE_STATE = "PAGE_XLATE_IDLE";
983 CHECK_PAGE_STATUS: PAGE_XLATE_STATE = "CHECK_PAGE_STATUS";
984 PAGE_XLATE_ERROR : PAGE_XLATE_STATE = "PAGE_XLATE_ERROR";
985 PAGE_XLATE_DONE : PAGE_XLATE_STATE = "PAGE_XLATE_DONE";
986 default : PAGE_XLATE_STATE = "UNKNOWN";
987 endcase
988 end
989 // synopsys translate_on
990 //VCS coverage on
991
992
993
994 assign mbox_debug_state = {page_xlate_state,mbox_req_state,mbox_ack_state};
995
996
997 assign dmas_available_for_mbox = { 8'h0,
998`ifdef NEPTUNE
999 send_mbox_dma23, send_mbox_dma22, send_mbox_dma21, send_mbox_dma20,
1000 send_mbox_dma19, send_mbox_dma18, send_mbox_dma17, send_mbox_dma16,
1001`else
1002 8'h0,
1003`endif
1004 send_mbox_dma15, send_mbox_dma14, send_mbox_dma13, send_mbox_dma12,
1005 send_mbox_dma11, send_mbox_dma10, send_mbox_dma9, send_mbox_dma8,
1006 send_mbox_dma7, send_mbox_dma6, send_mbox_dma5, send_mbox_dma4,
1007 send_mbox_dma3, send_mbox_dma2, send_mbox_dma1, send_mbox_dma0 };
1008 assign mbox_dma_data_done = | { 8'h0,
1009
1010`ifdef NEPTUNE
1011 mbox_dma23_data_done, mbox_dma22_data_done, mbox_dma21_data_done, mbox_dma20_data_done,
1012 mbox_dma19_data_done, mbox_dma18_data_done, mbox_dma17_data_done, mbox_dma16_data_done,
1013`else
1014 8'h0,
1015`endif
1016 mbox_dma15_data_done, mbox_dma14_data_done, mbox_dma13_data_done, mbox_dma12_data_done,
1017 mbox_dma11_data_done, mbox_dma10_data_done, mbox_dma9_data_done, mbox_dma8_data_done,
1018 mbox_dma7_data_done, mbox_dma6_data_done, mbox_dma5_data_done, mbox_dma4_data_done,
1019 mbox_dma3_data_done, mbox_dma2_data_done, mbox_dma1_data_done, mbox_dma0_data_done };
1020
1021
1022
1023 assign SendMbox = | dmas_available_for_mbox;
1024
1025 // State Machine for Meta-
1026 always@(posedge SysClk) begin
1027 if(!Reset_L) begin
1028 mbox_req_state <= MBOX_REQ_IDLE;
1029 done_mbox_update <= `NO_OF_DMAS'b0;
1030 mbox_dma_scheduled <= `NO_OF_DMAS'h0;
1031 choose_dmas_for_mbox <= 1'b0;
1032 latch_mbox_contexts <= 1'b0;
1033 tdmc_arb0_req <= 1'b0;
1034 meta_data_req <= 1'b0;
1035 tdmc_arb0_req_byteenable <= 16'hffff;
1036 tdmc_arb0_req_port_num <= 2'h0;
1037 tdmc_arb0_req_func_num <= 2'h0;
1038 tdmc_arb0_status <= 4'h0;
1039 start_page_xlate <= 1'b0;
1040 set_mbox_part_error_dma <= `NO_OF_DMAS'h0;
1041 end else begin
1042 case(mbox_req_state) // synopsys full_case parallel_case
1043 MBOX_REQ_IDLE: begin
1044 done_mbox_update <= `NO_OF_DMAS'h0;
1045 mbox_dma_scheduled <= `NO_OF_DMAS'h0;
1046 set_mbox_part_error_dma <= `NO_OF_DMAS'h0;
1047 meta_data_req <= 1'b0; // To check this???
1048 if(SendMbox) begin
1049 mbox_req_state <= MBOX_ARB_DMA;
1050 choose_dmas_for_mbox <= 1'b1;
1051 end
1052 end // case: MBOX_REQ_IDLE
1053 MBOX_ARB_DMA: begin
1054 choose_dmas_for_mbox <= 1'b0;
1055 if(ArbDone) begin
1056 mbox_dma_scheduled <= dma_num_selected[`NO_OF_DMAS -1 :0] ;
1057 mbox_req_state <= MBOX_XLATE_ADDR;
1058 latch_mbox_contexts <= 1'b1;
1059 end
1060 end // case: MBOX_ARB_DMA
1061 MBOX_XLATE_ADDR: begin
1062 latch_mbox_contexts <= 1'b0;
1063 start_page_xlate <= 1'b1;
1064 if(set_mbox_part_error) begin
1065 mbox_req_state <= MBOX_ERROR;
1066 set_mbox_part_error_dma <= dma_num_selected[`NO_OF_DMAS -1 :0] ;
1067 end else if(xlate_done) begin
1068 start_page_xlate <= 1'b0;
1069 mbox_req_state <= MBOX_SEND_REQ;
1070 end // if (xlate_done)
1071 end
1072 MBOX_SEND_REQ: begin
1073 tdmc_arb0_req <= 1'b1;
1074 tdmc_arb0_req_cmd <= 8'h19;
1075 tdmc_arb0_req_address <= {page_handle,xlate_mbaddr};
1076 tdmc_arb0_req_length <= 14'h40; // 64Bytes
1077 tdmc_arb0_req_dma_num <= mbox_dma_num;
1078 tdmc_arb0_req_func_num <= func_num;
1079 mbox_req_state <= MBOX_WAIT_FOR_ACCEPT;
1080 end
1081 MBOX_WAIT_FOR_ACCEPT: begin
1082 if(arb0_tdmc_req_accept) begin
1083 mbox_req_state <= MBOX_SEND_DATA;
1084 mbox_send_data <= 1'b1;
1085 tdmc_arb0_req <= 1'b0;
1086 end
1087 end
1088 MBOX_SEND_DATA: begin
1089 meta_data_req <= arb0_tdmc_data_req; // To check this???
1090 if(mbox_dma_data_done) begin
1091 mbox_send_data <= 1'b0;
1092 mbox_req_state <= MBOX_DONE;
1093 meta_data_req <= 1'b0; // To check this???
1094 done_mbox_update <= mbox_dma_scheduled;
1095 mbox_dma_scheduled <= `NO_OF_DMAS'h0;
1096 end
1097 end
1098 MBOX_DONE: begin
1099 mbox_req_state <= MBOX_REQ_IDLE;
1100 end
1101 MBOX_ERROR: begin
1102 // place holder
1103 set_mbox_part_error_dma <= `NO_OF_DMAS'h0;
1104 mbox_req_state <= MBOX_REQ_IDLE;
1105 end
1106 default: begin
1107 mbox_req_state <= MBOX_REQ_IDLE;
1108 end
1109 endcase // case(mbox_req_state)
1110
1111 end // else: !if(!Reset_L)
1112 end // always@ (posedge SysClk)
1113
1114 niu_dmc_dmaarb dma_req_arb ( .SysClk(SysClk),
1115 .Reset_L(Reset_L),
1116 .Choose_DMAs(choose_dmas_for_mbox),
1117 .DMA_Reqs(dmas_available_for_mbox),
1118 .ArbDone(ArbDone),
1119 .DMANum(mbox_dma_num),
1120 .DMAsGranted(dma_num_selected)
1121 );
1122
1123 // synopsys infer_mux "mbox_send_mux"
1124 always@(posedge SysClk) begin
1125 if(!Reset_L) begin
1126 tdmc_arb0_data <= 128'h0;
1127 tdmc_arb0_data_valid <= 1'b0;
1128 tdmc_arb0_transfer_complete <= 1'b0;
1129 end else begin
1130 if(mbox_send_data) begin: mbox_send_mux
1131 case(mbox_dma_num) // synopsys full_case parallel_case
1132
1133`ifdef NEPTUNE
1134 `DMA_CHANNEL_TWENTYTHREE: begin
1135 tdmc_arb0_data <= mbox_dma23_data;
1136 tdmc_arb0_data_valid <= mbox_dma23_data_valid;
1137 tdmc_arb0_transfer_complete <= mbox_dma23_data_done;
1138 end
1139 `DMA_CHANNEL_TWENTYTWO: begin
1140 tdmc_arb0_data <= mbox_dma22_data;
1141 tdmc_arb0_data_valid <= mbox_dma22_data_valid;
1142 tdmc_arb0_transfer_complete <= mbox_dma22_data_done;
1143 end
1144 `DMA_CHANNEL_TWENTYONE: begin
1145 tdmc_arb0_data <= mbox_dma21_data;
1146 tdmc_arb0_data_valid <= mbox_dma21_data_valid;
1147 tdmc_arb0_transfer_complete <= mbox_dma21_data_done;
1148 end
1149 `DMA_CHANNEL_TWENTY: begin
1150 tdmc_arb0_data <= mbox_dma20_data;
1151 tdmc_arb0_data_valid <= mbox_dma20_data_valid;
1152 tdmc_arb0_transfer_complete <= mbox_dma20_data_done;
1153 end
1154 `DMA_CHANNEL_NINETEEN: begin
1155 tdmc_arb0_data <= mbox_dma19_data;
1156 tdmc_arb0_data_valid <= mbox_dma19_data_valid;
1157 tdmc_arb0_transfer_complete <= mbox_dma19_data_done;
1158 end
1159 `DMA_CHANNEL_EIGHTEEN: begin
1160 tdmc_arb0_data <= mbox_dma18_data;
1161 tdmc_arb0_data_valid <= mbox_dma18_data_valid;
1162 tdmc_arb0_transfer_complete <= mbox_dma18_data_done;
1163 end
1164 `DMA_CHANNEL_SEVENTEEN: begin
1165 tdmc_arb0_data <= mbox_dma17_data;
1166 tdmc_arb0_data_valid <= mbox_dma17_data_valid;
1167 tdmc_arb0_transfer_complete <= mbox_dma17_data_done;
1168 end
1169 `DMA_CHANNEL_SIXTEEN: begin
1170 tdmc_arb0_data <= mbox_dma16_data;
1171 tdmc_arb0_data_valid <= mbox_dma16_data_valid;
1172 tdmc_arb0_transfer_complete <= mbox_dma16_data_done;
1173 end
1174`else
1175`endif // !ifdef CHANNELS_16
1176 `DMA_CHANNEL_FIFTEEN: begin
1177 tdmc_arb0_data <= mbox_dma15_data;
1178 tdmc_arb0_data_valid <= mbox_dma15_data_valid;
1179 tdmc_arb0_transfer_complete <= mbox_dma15_data_done;
1180 end
1181 `DMA_CHANNEL_FOURTEEN: begin
1182 tdmc_arb0_data <= mbox_dma14_data;
1183 tdmc_arb0_data_valid <= mbox_dma14_data_valid;
1184 tdmc_arb0_transfer_complete <= mbox_dma14_data_done;
1185 end
1186 `DMA_CHANNEL_THIRTEEN: begin
1187 tdmc_arb0_data <= mbox_dma13_data;
1188 tdmc_arb0_data_valid <= mbox_dma13_data_valid;
1189 tdmc_arb0_transfer_complete <= mbox_dma13_data_done;
1190 end
1191 `DMA_CHANNEL_TWELVE: begin
1192 tdmc_arb0_data <= mbox_dma12_data;
1193 tdmc_arb0_data_valid <= mbox_dma12_data_valid;
1194 tdmc_arb0_transfer_complete <= mbox_dma12_data_done;
1195 end
1196 `DMA_CHANNEL_ELEVEN: begin
1197 tdmc_arb0_data <= mbox_dma11_data;
1198 tdmc_arb0_data_valid <= mbox_dma11_data_valid;
1199 tdmc_arb0_transfer_complete <= mbox_dma11_data_done;
1200 end
1201 `DMA_CHANNEL_TEN: begin
1202 tdmc_arb0_data <= mbox_dma10_data;
1203 tdmc_arb0_data_valid <= mbox_dma10_data_valid;
1204 tdmc_arb0_transfer_complete <= mbox_dma10_data_done;
1205 end
1206 `DMA_CHANNEL_NINE: begin
1207 tdmc_arb0_data <= mbox_dma9_data;
1208 tdmc_arb0_data_valid <= mbox_dma9_data_valid;
1209 tdmc_arb0_transfer_complete <= mbox_dma9_data_done;
1210 end
1211 `DMA_CHANNEL_EIGHT: begin
1212 tdmc_arb0_data <= mbox_dma8_data;
1213 tdmc_arb0_data_valid <= mbox_dma8_data_valid;
1214 tdmc_arb0_transfer_complete <= mbox_dma8_data_done;
1215 end
1216 `DMA_CHANNEL_SEVEN: begin
1217 tdmc_arb0_data <= mbox_dma7_data;
1218 tdmc_arb0_data_valid <= mbox_dma7_data_valid;
1219 tdmc_arb0_transfer_complete <= mbox_dma7_data_done;
1220 end
1221 `DMA_CHANNEL_SIX: begin
1222 tdmc_arb0_data <= mbox_dma6_data;
1223 tdmc_arb0_data_valid <= mbox_dma6_data_valid;
1224 tdmc_arb0_transfer_complete <= mbox_dma6_data_done;
1225 end
1226 `DMA_CHANNEL_FIVE: begin
1227 tdmc_arb0_data <= mbox_dma5_data;
1228 tdmc_arb0_data_valid <= mbox_dma5_data_valid;
1229 tdmc_arb0_transfer_complete <= mbox_dma5_data_done;
1230 end
1231 `DMA_CHANNEL_FOUR: begin
1232 tdmc_arb0_data <= mbox_dma4_data;
1233 tdmc_arb0_data_valid <= mbox_dma4_data_valid;
1234 tdmc_arb0_transfer_complete <= mbox_dma4_data_done;
1235 end
1236 `DMA_CHANNEL_THREE: begin
1237 tdmc_arb0_data <= mbox_dma3_data;
1238 tdmc_arb0_data_valid <= mbox_dma3_data_valid;
1239 tdmc_arb0_transfer_complete <= mbox_dma3_data_done;
1240 end
1241 `DMA_CHANNEL_TWO: begin
1242 tdmc_arb0_data <= mbox_dma2_data;
1243 tdmc_arb0_data_valid <= mbox_dma2_data_valid;
1244 tdmc_arb0_transfer_complete <= mbox_dma2_data_done;
1245 end
1246 `DMA_CHANNEL_ONE: begin
1247 tdmc_arb0_data <= mbox_dma1_data;
1248 tdmc_arb0_data_valid <= mbox_dma1_data_valid;
1249 tdmc_arb0_transfer_complete <= mbox_dma1_data_done;
1250 end
1251 `DMA_CHANNEL_ZERO: begin
1252 tdmc_arb0_data <= mbox_dma0_data;
1253 tdmc_arb0_data_valid <= mbox_dma0_data_valid;
1254 tdmc_arb0_transfer_complete <= mbox_dma0_data_done;
1255 end // case: `DMA_CHANNEL_ZERO
1256 default begin
1257 tdmc_arb0_data <= 128'h0;
1258 tdmc_arb0_data_valid <= 1'b0;
1259 tdmc_arb0_transfer_complete <= 1'b0;
1260 end
1261 endcase // case(mbox_dma_num)
1262 end // if (mbox_send_data)
1263 else begin
1264 tdmc_arb0_data <= 128'h0;
1265 tdmc_arb0_data_valid <= 1'b0;
1266 tdmc_arb0_transfer_complete <= 1'b0;
1267 end // else: !if(mbox_send_data)
1268 end // else: !if(!Reset_L)
1269 end // always@ (posedge SysClk)
1270
1271
1272
1273 // synopsys infer_mux "mbox_page_context_mux"
1274 always@(posedge SysClk) begin
1275 if(!Reset_L) begin
1276 mbox_address <= 38'h0;
1277 page1_valid_dma <= 1'b0;
1278 page0_valid_dma <= 1'b0;
1279 page_handle <= 20'h0;
1280 func_num <= 2'h0;
1281 end else begin
1282 if(latch_mbox_contexts) begin : mbox_page_context_mux
1283 case(mbox_dma_num) // synopsys full_case parallel_case
1284`ifdef NEPTUNE
1285 `DMA_CHANNEL_TWENTYTHREE: begin
1286 mbox_address <= tx_dma_cfg_dma23_mbaddr;
1287 page_handle <= dmc_txc_dma23_page_handle;
1288 func_num <= dmc_txc_dma23_func_num;
1289 page0_mask_dma <= page0_mask_dma23;
1290 page0_value_dma <= page0_value_dma23;
1291 page0_reloc_dma <= page0_reloc_dma23;
1292 page0_valid_dma <= page0_valid_dma23;
1293 page1_mask_dma <= page1_mask_dma23;
1294 page1_value_dma <= page1_value_dma23;
1295 page1_reloc_dma <= page1_reloc_dma23;
1296 page1_valid_dma <= page1_valid_dma23;
1297 end
1298 `DMA_CHANNEL_TWENTYTWO: begin
1299 mbox_address <= tx_dma_cfg_dma22_mbaddr;
1300 page_handle <= dmc_txc_dma22_page_handle;
1301 func_num <= dmc_txc_dma22_func_num;
1302 page0_mask_dma <= page0_mask_dma22;
1303 page0_value_dma <= page0_value_dma22;
1304 page0_reloc_dma <= page0_reloc_dma22;
1305 page0_valid_dma <= page0_valid_dma22;
1306 page1_mask_dma <= page1_mask_dma22;
1307 page1_value_dma <= page1_value_dma22;
1308 page1_reloc_dma <= page1_reloc_dma22;
1309 page1_valid_dma <= page1_valid_dma22;
1310 end
1311 `DMA_CHANNEL_TWENTYONE: begin
1312 mbox_address <= tx_dma_cfg_dma21_mbaddr;
1313 page_handle <= dmc_txc_dma21_page_handle;
1314 func_num <= dmc_txc_dma21_func_num;
1315 page0_mask_dma <= page0_mask_dma21;
1316 page0_value_dma <= page0_value_dma21;
1317 page0_reloc_dma <= page0_reloc_dma21;
1318 page0_valid_dma <= page0_valid_dma21;
1319 page1_mask_dma <= page1_mask_dma21;
1320 page1_value_dma <= page1_value_dma21;
1321 page1_reloc_dma <= page1_reloc_dma21;
1322 page1_valid_dma <= page1_valid_dma21;
1323 end
1324 `DMA_CHANNEL_TWENTY: begin
1325 mbox_address <= tx_dma_cfg_dma20_mbaddr;
1326 page_handle <= dmc_txc_dma20_page_handle;
1327 func_num <= dmc_txc_dma20_func_num;
1328 page0_mask_dma <= page0_mask_dma20;
1329 page0_value_dma <= page0_value_dma20;
1330 page0_reloc_dma <= page0_reloc_dma20;
1331 page0_valid_dma <= page0_valid_dma20;
1332 page1_mask_dma <= page1_mask_dma20;
1333 page1_value_dma <= page1_value_dma20;
1334 page1_reloc_dma <= page1_reloc_dma20;
1335 page1_valid_dma <= page1_valid_dma20;
1336 end
1337 `DMA_CHANNEL_NINETEEN: begin
1338 mbox_address <= tx_dma_cfg_dma19_mbaddr;
1339 page_handle <= dmc_txc_dma19_page_handle;
1340 func_num <= dmc_txc_dma19_func_num;
1341 page0_mask_dma <= page0_mask_dma19;
1342 page0_value_dma <= page0_value_dma19;
1343 page0_reloc_dma <= page0_reloc_dma19;
1344 page0_valid_dma <= page0_valid_dma19;
1345 page1_mask_dma <= page1_mask_dma19;
1346 page1_value_dma <= page1_value_dma19;
1347 page1_reloc_dma <= page1_reloc_dma19;
1348 page1_valid_dma <= page1_valid_dma19;
1349 end
1350 `DMA_CHANNEL_EIGHTEEN: begin
1351 mbox_address <= tx_dma_cfg_dma18_mbaddr;
1352 page_handle <= dmc_txc_dma18_page_handle;
1353 func_num <= dmc_txc_dma18_func_num;
1354 page0_mask_dma <= page0_mask_dma18;
1355 page0_value_dma <= page0_value_dma18;
1356 page0_reloc_dma <= page0_reloc_dma18;
1357 page0_valid_dma <= page0_valid_dma18;
1358 page1_mask_dma <= page1_mask_dma18;
1359 page1_value_dma <= page1_value_dma18;
1360 page1_reloc_dma <= page1_reloc_dma18;
1361 page1_valid_dma <= page1_valid_dma18;
1362 end
1363 `DMA_CHANNEL_SEVENTEEN: begin
1364 mbox_address <= tx_dma_cfg_dma17_mbaddr;
1365 page_handle <= dmc_txc_dma17_page_handle;
1366 func_num <= dmc_txc_dma17_func_num;
1367 page0_mask_dma <= page0_mask_dma17;
1368 page0_value_dma <= page0_value_dma17;
1369 page0_reloc_dma <= page0_reloc_dma17;
1370 page0_valid_dma <= page0_valid_dma17;
1371 page1_mask_dma <= page1_mask_dma17;
1372 page1_value_dma <= page1_value_dma17;
1373 page1_reloc_dma <= page1_reloc_dma17;
1374 page1_valid_dma <= page1_valid_dma17;
1375 end
1376 `DMA_CHANNEL_SIXTEEN: begin
1377 mbox_address <= tx_dma_cfg_dma16_mbaddr;
1378 page_handle <= dmc_txc_dma16_page_handle;
1379 func_num <= dmc_txc_dma16_func_num;
1380 page0_mask_dma <= page0_mask_dma16;
1381 page0_value_dma <= page0_value_dma16;
1382 page0_reloc_dma <= page0_reloc_dma16;
1383 page0_valid_dma <= page0_valid_dma16;
1384 page1_mask_dma <= page1_mask_dma16;
1385 page1_value_dma <= page1_value_dma16;
1386 page1_reloc_dma <= page1_reloc_dma16;
1387 page1_valid_dma <= page1_valid_dma16;
1388 end
1389`else
1390`endif // ifdef CHANNELS_16
1391 `DMA_CHANNEL_FIFTEEN: begin
1392 mbox_address <= tx_dma_cfg_dma15_mbaddr;
1393 page_handle <= dmc_txc_dma15_page_handle;
1394 func_num <= dmc_txc_dma15_func_num;
1395 page0_mask_dma <= page0_mask_dma15;
1396 page0_value_dma <= page0_value_dma15;
1397 page0_reloc_dma <= page0_reloc_dma15;
1398 page0_valid_dma <= page0_valid_dma15;
1399 page1_mask_dma <= page1_mask_dma15;
1400 page1_value_dma <= page1_value_dma15;
1401 page1_reloc_dma <= page1_reloc_dma15;
1402 page1_valid_dma <= page1_valid_dma15;
1403 end
1404 `DMA_CHANNEL_FOURTEEN: begin
1405 mbox_address <= tx_dma_cfg_dma14_mbaddr;
1406 page_handle <= dmc_txc_dma14_page_handle;
1407 func_num <= dmc_txc_dma14_func_num;
1408 page0_mask_dma <= page0_mask_dma14;
1409 page0_value_dma <= page0_value_dma14;
1410 page0_reloc_dma <= page0_reloc_dma14;
1411 page0_valid_dma <= page0_valid_dma14;
1412 page1_mask_dma <= page1_mask_dma14;
1413 page1_value_dma <= page1_value_dma14;
1414 page1_reloc_dma <= page1_reloc_dma14;
1415 page1_valid_dma <= page1_valid_dma14;
1416 end
1417 `DMA_CHANNEL_THIRTEEN: begin
1418 mbox_address <= tx_dma_cfg_dma13_mbaddr;
1419 page_handle <= dmc_txc_dma13_page_handle;
1420 func_num <= dmc_txc_dma13_func_num;
1421 page0_mask_dma <= page0_mask_dma13;
1422 page0_value_dma <= page0_value_dma13;
1423 page0_reloc_dma <= page0_reloc_dma13;
1424 page0_valid_dma <= page0_valid_dma13;
1425 page1_mask_dma <= page1_mask_dma13;
1426 page1_value_dma <= page1_value_dma13;
1427 page1_reloc_dma <= page1_reloc_dma13;
1428 page1_valid_dma <= page1_valid_dma13;
1429 end
1430 `DMA_CHANNEL_TWELVE: begin
1431 mbox_address <= tx_dma_cfg_dma12_mbaddr;
1432 page_handle <= dmc_txc_dma12_page_handle;
1433 func_num <= dmc_txc_dma12_func_num;
1434 page0_mask_dma <= page0_mask_dma12;
1435 page0_value_dma <= page0_value_dma12;
1436 page0_reloc_dma <= page0_reloc_dma12;
1437 page0_valid_dma <= page0_valid_dma12;
1438 page1_mask_dma <= page1_mask_dma12;
1439 page1_value_dma <= page1_value_dma12;
1440 page1_reloc_dma <= page1_reloc_dma12;
1441 page1_valid_dma <= page1_valid_dma12;
1442 end
1443 `DMA_CHANNEL_ELEVEN: begin
1444 mbox_address <= tx_dma_cfg_dma11_mbaddr;
1445 page_handle <= dmc_txc_dma11_page_handle;
1446 func_num <= dmc_txc_dma11_func_num;
1447 page0_mask_dma <= page0_mask_dma11;
1448 page0_value_dma <= page0_value_dma11;
1449 page0_reloc_dma <= page0_reloc_dma11;
1450 page0_valid_dma <= page0_valid_dma11;
1451 page1_mask_dma <= page1_mask_dma11;
1452 page1_value_dma <= page1_value_dma11;
1453 page1_reloc_dma <= page1_reloc_dma11;
1454 page1_valid_dma <= page1_valid_dma11;
1455 end
1456 `DMA_CHANNEL_TEN: begin
1457 mbox_address <= tx_dma_cfg_dma10_mbaddr;
1458 page_handle <= dmc_txc_dma10_page_handle;
1459 func_num <= dmc_txc_dma10_func_num;
1460 page0_mask_dma <= page0_mask_dma10;
1461 page0_value_dma <= page0_value_dma10;
1462 page0_reloc_dma <= page0_reloc_dma10;
1463 page0_valid_dma <= page0_valid_dma10;
1464 page1_mask_dma <= page1_mask_dma10;
1465 page1_value_dma <= page1_value_dma10;
1466 page1_reloc_dma <= page1_reloc_dma10;
1467 page1_valid_dma <= page1_valid_dma10;
1468 end
1469 `DMA_CHANNEL_NINE: begin
1470 mbox_address <= tx_dma_cfg_dma9_mbaddr;
1471 page_handle <= dmc_txc_dma9_page_handle;
1472 func_num <= dmc_txc_dma9_func_num;
1473 page0_mask_dma <= page0_mask_dma9;
1474 page0_value_dma <= page0_value_dma9;
1475 page0_reloc_dma <= page0_reloc_dma9;
1476 page0_valid_dma <= page0_valid_dma9;
1477 page1_mask_dma <= page1_mask_dma9;
1478 page1_value_dma <= page1_value_dma9;
1479 page1_reloc_dma <= page1_reloc_dma9;
1480 page1_valid_dma <= page1_valid_dma9;
1481 end
1482 `DMA_CHANNEL_EIGHT: begin
1483 mbox_address <= tx_dma_cfg_dma8_mbaddr;
1484 page_handle <= dmc_txc_dma8_page_handle;
1485 func_num <= dmc_txc_dma8_func_num;
1486 page0_mask_dma <= page0_mask_dma8;
1487 page0_value_dma <= page0_value_dma8;
1488 page0_reloc_dma <= page0_reloc_dma8;
1489 page0_valid_dma <= page0_valid_dma8;
1490 page1_mask_dma <= page1_mask_dma8;
1491 page1_value_dma <= page1_value_dma8;
1492 page1_reloc_dma <= page1_reloc_dma8;
1493 page1_valid_dma <= page1_valid_dma8;
1494 end
1495 `DMA_CHANNEL_SEVEN: begin
1496 mbox_address <= tx_dma_cfg_dma7_mbaddr;
1497 page_handle <= dmc_txc_dma7_page_handle;
1498 func_num <= dmc_txc_dma7_func_num;
1499 page0_mask_dma <= page0_mask_dma7;
1500 page0_value_dma <= page0_value_dma7;
1501 page0_reloc_dma <= page0_reloc_dma7;
1502 page0_valid_dma <= page0_valid_dma7;
1503 page1_mask_dma <= page1_mask_dma7;
1504 page1_value_dma <= page1_value_dma7;
1505 page1_reloc_dma <= page1_reloc_dma7;
1506 page1_valid_dma <= page1_valid_dma7;
1507 end
1508 `DMA_CHANNEL_SIX: begin
1509 mbox_address <= tx_dma_cfg_dma6_mbaddr;
1510 page_handle <= dmc_txc_dma6_page_handle;
1511 func_num <= dmc_txc_dma6_func_num;
1512 page0_mask_dma <= page0_mask_dma6;
1513 page0_value_dma <= page0_value_dma6;
1514 page0_reloc_dma <= page0_reloc_dma6;
1515 page0_valid_dma <= page0_valid_dma6;
1516 page1_mask_dma <= page1_mask_dma6;
1517 page1_value_dma <= page1_value_dma6;
1518 page1_reloc_dma <= page1_reloc_dma6;
1519 page1_valid_dma <= page1_valid_dma6;
1520 end
1521 `DMA_CHANNEL_FIVE: begin
1522 mbox_address <= tx_dma_cfg_dma5_mbaddr;
1523 page_handle <= dmc_txc_dma5_page_handle;
1524 func_num <= dmc_txc_dma5_func_num;
1525 page0_mask_dma <= page0_mask_dma5;
1526 page0_value_dma <= page0_value_dma5;
1527 page0_reloc_dma <= page0_reloc_dma5;
1528 page0_valid_dma <= page0_valid_dma5;
1529 page1_mask_dma <= page1_mask_dma5;
1530 page1_value_dma <= page1_value_dma5;
1531 page1_reloc_dma <= page1_reloc_dma5;
1532 page1_valid_dma <= page1_valid_dma5;
1533 end
1534 `DMA_CHANNEL_FOUR: begin
1535 mbox_address <= tx_dma_cfg_dma4_mbaddr;
1536 page_handle <= dmc_txc_dma4_page_handle;
1537 func_num <= dmc_txc_dma4_func_num;
1538 page0_mask_dma <= page0_mask_dma4;
1539 page0_value_dma <= page0_value_dma4;
1540 page0_reloc_dma <= page0_reloc_dma4;
1541 page0_valid_dma <= page0_valid_dma4;
1542 page1_mask_dma <= page1_mask_dma4;
1543 page1_value_dma <= page1_value_dma4;
1544 page1_reloc_dma <= page1_reloc_dma4;
1545 page1_valid_dma <= page1_valid_dma4;
1546 end
1547 `DMA_CHANNEL_THREE: begin
1548 mbox_address <= tx_dma_cfg_dma3_mbaddr;
1549 page_handle <= dmc_txc_dma3_page_handle;
1550 func_num <= dmc_txc_dma3_func_num;
1551 page0_mask_dma <= page0_mask_dma3;
1552 page0_value_dma <= page0_value_dma3;
1553 page0_reloc_dma <= page0_reloc_dma3;
1554 page0_valid_dma <= page0_valid_dma3;
1555 page1_mask_dma <= page1_mask_dma3;
1556 page1_value_dma <= page1_value_dma3;
1557 page1_reloc_dma <= page1_reloc_dma3;
1558 page1_valid_dma <= page1_valid_dma3;
1559 end
1560 `DMA_CHANNEL_TWO: begin
1561 mbox_address <= tx_dma_cfg_dma2_mbaddr;
1562 page_handle <= dmc_txc_dma2_page_handle;
1563 func_num <= dmc_txc_dma2_func_num;
1564 page0_mask_dma <= page0_mask_dma2;
1565 page0_value_dma <= page0_value_dma2;
1566 page0_reloc_dma <= page0_reloc_dma2;
1567 page0_valid_dma <= page0_valid_dma2;
1568 page1_mask_dma <= page1_mask_dma2;
1569 page1_value_dma <= page1_value_dma2;
1570 page1_reloc_dma <= page1_reloc_dma2;
1571 page1_valid_dma <= page1_valid_dma2;
1572 end
1573 `DMA_CHANNEL_ONE: begin
1574 mbox_address <= tx_dma_cfg_dma1_mbaddr;
1575 page_handle <= dmc_txc_dma1_page_handle;
1576 func_num <= dmc_txc_dma1_func_num;
1577 page0_mask_dma <= page0_mask_dma1;
1578 page0_value_dma <= page0_value_dma1;
1579 page0_reloc_dma <= page0_reloc_dma1;
1580 page0_valid_dma <= page0_valid_dma1;
1581 page1_mask_dma <= page1_mask_dma1;
1582 page1_value_dma <= page1_value_dma1;
1583 page1_reloc_dma <= page1_reloc_dma1;
1584 page1_valid_dma <= page1_valid_dma1;
1585 end
1586 `DMA_CHANNEL_ZERO: begin
1587 mbox_address <= tx_dma_cfg_dma0_mbaddr;
1588 page_handle <= dmc_txc_dma0_page_handle;
1589 func_num <= dmc_txc_dma0_func_num;
1590 page0_mask_dma <= page0_mask_dma0;
1591 page0_value_dma <= page0_value_dma0;
1592 page0_reloc_dma <= page0_reloc_dma0;
1593 page0_valid_dma <= page0_valid_dma0;
1594 page1_mask_dma <= page1_mask_dma0;
1595 page1_value_dma <= page1_value_dma0;
1596 page1_reloc_dma <= page1_reloc_dma0;
1597 page1_valid_dma <= page1_valid_dma0;
1598 end
1599 default: begin
1600 mbox_address <= 38'h0;
1601 page1_valid_dma <= 1'b0;
1602 page0_valid_dma <= 1'b0;
1603 page_handle <= 20'h0;
1604 func_num <= 2'h0;
1605 end // case: default
1606
1607 endcase // case(mbox_dma_num)
1608 end
1609
1610 end // else: !if(!Reset_L)
1611
1612 end
1613
1614 // Write Ack State Machine
1615
1616
1617
1618 reg cmd_err_status;
1619 always@(posedge SysClk) begin
1620 if(!Reset_L) begin
1621 mbox_ack_state <= ACK_IDLE;
1622 resp_dma_num <= 5'h0;
1623 dmc_meta_ack_accept <= 1'b0;
1624 send_ack_received <= 1'b0;
1625 cmd_received <= 8'h0;
1626 mbox_err_received <= 1'b0;
1627 cmd_err_status <= 1'b0;
1628 end else begin
1629 case(mbox_ack_state) // synopsys full_case parallel_case
1630 ACK_IDLE: begin
1631 send_ack_received <= 1'b0;
1632 mbox_err_received <= 1'b0;
1633 cmd_err_status <= 1'b0;
1634 if(meta_dmc_ack_ready & meta_dmc_ack_client) begin
1635 resp_dma_num <= meta_dmc_ack_dma_num;
1636 dmc_meta_ack_accept <= 1'b1;
1637 mbox_ack_state <= WAIT_FOR_COMPLETE;
1638 cmd_received <= meta_dmc_ack_cmd;
1639 cmd_err_status <= (meta_dmc_ack_cmd_status== 4'hf);
1640 end // if (meta_ack_ready & meta_ack_client)
1641 end
1642 WAIT_FOR_COMPLETE: begin
1643 dmc_meta_ack_accept <= 1'b0;
1644 if(meta_dmc_ack_complete & meta_dmc_ack_client) begin
1645 if(( cmd_received == 8'h6/*COMMAND FOR MBOX ACK*/) & ~cmd_err_status) begin
1646 mbox_ack_state <= ACK_IDLE;
1647 send_ack_received <= 1'b1;
1648 mbox_err_received <= 1'b0;
1649 end else if ( cmd_err_status) begin // FIX THIS
1650 mbox_ack_state <= ACK_IDLE;
1651 send_ack_received <= 1'b0;
1652 mbox_err_received <= 1'b1;
1653 end else begin
1654 mbox_ack_state <= ACK_IDLE;
1655 send_ack_received <= 1'b1;
1656 mbox_err_received <= 1'b1;
1657 end // else: !if(cmd_received == `RESP_ERROR)
1658 end // if (meta_ack_complete & meta_ack_client)
1659 end
1660 default: begin
1661 mbox_ack_state <= ACK_IDLE;
1662 end
1663 endcase // case(mbox_ack_state)
1664 end // else: !if(!Reset_L)
1665 end // always@ (posedge SysClk)
1666
1667 always@(resp_dma_num or mbox_err_received) begin
1668 if(mbox_err_received) begin
1669 case(resp_dma_num) // synopsys full_case parallel_case
1670 `DMA_CHANNEL_ZERO:mbox_ack_dma_err_received = `NO_OF_DMAS'h1;
1671 `DMA_CHANNEL_ONE:mbox_ack_dma_err_received = `NO_OF_DMAS'h2;
1672 `DMA_CHANNEL_TWO:mbox_ack_dma_err_received = `NO_OF_DMAS'h4;
1673 `DMA_CHANNEL_THREE:mbox_ack_dma_err_received = `NO_OF_DMAS'h8;
1674 `DMA_CHANNEL_FOUR:mbox_ack_dma_err_received = `NO_OF_DMAS'h10;
1675 `DMA_CHANNEL_FIVE:mbox_ack_dma_err_received = `NO_OF_DMAS'h20;
1676 `DMA_CHANNEL_SIX:mbox_ack_dma_err_received = `NO_OF_DMAS'h40;
1677 `DMA_CHANNEL_SEVEN:mbox_ack_dma_err_received = `NO_OF_DMAS'h80;
1678 `DMA_CHANNEL_EIGHT:mbox_ack_dma_err_received = `NO_OF_DMAS'h100;
1679 `DMA_CHANNEL_NINE:mbox_ack_dma_err_received = `NO_OF_DMAS'h200;
1680 `DMA_CHANNEL_TEN:mbox_ack_dma_err_received = `NO_OF_DMAS'h400;
1681 `DMA_CHANNEL_ELEVEN:mbox_ack_dma_err_received = `NO_OF_DMAS'h800;
1682 `DMA_CHANNEL_TWELVE:mbox_ack_dma_err_received = `NO_OF_DMAS'h1000;
1683 `DMA_CHANNEL_THIRTEEN:mbox_ack_dma_err_received = `NO_OF_DMAS'h2000;
1684 `DMA_CHANNEL_FOURTEEN:mbox_ack_dma_err_received = `NO_OF_DMAS'h4000;
1685 `DMA_CHANNEL_FIFTEEN:mbox_ack_dma_err_received = `NO_OF_DMAS'h8000;
1686`ifdef NEPTUNE
1687 `DMA_CHANNEL_SIXTEEN:mbox_ack_dma_err_received = `NO_OF_DMAS'h10000;
1688 `DMA_CHANNEL_SEVENTEEN:mbox_ack_dma_err_received = `NO_OF_DMAS'h20000;
1689 `DMA_CHANNEL_EIGHTEEN:mbox_ack_dma_err_received = `NO_OF_DMAS'h40000;
1690 `DMA_CHANNEL_NINETEEN:mbox_ack_dma_err_received = `NO_OF_DMAS'h80000;
1691 `DMA_CHANNEL_TWENTY:mbox_ack_dma_err_received = `NO_OF_DMAS'h100000;
1692 `DMA_CHANNEL_TWENTYONE:mbox_ack_dma_err_received = `NO_OF_DMAS'h200000;
1693 `DMA_CHANNEL_TWENTYTWO:mbox_ack_dma_err_received = `NO_OF_DMAS'h400000;
1694 `DMA_CHANNEL_TWENTYTHREE:mbox_ack_dma_err_received =`NO_OF_DMAS'h800000 ;
1695`else
1696`endif
1697
1698 default: mbox_ack_dma_err_received = `NO_OF_DMAS'h0;
1699 // Add error status also
1700 endcase // case(resp_dma_num)
1701 end else begin // if (mbox_err_received)
1702 mbox_ack_dma_err_received = `NO_OF_DMAS'h0;
1703 end // else: !if(send_ack_received)
1704
1705 end // always@ (resp_dma_num or send_ack_received)
1706
1707 always@(resp_dma_num or send_ack_received) begin
1708 if(send_ack_received) begin
1709 case(resp_dma_num) // synopsys full_case parallel_case
1710 `DMA_CHANNEL_ZERO:mbox_ack_dma_received = `NO_OF_DMAS'h1;
1711 `DMA_CHANNEL_ONE:mbox_ack_dma_received = `NO_OF_DMAS'h2;
1712 `DMA_CHANNEL_TWO:mbox_ack_dma_received = `NO_OF_DMAS'h4;
1713 `DMA_CHANNEL_THREE:mbox_ack_dma_received = `NO_OF_DMAS'h8;
1714 `DMA_CHANNEL_FOUR:mbox_ack_dma_received = `NO_OF_DMAS'h10;
1715 `DMA_CHANNEL_FIVE:mbox_ack_dma_received = `NO_OF_DMAS'h20;
1716 `DMA_CHANNEL_SIX:mbox_ack_dma_received = `NO_OF_DMAS'h40;
1717 `DMA_CHANNEL_SEVEN:mbox_ack_dma_received = `NO_OF_DMAS'h80;
1718 `DMA_CHANNEL_EIGHT:mbox_ack_dma_received = `NO_OF_DMAS'h100;
1719 `DMA_CHANNEL_NINE:mbox_ack_dma_received = `NO_OF_DMAS'h200;
1720 `DMA_CHANNEL_TEN:mbox_ack_dma_received = `NO_OF_DMAS'h400;
1721 `DMA_CHANNEL_ELEVEN:mbox_ack_dma_received = `NO_OF_DMAS'h800;
1722 `DMA_CHANNEL_TWELVE:mbox_ack_dma_received = `NO_OF_DMAS'h1000;
1723 `DMA_CHANNEL_THIRTEEN:mbox_ack_dma_received = `NO_OF_DMAS'h2000;
1724 `DMA_CHANNEL_FOURTEEN:mbox_ack_dma_received = `NO_OF_DMAS'h4000;
1725 `DMA_CHANNEL_FIFTEEN:mbox_ack_dma_received = `NO_OF_DMAS'h8000;
1726`ifdef NEPTUNE
1727 `DMA_CHANNEL_SIXTEEN:mbox_ack_dma_received = `NO_OF_DMAS'h10000;
1728 `DMA_CHANNEL_SEVENTEEN:mbox_ack_dma_received = `NO_OF_DMAS'h20000;
1729 `DMA_CHANNEL_EIGHTEEN:mbox_ack_dma_received = `NO_OF_DMAS'h40000;
1730 `DMA_CHANNEL_NINETEEN:mbox_ack_dma_received = `NO_OF_DMAS'h80000;
1731 `DMA_CHANNEL_TWENTY:mbox_ack_dma_received = `NO_OF_DMAS'h100000;
1732 `DMA_CHANNEL_TWENTYONE:mbox_ack_dma_received = `NO_OF_DMAS'h200000;
1733 `DMA_CHANNEL_TWENTYTWO:mbox_ack_dma_received = `NO_OF_DMAS'h400000;
1734 `DMA_CHANNEL_TWENTYTHREE:mbox_ack_dma_received =`NO_OF_DMAS'h800000 ;
1735
1736`else
1737`endif
1738 default: mbox_ack_dma_received = `NO_OF_DMAS'h0;
1739 // Add error status also
1740 endcase // case(resp_dma_num)
1741 end else begin // if (send_ack_received)
1742 mbox_ack_dma_received = `NO_OF_DMAS'h0;
1743 end // else: !if(send_ack_received)
1744
1745 end // always@ (resp_dma_num or send_ack_received)
1746
1747
1748`ifdef NEPTUNE
1749 assign {
1750 mbox_ack_dma23_received, mbox_ack_dma22_received, mbox_ack_dma21_received, mbox_ack_dma20_received,
1751 mbox_ack_dma19_received, mbox_ack_dma18_received, mbox_ack_dma17_received, mbox_ack_dma16_received,
1752 mbox_ack_dma15_received, mbox_ack_dma14_received, mbox_ack_dma13_received, mbox_ack_dma12_received,
1753 mbox_ack_dma11_received, mbox_ack_dma10_received, mbox_ack_dma9_received, mbox_ack_dma8_received,
1754 mbox_ack_dma7_received, mbox_ack_dma6_received, mbox_ack_dma5_received, mbox_ack_dma4_received,
1755 mbox_ack_dma3_received, mbox_ack_dma2_received, mbox_ack_dma1_received, mbox_ack_dma0_received } = mbox_ack_dma_received;
1756
1757 assign {
1758 mbox_dma23_scheduled, mbox_dma22_scheduled, mbox_dma21_scheduled, mbox_dma20_scheduled,
1759 mbox_dma19_scheduled, mbox_dma18_scheduled, mbox_dma17_scheduled, mbox_dma16_scheduled,
1760 mbox_dma15_scheduled, mbox_dma14_scheduled, mbox_dma13_scheduled, mbox_dma12_scheduled,
1761 mbox_dma11_scheduled, mbox_dma10_scheduled, mbox_dma9_scheduled, mbox_dma8_scheduled,
1762 mbox_dma7_scheduled, mbox_dma6_scheduled, mbox_dma5_scheduled, mbox_dma4_scheduled,
1763 mbox_dma3_scheduled, mbox_dma2_scheduled, mbox_dma1_scheduled, mbox_dma0_scheduled } = mbox_dma_scheduled;
1764
1765
1766 assign {
1767 done_mbox_dma23, done_mbox_dma22, done_mbox_dma21, done_mbox_dma20,
1768 done_mbox_dma19, done_mbox_dma18, done_mbox_dma17, done_mbox_dma16,
1769 done_mbox_dma15, done_mbox_dma14, done_mbox_dma13, done_mbox_dma12,
1770 done_mbox_dma11, done_mbox_dma10, done_mbox_dma9, done_mbox_dma8,
1771 done_mbox_dma7, done_mbox_dma6, done_mbox_dma5, done_mbox_dma4,
1772 done_mbox_dma3, done_mbox_dma2, done_mbox_dma1, done_mbox_dma0 } = done_mbox_update;
1773`else // !ifdef NEPTUNE
1774 assign {
1775 mbox_ack_dma15_received, mbox_ack_dma14_received, mbox_ack_dma13_received, mbox_ack_dma12_received,
1776 mbox_ack_dma11_received, mbox_ack_dma10_received, mbox_ack_dma9_received, mbox_ack_dma8_received,
1777 mbox_ack_dma7_received, mbox_ack_dma6_received, mbox_ack_dma5_received, mbox_ack_dma4_received,
1778 mbox_ack_dma3_received, mbox_ack_dma2_received, mbox_ack_dma1_received, mbox_ack_dma0_received } = mbox_ack_dma_received;
1779
1780 assign {
1781 mbox_dma15_scheduled, mbox_dma14_scheduled, mbox_dma13_scheduled, mbox_dma12_scheduled,
1782 mbox_dma11_scheduled, mbox_dma10_scheduled, mbox_dma9_scheduled, mbox_dma8_scheduled,
1783 mbox_dma7_scheduled, mbox_dma6_scheduled, mbox_dma5_scheduled, mbox_dma4_scheduled,
1784 mbox_dma3_scheduled, mbox_dma2_scheduled, mbox_dma1_scheduled, mbox_dma0_scheduled } = mbox_dma_scheduled;
1785
1786
1787 assign {
1788 done_mbox_dma15, done_mbox_dma14, done_mbox_dma13, done_mbox_dma12,
1789 done_mbox_dma11, done_mbox_dma10, done_mbox_dma9, done_mbox_dma8,
1790 done_mbox_dma7, done_mbox_dma6, done_mbox_dma5, done_mbox_dma4,
1791 done_mbox_dma3, done_mbox_dma2, done_mbox_dma1, done_mbox_dma0 } = done_mbox_update;
1792
1793`endif
1794
1795
1796 // page translation logic -
1797
1798 wire [43:0] dma_mbox_addr = {mbox_address,6'h0};
1799
1800 always@(posedge SysClk) begin
1801 if (!Reset_L) begin
1802 page_xlate_state <= PAGE_XLATE_IDLE;
1803 xlate_done <= 1'b0;
1804 page0_match <= 1'b0;
1805 page1_match <= 1'b0;
1806 set_mbox_part_error <= 1'b0;
1807 end else begin
1808 case(page_xlate_state) // synopsys parallel_case
1809 PAGE_XLATE_IDLE: begin
1810 xlate_done <= 1'b0;
1811 if(start_page_xlate) begin
1812 xlate_mbaddr<= dma_mbox_addr;
1813 if( ~page0_valid_dma & ~page1_valid_dma ) begin
1814 // Set ERROR Flags?
1815 set_mbox_part_error <= 1'b1;
1816 page_xlate_state <= PAGE_XLATE_ERROR;
1817
1818 end else begin // if ( ~page0_valid_dma & ~page1_valid_dma )
1819 page_xlate_state <= CHECK_PAGE_STATUS;
1820 page0_reloc_addr <= ((dma_mbox_addr[43:12] & ~page0_mask_dma) |
1821 ( page0_reloc_dma & page0_mask_dma)) ;
1822 page0_match <= page0_valid_dma &
1823 ((page0_mask_dma & dma_mbox_addr [43:12] ) == page0_value_dma );
1824
1825 page1_reloc_addr <= ((dma_mbox_addr[43:12] & ~page1_mask_dma) |
1826 ( page1_reloc_dma & page1_mask_dma)) ;
1827
1828 page1_match <= page1_valid_dma &
1829 ((page1_mask_dma & dma_mbox_addr [43:12] ) == page1_value_dma );
1830
1831 end // else: !if( ~page0_valid_dma & ~page1_valid_dma )
1832 end // if (start_page_xlate)
1833 end // case: PAGE_XLATE_IDLE
1834 CHECK_PAGE_STATUS: begin
1835 if(page0_match) begin
1836 xlate_done <= 1'b1;
1837 xlate_mbaddr <= {page0_reloc_addr,dma_mbox_addr[11:0]};
1838 page_xlate_state <= PAGE_XLATE_DONE;
1839 end else if(page1_match) begin
1840 xlate_done <= 1'b1;
1841 xlate_mbaddr <= {page1_reloc_addr,dma_mbox_addr[11:0]};
1842 page_xlate_state <= PAGE_XLATE_DONE;
1843 end else begin
1844 set_mbox_part_error <= 1'b1;
1845 page_xlate_state <= PAGE_XLATE_ERROR;
1846 end
1847 end // case: CHECK_PAGE_STATUS
1848 PAGE_XLATE_ERROR: begin
1849 // Go back to IDLE -- for now
1850 set_mbox_part_error <= 1'b1;
1851 xlate_done <= 1'b0;
1852 page_xlate_state <= PAGE_XLATE_DONE;
1853 // synopsys translate_off
1854 $display(" %m: Warning-- Page translation failure Time - %t",$time);
1855 // synopsys translate_on
1856 end
1857 PAGE_XLATE_DONE: begin
1858 set_mbox_part_error <= 1'b0;
1859 page_xlate_state <= PAGE_XLATE_IDLE;
1860 end // case: PAGE_XLATE_DONE
1861 // default: begin
1862 // page_xlate_state <= 4'hx;
1863 // xlate_mbaddr<= 44'hx;
1864 // end
1865 endcase // case(page_xlate_state)
1866 end // else: !if(!Reset_L)
1867 end // always@ (posedge SysClk)
1868
1869
1870endmodule // niu_tdmc_sendmbox
1871
1872