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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как обеспечить стабильность?, CycloneII
dmitry-tomsk
сообщение Dec 24 2009, 05:48
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Цитата(Victor® @ Dec 23 2009, 23:53) *
По поводу резета - почитайте
"Synchronous Resets? Asynchronous Resets? I am so confused! How will I ever know which to use?"
Clifford E. Cummings, Don Mills
Sunburst Design, Inc. LCDM Engineering

SNUG San Jose 2002
Rev 1.1

Если коротко, то вводится в состояние сброса - асинхронно, а снимается сброс синхронно.
Вообщем почитайте этих дядек...
http://www.sunburst-design.com/
http://www.lcdm-eng.com/

Кстати, там они еще про SV вразумляют - может кому надо... Я - пас (другая религия) :-)

Это плохой вариант! Представьте, что придётся сбрасывать несколько тысяч триггеров, задержка трассировки до каждого должна быть не больше периода тактовой минус время установления, для этого придётся многократно дублировать триггеры сброса и уже не достичь предельных частот для виртексов и стратиксов. В случае простейшего асинхронного сброса с задержкой включения тактовой гарантируется выход всех триггеров из состояния сброса до первого фронта тактовой, пусть даже там будет миллион триггеров (мультиплексоры тактовой сейчас есть во всех плис, а также pll и dcm имеют большую задержку включения тактовой после сброса).
Go to the top of the page
 
+Quote Post
Victor®
сообщение Dec 24 2009, 07:15
Сообщение #17


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(dmitry-tomsk @ Dec 24 2009, 09:48) *
Это плохой вариант! Представьте, что придётся сбрасывать несколько тысяч триггеров, задержка трассировки до каждого должна быть не больше периода тактовой минус время установления, для этого придётся многократно дублировать триггеры сброса и уже не достичь предельных частот для виртексов и стратиксов. В случае простейшего асинхронного сброса с задержкой включения тактовой гарантируется выход всех триггеров из состояния сброса до первого фронта тактовой, пусть даже там будет миллион триггеров (мультиплексоры тактовой сейчас есть во всех плис, а также pll и dcm имеют большую задержку включения тактовой после сброса).


Ничего плохого в этом не вижу.
На схему локализованного клока надо 2-4 триггера, что является ничтожно малым для FPGA.
Эти блоки дублируются "по месту", в засисимости от нагруженности входного асинхронного клока.
Вообщем смотрите еще XILINX WP272, например.

Вообще - надо каждый случай рассматривать отдельно.


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
Maverick
сообщение Dec 24 2009, 09:25
Сообщение #18


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(bark @ Dec 23 2009, 12:55) *
Господа, ситуация такая: есть плата, на ней циклон2. к нему обращается по общей шине микроконтроллер.

На FPGA куча всякой логики. среди всего прочего есть расчет корреляционной функции. он использует память циклона.
всё работает, считает быстро и правильно... НО!
сбоит. может пересчитать пару тысяч (а иногда и миллионов) значений, а потом что-то происходит и FPGA почти не откликается пока не произойдёт полный сброс.
частота 100Мг приходи снаружи. PLL используется для генерации внутреннего инвертированного clk.
кристалл занят на ~70%. (но в тестах можно урезать много чего и будет занято всего 16%).

т.е. задача такая: всё равботает.. результат есть и устраивает, но надо поднять надёжность работы системы.

Внимание вопрос. что может так влиять на работу кристалла? (сбой происходи только при работе коррелятора.. при работе других функций этого пока не замечено)
как поднять стабильность? по каким граблям я мог пройти? где могут быть узкие места работы логики?.

если что-то ещё необходимо знать для понимания ситуации - спрашивайте.

З.Ы. написано всё на Verilog. знания у меня не совсем академические.. во многом самоучка, поэтому некоторые общие стандарты и правила (которые не допустили бы такой ситуации) написания логики мог упустить... поэтому если есть что покурить на это тему, то ссылки приветствуются.

Еще добавлю
Частота работы ПЛИС, попробуйте уменьшить тактовую и посмотреть на результат, если ошибки пропадут, то оптимизируйте схему(описание), задавайте более жесткие констрейны.


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
soldat_shveyk
сообщение Dec 24 2009, 12:24
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 3-07-07
Из: С-Петербург
Пользователь №: 28 859



Сталкивался с подобным эффектом при работе на полностью заполненном Stratix. После долгих поисков багов в программе и
мучительной оптимизации, оказалось, что причина в источнике питания ядра. При полной нагрузке на максимальной тактовой частоте
возникали моменты, когда он слегка "подсаживал" напряжение, но при этом PowerGood был в норме.
Проблему решил следующим образом - поставил более мощный DC-DC и чуть повысил напряжение питания ядра (в пределах нормы).
Go to the top of the page
 
+Quote Post
bark
сообщение Dec 26 2009, 11:44
Сообщение #20


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

Группа: Свой
Сообщений: 131
Регистрация: 16-11-09
Из: Украина Юг
Пользователь №: 53 659



Всем спасибо, за ответы. сейчас изучаю предложенные материалы и выискиваю допущеные ошибки.
буду информировать, если интересно.

ещё ламерский

Всем спасибо, за ответы. сейчас изучаю предложенные материалы и выискиваю допущеные ошибки.
буду информировать, если интересно.

ещё ламерский вопросик..
занк инверсии ~ и ! чем-то принципиально отличаются если речь идёт о однобитном значении?

т.е. if (~start) абсолютно аналогично if (!start), или нет?


--------------------
Работаю 20ns в сутки.
Go to the top of the page
 
+Quote Post
dxp
сообщение Dec 26 2009, 13:49
Сообщение #21


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(bark @ Dec 26 2009, 17:44) *
т.е. if (~start) абсолютно аналогично if (!start), или нет?

Если сигнал start однобитный, то по результату разницы не будет. Но более правильно использовать логический оператор. Если сигнал start не однобитный, то результат будет разным. Например:

bit [1:0] start;

if(!start) - истинно, когда все биты start равны нулю. Т.е. сперва start приводится к логическому результату true/false и потом применяется логическая инверсия.

if(~start) - истинно всегда, когда хотя бы один бит равен нулю. Т.е. сперва производится побитовая инверсия, потом результат приводится к логическому true/false и анализируется.

В любом случае более правильно использовать логические операции, где ожидается логический результат. Конечно, до этого могут потребоваться (по требованиям задачи) побитовые операции - это пожалуйста, но в конечном итоге все равно результат приводится к логическому, об этом надо не забывать.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
bark
сообщение Jan 4 2010, 08:46
Сообщение #22


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

Группа: Свой
Сообщений: 131
Регистрация: 16-11-09
Из: Украина Юг
Пользователь №: 53 659



Всех с прошедшим! =)

Всем спасибо за советы и подсказки.
Проблема решена. Проблема оказалась скучной.

Дело было не в алгоритме. он был на самом деле рабочим.
дело было в самой плате (схемотехника). один из управляющих сигналов долго (несколько десятков тактов) возвращался в активное состояние.
Диагностировать ситуацию помог СигналТап. (спасибо des00)
Нашел материал по нему, изучил и проверил работу основных систем.. увидел аномалию и нашли её происхождение.
плату переделали и теперь всё работает стабильно + сильно подняли производительность! =)

хоть дело не в метастабильностях, сбросах и т.д., а оказалось довольно банально.. но всё равно много материала полезного перечитал. )

далее. ещё остались вопросы.

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

у меня один из блоков (вычисления) работает по внешнему клоку. (100МГц)
другой (подготовка данных) работает по нему же, но инвертированному через PLL. (те же 100МГц со сдвинутой фазой на 180 градусов)

работает отлично. НО
если пустить оба клока через PLL (один прямой, а другой с инвертированием), то корректность работы пропадает. (стабильность есть, но математика считает с ошибками).

собственно вопрос.
клок пропущеный через PLL без изменений сильно отличается от исходного? (я так понимаю что может вносться фазовый сдвиг.)

и я считаю, что дело определённо не в упаковке проекта в кристалл. т.к. девайс большой ~70-80% (CycloneII) и в одном случае всё работает хорошо и точно (тестовый прогон вычислений порядка 6000 выборок, а при каждой из низ происходит около 50 математических операций), а в другом всегда с ошибками.

Сообщение отредактировал bark - Jan 4 2010, 09:05


--------------------
Работаю 20ns в сутки.
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 4 2010, 13:32
Сообщение #23


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

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



Цитата(bark @ Jan 4 2010, 02:46) *
клок пропущеный через PLL без изменений сильно отличается от исходного? (я так понимаю что может вносться фазовый сдвиг.)

зависит от режима работы PLL, в хенбуке посмотрите картинку.

Цитата
у меня один из блоков (вычисления) работает по внешнему клоку. (100МГц)
другой (подготовка данных) работает по нему же, но инвертированному через PLL. (те же 100МГц со сдвинутой фазой на 180 градусов) работает отлично. НО если пустить оба клока через PLL (один прямой, а другой с инвертированием), то корректность работы пропадает. (стабильность есть, но математика считает с ошибками).

конечно я не телепат, но мне видится нарушение времянок, в случае когда вы переходите на тактирование схемы полностью от PLL. Клоки то не различаются, но вот tsu/th на IO буферах могут поплыть.


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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