1 //////////////////////////////////////////////////////////////////////
\r
3 //// MAC_tx_FF.v ////
\r
5 //// This file is part of the Ethernet IP core project ////
\r
6 //// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
\r
9 //// - Jon Gao (gaojon@yahoo.com) ////
\r
12 //////////////////////////////////////////////////////////////////////
\r
14 //// Copyright (C) 2001 Authors ////
\r
16 //// This source file may be used and distributed without ////
\r
17 //// restriction provided that this copyright statement is not ////
\r
18 //// removed from the file and that any derivative work contains ////
\r
19 //// the original copyright notice and the associated disclaimer. ////
\r
21 //// This source file is free software; you can redistribute it ////
\r
22 //// and/or modify it under the terms of the GNU Lesser General ////
\r
23 //// Public License as published by the Free Software Foundation; ////
\r
24 //// either version 2.1 of the License, or (at your option) any ////
\r
25 //// later version. ////
\r
27 //// This source is distributed in the hope that it will be ////
\r
28 //// useful, but WITHOUT ANY WARRANTY; without even the implied ////
\r
29 //// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
\r
30 //// PURPOSE. See the GNU Lesser General Public License for more ////
\r
33 //// You should have received a copy of the GNU Lesser General ////
\r
34 //// Public License along with this source; if not, download it ////
\r
35 //// from http://www.opencores.org/lgpl.shtml ////
\r
37 //////////////////////////////////////////////////////////////////////
\r
40 #(parameter TX_FF_DEPTH = 9)
\r
45 output reg [7:0]Fifo_data ,
\r
47 input Fifo_rd_finish ,
\r
48 input Fifo_rd_retry ,
\r
49 output reg Fifo_eop ,
\r
50 output reg Fifo_da ,
\r
51 output reg Fifo_ra ,
\r
52 output reg Fifo_data_err_empty ,
\r
53 output Fifo_data_err_full ,
\r
55 output reg Tx_mac_wa ,
\r
57 input [31:0] Tx_mac_data ,
\r
58 input [1:0] Tx_mac_BE ,//big endian
\r
63 input [4:0] Tx_Hwmark ,
\r
64 input [4:0] Tx_Lwmark ,
\r
65 output [31:0] debug0,
\r
66 output [31:0] debug1
\r
69 //******************************************************************************
\r
71 //******************************************************************************
\r
72 localparam MAC_byte3 =4'd00;
\r
73 localparam MAC_byte2 =4'd01;
\r
74 localparam MAC_byte1 =4'd02;
\r
75 localparam MAC_byte0 =4'd03;
\r
76 localparam MAC_wait_finish =4'd04;
\r
77 localparam MAC_retry =4'd08;
\r
78 localparam MAC_idle =4'd09;
\r
79 localparam MAC_FFEmpty =4'd10;
\r
80 localparam MAC_FFEmpty_drop =4'd11;
\r
81 localparam MAC_pkt_sub =4'd12;
\r
82 localparam MAC_FF_Err =4'd13;
\r
85 reg [3:0] Next_state_MAC ;
\r
88 localparam SYS_idle =4'd0;
\r
89 localparam SYS_WaitSop =4'd1;
\r
90 localparam SYS_SOP =4'd2;
\r
91 localparam SYS_MOP =4'd3;
\r
92 localparam SYS_DROP =4'd4;
\r
93 localparam SYS_EOP_ok =4'd5;
\r
94 localparam SYS_FFEmpty =4'd6;
\r
95 localparam SYS_EOP_err =4'd7;
\r
96 localparam SYS_SOP_err =4'd8;
\r
98 reg [3:0] Next_state_SYS;
\r
100 reg [TX_FF_DEPTH-1:0] Add_wr ;
\r
101 reg [TX_FF_DEPTH-1:0] Add_wr_ungray ;
\r
102 reg [TX_FF_DEPTH-1:0] Add_wr_gray ;
\r
103 reg [TX_FF_DEPTH-1:0] Add_wr_gray_dl1 ;
\r
104 reg [TX_FF_DEPTH-1:0] Add_wr_gray_dl2 ;
\r
106 reg [TX_FF_DEPTH-1:0] Add_rd ;
\r
107 reg [TX_FF_DEPTH-1:0] Add_rd_reg ;
\r
108 reg [TX_FF_DEPTH-1:0] Add_rd_gray ;
\r
109 reg [TX_FF_DEPTH-1:0] Add_rd_gray_dl1 ;
\r
110 reg [TX_FF_DEPTH-1:0] Add_rd_gray_dl2 ;
\r
111 reg [TX_FF_DEPTH-1:0] Add_rd_ungray ;
\r
115 wire[TX_FF_DEPTH-1:0] Add_wr_pluse;
\r
116 wire[TX_FF_DEPTH-1:0] Add_wr_pluse_pluse;
\r
117 reg [TX_FF_DEPTH-1:TX_FF_DEPTH-5] Add_rd_reg_dl1;
\r
119 reg [3:0] Current_state_MAC;
\r
120 reg [3:0] Current_state_MAC_reg;
\r
121 reg [3:0] Current_state_SYS;
\r
125 reg [35:0] Dout_reg;
\r
126 reg Packet_number_sub_edge;
\r
127 reg Packet_number_add;
\r
128 reg [5:0] Packet_number_inFF;
\r
129 reg [5:0] Packet_number_inFF_reg;
\r
134 reg Tx_mac_wr_dl1 ;
\r
135 reg [31:0] Tx_mac_data_dl1 ;
\r
136 reg [1:0] Tx_mac_BE_dl1 ;
\r
138 wire[1:0] Dout_BE ;
\r
141 wire[31:0] Dout_data ;
\r
142 reg Packet_number_sub_dl1 ;
\r
143 reg Packet_number_sub_dl2 ;
\r
144 reg [4:0] Fifo_data_count ;
\r
146 reg Pkt_sub_apply_tmp ;
\r
147 reg Pkt_sub_apply ;
\r
148 reg Add_rd_reg_rdy_tmp ;
\r
149 reg Add_rd_reg_rdy ;
\r
150 reg Add_rd_reg_rdy_dl1 ;
\r
151 reg Add_rd_reg_rdy_dl2 ;
\r
152 reg [4:0] Tx_Hwmark_pl ;
\r
153 reg [4:0] Tx_Lwmark_pl ;
\r
154 reg Add_rd_jump_tmp ;
\r
155 reg Add_rd_jump_tmp_pl1 ;
\r
157 reg Add_rd_jump_wr_pl1 ;
\r
159 //******************************************************************************
\r
160 //write data to from FF .
\r
162 //******************************************************************************
\r
163 always @ (posedge Clk_SYS or posedge Reset)
\r
165 Current_state_SYS <=SYS_idle;
\r
167 Current_state_SYS <=Next_state_SYS;
\r
169 always @ (Current_state_SYS or Tx_mac_wr or Tx_mac_sop or Full or AlmostFull
\r
171 case (Current_state_SYS)
\r
173 if (Tx_mac_wr&&Tx_mac_sop&&!Full)
\r
174 Next_state_SYS =SYS_SOP;
\r
176 Next_state_SYS =Current_state_SYS ;
\r
178 Next_state_SYS =SYS_MOP;
\r
181 Next_state_SYS =SYS_DROP;
\r
182 else if (Tx_mac_wr&&Tx_mac_sop)
\r
183 Next_state_SYS =SYS_SOP_err;
\r
184 else if (Tx_mac_wr&&Tx_mac_eop)
\r
185 Next_state_SYS =SYS_EOP_ok;
\r
187 Next_state_SYS =Current_state_SYS ;
\r
189 if (Tx_mac_wr&&Tx_mac_sop)
\r
190 Next_state_SYS =SYS_SOP;
\r
192 Next_state_SYS =SYS_idle;
\r
194 if (Tx_mac_wr&&Tx_mac_sop)
\r
195 Next_state_SYS =SYS_SOP;
\r
197 Next_state_SYS =SYS_idle;
\r
199 Next_state_SYS =SYS_DROP;
\r
200 SYS_DROP: //FIFO overflow
\r
201 if (Tx_mac_wr&&Tx_mac_eop)
\r
202 Next_state_SYS =SYS_EOP_err;
\r
204 Next_state_SYS =Current_state_SYS ;
\r
206 Next_state_SYS =SYS_idle;
\r
210 always @ (posedge Clk_SYS or posedge Reset)
\r
214 Tx_mac_data_dl1 <=0;
\r
219 Tx_mac_wr_dl1 <=Tx_mac_wr ;
\r
220 Tx_mac_data_dl1 <=Tx_mac_data ;
\r
221 Tx_mac_BE_dl1 <=Tx_mac_BE ;
\r
224 always @(Current_state_SYS)
\r
225 if (Current_state_SYS==SYS_EOP_err)
\r
230 reg Tx_mac_eop_gen;
\r
232 always @(Current_state_SYS)
\r
233 if (Current_state_SYS==SYS_EOP_err||Current_state_SYS==SYS_EOP_ok)
\r
236 Tx_mac_eop_gen =0;
\r
238 assign Din={Tx_mac_eop_gen,FF_FullErr,Tx_mac_BE_dl1,Tx_mac_data_dl1};
\r
240 always @(Current_state_SYS or Tx_mac_wr_dl1)
\r
241 if ((Current_state_SYS==SYS_SOP||Current_state_SYS==SYS_EOP_ok||
\r
242 Current_state_SYS==SYS_MOP||Current_state_SYS==SYS_EOP_err)&&Tx_mac_wr_dl1)
\r
251 always @ (posedge Reset or posedge Clk_SYS)
\r
255 begin : Add_wr_gray_loop
\r
257 Add_wr_gray[TX_FF_DEPTH-1] <=Add_wr[TX_FF_DEPTH-1];
\r
258 for (i=TX_FF_DEPTH-2;i>=0;i=i-1)
\r
259 Add_wr_gray[i] <=Add_wr[i+1]^Add_wr[i];
\r
262 always @ (posedge Clk_SYS or posedge Reset)
\r
264 Add_rd_gray_dl1 <=0;
\r
266 Add_rd_gray_dl1 <=Add_rd_gray;
\r
268 always @(posedge Clk_SYS or posedge Reset)
\r
270 Add_rd_gray_dl2 <= 0;
\r
272 Add_rd_gray_dl2 <= Add_rd_gray_dl1;
\r
274 always @ (posedge Clk_SYS or posedge Reset)
\r
276 Add_rd_jump_wr_pl1 <=0;
\r
278 Add_rd_jump_wr_pl1 <=Add_rd_jump;
\r
280 always @ (posedge Clk_SYS or posedge Reset)
\r
283 else if (!Add_rd_jump_wr_pl1)
\r
284 begin : Add_rd_ungray_loop
\r
286 Add_rd_ungray[TX_FF_DEPTH-1] = Add_rd_gray_dl2[TX_FF_DEPTH-1];
\r
287 for (i=TX_FF_DEPTH-2;i>=0;i=i-1)
\r
288 Add_rd_ungray[i] = Add_rd_ungray[i+1]^Add_rd_gray_dl2[i];
\r
291 assign Add_wr_pluse =Add_wr+1;
\r
292 assign Add_wr_pluse_pluse =Add_wr+4;
\r
294 always @ (Add_wr_pluse or Add_rd_ungray)
\r
295 if (Add_wr_pluse==Add_rd_ungray)
\r
300 always @ (posedge Clk_SYS or posedge Reset)
\r
303 else if (Add_wr_pluse_pluse==Add_rd_ungray)
\r
308 always @ (posedge Clk_SYS or posedge Reset)
\r
311 else if (Wr_en&&!Full)
\r
312 Add_wr <= Add_wr +1;
\r
314 always @ (posedge Clk_SYS or posedge Reset)
\r
317 Packet_number_sub_dl1 <=0;
\r
318 Packet_number_sub_dl2 <=0;
\r
322 Packet_number_sub_dl1 <=Pkt_sub_apply;
\r
323 Packet_number_sub_dl2 <=Packet_number_sub_dl1;
\r
326 always @ (posedge Clk_SYS or posedge Reset)
\r
328 Packet_number_sub_edge <=0;
\r
329 else if (Packet_number_sub_dl1&!Packet_number_sub_dl2)
\r
330 Packet_number_sub_edge <=1;
\r
332 Packet_number_sub_edge <=0;
\r
334 always @ (posedge Clk_SYS or posedge Reset)
\r
336 Packet_number_add <=0;
\r
337 else if (Current_state_SYS==SYS_EOP_ok||Current_state_SYS==SYS_EOP_err)
\r
338 Packet_number_add <=1;
\r
340 Packet_number_add <=0;
\r
343 always @ (posedge Clk_SYS or posedge Reset)
\r
345 Packet_number_inFF <=0;
\r
346 else if (Packet_number_add&&!Packet_number_sub_edge)
\r
347 Packet_number_inFF <=Packet_number_inFF + 1'b1;
\r
348 else if (!Packet_number_add&&Packet_number_sub_edge)
\r
349 Packet_number_inFF <=Packet_number_inFF - 1'b1;
\r
352 always @ (posedge Clk_SYS or posedge Reset)
\r
354 Packet_number_inFF_reg <=0;
\r
356 Packet_number_inFF_reg <=Packet_number_inFF;
\r
358 always @ (posedge Clk_SYS or posedge Reset)
\r
361 Add_rd_reg_rdy_dl1 <=0;
\r
362 Add_rd_reg_rdy_dl2 <=0;
\r
366 Add_rd_reg_rdy_dl1 <=Add_rd_reg_rdy;
\r
367 Add_rd_reg_rdy_dl2 <=Add_rd_reg_rdy_dl1;
\r
370 always @ (posedge Clk_SYS or posedge Reset)
\r
372 Add_rd_reg_dl1 <=0;
\r
373 else if (Add_rd_reg_rdy_dl1&!Add_rd_reg_rdy_dl2)
\r
374 Add_rd_reg_dl1 <=Add_rd_reg[TX_FF_DEPTH-1:TX_FF_DEPTH-5];
\r
378 always @ (posedge Clk_SYS or posedge Reset)
\r
380 Fifo_data_count <=0;
\r
381 else if (FullDuplex)
\r
382 Fifo_data_count <=Add_wr[TX_FF_DEPTH-1:TX_FF_DEPTH-5]-Add_rd_ungray[TX_FF_DEPTH-1:TX_FF_DEPTH-5];
\r
384 Fifo_data_count <=Add_wr[TX_FF_DEPTH-1:TX_FF_DEPTH-5]-Add_rd_reg_dl1[TX_FF_DEPTH-1:TX_FF_DEPTH-5]; //for half duplex backoff requirement
\r
387 always @ (posedge Clk_SYS or posedge Reset)
\r
390 else if (Packet_number_inFF_reg>=1||Fifo_data_count>=Tx_Lwmark)
\r
395 always @ (posedge Clk_SYS or posedge Reset)
\r
403 Tx_Hwmark_pl <=Tx_Hwmark;
\r
404 Tx_Lwmark_pl <=Tx_Lwmark;
\r
407 always @ (posedge Clk_SYS or posedge Reset)
\r
410 else if (Fifo_data_count>=Tx_Hwmark_pl)
\r
412 else if (Fifo_data_count<Tx_Lwmark_pl)
\r
415 //******************************************************************************
\r
416 //rd data to from FF .
\r
418 //******************************************************************************
\r
419 reg[35:0] Dout_dl1;
\r
421 always @ (posedge Clk_MAC or posedge Reset)
\r
427 always @ (Current_state_MAC or Next_state_MAC)
\r
428 if ((Current_state_MAC==MAC_idle||Current_state_MAC==MAC_byte0)&&Next_state_MAC==MAC_byte3)
\r
433 always @ (posedge Clk_MAC or posedge Reset)
\r
436 else if (Dout_reg_en)
\r
437 Dout_reg <=Dout_dl1;
\r
439 assign {Dout_eop,Dout_err,Dout_BE,Dout_data}=Dout_reg;
\r
441 always @ (posedge Clk_MAC or posedge Reset)
\r
443 Current_state_MAC <=MAC_idle;
\r
445 Current_state_MAC <=Next_state_MAC;
\r
447 always @ (Current_state_MAC or Fifo_rd or Dout_BE or Dout_eop or Fifo_rd_retry
\r
448 or Fifo_rd_finish or Empty or Fifo_rd or Fifo_eop)
\r
449 case (Current_state_MAC)
\r
451 if (Empty&&Fifo_rd)
\r
452 Next_state_MAC=MAC_FF_Err;
\r
454 Next_state_MAC=MAC_byte3;
\r
456 Next_state_MAC=Current_state_MAC;
\r
459 Next_state_MAC=MAC_retry;
\r
461 Next_state_MAC=MAC_wait_finish;
\r
462 else if (Fifo_rd&&!Fifo_eop)
\r
463 Next_state_MAC=MAC_byte2;
\r
465 Next_state_MAC=Current_state_MAC;
\r
468 Next_state_MAC=MAC_retry;
\r
470 Next_state_MAC=MAC_wait_finish;
\r
471 else if (Fifo_rd&&!Fifo_eop)
\r
472 Next_state_MAC=MAC_byte1;
\r
474 Next_state_MAC=Current_state_MAC;
\r
477 Next_state_MAC=MAC_retry;
\r
479 Next_state_MAC=MAC_wait_finish;
\r
480 else if (Fifo_rd&&!Fifo_eop)
\r
481 Next_state_MAC=MAC_byte0;
\r
483 Next_state_MAC=Current_state_MAC;
\r
485 if (Empty&&Fifo_rd&&!Fifo_eop)
\r
486 Next_state_MAC=MAC_FFEmpty;
\r
487 else if (Fifo_rd_retry)
\r
488 Next_state_MAC=MAC_retry;
\r
490 Next_state_MAC=MAC_wait_finish;
\r
491 else if (Fifo_rd&&!Fifo_eop)
\r
492 Next_state_MAC=MAC_byte3;
\r
494 Next_state_MAC=Current_state_MAC;
\r
496 Next_state_MAC=MAC_idle;
\r
498 if (Fifo_rd_finish)
\r
499 Next_state_MAC=MAC_pkt_sub;
\r
501 Next_state_MAC=Current_state_MAC;
\r
503 Next_state_MAC=MAC_idle;
\r
506 Next_state_MAC=MAC_byte3;
\r
508 Next_state_MAC=Current_state_MAC;
\r
509 MAC_FF_Err: //stopped state-machine need change
\r
510 Next_state_MAC=Current_state_MAC;
\r
512 Next_state_MAC=MAC_idle;
\r
515 always @ (posedge Reset or posedge Clk_MAC)
\r
519 begin : Add_rd_gray_loop
\r
521 Add_rd_gray[TX_FF_DEPTH-1] <=Add_rd[TX_FF_DEPTH-1];
\r
522 for (i=TX_FF_DEPTH-2;i>=0;i=i-1)
\r
523 Add_rd_gray[i] <= Add_rd[i+1]^Add_rd[i];
\r
527 always @ (posedge Clk_MAC or posedge Reset)
\r
529 Add_wr_gray_dl1 <=0;
\r
531 Add_wr_gray_dl1 <=Add_wr_gray;
\r
533 always @ (posedge Clk_MAC or posedge Reset)
\r
535 Add_wr_gray_dl2 <=0;
\r
537 Add_wr_gray_dl2 <=Add_wr_gray_dl1;
\r
539 always @ (posedge Clk_MAC or posedge Reset)
\r
543 begin : Add_wr_ungray_loop
\r
545 Add_wr_ungray[TX_FF_DEPTH-1] = Add_wr_gray_dl2[TX_FF_DEPTH-1];
\r
546 for (i=TX_FF_DEPTH-2;i>=0;i=i-1)
\r
547 Add_wr_ungray[i] = Add_wr_ungray[i+1]^Add_wr_gray_dl2[i];
\r
551 always @ (posedge Clk_MAC or posedge Reset)
\r
554 else if (Add_rd==Add_wr_ungray)
\r
560 always @ (posedge Clk_MAC or posedge Reset)
\r
564 Fifo_ra <=Fifo_ra_tmp;
\r
568 always @ (posedge Clk_MAC or posedge Reset)
\r
570 Pkt_sub_apply_tmp <=0;
\r
571 else if (Current_state_MAC==MAC_pkt_sub)
\r
572 Pkt_sub_apply_tmp <=1;
\r
574 Pkt_sub_apply_tmp <=0;
\r
576 always @ (posedge Clk_MAC or posedge Reset)
\r
579 else if ((Current_state_MAC==MAC_pkt_sub)||Pkt_sub_apply_tmp)
\r
584 //reg Add_rd for collison retry
\r
585 always @ (posedge Clk_MAC or posedge Reset)
\r
588 else if (Fifo_rd_finish)
\r
589 Add_rd_reg <=Add_rd;
\r
591 always @ (posedge Clk_MAC or posedge Reset)
\r
593 Add_rd_reg_rdy_tmp <=0;
\r
594 else if (Fifo_rd_finish)
\r
595 Add_rd_reg_rdy_tmp <=1;
\r
597 Add_rd_reg_rdy_tmp <=0;
\r
599 always @ (posedge Clk_MAC or posedge Reset)
\r
601 Add_rd_reg_rdy <=0;
\r
602 else if (Fifo_rd_finish||Add_rd_reg_rdy_tmp)
\r
603 Add_rd_reg_rdy <=1;
\r
605 Add_rd_reg_rdy <=0;
\r
608 always @ (Current_state_MAC or Next_state_MAC)
\r
609 if ((Current_state_MAC==MAC_idle||Current_state_MAC==MAC_byte0)&&Next_state_MAC==MAC_byte3)
\r
615 always @ (posedge Clk_MAC or posedge Reset)
\r
618 else if (Current_state_MAC==MAC_retry)
\r
619 Add_rd <= Add_rd_reg;
\r
620 else if (Add_rd_add)
\r
621 Add_rd <= Add_rd + 1;
\r
623 always @ (posedge Clk_MAC or posedge Reset)
\r
625 Add_rd_jump_tmp <=0;
\r
626 else if (Current_state_MAC==MAC_retry)
\r
627 Add_rd_jump_tmp <=1;
\r
629 Add_rd_jump_tmp <=0;
\r
631 always @ (posedge Clk_MAC or posedge Reset)
\r
633 Add_rd_jump_tmp_pl1 <=0;
\r
635 Add_rd_jump_tmp_pl1 <=Add_rd_jump_tmp;
\r
637 always @ (posedge Clk_MAC or posedge Reset)
\r
640 else if (Current_state_MAC==MAC_retry)
\r
642 else if (Add_rd_jump_tmp_pl1)
\r
648 always @ (Dout_data or Current_state_MAC)
\r
649 case (Current_state_MAC)
\r
651 Fifo_data =Dout_data[31:24];
\r
653 Fifo_data =Dout_data[23:16];
\r
655 Fifo_data =Dout_data[15:8];
\r
657 Fifo_data =Dout_data[7:0];
\r
662 always @ (posedge Clk_MAC or posedge Reset)
\r
665 else if ((Current_state_MAC==MAC_byte0||Current_state_MAC==MAC_byte1||
\r
666 Current_state_MAC==MAC_byte2||Current_state_MAC==MAC_byte3)&&Fifo_rd&&!Fifo_eop)
\r
671 //gen Fifo_data_err_empty
\r
672 assign Fifo_data_err_full=Dout_err;
\r
673 //gen Fifo_data_err_empty
\r
674 always @ (posedge Clk_MAC or posedge Reset)
\r
676 Current_state_MAC_reg <=0;
\r
678 Current_state_MAC_reg <=Current_state_MAC;
\r
680 always @ (posedge Clk_MAC or posedge Reset)
\r
682 Fifo_data_err_empty <=0;
\r
683 else if (Current_state_MAC_reg==MAC_FFEmpty)
\r
684 Fifo_data_err_empty <=1;
\r
686 Fifo_data_err_empty <=0;
\r
688 //always @ (posedge Clk_MAC)
\r
689 // if (Current_state_MAC_reg==MAC_FF_Err)
\r
692 // $display("mac_tx_FF meet error status at time :%t",$time);
\r
695 //gen Fifo_eop aligned to last valid data byte
\r
696 always @ ( Current_state_MAC or Dout_eop or Dout_BE )
\r
697 if ( ( ( Current_state_MAC==MAC_byte0 && Dout_BE==2'b00 ) ||
\r
698 ( Current_state_MAC==MAC_byte1 && Dout_BE==2'b11 ) ||
\r
699 ( Current_state_MAC==MAC_byte2 && Dout_BE==2'b10 ) ||
\r
700 ( Current_state_MAC==MAC_byte3 && Dout_BE==2'b01 ) ) && Dout_eop )
\r
705 // Dual port RAM for FIFO
\r
706 ram_2port #(.DWIDTH(36),.AWIDTH(TX_FF_DEPTH)) mac_tx_ff_ram
\r
707 (.clka(Clk_SYS),.ena(1'b1),.wea(Wr_en),.addra(Add_wr),.dia(Din),.doa(),
\r
708 .clkb(Clk_MAC),.enb(1'b1),.web(1'b0),.addrb(Add_rd),.dib(36'b0),.dob(Dout) );
\r
711 { { 5'd0, Empty, Full, AlmostFull },
\r
712 { Current_state_SYS, Current_state_MAC },
\r
713 { Fifo_rd, Fifo_rd_finish, Fifo_rd_retry, Fifo_eop, Fifo_da, Fifo_ra, Fifo_data_err_empty, Fifo_data_err_full },
\r
714 { 2'b0, Dout_BE, Tx_mac_wa, Tx_mac_wr, Tx_mac_sop, Tx_mac_eop} };
\r
722 endmodule // MAC_tx_FF
\r