Commit | Line | Data |
---|---|---|
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 | ||
56 | module 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 | ||
1870 | endmodule // niu_tdmc_sendmbox | |
1871 | ||
1872 |