Перейти к содержанию
    

Вопрос по кострейну RLOC_RANGE

Здравствуйте, прошу совета.

Отлаживаю DSP проект на Spartan6 SLX150, состоящую из 4-х идентичных, не взаимодействующих между собой DSP систем. Общая занятость кристала - 60% по slices и 90% по DSP блокам.

Одну систему в отдельности симулировал в System Generator, а потом запустил на XC6SLX45, все работает.

Но когда компилирую все 4 системы для большого кристалла, не сходятся времянки в hold. Если в большом кристалле добавлять по одной части, перекомпилировать и делать promote partitions, то сначала все ОК, но после добавления 3-й части опять появляются hold slacks.

( Замечу здесь, что partitions - это не одна DSP система целиком, а только блок FFT внутри нее. Пробовал объявить всю DSP систему как один partition, но тогда время компиляции возрастает до 10 часов) .

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

Partitons применить не удастся, т.к. внутри каждой системы блок FFT - уже partition, а вложенные partitions не допускаются (Так же как и вложенные pblock' и). Почитал Constraints guide и нашел констрейн RLOC_RANGE. В ucf - файле написал:

 

INST "Angle_0" RLOC_RANGE=X4Y128:X127Y189;

 

Но в разведенном дизайне вижу, что констрейн не сработал, и блок Angle_0 вылезает за отведенные для него границы. При анализе ucf -файла PlanAhead никаких предупреждений не выдает.

Что я делаю не так? Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте.

Есть подозрение, что у вас какой-нибудь сигнал остаётся общим для всех частей схемы. Ну, допустим, ситнхронный ресет или управляющий энэйбл. Таким образом растёт fanout и не раскладывается проект. Внимательно это проверяли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

INST "Angle_0" RLOC_RANGE=X4Y128:X127Y189;

 

Но в разведенном дизайне вижу, что констрейн не сработал, и блок Angle_0 вылезает за отведенные для него границы.

Этот констрейтс действует только на те элементы у которых есть аттрибут RLOC

cgd.pdf :

The range or list of locations is meant to apply to all applicable elements with Relative Location (RLOC) constraints, not just to the origin of the set

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Этот констрейтс действует только на те элементы у которых есть аттрибут RLOC

cgd.pdf :

1) Тогда зачем вообще нужен RLOC_RANGE, если он не работает без RLOC?

 

2) Почитал еще constraints guide. Кажется, мне нужен LOC констрейн, в котором надо задать диапазоны слайсов, брамов и dsp. Буду пробовать.

 

 

Изменено пользователем vavshchuk_D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А Вы не пробовали использовать для этой же цели PlanAhead? Попробуйте, очень удобно выделять регионы для того или другого блока (можно отдельно BRAM или DSP) и потом результат записывается в ucf-файл...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А Вы не пробовали использовать для этой же цели PlanAhead? Попробуйте, очень удобно выделять регионы для того или другого блока (можно отдельно BRAM или DSP) и потом результат записывается в ucf-файл...

Именно в PlanAhead я и делаю весь проект. Но, насколько я понял, вложенные Pblock'и не допускаются. А хочется определить именно 2 Pblock'a - один для DSP системы (одной из четырех), а другой - для FFT внутри первого Pblock'a. Так что сейчас стараюсь найти подходящий инструмент для этого.

 

P.S. Последняя идея была такая: констрейн LOC SLICE_XnYn:SLICE_XmYm задает границы системы, а Pblock вместе с Partition задают границы FFT внутри нее.

Оставил компилировать на выходные, в понедельник утром увижу, получилось или нет. Может, кто нибудь знает другие способы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

После недели борьбы проект развелся. Для этого:

1) Сделал отдельные сигналы enable для каждой из 4-х DSP систем

2) Долго играл с разными констрейнами - AREA GROUP, LOC и partitions - иногда PAR выдавал ошибку, а иногда время компиляции затягивалось больше 8 часов.

В итоге понял, что лучше PlanAhead'a для разбиения проекта на части ничего нет. Вложенные друг в друга partitions не поддерживаются ( a жаль!), но зато, оказывается, поддерживаются вложенные pblock'и. Правда, в UG632 про это написано:

"Occasionally, map and placement errors result when creating nested Pblocks", т.е. иногда из-за вложенных pblock'ов все может сломаться.

 

3) В итоге каждую из DSP-систем определил как partition и задал для нее pblock и area_group констрейн (через интерфейс PlanAhead'a). Делал implement сначала для одной системы, потом сохранял результат в partition и добавлял следующую систему.

4) После PAR временной анализ говорил, что есть hold slacks, причем не в моей логике, а в блоках FFT и комплексных перемножителях.

Тогда задал внутри pblock'а системы вложенные pblock'и для всей этой математики, и все заработало.

5) В итоге добился частоты 64МГц на -3 speedgrade и 32Мгц на -1L. Большая частота не нужна, поэтому над ее повышением уже не боролся.

 

Ну, вроде все написал, может кому пригодится. Всем спасибо за советы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...