воот...
M_AXI_DC, M_AXI_IC - это шина данных и шина инструкций через кеш. Через нее можно получить данные только из кешируемой области.
1. Надо в настройках проца проверить что вся ваша DDR память входит в кешируемую область. Потому что иначе, если инструкция или данные для нее будут лежать в памяти не входящей в кешируемую область микроблайз полезет к ним через шины M_AXI_IP, M_AXI_DP а они у вас не подключены.
это в адванцед настройках микроблайза, в закладке кэш.
2. Если вы решите использовать кэш, то уже в SDK
надо вызывать его сброс перед включением, либо не включать на первых парах ваще
Код
Xil_DCacheInvalidate(); //сбрасываем кэш перед включением
Xil_DCacheEnable(); //включаем кэш данных,
Xil_ICacheInvalidate(); //сбрасываем кэш перед включением
Xil_ICacheEnable(); //включаем кэш инструкций
тесты памяти надо конечно без включенного кеша делать и программа должна запускаться из BRAM иначе она затрет саму себя когда будет память заполнять.
по клокам читайте UG388, это на контроллер памяти 2 раза тык тык, и внизу есть хелп к нему. ТАм есть 3 чаптер.
что-то я уже стал забывать точно где я прочел что нужен отдельный PLL, но где-то было. Без него под нагревом DDR начинало сбоить и плата начинала виснуть. Я добавлял всяких регистров на шины и прочее, это немного помогало, но радикально помогло завести клоки DDR от своего генератора, у меня в проекте их 2, один для проца и периферии, другой только для DDR. и вот такой констраин
INST "clock_generator_ddr/clock_generator_ddr/PLL0_INST/Using_PLL_ADV.PLL_ADV_inst" LOC = "PLL_ADV_X0Y1";
который зажимает на использование именно выбранный генератор.