[an error occurred while processing this directive]
|
у LPM_FIFO нет конвейера (он тактируется одним клоком - на первом клоке записал первое слово, на втором - считал первое и записал второе). У LPM_FIFO_DC (dual clock) длины конвейеров зависят от параметров RDSYNC_DELAYPIPE (длина конвейера, по которому проходит управление по направлению "пишушая сторона" -> "читающая сторона"), WRSYNC_DELAYPIPE (длина конвейера, по которому проходит управление по направлению "читающая сторона" -> "пишушая сторона"). Плюс дополнительная конвейеризация портов rdusedw и wrusedw на DELAY_RDUSEDW и DELAY_WRUSEDW соответственно. В общем, вся эта бодяга есть защита от метастабильности. По умолчанию длины *SYNC конвейеров - 3 такта, DELAY_*USEDW - 1 такт. Итого (насколько помнится) по умолчанию оно будет работать так (глубина 8, прочерками помечены такты, на который не подавались сигналы rdreq и wrreq):
cycle wr rd rdempty wrempty rdfull wrfull
0 --- --- 1 1 0 0
1 1 --- 1 1 0 0
2 2 --- 1 1 0 0
3 3 --- 1 1 0 0
4 4 1 0 1 0 0
5 5 2 0 1 0 0
6 6 3 0 0 0 0
7 7 4 0 0 0 0
8 8 --- 0 0 0 0
9 9 --- 0 0 0 0
10 10 --- 0 0 0 0
11 --- --- 0 0 0 1
12 --- --- 0 0 0 1
13 --- --- 0 0 0 1
14 --- --- 0 0 1 1
15 --- --- 0 0 1 1
То есть - когда нет сигнала wrfull - можно писать каждый такт, не пропуская ни одного такта. Когда нет rdempty - можно читать каждый такт. Итого - при правильной организации работы FIFO можно один раз за каждый такт произвести И ЗАПИСЬ, И ЧТЕНИЕ.
P.S. Не ужели трудно почитать документацию и посмотреть на работу FIFO в симуляторе ?
E-mail: info@telesys.ru