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

Subversion Repositories sgmii

[/] [sgmii/] [trunk/] [sim/] [BFMs/] [SGMII_altera/] [triple_speed_ethernet-library/] [altera_tse_mac.v] - Blame information for rev 20

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 9 jefflieu
// -------------------------------------------------------------------------
2
// -------------------------------------------------------------------------
3
//
4
// Revision Control Information
5
//
6
// $RCSfile: altera_tse_mac.v,v $
7
// $Source: /ipbu/cvs/sio/projects/TriSpeedEthernet/src/RTL/Top_level_modules/altera_tse_mac.v,v $
8
//
9
// $Revision: #1 $
10 20 jefflieu
// $Date: 2012/06/21 $
11
// Check in by : $Author: swbranch $
12 9 jefflieu
// Author      : Arul Paniandi
13
//
14
// Project     : Triple Speed Ethernet
15
//
16
// Description : 
17
//
18
// Top level module for Triple Speed Ethernet MAC
19
 
20
// 
21
// ALTERA Confidential and Proprietary
22
// Copyright 2006 (c) Altera Corporation
23
// All rights reserved
24
//
25
// -------------------------------------------------------------------------
26
// -------------------------------------------------------------------------
27
 
28
(*altera_attribute = {"-name SYNCHRONIZER_IDENTIFICATION OFF" } *)
29
module altera_tse_mac /* synthesis ALTERA_ATTRIBUTE = "SUPPRESS_DA_RULE_INTERNAL=\"R102,R105,D102,D101,D103\"" */(
30
 
31
    clk,                       // Avalon slave - clock
32
    read,                      // Avalon slave - read
33
    write,                     // Avalon slave - write
34
    address,                   // Avalon slave - address
35
    writedata,                 // Avalon slave - writedata
36
    readdata,                  // Avalon slave - readdata
37
    waitrequest,               // Avalon slave - waitrequest
38
    reset,                     // Avalon slave - reset
39
    reset_rx_clk,
40
    reset_tx_clk,
41
    reset_ff_rx_clk,
42
    reset_ff_tx_clk,
43
    ff_rx_clk,                 // AtlanticII source - clk  
44
    ff_rx_data,                // AtlanticII source - data 
45
    ff_rx_mod,                 // Will not exists in SoPC Model as the 8-bit version is used
46
    ff_rx_sop,                 // AtlanticII source - startofpacket
47
    ff_rx_eop,                 // AtlanticII source - endofpacket
48
    rx_err,                    // AtlanticII source - error 
49
    rx_err_stat,               // AtlanticII source - component_specific_signal(eop)
50
    rx_frm_type,               // AtlanticII source - component_specific_signal(data)
51
    ff_rx_rdy,                 // AtlanticII source - ready
52
    ff_rx_dval,                // AtlanticII source - valid
53
    ff_rx_dsav,                // AtlanticII source - component_specific_signal(data)
54
    ff_tx_clk,                 // AtlanticII sink - clk
55
    ff_tx_data,                // AtlanticII sink - data
56
    ff_tx_mod,                 // Will not exists in SoPC Model as the 8-bit version is used
57
    ff_tx_sop,                 // AtlanticII sink - startofpacket
58
    ff_tx_eop,                 // AtlanticII sink - endofpacket
59
    ff_tx_err,                 // AtlanticII sink - error
60
    ff_tx_wren,                // AtlanticII sink - valid
61
    ff_tx_crc_fwd,             // AtlanticII sink - component_specific_signal(eop)
62
    ff_tx_rdy,                 // AtlanticII sink - ready
63
    ff_tx_septy,               // AtlanticII source - component_specific_signal(data)
64
    tx_ff_uflow,               // AtlanticII source - component_specific_signal(data)
65
    ff_rx_a_full,
66
    ff_rx_a_empty,
67
    ff_tx_a_full,
68
    ff_tx_a_empty,
69
    xoff_gen,
70
    xon_gen,
71
    magic_sleep_n,
72
    magic_wakeup,
73
    rx_clk,
74
    tx_clk,
75
    gm_rx_d,
76
    gm_rx_dv,
77
    gm_rx_err,
78
    gm_tx_d,
79
    gm_tx_en,
80
    gm_tx_err,
81
    m_rx_d,
82
    m_rx_en,
83
    m_rx_err,
84
    m_tx_d,
85
    m_tx_en,
86
    m_tx_err,
87
    m_rx_crs,
88
    m_rx_col,
89
    eth_mode,
90
    ena_10,
91
    set_10,
92
    set_1000,
93
    mdc,
94
    mdio_in,
95
    mdio_out,
96
    mdio_oen,
97
    tx_control,
98
    rx_control,
99
    rgmii_in,
100
    rgmii_out
101
);
102
 
103
parameter ENABLE_ENA            = 8;            //  Enable n-Bit Local Interface
104
parameter ENABLE_GMII_LOOPBACK  = 1;            //  GMII_LOOPBACK_ENA : Enable GMII Loopback Logic 
105
parameter ENABLE_HD_LOGIC       = 1;            //  HD_LOGIC_ENA : Enable Half Duplex Logic
106
parameter USE_SYNC_RESET        = 1;            //  Use Synchronized Reset Inputs
107
parameter ENABLE_SUP_ADDR       = 1;        //  SUP_ADDR_ENA : Enable Supplemental Addresses
108
parameter ENA_HASH              = 1;            //  ENA_HASH Enable Hash Table 
109
parameter STAT_CNT_ENA          = 1;            //  STAT_CNT_ENA Enable Statistic Counters
110
parameter ENABLE_EXTENDED_STAT_REG = 0;         //  Enable a few extended statistic registers
111
parameter EG_FIFO               = 256 ;         //  Egress FIFO Depth
112
parameter EG_ADDR               = 8 ;           //  Egress FIFO Depth
113
parameter ING_FIFO              = 256 ;         //  Ingress FIFO Depth
114
parameter ING_ADDR              = 8 ;           //  Egress FIFO Depth
115
parameter RESET_LEVEL           = 1'b 1 ;       //  Reset Active Level
116
parameter MDIO_CLK_DIV          = 40 ;          //  Host Clock Division - MDC Generation
117
parameter CORE_VERSION          = 16'h3;        //  ALTERA Core Version
118
parameter CUST_VERSION          = 1 ;           //  Customer Core Version
119
parameter REDUCED_INTERFACE_ENA = 1;            //  Enable the RGMII Interface
120
parameter ENABLE_MDIO           = 1;            //  Enable the MDIO Interface
121
parameter ENABLE_MAGIC_DETECT   = 1;            //  Enable magic packet detection
122
parameter ENABLE_MIN_FIFO       = 1;            //  Enable minimun FIFO (Reduced functionality)
123
parameter ENABLE_MACLITE        = 0;            //  Enable MAC LITE operation
124
parameter MACLITE_GIGE          = 0;            //  Enable/Disable Gigabit MAC operation for MAC LITE.
125
parameter CRC32DWIDTH           = 4'b 1000;     //  input data width (informal, not for change)
126
parameter CRC32GENDELAY         = 3'b 110;      //  when the data from the generator is valid
127
parameter CRC32CHECK16BIT       = 1'b 0;        //  1 compare two times 16 bit of the CRC (adds one pipeline step) 
128
parameter CRC32S1L2_EXTERN      = 1'b0;         //  false: merge enable
129
parameter ENABLE_SHIFT16        = 0;            //  Enable byte stuffing at packet header 
130
parameter RAM_TYPE              = "AUTO";       //  Specify the RAM type 
131
parameter INSERT_TA             = 0;            //  Option to insert timing adapter for SOPC systems
132
parameter ENABLE_MAC_FLOW_CTRL  = 1'b1;         //  Option to enable flow control 
133
parameter ENABLE_MAC_TXADDR_SET = 1'b1;         //  Option to enable MAC address insertion onto 'to-be-transmitted' Ethernet frames on MAC TX data path
134
parameter ENABLE_MAC_RX_VLAN    = 1'b1;         //  Option to enable VLAN tagged Ethernet frames on MAC RX data path
135
parameter ENABLE_MAC_TX_VLAN    = 1'b1;         //  Option to enable VLAN tagged Ethernet frames on MAC TX data path
136
parameter SYNCHRONIZER_DEPTH    = 3;            //  Number of synchronizer
137
 
138
 
139
input   clk;                    //  25MHz Host Interface Clock
140
input   read;                   //  Register Read Strobe
141
input   write;                  //  Register Write Strobe
142
input   [7:0] address;          //  Register Address
143
input   [31:0] writedata;       //  Write Data for Host Bus
144
output  [31:0] readdata;        //  Read Data to Host Bus
145
output  waitrequest;            //  Interface Busy
146
input   reset;                  //  Asynchronous Reset
147
input   reset_rx_clk;           //  Asynchronous Reset - rx_clk Domain
148
input   reset_tx_clk;           //  Asynchronous Reset - tx_clk Domain
149
input   reset_ff_rx_clk;        //  Asynchronous Reset - ff_rx_clk Domain
150
input   reset_ff_tx_clk;        //  Asynchronous Reset - ff_tx_clk Domain
151
input   ff_rx_clk;              //  Transmit Local Clock
152
output  [ENABLE_ENA-1:0] ff_rx_data;      //  Data Out
153
output  [1:0] ff_rx_mod;        //  Data Modulo
154
output  ff_rx_sop;              //  Start of Packet
155
output  ff_rx_eop;              //  End of Packet
156
output  [5:0] rx_err;           //  Errored Packet Indication
157
output  [17:0] rx_err_stat;     //  Packet Length and Status Word
158
output  [3:0] rx_frm_type;      //  Unicast Frame Indication    
159
input   ff_rx_rdy;              //  PHY Application Ready
160
output  ff_rx_dval;             //  Data Valid Strobe
161
output  ff_rx_dsav;             //  Data Available
162
input   ff_tx_clk;              //  Transmit Local Clock    
163
input   [ENABLE_ENA-1:0] ff_tx_data;      //  Data Out
164
input   [1:0] ff_tx_mod;        //  Data Modulo
165
input   ff_tx_sop;              //  Start of Packet
166
input   ff_tx_eop;              //  End of Packet
167
input   ff_tx_err;              //  Errored Packet
168
input   ff_tx_wren;             //  Write Enable
169
input   ff_tx_crc_fwd;          //  Forward Current Frame with CRC from Application
170
output  ff_tx_rdy;              //  FIFO Ready
171
output  ff_tx_septy;            //  FIFO has space for at least one section
172
output  tx_ff_uflow;            //  TX FIFO underflow occured (Synchronous with tx_clk) 
173
output  ff_rx_a_full;           //  Receive FIFO Almost Full
174
output  ff_rx_a_empty;          //  Receive FIFO Almost Empty
175
output  ff_tx_a_full;           //  Transmit FIFO Almost Full
176
output  ff_tx_a_empty;          //  Transmit FIFO Almost Empty
177
input   xoff_gen;               //  Xoff Pause frame generate 
178
input   xon_gen;                //  Xon Pause frame generate 
179
input   magic_sleep_n;          //  Enable Sleep Mode
180
output  magic_wakeup;           //  Wake Up Request
181
input   rx_clk;                 //  Receive Clock
182
input   tx_clk;                 //  Transmit Clock                
183
input   [7:0] gm_rx_d;          //  GMII Receive Data
184
input   gm_rx_dv;               //  GMII Receive Frame Enable  
185
input   gm_rx_err;              //  GMII Receive Frame Error  
186
output  [7:0] gm_tx_d;          //  GMII Transmit Data
187
output  gm_tx_en;               //  GMII Transmit Frame Enable  
188
output  gm_tx_err;              //  GMII Transmit Frame Error
189
input   [3:0] m_rx_d;           //  MII Receive Data
190
input   m_rx_en;                //  MII Receive Frame Enable  
191
input   m_rx_err;               //  MII Receive Drame Error      
192
output  [3:0] m_tx_d;           //  MII Transmit Data
193
output  m_tx_en;                //  MII Transmit Frame Enable  
194
output  m_tx_err;               //  MII Transmit Frame Error
195
input   m_rx_crs;               //  Carrier Sense
196
input   m_rx_col;               //  Collition
197
output  eth_mode;               //  Ethernet Mode
198
output  ena_10;                 //  Enable 10Mbps Mode
199
input   set_1000;               //  Gigabit Mode Enable
200
input   set_10;                 //  10Mbps Mode Enable
201
output  mdc;                    //  2.5MHz Inteface
202
input   mdio_in;                //  MDIO Input
203
output  mdio_out;               //  MDIO Output
204
output  mdio_oen;               //  MDIO Output Enable
205
output  tx_control;
206
output  [3:0] rgmii_out;
207
input   [3:0] rgmii_in;
208
input   rx_control;
209
 
210
 
211
wire    [31:0] reg_data_out;
212
wire    reg_busy;
213
wire    [ENABLE_ENA-1:0] ff_rx_data;
214
wire    [1:0] ff_rx_mod;
215
wire    ff_rx_sop;
216
wire    ff_rx_eop;
217
wire    ff_rx_dval;
218
wire    ff_rx_dsav;
219
wire    ff_tx_rdy;
220
wire    ff_tx_septy;
221
wire    tx_ff_uflow;
222
wire    magic_wakeup;
223
wire    ff_rx_a_full;
224
wire    ff_rx_a_empty;
225
wire    ff_tx_a_full;
226
wire    ff_tx_a_empty;
227
wire    [7:0] gm_tx_d;
228
wire    gm_tx_en;
229
wire    gm_tx_err;
230
wire    [3:0] m_tx_d;
231
wire    m_tx_en;
232
wire    m_tx_err;
233
wire    eth_mode;
234
wire    ena_10;
235
wire    mdc;
236
wire    mdio_out;
237
wire    mdio_oen;
238
wire    tx_control;
239
wire    [3:0] rgmii_out;
240
wire    [5:0] rx_err;
241
wire    [17:0] rx_err_stat;
242
wire    [3:0] rx_frm_type;
243
 
244
//  Reset Lines
245
//  -----------
246
 
247
wire    reset_rx_clk_int;                       //  Asynchronous Reset - rx_clk Domain
248
wire    reset_tx_clk_int;                       //  Asynchronous Reset - tx_clk Domain
249
wire    reset_ff_rx_clk_int;                    //  Asynchronous Reset - ff_rx_clk Domain
250
wire    reset_ff_tx_clk_int;                    //  Asynchronous Reset - ff_tx_clk Domain
251
wire    reset_reg_clk_int;                      //  Asynchronous Reset - reg_clk Domain
252
 
253
 
254
 
255
// Programmable Reset Options
256
// --------------------------
257
 
258
generate if (USE_SYNC_RESET == 1)
259
    begin
260
        altera_tse_reset_synchronizer reset_sync_0 (
261
        .clk(rx_clk),
262
        .reset_in(reset),
263
        .reset_out(reset_rx_clk_int)
264
        );
265
 
266
        altera_tse_reset_synchronizer reset_sync_1 (
267
        .clk(tx_clk),
268
        .reset_in(reset),
269
        .reset_out(reset_tx_clk_int)
270
        );
271
 
272
        altera_tse_reset_synchronizer reset_sync_2 (
273
        .clk(ff_rx_clk),
274
        .reset_in(reset),
275
        .reset_out(reset_ff_rx_clk_int)
276
        );
277
 
278
        altera_tse_reset_synchronizer reset_sync_3 (
279
        .clk(ff_tx_clk),
280
        .reset_in(reset),
281
        .reset_out(reset_ff_tx_clk_int)
282
        );
283
 
284
        altera_tse_reset_synchronizer reset_sync_4 (
285
        .clk(clk),
286
        .reset_in(reset),
287
        .reset_out(reset_reg_clk_int)
288
        );
289
 
290
    end
291
else
292
    begin
293
        assign reset_rx_clk_int    = RESET_LEVEL == 1'b 1 ? reset : !reset ;
294
        assign reset_tx_clk_int    = RESET_LEVEL == 1'b 1 ? reset : !reset ;
295
        assign reset_ff_rx_clk_int = RESET_LEVEL == 1'b 1 ? reset : !reset ;
296
        assign reset_ff_tx_clk_int = RESET_LEVEL == 1'b 1 ? reset : !reset ;
297
        assign reset_reg_clk_int   = RESET_LEVEL == 1'b 1 ? reset : !reset ;
298
    end
299
endgenerate
300
 
301
// --------------------------
302
 
303
 
304
    altera_tse_top_gen_host    top_gen_host_inst(
305
        .reset_ff_rx_clk(reset_ff_rx_clk_int),
306
        .reset_ff_tx_clk(reset_ff_tx_clk_int),
307
        .reset_reg_clk(reset_reg_clk_int),
308
        .reset_rx_clk(reset_rx_clk_int),
309
        .reset_tx_clk(reset_tx_clk_int),
310
        .rx_clk(rx_clk),
311
        .tx_clk(tx_clk),
312
                .rx_clkena(1'b1),
313
                .tx_clkena(1'b1),
314
        .gm_rx_dv(gm_rx_dv),
315
        .gm_rx_d(gm_rx_d),
316
        .gm_rx_err(gm_rx_err),
317
        .m_rx_en(m_rx_en),
318
        .m_rx_d(m_rx_d),
319
        .m_rx_err(m_rx_err),
320
        .m_rx_col(m_rx_col),
321
        .m_rx_crs(m_rx_crs),
322
        .set_1000(set_1000),
323
        .set_10(set_10),
324
        .ff_rx_clk(ff_rx_clk),
325
        .ff_rx_rdy(ff_rx_rdy),
326
        .ff_tx_clk(ff_tx_clk),
327
        .ff_tx_wren(ff_tx_wren),
328
        .ff_tx_data(ff_tx_data),
329
        .ff_tx_mod(ff_tx_mod),
330
        .ff_tx_sop(ff_tx_sop),
331
        .ff_tx_eop(ff_tx_eop),
332
        .ff_tx_err(ff_tx_err),
333
        .ff_tx_crc_fwd(ff_tx_crc_fwd),
334
        .reg_clk(clk),
335
        .reg_addr(address),
336
        .reg_data_in(writedata),
337
        .reg_rd(read),
338
        .reg_wr(write),
339
        .mdio_in(mdio_in),
340
        .gm_tx_en(gm_tx_en),
341
        .gm_tx_d(gm_tx_d),
342
        .gm_tx_err(gm_tx_err),
343
        .m_tx_en(m_tx_en),
344
        .m_tx_d(m_tx_d),
345
        .m_tx_err(m_tx_err),
346
        .eth_mode(eth_mode),
347
        .ena_10(ena_10),
348
        .ff_rx_dval(ff_rx_dval),
349
        .ff_rx_data(ff_rx_data),
350
        .ff_rx_mod(ff_rx_mod),
351
        .ff_rx_sop(ff_rx_sop),
352
        .ff_rx_eop(ff_rx_eop),
353
        .ff_rx_dsav(ff_rx_dsav),
354
        .rx_err(rx_err),
355
        .rx_err_stat(rx_err_stat),
356
        .rx_frm_type(rx_frm_type),
357
        .ff_tx_rdy(ff_tx_rdy),
358
        .ff_tx_septy(ff_tx_septy),
359
        .tx_ff_uflow(tx_ff_uflow),
360
        .rx_a_full(ff_rx_a_full),
361
        .rx_a_empty(ff_rx_a_empty),
362
        .tx_a_full(ff_tx_a_full),
363
        .tx_a_empty(ff_tx_a_empty),
364
        .xoff_gen(xoff_gen),
365
        .xon_gen(xon_gen),
366
        .reg_data_out(readdata),
367
        .reg_busy(waitrequest),
368
        .reg_sleepN(magic_sleep_n),
369
        .reg_wakeup(magic_wakeup),
370
        .mdc(mdc),
371
        .mdio_out(mdio_out),
372
        .mdio_oen(mdio_oen),
373
        .tx_control(tx_control),
374
        .rgmii_out(rgmii_out),
375
        .rgmii_in(rgmii_in),
376
        .rx_control(rx_control));
377
 
378
    defparam
379
        top_gen_host_inst.EG_FIFO = EG_FIFO,
380
        top_gen_host_inst.ENABLE_SUP_ADDR = ENABLE_SUP_ADDR,
381
        top_gen_host_inst.CORE_VERSION = CORE_VERSION,
382
        top_gen_host_inst.CRC32GENDELAY = CRC32GENDELAY,
383
        top_gen_host_inst.MDIO_CLK_DIV = MDIO_CLK_DIV,
384
        top_gen_host_inst.EG_ADDR = EG_ADDR,
385
        top_gen_host_inst.ENA_HASH = ENA_HASH,
386
        top_gen_host_inst.STAT_CNT_ENA = STAT_CNT_ENA,
387
                top_gen_host_inst.ENABLE_EXTENDED_STAT_REG = ENABLE_EXTENDED_STAT_REG,
388
        top_gen_host_inst.ING_FIFO = ING_FIFO,
389
        top_gen_host_inst.ENABLE_ENA = ENABLE_ENA,
390
        top_gen_host_inst.ENABLE_HD_LOGIC = ENABLE_HD_LOGIC,
391
        top_gen_host_inst.REDUCED_INTERFACE_ENA = REDUCED_INTERFACE_ENA,
392
        top_gen_host_inst.ENABLE_MDIO = ENABLE_MDIO,
393
        top_gen_host_inst.ENABLE_MAGIC_DETECT = ENABLE_MAGIC_DETECT,
394
        top_gen_host_inst.ENABLE_MIN_FIFO = ENABLE_MIN_FIFO,
395
        top_gen_host_inst.ENABLE_PADDING = !ENABLE_MACLITE, //1,
396
        top_gen_host_inst.ENABLE_LGTH_CHECK = !ENABLE_MACLITE, //1,
397
        top_gen_host_inst.GBIT_ONLY = !ENABLE_MACLITE | MACLITE_GIGE, //1,
398
        top_gen_host_inst.MBIT_ONLY = !ENABLE_MACLITE | !MACLITE_GIGE, //1,
399
        top_gen_host_inst.REDUCED_CONTROL = ENABLE_MACLITE, //0,
400
        top_gen_host_inst.CRC32S1L2_EXTERN = CRC32S1L2_EXTERN,
401
        top_gen_host_inst.ENABLE_GMII_LOOPBACK = ENABLE_GMII_LOOPBACK,
402
        top_gen_host_inst.ING_ADDR = ING_ADDR,
403
        top_gen_host_inst.CRC32DWIDTH = CRC32DWIDTH,
404
        top_gen_host_inst.CUST_VERSION = CUST_VERSION,
405
        top_gen_host_inst.CRC32CHECK16BIT = CRC32CHECK16BIT,
406
        top_gen_host_inst.ENABLE_SHIFT16 = ENABLE_SHIFT16,
407
        top_gen_host_inst.INSERT_TA = INSERT_TA,
408
        top_gen_host_inst.RAM_TYPE = RAM_TYPE,
409
        top_gen_host_inst.ENABLE_MAC_FLOW_CTRL  = ENABLE_MAC_FLOW_CTRL,
410
        top_gen_host_inst.ENABLE_MAC_TXADDR_SET = ENABLE_MAC_TXADDR_SET,
411
        top_gen_host_inst.ENABLE_MAC_RX_VLAN    = ENABLE_MAC_RX_VLAN,
412
                top_gen_host_inst.SYNCHRONIZER_DEPTH    = SYNCHRONIZER_DEPTH,
413
        top_gen_host_inst.ENABLE_MAC_TX_VLAN    = ENABLE_MAC_TX_VLAN;
414
 
415
 
416
 
417
 
418
endmodule

powered by: WebSVN 2.1.0

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