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

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 начинает ругаться.

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...