关于FIFO的一段设计代码问题,有点看不懂,,求解答
时间:10-02
整理:3721RD
点击:
alway@(posedge wclk or posedge reset)if(reset)
full<=1'b0;
else if(waddr_gray_next==wclk_raddr_reg2&&wen=1'b0)
full<=1'b1;
elseif(waddr_gray!=wclk_raddr_reg2)
full<=1'b0;
else
full<=full
wclk是是写时钟,full高有效,waddr_gray格雷码的写地址,wclk_raddr_reg2是读地址,wen是读使能,低有效,
问题有以下几点
1,waddr_gray_next==wclk_raddr_reg这个判决条件,,为啥不是waddr_gray==wclk_raddr_reg?
2,elseif(waddr_gray!=wclk_raddr_reg2)这句话是否多余,,有什么作用,,我自己看不出有什么作用
跪求知道的大神解释哈,,
full<=1'b0;
else if(waddr_gray_next==wclk_raddr_reg2&&wen=1'b0)
full<=1'b1;
elseif(waddr_gray!=wclk_raddr_reg2)
full<=1'b0;
else
full<=full
wclk是是写时钟,full高有效,waddr_gray格雷码的写地址,wclk_raddr_reg2是读地址,wen是读使能,低有效,
问题有以下几点
1,waddr_gray_next==wclk_raddr_reg这个判决条件,,为啥不是waddr_gray==wclk_raddr_reg?
2,elseif(waddr_gray!=wclk_raddr_reg2)这句话是否多余,,有什么作用,,我自己看不出有什么作用
跪求知道的大神解释哈,,
如果waddr_gray==wclk_raddr_reg,同时写的话,就有可能FIFO溢出了
elseif(waddr_gray!=wclk_raddr_reg2)是在full置高后清零的
哦,那个next意思是如果深度为N,那么数据写入为N-1个的时候就判定为满,这样留了一个空地址,也就是所谓的几乎满判定吗?
wclk_raddr_reg2是读地址,full是用于写的,因此并不能认为写到n-1就不写了,这得看你的读写时钟关系以及wclk_raddr_reg值的设定
