UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 45915

LogiCORE IP Tri-Mode Ethernet MAC v4.5 and earlier - Incorrect Data read out of Local Link FIFO after reset

Description

When using the Local Link FIFO provided in the Tri-Mode Ethernet MAC v4.5 and earlier example design and operating at 10Mb/s or 100Mb/s, it is possible for the FIFO to not clear correctly when a reset is issued in the middle of a write to the FIFO.

Solution

To resolve this issue, change reg_eof_p in the file rx_client_fifo.v/vhd to add a reset.

 

VHDL:

Starting on line 784 of example_design/fifo/rx_client_fifo.vhd change:

 reg_eof_p : process(wr_clk)
  begin
    if (wr_clk'event and wr_clk = '1') then
        if wr_enable = '1' then
           wr_dv_pipe(0) <= rx_data_valid;
           wr_dv_pipe(1) <= wr_dv_pipe(0);
           wr_eof_bram(0) <= wr_dv_pipe(1) and not wr_dv_pipe(0);
        end if;
     end if;
  end process reg_eof_p;

To:

reg_eof_p : process(wr_clk)
  begin
     if (wr_clk'event and wr_clk = '1') then
        if wr_sreset = '1' then
           wr_dv_pipe    <= (others => '0');
           wr_eof_bram   <= (others => '0');
        elsif wr_enable = '1' then
           wr_dv_pipe(0) <= rx_data_valid;
           wr_dv_pipe(1) <= wr_dv_pipe(0);
           wr_eof_bram(0) <= wr_dv_pipe(1) and not wr_dv_pipe(0);
        end if;
     end if;
  end process reg_eof_p;

Verilog:

Starting on line 771 of example_design/fifo/rx_client_fifo.v change:

  always @(posedge wr_clk)
  begin
     if (wr_enable == 1'b1) begin
        wr_dv_pipe[0] <= rx_data_valid;
        wr_dv_pipe[1] <= wr_dv_pipe[0];
        wr_eof_bram[0] <= wr_dv_pipe[1] & !wr_dv_pipe[0];
     end
  end

 To:

  always @(posedge wr_clk)
  begin
    if (wr_sreset == 1'b1) begin
      wr_dv_pipe[0] <= 1'b0;
      wr_dv_pipe[1] <=1'b0;
      wr_eof_bram <= 1'b0;
    
    end
    else if (wr_enable == 1'b1) begin
        wr_dv_pipe[0] <= rx_data_valid;
        wr_dv_pipe[1] <= wr_dv_pipe[0];
        wr_eof_bram[0] <= wr_dv_pipe[1] & !wr_dv_pipe[0];
     end
  end

AR# 45915
Date Created 01/31/2012
Last Updated 09/17/2014
Status Active
Type General Article
IP
  • Tri-Mode Ethernet MAC