1891ВМ12Я 0 29 мая, 2016 Опубликовано 29 мая, 2016 · Жалоба ему надо от опоры в 25 МГц разогнать PLL на 125 МГц, и чтобы она стабильно залочилась. короче, везде, где есть PLL, необходимо строго следить за reset-ами, их длительностями, и наличием lock-ов Однако до того как я стал делать такой длинный (теперь ясно что такой и надо) резет - у меня работало на прием. И вообще, процессор Nios2 и самодельный UART хорошо работали при моих ожиданиях что там должно быть 125 МГц. Я даже отдельно замерял что 125 МГц есть, через делитель и оценивал длительность... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
abarsky111 0 30 мая, 2016 Опубликовано 30 мая, 2016 · Жалоба Несколько лет назад подробно разбирался со связкой 88E1111+CycloneIV, на этом форуме всё уже было с детальными пояснениями. Большое спасибо форумчанам, особенно vadimuzzz! Если есть уверенность, что разводка+подключение ПЛИС и марвела сделаны правильно, то дело в программировании регистров. У меня функция инициализации выглядела так (там кое-что лишнее, применительно к моей конкретной реализации + отладочная информация, но разобраться можно ): alt_u32 t2=0; int status=0; IPADDR2[0]=192; IPADDR2[1]=168; IPADDR2[2]=1; IPADDR2[3]=247; GATE2[0]=192; GATE2[1]=168; GATE2[2]=1; GATE2[3]=254; MASK2[0]=255; MASK2[1]=255; MASK2[2]=255; MASK2[3]=0; MACADDR2[0]=0x00; MACADDR2[1]=0x07; MACADDR2[2]=0xab; MACADDR2[3]=0xf0; MACADDR2[4]=0x0d; MACADDR2[5]=0xb2; //Чтение регистра конфигурации TSE - регистр 0 - номер версии IP TSE (32 бита) t2 = IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE2_BASE); #ifdef DEBUG alt_printf("TSE Command Reg : %x\n",t2); #endif alt_u32 t, r; for (t=0;t<33;t++) { IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TSE2_BASE, t); Delay(0xFFFF); //alt_printf("Probing PHY at address %x ...\n", t); r = IORD_ALTERA_TSEMAC_MDIO(TSE2_BASE, 0, ALTERA_TSEMAC_PHY_ADDR_PHY_ID1); if( r== 0x141 ) { #ifdef DEBUG alt_printf("Found Marvell 88E1111, PHY=%x\n", t); #endif break; } } t2 = IORD_ALTERA_TSEMAC_MDIO(TSE2_BASE,0,0x1B);//Extended PHY Specific Status Register #ifdef DEBUG alt_printf("Reg 27 : %x\n",t2); #endif t2 &= 0xFFF0; IOWR_ALTERA_TSEMAC_MDIO(TSE2_BASE,0,0x1B,t2|0xf); //f - GMII to Copper; 7 - GMII to fiber; e - GMII to SGMII(=fiber); t2 = IORD_ALTERA_TSEMAC_MDIO(TSE2_BASE,0,0x14);//Extended PHY Specific Control Register #ifdef DEBUG alt_printf("Reg 20 : %x\n",t2); #endif IOWR_ALTERA_TSEMAC_MDIO(TSE2_BASE,0,0x14,t2|0x83);//Add Delay to RX_CLK for RXD Outputs; Add Delay to GTX_CLK for TXD Inputs t2 = IORD_ALTERA_TSEMAC_MDIO(TSE2_BASE,0,26);// #ifdef DEBUG alt_printf("Reg 26 : %x\n",t2); #endif t2 = IORD_ALTERA_TSEMAC_MDIO(TSE2_BASE,0,0); #ifdef DEBUG alt_printf("Reg 0 : %x\n",t2); #endif IOWR_ALTERA_TSEMAC_MDIO(TSE2_BASE,0,ALTERA_TSEMAC_PHY_ADDR_CONTROL,t2|PCS_CTL_sw _reset);//Previous Operations Require SW Reset do { Delay(0xFFFF); t2 = IORD_ALTERA_TSEMAC_MDIO(TSE2_BASE,0,ALTERA_TSEMAC_PHY_ADDR_STATUS); //alt_printf("Reg 1 : %x\n",t2); Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF); } while((t2&(alt_u32)0x0004)==0);//wait for link-up // Get the Rx and Tx SGDMA addresses sgdma_tx_dev = alt_avalon_sgdma_open(SGDMA2_TX_NAME); if(!sgdma_tx_dev) { #ifdef DEBUG alt_printf("[triple_speed_ethernet_init] Error opening RX SGDMA\n"); #endif } sgdma_rx_dev = alt_avalon_sgdma_open(SGDMA2_RX_NAME); if(!sgdma_rx_dev) { #ifdef DEBUG alt_printf("[triple_speed_ethernet_init] Error opening TX SGDMA\n"); #endif } IOWR_ALTERA_AVALON_SGDMA_CONTROL(SGDMA2_RX_BASE,ALTERA_AVALON_SGDMA_CONTROL_SOFT WARERESET_MSK); IOWR_ALTERA_AVALON_SGDMA_CONTROL(SGDMA2_RX_BASE, 0x0); // reset the mac IOWR_ALTERA_TSEMAC_CMD_CONFIG(TSE2_BASE , ALTERA_TSEMAC_CMD_SW_RESET_MSK | ALTERA_TSEMAC_CMD_TX_ENA_MSK | ALTERA_TSEMAC_CMD_RX_ENA_MSK | ALTERA_TSEMAC_CMD_PROMIS_EN_MSK); while(IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE2_BASE) & ALTERA_TSEMAC_CMD_SW_RESET_MSK) { } // Initialize MAC registers IOWR_ALTERA_TSEMAC_FRM_LENGTH(TSE2_BASE, ALTERA_TSE_MAX_FRAME_LENGTH); IOWR_ALTERA_TSEMAC_RX_ALMOST_EMPTY(TSE2_BASE, 8); IOWR_ALTERA_TSEMAC_RX_ALMOST_FULL(TSE2_BASE, 8); IOWR_ALTERA_TSEMAC_TX_ALMOST_EMPTY(TSE2_BASE, 8); IOWR_ALTERA_TSEMAC_TX_ALMOST_FULL(TSE2_BASE, 3); IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(TSE2_BASE, 0); IOWR_ALTERA_TSEMAC_RX_SECTION_FULL(TSE2_BASE, 0); IOWR_ALTERA_TSEMAC_TX_CMD_STAT(TSE2_BASE,0); IOWR_ALTERA_TSEMAC_RX_CMD_STAT(TSE2_BASE,0); IOWR_ALTERA_TSEMAC_MAC_0(TSE2_BASE,((int)(MACADDR2[0]) | (int)(MACADDR2[1] << 8) | (int)(MACADDR2[2] << 16) | (int)(MACADDR2[3] << 24))); IOWR_ALTERA_TSEMAC_MAC_1(TSE2_BASE,(((int)(MACADDR2[4]) | (int)(MACADDR2[5] << 8)) & 0xFFFF)); IOWR_ALTERA_TSEMAC_CMD_CONFIG(TSE2_BASE, ALTERA_TSEMAC_CMD_TX_ENA_MSK | ALTERA_TSEMAC_CMD_RX_ENA_MSK | ALTERA_TSEMAC_CMD_TX_ADDR_INS_MSK | ALTERA_TSEMAC_CMD_RX_ERR_DISC_MSK | ALTERA_TSEMAC_CMD_PAD_EN_MSK ); alt_avalon_sgdma_register_callback(sgdma_rx_dev,(alt_avalon_sgdma_callback)&tse_sgdmaRx_isr,(alt_u16)ALTERA_TSE_SGDMA_INTR_MASK,sgdma_rx_dev); //объявляет буфер некешируемой областью памяти (устанавливает в 1 31-й бит адреса блока) alt_u32 *up; //uncached_packet_payload; up = (void *)alt_remap_uncached ( (void *)pkt, 4); //подготовка дескрипторов к проведению очередной операции alt_avalon_sgdma_construct_stream_to_mem_desc( (alt_sgdma_descriptor *) &desc[ALTERA_TSE_FIRST_RX_SGDMA_DESC_OFST], // descriptor I want to work with (alt_sgdma_descriptor *) &desc[ALTERA_TSE_SECOND_RX_SGDMA_DESC_OFST], // pointer to "next" up, // starting write_address 0, // read until EOP - переносить пакет до конца данных 0); while ( (IORD_ALTERA_AVALON_SGDMA_STATUS(SGDMA2_RX_BASE) & ALTERA_AVALON_SGDMA_STATUS_BUSY_MSK) ) {} //начало асинхронной транзакции t2=alt_avalon_sgdma_do_async_transfer(sgdma_rx_dev, &desc[ALTERA_TSE_FIRST_RX_SGDMA_DESC_OFST]); #ifdef DEBUG t2 = IORD_ALTERA_TSEMAC_MAC_0(TSE2_BASE); alt_printf("MAC 0 : %x\n",t2); t2 = IORD_ALTERA_TSEMAC_MAC_1(TSE2_BASE); alt_printf("MAC 1 : %x\n",t2); t2 = IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE2_BASE); alt_printf("TSE Command Reg : %x\n",t2); #endif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 4 июня, 2016 Опубликовано 4 июня, 2016 · Жалоба Несколько лет назад подробно разбирался со связкой 88E1111+CycloneIV, на этом форуме всё уже было с детальными пояснениями. Большое спасибо форумчанам, особенно vadimuzzz! Если есть уверенность, что разводка+подключение ПЛИС и марвела сделаны правильно, то дело в программировании регистров. У меня функция инициализации выглядела так (там кое-что лишнее, применительно к моей конкретной реализации + отладочная информация, но разобраться можно ):Да, схему передирали с пары референс-дизайнов, подключили всё что даже к гигабиту не относится (TX_CLK), вижу что при подключении к 100-мегабитному интерфейсу у меня и клоки ровно в 5 раз замедляются (125->25) - всё как бы окей. t2 = IORD_ALTERA_TSEMAC_MDIO(TSE2_BASE,0,0x14);//Extended PHY Specific Control Register IOWR_ALTERA_TSEMAC_MDIO(TSE2_BASE,0,0x14,t2|0x83);//Add Delay to RX_CLK for RXD Outputs; Add Delay to GTX_CLK for TXD Inputs А что значат эти биты? RGMII timing control? И включение передатчика? Где мне посмотреть что у меня выбран режим именно GMII/copper? Читал описание регистра 27.3:0 (HWCFG_MODE) - его я задал конфигурационными пинами и младшие 4 бита равны 1111, что соответствует именно GMII to Copper. 27: 0x808F = 1000_0000_1000_1111 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба А что значат эти биты? RGMII timing control? И включение передатчика? RGMII timing control - определяют задержку клока на TR/RX линиях в режиме RGMII, в режиме GMII не используются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба RGMII timing control - определяют задержку клока на TR/RX линиях в режиме RGMII, в режиме GMII не используются.Ясно. Я этот проект ковыряю уже пол года в фоновом режиме, я искренне не понимаю что и где и как еще посмотреть, т.к. судя по всему: IOWR_ALTERA_TSEMAC_MDIO(TSE2_BASE,0,0x1B,t2|0xf); //f - GMII to Copper; 7 - GMII to fiber; e - GMII to SGMII(=fiber);IOWR_ALTERA_TSEMAC_MDIO(TSE2_BASE,0,0x14,t2|0x83);//Add Delay to RX_CLK for RXD Outputs; Add Delay to GTX_CLK for TXD Inputs тут задается лишь режим в регистре 27 (у меня он верный) и включается передатчик в регистре 20, далее резет и полетели. Кажется я всё делаю верно и вычитав регистры я в этом убеждаюсь... Что еще можете посоветовать проверить? Или какие ошибки еще поискать? TX_ER я уже на 0 посадил давно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Wic 0 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба Извините за глупый вопрос. А пробовали проверять на готовом проекте? Сам начинал со стокового проекта данного кита Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба Извините за глупый вопрос. А пробовали проверять на готовом проекте? Сам начинал со стокового проекта данного кита У меня прямо сейчас есть Cyclone IV GX Starter Kit и на нем я уже давно проверил проект Nios 2 + 88E1111 только там разведен лишь SGMII. Я повторил как мартышка туториал и оно заработало, а вот сделать так чтобы работать без Nios 2 через свою логику так еще и через SGMII мне не удалось! Ключевой момент в том что разведен там исключительно SGMII, а GMII/RGMII они не подключали вообще. Хотел сначала сделать так чтобы проверить связку Cyclone IV через SGMII с 88E1111, чтобы потом реализовать свою платку именно так же через SGMII (если было бы проверено), но так и не удалось врубиться как же работать через SGMII... Поэтому сделал свою платку, даже могу часть где подключаю ПЛИС + 88E1111 показать, проверил заинтересованный коллега - ошибок не увидел. У меня есть возможность по сути работать в режимах GMII и RGMII. Надо попробовать, вдруг у меня линии битые и если повезет то в RGMII заработает. Кажется выше я упоминал что через RMII таким образом я уже работал с ПЛИС, но это 100 мегабит и другой PHY другая ПЛИС. Там я сделал самодельный MAC и раз оно так хорошо работало то видимо контрольные суммы и пакеты формировать научился :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
abarsky111 0 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба Поэтому сделал свою платку, даже могу часть где подключаю ПЛИС + 88E1111 показать, проверил заинтересованный коллега - ошибок не увидел. У меня есть возможность по сути работать в режимах GMII и RGMII. Надо попробовать, вдруг у меня линии битые и если повезет то в RGMII заработает. А можете прислать или здесь выложить схему соединения плис с марвелом и часть из qsys, что относится к связке ниос+tse+всё остальное)) SGDMA используете? потому как выложил ранее абсолютно рабочую конфигурацию для интерфейса GMII, и напрашивается вывод, что копаем не в том месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба А можете прислать или здесь выложить схему соединения плис с марвелом и часть из qsys, что относится к связке ниос+tse+всё остальное)) SGDMA используете? потому как выложил ранее абсолютно рабочую конфигурацию для интерфейса GMII, и напрашивается вывод, что копаем не в том месте. Я не использую Nios, хотя когда разбирался - пытался его туда воткнуть вместе с TSE, думал что может помочь или упростить отладку. С Ethernet вполне реально работать со своим простейшим MAC. Вечером обязательно скину схему! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
abarsky111 0 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба Я не использую Nios, хотя когда разбирался - пытался его туда воткнуть вместе с TSE, думал что может помочь или упростить отладку. С Ethernet вполне реально работать со своим простейшим MAC. Вечером обязательно скину схему! Уже года два надеюсь, что вот ещё немножко, появится время - сяду и напишу свой МАС вместо TSE.... Эх, завидую белой завистью, что у Вас руки до этого дошли! Давайте схему, а там посмотрим, может для начала с TSE будет проще - хотя бы убедиться, что с марвелом всё хорошо))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба Уже года два надеюсь, что вот ещё немножко, появится время - сяду и напишу свой МАС вместо TSE.... Эх, завидую белой завистью, что у Вас руки до этого дошли!У меня настолько примитивный MAC, что он лишь формировалка UDP и считалка IP CRC и FCS... Давайте схему, а там посмотрим, может для начала с TSE будет проще - хотя бы убедиться, что с марвелом всё хорошо)))TSE можно задействовать без Nios 2 и без SGDMA и прочих ужасов? У меня не влезает туториаловский проект, как я ни пытался всё до минимума ужать... Прилагаю часть схемы где на первой странице ПЛИС, а на второй - PHY... my_horrible_ethernet_sch.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Wic 0 7 июня, 2016 Опубликовано 7 июня, 2016 · Жалоба AVR, надеюсь самописные модули были проверены на девкиатх, чтобы не ловить баги на новых платах. Вообще тсе не так сложен если разобраться, у нас сделана схема тсе + ниос + генератор удп пакетов на логике. По схеме, не понятен режим в котором она работает, пины CONFIG[6..0] стоят не понятно как. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 7 июня, 2016 Опубликовано 7 июня, 2016 · Жалоба я некоторое время назад уже выкладывал на форум свою инициализацию altera TSE (MAC) + 88e1111 (PHY) на verilog-е но она куда-то протерялась. выложу ещё раз. tse_config_2.v Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 7 июня, 2016 Опубликовано 7 июня, 2016 · Жалоба AVR, надеюсь самописные модули были проверены на девкиатх, чтобы не ловить баги на новых платах. Вообще тсе не так сложен если разобраться, у нас сделана схема тсе + ниос + генератор удп пакетов на логике. По схеме, не понятен режим в котором она работает, пины CONFIG[6..0] стоят не понятно как. И на девкитах, и signal tap и отдельный свой софт для CRC - всё в дело пошло. Пины CONFIG на схеме действительно непонятно как, пришлось подпаиваться проводками чтобы задать нужный конфиг. Его можно увидеть на первой странице этой темы - там прочтенные регистры и этот конфиг туда в регистры ложится. я некоторое время назад уже выкладывал на форум свою инициализацию altera TSE (MAC) + 88e1111 (PHY) на verilog-е но она куда-то протерялась. выложу ещё раз. tse_config_2.v Спасибо, посмотрим, лишним не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться