Jump to content

    
Sign in to follow this  
yura-w

Ethernet + Cyclone + Nios

Recommended Posts

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

 

Поставили задачу:

- установка соединения по интерфейсу Ethernet

- прием/передача командных пакетов между PC и платой

- прием/передача информационных пакетов

 

Мне тоже кажется, что мало памяти, фиттер показал, что используется 80% памяти on-chip, думаю докинуть 10% к stack'y и посмотреть как себя вести будет.

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

 

Если есть возможность использовать без rtos, то расскажите как или где посмотреть?

Если сейчас полезу добавлять ddr, думаю не разгребу до января )

 

Так есть способ оставить tse и убрать rtos?

Share this post


Link to post
Share on other sites

т.е. протокол свой? тогда ось точно ни к чему. вообще для приема/передачи пакета достаточно проинициализировать PHY. для приема пакета с помощью TSE нужно выделить под него буфер, сделать дескриптор для rxdma и настроить прерывание. передача аналогично: записать пакет в массив, сделать дескриптор, который на него указывает и передать tx_dma. такой вариант килобайт в 10 упихать можно. но это не самый удобный способ, т.к. доступ будет на самом низком уровне, по MAC-адресам и потребует прав на создание raw_ethernet_socket`ов, что в нормальных осях может делать только админ. поэтому стоит реализовать огрызок tcp/ip: ARP - для преобразования IP-адресов в MAC, ICMP - ping для диагностики и разборку UDP - заголовков. все это еще килобайт 10 займет. в принципе вики достаточно почитать по этим стандартам. детали - в соответствующих RFC, в сети есть переводы на русский. пригодится и снифер, напимер, wireshark. память все-таки стоит поднять, много памяти - это хорошо :). проидитесь по форуму, это уже обсуждалось.

Share this post


Link to post
Share on other sites
поэтому стоит реализовать огрызок tcp/ip

 

Пока нет возможности написать свой tcp\ip (есть еще учеба), поэтому пытаюсь добить пример SSS.

 

Нашел новую "фичу" с flash - если установить загрузку nios cpu с ext_flash и взять простой пример hello world, то при debug'e в nios ide ответа от flash не будет.

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

Если загрузку с on-chip, то есть доступ к flash.

 

У меня ощущение, что доступ какой-то односторонний к flash - либо из nios ide с загрузкой из on-chip, либо идет загрузка software и обрубается доступ из nios ide к flash.

 

Теперь при debug'e(загрузка программы из flash) на плате выскакивает такая ошибка:

prep_tse_mac 0

Could not locate flash sector with MAC address.

prepped 1 interface, initializing...

Netinit: calloc failed getting buffer 21

inet startup error: unable to initialize net

panic: IP

dtrap - needs breakpoint

ip_exit: calling func 0x6115784

 

из network_utilities.c:

error_t get_board_mac_addr(unsigned char mac_addr[6])
{
  error_t error = 0;
  alt_u32 signature;

  /* Get the flash sector with the MAC address. */
  error = FindLastFlashSectorOffset(&last_flash_sector_offset);

 

Так как программа считывается с ext_flash и (по моей теории) доступа из nios ide к flash нет, то естественно, что считать данные из последнего сектора нельзя.

Вот думаю в рабочей программе, где есть доступ к flash прочитать содержимое flash и затем исправить немного код в network_utilities.c, чтобы подсунуть нужный mac без обращения к flash.

Только вот сомнения есть, что дальше не будет обращений к flash за какими-нибудь параметрами ethernet.

Либо каким-то образом уменьшить код SSS, чтобы влез в on-chip и не ругался на нехватку памяти в стеке там вроде бы обращение к flash проходят нормально.

 

Еще хочу посмотреть в сторону superloop вроде там обрезали rtos и занимает он меньше.

Share this post


Link to post
Share on other sites

можно еще с флагами оптимизации поиграться: выставить для System Library конфигурацию Release, для проекта оставить Debug. а лучше DDR поднять, там работы - на час.

Share this post


Link to post
Share on other sites
можно еще с флагами оптимизации поиграться: выставить для System Library конфигурацию Release, для проекта оставить Debug. а лучше DDR поднять, там работы - на час.

 

Наверноe, придется поднять ddr, а то все больше времени уходит на проверку влезет\не влезет проект в on-chip.

Спасибо за совет.

Share this post


Link to post
Share on other sites

В общем добавил к проекту Sram - все пишет\читает.

 

хочу загружаться с него, чтобы не трогать flash и была возможность считать с него информацию из-под nios ide.

Единственное, когда установил reset vector и exception vector на Sram проект не запустился, а при попытке отладить получил ошибку верификации проекта - оно и понятно, что в sram проекта никакого не было, а только мусор.

Попробовал запустить проект с on-chip а heap, stack, rd\wr поместить в sram - но опять ничего не завелось, хотя led active sram горит.

 

Полистал an458 Alternative Nios II Boot Methods, но пока еще не понял как проинициализировать sram.

 

собственно вопрос:

1. как проинициализировать sram

2. почему может неадекватно работать stack в system library размещенный в sram

Share this post


Link to post
Share on other sites
хочу загружаться с него, чтобы не трогать flash и была возможность считать с него информацию из-под nios ide.

загружаться с нее не получится, только код исполнять. лучше всего так:

-reset нацелить на flash

-exception на SRAM

-в настройках System Library - все на SRAM

тогда при подаче питания код будет считываться из flash в SRAM, а потом ему будет передаваться управление. flash будет доступна на запись/чтение. это по пункту 1. по второму - что значит неадекватно?

Share this post


Link to post
Share on other sites
загружаться с нее не получится, только код исполнять. лучше всего так:

-reset нацелить на flash

-exception на SRAM

-в настройках System Library - все на SRAM

тогда при подаче питания код будет считываться из flash в SRAM, а потом ему будет передаваться управление. flash будет доступна на запись/чтение. это по пункту 1. по второму - что значит неадекватно?

 

для проверки работоспособности sram использую рабочий проект(почему-то не доверяю простой записи\чтению в nios ide :) ), который выводит изображение на экран tft-монитора.

Когда загрузка идет с on-chip все в порядке выводится именно то, что необходимо.

при задании sram в свойствах system library - экран становится серым (хотя причины могут быть и другими).

 

Раз нельзя so sram грузиться значит не судьба.

 

В общем сделаю, как вы посоветовали с system library и буду ковырять network_utilities.c, чтоб подсунуть ip и mac.

Share this post


Link to post
Share on other sites
Когда загрузка идет с on-chip все в порядке выводится именно то, что необходимо.

...

Раз нельзя so sram грузиться значит не судьба.

...

видимо, тут путаница возникла. on-chip и off-chip ничем не отличаются

при задании sram в свойствах system library - экран становится серым (хотя причины могут быть и другими).

наверняка другие. вообще это моветон, подсовывать полуработающее железо в большую программу. отладьте железо на простых тестах.

Share this post


Link to post
Share on other sites
видимо, тут путаница возникла. on-chip и off-chip ничем не отличаются

 

Что вы имели в виду, чем они не отличаются друг от друга?

 

Попробовал sram в свойствах system library, а под код оставил on-chip, к сожалению, запустить пример simple socket server не удалось - в консоль вывел 5 символов в какой-то кодировке квадратиками.

Может неправильно подключил sram?

Или 100Mhz для него много, хотя в manual'e 104 предел.

 

вот такая память: 32 MB (2 M × 16) итого 4Mбайта.

в sopc builder взял компонент IDT71V16 - memory size - 4096 Kb.

использую вместе с flash, поэтому в tristate bridge объединил адреса.

 

В hello world пишет и читает.

При загрузке проекта с sram в system library светится SRAM LED ACTIVE - то есть max II его видит.

Как его протестировать на правильность работы в sytem library?

Share this post


Link to post
Share on other sites
Что вы имели в виду, чем они не отличаются друг от друга?

с точки зрения ниоса - один фиг. ну может у внешнего ОЗУ латентность повыше.

Попробовал sram в свойствах system library, а под код оставил on-chip,

это как? настройки system library в студию. на фига теперь он-чип, внешней ведь хватает?

 

В hello world пишет и читает.

При загрузке проекта с sram в system library светится SRAM LED ACTIVE - то есть max II его видит.

Как его протестировать на правильность работы в sytem library?

пишет и читает память?

 

давайте еще раз: оставить только флеш и внешнее ОЗУ - так работает?(все секции программы запихать в ОЗУ, ресет на флеш)

Share this post


Link to post
Share on other sites
это как? настройки system library в студию. на фига теперь он-чип, внешней ведь хватает?

 

 

пишет и читает память?

 

давайте еще раз: оставить только флеш и внешнее ОЗУ - так работает?(все секции программы запихать в ОЗУ, ресет на флеш)

 

Внешняя память - подключенная sram 4мбайта.

 

1.Оставил flash и sram.

Reset на flash, exception на sram.

Свойства system library все на sram указывают.

Прошиваю flash кодом сформированным - cfi_flash.flash.

Запускаю run hardware - загорается led active sram, в консоль выводится непонятной кодировки 5 символов - квадратиков и все на том завершается.

 

2.Потом решил проверить sram.

reset и exception на on-chip.

В свойствах system library только stack указывает на sram, все остальное на on-chip - в итоге при запуске run - те же символы в консоле.

 

вот поэтому думаю, что что-то с sram не то.

 

 

в hello world читает и пишет исправно в sram.

Edited by dim99

Share this post


Link to post
Share on other sites
Reset на flash, exception на sram.

Свойства system library все на sram указывают.

Прошиваю flash кодом сформированным - cfi_flash.flash.

Запускаю run hardware - загорается led active sram, в консоль выводится непонятной кодировки 5 символов - квадратиков и все на том завершается.

придется отладчик запускать пошаговый

2.Потом решил проверить sram.

reset и exception на on-chip.

В свойствах system library только stack указывает на sram, все остальное на on-chip - в итоге при запуске run - те же символы в консоле.

вот поэтому думаю, что что-то с sram не то.

вряд ли

в hello world читает и пишет исправно в sram.

подтверждает сказанное выше. т.е. порядок байт не меняет, пишет/читает везде? hello world, если разместить в off-chip пашет? значит надо этот сервер ковырять отладчиком

Share this post


Link to post
Share on other sites
hello world, если разместить в off-chip пашет?

 

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

Edited by dim99

Share this post


Link to post
Share on other sites

В общем на время решил отказаться от SSS.

 

Уважаемый vadimuzzz можно чуть попродробнее про

вообще для приема/передачи пакета достаточно проинициализировать PHY. для приема пакета с помощью TSE нужно выделить под него буфер, сделать дескриптор для rxdma и настроить прерывание

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this