FIFO 的小小疑问 求各位大侠指教

2019-03-25 09:47发布

///////////////////write pointer////////////////////////  always @(posedge clk or negedge rst_n)  begin      if(!rst_n) wrt_ptr <= 3'b0;            else if(wrt_ptr == 3'b111) wrt_ptr <=0;      else if((!wrt_strobe_n)&&(full_n)&&(rd_strobe_n))        begin        wrt_ptr<=(wrt_ptr+1);       // wr_mark<=1;       end      else begin        wrt_ptr<=wrt_ptr;        //wr_mark<=0;          end  end    ///////////////////read pointer/////////////////////  always @(posedge clk or negedge rst_n)  begin      if(!rst_n) rd_ptr <= 3'b0;            else if(rd_ptr == 3'b111) rd_ptr <=0;      else if((!rd_strobe_n)&&(empty_n)&&(wrt_strobe_n))        begin        rd_ptr<= (rd_ptr+1);        //rd_mark<=1;       end      else begin        rd_ptr<=rd_ptr;        //rd_mark<=0;        end  end    //////////register  counter:from 0(empty) to 8(full)////////  always @(posedge clk or negedge rst_n)  begin      if(!rst_n) reg_count<=0;      else      casez({wrt_strobe_n,rd_strobe_n})          2'b01: reg_count <= (full_n) ? (reg_count+1) : reg_count;//write---count+1          2'b10: reg_count <= (empty_n) ? (reg_count-1) : reg_count;//read---count-1          default: reg_count <= reg_count;      endcase  end         ///////////////////write pointer////////////////////////     if((!wrt_strobe_n)&&(full_n)&&(rd_strobe_n))       begin        wrt_ptr<=(wrt_ptr+1);          end      else        begin        wrt_ptr<=wrt_ptr;          end   想问一下, 给写信号,不给读信号的,非满的时候 执行 +1的操作; else下面执行的 给读写信号,非满!执行保持!   我写一个同时读一个,这个时候写指针不+1么?   FIFO 是先进先出,我写到 1 ,2 ,3 号地址,现在 应该是先从1号地址读出吧,如果我写到了3号房间的时候,开始从1号房间开始读的话,那么我在写的话 应该是往4号房间里写啊,读也应该是从1号一次+1 的往外读啊!但是 从程序上看 并没有实现这个思路的操作。   想试图 写一个FIFO,大家有没有资料,给小弟看看,谢谢!!     此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
jjkwz
2019-03-25 21:40
fifo只要了解他的原理就好了,我们用的软件上可以直接调用fifo的库,所以这种模块还是使用现成的比较好啊,“程序员”这个论坛上有很多fifo的程序资料,前不久,我也上传过fifo的资料,希望对你有帮助

一周热门 更多>