vadimuzzz 0 8 марта, 2011 Опубликовано 8 марта, 2011 · Жалоба Всю тему прочил уже несколько раз, но ответов так и не нашел. Собрал систему в sopc использую модель eth_ocm. далее, создаю простую программу в nios и наталкиваюсь на то, что для успешной компиляции в проекте должен присутствовать InterNiche TCP/IP и соответсвенно UCOSII. я прав или что-то путаю? в этой теме есть ответ и примеры кода без InterNiche TCP/IP Хочу попробовать свои силы с компонентом triple speed Ethernet (TSE) но меня смущает что он time limited. Как можно это побороть? "правильной" лицензией. с чего начать освоение 10/100 ethernet? если будете делать по примерам из этого топика, то сначала почитайте про ваш PHY, у него может отличаться инициализация. потом почитать про SGDMA. ну, и иметь представление об ARP, ICMP. этого хватит, чтобы пропинговать плату. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
covsh 0 9 марта, 2011 Опубликовано 9 марта, 2011 · Жалоба в этой теме есть ответ и примеры кода без InterNiche TCP/IP было бы очень любезно, если бы вы указали где найти. перелистал всю тему и без толку. в гугле нашел лишь то, что можно InterNiche запустить без rtos используя superloop http://www.alterawiki.com/wiki/%22Super_Loop%22_NicheStack "правильной" лицензией. а она вообще существует под 9.1 sp2 ? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 9 марта, 2011 Опубликовано 9 марта, 2011 · Жалоба было бы очень любезно, если бы вы указали где найти. перелистал всю тему и без толку. ну вы блин даете. http://electronix.ru/forum/index.php?showt...st&p=751876 - это для TSE. несколько раньше было для опенкоровского. может не листать, а читать попробовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
covsh 0 9 марта, 2011 Опубликовано 9 марта, 2011 · Жалоба Уважаемый, vadimuzzz Я начинающий в этом вопросе, прошу понимания у знатоков :) Последовательность моих действий: Я использую Quartus II 9.1 sp2. Использую компонент eth_ocm_91_0_beta.zip установил модуль в “C:\altera\91\ip\user_components\eth_ocm” в соответствии с инструкцией. Далее, создал систему в SOPC После этого, перехожу в NIOS и создаю простой проект на основе шаблона «Hello World» При компиляции возникает ошибка. nios2-elf-gcc -xc -MP -MMD -c -I. -I./drivers/inc -I./HAL/inc -DSYSTEM_BUS_WIDTH=32 -D__hal__ -pipe -DALT_NO_INSTRUCTION_EMULATION -DALT_SINGLE_THREADED -DALTERA_TRIPLE_SPEED_MAC -DETH_OCM_PHY_MAX_PROFILES=3 -DETH_OCM_PHY_SUPPORT_DP83848C -DETH_OCM_PHY_SUPPORT_MVL88E1111 -O0 -g -Wall -mno-hw-div -mhw-mul -mno-hw-mulx -o obj/drivers/src/eth_ocm_phy.o c:/work/new_nios/Nios_c3_new/software/hello_bsp/drivers/src/eth_ocm_phy.c c:/work/new_nios/Nios_c3_new/software/hello_bsp/drivers/src/eth_ocm_phy.c: In function `eth_ocm_phy_init': c:/work/new_nios/Nios_c3_new/software/hello_bsp/drivers/src/eth_ocm_phy.c:160: error: structure has no member named `phyadd' Чего не хватает в моем проекте? Что идейно я упустил? ну вы блин даете. http://electronix.ru/forum/index.php?showt...st&p=751876 - это для TSE. несколько раньше было для опенкоровского. может не листать, а читать попробовать? вы имели ввиду вот это? http://electronix.ru/forum/index.php?s=&am...st&p=687221 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 9 марта, 2011 Опубликовано 9 марта, 2011 · Жалоба вы имели ввиду вот это? http://electronix.ru/forum/index.php?s=&am...st&p=687221 не совсем то.. там для TSE код, а опенкоровский закомментирован (он д.б. рабочий, но я лучше поищу последнюю актуальную версию). если вам не критично, начните с TSE. а я поищу у себя старый код для опенкоровского ядра. таких ошибок компиляции, как у вас, я не видел, тогда юзал квартус 7.2. ругается компилятор на поле в какой-то структуре, может быть там имя поменялось в новой версии? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
covsh 0 9 марта, 2011 Опубликовано 9 марта, 2011 · Жалоба не совсем то.. там для TSE код, а опенкоровский закомментирован (он д.б. рабочий, но я лучше поищу последнюю актуальную версию). если вам не критично, начните с TSE. а я поищу у себя старый код для опенкоровского ядра. таких ошибок компиляции, как у вас, я не видел, тогда юзал квартус 7.2. ругается компилятор на поле в какой-то структуре, может быть там имя поменялось в новой версии? при вникании оказалось что все ошибки идут из-за отсутствия определения ALT_INICHE в eth_ocm.h попытки определить его в ручную дают еще более серьезные ошибки :) однако, как только проект создается с поддержкой MicroC/OS-II RTOS и NicheStack TCP/IP Stack, компиляция проходит успешно. видимо, либо где-то есть возможность конфигурирования либо эта штука сейчас работает только совместно с NicheStack TCP/IP Stack. vadimuzzz, спасибо за ответ. начну разбираться с TSE. тем более, здесь много полезных исходников. остался вопрос только с лицензированием TSE. если кто может помочь, напишите в личку :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 15 марта, 2011 Опубликовано 15 марта, 2011 · Жалоба пример драйвера для опенкоровского модуля eth oc_eth.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nmurzin 0 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба Здравствуйте. Начальство поручило мне освоить работу с Gigabit Ethernet. У меня есть KIT на Cyclon III с микросхемой Marvell 88E111. Меня интересует объем работы который мне предстоит пройти прежде чем я смогу передавать данные с компьютера в ПЛИС. Глядя на этот форум я увидел что к освоению Ethernet причастны: - Sopc Builder. - NIOS-IDE. - Некий Компонент Lan91C111. - DDR2 память. Я ранее не работал c Sopc Builder . Просвятите меня пожалуйста: - Какое отношение имеют друг к другу Sopc Builder и NIOS ? - Обязательно ли для этой задачи использовать Sopc Builder ? - Какое отношение имеет DDR2 память к Ethernet ? - Что за компонент Lan91C111 и для чего он нужен ? - Ну и самый главный вопрос, за какое время в человекочасах решается данная задача ? Поделитесь сколько времени у вас на это ушло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба - Какое отношение имеют друг к другу Sopc Builder и NIOS ? NIOS - один из компонентов, используя которые как кирпичики, можно собрать в билдере систему (SOPC) - Обязательно ли для этой задачи использовать Sopc Builder ? нет, но жизнь он упрощает здорово. есть куча готовых компонентов, можно писать свои. - Какое отношение имеет DDR2 память к Ethernet ? никакого. просто, как правило, по Ethernet надо слить довольно большой объем данных, удобно складывать их там. или же хочется систему с ниосом, эзернетом и какой-нибудь осью - опять память нужна - Что за компонент Lan91C111 и для чего он нужен ? это контроллер эзернет (MAC+PHY в одном флаконе). ставят обычно на дешевых платах. у вас марвеловский PHY, для него нужна IP-корка эзернет, либо альтеровская, либо своя или опенсорсная. для Lan91C111 она не нужна. Поделитесь сколько времени у вас на это ушло. это зависит от вашего опыта. работали ли вы с другими контроллерами (если да, то вариант с ниосом предпочтительнее) или ПЛИС Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
avacs 0 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба Ув. vadimuzzz... а вы пробовали использовать при передаче jumbo frame (>4кб)??? А то я или что то туплю или не понимаю, по описанию Marvell 88E1111 поддерживает jumbo >10 кб, но при попытке записать пакет выше 1530 байт вижу только мигание светодиода TX (плата DSP KIT CIII 3C120F780), а на другом конце на машине под Ubuntu 10.10 под Wireshark ничего не вижу... основа для работы с сетью Ваша (та что вы с dim99 ранее делали)... Длину массивов переменных увеличивал, может нужно было увеличить размер дескриптора SGDMA в SOPCe (у меня сейчас дескриптор 4096)? или я уже туплю и все до бонального просто....?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба нет, не пробовал. размер descriptor memory тут скорее всего ни при чем - сами дескрипторы всего 32 байта по-моему, в них только указатели лежат. надо смотреть настройки MAC-корки (инициализация и передача/прием - все, что связано с размером пакетов). попробуйте сигналтапом прицепиться к sgdma передатчика, посмотреть транзакции там. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
almost 0 19 апреля, 2011 Опубликовано 19 апреля, 2011 · Жалоба Ув. vadimuzzz... а вы пробовали использовать при передаче jumbo frame (>4кб)??? А то я или что то туплю или не понимаю, по описанию Marvell 88E1111 поддерживает jumbo >10 кб, но при попытке записать пакет выше 1530 байт вижу только мигание светодиода TX (плата DSP KIT CIII 3C120F780), а на другом конце на машине под Ubuntu 10.10 под Wireshark ничего не вижу... основа для работы с сетью Ваша (та что вы с dim99 ранее делали)... Длину массивов переменных увеличивал, может нужно было увеличить размер дескриптора SGDMA в SOPCe (у меня сейчас дескриптор 4096)? или я уже туплю и все до бонального просто....?? Добрый день. А сколько места конкретно занимает данная SOPC? Интересно просто (у меня такой же кит), на таком же ките проект UDP + ethernet под RGMII занял сущие крохи- 1 процент от кристалла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
covsh 0 20 апреля, 2011 Опубликовано 20 апреля, 2011 (изменено) · Жалоба Здравствуйте! Сначала хочу поблагодарить тов. vadimuzzz за исходник который очень помог при старте. Решил приделать к проекту vadimuzzz'a свой обработчик пакетов arp+ping Как раз появилась очень хорошая статья по этому поводу. Вылез большой глюк. Суть проблемы в следующем: прием пакетов начал работать очень странно. Arp пакет принимает корректно, далее программа на него отвечает (все вижу по wireshark) Следующим идет ping запрос и вот тут косяк – обработчик прерывания перестает вызываться (не останавливается по контрольной точке в самом начале tse_sgdmaRx_isr). Оригинальный проект работает без нареканий. Прерывания есть по приему каждого пакета. Прошу помощи у сообщества. Исходники прилагаю. ps пробовал на 9.1 sp2, оптимизацию всю отключил. на 10.1 sp1 поведение аналогичное eht_problem.rar Изменено 20 апреля, 2011 пользователем covsh Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
covsh 0 25 апреля, 2011 Опубликовано 25 апреля, 2011 (изменено) · Жалоба разобрался в странном поведении своей программы. причина заключалась в том что на этапе инициализации в процедуре MAC_init() прописывался один мак адрес IOWR_ALTERA_TSEMAC_MAC_0(TRIPLE_SPEED_ETHERNET_0_BASE,((int)(0x00) | (int)(0x07 << 8) | (int)(0xAB << 16) | (int)(0xF0 << 24))); IOWR_ALTERA_TSEMAC_MAC_1(TRIPLE_SPEED_ETHERNET_0_BASE,(((int)(0x0D) | (int)(0xBA << 8)) & 0xFFFF)); а на этапе формирование ethernet пакета присваивал совершенно другие мак адреса. исправил на нужные - все заработало. есть еще одна проблема, причины которой я не могу понять в программе есть структура arp сообщения typedef struct arp_message { alt_u16 hw_type; // протокол канального уровня (Ethernet) alt_u16 proto_type; // протокол сетевого уровня (IP) alt_u8 hw_addr_len; // длина MAC-адреса =6 alt_u8 proto_addr_len; // длина IP-адреса =4 alt_u16 type; // тип сообщения (запрос/ответ) alt_u8 mac_addr_from[6]; // MAC-адрес отправителя alt_u32 ip_addr_from; // IP-адрес отправителя alt_u8 mac_addr_to[6]; // MAC-адрес получателя, нули если неизвестен alt_u32 ip_addr_to; // IP-адрес получателя }arp_message_t; когда делаю такое присваивание arp_message_t *msg = (void*)(frame->data); то поле типа alt_u32 ip_addr_from присваивает переменной со сдвижкой в 2 байта, т.е. захватывается кускок mac_addr_to. аналочино и второе поле alt_u32 ip_addr_to присваивает с ошибкой. пробовал делать выравнивание структуре вот так typedef struct arp_message { alt_u16 hw_type; // протокол канального уровня (Ethernet) alt_u16 proto_type; // протокол сетевого уровня (IP) alt_u8 hw_addr_len; // длина MAC-адреса =6 alt_u8 proto_addr_len; // длина IP-адреса =4 alt_u16 type; // тип сообщения (запрос/ответ) alt_u8 mac_addr_from[6]; // MAC-адрес отправителя alt_u32 ip_addr_from; // IP-адрес отправителя alt_u8 mac_addr_to[6]; // MAC-адрес получателя, нули если неизвестен alt_u32 ip_addr_to; // IP-адрес получателя }arp_message_t __attribute__ ((aligned (4))); убирать выравнивание массива volatile char pkt[1562]; ничего не помогает. написал вместо alt_u32 alt_u8[4] работаю пока так. как избавиться от какого явления? исходник прикрепляю. там работающий arp+ping+ чуть udp arp_ping_udp.rar Изменено 25 апреля, 2011 пользователем covsh Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 25 апреля, 2011 Опубликовано 25 апреля, 2011 · Жалоба возможно (я код пока не смотрел) дело в настройках регистров MAC (Tx_Cmd_Stat Register и Rx_Cmd_Stat Register). там есть режим, когда по 32-битной границе выравнивается IP payload. поиграйте с битами TX_SHIFT16 и RX_SHIFT16 в соотв. регистрах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться