Hi all,
When I tried to transfer data from FPGA to C6678 through EMIF16 interface, I wanted to decrease the read setup, read strobe and read hold values to increase the throughput.
I used the code below to configure the EMIF's A0CR register
/********************************************************************************/
*(unsigned int *) 0x20C00008 |= 0x80000000;//Disable the unuesd features in EMIF
/* FOR CHIP SELECT 0 */
EMIF16_REGS.A0CR = (0 \
| (0 << 31) /* selectStrobe */ \
| (0 << 30) /* extWait */ \
| (1 << 26) /* writeSetup 12 ns */ \
| (3 << 20) /* writeStrobe 24 ns */ \
| (0 << 17) /* writeHold 6 ns */ \
| (1 << 13) /* readSetup 12 ns */ \
| (2 << 7) /* readStrobe 48 ns */ \
| (0 << 4) /* readHold 6 ns */ \
| (1 << 2) /* turnAround 12 ns */ \
| (1 << 0)); /* asyncSize 16-bit bus */ \
/* Set the wait polarity */
CSL_FINS(EMIF16_REGS.AWCCR, EMIF16_AWCCR_WP0, CSL_EMIF16_AWCCR_WP0_WAITLOW);
CSL_FINS(EMIF16_REGS.AWCCR, EMIF16_AWCCR_CE0WAIT, CSL_EMIF16_AWCCR_CE0WAIT_WAIT0);
EMIF16_REGS.AWCCR = (0x80 /* max extended wait cycle */ \
| (0 << 16) /* CE0 uses WAIT0 */ \
| (0 << 28)); /* WAIT0 polarity low */ \
show_reg = EMIF16_REGS.A0CR;
printf("%x\n",show_reg);
/********************************************************************************/
I had got the values from the console using "printf("%x\n",show_reg);".
It showed me that I had changed the A0CR values.
.
.
But I got the EMIF timing in the Chipscope, it showed me that didn't happen.
The problems were that
1. The FPGA send the data to C6678 and C6678 read the data. I had got the right data. But the OE signals in EMIF were completely opposite to the description in the EMIF datasheet.
2. I had changed the values in A0CR to decrease the setip and hold cycles to increase the throughout. But the actual timing showed me that didn't happen!!!
.
.
Thanks for any replies!
Yours,
Feng