03-23-2018 04:20 AM
I'm a newbie to develop embedded system based on vivado. I create a simple system as shown in the following diagram. When I complete the bit stream generation stage, and run a simple helloworld project on SDK. An error has occurred. "Error while launching program: Memory write error at 0x80000000. Microblaze instruction insert overrun". 0x80000000 is the base address of DDR4. If I remove the ddr4 mig from the diagram, and boot the program from local memory, it works. I have no idea about this problem, can anyone give a suggestion? many thanks. By the way, the clock from c0_ddr4_ui_clk_sync_rst is 300 MHz, while the system clock is 100 MHz.
03-23-2018 08:15 PM
Really not enough information.
How did you get the settings for the DDR4? You might try to use an example design with a traffic generator on the MIG. Check reset polarities and verify your clocks are working. Increase the size of your local memory, change your linker script to run out of local memory. Use VLA to debug resets and init_calib_complete. Make sure your pinouts are correct.
03-24-2018 07:04 AM
My project is based on the Virtex UltraScale+ VCU118 Evaluation Platform with vivado 2017.4. All the settings of DDR4 MIG are automatically generated by vivado. The reset polarities and clocks are correct. The size of local memory is 64 KB which is large enough to run a HelloWorld project. It seems to be a bug of sdk because when I download the bitstream and the elf file, the error arise, see the first figure.
However, if I change the base address of .text in the lscript.ld from "DDR4_base_addr" to "local_memory_base_addr", and then re-change the address of .text back to "DDR4_base_addr". After downloading the elf file, the HelloWorld project works. See the second figure. I can't figure out where the problem is.
03-27-2018 02:00 AM
I cant really tell from your screenshot. Have you both the DC and IC interfaces enabled?
I think you do..
Can you go into the Microblaze IP config, and make sure that the cache range is big enough.
Increase it to 64KB for example, and make sure that the cache address is set to 0x80000000
Did you do a memory test (ran from the LMB). Does this work.
The issue you are getting (I think) is that the MB cant fetch instructions from the DDR
10-15-2018 09:00 PM
I can run better using local memory,but when i set mig in the linker,it occurs that the sdk cant run,and Memory write error at 0x80000000. MicroBlaze instruction insert overrun.
in my case,PS and PL will access the mig in the sdk,but when i enable the axi4 of the PL,the SDK cannot access mig;when i disabled the axi4 of the PL,the SDK can run good. so i doublt that my design in the block design is right or fault?