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

Subversion Repositories sgmii

[/] [sgmii/] [trunk/] [build/] [OpenCore_MAC/] [GbMAC_test.v] - Blame information for rev 26

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 26 jefflieu
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// Company: 
4
// Engineer: 
5
// 
6
// Create Date:    13:20:11 06/01/2010 
7
// Design Name: 
8
// Module Name:    GbMAC_test 
9
// Project Name: 
10
// Target Devices: 
11
// Tool versions: 
12
// Description: 
13
//
14
// Dependencies: 
15
//
16
// Revision: 
17
// Revision 0.01 - File Created
18
// Additional Comments: 
19
//
20
//////////////////////////////////////////////////////////////////////////////////
21
module GbMAC_test(
22
 
23
         input PhyA_RxClk,
24
         input PhyA_RxCtl,
25
         input [3:0] PhyA_RxD,
26
         output PhyA_TxClk,
27
         output PhyA_TxCtl,
28
         output [3:0] PhyA_TxD,
29
 
30
        //---------------------------------------------------------------------
31
        //-- pcix bus signals
32
        //----------------------------------------------------------------------         
33
//              inout [31:0] pcixad,
34
//              inout [3:0]  pcixc,                        
35
//              inout pcixpar,                  
36
//              inout pcixframe_n,
37
//              inout pcixtrdy_n,
38
//              inout pcixirdy_n,
39
//              inout pcixstop_n,
40
//              inout pcixdevsel_n,
41
//              input pcixidsel,
42
//              inout pcixperr_n,
43
//              inout pcixserr_n,
44
//              output pcixint_n,
45
//              output pcixreq_n,
46
//              input pcixgnt_n,
47
//              input pcixreset_n,
48
                input V4_PCIXClk,
49
 
50
         output V4_Uart_Tx,
51
         input V4_Uart_Rx,
52
 
53
         input V4_CLK_125M,
54
    input V4_CLK_Sys,
55
    input V4_rst_n
56
    );
57
 
58
//This test module consists of 
59
//1) MAC block
60
//2) GMII-RGMII adapter
61
//3) State machine for intialization
62
//4) State machine for Checking incoming packets
63
//5) State machine for Generating tramitting packets
64
 
65
// OPB BUS
66
wire [0:0] OPB_CS_n;
67
wire [11:0] OPB_Addr;
68
wire OPB_ADS;
69
wire [1:0] OPB_BE;
70
wire OPB_RnW;
71
wire OPB_Rd_n;
72
wire OPB_Wr_n;
73
wire OPB_Burst;
74
reg  OPB_Rdy;
75
wire [15:0] OPB_Din;
76
wire [15:0] OPB_Dout;
77
wire [0:31] OPB_outD;
78
wire [0:31] OPB_inD;
79
 
80
//PCI-X signals
81
///////////////////////////////////////////
82
wire [63:0] s_data_out_i;
83
wire [7:0]  s_cbea_out_i;
84
wire [63:0] s_data_in_i;
85
wire s_addl_vld_i;
86
wire s_addh_vld_i;
87
wire s_attr_vld_i;
88
wire s_datl_vld_i;
89
wire s_dath_vld_i;
90
wire s_data_nxt_i;
91
wire s_tabort_i;
92
wire s_retry_i;
93
wire s_discon_i;
94
wire s_nxtadb_i;
95
wire s_wait_i;
96
wire s_split_i;
97
wire s_write_i;
98
wire [15:0] s_hit_i;
99
wire s_done_i;
100
wire [63:0]m_data_out_i;
101
wire [7:0] m_cbea_in_i;
102
wire [63:0]m_data_in_i;
103
wire m_addl_vld_i;
104
wire m_addh_vld_i;
105
wire m_attr_vld_i;
106
wire m_datl_vld_i;
107
wire m_dath_vld_i;
108
wire m_data_nxt_i;
109
wire m_mabort_i;
110
wire m_retry_i;
111
wire m_nxtadb_i;
112
wire m_discon_i;
113
wire m_tabort_i;
114
wire m_split_i;
115
wire m_finish_i;
116
wire m_done_i;
117
wire m_req_i;
118
wire ad_io_i;
119
wire cbe_io_i;
120
wire uperr_n_i;
121
wire userr_n_i;
122
wire int_n_i;
123
wire [95:0] ms_stat_i;
124
wire pme_n_i;
125
wire [47:0] pm_stat_i;
126
wire [31:0] csr_i;
127
wire [47:0] csrx_i;
128
wire pciw_en_i;
129
wire pcix_en_i;
130
wire rtr_i;
131
wire [511:0] cfg_bus_i;
132
wire pci_core_rst_i;
133
wire pci_core_clk_i;
134
 
135
wire csr_systemerr_n_i;
136
wire csrx_unexpected_i;
137
wire csrx_discarded_i;
138
wire pcixpar64_i;
139
wire pcixreq64_n_i;
140
wire pcixack64_n_i;
141
 
142
/********************************************************/
143
 
144
        //MAC Module signals
145
        wire [2:0] gEMAC_Speed;
146
        //user interface RX 
147
        wire Rx_ra, Rx_pa,Tx_wa, Tx_pa, Rx_sop, Rx_eop, Tx_sop, Tx_eop;
148
        reg Tx_wr;
149
        reg Rx_rd;
150
        wire [31:0] Rx_data, Tx_data;
151
        wire [1:0] Rx_BE, Tx_BE;
152
        wire pkt_length_fifo_rd, pkt_length_fifo_ra;
153
        wire [15:0] pkt_length_fifo_data;
154
        wire Carrier_Sense, Colision_Detect;
155
 
156
        //host interface
157
        wire MAC_RegSelect;
158
        wire MAC_RdnWr;
159
        wire [15:0] MAC_RegDin;
160
        wire [15:0] MAC_RegDout;
161
        wire [7:0] MAC_RegAddr;
162
 
163
        //initializing statemachine
164
        reg [7:0] init_state;
165
 
166
 
167
//RGMII-GMII adaptation module
168
        wire [7:0] GMII_TxD;
169
        wire GMII_TxEN, GMII_TxER, GTx_Clk;
170
        wire [7:0] GMII_RxD;
171
        wire GMII_RxDV, GMII_RxER, GRx_Clk;
172
        reg  CE, Sync_Rst;
173
 
174
        wire [3:0] RGMII_RxD;
175
        wire [3:0] RGMII_TxD;
176
        wire RGMII_RxCtl, RGMII_RxClk;
177
        wire RGMII_TxCtl, RGMII_TxClk;
178
 
179
        wire [3:0] RxPhyA_Stat;
180
        wire [3:0] RxPhyB_Stat;
181
 
182
        wire GRxB_Clk, GTxB_Clk;
183
 
184
//Packet generate
185
        reg [10:0] cntr;
186
        reg RxDV_d;
187
        reg RxD_d;
188
        reg [7:0] Txdata;
189
 
190
        assign PhyA_TxD = RGMII_TxD;
191
        assign PhyA_TxClk = RGMII_TxClk;
192
        assign PhyA_TxCtl = RGMII_TxCtl;
193
 
194
        assign RGMII_RxD  = PhyA_RxD;
195
        assign RGMII_RxCtl= PhyA_RxCtl;
196
        assign RGMII_RxClk= PhyA_RxClk;
197
 
198
        assign CLK_66M = V4_PCIXClk;
199
 
200
        wire CLK_125M;
201
        wire CLK_25M;
202
        wire V4_rst;
203
        wire uB_rst;
204
        reg pwr_on_rst;
205
 
206
        wire MAC_Sysclk;
207
        wire MAC_Regclk;
208
 
209
        wire [35:0] LoopbackFIFO_din,LoopbackFIFO_dout;
210
        wire LoopbackFIFO_empty;
211
        wire LoopbackFIFO_full;
212
        wire LoopbackFIFO_wren;
213
        reg LoopbackFIFO_rden;
214
 
215
        reg one_sec_pulse;
216
        reg [27:0] one_sec;
217
        reg [31:0] rx_rate;
218
        reg [31:0] rx_rate_reg;
219
 
220
        wire [0:0] ila_trig0, ila_trig1, ila_trig2;
221
        wire [63:0] ila_data_bus;
222
        wire [35:0] ila_control;
223
        wire [23:0] MAC_Monitoring;
224
 
225
        LoopbackFIFO lpbff(
226
        .clk(CLK_125M),
227
        .din(LoopbackFIFO_din),
228
        .rd_en(LoopbackFIFO_rden),
229
        .wr_en(LoopbackFIFO_wren),
230
        .dout(LoopbackFIFO_dout),
231
        .empty(),
232
        .full(),
233
        .almost_empty(LoopbackFIFO_empty),
234
        .almost_full(LoopbackFIFO_full));
235
 
236
        assign LoopbackFIFO_din = {Rx_BE,Rx_sop,Rx_eop,Rx_data};
237
        assign LoopbackFIFO_wren= Rx_pa;
238
 
239
 
240
        always@(posedge(CLK_125M))
241
        begin
242
          if(!V4_rst_n)
243
                begin
244
                        Sync_Rst <= 1;
245
                        CE <= 0;
246
                end
247
                else
248
                begin
249
                        Sync_Rst <= 0;
250
                        CE <= 1;
251
                end
252
        end
253
 
254
        assign V4_rst = (~V4_rst_n)|pwr_on_rst;
255
        assign uB_rst = ~ V4_rst;
256
 
257
Clocks Clockings(.V4_Clk_125M(V4_CLK_125M),.V4_Clk_27M(),.V4_Clk_13M5(),
258
                                                .Clk_125M(CLK_125M),.Clk_27M(),.Clk_13M5(),.Clk_25M(CLK_25M),
259
                                                .rst(0));
260
 
261
reg [3:0] pwr_on_cnt;
262
 
263
                initial
264
                begin
265
                pwr_on_rst <= 1;
266
                pwr_on_cnt <= 0;
267
                end
268
 
269
        always@(posedge CLK_125M)
270
        begin
271
                if (pwr_on_cnt!=15) pwr_on_cnt <= pwr_on_cnt+1;
272
                if (pwr_on_cnt<15 && pwr_on_cnt>9)
273
                                        pwr_on_rst <= 1;
274
                                        else
275
                                        pwr_on_rst <= 0;
276
        end
277
 
278
 
279
RGMII_GMII_Adaptation RGMIIAdp(.TxD(GMII_TxD), .TxEN(GMII_TxEN), .TxER(GMII_TxER), .TxClk(GTx_Clk),
280
                                                                          .RxD(GMII_RxD), .RxDV(GMII_RxDV), .RxER(GMII_RxER), .RxClk(GRx_Clk),
281
                                                                         .RGMII_TxD(RGMII_TxD),
282
                                                                         .RGMII_TxCtl(RGMII_TxCtl),
283
                                                                         .RGMII_TxClk(RGMII_TxClk),
284
                                                                         .RGMII_RxD(RGMII_RxD),
285
                                                                         .RGMII_RxCtl(RGMII_RxCtl),
286
                                                                         .RGMII_RxClk(RGMII_RxClk),
287
                                                                         .Status(RxPhyA_Stat),
288
                                                                         .CE(CE),
289
                                                                         .rst(V4_rst)
290
                                                                         );
291
        always@(posedge GRx_Clk)
292
        begin
293
                RxDV_d <= GMII_RxDV;
294
                if (GMII_RxDV & (~ RxDV_d)) cntr <= 0;
295
                else if(GMII_RxDV & RxDV_d) cntr <= cntr+1;
296
        end
297
 
298
        always@(cntr,GMII_RxD)
299
        begin
300
                if(cntr==13) Txdata <= 13; else
301
                if(cntr==19) Txdata <= 22; else
302
                        Txdata <= GMII_RxD;
303
        end
304
 
305
assign MAC_Sysclk = CLK_125M;
306
assign MAC_Regclk = CLK_66M;
307
//MAC Module
308
MAC_top  gMAC(                //system signals
309
.Reset(V4_rst),
310
.Clk_125M(CLK_125M),
311
.Clk_user(MAC_Sysclk),
312
.Clk_reg(MAC_Regclk),
313
.Speed(gEMAC_Speed),
314
//user interface RX 
315
.Rx_mac_ra(Rx_ra),
316
.Rx_mac_rd(Rx_rd),
317
.Rx_mac_data(Rx_data),
318
.Rx_mac_BE(Rx_BE),
319
.Rx_mac_pa(Rx_pa),
320
.Rx_mac_sop(Rx_sop),
321
.Rx_mac_eop(Rx_eop),
322
//user interface 
323
.Tx_mac_wa(Tx_wa),
324
.Tx_mac_wr(Tx_wr),
325
.Tx_mac_data(Tx_data),
326
.Tx_mac_BE(Tx_BE),//big endian
327
.Tx_mac_sop(Tx_sop),
328
.Tx_mac_eop(Tx_eop),
329
//pkg_lgth fifo
330
.Pkg_lgth_fifo_rd(pkt_length_fifo_rd),
331
.Pkg_lgth_fifo_ra(pkt_length_fifo_ra),
332
.Pkg_lgth_fifo_data(pkt_length_fifo_data),
333
//Phy interface          
334
//Phy interface         
335
.Gtx_clk(GTx_Clk),//used only in GMII mode
336
.Rx_clk(GRx_Clk),
337
.Tx_clk(CLK_25M),//used only in MII mode
338
.Tx_er(GMII_TxER),
339
.Tx_en(GMII_TxEN),
340
.Txd(GMII_TxD),
341
.Rx_er(GMII_RxER),
342
.Rx_dv(GMII_RxDV),
343
.Rxd(GMII_RxD),
344
.Crs(Carrier_Sense),
345
.Col(Colision_Detect),
346
//host interface
347
.CSB(MAC_RegSelect),
348
.WRB(MAC_RdnWr),
349
.CD_in(MAC_RegDin),
350
.CD_out(MAC_RegDout),
351
.CA(MAC_RegAddr),
352
.Monitoring(MAC_Monitoring),
353
//mdx
354
.Mdo(),                // MII Management Data Output
355
.MdoEn(),              // MII Management Data Output Enable
356
.Mdi(0),
357
.Mdc()                      // MII Management Data Clock       
358
);
359
 
360
                //Route packet back to transmitter
361
                assign Tx_data = LoopbackFIFO_dout[31:0];
362
                assign Tx_sop = LoopbackFIFO_dout[33];
363
                assign Tx_eop = LoopbackFIFO_dout[32];
364
                assign Tx_BE =  LoopbackFIFO_dout[35:34];
365
 
366
                assign MAC_RegSelect = OPB_CS_n;
367
                assign MAC_RegDin = OPB_outD[0:15];
368
                assign OPB_inD = {MAC_RegDout,16'h0000};
369
                assign MAC_RegAddr = OPB_Addr[7:0];
370
                assign MAC_RdnWr = OPB_RnW;
371
 
372
//Initializing machine
373
                always@(posedge MAC_Regclk or posedge V4_rst)
374
                begin
375
                if(V4_rst)
376
                        begin
377
                        OPB_Rdy <= 0;
378
                        end
379
                else
380
                        begin
381
                                OPB_Rdy <= ~OPB_CS_n;
382
                        end
383
                end
384
 
385
 
386
 
387
                assign Carrier_Sense = 1;
388
                assign Colision_Detect = 0;
389
 
390
                wire one_sec_pulse_long;
391
 
392
                assign one_sec_pulse_long = (one_sec>0 && one_sec<5)?1:0;
393
 
394
                always@(posedge MAC_Sysclk or posedge V4_rst)
395
                if(V4_rst)
396
                begin
397
                one_sec <=0;
398
                one_sec_pulse <= 0;
399
                Rx_rd <= 0;
400
                Tx_wr <= 0;
401
                LoopbackFIFO_rden <= 0;
402
                end
403
                else
404
                begin
405
                        if(one_sec == 125000000) one_sec <= 1; else one_sec <= one_sec+1;
406
                        if(one_sec == 125000000) one_sec_pulse <= 1; else one_sec_pulse <= 0;
407
                        if(one_sec_pulse)
408
                                begin
409
                                rx_rate <= 0;
410
                                rx_rate_reg <= rx_rate;
411
                                end
412
                        else
413
                                begin
414
                                if(Rx_sop) rx_rate <= rx_rate+1;
415
                                end
416
                        //start to read whenever data is available;
417
                        Rx_rd <= Rx_ra;// & (~LoopbackFIFO_full);//Start transfer only when Tx is ready also
418
                        //LoopbackFIFO_rden <= Tx_wa & (~LoopbackFIFO_empty);
419
                        //Tx_wr <= LoopbackFIFO_rden;
420
                end
421
 
422
 
423
 
424
 
425
 
426
//pci CORE
427
/*
428
pcix_lc i_pcix_lc(
429
         .ad_io(pcixad),
430
    //.ad_io(63 :32)         => ad_io_i(63 downto 32),
431
    .cbe_io(pcixc),
432
    .par_io(pcixpar),
433
    //cbe_io(7 downto 4)          => cbe_io_i(7 downto 4),
434
    //par64_io                    => pcixpar64_i,
435
    .frame_io(pcixframe_n),
436
    //req64_io                    => pcixreq64_n_i,
437
    .trdy_io(pcixtrdy_n),
438
    .irdy_io(pcixirdy_n),
439
    .stop_io(pcixstop_n),
440
    .devsel_io(pcixdevsel_n),
441
    //.ack64_io(pcixack64_n_i),
442
    .idsel_i(pcixidsel),
443
    .perr_io(pcixperr_n),
444
    .serr_io(pcixserr_n),
445
    .int_o(pcixint_n),
446
    //pme_o                       => open,
447
    .req_o(pcixreq_n),
448
    .gnt_i(pcixgnt_n),
449
    .rst_i(pcixreset_n),
450
    .clk_i(v4_pcixclk),
451
 
452
    .s_data_out(s_data_out_i),
453
    .s_cbea_out(s_cbea_out_i),
454
    .s_data_in(s_data_in_i),
455
    .s_addl_vld(s_addl_vld_i),
456
    .s_addh_vld(s_addh_vld_i),
457
    .s_attr_vld(s_attr_vld_i),
458
    .s_datl_vld(s_datl_vld_i),
459
    .s_dath_vld                  (s_dath_vld_i),
460
    .s_data_nxt                  (s_data_nxt_i),
461
    .s_tabort                    (s_tabort_i),
462
    .s_retry                     (s_retry_i),
463
    .s_discon                    (s_discon_i),
464
    .s_nxtadb                    (s_nxtadb_i),
465
    .s_wait                      (s_wait_i),
466
    .s_split                     (s_split_i),
467
    .s_write                     (s_write_i),
468
    .s_done                      (s_done_i),
469
    .s_hit                       (s_hit_i),
470
 
471
    .m_data_out                  (m_data_out_i),
472
    .m_cbea_in                   (m_cbea_in_i),
473
    .m_data_in                   (m_data_in_i),
474
    .m_addl_vld                  (m_addl_vld_i),
475
    .m_addh_vld                  (m_addh_vld_i),
476
    .m_attr_vld                  (m_attr_vld_i),
477
    .m_datl_vld                  (m_datl_vld_i),
478
    .m_dath_vld                  (m_dath_vld_i),
479
    .m_data_nxt                  (m_data_nxt_i),
480
    .m_mabort                    (m_mabort_i),
481
    .m_retry                     (m_retry_i),
482
    .m_nxtadb                    (m_nxtadb_i),
483
    .m_discon                    (m_discon_i),
484
    .m_tabort                    (m_tabort_i),
485
    .m_split                     (m_split_i),
486
    .m_finish                    (m_finish_i),
487
    .m_done                      (m_done_i),
488
    .m_req                       (m_req_i),
489
 
490
    .perr_n                      (uperr_n_i),
491
    .serr_n                      (userr_n_i),
492
    .int_n                       (int_n_i),
493
    .ms_stat                     (ms_stat_i),
494
    .pme_n                       (pme_n_i),
495
    .pm_stat                     (pm_stat_i),
496
    .csr                         (csr_i),
497
    .csr_systemerr_n             (csr_systemerr_n_i),
498
    .csrx_unexpected             (csrx_unexpected_i),
499
    .csrx_discarded              (csrx_discarded_i),
500
    .csrx                        (csrx_i),
501
    .pciw_en                     (pciw_en_i),
502
    .pcix_en                     (pcix_en_i),
503
    .rtr                         (rtr_i),
504
    .cfg                         (cfg_bus_i),
505
 
506
    .rst                         (pci_core_rst_i),
507
    .clk                         (pci_core_clk_i)
508
    );
509
*/
510
        //Microblaze 
511
        uBlaze microBlaze
512
  ( .uBlaze_Int(one_sec_pulse_long),
513
         .fpga_0_RS232_req_to_send_pin(),
514
    .fpga_0_RS232_RX_pin(V4_Uart_Rx),
515
    .fpga_0_RS232_TX_pin(V4_Uart_Tx),
516
    .sys_clk_pin(CLK_66M),
517
    .sys_rst_pin(uB_rst),
518
    .PRH_Clk_pin(CLK_66M),
519
    .PRH_Rst_pin(V4_rst),
520
    .PRH_CS_n_pin(OPB_CS_n),
521
    .PRH_Addr_pin(OPB_Addr),
522
    .PRH_ADS_pin(OPB_ADS),
523
    .PRH_BE_pin(OPB_BE),
524
    .PRH_RNW_pin(OPB_RnW),
525
    .PRH_Rd_n_pin(OPB_Rd_n),
526
    .PRH_Wr_n_pin(OPB_Wr_n),
527
    .PRH_Burst_pin(OPB_Burst),
528
    .PRH_Rdy_pin(OPB_Rdy),
529
    .PRH_Data_I_pin(OPB_inD),
530
    .PRH_Data_O_pin(OPB_outD),
531
    .PRH_Data_T_pin());
532
 
533
        //Monitoring
534
        ila i_ila
535
    (
536
      .control(ila_control),
537
      .clk(GRx_Clk),
538
      .data(ila_data_bus),
539
      .trig0(ila_trig0),
540
      .trig1(ila_trig1),
541
      .trig2(ila_trig2)
542
    );
543
 
544
 
545
 
546
        assign ila_data_bus[31:0] =  {0,GMII_RxER,GMII_RxDV,GMII_RxD};
547
        assign ila_data_bus[47:32] = {0};
548
        assign ila_data_bus[63:48] = {0};
549
        assign ila_trig0 = GMII_RxDV;
550
        assign ila_trig1 = GMII_RxER;
551
        assign ila_trig2 = 0;
552
 
553
        icon i_icon
554
    (
555
      .control0(ila_control)
556
    );
557
 
558
endmodule
559
 
560
module icon
561
  (
562
      control0
563
  );
564
  output [35:0] control0;
565
endmodule
566
 
567
module ila
568
  (
569
    control,
570
    clk,
571
    data,
572
    trig0,
573
    trig1,
574
    trig2
575
  );
576
  input [35:0] control;
577
  input clk;
578
  input [63:0] data;
579
  input [0:0] trig0;
580
  input [0:0] trig1;
581
  input [0:0] trig2;
582
endmodule

powered by: WebSVN 2.1.0

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