Jump to content

    
Sign in to follow this  
Flip-fl0p

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

Recommended Posts

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

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

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

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

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

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

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

Share this post


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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Добавлю.

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

В проект 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 за поддержку многоуровневых проектов требует $$$.

Share this post


Link to post
Share on other sites

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

Share this post


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

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

upd

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

Quartus 15 тоже...

Share this post


Link to post
Share on other sites

 

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

Варианты:

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

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

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

- ?

 

Share this post


Link to post
Share on other sites
В тему: что означает строка -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 начинает ругаться.

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