Jump to content

    

TASK

Участник
  • Content Count

    10
  • Joined

  • Last visited

Community Reputation

0 Обычный
  1. Здравствуйте! Прошу помочь найти дистрибутив библиотеки мегафункций для max+plus ii v10.23
  2. Цитата(krux @ Oct 8 2014, 11:00) http://www.altera.com/literature/ug/ug_altmemphy.pdf http://www.altera.com/literature/hb/extern...emi_tut_ddr.pdf http://www.altera.com/literature/hb/extern...y_ref_intro.pdf Можно привести конкретный пример, как осушествить инициализацию , запись в SDRAM DDR2 на VHDL после того, как Megawizard сгенерировал файл DDR2_example_top.vhd.
  3. Прошу сообщить , у кого работает данный пример, а именно обработчик прерывания - void ISR_vfr(void* base)
  4. 1) Изображение single- или three-component ? 2) Какова разрядность шин HDATA , шины у двух ADV212 включены параллельно ? 3) В каком mode работают ADV212 ? 1) Изображение single- или three-component ? 2) Какова разрядность шин HDATA , шины у двух ADV212 включены параллельно ? 3) В каком mode работают ADV212 ?
  5. Вопрос к Sergey_Bekrenyov. ADV212 работает с 6 форматами в соответствии с datasheet: ITU-R BT.656,BT-1358,SMPTE 125M,293(525p),274M(1080i),296M(720p). 1) Каким образом Вы прогнали изображение 4000х2672 ? 2) Как получить OpenCore на любой JPEG codec ?
  6. [ Можно ли обойтись без приобретения лицензий на QuartusII,Nios Ll,TSE для Cyclone IV GX Transceiver Starter Kit (SGMII +Marvell 88111)? Если можно, то прошу дать ссылки на плдходящие генераторы файлов лицензий.
  7. Обрвщаюсь к знатокам, у кого получились прием/ передачв TSE для Cyclone IV GX FPGA Development Kit DK-DEV-4CGX150N,+ SGMII+ PHY_Marvell 88e1111. При компиляции проекта, выложенного на сайте Altera образуется sof-файл c отметкой “time_limitted”. Использован, как указано на сайте, Quartus II Web Edition software version 11.1.0 и Nios(fast). Нужна ли лицензия на Quartus II и Nios ?
  8. Не попасть при приема в обработчик прерывания. (для Cyclone IV, SGMI, Marvell 88e1111) int MAC_init() { alt_u32 ,t2=0; int status=0; p_counter=0; IOWR_ALTERA_TSEMAC_MDIO_ADDR1(TSE_MAC_BASE, 0); // PHY and other board peripherial initialization IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TSE_MAC_BASE,PHY); t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,1,0x1B); //Extended PHY Specific Status Register t2 &= 0xFFF0; IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,1,0x1B,t2 | 0x4);//SGMII without clock to Copper t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,1,0x14); // Disable RGMII Timing Control t2 &= ~0x82; //marvell_cfg_sgmii IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,1,0x14, t2); t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,1,ALTERA_TSEMAC_PHY_ADDR_CONTROL);// PHY reset IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,1,ALTERA_TSEMAC_PHY_ADDR_CONTROL,t2 | PCS_CTL_sw_reset);//Previous Operations Require SW Reset if((IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 1, ALTERA_TSEMAC_PHY_ADDR_STATUS) & PCS_ST_an_done) == 0) { IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 1, ALTERA_TSEMAC_PHY_ADDR_CONTROL + 16, 0x78); t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 1, ALTERA_TSEMAC_PHY_ADDR_CONTROL); IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 1, ALTERA_TSEMAC_PHY_ADDR_CONTROL, t2 | PCS_CTL_sw_reset); } // Without next string don't work reading packet t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 0, ALTERA_TSE_PCS_IF_MODE); IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 0, ALTERA_TSE_PCS_IF_MODE,t2 | 0x03); // PCS SGMII mode enabled do { Delay(0xFFFFF); t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 1, ALTERA_TSEMAC_PHY_ADDR_STATUS); }while((t2&0x04)==0); //wait for link-up // Get the Rx and Tx SGDMA addresses sgdma_tx_dev = alt_avalon_sgdma_open(SGDMA_TX_NAME); sgdma_rx_dev = alt_avalon_sgdma_open(SGDMA_RX_NAME); IOWR_ALTERA_AVALON_SGDMA_CONTROL (SGDMA_RX_BASE,ALTERA_AVALON_SGDMA_CONTROL_SOFTWARERESET_MSK); IOWR_ALTERA_AVALON_SGDMA_CONTROL(SGDMA_RX_BASE, 0x0); // reset the mac IOWR_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE, ALTERA_TSEMAC_CMD_SW_RESET_MSK | ALTERA_TSEMAC_CMD_TX_ENA_MSK | ALTERA_TSEMAC_CMD_RX_ENA_MSK ); while(IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE) & ALTERA_TSEMAC_CMD_SW_RESET_MSK); // Initialize MAC registers IOWR_ALTERA_TSEMAC_FRM_LENGTH(TSE_MAC_BASE, ALTERA_TSE_MAC_MAX_FRAME_LENGTH); IOWR_ALTERA_TSEMAC_RX_ALMOST_EMPTY(TSE_MAC_BASE, 8); IOWR_ALTERA_TSEMAC_RX_ALMOST_FULL(TSE_MAC_BASE, 8); IOWR_ALTERA_TSEMAC_TX_ALMOST_EMPTY(TSE_MAC_BASE, 8); IOWR_ALTERA_TSEMAC_TX_ALMOST_FULL(TSE_MAC_BASE, 3); IOWR_ALTERA_TSEMAC_TX_SECTION_EMPTY(TSE_MAC_BASE, TSE_MAC_TRANSMIT_FIFO_DEPTH - 16); //1024/4; IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(TSE_MAC_BASE, 0); 32/4; // start transmit when there are 48 bytes IOWR_ALTERA_TSEMAC_RX_SECTION_EMPTY(TSE_MAC_BASE, TSE_MAC_RECEIVE_FIFO_DEPTH - 16); //4000/4); IOWR_ALTERA_TSEMAC_RX_SECTION_FULL(TSE_MAC_BASE, 0); IOWR_ALTERA_TSEMAC_TX_CMD_STAT(TSE_MAC_BASE,ALTERA_TSEMAC_TX_CMD_STAT_TXSHIFT16_ MSK); //IOWR_ALTERA_TSEMAC_TX_CMD_STAT(TSE_MAC_BASE,0); IOWR_ALTERA_TSEMAC_RX_CMD_STAT(TSE_MAC_BASE,ALTERA_TSEMAC_RX_CMD_STAT_RXSHIFT16_ MSK); //IOWR_ALTERA_TSEMAC_RX_CMD_STAT(TSE_MAC_BASE,0); IOWR_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_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 | ALTERA_TSEMAC_CMD_PROMIS_EN_MSK);//???ALTERA_TSEMAC_CMD_PROMIS_EN_MSK IOWR_ALTERA_TSEMAC_MAC_0(TSE_MAC_BASE,((int)(0x00) | (int)(0x07 << 8) | (int)(0xED << 16) | (int)(0x19 << 24))); IOWR_ALTERA_TSEMAC_MAC_1(TSE_MAC_BASE,(((int)(0x05) | (int)(0x9B << 8)) & 0xFFFF)); 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); alt_u32 *uncached_packet_payload; uncached_packet_payload = (void *)alt_remap_cached ((volatile 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" uncached_packet_payload, // starting write_address 0, // read until EOP 0); while ( (IORD_ALTERA_AVALON_SGDMA_STATUS(SGDMA_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]); sem=0; return status; } //--------------------------------------------------------------------------------------------- int tse_sgdmaRx_isr(void * context, alt_u32 irqnum) { alt_u32 t2=0; alt_u32 *uncached_packet_payload; t2=IORD_ALTERA_AVALON_SGDMA_STATUS(SGDMA_RX_BASE); if (t2 & (ALTERA_AVALON_SGDMA_STATUS_CHAIN_COMPLETED_MSK | ALTERA_AVALON_SGDMA_STATUS_DESC_COMPLETED_MSK)) { p_counter++; alt_printf("Packet counter:%x\n",p_counter); IOWR_ALTERA_AVALON_SGDMA_STATUS(SGDMA_RX_BASE,ALTERA_AVALON_SGDMA_STATUS_CHAIN_C OMPLETED_MSK); t2=IORD_ALTERA_TSE_SGDMA_DESC_STATUS(&desc[ALTERA_TSE_FIRST_RX_SGDMA_DESC_OFST]); /*check status and handle packet*/ if( (t2 & (ALTERA_AVALON_SGDMA_DESCRIPTOR_STATUS_E_CRC_MSK | ALTERA_AVALON_SGDMA_DESCRIPTOR_STATUS_E_PARITY_MSK | ALTERA_AVALON_SGDMA_DESCRIPTOR_STATUS_E_OVERFLOW_MSK | ALTERA_AVALON_SGDMA_DESCRIPTOR_STATUS_E_SYNC_MSK | ALTERA_AVALON_SGDMA_DESCRIPTOR_STATUS_E_UEOP_MSK | ALTERA_AVALON_SGDMA_DESCRIPTOR_STATUS_E_MEOP_MSK | ALTERA_AVALON_SGDMA_DESCRIPTOR_STATUS_E_MSOP_MSK ) ) == 0) { t2=IORD_16DIRECT(&desc[ALTERA_TSE_FIRST_RX_SGDMA_DESC_OFST].actual_bytes_transferred, 0)-2; CheckPacket(pkt,t2); } else { alt_printf("RX descriptor reported error. Packet dropped\n"); } uncached_packet_payload = (void *)alt_remap_cached ((volatile 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" uncached_packet_payload, // starting write_address 0, // read until EOP 0); // don't write to constant address t2=alt_avalon_sgdma_do_async_transfer(sgdma_rx_dev, &des[ALTERA_TSE_FIRST_RX_SGDMA_DESC_OFST]); } return 0; }
  9. Порядок действий: 1) В режиме DEBUG устанавливается точка останова в начале обработчика прерывания int tse_sgdmaRx_isr(void * context, alt_u32 irqnum) 2) Запускается программа int main() { alt_u32 t=0; alt_printf("Hello from NIOS\n"); MAC_init(); while (1){ } return 0; } 3) Затем с PC подается ARP-запрос: Ping 192.168.1.2 4) На точку останова в обработчике ни разу не попасть!
  10. Помогите, пожалуйста, разобраться с приемом TSE. За основу взят проект уважаемого VadimZZZ. Kit DK-DEV-4CGX15N, Cyclone IV, SGMI, Marvell 88e1111. Передача работает. Приема нет При PING ллаты (broadcast) не попадаю в обработчик прерывания. Код выкладываю.