zoukankan      html  css  js  c++  java
  • 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
        
  • 相关阅读:
    【FIRST USE】第一次用git把代码上传到github
    [多线程学习笔记] 一个线程安全的队列
    C中宏展开问题
    C语言中的命名空间
    c语言中赋值语句的结果
    Python一些难以察觉的错误
    C语言中的内存压缩技术
    简述数据结构:二叉查找树
    指针与指针的引用、指针的指针
    C++ 中的virtual关键词
  • 原文地址:https://www.cnblogs.com/bixiaopengblog/p/7265048.html
Copyright © 2011-2022 走看看