An engineer from Broadcom detected a bug last week, which I had promptly corrected. The bug resulted in RD being trashed during any of the STORE instructions. He had sent me a fixed that he used, which illustrated the problem. I then implemented a more elegant fix as I was more familiar with my design.
Then, a few days ago, I detected a bug with the design. It's not really a bug per se, but a minor thing that I had forgotten about. Internally, the aeMB is a little endian processor. However, the original Microblaze is a big endian processor. So, I had to do some endian correction within the processor. I had done this for the instruction bus but had forgotten to do it on the data bus.
It was previously fine, as the test code did not load any data constants from instruction memory. However, I had recently changed the test code to C code that performs testing by calculating fibonnaci numbers using different algorithms. So, it had to verify the results with the values stored in instruction memory. So, it would fail as the data retrieved from instruction memory was of the wrong endian type. It's fixed now.
As a result of this change, I had also discovered more problems. The aeMB is made to be EDK2.1 compatible. So, code compiled for the EDK2.1 should work fine. However, the GCC compiler that I'm using does not compile it for that version. It uses the CMP instruction, which isn't in EDK2.1. However, most people are probably using the same compiler, they will run into problems when using the aeMB.
So, I will have to implement a few new instructions within the aeMB in order to make it compatible with the current GCC compiler. It merely involves adding 3 more instructions that I had originally designed into the aeMB but did not implement because it didn't seem necessary. Also, I will need to unify the two busses as the aeMB uses a shared memory externally.