我在使用ALTERA的FPGA做一个FIFO,在系统中当双口RAM用。读写异步,由于我的数据深度不是2的整数次幂,大概300多个数据,所以我只能设置一个512深度的FIFO,这样就无法利用FIFO自动的FULL和EMPTY信号。我能想到的办法由2个:
1 凑到512,写数据的一方把剩下的写0,凑够512个。但这个效率不高,不想用。
2 利用FIFO的WRUSEDW和RDUSEDW两个数据,在FPGA中调整FULL和EMPTY信号。(其实不是FIFO自动的FULL和EMPTY,但代表我要写的数据已经够了或者空了)
现在的问题是:我一向理解这两个数据是代表FIFO中的实际个数,两者应该一致,只不过是所依据的反转沿不同,但QUARTUS提供的仿真时序却不是如此,见下图:数据被读之后WRSUEDW并没有发生变化。除非该信号有延迟,图片显不出来,但会延迟这么多吗?
不知道有没有用过类似的应用的大虾,对深度不是2的整数次幂,会如何做?
谢谢。 |