异步不对称FIFO读出数据存在问题。
时间:10-02
整理:3721RD
点击:
我是在DDR2读出来数据出来加了个异步FIFO,256bit进,8bit出。我用STP观察时候发现有时候前两个256bit读出来数据是正确,但是后面就有些错误,有时候会有规律对调一些数据的位置,不知道哪位大哥有遇到过?
rd_fifo rdfifo(
.aclr(~local_init_done),
.data(sys_data_out), //输入256Bit
.rdclk(rd_clk),
.rdreq(rdf_rdreq), //读请求
.wrclk(afi_clk),
.wrreq(sdram_rd_ack), //写请求
.q(rdf_dout), //输出的8bit
.rdusedw(rdf_use),
.rdempty(rdempty)
);
其中
assign sdram_rd_req = rdf_rdreq && (rdf_use <= 9'd256) && (!finish_ack);
rd_fifo rdfifo(
.aclr(~local_init_done),
.data(sys_data_out), //输入256Bit
.rdclk(rd_clk),
.rdreq(rdf_rdreq), //读请求
.wrclk(afi_clk),
.wrreq(sdram_rd_ack), //写请求
.q(rdf_dout), //输出的8bit
.rdusedw(rdf_use),
.rdempty(rdempty)
);
其中
assign sdram_rd_req = rdf_rdreq && (rdf_use <= 9'd256) && (!finish_ack);
看看是否FIFO FULL满了,会丢失数据的
谢谢回复。但是我这个FIFO一直处于未满状态的,我故意把深度调大了很多,但是接受到的数据还是会 一段正确,中间某个数据异常,再一段正确,某个数据异常 这样。
会不会是读出来的256bit数据与对应写入FIFO的clock时序关系不匹配造成的
DDR2 会中断 refresh数据 , fifo wren 需要判断data valid, 然后fifo读的时候 最后用read counter 控制
谢谢回复,我的写请求就是 wrreq = rdata_valid ; 您说那个read counter是怎么用?
谢谢!
问题解决了。比较坑爹,我不用signaltap ii 我用串口发送到PC查看数据,发现都是正确的,,,,再次感谢回复的个位。
我想问个问题啊,我也用了256进64位出的fifo,为什么读出数据先出来的是高64位,是设置的问题吗?
FIFO最先出来的事高位。若需要低位现出来,在写入FIFO的时候,可以对高低位做变换
你用的是xilinx的fifo还是自己写的?
