// 该模块会在写满了fifo之后, 开始读, 直到读空

module fifo_rd(
    input rd_clk,
    input rst,

    input [7:0] fifo_rd_data,  // fifo 读到的数据
    input is_full,  // 是否写满了, 这个是 写时钟域的信号
    input is_almost_empty, // 快空了
    input is_rd_rst_busy,  // 是否正在初始化读
    output reg fifo_rd_en  // 是否能够读了
);

reg is_full_0;
reg is_full_1;
always @(posedge rd_clk or negedge rst) begin
    if (!rst) begin
        is_full_0 <= 1'b0;
        is_full_1 <= 1'b0;
    end
    else begin
        is_full_0 <= is_full;
        is_full_1 <= is_full_0;
    end
end


// 控制是否可读
always @(posedge rd_clk or negedge rst) begin
    if (!rst) begin
        fifo_rd_en <= 1'b0;
    end
    else if (!is_rd_rst_busy) begin  // 功能已经准备就绪
        if (is_full_1) begin  // 打两拍确定是满的, 在进行读取
            fifo_rd_en <= 1'b1;
        end
        else if(is_almost_empty) begin  // 上个时钟周期快空了, 其实当前时钟周期已经空了
            fifo_rd_en <= 1'b0;
        end
        else begin
        end
    end
    else begin
    end
end

endmodule