v***6 发帖数: 42 | 1 一个synchronous的FIFO, 如果full信号在第n-1个clock cycle是低, 在第n个clock
cycle是高, 那么在第n个clock cycle, 写入端是否还能再写进FIFO一个数据呢?
具体信号时序如下,full和wr_en都是高有效, 请问data 2是否被写进了FIFO里?
clk: |<- cycle n-1 ->|<- cycle n ->|
full: | low | high |
wr_en: | high |
data_in:| data 1 | data 2 | | c****p 发帖数: 6474 | 2 取决于FIFO实现吧。
我现在做的project里面,full只是个信号,
靠写入端保证不在full的时候assert wr_en。
如果写入端硬给wr_en有效的话还是会写入的,
当然FIFO的数据就被破坏了;
FIFO也可以实现成full的时候wr_en不论是啥都无效,
但是这时候写入端认为已经写入的数据实际没写入,
最后也会出问题。
总而言之,这两种情况都会出问题,
所以应该在设计上保证full的时候wr_en为低。
【在 v***6 的大作中提到】 : 一个synchronous的FIFO, 如果full信号在第n-1个clock cycle是低, 在第n个clock : cycle是高, 那么在第n个clock cycle, 写入端是否还能再写进FIFO一个数据呢? : 具体信号时序如下,full和wr_en都是高有效, 请问data 2是否被写进了FIFO里? : clk: |<- cycle n-1 ->|<- cycle n ->| : full: | low | high | : wr_en: | high | : data_in:| data 1 | data 2 |
| h*******o 发帖数: 778 | 3 It's too difficult to enable full asserted and wr_en deasserted at the same
time. FIFOs should have some reserve space so that even full signal is on,
there is still space in FIFO and it doesn't hurt to write several more.
【在 c****p 的大作中提到】 : 取决于FIFO实现吧。 : 我现在做的project里面,full只是个信号, : 靠写入端保证不在full的时候assert wr_en。 : 如果写入端硬给wr_en有效的话还是会写入的, : 当然FIFO的数据就被破坏了; : FIFO也可以实现成full的时候wr_en不论是啥都无效, : 但是这时候写入端认为已经写入的数据实际没写入, : 最后也会出问题。 : 总而言之,这两种情况都会出问题, : 所以应该在设计上保证full的时候wr_en为低。
| v***6 发帖数: 42 | 4 请教楼上
为啥很难实现enable full asserted and wr_en deasserted at the same
time?
如果把(!full&&wr_en)连到FIFO的memory的write enable上, 行不行 | h*******o 发帖数: 778 | 5 Your approach keeps FIFO safe, but the writing data
may get lost when both full and wr_en is on. The sender needs cycles to get
the full signal (synchronization, long-distance communication latency).
【在 v***6 的大作中提到】 : 请教楼上 : 为啥很难实现enable full asserted and wr_en deasserted at the same : time? : 如果把(!full&&wr_en)连到FIFO的memory的write enable上, 行不行
| x********u 发帖数: 1118 | 6 为什么一定要full,做个almost full不就行了
【在 v***6 的大作中提到】 : 请教楼上 : 为啥很难实现enable full asserted and wr_en deasserted at the same : time? : 如果把(!full&&wr_en)连到FIFO的memory的write enable上, 行不行
|
|