关于测试 异步 fifo的复位使用
按下按钮K4(key_in[3])后开始写入到fifo,延时100个CLK读出FIFO,确保写入、读出之间数量不一致。在复位的时候可观察。写入和读出都是松开按钮K4停止。
按下按钮K0(key_in[0])后,开始复位。
按下按钮是低电平有效。
IP 核的设置
顶层程序(top)
(* mark_debug="true" *) reg[15:0]alcnt,rd_cnt;
(* mark_debug="true" *) reg[2:0] seq;
(* mark_debug="true" *) reg kk,k_end,rd_key;
(* mark_debug="true" *) wire k3,k0;
assign k3=key_in[3];
assign k0=key_in[0];
always @(posedge sys_clk)
begin
alcnt<=alcnt==60000 ? 0:alcnt+1;
seq <= seq==1 ? 0 : seq+1;
kk<=key_in[3];
if(key_in[3] && kk==0)
k_end<=1;
else if(key_in[3]==0 && kk)
k_end<=0;
if(key_in[3]==0 )
begin
rd_key<=1;
rd_cnt<=rd_cnt==100 ? 100:rd_cnt+1;
end
else
begin
rd_key<=0;
rd_cnt<=0;
end
end
调试情况
按下K4(K3),写入、读出fifo松下按钮后,empty为低,所以没有完全读出
按下按钮K0,(复位不能一个clk,需要延长一段时间)
empty、full都为高
松开按钮后
观察empty、full 复位完成