There are more ways to communicate between microblaze and your other RTL components in the design. One of the easy method is to use the GPIO as a memory address map and write\read from your RTL. I'd prefer this way. Generate the GPIO pins as required (Shown below)
Code:
ADDR (x-bits)
Data (y-bits)
Wr
Rd
OE
Now, use the addr to select your payload\data structure at the RTL components. I'd do it this way in RTL
Your RTL component may have different payloads. Point each payload with each address.
Paylaod1 - addr XX
Paylaod2 - addr XY
Inside Microblaze if you want to read payload1, you should drive addr with XX and assert Rd signal. In RTL, if Rd is asserted and if addr is XX, you simply connect Payload1 to Data bus of Microblaze GPIO pins.
x-bits depends on how many different maps you require for read\write of payload\data. Y-bits is your data bit width
This we can register memory map.
On the EDK, I believe you have USB\ethernet IP customized with C application. So, in the C application, just create a pointer which points to the GPIO base address of these signals. You can now do I\O transfer at full speed, no matter how bulky the data packet size is !!!, should you require more burst size, increase 32-bit to 64-bit and you can double your throughput
Hope this is your intention
let us know your progress