Перейти к содержанию
    

Контроллер Ethernet

Народ, подскажите простой проектик. Есть плата SP605, пытаюсь наладить обмен с хостом через LAN.

Облазил кучу сайтов, везде все фрагментарно рассказывают. Запутался уже в структурах пакетов...

Вроде что-то принял, но вот как разобрать где и что не получается.

Прикладываю файлы - можно просмотреть, что принял. Данные сняты с шины приема от хоста и сигнал валидности данных.

IP источника был 192.168.1.50, назначения 192.168.1.200.

post-54588-1322914539_thumb.png

post-54588-1322914550_thumb.png

post-54588-1322914555_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Народ, подскажите простой проектик. Есть плата SP605, пытаюсь наладить обмен с хостом через LAN.

Облазил кучу сайтов, везде все фрагментарно рассказывают. Запутался уже в структурах пакетов...

Вроде что-то принял, но вот как разобрать где и что не получается.

Прикладываю файлы - можно просмотреть, что принял. Данные сняты с шины приема от хоста и сигнал валидности данных.

IP источника был 192.168.1.50, назначения 192.168.1.200.

Когда я дела что-то подобное на ПЛИС - мне хватило Википедии для определения формата Ethernet frame, IP пакета и UDP пакета.

Также сильно помог Wireshark для просмотра реальных пакетов и определения правильности передачи.

 

И имхо начинать проверку надо не с сетевого уровня (IP адресов), а с MAC уровня.

 

Chipscope - конечно дело хорошее, но попробуйте лучше реализовать эхо (что приняли отправляйте без изменений сразу назад) , а на компе вам Wireshark сразу скажет что к чему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так понимаю получаю пакет целиком и его нужно обработать начиная с преамбулы...

Как я понял корки реализуют парсинг пакетов начиная с уровня IP... А преамбулу должен убирать MAC???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Облазил кучу сайтов, везде все фрагментарно рассказывают. Запутался уже в структурах пакетов...

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

Удачи!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так понимаю получаю пакет целиком и его нужно обработать начиная с преамбулы...

Как я понял корки реализуют парсинг пакетов начиная с уровня IP... А преамбулу должен убирать MAC???

По-моему все корки в ISE выдают пакет начиная с преамбулы, а дальше уже дело за Вами. Хотите выделяйте MAC-адреса, хотите IP или что-то еще. Последние четыре байта - CRC(что как раз и видно на вашем рисунке).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По-моему все корки в ISE выдают пакет начиная с преамбулы, а дальше уже дело за Вами. Хотите выделяйте MAC-адреса, хотите IP или что-то еще. Последние четыре байта - CRC(что как раз и видно на вашем рисунке).

 

Да нет же!

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да нет же!

Смотрите мою статью... По приходу преамбулы, а она частично теряется при "накачке" линии

Согласен, преамбула действительно частично теряется при приеме MAC-интерфейсом, но AlphaMil задал вопрос, насколько я понял, про IP-core. В качестве примера Ethernet 1000BASE-X PCS/PMA or SGMII, которая ВСЕГДА выдает именно 7 + 1 байт преамбулы. Ну, а вообще надо указывать в вопросе, что за ядро вы используете в своем проекте, потому что "корки" разные бывают...;)

post-42694-1323070946_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

AndreiUS, Вы не могли бы выложить часть проекта хоть какого, где используется ядро Ethernet 1000BASE-X PCS/PMA or SGMII, я пытался с ним разобраться, но так и не понял, что там за интерфейсы и куда их подключать. Да и как управлять им???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

AndreiUS, Вы не могли бы выложить часть проекта хоть какого, где используется ядро Ethernet 1000BASE-X PCS/PMA or SGMII, я пытался с ним разобраться, но так и не понял, что там за интерфейсы и куда их подключать. Да и как управлять им???

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

 

Проще всего взять условно-бесплатный MAC от ментора из закромов Родины и от него плясать - там хоть документация какая-никакая имеется в отличие от аппаратных TEMAC от Xilinx.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемые, вроде все сделал - ARP пакеты принимаются и разбираются.

Но вот отправка не работает - смотрю с помощью WiresShark. Контрольные суммы уже руками считал... Всю структуру отправляемого пакета проверил много раз. Через GMII все передается нормально.

Может надо Marvell настроить как-то. У меня горит 1Gbit. Если задать со стороны хоста жестко 100Mbit, данные принимаются не правильно - смотрю ChipScop-ом...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемые, вроде все сделал - ARP пакеты принимаются и разбираются.

Но вот отправка не работает - смотрю с помощью WiresShark. Контрольные суммы уже руками считал... Всю структуру отправляемого пакета проверил много раз. Через GMII все передается нормально.

Может надо Marvell настроить как-то. У меня горит 1Gbit. Если задать со стороны хоста жестко 100Mbit, данные принимаются не правильно - смотрю ChipScop-ом...

Ничего настраивать не надо - там autonegotiation по-умолчанию включено. А на при переключении с 1Гбит на 100Мбит надо частоту менять тактовую MII со 125МГц до 25МГц и шина данных в MII 4-битной становится.

Включите тестовые режимы в Марвеле - там есть несколько loop-mode с разных сторон. И есть генератор тестовых пакетов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Народ, пробую использовать MAC

http://www.opencores.org/projects.cgi/web/ethernet_tri_mode, думаю здешний народ сталкивался...

При симуляции все нормально и синтезируется все. Но после маппинга остается только несколько регистров - т.е. логика вся обрезается. Не пойму никак почему... Выкладываю модуль, все частоты заведены, ресет заведен, внешние сигналы тоже подключены.

`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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...