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

 
 
> Ethernet на ПЛИС, PHY+MAC+UDP/IP
Alexey_pashinov
сообщение Sep 4 2014, 07:56
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 6-03-14
Из: Зеленоград
Пользователь №: 80 823



Собрал проект, реализующий Ethernet (PHY+MAC+UDP/IP). Я формирую на ПЛИС'ке данные, которые хочу подать, на UDP. При отвправке самого первого пакета при выставлении сигнала sof, UDP/IP stack формирует arp запрос получателю, далее приходит отправителю ответ и после UDP/IP выствляет сигнал dst_rdy, который говорит о том что блок UDP/IP готов к приему данных для отправки. При передаче остальных пакетов сигнал dst_rdy выставляется почти сразу же после выставления sof (промежуток времени между их выставлением равен длине формируемого заголовка). Проблема заключается в следующем. При отправке самого первого пакета сигнал dst_rdy выставляется не сразу, может выставиться аж через 3-5 мин, может меньше может больше, а может и не выставиться. Но после того как это произошло (установилось видимо связь) дальнейшая передача пакетов происходит исправно. Кстати проблема возникает не всегда, например когда проверяю работу на 100 Мбит, зачастую передача работает и редко такое возникает, а когда проверяю на 1gb то наоборот зачастую не работает и только редко начинает работать сразу. Помогите разобраться с этим, буду очень признателен).

Могу выложить описание автомата формир отправку и диаграммы
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alexey_pashinov
сообщение Sep 4 2014, 13:50
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 6-03-14
Из: Зеленоград
Пользователь №: 80 823



Привожу скрин wireshark, в обоих случаях arp запросы и ответы идентичны (физ адрес разный т.к рабочий выриант был подключен к 100 мбит а нерабочий к 1 Гбит).

Ниже привожу пример реализации автомата. Сигнал i нужен для задержки сигнала src_rdy чтобы синхронизировать данные поступающие из памяти на udp, остальные сигналы должны быть понятны. И в этой реализации автомат застревает в состоянии state_1 где ждет сигнал dst_rdy, чтобы перейти в state_2. И как я уже упоминал может дождаться его через минут 5 и потом уже передача любого количества пакетов проходит нормально.
Код
process_udp_state : process(tx_clk_i)
                    begin
                        if(rising_edge(tx_clk_i)) then
                            case (state_udp) is
                                
                                when idle =>
                                    if (start_data_tx = '1') then
                                        state_udp <= state_1;
                                    end if;
                                    
                                when state_1 =>
                                    if (udp_tx_dst_rdy = '1') then
                                        state_udp <= state_2;
                                    end if;
                                
                                when state_2 =>
                                    if (i = 3) then
                                        state_udp <= state_3;
                                    end if;
                                    
                                when state_3 =>
                                        if (m = 255) then
                                            state_udp <= idle;
                                        end if;
                                                
                            end case;
                        end if;
                end process;
                    
                process_udp : process(tx_clk_i)
                    begin
                        if(rising_edge(tx_clk_i)) then
                            case (state_udp) is
                                
                                when idle =>
                                    udp_tx_src_rdy <= '0';
                                    udp_tx_eof <= '0';
                                    
                                    m <= 0;
                                    
                                    udp_tx_data_crc <= x"0000";
                                    udp_tx_dst_ip <= x"C0A80103";
                                    udp_tx_dst_port <= x"0000";
                                    udp_tx_src_port <= x"0000";
                                    udp_tx_fragment_offset <= "0000000000000";
                                    udp_tx_more_fragments <= '0';
                                    udp_tx_data_length <= x"0100";
                                    udp_tx_data <= x"00";
                                    
                                when state_1 =>
                                        udp_tx_sof <= '1';
                                
                                when state_2 =>
                                    udp_tx_sof <= '0';
                                    if (i = 3) then
                                        i <= 0;
                                    else
                                        i <= i + 1;
                                    end if;
                                    
                                when state_3 =>
                                        udp_tx_src_rdy <= '1';

                                        if (m = 255) then
                                            udp_tx_eof <= '1';
                                            udp_tx_data <= udp_tx_data_mem;
                                        else
                                            udp_tx_data <= udp_tx_data_mem;
                                            m <= m + 1;
                                        end if;

                            end case;
                        end if;
                end process;

Так же пробовал немного по другому, сначала я просто выставлял сигнал sof, для того чтобы отправился arp запрос и возвращался в idle (так обнулялся sof, и по идее записывался в arp таблицу адрес получателя), после этого уже выставлял заново sof и проходил по вышеприведенному автомату. Результаты были следующими, первые три раза все работало и данные отправлялись, после того как прошил плис 4-й раз по сигналу sof не начинал формироваться заголовок пакета, т.е. можно предположить что в arp таблицу ничего не записалось((
Проект UDP/IP stack взят с opencores, он там один такой. Кстати было бы неплохо выслушать комментарии по стилю написания всего вышеизложенного, грамотно ли это?
Причина редактирования: используйте теги для оформления кода (с) модератор

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alexey_pashinov   Ethernet на ПЛИС   Sep 4 2014, 07:56
- - billidean   При отправке самого первого пакета Ваш стек отправ...   Sep 4 2014, 09:07
- - Alexey_pashinov   Это я и пояснил во вступлении чтобы было понятно о...   Sep 4 2014, 09:29
- - billidean   Имея картину от сниффера (сохраненный файл), можно...   Sep 4 2014, 09:37
- - Socrates   FPGA Triple speed ethernet MAC + Micrel KSZ9021/KS...   Sep 4 2014, 13:21
- - billidean   Эта картинка, как я понимаю, когда у Вас все хорош...   Sep 4 2014, 14:30
- - Alexey_pashinov   Проблема решилась. Оказывается неправильно подавал...   Sep 8 2014, 08:36
- - HFSE   Всем Привет. Я сейчас занимаюсь тем же самым что ...   Jun 16 2015, 19:46
|- - mobidev   Цитата(HFSE @ Jun 16 2015, 23:46) P.C. На...   Jun 18 2015, 06:30
- - doom13   Если плата отправляет пакет, то wireshark должен е...   Jun 16 2015, 20:03
- - HFSE   Да, спасибо доом13, я это уже пробовал к сожалению...   Jun 17 2015, 19:42
|- - Bad0512   Цитата(HFSE @ Jun 18 2015, 01:42) Кодlibr...   Jun 18 2015, 02:16
|- - HFSE   Цитата(Bad0512 @ Jun 18 2015, 02:16) Жест...   Jun 18 2015, 05:01
|- - vadimuzzz   Цитата(HFSE @ Jun 18 2015, 11:01) Но я пр...   Jun 18 2015, 05:03
|- - HFSE   Цитата(vadimuzzz @ Jun 18 2015, 05:03) на...   Jun 18 2015, 06:22
|- - HFSE   Цитата(HFSE @ Jun 18 2015, 06:22) Я это у...   Jun 18 2015, 06:41
|- - doom13   Цитата(HFSE @ Jun 18 2015, 09:41) Если я ...   Jun 18 2015, 07:34
|- - mobidev   Цитата(HFSE @ Jun 18 2015, 10:41) Если я ...   Jun 18 2015, 08:15
- - HFSE   Всем сапсибо за советы. Но до сих пор я не вижу па...   Jun 19 2015, 06:56
|- - Sergey_Bekrenyov   А зачем Вы TX_CLK_OUT в ноль опускаете? PHY не смо...   Jun 19 2015, 14:30
|- - HFSE   Цитата(Sergey_Bekrenyov @ Jun 19 2015, 15...   Jun 22 2015, 07:19
|- - Sergey_Bekrenyov   Цитата(HFSE @ Jun 22 2015, 10:19) Добрый ...   Jun 22 2015, 09:26
- - doom13   Пробуйте проверять соединение в разных сечениях (l...   Jun 19 2015, 07:12
- - NSergeevich   Всем привет! Мой проект (MAC + Phy) настроен т...   Jun 22 2015, 10:18
|- - mobidev   Цитата(NSergeevich @ Jun 22 2015, 14:18) ...   Jun 22 2015, 11:31
|- - NSergeevich   Цитата(mobidev @ Jun 22 2015, 14:31) QM q...   Jun 22 2015, 11:41
|- - mobidev   Цитата(NSergeevich @ Jun 22 2015, 15:41) ...   Jun 22 2015, 12:03
|- - doom13   Цитата(NSergeevich @ Jun 22 2015, 14:41) ...   Jun 22 2015, 12:27
|- - NSergeevich   Цитата(doom13 @ Jun 22 2015, 15:27) Рукам...   Jun 22 2015, 12:41
- - gosu-art   А promiscuous mode у вас включен? У меня, например...   Jun 22 2015, 10:30
|- - NSergeevich   Цитата(gosu-art @ Jun 22 2015, 13:30...   Jun 22 2015, 10:35
- - gosu-art   RE: Ethernet на ПЛИС   Jun 22 2015, 10:41
- - NSergeevich   C этим модом тоже самое   Jun 22 2015, 10:50
|- - HFSE   Цитата(NSergeevich @ Jun 22 2015, 11:50) ...   Jun 22 2015, 12:53
|- - mobidev   Цитата(HFSE @ Jun 22 2015, 16:53) правиль...   Jun 22 2015, 13:26
|- - NSergeevich   Цитата(HFSE @ Jun 22 2015, 15:53) Sergeev...   Jun 22 2015, 15:02
|- - Corvus   Цитата(NSergeevich @ Jun 22 2015, 18:02) ...   Jun 22 2015, 15:06
- - gosu-art   Код/// size 14 bytes logic [7:0] e...   Jun 22 2015, 12:54
- - krux   для формирования пакетов есть ещё такая интересная...   Jun 22 2015, 13:40
- - NSergeevich   подкиньте ресурс, где можно былобы почитать о всех...   Jun 22 2015, 16:00
|- - doom13   Цитата(NSergeevich @ Jun 22 2015, 19:00) ...   Jun 22 2015, 19:03
|- - gosu-art   Цитата(doom13 @ Jun 22 2015, 22:03) Вообщ...   Jun 22 2015, 19:23
||- - doom13   Цитата(gosu-art @ Jun 22 2015, 22:23...   Jun 22 2015, 20:02
|- - NSergeevich   Цитата(doom13 @ Jun 22 2015, 22:03) Вообщ...   Jun 23 2015, 07:39
|- - doom13   Цитата(NSergeevich @ Jun 23 2015, 10:39) ...   Jun 23 2015, 08:17
|- - NSergeevich   Цитата(doom13 @ Jun 23 2015, 11:17) Вот т...   Jun 23 2015, 08:48
|- - doom13   Цитата(NSergeevich @ Jun 23 2015, 11:48) ...   Jun 23 2015, 09:19
- - gosu-art   Основные параметры Код localparam SIZE_ETHER_HDR ...   Jun 22 2015, 18:39
- - NSergeevich   Может кто-нибудь сталкивался со следующей проблемо...   Jun 30 2015, 10:52
- - NSergeevich   В случае MII на 100mb интерфейса TXD[3... 0]: Tran...   Jul 10 2015, 13:30
- - HFSE   Цитата(NSergeevich @ Jul 10 2015, 14:30) ...   Jul 13 2015, 07:53


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

 


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


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