UberDDR3 icon indicating copy to clipboard operation
UberDDR3 copied to clipboard

Instruction overrun error while trying to use Microblaze with UberDDR3

Open nuclearrambo opened this issue 1 year ago • 2 comments

When integrating Microblaze with UberDDR3, Vitis throws "Instruction overrun" error after configuring the FPGA. Ideally, the Microblaze fires up and waits at the first breakpoint at start of the program while debugging through Vitis. Its by design that the uberDDR3 writes the entire address space and reads it back as a test procedure after calibration. This makes the RAM inaccessible causing Microblaze to fail. Disabling the read/write test fixed the problem, and I could debug programs on Microblaze just like I did when using MIG. On line 1830, I made the following change state_calibrate <= DONE_CALIBRATE;

nuclearrambo avatar Jul 22 '24 17:07 nuclearrambo

Hi @nuclearrambo , would it be possible to add a reset logic in Microblaze such that the reset will only be released when UberDDR3 is done calibrating? The built-in self-test is not actually a requirement in the calibration sequence of a DDR3 controller, but having it would add a lot more confidence that UberDDR3 was able to properly calibrate.

By the way, running UberDDR3 on Microblaze sounds interesting, would it possible to share here the working project you had? Maybe we can add yours in the example project demo in this repo.

AngeloJacobo avatar Jul 24 '24 10:07 AngeloJacobo

I have created a sample project in Vivado 2019.2. I used the project mode so, you may need to modify the IP versions accordingly in the tcl script. Step 1: Create a new project Step 2: Add the "rtl" and "rtl/axi" directories when it asks for sources Step 3: In the tcl console run this "source bd.tcl" This should automatically create the block design. Add the pin constraints based on your board. I had a custom board so my constraints wouldn't be useful here. Note: Rename the bd.txt to bd.tcl

Edit: Links to the bd.tcl and block design pdf. https://github.com/nuclearrambo/UberDDR3/blob/main/bd.tcl https://github.com/nuclearrambo/UberDDR3/blob/main/design_1.pdf

nuclearrambo avatar Jul 25 '24 05:07 nuclearrambo

Hi, closing this issue as this is now resolved. A new parameter SKIP_INTERNAL_TEST is added to skip built-in self test. UberDDR3 can now also be easily added to Vivado IP Catalog, and be integrated with MicroBlaze. More details on these blog posts: UberDDR3 + MicroBlaze (Part 1) UberDDR3 + MicroBlaze (Part 2)

Shown below is the UberDDR3 GUI (Check Skip Internal Test): image

AngeloJacobo avatar Nov 12 '24 09:11 AngeloJacobo