I'm working with a customer on setting up the GPMC to connect to an FPGA in synchronous burst write mode. We are seeing that when a burst occurs, the control signals (nCS, nWE, and nADV) are unexpectedly being held an extra clock cycle. In the example below, a 32-bit write is performed (2 x16 word burst), and the control signals get extended by an unexpected extra cycle. If a single 16-bit word transaction is performed, the control signals look correct, and are not extended by an external cycle.
The customer has tried adjusting the WeOffTime, CsWrOffTime, and WriteCycleTime, and these adjustments have not resulted in the extra cycle being removed. Please have a look at the configuration and resulting waveform.
CONFIG1 = 0x79401200
- WrapBurst = 0
- ReadMultiple = 1 (burst)
- ReadType = 1 (synchronous)
- WriteMultiple = 1 (burst)
- WriteType = 1 (synchronous)
- ClkActivationTime = 0 (continuous)
- AttachedDevicePageLength = 2 (16 words)
- WaitReadMonitoring = 1 (enabled)
- WaitWriteMonitoring = 0 (disabled) [edited/corrected from original posting]
- WaitMonitoringTime = 0
- WaitPinSelect = 0
- DeviceSize = 1 (16-bit)
- DeviceType = 0
- MuxAddData = 2 (mux address and data)
- TimeParagranularity = 0 (x1)
- GpmcFclkDivider = 0 (GPMC.CLK = GPMC.FCLK / 1)
CONFIG2 = 0x00030400
- CsWriteOffTime = 3
- CsRdOffTime = 4
- CsExtraDelay = 0 (disabled)
- CSOnTime = 0
CONFIG3 = 0x11010100
- AdvAadMuxWrOffTime = 1
- AdvAadMuxRdOffTime = 1
- AdvWrOffTime = 1
- AdvRdOffTime = 1
- AdvExtraDelay = 0 (disabled)
- AdvAadMuxOnTime = 0
- AdvOnTime = 0
CONFIG4 = 0x02018422
- WeOffTime = 2
- WeExtraDelay = 0 (disabled)
- WeOnTime = 1
- OeAadMuxOffTime = 4
- OeOffTime = 4
- OeExtraDelay = 0
- OeAddMuxOnTime = 2
- OeOnTime = 2
CONFIG5 = 0x01030204
- PageBurstAccessTime = 1
- RdAccessTime = 3
- WrCycleTime = 2
- RdCycleTime = 4
CONFIG6 = 0x02010000
- WrAccessTime = 2
- WrDataOnAdMuxBus = 1
- Cycle2CycleDelay = 0
- Cycle2CycleSameCsEn = 0
- Cycle2CycleDiffCsEn = 0
- BusTurnAround = 0
CONFIG7 = 0x00000F50
- MaskAddress = 0xF
- CsValid = 1
- BaseAddress = 0x10
The customer is recording the following result in the FPGA. Note:
- s_ad[15..0] = GPMC_AD[15..0]
- s_wr_n[0] = nWE
- s_adv_n[0] = nADV
- s_cs_n[0] = nCS
Thanks,
Stuart