Перейти к содержанию
    

xxxmatrixxx

Участник
  • Постов

    140
  • Зарегистрирован

  • Посещение

Весь контент xxxmatrixxx


  1. там биты выталкиваются от старшего к младшему, т.е. если я пишу uint8_t, то я должен сдвинуть их на 8 разрядов влево #define SPI_A_DATA_WIDTH 8 вот и выходит SPI_writeDataNonBlocking(SPIA_BASE, spi_data << (16 - SPI_A_DATA_WIDTH)); Test_Dev_SPI(); Test_Dev_I2C(); Test_Dev_CAN(); Test_Dev_LEDS(); у меня до этих функций вообще не доходит, сразу начинает отрабатывать прерывание постоянно
  2. перечитал, спасибо, буду ставить внешнюю физику на CAN и проверять а что с I2C и SPI, сейчас они у меня никуда не подключены и выплевывают пакеты наружу, смотрю их наличие осцилографом?
  3. Здравствуйте, уважаемые форумчане!!! мы приобрели следующий набор отладочных плат: 1. HSEC180 controlCARD Baseboard Docking Station https://www.ti.com/tool/TMDSHSECDOCK https://efind.ru/offer/TMDSHSECDOCK 2. F28388D controlCARD evaluation module https://www.ti.com/tool/TMDSCNCD28388D https://efind.ru/offer/TMDSCNCD28388D сейчас я создал тестовый проект на основе примеров, которые идут с C2000Ware_3_02_00_00 для данного контроллера, в нем я хочу осуществить следующее: 1. передать данные по SPI, увидев, что отрабатывает прерывание и увеличивается счетчик переданных пакетов, встать осцилом на пины и увидеть клок и данные 2. передать данные по I2C, увидев, что отрабатывает прерывание и увеличивается счетчик переданных пакетов, встать осцилом на пины и увидеть клок и данные 3. проинициализировать CAN_A и CAN_B, замкнуть CAN_A_RX на CAN_B_TX, CAN_B_RX на CAN_A_TX, передать пакеты с CAN_A->CAN_B, затем с CAN_B->CAN_A, увидеть, как отрабатывают прерывания void Test_Dev_Init(void){ uint32_t pin = 0; /////////////////// I2C ///////////////////////// //I2C_A pin = 1; // SCL GPIO_setMasterCore(pin, GPIO_CORE_CPU1); GPIO_setPinConfig(GPIO_1_SCLA); GPIO_setPadConfig(pin, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(pin, GPIO_QUAL_ASYNC); pin = 0; // SDA GPIO_setMasterCore(pin, GPIO_CORE_CPU1); GPIO_setPinConfig(GPIO_0_SDAA); GPIO_setPadConfig(pin, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(pin, GPIO_QUAL_ASYNC); // Initialize I2C and its FIFO. I2C_disableModule(I2CA_BASE); I2C_initMaster(I2CA_BASE, DEVICE_SYSCLK_FREQ, I2C_A_SPEED, I2C_DUTYCYCLE_33); I2C_setConfig(I2CA_BASE, I2C_MASTER_SEND_MODE); // | I2C_MASTER_RECEIVE_MODE I2C_setDataCount(I2CA_BASE, 2); I2C_setBitCount(I2CA_BASE, I2C_BITCOUNT_8); I2C_setAddressMode(I2CA_BASE, I2C_ADDR_MODE_10BITS); I2C_setSlaveAddress(I2CA_BASE, I2C_A_ADR_SLV); I2C_setEmulationMode(I2CA_BASE, I2C_EMULATION_FREE_RUN); I2C_enableFIFO(I2CA_BASE); I2C_clearInterruptStatus(I2CA_BASE, I2C_INT_TXFF); I2C_setFIFOInterruptLevel(I2CA_BASE, I2C_FIFO_TX2, I2C_FIFO_RX2); I2C_enableInterrupt(I2CA_BASE, I2C_INT_TXFF | I2C_INT_STOP_CONDITION); I2C_enableModule(I2CA_BASE); Interrupt_register(INT_I2CA_FIFO, &I2C_A_FIFO_ISR); Interrupt_enable(INT_I2CA_FIFO); /////////////////// SPI ///////////////////////// //SPI_A pin = 18; // CLK GPIO_setMasterCore(pin, GPIO_CORE_CPU1); GPIO_setPinConfig(GPIO_18_SPIA_CLK); GPIO_setPadConfig(pin, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(pin, GPIO_QUAL_ASYNC); pin = 16; //SIMO GPIO_setMasterCore(pin, GPIO_CORE_CPU1); GPIO_setPinConfig(GPIO_16_SPIA_SIMO); GPIO_setPadConfig(pin, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(pin, GPIO_QUAL_ASYNC); pin = 17; //SOMI GPIO_setMasterCore(pin, GPIO_CORE_CPU1); GPIO_setPinConfig(GPIO_17_SPIA_SOMI); GPIO_setPadConfig(pin, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(pin, GPIO_QUAL_ASYNC); pin = 19; // STE GPIO_setMasterCore(pin, GPIO_CORE_CPU1); GPIO_setPinConfig(GPIO_19_SPIA_STEN); GPIO_setPadConfig(pin, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(pin, GPIO_QUAL_ASYNC); //CONFIGURATION SPI_disableModule(SPIA_BASE); // SPI configuration. Use a 500kHz SPICLK and 16-bit word size. SPI_setConfig(SPIA_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0, SPI_MODE_MASTER, SPI_A_SPEED, SPI_A_DATA_WIDTH); SPI_disableLoopback(SPIA_BASE); SPI_setEmulationMode(SPIA_BASE, SPI_EMULATION_FREE_RUN); // FIFO and interrupt configuration SPI_enableFIFO(SPIA_BASE); SPI_resetTxFIFO(SPIA_BASE); SPI_setFIFOInterruptLevel(SPIA_BASE, SPI_FIFO_TX8, SPI_FIFO_RX8); SPI_clearInterruptStatus(SPIA_BASE, SPI_INT_TXFF); SPI_enableInterrupt(SPIA_BASE, SPI_INT_TXFF); SPI_enableModule(SPIA_BASE); Interrupt_register(INT_SPIA_TX, &SPI_A_FIFO_ISR); Interrupt_enable(INT_SPIA_TX); /////////////////// WDT ///////////////////////// SysCtl_serviceWatchdog(); SysCtl_disableWatchdog(); } /////////////////// TEST SPI ///////////////////////// volatile uint16_t spi_txMsgCount = 0; __interrupt void SPI_A_FIFO_ISR(void){ uint32_t i,status; status = SPI_getInterruptStatus(SPIA_BASE); i = SPI_getTxFIFOStatus(SPIA_BASE); SCIprintf("\r\nSPI_A_FIFO_ISR(int_sts = 0x%x,fifo_sts = 0x%x,)",status,i); spi_txMsgCount++; SPI_clearInterruptStatus(SPIA_BASE, SPI_INT_TXFF); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP6); status = SPI_getInterruptStatus(SPIA_BASE); i = SPI_getTxFIFOStatus(SPIA_BASE); SCIprintf("\r\nSPI_A_FIFO_ISR_AFTER(int_sts = 0x%x,fifo_sts = 0x%x,)",status,i); } void Test_Dev_SPI(void){ uint32_t i; uint16_t spi_data[2] = {0,0}; SCIprintf("\r\nTest_Dev_SPI Start"); while(spi_txMsgCount < 10){ for(i = 0; i < 2; i++) { SPI_writeDataNonBlocking(SPIA_BASE, spi_data[i] << (16 - SPI_A_DATA_WIDTH)); spi_data[i]++; } } SCIprintf("\r\nTest_Dev_SPI End"); } /////////////////// TEST I2C ///////////////////////// volatile uint16_t i2c_data[2] = {0,0}; volatile uint16_t i2c_txMsgCount = 0; __interrupt void I2C_A_FIFO_ISR(void){ uint32_t i,status; status = I2C_getInterruptStatus(I2CA_BASE); i = I2C_getTxFIFOStatus(I2CA_BASE); SCIprintf("\r\nI2C_A_FIFO_ISR(int_sts = 0x%x,fifo_sts = 0x%x,)",status,i); i2c_txMsgCount++; I2C_clearInterruptStatus(I2CA_BASE, I2C_INT_TXFF); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP8); status = I2C_getInterruptStatus(I2CA_BASE); i = I2C_getTxFIFOStatus(I2CA_BASE); SCIprintf("\r\nI2C_A_FIFO_ISR_AFTER(int_sts = 0x%x,fifo_sts = 0x%x,)",status,i); } void Test_Dev_I2C(void){ uint32_t i; SCIprintf("\r\nTest_Dev_I2C Start"); while(i2c_txMsgCount < 10){ for(i = 0; i < 2; i++) { I2C_putData(I2CA_BASE, i2c_data[i]); i2c_data[i]++; } I2C_sendStartCondition(I2CA_BASE); } SCIprintf("\r\nTest_Dev_I2C End"); } void main(void) { // Initialize device clock and peripherals Device_init(); // Boot CM core #ifdef _FLASH Device_bootCM(BOOTMODE_BOOT_TO_FLASH_SECTOR0); #else Device_bootCM(BOOTMODE_BOOT_TO_S0RAM); #endif // Initialize GPIO Device_initGPIO(); // Disable CPU interrupts DINT; // Initialize interrupt controller and vector table. Interrupt_initModule(); Interrupt_initVectorTable(); IER = 0x0000; IFR = 0x0000; //init interface and periphery Test_Dev_Init(); EINT; ERTM; SCIprintf("\033c"); SCIprintf("\r\n|||||||||||||||||||||||||||||||||||||||\n"); Test_Dev_SPI(); Test_Dev_I2C(); Test_Dev_CAN(); Test_Dev_LEDS(); } сейчас я вижу следующее: 1. по SPI как только разрешаю все прерывания, сразу вызывается прерывание по SPI, хотя данные по SPI не передавались, при этом флаг по передаче не сбрасывается, что видно из отладочной печати: SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0 2. если прерывания и тест по SPI запретить, а только вкл тест по I2C, то так же сразу вызывается прерывание по I2C, хотя данные по I2C не передавались, при этом флаг по передаче не сбрасывается, что видно из отладочной печати: I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0 3. по CAN тоже странно отрабатывают прерывания, но я хотел бы сейчас хотя бы разобраться с первыми 2мя пунктами 4. микгание светодиодов отрабатывает корректно как видно по I2C и SPI ситуация очень схожая по отработке прерывания, вероятнее всего дело в настройке самих прерываний, но я пересмотрел там и там, все по примерам сделал верно, да и сами примеры ведут себя так же прошу посмотреть инициализацию, может у вас будут какие идеи, я уже пересмотрел кучу примеров от TI, на github, я не увидел, в чем может быть причина отработки таким образом прерываний по SPI и I2C Также хочу обратить внимание, что питание модуля осуществляется через внешний источник питания +5В, 1,2А, т.е. тока должно хватить спасибо, жду вашего ответа pmu_m_cpu1.zip
  4. я именно его и скачал, переделал wishbone под avalon-mm, сейчас смотрю по коду карту регистров этой коры а насколько верно данная кора отрабатывает? есть ли опыт использования ее?
  5. Может есть у кого Can 2.0B под другую шину(например, AXI от Xilinx) с исходниками, желательно на veriloge? кто-нибудь использовал Can Protocol Controller с OpenCores, насколько верно отрабатывает данный модуль, и есть ли на него описание у кого-нибудь, чтобы по коду не копаться?
  6. Здравствуйте, уважаемые форумчане Возникла необходимость использования Can шины в проекте на Cyclone4, я почему-то был уверен, что есть IP Core Can<->Avalon-MM(Avalon-ST), но такой коры в свободном доступе нет может есть у кого рабочая IP Core Can<->Avalon-MM(Avalon-ST), чтобы можно было ее использовать в QSYS в связке с NIOS2? спасибо, буду рад любой помощи
  7. спасибо большое за ответ посмотрел электрику: на моем узле стоит микросхема KSZ8041TLI и резонатор ABM7-25.000MHZ-D2Y-T на стороннем узле стоит Ethernet switch KSZ8995MAI и резонатор ABM7-25.000MHZ-D2Y-T данное решение было принято до меня, я поднимаю только проект ПЛИС, но вот об этом резонаторе ABM7-25.000MHZ-D2Y-T и фирме, что его производит, слышу впервые, по его техническим характеристикам точность выходит +-30ppm, реально замерить не могу, т.к. сижу на карантине, как и вся страна... так же заметил по электрике, что рекомендовано к резонатору ставить кондеры 18пФ, а стоят 22пФ - может ли это влиять на стабильность клока? использовал ли кто-нибудь резонатор ABM7-25.000MHZ-D2Y-T в своих разработках, какие впечатления?
  8. Здравствуйте, уважаемые форумчане в своем проекте для обмена по Ethernet через оптику была поставлена микросхема KSZ8041TLI, которая работает на скорости 100 Мбит/c, в целом скорость небольшая, но вот при состыковке с другим модулем, на которой стоит другая оптика, скорость передачи существенно режется(если соединять 2 одинаковых моих модуля скорость 80 мбит\с, точно так же и со сторонним модулем, если соединить мой модуль и сторонний, то скорость около 7 мбит\с) из данных диаграмм получается следующее: Input setup time = 40 - 25 = 15ns ???Input hold time = 19ns??? Output setup time = 10ns output hold time = 0ns я не понимаю, как их этих диаграмм мне вычислить Input hold time, я взял пока минимальное Tod я решил поставить констрейны на данную микросхему, получились у меня они вот такие: #*********************** CLOCKS ************************** create_clock -period "25 MHz" -name enet0_rx_clk [get_ports {ETH0_RX_CLK}] create_clock -period "25 MHz" -name enet0_tx_clk [get_ports {ETH0_TX_CLK}] set IMD 15 set ImD 19 set OMD 10 set OmD 0 #************************* INPUT ************************* set_input_delay -add_delay -clock enet0_rx_clk -max $IMD [get_ports {ETH0_RX_DV ETH0_RX_ERR ETH0_RXD*}] set_input_delay -add_delay -clock enet0_rx_clk -min $ImD [get_ports {ETH0_RX_DV ETH0_RX_ERR ETH0_RXD*}] post_message -type info "Input Max Delay = $IMD" post_message -type info "Input Min Delay = $ImD" #************************ OUTPUT ************************* set_output_delay -add_delay -clock enet0_tx_clk -max $OMD [get_ports {ETH0_TX_EN ETH0_TXD*}] set_output_delay -add_delay -clock enet0_tx_clk -min $OmD [get_ports {ETH0_TX_EN ETH0_TXD*}] post_message -type info "Output Max Delay = $OMD" post_message -type info "Output Min Delay = $OmD" set_false_path -from * -to [get_ports {ETH0_RSTN}] у меня следующие вопросы: 1. правильно ли вычислены по данной диаграмме соответствующие задержки? 2. чему равна задержка Input hold time? 3. есть ли у кого пример sdc файла с констрейнами для данной микросхемы KSZ8041TLI ? спасибо, буду рад любой помощи
  9. пробовал сдвинуть фазу на 90 градусов для 2го интерфейса, но не помогло, так же объединяет не могли бы скинуть пример. как запрещать оптимизацию quartus для моего примера, пробовал вот так: wire eth0_pll_clk_2p5/* synthesis keep */; wire eth0_pll_clk_25/* synthesis keep */; wire eth0_pll_clk_125/* synthesis keep */; wire eth1_pll_clk_2p5/* synthesis keep */; wire eth1_pll_clk_25/* synthesis keep */; wire eth1_pll_clk_125/* synthesis keep */; wire eth2_pll_clk_2p5/* synthesis keep */; wire eth2_pll_clk_25/* synthesis keep */; wire eth2_pll_clk_125/* synthesis keep */; не помогло
  10. Ничем не отличаются, я хотел сделать независимые клоки для каждого из них, чтобы влезть по констрейнам для каждого
  11. Здравствуйте, уважаемые форумчане сейчас хочу запустить на своей плате 2 Ethernet, для этого планировал использовать 2 PLL, но Quartus их оптимизирует и сводит к одной и все клоки тянет от нее, тогда я попробовал сделать 1у PLL, но увеличил количество выходов с нее с 3х до 6и - Quartus и здесь сократил количество выходов с PLL с 6и до 3х, и относительно них вел цепи должно быть вот так(RTL Viewer): вместо этого Quartus приводит это вот к этому(Technology Map Viewer): вот кусок кода: wire eth0_pll_clk_2p5; wire eth0_pll_clk_25; wire eth0_pll_clk_125; wire eth1_pll_clk_2p5; wire eth1_pll_clk_25; wire eth1_pll_clk_125; wire eth2_pll_clk_2p5; wire eth2_pll_clk_25; wire eth2_pll_clk_125; eth_pll eth_pll_inst ( .rst ( !any_rst_n ) ,.refclk ( CLOCK_25_FPGA ) ,.outclk_0 ( eth0_pll_clk_2p5) ,.outclk_1 ( eth0_pll_clk_25) ,.outclk_2 ( eth0_pll_clk_125) ,.outclk_3 ( eth1_pll_clk_2p5) ,.outclk_4 ( eth1_pll_clk_25) ,.outclk_5 ( eth1_pll_clk_125) ,.outclk_6 ( eth2_pll_clk_2p5) ,.outclk_7 ( eth2_pll_clk_25) ,.outclk_8 ( eth2_pll_clk_125) ); //========================================================= `ifdef ENABLE_ETH1 wire eth1_mdio_oen; wire eth1_mdio_out; wire eth1_mode; wire eth1_ena_10; reg eth1_tx_clk; eth_altddio_out eth1_altddio_out_inst ( .aclr ( !any_rst_n ), .datain_h ( 1'b1 ), .datain_l ( 1'b0 ), .outclock ( eth1_tx_clk ), .dataout ( ETH1_GTX_CLK ) ); always @(*) begin if (any_rst_n == 1'b0) eth1_tx_clk <= 1'b0; else if (eth1_mode) eth1_tx_clk <= eth1_pll_clk_125;// GbE Mode = 125MHz clock else if(eth1_ena_10) eth1_tx_clk <= eth1_pll_clk_2p5;// 10Mb Mode = 2.5MHz clock else eth1_tx_clk <= eth1_pll_clk_25; // 100Mb Mode = 25MHz clock end assign ETH1_MDIO = ( !eth1_mdio_oen ) ? ( eth1_mdio_out ) : ( 1'bz ); assign ETH1_RSTN = !epcount[MSB-1]; `endif /*ENABLE_ETH1*/ //========================================================= `ifdef ENABLE_ETH2 wire eth2_mdio_oen; wire eth2_mdio_out; wire eth2_mode; wire eth2_ena_10; reg eth2_tx_clk; eth_altddio_out eth2_altddio_out_inst ( .aclr ( !any_rst_n ), .datain_h ( 1'b1 ), .datain_l ( 1'b0 ), .outclock ( eth2_tx_clk ), .dataout ( ETH2_GTX_CLK ) ); always @(*) begin if (any_rst_n == 1'b0) eth2_tx_clk <= 1'b0; else if (eth2_mode) eth2_tx_clk <= eth2_pll_clk_125;// GbE Mode = 125MHz clock else if(eth2_ena_10) eth2_tx_clk <= eth2_pll_clk_2p5;// 10Mb Mode = 2.5MHz clock else eth2_tx_clk <= eth2_pll_clk_25; // 100Mb Mode = 25MHz clock end assign ETH2_MDIO = ( !eth2_mdio_oen ) ? ( eth2_mdio_out ) : ( 1'bz ); assign ETH2_RSTN = !epcount[MSB-1]; `endif /*ENABLE_ETH2*/ как заставить Quartus сгенерировать то, что я хочу, т.е. либо 2 PLL, либо одну PLL с 6ю, а не 3мя выходами? спасибо, буду рад любой помощи
  12. Здравствуйте, уважаемые форумчане сейчас встрял вопрос о том, чтобы написать драйвер для моей карточки PCIE ->3 Ethernet удобнее всего это реализовать, если бы на PCIE видны были отдельно 3 различных устройства, а не одно, реализуется это через функции в настройках самой PCIE коры, которая доступна, если используешь PCIE кору под Avalon-ST, но вот под Avalon-MM такой возможности нет я уже реализовал PCIE-> 1 Ethernet, весь обмен внутри ПЛИС ведется через Avalon-MM есть ли возможность подстроить каким-либо образом данную кору PCIE Avalon-MM для реализации 3х устройств через функции и каким образом это сделать? или может есть написанная кора, которая делает из PCIE Avalon-ST выход на Avalon-MM(идентично тому, что выходит у коры PCIE Avalon-MM), чтобы не заниматься разбором и формированием пакета на Avalon-ST?
  13. пробовали насильно их переводить в юбунте на 1Гбит/с, через dmesg смотрели, линк поднимался(буквально на 1 сек), а потом сразу падал...
  14. Здравствуйте, уважаемые форумчане ситуация следующая: 1. есть проект на ПЛИС, который фактически реализует сетевую карту PCIE<->ETHERNET, использовалась IP Core Triple Speed Ethernet(TSE) для конфигурации MAC уровня, а так же для PHY стоит микросхема dp83867is 2. со стороны ПК стоит встроенная сетевуха Realtek GbE Family Controller 3. конфигурация MAC и PHY происходит через jtag master c помощью tcl скрипта, сейчас уже перешли через драйвер под linux через PCIE(были использованы стандартные средства altera для конфигурации PHY и MAC) на всех картах сетевых, к которым я пробовал подключать мою сетевую карту PCIE<->ETHERNET, поднимается линк на 10 и 100 Мбит/с пробовал поднять линк на 1000 Мбит/с (конечно, со стороны PHY), линк поднимается только, если комп вкл, но я остановил загрузку на конфигурации BIOS как только грузится Win10 или Ubuntu 16.04, линк на 1000 Мбит/с не поднимается, я пробовал ставить самые новые драйвера под Win10, но не помогло причем я пробовал на разных компах с разными сетевухами(встроенными и внешними, т.е. которые делают PCI<->ETHERNET), даже на ноутбуке, линка нет, но вот на сетевой карте TP-LINK TG-3468 линк на 1000 Мбит/с поднимается как на Win10, так и на Ubuntu 16.04 сталкивался ли кто-нибудь с такими проблемами по поднятию линка на 1000 Мбит/с? может есть идеи, где копать? пока пробовал только переустановку драйверов для сетевых карт, к которым подключался я(т.е. встроенные в материнку и внешние покупные) - не помогло
  15. огромное спасибо за ссылку на эту статью, там автором уже указываются трудности снятия с вывода altddio_out через сигналтаб кстати, нашел более подробное обсуждение на форуме интела: https://forums.intel.com/s/question/0D50P00003yyTLpSAM/altddioout-for-clock-output-of-chip я полагался в основном на сигналтаб и считал его безаговорочным и правдивым средством, чтобы понять, что реально происходит внутри проекта, а тут придется все таки осцилом вставать, что не так удобно... может есть все таки способ увидеть сигнал с altddio_out через сигналтаб на cyclone5? был ли у кого опыт? осталась тогда проблема с инициализацией mac уровня TSE в режиме rgmii
  16. спасибо, большое у меня RGMII, но относительно настройки вашей для SGMII через PCS регистры, у меня все сделано верно... я не смог победить пропуск eth_tx_clk через altddio_out и выдачу на выход ETH_GTX_CLK(у меня приложены в самом начале темы соответствующие файлы), все так же на выходе 0 моделсим тоже чушь показывал, пока eth_tx_clk не сделал регистром wire eth1_pll_clk_2p5; wire eth1_pll_clk_25; wire eth1_pll_clk_125; pll eth1_pll_inst ( .rst ( !any_rst_n ) ,.refclk ( CLOCK_25_FPGA ) ,.outclk_0 ( eth1_pll_clk_2p5 ) ,.outclk_1 ( eth1_pll_clk_25 ) ,.outclk_2 ( eth1_pll_clk_125 ) ,.outclk_3 ( ) ,.outclk_4 ( ) ); wire eth1_mdio_oen; wire eth1_mdio_out; wire eth1_mode; wire eth1_ena_10; reg eth1_tx_clk; eth_altddio_out eth1_altddio_out_inst ( .aclr ( !any_rst_n ), .datain_h ( 1'b1 ), .datain_l ( 1'b0 ), .outclock ( eth1_tx_clk ), .dataout ( ETH1_GTX_CLK ) ); always @(*) begin if (any_rst_n == 1'b0) eth1_tx_clk <= 1'b0; else if (eth1_mode) eth1_tx_clk <= eth1_pll_clk_125;// GbE Mode = 125MHz clock else if(eth1_ena_10) eth1_tx_clk <= eth1_pll_clk_2p5;// 10Mb Mode = 2.5MHz clock else eth1_tx_clk <= eth1_pll_clk_25; // 100Mb Mode = 25MHz clock end module eth_altddio_out ( aclr, datain_h, datain_l, outclock, dataout); input aclr; input [0:0] datain_h; input [0:0] datain_l; input outclock; output [0:0] dataout; wire [0:0] sub_wire0; wire [0:0] dataout = sub_wire0[0:0]; altddio_out ALTDDIO_OUT_component ( .aclr (aclr), .datain_h (datain_h), .datain_l (datain_l), .outclock (outclock), .dataout (sub_wire0), .aset (1'b0), .oe (1'b1), .oe_out (), .outclocken (1'b1), .sclr (1'b0), .sset (1'b0)); defparam ALTDDIO_OUT_component.extend_oe_disable = "OFF", ALTDDIO_OUT_component.intended_device_family = "Cyclone V", ALTDDIO_OUT_component.invert_output = "OFF", ALTDDIO_OUT_component.lpm_hint = "UNUSED", ALTDDIO_OUT_component.lpm_type = "altddio_out", ALTDDIO_OUT_component.oe_reg = "UNREGISTERED", ALTDDIO_OUT_component.power_up_high = "OFF", ALTDDIO_OUT_component.width = 1; endmodule
  17. сейчас прогнал IP Core TSE через Modelsim, переложил код tcl на systemverilog, увидел ту же картину - не уходит пакет с MAC уровня при передаче(данные на avalon-ST с присутствием StartOfPacket и EndOfPacket от mSGDMA в TSE вижу, а вот на TSE_TXD их нет, и сигнал TX_CTRL не выставляется) возможные причины: 1. неверный пакет 2. неверная инициализация MAC уровня есть ли у кого пример на Си (на любом языке) инициализации MAC уровня, а так же в текстовом виде, какой-нибудь пакет с CRC32, чтобы я мог его использовать как эталон, то не могли бы скинуть? спасибо, буду рад любой помощи
  18. так я брал исходники конфигурации под pciexpress, его поднял, перешел к ethernet, и его собирал уже сам, основываясь на примеры альтеры насчет ddio там идет объединение data_h,data_l по клоку, причем я на rtl вижу в Quartus, что сгенерировано все верно, но нет сигнала на выходе
  19. я именно 1й вариант использовал, проверил через сайты из 2го пункта - показывает верный пакет спасибо может есть у кого собранный РАБОЧИЙ проект с TSE на RGMII, работающий на 1 Гбит/с? и конфигурация Mac и PHY, написанная на Си или tcl?
  20. я хотел бы сначала разобраться вот с этим: не выходит сигнал клока на пин ETH1_GTX_CLK, хотя сигнал eth1_tx_clk присутствует(см eth1.stp), но вот буфер altddio_out не выдает сдвинутый на 90 градусов клок, перегенерация данного элемента через MegaWithard не помогла(код altddio_out.rar) просто здесь я не понимаю, почему не генерируется клок сдвинутый на 90 градусов, во всех примерах, в том числе и у Vadimuzzz, стоит именно такая генерация сдвинутого клока, но не работает... можно вывести с pll клоки сдвинутые на 90 градусов, но как-то не хотелось бы задействовать для такой задачи еще одну pll кстати, может кто-нибудь скинет верный udp пакет(в виде потока байт), чтобы я только подставил свои мак адреса, чтобы хоть быть уверенным, что в самих данных нет ошибки?
  21. Здравствуйте, уважаемые форумчане я использовал в своих проектах TSE очень давно, причем осуществлял конфигурацию MAC и PHY через NicheStack, при этом делал этот проект я на прошлой работе, и сам проект там и оставил... а сейчас пришлось самому настраивать и конфигурировать, как говорится ручками без процессора и посторонней помощи... я подключил jtag_master и командами TCL попытался настроить и PHY и MAC, послать тестовый пакет на планируется реализовать плату, в которой 1 PCIE4x и 3 Ethernet(1 работает по MII, остальные 2 по RGMII) я решил начать с отладки Ethernet, поэтому сейчас у меня собран тестовый проект, где есть 1 Ethernet(eth1,микросхема PHY стоит DP83867IS), который работает в RGMII взял ПЛИС 5CGXFC5C6F23I7 файлы констрейнов (sdc.rar), топовый файл с проектами qsys(top_and_qsys.rar), а так же tcl скрипты конфигурации, генерации пакета и лог вывода отработки консоли(sc_tcl.rar) я прикрепил так же прикрепил функциональную схему, сейчас реализован обмен только FAKE_DDR и ETHERNET1(с mSGDMA контроллерами) я сгенерировал UDP пакет через packEth1.6Win32, отследил его в WireShark, преобразовал к байтовому потоку(каждый байт имеет 2 символа, т.е. 0x0 = 00) и записал в файл test_packet.txt(см архив sc_tcl.rar) программа на tcl реализует следующее: 1. инициализируется PHY 2. инициализируется MAC 3. считывается пакет из test_packet.txt и записывается в FAKE_DDR 4. запускается mSGDMA_TX контроллер вычитывает данные из FAKE_DDR и передает на сторону Ethernet1(передаю 2 пакета) 5. считываются счетчики бьюсь уже неделю, сейчас вижу следующие проблемы: 1. не выходит сигнал клока на пин ETH1_GTX_CLK, хотя сигнал eth1_tx_clk присутствует(см eth1.stp), но вот буфер altddio_out не выдает сдвинутый на 90 градусов клок, перегенерация данного элемента через MegaWithard не помогла(код altddio_out.rar) 2. через signaltab пакеты по avalon-ST передаются IP Core Triple-Speed Ethernet(файл eth1.stp), но сигнал ETH1_TX_CTRL не выставляется в 1(пробовал ловить по его фронту/спаду, ничего не происходит, даже когда соединял напрямую клок eth1_tx_clk с ETH1_GTX_CLK, хотя это я сделал на всякий случай) 3. при приеме данных я вижу генерацию сигналов ETH1_RX_CTRL и ETH1_RX_CLK и данных со стороны PHY, когда генерирую пакет через packEth1.6Win32, но вот в самой IP Core Triple-Speed Ethernet счетчики не изменяются первое, на что я думал, это то, что прием и передача со стороны MAC запрещены, но я специально вывел командный регистр при инициализации и при передаче данных, там биты TX_EN и RX_EN = 1 второе - это ошибочный пакет, т.е. то, что я передаю на сторону PHY IP Core Triple-Speed Ethernet просто не пропускает, но почему тогда счетчики TX изменяются заметил еще одну вещь, что когда отключаешь Auto-Negotiation в PHY( set PHY_ENABLE_AN 0; # Enable PHY Auto-Negotiation), то Link устанавливается только на 10 Мбит, при этом 2 пакета доходят, но они искажены, длина другая, но примерно такая же, и я не понимаю как доходят вообще до WireShar они, т.к. я по-прежнему не вижу на сигналтабе выставление ETH1_TX_CTRL, а так же ETH1_GTX_CLK(пробовал и с ним, т.е. когда подключал напрямую ETH1_GTX_CLK, данные теже) приходят вот такие данные, причем именно 2 пакета, как я и отсылал(log tcl консоли log_phy_not_AN.txt): 510588988d109901881041000800000891800900d88d18c10144050800440550d88014c10548c0915455555555050000000000000000 Frame 2231: 54 bytes on wire (432 bits), 54 bytes captured (432 bits) on interface \Device\NPF_{DBA6184A-474B-4FB8-951A-BF3CAE942850}, id 0 Interface id: 0 (\Device\NPF_{DBA6184A-474B-4FB8-951A-BF3CAE942850}) Interface name: \Device\NPF_{DBA6184A-474B-4FB8-951A-BF3CAE942850} Interface description: Ethernet 2 Encapsulation type: Ethernet (1) Arrival Time: Feb 7, 2020 12:53:58.251805000 RTZ 2 (зима) [Time shift for this packet: 0.000000000 seconds] Epoch Time: 1581069238.251805000 seconds [Time delta from previous captured frame: 0.227873000 seconds] [Time delta from previous displayed frame: 0.227873000 seconds] [Time since reference or first frame: 12622.153244000 seconds] Frame Number: 2231 Frame Length: 54 bytes (432 bits) Capture Length: 54 bytes (432 bits) [Frame is marked: False] [Frame is ignored: False] [Protocols in frame: eth:ethertype:ip] [Coloring Rule Name: Broadcast] [Coloring Rule String: eth[0] & 1] Ethernet II, Src: 99:01:88:10:41:00 (99:01:88:10:41:00), Dst: 51:05:88:98:8d:10 (51:05:88:98:8d:10) Destination: 51:05:88:98:8d:10 (51:05:88:98:8d:10) Address: 51:05:88:98:8d:10 (51:05:88:98:8d:10) .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default) .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast) Source: 99:01:88:10:41:00 (99:01:88:10:41:00) [Expert Info (Warning/Protocol): Source MAC must not be a group address: IEEE 802.3-2002, Section 3.2.3(b)] Address: 99:01:88:10:41:00 (99:01:88:10:41:00) .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default) .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast) Type: IPv4 (0x0800) Internet Protocol Version 4 0000 .... = Version: 0 [Expert Info (Error/Protocol): Bogus IPv4 version] [Bogus IPv4 version] [Severity level: Error] [Group: Protocol] при этом отсылал я: 503eaa0415f711223344556608004500002112340100ff112738c0a80005c0a8000a1f9022b8000d3cd6aaaaaaaaaa00000000000000000000000000 пока не знаю, где копать, надеюсь вы подскажете спасибо, буду рад любой помощи sdc.rar top_and_qsys.rar Сетевая карта(Функциональная схема).pdf eth1.stp altddio_out.rar log_phy_not_AN.txt
  22. я просмотрел темы, но не смог найти ее, не могли бы кинуть ссылку, просто проблема стоит сейчас очень остро
  23. просто я так же в своих разработках хочу использовать NIOS2, а тут вообще будет огромный геморой с открытостью кода
  24. а альтеровскую никак не разлочить??? там вытащены Avalon-ST и Avalon-MM, мне их очень удобно использовать
×
×
  • Создать...