C64X EDMA优先级及优先级队列

C64X EDMA优先级及优先级队列

下图为EDMA传输请求方框图:

C64X EDMA优先级及优先级队列_第1张图片

从图中我们可以看到,请求有三种:

L2控制器传输请求:L2控制器发布所有用于CACHE服务的传输请求:如存取非CACHE内存、QDMA传输等。对C64x DSP,CACHE服务请求可以在任何优先级上产生,这可以通过CACHE配置寄存器(CCFG)的P位来设置。对于读请求,CACHE控制器对一个L2行,总是以2个突发64字节来请求:首先请求行的MISSED部分。对于写请求,可能是由于回写/回写并无效或逐出等操作引起的,CAHCE控制器以两个突发64字节来完成1行的传输。QDMA传输请求与EDMA通道的限制是一样的。

HPI/PCI传输请求:HPI/PCI自动产生传输请求以服务HOST传输。对于C64x DSP,缺省的HPI/PCI传输请求是中等级别,但是请求的优先级可以通过TRCTL来编程,对于固定模式的HOST存取,HPI/PCI发布单个元素读写请求及短时数据突发增量传输请求。突发尺寸总是以8个或更少的元素进行。

EDMA通道传输请求:EDMA通道传输请求可以发生在Urgent、High、Medium、Low四个级别上,推荐,高优先级用于短时突发和单元素传输,低优先级用于长时块的搬移。

 

下表为C64x DSP数据请求的可编程优先级

OPT中的PRI位

优先级

请求者

000

Level 0:Urgent优先级

L2控制器、EDMA、QDMA、HPI/PCI

001

Level 1:High优先级

L2控制器、EDMA、QDMA、HPI/PCI

010

Level 2:Medium优先级

L2控制器、EDMA、QDMA、HPI/PCI

011

Level 3:Low优先级

L2控制器、EDMA、QDMA、HPI/PCI

100-111

保留

保留

 

4个优先级级别都有各自的请求排队队列,每个队列的总长度固定为16;但是每个队列中三个请求者在其中占有的长度可以编程,下表为C64x DSP传输请求队列的分配情况:

Queue

优先级

固定的队列总长度

请求者

缺省队列长度

编程队列长度的寄存器

Q0

Urgent

16

L2控制器和QDMA

EDMA

HPI/PCI

6

2

0

L2ALLOC0(长度范围:0-7)

PQAR0(长度范围:0-15)

TRCTL(长度范围:0-15)

Q1

High

16

L2控制器和QDMA

EDMA

HPI/PCI

2

6

0

L2ALLOC0(长度范围:0-7)

PQAR0(长度范围:0-15)

TRCTL(长度范围:0-15)

Q2

Medium

16

L2控制器和QDMA

EDMA

HPI/PCI

2

2

4

L2ALLOC0(长度范围:0-7)

PQAR0(长度范围:0-15)

TRCTL(长度范围:0-15)

Q3

Low

16

L2控制器和QDMA

EDMA

HPI/PCI

2

6

0

L2ALLOC0(长度范围:0-7)

PQAR0(长度范围:0-15)

TRCTL(长度范围:0-15)

因为一旦一个队列里的请求满了,那么这个队列如果再来请求的时候,EDMA控制器会STALL,所以所有的请求都会不响应,直到那个队列有空闲位置才继续响应事件。所以,我们不要让某个级别的请求太过繁忙,从而导致STALL发生。比较好的情况是:让各个级别的请求的负担基本差不多,这样避免EDMA控制器阻塞。

你可能感兴趣的:(C64X EDMA优先级及优先级队列)