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 |