vavshchuk_D 0 13 июля, 2012 Опубликовано 13 июля, 2012 · Жалоба Здравствуйте, прошу совета. Отлаживаю 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 никаких предупреждений не выдает. Что я делаю не так? Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TRILLER 0 13 июля, 2012 Опубликовано 13 июля, 2012 · Жалоба Здравствуйте. Есть подозрение, что у вас какой-нибудь сигнал остаётся общим для всех частей схемы. Ну, допустим, ситнхронный ресет или управляющий энэйбл. Таким образом растёт fanout и не раскладывается проект. Внимательно это проверяли? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rloc 57 13 июля, 2012 Опубликовано 13 июля, 2012 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vavshchuk_D 0 13 июля, 2012 Опубликовано 13 июля, 2012 (изменено) · Жалоба Этот констрейтс действует только на те элементы у которых есть аттрибут RLOC cgd.pdf : 1) Тогда зачем вообще нужен RLOC_RANGE, если он не работает без RLOC? 2) Почитал еще constraints guide. Кажется, мне нужен LOC констрейн, в котором надо задать диапазоны слайсов, брамов и dsp. Буду пробовать. Изменено 13 июля, 2012 пользователем vavshchuk_D Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
irum4 0 13 июля, 2012 Опубликовано 13 июля, 2012 · Жалоба А Вы не пробовали использовать для этой же цели PlanAhead? Попробуйте, очень удобно выделять регионы для того или другого блока (можно отдельно BRAM или DSP) и потом результат записывается в ucf-файл... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vavshchuk_D 0 15 июля, 2012 Опубликовано 15 июля, 2012 · Жалоба А Вы не пробовали использовать для этой же цели PlanAhead? Попробуйте, очень удобно выделять регионы для того или другого блока (можно отдельно BRAM или DSP) и потом результат записывается в ucf-файл... Именно в PlanAhead я и делаю весь проект. Но, насколько я понял, вложенные Pblock'и не допускаются. А хочется определить именно 2 Pblock'a - один для DSP системы (одной из четырех), а другой - для FFT внутри первого Pblock'a. Так что сейчас стараюсь найти подходящий инструмент для этого. P.S. Последняя идея была такая: констрейн LOC SLICE_XnYn:SLICE_XmYm задает границы системы, а Pblock вместе с Partition задают границы FFT внутри нее. Оставил компилировать на выходные, в понедельник утром увижу, получилось или нет. Может, кто нибудь знает другие способы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vavshchuk_D 0 24 июля, 2012 Опубликовано 24 июля, 2012 · Жалоба После недели борьбы проект развелся. Для этого: 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. Большая частота не нужна, поэтому над ее повышением уже не боролся. Ну, вроде все написал, может кому пригодится. Всем спасибо за советы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться