cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
jennifer.hane
Visitor
Visitor
8,240 Views
Registered: ‎09-03-2010

Update Bitstream with Processor Data doesn't work, no errors

Jump to solution

I started with a working ISE project that incorporated an XPS processor as a submodule.  The program running on said processor was created entirely within XPS 11.5, using the included software tools.  I was able to use the "update bitstream with processor data" process to generate a bit stream in ISE, and when I downloaded that bitstream with iMpact, my processor ran just fine.  I'm using an XUPV5 board (Virtex-5).

 

Then I decided to learn how to use SDK.  I recreated my original program (which just involved some pushbuttons, LEDs, and a UART) as an SDK 11.5 project.  Then I opened XPS through ISE, added a new "ELF only" software project to my XPS processor, and imported the ELF generated by SDK.  I set this new project as the one "marked to initialize BRAMs" and deactivated the old XPS-made project.

 

But now when I try to run the Update Bitstream with Processor Data process in ISE, it doesn't work.  The console reports that "Process "Update Bitstream with Processor Data" completed successfully," and no errors are given, but sometimes in the process window an orange question mark remains next to the process, as if it hasn't actually completed.  When I download the bitstream with iMpact, my processor doesn't run.  Worst of all, when I tried getting rid of the SDK-made software project and rolling back to the XPS-made one, I got exactly the same problem!  My processor doesn't work at all now.

 

I've tried removing the processor from ISE and adding it back again, I've tried making the ELF file a source in ISE and downloading the generic "programming file" to the board instead, and I've tried doing a project cleanup in ISE and rebuilding everything; none of it works.  Help?

0 Kudos
1 Solution

Accepted Solutions
jennifer.hane
Visitor
Visitor
10,393 Views
Registered: ‎09-03-2010

Ha!  I think I figured out what was wrong, and I feel kind of stupid now.  I decided to export the hardware description from XPS again, on the chance I had changed it between the first time I exported it and the time I tried to add the software to my ISE project.  Then I built a clean SDK project based on the new hardware description and imported THAT elf file to ISE.  And now everything works.  I must have caused a version incompatibility between the processor and the software somehow.

View solution in original post

12 Replies
jennifer.hane
Visitor
Visitor
8,222 Views
Registered: ‎09-03-2010

Update: I tried building a brand new processor from the ground up, and essentially repeated the procedure I outlined above.  This time, I still couldn't get the SDK project to work at all, but I was able to roll back to the XPS-made software project and get my processor to run again.  So how do I get this SDK-made ELF file to run on my processor?

0 Kudos
sonicwave
Explorer
Explorer
8,204 Views
Registered: ‎11-26-2008

Have you tried adding the .elf file to your Xilinx project in ISE? You wont need to use the "Update Bitstream with Processor Data" then, as the .elf file will be added during the "Generate Programming File" step instead.

0 Kudos
jennifer.hane
Visitor
Visitor
8,190 Views
Registered: ‎09-03-2010

Yes, I tried that.  It doesn't seem to work either.

0 Kudos
sonicwave
Explorer
Explorer
8,183 Views
Registered: ‎11-26-2008

Does your .elf file work if you load it from SDK?

0 Kudos
jennifer.hane
Visitor
Visitor
8,179 Views
Registered: ‎09-03-2010

No, it doesn't work if I load it from SDK either.  It passes the "elfcheck," and the programming operation completes successfully, but my program still doesn't run on the board.

0 Kudos
vsiva
Xilinx Employee
Xilinx Employee
8,172 Views
Registered: ‎01-18-2008

Forget programming the fpga, first look at whether your ELF works independently. Try running it after you program your FPGA (initialize bitstream with bootloop). If it doesn't work, then there is something wrong with your ELF.

 

I'd suspect that you have missed providing a linker script.

 

You can print out the compile & link lines that are used from XPS and from within SDK to easily locate what the difference is.

0 Kudos
jennifer.hane
Visitor
Visitor
8,144 Views
Registered: ‎09-03-2010

Okay, the ELF works if I do that.  I didn't realize that I needed to initialize with bootloop and THEN perform a separate "run" step to get my program going; I was just trying to initialize my ELF file directly, without going through bootloop.  And I did make a linker script.  So it seems that my ELF file is all right.

0 Kudos
jennifer.hane
Visitor
Visitor
10,394 Views
Registered: ‎09-03-2010

Ha!  I think I figured out what was wrong, and I feel kind of stupid now.  I decided to export the hardware description from XPS again, on the chance I had changed it between the first time I exported it and the time I tried to add the software to my ISE project.  Then I built a clean SDK project based on the new hardware description and imported THAT elf file to ISE.  And now everything works.  I must have caused a version incompatibility between the processor and the software somehow.

View solution in original post

wg
Adventurer
Adventurer
7,538 Views
Registered: ‎05-23-2010

Hello all,

 

Isn't there a way to combine bit and elf file in SDK and have a download.bit file like in ISE? I mean why is it necessary to back to ISE, add the elf file, and then generate the programming file?

 

Regards,

 

wg

0 Kudos
randyr
Xilinx Employee
Xilinx Employee
3,610 Views
Registered: ‎08-15-2007

Hello WF -

 

Which version of EDK are you using?

 

Here is some background on .elf file initialization.  Prior to the days of SDK, when XPS was used for s/w development, one could create s/w projects in XPS.  By marking the s/w project to initialize BRAM, the bitstream would be created with the BRAMs initialized.

 

ISE contained the process "Initialize with Processor Data", which allowed the user to create a modified bitstream with the .elf file selected in XPS.  This extra step was necessary if the ISE project did not contain the .elf file as a project source.

 

In EDK 13.1, the s/w tools have been removed from XPS, and XPS no longer contains s/w projects.  It is still possible to assign an implementation .elf file in XPS (typically by browsing to the .elf file created using SDK).  This .elf selection is then mirrored in ISE, so BRAMs are initialized properly.  With the removal of s/w projects, the corresponding ISE process discussed above was not longer needed.

 

SDK also allows bitstreams to be updated with an .elf file, a process that is done (if desired) during FPGA download. 

 

Typically users don't move to the implementation flow (adding the .elf file in XPS or ISE) until near the end of the project, but instead use SDK to update bitstreams as needed.

 

This is a confusing topic, as the flows dictated by the EDK and ISE tools have changed over time.  I expect that the current flow (13.x) will remain as is for some time.

 

Randy

 

 

0 Kudos
sonicwave
Explorer
Explorer
3,587 Views
Registered: ‎11-26-2008

 


@wg wrote:

Hello all,

 

Isn't there a way to combine bit and elf file in SDK and have a download.bit file like in ISE? I mean why is it necessary to back to ISE, add the elf file, and then generate the programming file?

 

Regards,

 

wg


If your application is only stored in BlockRAM, and it is marked to be initialized in SDK, such a .bit file is automatically generated (as long as you have loaded the .bit and .bmm files into SDK of course). I don't have the tools installed on the machine I'm currently on so I can't give any specifics, but if you have a look around in the SDK hardware folder, you should find your download.bit...

Also, it's usually good practice to use a new thread when asking a new question, instead of bumping an old one...

0 Kudos
wg
Adventurer
Adventurer
3,574 Views
Registered: ‎05-23-2010

Hello Randyr,

 

Thanks for the information. I am using SDK 12.4.

 

Sonicwave,

 

I will try to find how it's done in SDK.About starting a new thread, I usually do that but my question was based on the solution given in this thread, so continued with this one.

 

 

Regards,

 

wg

0 Kudos