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

Subversion Repositories sgmii

[/] [sgmii/] [trunk/] [sim/] [mMACEmulator.sv] - Blame information for rev 5

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 jefflieu
/*
2
Developed by Jeff Lieu (lieumychuong@gmail.com)
3
 
4
File            :
5
Description     :
6
 
7
Remarks         :
8
 
9
Revision        :
10
        Date    Author  Description
11
 
12
*/
13
`timescale 1ns/10ps
14
 
15
module mMACEmulator(
16
        input i_RxClk,
17
        input i_TxClk,
18
        input [07:00] i8_RxD,
19
        input i_RxDV,
20
        input i_RxER,
21
 
22
 
23
        output reg [07:00] o8_TxD,
24
        output reg o_TxEN,
25
        output reg o_TxER,
26
 
27
        input i_Reset_L);
28
 
29
        reg r_Active;
30
        integer Octet;
31
        integer ExtCycles;
32
        integer ErrCycles;
33
        integer RxPktCnt;
34
        wire w_Active;
35
        wire w_Sop;
36
        wire w_Eop;
37
        reg [07:00] ReceivedPkt[0:10000];
38
        integer RxPtr;
39
        reg ReceiveEnable;
40
 
41
        assign w_Sop = ~r_Active & w_Active;
42
        assign w_Eop = r_Active & (~w_Active);
43
 
44
 
45
                initial
46
                        begin
47
                        RxPktCnt=0;
48
                        o_TxEN=0;
49
                        o_TxER=0;
50
                        o8_TxD=0;
51
                        ReceiveEnable <= 1'b0;
52
                        end
53
 
54
        assign w_Active=i_RxDV|i_RxER;
55
        always@(posedge i_RxClk)
56
                begin
57
                        r_Active <= w_Active;
58
                end
59
 
60
 
61
 
62
 
63
        task automatic tsk_ReceivePkt;
64
                output [07:00] ov_ReceivedPkt[0:10000];
65
                output integer FrameSize;
66
                output integer ExtCycles;
67
                output integer ErrCycles;
68
 
69
                integer Octet;
70
        begin
71
                ExtCycles = 0;
72
                ErrCycles = 0;
73
                for(Octet=0;Octet<10000;Octet=Octet+1)
74
                        ov_ReceivedPkt[Octet]=0;
75
                Octet=0;
76
                while(w_Active!=1'b1||r_Active!=1'b0)
77
                        @(posedge i_RxClk);
78
                while(r_Active!=1'b1||w_Active!=1'b0)
79
                begin
80
                        if(i_RxDV==1'b1 && i_RxER==1'b0)
81
                                begin
82
                                if(r_Active==1'b0) $display("MAC: Start Receiving");
83
                                ov_ReceivedPkt[Octet]=i8_RxD;
84
                                Octet=Octet+1;
85
                                //$write("%x ",i8_RxD);
86
                                end
87
                        else if(i_RxDV==1'b0 && i_RxER==1'b1) begin
88
                                case(i8_RxD)
89
                                8'h0F: begin
90
                                                ExtCycles = ExtCycles+1;
91
                                           end
92
                                8'h1F: begin
93
                                                $display("Error Propagation");
94
                                                ExtCycles = ExtCycles+1;
95
                                                ErrCycles = ErrCycles+1;
96
                                                end
97
                                default: $display("Unknown %x",i8_RxD);
98
                                endcase
99
                                end
100
                        else if(i_RxDV==1'b1 && i_RxER==1'b1) begin
101
                                        ErrCycles = ErrCycles+1;
102
                                        //ov_ReceivedPkt[Octet]=i8_RxD;
103
                                        //Octet = Octet+1;
104
                        end
105
                        @(posedge i_RxClk);
106
                end
107
                FrameSize=Octet;
108
                $display("MAC: Packet Received with %d bytes",FrameSize);
109
        end
110
        endtask
111
 
112
        task automatic tsk_TransmitPkt;
113
                ref reg [7:0] iv_TransmitPkt[0:10000];
114
                input integer PktSize;
115
                input integer PktIFG;
116
 
117
                integer Octet;
118
        begin
119
                for(Octet=0;Octet
120
                                begin
121
                                @(posedge i_TxClk);#1;
122
                                o_TxEN = 1'b1;
123
                                o_TxER = 1'b0;
124
                                o8_TxD = iv_TransmitPkt[Octet];
125
                                end
126
                                @(posedge i_TxClk);#1;
127
                                o_TxEN = 1'b0;
128
                        //Interframe Gap
129
                        for(Octet=0;Octet
130
                                begin @(posedge i_TxClk);#1; end
131
        end
132
        endtask
133
 
134
 
135
endmodule

powered by: WebSVN 2.1.0

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