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

Avalon Interface and Flow Control

Я так понимаю, что в современной спецификации на шину Avalon нет сигналов Flow Control, я имею ввиду readyfordata и dataavailable.

Но у меня есть довольно старый компонент, который как раз и предназначается для чтения и записи данных с использованием DMA и который использует сигналы readyfordata и dataavailable.

Подскажите как обновить этот компонент для работы по современной спецификации. Какие есть замены для сигналов readyfordata и dataavailable?

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


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

Я так понимаю, что в современной спецификации на шину 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."

 

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


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

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. Переделывать сейчас не вариант. Сейчас нужно адаптировать по быстрому.

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


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

Мой компонент работает с memory-mapped. Переделывать сейчас не вариант. Сейчас нужно адаптировать по быстрому.

 

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

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


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

Чего-то я не допонимаю.

 

Кратко опишу принцип работы моего компонента:

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

 

Как было раньше:

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

 

Как сейчас:

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

 

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

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


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

Как сейчас:

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

 

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

 

Вроде не должно зависать. Waitrequest устанавливается только при обращении к dma-регистру устройства? Если со стороны процессора все транзакции закончены, то не очень понятно с чего бы ему реагировать на waitrequest...

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


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

Вроде не должно зависать. Waitrequest устанавливается только при обращении к dma-регистру устройства? Если со стороны процессора все транзакции закончены, то не очень понятно с чего бы ему реагировать на waitrequest...

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

 

Как я понял разницу между Flow control и waitrequest:

Flow control - не производит чтение или запись если устройство не готово

waitrequest - производится, чтение или запись даже если устройство не готово и зависает в режиме ожидания пока устройство не будет готово. При этом занятый Slave нельзя нельзя ни записать ни прочитать другому мастеру, т.к. нельзя прервать транзакцию.

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


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

Как я понял разницу между Flow control и waitrequest:

Flow control - не производит чтение или запись если устройство не готово

waitrequest - производится, чтение или запись даже если устройство не готово и зависает в режиме ожидания пока устройство не будет готово. При этом занятый Slave нельзя нельзя ни записать ни прочитать другому мастеру, т.к. нельзя прервать транзакцию.

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

 

И поэтому вам нужно изменить драйвер вашего устройства, чтобы не было вот этого:

Как только процессор записал последние данные для настройки DMA, DMA тут же пытается считать данные из моего компонента ...

 

Или, например, выделить регистры, с которыми работает DMA, в отдельный slave.

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


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

Или, например, выделить регистры, с которыми работает DMA, в отдельный slave.

В принципе я так и сделал, но ощущение такое что проблемы ещё будут.

Например, Nios записывает настроечные параметры в регистры, затем настраивает DMA, затем запускает внешнее устройство и ждёт окончания работы DMA. Вроде всё нормально, но что будет если что-то пойдет не так и мне нужно будет прервать DMA? При работе с Flow control я мог это сделать. А вот при работе с waitrequest пока не ясно, ведь нельзя прервать транзакцию на половине.

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


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

Вроде всё нормально, но что будет если что-то пойдет не так и мне нужно будет прервать DMA?

А DMA функционал типа Abort или Stop не поддерживает?

 

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


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

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

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

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

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

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

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

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

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

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