OpenCores
URL https://opencores.org/ocsvn/usb_device_core/usb_device_core/trunk

Subversion Repositories usb_device_core

[/] [usb_device_core/] [trunk/] [src_v/] [usbf_device.v] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 ultra_embe
//-----------------------------------------------------------------
2
//                       USB Device Core
3
//                           V1.0
4
//                     Ultra-Embedded.com
5
//                     Copyright 2014-2019
6
//
7
//                 Email: admin@ultra-embedded.com
8
//
9
//                         License: GPL
10
// If you would like a version with a more permissive license for
11
// use in closed source commercial applications please contact me
12
// for details.
13
//-----------------------------------------------------------------
14
//
15
// This file is open source HDL; you can redistribute it and/or 
16
// modify it under the terms of the GNU General Public License as 
17
// published by the Free Software Foundation; either version 2 of 
18
// the License, or (at your option) any later version.
19
//
20
// This file is distributed in the hope that it will be useful,
21
// but WITHOUT ANY WARRANTY; without even the implied warranty of
22
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23
// GNU General Public License for more details.
24
//
25
// You should have received a copy of the GNU General Public 
26
// License along with this file; if not, write to the Free Software
27
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
28
// USA
29
//-----------------------------------------------------------------
30
 
31
//-----------------------------------------------------------------
32
//                          Generated File
33
//-----------------------------------------------------------------
34
 
35
`include "usbf_device_defs.v"
36
 
37
//-----------------------------------------------------------------
38
// Module:  USB Device Endpoint
39
//-----------------------------------------------------------------
40
module usbf_device
41
(
42
    // Inputs
43
     input          clk_i
44
    ,input          rst_i
45
    ,input          cfg_awvalid_i
46
    ,input  [31:0]  cfg_awaddr_i
47
    ,input          cfg_wvalid_i
48
    ,input  [31:0]  cfg_wdata_i
49
    ,input  [3:0]   cfg_wstrb_i
50
    ,input          cfg_bready_i
51
    ,input          cfg_arvalid_i
52
    ,input  [31:0]  cfg_araddr_i
53
    ,input          cfg_rready_i
54
    ,input  [7:0]   utmi_data_in_i
55
    ,input          utmi_txready_i
56
    ,input          utmi_rxvalid_i
57
    ,input          utmi_rxactive_i
58
    ,input          utmi_rxerror_i
59
    ,input  [1:0]   utmi_linestate_i
60
 
61
    // Outputs
62
    ,output         cfg_awready_o
63
    ,output         cfg_wready_o
64
    ,output         cfg_bvalid_o
65
    ,output [1:0]   cfg_bresp_o
66
    ,output         cfg_arready_o
67
    ,output         cfg_rvalid_o
68
    ,output [31:0]  cfg_rdata_o
69
    ,output [1:0]   cfg_rresp_o
70
    ,output         intr_o
71
    ,output [7:0]   utmi_data_out_o
72
    ,output         utmi_txvalid_o
73
    ,output [1:0]   utmi_op_mode_o
74
    ,output [1:0]   utmi_xcvrselect_o
75
    ,output         utmi_termselect_o
76
    ,output         utmi_dppulldown_o
77
    ,output         utmi_dmpulldown_o
78
);
79
 
80
//-----------------------------------------------------------------
81
// Retime write data
82
//-----------------------------------------------------------------
83
reg [31:0] wr_data_q;
84
 
85
always @ (posedge clk_i or posedge rst_i)
86
if (rst_i)
87
    wr_data_q <= 32'b0;
88
else
89
    wr_data_q <= cfg_wdata_i;
90
 
91
//-----------------------------------------------------------------
92
// Request Logic
93
//-----------------------------------------------------------------
94
wire read_en_w  = cfg_arvalid_i & cfg_arready_o;
95
wire write_en_w = cfg_awvalid_i & cfg_awready_o;
96
 
97
//-----------------------------------------------------------------
98
// Accept Logic
99
//-----------------------------------------------------------------
100
assign cfg_arready_o = ~cfg_rvalid_o;
101
assign cfg_awready_o = ~cfg_bvalid_o && ~cfg_arvalid_i;
102
assign cfg_wready_o  = cfg_awready_o;
103
 
104
 
105
//-----------------------------------------------------------------
106
// Register usb_func_ctrl
107
//-----------------------------------------------------------------
108
reg usb_func_ctrl_wr_q;
109
 
110
always @ (posedge clk_i or posedge rst_i)
111
if (rst_i)
112
    usb_func_ctrl_wr_q <= 1'b0;
113
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_FUNC_CTRL))
114
    usb_func_ctrl_wr_q <= 1'b1;
115
else
116
    usb_func_ctrl_wr_q <= 1'b0;
117
 
118
// usb_func_ctrl_hs_chirp_en [internal]
119
reg        usb_func_ctrl_hs_chirp_en_q;
120
 
121
always @ (posedge clk_i or posedge rst_i)
122
if (rst_i)
123
    usb_func_ctrl_hs_chirp_en_q <= 1'd`USB_FUNC_CTRL_HS_CHIRP_EN_DEFAULT;
124
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_FUNC_CTRL))
125
    usb_func_ctrl_hs_chirp_en_q <= cfg_wdata_i[`USB_FUNC_CTRL_HS_CHIRP_EN_R];
126
 
127
wire        usb_func_ctrl_hs_chirp_en_out_w = usb_func_ctrl_hs_chirp_en_q;
128
 
129
 
130
// usb_func_ctrl_phy_dmpulldown [internal]
131
reg        usb_func_ctrl_phy_dmpulldown_q;
132
 
133
always @ (posedge clk_i or posedge rst_i)
134
if (rst_i)
135
    usb_func_ctrl_phy_dmpulldown_q <= 1'd`USB_FUNC_CTRL_PHY_DMPULLDOWN_DEFAULT;
136
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_FUNC_CTRL))
137
    usb_func_ctrl_phy_dmpulldown_q <= cfg_wdata_i[`USB_FUNC_CTRL_PHY_DMPULLDOWN_R];
138
 
139
wire        usb_func_ctrl_phy_dmpulldown_out_w = usb_func_ctrl_phy_dmpulldown_q;
140
 
141
 
142
// usb_func_ctrl_phy_dppulldown [internal]
143
reg        usb_func_ctrl_phy_dppulldown_q;
144
 
145
always @ (posedge clk_i or posedge rst_i)
146
if (rst_i)
147
    usb_func_ctrl_phy_dppulldown_q <= 1'd`USB_FUNC_CTRL_PHY_DPPULLDOWN_DEFAULT;
148
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_FUNC_CTRL))
149
    usb_func_ctrl_phy_dppulldown_q <= cfg_wdata_i[`USB_FUNC_CTRL_PHY_DPPULLDOWN_R];
150
 
151
wire        usb_func_ctrl_phy_dppulldown_out_w = usb_func_ctrl_phy_dppulldown_q;
152
 
153
 
154
// usb_func_ctrl_phy_termselect [internal]
155
reg        usb_func_ctrl_phy_termselect_q;
156
 
157
always @ (posedge clk_i or posedge rst_i)
158
if (rst_i)
159
    usb_func_ctrl_phy_termselect_q <= 1'd`USB_FUNC_CTRL_PHY_TERMSELECT_DEFAULT;
160
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_FUNC_CTRL))
161
    usb_func_ctrl_phy_termselect_q <= cfg_wdata_i[`USB_FUNC_CTRL_PHY_TERMSELECT_R];
162
 
163
wire        usb_func_ctrl_phy_termselect_out_w = usb_func_ctrl_phy_termselect_q;
164
 
165
 
166
// usb_func_ctrl_phy_xcvrselect [internal]
167
reg [1:0]  usb_func_ctrl_phy_xcvrselect_q;
168
 
169
always @ (posedge clk_i or posedge rst_i)
170
if (rst_i)
171
    usb_func_ctrl_phy_xcvrselect_q <= 2'd`USB_FUNC_CTRL_PHY_XCVRSELECT_DEFAULT;
172
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_FUNC_CTRL))
173
    usb_func_ctrl_phy_xcvrselect_q <= cfg_wdata_i[`USB_FUNC_CTRL_PHY_XCVRSELECT_R];
174
 
175
wire [1:0]  usb_func_ctrl_phy_xcvrselect_out_w = usb_func_ctrl_phy_xcvrselect_q;
176
 
177
 
178
// usb_func_ctrl_phy_opmode [internal]
179
reg [1:0]  usb_func_ctrl_phy_opmode_q;
180
 
181
always @ (posedge clk_i or posedge rst_i)
182
if (rst_i)
183
    usb_func_ctrl_phy_opmode_q <= 2'd`USB_FUNC_CTRL_PHY_OPMODE_DEFAULT;
184
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_FUNC_CTRL))
185
    usb_func_ctrl_phy_opmode_q <= cfg_wdata_i[`USB_FUNC_CTRL_PHY_OPMODE_R];
186
 
187
wire [1:0]  usb_func_ctrl_phy_opmode_out_w = usb_func_ctrl_phy_opmode_q;
188
 
189
 
190
// usb_func_ctrl_int_en_sof [internal]
191
reg        usb_func_ctrl_int_en_sof_q;
192
 
193
always @ (posedge clk_i or posedge rst_i)
194
if (rst_i)
195
    usb_func_ctrl_int_en_sof_q <= 1'd`USB_FUNC_CTRL_INT_EN_SOF_DEFAULT;
196
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_FUNC_CTRL))
197
    usb_func_ctrl_int_en_sof_q <= cfg_wdata_i[`USB_FUNC_CTRL_INT_EN_SOF_R];
198
 
199
wire        usb_func_ctrl_int_en_sof_out_w = usb_func_ctrl_int_en_sof_q;
200
 
201
 
202
//-----------------------------------------------------------------
203
// Register usb_func_stat
204
//-----------------------------------------------------------------
205
reg usb_func_stat_wr_q;
206
 
207
always @ (posedge clk_i or posedge rst_i)
208
if (rst_i)
209
    usb_func_stat_wr_q <= 1'b0;
210
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_FUNC_STAT))
211
    usb_func_stat_wr_q <= 1'b1;
212
else
213
    usb_func_stat_wr_q <= 1'b0;
214
 
215
// usb_func_stat_rst [external]
216
wire        usb_func_stat_rst_out_w = wr_data_q[`USB_FUNC_STAT_RST_R];
217
 
218
 
219
// usb_func_stat_linestate [external]
220
wire [1:0]  usb_func_stat_linestate_out_w = wr_data_q[`USB_FUNC_STAT_LINESTATE_R];
221
 
222
 
223
// usb_func_stat_frame [external]
224
wire [10:0]  usb_func_stat_frame_out_w = wr_data_q[`USB_FUNC_STAT_FRAME_R];
225
 
226
 
227
//-----------------------------------------------------------------
228
// Register usb_func_addr
229
//-----------------------------------------------------------------
230
reg usb_func_addr_wr_q;
231
 
232
always @ (posedge clk_i or posedge rst_i)
233
if (rst_i)
234
    usb_func_addr_wr_q <= 1'b0;
235
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_FUNC_ADDR))
236
    usb_func_addr_wr_q <= 1'b1;
237
else
238
    usb_func_addr_wr_q <= 1'b0;
239
 
240
// usb_func_addr_dev_addr [internal]
241
reg [6:0]  usb_func_addr_dev_addr_q;
242
 
243
always @ (posedge clk_i or posedge rst_i)
244
if (rst_i)
245
    usb_func_addr_dev_addr_q <= 7'd`USB_FUNC_ADDR_DEV_ADDR_DEFAULT;
246
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_FUNC_ADDR))
247
    usb_func_addr_dev_addr_q <= cfg_wdata_i[`USB_FUNC_ADDR_DEV_ADDR_R];
248
 
249
wire [6:0]  usb_func_addr_dev_addr_out_w = usb_func_addr_dev_addr_q;
250
 
251
 
252
//-----------------------------------------------------------------
253
// Register usb_ep0_cfg
254
//-----------------------------------------------------------------
255
reg usb_ep0_cfg_wr_q;
256
 
257
always @ (posedge clk_i or posedge rst_i)
258
if (rst_i)
259
    usb_ep0_cfg_wr_q <= 1'b0;
260
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_CFG))
261
    usb_ep0_cfg_wr_q <= 1'b1;
262
else
263
    usb_ep0_cfg_wr_q <= 1'b0;
264
 
265
// usb_ep0_cfg_int_rx [internal]
266
reg        usb_ep0_cfg_int_rx_q;
267
 
268
always @ (posedge clk_i or posedge rst_i)
269
if (rst_i)
270
    usb_ep0_cfg_int_rx_q <= 1'd`USB_EP0_CFG_INT_RX_DEFAULT;
271
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_CFG))
272
    usb_ep0_cfg_int_rx_q <= cfg_wdata_i[`USB_EP0_CFG_INT_RX_R];
273
 
274
wire        usb_ep0_cfg_int_rx_out_w = usb_ep0_cfg_int_rx_q;
275
 
276
 
277
// usb_ep0_cfg_int_tx [internal]
278
reg        usb_ep0_cfg_int_tx_q;
279
 
280
always @ (posedge clk_i or posedge rst_i)
281
if (rst_i)
282
    usb_ep0_cfg_int_tx_q <= 1'd`USB_EP0_CFG_INT_TX_DEFAULT;
283
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_CFG))
284
    usb_ep0_cfg_int_tx_q <= cfg_wdata_i[`USB_EP0_CFG_INT_TX_R];
285
 
286
wire        usb_ep0_cfg_int_tx_out_w = usb_ep0_cfg_int_tx_q;
287
 
288
 
289
// usb_ep0_cfg_stall_ep [clearable]
290
reg        usb_ep0_cfg_stall_ep_q;
291
 
292
wire usb_ep0_cfg_stall_ep_ack_in_w;
293
 
294
always @ (posedge clk_i or posedge rst_i)
295
if (rst_i)
296
    usb_ep0_cfg_stall_ep_q <= 1'b0;
297
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_CFG))
298
    usb_ep0_cfg_stall_ep_q <= cfg_wdata_i[`USB_EP0_CFG_STALL_EP_R];
299
else if (usb_ep0_cfg_stall_ep_ack_in_w)
300
    usb_ep0_cfg_stall_ep_q <= 1'b0;
301
 
302
wire        usb_ep0_cfg_stall_ep_out_w = usb_ep0_cfg_stall_ep_q;
303
 
304
 
305
// usb_ep0_cfg_iso [internal]
306
reg        usb_ep0_cfg_iso_q;
307
 
308
always @ (posedge clk_i or posedge rst_i)
309
if (rst_i)
310
    usb_ep0_cfg_iso_q <= 1'd`USB_EP0_CFG_ISO_DEFAULT;
311
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_CFG))
312
    usb_ep0_cfg_iso_q <= cfg_wdata_i[`USB_EP0_CFG_ISO_R];
313
 
314
wire        usb_ep0_cfg_iso_out_w = usb_ep0_cfg_iso_q;
315
 
316
 
317
//-----------------------------------------------------------------
318
// Register usb_ep0_tx_ctrl
319
//-----------------------------------------------------------------
320
reg usb_ep0_tx_ctrl_wr_q;
321
 
322
always @ (posedge clk_i or posedge rst_i)
323
if (rst_i)
324
    usb_ep0_tx_ctrl_wr_q <= 1'b0;
325
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_TX_CTRL))
326
    usb_ep0_tx_ctrl_wr_q <= 1'b1;
327
else
328
    usb_ep0_tx_ctrl_wr_q <= 1'b0;
329
 
330
// usb_ep0_tx_ctrl_tx_flush [auto_clr]
331
reg        usb_ep0_tx_ctrl_tx_flush_q;
332
 
333
always @ (posedge clk_i or posedge rst_i)
334
if (rst_i)
335
    usb_ep0_tx_ctrl_tx_flush_q <= 1'd`USB_EP0_TX_CTRL_TX_FLUSH_DEFAULT;
336
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_TX_CTRL))
337
    usb_ep0_tx_ctrl_tx_flush_q <= cfg_wdata_i[`USB_EP0_TX_CTRL_TX_FLUSH_R];
338
else
339
    usb_ep0_tx_ctrl_tx_flush_q <= 1'd`USB_EP0_TX_CTRL_TX_FLUSH_DEFAULT;
340
 
341
wire        usb_ep0_tx_ctrl_tx_flush_out_w = usb_ep0_tx_ctrl_tx_flush_q;
342
 
343
 
344
// usb_ep0_tx_ctrl_tx_start [auto_clr]
345
reg        usb_ep0_tx_ctrl_tx_start_q;
346
 
347
always @ (posedge clk_i or posedge rst_i)
348
if (rst_i)
349
    usb_ep0_tx_ctrl_tx_start_q <= 1'd`USB_EP0_TX_CTRL_TX_START_DEFAULT;
350
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_TX_CTRL))
351
    usb_ep0_tx_ctrl_tx_start_q <= cfg_wdata_i[`USB_EP0_TX_CTRL_TX_START_R];
352
else
353
    usb_ep0_tx_ctrl_tx_start_q <= 1'd`USB_EP0_TX_CTRL_TX_START_DEFAULT;
354
 
355
wire        usb_ep0_tx_ctrl_tx_start_out_w = usb_ep0_tx_ctrl_tx_start_q;
356
 
357
 
358
// usb_ep0_tx_ctrl_tx_len [internal]
359
reg [10:0]  usb_ep0_tx_ctrl_tx_len_q;
360
 
361
always @ (posedge clk_i or posedge rst_i)
362
if (rst_i)
363
    usb_ep0_tx_ctrl_tx_len_q <= 11'd`USB_EP0_TX_CTRL_TX_LEN_DEFAULT;
364
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_TX_CTRL))
365
    usb_ep0_tx_ctrl_tx_len_q <= cfg_wdata_i[`USB_EP0_TX_CTRL_TX_LEN_R];
366
 
367
wire [10:0]  usb_ep0_tx_ctrl_tx_len_out_w = usb_ep0_tx_ctrl_tx_len_q;
368
 
369
 
370
//-----------------------------------------------------------------
371
// Register usb_ep0_rx_ctrl
372
//-----------------------------------------------------------------
373
reg usb_ep0_rx_ctrl_wr_q;
374
 
375
always @ (posedge clk_i or posedge rst_i)
376
if (rst_i)
377
    usb_ep0_rx_ctrl_wr_q <= 1'b0;
378
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_RX_CTRL))
379
    usb_ep0_rx_ctrl_wr_q <= 1'b1;
380
else
381
    usb_ep0_rx_ctrl_wr_q <= 1'b0;
382
 
383
// usb_ep0_rx_ctrl_rx_flush [auto_clr]
384
reg        usb_ep0_rx_ctrl_rx_flush_q;
385
 
386
always @ (posedge clk_i or posedge rst_i)
387
if (rst_i)
388
    usb_ep0_rx_ctrl_rx_flush_q <= 1'd`USB_EP0_RX_CTRL_RX_FLUSH_DEFAULT;
389
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_RX_CTRL))
390
    usb_ep0_rx_ctrl_rx_flush_q <= cfg_wdata_i[`USB_EP0_RX_CTRL_RX_FLUSH_R];
391
else
392
    usb_ep0_rx_ctrl_rx_flush_q <= 1'd`USB_EP0_RX_CTRL_RX_FLUSH_DEFAULT;
393
 
394
wire        usb_ep0_rx_ctrl_rx_flush_out_w = usb_ep0_rx_ctrl_rx_flush_q;
395
 
396
 
397
// usb_ep0_rx_ctrl_rx_accept [auto_clr]
398
reg        usb_ep0_rx_ctrl_rx_accept_q;
399
 
400
always @ (posedge clk_i or posedge rst_i)
401
if (rst_i)
402
    usb_ep0_rx_ctrl_rx_accept_q <= 1'd`USB_EP0_RX_CTRL_RX_ACCEPT_DEFAULT;
403
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_RX_CTRL))
404
    usb_ep0_rx_ctrl_rx_accept_q <= cfg_wdata_i[`USB_EP0_RX_CTRL_RX_ACCEPT_R];
405
else
406
    usb_ep0_rx_ctrl_rx_accept_q <= 1'd`USB_EP0_RX_CTRL_RX_ACCEPT_DEFAULT;
407
 
408
wire        usb_ep0_rx_ctrl_rx_accept_out_w = usb_ep0_rx_ctrl_rx_accept_q;
409
 
410
 
411
//-----------------------------------------------------------------
412
// Register usb_ep0_sts
413
//-----------------------------------------------------------------
414
reg usb_ep0_sts_wr_q;
415
 
416
always @ (posedge clk_i or posedge rst_i)
417
if (rst_i)
418
    usb_ep0_sts_wr_q <= 1'b0;
419
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_STS))
420
    usb_ep0_sts_wr_q <= 1'b1;
421
else
422
    usb_ep0_sts_wr_q <= 1'b0;
423
 
424
 
425
 
426
 
427
 
428
 
429
 
430
//-----------------------------------------------------------------
431
// Register usb_ep0_data
432
//-----------------------------------------------------------------
433
reg usb_ep0_data_wr_q;
434
 
435
always @ (posedge clk_i or posedge rst_i)
436
if (rst_i)
437
    usb_ep0_data_wr_q <= 1'b0;
438
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP0_DATA))
439
    usb_ep0_data_wr_q <= 1'b1;
440
else
441
    usb_ep0_data_wr_q <= 1'b0;
442
 
443
// usb_ep0_data_data [external]
444
wire [7:0]  usb_ep0_data_data_out_w = wr_data_q[`USB_EP0_DATA_DATA_R];
445
 
446
 
447
//-----------------------------------------------------------------
448
// Register usb_ep1_cfg
449
//-----------------------------------------------------------------
450
reg usb_ep1_cfg_wr_q;
451
 
452
always @ (posedge clk_i or posedge rst_i)
453
if (rst_i)
454
    usb_ep1_cfg_wr_q <= 1'b0;
455
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_CFG))
456
    usb_ep1_cfg_wr_q <= 1'b1;
457
else
458
    usb_ep1_cfg_wr_q <= 1'b0;
459
 
460
// usb_ep1_cfg_int_rx [internal]
461
reg        usb_ep1_cfg_int_rx_q;
462
 
463
always @ (posedge clk_i or posedge rst_i)
464
if (rst_i)
465
    usb_ep1_cfg_int_rx_q <= 1'd`USB_EP1_CFG_INT_RX_DEFAULT;
466
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_CFG))
467
    usb_ep1_cfg_int_rx_q <= cfg_wdata_i[`USB_EP1_CFG_INT_RX_R];
468
 
469
wire        usb_ep1_cfg_int_rx_out_w = usb_ep1_cfg_int_rx_q;
470
 
471
 
472
// usb_ep1_cfg_int_tx [internal]
473
reg        usb_ep1_cfg_int_tx_q;
474
 
475
always @ (posedge clk_i or posedge rst_i)
476
if (rst_i)
477
    usb_ep1_cfg_int_tx_q <= 1'd`USB_EP1_CFG_INT_TX_DEFAULT;
478
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_CFG))
479
    usb_ep1_cfg_int_tx_q <= cfg_wdata_i[`USB_EP1_CFG_INT_TX_R];
480
 
481
wire        usb_ep1_cfg_int_tx_out_w = usb_ep1_cfg_int_tx_q;
482
 
483
 
484
// usb_ep1_cfg_stall_ep [clearable]
485
reg        usb_ep1_cfg_stall_ep_q;
486
 
487
wire usb_ep1_cfg_stall_ep_ack_in_w;
488
 
489
always @ (posedge clk_i or posedge rst_i)
490
if (rst_i)
491
    usb_ep1_cfg_stall_ep_q <= 1'b0;
492
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_CFG))
493
    usb_ep1_cfg_stall_ep_q <= cfg_wdata_i[`USB_EP1_CFG_STALL_EP_R];
494
else if (usb_ep1_cfg_stall_ep_ack_in_w)
495
    usb_ep1_cfg_stall_ep_q <= 1'b0;
496
 
497
wire        usb_ep1_cfg_stall_ep_out_w = usb_ep1_cfg_stall_ep_q;
498
 
499
 
500
// usb_ep1_cfg_iso [internal]
501
reg        usb_ep1_cfg_iso_q;
502
 
503
always @ (posedge clk_i or posedge rst_i)
504
if (rst_i)
505
    usb_ep1_cfg_iso_q <= 1'd`USB_EP1_CFG_ISO_DEFAULT;
506
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_CFG))
507
    usb_ep1_cfg_iso_q <= cfg_wdata_i[`USB_EP1_CFG_ISO_R];
508
 
509
wire        usb_ep1_cfg_iso_out_w = usb_ep1_cfg_iso_q;
510
 
511
 
512
//-----------------------------------------------------------------
513
// Register usb_ep1_tx_ctrl
514
//-----------------------------------------------------------------
515
reg usb_ep1_tx_ctrl_wr_q;
516
 
517
always @ (posedge clk_i or posedge rst_i)
518
if (rst_i)
519
    usb_ep1_tx_ctrl_wr_q <= 1'b0;
520
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_TX_CTRL))
521
    usb_ep1_tx_ctrl_wr_q <= 1'b1;
522
else
523
    usb_ep1_tx_ctrl_wr_q <= 1'b0;
524
 
525
// usb_ep1_tx_ctrl_tx_flush [auto_clr]
526
reg        usb_ep1_tx_ctrl_tx_flush_q;
527
 
528
always @ (posedge clk_i or posedge rst_i)
529
if (rst_i)
530
    usb_ep1_tx_ctrl_tx_flush_q <= 1'd`USB_EP1_TX_CTRL_TX_FLUSH_DEFAULT;
531
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_TX_CTRL))
532
    usb_ep1_tx_ctrl_tx_flush_q <= cfg_wdata_i[`USB_EP1_TX_CTRL_TX_FLUSH_R];
533
else
534
    usb_ep1_tx_ctrl_tx_flush_q <= 1'd`USB_EP1_TX_CTRL_TX_FLUSH_DEFAULT;
535
 
536
wire        usb_ep1_tx_ctrl_tx_flush_out_w = usb_ep1_tx_ctrl_tx_flush_q;
537
 
538
 
539
// usb_ep1_tx_ctrl_tx_start [auto_clr]
540
reg        usb_ep1_tx_ctrl_tx_start_q;
541
 
542
always @ (posedge clk_i or posedge rst_i)
543
if (rst_i)
544
    usb_ep1_tx_ctrl_tx_start_q <= 1'd`USB_EP1_TX_CTRL_TX_START_DEFAULT;
545
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_TX_CTRL))
546
    usb_ep1_tx_ctrl_tx_start_q <= cfg_wdata_i[`USB_EP1_TX_CTRL_TX_START_R];
547
else
548
    usb_ep1_tx_ctrl_tx_start_q <= 1'd`USB_EP1_TX_CTRL_TX_START_DEFAULT;
549
 
550
wire        usb_ep1_tx_ctrl_tx_start_out_w = usb_ep1_tx_ctrl_tx_start_q;
551
 
552
 
553
// usb_ep1_tx_ctrl_tx_len [internal]
554
reg [10:0]  usb_ep1_tx_ctrl_tx_len_q;
555
 
556
always @ (posedge clk_i or posedge rst_i)
557
if (rst_i)
558
    usb_ep1_tx_ctrl_tx_len_q <= 11'd`USB_EP1_TX_CTRL_TX_LEN_DEFAULT;
559
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_TX_CTRL))
560
    usb_ep1_tx_ctrl_tx_len_q <= cfg_wdata_i[`USB_EP1_TX_CTRL_TX_LEN_R];
561
 
562
wire [10:0]  usb_ep1_tx_ctrl_tx_len_out_w = usb_ep1_tx_ctrl_tx_len_q;
563
 
564
 
565
//-----------------------------------------------------------------
566
// Register usb_ep1_rx_ctrl
567
//-----------------------------------------------------------------
568
reg usb_ep1_rx_ctrl_wr_q;
569
 
570
always @ (posedge clk_i or posedge rst_i)
571
if (rst_i)
572
    usb_ep1_rx_ctrl_wr_q <= 1'b0;
573
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_RX_CTRL))
574
    usb_ep1_rx_ctrl_wr_q <= 1'b1;
575
else
576
    usb_ep1_rx_ctrl_wr_q <= 1'b0;
577
 
578
// usb_ep1_rx_ctrl_rx_flush [auto_clr]
579
reg        usb_ep1_rx_ctrl_rx_flush_q;
580
 
581
always @ (posedge clk_i or posedge rst_i)
582
if (rst_i)
583
    usb_ep1_rx_ctrl_rx_flush_q <= 1'd`USB_EP1_RX_CTRL_RX_FLUSH_DEFAULT;
584
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_RX_CTRL))
585
    usb_ep1_rx_ctrl_rx_flush_q <= cfg_wdata_i[`USB_EP1_RX_CTRL_RX_FLUSH_R];
586
else
587
    usb_ep1_rx_ctrl_rx_flush_q <= 1'd`USB_EP1_RX_CTRL_RX_FLUSH_DEFAULT;
588
 
589
wire        usb_ep1_rx_ctrl_rx_flush_out_w = usb_ep1_rx_ctrl_rx_flush_q;
590
 
591
 
592
// usb_ep1_rx_ctrl_rx_accept [auto_clr]
593
reg        usb_ep1_rx_ctrl_rx_accept_q;
594
 
595
always @ (posedge clk_i or posedge rst_i)
596
if (rst_i)
597
    usb_ep1_rx_ctrl_rx_accept_q <= 1'd`USB_EP1_RX_CTRL_RX_ACCEPT_DEFAULT;
598
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_RX_CTRL))
599
    usb_ep1_rx_ctrl_rx_accept_q <= cfg_wdata_i[`USB_EP1_RX_CTRL_RX_ACCEPT_R];
600
else
601
    usb_ep1_rx_ctrl_rx_accept_q <= 1'd`USB_EP1_RX_CTRL_RX_ACCEPT_DEFAULT;
602
 
603
wire        usb_ep1_rx_ctrl_rx_accept_out_w = usb_ep1_rx_ctrl_rx_accept_q;
604
 
605
 
606
//-----------------------------------------------------------------
607
// Register usb_ep1_sts
608
//-----------------------------------------------------------------
609
reg usb_ep1_sts_wr_q;
610
 
611
always @ (posedge clk_i or posedge rst_i)
612
if (rst_i)
613
    usb_ep1_sts_wr_q <= 1'b0;
614
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_STS))
615
    usb_ep1_sts_wr_q <= 1'b1;
616
else
617
    usb_ep1_sts_wr_q <= 1'b0;
618
 
619
 
620
 
621
 
622
 
623
 
624
 
625
//-----------------------------------------------------------------
626
// Register usb_ep1_data
627
//-----------------------------------------------------------------
628
reg usb_ep1_data_wr_q;
629
 
630
always @ (posedge clk_i or posedge rst_i)
631
if (rst_i)
632
    usb_ep1_data_wr_q <= 1'b0;
633
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP1_DATA))
634
    usb_ep1_data_wr_q <= 1'b1;
635
else
636
    usb_ep1_data_wr_q <= 1'b0;
637
 
638
// usb_ep1_data_data [external]
639
wire [7:0]  usb_ep1_data_data_out_w = wr_data_q[`USB_EP1_DATA_DATA_R];
640
 
641
 
642
//-----------------------------------------------------------------
643
// Register usb_ep2_cfg
644
//-----------------------------------------------------------------
645
reg usb_ep2_cfg_wr_q;
646
 
647
always @ (posedge clk_i or posedge rst_i)
648
if (rst_i)
649
    usb_ep2_cfg_wr_q <= 1'b0;
650
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_CFG))
651
    usb_ep2_cfg_wr_q <= 1'b1;
652
else
653
    usb_ep2_cfg_wr_q <= 1'b0;
654
 
655
// usb_ep2_cfg_int_rx [internal]
656
reg        usb_ep2_cfg_int_rx_q;
657
 
658
always @ (posedge clk_i or posedge rst_i)
659
if (rst_i)
660
    usb_ep2_cfg_int_rx_q <= 1'd`USB_EP2_CFG_INT_RX_DEFAULT;
661
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_CFG))
662
    usb_ep2_cfg_int_rx_q <= cfg_wdata_i[`USB_EP2_CFG_INT_RX_R];
663
 
664
wire        usb_ep2_cfg_int_rx_out_w = usb_ep2_cfg_int_rx_q;
665
 
666
 
667
// usb_ep2_cfg_int_tx [internal]
668
reg        usb_ep2_cfg_int_tx_q;
669
 
670
always @ (posedge clk_i or posedge rst_i)
671
if (rst_i)
672
    usb_ep2_cfg_int_tx_q <= 1'd`USB_EP2_CFG_INT_TX_DEFAULT;
673
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_CFG))
674
    usb_ep2_cfg_int_tx_q <= cfg_wdata_i[`USB_EP2_CFG_INT_TX_R];
675
 
676
wire        usb_ep2_cfg_int_tx_out_w = usb_ep2_cfg_int_tx_q;
677
 
678
 
679
// usb_ep2_cfg_stall_ep [clearable]
680
reg        usb_ep2_cfg_stall_ep_q;
681
 
682
wire usb_ep2_cfg_stall_ep_ack_in_w;
683
 
684
always @ (posedge clk_i or posedge rst_i)
685
if (rst_i)
686
    usb_ep2_cfg_stall_ep_q <= 1'b0;
687
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_CFG))
688
    usb_ep2_cfg_stall_ep_q <= cfg_wdata_i[`USB_EP2_CFG_STALL_EP_R];
689
else if (usb_ep2_cfg_stall_ep_ack_in_w)
690
    usb_ep2_cfg_stall_ep_q <= 1'b0;
691
 
692
wire        usb_ep2_cfg_stall_ep_out_w = usb_ep2_cfg_stall_ep_q;
693
 
694
 
695
// usb_ep2_cfg_iso [internal]
696
reg        usb_ep2_cfg_iso_q;
697
 
698
always @ (posedge clk_i or posedge rst_i)
699
if (rst_i)
700
    usb_ep2_cfg_iso_q <= 1'd`USB_EP2_CFG_ISO_DEFAULT;
701
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_CFG))
702
    usb_ep2_cfg_iso_q <= cfg_wdata_i[`USB_EP2_CFG_ISO_R];
703
 
704
wire        usb_ep2_cfg_iso_out_w = usb_ep2_cfg_iso_q;
705
 
706
 
707
//-----------------------------------------------------------------
708
// Register usb_ep2_tx_ctrl
709
//-----------------------------------------------------------------
710
reg usb_ep2_tx_ctrl_wr_q;
711
 
712
always @ (posedge clk_i or posedge rst_i)
713
if (rst_i)
714
    usb_ep2_tx_ctrl_wr_q <= 1'b0;
715
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_TX_CTRL))
716
    usb_ep2_tx_ctrl_wr_q <= 1'b1;
717
else
718
    usb_ep2_tx_ctrl_wr_q <= 1'b0;
719
 
720
// usb_ep2_tx_ctrl_tx_flush [auto_clr]
721
reg        usb_ep2_tx_ctrl_tx_flush_q;
722
 
723
always @ (posedge clk_i or posedge rst_i)
724
if (rst_i)
725
    usb_ep2_tx_ctrl_tx_flush_q <= 1'd`USB_EP2_TX_CTRL_TX_FLUSH_DEFAULT;
726
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_TX_CTRL))
727
    usb_ep2_tx_ctrl_tx_flush_q <= cfg_wdata_i[`USB_EP2_TX_CTRL_TX_FLUSH_R];
728
else
729
    usb_ep2_tx_ctrl_tx_flush_q <= 1'd`USB_EP2_TX_CTRL_TX_FLUSH_DEFAULT;
730
 
731
wire        usb_ep2_tx_ctrl_tx_flush_out_w = usb_ep2_tx_ctrl_tx_flush_q;
732
 
733
 
734
// usb_ep2_tx_ctrl_tx_start [auto_clr]
735
reg        usb_ep2_tx_ctrl_tx_start_q;
736
 
737
always @ (posedge clk_i or posedge rst_i)
738
if (rst_i)
739
    usb_ep2_tx_ctrl_tx_start_q <= 1'd`USB_EP2_TX_CTRL_TX_START_DEFAULT;
740
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_TX_CTRL))
741
    usb_ep2_tx_ctrl_tx_start_q <= cfg_wdata_i[`USB_EP2_TX_CTRL_TX_START_R];
742
else
743
    usb_ep2_tx_ctrl_tx_start_q <= 1'd`USB_EP2_TX_CTRL_TX_START_DEFAULT;
744
 
745
wire        usb_ep2_tx_ctrl_tx_start_out_w = usb_ep2_tx_ctrl_tx_start_q;
746
 
747
 
748
// usb_ep2_tx_ctrl_tx_len [internal]
749
reg [10:0]  usb_ep2_tx_ctrl_tx_len_q;
750
 
751
always @ (posedge clk_i or posedge rst_i)
752
if (rst_i)
753
    usb_ep2_tx_ctrl_tx_len_q <= 11'd`USB_EP2_TX_CTRL_TX_LEN_DEFAULT;
754
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_TX_CTRL))
755
    usb_ep2_tx_ctrl_tx_len_q <= cfg_wdata_i[`USB_EP2_TX_CTRL_TX_LEN_R];
756
 
757
wire [10:0]  usb_ep2_tx_ctrl_tx_len_out_w = usb_ep2_tx_ctrl_tx_len_q;
758
 
759
 
760
//-----------------------------------------------------------------
761
// Register usb_ep2_rx_ctrl
762
//-----------------------------------------------------------------
763
reg usb_ep2_rx_ctrl_wr_q;
764
 
765
always @ (posedge clk_i or posedge rst_i)
766
if (rst_i)
767
    usb_ep2_rx_ctrl_wr_q <= 1'b0;
768
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_RX_CTRL))
769
    usb_ep2_rx_ctrl_wr_q <= 1'b1;
770
else
771
    usb_ep2_rx_ctrl_wr_q <= 1'b0;
772
 
773
// usb_ep2_rx_ctrl_rx_flush [auto_clr]
774
reg        usb_ep2_rx_ctrl_rx_flush_q;
775
 
776
always @ (posedge clk_i or posedge rst_i)
777
if (rst_i)
778
    usb_ep2_rx_ctrl_rx_flush_q <= 1'd`USB_EP2_RX_CTRL_RX_FLUSH_DEFAULT;
779
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_RX_CTRL))
780
    usb_ep2_rx_ctrl_rx_flush_q <= cfg_wdata_i[`USB_EP2_RX_CTRL_RX_FLUSH_R];
781
else
782
    usb_ep2_rx_ctrl_rx_flush_q <= 1'd`USB_EP2_RX_CTRL_RX_FLUSH_DEFAULT;
783
 
784
wire        usb_ep2_rx_ctrl_rx_flush_out_w = usb_ep2_rx_ctrl_rx_flush_q;
785
 
786
 
787
// usb_ep2_rx_ctrl_rx_accept [auto_clr]
788
reg        usb_ep2_rx_ctrl_rx_accept_q;
789
 
790
always @ (posedge clk_i or posedge rst_i)
791
if (rst_i)
792
    usb_ep2_rx_ctrl_rx_accept_q <= 1'd`USB_EP2_RX_CTRL_RX_ACCEPT_DEFAULT;
793
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_RX_CTRL))
794
    usb_ep2_rx_ctrl_rx_accept_q <= cfg_wdata_i[`USB_EP2_RX_CTRL_RX_ACCEPT_R];
795
else
796
    usb_ep2_rx_ctrl_rx_accept_q <= 1'd`USB_EP2_RX_CTRL_RX_ACCEPT_DEFAULT;
797
 
798
wire        usb_ep2_rx_ctrl_rx_accept_out_w = usb_ep2_rx_ctrl_rx_accept_q;
799
 
800
 
801
//-----------------------------------------------------------------
802
// Register usb_ep2_sts
803
//-----------------------------------------------------------------
804
reg usb_ep2_sts_wr_q;
805
 
806
always @ (posedge clk_i or posedge rst_i)
807
if (rst_i)
808
    usb_ep2_sts_wr_q <= 1'b0;
809
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_STS))
810
    usb_ep2_sts_wr_q <= 1'b1;
811
else
812
    usb_ep2_sts_wr_q <= 1'b0;
813
 
814
 
815
 
816
 
817
 
818
 
819
 
820
//-----------------------------------------------------------------
821
// Register usb_ep2_data
822
//-----------------------------------------------------------------
823
reg usb_ep2_data_wr_q;
824
 
825
always @ (posedge clk_i or posedge rst_i)
826
if (rst_i)
827
    usb_ep2_data_wr_q <= 1'b0;
828
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP2_DATA))
829
    usb_ep2_data_wr_q <= 1'b1;
830
else
831
    usb_ep2_data_wr_q <= 1'b0;
832
 
833
// usb_ep2_data_data [external]
834
wire [7:0]  usb_ep2_data_data_out_w = wr_data_q[`USB_EP2_DATA_DATA_R];
835
 
836
 
837
//-----------------------------------------------------------------
838
// Register usb_ep3_cfg
839
//-----------------------------------------------------------------
840
reg usb_ep3_cfg_wr_q;
841
 
842
always @ (posedge clk_i or posedge rst_i)
843
if (rst_i)
844
    usb_ep3_cfg_wr_q <= 1'b0;
845
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_CFG))
846
    usb_ep3_cfg_wr_q <= 1'b1;
847
else
848
    usb_ep3_cfg_wr_q <= 1'b0;
849
 
850
// usb_ep3_cfg_int_rx [internal]
851
reg        usb_ep3_cfg_int_rx_q;
852
 
853
always @ (posedge clk_i or posedge rst_i)
854
if (rst_i)
855
    usb_ep3_cfg_int_rx_q <= 1'd`USB_EP3_CFG_INT_RX_DEFAULT;
856
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_CFG))
857
    usb_ep3_cfg_int_rx_q <= cfg_wdata_i[`USB_EP3_CFG_INT_RX_R];
858
 
859
wire        usb_ep3_cfg_int_rx_out_w = usb_ep3_cfg_int_rx_q;
860
 
861
 
862
// usb_ep3_cfg_int_tx [internal]
863
reg        usb_ep3_cfg_int_tx_q;
864
 
865
always @ (posedge clk_i or posedge rst_i)
866
if (rst_i)
867
    usb_ep3_cfg_int_tx_q <= 1'd`USB_EP3_CFG_INT_TX_DEFAULT;
868
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_CFG))
869
    usb_ep3_cfg_int_tx_q <= cfg_wdata_i[`USB_EP3_CFG_INT_TX_R];
870
 
871
wire        usb_ep3_cfg_int_tx_out_w = usb_ep3_cfg_int_tx_q;
872
 
873
 
874
// usb_ep3_cfg_stall_ep [clearable]
875
reg        usb_ep3_cfg_stall_ep_q;
876
 
877
wire usb_ep3_cfg_stall_ep_ack_in_w;
878
 
879
always @ (posedge clk_i or posedge rst_i)
880
if (rst_i)
881
    usb_ep3_cfg_stall_ep_q <= 1'b0;
882
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_CFG))
883
    usb_ep3_cfg_stall_ep_q <= cfg_wdata_i[`USB_EP3_CFG_STALL_EP_R];
884
else if (usb_ep3_cfg_stall_ep_ack_in_w)
885
    usb_ep3_cfg_stall_ep_q <= 1'b0;
886
 
887
wire        usb_ep3_cfg_stall_ep_out_w = usb_ep3_cfg_stall_ep_q;
888
 
889
 
890
// usb_ep3_cfg_iso [internal]
891
reg        usb_ep3_cfg_iso_q;
892
 
893
always @ (posedge clk_i or posedge rst_i)
894
if (rst_i)
895
    usb_ep3_cfg_iso_q <= 1'd`USB_EP3_CFG_ISO_DEFAULT;
896
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_CFG))
897
    usb_ep3_cfg_iso_q <= cfg_wdata_i[`USB_EP3_CFG_ISO_R];
898
 
899
wire        usb_ep3_cfg_iso_out_w = usb_ep3_cfg_iso_q;
900
 
901
 
902
//-----------------------------------------------------------------
903
// Register usb_ep3_tx_ctrl
904
//-----------------------------------------------------------------
905
reg usb_ep3_tx_ctrl_wr_q;
906
 
907
always @ (posedge clk_i or posedge rst_i)
908
if (rst_i)
909
    usb_ep3_tx_ctrl_wr_q <= 1'b0;
910
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_TX_CTRL))
911
    usb_ep3_tx_ctrl_wr_q <= 1'b1;
912
else
913
    usb_ep3_tx_ctrl_wr_q <= 1'b0;
914
 
915
// usb_ep3_tx_ctrl_tx_flush [auto_clr]
916
reg        usb_ep3_tx_ctrl_tx_flush_q;
917
 
918
always @ (posedge clk_i or posedge rst_i)
919
if (rst_i)
920
    usb_ep3_tx_ctrl_tx_flush_q <= 1'd`USB_EP3_TX_CTRL_TX_FLUSH_DEFAULT;
921
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_TX_CTRL))
922
    usb_ep3_tx_ctrl_tx_flush_q <= cfg_wdata_i[`USB_EP3_TX_CTRL_TX_FLUSH_R];
923
else
924
    usb_ep3_tx_ctrl_tx_flush_q <= 1'd`USB_EP3_TX_CTRL_TX_FLUSH_DEFAULT;
925
 
926
wire        usb_ep3_tx_ctrl_tx_flush_out_w = usb_ep3_tx_ctrl_tx_flush_q;
927
 
928
 
929
// usb_ep3_tx_ctrl_tx_start [auto_clr]
930
reg        usb_ep3_tx_ctrl_tx_start_q;
931
 
932
always @ (posedge clk_i or posedge rst_i)
933
if (rst_i)
934
    usb_ep3_tx_ctrl_tx_start_q <= 1'd`USB_EP3_TX_CTRL_TX_START_DEFAULT;
935
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_TX_CTRL))
936
    usb_ep3_tx_ctrl_tx_start_q <= cfg_wdata_i[`USB_EP3_TX_CTRL_TX_START_R];
937
else
938
    usb_ep3_tx_ctrl_tx_start_q <= 1'd`USB_EP3_TX_CTRL_TX_START_DEFAULT;
939
 
940
wire        usb_ep3_tx_ctrl_tx_start_out_w = usb_ep3_tx_ctrl_tx_start_q;
941
 
942
 
943
// usb_ep3_tx_ctrl_tx_len [internal]
944
reg [10:0]  usb_ep3_tx_ctrl_tx_len_q;
945
 
946
always @ (posedge clk_i or posedge rst_i)
947
if (rst_i)
948
    usb_ep3_tx_ctrl_tx_len_q <= 11'd`USB_EP3_TX_CTRL_TX_LEN_DEFAULT;
949
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_TX_CTRL))
950
    usb_ep3_tx_ctrl_tx_len_q <= cfg_wdata_i[`USB_EP3_TX_CTRL_TX_LEN_R];
951
 
952
wire [10:0]  usb_ep3_tx_ctrl_tx_len_out_w = usb_ep3_tx_ctrl_tx_len_q;
953
 
954
 
955
//-----------------------------------------------------------------
956
// Register usb_ep3_rx_ctrl
957
//-----------------------------------------------------------------
958
reg usb_ep3_rx_ctrl_wr_q;
959
 
960
always @ (posedge clk_i or posedge rst_i)
961
if (rst_i)
962
    usb_ep3_rx_ctrl_wr_q <= 1'b0;
963
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_RX_CTRL))
964
    usb_ep3_rx_ctrl_wr_q <= 1'b1;
965
else
966
    usb_ep3_rx_ctrl_wr_q <= 1'b0;
967
 
968
// usb_ep3_rx_ctrl_rx_flush [auto_clr]
969
reg        usb_ep3_rx_ctrl_rx_flush_q;
970
 
971
always @ (posedge clk_i or posedge rst_i)
972
if (rst_i)
973
    usb_ep3_rx_ctrl_rx_flush_q <= 1'd`USB_EP3_RX_CTRL_RX_FLUSH_DEFAULT;
974
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_RX_CTRL))
975
    usb_ep3_rx_ctrl_rx_flush_q <= cfg_wdata_i[`USB_EP3_RX_CTRL_RX_FLUSH_R];
976
else
977
    usb_ep3_rx_ctrl_rx_flush_q <= 1'd`USB_EP3_RX_CTRL_RX_FLUSH_DEFAULT;
978
 
979
wire        usb_ep3_rx_ctrl_rx_flush_out_w = usb_ep3_rx_ctrl_rx_flush_q;
980
 
981
 
982
// usb_ep3_rx_ctrl_rx_accept [auto_clr]
983
reg        usb_ep3_rx_ctrl_rx_accept_q;
984
 
985
always @ (posedge clk_i or posedge rst_i)
986
if (rst_i)
987
    usb_ep3_rx_ctrl_rx_accept_q <= 1'd`USB_EP3_RX_CTRL_RX_ACCEPT_DEFAULT;
988
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_RX_CTRL))
989
    usb_ep3_rx_ctrl_rx_accept_q <= cfg_wdata_i[`USB_EP3_RX_CTRL_RX_ACCEPT_R];
990
else
991
    usb_ep3_rx_ctrl_rx_accept_q <= 1'd`USB_EP3_RX_CTRL_RX_ACCEPT_DEFAULT;
992
 
993
wire        usb_ep3_rx_ctrl_rx_accept_out_w = usb_ep3_rx_ctrl_rx_accept_q;
994
 
995
 
996
//-----------------------------------------------------------------
997
// Register usb_ep3_sts
998
//-----------------------------------------------------------------
999
reg usb_ep3_sts_wr_q;
1000
 
1001
always @ (posedge clk_i or posedge rst_i)
1002
if (rst_i)
1003
    usb_ep3_sts_wr_q <= 1'b0;
1004
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_STS))
1005
    usb_ep3_sts_wr_q <= 1'b1;
1006
else
1007
    usb_ep3_sts_wr_q <= 1'b0;
1008
 
1009
 
1010
 
1011
 
1012
 
1013
 
1014
 
1015
//-----------------------------------------------------------------
1016
// Register usb_ep3_data
1017
//-----------------------------------------------------------------
1018
reg usb_ep3_data_wr_q;
1019
 
1020
always @ (posedge clk_i or posedge rst_i)
1021
if (rst_i)
1022
    usb_ep3_data_wr_q <= 1'b0;
1023
else if (write_en_w && (cfg_awaddr_i[7:0] == `USB_EP3_DATA))
1024
    usb_ep3_data_wr_q <= 1'b1;
1025
else
1026
    usb_ep3_data_wr_q <= 1'b0;
1027
 
1028
// usb_ep3_data_data [external]
1029
wire [7:0]  usb_ep3_data_data_out_w = wr_data_q[`USB_EP3_DATA_DATA_R];
1030
 
1031
 
1032
wire        usb_func_stat_rst_in_w;
1033
wire [1:0]  usb_func_stat_linestate_in_w;
1034
wire [10:0]  usb_func_stat_frame_in_w;
1035
wire        usb_ep0_sts_tx_err_in_w;
1036
wire        usb_ep0_sts_tx_busy_in_w;
1037
wire        usb_ep0_sts_rx_err_in_w;
1038
wire        usb_ep0_sts_rx_setup_in_w;
1039
wire        usb_ep0_sts_rx_ready_in_w;
1040
wire [10:0]  usb_ep0_sts_rx_count_in_w;
1041
wire [7:0]  usb_ep0_data_data_in_w;
1042
wire        usb_ep1_sts_tx_err_in_w;
1043
wire        usb_ep1_sts_tx_busy_in_w;
1044
wire        usb_ep1_sts_rx_err_in_w;
1045
wire        usb_ep1_sts_rx_setup_in_w;
1046
wire        usb_ep1_sts_rx_ready_in_w;
1047
wire [10:0]  usb_ep1_sts_rx_count_in_w;
1048
wire [7:0]  usb_ep1_data_data_in_w;
1049
wire        usb_ep2_sts_tx_err_in_w;
1050
wire        usb_ep2_sts_tx_busy_in_w;
1051
wire        usb_ep2_sts_rx_err_in_w;
1052
wire        usb_ep2_sts_rx_setup_in_w;
1053
wire        usb_ep2_sts_rx_ready_in_w;
1054
wire [10:0]  usb_ep2_sts_rx_count_in_w;
1055
wire [7:0]  usb_ep2_data_data_in_w;
1056
wire        usb_ep3_sts_tx_err_in_w;
1057
wire        usb_ep3_sts_tx_busy_in_w;
1058
wire        usb_ep3_sts_rx_err_in_w;
1059
wire        usb_ep3_sts_rx_setup_in_w;
1060
wire        usb_ep3_sts_rx_ready_in_w;
1061
wire [10:0]  usb_ep3_sts_rx_count_in_w;
1062
wire [7:0]  usb_ep3_data_data_in_w;
1063
 
1064
 
1065
//-----------------------------------------------------------------
1066
// Read mux
1067
//-----------------------------------------------------------------
1068
reg [31:0] data_r;
1069
 
1070
always @ *
1071
begin
1072
    data_r = 32'b0;
1073
 
1074
    case (cfg_araddr_i[7:0])
1075
 
1076
    `USB_FUNC_CTRL:
1077
    begin
1078
        data_r[`USB_FUNC_CTRL_HS_CHIRP_EN_R] = usb_func_ctrl_hs_chirp_en_q;
1079
        data_r[`USB_FUNC_CTRL_PHY_DMPULLDOWN_R] = usb_func_ctrl_phy_dmpulldown_q;
1080
        data_r[`USB_FUNC_CTRL_PHY_DPPULLDOWN_R] = usb_func_ctrl_phy_dppulldown_q;
1081
        data_r[`USB_FUNC_CTRL_PHY_TERMSELECT_R] = usb_func_ctrl_phy_termselect_q;
1082
        data_r[`USB_FUNC_CTRL_PHY_XCVRSELECT_R] = usb_func_ctrl_phy_xcvrselect_q;
1083
        data_r[`USB_FUNC_CTRL_PHY_OPMODE_R] = usb_func_ctrl_phy_opmode_q;
1084
        data_r[`USB_FUNC_CTRL_INT_EN_SOF_R] = usb_func_ctrl_int_en_sof_q;
1085
    end
1086
    `USB_FUNC_STAT:
1087
    begin
1088
        data_r[`USB_FUNC_STAT_RST_R] = usb_func_stat_rst_in_w;
1089
        data_r[`USB_FUNC_STAT_LINESTATE_R] = usb_func_stat_linestate_in_w;
1090
        data_r[`USB_FUNC_STAT_FRAME_R] = usb_func_stat_frame_in_w;
1091
    end
1092
    `USB_FUNC_ADDR:
1093
    begin
1094
        data_r[`USB_FUNC_ADDR_DEV_ADDR_R] = usb_func_addr_dev_addr_q;
1095
    end
1096
    `USB_EP0_CFG:
1097
    begin
1098
        data_r[`USB_EP0_CFG_INT_RX_R] = usb_ep0_cfg_int_rx_q;
1099
        data_r[`USB_EP0_CFG_INT_TX_R] = usb_ep0_cfg_int_tx_q;
1100
        data_r[`USB_EP0_CFG_ISO_R] = usb_ep0_cfg_iso_q;
1101
    end
1102
    `USB_EP0_TX_CTRL:
1103
    begin
1104
        data_r[`USB_EP0_TX_CTRL_TX_LEN_R] = usb_ep0_tx_ctrl_tx_len_q;
1105
    end
1106
    `USB_EP0_STS:
1107
    begin
1108
        data_r[`USB_EP0_STS_TX_ERR_R] = usb_ep0_sts_tx_err_in_w;
1109
        data_r[`USB_EP0_STS_TX_BUSY_R] = usb_ep0_sts_tx_busy_in_w;
1110
        data_r[`USB_EP0_STS_RX_ERR_R] = usb_ep0_sts_rx_err_in_w;
1111
        data_r[`USB_EP0_STS_RX_SETUP_R] = usb_ep0_sts_rx_setup_in_w;
1112
        data_r[`USB_EP0_STS_RX_READY_R] = usb_ep0_sts_rx_ready_in_w;
1113
        data_r[`USB_EP0_STS_RX_COUNT_R] = usb_ep0_sts_rx_count_in_w;
1114
    end
1115
    `USB_EP0_DATA:
1116
    begin
1117
        data_r[`USB_EP0_DATA_DATA_R] = usb_ep0_data_data_in_w;
1118
    end
1119
    `USB_EP1_CFG:
1120
    begin
1121
        data_r[`USB_EP1_CFG_INT_RX_R] = usb_ep1_cfg_int_rx_q;
1122
        data_r[`USB_EP1_CFG_INT_TX_R] = usb_ep1_cfg_int_tx_q;
1123
        data_r[`USB_EP1_CFG_ISO_R] = usb_ep1_cfg_iso_q;
1124
    end
1125
    `USB_EP1_TX_CTRL:
1126
    begin
1127
        data_r[`USB_EP1_TX_CTRL_TX_LEN_R] = usb_ep1_tx_ctrl_tx_len_q;
1128
    end
1129
    `USB_EP1_STS:
1130
    begin
1131
        data_r[`USB_EP1_STS_TX_ERR_R] = usb_ep1_sts_tx_err_in_w;
1132
        data_r[`USB_EP1_STS_TX_BUSY_R] = usb_ep1_sts_tx_busy_in_w;
1133
        data_r[`USB_EP1_STS_RX_ERR_R] = usb_ep1_sts_rx_err_in_w;
1134
        data_r[`USB_EP1_STS_RX_SETUP_R] = usb_ep1_sts_rx_setup_in_w;
1135
        data_r[`USB_EP1_STS_RX_READY_R] = usb_ep1_sts_rx_ready_in_w;
1136
        data_r[`USB_EP1_STS_RX_COUNT_R] = usb_ep1_sts_rx_count_in_w;
1137
    end
1138
    `USB_EP1_DATA:
1139
    begin
1140
        data_r[`USB_EP1_DATA_DATA_R] = usb_ep1_data_data_in_w;
1141
    end
1142
    `USB_EP2_CFG:
1143
    begin
1144
        data_r[`USB_EP2_CFG_INT_RX_R] = usb_ep2_cfg_int_rx_q;
1145
        data_r[`USB_EP2_CFG_INT_TX_R] = usb_ep2_cfg_int_tx_q;
1146
        data_r[`USB_EP2_CFG_ISO_R] = usb_ep2_cfg_iso_q;
1147
    end
1148
    `USB_EP2_TX_CTRL:
1149
    begin
1150
        data_r[`USB_EP2_TX_CTRL_TX_LEN_R] = usb_ep2_tx_ctrl_tx_len_q;
1151
    end
1152
    `USB_EP2_STS:
1153
    begin
1154
        data_r[`USB_EP2_STS_TX_ERR_R] = usb_ep2_sts_tx_err_in_w;
1155
        data_r[`USB_EP2_STS_TX_BUSY_R] = usb_ep2_sts_tx_busy_in_w;
1156
        data_r[`USB_EP2_STS_RX_ERR_R] = usb_ep2_sts_rx_err_in_w;
1157
        data_r[`USB_EP2_STS_RX_SETUP_R] = usb_ep2_sts_rx_setup_in_w;
1158
        data_r[`USB_EP2_STS_RX_READY_R] = usb_ep2_sts_rx_ready_in_w;
1159
        data_r[`USB_EP2_STS_RX_COUNT_R] = usb_ep2_sts_rx_count_in_w;
1160
    end
1161
    `USB_EP2_DATA:
1162
    begin
1163
        data_r[`USB_EP2_DATA_DATA_R] = usb_ep2_data_data_in_w;
1164
    end
1165
    `USB_EP3_CFG:
1166
    begin
1167
        data_r[`USB_EP3_CFG_INT_RX_R] = usb_ep3_cfg_int_rx_q;
1168
        data_r[`USB_EP3_CFG_INT_TX_R] = usb_ep3_cfg_int_tx_q;
1169
        data_r[`USB_EP3_CFG_ISO_R] = usb_ep3_cfg_iso_q;
1170
    end
1171
    `USB_EP3_TX_CTRL:
1172
    begin
1173
        data_r[`USB_EP3_TX_CTRL_TX_LEN_R] = usb_ep3_tx_ctrl_tx_len_q;
1174
    end
1175
    `USB_EP3_STS:
1176
    begin
1177
        data_r[`USB_EP3_STS_TX_ERR_R] = usb_ep3_sts_tx_err_in_w;
1178
        data_r[`USB_EP3_STS_TX_BUSY_R] = usb_ep3_sts_tx_busy_in_w;
1179
        data_r[`USB_EP3_STS_RX_ERR_R] = usb_ep3_sts_rx_err_in_w;
1180
        data_r[`USB_EP3_STS_RX_SETUP_R] = usb_ep3_sts_rx_setup_in_w;
1181
        data_r[`USB_EP3_STS_RX_READY_R] = usb_ep3_sts_rx_ready_in_w;
1182
        data_r[`USB_EP3_STS_RX_COUNT_R] = usb_ep3_sts_rx_count_in_w;
1183
    end
1184
    `USB_EP3_DATA:
1185
    begin
1186
        data_r[`USB_EP3_DATA_DATA_R] = usb_ep3_data_data_in_w;
1187
    end
1188
    default :
1189
        data_r = 32'b0;
1190
    endcase
1191
end
1192
 
1193
//-----------------------------------------------------------------
1194
// RVALID
1195
//-----------------------------------------------------------------
1196
reg rvalid_q;
1197
 
1198
always @ (posedge clk_i or posedge rst_i)
1199
if (rst_i)
1200
    rvalid_q <= 1'b0;
1201
else if (read_en_w)
1202
    rvalid_q <= 1'b1;
1203
else if (cfg_rready_i)
1204
    rvalid_q <= 1'b0;
1205
 
1206
assign cfg_rvalid_o = rvalid_q;
1207
 
1208
//-----------------------------------------------------------------
1209
// Retime read response
1210
//-----------------------------------------------------------------
1211
reg [31:0] rd_data_q;
1212
 
1213
always @ (posedge clk_i or posedge rst_i)
1214
if (rst_i)
1215
    rd_data_q <= 32'b0;
1216
else if (!cfg_rvalid_o || cfg_rready_i)
1217
    rd_data_q <= data_r;
1218
 
1219
assign cfg_rdata_o = rd_data_q;
1220
assign cfg_rresp_o = 2'b0;
1221
 
1222
//-----------------------------------------------------------------
1223
// BVALID
1224
//-----------------------------------------------------------------
1225
reg bvalid_q;
1226
 
1227
always @ (posedge clk_i or posedge rst_i)
1228
if (rst_i)
1229
    bvalid_q <= 1'b0;
1230
else if (write_en_w)
1231
    bvalid_q <= 1'b1;
1232
else if (cfg_bready_i)
1233
    bvalid_q <= 1'b0;
1234
 
1235
assign cfg_bvalid_o = bvalid_q;
1236
assign cfg_bresp_o  = 2'b0;
1237
 
1238
wire usb_ep0_data_rd_req_w = read_en_w & (cfg_araddr_i[7:0] == `USB_EP0_DATA);
1239
wire usb_ep1_data_rd_req_w = read_en_w & (cfg_araddr_i[7:0] == `USB_EP1_DATA);
1240
wire usb_ep2_data_rd_req_w = read_en_w & (cfg_araddr_i[7:0] == `USB_EP2_DATA);
1241
wire usb_ep3_data_rd_req_w = read_en_w & (cfg_araddr_i[7:0] == `USB_EP3_DATA);
1242
 
1243
wire usb_func_stat_wr_req_w = usb_func_stat_wr_q;
1244
wire usb_ep0_data_wr_req_w = usb_ep0_data_wr_q;
1245
wire usb_ep1_data_wr_req_w = usb_ep1_data_wr_q;
1246
wire usb_ep2_data_wr_req_w = usb_ep2_data_wr_q;
1247
wire usb_ep3_data_wr_req_w = usb_ep3_data_wr_q;
1248
 
1249
 
1250
//-----------------------------------------------------------------
1251
// Wires
1252
//-----------------------------------------------------------------
1253
wire          stat_rst_w;
1254
wire  [10:0]  stat_frame_w;
1255
wire          stat_rst_clr_w = usb_func_stat_rst_out_w;
1256
wire          stat_wr_req_w  = usb_func_stat_wr_req_w;
1257
 
1258
wire         usb_ep0_tx_rd_w;
1259
wire [7:0]   usb_ep0_tx_data_w;
1260
wire         usb_ep0_tx_empty_w;
1261
 
1262
wire         usb_ep0_rx_wr_w;
1263
wire [7:0]   usb_ep0_rx_data_w;
1264
wire         usb_ep0_rx_full_w;
1265
wire         usb_ep1_tx_rd_w;
1266
wire [7:0]   usb_ep1_tx_data_w;
1267
wire         usb_ep1_tx_empty_w;
1268
 
1269
wire         usb_ep1_rx_wr_w;
1270
wire [7:0]   usb_ep1_rx_data_w;
1271
wire         usb_ep1_rx_full_w;
1272
wire         usb_ep2_tx_rd_w;
1273
wire [7:0]   usb_ep2_tx_data_w;
1274
wire         usb_ep2_tx_empty_w;
1275
 
1276
wire         usb_ep2_rx_wr_w;
1277
wire [7:0]   usb_ep2_rx_data_w;
1278
wire         usb_ep2_rx_full_w;
1279
wire         usb_ep3_tx_rd_w;
1280
wire [7:0]   usb_ep3_tx_data_w;
1281
wire         usb_ep3_tx_empty_w;
1282
 
1283
wire         usb_ep3_rx_wr_w;
1284
wire [7:0]   usb_ep3_rx_data_w;
1285
wire         usb_ep3_rx_full_w;
1286
 
1287
// Rx SIE Interface (shared)
1288
wire        rx_strb_w;
1289
wire [7:0]  rx_data_w;
1290
wire        rx_last_w;
1291
wire        rx_crc_err_w;
1292
 
1293
// EP0 Rx SIE Interface
1294
wire        ep0_rx_space_w;
1295
wire        ep0_rx_valid_w;
1296
wire        ep0_rx_setup_w;
1297
 
1298
// EP0 Tx SIE Interface
1299
wire        ep0_tx_ready_w;
1300
wire        ep0_tx_data_valid_w;
1301
wire        ep0_tx_data_strb_w;
1302
wire [7:0]  ep0_tx_data_w;
1303
wire        ep0_tx_data_last_w;
1304
wire        ep0_tx_data_accept_w;
1305
// EP1 Rx SIE Interface
1306
wire        ep1_rx_space_w;
1307
wire        ep1_rx_valid_w;
1308
wire        ep1_rx_setup_w;
1309
 
1310
// EP1 Tx SIE Interface
1311
wire        ep1_tx_ready_w;
1312
wire        ep1_tx_data_valid_w;
1313
wire        ep1_tx_data_strb_w;
1314
wire [7:0]  ep1_tx_data_w;
1315
wire        ep1_tx_data_last_w;
1316
wire        ep1_tx_data_accept_w;
1317
// EP2 Rx SIE Interface
1318
wire        ep2_rx_space_w;
1319
wire        ep2_rx_valid_w;
1320
wire        ep2_rx_setup_w;
1321
 
1322
// EP2 Tx SIE Interface
1323
wire        ep2_tx_ready_w;
1324
wire        ep2_tx_data_valid_w;
1325
wire        ep2_tx_data_strb_w;
1326
wire [7:0]  ep2_tx_data_w;
1327
wire        ep2_tx_data_last_w;
1328
wire        ep2_tx_data_accept_w;
1329
// EP3 Rx SIE Interface
1330
wire        ep3_rx_space_w;
1331
wire        ep3_rx_valid_w;
1332
wire        ep3_rx_setup_w;
1333
 
1334
// EP3 Tx SIE Interface
1335
wire        ep3_tx_ready_w;
1336
wire        ep3_tx_data_valid_w;
1337
wire        ep3_tx_data_strb_w;
1338
wire [7:0]  ep3_tx_data_w;
1339
wire        ep3_tx_data_last_w;
1340
wire        ep3_tx_data_accept_w;
1341
 
1342
// Transceiver Control
1343
assign utmi_dmpulldown_o            = usb_func_ctrl_phy_dmpulldown_out_w;
1344
assign utmi_dppulldown_o            = usb_func_ctrl_phy_dppulldown_out_w;
1345
assign utmi_termselect_o            = usb_func_ctrl_phy_termselect_out_w;
1346
assign utmi_xcvrselect_o            = usb_func_ctrl_phy_xcvrselect_out_w;
1347
assign utmi_op_mode_o               = usb_func_ctrl_phy_opmode_out_w;
1348
 
1349
// Status
1350
assign usb_func_stat_rst_in_w       = stat_rst_w;
1351
assign usb_func_stat_linestate_in_w = utmi_linestate_i;
1352
assign usb_func_stat_frame_in_w     = stat_frame_w;
1353
 
1354
//-----------------------------------------------------------------
1355
// Core
1356
//-----------------------------------------------------------------
1357
usbf_device_core
1358
u_core
1359
(
1360
    .clk_i(clk_i),
1361
    .rst_i(rst_i),
1362
 
1363
    .intr_o(intr_o),
1364
 
1365
    // UTMI interface
1366
    .utmi_data_o(utmi_data_out_o),
1367
    .utmi_data_i(utmi_data_in_i),
1368
    .utmi_txvalid_o(utmi_txvalid_o),
1369
    .utmi_txready_i(utmi_txready_i),
1370
    .utmi_rxvalid_i(utmi_rxvalid_i),
1371
    .utmi_rxactive_i(utmi_rxactive_i),
1372
    .utmi_rxerror_i(utmi_rxerror_i),
1373
    .utmi_linestate_i(utmi_linestate_i),
1374
 
1375
    .reg_chirp_en_i(usb_func_ctrl_hs_chirp_en_out_w),
1376
    .reg_int_en_sof_i(usb_func_ctrl_int_en_sof_out_w),
1377
 
1378
    .reg_dev_addr_i(usb_func_addr_dev_addr_out_w),
1379
 
1380
    // Rx SIE Interface (shared)
1381
    .rx_strb_o(rx_strb_w),
1382
    .rx_data_o(rx_data_w),
1383
    .rx_last_o(rx_last_w),
1384
    .rx_crc_err_o(rx_crc_err_w),
1385
 
1386
    // EP0 Config
1387
    .ep0_iso_i(usb_ep0_cfg_iso_out_w),
1388
    .ep0_stall_i(usb_ep0_cfg_stall_ep_out_w),
1389
    .ep0_cfg_int_rx_i(usb_ep0_cfg_int_rx_out_w),
1390
    .ep0_cfg_int_tx_i(usb_ep0_cfg_int_tx_out_w),
1391
 
1392
    // EP0 Rx SIE Interface
1393
    .ep0_rx_setup_o(ep0_rx_setup_w),
1394
    .ep0_rx_valid_o(ep0_rx_valid_w),
1395
    .ep0_rx_space_i(ep0_rx_space_w),
1396
 
1397
    // EP0 Tx SIE Interface
1398
    .ep0_tx_ready_i(ep0_tx_ready_w),
1399
    .ep0_tx_data_valid_i(ep0_tx_data_valid_w),
1400
    .ep0_tx_data_strb_i(ep0_tx_data_strb_w),
1401
    .ep0_tx_data_i(ep0_tx_data_w),
1402
    .ep0_tx_data_last_i(ep0_tx_data_last_w),
1403
    .ep0_tx_data_accept_o(ep0_tx_data_accept_w),
1404
 
1405
    // EP1 Config
1406
    .ep1_iso_i(usb_ep1_cfg_iso_out_w),
1407
    .ep1_stall_i(usb_ep1_cfg_stall_ep_out_w),
1408
    .ep1_cfg_int_rx_i(usb_ep1_cfg_int_rx_out_w),
1409
    .ep1_cfg_int_tx_i(usb_ep1_cfg_int_tx_out_w),
1410
 
1411
    // EP1 Rx SIE Interface
1412
    .ep1_rx_setup_o(ep1_rx_setup_w),
1413
    .ep1_rx_valid_o(ep1_rx_valid_w),
1414
    .ep1_rx_space_i(ep1_rx_space_w),
1415
 
1416
    // EP1 Tx SIE Interface
1417
    .ep1_tx_ready_i(ep1_tx_ready_w),
1418
    .ep1_tx_data_valid_i(ep1_tx_data_valid_w),
1419
    .ep1_tx_data_strb_i(ep1_tx_data_strb_w),
1420
    .ep1_tx_data_i(ep1_tx_data_w),
1421
    .ep1_tx_data_last_i(ep1_tx_data_last_w),
1422
    .ep1_tx_data_accept_o(ep1_tx_data_accept_w),
1423
 
1424
    // EP2 Config
1425
    .ep2_iso_i(usb_ep2_cfg_iso_out_w),
1426
    .ep2_stall_i(usb_ep2_cfg_stall_ep_out_w),
1427
    .ep2_cfg_int_rx_i(usb_ep2_cfg_int_rx_out_w),
1428
    .ep2_cfg_int_tx_i(usb_ep2_cfg_int_tx_out_w),
1429
 
1430
    // EP2 Rx SIE Interface
1431
    .ep2_rx_setup_o(ep2_rx_setup_w),
1432
    .ep2_rx_valid_o(ep2_rx_valid_w),
1433
    .ep2_rx_space_i(ep2_rx_space_w),
1434
 
1435
    // EP2 Tx SIE Interface
1436
    .ep2_tx_ready_i(ep2_tx_ready_w),
1437
    .ep2_tx_data_valid_i(ep2_tx_data_valid_w),
1438
    .ep2_tx_data_strb_i(ep2_tx_data_strb_w),
1439
    .ep2_tx_data_i(ep2_tx_data_w),
1440
    .ep2_tx_data_last_i(ep2_tx_data_last_w),
1441
    .ep2_tx_data_accept_o(ep2_tx_data_accept_w),
1442
 
1443
    // EP3 Config
1444
    .ep3_iso_i(usb_ep3_cfg_iso_out_w),
1445
    .ep3_stall_i(usb_ep3_cfg_stall_ep_out_w),
1446
    .ep3_cfg_int_rx_i(usb_ep3_cfg_int_rx_out_w),
1447
    .ep3_cfg_int_tx_i(usb_ep3_cfg_int_tx_out_w),
1448
 
1449
    // EP3 Rx SIE Interface
1450
    .ep3_rx_setup_o(ep3_rx_setup_w),
1451
    .ep3_rx_valid_o(ep3_rx_valid_w),
1452
    .ep3_rx_space_i(ep3_rx_space_w),
1453
 
1454
    // EP3 Tx SIE Interface
1455
    .ep3_tx_ready_i(ep3_tx_ready_w),
1456
    .ep3_tx_data_valid_i(ep3_tx_data_valid_w),
1457
    .ep3_tx_data_strb_i(ep3_tx_data_strb_w),
1458
    .ep3_tx_data_i(ep3_tx_data_w),
1459
    .ep3_tx_data_last_i(ep3_tx_data_last_w),
1460
    .ep3_tx_data_accept_o(ep3_tx_data_accept_w),
1461
 
1462
    // Status
1463
    .reg_sts_rst_clr_i(stat_rst_clr_w & stat_wr_req_w),
1464
    .reg_sts_rst_o(stat_rst_w),
1465
    .reg_sts_frame_num_o(stat_frame_w)
1466
);
1467
 
1468
assign usb_ep0_cfg_stall_ep_ack_in_w = ep0_rx_setup_w;
1469
assign usb_ep1_cfg_stall_ep_ack_in_w = ep1_rx_setup_w;
1470
assign usb_ep2_cfg_stall_ep_ack_in_w = ep2_rx_setup_w;
1471
assign usb_ep3_cfg_stall_ep_ack_in_w = ep3_rx_setup_w;
1472
 
1473
//-----------------------------------------------------------------
1474
// FIFOs
1475
//-----------------------------------------------------------------
1476
 
1477
//-----------------------------------------------------------------
1478
// Endpoint 0: Host -> Device
1479
//-----------------------------------------------------------------
1480
usbf_fifo
1481
#(
1482
    .WIDTH(8),
1483
    .DEPTH(8),
1484
    .ADDR_W(3)
1485
)
1486
u_fifo_rx_ep0
1487
(
1488
    .clk_i(clk_i),
1489
    .rst_i(rst_i),
1490
 
1491
    .data_i(usb_ep0_rx_data_w),
1492
    .push_i(usb_ep0_rx_wr_w),
1493
 
1494
    .flush_i(usb_ep0_rx_ctrl_rx_flush_out_w),
1495
 
1496
    .full_o(usb_ep0_rx_full_w),
1497
    .empty_o(),
1498
 
1499
    // Output to register block
1500
    .data_o(usb_ep0_data_data_in_w),
1501
    .pop_i(usb_ep0_data_rd_req_w)
1502
);
1503
 
1504
//-----------------------------------------------------------------
1505
// Endpoint 0: Device -> Host
1506
//-----------------------------------------------------------------
1507
usbf_fifo
1508
#(
1509
    .WIDTH(8),
1510
    .DEPTH(8),
1511
    .ADDR_W(3)
1512
)
1513
u_fifo_tx_ep0
1514
(
1515
    .clk_i(clk_i),
1516
    .rst_i(rst_i),
1517
 
1518
    // Input from register block
1519
    .data_i(usb_ep0_data_data_out_w),
1520
    .push_i(usb_ep0_data_wr_req_w),
1521
 
1522
    .flush_i(usb_ep0_tx_ctrl_tx_flush_out_w),
1523
 
1524
    .full_o(),
1525
    .empty_o(usb_ep0_tx_empty_w),
1526
 
1527
    .data_o(usb_ep0_tx_data_w),
1528
    .pop_i(usb_ep0_tx_rd_w)
1529
);
1530
 
1531
//-----------------------------------------------------------------
1532
// Endpoint 1: Host -> Device
1533
//-----------------------------------------------------------------
1534
usbf_fifo
1535
#(
1536
    .WIDTH(8),
1537
    .DEPTH(64),
1538
    .ADDR_W(6)
1539
)
1540
u_fifo_rx_ep1
1541
(
1542
    .clk_i(clk_i),
1543
    .rst_i(rst_i),
1544
 
1545
    .data_i(usb_ep1_rx_data_w),
1546
    .push_i(usb_ep1_rx_wr_w),
1547
 
1548
    .flush_i(usb_ep1_rx_ctrl_rx_flush_out_w),
1549
 
1550
    .full_o(usb_ep1_rx_full_w),
1551
    .empty_o(),
1552
 
1553
    // Output to register block
1554
    .data_o(usb_ep1_data_data_in_w),
1555
    .pop_i(usb_ep1_data_rd_req_w)
1556
);
1557
 
1558
//-----------------------------------------------------------------
1559
// Endpoint 1: Device -> Host
1560
//-----------------------------------------------------------------
1561
usbf_fifo
1562
#(
1563
    .WIDTH(8),
1564
    .DEPTH(64),
1565
    .ADDR_W(6)
1566
)
1567
u_fifo_tx_ep1
1568
(
1569
    .clk_i(clk_i),
1570
    .rst_i(rst_i),
1571
 
1572
    // Input from register block
1573
    .data_i(usb_ep1_data_data_out_w),
1574
    .push_i(usb_ep1_data_wr_req_w),
1575
 
1576
    .flush_i(usb_ep1_tx_ctrl_tx_flush_out_w),
1577
 
1578
    .full_o(),
1579
    .empty_o(usb_ep1_tx_empty_w),
1580
 
1581
    .data_o(usb_ep1_tx_data_w),
1582
    .pop_i(usb_ep1_tx_rd_w)
1583
);
1584
 
1585
//-----------------------------------------------------------------
1586
// Endpoint 2: Host -> Device
1587
//-----------------------------------------------------------------
1588
usbf_fifo
1589
#(
1590
    .WIDTH(8),
1591
    .DEPTH(64),
1592
    .ADDR_W(6)
1593
)
1594
u_fifo_rx_ep2
1595
(
1596
    .clk_i(clk_i),
1597
    .rst_i(rst_i),
1598
 
1599
    .data_i(usb_ep2_rx_data_w),
1600
    .push_i(usb_ep2_rx_wr_w),
1601
 
1602
    .flush_i(usb_ep2_rx_ctrl_rx_flush_out_w),
1603
 
1604
    .full_o(usb_ep2_rx_full_w),
1605
    .empty_o(),
1606
 
1607
    // Output to register block
1608
    .data_o(usb_ep2_data_data_in_w),
1609
    .pop_i(usb_ep2_data_rd_req_w)
1610
);
1611
 
1612
//-----------------------------------------------------------------
1613
// Endpoint 2: Device -> Host
1614
//-----------------------------------------------------------------
1615
usbf_fifo
1616
#(
1617
    .WIDTH(8),
1618
    .DEPTH(64),
1619
    .ADDR_W(6)
1620
)
1621
u_fifo_tx_ep2
1622
(
1623
    .clk_i(clk_i),
1624
    .rst_i(rst_i),
1625
 
1626
    // Input from register block
1627
    .data_i(usb_ep2_data_data_out_w),
1628
    .push_i(usb_ep2_data_wr_req_w),
1629
 
1630
    .flush_i(usb_ep2_tx_ctrl_tx_flush_out_w),
1631
 
1632
    .full_o(),
1633
    .empty_o(usb_ep2_tx_empty_w),
1634
 
1635
    .data_o(usb_ep2_tx_data_w),
1636
    .pop_i(usb_ep2_tx_rd_w)
1637
);
1638
 
1639
//-----------------------------------------------------------------
1640
// Endpoint 3: Host -> Device
1641
//-----------------------------------------------------------------
1642
usbf_fifo
1643
#(
1644
    .WIDTH(8),
1645
    .DEPTH(64),
1646
    .ADDR_W(6)
1647
)
1648
u_fifo_rx_ep3
1649
(
1650
    .clk_i(clk_i),
1651
    .rst_i(rst_i),
1652
 
1653
    .data_i(usb_ep3_rx_data_w),
1654
    .push_i(usb_ep3_rx_wr_w),
1655
 
1656
    .flush_i(usb_ep3_rx_ctrl_rx_flush_out_w),
1657
 
1658
    .full_o(usb_ep3_rx_full_w),
1659
    .empty_o(),
1660
 
1661
    // Output to register block
1662
    .data_o(usb_ep3_data_data_in_w),
1663
    .pop_i(usb_ep3_data_rd_req_w)
1664
);
1665
 
1666
//-----------------------------------------------------------------
1667
// Endpoint 3: Device -> Host
1668
//-----------------------------------------------------------------
1669
usbf_fifo
1670
#(
1671
    .WIDTH(8),
1672
    .DEPTH(64),
1673
    .ADDR_W(6)
1674
)
1675
u_fifo_tx_ep3
1676
(
1677
    .clk_i(clk_i),
1678
    .rst_i(rst_i),
1679
 
1680
    // Input from register block
1681
    .data_i(usb_ep3_data_data_out_w),
1682
    .push_i(usb_ep3_data_wr_req_w),
1683
 
1684
    .flush_i(usb_ep3_tx_ctrl_tx_flush_out_w),
1685
 
1686
    .full_o(),
1687
    .empty_o(usb_ep3_tx_empty_w),
1688
 
1689
    .data_o(usb_ep3_tx_data_w),
1690
    .pop_i(usb_ep3_tx_rd_w)
1691
);
1692
 
1693
 
1694
//-----------------------------------------------------------------
1695
// Endpoint 0: Control
1696
//-----------------------------------------------------------------
1697
usbf_sie_ep
1698
u_ep0
1699
(
1700
    .clk_i(clk_i),
1701
    .rst_i(rst_i),
1702
 
1703
    // Rx SIE Interface
1704
    .rx_space_o(ep0_rx_space_w),
1705
    .rx_valid_i(ep0_rx_valid_w),
1706
    .rx_setup_i(ep0_rx_setup_w),
1707
    .rx_strb_i(rx_strb_w),
1708
    .rx_data_i(rx_data_w),
1709
    .rx_last_i(rx_last_w),
1710
    .rx_crc_err_i(rx_crc_err_w),
1711
 
1712
    // Rx FIFO Interface
1713
    .rx_push_o(usb_ep0_rx_wr_w),
1714
    .rx_data_o(usb_ep0_rx_data_w),
1715
    .rx_full_i(usb_ep0_rx_full_w),
1716
 
1717
    // Rx Register Interface
1718
    .rx_length_o(usb_ep0_sts_rx_count_in_w),
1719
    .rx_ready_o(usb_ep0_sts_rx_ready_in_w),
1720
    .rx_err_o(usb_ep0_sts_rx_err_in_w),
1721
    .rx_setup_o(usb_ep0_sts_rx_setup_in_w),
1722
    .rx_ack_i(usb_ep0_rx_ctrl_rx_accept_out_w),
1723
 
1724
    // Tx FIFO Interface
1725
    .tx_pop_o(usb_ep0_tx_rd_w),
1726
    .tx_data_i(usb_ep0_tx_data_w),
1727
    .tx_empty_i(usb_ep0_tx_empty_w),
1728
 
1729
    // Tx Register Interface
1730
    .tx_flush_i(usb_ep0_tx_ctrl_tx_flush_out_w),
1731
    .tx_length_i(usb_ep0_tx_ctrl_tx_len_out_w),
1732
    .tx_start_i(usb_ep0_tx_ctrl_tx_start_out_w),
1733
    .tx_busy_o(usb_ep0_sts_tx_busy_in_w),
1734
    .tx_err_o(usb_ep0_sts_tx_err_in_w),
1735
 
1736
    // Tx SIE Interface
1737
    .tx_ready_o(ep0_tx_ready_w),
1738
    .tx_data_valid_o(ep0_tx_data_valid_w),
1739
    .tx_data_strb_o(ep0_tx_data_strb_w),
1740
    .tx_data_o(ep0_tx_data_w),
1741
    .tx_data_last_o(ep0_tx_data_last_w),
1742
    .tx_data_accept_i(ep0_tx_data_accept_w)
1743
);
1744
//-----------------------------------------------------------------
1745
// Endpoint 1: Control
1746
//-----------------------------------------------------------------
1747
usbf_sie_ep
1748
u_ep1
1749
(
1750
    .clk_i(clk_i),
1751
    .rst_i(rst_i),
1752
 
1753
    // Rx SIE Interface
1754
    .rx_space_o(ep1_rx_space_w),
1755
    .rx_valid_i(ep1_rx_valid_w),
1756
    .rx_setup_i(ep1_rx_setup_w),
1757
    .rx_strb_i(rx_strb_w),
1758
    .rx_data_i(rx_data_w),
1759
    .rx_last_i(rx_last_w),
1760
    .rx_crc_err_i(rx_crc_err_w),
1761
 
1762
    // Rx FIFO Interface
1763
    .rx_push_o(usb_ep1_rx_wr_w),
1764
    .rx_data_o(usb_ep1_rx_data_w),
1765
    .rx_full_i(usb_ep1_rx_full_w),
1766
 
1767
    // Rx Register Interface
1768
    .rx_length_o(usb_ep1_sts_rx_count_in_w),
1769
    .rx_ready_o(usb_ep1_sts_rx_ready_in_w),
1770
    .rx_err_o(usb_ep1_sts_rx_err_in_w),
1771
    .rx_setup_o(usb_ep1_sts_rx_setup_in_w),
1772
    .rx_ack_i(usb_ep1_rx_ctrl_rx_accept_out_w),
1773
 
1774
    // Tx FIFO Interface
1775
    .tx_pop_o(usb_ep1_tx_rd_w),
1776
    .tx_data_i(usb_ep1_tx_data_w),
1777
    .tx_empty_i(usb_ep1_tx_empty_w),
1778
 
1779
    // Tx Register Interface
1780
    .tx_flush_i(usb_ep1_tx_ctrl_tx_flush_out_w),
1781
    .tx_length_i(usb_ep1_tx_ctrl_tx_len_out_w),
1782
    .tx_start_i(usb_ep1_tx_ctrl_tx_start_out_w),
1783
    .tx_busy_o(usb_ep1_sts_tx_busy_in_w),
1784
    .tx_err_o(usb_ep1_sts_tx_err_in_w),
1785
 
1786
    // Tx SIE Interface
1787
    .tx_ready_o(ep1_tx_ready_w),
1788
    .tx_data_valid_o(ep1_tx_data_valid_w),
1789
    .tx_data_strb_o(ep1_tx_data_strb_w),
1790
    .tx_data_o(ep1_tx_data_w),
1791
    .tx_data_last_o(ep1_tx_data_last_w),
1792
    .tx_data_accept_i(ep1_tx_data_accept_w)
1793
);
1794
//-----------------------------------------------------------------
1795
// Endpoint 2: Control
1796
//-----------------------------------------------------------------
1797
usbf_sie_ep
1798
u_ep2
1799
(
1800
    .clk_i(clk_i),
1801
    .rst_i(rst_i),
1802
 
1803
    // Rx SIE Interface
1804
    .rx_space_o(ep2_rx_space_w),
1805
    .rx_valid_i(ep2_rx_valid_w),
1806
    .rx_setup_i(ep2_rx_setup_w),
1807
    .rx_strb_i(rx_strb_w),
1808
    .rx_data_i(rx_data_w),
1809
    .rx_last_i(rx_last_w),
1810
    .rx_crc_err_i(rx_crc_err_w),
1811
 
1812
    // Rx FIFO Interface
1813
    .rx_push_o(usb_ep2_rx_wr_w),
1814
    .rx_data_o(usb_ep2_rx_data_w),
1815
    .rx_full_i(usb_ep2_rx_full_w),
1816
 
1817
    // Rx Register Interface
1818
    .rx_length_o(usb_ep2_sts_rx_count_in_w),
1819
    .rx_ready_o(usb_ep2_sts_rx_ready_in_w),
1820
    .rx_err_o(usb_ep2_sts_rx_err_in_w),
1821
    .rx_setup_o(usb_ep2_sts_rx_setup_in_w),
1822
    .rx_ack_i(usb_ep2_rx_ctrl_rx_accept_out_w),
1823
 
1824
    // Tx FIFO Interface
1825
    .tx_pop_o(usb_ep2_tx_rd_w),
1826
    .tx_data_i(usb_ep2_tx_data_w),
1827
    .tx_empty_i(usb_ep2_tx_empty_w),
1828
 
1829
    // Tx Register Interface
1830
    .tx_flush_i(usb_ep2_tx_ctrl_tx_flush_out_w),
1831
    .tx_length_i(usb_ep2_tx_ctrl_tx_len_out_w),
1832
    .tx_start_i(usb_ep2_tx_ctrl_tx_start_out_w),
1833
    .tx_busy_o(usb_ep2_sts_tx_busy_in_w),
1834
    .tx_err_o(usb_ep2_sts_tx_err_in_w),
1835
 
1836
    // Tx SIE Interface
1837
    .tx_ready_o(ep2_tx_ready_w),
1838
    .tx_data_valid_o(ep2_tx_data_valid_w),
1839
    .tx_data_strb_o(ep2_tx_data_strb_w),
1840
    .tx_data_o(ep2_tx_data_w),
1841
    .tx_data_last_o(ep2_tx_data_last_w),
1842
    .tx_data_accept_i(ep2_tx_data_accept_w)
1843
);
1844
//-----------------------------------------------------------------
1845
// Endpoint 3: Control
1846
//-----------------------------------------------------------------
1847
usbf_sie_ep
1848
u_ep3
1849
(
1850
    .clk_i(clk_i),
1851
    .rst_i(rst_i),
1852
 
1853
    // Rx SIE Interface
1854
    .rx_space_o(ep3_rx_space_w),
1855
    .rx_valid_i(ep3_rx_valid_w),
1856
    .rx_setup_i(ep3_rx_setup_w),
1857
    .rx_strb_i(rx_strb_w),
1858
    .rx_data_i(rx_data_w),
1859
    .rx_last_i(rx_last_w),
1860
    .rx_crc_err_i(rx_crc_err_w),
1861
 
1862
    // Rx FIFO Interface
1863
    .rx_push_o(usb_ep3_rx_wr_w),
1864
    .rx_data_o(usb_ep3_rx_data_w),
1865
    .rx_full_i(usb_ep3_rx_full_w),
1866
 
1867
    // Rx Register Interface
1868
    .rx_length_o(usb_ep3_sts_rx_count_in_w),
1869
    .rx_ready_o(usb_ep3_sts_rx_ready_in_w),
1870
    .rx_err_o(usb_ep3_sts_rx_err_in_w),
1871
    .rx_setup_o(usb_ep3_sts_rx_setup_in_w),
1872
    .rx_ack_i(usb_ep3_rx_ctrl_rx_accept_out_w),
1873
 
1874
    // Tx FIFO Interface
1875
    .tx_pop_o(usb_ep3_tx_rd_w),
1876
    .tx_data_i(usb_ep3_tx_data_w),
1877
    .tx_empty_i(usb_ep3_tx_empty_w),
1878
 
1879
    // Tx Register Interface
1880
    .tx_flush_i(usb_ep3_tx_ctrl_tx_flush_out_w),
1881
    .tx_length_i(usb_ep3_tx_ctrl_tx_len_out_w),
1882
    .tx_start_i(usb_ep3_tx_ctrl_tx_start_out_w),
1883
    .tx_busy_o(usb_ep3_sts_tx_busy_in_w),
1884
    .tx_err_o(usb_ep3_sts_tx_err_in_w),
1885
 
1886
    // Tx SIE Interface
1887
    .tx_ready_o(ep3_tx_ready_w),
1888
    .tx_data_valid_o(ep3_tx_data_valid_w),
1889
    .tx_data_strb_o(ep3_tx_data_strb_w),
1890
    .tx_data_o(ep3_tx_data_w),
1891
    .tx_data_last_o(ep3_tx_data_last_w),
1892
    .tx_data_accept_i(ep3_tx_data_accept_w)
1893
);
1894
 
1895
 
1896
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.