Jump to content

    
Sign in to follow this  
Asb

Использование связки Synplify(Verilog)-Xilinx.

Recommended Posts

Потихоньку переползаю на SV. Соответственно приходится прощаться с Xilinx ISE. В качестве рабочего инструмента пока остановился на Synplify'е.

Попытка импортировать проект из ISE 13 не удалась. Хрошо делаем сами.

Исходный проект содержит несколько core из Xilinx coregen'a. Читаем документацию на Synplify - написано - просто добавьте .ngc файл в проект. Добавляю - синтез не проходит - не видит Synplify корегеновских модулей. Если добавить в проект соответствующие .v файлы - синтез проходит, но возникает вопрос, а нафига в тогда в проект включать .ngc файлы ? Что интересно - судя по логу они явно обрабатываются.

Коллеги, у кого есть опыт работы с Synplify'ем подскажите пожалуйста как правильно создать прект с Xilinx IP-cores.

Share this post


Link to post
Share on other sites

2 Asb

просто добавляйте файлы которые генерит Coregen, там директивами synopsys translate_off/synopsys translate_on тело вырезается, и получается BB.

Если же охота эти корки всё же просинтезить в Synplify, тогда нужно добавлять EDIF (можно с Coregen-а получить, но долго плясать нужно, да и в посл версиях кажись вообще отрубили это, а можно ngc2edif.exe подъюзать, но и тут есть нъюансы). NGC-файлы Synplify не хавает, 2009/2010 по крайней мере.

Если пошли по пути BB - то нужно обязательно в пути поиска добавить директории где эти самые NGC находятся(-sd/Translate).

Share this post


Link to post
Share on other sites

To Kuzmi4 :

Спасибо, примерно так и пытаюсь делать.

 

To Koluchiy:

К сожалению парсер ISE'а валится на SV синтаксисе и иерархия проекта не строится.

Share this post


Link to post
Share on other sites

не синплифай, но прецижн. и тоже SV. одно но - корками не пользуюсь вообще. принципиально.

прецижн умеет выгонять из SV простейший Verilog-файл, где всё разжёвано. этот файл уже скармливается в xst.

проблема встала когда нужно было сделать систему с MicroBlaze`ом. опять же - из SV подсистемы выгоняем чистый верилог, который подключал как сопроцессор к микроблейзу.

коряво, конечно, но последовательность вполне работоспособная.

ещё можно прямо из прецижна вызывать PlanAhead, но там был лёгкий гемор с подключением ucf. это я оставил на потом.

Share this post


Link to post
Share on other sites

PaR Guide for Synplify & Xilinx.

 

Для версии Synplify 2010.09.

01. Положить xilinx_par.opt и xilinx_gp.opt в ...\Synplicity\fpga_xxx\lib\xilinx\

02. Создать проект в Synplify Premier with DP, к проекту должны быть подключены
    все файлы *.ndf от ip-cores.
    Если от какой-либо core нет файла *.ndf, то подключить файлы *.ngc или *.edn.
    Предполагается структура проекта <проект>\rev_1\par_1.

03. Поставить галку Physical Synthesis, остальные галки по потребностям.

04. Поставить галку Implementation Options - Device - Use Xilinx Xflow.

05. Скопировать файл ucf2sdc_old.exe из \Synplicity\fpga_xxx\bin\ в папку с проектом
    и выполнить в командной строке:
    ucf2sdc -osdc <имя_будущего_sdc-файла>.sdc -iucf <имя_текущего_ucf-файла>.ucf.
    Имена файлов назначить как у топ-модуля. Или выполнить подобный bat-файл.

06. Прицепить этот файл sdc к проекту,
    прописать в нём в нём временные и прочие констрейны если надо.

07. Создать Design Plan и сохранить, кнопка сверху New Design Plan.

08. Нажать сбоку кнопку Impl Options..., расставить много всяких галок.

09. Нажать сбоку кнопку New P&R, opt-файл оставить умолчальным. Или сделать и подключить к проекту свой opt.

10. В папку ...<проект>\rev_1\ скопировать *.ucf файл. 
    В папку ...<проект>\rev_1\par_1\ скопировать *.ucf файл.

11. Нажать большую кнопку Run.

12. bit-файл будет лежать в ...<проект>\rev_1\par_1\. 
    Файлы для post-PaR моделирования будут лежать в ...<проект>\rev_1\timesim.

 

Опт-файлы в прикреплённом архиве.

 

При таком подходе вы вообще никогда не увидите Xilinx ISE. Исешные файлы будет запускать Synplify в batch-mode.

PaR.rar

Share this post


Link to post
Share on other sites
не синплифай, но прецижн. и тоже SV. одно но - корками не пользуюсь вообще. принципиально.

прецижн умеет выгонять из SV простейший Verilog-файл, где всё разжёвано. этот файл уже скармливается в xst.

проблема встала когда нужно было сделать систему с MicroBlaze`ом. опять же - из SV подсистемы выгоняем чистый верилог, который подключал как сопроцессор к микроблейзу.

коряво, конечно, но последовательность вполне работоспособная.

ещё можно прямо из прецижна вызывать PlanAhead, но там был лёгкий гемор с подключением ucf. это я оставил на потом.

 

в который раз сравниваю,

в этот раз

Synplify Pro E-2011.03-SP2 и Precision_Synthesis RTL Plus 2011a.61

 

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

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

 

видимо покупка симплифая (фирмы) синопсисом не пошла симплифаю (тулу) впрок

Share this post


Link to post
Share on other sites

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

 

Да по времянке и размеру Synplify хорош.

Вот намедни понабилось утрамбовать проект на Microblaze - вместо Spartan6slx150-3 купили плату со 2 speedgrade :(

Как на зло проблемы возникли в блоке самого процессора -где то в кеше времнки не сходились больше чем на 1 ns при 10 ns цикле.

Пляски с бубнами вокруг опций мапера и PR привели только к потере 3 дней времени :(

Пришлось достать барабан - взял файл microblaze_0_wrapper_xst.prj который генерит EDK для синтеза. Скриптом затянул исходники из него в Synplify (ну по пути пришлось декодировать их, а-я-яй! но я потом все стер ;) ) Синтезировал и edif подставил вместо родного ngc. Результат - времянки сошлись с первого захода! И размер на 2% меньше чем результат от xst!!!! И это только блок Microblaze. Надо будет весь EDK проект перегнать так - посмотреть что получится.

 

Успехов! Rob.

 

 

 

 

Share this post


Link to post
Share on other sites
в который раз сравниваю,

в этот раз

Synplify Pro E-2011.03-SP2 и Precision_Synthesis RTL Plus 2011a.61

 

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

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

 

видимо покупка симплифая (фирмы) синопсисом не пошла симплифаю (тулу) впрок

 

по мне так банально поддержка SV в полный рост - и больше ничего не требуется. ну и он вроде как Precision меньше на винте места занимает )))

Share this post


Link to post
Share on other sites
по мне так банально поддержка SV в полный рост - и больше ничего не требуется. ну и он вроде как Precision меньше на винте места занимает )))

 

это да - пресижн побольше поддерживает из SV, собственно пару лет назад в порыве интузазизма написал что-то такое, что симплифай не взял (по-моему интерфейсы в синтез пытался засунуть), поэтому и обратил внимание на пресижн

 

но QoR все-таки важная часть, ради нее можно пожертвовать хитрыми SV конструкциями

 

Share this post


Link to post
Share on other sites
это да - пресижн побольше поддерживает из SV, собственно пару лет назад в порыве интузазизма написал что-то такое, что симплифай не взял (по-моему интерфейсы в синтез пытался засунуть), поэтому и обратил внимание на пресижн

 

но QoR все-таки важная часть, ради нее можно пожертвовать хитрыми SV конструкциями

гыгы. у меня пока что проекты простые и не сильно скоростные, мне 10% разницы не критичны. а вот интерфейсы в синтезе - почти в полный рост. потому прецижн.

Share this post


Link to post
Share on other sites
Приветствую!

 

[cut]

 

Пришлось достать барабан - взял файл microblaze_0_wrapper_xst.prj который генерит EDK для синтеза. Скриптом затянул исходники из него в Synplify (ну по пути пришлось декодировать их, а-я-яй! но я потом все стер ;) ) Синтезировал и edif подставил вместо родного ngc. Результат - времянки сошлись с первого захода! И размер на 2% меньше чем результат от xst!!!! И это только блок Microblaze. Надо будет весь EDK проект перегнать так - посмотреть что получится.

 

Успехов! Rob.

 

Можно поподробнее про барабан? Как затягивать исходники в Synplify?

Share this post


Link to post
Share on other sites

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

 

В папке ..../hw/synthesis/ EDK создает файлы .prj для синтеза корок в XST.

В частности для каждого microblaze в системе - name_of_mcu_wrapper_xst.prj (например для одного проца и имя по умолчанию - microblaze_0_wrapper_xst.prj)

В этом файле список исходников для синтеза - типа :

 

vhdl microblaze_v8_20_b EDK_ROOT\hw\XilinxProcessorIPLib\pcores\microblaze_v8_20_b/hdl/vhdl/microblaze_types_pkg.vhd

....

vhdl microblaze_v8_20_b EDK_ROOT\hw\XilinxProcessorIPLib\pcores\microblaze_v8_20_b/hdl/vhdl/microblaze_core.vhd

vhdl microblaze_v8_20_b EDK_ROOT\hw\XilinxProcessorIPLib\pcores\microblaze_v8_20_b/hdl/vhdl/microblaze.vhd

vhdl work ../hdl/microblaze_0_wrapper.vhd

 

пишем скрипт который берет файлы из списка, декриптует их во временный каталог и добавляет в проект Synplify,

туда-же добавляем опции и constarints для синтеза, задаем имя выходного .edf такое же как и у исходного .prj, синтезируем,

- убиваем (бережно сохраняем на черный день) в папке ...../hw/implementation соответствующий .ngc и копируем туда полученный .edf.

Теперь можно делать tarnslate/map/pr

 

Этот вариант синтеза работает для многих корок кроме тех в которых используется корка блочной памяти. Потому как в коде этой корки при синтезе! XST вызывает внешнюю Cи процедуру для расчета оптимальной упаковки блочной памяти. Соответственно Synplify обламывается в этом месте. (Интересно а Syplify такое можно сделать ?)

 

При необходимости смотрим в ../hw/implementation/ файл .ncf для соответствующей корки и если нужно правим constraints для PR в соответствии с изменившимися именами внутренних цепей.

 

Так что это не барабан - это так себе - маленький бубен :)

 

Успехов! Rob.

 

 

 

Share this post


Link to post
Share on other sites
Приветствую!

 

[cut]

 

Так что это не барабан - это так себе - маленький бубен :)

 

Успехов! Rob.

 

Спасибо большое! Все получилось. Моя ошибка была в том, что я пытался сразу всю систему синтезировать.

Share this post


Link to post
Share on other sites

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

 

Этот вариант синтеза работает для многих корок кроме тех в которых используется корка блочной памяти. Потому как в коде этой корки при синтезе! XST вызывает внешнюю Cи процедуру для расчета оптимальной упаковки блочной памяти. Соответственно Synplify обламывается в этом месте. (Интересно а Syplify такое можно сделать ?)

 

 

Давно мне не давала покоя мысль " Как бы сделать так чтобы ничего не надо было делать" - в результате за выходные набросал скрипт который парсит лог после синтеза в Synplify,

ищет black_box корки (пока только fifo_generator_8_x), выдергивает требуемые параметры корки и формирует скрипты для синтеза этих корок в XST. После чего эти корки прекрасно цепляются и в тот же Synplify для оценки времянки, и на этапе traslate в ISE.

 

Удачи! Rob.

 

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