2561|4

112

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

FIFO 的小小疑问 求各位大侠指教 [复制链接]

///////////////////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,大家有没有资料,给小弟看看,谢谢!!

 

 

此帖出自FPGA/CPLD论坛

最新回复

fifo只要了解他的原理就好了,我们用的软件上可以直接调用fifo的库,所以这种模块还是使用现成的比较好啊,“程序员”这个论坛上有很多fifo的程序资料,前不久,我也上传过fifo的资料,希望对你有帮助  详情 回复 发表于 2011-12-18 15:52
点赞 关注
个人签名无一事而不学,无一时而不学
 

回复
举报

6892

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

你要自己设计一个FIFO吗?

此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 

回复

112

帖子

0

TA的资源

一粒金砂(高级)

板凳
 

原帖由 eeleader 于 2011-12-15 15:15 发表 你要自己设计一个FIFO吗?

嗯 想 自己写一个

此帖出自FPGA/CPLD论坛
个人签名无一事而不学,无一时而不学
 
 
 

回复

112

帖子

0

TA的资源

一粒金砂(高级)

4
 

原帖由 eeleader 于 2011-12-15 15:15 发表 你要自己设计一个FIFO吗?

module fifo(clk,rst_n,fifo_wr,fifo_rd,empty,full);

input clk;
input rst_n;
input fifo_wr;
input fifo_rd;

output empty,full;

reg empty;    //空标志
reg full;     //满标志

reg [leth-1:0] fifomem  [dep-1:0];

// ----empty

always @(posedge clk or posedge rst_n)
if(!rst_n)
empty<=1;
else if(fifo_wr)
empty<=0;
else if(fifo_rd&&(wr_ptr_s==rd_ptr_s+1))
empty<=1;
else empty<=empty;

//-----full

always @(posedge clk or posedge rst_n)
if(!rst_n)
full<=0;
else if(fifo_rd)
 full<=0;
else if(fifo_wr&&rd_ptr_s==wr_ptr_s+1)
 full<=0;
else full<=full;


reg valid_rd_s ;
reg valid_wr_s ;

always @(empty or fifo_rd)
if(!empty&&fifo_rd)
valid_rd_s<=1;

always @(full or fifo_wr)
if(!full&&fifo_wr)
valid_wr_s<=1;

reg [dep-1;0] rd;
reg [dep-1;0] wr;


endmodule

 

这个是我看了一片VHDL语言写的 FIFO,自己翻译成verilog代码;我总是感觉我发的帖子上的判断条件有问题,不符合逻辑。

此帖出自FPGA/CPLD论坛
个人签名无一事而不学,无一时而不学
 
 
 

回复

2734

帖子

0

TA的资源

裸片初长成(初级)

5
 
fifo只要了解他的原理就好了,我们用的软件上可以直接调用fifo的库,所以这种模块还是使用现成的比较好啊,“程序员”这个论坛上有很多fifo的程序资料,前不久,我也上传过fifo的资料,希望对你有帮助
此帖出自FPGA/CPLD论坛
个人签名我爱电子!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表