状态机效率
0赞
发表于 2017/9/7 22:31:04
阅读(1533)
很多人写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