UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Adventurer
Adventurer
135 Views
Registered: ‎01-20-2017

Tracking MicroBlaze instruction insert exception

We are developing a custom PCB that is designed to take in DisplayPort video into a Kintex 7 FPGA
(p/n xc7k160tffg676-2).  The board will eventually include DDR memory - however, we are building up our board in stages and I'm trying to get the project to run using only local BRAM memory. 

- To make sure there's enough space reserved for the program and the heap and stack, I've set the memory addresses for the data and instructions parts of BRAM to be 1 Megabyte, as shown in this image from the Vivado project.

bram_addresses.PNGBRAM addresses

Upon building the software project, SDK reports the size as 504072 bytes. 

mb-size dprx.elf  |tee "dprx.elf.size"
   text	   data	    bss	    dec	    hex	filename
  78474	    920	 424678	 504072	  7b108	dprx.elf

And I've set the heap and stack to each be 180 kilobytes in size.  So I believe everything should fit within the BRAM memory that I have reserved. 

However, when I begin to 'Debug as' the project, I end up stepping through the code and as I get to (seemingly) random points in the execution, I get the following error in the Disassembly window:

insert_exception_error.PNGMicroBlaze instruction insert exception

Based on other posts on the forum, I thought this might have been due to bad interrupts in the system and I've tried to disconnect different interrupts and re-run - but there does not seem to be a guaranteed correlation between interrupts and seeing this error.  Is there a way to track down exactly which instruction is causing this error?  Do I have to decode the Disassembly window to figure it out? Is there an easier way?

Or am I not reserving the BRAM in the proper way in Vivado to ensure enough space for the program to run?

 

 

0 Kudos