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

Всю тему прочил уже несколько раз, но ответов так и не нашел.

 

Собрал систему в sopc использую модель eth_ocm.

далее, создаю простую программу в nios и наталкиваюсь на то, что для успешной компиляции в проекте должен присутствовать InterNiche TCP/IP и соответсвенно UCOSII.

я прав или что-то путаю?

в этой теме есть ответ и примеры кода без InterNiche TCP/IP

Хочу попробовать свои силы с компонентом triple speed Ethernet (TSE) но меня смущает что он time limited. Как можно это побороть?

"правильной" лицензией.

с чего начать освоение 10/100 ethernet?

если будете делать по примерам из этого топика, то сначала почитайте про ваш PHY, у него может отличаться инициализация. потом почитать про SGDMA. ну, и иметь представление об ARP, ICMP. этого хватит, чтобы пропинговать плату.

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


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

в этой теме есть ответ и примеры кода без InterNiche TCP/IP

было бы очень любезно, если бы вы указали где найти.

перелистал всю тему и без толку.

в гугле нашел лишь то, что можно InterNiche запустить без rtos используя superloop

http://www.alterawiki.com/wiki/%22Super_Loop%22_NicheStack

 

"правильной" лицензией.

а она вообще существует под 9.1 sp2 ? :)

 

 

 

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


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

было бы очень любезно, если бы вы указали где найти.

перелистал всю тему и без толку.

ну вы блин даете. http://electronix.ru/forum/index.php?showt...st&p=751876 - это для TSE. несколько раньше было для опенкоровского. может не листать, а читать попробовать?

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


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

Уважаемый, vadimuzzz

Я начинающий в этом вопросе, прошу понимания у знатоков :)

 

Последовательность моих действий:

Я использую Quartus II 9.1 sp2.

Использую компонент eth_ocm_91_0_beta.zip

установил модуль в “C:\altera\91\ip\user_components\eth_ocm” в соответствии с инструкцией.

Далее, создал систему в SOPC

1ae40aafedb6c9861207012777f47312.jpeg

 

После этого, перехожу в 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

 

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


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

вы имели ввиду вот это?

http://electronix.ru/forum/index.php?s=&am...st&p=687221

не совсем то.. там для TSE код, а опенкоровский закомментирован (он д.б. рабочий, но я лучше поищу последнюю актуальную версию). если вам не критично, начните с TSE. а я поищу у себя старый код для опенкоровского ядра. таких ошибок компиляции, как у вас, я не видел, тогда юзал квартус 7.2. ругается компилятор на поле в какой-то структуре, может быть там имя поменялось в новой версии?

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


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

не совсем то.. там для TSE код, а опенкоровский закомментирован (он д.б. рабочий, но я лучше поищу последнюю актуальную версию). если вам не критично, начните с TSE. а я поищу у себя старый код для опенкоровского ядра. таких ошибок компиляции, как у вас, я не видел, тогда юзал квартус 7.2. ругается компилятор на поле в какой-то структуре, может быть там имя поменялось в новой версии?

при вникании оказалось что все ошибки идут из-за отсутствия определения ALT_INICHE в eth_ocm.h

попытки определить его в ручную дают еще более серьезные ошибки :)

однако, как только проект создается с поддержкой MicroC/OS-II RTOS и NicheStack TCP/IP Stack, компиляция проходит успешно.

 

видимо, либо где-то есть возможность конфигурирования либо эта штука сейчас работает только совместно с NicheStack TCP/IP Stack.

 

vadimuzzz, спасибо за ответ. начну разбираться с TSE. тем более, здесь много полезных исходников.

 

остался вопрос только с лицензированием TSE. если кто может помочь, напишите в личку :)

 

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


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

Здравствуйте.

 

Начальство поручило мне освоить работу с 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 и для чего он нужен ?

 

- Ну и самый главный вопрос, за какое время в человекочасах решается данная задача ?

Поделитесь сколько времени у вас на это ушло.

 

 

 

 

 

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


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

- Какое отношение имеют друг к другу Sopc Builder и NIOS ?

NIOS - один из компонентов, используя которые как кирпичики, можно собрать в билдере систему (SOPC)

- Обязательно ли для этой задачи использовать Sopc Builder ?

нет, но жизнь он упрощает здорово. есть куча готовых компонентов, можно писать свои.

- Какое отношение имеет DDR2 память к Ethernet ?

никакого. просто, как правило, по Ethernet надо слить довольно большой объем данных, удобно складывать их там. или же хочется

систему с ниосом, эзернетом и какой-нибудь осью - опять память нужна

- Что за компонент Lan91C111 и для чего он нужен ?

это контроллер эзернет (MAC+PHY в одном флаконе). ставят обычно на дешевых платах. у вас марвеловский PHY, для него нужна IP-корка эзернет,

либо альтеровская, либо своя или опенсорсная. для Lan91C111 она не нужна.

 

Поделитесь сколько времени у вас на это ушло.

это зависит от вашего опыта. работали ли вы с другими контроллерами (если да, то вариант с ниосом предпочтительнее) или ПЛИС

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


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

Ув. vadimuzzz... а вы пробовали использовать при передаче jumbo frame (>4кб)??? А то я или что то туплю или не понимаю, по описанию Marvell 88E1111 поддерживает jumbo >10 кб, но при попытке записать пакет выше 1530 байт вижу только мигание светодиода TX (плата DSP KIT CIII 3C120F780), а на другом конце на машине под Ubuntu 10.10 под Wireshark ничего не вижу... основа для работы с сетью Ваша (та что вы с dim99 ранее делали)... Длину массивов переменных увеличивал, может нужно было увеличить размер дескриптора SGDMA в SOPCe (у меня сейчас дескриптор 4096)? или я уже туплю и все до бонального просто....??

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


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

нет, не пробовал. размер descriptor memory тут скорее всего ни при чем - сами дескрипторы всего 32 байта по-моему, в них только указатели лежат. надо смотреть настройки MAC-корки (инициализация и передача/прием - все, что связано с размером пакетов). попробуйте сигналтапом прицепиться к sgdma передатчика, посмотреть транзакции там.

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


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

Ув. 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 процент от кристалла.

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


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

Здравствуйте!

 

Сначала хочу поблагодарить тов. vadimuzzz за исходник

который очень помог при старте.

 

Решил приделать к проекту vadimuzzz'a свой обработчик пакетов arp+ping

Как раз появилась очень хорошая статья по этому поводу.

 

Вылез большой глюк. Суть проблемы в следующем: прием пакетов начал работать очень странно.

Arp пакет принимает корректно, далее программа на него отвечает (все вижу по wireshark)

Следующим идет ping запрос и вот тут косяк – обработчик прерывания перестает вызываться (не останавливается по контрольной точке в самом начале tse_sgdmaRx_isr).

 

Оригинальный проект работает без нареканий. Прерывания есть по приему каждого пакета.

 

Прошу помощи у сообщества. Исходники прилагаю.

 

ps пробовал на 9.1 sp2, оптимизацию всю отключил. на 10.1 sp1 поведение аналогичное

eht_problem.rar

Изменено пользователем covsh

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


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

разобрался в странном поведении своей программы.

причина заключалась в том что на этапе инициализации в процедуре 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

Изменено пользователем covsh

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


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

возможно (я код пока не смотрел) дело в настройках регистров MAC (Tx_Cmd_Stat Register и Rx_Cmd_Stat Register). там есть режим, когда по 32-битной границе выравнивается IP payload. поиграйте с битами TX_SHIFT16 и RX_SHIFT16 в соотв. регистрах.

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


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

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

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

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

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

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

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

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

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

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