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

 
 
> 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
Ответов
gosu-art
сообщение Jun 22 2015, 18:39
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



Основные параметры
Код
localparam    SIZE_ETHER_HDR        = 14;
localparam    SIZE_IP_HDR            = 20;
localparam    SIZE_UDP_HDR        = 8;

  
localparam    UDP_PROTO            = 8'h11;
localparam    ETH_TYPE                = 16'h0800;
localparam    IP_VER                = 8'h45;
localparam    IP_TTL                = 8'hFF;

assign    {ip_hdr_ver_hlen}                                          = IP_VER;
assign    {ether_hdr_type_code[1],ether_hdr_type_code[0]}                              = ETH_TYPE;
assign    ip_hdr_proto                                                  = UDP_PROTO;
assign    ip_hdr_ttl                                                    = IP_TTL;


Расчет чек суммы для IP и UDP
Код
module udp_check_summ
(                                            
    input                   iclk,
    input     [15:0]        packet_in,
    output [15:0]        check_summ_out,
    input                    data_valid,
    input                    sop
                                                
);

logic [15:0] accum_rg;
logic [16:0] carry_check;
logic          carry_16;

assign    carry_check    = accum_rg + packet_in;
assign  check_summ_out = 16'hFFFF - accum_rg;

///

  always_ff @ (posedge iclk) begin
//        if (sop && data_valid)
//            accum_rg <= packet_in;
//        else if (sop && !data_valid)
        if (sop)
            accum_rg <= '0;
        else begin
            if(data_valid) begin
                    accum_rg <= accum_rg + packet_in + carry_check[16];
            end
        end
    end

endmodule


Далее просто заполнить поля вашими значениями

Код
        if(avs_s0_write && avs_s0_chipselect) begin
            unique case(avs_s0_address)
                `ADDR_ETHER_DEST_MAC_0        :    ether_hdr_da[0] <= avs_s0_writedata[7:0];    
                `ADDR_ETHER_DEST_MAC_1        :    ether_hdr_da[1] <= avs_s0_writedata[7:0];
                `ADDR_ETHER_DEST_MAC_2        :    ether_hdr_da[2] <= avs_s0_writedata[7:0];
                `ADDR_ETHER_DEST_MAC_3        :    ether_hdr_da[3] <= avs_s0_writedata[7:0];
                `ADDR_ETHER_DEST_MAC_4        :    ether_hdr_da[4] <= avs_s0_writedata[7:0];
                `ADDR_ETHER_DEST_MAC_5        :    ether_hdr_da[5] <= avs_s0_writedata[7:0];
                
                `ADDR_ETHER_SOURCE_MAC_0    :    ether_hdr_sa[0] <= avs_s0_writedata[7:0];        
                `ADDR_ETHER_SOURCE_MAC_1    :     ether_hdr_sa[1] <= avs_s0_writedata[7:0];
                `ADDR_ETHER_SOURCE_MAC_2    :    ether_hdr_sa[2] <= avs_s0_writedata[7:0];
                `ADDR_ETHER_SOURCE_MAC_3    :    ether_hdr_sa[3] <= avs_s0_writedata[7:0];
                `ADDR_ETHER_SOURCE_MAC_4    :    ether_hdr_sa[4] <= avs_s0_writedata[7:0];
                `ADDR_ETHER_SOURCE_MAC_5    :    ether_hdr_sa[5] <= avs_s0_writedata[7:0];
                ///
                `ADDR_IP_TOS                    :    {ip_hdr_tos[1], ip_hdr_tos[0]}                             <= avs_s0_writedata[15:0];                     
                //`ADDR_IP_TLEN                    :    {ip_hdr_tlen[1],ip_hdr_tlen[0]}                            <= avs_s0_writedata[15:0];
                `ADDR_IP_ID                        :    {ip_hdr_id[1],ip_hdr_id[0]}                                      <= avs_s0_writedata[15:0];
                `ADDR_IP_FRAG_OFF_            :    {ip_hdr_frag_off[1],ip_hdr_frag_off[0]}                    <= avs_s0_writedata[15:0];
                `ADDR_IP_SOURCE_ADDRESS        :    {ip_hdr_sa[3],ip_hdr_sa[2],ip_hdr_sa[1],ip_hdr_sa[0]} <= avs_s0_writedata;
                `ADDR_IP_DEST_ADDRESS        :    {ip_hdr_da[3],ip_hdr_da[2],ip_hdr_da[1],ip_hdr_da[0]} <= avs_s0_writedata;
                ///
                `ADDR_UDP_SOURCE_PORT        :    {udp_hdr_sp[1],udp_hdr_sp[0]}                                <= avs_s0_writedata[15:0];
                `ADDR_UDP_DEST_PORT            :    {udp_hdr_dp[1],udp_hdr_dp[0]}                                <= avs_s0_writedata[15:0];         
            endcase
        end

UPD:
Структура для IP чек суммы
Код
always_comb begin
    case (cnt_check_words)
        0: next_check_ipv4_word = {ip_hdr_ver_hlen, ip_hdr_tos};
        1: next_check_ipv4_word = {ip_hdr_tlen[1],ip_hdr_tlen[0]};
        2: next_check_ipv4_word = {ip_hdr_id[1],ip_hdr_id[0]};
        3: next_check_ipv4_word = {ip_hdr_frag_off[1],ip_hdr_frag_off[0]};
        4: next_check_ipv4_word = {ip_hdr_ttl,ip_hdr_proto};
        5: next_check_ipv4_word = {ip_hdr_sa[3],ip_hdr_sa[2]};
        6: next_check_ipv4_word = {ip_hdr_sa[1],ip_hdr_sa[0]};
        7: next_check_ipv4_word = {ip_hdr_da[3],ip_hdr_da[2]};
        8: next_check_ipv4_word = {ip_hdr_da[1],ip_hdr_da[0]};
        default: next_check_ipv4_word = '0;
    endcase
end


Структура для UDP чек суммы (если не хотите возиться с ней то можно занулить)
Код
case (cnt_check_words)
         //udp pseudo header
        0: next_check_udp_word = {ip_hdr_sa[3],ip_hdr_sa[2]};
        1: next_check_udp_word = {ip_hdr_sa[1],ip_hdr_sa[0]};
        2: next_check_udp_word = {ip_hdr_da[3],ip_hdr_da[2]};
        3: next_check_udp_word = {ip_hdr_da[1],ip_hdr_da[0]};
        4: next_check_udp_word = {16'h00,ip_hdr_proto};
        5: next_check_udp_word = {udp_hdr_len[1],udp_hdr_len[0]};
        //udp header
        6: next_check_udp_word = {udp_hdr_sp[1],udp_hdr_sp[0]};
        7: next_check_udp_word = {udp_hdr_dp[1],udp_hdr_dp[0]};
        8: next_check_udp_word = {udp_hdr_len[1],udp_hdr_len[0]};
        
        default: next_check_udp_word = данные;
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
- - Alexey_pashinov   Привожу скрин wireshark, в обоих случаях arp запро...   Sep 4 2014, 13:50
- - 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
- - 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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