s.i.suprun
Sep 17 2010, 13:25
Добрый день, уважаемые товарищи форумчане. Возник следующий вопрос: использую в своей разработке фифо из ИСЕ, и чтобы лучше понять как оно работает, собрал простенький проект и промоделировал его в ModelSim, по ходу возникли вопросы. Использую программируемый сигнал фифо полное, но вот не могу понять чего этот сигнал так долго держиться (не один такт после того как колличество данных в фифо станет равным не 120, а 119), и почему счетчик колличества прочитаных данных показывает такие значения. Извините, возможно за глупые вопросы, но под конец недели своя голова уже отказывается что-либо понимать. Диаграмки в файле к посту. Заранее благодарен!!!
ADA007
Sep 20 2010, 08:24
Цитата(s.i.suprun @ Sep 17 2010, 16:25)

... Диаграмки в файле к посту. Заранее благодарен!!!
Исходники сгенеренного fifo и testbench в студию!
Shtirlits
Sep 20 2010, 09:12
Не вижу ничего криминального.
Сигналы с одного конца будут всегда запаздывать после операций с другого.
Очень трудно сделать такое FIFO, чтобы после записи 74-ого слова статус стал full, и после чтения этого же слова на следующем же такте этот сигнал выключился.
В документации на FIFO обещают, что статусные сигналы не позволят пользователю записать, когда некуда или прочитать, когда нечего. Счетчики также гарантируют надежность обмена данными с каждой из сторон.
Если счетчик слов со стороны записи, то он может завышать, но не занижать показания.
Со стороны чтения счетчик соответственно имеет право занижать, но не завышать.
Отставание счетчиков вполне объяснимо, так как нужно передать информацию из одного домена в другой, на что требуется синхронизация, если клоки разные и в любом случае перекодирование из кодов грея.
Пользоваться FIFO и учитывать его латентность как константу было бы неверно, выйдет новая версия или в следующем кристалле окажется аппаратное FIFO и все поменяется.