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

Subversion Repositories ethmac10g

[/] [ethmac10g/] [tags/] [V10/] [rxReceiveEngine.v] - Blame information for rev 72

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 fisher5090
`timescale 1ns / 1ps
2
////////////////////////////////////////////////////////////////////////////////
3
// Company: 
4
// Engineer:
5
//
6
// Create Date:    16:35:47 11/21/05
7
// Design Name:    
8
// Module Name:    rxReceiveEngine
9
// Project Name:   
10
// Target Device:  
11
// Tool versions:  
12
// Description:
13
//
14
// Dependencies:
15
// 
16
// Revision:
17
// Revision 0.01 - File Created
18
// Additional Comments:
19
// 
20
////////////////////////////////////////////////////////////////////////////////
21
module rxReceiveEngine(rxclk_in, reset_in, rxd64, rxc8, rxStatRegPlus,reset_out,
22
                          cfgRxRegData, rx_data, rx_data_valid, rx_good_frame, link_fault,
23
                          rx_bad_frame, rxCfgofRS, rxTxLinkFaul);
24
    input rxclk_in;
25
    input reset_in;
26
    input [63:0] rxd64;
27
    input [7:0] rxc8;
28
         output reset_out;
29
    output [12:0] rxStatRegPlus;
30
    input [52:0] cfgRxRegData;
31
    output [63:0] rx_data;
32
    output [7:0] rx_data_valid;
33
    output rx_good_frame;
34
    output rx_bad_frame;
35
         input [1:0] link_fault;
36
         output[2:0] rxCfgofRS;
37
    output [1:0] rxTxLinkFaul;
38
 
39
    wire rxclk;
40
         wire rxclk_180;
41
         wire rxclk_2x;
42
         wire locked;
43
         wire reset_dcm;
44
         wire reset;
45
 
46
         wire [47:0]MAC_Addr;    //MAC Address used in receiving control frame.
47
    wire      vlan_enable; //VLAN Enable
48
         wire      recv_enable; //Receiver Enable
49
         wire      inband_fcs;  //In-band FCS Enable, when this bit is '1', the MAC will pass FCS up to client
50
         wire      jumbo_enable;//Jumbo Frame Enable
51
         wire      recv_rst;            //Receiver reset
52
 
53
         wire start_da, start_lt;
54
         wire tagged_frame, small_frame;
55
         wire [15:0] tagged_len;
56
         wire end_data_cnt, end_small_cnt, end_tagged_cnt, end_fcs;
57
         wire pause_frame;
58
         wire [47:0] da_addr;
59
         wire [15:0] lt_data;
60
         wire [31:0] crc_code;
61
         wire [7:0]  crc_valid;
62
         wire [7:0]  rxc_fifo;
63
         wire length_error;
64
         wire get_sfd, get_efd, get_error_code;
65
         wire receiving;
66
         wire receiving_frame;
67
 
68
         wire local_invalid;
69
         wire broad_valid;
70
         wire multi_valid;
71
 
72
 
73
         wire len_invalid;
74
         wire [12:0] integer_cnt, small_integer_cnt;
75
         wire [2:0] bits_more, small_bits_more;
76
         wire good_frame_get, bad_frame_get;
77
 
78
         wire crc_check_valid=0;
79
         wire crc_check_invalid=0;
80
 
81
 
82
         //////////////////////////////////////////
83
         // Read Receiver Configuration Word
84
         //////////////////////////////////////////
85
 
86
         assign  MAC_Addr = {cfgRxRegData[52:37], cfgRxRegData[31:0]};
87
         assign  vlan_enable = cfgRxRegData[36];
88
         assign  recv_enable = cfgRxRegData[35];
89
         assign  inband_fcs  = cfgRxRegData[34];
90
         assign  jumbo_enable = cfgRxRegData[33];
91
         assign  recv_rst = cfgRxRegData[32];
92
    assign  reset_dcm = reset_in | recv_rst;
93
         assign  reset = ~locked;
94
         assign  reset_out = reset;
95
 
96
         /////////////////////////////////////////
97
         // Write Configuration Words   of RS 
98
         /////////////////////////////////////////
99
 
100
         assign rxCfgofRS[0] = ~link_fault[0] & link_fault[1]; //get local fault
101
         assign rxCfgofRS[1] = link_fault[0] & link_fault[1];  //get remote fault
102
         assign rxCfgofRS[2] = locked;  //Receive DCM locked
103
 
104
         ////////////////////////////////////////
105
         // Receive Clock Generator
106
         //////////////////////////////////////// 
107
 
108
         rxClkgen rxclk_gen(.rxclk_in(rxclk_in),
109
                            .reset(reset_dcm),
110
                                                          .rxclk(rxclk),
111
                                                          .rxclk_180(rxclk_180),
112
                                                          .rxclk_2x(rxclk_2x),
113
                                                          .locked(locked)
114
                                                          );
115
 
116
         ///////////////////////////////////////
117
         // Upper Interface with client
118
         ///////////////////////////////////////
119
 
120
         rxFIFOMgnt upperinterface(.rxclk_180(rxclk_180), .reset(reset), .rxd64(rxd64), .rxc_fifo(rxc_fifo), .receiving(receiving),
121
                                   .recv_end(recv_end), .rx_data_valid(rx_data_valid), .inband_fcs(inband_fcs),
122
                                                                                .rx_data(rx_data));
123
 
124
         ///////////////////////////////////////
125
         // Reception Frame Spliter
126
         ///////////////////////////////////////
127
 
128
         rxFrameDepart frame_spliter(.rxclk(rxclk), .reset(reset), .rxclk_180(rxclk_180), .rxd64(rxd64), .rxc8(rxc8),.inband_fcs(inband_fcs),
129
                                     .start_da(start_da), .start_lt(start_lt), .tagged_frame(tagged_frame),.bits_more(bits_more),
130
                                                                                  .small_bits_more(small_bits_more), .tagged_len(tagged_len), .small_frame(small_frame),
131
                                                                                  .end_data_cnt(end_data_cnt), .end_small_cnt(end_small_cnt),.da_addr(da_addr),.lt_data(lt_data),
132
                                                                                  .crc_code(crc_code),.end_fcs(end_fcs), .crc_valid(crc_valid), .length_error(length_error),
133
                                                              .get_sfd(get_sfd), .get_efd(get_efd), .get_error_code(get_error_code),.receiving(receiving),
134
                                                                                  .rxc_fifo(rxc_fifo),.receiving_frame(receiving_frame)
135
                                                                                 );
136
 
137
         //////////////////////////////////////
138
         // Destination Address Checker
139
         //////////////////////////////////////
140
 
141
         rxDAchecker  dachecker(.local_invalid(local_invalid), .broad_valid(broad_valid), .multi_valid(multi_valid), .MAC_Addr(MAC_Addr),
142
                                .da_addr(da_addr));
143
                      defparam dachecker.Multicast = 48'h0180C2000001;
144
                      defparam dachecker.Broadcast = 48'hffffffffffff;
145
 
146
    /////////////////////////////////////
147
         // Length/Type field checker
148
         /////////////////////////////////////
149
 
150
         rxLenTypChecker lenchecker(.lt_data(lt_data), .tagged_len(tagged_len), .jumbo_enable(jumbo_enable), .tagged_frame(tagged_frame),
151
                                    .pause_frame(pause_frame), .small_frame(small_frame), .len_invalid(len_invalid), .vlan_enable(vlan_enable),
152
                                                                                 .integer_cnt(integer_cnt), .small_integer_cnt(small_integer_cnt), .inband_fcs(inband_fcs),
153
                                                                                 .bits_more(bits_more), .small_bits_more(small_bits_more)
154
                                                                                 );
155
 
156
         /////////////////////////////////////
157
         // Counters used in Receive Engine
158
         /////////////////////////////////////
159
 
160
    rxNumCounter counters(.rxclk(rxclk), .reset(reset), .start_data_cnt(start_data_cnt), .start_tagged_cnt(start_tagged_cnt), .small_frame(small_frame),
161
                          .integer_cnt(integer_cnt), .small_integer_cnt(small_integer_cnt), .tagged_frame(tagged_frame),
162
                                                                  .end_data_cnt(end_data_cnt), .end_small_cnt(end_small_cnt), .end_tagged_cnt(end_tagged_cnt)
163
                                                                  );
164
 
165
         /////////////////////////////////////
166
         // State Machine in Receive Process
167
         /////////////////////////////////////
168
 
169
    rxStateMachine statemachine(.rxclk(rxclk), .reset(reset), .recv_enable(recv_enable), .get_sfd(get_sfd), .local_invalid(local_invalid), .len_invalid(len_invalid),
170
                                     .end_data_cnt(end_data_cnt), .end_tagged_cnt(end_tagged_cnt), .tagged_frame(tagged_frame),
171
                                                                                  .length_error(length_error), .end_fcs(end_fcs), .crc_check_valid(crc_check_valid), .get_error_code(get_error_code),
172
                                                                                  .crc_check_invalid(crc_check_invalid), .start_da(start_da), .start_lt(start_lt), .inband_fcs(inband_fcs),
173
                                                                                  .start_data_cnt(start_data_cnt), .start_tagged_cnt(start_tagged_cnt), .receiving(receiving),
174
                                                                                  .recv_end(recv_end), .good_frame_get(good_frame_get), .bad_frame_get(bad_frame_get), .small_frame(small_frame),
175
                                                                                  .end_small_cnt(end_small_cnt),.receiving_frame(receiving_frame)
176
                                                                                  );
177
         assign rx_good_frame = good_frame_get;
178
         assign rx_bad_frame = bad_frame_get;
179
 
180
endmodule

powered by: WebSVN 2.1.0

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