加班猫

人于人区别,就是远见不一样。szfpga.com

状态机效率

0
阅读(1565)

     很多人写fpga代码都会用到状态机,尤其是读取FIFO的数据更是需要状态机的过程分析。

    关键问题一个读取数据效率问题,这个涉及到FIFO的后端读取或者前端写入效率问题。

    经常看到很多FIFO的读取或者写入的阈值(写入usrdw或者rdusw)很小,所以每次读取数据是判断很小的大小,马上进行读取,由于usrdw和rdusw是延时2个时钟(根据一般的配置,有的要3个时钟),所以每次读取的阈值要相应的减2操作。

    if(Afifo_usrdw > MIN_FIFO_DEPTH +2'd2)

    begin

        state <= read_fifo_state;

        step  <=MIN_FIFO_DEPTH;

    end

   然后读取数据,如果写入的过程的太过于快,会导致效率低下。因为前段远远超过后端读取的数据,每次FIFO_DEPTH 步长读取的速度太慢,有可能导致50%读取数据能力。

   所以改读取的步长是 Afifo_usrdw-2'd2;

    if(Afifo_usrdw > MIN_FIFO_DEPTH +2'd2)

    begin

        state <= read_fifo_state;

        step  <= Afifo_usrdw-2'd2;

    end