Я досконально с этим фифо не разбирался, потому что использую только одноклоковое фифо. Если у Вас раздельные клоки по записи и чтению и они не синхронны, без задержки по чтению не обойтись. Да и по ресурсам это больше, чем одноклоковое. В одноклоковом фифо я использую структуру типа
module in_out (global_clk, in_clk, input_data, inout_clk, out_clk, out_data);
output [7:0] out_data; output out_clk;
input global_clk; input [7:0] input_data; input in_clk; input inout_clk;
reg [7:0] out_data; reg [7:0] in_data; reg [1:0] sdvig_in_rg; reg [1:0] sdvig_out_rg;
wire e_wr_rg; wire e_rd_rg;
assign out_clk = inout_clk;
always @ (posedge global_clk) begin sdvig_in_rg <= {sdvig_in_rg[0], in_clk}; sdvig_out_rg <= {sdvig_out_rg[0], inout_clk}; end
assign e_wr_rg = sdvig_in_rg[0] & ~sdvig_in_rg[1]; assign e_rd_rg = ~sdvig_out_rg[0] & sdvig_out_rg[1];
always @ (posedge global_clk) begin if (e_wr_rg == 1'b1) in_data <= input_data; if (e_rd_rg == 1'b1) out_data <= in_data; end
endmodule И никаких задержек по чтению.
|