denebopetukius 0 22 марта, 2009 Опубликовано 22 марта, 2009 · Жалоба в SDRAM загрузил небольшое приложение со стартового адреса 0x00000004 затем из самописанного загрузчика в L1 передал управление на адрес 0x00000004 приложение работает когда кэши отключены и работает в несколько раз быстрее когда включены кэши Instruction, DataA и режим сквозной записи (Write-Throw) при установке режима обратной записи (Write-Back) -приложение не работает кэши и их режимы включаю в меню менеджера проекта VDSP - enable Instr. и DataA caches DataB - не кэширую, так как понадобится инит-файл Вопрос - что надо сделать, чтобы приложение находящееся в SDRAM заработало после передачи на него управления по адресу 0x00000004 ? flush, flushinv, iflush , как ими пользоваться? напишите плиз фрагмент для моего случая :help добавлю: приложение не использует ДМА, работает с флагами Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 23 марта, 2009 Опубликовано 23 марта, 2009 · Жалоба из описания на BF понял, что нужно данные в кэше сбростить в саму SDRAM допустим адрес приемника(SDRAM): 0x00000004 адрес источника: &APPData количество байт 0x1000 фрагмент: ssync(); flush(0x00000004); ssync(); ни к чему не приводит - приложение не запускается. помогите плиз разобраться - как с кеша данных скинуть в память? в переводе chapter6.pdf написано, что полностью переводить кэш данных в недостоверное состояние можно путем сброса битов DMC[1:0] в регистре DMEM_CONTROL и с последующей их обратной установкой вопрос - будут ли данные перенесены из кеша данных в реальную память перед объявлением всего кеша недостоверным ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба пробовал отключать кеш данных в регистре DMEM_CONTROL битами DMC[1:0] затем копировал код в SDRAM потом обратной установил биты DMC[1:0] в DMEM_CONTROL также flush-ил в цикле: for(i=0;i<sizeof(appdata);i++) { *(u8*)(0x00000004+i)=appdata[i]; csync(); ssync(); flush(0x00000004+i) csync(); ssync(); } оба варианта заработали - приложение в SDRAM успешно старатнуло с кешем данных в W-Back режиме. как можно весь кеш целиком сбросить в память и нужно ли в моём случае? можно ли как-то оптимизировать вышеприведенный цикл? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба аууу... народ! вы где? :1111493779: неужели никто не игрался с кешами? или вопросы плохо задаю? в исходниках ulinux'а нашёл: ENTRY(_blackfin_dcache_flush_range) R2 = -32; R2 = R0 & R2; P0 = R2; P1 = R1; CSYNC; 1: FLUSH[P0++]; CC = P0 < P1(iu); IF CC JUMP 1b(bp); FLUSH[P0]; SSYNC; RTS; ENDPROC(_blackfin_dcache_flush_range) R0 - начальный адрес, R1 - конечный по ходу оно? :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Supernaut 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба Не могли бы вы выложить фрагмент с настройками кэша и передачей управления в SDRAM? Насколько я понимаю, после ресета внутренняя память L1 инструкций и данных настроена как SRAM (т. е. кэширование выключено). При этом лоадер выполняется в SRAM инструкций (L1 instruction memory). В Blackfin Processor Programming Reference сказано, что в этом режиме при попытке выполнить инструкцию из - пустой области инструкций L1, - области данных L1, - области MMR вырабатывается исключение. Я пробовал включить кэширование (пример взял из u-boot, там выполняются настройки CPLB и включаются кэши) - но после выполнения этих ф-ций перестали выполняться следующие за ними инструкции (вывод содержимого регистров IMEM_CONTROL, DMEM_CONTROL и переход в SDRAM). Помогите плиз, ибо я в отчаянии! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба Не могли бы вы выложить фрагмент с настройками кэша и передачей управления в SDRAM? настройка кешей происходит в загрузчике, который в L1 ничего вручную пока не пишу - в VDSP в менеджере проектов выбираем - использовать кеш данных/инструкций, кастомизировать таблицу(может что-нибудь поменять прийдется), политика записи кеша - WriteBack это все делается кликом мыши по чек-боксам :) передача управления происходит так: void (*program)(void) = (void (*)(void))(0x00000004); (*program)(); Где 0x0000004 - начальный адрес загруженного приложения в SDRAM Приложение пишется также в VDSP, тип файла ldr, не использовать файлы инициализации и ldr-хедер. использовать сплиттер - маска 29, формат hex hex формат перегоняем в bin (программой hex2bin.exe) Для приложения переправить ldf-файл - все секции которые ссылаются на L1 data,code, scratchpad тупо заменить на секцию SDRAM (к примеру bank0) cекция код должна быть ROM (а не RAM) всё это написано очень подробно в EE-239 в разделе Running from Flash via Bypass Mode там о том как заставить линковщик генерить "чистый" исполняемый файл если вас VDSP не устраивает скачайте EE-271 и файлик 5281628562547355432EE271v01.zip с сайта аналога. там как раз рассказывается/показывается как работать с кэшами Помогите плиз, ибо я в отчаянии! надеюсь, помог :) встречный вопрос: политика кеша write-through она ускоряет чтение данных и исполнение кода. запись происходит сквозь кеш в память, тоесть по записи выигрыша не даёт? write-back - кешируется ещё и при записи. вопрос - даст ли выигрыш в производительности кеширование write-back для кода/чтения данных? нужно ли кешировать data L1, code L1 ? где лучше разместить стек - в write-back SDRAM, cached L1 или в scratchpad ? где будет быстрее? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба нужно ли кешировать data L1, code L1 ? Зачем? :07: L1 и так работает на частоте ядра где лучше разместить стек - в write-back SDRAM, cached L1 или в scratchpad ? где будет быстрее? Не в SDRAM однозначно. Если хватит 4к под стек (мне до сих пор хватало) - тогда в scratchpad. Если мало - в некэшируемой L1. По скорости L1 и scratchpad одинаковы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Supernaut 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба встречный вопрос: политика кеша write-through она ускоряет чтение данных и исполнение кода. запись происходит сквозь кеш в память, тоесть по записи выигрыша не даёт? write-back - кешируется ещё и при записи. вопрос - даст ли выигрыш в производительности кеширование write-back для кода/чтения данных? Скорость при чтении не зависит от write-back/write-through - ведь содержимое памяти не изменяется. Другое дело при записи - write-back изменяет только содержимое кэша и ставит пометку об изменении, так что, по идее, должно быть быстрее, чем write-through. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться