wip elf2hex post
This commit is contained in:
parent
58a51dd18c
commit
7d3d7cff3a
1 changed files with 69 additions and 0 deletions
69
content/posts/quartus-elf2hex-and-misery.md
Normal file
69
content/posts/quartus-elf2hex-and-misery.md
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
+++
|
||||
date = "2023-03-14"
|
||||
draft = true
|
||||
path = "/blog/quartus-elf2hex-and-misery"
|
||||
tags = ["quartus", "fpga"]
|
||||
title = "Quartus, elf2hex, bugs, and misery"
|
||||
+++
|
||||
|
||||
I have been working on a school project, which uses Intel FPGAs and the
|
||||
proprietary Intel Quartus toolchain. One of the components in the design we're
|
||||
building is a Nios II embedded processor, which is Intel's weird proprietary
|
||||
soft-core. In newer versions of the highest-end SKU of Quartus, Intel has
|
||||
finally made a RISC-V core that integrates similarly, but we don't have that.
|
||||
|
||||
There are also obviously third-party soft cores, but in the interest of not
|
||||
doing a massive hardware project, we chose not to do that, and just used the
|
||||
Nios with C (it's GCC 10, it could be so much worse).
|
||||
|
||||
The implementation of a soft core on an FPGA involves creating memory blocks in
|
||||
the FPGA for the memory of the device, which the processor then executes out
|
||||
of. You thus need to get your program into there.
|
||||
|
||||
## Memory initialization
|
||||
|
||||
Memories on the FPGA can have defined initialization values, which is one way
|
||||
of getting a program in, however, it's kind of a pain: for Nios, you have to
|
||||
use the `mem_init_generate` Makefile target (which is ... variable amounts of
|
||||
documented [in the "Embedded Design Handbook"][edh] buried pretty deeply), then
|
||||
add the resulting `.qip` file to your Quartus project. Once you've added that,
|
||||
recompile the project hopefully for the last time.
|
||||
|
||||
When you need to update the program but not the Quartus design, assuming that
|
||||
your timestamps aren't all jacked up to make Quartus think you need a full
|
||||
recompile, you can then use [either Processing > Update Memory Initialization
|
||||
File or `quartus_cdb YOUR_TOPLEVEL_ENTITY --update-mif`][ram-init-hack] then
|
||||
rerun the "Assembler" step to reuse the FPGA bits and write a new `.sof` with
|
||||
the new software.
|
||||
|
||||
[ram-init-hack]: https://tomverbeure.github.io/2021/04/25/Intel-FPGA-RAM-Bitstream-Patching.html
|
||||
|
||||
[edh]: https://www.intel.com/content/www/us/en/docs/programmable/683689/current/introduction-28202.html
|
||||
|
||||
## JTAG
|
||||
|
||||
Another way of getting your program into a soft core is to use JTAG. Intel
|
||||
implements an [internal JTAG network][intel-jtag], which is quite neat but also
|
||||
proprietary. For the most part, the only people actually supporting it are
|
||||
Intel, though, and it requires custom support in the host-side debugger to
|
||||
actually use. Thus, if you want to be able to use a debugger on your soft core
|
||||
(which you definitely do if you have limited time), it's very much worth
|
||||
picking one that has that.
|
||||
|
||||
Something that people do because getting the vendor debug stuff working is
|
||||
troublesome is that they actually just put the JTAG pins out on a GPIO, which
|
||||
definitely works but I don't have a debugger that would work with that.
|
||||
|
||||
There has been some motion on non-Intel soft cores supporting Intel JTAG:
|
||||
[VexRiscv supports Intel JTAG][vexriscv-jtag] however it's not really
|
||||
documented, and involves setting up SpinalHDL and Scala, which seems like too
|
||||
high a risk for a school project, but might be worth looking into in the
|
||||
future.
|
||||
|
||||
[intel-jtag]: https://tomverbeure.github.io/2021/10/30/Intel-JTAG-Primitive.html
|
||||
[vexriscv-jtag]: https://github.com/SpinalHDL/VexRiscv/pull/276
|
||||
|
||||
## Problems, 9 year old bugs in Quartus, and misery
|
||||
|
||||
https://community.intel.com/t5/Intel-Quartus-Prime-Software/warning-with-on-chip-memory-data-items-width/m-p/57088
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue