Tonight I finally managed to get the code and the sequencing right to not just boot the Microblaze simulation, but to turn on the MMU.
But I was puzzled as to why, as soon as I had done that, the execution breaks with a segmentation fault and appeared to be executing code I had not written. And then it dawned on me – all my addresses had immediately become virtual addresses.
I am about to start work on what will, if I succeed, be the most difficult and complex software project I’ve ever undertaken – and that means, at the moment, I am wandering around rather lost, reading various online white papers and data sheets, consulting old text books (like this) and procrastinating through writing blogs.
The task is to write paging code for a more or less bare metal Microblaze FPGA system (or rather a Microblaze system hosted on an OVP simulator). With only a very limited semi-hosting version of Newlib available for system call type support, it is all very daunting.