|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
C64X EDMA优先级及优先级队列
下图为EDMA传输请求方框图:
从图中我们可以看到,请求有三种:
l L2控制器传输请求:L2控制器发布所有用于CACHE服务的传输请求:如存取非CACHE内存、QDMA传输等。对C64x DSP,CACHE服务请求可以在任何优先级上产生,这可以通过CACHE配置寄存器(CCFG)的P位来设置。对于读请求,CACHE控制器对一个L2行,总是以2个突发64字节来请求:首先请求行的MISSED部分。对于写请求,可能是由于回写/回写并无效或逐出等操作引起的,CAHCE控制器以两个突发64字节来完成1行的传输。QDMA传输请求与EDMA通道的限制是一样的。
l HPI/PCI传输请求:HPI/PCI自动产生传输请求以服务HOST传输。对于C64x DSP,缺省的HPI/PCI传输请求是中等级别,但是请求的优先级可以通过TRCTL来编程,对于固定模式的HOST存取,HPI/PCI发布单个元素读写请求及短时数据突发增量传输请求。突发尺寸总是以8个或更少的元素进行。
l 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控制器阻塞。 |
|