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

 
 
> RTL8201BL+MAXII, Передача UDP пакета
A.P.
сообщение Jun 30 2011, 18:02
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 9-05-11
Пользователь №: 64 879



При передачи пакета получаю следующее:

Код
21:43:20.387485 IP [b]9.10.12.14 > 7.8.11.13: at-#15 2[/b] --Обратите внимание на IP адреса и порт
    0x0000:  ffff ffff ffff 0022 3344 5566 0800 4500
    0x0010:  002e b3fe 0000 8011 c4e6 c0a8 0132 ffff
    0x0020:  ffff 0c81 0103 001a e80a 0001 0203 0405
    0x0030:  0607 0809 0a0b 0c0d 0e0f 1011

Это полный Ehernet пакет без контрольной суммы и преамбулы.

написал на Verilog'е простейший код. Ошибка в IP адресах, хотя весь пакет до бита принимается правильно!
Это глюки или руки? :-)
Код
module probe(    
    input wire txc,
    input wire reset,
    output wire txen,
    output wire [3:0]txd,    
    output wire mdc,
    inout wire mdio,
    output wire[7:0] leds,
    output fxen
);
    reg [15:0] n = 16'hFFFF;    
    reg [3:0] ep[0:15];
    
    always@(negedge reset)
        if (!reset) begin    
                        //Этот геморой из-за нехватки памяти
            ep[1] = 4'h0; ep[0] = 4'hE; ep[3] = 4'h0; ep[2] = 4'hF;
            ep[5] = 4'h1; ep[4] = 4'h0; ep[7] = 4'h1; ep[6] = 4'h1;
            
            ep[9] = 4'h1; ep[8] = 4'hB;  ep[11] = 4'h4; ep[10] = 4'hE;
            ep[13] = 4'hB; ep[12] = 4'h0; ep[15] = 4'h7; ep[14] = 4'hE;
        end    

    wire end_packet = (n[7:1] > 8'h3F); //Выбор источника данных    
    wire [3:0] tx_o = end_packet ? ep[n[3:0]] : (n[0] ?  udp_data[7:4] : udp_data[3:0]); //Данные передаются младшими битами вперед
    wire [7:0] udp_data;

    assign txen = (n[15:0] < 144);  //143 - длина данных
    assign txd = txen ? tx_o : 4'h0; //Если !txen, txd в состоянии IDLE

    eth_packet eth_packet1(.q(udp_data), .a(n[6:1])); //Чтение данных из памяти
    
    always@(negedge txc or negedge reset)
        if (!reset)
            n <= 16'hFFFF;
        else
            n <= n + 1'b1;
            
    assign leds = {txd, tx_o};
    assign mdc = 1'b0;
    assign mdio = 1'bZ;
    assign fxen = 1'b0;    
            
endmodule
module eth_packet(
    output reg     [7:0] q,
    input  wire    [5:0] a    
);        
    always@*
    begin
        case (a)
            8'h00: q = 8'h55; //Preamble & startbit
            8'h01: q = 8'h55;
            8'h02: q = 8'h55;
            8'h03: q = 8'h55;
            8'h04: q = 8'h55;
            8'h05: q = 8'h55;
            8'h06: q = 8'h55;
            8'h07: q = 8'hD5;            
            8'h08: q = 8'hFF; //Dest MAC addreess
            8'h09: q = 8'hFF;
            8'h0A: q = 8'hFF;
            8'h0B: q = 8'hFF;
            8'h0C: q = 8'hFF;
            8'h0D: q = 8'hFF;            
            8'h0E: q = 8'h00; // Source MAC address
            8'h0F: q = 8'h22;
            8'h10: q = 8'h33;
            8'h11: q = 8'h44;
            8'h12: q = 8'h55;
            8'h13: q = 8'h66;            
            8'h14: q = 8'h08; // Type 0x0800 - IP
            8'h15: q = 8'h00;            
            //IP Header
            8'h16: q = 8'h45;  //Version & IHL
            8'h17: q = 8'h00;
            8'h18: q = 8'h00;
            8'h19: q = 8'h2E;
            8'h1A: q = 8'hB3;
            8'h1B: q = 8'hFE;
            8'h1C: q = 8'h00;
            8'h1D: q = 8'h00;
            8'h1E: q = 8'h80;            
            8'h1F: q = 8'h11; //Protocol UDP            
            8'h20: q = 8'h03; //IP Checksum
            8'h21: q = 8'h3B;            
            8'h22: q = 8'hC0; //Source IP address 192.168.1.50
            8'h23: q = 8'hA8;
            8'h24: q = 8'h01;
            8'h25: q = 8'h32;            
            8'h26: q = 8'hC0; //Dest IP address 192.168.1.3
            8'h27: q = 8'hA8;
            8'h28: q = 8'h01;
            8'h29: q = 8'h03;             
            8'h2A: q = 8'h0C;//Source UDP port 3201(0x0C81)
            8'h2B: q = 8'h81;            
            8'h2C: q = 8'h01;//Dest UDP port
            8'h2D: q = 8'h03;            
            8'h2E: q = 8'h00;//UDP length 0x001A(26 bytes)
            8'h2F: q = 8'h1A;            
            8'h30: q = 8'h26;//UDP Checksum(0x0000 - Not check)
            8'h31: q = 8'h5F;            
            8'h32: q = 8'h00;//Payload
            8'h33: q = 8'h01;
            8'h34: q = 8'h02;
            8'h35: q = 8'h03;
            8'h36: q = 8'h04;
            8'h37: q = 8'h05;
            8'h38: q = 8'h06;
            8'h39: q = 8'h07;
            8'h3A: q = 8'h08;
            8'h3B: q = 8'h09;
            8'h3C: q = 8'h0A;
            8'h3D: q = 8'h0B;
            8'h3E: q = 8'h0C;
            8'h3F: q = 8'h0D; // На этом месте кончается память моей ПЛИСины  :-)
        endcase
    end
endmodule
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- A.P.   RTL8201BL+MAXII   Jun 30 2011, 18:02
- - litv   http://www.fpga4fun.com/10BASE-T0.html   Jul 1 2011, 04:34


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 21:44
Рейтинг@Mail.ru


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