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

    

Quartus. Объединение проектов

Господа, а как в Quartus из нескольких проектов "слепить" один большой проект ?

Столкнулся с ситуацией:

Есть проект "SDRAM_controller" - SDRAM контроллера. Он сосотоит из нескольких HDL описаний, в которые входят библиотечные элементы собственной разработки.

Есть проект "DVI_receiver" - приёмника DVI сигнала с выводом его на VGA. Он так-же состоит из нескольких HDL описаний, в которые входят библиотечные элементы собственной разработки.

А так-же есть проект "SCALER" - масштабатор видеопотока. И он тоже состоит из нескольких HDL описаний в который так-же входят библиотечные элементы.

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
Как мне правильно объединить все эти проекты, не добавляя каждый файл вручную по-отдельности.

http://quartushelp.altera.com/17.1/index.h...ary/def_qxp.htm

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


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

Так это надо покупать тогда Quartus. А хочется что-то похожее сделать в версии web edition :rolleyes:

Вроде как можно попробовать создать свой QIP файл на TCL. Сижу разбираюсь с этим.

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


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

Итак. Что-то похожее на то, что мне нужно я получил:

Можно создать файл с расширением .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 не работает...

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


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

Добавлю.

Если вы добавляете проект, в который входит ещё один проект, то надо поступить следующим образом:

В проект 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:

 

P.S. Очень странно что Quartus за поддержку многоуровневых проектов требует $$$.

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


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

Хочу полюбопытствовать - где тут работа с проектами, объединение проектов? Тут описано, как своё IP-core, которое состоит из кучи файлов, правильно добавить к проекту.

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


Ссылка на сообщение
Поделиться на другие сайты
Хочу полюбопытствовать - где тут работа с проектами, объединение проектов? Тут описано, как своё IP-core, которое состоит из кучи файлов, правильно добавить к проекту.

А что Вы подразумеваете под термином "Объединение проектов" ?

upd

Да и Quartus 13.1 WE не дает создать собственный IP... Просит $$$

Quartus 15 тоже...

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


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

 

В тему: что означает строка -library "TMDS_RECEIVER" ?

Варианты:

- создать локальную область переменных

- создать блок в иерархии проекта

- трюк для многократного применения повторяющихся библиотечных элементов

- ?

 

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


Ссылка на сообщение
Поделиться на другие сайты
В тему: что означает строка -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:

 

А то надоело: чтобы подключить к проекту самописный SDRAM контроллер, надо каждый файл этого несчастного контроллера добавить к текущему проекту. Потом оказывается, что если есть файлы с одинаковым названием Quartus начинает ругаться.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация