Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Шина Avalon
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Страницы: 1, 2
verali
Добрый день!
Собрал из IP ядер цифровой приемник (digital down converter).
Провел моделирование в ModelSim. Все хорошо, но есть НО!
В IP ядрах цифровых фильтров присутствуют входные и выходные сигналы для шины Avalon.
Из литературы я понял, что Avalon - универсальная шина для построения системы на кристалле.
Правильно ли я понимаю, что помимо прямого соединения компонентов цифровой обработки сигналов, их еще и надо связать этой шиной?
CIC фильтр так же требует входной сигнал с этой шины (in_valid(), .out_ready(), .in_error(). При моделировании я самостоятельно задавал эти сигналы.
Немного непонятно, зачем она нужна, направьте пожалуйста в правильную сторону.
Копейкин
Если вы для сборки системы используете QSYS или SOPC builder,
то соединения посредством шины Авалон будут сгенерированы автоматом.
Если есть несовместимость сигналов - будут выданы ошибки и предупреждения.
Если вы делали свой собственный компонент, то рекомендую использовать мастер,
для генерации шаблона.
verali
Цитата(Копейкин @ Dec 22 2014, 10:06) *
Если вы для сборки системы используете QSYS или SOPC builder,
то соединения посредством шины Авалон будут сгенерированы автоматом.
Если есть несовместимость сигналов - будут выданы ошибки и предупреждения.
Если вы делали свой собственный компонент, то рекомендую использовать мастер,
для генерации шаблона.

Для сборки системы я использовал Quartus. Делал step by step: последовательно соединял ip ядра и моделировал их.
Получается что данную системы (цифровой приемник) правильнее сделать в Qsys или Sopc builder?
Копейкин
Если вы планируете использовать шину Авалон и готовые IP
(типа NIOSII, DDR(1,2,3), Ethernet и т.п. ), то следует использовать Qsys или Sopc builder.
Для создания шаблонов компонентов и затем создания системы.
Также последняя версия Квартуса поддерживает не только Авалон.
Если вы создаёте собственную систему "с нуля" "врукопашную", то всё равно, что
использовать. wink.gif
Golikov A.
у ксалинкса IP ядра могут быть 2 видов (выбираются при запихивании в проект) нативные и на AXI шину. Последняя если цеплять на проц микроблайз, для систем без проца, я брал нативные и работал с предоставленными сигналами. Может у альтеры есть что-то подобное?
verali
Цитата(Копейкин @ Dec 22 2014, 11:27) *
Если вы планируете использовать шину Авалон и готовые IP
(типа NIOSII, DDR(1,2,3), Ethernet и т.п. ), то следует использовать Qsys или Sopc builder.

А чем отличается Qsys от SOPC Builder?
Копейкин
Цитата(verali @ Dec 22 2014, 18:44) *
А чем отличается Qsys от SOPC Builder?

Версии Квартуса после 10 (если правильно помню), для построения систем, имеют в составе QSYS.
Более ранние - SOPC builder.
krux
Смотря что этой шиной делать.
Сигналы у вас streaming или memory-mapped?
Если надо данные через неё загонять куда-нибудь (может, например, в DDR2/3 ?) - это одно. Если надо по этой шине всего-лишь управление организовать - это другое.
Другими словами, нужно для начала понять - для чего она используется: для передачи данных или для управления?

Выходы видятся следующие:
1) если нужно гибкое управления - то напрашивается микроконтроллер, и, как следствие, Nios2, который в свою очередь, тянет qsys, который требует аккуратного заворачивания всех субмодулей в qsys-обёртки.
2) если гибкость не требуется, вы понимаете что и куда, и писать объемные компоненты не предвидится, а нарисовать небольшой конечный автомат для вас не проблема - то можно плюнуть на qsys, и наваять один-два недостающих компонента врукопашную.
verali
Цитата(krux @ Dec 22 2014, 19:29) *
Смотря что этой шиной делать.
Сигналы у вас streaming или memory-mapped?
Если надо данные через неё загонять куда-нибудь (может, например, в DDR2/3 ?) - это одно. Если надо по этой шине всего-лишь управление организовать - это другое.
Другими словами, нужно для начала понять - для чего она используется: для передачи данных или для управления?

Выходы видятся следующие:
1) если нужно гибкое управления - то напрашивается микроконтроллер, и, как следствие, Nios2, который в свою очередь, тянет qsys, который требует аккуратного заворачивания всех субмодулей в qsys-обёртки.
2) если гибкость не требуется, вы понимаете что и куда, и писать объемные компоненты не предвидится, а нарисовать небольшой конечный автомат для вас не проблема - то можно плюнуть на qsys, и наваять один-два недостающих компонента врукопашную.

Задача такая:
На вход приемника (16 разрядный вход) приходит сигнал с АЦП . Управление планирую сделать по SPI.
Съем данных (квадратуры) планирую сделать тоже по SPI.
Не до конца понял назначение шины Avalon, требуется ли она для моего проекта, если управление идет по spi?


Решил в качестве получения доп.опытав пересобрать систему в Qsys.
Но есть одно НО:
почему то для Cyclone V недоступно ядро NCO и CIC фильтр.
Нажмите для просмотра прикрепленного файла
Или требуется отдельная лицензия на эти ядра?
Стоит Quartus 14.0 Web Edition
verali
Кто-нибудь соединял блоки DSP в Qsys?
Требуется отдельная лицензия на ip ядра в qsys, чтобы их активировать?
Копейкин
Цитата(verali @ Dec 24 2014, 11:09) *
Кто-нибудь соединял блоки DSP в Qsys?
Требуется отдельная лицензия на ip ядра в qsys, чтобы их активировать?

С этими блоками не сталкивался. laughing.gif
Другие TSE, DDR, NIOS позволяли собрать timelimited систему,
которая работала, пока к схеме подключен программатор или только 1 час.
Возможно с вашими IP есть какие-то нюансы, почитайте подробное описание.
verali
Цитата(Копейкин @ Dec 24 2014, 13:10) *
С этими блоками не сталкивался. laughing.gif
Другие TSE, DDR, NIOS позволяли собрать timelimited систему,
которая работала, пока к схеме подключен программатор или только 1 час.
Возможно с вашими IP есть какие-то нюансы, почитайте подробное описание.

Описание полностью идентично, как для ip ядра в Визарде, так и для ядра в qsys - они имеют только временные ограничения по работе.
serjj
В Quartus 14.1 для Cyclone V доступны перечисленные вами ядра. Если хотите использовать их через QSys, обновите софтину и все появится rolleyes.gif . Обратите внимание, что Авалон у фильтров имеет тип Streaming, тогда как у большинства компонентов (в т.ч. Nios) он Memory mapped. Соответсвенно, если вы хотите передать результат фильтрации/децимации в Nios для дальнейшей обработки, вам интерфейсы нужно будет согласовать, поставив преобразование Streaming-MM. SPI так же имеет интерфейс Memory mapped, следовательно что бы передать данные из SPI в NCO нужно будет реализовать преобразование MM-Streaming.
verali
Цитата(serjj @ Dec 25 2014, 09:49) *
В Quartus 14.1 для Cyclone V доступны перечисленные вами ядра. Если хотите использовать их через QSys, обновите софтину и все появится rolleyes.gif . Обратите внимание, что Авалон у фильтров имеет тип Streaming, тогда как у большинства компонентов (в т.ч. Nios) он Memory mapped. Соответсвенно, если вы хотите передать результат фильтрации/децимации в Nios для дальнейшей обработки, вам интерфейсы нужно будет согласовать, поставив преобразование Streaming-MM. SPI так же имеет интерфейс Memory mapped, следовательно что бы передать данные из SPI в NCO нужно будет реализовать преобразование MM-Streaming.

Спасибо за ответ!
Скажите пожалуйста зачем в ядре spi нужен сигнал data_in?
Нажмите для просмотра прикрепленного файла
novartis
Ваш slave spi должен возвращать мастеру какие-либо данные, вот для этого и нужна шина data_in.
Почитал документацию на эту корку, не понял как там данные складируются, надо вдаваться в тонкости, так что дерзайте.
Genadi Zawidowski
Хе, я тут тоже этим занимаюсь... Частично приручил AvalonST, но переход на Q 14.1 отложился как раз из-за необходимости засовывать всё в QSYS.
http://188.134.5.254/browser/hfreceiver/trunk/fpga_q13
verali
Цитата(Genadi Zawidowski @ Jan 8 2015, 23:37) *
Хе, я тут тоже этим занимаюсь... Частично приручил AvalonST, но переход на Q 14.1 отложился как раз из-за необходимости засовывать всё в QSYS.
http://188.134.5.254/browser/hfreceiver/trunk/fpga_q13

Хочу попробовать всю систему засунуть в qsys, но почему то в qsys'e отсутствует умножитель, да и вообще простые арифметические операции.
Кто работал в qsys подскажите как поступить.
Нажмите для просмотра прикрепленного файла
serjj
То что вы отметили на рисунке, это корка для перемножения матриц причем floating point (либа FP альтеры). Зачем вам в Qsys размещать элементарные мат операции? Реализуйте функциональный блок в отдельном .v модуле и сделайте для него авалоновскую обертку, что бы можно было подключить в qsys. Вся простая арифметика (в т.ч. floating point) через обычный megawizzard в 14м квартусе спокойно размещается...
verali
Цитата(serjj @ Jan 12 2015, 10:10) *
То что вы отметили на рисунке, это корка для перемножения матриц причем floating point (либа FP альтеры). Зачем вам в Qsys размещать элементарные мат операции? Реализуйте функциональный блок в отдельном .v модуле и сделайте для него авалоновскую обертку, что бы можно было подключить в qsys. Вся простая арифметика (в т.ч. floating point) через обычный megawizzard в 14м квартусе спокойно размещается...

Из мануалов я понял, что qsys - это оболочка, в которой собирается вся система. Т.е если работаешь в qsys квартус уже не требуется.

serjj
Цитата
Из мануалов я понял

Ну это вы неправильно поняли laughing.gif

Qsys всего лишь генерирует синтезируемые файлы и скрипты, которые подключаются к проекту Quartus для дальнейшей сборки. Вы можете большую часть проекта накидать в Qsys, оставив на Quartus только верхний уровень и имплементацию, но тогда если вам не будет хватать функционала готовых IP, вам нужно написать собственные, совместимые либо с шиной Avalon либо с AXI. Размещать в Qsys корки с элементарным функционалом (простая арифметика например) не целесообразно по системным и ресурсным соображениям, т.к. совместимость с шинами, которые использует Qsys добавляет некоторую избыточность плюс большой проект в Qsys совершенно нечитаем (правда можно использовать архитектуру субсистем, но там есть ньюансы с пробрасованием сигналов, что не всегда дает выигрыш в удобстве представления). Поэтому есть смысл размещать корки с законченным функционалом, например фильтры, цепочки фильтров, Фурье, преобразование систем координат, интерфейсы и пр.
verali
Цитата(serjj @ Jan 12 2015, 11:25) *
Ну это вы неправильно поняли laughing.gif

Qsys всего лишь генерирует синтезируемые файлы и скрипты, которые подключаются к проекту Quartus для дальнейшей сборки. Вы можете большую часть проекта накидать в Qsys, оставив на Quartus только верхний уровень и имплементацию, но тогда если вам не будет хватать функционала готовых IP, вам нужно написать собственные, совместимые либо с шиной Avalon либо с AXI. Размещать в Qsys корки с элементарным функционалом (простая арифметика например) не целесообразно по системным и ресурсным соображениям, т.к. совместимость с шинами, которые использует Qsys добавляет некоторую избыточность плюс большой проект в Qsys совершенно нечитаем (правда можно использовать архитектуру субсистем, но там есть ньюансы с пробрасованием сигналов, что не всегда дает выигрыш в удобстве представления). Поэтому есть смысл размещать корки с законченным функционалом, например фильтры, цепочки фильтров, Фурье, преобразование систем координат, интерфейсы и пр.

Подскажите пожалуйста, у меня такая система:
Нажмите для просмотра прикрепленного файла
Блок 1(первый красный прямоугольник) состоит из spi-slave и nco, блок 2 состоит из двух умножителей и третий блок из фильтров и spi-master.
Правильно ли я понимаю, что следует выполнить следующие шаги :
1) Первый блок генерирую в qsys как отдельную систему. Генерирую HDL файл.
2) Второй блок я генерирую в квартусе с помощью визарда. В этом проекте находится top level. Соединяю первый и второй блок в quartus
3) Третий блок генерирую в qsys как отдельную систему. Генерирую HDL файл. Собираю все три блока в quartus.
Направьте пожалуйста в нужном направлении
serjj
Посмотрел я как в новом квартусе добавлять IP через ip catalog... Раньше с обычным Megawizard'ом было удобнее, а сейчас если честно через одно место sad.gif

Но если отбросить негатив, то как можно сделать:
1) Для FIR и CIC фильтров, NCO, Avalon ST Serial делаем корки, они создадутся с расширением .qsys
2) Генерируем через Qsys для них файлы RTL врапперов, например .v, они лежат в папке synthesis, которая создается в папке корки (название совпадает с именем .qsys файла)
3) Добавляем в проект файлы .qsys или .qip из папки synthesis для каждой корки
4) Изучаем спецификацию на Avalon а главное на ST (streaming)
5) На обычном верилоге накидываем искомую систему, в которой подключаем наши корки, как обычные модули; их враперы лежат в соответствующих папках synthesis
6) Соединяем их, учитывая специфику их шин (у них будут разные разрядности, некоторые шины могут содержать 2 квадратуры, например NCO)
7) Добавляем где надо дополнительную арифметику и логику
8) Подключаем все это добро на топ к портам и вперед собирать/отлаживать, перед вами обычный FPGA/RTL проект
прим: если нужно поменять параметры IP корок, то нужно будет перегенировать содержимое папок synthesis

Из выше сказанного, я думаю, что в вашем случае собирать систему полностью в Qsys не целесообразно, замучаетесь с согласованием интерфейсов и отладкой, на верилоге ИМХО проще будет... Очень не обрадовала скудность и документации на ST корки в перспективе Qsys, сыро все это еще! Qsys напротив имеет преимущество, когда есть Nios/HPS и разветвленная шина Avalon-MM/AXI. Удачи rolleyes.gif
Genadi Zawidowski
Цитата
третий блок из фильтров

Обратите внимание, что FIR фильтр может работать в двухканальном (многоканальном) режиме (а CIC - в двухпортовом на входе и двухканальном на выходе) - что сильно экономит объём логики в применении к квадратурным трактам. В моём проекте именно так - за образцом можно туда заглянуть.
verali
Цитата(Genadi Zawidowski @ Jan 8 2015, 23:37) *
Хе, я тут тоже этим занимаюсь... Частично приручил AvalonST, но переход на Q 14.1 отложился как раз из-за необходимости засовывать всё в QSYS.
http://188.134.5.254/browser/hfreceiver/trunk/fpga_q13

Простите, а как скачать все файлы одновременно?Никогда с таким хранилищем не сталкивался.
Genadi Zawidowski
SVN-клиентом...
Ловите архив на сегодняшний день. Q13.1 (последний из 13-х).
verali
Цитата(Genadi Zawidowski @ Jan 13 2015, 09:54) *
SVN-клиентом...
Ловите архив на сегодняшний день. Q13.1 (последний из 13-х).

Спасибо!
verali
Всем привет.
Делаю управление ПЛИС внешним процессором по интерфейсу spi. С процессора на плис идут два 32-х разрядных сигнала управления.
Использую корку Avalon-ST Serial Peripheral Interface Core.
Решил не заморачиваться с шиной Avalon и сделать все в квартусе, а не в qsys.
До работы с интерфейсом сигналы, связанные с шиной Avalon(в cic и fir фильтрах), я задавал самостоятельно.
Сейчас хочу поступить так же, поэтому из корки удаляю сигнал sysclk, stsinkdata, stsinkready, stsourseready, stsoursedata – то есть хоть что-то говорящее об Avalon.
Нажмите для просмотра прикрепленного файла
И вот здесь встал вопрос, а какой сигнал должен идти от spi slave до блока в ПЛИС?
А как вы делаете управление по spi?
serjj
Имхо для управления лучше поставить altera_avalon_spi, которая имеет шину Avalon-MM. Посмотрите SPI Core в ug_embedded_ip.pdf Altera. Там как раз до 32 бит регистр данных задается. По прерыванию забираются данные из корки. А ST тут как раз не нужен.
verali
Цитата(serjj @ Jan 14 2015, 10:23) *
Имхо для управления лучше поставить altera_avalon_spi, которая имеет шину Avalon-MM. Посмотрите SPI Core в ug_embedded_ip.pdf Altera. Там как раз до 32 бит регистр данных задается. По прерыванию забираются данные из корки. А ST тут как раз не нужен.

Посмотрел SPI core.
Вижу такую куртинку:
Нажмите для просмотра прикрепленного файла
В мануале ug_embedded_ip.pdf ничего не сказано ни про data_from_cpu, ни про mem_addr, ни про data_to_cpu.
Я могу додумать и предположить, что ядро позволяет использовать либо external либо spi_control_port (сигналы на прикрепленной мною картинке).
Зачем нужны эти сигналы?
serjj
Эта корка адаптирована для использования под Qsys с шиной Avalon и Nios. Но можно ее использовать и в обычном RTL проекте. External - это то, что выбрасывается на порты SPI. SPI control port - это Avalon. По нему идет управление и обмен данными. Посмотрите карту регистров корки, там расписаны адреса внутренних регистров. Обмен по SPI происходит посредством чтения/записи по Avalon. Прерывание позволит вам узнать момент приёма очередной порции данных. Я использовал UART, данный SPI не пробовал, но думаю, что там все точно также. Если в вашем проекте Nios'a не будет, то вам нужно будет написать простенький Avalon Master, который будет управлять данной коркой (и другими Avalon MM корками, если они появятся далее)
verali
Цитата(serjj @ Jan 14 2015, 13:35) *
Эта корка адаптирована для использования под Qsys с шиной Avalon и Nios. Но можно ее использовать и в обычном RTL проекте. External - это то, что выбрасывается на порты SPI. SPI control port - это Avalon. По нему идет управление и обмен данными. Посмотрите карту регистров корки, там расписаны адреса внутренних регистров. Обмен по SPI происходит посредством чтения/записи по Avalon. Прерывание позволит вам узнать момент приёма очередной порции данных. Я использовал UART, данный SPI не пробовал, но думаю, что там все точно также. Если в вашем проекте Nios'a не будет, то вам нужно будет написать простенький Avalon Master, который будет управлять данной коркой (и другими Avalon MM корками, если они появятся далее)

А без avalon spi реализовать возможно?
Я не представляю о каком avalon мастере идет речь(
serjj
Цитата
А без avalon spi реализовать возможно?

Да, написать самому.
Цитата
Я не представляю о каком avalon мастере идет речь

Посмотрите спецификацию на шину Avalon, честное слово, там всё ж просто, это же не AXI4. Если бы был Nios, то функции мастера выполнялись бы им, но т.к. его судя по всему у Вас нет, управлять шиной прийдется вручную.
Удачи.
verali
Цитата(serjj @ Jan 14 2015, 15:57) *
Да, написать самому.

Посмотрите спецификацию на шину Avalon, честное слово, там всё ж просто, это же не AXI4. Если бы был Nios, то функции мастера выполнялись бы им, но т.к. его судя по всему у Вас нет, управлять шиной прийдется вручную.
Удачи.

Огромное спасибо за советы!
Всвязи с далеким пониманием как сделать мастер( а так же для чего он нужен и из чего должен состоять) управления шины Avalon, решил управление реализовать на NIOS для понимая и освоения программирования процессора, т.к он в перспективе потребуется.
Собрал я систему в QSYS: NIOS(+on-chip memory) -> Avalon FIFO (для перехода AvMM-AvST) ->NCO(AvST)
Пробую из NIOS загрузить код частоты в NCO, для последующего наблюдения квадратур в QuestaSim, а так же для заливки прошивки в ПЛИС.
Как мне вывести сигналы с NCO на пины ПЛИС, если ip nco требует, чтобы его выход был подключен к Avalon ST sink?
serjj
Вы можете вытащить сигналы из Qsys с помощью экспортирования (столбец Export в System Contents). После генерации Qsys компонента они появятся в Verilog/VHDL врапере в списке портов вместе с остальными внешними сигналами.
goodsoul
Цитата(verali @ Feb 5 2015, 16:57) *
Огромное спасибо за советы!
Всвязи с далеким пониманием как сделать мастер( а так же для чего он нужен и из чего должен состоять) управления шины Avalon, решил управление реализовать на NIOS для понимая и освоения программирования процессора, т.к он в перспективе потребуется.
Собрал я систему в QSYS: NIOS(+on-chip memory) -> Avalon FIFO (для перехода AvMM-AvST) ->NCO(AvST)
Пробую из NIOS загрузить код частоты в NCO, для последующего наблюдения квадратур в QuestaSim, а так же для заливки прошивки в ПЛИС.
Как мне вывести сигналы с NCO на пины ПЛИС, если ip nco требует, чтобы его выход был подключен к Avalon ST sink?


На начальном этапе можно еще SystemConsole использовать. Если в двух словах, то этот инструмент позволяет получать доступ к периферии внутри fpga через jtag.
Цепочка получается такой: SystemConsole (PC) -> USB-Blaster -> Jtag to Avalon Master преобразователь (есть модуль такой) -> периферия. Имея адреса модулей на шине Avalon можете читать и писать в них.
Применение System Console на начальных этапах позволяет не заморачиваться с ниосом или HPS (в случае SoC), а сразу начать отладку ваших блоков в ПЛИС.

http://www.altera.com/products/software/qu...ms-console.html
verali
Цитата(serjj @ Feb 6 2015, 08:16) *
Вы можете вытащить сигналы из Qsys с помощью экспортирования (столбец Export в System Contents). После генерации Qsys компонента они появятся в Verilog/VHDL врапере в списке портов вместе с остальными внешними сигналами.

Не понимаю, почему nco ip ругается на reset?
Я же его подключил:
Нажмите для просмотра прикрепленного файла

Цитата(goodsoul @ Feb 6 2015, 09:43) *
На начальном этапе можно еще SystemConsole использовать. Если в двух словах, то этот инструмент позволяет получать доступ к периферии внутри fpga через jtag.
Цепочка получается такой: SystemConsole (PC) -> USB-Blaster -> Jtag to Avalon Master преобразователь (есть модуль такой) -> периферия. Имея адреса модулей на шине Avalon можете читать и писать в них.
Применение System Console на начальных этапах позволяет не заморачиваться с ниосом или HPS (в случае SoC), а сразу начать отладку ваших блоков в ПЛИС.

http://www.altera.com/products/software/qu...ms-console.html


Спасибо, буду иметь ввиду, сейчас уж начал заниматься nios, если будут проблемы буду обращаться к помощи консоли.
serjj
Цитата
Не понимаю, почему nco ip ругается на reset?

Формальная проблема. Вы экспортировали выходной Avalon-ST, если резет произойдет, то приёмник в другой системе ничего об этом не узнает и формально будет считаться, что транзакция на шине продолжается. Если вы не планируете постоянно рулить этим резетом, то можно не обращать внимание на этот ворнинг.
verali
Продолжаю разбираться с программированием NIOS. Сейчас затруднение вызывает fifo.
FIFO в моем случае выполняет роль моста AvMM-slave - AvST Sourse. Читаю manuals ug_fifo и ug_1085, в последнем есть раздел software programming Model (стр. 16-7) в котором указаны функции для работы с фифо, такие как инициализация фифо, чтения статуса, запись в фифо, чтения из фифо и т.д.
Функций так много, что я запутался в каком порядке из применять.
К сожалению на просторах интернета не нашел примера как правильно инициализировать фифо для отправки одного 32-битного числа из NIOSа.
Может быть у кого-нибудь есть пример?
verali
Идея следующая - из Nios выгружаю число в fifo, а из fifo выгружаю это число на внешние пины.
Соединяю все таким образом:
Нажмите для просмотра прикрепленного файла
при это выход fifo вывожу наружу(выделено красным)

Код на Си:
CODE
#include "io.h"
#include "altera_avalon_fifo_regs.h"
#include "altera_avalon_fifo_util.h"
#include "system.h"
#include "sys/alt_irq.h"
#include <stdio.h>
#include <stdlib.h>
#define ALMOST_EMPTY 2
#define ALMOST_FULL FIFO_0_IN_CSR_FIFO_DEPTH-3

int main(){
int a, b, c, d;
//initializes the FIFO
a = altera_avalon_fifo_init(FIFO_0_IN_CSR_BASE, //the base address of the FIFO control slave
0, //the value to write to the interruptenable register
ALMOST_EMPTY, //the value for the almost empty threshold (порог) level
ALMOST_FULL); //the value for the most full threshold level

//write a, b into fifo

b = 0xffff;
c = altera_avalon_fifo_write_fifo(FIFO_0_IN_BASE, //the base address of the fifo write slave
FIFO_0_IN_CSR_BASE, //the base address of the fifo control slave
b ); //value to write to address

//read a,b from fifo
d = altera_avalon_fifo_read_fifo(FIFO_0_IN_BASE, //the base address of the fifo read slave
FIFO_0_IN_CSR_BASE); //the base address of the fifo control slave
return 0;
}


Вопрос: как выход fifo вывести наружу так, чтобы это было видно при моделировании?
verali
Скорее всего неправильно выразился: есть ли возможность выведенную наружу шину Avalon St промоделировать в ModelSim?
Уже неделю борюсь с эти, выслушаю любые советы.
Идея в выводе требуемого числа на внешние пины для моделирования. Для начала хочу вывести одно число через fifo, после подключить nco и вывести синус в modelsim. Fifo использую в качестве перехода Av-MM -> Av-ST.
Если уже ничего не получится, думаю двойной fifo сделать(Av-MM->Av-ST -->Av-St->Av-MM), а потом подключить PIO (тип Av-MM).
Kapsik
Также как ТС пытаюсь поднять ядро SPI. Почитал спецификацию Avalon и IP-переферию. Ниос использовать не хочу, пытаюсь написать свой мастер на шину. Как я понял необходим Memory-Mapped Master. Описал его сигналы, address, byteenable, read, readdata и т.п. Собрал в QSYS систему из своего мастера и IP-ядра SPI
Нажмите для просмотра прикрепленного файла
и ...ничего не произошло… Пытаюсь выдавить хоть какой-то отклик, но чет совсем глухо.
Делаю следующее. В Register Map первый адрес адрес – адрес передатчика, выставляю на шину адреса «1», на шину данных число, на write «1», на byteenable «11» так как ширина шины на SPI 16 бит. Смотрю все это дело в ModelSim внутри IP SPI обсалютная тишина, ничего кроме входных сигналов не дрыгается.
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Вопрос, что я делаю не так? Видимо упускаю, что-то важное…

Среда Quartus 14.1
alexadmin
Цитата(Kapsik @ May 29 2015, 10:24) *
Вопрос, что я делаю не так? Видимо упускаю, что-то важное…


Единственная здравая мысль, приходящая в голову, что если вы не хотите использовать процессор, то шина авалон вам не особо нужна и проще написать за 30 минут свой собственный spi (или взять готовый) с более простым управлением.
Kapsik
Цитата(alexadmin @ May 29 2015, 11:38) *
Единственная здравая мысль, приходящая в голову, что если вы не хотите использовать процессор, то шина авалон вам не особо нужна и проще написать за 30 минут свой собственный spi (или взять готовый) с более простым управлением.

Тут такая интересная штука. SPI написал. А то чем я сейчас занимаюсь я подключу к своему slave и посмотрю, как он работает. Просто мне в дальнейшем надо будет использовать ADС, возможно другие IP ядра, а они все садятся на Avalon, вот я и решил попрактиковаться начав с SPI. Тут сама цель не SPI, а разобраться в целом, на примере SPI...
alexadmin
Цитата(Kapsik @ May 29 2015, 10:24) *
?


Присмотрелся к картинкам.
reset - он у вас активным 0 сделан ведь?
byteena - он вам совсем не нужен. Если уж делать, то почему он стоит раным 3? для 32-разрядной шины он должен быть тогда уж 0xf. Но лучше убрать.
Kapsik
Решил подключить Nios и в ModelSim посмотреть как он дергает шину, но возникла странная ошибка. "Description Resource Path Location Type make: *** [prog.elf] Error 1 prog C/C++ Problem".
Проект в QSYS выглядит как Nios + RAM + SPI. Собирается все без ошибок
Нажмите для просмотра прикрепленного файла

С кодом особо не мудрил
Код
#include "system.h"
#include "altera_avalon_spi_regs.h"

int main ()
{
        int spi = 0x5;
        IOWR_ALTERA_AVALON_SPI_TXDATA(SPI_0_BASE, spi);
        return 0;
}

При сборке появляется ошибка
Нажмите для просмотра прикрепленного файла

С этой ошибкой я явно не одинок, обсуждалась и на нашем форуме и на заграничных, но однозначного ответа как исправить я не нашел. Демо от Altera заработала, добавил SPI тоже работает, добавил UART вылезла ошибка. Откатился на состояние без UART, но уже не помогло. Теперь и проект с 0 нормально не собирается.
Среда:
- Nios II 14.1 Software Build Tools for Eclipse
- Quartus II 14.1 (64-bit)

Прикрепляю папку с проектом
Нажмите для просмотра прикрепленного файла
doom13
Попробуйте пересобрать BSP, если не поможет - создайте проект заново.
Для работы с SPI проще использовать функцию
Код
int alt_avalon_spi_command(alt_u32 base, alt_u32 slave,
                           alt_u32 write_length, const alt_u8 * write_data,
                           alt_u32 read_length, alt_u8 * read_data,
                           alt_u32 flags)
Kapsik
Цитата(doom13 @ Jun 1 2015, 19:43) *
Попробуйте пересобрать BSP, если не поможет - создайте проект заново.

Спасибо за совет, попробовал. Создание проекта заново не помогает, это и пугает. Не могу удивить зависимость. Собираю проект с PIO, все работает и моделируется, собираю еще раз с теми же действиями и ошибка... К работающему проекту добавляю новую периферию, ошибка вылазит, откатываю назад она не пропадает. Страшно сделать проект, а он потом в самый неудобный момент умрет...
После всех действий в QSYS, в Eclips обновляю BSP.
gosu-art
У вас oпрограмма из ON_CHIP_MEM выполняется? Скорее всего ее просто не хватает. Попробуйте создать "hello world small"
doom13
Что при данной ошибке пишет в консоль?
Kapsik
Цитата(gosu-art @ Jun 2 2015, 08:32) *
У вас oпрограмма из ON_CHIP_MEM выполняется? Скорее всего ее просто не хватает. Попробуйте создать "hello world small"

да, из on_chip. Тестовые hello world запускаются. Но стоит добавить еще периферии начинаются проблемы. Советы по увеличению памяти встречал на иностранных форумах, пытался увеличивать, но изменений не увидел. Изменения можно проводить "на лету", в существующем блоке подправить объем, а потом перегенерить BSP или пересоздать весь блок?

Цитата(doom13 @ Jun 2 2015, 09:20) *
Что при данной ошибке пишет в консоль?

Вы об этом?
Нажмите для просмотра прикрепленного файла
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.