1.基本概念介绍

        多核导航器:多核导航器由QMSS和PKTDMA两部分组成。用于在设备之间控制和实现数据包的高速传输,有效提高系统的总体性能。
        QMSS(队列管理器)是一个硬件模块,它负责包队列的加速管理。可以通过写队列管理器的32位描述符地址,将包加入到包队列中。可以通过读取特定队列的相同地址,使包出队。
        PKTDMA(Packet DMA)与普通DMA不同,它的目标地址有目标主体和空闲描述符队列索引决定,并不是一个绝对的存储地址。在接收模式中,PKTDMA传输负载数据到缓存中,并且将描述符加入到目标队列中。在发送模式,PKTDMA使描述符从发送队列中出队,从缓存中读取负载数据,并将负载数据发送到发送端口。
        包数据结构协处理器(PDSP):KeyStone I 的QMSS中有两个PDSP,每个PDSP都有运行QMSS固件的能力。
        描述符累加器固件:用于监控指定队列中的描述符,当队列中的描述符达到一定数量,或者超时,则向主机发送中断。它还提供了一个回收功能,它可以自动地将描述符重新循环到队列中。
        QoS固件:该固件负责确保外设和主机CPU没有被包吞没,换句话说,就是拥塞控制。
        事件管理器固件:它提供了CorePacs的动态负载平衡。
        主机包描述符:大小固定,包含一个指向数据缓存的指针。
        单一包描述符:与主机包描述符不同,它将负载数据包含在了描述符内
        主机缓存描述符:主机缓存描述符用于链接到主机包描述符或者其他的主机缓存描述符。

2.数据包收发流程

2.1包发送流程

数据包的发送流程如图 2.1所示。

 

DSP6678 多核导航器_第1张图片

图 2.1 包发送流程

        1.主机(Processor)感知到内存中的一个或多个数据块需要作为一个数据包传输。
        2.主机分配一个描述符(通常从发送完成队列获取),填充该描述符中的字段,以及负载数据。
        3.对于主机包描述符,主机根据需要分配和填充主机缓冲区描述符,以指向属于该包的任何剩余数据块。
        4.主机将数据包描述符的指针写到队列管理器内的特定内存映射位置,该位置对应于所需的DMA通道的一个传输队列。
        5.DMA控制器从队列管理器中读取包描述符指针和描述符的大小信息。
        6.DMA控制器从存储器中读取包描述符。
        7.当包的所有数据都传输完成时,DMA将把指向包描述符的指针写到数据包描述符的返回队列管理器或者返回队列编号字段中指定的队列。
        8.在写入包描述符指针之后,队列管理器将使用状态行来向其他端口/处理器/prefetcher块指示发送完成队列的状态。当队列为非空时,就设置这些状态行
        9.主机响应队列管理器的状态更改,并根据需要对包执行回收。


2.2包接收流程

数据包的接收流程如图 2.2所示。

 

DSP6678 多核导航器_第2张图片

图 2.2 包接收流程

        1.当在一个给定的通道上接收包时,端口将首先从FDQ(空闲描述符队列)获取空闲描述符,之后开始接收数据,并将数据填充到缓存中。
        2.对于主机包,该端口将根据需要获取额外的描述符+缓冲区。
        3.对于单体包,端口会在SOP(包首)偏移之后连续写,直到EOP(包尾)时停止。(主机必须确定包的长度不要超过上限,否则会覆盖下一个描述符。)
        4.在整个包接收过程中,PKTDMA会将包描述符写到存储区域,然后将包描述符指针写到合适的接收队列中。
        5.队列管理器负责向使用了状态线的其他端口或嵌入式处理器告知接收队列的状态。当队列不为空时,就会设置这些状态线。
        6.主机响应队列管理器的状态更改,并根据需要对包执行回收。