Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Avalon Interface and Flow Control
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
djhall
Я так понимаю, что в современной спецификации на шину Avalon нет сигналов Flow Control, я имею ввиду readyfordata и dataavailable.
Но у меня есть довольно старый компонент, который как раз и предназначается для чтения и записи данных с использованием DMA и который использует сигналы readyfordata и dataavailable.
Подскажите как обновить этот компонент для работы по современной спецификации. Какие есть замены для сигналов readyfordata и dataavailable?
EugeneS
QUOTE (djhall @ Nov 23 2017, 09:13) *
Я так понимаю, что в современной спецификации на шину Avalon нет сигналов Flow Control, я имею ввиду readyfordata и dataavailable.
Но у меня есть довольно старый компонент, который как раз и предназначается для чтения и записи данных с использованием DMA и который использует сигналы readyfordata и dataavailable.
Подскажите как обновить этот компонент для работы по современной спецификации. Какие есть замены для сигналов readyfordata и dataavailable?


Avalon Interface Specifications:
"Flow control is a deprecated feature. Altera recommends that you use the Avalon
Streaming (Avalon-ST) and the ready and valid signals for new designs."
djhall
Цитата(EugeneS @ Nov 23 2017, 12:15) *
Avalon Interface Specifications:
"Flow control is a deprecated feature. Altera recommends that you use the Avalon
Streaming (Avalon-ST) and the ready and valid signals for new designs."

Мой компонент работает с memory-mapped. Переделывать сейчас не вариант. Сейчас нужно адаптировать по быстрому.
alexadmin
Цитата(djhall @ Nov 23 2017, 11:19) *
Мой компонент работает с memory-mapped. Переделывать сейчас не вариант. Сейчас нужно адаптировать по быстрому.


Из описания не вполне понятно, у вас Master или Slave? В Авалоне есть waitrequest. Slave может его выставлять (если не готов) и тогда транзакция будет задержана. Чисто теоретически, при этом будут остановлены только соответсвующие Master и Slave, все остальные устройства на шине должны продолжить между собой общаться.
djhall
Чего-то я не допонимаю.

Кратко опишу принцип работы моего компонента:
Работает в режиме Slave. Имеет один memory-mapped интерфейс к которому подключены два мастера - один от Nios, второй чтение от DMA. Сам компонент имеет множество регистров по разным адресам в которые Nios записывает настроечные параметры, есть адрес с которого DMA считывает данные передавая их в память.

Как было раньше:
Nios записывает настроечные параметры в регистры, затем настраивает DMA, затем запускает внешнее устройство и ждёт окончания работы DMA.

Как сейчас:
Nios записывает настроечные параметры в регистры, затем настраивает DMA и далее зависает. И не удивительно, ведь сейчас выставлен сигнал ожидания waitrequest и доступ к компоненту блокируется следовательно внешнее устройство не запускается, данные не поступают и ожидание длится вечно.

С Flow control такой ерунды не было. Какие варианты решения могут быть?
alexadmin
Цитата(djhall @ Nov 25 2017, 18:18) *
Как сейчас:
Nios записывает настроечные параметры в регистры, затем настраивает DMA и далее зависает. И не удивительно, ведь сейчас выставлен сигнал ожидания waitrequest и доступ к компоненту блокируется следовательно внешнее устройство не запускается, данные не поступают и ожидание длится вечно.

С Flow control такой ерунды не было. Какие варианты решения могут быть?


Вроде не должно зависать. Waitrequest устанавливается только при обращении к dma-регистру устройства? Если со стороны процессора все транзакции закончены, то не очень понятно с чего бы ему реагировать на waitrequest...
djhall
Цитата(alexadmin @ Nov 27 2017, 14:34) *
Вроде не должно зависать. Waitrequest устанавливается только при обращении к dma-регистру устройства? Если со стороны процессора все транзакции закончены, то не очень понятно с чего бы ему реагировать на waitrequest...

Как только процессор записал последние данные для настройки DMA, DMA тут же пытается считать данные из моего компонента, а так как компонент требует дальнейшей настройки, то связка master-dma и slave-мой_компонент зависает. Почему зависает Nios не ясно может из-за того, что следующая команда в программе идёт именно продолжение настройки моего компонента, т.е. обращение к занятому компоненту.

Как я понял разницу между Flow control и waitrequest:
Flow control - не производит чтение или запись если устройство не готово
waitrequest - производится, чтение или запись даже если устройство не готово и зависает в режиме ожидания пока устройство не будет готово. При этом занятый Slave нельзя нельзя ни записать ни прочитать другому мастеру, т.к. нельзя прервать транзакцию.
Raven
Цитата(djhall @ Nov 27 2017, 14:35) *
Как я понял разницу между Flow control и waitrequest:
Flow control - не производит чтение или запись если устройство не готово
waitrequest - производится, чтение или запись даже если устройство не готово и зависает в режиме ожидания пока устройство не будет готово. При этом занятый Slave нельзя нельзя ни записать ни прочитать другому мастеру, т.к. нельзя прервать транзакцию.

Понимание правильное.

И поэтому вам нужно изменить драйвер вашего устройства, чтобы не было вот этого:
Цитата(djhall @ Nov 27 2017, 14:35) *
Как только процессор записал последние данные для настройки DMA, DMA тут же пытается считать данные из моего компонента ...


Или, например, выделить регистры, с которыми работает DMA, в отдельный slave.
djhall
Цитата(Raven @ Nov 27 2017, 15:48) *
Или, например, выделить регистры, с которыми работает DMA, в отдельный slave.

В принципе я так и сделал, но ощущение такое что проблемы ещё будут.
Например, Nios записывает настроечные параметры в регистры, затем настраивает DMA, затем запускает внешнее устройство и ждёт окончания работы DMA. Вроде всё нормально, но что будет если что-то пойдет не так и мне нужно будет прервать DMA? При работе с Flow control я мог это сделать. А вот при работе с waitrequest пока не ясно, ведь нельзя прервать транзакцию на половине.
Raven
Цитата(djhall @ Nov 27 2017, 15:09) *
Вроде всё нормально, но что будет если что-то пойдет не так и мне нужно будет прервать DMA?

А DMA функционал типа Abort или Stop не поддерживает?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.