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

Subversion Repositories xge_mac

[/] [xge_mac/] [trunk/] [rtl/] [verilog/] [rx_enqueue.v] - Diff between revs 27 and 28

Show entire file | Details | Blame | View Log

Rev 27 Rev 28
Line 41... Line 41...
module rx_enqueue(/*AUTOARG*/
module rx_enqueue(/*AUTOARG*/
  // Outputs
  // Outputs
  rxdfifo_wdata, rxdfifo_wstatus, rxdfifo_wen, rxhfifo_ren,
  rxdfifo_wdata, rxdfifo_wstatus, rxdfifo_wen, rxhfifo_ren,
  rxhfifo_wdata, rxhfifo_wstatus, rxhfifo_wen, local_fault_msg_det,
  rxhfifo_wdata, rxhfifo_wstatus, rxhfifo_wen, local_fault_msg_det,
  remote_fault_msg_det, status_crc_error_tog,
  remote_fault_msg_det, status_crc_error_tog,
  status_fragment_error_tog, status_rxdfifo_ovflow_tog,
  status_fragment_error_tog, status_lenght_error_tog,
  status_pause_frame_rx_tog, rxsfifo_wen, rxsfifo_wdata,
  status_rxdfifo_ovflow_tog, status_pause_frame_rx_tog, rxsfifo_wen,
 
  rxsfifo_wdata,
  // Inputs
  // Inputs
  clk_xgmii_rx, reset_xgmii_rx_n, xgmii_rxd, xgmii_rxc, rxdfifo_wfull,
  clk_xgmii_rx, reset_xgmii_rx_n, xgmii_rxd, xgmii_rxc, rxdfifo_wfull,
  rxhfifo_rdata, rxhfifo_rstatus, rxhfifo_rempty,
  rxhfifo_rdata, rxhfifo_rstatus, rxhfifo_rempty,
  rxhfifo_ralmost_empty
  rxhfifo_ralmost_empty
  );
  );
Line 81... Line 82...
output [1:0]  local_fault_msg_det;
output [1:0]  local_fault_msg_det;
output [1:0]  remote_fault_msg_det;
output [1:0]  remote_fault_msg_det;
 
 
output        status_crc_error_tog;
output        status_crc_error_tog;
output        status_fragment_error_tog;
output        status_fragment_error_tog;
 
output        status_lenght_error_tog;
output        status_rxdfifo_ovflow_tog;
output        status_rxdfifo_ovflow_tog;
 
 
output        status_pause_frame_rx_tog;
output        status_pause_frame_rx_tog;
 
 
output        rxsfifo_wen;
output        rxsfifo_wen;
Line 105... Line 107...
reg [7:0]               rxhfifo_wstatus;
reg [7:0]               rxhfifo_wstatus;
reg [13:0]              rxsfifo_wdata;
reg [13:0]              rxsfifo_wdata;
reg                     rxsfifo_wen;
reg                     rxsfifo_wen;
reg                     status_crc_error_tog;
reg                     status_crc_error_tog;
reg                     status_fragment_error_tog;
reg                     status_fragment_error_tog;
 
reg                     status_lenght_error_tog;
reg                     status_pause_frame_rx_tog;
reg                     status_pause_frame_rx_tog;
reg                     status_rxdfifo_ovflow_tog;
reg                     status_rxdfifo_ovflow_tog;
// End of automatics
// End of automatics
 
 
/*AUTOWIRE*/
/*AUTOWIRE*/
Line 143... Line 146...
reg [2:0]     curr_state;
reg [2:0]     curr_state;
reg [2:0]     next_state;
reg [2:0]     next_state;
 
 
reg [13:0]    curr_byte_cnt;
reg [13:0]    curr_byte_cnt;
reg [13:0]    next_byte_cnt;
reg [13:0]    next_byte_cnt;
 
reg [13:0]    frame_lenght;
 
 
reg           frame_end_flag;
reg           frame_end_flag;
reg           next_frame_end_flag;
reg           next_frame_end_flag;
 
 
reg [2:0]     frame_end_bytes;
reg [2:0]     frame_end_bytes;
reg [2:0]     next_frame_end_bytes;
reg [2:0]     next_frame_end_bytes;
 
 
reg           fragment_error;
reg           fragment_error;
reg           rxd_ovflow_error;
reg           rxd_ovflow_error;
 
 
 
reg           lenght_error;
 
 
reg           coding_error;
reg           coding_error;
reg           next_coding_error;
reg           next_coding_error;
 
 
reg [7:0]     addmask;
reg [7:0]     addmask;
reg [7:0]     datamask;
reg [7:0]     datamask;
Line 241... Line 247...
 
 
        pause_frame_hold <= 1'b0;
        pause_frame_hold <= 1'b0;
 
 
        status_crc_error_tog <= 1'b0;
        status_crc_error_tog <= 1'b0;
        status_fragment_error_tog <= 1'b0;
        status_fragment_error_tog <= 1'b0;
 
        status_lenght_error_tog <= 1'b0;
        status_rxdfifo_ovflow_tog <= 1'b0;
        status_rxdfifo_ovflow_tog <= 1'b0;
 
 
        status_pause_frame_rx_tog <= 1'b0;
        status_pause_frame_rx_tog <= 1'b0;
 
 
        rxsfifo_wen <= 1'b0;
        rxsfifo_wen <= 1'b0;
        rxsfifo_wdata <= 14'b0;
        rxsfifo_wdata <= 14'b0;
 
 
        datamask <= 8'b0;
        datamask <= 8'b0;
 
 
 
        lenght_error <= 1'b0;
 
 
    end
    end
    else begin
    else begin
 
 
        rxsfifo_wen <= 1'b0;
        rxsfifo_wen <= 1'b0;
        rxsfifo_wdata <= curr_byte_cnt + {11'b0, frame_end_bytes};
        rxsfifo_wdata <= frame_lenght;
 
 
 
        lenght_error <= 1'b0;
 
 
        //---
        //---
        // Link status RC layer
        // Link status RC layer
        // Look for local/remote messages on lower 4 lanes and upper
        // Look for local/remote messages on lower 4 lanes and upper
        // 4 lanes. This is a 64-bit interface but look at each 32-bit
        // 4 lanes. This is a 64-bit interface but look at each 32-bit
Line 432... Line 443...
 
 
        if (frame_end_flag) begin
        if (frame_end_flag) begin
            rxsfifo_wen <= 1'b1;
            rxsfifo_wen <= 1'b1;
        end
        end
 
 
 
        //---
 
        // Check frame lenght
 
 
 
        if (frame_end_flag && frame_lenght > `MAX_FRAME_SIZE) begin
 
            lenght_error <= 1'b1;
 
            status_lenght_error_tog <= ~status_lenght_error_tog;
 
        end
 
 
    end
    end
 
 
end
end
 
 
 
 
Line 483... Line 502...
 
 
end
end
 
 
 
 
always @(/*AS*/coding_error or crc_rx or curr_byte_cnt or curr_state
always @(/*AS*/coding_error or crc_rx or curr_byte_cnt or curr_state
         or datamask or pause_frame or xgxs_rxc_barrel
         or datamask or frame_end_bytes or pause_frame
         or xgxs_rxc_barrel_d1 or xgxs_rxd_barrel
         or xgxs_rxc_barrel or xgxs_rxc_barrel_d1 or xgxs_rxd_barrel
         or xgxs_rxd_barrel_d1) begin
         or xgxs_rxd_barrel_d1) begin
 
 
    next_state = curr_state;
    next_state = curr_state;
 
 
    rxhfifo_wdata = xgxs_rxd_barrel_d1;
    rxhfifo_wdata = xgxs_rxd_barrel_d1;
Line 504... Line 523...
    next_frame_end_flag = 1'b0;
    next_frame_end_flag = 1'b0;
    next_frame_end_bytes = 3'b0;
    next_frame_end_bytes = 3'b0;
 
 
    fragment_error = 1'b0;
    fragment_error = 1'b0;
 
 
 
    frame_lenght = curr_byte_cnt + {11'b0, frame_end_bytes};
 
 
    next_coding_error = coding_error;
    next_coding_error = coding_error;
    next_pause_frame = pause_frame;
    next_pause_frame = pause_frame;
 
 
    addmask[0] = !(xgxs_rxd_barrel[`LANE0] == `TERMINATE && xgxs_rxc_barrel[0]);
    addmask[0] = !(xgxs_rxd_barrel[`LANE0] == `TERMINATE && xgxs_rxc_barrel[0]);
    addmask[1] = !(xgxs_rxd_barrel[`LANE1] == `TERMINATE && xgxs_rxc_barrel[1]);
    addmask[1] = !(xgxs_rxd_barrel[`LANE1] == `TERMINATE && xgxs_rxc_barrel[1]);
Line 572... Line 593...
                  else begin
                  else begin
                      rxhfifo_wstatus[`RXSTATUS_EOP] = 1'b1;
                      rxhfifo_wstatus[`RXSTATUS_EOP] = 1'b1;
                  end
                  end
 
 
              end
              end
              else if (curr_byte_cnt > 14'd9900) begin
              else if (curr_byte_cnt > 14'd16100) begin
 
 
                  // Frame too long, TERMMINATE must have been corrupted.
                  // Frame too long, TERMMINATE must have been corrupted.
                  // Abort transfer, write a fake EOP, report as fragment.
                  // Abort transfer, write a fake EOP, report as fragment.
 
 
                  fragment_error = 1'b1;
                  fragment_error = 1'b1;
Line 795... Line 816...
 
 
    end
    end
 
 
end
end
 
 
always @(/*AS*/crc_done or crc_good or drop_data or pkt_pending
always @(/*AS*/crc_done or crc_good or drop_data or lenght_error
         or rxdfifo_wfull or rxhfifo_ralmost_empty_d1 or rxhfifo_rdata
         or pkt_pending or rxdfifo_wfull or rxhfifo_ralmost_empty_d1
         or rxhfifo_ren_d1 or rxhfifo_rstatus) begin
         or rxhfifo_rdata or rxhfifo_ren_d1 or rxhfifo_rstatus) begin
 
 
    rxd_ovflow_error = 1'b0;
    rxd_ovflow_error = 1'b0;
 
 
    rxdfifo_wdata = rxhfifo_rdata;
    rxdfifo_wdata = rxhfifo_rdata;
    rxdfifo_wstatus = rxhfifo_rstatus;
    rxdfifo_wstatus = rxhfifo_rstatus;
Line 839... Line 860...
 
 
    rxdfifo_wen = rxhfifo_ren_d1 && !next_drop_data;
    rxdfifo_wen = rxhfifo_ren_d1 && !next_drop_data;
 
 
 
 
 
 
    if (crc_done && !crc_good) begin
    if ((crc_done && !crc_good) || lenght_error) begin
 
 
        // Flag packet with error when CRC error is detected
        // Flag packet with error when CRC error is detected
 
 
        rxdfifo_wstatus[`RXSTATUS_ERR] = 1'b1;
        rxdfifo_wstatus[`RXSTATUS_ERR] = 1'b1;
 
 

powered by: WebSVN 2.1.0

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