Jump to content

    
Sign in to follow this  
new123

Altera DCFIFO, проблемы при высокой нагрузке

Recommended Posts

Форумчане, добрый день.

Имею проблемы в проекте, на железе, в симуляторе такое не воспроизводится. Путем многих тестов понял, что все ноги растут от различных FIFO.

1) Частая проблема - пропуски записываемых слов. То есть пишу много слов в FIFO, вычитываю, а там есть пропуски. 
2) Еще одна проблема. count_fifo > 0, empty = false. Начинаю читать, а от туда (из fifo) ничего не выходит.

Проблема вылезают только тогда, когда даешь этой фифо сильную нагрузку. Ну например, писать каждый такт неограниченное число раз.
Что делал для решения:

1) Пытаюсь снять нагрузку. Удается даже записать без проблем 4000 тактов подряд.
2) Экспериментирую с параметрами. Помог частями в одном месте параметр sync_stage >= 3

Задним умом понимаю, что проблема возможно лежит в области памяти. Но в мануале по Stratix V написано, что память (M20K) легко переваривает до 600Mhz (Я работаю от 150 до 280Mhz). Так же в мануале написано, что скорость работы - 1 такт. Я бы с удовольствием бы приглядывал за каким нибудь флагом wait, как это распространено у альтеры, но тут такого нет.

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

 

Заранее спасибо.

Share this post


Link to post
Share on other sites
2 minutes ago, DimaG said:

rd_en = !empty && ...

так и делаю, грубо говоря вот так

	sync_fifo 			sync_fifo (
		.rdclk 												(),
		.rdreq 												((!wire_sync_empty)? 1'b1: 1'b0),
		.q 													(),
		.rdempty 											(wire_sync_empty),
		
		.wrclk 												(),
		.wrreq 												(),
		.data 												()
	);

 

full не проверял, пробовал делать огромные fifo, чтобы точно переполнений не было, еще приглядываю в сигналтапе за заполнением (кол-ом слов), момент сбоя конечно не удается записать, но fifo всегда практически свободные. Попробую может full половить действительно.

Share this post


Link to post
Share on other sites

Еще кстати: ЕМНИП, на Стратиксе 10 для FIFO требовался ОБЯЗАТЕЛЬНЫЙ сброс, иначе они работали некорректно. Может и для вашего девайса существует аналогичное требование.

А full/empty проверять надо всегда. Вне зависимости от размеров FIFO. На таких частотах моргнул - и оно уже забито :)

Share this post


Link to post
Share on other sites

Приветствую!

2 hours ago, new123 said:

Имею проблемы в проекте, на железе, в симуляторе такое не воспроизводится. Путем многих тестов понял, что все ноги растут от различных FIFO.

1) Частая проблема - пропуски записываемых слов. То есть пишу много слов в FIFO, вычитываю, а там есть пропуски. 
2) Еще одна проблема. count_fifo > 0, empty = false. Начинаю читать, а от туда (из fifo) ничего не выходит.

Все проблемы с FIFO (стандартных) обычно возникают из за неправильного понимания  особенностей их работы. Из возможных проблем   -
некорректный сброс FIFO - Для некоторых типов требуется сброс не менее заданного числа тактов,
некорректная работа с флагами и счетчиками данных - Стандартные FIFO что у Xilinx что у Intel обычно гарантируют корректное состояние такт-в такт лишь для флагов.  FULL на стороне записи, EMPTY на стороне чтения. Счетчики слов  обычно могут задержаны на такт (или даже больше)  от состояния флагов. 

Из физических проблем -  некорректное   задание   констрейнов  приводящая к отсутствию контроля задержек  между  регистрами gray-code синхронизатора.  

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
5 minutes ago, novartis said:

Чтение и запись на одной частоте идут или на двух?

в целом на разных (dcfifo).

Было даже так, есть fifo, который подвергается сильной нагрузке, но разово, не постоянно, работал на одной частоте. И я решил стабилизировать его работу и сделал его асинхронное dcfifo, выставил ему параметры по метастабильность (sync_stage = 3) и стало работать нормально, при этом и чтение и запись на одной частоте.

Но в целом, те что сбоят, они работают на разных. При этом у них у всех чтение сразу же, когда !empty на read стороне. Специфика заполняемости и разность частот таково, что ну никак full не может быть, но сейчас решил все таки этот момент поисследовать

1 hour ago, DimaG said:

на Стратиксе 10 для FIFO требовался ОБЯЗАТЕЛЬНЫЙ сброс

спасибо запомню, так как на него тоже буду мигрировать

Share this post


Link to post
Share on other sites
17 minutes ago, new123 said:

спасибо запомню, так как на него тоже буду мигрировать

На всякий случай пруф: 

https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/stratix-10/ug-s10-memory.pdf

стр. 82

Quote

Note: For Intel Stratix 10 devices, you must assert either aclr or sclr upon power-up to guarantee correct functionality

 

Share this post


Link to post
Share on other sites
4 часа назад, DimaG сказал:

Скорее всего некорректно работаете с флагами empty, full.

 

Попробуйте работать с ними так:

wr_en = !full && ...

rd_en = !empty && ...

Это делается внутри FIFO. Делать это ещё раз снаружи смысла никакого.

Share this post


Link to post
Share on other sites

Мда.. форумчане убедили меня проверить full, а оно там очень часто оказалось. Буду разбираться, что за беда такая. Временно всем спасибо =). Получается флаги надо тщательнее смотреть

Share this post


Link to post
Share on other sites
6 minutes ago, new123 said:

убедили меня проверить full, а оно там очень часто оказалось. Буду разбираться, что за беда такая

А если в настройках fifo указать, чтобы оно не принимало больше того, что может принять. Тогда должен появиться сигнал wait со входной стороны. Ну и источник данных должен уметь притормозить по этому сигналу...

Share this post


Link to post
Share on other sites

Приветствую!

1 minute ago, Yuri124 said:

А если в настройках fifo указать, чтобы оно не принимало больше того, что может принять. Тогда должен появиться сигнал wait со входной стороны. Ну и источник данных должен уметь притормозить по этому сигналу...

Вообще то для этого FULL и предназначен  - этот сигнал как раз и говорить о том что FIFO  "сыто по горло вашими данными" - зачем еще какой то wait? 

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

 

7 minutes ago, Yuri124 said:

А если в настройках fifo указать, чтобы оно не принимало больше того, что может принять

ага, я эту настройку не отключаю, там галочка за это отвечает. Встроенная проверка на overflow и на empty. Но wait нет. Я вообще про wait имел ввиду, чтобы подождать при чтении.

8 minutes ago, Yuri124 said:

Тогда должен появиться сигнал wait со входной стороны

я помню, вы как то писали нечто подобное, но про fifo в qsys platform (не знаю как правильно обозвать), я после этого глянул, там действительно сигналов было побольше. А у меня сейчас простой altera fifo megafunction

4 minutes ago, RobFPGA said:

Ну и источник данных должен уметь притормозить по этому сигналу

источник внешний =) я ему не указ. Вообще соотношение частот wr/rd и частота записи такова, что fifo не должен забиваться больше 4, что и демонстрирует даже симулятор. На деле у меня даже 32xxx забивается. Буду выяснять. Может пишет более быстро, придется частоты проверить.

Share this post


Link to post
Share on other sites
1 hour ago, new123 said:

источник внешний =) я ему не указ

ИМХО тут как раз Вы не правы. Если есть система, которая зависит от приходящих данных, то Вы и являетесь указом сколько и чего можно принять. Но если есть подозрение, что отправитель пишет больше положенного,, то должен либо стоять менеджер, либо что-то не так с приёмом. А контролировать сколько и что принимать может именно система! Даже если без обратных связей

Share this post


Link to post
Share on other sites
6 hours ago, DimaG said:

ЕМНИП, на Стратиксе 10 для FIFO требовался ОБЯЗАТЕЛЬНЫЙ сброс, иначе они работали некорректно.

надо же какая штука. Как только у себя подключил сброс (в симуляторе сделал общий сброс первые 10 тактов), то симулировать начало нормально, со всеми переполнениями и всеми вытекающими, все как в реале

Edited by new123

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this