09/12
2020
收到群发说有人在重置(rst_n)fifo时试图同时重置fifo的内置mem(二维register),但是写的却是mem[write_pointer]<=SIZE'b0,导致了前后仿不一致。
回头查了查 Cliff Cummings那篇,可以注意到他的fifo mem部分根本就没有重置。那一段always里就没有任何rst信号。
这是因为,fifo满还是空还是可读/可写从来就不取决于mem里有什么,仅仅取决于写指针和读指针的关系。只要两指针都正确地回到了0,同时empty置1,fifo mem里面不管是数据也好还是X也好都不重要。反正都要等到写入新数据之后才会读,所以mem的重置是不需要的。
至于最开始那个例子,说是综合后形成了gated reset,我也不懂为什么会这样,也许直接置零整个fifo mem就会是正常的?
当然了本来就不需要的东西何必浪费代码和面积去弄一个呢……
突然意识到一个事,这不是普通的gated reset,而是你在异步的rst_n树上加了一个同步的信号,这就是作死啊。
同步的那就随你玩了吧
关于FIFO reset的一个细节
-
Firefox 78Windows 所以数字前端到底是干嘛的?
刚刚才意识到这其实是个async问题。