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

nios ii dma (memory to memory)

Здравствуйте, использую готовый "DMA Controller Core" для передачи из sdram в onchip, для дальнейшей обработки данных ниосом. Напрямую ниосом с sdram не получается прочитать данные с помощью iord или memcpy (после чтения данные портятся в sdram, а запись iowr идет нормально, sdram контроллер кастомный, но он работает правильно), поэтому приходиться использовать дма. Вроде все работет(использую burst передачу). Сначала пишу в sdram значение от 1 до 800(с помощью iowr), потом считываю из него с помощью дма. Проблема в том что первые четыре слова(32 бит режим) всегда нулевые. то есть если длина передачи 64, то первые четыре будет 0, а остальные нормально. У кого нибудь было такое или нормально работало в таком режиме?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У Вас контроллер SDRAM предоставляет адресное пространство для IO операций? Т.е. выглядит для NIOS как кусок обычной памяти? SignalTap'ом смотрели что при начале чтения/записи с контроллером все хорошо? iowr/iord должны работать, а вот memcpy лучше не использовать. Если в Nios начать вручную разыменовывать указатели указывающий на IO память... ничего хорошего не будет. Пробовал) Поэтому memcpy может не работать, если он реализован как обычное копирование.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, да для ниоса как обычная память в system.h есть адресс, iowr работает четко, а iord тоже работает но после ее применения данные в sdram повреждаются

а готовый sdram контролллер в qsys он какой то простенький у него нету поддержки brust передачи, с ней вообще не работает(у меня же еще фрейм буффер, который пишет в тот же sdram и считывает одновременно)

разобрался с dma, приходится его использовать что бы писать имеенно с sdram в onchip(а оттуда ниосом считывать)

Изменено пользователем Niyaz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, если данные повреждаются - значит есть факт их изменения. Повесьте в SignalTap триггер на сигнал записи, и выполните чтение. Ну и надо убедится что это не контроллера проблема, а сам проц шлет команду на изменение данных. Если так - тогда уже вопрос к Nios. С SDRAM не работал, но вообще с Nios довольно легко можно вляпаться в неопределенное поведение, и весьма сложно понять что происходит. У коллеги так была проблема - он не проверял что вернул malloc, и выполнял с указателем какие-то действия. Защиты памяти в nios нет, и в результате в системе происходила какая-то магия, которая вообще никак не указывала на проблемы с выделением памяти. Попробуйте исключить из кода все что не касается чтения/записи. Может проблема где-то в стороне

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

давно это было, может что-то путаю, но по моему эта проблема из-за кэша

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, gridinp said:

давно это было, может что-то путаю, но по моему эта проблема из-за кэша

Здравствуйте, а что с ним надо сделать? убрать?

Изменено пользователем Niyaz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно убрать кэш временно для проверки, нашёл у себя в программе вызов функции для сброса кэша: alt_dcache_flush_no_writeback

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...