Jump to content

    
Sign in to follow this  
TABKP

Можно ли победить Timing Errors

Recommended Posts

Не знаю что такое retiming. Где он включается?

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

"Мультицикловые констрейны и те, которые можно сунуть в игнор" - можно для чайника рассказать что это?

мультициклы

 

Share this post


Link to post
Share on other sites
И его еще дорабатывать сильно надо, но при добавлении чего-либо в него, количество ошибок снова растет.

Еще раз: сделайте в floorplan в PlanAhead, разбейте проект на партиции - вы сможете предотвратить перемещение тех кусков проекта, которые уже размещены правильно.

 

Не знаю что такое retiming. Где он включается?

Register retiming, в настройках PAR.

 

Осознаю, что добавление триггеров увеличивает скорость работы. Но как их добавить? В ручную через FPGAEditor?

Нет конечно.

У вас есть код типа:

always @(posedge clk)
   begin
      a<=b+c+d+e+f+g+h+i;
   end

То есть много логики в один такт.

Вы из него делаете

always @(posedge clk)
   begin
      a1<=b+c;
      a2<=d+e;
      a3<=f+g;
      a4<=h+i;
      a12<=a1+a2;
      a34<=a3+a4;
      a<=a12+a34;
   end

Добавили 2 ступени триггеров.

 

"Мультицикловые констрейны и те, которые можно сунуть в игнор" - можно для чайника рассказать что это??

Например, вы знаете, что enable некой группы триггеров у вас по дизайну работает четко не чаще, чем раз в два такта. Вы можете пути между этими триггерами объявить в два цикла, и компилятор будет знать, что эти пути можно укладывать в 5 ns, несмотря на тактовую в 400MHz.

 

Share this post


Link to post
Share on other sites
Хочу рассказать о моем изумлении при встрече с одним уникумом, который достигал ошеломительных цифр применяя Матлаб. Он там разрисовывал макроячейку своей микросхемы и вел на основании такого элемента и её маски(для переноса!) моделирование в Матлабе. Он получал и фильтры и ФФТ на 600МГц тактовой. Сам контролировал укладку в чипе всех элементов.

Интересно, а можно подробнее?

Share this post


Link to post
Share on other sites

Если честно, прочитал только завязку дискусии и последнюю страницу, так что может чего и пропустил. Но нет сил просто.. )

Так вот.

Всё это, если честно, полный бред. И про 400МГц на V-4, и про 600(это вообще отжиг)) ). И даже фильтры на DSP не работают на таких частота, если их число больше, чем в одном столбце приходится на один фильтр. Для V-4 со скоростью -10 при 85% забитии кристалла максимум, что выжимал(хотя стараля, использовал только 2-х!! входовые мультиплексоры и т.д.) это 270 МГц. Дальше роутер начинает проводить совершенно нереальные соединения, и в итоге, ещё ухудшает времянку. Для -11, ну ещё 50 МГц - это потолок. Так что, поменьше иллюзий.

Share this post


Link to post
Share on other sites
Если честно, прочитал только завязку дискусии и последнюю страницу, так что может чего и пропустил. Но нет сил просто.. )

Так вот.

Всё это, если честно, полный бред. И про 400МГц на V-4, и про 600(это вообще отжиг)) ). И даже фильтры на DSP не работают на таких частота, если их число больше, чем в одном столбце приходится на один фильтр. Для V-4 со скоростью -10 при 85% забитии кристалла максимум, что выжимал(хотя стараля, использовал только 2-х!! входовые мультиплексоры и т.д.) это 270 МГц. Дальше роутер начинает проводить совершенно нереальные соединения, и в итоге, ещё ухудшает времянку. Для -11, ну ещё 50 МГц - это потолок. Так что, поменьше иллюзий.

 

Тут на самом деле не так все просто. Про 600 МГц я думаю имели ввиду только теоретическую скорость работы небольшой или плотноуложенной схемы. Просто в V4 даже такт такой не завести.

Что касается 450 МГц и фильтра на DSP, так он у меня был еще и полностью комплЕксный высокго порядка, и одно умножение занимало 4 DSP48, и 4 столбца сразу было использовано. Но и архитектура этого фильтра была не простой, использующей все возможности архитектуры, другое дело что логики практически никакой больше не было использовано, поэтому и такие цифры. Многое зависит от плотности логики и качества разводочных ресурсов. Ув. des00 утверждает что у Alter'ы с этим получше чем у Xilinx, хотя мы это еще не проверили.

Share this post


Link to post
Share on other sites

И что, работал фильтр, занимающий 2 столбца на 400 МГц?! Извините, но не верю. Если можно, киньте усечённый кусочек( чего не жалко) на ZalilovTimur87@gmail.com). Мне было бы очень полезно.

Share this post


Link to post
Share on other sites
Интересно, а можно подробнее?

 

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

Его любимым режимом был тогда ВИЗИВИНГ(как рисую, так и разводится!). Он отслеживал расположение внутренней топологии ФПЖА, чтобы оптимально легли ответственные ножки. Речь о "столбиках"(близко расположенные макроячейки) внутри ПЛИС. Так достигалось предельное быстродействие!..

 

У меня на это руки не дошли,-занят был, а потом поменял работу и связь только по тлф. По праздникам....

-------- Это бомба! Колюсь...

Кстати, он утверждал, что в маске весь секрет! Что пользователю не дают возможности разогнать ячейку до предельного значения быстродействия!!!!!!

На самом деле это из недокументированного.... Так что его заявление о 1000МГц при встрече на осенней выставке меня не смутили.

Share this post


Link to post
Share on other sites
Ув. des00 утверждает что у Alter'ы с этим получше чем у Xilinx, хотя мы это еще не проверили.

как бы начали проверять в соседней теме, но народ как то не шибко этим интересуется.

 

Share this post


Link to post
Share on other sites
И что, работал фильтр, занимающий 2 столбца на 400 МГц?! Извините, но не верю. Если можно, киньте усечённый кусочек( чего не жалко) на ZalilovTimur87@gmail.com). Мне было бы очень полезно.

 

Конечно работал, собственно чему там не работать? Все элементы на этой частоте работают по даташиту, все полностью законвейерезировано было, разводочные ресурсы в основном использованы специальные, которые между DSP48 проложены. Выкладывать не буду, лень. Там половина в схематике была сделана - зеленый еще был.

 

как бы начали проверять в соседней теме, но народ как то не шибко этим интересуется.

 

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

Share this post


Link to post
Share on other sites

Продолжим. Ошибки побеждены. Минимальный запас по setup есть.

Посмотрел как 400МГц часть разложилась на кристалл - схема раскинулась аж на пол кристалла.

Есть желание сделать 2 вещи:

1) создать Pblock и указать чтобы вся 400МГц часть располагалась в этом блоке

2) создать partition с 400МГц частью, чтобы раз и навсегда отладить этот кусок и не зависеть от того как будет написана остальная часть проекта

 

Читаю мануал к PlanAhead. Прочитал Hierarchical_Design_Methodology_Guide и PlanAhead_Tutorial_Design_Preservation. Да, и видео посмотрел с оф. сайта.

Вроде все просто, но применить эти знания не могу. Не могу понять как выделить нужные компоненты проекта для создания partition - если коры идут отдельным списком, то компоненты написанные мной на VHDL автоматичеки разбиваются на примитивы. Нужно все примитивы компонента выискивать?

Share this post


Link to post
Share on other sites

Разобрался. В настройках компилятора в ISE надо галку поставить keep hierarchy. Создал один единственный компонент внутрь которого запихнул все, что связано с 400МГц. Pblock создал. Плохо что нельзя его создавать произвольным по форме - у меня почти все DSP48 использованы, поэтому блок получился длиной почти на вест кристал. После имплемента получил запас по setup 32пС. Затем этот же модуль назначил как partition. Снова сдела имплемент - и получил запас по setup равным 0. Это почему так?

Ну да ладно. Нажал remote partitions. Вроде как должен был создаться компонент для вставки в свой проект, но я так и не понял где он и как его вставить в общий проект. Подскажите!

Share this post


Link to post
Share on other sites

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

 

Плохо что нельзя его создавать произвольным по форме - у меня почти все DSP48 использованы, поэтому блок получился длиной почти на вест кристал. После имплемента получил запас по

 

Почему нельзя - все можно - просто задаете несколько прямоугольников для одного pblock (Add Pblock rectange) можно даже не перекрывающихся.

Так можно нарисовать какую угодно форму. Причем необязательно чтобы в контур для LUT попадали все DSP или BRAM - это независимые друг от друга контуры

 

Удачи! Rob.

 

Share this post


Link to post
Share on other sites
Так и не понимаю как сформированный partition из PlanAhead вставить обратно в ISE проект

 

След вашего пребывания в PlanAhead остается в *.ucf. Все там. Тупо перенесите в редакторе...

Share this post


Link to post
Share on other sites

В UCF файле появился только констрейм AREA_GROUP, который относится к Pblock. А как с partition то быть. Мне надо чтобы модуль на 400МГц стал черным ящиком с неизменным размещением примитивов на кристалле.

Кстати при попытке скомпилировать в ISE тот же проект с новым UCF (добавлен только AREA_GROUP) - ISE выдал что недостаточно ресурсов, в то время как Planahead нормально развел. Чудеса.

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