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

 
 
 
Reply to this topicStart new topic
> нужен совет по реализации Asynchronous FIFO
lutik
сообщение Oct 31 2005, 10:40
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 128
Регистрация: 30-06-04
Из: Odessa
Пользователь №: 216



Доброго дня уважаемым.
Трабла возникла с реализацией Asynchronous FIFO, такого рода:
особенностью является то, что жить будет оно в xc2s100-5 с высокой для ентого чипа частотой - 108MHz по записи и не особо высокой - 25MHz по чтению.
Флаги Пуст/Полон выставляю по следующим условиям
empty <= '1' when (rptr = wptr) else '0';
full <= '1' when ( (wptr - rptr) >= (DEPTH -2) ) else '0';
и далее перевожу их в каждый клок домен отдельно.
empty - в домен чтения, full - в домен записи.

в симуляции все нормально, но синтезатор, ЗАРАЗА, убивает всю времянку со стороны записи. Оно и понятно - сумматор и сравнение в комдинаторике дело не быстрое.

Може кто присоветует другие алгоритмы формирования флагов или ваще как-то по другому fifo это сделать а то замучился совсем.

PS. варианты со счетчиками в коде Грея не предлагать - спартан медленный и 8-ми разрядный счетчик Грея сам по себе не синтезируется на нужную времянку


--------------------
однако..
Go to the top of the page
 
+Quote Post
iosifk
сообщение Oct 31 2005, 11:13
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(lutik @ Oct 31 2005, 13:40)
Доброго дня уважаемым.
Трабла возникла с реализацией Asynchronous FIFO,
Може кто присоветует другие алгоритмы формирования флагов или ваще как-то по другому fifo это сделать а то замучился совсем.

*


Для справки, возможно поможет. Там у них на сайте есть еще...
Удачи.
Прикрепленные файлы
Прикрепленный файл  CummingsSNUG2002SJ_FIFO1.pdf ( 136.85 килобайт ) Кол-во скачиваний: 341
Прикрепленный файл  CummingsSNUG2002SJ_FIFO2.pdf ( 120.8 килобайт ) Кол-во скачиваний: 259
 


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
USTAS
сообщение Oct 31 2005, 14:16
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 46
Регистрация: 27-09-04
Пользователь №: 731



Сравнение двух указателей в FIFO можно осуществлять на двунаправленном счетчике, но для этого необходимо события записи и чтения перевести на одну тактовую.

Тогда:

WNR = ( WR & ~RD); // только запись
RNW = (~WR & RD); // только чтение
EMPTY = ~noEMPTY; // флаг "FIFO пусто"

always @ (posedge WCLK)
begin
if (FLUSH) COUNT = 0; // очистка FIFO
else case (1'b1)
WNR: COUNT = COUNT + 1;
RNW: COUNT = COUNT - 1;
endcase
end

always @ (posedge WCLK)
begin
if (FLUSH) noEMPTY = 0;
else if ((COUNT == 0) & WNR) noEMPTY = 1;
else if ((COUNT == 1) & RNW) noEMPTY = 0;
end

always @ (posedge WCLK)
begin
if (FLUSH) FULL = 0;
else if ((COUNT == (DEPTH - 1)) & WNR) FULL = 1;
else if ((COUNT == (DEPTH - 0)) & RNW) FULL = 0;
end
Go to the top of the page
 
+Quote Post
lutik
сообщение Oct 31 2005, 16:12
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 128
Регистрация: 30-06-04
Из: Odessa
Пользователь №: 216



Цитата(USTAS @ Oct 31 2005, 17:16)
Сравнение двух указателей в FIFO можно осуществлять на двунаправленном счетчике, но для этого необходимо события записи и чтения перевести на одну тактовую.

Тогда: 

WNR = ( WR & ~RD);        // только запись
RNW = (~WR &  RD);        // только чтение

always @ (posedge WCLK)
begin
  if (FLUSH) COUNT = 0;  // очистка FIFO
  else case (1'b1)
      WNR: COUNT = COUNT + 1;
      RNW: COUNT = COUNT - 1;
  endcase
end

*


не шарю в верилоге, но попой чувствую что при длительности клока чтения в 4-е, скажем, раза больше длительности клока записи получим 4 вычитания за один такт чтения..
такая конструкция с успехом при одном клоке с обоих сторон работает

а ваще 2документа из предыдущего поста помогли железно


--------------------
однако..
Go to the top of the page
 
+Quote Post
USTAS
сообщение Nov 1 2005, 08:26
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 46
Регистрация: 27-09-04
Пользователь №: 731



Для того, чтобы приведенный код работал,
НЕОБХОДИМО СОБЫТИЯ ЗАПИСИ И ЧТЕНИЯ
ПЕРЕВЕСТИ НА ОДНУ ТАКТОВУЮ.
Думаю так заметнее стало, а то видно не прочитали...

В приведенном коде события WR и RD предварительно должны быть переведены на тактовую WCLK. Это можно проделать разными способами, и порой реализация зависит от специфики применения FIFO в схеме.
Go to the top of the page
 
+Quote Post
Coryphae
сообщение Nov 8 2005, 01:50
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 29-10-05
Пользователь №: 10 268



Принцип следующий (так у меня в проекте на Альтере сделано). Берется синхронная FIFO, т.е. с одним клоком и входами разрешения чтения RDEna и разрешения записи WREna. На клок фифо вешается высокая тактовая частота, скажем Fт. Тактовый сигнал чтения (пусть будет RDClk, частота Frd) заводишь на вход запуска одновибратора. Сам одновибратор тактируется по частоте Fт. В AHLD одновибратор строится буквально на двух триггерах DFF, который формирует одиночный импульс длительностью T = 1/Fт, по какому тебе угодно перепаду сигнала RDClock. Этот самый импульс и используешь как импульс разрешения чтения RDEna, тогда будет все читаться однократно. А теперь ОГРАНИЧЕНИЯ: После перепада сигнала RDClock удерживать его не менее Т, гарантированное чтение с выхода фифо производить не ранее чем через 2Т после перепада сигнала RDClock, следствие, 2Frd < Fт. Если же уделить внимание метастабильности, то добавьте еще один триггер: http://www.elvira.ru/_files/tektronix.pdf


--------------------
"Слабые места любого проекта любят собираться в группы" - Пятый закон проектирования.
"Двусмысленность инвариантна" - Принцип неопределенности Хартца.
Законы мерфи (с) А. БЛОХ.
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 8 2005, 05:18
Сообщение #7


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Coryphae @ Nov 7 2005, 20:50) *
Принцип следующий (так у меня в проекте на Альтере сделано). Берется синхронная FIFO, т.е. с одним клоком и входами разрешения чтения RDEna и разрешения записи WREna. На клок фифо вешается высокая тактовая частота, скажем Fт. Тактовый сигнал чтения (пусть будет RDClk, частота Frd) заводишь на вход запуска одновибратора. Сам одновибратор тактируется по частоте Fт. В AHLD одновибратор строится буквально на двух триггерах DFF, который формирует одиночный импульс длительностью T = 1/Fт, по какому тебе угодно перепаду сигнала RDClock. Этот самый импульс и используешь как импульс разрешения чтения RDEna, тогда будет все читаться однократно. А теперь ОГРАНИЧЕНИЯ: После перепада сигнала RDClock удерживать его не менее Т, гарантированное чтение с выхода фифо производить не ранее чем через 2Т после перепада сигнала RDClock, следствие, 2Frd < 2Fт. Если же уделить внимание метастабильности, то добавьте еще один триггер: http://www.elvira.ru/_files/tektronix.pdf


Чего только люди не придумают, лишь бы исползовать двухклоковой памяти smile.gif
зачем городить огород, двухпортовка уже есть праактически во всех ФПГА, остаеться только корректно обработать флаги и указатели.
А алгоритм их обработки достаточно прост и прекрасно расписан в указаных документах.


--------------------
Go to the top of the page
 
+Quote Post
Coryphae
сообщение Nov 9 2005, 09:40
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 29-10-05
Пользователь №: 10 268



Цитата(des00 @ Nov 8 2005, 08:48) *
Чего только люди не придумают, лишь бы исползовать двухклоковой памяти smile.gif
зачем городить огород, двухпортовка уже есть праактически во всех ФПГА, остаеться только корректно обработать флаги и указатели.
А алгоритм их обработки достаточно прост и прекрасно расписан в указаных документах.


Ну тогда подскажите какие параметры нужно выставить на примере мегафункций lpm_fifo_dc или dcfifo по теме данной ветки, только тогда вашу критику можно считать конструктивной, и вы однозначно поможете и мне и автору ветки. cool.gif


--------------------
"Слабые места любого проекта любят собираться в группы" - Пятый закон проектирования.
"Двусмысленность инвариантна" - Принцип неопределенности Хартца.
Законы мерфи (с) А. БЛОХ.
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 9 2005, 11:18
Сообщение #9


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Coryphae @ Nov 9 2005, 04:40) *
Ну тогда подскажите какие параметры нужно выставить на примере мегафункций lpm_fifo_dc или dcfifo по теме данной ветки, только тогда вашу критику можно считать конструктивной, и вы однозначно поможете и мне и автору ветки. cool.gif


во первых я в упор не вижу, где в первом вопросе пост, про алтьтеры
во вторых что и как нужно поставить у мегафункций раза 4 обсуждалось на телесистах в течении последних 2-3 месяцев.
в третьих у ксалинкса все хорошо работает хоть с корегенератором, хоть без. как на аппаратных фифо, так и на софтовых


--------------------
Go to the top of the page
 
+Quote Post
Coryphae
сообщение Nov 9 2005, 22:12
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 29-10-05
Пользователь №: 10 268



2dess00
Я не против, если вы приведете ПРИМЕРЫ "двухпортовки" на основе FPGA любой другой фирмы, какой пердпочтете. Вот мне интересно для Alter`ы... Однако все ваши ОТВЕТЫ можно считать неинформативными в отстутствие каких либо конкретных примеров и ссылок(на ветки тогоже тот-же телесис). Надеясь на ОТВЕТ, с уважением, Е.


--------------------
"Слабые места любого проекта любят собираться в группы" - Пятый закон проектирования.
"Двусмысленность инвариантна" - Принцип неопределенности Хартца.
Законы мерфи (с) А. БЛОХ.
Go to the top of the page
 
+Quote Post
vetal
сообщение Nov 9 2005, 22:54
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



примеры есть на opencores модули называются: generic_fifos и generic_memories.
Go to the top of the page
 
+Quote Post
YUV
сообщение Nov 10 2005, 10:13
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 27-04-05
Пользователь №: 4 551



Должен заметить, что не всегда получается так красиво как описано выше.
Я использовал двухпортовку в АСЕХе, частоты чтения и записи асинхронные.
Когда тактовая частота записи превышала 2/3 от тактовой чтения, двухпортовка крепко затыкалась. И вывести ее из этого состояния могло только выключение питания (переинициализация чипа).
Диапазан частот примерно 60...100МГц.
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 10 2005, 15:42
Сообщение #13


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Coryphae @ Nov 9 2005, 17:12) *
Однако все ваши ОТВЕТЫ можно считать неинформативными в отстутствие каких либо конкретных примеров и ссылок(на ветки тогоже тот-же телесис).

хмм ну знаете, если честно, то т.к. альтера меня мало интересует, а страницы на телесисах по фпга переключаються со скоростьью, 2-3 в месяц то запоминать линки я не вижу смысла, в крайнем случае есть поиск по конфе.
Что же касаеться фифо от альтеры то опять же по конфе это глюкалово,
ИМХО у ксайлинкса лучше,(проверял при асинхронных клоках от 10-200 МГц полет нармальный)


--------------------
Go to the top of the page
 
+Quote Post
lutik
сообщение Nov 11 2005, 08:57
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 128
Регистрация: 30-06-04
Из: Odessa
Пользователь №: 216



мужики!!!
читаем 2'е доки, указанные вверху и делаем точно так как там пышуть..
усе работает железно и без корегенов и мегафункций..
при любых соотношениях частот

des00 - спасибо за инфу в почту...


--------------------
однако..
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:34
Рейтинг@Mail.ru


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