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

 
 
 
Reply to this topicStart new topic
> Контроллер Ethernet, Поиск информации и ядер
AlphaMil
сообщение Dec 3 2011, 12:16
Сообщение #1


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

Группа: Участник
Сообщений: 135
Регистрация: 1-01-10
Из: Минск, Беларусь
Пользователь №: 54 588



Народ, подскажите простой проектик. Есть плата SP605, пытаюсь наладить обмен с хостом через LAN.
Облазил кучу сайтов, везде все фрагментарно рассказывают. Запутался уже в структурах пакетов...
Вроде что-то принял, но вот как разобрать где и что не получается.
Прикладываю файлы - можно просмотреть, что принял. Данные сняты с шины приема от хоста и сигнал валидности данных.
IP источника был 192.168.1.50, назначения 192.168.1.200.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
VladimirB
сообщение Dec 4 2011, 09:21
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 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 сразу скажет что к чему.
Go to the top of the page
 
+Quote Post
AlphaMil
сообщение Dec 4 2011, 14:01
Сообщение #3


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

Группа: Участник
Сообщений: 135
Регистрация: 1-01-10
Из: Минск, Беларусь
Пользователь №: 54 588



Я так понимаю получаю пакет целиком и его нужно обработать начиная с преамбулы...
Как я понял корки реализуют парсинг пакетов начиная с уровня IP... А преамбулу должен убирать MAC???
Go to the top of the page
 
+Quote Post
Koluchiy
сообщение Dec 5 2011, 04:33
Сообщение #4


Знающий
****

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



Там же толпа примеров к SP605 прилагается, насколько я помню?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Dec 5 2011, 04:45
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(AlphaMil @ Dec 3 2011, 16:16) *
Облазил кучу сайтов, везде все фрагментарно рассказывают. Запутался уже в структурах пакетов...

У меня на сайте есть старая статья о том, как я делал МАС. Там и структура пакета нарисована...
Удачи!


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
AndreiUS
сообщение Dec 5 2011, 05:41
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 23-12-08
Из: Тверь
Пользователь №: 42 694



Цитата(AlphaMil @ Dec 4 2011, 17:01) *
Я так понимаю получаю пакет целиком и его нужно обработать начиная с преамбулы...
Как я понял корки реализуют парсинг пакетов начиная с уровня IP... А преамбулу должен убирать MAC???

По-моему все корки в ISE выдают пакет начиная с преамбулы, а дальше уже дело за Вами. Хотите выделяйте MAC-адреса, хотите IP или что-то еще. Последние четыре байта - CRC(что как раз и видно на вашем рисунке).
Go to the top of the page
 
+Quote Post
iosifk
сообщение Dec 5 2011, 06:07
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(AndreiUS @ Dec 5 2011, 09:41) *
По-моему все корки в ISE выдают пакет начиная с преамбулы, а дальше уже дело за Вами. Хотите выделяйте MAC-адреса, хотите IP или что-то еще. Последние четыре байта - CRC(что как раз и видно на вашем рисунке).


Да нет же!
Смотрите мою статью... По приходу преамбулы, а она частично теряется при "накачке" линии, МАС начинает искать код начала адресной части в пакете. Это выявляется как "нарушение" шахматного кода, после чего и следует адрес назначения. Далее МАС анализирует, что он начал принимать адрес-данные-CRC. И принимает их все, вплоть до CRC... Так что "корке" нет никакого смысла выдавать куда-то преамбулу. И даже более того, она определяет МАС-адрес и если у пакета будет не широковещательный адрес или не адрес приемника, то "корка" вообще этот пакет сбросит и не будет его никуда выдавать...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
AlphaMil
сообщение Dec 5 2011, 07:08
Сообщение #8


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

Группа: Участник
Сообщений: 135
Регистрация: 1-01-10
Из: Минск, Беларусь
Пользователь №: 54 588



2 iosifk.
Спасибо, буду сейчас изучать.
Go to the top of the page
 
+Quote Post
AndreiUS
сообщение Dec 5 2011, 07:42
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 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 байт преамбулы. Ну, а вообще надо указывать в вопросе, что за ядро вы используете в своем проекте, потому что "корки" разные бывают...wink.gif
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
AlphaMil
сообщение Dec 6 2011, 06:56
Сообщение #10


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

Группа: Участник
Сообщений: 135
Регистрация: 1-01-10
Из: Минск, Беларусь
Пользователь №: 54 588



AndreiUS, Вы не могли бы выложить часть проекта хоть какого, где используется ядро Ethernet 1000BASE-X PCS/PMA or SGMII, я пытался с ним разобраться, но так и не понял, что там за интерфейсы и куда их подключать. Да и как управлять им???
Go to the top of the page
 
+Quote Post
VladimirB
сообщение Dec 6 2011, 07:16
Сообщение #11


Знающий
****

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



Цитата(AlphaMil @ Dec 6 2011, 10:56) *
AndreiUS, Вы не могли бы выложить часть проекта хоть какого, где используется ядро Ethernet 1000BASE-X PCS/PMA or SGMII, я пытался с ним разобраться, но так и не понял, что там за интерфейсы и куда их подключать. Да и как управлять им???

Вы сначала с обычным GMII разберитесь или RGMII накрайняк и с форматами пакетов, а то сразу за SGMII с оптикой хвататься sm.gif.

Проще всего взять условно-бесплатный MAC от ментора из закромов Родины и от него плясать - там хоть документация какая-никакая имеется в отличие от аппаратных TEMAC от Xilinx.
Go to the top of the page
 
+Quote Post
AndreiUS
сообщение Dec 6 2011, 12:05
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 23-12-08
Из: Тверь
Пользователь №: 42 694



Цитата(AlphaMil @ Dec 6 2011, 09:56) *
AndreiUS, Вы не могли бы выложить часть проекта хоть какого, где используется ядро Ethernet 1000BASE-X PCS/PMA or SGMII


Я не советую Вам связываться на данном этапе с SGMII, запутаетесь еще больше. Как советовал VladimirB начните с GMII или RGMII. У Вас на SP605 стоит Marvell, вот и попробуйте поработать с ним по GMII. У Xilinx'а есть хорошие описания GMII, например здесь начиная со стр. 197 http://www.xilinx.com/support/documentatio...s_pma_ug155.pdf. Или здесь для RGMII http://www.hp.com/rnd/pdfs/RGMIIv2_0_final_hp.pdf. Ну и про структуру фрейма http://en.wikipedia.org/wiki/Ethernet_frame.
Go to the top of the page
 
+Quote Post
AlphaMil
сообщение Dec 8 2011, 15:39
Сообщение #13


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

Группа: Участник
Сообщений: 135
Регистрация: 1-01-10
Из: Минск, Беларусь
Пользователь №: 54 588



Уважаемые, вроде все сделал - ARP пакеты принимаются и разбираются.
Но вот отправка не работает - смотрю с помощью WiresShark. Контрольные суммы уже руками считал... Всю структуру отправляемого пакета проверил много раз. Через GMII все передается нормально.
Может надо Marvell настроить как-то. У меня горит 1Gbit. Если задать со стороны хоста жестко 100Mbit, данные принимаются не правильно - смотрю ChipScop-ом...
Go to the top of the page
 
+Quote Post
VladimirB
сообщение Dec 8 2011, 19:32
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 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 с разных сторон. И есть генератор тестовых пакетов.
Go to the top of the page
 
+Quote Post
AlphaMil
сообщение Dec 10 2011, 20:06
Сообщение #15


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

Группа: Участник
Сообщений: 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 для больших сегментов кода (с) модератор
Go to the top of the page
 
+Quote Post

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

 


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


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