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

Subversion Repositories sgmii

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

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 6 jefflieu
        reg [07:00] r8_LstRxD;
39 4 jefflieu
        integer RxPtr;
40
        reg ReceiveEnable;
41
 
42
        assign w_Sop = ~r_Active & w_Active;
43
        assign w_Eop = r_Active & (~w_Active);
44
 
45
 
46
                initial
47
                        begin
48
                        RxPktCnt=0;
49
                        o_TxEN=0;
50
                        o_TxER=0;
51
                        o8_TxD=0;
52
                        ReceiveEnable <= 1'b0;
53
                        end
54
 
55
        assign w_Active=i_RxDV|i_RxER;
56
        always@(posedge i_RxClk)
57
                begin
58 6 jefflieu
                        r_Active <= w_Active;
59
                        r8_LstRxD       <= i8_RxD;
60 4 jefflieu
                end
61
 
62
 
63
 
64
 
65
        task automatic tsk_ReceivePkt;
66
                output [07:00] ov_ReceivedPkt[0:10000];
67
                output integer FrameSize;
68
                output integer ExtCycles;
69
                output integer ErrCycles;
70
 
71
                integer Octet;
72
        begin
73
                ExtCycles = 0;
74
                ErrCycles = 0;
75
                for(Octet=0;Octet<10000;Octet=Octet+1)
76
                        ov_ReceivedPkt[Octet]=0;
77
                Octet=0;
78
                while(w_Active!=1'b1||r_Active!=1'b0)
79
                        @(posedge i_RxClk);
80 6 jefflieu
                while(w_Active!=1'b1||i8_RxD!=8'hD5||r8_LstRxD!=8'h55)
81
                        @(posedge i_RxClk);
82
 
83
                @(posedge i_RxClk);
84
                $display("MAC: Start Receiving");
85 4 jefflieu
                while(r_Active!=1'b1||w_Active!=1'b0)
86
                begin
87
                        if(i_RxDV==1'b1 && i_RxER==1'b0)
88
                                begin
89
                                ov_ReceivedPkt[Octet]=i8_RxD;
90
                                Octet=Octet+1;
91
                                end
92
                        else if(i_RxDV==1'b0 && i_RxER==1'b1) begin
93
                                case(i8_RxD)
94
                                8'h0F: begin
95
                                                ExtCycles = ExtCycles+1;
96
                                           end
97
                                8'h1F: begin
98
                                                $display("Error Propagation");
99
                                                ExtCycles = ExtCycles+1;
100
                                                ErrCycles = ErrCycles+1;
101
                                                end
102
                                default: $display("Unknown %x",i8_RxD);
103
                                endcase
104
                                end
105
                        else if(i_RxDV==1'b1 && i_RxER==1'b1) begin
106
                                        ErrCycles = ErrCycles+1;
107
                        end
108
                        @(posedge i_RxClk);
109
                end
110
                FrameSize=Octet;
111
                $display("MAC: Packet Received with %d bytes",FrameSize);
112
        end
113
        endtask
114
 
115
        task automatic tsk_TransmitPkt;
116
                ref reg [7:0] iv_TransmitPkt[0:10000];
117
                input integer PktSize;
118
                input integer PktIFG;
119
 
120
                integer Octet;
121
        begin
122 6 jefflieu
                for(Octet=0;Octet<8;Octet++)
123
                        begin
124
                        @(posedge i_TxClk);#1;
125
                        o_TxEN = 1'b1;
126
                        o_TxER = 1'b0;
127
                        o8_TxD = (Octet==7)?8'hD5:8'h55;
128
                        end
129 4 jefflieu
                for(Octet=0;Octet
130
                                begin
131
                                @(posedge i_TxClk);#1;
132
                                o_TxEN = 1'b1;
133
                                o_TxER = 1'b0;
134
                                o8_TxD = iv_TransmitPkt[Octet];
135
                                end
136
                                @(posedge i_TxClk);#1;
137
                                o_TxEN = 1'b0;
138
                        //Interframe Gap
139
                        for(Octet=0;Octet
140
                                begin @(posedge i_TxClk);#1; end
141
        end
142
        endtask
143
 
144
 
145
endmodule

powered by: WebSVN 2.1.0

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