doom13 0 January 20, 2015 Posted January 20, 2015 · Report post С Вашим примером всё понятно, но тут всё немного не так. Альтеровский макрос гарантирует, что запись идёт мимо кэша, т.е. помимо записи по указателю должно быть что-то ещё. Макрос максимум могу посмотреть до __builtin_stwio(void *, unsigned int), а это ни есть запись по указателю. http://www.altera.com/literature/hb/nios2/n2sw_nii52007.pdf для данных есть такой метод как Bit-31 Cache Bypass для Nios II/f To Golikov A. вот это правильный документ, можете просмотреть, там есть описание того, что использование макросов из BSP позволяет обойти кэш о чём и шла речь. Т.е. это не равнозначно обращению к регистру через указатель. Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 January 20, 2015 Posted January 20, 2015 · Report post ну пипец ваша альтера:).... этож надо было придумать отдельные инструкции записи мимо кеша. Так за этим еще следить надо чтобы кеш был всегда синхронен с памятью под ним... а вот явно указано Declaring a C pointer volatile does not make pointer accesses bypass the data cache. The volatile keyword merely prevents the compiler from optimizing out accesses using the pointer. This volatile behavior is different from the methodology for the first-generation Nios processor. что срали они на понятие изменяемый%) и просто оптимизацию отключают и рады) Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 January 20, 2015 Posted January 20, 2015 · Report post ну пипец ваша альтера:).... этож надо было придумать отдельные инструкции записи мимо кеша. Так за этим еще следить надо чтобы кеш был всегда синхронен с памятью под ним... т.е. вся дискуссия была для того, чтобы Вы сказали, что Альтера == дураки? смелое заявление Quote Share this post Link to post Share on other sites More sharing options...
x66 0 January 20, 2015 Posted January 20, 2015 · Report post Вот перевод http://www.naliwator.narod.ru/N2swHb9.pdf Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 January 20, 2015 Posted January 20, 2015 · Report post т.е. вся дискуссия была для того, чтобы Вы сказали, что Альтера == дураки? смелое заявление я сказал пипец ваша альтера, дураки ли они не знаю... мне дисскусия была полезна, я теперь знаю что волатаил с альтерой не поможет и что у нее спец команды, и что перифирия в кеше (последние не 100% но косвенно так). А вам не знаю... Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 January 20, 2015 Posted January 20, 2015 · Report post я сказал пипец ваша альтера, дураки ли они не знаю... мне дисскусия была полезна, я теперь знаю что волатаил с альтерой не поможет и что у нее спец команды, и что перифирия в кеше (последние не 100% но косвенно так). А вам не знаю... Хороший подход. Не зная, как оно устроено, Вы утверждали обратное, советовали не вводить человека в заблуждение, потом сказали - "узнал много нового" Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 January 20, 2015 Posted January 20, 2015 · Report post не надо передергивать я говорил что никакой магии нет, и что любой макрос может быть заменен конструкциями С языка, потому что в конечном итоге он записан при помощи их. А также я говорил что иногда есть выгода от прямого обращения без макроса. И даже кешированные регистры можно менять через указатель если хочется, просто в конце задания режима надо дернуть слить кеш! Ну в целом это не важно хихикайте дальше;) Quote Share this post Link to post Share on other sites More sharing options...
x66 0 January 23, 2015 Posted January 23, 2015 · Report post Возник еще такой вопрос: во время переключения DDR2 с чтения на запись и наоборот имеются тайминги, и как их учесть программно, т.е. у меня есть постоянно приходящие данные, которые записываются в DDR2, в нужные моменты времени эти данные считываются из DDR2, и хочу узнать можно ли программно отследить данные в этот маленький момент времени между переключениями ОЗУ. Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 January 23, 2015 Posted January 23, 2015 · Report post Возник еще такой вопрос: во время переключения DDR2 с чтения на запись и наоборот имеются тайминги, и как их учесть программно, т.е. у меня есть постоянно приходящие данные, которые записываются в DDR2, в нужные моменты времени эти данные считываются из DDR2, и хочу узнать можно ли программно отследить данные в этот маленький момент времени между переключениями ОЗУ. Для программы Nios у Вас будет что-то типа memcpy() или цикл, "никаких маленьких моментов времени тут нет". Если хотите разгрузить процессор на время записи/чтения данных - используйте одно из ядер DMA/SgDMA/mSgDMA. Quote Share this post Link to post Share on other sites More sharing options...
x66 0 January 23, 2015 Posted January 23, 2015 · Report post Для программы Nios у Вас будет что-то типа memcpy() или цикл, "никаких маленьких моментов времени тут нет". Если хотите разгрузить процессор на время записи/чтения данных - используйте одно из ядер DMA/SgDMA/mSgDMA. я планировал на время чтения из DDR2 производить запись входных данных в on-chip memory. Как я понял программно отследить данные на время таймингов переключения не получится Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 January 23, 2015 Posted January 23, 2015 · Report post я планировал на время чтения из DDR2 производить запись входных данных в on-chip memory. Как я понял программно отследить данные на время таймингов переключения не получится Смотрите в направленни описанных ядер, поможет одновременно читать/писать данные и использовать процессор. Quote Share this post Link to post Share on other sites More sharing options...
x66 0 January 23, 2015 Posted January 23, 2015 · Report post Смотрите в направленни описанных ядер, поможет одновременно читать/писать данные и использовать процессор. Проблема DDR2 памяти в том, что она работает либо на чтение либо на запись. Данные приходят постоянно, а чтение происходит по запросу пользователя, т.е. может быть и раз в минуту, час. Объем данных для чтения 1.2 Мбайт. Поэтому сразу если выводить данные, то накопятся входные данные, а их терять нельзя. Решил использовать два on-chip memory и по кусочкам выводить эти 1.2Мбайта данных. Может есть какой то другой способ реализации? Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 January 23, 2015 Posted January 23, 2015 · Report post Проблема DDR2 памяти в том, что она работает либо на чтение либо на запись. Данные приходят постоянно, а чтение происходит по запросу пользователя, т.е. может быть и раз в минуту, час. Объем данных для чтения 1.2 Мбайт. Поэтому сразу если выводить данные, то накопятся входные данные, а их терять нельзя. Решил использовать два on-chip memory и по кусочкам выводить эти 1.2Мбайта данных. Может есть какой то другой способ реализации? Тут ещё про шину avalon почитайте, если два устройства будут стучаться к DDR, она должна будет разрулить время доступа для каждого из устройств. Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 January 23, 2015 Posted January 23, 2015 · Report post Вам FIFO надо. Данные поступают в FIFO а оттуда в DDR, через какой либо DMA контроллер. Если данные нужны кому-то еще вы их читаете из ДДР, это приостанавливает DMA контроллер, и данные на время задержек падают в FIFO. Ничего руками разруливать не надо, потому что проц не долбиться в шину постоянно (хотя может НИОС опять по чудному сделан, но надеюсь что нет). Вот и пока проц делает что-то еще, ДМА сам займет шину и успеет положить еще кусочек. Систему надо строить именно на таком принципе. Кстати ДДР контроллер разьве изначально не 2 портовый? Вам надо перейти на следующий уровень абстракции, надо забыть про то какая у вас память, это забота контроллера, вы же не собираетесь еще сами следить за тем вовремя ли он подает ревреши, я надеюсь%)... Так же забота контроллера обеспечивать доступ к памяти по нескольким портам, во всяком случае у ксалинкс контроллер точно несколько портовый с арбитражем, наверяка у вас тоже, если это не так, то надо делать свой контроллер - арбитр, но не лезть к памяти напрямую, это дело контроллера памяти. Обратите внимание что контроллер памяти ДДР - это не что-то собранное из вентилей ПЛИС, а отдельная область, готовый блок, слишком там все по таймингам не просто. Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 January 23, 2015 Posted January 23, 2015 · Report post Обратите внимание что контроллер памяти ДДР - это не что-то собранное из вентилей ПЛИС, а отдельная область, готовый блок, слишком там все по таймингам не просто. Это уже от ПЛИС зависит, может быть и на логике собран. Quote Share this post Link to post Share on other sites More sharing options...