реклама на сайте
подробности

 
 
> Асинхронный FIFO, способы реализации
Vitёk
сообщение Feb 28 2005, 10:58
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 17-01-05
Из: Ростов-на-Дону
Пользователь №: 2 018



В свете разработки PCI интерфейса на ПЛИС скоро придется решать проблему с сабжем. huh.gif
До сих пор приходилось делать ФИФО, которые работают с непрерывным потоком данных. Выглядело это примерно так: указатель записи работал на входной тактовой, указатель чтения - на выходной тактовой. А контроль заполнения был трогательно простой: старший разряд указателя записи сначала приводился к выходной тактовой, а потом сравнивался с аналогичным разрядом указателя чтения. как только они не совпадали - начинался процесс слива. В общем, это работало как качели, по заполнению половины буфера.
Теперь же мне надо будет сливать буфер до последнего байта, скажем так - выжимать его досуха. Вот тут и выползают проблемы.Сравнивать указатели в лоб, даже привязав один к тактовой частоте второго - опасно, может случиться такая ситуация: оба указателя совпали, но из-за задержек распространения один из разрядов защелкнулся раньше, чем успели доползти изменения. А компаратор адресов, пользуясь этим значением, выдаст несовпадение, и далее ФИФО сделает один холостой круг.
Другой вариант подсказал коллега. Когда зараннее известно, какая тактовая выше - в этом случае к более высокой тактовой можно привязывать стробы записи (или чтения), и уже на ней считать заполненность буфера. Только как это будет выглядеть, мне до конца не ясно. Да и не нравиться мне этот вариант.
Тем не менее CoreGen предлагает стандартный асинхронный ФИФО, который, по идее, работает без проблем. На него есть даже модель - но она для симуляции. А интересно, как он на самом деле сделан...
У кого какие мысли есть по этому поводу? Приглашаю к обсуждению. laugh.gif


--------------------
/* Всё хорошо в меру. */
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Vitёk
сообщение Feb 21 2007, 12:21
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 17-01-05
Из: Ростов-на-Дону
Пользователь №: 2 018



Если кому интересно, выкладываю вариант синтезируемого ФИФО. Основное отличие Coregen`овского - очередные данные на выходе присутствуют сразу (а как правило - ещё до того), как сигнал empty становится неактивным (В корегеновсом для получения данных нужно подать строб чтения и подождать 1 такт).
Модуль проверен, через него без ошибок прокачана не одна сотня гиг тестовых данных. smile.gif
Прикрепленные файлы
Прикрепленный файл  v_fifo16.zip ( 1.66 килобайт ) Кол-во скачиваний: 247
 


--------------------
/* Всё хорошо в меру. */
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Feb 21 2007, 13:28
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Vitёk @ Feb 21 2007, 12:21) *
В корегеновсом для получения данных нужно подать строб чтения и подождать 1 такт

Ну это не совсем так. CoreGen (по крайней мере, начиная с 8.1, про версии 7.x не скажу -- не использовал) позволяет сгенерировать и FWFT- (first word falls though) FIFO.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 13:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016