Jump to content

    

billidean

Свой
  • Content Count

    245
  • Joined

  • Last visited

Everything posted by billidean


  1. прыгал с бубном вокруг констрейнов, ничего не помогало, пока не создал Регион для .qsys модуля. Спасибо за помощь.
  2. Никак не могу выявить причину такого поведения. Помогите, кто с таким сталкивался.
  3. добился такого результата: собрал в qSys систему, подцепил ее выводы в квартусе в графическом виде, создал в еклипсе проект "Hello? world!", все вектора Ниоса на SDRAM, и все отработало. В другом проекте квартуса ту же самую qSys-систему подцепил в текстовом-VHDL виде, создал в еклипсе проект "Hello? world!", все вектора Ниоса на SDRAM, т.е. все также, НО ошибка такая же как раньше, в первом сообщении. Завтра буду копать в этом русле.
  4. Настройки для SDRAMa взяты из проекта, в котором производится чтение и запись в DDR3. ТаймКвест не ругается.
  5. констрены в порядке, таймквест по нолям. здесь что-то в самой заливке по JTAGу во внешнее ОЗУ зарыто, мне кажется. Я это делаю первый раз, поэтому подозреваю, что нужен какой-то "бубен", чтоб все прошло хорошо. Кто-нибудь вообще делал заливку таким образом? и как???
  6. Добрый день всем. Попробовал собрать систему с ниосом, в которой в качестве ОЗУ будет ДДР3, и как обычно ничего не получилось с наскока. Делал следующее: 1. Собрал систему в qSys 2. В настройках ниоса указал вектора на SDRAM 3. Подключил все выводы code.vhd 4. В еклипсе создал проект по шаблону "Hello, world!" с использованием uC/OS 5. В настройках линкера все секции находятся в SDRAM 6. Залил .sof-файл. Конфигуратор еклипса видит коннект с плисой 7. В процессе заливки получаем вот такой вот ... ошибка Системы, использующие SDRAM, которые я находил при поиске решения, используют еще и флэшку, на которую настраивается вектор сброса ниоса. Здесь контроллер флешки имеет загрузчик, и без помех со стороны программиста, заливает код из флеш в SDRAM. В моем случае получается, что код должен быть залит по JTAG'у в SDRAM. Что? Где? Когда? И самое главное Как??? сделать, чтоб все было норм? Да, забыл описать кристалл: Кит для EP4SGX230KF40C2, Квартус 11.1, НИОС - time_limited
  7. Спасибо за помощь. ping заработал. Ответ на комп идет. Ошибки были следующие: 1. В QSys была тактовая 50МГц, перевел на 100МГц 2. В QSys не было связи cpu.data_master с deskriptor_memory.s1 3. В Квартусовском проекте было: clk_clk => clk_in_50, ... triple_speed_ethernet_0_conduit_connection_ref_clk => clk_in_50, сделал: clk_clk => clk_in_100, ... triple_speed_ethernet_0_conduit_connection_ref_clk => clk_in_125, 4. В фнкции tse_mac_raw_send было: uncached_packet_payload = (alt_u32*)alt_remap_cached ((volatile void*) data, 4); сделал: uncached_packet_payload = (alt_u32*)alt_remap_uncached((volatile void*)data, data_bytes);
  8. Да, линк появился, нужно было подождать несколько секунд. Теперь не могу перехватить прерывание при приеме. Функция инита: int MAC_init() { alt_u32 /*t,*1=0,*/t2=0; int status=0; p_counter=0; MYMAC_ADDR[0]= 0x00; MYMAC_ADDR[1]= 0x07; MYMAC_ADDR[2]= 0xAB; MYMAC_ADDR[3]= 0xF0; MYMAC_ADDR[4]= 0x0D; MYMAC_ADDR[5]= 0xBA; IP4_ADDR[0]= 0xC9; IP4_ADDR[1]= 0x01; IP4_ADDR[2]= 0x01; IP4_ADDR[3]= 0x01; // IP-Address = "201.1.1.1" IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TRIPLE_SPEED_ETHERNET_0_BASE, 0x1f); // PHY and other board peripheral initialization IOWR_ALTERA_TSEMAC_MDIO_ADDR1(TRIPLE_SPEED_ETHERNET_0_BASE, 0); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x1B);//Extended PHY Specific Status Register alt_printf("Reg 27 : %x\n",t2); t2 &= 0xFFF0; IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x1B,t2|0x4);//SGMII to Copper without clock t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x1B);//Extended PHY Specific Status Register alt_printf("Reg 27 : %x\n",t2); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x14);//Extended PHY Specific Control Register alt_printf("Reg 20 : %x\n",t2); IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x14,t2&(~0x82));//Disable RGMII timing control t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x14);//Extended PHY Specific Control Register IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 1, 0x14, t2|0x01); // Transmitter Enable t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x14);//Extended PHY Specific Control Register alt_printf("Reg 20 : %x\n",t2); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,ALTERA_TSEMAC_PHY_ADDR_CONTROL); alt_printf("Reg 0 : %x\n",t2); IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,ALTERA_TSEMAC_PHY_ADDR_CONTROL,t2|PCS_CTL_sw_ reset);//Previous Operations Require SW Reset do { t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,ALTERA_TSEMAC_PHY_ADDR_STATUS); // alt_printf("Reg 1 : %x\n",t2); } while((t2&0x04)==0);//wait for link-up alt_printf("end of wait for link-up\n"); /* Get the Rx and Tx SGDMA addresses */ sgdma_tx_dev = alt_avalon_sgdma_open(TX_SGDMA_NAME); if(!sgdma_tx_dev) { alt_printf("[triple_speed_ethernet_init] Error opening RX SGDMA\n"); return ENP_RESOURCE; } sgdma_rx_dev = alt_avalon_sgdma_open(RX_SGDMA_NAME); if(!sgdma_tx_dev) { alt_printf("[triple_speed_ethernet_init] Error opening TX SGDMA\n"); return ENP_RESOURCE; } printf("[triple_speed_ethernet_init] RX SGDMA: [%s] & TX SGDMA: [%s] is opening\n",sgdma_rx_dev->name,sgdma_tx_dev->name); IOWR_ALTERA_AVALON_SGDMA_CONTROL(RX_SGDMA_BASE,ALTERA_AVALON_SGDMA_CONTROL_SOFTWARERESET_MSK); IOWR_ALTERA_AVALON_SGDMA_CONTROL(RX_SGDMA_BASE, 0x0); /* reset the mac */ IOWR_ALTERA_TSEMAC_CMD_CONFIG(TRIPLE_SPEED_ETHERNET_0_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(TRIPLE_SPEED_ETHERNET_0_BASE) & ALTERA_TSEMAC_CMD_SW_RESET_MSK) { } alt_printf("end of reset the mac\n"); /* Initialize MAC registers */ IOWR_ALTERA_TSEMAC_FRM_LENGTH(TRIPLE_SPEED_ETHERNET_0_BASE, ALTERA_TSE_MAC_MAX_FRAME_LENGTH); IOWR_ALTERA_TSEMAC_RX_ALMOST_EMPTY(TRIPLE_SPEED_ETHERNET_0_BASE, 8); IOWR_ALTERA_TSEMAC_RX_ALMOST_FULL(TRIPLE_SPEED_ETHERNET_0_BASE, 8); IOWR_ALTERA_TSEMAC_TX_ALMOST_EMPTY(TRIPLE_SPEED_ETHERNET_0_BASE, 8); IOWR_ALTERA_TSEMAC_TX_ALMOST_FULL(TRIPLE_SPEED_ETHERNET_0_BASE, 3); IOWR_ALTERA_TSEMAC_TX_SECTION_EMPTY(TRIPLE_SPEED_ETHERNET_0_BASE, TRIPLE_SPEED_ETHERNET_0_TRANSMIT_FIFO_DEPTH - 16); //1024/4; IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(TRIPLE_SPEED_ETHERNET_0_BASE, 16); //32/4; // start transmit when there are 48 bytes IOWR_ALTERA_TSEMAC_RX_SECTION_EMPTY(TRIPLE_SPEED_ETHERNET_0_BASE, TRIPLE_SPEED_ETHERNET_0_RECEIVE_FIFO_DEPTH - 16); //4000/4); IOWR_ALTERA_TSEMAC_RX_SECTION_FULL(TRIPLE_SPEED_ETHERNET_0_BASE, 16); IOWR_ALTERA_TSEMAC_TX_CMD_STAT(TRIPLE_SPEED_ETHERNET_0_BASE,0); IOWR_ALTERA_TSEMAC_RX_CMD_STAT(TRIPLE_SPEED_ETHERNET_0_BASE,0); IOWR_ALTERA_TSEMAC_CMD_CONFIG(TRIPLE_SPEED_ETHERNET_0_BASE, ALTERA_TSEMAC_CMD_TX_ENA_MSK | ALTERA_TSEMAC_CMD_RX_ENA_MSK | ALTERA_TSEMAC_CMD_TX_ADDR_INS_MSK | ALTERA_TSEMAC_CMD_PROMIS_EN_MSK); 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)); 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(RX_SGDMA_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]); t2 = IORD_ALTERA_TSEMAC_CMD_CONFIG(TRIPLE_SPEED_ETHERNET_0_BASE); alt_printf("TSE Command Reg : 0x%x\n",t2); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x0); alt_printf("Reg 0 : 0x%x\n",t2); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x1); alt_printf("Reg 1 : 0x%x\n",t2); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x14);//Extended PHY Specific Control Register alt_printf("Reg 20 : 0x%x\n",t2); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x1B);//Extended PHY Specific Status Register alt_printf("Reg 27 : 0x%x\n",t2); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x12); alt_printf("Reg 18 : 0x%x\n",t2); if( sgdma_rx_dev->callback == NULL ) alt_printf("callback RX SGDMA is NULL\n"); else alt_printf("callback RX SGDMA is NOT NULL\n"); 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(RX_SGDMA_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(RX_SGDMA_BASE,ALTERA_AVALON_SGDMA_STATUS_CHAIN_COMPLETED_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((void*)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, &desc[ALTERA_TSE_FIRST_RX_SGDMA_DESC_OFST]); } return 0; } В обработчике на строчке: t2=IORD_ALTERA_AVALON_SGDMA_STATUS(RX_SGDMA_BASE); ставлю точку останова После запуска в режиме отладки в консоль выводится следующее: Reg 27 : 8484 Reg 27 : 8484 Reg 20 : c68 Reg 20 : c69 Reg 0 : 1140 end of wait for link-up [triple_speed_ethernet_init] RX SGDMA: [/dev/rx_sgdma] & TX SGDMA: [/dev/tx_sgdma] is opening end of reset the mac TSE Command Reg : 0x203 Reg 0 : 0x1140 Reg 1 : 0x796d Reg 20 : 0xc69 Reg 27 : 0x8484 Reg 18 : 0x0 callback RX SGDMA is NOT NULL С компа делаю: ping 201.1.1.1 и ping 201.1.1.255, и ничего не происходит. Нет прерывания или обработчик не правильно подцеплен??
  9. Спасибо, нашел свой адрес: 0. Теперь при следующем коде: alt_u32 t2=0; t2 = IORD_ALTERA_TSEMAC_CMD_CONFIG(TRIPLE_SPEED_ETHERNET_0_BASE); alt_printf("TSE Command Reg : %x\n",t2); IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TRIPLE_SPEED_ETHERNET_0_BASE, 0x1f); // PHY and other board peripheral initialization IOWR_ALTERA_TSEMAC_MDIO_ADDR1(TRIPLE_SPEED_ETHERNET_0_BASE, 0); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x1B);//Extended PHY Specific Status Register alt_printf("Reg 27 : %x\n",t2); t2 &= 0xFFF0; IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x1B,t2|0x4);//SGMII to Copper without clock t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x1B);//Extended PHY Specific Status Register alt_printf("Reg 27 : %x\n",t2); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x14);//Extended PHY Specific Control Register alt_printf("Reg 20 : %x\n",t2); IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x14,t2&(~0x82));//Disable RGMII timing control t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,0x14);//Extended PHY Specific Control Register alt_printf("Reg 20 : %x\n",t2); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,ALTERA_TSEMAC_PHY_ADDR_CONTROL); alt_printf("Reg 0 : %x\n",t2); IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,ALTERA_TSEMAC_PHY_ADDR_CONTROL,t2|PCS_CTL_sw_ reset);//Previous Operations Require SW Reset do { t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,ALTERA_TSEMAC_PHY_ADDR_CONTROL); alt_printf("Reg 0 : %x\n",t2); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,1,ALTERA_TSEMAC_PHY_ADDR_STATUS); alt_printf("Reg 1 : %x\n",t2); } while((t2&0x04)==0);//wait for link-up получаю в консоль: TSE Command Reg : 0 Reg 27 : 8484 Reg 27 : 8484 Reg 20 : c68 Reg 20 : c68 Reg 0 : 1140 Reg 0 : 1140 Reg 1 : 7949 Reg 0 : 1140 Reg 1 : 7949 Reg 0 : 1140 Reg 1 : 7949 ... Reg 0 : 1140 Reg 1 : 7949 ...
  10. Точно! Спасибо за замечание. НО!!! При переподключении вывод в консоль остался таким же. :crying:
  11. В настройках TSE выставил PHY_ID=0х0000001F В Квартусе подцепил систему: LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.numeric_std.all; LIBRARY altera; USE altera.altera_primitives_components.all; entity tse_first is port ( clk_in_50 : in std_logic; external_reset_n : in std_logic; external_led : out std_ulogic_vector(15 downto 0) := (others => '1'); external_mdc : out std_logic; external_mdio : inout std_logic; external_rxp : in std_logic; external_txp : out std_logic; external_reset_n_out : out std_logic ); end tse_first; architecture tse_first of tse_first is component qSys is port ( clk_clk : in std_logic := 'X'; -- clk reset_reset_n : in std_logic := 'X'; -- reset_n triple_speed_ethernet_0_conduit_connection_mdio_out : out std_logic; -- mdio_out triple_speed_ethernet_0_conduit_connection_mdio_oen : out std_logic; -- mdio_oen triple_speed_ethernet_0_conduit_connection_mdio_in : in std_logic := 'X'; -- mdio_in triple_speed_ethernet_0_conduit_connection_mdc : out std_logic; -- mdc triple_speed_ethernet_0_conduit_connection_led_an : out std_logic; -- led_an triple_speed_ethernet_0_conduit_connection_led_char_err : out std_logic; -- led_char_err triple_speed_ethernet_0_conduit_connection_led_link : out std_logic; -- led_link triple_speed_ethernet_0_conduit_connection_led_disp_err : out std_logic; -- led_disp_err triple_speed_ethernet_0_conduit_connection_led_crs : out std_logic; triple_speed_ethernet_0_conduit_connection_led_col : out std_logic; triple_speed_ethernet_0_conduit_connection_txp : out std_logic; -- txp triple_speed_ethernet_0_conduit_connection_rxp : in std_logic := 'X'; -- rxp triple_speed_ethernet_0_conduit_connection_ref_clk : in std_logic := 'X'; -- ref_clk triple_speed_ethernet_0_conduit_connection_rx_recovclkout : out std_logic -- rx_recovclkout ); end component qSys; component iobuf IS PORT ( datain : IN STD_LOGIC_VECTOR (0 DOWNTO 0); oe : IN STD_LOGIC_VECTOR (0 DOWNTO 0); dataio : INOUT STD_LOGIC_VECTOR (0 DOWNTO 0); dataout : OUT STD_LOGIC_VECTOR (0 DOWNTO 0) ); END component iobuf; signal internal_mdio_out : std_logic := '0'; signal internal_mdio_oen : std_logic := '0'; signal internal_mdio_in : std_logic := '0'; signal internal_LED_AN : std_logic := '0'; signal internal_LED_CHAR_ERR : std_logic := '0'; signal internal_LED_LINK : std_logic := '0'; signal internal_LED_DISP_ERR : std_logic := '0'; signal internal_LED_CRS : std_logic := '0'; signal internal_LED_COL : std_logic := '0'; signal internal_rx_recovclkout : std_logic := '0'; --- signal counter_pause : integer := 0; begin external_led(0) <= not internal_LED_LINK; external_led(1) <= not internal_LED_AN; external_led(2) <= not internal_LED_CHAR_ERR; external_led(3) <= not internal_LED_DISP_ERR; --- --- Reset process (clk_in_50) begin if clk_in_50'event and clk_in_50 = '1' then if( counter_pause >= 10000 ) then external_reset_n_out <= '1'; external_led(4) <= '0'; else external_reset_n_out <= '0'; counter_pause <= counter_pause + 1; external_led(4) <= '1'; end if; end if; end process; iobuf_pm : iobuf PORT map ( datain(0) => internal_mdio_in, --: IN STD_LOGIC_VECTOR (0 DOWNTO 0); oe(0) => not internal_mdio_oen, --: IN STD_LOGIC_VECTOR (0 DOWNTO 0); dataio(0) => external_mdio, --: INOUT STD_LOGIC_VECTOR (0 DOWNTO 0); dataout(0) => internal_mdio_out --: OUT STD_LOGIC_VECTOR (0 DOWNTO 0) ); qSys_pm : qSys port map ( clk_clk => clk_in_50, --: in std_logic := 'X'; -- clk reset_reset_n => external_reset_n, --: in std_logic := 'X'; -- reset_n triple_speed_ethernet_0_conduit_connection_mdio_out => internal_mdio_out, --: out std_logic; -- mdio_out triple_speed_ethernet_0_conduit_connection_mdio_oen => internal_mdio_oen, --: out std_logic; -- mdio_oen triple_speed_ethernet_0_conduit_connection_mdio_in => internal_mdio_in, --: in std_logic := 'X'; -- mdio_in triple_speed_ethernet_0_conduit_connection_mdc => external_mdc, --: out std_logic; -- mdc triple_speed_ethernet_0_conduit_connection_led_an => internal_LED_AN, --: out std_logic; -- led_an triple_speed_ethernet_0_conduit_connection_led_char_err => internal_LED_CHAR_ERR, --: out std_logic; -- led_char_err triple_speed_ethernet_0_conduit_connection_led_link => internal_LED_LINK, --: out std_logic; -- led_link triple_speed_ethernet_0_conduit_connection_led_disp_err => internal_LED_DISP_ERR, --: out std_logic; -- led_disp_err triple_speed_ethernet_0_conduit_connection_led_crs => internal_LED_CRS, triple_speed_ethernet_0_conduit_connection_led_col => internal_LED_COL, triple_speed_ethernet_0_conduit_connection_txp => external_txp, --: out std_logic; -- txp triple_speed_ethernet_0_conduit_connection_rxp => external_rxp, --: in std_logic := 'X'; -- rxp triple_speed_ethernet_0_conduit_connection_ref_clk => clk_in_50, --: in std_logic := 'X'; -- ref_clk triple_speed_ethernet_0_conduit_connection_rx_recovclkout => internal_rx_recovclkout --: out std_logic -- rx_recovclkout ); end tse_first; В Ниосе прописываю: alt_u32 t,r; for (t=0;t<33;t++) { IOWR_ALTERA_TSEMAC_MDIO_ADDR1(TRIPLE_SPEED_ETHERNET_0_BASE, 0); Delay(0xFFFF); IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TRIPLE_SPEED_ETHERNET_0_BASE, t); Delay(0xFFFF); alt_printf("Probing PHY at address %x ...\n", t); alt_printf("PHY_ID1:%x\n", IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 0, ALTERA_TSEMAC_PHY_ADDR_PHY_ID1)); Delay(0xFFFF); alt_printf("PHY_ID2:%x\n", IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 0, ALTERA_TSEMAC_PHY_ADDR_PHY_ID2)); Delay(0xFFFF); } В консоли получаю: Probing PHY at address 0 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 1 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 2 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 3 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 4 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 5 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 6 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 7 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 8 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 9 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address a ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address b ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address c ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address d ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address e ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address f ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 10 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 11 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 12 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 13 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 14 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 15 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 16 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 17 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 18 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 19 ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 1a ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 1b ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 1c ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 1d ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 1e ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 1f ... PHY_ID1:1f PHY_ID2:0 Probing PHY at address 20 ... PHY_ID1:1f PHY_ID2:0 В ДШ на Марвел: Вопрос: 1. Что за адрес я прописываю в настройках TSE?() 2. Какого "художника" не получается считать идентификаторы, описанные в ДШ на Марвел???
  12. Из даташита на марвел: тогда из схемы подключения получается, что у меня PHY = 0; Такая проверка: alt_u32 t,r; for (t=0;t<33;t++) { IOWR_ALTERA_TSEMAC_MDIO_ADDR1(TRIPLE_SPEED_ETHERNET_0_BASE, 0); IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TRIPLE_SPEED_ETHERNET_0_BASE, t); alt_printf("PHY_ID1:%x\n", IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 0, ALTERA_TSEMAC_PHY_ADDR_PHY_ID1)); alt_printf("PHY_ID2:%x\n", IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 0, ALTERA_TSEMAC_PHY_ADDR_PHY_ID2)); } выдает все ноли, т.е. ID не найден.
  13. ПЛИС на плате стоит Stratix IV GX (EP4SGX230KF40C2) Из rm_sivgx_fpga_dev_board.pdf: Это схема подключения: Очередная попытка инита: alt_u32 t2=0; t2 = IORD_ALTERA_TSEMAC_CMD_CONFIG(TRIPLE_SPEED_ETHERNET_0_BASE); alt_printf("TSE Command Reg : %x\n",t2); IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TRIPLE_SPEED_ETHERNET_0_BASE, 0); // PHY and other board peripheral initialization IOWR_ALTERA_TSEMAC_MDIO_ADDR1(TRIPLE_SPEED_ETHERNET_0_BASE, PHY); t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,0,0x1B);//Extended PHY Specific Status Register alt_printf("Reg 27 : %x\n",t2); t2 &= 0xFFF0; IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,0,0x1B,t2|0x4);//SGMII to Copper without clock t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,0,0x14);//Extended PHY Specific Control Register alt_printf("Reg 20 : %x\n",t2); IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,0,0x14,t2&(~0x82));//Disable RGMII timing control t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,0,ALTERA_TSEMAC_PHY_ADDR_CONTROL); alt_printf("Reg 0 : %x\n",t2); IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,0,ALTERA_TSEMAC_PHY_ADDR_CONTROL,t2|PCS_CTL_sw_ reset);//Previous Operations Require SW Reset do { t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE,0,ALTERA_TSEMAC_PHY_ADDR_STATUS); alt_printf("Reg 1 : %x\n",t2); t2 = IORD_ALTERA_TSEMAC_CMD_CONFIG(TRIPLE_SPEED_ETHERNET_0_BASE); alt_printf("TSE Command Reg : %x\n",t2); } while((t2&0x04)==0);//wait for link-up На консоль выводится следующее: TSE Command Reg : 0 Reg 27 : 0 Reg 20 : 0 Reg 0 : 1140 Reg 1 : 9 TSE Command Reg : 0 Reg 1 : 9 TSE Command Reg : 0 Reg 1 : 9 TSE Command Reg : 0 Reg 1 : 9 TSE Command Reg : 0 Reg 1 : 9 TSE Command Reg : 0 Reg 1 : 9 TSE Command Reg : 0 ...
  14. Добрый день всем. Необходима реализация обмена ПК-ПЛИС по Ethernet. Имеется дев.борд Стратикс 4. Нашел в форуме такую фразу от vadimuzzz: В Квартусе создал систему: Настройки TSE: В Ниосе пытаюсь инициализировать железо, а именно для начала добиться линка: alt_u32 t2=0; IOWR_ALTERA_TSEMAC_MDIO_ADDR1(TRIPLE_SPEED_ETHERNET_0_BASE, 0); // PHY and other board peripheral initialization IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TRIPLE_SPEED_ETHERNET_0_BASE, PHY); do { // Control Register .15 = 1 - Reset IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 0, 0, 0x8000); Delay(0xFFFF); // (.13=0, .6=1) - 1000 Mbps, .12=1 - Enable Auto-Negatiation, IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 0, 0, 0x1040); Delay(0xFFFF); // read Control Register t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 0, 1); Delay(0xFFFF); // Control Register .15 = 1 - Reset IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 0, 0, t2 | 0x8000); Delay(0xFFFF); // read Staus Register t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 0, 1); alt_printf("Reg 1 : %x\n",t2); //check Link if( (t2&0x0004)==0 ) { // Control Register .15 = 1 - Reset IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 0, 0, t2 | 0x8000); Delay(0xFFFF); } // .15=1 - Copper, (.3:.0)='0100' - SGMII without Clock with SGMII Auto-Neg to copper IOWR_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 0, 27, 0x8004); Delay(0xFFFF); // read Staus Register t2 = IORD_ALTERA_TSEMAC_MDIO(TRIPLE_SPEED_ETHERNET_0_BASE, 0, 1); alt_printf("Reg 1 : %x\n",t2); } while( (t2&0x0004)==0 ); в итоге на экране сполшные 9 выводятся. Подскажите что-нибудь по этому поводу.
  15. Квартус 11.1 SP2. Выходные ноги проекта: ext_sdi_tx : out std_logic_vector (0 downto 0); ext_sdi_rx : in std_logic_vector (0 downto 0); подключаю к выводам: sdi_tx : out std_logic_vector (0 downto 0); sdi_rx : in std_logic_vector (0 downto 0); sdi_tx => ext_sdi_tx, sdi_rx => ext_sdi_rx, В .tcl-файле прописал: set_location_assignment PIN_K4 -to ext_sdi_tx[0] set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to ext_sdi_tx[0] set_location_assignment PIN_L2 -to ext_sdi_rx[0] set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to ext_sdi_rx[0] При компиляции получаю: В чем может быть проблема??
  16. Доброго времени суток всем. Пытаюсь разобраться с приемником/передатчиком SDI-ядра. Задача простая: передать и принять любые случайные данные по каналу SDI в режиме 3G. Ядро SDI может содержать в себе модуль протокола, для передачи/приема видео, но мне он не нужен, поэтому буду использовать только модули приемника/передатчика ядра. В МегаВизарде сгенерил передатчик и приемник SDI: COMPONENT tx IS GENERIC ( ... ); PORT ( rst_tx : IN STD_LOGIC; tx_pclk : IN STD_LOGIC; tx_serial_refclk : IN STD_LOGIC; txdata : IN STD_LOGIC_VECTOR (19 DOWNTO 0); gxb4_cal_clk : IN STD_LOGIC; sdi_reconfig_clk : IN STD_LOGIC; sdi_reconfig_togxb : IN STD_LOGIC_VECTOR (3 DOWNTO 0); sdi_gxb_powerdown : IN STD_LOGIC; sdi_tx : OUT STD_LOGIC_VECTOR (0 DOWNTO 0); tx_status : OUT STD_LOGIC_VECTOR (0 DOWNTO 0); gxb_tx_clkout : OUT STD_LOGIC_VECTOR (0 DOWNTO 0); sdi_reconfig_fromgxb : OUT STD_LOGIC_VECTOR (16 DOWNTO 0) ); END tx; и COMPONENT rx IS GENERIC ( ... ); PORT ( rst_rx : IN STD_LOGIC; rx_serial_refclk : IN STD_LOGIC; sdi_rx : IN STD_LOGIC_VECTOR (0 DOWNTO 0); refclk_rate : IN STD_LOGIC; rx_protocol_locked : IN STD_LOGIC_VECTOR (0 DOWNTO 0); rx_xcvr_trs_lock : IN STD_LOGIC_VECTOR (0 DOWNTO 0); gxb4_cal_clk : IN STD_LOGIC; sdi_reconfig_clk : IN STD_LOGIC; sdi_reconfig_togxb : IN STD_LOGIC_VECTOR (3 DOWNTO 0); sdi_gxb_powerdown : IN STD_LOGIC; rxdata : OUT STD_LOGIC_VECTOR (19 DOWNTO 0); rx_data_valid_out : OUT STD_LOGIC_VECTOR (1 DOWNTO 0); rx_clk : OUT STD_LOGIC; rx_status : OUT STD_LOGIC_VECTOR (10 DOWNTO 0); detected_rate : OUT STD_LOGIC; sdi_reconfig_fromgxb : OUT STD_LOGIC_VECTOR (16 DOWNTO 0); rx_std : OUT STD_LOGIC_VECTOR (1 DOWNTO 0) ); END rx; Режим их использования - 3G. При управлении передатчиком на вход "rst_tx" подаем '0', на входы "tx_pclk, tx_serial_refclk" подаем 148.5МГц, на вход "txdata" будем засылать наши данные, вход "sdi_tx" подключаем наружу на микросхему драйвера. Совершенно не понятно, что делать с входами "gxb4_cal_clk, sdi_reconfig_clk, sdi_reconfig_togxb". В доке "ug_sdi" о них ничего подробного не написано. Для приемника на уровне интуиции понятно, что на вход "rx_protocol_locked" и на "rx_xcvr_trs_lock" подать '1'. Как и зачем мне использовать выход "sdi_reconfig_fromgxb" мне вообще не понятно. Пожалуйста, подскажите, где мне об этом почитать, или что мне с этими выводами делать. Лучше, конечно, ответы от тех, кто использовал ядро-SDI.
  17. Здравствуйте. Проблема моя связана с сигналом avl_ready от IP-ядра контроллера DDR3. Имеется два проекта: первый - ядро контроллера DDR3 с небольшой обвязкой, для отработки обмена с внешней памятью; второй - большой проект с несколькими ядрами (PCIExpress,FFT,DDR3) + большие обвязки всего этого. При каждой компиляции первого проекта сигнал avl_ready от IP-ядра контроллера DDR3 после заливки конфигурации в кристалл равен '1' (отслеживаю в SignalTap), а вот второй проект приходится раз 5-6 компилить, чтобы добиться этой 'единички' (пробовал удалять папки "db","db_incremental" - результат тот же). Настройки компиляции для обоих проектов одинаковы. Если Вы знаете, в чем косяк ( может быть и мой %_( ), подскажите ПЛЗ.
  18. Подскажите, где добыть прайс на ядра OpenCore. На альтеровском сайте что-то с регистрацией не то, аккаунт мой не видит :(
  19. Спасибо за ответ. Я уже на сайте альтеры увидел это. К сожалению есть :( а можете поподробнее об этом
  20. Пробую сделать загрузку НИОСа из флешки (cfi). Из ug-на свой кристалл нашел скрипты для формирования sof-файлов хардовой и софтовой частей. НИОС у меня тайм-лимитед. При использовании "sof2flash" на экран вышла инфа о том. что НИОС тайм-лимитед и ... далее java вылетает по exception и все. Т.е. преобразование не проходит. Попробовал провести преобразование sof2flash для проектов, в которых не используются тайм-лимитед ядра - все ок. Это что получается, тайм-лим.-ядра не залить во флешку?? А как же возможность работать в течение часа ..? Или я не в ту сторону думаю?
  21. Спасибо большое! Ваши рекомендации рабочие (а Альтеровские - нет :( )
  22. Создал систему Qsys в квартусе 11.1: 1. НИОС 2. on_chip_RAM - озу для НИОСа 3. сис.таймер 4. PIO - выходы, подключенные к лампочкам RAM инициализирую hex-файлом по-умолчанию. Компилю проект, получаю .sof-файл. В NIOS II IDE создаю проект с использованием uC/OS, компилю, все ок. Программирую квартусовским программером кристалл, заливаю из NIOS II IDE в НИОС программу, все тоже хорошо, лампочки мигают. Задача: получить такой .sof-файл, чтобы не нужно было запускать программу НИОСа из NIOS II IDE. Из доки "Developing NiosII Software" вычитал, что нужно расставить галочки в BSP Settings определенным образом, используя скрипт "elf2hex <myapp>.elf <start_addr> <end_addr> --width=<data_width> <hex_filename>.hex" получить .hex-файл из .elf-файла, в Qsys выставить инициализацию RAM своим сгенеренным .hex-ом, скомпилить, получить .sof-файл, и вроде как все. Сделал все как там сказано, НО НИОС не заработал, лампочки не мигают. <start_addr> и <end_addr> взял из Qsys, как begin и end для RAM-а. Если после всех этих манипуляций я пытаюсь компилить проект в NIOS II IDE, то вылезает ошибка типа "multiple target ..." в файле mem_init.mk. И тут я ваще ни.. не понимаю, что делать. Кто занимался такими вещами ПЛЗЗЗ подскажите, в чем может быть мой косяк?
  23. Доброго дня всем. На одной машине создал проект: SoPC с Nios-ом + обвязка... В Nios II IDE создал проект, скомпилил, отдладил, залил на железо, отработал. Переношу весь этот проект на другую машину, в Nios II IDE делаю импорт Existing Nios II IDE project into workplace, открываю BSPEditor и натыкаюсь на ошибку (не помню текст, но смысл в том, что Nios II IDE не находит какой-то файл по абсолютным путям с первой машины). Удалил имеющийся проект со второй машины, создал заново, перенес туда исходники с первой машины, все заработало. Помогите разобраться, как бы весь этот процесс упростить, чтобы заново проект не создавать на новой машине. З.Ы.: наверняка есть какой-то путь для переноса проектов с машины на машину.
  24. Это все уже есть. Проблема решена. В проекте было некорректное подключение ядра PCIe, подключались все сгенеренные МегаВизардом файлы вручную по-отдельности, а не через подключение через файл .qip. После подключения к проекту .qip-файла компиляция завершилась корректно и .sof-файл был сгенерен (time limited).