Line 37... |
Line 37... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.3 2005/12/16 06:44:17 Administrator
|
|
// replaced tab with space.
|
|
// passed 9.6k length frame test.
|
|
//
|
|
// Revision 1.2 2005/12/13 12:15:38 Administrator
|
|
// no message
|
//
|
//
|
// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
|
// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
|
// no message
|
// no message
|
//
|
//
|
|
|
Line 199... |
Line 205... |
reg[7:0] pause_counter ;
|
reg[7:0] pause_counter ;
|
reg pause_quanta_sub ;
|
reg pause_quanta_sub ;
|
reg pause_frame_send_en_dl1 ;
|
reg pause_frame_send_en_dl1 ;
|
reg[15:0] pause_quanta_set_dl1 ;
|
reg[15:0] pause_quanta_set_dl1 ;
|
reg [4:0] send_pause_frame_counter ;
|
reg [4:0] send_pause_frame_counter ;
|
reg xoff_gen_reg ;
|
|
reg xon_gen_reg ;
|
|
reg xoff_gen_complete ;
|
reg xoff_gen_complete ;
|
reg xon_gen_complete ;
|
reg xon_gen_complete ;
|
//******************************************************************************
|
//******************************************************************************
|
//boundery signal processing
|
//boundery signal processing
|
//******************************************************************************
|
//******************************************************************************
|
Line 217... |
Line 221... |
else
|
else
|
begin
|
begin
|
pause_frame_send_en_dl1 <=pause_frame_send_en ;
|
pause_frame_send_en_dl1 <=pause_frame_send_en ;
|
pause_quanta_set_dl1 <=pause_quanta_set ;
|
pause_quanta_set_dl1 <=pause_quanta_set ;
|
end
|
end
|
|
|
//******************************************************************************
|
//******************************************************************************
|
//state machine
|
//state machine
|
//******************************************************************************
|
//******************************************************************************
|
assign Collision=TxEn&CRS;
|
assign Collision=TxEn&CRS;
|
|
|
Line 280... |
Line 283... |
StateIdle:
|
StateIdle:
|
if (!FullDuplex&&CRS)
|
if (!FullDuplex&&CRS)
|
Next_state=StateDefer;
|
Next_state=StateDefer;
|
else if (pause_apply)
|
else if (pause_apply)
|
Next_state=StatePause;
|
Next_state=StatePause;
|
else if ((FullDuplex&&Fifo_ra)||(!FullDuplex&&!CRS&&Fifo_ra)||(pause_frame_send_en_dl1&&(xoff_gen_reg||xon_gen_reg)))
|
else if ((FullDuplex&&Fifo_ra)||(!FullDuplex&&!CRS&&Fifo_ra)||(pause_frame_send_en_dl1&&(xoff_gen||xon_gen)))
|
Next_state=StatePreamble;
|
Next_state=StatePreamble;
|
else
|
else
|
Next_state=Current_state;
|
Next_state=Current_state;
|
StatePause:
|
StatePause:
|
if (pause_counter==512/8)
|
if (pause_counter==512/8)
|
Line 299... |
Line 302... |
else
|
else
|
Next_state=Current_state;
|
Next_state=Current_state;
|
StateSFD:
|
StateSFD:
|
if (!FullDuplex&&Collision)
|
if (!FullDuplex&&Collision)
|
Next_state=StateJam;
|
Next_state=StateJam;
|
else if (pause_frame_send_en_dl1&&(xoff_gen_reg||xon_gen_reg))
|
else if (pause_frame_send_en_dl1&&(xoff_gen||xon_gen))
|
Next_state=StateSendPauseFrame;
|
Next_state=StateSendPauseFrame;
|
else
|
else
|
Next_state=StateData;
|
Next_state=StateData;
|
StateSendPauseFrame:
|
StateSendPauseFrame:
|
if (send_pause_frame_counter==19)
|
if (send_pause_frame_counter==19)
|
Line 341... |
Line 344... |
else
|
else
|
Next_state =Current_state;
|
Next_state =Current_state;
|
StateFCS:
|
StateFCS:
|
if (!FullDuplex&&Collision)
|
if (!FullDuplex&&Collision)
|
Next_state =StateJam;
|
Next_state =StateJam;
|
else if (pause_frame_send_en_dl1&&(xoff_gen_reg||xon_gen_reg))
|
else if (pause_frame_send_en_dl1&&(xoff_gen||xon_gen))
|
Next_state =StateDefer;
|
Next_state =StateDefer;
|
else if (CRC_end)
|
else if (CRC_end)
|
Next_state =StateSwitchNext;
|
Next_state =StateSwitchNext;
|
else
|
else
|
Next_state =Current_state;
|
Next_state =Current_state;
|
Line 438... |
Line 441... |
|
|
//MAC_rx_FF
|
//MAC_rx_FF
|
//data have one cycle delay after fifo read signals
|
//data have one cycle delay after fifo read signals
|
always @ (*)
|
always @ (*)
|
if (Current_state==StateData ||
|
if (Current_state==StateData ||
|
Current_state==StateSFD&&!(pause_frame_send_en_dl1&&(xoff_gen_reg||xon_gen_reg)) ||
|
Current_state==StateSFD&&!(pause_frame_send_en_dl1&&(xoff_gen||xon_gen)) ||
|
Current_state==StateJamDrop&&PktDrpEvenPtr||
|
Current_state==StateJamDrop&&PktDrpEvenPtr||
|
Current_state==StateFFEmptyDrop&&PktDrpEvenPtr )
|
Current_state==StateFFEmptyDrop&&PktDrpEvenPtr )
|
Fifo_rd =1;
|
Fifo_rd =1;
|
else
|
else
|
Fifo_rd =0;
|
Fifo_rd =0;
|
Line 459... |
Line 462... |
else
|
else
|
Fifo_rd_retry =0;
|
Fifo_rd_retry =0;
|
//RMII
|
//RMII
|
always @(Current_state)
|
always @(Current_state)
|
if (Current_state==StatePreamble||Current_state==StateSFD||
|
if (Current_state==StatePreamble||Current_state==StateSFD||
|
Current_state==StateData||
|
Current_state==StateData||Current_state==StateSendPauseFrame||
|
Current_state==StateFCS||Current_state==StatePAD||Current_state==StateJam)
|
Current_state==StateFCS||Current_state==StatePAD||Current_state==StateJam)
|
TxEn_tmp =1;
|
TxEn_tmp =1;
|
else
|
else
|
TxEn_tmp =0;
|
TxEn_tmp =0;
|
|
|
Line 572... |
Line 575... |
else if (Current_state==StateSendPauseFrame)
|
else if (Current_state==StateSendPauseFrame)
|
Tx_pkt_type_rmon <=3'b100;
|
Tx_pkt_type_rmon <=3'b100;
|
else if(MAC_header_slot)
|
else if(MAC_header_slot)
|
Tx_pkt_type_rmon <={1'b0,TxD_tmp};
|
Tx_pkt_type_rmon <={1'b0,TxD_tmp};
|
|
|
|
|
always @(Tx_pkt_length_rmon)
|
always @(Tx_pkt_length_rmon)
|
if (Tx_pkt_length_rmon>=6&&Tx_pkt_length_rmon<=11)
|
if (Tx_pkt_length_rmon>=6&&Tx_pkt_length_rmon<=11)
|
Src_MAC_ptr =1;
|
Src_MAC_ptr =1;
|
else
|
else
|
Src_MAC_ptr =0;
|
Src_MAC_ptr =0;
|
|
|
//MAC_tx_addr_add
|
//MAC_tx_addr_add
|
always @ (Tx_pkt_length_rmon or Fifo_rd or Src_MAC_ptr)
|
always @ (posedge Clk or posedge Reset)
|
if (Src_MAC_ptr&&(MAC_tx_add_en||Current_state==StateSendPauseFrame))
|
if (Reset)
|
MAC_tx_addr_rd =1;
|
MAC_tx_addr_rd <=0;
|
|
else if ((Tx_pkt_length_rmon>=4&&Tx_pkt_length_rmon<=9)&&(MAC_tx_add_en||Current_state==StateSendPauseFrame))
|
|
MAC_tx_addr_rd <=1;
|
else
|
else
|
MAC_tx_addr_rd =0;
|
MAC_tx_addr_rd <=0;
|
|
|
always @ (Tx_pkt_length_rmon or Fifo_rd)
|
always @ (Tx_pkt_length_rmon or Fifo_rd)
|
if ((Tx_pkt_length_rmon==5)&&Fifo_rd)
|
if ((Tx_pkt_length_rmon==3)&&Fifo_rd)
|
MAC_tx_addr_init=1;
|
MAC_tx_addr_init=1;
|
else
|
else
|
MAC_tx_addr_init=0;
|
MAC_tx_addr_init=0;
|
|
|
//flow control
|
//flow control
|
Line 603... |
Line 609... |
pause_quanta_sub <=0;
|
pause_quanta_sub <=0;
|
|
|
|
|
always @ (posedge Clk or posedge Reset)
|
always @ (posedge Clk or posedge Reset)
|
if (Reset)
|
if (Reset)
|
begin
|
|
xoff_gen_reg <=0;
|
|
xon_gen_reg <=0;
|
|
end
|
|
else if (Current_state==StateDefer)
|
|
begin
|
|
xoff_gen_reg <=xoff_gen;
|
|
xon_gen_reg <=xon_gen;
|
|
end
|
|
|
|
always @ (posedge Clk or posedge Reset)
|
|
if (Reset)
|
|
xoff_gen_complete <=0;
|
xoff_gen_complete <=0;
|
else if(Current_state==StateDefer&&xoff_gen_reg)
|
else if(Current_state==StateDefer&&xoff_gen)
|
xoff_gen_complete <=1;
|
xoff_gen_complete <=1;
|
else
|
else
|
xoff_gen_complete <=0;
|
xoff_gen_complete <=0;
|
|
|
|
|
always @ (posedge Clk or posedge Reset)
|
always @ (posedge Clk or posedge Reset)
|
if (Reset)
|
if (Reset)
|
xon_gen_complete <=0;
|
xon_gen_complete <=0;
|
else if(Current_state==StateDefer&&xon_gen_reg)
|
else if(Current_state==StateDefer&&xon_gen)
|
xon_gen_complete <=1;
|
xon_gen_complete <=1;
|
else
|
else
|
xon_gen_complete <=0;
|
xon_gen_complete <=0;
|
|
|
endmodule
|
endmodule
|