Niyaz 0 1 марта, 2021 Опубликовано 1 марта, 2021 · Жалоба Здравствуйте, использую готовый "DMA Controller Core" для передачи из sdram в onchip, для дальнейшей обработки данных ниосом. Напрямую ниосом с sdram не получается прочитать данные с помощью iord или memcpy (после чтения данные портятся в sdram, а запись iowr идет нормально, sdram контроллер кастомный, но он работает правильно), поэтому приходиться использовать дма. Вроде все работет(использую burst передачу). Сначала пишу в sdram значение от 1 до 800(с помощью iowr), потом считываю из него с помощью дма. Проблема в том что первые четыре слова(32 бит режим) всегда нулевые. то есть если длина передачи 64, то первые четыре будет 0, а остальные нормально. У кого нибудь было такое или нормально работало в таком режиме? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R6L-025 1 11 марта, 2021 Опубликовано 11 марта, 2021 · Жалоба У Вас контроллер SDRAM предоставляет адресное пространство для IO операций? Т.е. выглядит для NIOS как кусок обычной памяти? SignalTap'ом смотрели что при начале чтения/записи с контроллером все хорошо? iowr/iord должны работать, а вот memcpy лучше не использовать. Если в Nios начать вручную разыменовывать указатели указывающий на IO память... ничего хорошего не будет. Пробовал) Поэтому memcpy может не работать, если он реализован как обычное копирование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Niyaz 0 12 марта, 2021 Опубликовано 12 марта, 2021 (изменено) · Жалоба Здравствуйте, да для ниоса как обычная память в system.h есть адресс, iowr работает четко, а iord тоже работает но после ее применения данные в sdram повреждаются а готовый sdram контролллер в qsys он какой то простенький у него нету поддержки brust передачи, с ней вообще не работает(у меня же еще фрейм буффер, который пишет в тот же sdram и считывает одновременно) разобрался с dma, приходится его использовать что бы писать имеенно с sdram в onchip(а оттуда ниосом считывать) Изменено 12 марта, 2021 пользователем Niyaz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R6L-025 1 12 марта, 2021 Опубликовано 12 марта, 2021 · Жалоба Ну, если данные повреждаются - значит есть факт их изменения. Повесьте в SignalTap триггер на сигнал записи, и выполните чтение. Ну и надо убедится что это не контроллера проблема, а сам проц шлет команду на изменение данных. Если так - тогда уже вопрос к Nios. С SDRAM не работал, но вообще с Nios довольно легко можно вляпаться в неопределенное поведение, и весьма сложно понять что происходит. У коллеги так была проблема - он не проверял что вернул malloc, и выполнял с указателем какие-то действия. Защиты памяти в nios нет, и в результате в системе происходила какая-то магия, которая вообще никак не указывала на проблемы с выделением памяти. Попробуйте исключить из кода все что не касается чтения/записи. Может проблема где-то в стороне Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 2 12 марта, 2021 Опубликовано 12 марта, 2021 · Жалоба давно это было, может что-то путаю, но по моему эта проблема из-за кэша Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Niyaz 0 13 марта, 2021 Опубликовано 13 марта, 2021 (изменено) · Жалоба 10 hours ago, gridinp said: давно это было, может что-то путаю, но по моему эта проблема из-за кэша Здравствуйте, а что с ним надо сделать? убрать? Изменено 13 марта, 2021 пользователем Niyaz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 2 13 марта, 2021 Опубликовано 13 марта, 2021 · Жалоба Можно убрать кэш временно для проверки, нашёл у себя в программе вызов функции для сброса кэша: alt_dcache_flush_no_writeback Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться