• FFT_fifo


      fifo的控制属于本程序的第二大块,因为采样速率和fft的写速率不一致,所以需要加一个异步FIFO来做缓冲,采用了一个状态机来实现

    FIFO的读写,状态机的第一个状态实现写FIFO,第二个状态来读fifo,这样实现了数据的缓冲,并且在合适的位置给fft开始包和结束包。

    /*-----------------------------------------------------------------------
    
    Date                :        2017-XX-XX
    Description            :        Design for fifo_control.
    
    -----------------------------------------------------------------------*/
    
    module fifo_control
    (
        //global clock
        input                    clk,            //system clock
        input                    rst_n,             //sync reset
        
        //fifo interface
        output    reg                rd_fifo_en,    
        output    reg                 wr_fifo_en,    
        input                      rdempty,
        input                      wrfull,
        
        //fft    interface
        input                    sink_ready,
        output                    sink_sop,
        output                    sink_eop,
        output                    sink_valid
        
    ); 
    
    
    //--------------------------------
    //Funtion :   读数据计数            
    reg            [10:0]        read_cnt;
    
    
    always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            read_cnt <= 11'd0;
        else if(rd_fifo_en)
            read_cnt <= read_cnt + 1'b1;
        else
            read_cnt <= 11'd0;
    end
    
    //--------------------------------
    //Funtion :   fifo 读使能
    reg                state_fifo;
    
    always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
        begin
            state_fifo <= 1'd0;
            rd_fifo_en <= 1'b0;
            wr_fifo_en <= 1'b0;
        end
        else
            case(state_fifo)
            
            //写fifo
            1'd0 :
            begin
                if(wrfull && sink_ready)
                begin
                    rd_fifo_en <= 1'b1;
                    wr_fifo_en <= 1'b0;
                    state_fifo <= 1'b1;
                end
                else
                begin
                    rd_fifo_en <= 1'b0;
                    wr_fifo_en <= 1'b1;
                    state_fifo <= 1'b0;
                end
            end
            
            //读fifo
            1'd1 :
            begin
                if(rdempty)
                begin
                    rd_fifo_en <= 1'b0;
                    wr_fifo_en <= 1'b1;
                    state_fifo <= 1'b0;
                end
                else
                begin
                    rd_fifo_en <= 1'b1;
                    wr_fifo_en <= 1'b0;
                    state_fifo <= 1'b1;
                end
            end
            
            default : ;
            
            endcase
    end
    
    
    /* always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            rd_fifo_en <= 1'd0;
        else if(wrfull && sink_ready)
            rd_fifo_en <= 1'd1;
        else if(rdempty)
            rd_fifo_en <= 1'd0;
        else
            rd_fifo_en <= rd_fifo_en;
    end
    
    //--------------------------------
    //Funtion :   fifo 写使能
    
    always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            wr_fifo_en <= 1'd1;
        else if(rdempty)
            wr_fifo_en <= 1'd1;
        else if(wrfull)
            wr_fifo_en <= 1'd0;
        else
            wr_fifo_en <= wr_fifo_en;
    end */
    
    
    
    //--------------------------------
    //Funtion :   sink_sop sink_eop
    assign        sink_sop = (read_cnt == 1'b1) ? 1'b1 : 1'b0;
    assign        sink_eop = (read_cnt == 11'd2047) ? 1'b1 : 1'b0;
    
    
    
    
    assign        sink_valid = rd_fifo_en;
    
    endmodule
        
  • 相关阅读:
    Cesium实现键盘控制镜头效果
    怎么判断一个服务器的服务器性能
    2T以上的盘怎么分区, 利用parted创建 linuxTB硬盘GPT分区
    解压和压缩的简单用法
    关于windows修改远程登录端口的问题
    tomcat启动非常慢;连接oracle数据库失败,jdbc错误日志提示connection reset;测试主机间网络互通及数据库端口都正常
    docker的安装和基础使用
    Centos7 时区的设置
    Day24 中间件 自定义分页 ModelForm 序列化 缓存 信号
    Day22 博客园的构建
  • 原文地址:https://www.cnblogs.com/bixiaopengblog/p/7265048.html
Copyright © 2020-2023  润新知