Jump to content

    
Sign in to follow this  
Krys

как заставить Planahead скушать результаты частичной разводки в FPGA Editor

Recommended Posts

Здравствуйте. Есть проблемка. Хочу заставить Planahead скушать результаты частичной разводки в FPGA Editor. У меня в Planahead не разводится 1 цепь, попытался её вручную развести в FGPA Editor и подсунуть планахеду. Но он всё делает так, как будто ничего не съел.

 

Предыстория:

Плисина xc6slx100tfgg484-3, используется Planahead и XPS. После добавления определённого функционала и изменения ног в *.ucf перестала разводиться одна цепь. В проекте есть такая DCM-ка:

post-13271-1468911192_thumb.png

С выхода нарисованного на картинке BUFG сигнал в действительности подаётся не сразу на вход CLKFB этой DCM-ки, а проходит через буфер BUFIO2FB. Этот буфер вставляется средой автоматически (UG382, Clocking resources, стр. 55: "The ISE Design Suite automatically inserts matching BUFIO2FB and BUFIO2 buffers when the CMT feedback path is used."). Так вот если я обычным образом запускаю разводку в планахеде, то цепь от BUFG до BUFIO2FB не разводится. Говорит следующее:

1 signals are not completely routed. See the module_1_stub_routed.unroutes file for a list of all unrouted signals.

WARNING:Par:100 - Design is not completely routed. There are 1 signals that are not
   completely routed in this design. See the "module_1_stub_routed.unroutes" file for a list of
   all unrouted signals. Check for other warnings in your PAR report that might
   indicate why these nets are unroutable. These nets can also be evaluated
   in FPGA Editor by selecting "Unrouted Nets" in the List Window.

В указанном файле имеется следующее содержимое:

1 signals are not completely routed.

WARNING:ParHelpers:360 - Design is not completely routed.

   module_1_i/blablabla/main_inst/clock_generator_inst/clkfb

, где clkfb - это и есть тот самый сигнал обратной связи, что и на картинке выше.

 

Я решил на ещё неразведённом проекте сделать предварительную разводку этих проблемных цепей в FPGA Editor-е, а уже затем отдать всё обратно планахеду. Для этого я в планахеде нажал на свою стратегию impl1 правой кнопкой, затем launch next step to MAP. После MAP у меня появился файл с расстановкой компонентов, но без разводки: module_1_stub.ncd. Открыл его FPGA Editor-ом, нашёл нужные мне цепи (до и после BUFIO2FB), нажал кнопку Autoroute. Они развелись. Затем нажал Attrib и установил у каждой из них Locked и Priority. Нажал сохранить. После этого у меня обновились файлы module_1_stub.ncd (где появилась разводка только 2х цепей - это я проверил открытием файла повторно в FPGA Editor-е) и module_1_stub.pcf, где добавились мои атрибуты:

...
SCHEMATIC END;

NET
        "module_1_i/blablabla/main_inst/clock_generator_inst/clkfb"
        LOCK;
NET
        "module_1_i/blablabla/main_inst/clock_generator_inst/clkfb"
        PRIORITIZE = 100;

// fpga_editor - P.20131013 - Tue Jul 19 13:34:37 2016
NET
        "module_1_i/blablabla/main_inst/clock_generator_inst/dcm_sp_inst_ML_NEW_O"
        LOCK;
NET
        "module_1_i/blablabla/main_inst/clock_generator_inst/dcm_sp_inst_ML_NEW_O"
        PRIORITIZE = 99;

 

После этого я надеялся подсунуть эти результаты планахеду. Нажал на стратегии правой кнопкой и дальше launch next step to PAR. Всё запустилось, в логах PAR написало, что вроде как подхватило все нужные файлы:

*** Running par
    with args -intstyle pa "module_1_stub.ncd" -w "module_1_stub_routed.ncd" -ol high -mt 4

Constraints file: module_1_stub.pcf.
...

 

Но результат тот же, что и раньше, т.е. одна неразведённая цепь, та же самая. Я ещё раз открыл module_1_stub_routed.ncd в FPGA Editor-е и увидел, что моя цепь до BUFIO2FB является неразведённой. Т.е. это значит, что Planahead либо вообще не увидел, что я ему подсунул в module_1_stub.ncd и module_1_stub.pcf, либо увидел, но проигнорировал, и в результате собственной разводки отцепил разведённое мною и переразвёл по-своему.

 

Вот мой вопрос и состоит в том, как заставить Planahead скушать результаты частичной разводки в FPGA Editor?

 

Либо другой вопрос: как развести и сделать рабочим мой проект возможно каким-то другим способом, не через FPGA Editor? Ведь, видимо, раз эта цепь не разводится, значит, среде что-то не нравится, только она сказать не может (как умная собака ))) ).

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Попробуйте посмотреть это видео https://www.youtube.com/watch?v=wwkGmDaa4oM (и следующие части тоже).

Возможно поможет это http://www.xilinx.com/support/documentatio...fpga_editor.htm

 

От себя скажу так. Можно создать в отдельном проекте модуль в котором у вас проблема, входной и выходной тактовый сигнал (а также все служебные сигналы, если используете, вешаете на ножки ПЛИС). Если он разведется как надо, открываете проект в Эдиторе и удаляете цепи до ножек ПЛИС (а точнее вообще все лишние цепи, про это есть в видяшке), добавляете в нужных местах Hard Macro External Pin(тоже в видяшке). Ставите на ключевой компонент макроса метку Reference point. Сохраняете получившуюся разводку как Hard Macro. Добавляете соответствующий компонент в HDL описание (вручную, порты называются так, как вы назвали Hard Macro External Pin-ы, констрейните размещение макроса(компонента) в том месте где будет располагаться Reference point, отмеченная в макросе), а сам файл макроса кладете в корневую папку проекта (это важно, иначе система не подцепит макрос, просто не найдет его. Вроде бы была настройка задающая путь до директории с макросами, однако работоспособность не проверял. Все что касается FPGA Editora может глючить в самых неожиданных местах). При синтезе будет варнинг на "черный ящик" в проекте.

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

 

UPD. Простите, в видяшке кажется нет того на что я ссылался. Частично есть тут http://wiki.eng.iastate.edu/reconfigurable...ing_Hard_Macros и тут https://classes.soe.ucsc.edu/cmpe225/Fall01/hardmacro.html

Сейчас не могу более детально расписать процесс, но если не разберетесь - немного позже постараюсь написать подробней. И не так сумбурно.

 

Также... как вариант

Попробуйте поменять в настройках Map параметр Starting Placer Cost Table. Возможно проблема как раз в том что компоненты размещены плохо.

Edited by Barktail

Share this post


Link to post
Share on other sites

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

 

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

 

Тем более что раньше я так понял было все ок. Значит надо проанализировать что было добавлено или изменено и как это повлияло. Вплоть до того что окатить изменения и научным методом тыка добавлять их поэтапно и смотреть на разводку

 

Удачи! Rob.

 

 

 

 

Share this post


Link to post
Share on other sites
Попробуйте поменять в настройках Map параметр Starting Placer Cost Table. Возможно проблема как раз в том что компоненты размещены плохо.
Большое спасибо за такой развёрнутый ответ! Пробовал этот параметр менять и даже добавил все возможные стратегии разводки ну типа вот так:

post-13271-1469103239_thumb.png

и попробовал все, каждая выдала одинаковую ошибку.

 

Мне все же кажется что тут нужны не пляски с бубном и FPGAeditor-ом а понять почему штатно не разводится.
Да, я тоже к этому бы хотел стремиться. Тем более, что проект развивается, и не будешь же при каждом изменении так каждый раз плясать с бубномFPGA Editor-ом )))

 

 

Тем более что раньше я так понял было все ок. Значит надо проанализировать что было добавлено или изменено и как это повлияло. Вплоть до того что окатить изменения и научным методом тыка добавлять их поэтапно и смотреть на разводку
Было добавлено ядро PCI в виде корки XPS (внутри потроха в виде ngc, и туда не залезть). Больше собственно ничего не было добавлено. И ноги в ucf перекинуты. Чую, что у PCI корки добавился один клок, который где-то не лезет по каким-то путям. Где-то не хватает трассировочных ресурсов.

Точнее не так. Нарисованная на картинке в первом сообщении DCM-ка совершенно не связана с PCI-коркой, и была там всегда. Видимо PCI-корка заняла какие-то трассировочные ресурсы и вытеснила сигнал clkfb у DCM-ки. Как говорится была у зайца избушка лубяная, а у лисыPCI-корки ледяная )))

Главно что согласно документу UG382, Clocking resources вроде ничего и не нарушается... Где-то ещё есть узкое местечко...

Share this post


Link to post
Share on other sites

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

 

PCie или PCI ?

 

Если PCIe то обычно корка от Xilinx лочит положение hard IP PCIe, 4-5 BRAM , MGT, BUFGmux и MMCM для этой корки Отсюда и проблемы наверное.

Надо после place смотреть где и как рассоложено и нет ли конфликта для BUFG и BUFIO.

Ну и править ручками costrain для корки если что не так

 

У меня так похоже было - плата на Kintex, производитель сделал распиновку линий для PCIe x8 опозитно к стандартной которая идет в Vivado корке. При P&R не могло развести MGT. Пришлось колбасится ручками, а чтобы чтобы каждый раз не редактировать локальный xdc файл который генерит корка сделал все глобально

reset_property LOC [get_cells -hier -filter {NAME =~ */pipe_lane[*].gt_wrapper_i/gtx_channel.gtxe2_channel_i}]
# PCIe Lane 0
set_property LOC GTXE2_CHANNEL_X0Y0 [get_cells -hier -filter {NAME =~ */pipe_lane[0].gt_wrapper_i/gtx_channel.gtxe2_channel_i}]
...
# PCIe Lane 7
set_property LOC GTXE2_CHANNEL_X0Y7 [get_cells -hier -filter {NAME =~ */pipe_lane[7].gt_wrapper_i/gtx_channel.gtxe2_channel_i}]

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

RobFPGA, спасибо за подсказку, но у нас обычный PCI, так что не подходит...

 

 

Надо после place смотреть где и как рассоложено и нет ли конфликта для BUFG и BUFIO.
Подскажите, пожалуйста, как посмотреть конфликты BUFG и BUFIO? Как я писал в предыдущем сообщении, я смотрел согласно документу UG382, Clocking resources - вроде ничего и не нарушается... Но мог что-то и упустить конечно...

 

 

Share this post


Link to post
Share on other sites

Пока результаты такие. Открыл FPGA Editor в двух окнах: со старым проектом, в котором всё красиво, и с проектом после изменений. Начал вести руками ту цепь, которая не хотела разводиться. Вёл тем же маршрутом, что и в старом проекте, подсматривая в соседнее окно. Благо число пересечений там небольшое, и можно за 10 минут развести. Вёл-вёл, пока не упёрся в один из многочисленных switch-box-ов, на котором стало видно, что тот выход этого свичбокса, где был мой сигнал в старом проекте, в новом проекте занят другим сигналом. При том другой сигнал не из числа вновь добавленных элементов в новом проекте. Похоже вновь добавленные элементы потеснили старый сигнал, и он занял другое место.

Я не долго думая удалил разводку того сигнала, который залез в свичбоксе на чужое место. После этого для моей цепи дал команду autoroute. Цепь развелась полностью, тем самым маршрутом, как и в старом проекте. Теперь я дал команду autoroute для того сигнала, который залез на чужое место. И в результате выдало ошибку, мол, развёл частично, не смог подвести цепь к таким-то элементам. Эти элементы находятся как раз в том же районе, что и проблемный свичбокс, из-за которого подрались сигналы ))

 

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

Share this post


Link to post
Share on other sites

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

 

Свичбоксы тут не причем скорее всего PCI корка тоже использует какие-то клоковые и IO ресурсы из того же банка.

Смотрите в PlanAhed что внутри корки есть и куда это добро лочится. Может можно это перенести - ручками изменив кострэин.

 

Удачи! Rob.

 

Share this post


Link to post
Share on other sites

В том-то и дело, что ругается на сигналы, никак не связанные с PCI. Просто корка PCI расталкивает другие цепи, и взаимосвязь установить довольно сложно. Я конечно буду пытаться искать... двигаться-то по проекту надо...

Share this post


Link to post
Share on other sites
В том-то и дело, что ругается на сигналы, никак не связанные с PCI. Просто корка PCI расталкивает другие цепи, и взаимосвязь установить довольно сложно. Я конечно буду пытаться искать... двигаться-то по проекту надо...

Переместить часть проекта в другое место не получается?

Share this post


Link to post
Share on other sites

Так-то возможность есть, утилизация неплотная. Просто знать бы что двигать. Как я писал сообщением ранее, проблема возникла у сигналов, никак не связанных с внедрённой PCI-коркой, просто она что-то подвинула. И уже подвинутый сигнал вызвал коллизию. А найти эту взаимосвязь довольно сложно...

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