реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ALtera tse RGMII tx, Не формируются tx_data и tx_control в режиме RGMII
Boom-Zoom
сообщение Mar 7 2017, 20:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 10-05-12
Пользователь №: 71 762



Всем доброго времени суток! Некоторое время назад начал разбираться с интерфейсом RGMII и уже неделю не могу добиться данных на передачу по этому интерфейсу. Своих идей уже нет и как я почитал на форумах такой проблемы ни у кого и близко не было, в основном затыки на передачу на уровне физики возникают.

Исходный данные у меня такие:
-IDE Quartus 13.1;
-отладочная плата на базе Stratix III, на ней микросхема PHY 88E1111;
-PHY и TSE сконфигурировал для связи по RGMII, тактовая 125 МГц;
-обработка пакетов производится связкой TSE+SGDMA+NIOS2;
-TSE сконфигуриван с выравниванием по 32;
-соединение отладочной платы с ПК точка-точка;
-приём настроить удалось, пакет от ПК (ARP) сохраняется в память, по прерыванию я его обрабатываю и отправляю ответ;

-SGDMA_tx обрабатывает дескриптор, и я вижу в SignalTap как по шине Avalon-ST в TSE передаётся сформированный мной ответный пакет (скрин 1 из SignalTap);

И тут у меня вопрос: SGDMA отновременно с концом пакета EOP выставляет 4 байта данных (frame word) и out_empty[1..0]=2, которые подключены к линиям ff_tx_mod[1..0] корки TSE - в доке на TSE говорится что это "Indicates invalid bytes in the final frame word", а русской доке на Avalon-ST говорится что EOP интепретируется каждым ведомым индивидульно.

Вопрос 1: теоретически всё правильно-SGDMA сказал TSE сколько валидных байт защёлкнуть на такте при появлении EOP?

Вопрос 2: эта же двойка присутствует на такте "старт пакета" - это правильно?

-тактовую на вход TSE интерфейса RGMII tx_clk подаю от PLL 125 МГц;
-в SignalTap по фильтру all names удалось найти внутренние линии/отладочные регистры корки TSE под названием U_RGMII и на линии tx_data я вижу свои данные вместе с безошибочной преамбулой RGMII на передачу и двумя потерянными байтами 0xFF, tx_control не вижу (скрин 2 из SignalTap);
-на пинах не вижу не tx_data не tx_control;

Вопрос 3: если с выравниванием проблемы нет то куда можно капнуть?

-адрес буфера с пакетом выравнивал на 32, но пока писал что то сомневаться начал, после праздника попробую поиграться....
-передача по TSE разрешена, прикреплю на всякий случай код настройки TSE;
-HW reset от кнопки есть и использую;

void MacInit()
{
// Initialize MAC registers
IOWR_ALTERA_TSEMAC_CMD_CONFIG( TSE_MAC_BASE, IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE) | ALTERA_TSEMAC_CMD_SW_RESET_MSK );
while(IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE) & ALTERA_TSEMAC_CMD_SW_RESET_MSK);
//Установил адрес MDIO устройства
IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TSE_MAC_BASE, 0x12);
//Инициализация физического уровня
HWresetPHY();
PHYDeviceInit();
//Шаг a
alt_u32 mode = 0;
//Запрещяю приём и передачу
mode = IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE) & (~ALTERA_TSEMAC_CMD_TX_ENA_MSK) & (~ALTERA_TSEMAC_CMD_RX_ENA_MSK);
IOWR_ALTERA_TSEMAC_CMD_CONFIG( TSE_MAC_BASE, mode );
//Жду когда биты разрешения приёма и передачи станут 0 при чтении
mode = IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE);
while( (mode & ALTERA_TSEMAC_CMD_TX_ENA_MSK) || (mode & ALTERA_TSEMAC_CMD_RX_ENA_MSK) )
mode = IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE);

//IOWR_32DIRECT( TSE_MAC_BASE, 0xD0*4, 8<<16 );

//Шаг b
IOWR_ALTERA_TSEMAC_RX_ALMOST_EMPTY(TSE_MAC_BASE, 8);
IOWR_ALTERA_TSEMAC_RX_ALMOST_FULL(TSE_MAC_BASE, 8);
IOWR_ALTERA_TSEMAC_RX_SECTION_EMPTY(TSE_MAC_BASE, TSE_MAC_RECEIVE_FIFO_DEPTH-16);
IOWR_ALTERA_TSEMAC_RX_SECTION_FULL(TSE_MAC_BASE, 16);
IOWR_ALTERA_TSEMAC_TX_SECTION_EMPTY(TSE_MAC_BASE, TSE_MAC_TRANSMIT_FIFO_DEPTH-16);
IOWR_ALTERA_TSEMAC_TX_ALMOST_FULL(TSE_MAC_BASE, 3);
IOWR_ALTERA_TSEMAC_TX_ALMOST_EMPTY(TSE_MAC_BASE,8);
IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(TSE_MAC_BASE, 16);
//Шаг c
IOWR_ALTERA_TSEMAC_MAC_0(TSE_MAC_BASE,0x7761632A);
IOWR_ALTERA_TSEMAC_MAC_1(TSE_MAC_BASE,0x00002A61);
//Шаг d
IOWR_ALTERA_TSEMAC_FRM_LENGTH(TSE_MAC_BASE, 1518);//frame length 16-bit - 1518
IOWR_ALTERA_TSEMAC_TX_IPG_LENGTH(TSE_MAC_BASE,12);
//IOWR_ALTERA_TSEMAC_PAUSE_QUANT(TSE_MAC_BASE, 0xFFFF); //XON
//IOWR_32DIRECT(TSE_MAC_BASE, 0x44, 0xFFFF); //XOFF
mode = ALTERA_TSEMAC_CMD_XON_GEN_MSK |
ALTERA_TSEMAC_CMD_ETH_SPEED_MSK
| ALTERA_TSEMAC_CMD_PROMIS_EN_MSK
| ALTERA_TSEMAC_CMD_HD_ENA_MSK
| ALTERA_TSEMAC_CMD_TX_ADDR_INS_MSK
//| ALTERA_TSEMAC_CMD_LOOPBACK_MSK
| ALTERA_TSEMAC_CMD_XOFF_GEN_MSK
| ALTERA_TSEMAC_CMD_CNT_RESET_MSK
| ALTERA_TSEMAC_CMD_RX_ERR_DISC_MSK;
IOWR_ALTERA_TSEMAC_CMD_CONFIG( TSE_MAC_BASE, mode);
//Шаг e
IOWR_ALTERA_TSEMAC_CMD_CONFIG( TSE_MAC_BASE, mode | ALTERA_TSEMAC_CMD_SW_RESET_MSK );
while(IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE) & ALTERA_TSEMAC_CMD_SW_RESET_MSK);

//alt_u32 rr = IORD_32DIRECT(TSE_MAC_BASE, 0x3A*4);

//Шаг f
mode |= ALTERA_TSEMAC_CMD_TX_ENA_MSK |
ALTERA_TSEMAC_CMD_RX_ENA_MSK;
IOWR_ALTERA_TSEMAC_CMD_CONFIG( TSE_MAC_BASE, mode );
//Жду когда биты разрешения приёма и передачи станут 1 при чтении
mode = IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE);
while( !(mode & ALTERA_TSEMAC_CMD_TX_ENA_MSK) || !(mode & ALTERA_TSEMAC_CMD_RX_ENA_MSK) )
mode = IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE);
}

Заранее спасибо за ответы)

Сообщение отредактировал Boom-Zoom - Mar 7 2017, 20:36
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 8 2017, 02:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 288
Регистрация: 21-07-05
Пользователь №: 6 988



Насколько я помню, в этом чипе (88E1111) нужны дополнительные телодвижения при инициализации в режиме RGMII. Поищите в этой теме:
https://electronix.ru/forum/index.php?showtopic=37680
Go to the top of the page
 
+Quote Post
Boom-Zoom
сообщение Mar 8 2017, 06:49
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 10-05-12
Пользователь №: 71 762



Про передачу марвелом я почитываю... Но сейчас дело в том что от 88E1111 в сторону TSE данные идут (приём работает). А в обратную сторону данные на TSE от системы обработки поступают, но на выход TSE данные не выставляет.

Может быть кто то сможет скрины из SignalTap выложить с успешной транзакцией(переданным далее по RGMII пакетом) по Avalon-St от SGDMA к TSE?
Или может быть есть ещё какая то информация относительно линий ff_tx_mod[1..0] которую я упустил?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 8 2017, 10:39
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 288
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(Boom-Zoom @ Mar 8 2017, 12:49) *
А в обратную сторону данные на TSE от системы обработки поступают, но на выход TSE данные не выставляет.

а чем смотрите?
Go to the top of the page
 
+Quote Post
Boom-Zoom
сообщение Mar 8 2017, 12:56
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 10-05-12
Пользователь №: 71 762



Общую тактовую подаю на PLL, повышаю её в два раза, от 250 МГц тактирую SignalTap и собственно в нём смотрю. Если вы про осциллограф, то до него ещё дело не дошло т.к. эти линии внутри ПЛИС не вырабатываются.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 10 2017, 00:26
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 288
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(Boom-Zoom @ Mar 8 2017, 18:56) *
Общую тактовую подаю на PLL, повышаю её в два раза, от 250 МГц тактирую SignalTap и собственно в нём смотрю. Если вы про осциллограф, то до него ещё дело не дошло т.к. эти линии внутри ПЛИС не вырабатываются.

Посмотрите в сообщениях квартуса при компиляции, не выбросил ли он эти цепи из сигналтапа. Еще можно прицепить сигналтап к входным портам выходных ddr-регистров, к этим точно можно подключаться
Go to the top of the page
 
+Quote Post
Boom-Zoom
сообщение Mar 10 2017, 16:28
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 10-05-12
Пользователь №: 71 762



Цитата(vadimuzzz @ Mar 10 2017, 03:26) *
Посмотрите в сообщениях квартуса при компиляции, не выбросил ли он эти цепи из сигналтапа. Еще можно прицепить сигналтап к входным портам выходных ddr-регистров, к этим точно можно подключаться


Спасибо за совет, проверю. Пока решил на GMII перейти, перенастроил проект, данные из TSE сразу появились. Но передачи в сеть сегодня так и не добился. Решил что сначала дожму GMII, потом вернусь к RGMII.
Go to the top of the page
 
+Quote Post
Boom-Zoom
сообщение Apr 6 2017, 19:21
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 10-05-12
Пользователь №: 71 762



Недавно удалось получить положительный результат. Решил похвалиться) И рассказать о ключевых моментах.

Во первых решил сначала пробовать запускать проект на 100 мб используя MII. Опытный коллега, который использовал MII/GMII интерфейс выдал самописный коммутатор сигналов, который нужен для полноценной поддержки трёх скоростей. Без него либо 10/100 либо 1000. Этот коммутатор есть на картинках в руководстве на корку TSE в виде кубика, с описанием принципа его работы. Картинку я вспомнил, описание не вспомнил) но перечитывать не стал т.к. выдали обкатанное решение. Ещё дал совет перепроверить автосогласование.

Вставил к себе в проект ииии... ничего не заработало.
Стал копаться в процессе автосогласования. Заметил такою вещь - с партнёром у которого принудительно выставленно 100 у меня поднимается линк 1000.
Подумал...Почитал... Нашёл статусные регистры в которых есть данные о поддерживаемых партнёром режимах работы. В итоге добавил в функцию настройки марвела цикл ожидания окончания процесса автосогласования.
Написал функцию которая читает статусные регистры марвела, хранящие свой режим работы и режим работы партнёра, на их основе определяет максимальную, общую для себя и партнёра скорость и основываясь на этой скорости настраивает три бита SPEED, 10MB и HALF_DUPLEX в регистре команд TSE.
Общий смысл такой: если оба партнёра поддерживают 1000 полный дуплекс, то биты 10MB и HALF_DUPLEX выставлять не надо. Если общая максимальная скорость 100 полный дуплекс, то биты SPEED и HALF_DUPLEX выставлять не надо и т.д.
После вызова PHYDeviceInit(); Добавил вызов новой функции. Соответственно переколбасил настройку регистра команд дальше по тексту.

Запустил. Немного поотлаживал протоколы arp и icmp и всё заработало как часы. Пробовал на 100 полный дуплекс (это MII) и 1000 полный дуплекс (GMII).

Переконфигурировал корку TSE на RGMII, изменил режим работы марвела с GMII на RGMII, зашил. И RGMII завёлся с полпинка. PROFIT))).

Всем отвечавшим и сопереживавшим спасибо. Надеюсь кому то эта тема поможет.
Go to the top of the page
 
+Quote Post
umarsohod
сообщение Apr 7 2017, 06:42
Сообщение #9





Группа: Участник
Сообщений: 11
Регистрация: 24-11-11
Пользователь №: 68 492



Удалось ли вам посмотреть сигналтапом сигналы на выходах DDR регистров?
У меня ни разу не получилось. Толи я такой дурной, толи очередная "фича" от альтеры.

Сообщение отредактировал umarsohod - Apr 7 2017, 09:04
Go to the top of the page
 
+Quote Post
Boom-Zoom
сообщение Apr 11 2017, 20:09
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 10-05-12
Пользователь №: 71 762



Цитата(umarsohod @ Apr 7 2017, 09:42) *
Удалось ли вам посмотреть сигналтапом сигналы на выходах DDR регистров?
У меня ни разу не получилось. Толи я такой дурной, толи очередная "фича" от альтеры.

В квартусе я только мышкой пины с модулем nios соединять умею) Но если правильно понял и речь о RGMII интерфейсе то у меня было две ситуации связанные с DDIO (Quartus 13.1):
- проект не собирался если в сигнал тап была попытка анализировать внутренний регистр U_RGMII корки TSE и пины используемые интерфейсом RGMII, на анализ нужно было ставить что то одно;
- мне советовали в assignment editor добавить правило, в котором нужно указать что пины RGMII подключаются через DDIO регистры. Попробовал, проект так же не собирался.
Поэтому у меня в проекте содержимое assignment editor,почти, отражает содержимое pin planner, правило global clock добавлял на входную тактовую. И ещё правилами тактовых приёма и передачи игрался, в каком они состоянии не помню.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th May 2017 - 10:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01443 секунд с 7
ELECTRONIX ©2004-2016