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

 
 
> Непонимание работы ядра Ethernet, c opencores, поясните пжл.
alexPec
сообщение Dec 22 2012, 08:43
Сообщение #1


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

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Сконфигурировал ядро (то, которое с авалон-мм) для работы с одним дескриптором на передачу и одним на прием. Ставлю брейкпоинт на обработку прерывания по приему. Посылаю пинг с компа. Срабатывает брейк, жду. Проходят 4 пинга, при этом программа висит на брейке. Дальше нажимаю run - и тут же выскакивает (после обработки первого пинга) брейк от второго (затем от 3-го и 4-го), а пинги то уже прошли!

Вопросы такие, поясните кто с этим дело имел:

1. Один дескриптор обрабатывает 1 фрейм эзернета или несколько?
2. Почему срабатывают прерывания по приему, когда пинги уже прошли? И именно столько раз, сколько было пингов?
3. Если дескриптор обрабатывает 1 фрейм - непонятно, где копятся остальные пинги пока программа висит в брейке?
4. Если дескриптор обрабатывает скольугодно фреймов (пишет все что приходит с эзернета подряд) - как ограничить железяке место, куда она может писать? Ато ведь кончится отведенное ей место - залезет на область данных или программы и будет ситуация ж..па.

PS даже если 4. верно, непонятно почему срабатывают прерывания после того как пинги прошли.

Буду рад любым пояснениям.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vadimuzzz
сообщение Jan 18 2013, 01:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



хм, хороший вопрос! в документации на корку говорится, что для предотвращения переполнения fifo используется флаг almost_full (конфигурируется через соответствующий регистр). если во время приема фрейма обнаружится, что пакет в буфер не влезает (т.е. сработал флаг almost_full), то фрейм обрезается и его дескриптор соответствующим образом помечается. в статусе дескриптора принятого пакета за переполнение отвечает третий бит
Цитата
Truncated receive frame. Asserted when the receive frame is truncated due to an overflow in the receive FIFO buffer.


а вот что происходит дальше - непонятно, в доках об этом не говорится. сброс корки, пожалуй, самое правильное решение. но я бы посмотрел в сигналтапе сигналы fifo (можно синзронизироваться по almost_full) и как себя ведет корка. есть еще вариант, что неверно настроен регистр rx_almost_full. PAUSE-фреймы тоже нормальный вариант.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 18 2013, 06:54
Сообщение #3


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

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(vadimuzzz @ Jan 18 2013, 05:37) *
хм, хороший вопрос! в документации на корку говорится, что для предотвращения переполнения fifo используется флаг almost_full (конфигурируется через соответствующий регистр). если во время приема фрейма обнаружится, что пакет в буфер не влезает (т.е. сработал флаг almost_full), то фрейм обрезается и его дескриптор соответствующим образом помечается. в статусе дескриптора принятого пакета за переполнение отвечает третий бит

а вот что происходит дальше - непонятно, в доках об этом не говорится. сброс корки, пожалуй, самое правильное решение. но я бы посмотрел в сигналтапе сигналы fifo (можно синзронизироваться по almost_full) и как себя ведет корка. есть еще вариант, что неверно настроен регистр rx_almost_full. PAUSE-фреймы тоже нормальный вариант.

Спасибо, поле деятельности есть. Буду пробовать.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th August 2025 - 14:29
Рейтинг@Mail.ru


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