Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Quartus. Объединение проектов
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Среды разработки - обсуждаем САПРы
Flip-fl0p
Господа, а как в Quartus из нескольких проектов "слепить" один большой проект ?
Столкнулся с ситуацией:
Есть проект "SDRAM_controller" - SDRAM контроллера. Он сосотоит из нескольких HDL описаний, в которые входят библиотечные элементы собственной разработки.
Есть проект "DVI_receiver" - приёмника DVI сигнала с выводом его на VGA. Он так-же состоит из нескольких HDL описаний, в которые входят библиотечные элементы собственной разработки.
А так-же есть проект "SCALER" - масштабатор видеопотока. И он тоже состоит из нескольких HDL описаний в который так-же входят библиотечные элементы.
И хочу я создать из этого добра новый большой проект.
Как мне правильно объединить все эти проекты, не добавляя каждый файл вручную по-отдельности.
Stewart Little
Цитата(Flip-fl0p @ Feb 19 2018, 14:17) *
Как мне правильно объединить все эти проекты, не добавляя каждый файл вручную по-отдельности.

http://quartushelp.altera.com/17.1/index.h...ary/def_qxp.htm
Flip-fl0p
Цитата(Stewart Little @ Feb 19 2018, 14:29) *

Так это надо покупать тогда Quartus. А хочется что-то похожее сделать в версии web edition rolleyes.gif
Вроде как можно попробовать создать свой QIP файл на TCL. Сижу разбираюсь с этим.
Flip-fl0p
Итак. Что-то похожее на то, что мне нужно я получил:
Можно создать файл с расширением .qip и в нем описать все файлы проектов.

Допустим у меня есть отдельный проект, который называется "TMDS_RECEIVER".
В проект входят следующие файлы:
Код
"TMDS_RECEIVER.vhd"      
"TMDS_DECODER.vhd"      
"OUT_FIFO.vhd"          
"KAA_RESET_BRIDGE.vhd"  
"KAA_PULSE_GENERATOR.vhd"
"DDR_REG.vhd"            
"LVDS_RX.vhd"

Я хочу проект "TMDS_RECEIVER" применить в проекте более высокого уровня, например в проекте "DVI_RECEIVER".

Для этого я в проекте "TMDS_RECEIVER" создал файл TMDS_RECEIVER.qip
который содержит описание всех, входящих в него файлов:
Код
set_global_assignment -library "TMDS_RECEIVER" -name VHDL_FILE [file join $::quartus(qip_path) "TMDS_RECEIVER.vhd"         ]
set_global_assignment -library "TMDS_RECEIVER" -name VHDL_FILE [file join $::quartus(qip_path) "TMDS_DECODER.vhd"          ]
set_global_assignment -library "TMDS_RECEIVER" -name VHDL_FILE [file join $::quartus(qip_path) "OUT_FIFO.vhd"              ]
set_global_assignment -library "TMDS_RECEIVER" -name VHDL_FILE [file join $::quartus(qip_path) "KAA_RESET_BRIDGE.vhd"      ]
set_global_assignment -library "TMDS_RECEIVER" -name VHDL_FILE [file join $::quartus(qip_path) "KAA_PULSE_GENERATOR.vhd"   ]
set_global_assignment -library "TMDS_RECEIVER" -name VHDL_FILE [file join $::quartus(qip_path) "DDR_REG.vhd"               ]
set_global_assignment -library "TMDS_RECEIVER" -name VHDL_FILE [file join $::quartus(qip_path) "LVDS_RX.vhd"               ]

И в проект "DVI_RECEIVER" мне достаточно просто добавить файл TMDS_RECEIVER.qip.

Список файлов, из которых состоит проект можно посмотреть в файле .rpt, который автоматически генерируется Quartus'ом.
К примеру у меня найти его можно по пути ...\TMDS_RECEIVER\output_files\TMDS_RECEIVER.map.rpt

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

Из недостатков - требуется на VHDL в явном виде описать,подключаемый компонент в области декларации архитектуры, поскольку direct instantiation не работает...
Flip-fl0p
Добавлю.
Если вы добавляете проект, в который входит ещё один проект, то надо поступить следующим образом:
В проект TMDS_RECEIVER, который входит в проект DVI_RECEIVER, входит проект LVDS_RX.
Так вот, чтобы DVI_RECEIVER не ругался на отсутствие LVDS_RX файл TMDS_RECEIVER.qip должен содержать строчку
Код
set_global_assignment -library "TMDS_RECEIVER" -name QIP_FILE  [file join $::quartus(qip_path) "LVDS_RX/LVDS_RX.qip"       ]


Т.е весь TMDS_RECEIVER.qip файл выглядит так:
Код
set_global_assignment -library "TMDS_RECEIVER" -name VHDL_FILE [file join $::quartus(qip_path) "TMDS_RECEIVER.vhd"         ]
set_global_assignment -library "TMDS_RECEIVER" -name VHDL_FILE [file join $::quartus(qip_path) "TMDS_DECODER.vhd"          ]
set_global_assignment -library "TMDS_RECEIVER" -name VHDL_FILE [file join $::quartus(qip_path) "OUT_FIFO.vhd"              ]
set_global_assignment -library "TMDS_RECEIVER" -name VHDL_FILE [file join $::quartus(qip_path) "KAA_RESET_BRIDGE.vhd"      ]
set_global_assignment -library "TMDS_RECEIVER" -name QIP_FILE  [file join $::quartus(qip_path) "LVDS_RX/LVDS_RX.qip"       ]


Вот теперь работать с проектами стало гораздо легче. 1111493779.gif

P.S. Очень странно что Quartus за поддержку многоуровневых проектов требует $$$.
doom13
Хочу полюбопытствовать - где тут работа с проектами, объединение проектов? Тут описано, как своё IP-core, которое состоит из кучи файлов, правильно добавить к проекту.
Flip-fl0p
Цитата(doom13 @ Feb 22 2018, 13:35) *
Хочу полюбопытствовать - где тут работа с проектами, объединение проектов? Тут описано, как своё IP-core, которое состоит из кучи файлов, правильно добавить к проекту.

А что Вы подразумеваете под термином "Объединение проектов" ?
upd
Да и Quartus 13.1 WE не дает создать собственный IP... Просит $$$
Quartus 15 тоже...
EugeneS

В тему: что означает строка -library "TMDS_RECEIVER" ?
Варианты:
- создать локальную область переменных
- создать блок в иерархии проекта
- трюк для многократного применения повторяющихся библиотечных элементов
- ?
Flip-fl0p
Цитата(EugeneS @ Feb 22 2018, 15:53) *
В тему: что означает строка -library "TMDS_RECEIVER" ?
Варианты:
- создать локальную область переменных
- создать блок в иерархии проекта
- трюк для многократного применения повторяющихся библиотечных элементов
- ?

Если честно, я не могу этого сказать. Я когда смотрел описание команды
Код
set_global_assignment

Не нашел внятного описания ключа -library
В документе https://www.altera.com/en_US/pdfs/literatur...ts_qii51008.pdf также нет внятного описания.
По большей части я взял qip файл, который Quartus создает при генерации PLL для семейства Cyclone V, и сделал по образу и подобию.
Главное что работает как надо.
И ещё можно добавить:
Если в начале VHDL файла написать

Код
Library TMDS_RECEIVER;


то можно делать direct instantiation

Код
TMDS_RECEIVER_comp : entity TMDS_RECEIVER.TMDS_RECEIVER
port map
(
    ...
    ...
    ...
);

И самое приятное, что если запускать Moldelsim из под Quartus - он всё прекрасно понимает laughing.gif

А то надоело: чтобы подключить к проекту самописный SDRAM контроллер, надо каждый файл этого несчастного контроллера добавить к текущему проекту. Потом оказывается, что если есть файлы с одинаковым названием Quartus начинает ругаться.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.