This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F280049C: CLA RAM arbitration, Pipeline wait state on read after write

Part Number: TMS320F280049C

Tool/software:

I'm trying to exactly understand the CLA pipeline and related timing for an extremely timing-critical application.

From documentation and other forum threads I got the following understanding:

-> MSGRAM works the same way as LSRAM, every LSRAM and MSGRAM block has its own arbiter

-> MSGRAM is not Dual-Port but also round-robin between CPU/CLA

-> LS/MSGRAM blocks do not have separate Read/Write ports but a shared R/W interface, so write access stalls read access

-> Arbiter Prioritizes write before read (otherwise it could cause a deadlock) on every CPU/CLA, then round-robin between CPU/CPA

-> Access is always without waitstate (if free), 1 cycle

-> Peripheral read access always causes 2 waitstates; 3 cycles/instruction

Is this correct?

Open Questions:

-> How about peripheral write access?

Does it also cause waitstates or is it single cycle?

-> How about W vs. R1/2 phase read/write collision?

So the arbiting between CPU/CLA is clear, but not exactly between read and write:

The CLA has an 8-stage pipeline with F1-F2-D1-D2-R1-R2-E-W.

My question: Does W interfere with R1 or R2?

Example:

MMOV32 @LSRAM0_x, MR0 ; write to LSRAM0

MNOP

MMOV32 MR2, @LSRAM0_y ; this instruction is in R2 stage while write is in W stage -> Waitstate inserted?

MMOV32 MR0, @LSRAM0_z ; this instruction is in R1 stage while write is in W stage -> Waitstate inserted?

MMOV32 @MSGRAM_x, MR0 ; write to message RAM CLA->CPU

MNOP

MMOV32 MR2, @LSRAM0_y ; this instruction is in R2 stage while write is in W stage -> Different arbiter, no problem? (except CPU parallel access / round robin...)

MMOV32 MR0, @LSRAM0_z ; this instruction is in R1 stage while write is in W stage -> Different arbiter, no problem? (except CPU parallel access / round robin...)

MI16TOF32 MR0,@AdcaResultRegs     ; -> always 3 cycles / 2 waitstates?

MMOV32    @EPwm2Regs+108,MR0    ; -> 1 or 3 cycles?

Would be nice if someone could confirm my assumptions and clarify the open questions.

Thanks,

Carl