djhall 0 23 ноября, 2017 Опубликовано 23 ноября, 2017 · Жалоба Я так понимаю, что в современной спецификации на шину Avalon нет сигналов Flow Control, я имею ввиду readyfordata и dataavailable. Но у меня есть довольно старый компонент, который как раз и предназначается для чтения и записи данных с использованием DMA и который использует сигналы readyfordata и dataavailable. Подскажите как обновить этот компонент для работы по современной спецификации. Какие есть замены для сигналов readyfordata и dataavailable? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EugeneS 0 23 ноября, 2017 Опубликовано 23 ноября, 2017 · Жалоба Я так понимаю, что в современной спецификации на шину 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 0 23 ноября, 2017 Опубликовано 23 ноября, 2017 · Жалоба 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 0 23 ноября, 2017 Опубликовано 23 ноября, 2017 · Жалоба Мой компонент работает с memory-mapped. Переделывать сейчас не вариант. Сейчас нужно адаптировать по быстрому. Из описания не вполне понятно, у вас Master или Slave? В Авалоне есть waitrequest. Slave может его выставлять (если не готов) и тогда транзакция будет задержана. Чисто теоретически, при этом будут остановлены только соответсвующие Master и Slave, все остальные устройства на шине должны продолжить между собой общаться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
djhall 0 25 ноября, 2017 Опубликовано 25 ноября, 2017 · Жалоба Чего-то я не допонимаю. Кратко опишу принцип работы моего компонента: Работает в режиме Slave. Имеет один memory-mapped интерфейс к которому подключены два мастера - один от Nios, второй чтение от DMA. Сам компонент имеет множество регистров по разным адресам в которые Nios записывает настроечные параметры, есть адрес с которого DMA считывает данные передавая их в память. Как было раньше: Nios записывает настроечные параметры в регистры, затем настраивает DMA, затем запускает внешнее устройство и ждёт окончания работы DMA. Как сейчас: Nios записывает настроечные параметры в регистры, затем настраивает DMA и далее зависает. И не удивительно, ведь сейчас выставлен сигнал ожидания waitrequest и доступ к компоненту блокируется следовательно внешнее устройство не запускается, данные не поступают и ожидание длится вечно. С Flow control такой ерунды не было. Какие варианты решения могут быть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 27 ноября, 2017 Опубликовано 27 ноября, 2017 · Жалоба Как сейчас: Nios записывает настроечные параметры в регистры, затем настраивает DMA и далее зависает. И не удивительно, ведь сейчас выставлен сигнал ожидания waitrequest и доступ к компоненту блокируется следовательно внешнее устройство не запускается, данные не поступают и ожидание длится вечно. С Flow control такой ерунды не было. Какие варианты решения могут быть? Вроде не должно зависать. Waitrequest устанавливается только при обращении к dma-регистру устройства? Если со стороны процессора все транзакции закончены, то не очень понятно с чего бы ему реагировать на waitrequest... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
djhall 0 27 ноября, 2017 Опубликовано 27 ноября, 2017 · Жалоба Вроде не должно зависать. Waitrequest устанавливается только при обращении к dma-регистру устройства? Если со стороны процессора все транзакции закончены, то не очень понятно с чего бы ему реагировать на waitrequest... Как только процессор записал последние данные для настройки DMA, DMA тут же пытается считать данные из моего компонента, а так как компонент требует дальнейшей настройки, то связка master-dma и slave-мой_компонент зависает. Почему зависает Nios не ясно может из-за того, что следующая команда в программе идёт именно продолжение настройки моего компонента, т.е. обращение к занятому компоненту. Как я понял разницу между Flow control и waitrequest: Flow control - не производит чтение или запись если устройство не готово waitrequest - производится, чтение или запись даже если устройство не готово и зависает в режиме ожидания пока устройство не будет готово. При этом занятый Slave нельзя нельзя ни записать ни прочитать другому мастеру, т.к. нельзя прервать транзакцию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 8 27 ноября, 2017 Опубликовано 27 ноября, 2017 · Жалоба Как я понял разницу между Flow control и waitrequest: Flow control - не производит чтение или запись если устройство не готово waitrequest - производится, чтение или запись даже если устройство не готово и зависает в режиме ожидания пока устройство не будет готово. При этом занятый Slave нельзя нельзя ни записать ни прочитать другому мастеру, т.к. нельзя прервать транзакцию. Понимание правильное. И поэтому вам нужно изменить драйвер вашего устройства, чтобы не было вот этого: Как только процессор записал последние данные для настройки DMA, DMA тут же пытается считать данные из моего компонента ... Или, например, выделить регистры, с которыми работает DMA, в отдельный slave. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
djhall 0 27 ноября, 2017 Опубликовано 27 ноября, 2017 · Жалоба Или, например, выделить регистры, с которыми работает DMA, в отдельный slave. В принципе я так и сделал, но ощущение такое что проблемы ещё будут. Например, Nios записывает настроечные параметры в регистры, затем настраивает DMA, затем запускает внешнее устройство и ждёт окончания работы DMA. Вроде всё нормально, но что будет если что-то пойдет не так и мне нужно будет прервать DMA? При работе с Flow control я мог это сделать. А вот при работе с waitrequest пока не ясно, ведь нельзя прервать транзакцию на половине. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 8 27 ноября, 2017 Опубликовано 27 ноября, 2017 · Жалоба Вроде всё нормально, но что будет если что-то пойдет не так и мне нужно будет прервать DMA? А DMA функционал типа Abort или Stop не поддерживает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться