|
|
  |
Контроллер Ethernet, Поиск информации и ядер |
|
|
|
Dec 3 2011, 12:16
|
Частый гость
 
Группа: Участник
Сообщений: 135
Регистрация: 1-01-10
Из: Минск, Беларусь
Пользователь №: 54 588

|
Народ, подскажите простой проектик. Есть плата SP605, пытаюсь наладить обмен с хостом через LAN. Облазил кучу сайтов, везде все фрагментарно рассказывают. Запутался уже в структурах пакетов... Вроде что-то принял, но вот как разобрать где и что не получается. Прикладываю файлы - можно просмотреть, что принял. Данные сняты с шины приема от хоста и сигнал валидности данных. IP источника был 192.168.1.50, назначения 192.168.1.200.
Эскизы прикрепленных изображений
|
|
|
|
|
Dec 4 2011, 09:21
|
Знающий
   
Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219

|
Цитата(AlphaMil @ Dec 3 2011, 16:16)  Народ, подскажите простой проектик. Есть плата SP605, пытаюсь наладить обмен с хостом через LAN. Облазил кучу сайтов, везде все фрагментарно рассказывают. Запутался уже в структурах пакетов... Вроде что-то принял, но вот как разобрать где и что не получается. Прикладываю файлы - можно просмотреть, что принял. Данные сняты с шины приема от хоста и сигнал валидности данных. IP источника был 192.168.1.50, назначения 192.168.1.200. Когда я дела что-то подобное на ПЛИС - мне хватило Википедии для определения формата Ethernet frame, IP пакета и UDP пакета. Также сильно помог Wireshark для просмотра реальных пакетов и определения правильности передачи. И имхо начинать проверку надо не с сетевого уровня (IP адресов), а с MAC уровня. Chipscope - конечно дело хорошее, но попробуйте лучше реализовать эхо (что приняли отправляйте без изменений сразу назад) , а на компе вам Wireshark сразу скажет что к чему.
|
|
|
|
|
Dec 5 2011, 05:41
|
Местный
  
Группа: Свой
Сообщений: 293
Регистрация: 23-12-08
Из: Тверь
Пользователь №: 42 694

|
Цитата(AlphaMil @ Dec 4 2011, 17:01)  Я так понимаю получаю пакет целиком и его нужно обработать начиная с преамбулы... Как я понял корки реализуют парсинг пакетов начиная с уровня IP... А преамбулу должен убирать MAC??? По-моему все корки в ISE выдают пакет начиная с преамбулы, а дальше уже дело за Вами. Хотите выделяйте MAC-адреса, хотите IP или что-то еще. Последние четыре байта - CRC(что как раз и видно на вашем рисунке).
|
|
|
|
|
Dec 5 2011, 06:07
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(AndreiUS @ Dec 5 2011, 09:41)  По-моему все корки в ISE выдают пакет начиная с преамбулы, а дальше уже дело за Вами. Хотите выделяйте MAC-адреса, хотите IP или что-то еще. Последние четыре байта - CRC(что как раз и видно на вашем рисунке). Да нет же! Смотрите мою статью... По приходу преамбулы, а она частично теряется при "накачке" линии, МАС начинает искать код начала адресной части в пакете. Это выявляется как "нарушение" шахматного кода, после чего и следует адрес назначения. Далее МАС анализирует, что он начал принимать адрес-данные-CRC. И принимает их все, вплоть до CRC... Так что "корке" нет никакого смысла выдавать куда-то преамбулу. И даже более того, она определяет МАС-адрес и если у пакета будет не широковещательный адрес или не адрес приемника, то "корка" вообще этот пакет сбросит и не будет его никуда выдавать...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Dec 5 2011, 07:42
|
Местный
  
Группа: Свой
Сообщений: 293
Регистрация: 23-12-08
Из: Тверь
Пользователь №: 42 694

|
Цитата(iosifk @ Dec 5 2011, 09:07)  Да нет же! Смотрите мою статью... По приходу преамбулы, а она частично теряется при "накачке" линии Согласен, преамбула действительно частично теряется при приеме MAC-интерфейсом, но AlphaMil задал вопрос, насколько я понял, про IP-core. В качестве примера Ethernet 1000BASE-X PCS/PMA or SGMII, которая ВСЕГДА выдает именно 7 + 1 байт преамбулы. Ну, а вообще надо указывать в вопросе, что за ядро вы используете в своем проекте, потому что "корки" разные бывают...
Эскизы прикрепленных изображений
|
|
|
|
|
Dec 6 2011, 07:16
|
Знающий
   
Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219

|
Цитата(AlphaMil @ Dec 6 2011, 10:56)  AndreiUS, Вы не могли бы выложить часть проекта хоть какого, где используется ядро Ethernet 1000BASE-X PCS/PMA or SGMII, я пытался с ним разобраться, но так и не понял, что там за интерфейсы и куда их подключать. Да и как управлять им??? Вы сначала с обычным GMII разберитесь или RGMII накрайняк и с форматами пакетов, а то сразу за SGMII с оптикой хвататься  . Проще всего взять условно-бесплатный MAC от ментора из закромов Родины и от него плясать - там хоть документация какая-никакая имеется в отличие от аппаратных TEMAC от Xilinx.
|
|
|
|
|
Dec 8 2011, 19:32
|
Знающий
   
Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219

|
Цитата(AlphaMil @ Dec 8 2011, 19:39)  Уважаемые, вроде все сделал - ARP пакеты принимаются и разбираются. Но вот отправка не работает - смотрю с помощью WiresShark. Контрольные суммы уже руками считал... Всю структуру отправляемого пакета проверил много раз. Через GMII все передается нормально. Может надо Marvell настроить как-то. У меня горит 1Gbit. Если задать со стороны хоста жестко 100Mbit, данные принимаются не правильно - смотрю ChipScop-ом... Ничего настраивать не надо - там autonegotiation по-умолчанию включено. А на при переключении с 1Гбит на 100Мбит надо частоту менять тактовую MII со 125МГц до 25МГц и шина данных в MII 4-битной становится. Включите тестовые режимы в Марвеле - там есть несколько loop-mode с разных сторон. И есть генератор тестовых пакетов.
|
|
|
|
|
Dec 10 2011, 20:06
|
Частый гость
 
Группа: Участник
Сообщений: 135
Регистрация: 1-01-10
Из: Минск, Беларусь
Пользователь №: 54 588

|
Народ, пробую использовать MAC http://www.opencores.org/projects.cgi/web/ethernet_tri_mode, думаю здешний народ сталкивался... При симуляции все нормально и синтезируется все. Но после маппинга остается только несколько регистров - т.е. логика вся обрезается. Не пойму никак почему... Выкладываю модуль, все частоты заведены, ресет заведен, внешние сигналы тоже подключены. CODE `timescale 1ns / 1ps `include "d:/PROJECTS/UOSON-2/VideoDevKit/Tests/LAN/LANController/EMAC/header.v" ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 12:56:02 12/02/2011 // Design Name: // Module Name: LANController // Project Name: // Target Devices: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module LANController(Clck125M, Clck100M, Rst, GTxClck, RxClck, RxDV, RxD, RxEr, TxClck, TxEn, TxEr, TxD, LANRst, Crs, Col, MDIO, MDClck, TestOut);
input Clck125M; input Clck100M; input Rst; output GTxClck; input RxClck; input RxDV; input [7:0] RxD; input RxEr; input TxClck; output TxEn; output TxEr; output [7:0] TxD; output LANRst; input Crs; input Col; inout MDIO; output MDClck; output [7:0] TestOut;
//Ввод-вывод интерфейса управления wire MDI; wire MDO; wire MDIOEn;
//assign MDIO = MDIOEn ? MDO : MDI; IOBUF #( .DRIVE(12), // Specify the output drive strength .IOSTANDARD("DEFAULT"), // Specify the I/O standard .SLEW("SLOW") // Specify the output slew rate ) MDIOBUF ( .O(MDI), // Buffer output .IO(MDIO), // Buffer inout port (connect directly to top-level port) .I(MDO), // Buffer input .T(MDIOEn) // 3-state enable input, high=input, low=output );
reg [7:0] TestOut; assign LANRst = Rst;
//Управление ядром wire [2:0] Speed; reg Rd; wire RA; wire [31:0] Data; reg [15:0] Cntr; wire MACWA; reg MACWr;
initial begin Cntr = 0; end
always @(posedge Clck100M) begin if (RA) TestOut <= Data[7:0]; Rd <= RA; end
always @(posedge Clck100M) begin if (MACWA) Cntr <= Cntr + 1; if ((Cntr > 100)&&(Cntr < 2000)) MACWr <= 1; else MACWr <= 0; end
MAC_top MAC ( .Reset(!Rst), .Clk_125M(Clck125M), .Clk_user(Clck100M), .Clk_reg(Clck100M), .Speed(Speed), .Rx_mac_ra(RA), .Rx_mac_rd(Rd), .Rx_mac_data(Data), .Rx_mac_BE(), .Rx_mac_pa(), .Rx_mac_sop(), .Rx_mac_eop(), .Tx_mac_wa(MACWA), .Tx_mac_wr(MACWr), .Tx_mac_data({16'h0000, Cntr}), .Tx_mac_BE(2'b00), .Tx_mac_sop(1'b0), .Tx_mac_eop(1'b0), .Pkg_lgth_fifo_rd(Pkg_lgth_fifo_rd), .Pkg_lgth_fifo_ra(Pkg_lgth_fifo_ra), .Pkg_lgth_fifo_data(Pkg_lgth_fifo_data), .Gtx_clk(GTxClck), .Rx_clk(RxClck), .Tx_clk(TxClck), .Tx_er(TxEr), .Tx_en(TxEn), .Txd(TxD), .Rx_er(RxEr), .Rx_dv(RxDV), .Rxd(RxD), .Crs(Crs), .Col(Col), .CSB(1'b0), .WRB(1'b0), .CD_in(16'h0000), .CD_out(), .CA(8'h00), .Mdo(MDO), .MdoEn(MDOEn), .Mdi(MDI), .Mdc(MDClck) );
endmodule
Причина редактирования: используйте codebox для больших сегментов кода (с) модератор
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|