Jump to content

    

Lutovid

Свой
  • Content Count

    131
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Lutovid

  • Rank
    Частый гость
  • Birthday 05/17/1992

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Москва

Recent Profile Visitors

1067 profile views
  1. Довольно сильные изменения были в 18 версии. Изменился интерфейс некоторых ядер, версия lwip другая у микроблэйза - переход приведет к частичному рефакторингу разных ядер и займет время. пи-блоки не использую, ддр вставил просто на блок дизайн и использую дефолтные настройки, которые предлагаются для моей отладочной платы(vcu108). Более старые версии неадекватно разводят некоторые модули - тот же МИГ - не корректно оценивает тайминг - инфа подтвержденная дистрибьютором. Или речь идет о том что можно старые ядра не обновлять до актуальных и разводить? свои п блоки я не использую(не констрейнчу целенаправленно в каком блоке разводить), про ддр - я уточнил - "Блок ддр ксайлинкс использует 6 дсп и это не самый тяжелый блок. ". 306 и 412 - мои ядра.
  2. Всем привет! Никак не пойму как трактовать ошибку, появившуюся после добавления нового блока. Использую вивадо 17.1 Вот моя раскладка(не особо информативная картинка, наверное,но пусть будет - ниже поясню, что хотел сказать) после синтеза, а на этапе плэйса вываливается [Place 30-859] Some DSP area constraints are over utilized. 1 or more DSP failed to place. The unplaced DSP are constrained as below: (listing maximum of 20 BRAMs per constraint) Area constraint: /ddr_memory/ddr4_1/inst/u_ddr4_mem_intfc/u_ddr_cal_riu/mcs0/inst/microblaze_I/U0/MicroBlaze_Core_I/Performance.Core/Data_Flow_I/MUL_Unit_I/Use_HW_MUL.Using_DSP48_Architectures.dsp_module_I1/Using_DSP48E1.DSP48E1_I1/Using_FPGA.DSP48E1_I1 Number of DSP required by this constraint: 727 Number of DSP available in this constraint region: 70 Utilization = 1038% Блок ддр ксайлинкс использует 6 дсп и это не самый тяжелый блок. Но больше всего меня интересует что это за констрэйнт регион и почему в нем только 70 дсп. В общем в кристалле 768 дсп из которых использую 727. Блок, который добавил, весит 24 дсп и представляет собой маленький фильтр, который сам по себе разводится без проблем. Еще следует добавить, что легкие усложнения уже имеющихся фильтров так же приводят к этой же ошибке. Глюк ли это среды?
  3. Так тут разговор про фул стек или нет? Фул хардвер стек? или с использованием контроллера?
  4. Большое спасибо! Действительно дело в этом, надо будет почитать что это за пины и зачем их отдельно задавать...
  5. Извините за мою непонятливость, я уже читал про них в мануале. Написано: Multiple bitstreams can be stored in the linear BPI flash memory. The two most significant address bits (A25, A24) of the flash memory are connected to DIP switch SW16 positions 1 and 2, respectively, and to the bank 65 RS1 and RS0 pins of the FPGA. By placing valid bitstreams at different offset addresses in the flash memory, various bitstreams can be selected to configure the FPGA by appropriately setting the DIP switch SW16. Я не хочу переключать свичами адрес старта, я хочу запустить вторую прошивку через hwicap по адресу, который задам. Поэтому я выставил свич в 0 позицию(те переключатели, которые отвечают за адрес). А M вектор выставил в мастер BPI Видимо я опять чего-то не учел...
  6. Всем спасибо, запись заработала нормально! Правда есть еще 1 вопрос. Решил попробоватьь сконфигурировать флешку с двумя прошивами. Настройки выставил следующие: Размеры прошив 12.3 МБ и 29.7 МБ соответственно. то есть во флешке по адресу 0x1080000 (c учетом удвоения адреса) будет лежать вторая прошива - это в хексредакторе я и наблюдал. Общий размер итоговой прошивы 47МБ Флешка 128МБ так что все вроде бы ок. Но в результате заливки через джтаг если делать верификацию - она фэйлится: Performing Erase Operation... Erase Operation successful. Performing Program and Verify Operations... Program/Verify Operation failed. Byte 16777216 does not match (FF != 20) ERROR: [Labtools 27-3144] Invalid option: Byte 16777216 does not match (FF != 20) program_hw_cfgmem: Time (s): cpu = 00:00:16 ; elapsed = 00:06:06 . Memory (MB): peak = 7032.930 ; gain = 0.000 ; free physical = 13965 ; free virtual = 55011 ERROR: [Common 17-39] 'program_hw_cfgmem' failed due to earlier errors. В чем может быть проблема? Подскажите пожалуйста
  7. Да, опечатался Про объяснение понял, но как воспользоваться этим - не понятно - я же не храню информацию о том что после стирания (выставили 0xFF) я записал 0x0F, а следовательно могу записать 0x0A например. Но спасибо за информацию, я этого не знал. Я экспериментировал с указанным кодом и если выставить стирание не 256кбайт, а 1024, то пишет он все равно первые 256, а дальше зависает. Но скорее всего это опять моя невнимательность и где-то допущена ошибка. Хотя мне хватает режима стирания 256 и его записи.
  8. Огромное спасибо! не углядел
  9. int bpi_program_flash_user_data(u32 StartAddr,u32 BytesNumber, u8* DataStart) { u32 tic; XTmrCtr_Enable(XPAR_TMRCTR_0_BASEADDR, 1); int Status=XST_SUCCESS; int i; FileByteCount = BytesNumber; NoOfblockperPartition =0; NoOf1024Packets =0; for(i=0; i<BytesNumber; i++) { WriteBuffer[i] = *(DataStart+i); } if (NoOf1024Packets==0) { tic = XTmrCtr_mGetTimerCounterReg(XPAR_TMRCTR_0_BASEADDR,1); Status = bpi_flash_erase_1024(StartAddr, BytesNumber); if(Status != XST_SUCCESS) { return XST_FAILURE; } NoOfblockperPartition++; tic = XTmrCtr_mGetTimerCounterReg(XPAR_TMRCTR_0_BASEADDR,1)-tic; xil_printf("erase time = %d\n\r", tic); } tic = XTmrCtr_mGetTimerCounterReg(XPAR_TMRCTR_0_BASEADDR,1); Status = bpiFlashWrite_1024(StartAddr, BytesNumber); if(Status != XST_SUCCESS) { return XST_FAILURE; } else { NoOf1024Packets++; if (NoOf1024Packets ==256) { NoOf1024Packets=0; } } tic = XTmrCtr_mGetTimerCounterReg(XPAR_TMRCTR_0_BASEADDR,1)-tic; xil_printf("write time = %d\n\r", tic); XTmrCtr_Disable(XPAR_TMRCTR_0_BASEADDR, 1); return XST_SUCCESS; } модифицировал код. В итоге: erase time = 84861670 write time = 150483 erase time = 87956353 write time = 150430 erase time = 87231692 write time = 150863 erase time = 88019450 write time = 148818 erase time = 87290593 write time = 149747 erase time = 92611360 write time = 149437 erase time = 88054675 write time = 154769 erase time = 88052405 write time = 148445 Иными словами очистка 0.7 секукнды, запись 1.2 микросекунды Но на сколько я знаю перед записью нужно обязательно очищать. Я ошибаюсь? Я понимаю, что скорость не будет высокой, но через джтаг пишется-то прошива во флеш быстрее, а учитывая что я хочу записывать 32 мегабайта - я поседею, пока это все писаться будет.
  10. Возникла новая проблема с этой темой связанная, подскажите кто-нибудь, пожалуйста Собрал проект по примеру https://www.xilinx.com/support/documentation/application_notes/xapp1282-us-post-cnfg-nor-axi-emp-ip.pdf Запись/чтение работает, пишу по 1024 байта. НО запись этого блока занимает 0.7 секунд Вот код си int bpi_program_flash_user_data(u32 StartAddr,u32 BytesNumber, u8* DataStart) { u32 tic; XTmrCtr_Enable(XPAR_TMRCTR_0_BASEADDR, 1); tic = XTmrCtr_mGetTimerCounterReg(XPAR_TMRCTR_0_BASEADDR,1); xil_printf("timer INIT\n\r"); int Status=XST_SUCCESS; int i; FileByteCount = BytesNumber; NoOfblockperPartition =0; NoOf1024Packets =0; for(i=0; i<BytesNumber; i++) { WriteBuffer[i] = *(DataStart+i); } if (NoOf1024Packets==0) { Status = bpi_flash_erase_1024(StartAddr, BytesNumber); if(Status != XST_SUCCESS) { return XST_FAILURE; } NoOfblockperPartition++; } Status = bpiFlashWrite_1024(StartAddr, BytesNumber); if(Status != XST_SUCCESS) { return XST_FAILURE; } else { NoOf1024Packets++; if (NoOf1024Packets ==256) { NoOf1024Packets=0; } } tic = XTmrCtr_mGetTimerCounterReg(XPAR_TMRCTR_0_BASEADDR,1)-tic; xil_printf("timer = %d", tic); XTmrCtr_Disable(XPAR_TMRCTR_0_BASEADDR, 1); return XST_SUCCESS; } В консоли: timer INIT timer = 478694timer INIT timer = 95275505timer INIT timer = 95351562timer INIT timer = 87752350timer INIT timer = 93063388timer INIT timer = 87836049timer INIT timer = 93870938timer INIT timer = 90060920timer INIT timer = 86285611timer INIT timer = 93038591timer INIT timer = 93885447timer INIT timer = 87073618timer INIT timer = 88577868 тактовая счетчика 125МГц. вот и получается, что каждые 1024 байта пишутся около секунды... Это уж очень дофига. Я полагаю< что можно подстроить скорость в emc, но пока не понял что менять можно, а что нет - так как от примера долеко не отходил. Подскажите пожалуйста как победить проблему? Может вообще дело в микроблейзе и emc не надо копать? Я прикрепил скрин параметров emc - то же самое, что в примере.
  11. Спасибо, это я уже на форуме ксайлинкса нашел - это решило другую проблемы
  12. Совпадают, я уже заметил такой момент - если добавить чипскоуп на emc в новой версии, то все начинает работать, с времянкой все ок... что-то видимо в примере недоконстрейнчено или оптимизируется без скоупа
  13. Нашел вот такой крутой пример http://www.xilinx.com/support/documentation/application_notes/xapp1282-us-post-cnfg-nor-axi-emp-ip.pdf Хочется с ним досконально разобраться, но возникла проблема - на вивадо 16.1(на которой написан пример) все работает, а при переходе к 17.1(на которой я работаю в основном) стандартная библиотечная функция XFlash_Initialize возвращает ошибку XFLASH_CFI_QUERY_ERROR. Я попробовал залить софт из sdk 17.1 в хард старой версии - все работает - то есть дело не в обновлении библиотек, как я понимаю. Апгрейд лог вроде ничего критичного не выдает по части emc(прикрепил файл). Адреса после апгрейда все сохранились старые. Поискал на форуме ксайлинкса проблему - не нашел. Подскажите пожалуйста, сталкивался кто с такой проблемой? ip_upgrade.log
  14. я имел в виду совпадает ли dst UDP пакета и src pause frame. Если да, то пока идей нет