FPGA|CPLD|ASICwilliam hill官网
直播中

wujinda

9年用户 12经验值
擅长:可编程逻辑
私信 关注
[问答]

异步fifo,输出不对,如图,求大神解答


4VT@C2L]8U4(TJNC)P7T`JL.png
上面是仿真结果,下面是代码


module fifo_data(
        input wrclk,
        input rdclk,
        input rst_n,
        input din_en,
        input  [17:0] din_re,
        input  [17:0] din_im,
        output [17:0] dout_re,
        output [17:0] dout_im,
        output rdempty_re,
        output wrfull_re,
        output rdempty_im,
        output wrfull_im
);

reg rdreq_re,wrreq_re;
reg rdreq_im,wrreq_im;

reg [17:0] fifo_din_re;
reg [17:0] fifo_din_im;

always @(posedge wrclk)begin
        if(!rst_n)begin
                fifo_din_re <= 0;
                fifo_din_im <= 0;
//                wrreq <= 1'b0;
        end
        else begin
                if (din_en) begin
                        fifo_din_re <= din_re;
                        fifo_din_im <= din_im;
//                        wrreq <= 1'b1;
                end
                else begin
                        fifo_din_re <= 0;
                        fifo_din_im <= 0;
//                        wrreq <= 1'b0;
                end
        end
end

       
always @(posedge wrclk or negedge rst_n)begin   
        if(!rst_n) wrreq_re <= 1'b0;     
        else begin
                if(!wrfull_re )begin
                        wrreq_re <= 1'b1;
                end
                else wrreq_re <= 1'b0;
        end
end

always @(posedge wrclk or negedge rst_n)begin   
        if(!rst_n) wrreq_im <= 1'b0;     
        else begin
                if(!wrfull_im )begin
                        wrreq_im <= 1'b1;
                end
                else wrreq_im <= 1'b0;
        end
end          

always @(posedge rdclk or negedge rst_n)begin   
        if(!rst_n)begin            
                rdreq_re <= 1'b0;   
        end     
        else if(!rdempty_re)begin      
                rdreq_re <= 1'b1;
        end
        else rdreq_re <= 1'b0;  
end  

always @(posedge rdclk or negedge rst_n)begin   
        if(!rst_n)begin            
                rdreq_im <= 1'b0;   
        end     
        else if(!rdempty_im)begin      
                rdreq_im <= 1'b1;
        end
        else rdreq_im <= 1'b0;  
end                           

//assign data_out=fifo_Q;

          
fifo        fifo_re (
        .aclr ( !rst_n ),
        .data ( fifo_din_re ),
        .rdclk ( rdclk ),
        .rdreq ( rdreq_re ),
        .wrclk ( wrclk ),
        .wrreq ( wrreq_re ),
        .q ( dout_re ),
        .rdempty ( rdempty_re ),
        .wrfull ( wrfull_re )
        );

fifo        fifo_im (
        .aclr ( !rst_n ),
        .data ( fifo_din_im ),
        .rdclk ( rdclk ),
        .rdreq ( rdreq_im ),
        .wrclk ( wrclk ),
        .wrreq ( wrreq_im ),
        .q ( dout_im ),
        .rdempty ( rdempty_im ),
        .wrfull ( wrfull_im )
        );
       
endmodule


已退回3积分

回帖(2)

Giliable

2016-7-30 16:01:22


谢谢分享

谢谢分享
举报

wangcheng3052

2016-8-3 19:20:17
表示没看懂,截的图也没截信号的名字,也不知道你fifo设的深度是多少,不过你写的时钟慢,读的时钟快,出来这种波形也不奇怪
举报

更多回帖

发帖
×
20
完善资料,
赚取积分