AR# 45915

LogiCORE IP Tri-Mode Ethernet MAC v4.5 およびそれ以前のバージョン - リセットの後 Local Link FIFO から間違ったデータが読み出される

説明

Tri-Mode Ethernet MAC v4.5 およびそれ以前のバージョンで配布されるサンプル デザインで Local Link FIFO を使用していて、それが 10Mb/s または 100Mb/s で動作している場合、FIFO への書き込みの途中でリセットが出力されると FIFO が正しく消去されない可能性があります。

ソリューション

この問題を解決するには、リセットを追加するため、rx_client_fifo.v/vhd で reg_eof_p を変更します。

 

VHDL :

example_design/fifo/rx_client_fifo.vhd の行 784 から次のように変更します。

 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;

これを次のように変更します。

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 :

example_design/fifo/rx_client_fifo.v の行 771 から次のように変更します。

  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

これを次のように変更します。

  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
日付 09/17/2014
ステータス アクティブ
種類 一般
IP