реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Конфигурация IP Core Altera для QSYS в зависимости от параметров
xxxmatrixxx
сообщение Sep 25 2018, 17:39
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050



Здравствуйте, уважаемые форумчане!!!

возникла такая задача - необходимо размножить IP Core интерфейса, написанного мною на verilog, в зависимости от параметров, задаваемых пользователем при выборе IP Core в QSYS

т.е. при выборе IP Core во время вставки ее в QSYS систему, если пользователь вводит в окошке количество интерфейсов цифру 3, то у меня должно появиться 3 Avalon-MM Master, если 1, то 1 Avalon-MM Master и т.д. в результате в зависимости от параметра появлялись, либо исчезали интерфейсы, относящиеся к Avalon шине, либо какие-либо внешние сигналы

я так понял, что сам Quartus и Qsys не позволяют сгенерировать такой tcl код, практических примеров в интернете я тоже не нашел

огромная просьба, поделиться примерами tcl кодов, которые реализовывают данные функции, если скините ссылки на документацию, где это описано,тоже буду очень благодарен
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Sep 25 2018, 18:24
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(xxxmatrixxx @ Sep 25 2018, 20:39) *
...
т.е. при выборе IP Core во время вставки ее в QSYS систему, если пользователь вводит в окошке количество интерфейсов цифру 3, то у меня должно появиться 3 Avalon-MM Master, если 1, то 1 Avalon-MM Master и т.д. в результате в зависимости от параметра появлялись, либо исчезали интерфейсы, относящиеся к Avalon шине, либо какие-либо внешние сигналы

я так понял, что сам Quartus и Qsys не позволяют сгенерировать такой tcl код, практических примеров в интернете я тоже не нашел
Ну простую заготовку tcl он вроде создать может так что не с нуля все писать.

Цитата(xxxmatrixxx @ Sep 25 2018, 20:39) *
огромная просьба, поделиться примерами tcl кодов, которые реализовывают данные функции, если скините ссылки на документацию, где это описано,тоже буду очень благодарен
Для начала ищем инете доку qsys_tcl.pdf с описанием команд (aka Quartus II Handbook Chapter 10. Component Interface Tcl Reference). Затем для примеров ищем в папке Quartus *_hw.tcl файлы от корок и смотрим как там все устроено. Можно найти файл от похожей по поведению корки в qsys и взять его за образец. Ну а дальше сплошное творчество на tcl.

Удачи! Rob.



Go to the top of the page
 
+Quote Post
xxxmatrixxx
сообщение Sep 26 2018, 11:38
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050



Спасибо большое за помощь!!!

сделал свою кору по аналогии с демультиплексором на avalon-stream(*\altera\13.0sp1\ip\altera\merlin\altera_merlin_demultiplexer\)

пришлось написать свой собственный TCL файл, а так же откорректировать файл top уровня моего проекта, чтобы скрипт корректировал данный файл под параметры, задаваемые пользователем

в итоге, я так понял, что скрипт на TCL управляет отображением IP Core в QSYS, а так же генерирует сам файл top уровня, открывая его и подставляя параметры пользователя, генерируя требуемый код на verilog(vhdl и т.д.)

еще раз спасибо!!!
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Sep 26 2018, 12:14
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(xxxmatrixxx @ Sep 26 2018, 14:38) *
...
в итоге, я так понял, что скрипт на TCL управляет отображением IP Core в QSYS, а так же генерирует сам файл top уровня, открывая его и подставляя параметры пользователя, генерируя требуемый код на verilog(vhdl и т.д.)
Да так и есть - все это TCL. Можно из скрипта генерировать динамически целые qsys модули в зависимости от параметров. Удобно еще то что можно собрать в библиотеку блоки кода для работы с часто используемыми шинами, блоками, ... и реюзать потом без лишней copy-paste.

CODE
proc add_mm_ctrl_port {{name_bus "avmm_ctrl"} {name_port "avmm_ctrl"} {addr_wh 14} {name_clk ""} {name_rst ""}} {

if {$name_clk==""} {
set name_clk ${name_bus}_clk
}

if {$name_rst==""} {
set name_rst ${name_bus}_rst
}

add_interface ${name_bus} avalon end
set_interface_property ${name_bus} associatedClock ${name_clk}
set_interface_property ${name_bus} associatedReset ${name_rst}
...
add_interface_port ${name_bus} ${name_port}_waitrequest waitrequest Output 1
add_interface_port ${name_bus} ${name_port}_address address Input ${addr_wh}
add_interface_port ${name_bus} ${name_port}_write write Input 1
add_interface_port ${name_bus} ${name_port}_writedata writedata Input 32
add_interface_port ${name_bus} ${name_port}_byteenable byteenable Input 4
add_interface_port ${name_bus} ${name_port}_read read Input 1
add_interface_port ${name_bus} ${name_port}_readdata readdata Output 32
add_interface_port ${name_bus} ${name_port}_readdatavalid readdatavalid Output 1
}

...
add_mm_ctrl_port "dma_ctrl" "dma_ctrl" 14 "ctrl_clk" "ctrl_rst"
...


Удачи! Rob.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 12:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016