一、伪双端口RAM配置
关于创建和配置IP,可以参考我的另一篇文章:Vivado 双口RAM IP核的使用,不同之处只是在于本文使用的伪双端口RAM的写端口和读端口都加了使能信号,也即没有选择始终使能。
这里需要注意的是,如果想要解决读写冲突,也就是当同时读写同一地址时,能读出之前存在该地址的旧数据,也能将要写的新数据正确写入到该地址,那写端口的操作模式一定要选择READ_FIRST
或者NO_CHANGE
。
如果选择WRITE_FIRST
,那么当读写冲突时,读出的数据是此时准备写入的数据,并不是之前存储的数据,这显然不符合逻辑。
1、关于写地址的变化,只需考虑we有效的情况:
- 只写不读时:若FIFO满,则写失败,写地址不变;若FIFO不满,则写一定成功,写地址加1。
- 又写又读时:若FIFO满,读写为同一单元,因读操作只需读取旧数据,所以读写都成功,写地址加1;若FIFO不满,则进行读写操作的是两个不同单元,所以写一定成功,所以写地址也加1。
总结起来,(we有效&&((re无效&