Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Асинхронный FIFO
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Vitёk
В свете разработки PCI интерфейса на ПЛИС скоро придется решать проблему с сабжем. huh.gif
До сих пор приходилось делать ФИФО, которые работают с непрерывным потоком данных. Выглядело это примерно так: указатель записи работал на входной тактовой, указатель чтения - на выходной тактовой. А контроль заполнения был трогательно простой: старший разряд указателя записи сначала приводился к выходной тактовой, а потом сравнивался с аналогичным разрядом указателя чтения. как только они не совпадали - начинался процесс слива. В общем, это работало как качели, по заполнению половины буфера.
Теперь же мне надо будет сливать буфер до последнего байта, скажем так - выжимать его досуха. Вот тут и выползают проблемы.Сравнивать указатели в лоб, даже привязав один к тактовой частоте второго - опасно, может случиться такая ситуация: оба указателя совпали, но из-за задержек распространения один из разрядов защелкнулся раньше, чем успели доползти изменения. А компаратор адресов, пользуясь этим значением, выдаст несовпадение, и далее ФИФО сделает один холостой круг.
Другой вариант подсказал коллега. Когда зараннее известно, какая тактовая выше - в этом случае к более высокой тактовой можно привязывать стробы записи (или чтения), и уже на ней считать заполненность буфера. Только как это будет выглядеть, мне до конца не ясно. Да и не нравиться мне этот вариант.
Тем не менее CoreGen предлагает стандартный асинхронный ФИФО, который, по идее, работает без проблем. На него есть даже модель - но она для симуляции. А интересно, как он на самом деле сделан...
У кого какие мысли есть по этому поводу? Приглашаю к обсуждению. laugh.gif
andrew_b
Цитата(Vitёk @ Feb 28 2005, 14:58)
Тем не менее CoreGen предлагает стандартный асинхронный ФИФО, который, по идее, работает без проблем. На него есть даже модель - но она для симуляции. А интересно, как он на самом деле сделан...
У кого какие мысли есть по этому поводу? Приглашаю к обсуждению. laugh.gif


А чего тут обсуждать. У Xilinx'a секретов нет:
ftp://ftp.xilinx.com/pub/applications/xapp/xapp131.zip
ftp://ftp.xilinx.com/pub/applications/xapp/xapp258.zip

Если надо, чтобы хвосты FIFO были разной разрядности, то и это можно:
ftp://ftp.xilinx.com/pub/applications/xapp/xapp205.zip
ftp://ftp.xilinx.com/pub/applications/xapp/xapp261.zip

Поменяв .zip на .pdf, можно скачать соответствующие app notes.
Vitёk
Сенкс, smile.gif почитаю.

Почитал. rolleyes.gif То, что надо.
У меня была мысль использовать код Грея при переносе состояния счётчиков с одной тактовой на другую (интуитивно так появилась), но я её прогнал, так как _показалось_, что и этот способ не гарантирует отсутсвие сбоев. После прочтения соответствующих ХАРР-ов пришлось даже приложить некоторое усилие, что бы мысль типа "при изменении всего одного разряда логические гонки исключены" продавилась в закостеневшие синапсы. Ещё раз спасибо. smile.gif
IUser
Поменяв .zip на .pdf, можно скачать соответствующие app notes.

Поменял, но к сожалению не смог скачать app notes, обьясните где их можно скачать?
andrew_b
Цитата(IUser @ Feb 20 2007, 16:05) *
Поменяв .zip на .pdf, можно скачать соответствующие app notes.

Поменял, но к сожалению не смог скачать app notes, обьясните где их можно скачать?

Да, за два года на xilinx многое изменилось... Ищите, начиная отсюда: http://www.xilinx.com/xlnx/xweb/xil_public...plication+Notes
Vitёk
Если кому интересно, выкладываю вариант синтезируемого ФИФО. Основное отличие Coregen`овского - очередные данные на выходе присутствуют сразу (а как правило - ещё до того), как сигнал empty становится неактивным (В корегеновсом для получения данных нужно подать строб чтения и подождать 1 такт).
Модуль проверен, через него без ошибок прокачана не одна сотня гиг тестовых данных. smile.gif
andrew_b
Цитата(Vitёk @ Feb 21 2007, 12:21) *
В корегеновсом для получения данных нужно подать строб чтения и подождать 1 такт

Ну это не совсем так. CoreGen (по крайней мере, начиная с 8.1, про версии 7.x не скажу -- не использовал) позволяет сгенерировать и FWFT- (first word falls though) FIFO.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.