Hello
I am really a little bit helpless at the moment. I have implemented an own IP which performs some special arithmetic instruction (multiplication, addition, root, substraktion and so on). I tested each module with thousands of testcases so we can be sure that thet are working properly. Next I added this IP to the microblaze core with the FSL interface. I downloaded then the complete design on my ML300 board. I run an algorithm on my Microblaze core which calls my instructions 8000 times and at the end of the day I got the correct result. So I was sure that this design is "perfect". But now I added 400 more instructions for an inversion operations, and after 50 instruction something weird is happening:
If I use the following codefragment I get an incorrect result: .... command(OP_MUL, REG14, REG14, REG17); command(OP_MUL, REG12, REG13, REG18); command(OP_MUL, REG13, REG14, REG19); command(OP_MUL, REG12, REG14, REG20); command(OP_ADD, REG18, REG17, REG21); ....
But if I insert a print statement within this fragement to read out one of my registers then it works: .... command(OP_MUL, REG14, REG14, REG17); command(OP_MUL, REG12, REG13, REG18); command(OP_MUL, REG13, REG14, REG19); command(OP_MUL, REG12, REG14, REG20); print("-- Value of REG20 --... \n\r"); command(OP_RD, REG20, 0, 0);
for (i=0;i