AlphaMil 0 3 декабря, 2011 Опубликовано 3 декабря, 2011 · Жалоба Народ, подскажите простой проектик. Есть плата SP605, пытаюсь наладить обмен с хостом через LAN. Облазил кучу сайтов, везде все фрагментарно рассказывают. Запутался уже в структурах пакетов... Вроде что-то принял, но вот как разобрать где и что не получается. Прикладываю файлы - можно просмотреть, что принял. Данные сняты с шины приема от хоста и сигнал валидности данных. IP источника был 192.168.1.50, назначения 192.168.1.200. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirB 1 4 декабря, 2011 Опубликовано 4 декабря, 2011 · Жалоба Народ, подскажите простой проектик. Есть плата SP605, пытаюсь наладить обмен с хостом через LAN. Облазил кучу сайтов, везде все фрагментарно рассказывают. Запутался уже в структурах пакетов... Вроде что-то принял, но вот как разобрать где и что не получается. Прикладываю файлы - можно просмотреть, что принял. Данные сняты с шины приема от хоста и сигнал валидности данных. IP источника был 192.168.1.50, назначения 192.168.1.200. Когда я дела что-то подобное на ПЛИС - мне хватило Википедии для определения формата Ethernet frame, IP пакета и UDP пакета. Также сильно помог Wireshark для просмотра реальных пакетов и определения правильности передачи. И имхо начинать проверку надо не с сетевого уровня (IP адресов), а с MAC уровня. Chipscope - конечно дело хорошее, но попробуйте лучше реализовать эхо (что приняли отправляйте без изменений сразу назад) , а на компе вам Wireshark сразу скажет что к чему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlphaMil 0 4 декабря, 2011 Опубликовано 4 декабря, 2011 · Жалоба Я так понимаю получаю пакет целиком и его нужно обработать начиная с преамбулы... Как я понял корки реализуют парсинг пакетов начиная с уровня IP... А преамбулу должен убирать MAC??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 5 декабря, 2011 Опубликовано 5 декабря, 2011 · Жалоба Там же толпа примеров к SP605 прилагается, насколько я помню? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 5 декабря, 2011 Опубликовано 5 декабря, 2011 · Жалоба Облазил кучу сайтов, везде все фрагментарно рассказывают. Запутался уже в структурах пакетов... У меня на сайте есть старая статья о том, как я делал МАС. Там и структура пакета нарисована... Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
10ff 0 5 декабря, 2011 Опубликовано 5 декабря, 2011 · Жалоба Я так понимаю получаю пакет целиком и его нужно обработать начиная с преамбулы... Как я понял корки реализуют парсинг пакетов начиная с уровня IP... А преамбулу должен убирать MAC??? По-моему все корки в ISE выдают пакет начиная с преамбулы, а дальше уже дело за Вами. Хотите выделяйте MAC-адреса, хотите IP или что-то еще. Последние четыре байта - CRC(что как раз и видно на вашем рисунке). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 5 декабря, 2011 Опубликовано 5 декабря, 2011 · Жалоба По-моему все корки в ISE выдают пакет начиная с преамбулы, а дальше уже дело за Вами. Хотите выделяйте MAC-адреса, хотите IP или что-то еще. Последние четыре байта - CRC(что как раз и видно на вашем рисунке). Да нет же! Смотрите мою статью... По приходу преамбулы, а она частично теряется при "накачке" линии, МАС начинает искать код начала адресной части в пакете. Это выявляется как "нарушение" шахматного кода, после чего и следует адрес назначения. Далее МАС анализирует, что он начал принимать адрес-данные-CRC. И принимает их все, вплоть до CRC... Так что "корке" нет никакого смысла выдавать куда-то преамбулу. И даже более того, она определяет МАС-адрес и если у пакета будет не широковещательный адрес или не адрес приемника, то "корка" вообще этот пакет сбросит и не будет его никуда выдавать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlphaMil 0 5 декабря, 2011 Опубликовано 5 декабря, 2011 · Жалоба 2 iosifk. Спасибо, буду сейчас изучать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
10ff 0 5 декабря, 2011 Опубликовано 5 декабря, 2011 · Жалоба Да нет же! Смотрите мою статью... По приходу преамбулы, а она частично теряется при "накачке" линии Согласен, преамбула действительно частично теряется при приеме MAC-интерфейсом, но AlphaMil задал вопрос, насколько я понял, про IP-core. В качестве примера Ethernet 1000BASE-X PCS/PMA or SGMII, которая ВСЕГДА выдает именно 7 + 1 байт преамбулы. Ну, а вообще надо указывать в вопросе, что за ядро вы используете в своем проекте, потому что "корки" разные бывают...;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlphaMil 0 6 декабря, 2011 Опубликовано 6 декабря, 2011 · Жалоба AndreiUS, Вы не могли бы выложить часть проекта хоть какого, где используется ядро Ethernet 1000BASE-X PCS/PMA or SGMII, я пытался с ним разобраться, но так и не понял, что там за интерфейсы и куда их подключать. Да и как управлять им??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirB 1 6 декабря, 2011 Опубликовано 6 декабря, 2011 · Жалоба AndreiUS, Вы не могли бы выложить часть проекта хоть какого, где используется ядро Ethernet 1000BASE-X PCS/PMA or SGMII, я пытался с ним разобраться, но так и не понял, что там за интерфейсы и куда их подключать. Да и как управлять им??? Вы сначала с обычным GMII разберитесь или RGMII накрайняк и с форматами пакетов, а то сразу за SGMII с оптикой хвататься :). Проще всего взять условно-бесплатный MAC от ментора из закромов Родины и от него плясать - там хоть документация какая-никакая имеется в отличие от аппаратных TEMAC от Xilinx. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
10ff 0 6 декабря, 2011 Опубликовано 6 декабря, 2011 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlphaMil 0 8 декабря, 2011 Опубликовано 8 декабря, 2011 · Жалоба Уважаемые, вроде все сделал - ARP пакеты принимаются и разбираются. Но вот отправка не работает - смотрю с помощью WiresShark. Контрольные суммы уже руками считал... Всю структуру отправляемого пакета проверил много раз. Через GMII все передается нормально. Может надо Marvell настроить как-то. У меня горит 1Gbit. Если задать со стороны хоста жестко 100Mbit, данные принимаются не правильно - смотрю ChipScop-ом... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirB 1 8 декабря, 2011 Опубликовано 8 декабря, 2011 · Жалоба Уважаемые, вроде все сделал - ARP пакеты принимаются и разбираются. Но вот отправка не работает - смотрю с помощью WiresShark. Контрольные суммы уже руками считал... Всю структуру отправляемого пакета проверил много раз. Через GMII все передается нормально. Может надо Marvell настроить как-то. У меня горит 1Gbit. Если задать со стороны хоста жестко 100Mbit, данные принимаются не правильно - смотрю ChipScop-ом... Ничего настраивать не надо - там autonegotiation по-умолчанию включено. А на при переключении с 1Гбит на 100Мбит надо частоту менять тактовую MII со 125МГц до 25МГц и шина данных в MII 4-битной становится. Включите тестовые режимы в Марвеле - там есть несколько loop-mode с разных сторон. И есть генератор тестовых пакетов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlphaMil 0 10 декабря, 2011 Опубликовано 10 декабря, 2011 · Жалоба Народ, пробую использовать 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться