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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Преобразование данных Ethernet в потоки E1
Wad1988
сообщение Mar 7 2011, 19:06
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 7-03-11
Пользователь №: 63 454



В процессе выполнения работы возникла серьезная проблема. Мне нужно запрограммировать ПЛИС так, чтобы она преобразовывала данные, пришедшие по каналу Ethernet в однобитный поток E1. Скорость передачи данных по Ethernet больше, чем по E1, поэтому использую следующую схему: компьютер посылает на ПЛИС N-ое количество пакетов, ПЛИС загоняет их в буфер и начинает передавать по каналу E1. Как только буфер освобождается до определенного уровня, ПЛИС посылает компьютеру запрос, мол я освобождаюсь, давай еще данные, и компьютер шлет еще. Важно чтобы буфер при этом не освобождался и не переполнялся, потому что данные в потоке Е1 должны идти непрерывно и последовательно. Так вот, проблема в том что буфер, скотина этакая, несмотря на размер в 100 Кб все же как-то умудряется освобождаться!!! То есть посылка данных на какое-то время прерывается и за это время буфер успевает освободиться. Парюсь с этим говном уже месяц. Люди если есть какие мысли, подскажите пожалуйста, с чем это может быть связано и как с этим бороться?
Конфигурация следующая: ПЛИС Xilinx XC4VLX20, скорость Ethernet около 10 Мбайт/с, скорость Е1 2 Мбайта/с, данные передаются по UDP, ОС на компе Windows XP, программа для передачи данных написана на C#, комп имеет на борту Core2Duo E8400 3ГГц, 4 Гига DDR2-800 и жесткий диск гигов на 200. Буфер представляет собой FIFO, сгенерированное при помощи Xilinx Core Generator.
Go to the top of the page
 
+Quote Post
Koluchiy
сообщение Mar 7 2011, 19:32
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543



Цитата
скорость Е1 2 Мбайта/с

Странный у Вас Е1. Раз в 8 быстрее, чем у всех остальных... wink.gif

Цитата
программа для передачи данных написана на C#

Как-то была история - притаскиваю (на другой конец области) программистам железку, подключаемую к компу через Езернет и тестовую программу, написанную на C Builder.
Включаем, запускаем прогу - всё работает.

Уезжаю.

Через 2 недели звонок - приезжай, не работает твоя железка.
Приезжаю (на другой конец области), показывают мне свою красивую программу, написанную на C#, запускают - не работает.
Достаю ноут, подключаю, запускаю свою тестовую программу - работает.

В общем, ихняя красивая программа на C# работала таааааааааак медленно, что поток информации просто не успевала принимать.
Go to the top of the page
 
+Quote Post
VladimirB
сообщение Mar 7 2011, 19:46
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219



Цитата(Koluchiy @ Mar 7 2011, 22:32) *
...
В общем, ихняя красивая программа на C# работала таааааааааак медленно, что поток информации просто не успевала принимать.


Я тоже как-то принимал большой поток данных по 1G Ethernet.
Даже использование С++ Builder'а с вызовом WinAPI Sokeтов не сильно помогало,
пока не применил библиотеку WinPCAP - потери пакетов сразу прекратились.

А в C# гемморой с массивами, т.к. Garbage Collector всё время чистит память, потому указатели на массивы применять нельзя - нужно каждый раз массив копировать целиком - получаются полные тормоза.
Go to the top of the page
 
+Quote Post
Alexium
сообщение Mar 7 2011, 19:46
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 3-03-10
Пользователь №: 55 790



Цитата(Koluchiy @ Mar 7 2011, 21:32) *
Странный у Вас Е1. Раз в 8 быстрее, чем у всех остальных

Нормальный, как у всех, если память не изменяет.
Зная потенциальную медлительность C#, спрашиваю: изучали латентность вашей программы? Т.е. время между получением (а еще лучше - посылкой )запроса и ответом на запрос.
Хотя, с другой стороны, не должно быть ТАКИХ больших задержек (100кБ - почти 100 мсек)...
Go to the top of the page
 
+Quote Post
Wad1988
сообщение Mar 7 2011, 20:18
Сообщение #5





Группа: Новичок
Сообщений: 3
Регистрация: 7-03-11
Пользователь №: 63 454



Цитата(Koluchiy @ Mar 7 2011, 22:32) *
Странный у Вас Е1. Раз в 8 быстрее, чем у всех остальных... wink.gif

На ПЛИС 8 потоков E1 мультиплексируется в один, отсюда и скорость 2 Мбайта/с

Цитата(Alexium @ Mar 7 2011, 22:46) *
Зная потенциальную медлительность C#, спрашиваю: изучали латентность вашей программы? Т.е. время между получением (а еще лучше - посылкой )запроса и ответом на запрос.

Насколько я понимаю, время от времени возникают задержки по 10-15 мс, они в принципе не велики, но регулярны, так что если такая задержка произойдет в то время, когда буфер опустошается и ПЛИС требует еще данных, может произойти полное опустошение буфера.
А windows может быть виноватым в этом безобразии?
Go to the top of the page
 
+Quote Post
SFx
сообщение Mar 7 2011, 20:36
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688



А демультиплексор вы тоже делаете? почему бы не передавать IDLE пакет в E1, который будет заполнять паузы при передаче?

поглядите профайлером свой софт.
Go to the top of the page
 
+Quote Post
Koluchiy
сообщение Mar 7 2011, 21:16
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543



Цитата
Нормальный, как у всех, если память не изменяет.

E1 - 2048 КБит/сек.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 8 2011, 05:00
Сообщение #8


Гуру
******

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



Цитата(Wad1988 @ Mar 8 2011, 01:06) *
Важно чтобы буфер при этом не освобождался и не переполнялся, потому что данные в потоке Е1 должны идти непрерывно и последовательно.

вам никто не сможет гарантировать, что буфер не опустошится. это нормальная ситуация, пусть себе по E1 идет поток нулей или последний бит в это время. главное, чтобы на приемном конце логика умела обрабатывать эту ситуацию
Go to the top of the page
 
+Quote Post
Koluchiy
сообщение Mar 8 2011, 10:04
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543



Цитата
вам никто не сможет гарантировать, что буфер не опустошится.

Ну почему же? При грамотном подборе размера буфера и порога опустошения снизить вероятность опустошения до приемлемого уровня вполне реально.

Цитата
пусть себе по E1 идет поток нулей или последний бит в это время. главное, чтобы на приемном конце логика умела обрабатывать эту ситуацию

Это уже будет не совсем Е1.
Go to the top of the page
 
+Quote Post
Andr2I
сообщение Mar 8 2011, 12:02
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 368
Регистрация: 16-11-06
Из: Тверь
Пользователь №: 22 379



Цитата(Koluchiy @ Mar 8 2011, 13:04) *
Это уже будет не совсем Е1.


А чему противоречит поток нулей по E1 (особенно при HDB3 rolleyes.gif ) ?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 8 2011, 12:15
Сообщение #11


Гуру
******

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



Цитата(Koluchiy @ Mar 8 2011, 16:04) *
Ну почему же? При грамотном подборе размера буфера и порога опустошения снизить вероятность опустошения до приемлемого уровня вполне реально.

я неделю (любой достаточно большой промежуток времени) не буду слать пакеты и привет

Цитата(Koluchiy @ Mar 8 2011, 16:04) *
Это уже будет не совсем Е1.

это почему это? что хочу, то и передаю. или вы про цикловую синхронизацию? тогда нули относятся к пользовательским данным.
Go to the top of the page
 
+Quote Post
Koluchiy
сообщение Mar 8 2011, 13:00
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543



Цитата
А чему противоречит поток нулей по E1 (особенно при HDB3 rolleyes.gif ) ?

Ну будет LOF на приемном конце sm.gif.

Цитата
я неделю (любой достаточно большой промежуток времени) не буду слать пакеты и привет

Еще можно провод перерезать sm.gif.

Цитата
это почему это? что хочу, то и передаю. или вы про цикловую синхронизацию? тогда нули относятся к пользовательским данным.

Ну будет прерывание разговора/трафика у людей.
Ну да, нестрашно. Но разработчика помянут словом матерным sm.gif.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 8 2011, 13:13
Сообщение #13


Гуру
******

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



Цитата(Koluchiy @ Mar 8 2011, 19:00) *
Ну будет прерывание разговора/трафика у людей.

и что, по вашему это нереальная ситуация? а когда все люди спят/не качают? что, линии ломаются? sm.gif
Go to the top of the page
 
+Quote Post
Koluchiy
сообщение Mar 8 2011, 13:23
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543



В данном случае (насколько я понимаю) разговор идет о ситуации, когда данные есть, но из-за (судя по всему) больших задержек в устройстве/ПО или неправильно подобранном пороге/размере буфера передаются в канал с паузами.
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 8 2011, 13:24
Сообщение #15


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



не могу понять чем GFP не устраивает


--------------------
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 4th July 2025 - 20:20
Рейтинг@Mail.ru


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