Hello all:
I have a question regarding using SysGen to create a co-processor that's used in a microblaze design. I'm using EDK v9.1 through the base system builder wizard to create a design used on a Xilinx ML401 dev. board.
I've already generated a simple pcore and connected that to the microblaze proc. in EDK. Data are being passed from MB -> pcore and pcore -> MB through shared memory (using the "from register" and "to register" in SysGen).
Using the provided function calls for communicating from MB -> pcore, I do the following:
findavg_sm_0_Write(FINDAVG_SM_0_D0,FINDAVG_SM_0_D0_DIN, datasamp[0]); findavg_sm_0_Write(FINDAVG_SM_0_D1,FINDAVG_SM_0_D1_DIN, datasamp[1]); findavg_sm_0_Write(FINDAVG_SM_0_D2,FINDAVG_SM_0_D2_DIN, datasamp[2]); etc.
To check performance, I start timer, do function call to write shared memory, then read value from timer.
So it's just:
//start timer findavg_sm_0_Write(FINDAVG_SM_0_D0,FINDAVG_SM_0_D0_DIN, datasamp[0]); //read count register
I'm seeing that it takes 28 clock cycles to pass a 16-byte word from MB -> pcore in this way. This seems *way* too long.
To improve performance, the API documents that were generated when I created the pcore suggest to remove this line in the xparameters.h file:
#define FINDAVG_SM_0_SG_ENABLE_FSL_ERROR_CHECK
I did that, but it doesn't help.
I didn't do anything special regarding connecting my pcore to the MB. Just added it through the Hardware -> Configure coprocessor... tool in EDK which connects the pcore to MB through an FSL.
Has anyone investigated this and can share any words of wisdom?
thanks, Joel