书上的一段FIFO的代码,越看越不对劲....

[复制链接]
 楼主| tigris 发表于 2009-5-7 10:05 | 显示全部楼层 |阅读模式
module&nbsp;FIFO(clk,&nbsp;reset_n,&nbsp;data_in,&nbsp;read_n,&nbsp;write_n,&nbsp;data_out,&nbsp;full,&nbsp;empty);<br />&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clk;<br />&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reset_n;<br />&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;&nbsp;[7:0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data_in;<br />&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read_n;<br />&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_n;<br />&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;[7:0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data_out;<br />&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;full;<br />&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;empty;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clk;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reset_n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;[7:0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data_in;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read_n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;full;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;empty;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reg&nbsp;&nbsp;&nbsp;&nbsp;[7:0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data_out;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reg[7:0]&nbsp;&nbsp;&nbsp;&nbsp;fifo_mem[15:0];&nbsp;&nbsp;//fifo存储体<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reg[3:0]&nbsp;&nbsp;&nbsp;&nbsp;counter;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//计数器,表示fifo用了多少<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reg[3:0]&nbsp;&nbsp;&nbsp;rd_pointer;&nbsp;//fifo读指针<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reg[3:0]&nbsp;&nbsp;&nbsp;wr_pointer;&nbsp;&nbsp;&nbsp;&nbsp;//写指针<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//满空状态标志<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assign&nbsp;#`del&nbsp;full=(counter==16)?1'b1:1'b0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assign&nbsp;#`del&nbsp;empty=(counter==0)?1'b1:1'b0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//复位操作<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;always@(reset_n)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(~reset_n)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#`del;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assign&nbsp;rd_pointer=4'b0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assign&nbsp;wr_pointer=4'b0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#`del;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deassign&nbsp;rd_pointer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deassign&nbsp;wr_pointer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deassign&nbsp;counter;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//计数,读写功能<br />&nbsp;&nbsp;&nbsp;&nbsp;always@(posedge&nbsp;clk)<br />&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;//读操作数,计数器递减<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(write_n)&nbsp;???这里为何只判断写使能无效就将计数器减1&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;counter&lt=#`del&nbsp;counter-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data_out&lt=#`del&nbsp;fifo_mem[rd_pointer];<br />&nbsp;&nbsp;&nbsp;&nbsp;//如果读指针指向末尾,则返回<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(rd_pointer==14)&nbsp;???rd_pointer等于15时才复位吧<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rd_pointer&lt=#`del&nbsp;4'b0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rd_pointer&lt=#del&nbsp;rd_pointer+1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(~write_n)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//检查是否溢出<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(counter&gt=15)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$display(&quot;\nerror&nbsp;at&nbsp;time&nbsp;%0t&quot;,$time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$display(&quot;fifo&nbsp;underflow\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$stop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写操作数,计数器加1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(read_n)&nbsp;&nbsp;???这里为何只判断读使能无效就将计数器加1&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;counter&lt=#`del&nbsp;counter+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fifo_mem[wr_pointer]&lt=#`del&nbsp;data_in;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果写指针指向末尾,则返回<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(wr_pointer==14)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wr_pointer&lt=#`del&nbsp;4'b0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wr_pointer&lt=#`del&nbsp;wr_pointer+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />endmodule<br /><br />好不容易手动把代码敲到ISE里面。觉得代码的逻辑太怪了,在读写标志递增时的条件判断感觉不对劲。
钻研的鱼 发表于 2009-5-7 22:01 | 显示全部楼层

尽信书则不如无书

altera公司有同步逻辑fifo的代码,且开放。
 楼主| tigris 发表于 2009-5-8 08:53 | 显示全部楼层

哦,谢谢楼上

去altera公司网站去下载吗
Fourier00 发表于 2009-5-8 19:40 | 显示全部楼层

我的妈啊 这种fifo代码

我的妈啊&nbsp;这种fifo代码
wujing198 发表于 2009-5-8 20:27 | 显示全部楼层

……

建议楼主曝光书名……<br />代码风格太差了,误导新人。
 楼主| tigris 发表于 2009-5-13 15:34 | 显示全部楼层

中国电力出版社。袁文波。图书馆借的书
vteaflf 发表于 2009-5-16 21:43 | 显示全部楼层

回家打算买一本!
wujing198 发表于 2009-5-17 21:04 | 显示全部楼层

╮(╯▽╰)╭

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

本版积分规则

76

主题

175

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部