-
i'm trying to move the boot address into low memory (for reasons that will eventually become clear).... as a general test, i have a basic form of my bootloader that simply blinks some LEDs; it does not actually load code into RAM.... i'm able to move the bootloader down to address 0x10000; i've looked at the generated code to verify.... i'm even able to move the bootloader down to address 0x18000.... when moving the bootloader, i update the but when i tried to place the bootloader at 0x8000, my test bootloader fails.... should i be able to do this???? my IMEM (based at 0x0000) is only 8K in size.... |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 10 replies
-
Hey @biosbob! Interesting, this is a use case I did no see coming 😅 Anyway, I just tested a setup with the BOOTROM starting at 0x0000_8000 and it works without problems. This is what I did:
neorv32/rtl/core/neorv32_package.vhd Line 96 in a5fc6ff to constant boot_rom_base_c : std_ulogic_vector(31 downto 0) := x"00008000"; -- bootloader base address, fixed!
Line 77 in a5fc6ff to rom (rx) : ORIGIN = DEFINED(make_bootloader) ? 0x00008000 : __neorv32_rom_base, LENGTH = DEFINED(make_bootloader) ? 32K : __neorv32_rom_size
neorv32/sw/bootloader$ make clean_all bootloader |
Beta Was this translation helpful? Give feedback.
-
replacing the fixed 64*1024 constants in by no means a high-priority, however.... |
Beta Was this translation helpful? Give feedback.
i think i found the problem.... the bootloader at 0x8000 WORKS on my cmod board, but *FAILS on my icebreaker board....
since vivado takes so long to build, i had plenty of time to review
osflow/devices/ice40/neorv32_imem.ice40up_spram.vhd
, which contains what i think is the issue:correct me if i'm wrong, but this module assumes it controls an entire 64K address space -- into which i have inserted the bootloader into its upper 32K!!!!
somehow the
IMEM_SIZE
(andDMEM_SIZE
) generics should ultimately dete…