KeyStone I 培训 多核导航器 PART2—QMSS队列管理子系统(queue manager subsystem)

本文深入探讨了KeyStone I平台上的队列管理子系统(QMSS),包括内存区域、链接RAM、地址与索引转换、中断管理和编程方法。QMSS支持20个内存区域,每个区域具有固定的描述符大小,用于存储队列中的数据包。队列管理器通过头部指针跟踪队列状态,并通过固件控制的PDSP触发中断。编程QMSS涉及存储区域设置、链接RAM配置、PUSH和POP操作,以及低级驱动程序的使用。QMSS的中断机制和累积器模块确保高效的数据包处理和中断管理。
摘要由CSDN通过智能技术生成

1、封面

这是多核导航仪培训的第二部分。在本节课中,我们将更详细地讨论队列管理器子系统。

2、导览

在本节课中,我们将通过讨论内存区域、链接 RAM、地址和索引转换、队列挂起信号和累加器来学习队列管理器子系统的工作原理。然后,我们将通过讨论寄存器 API 和级别的驱动程序来学习如何编程。

3 多核导航器是如何工作的

3.1存储区域大小

那么,队列管理器是如何工作的呢?多核导航仪最多支持 20 个内存区域。这些内存区域用于存储被推入队列管理器队列并通过数据包 DMA 的描述符。(笔记:此处指的是region区域等分,单份为描述符所占的空间)对于每个内存区域,每个描述符区的大小都是一样的。这是一个硬件要求,事实上,内存区域总是按照 16 字节的边界对齐,描述符的大小总是 16 字节的倍数。当我们进一步讨论区域时,你会明白这一点。

3.2存储区域索引


在这里显示的例子中,有两个区域。第一个区域有 10 个描述符。每一个都是 64 字节。第二个区域有 5 个描述符,每个描述符是 128 字节。我们通过对队列管理器寄存器编程来定义一个内存区域。我们提供的参数之一是与该内存区域相关的索引范围。这些索引对每个区域都是唯一的。
 

3.3存储区域映射到链接内存

事实上,每个索引都映射到链接 RAM 中相同的对应索引。这样,每个描述符都有一个唯一的索引,在 Link RAM 中也有一个唯一的位置。这样一来, Link RAM 就包含了每个队列的线程。

让我们看一下队列管理器如何维护其内部链接的几个例子。首先,需要注意的是,队列管理器为每个队列维护一个头部指针,而这些头部指针在重置时被初始化为空。在这第一个例子中,我们将把描述符和索引 0 推入队列。


所以左边的图片显示的是起始条件。链接 RAM 是空的,头部指针也被标记为空。

在推送之后,队列管理器将把头部指针设置为 0,索引为 0, Link RAM 将被设置为 List 的结束。而现在,结束条件是这个队列中有一个描述符,该描述符的索引为 0。 

值得注意的是,我们实际上并没有推送索引。我们推送的是描述符地址。然后队列管理器将这些地址转换为索引。

在下一个例子中,我们要把索引 14 处的描述符推到一个不是空的队列中,所以在这种情况下,左侧显示的起始条件是头部指针指向索引 12 处的描述符。 12 处的 Link RAM 条目指向索引描述符 13, 13 处的 Link RAM 条目显示 List 的结束。所以这个队列中有两个条目。


在推送之后,头部指针没有变化,第一个链接也没有变化。但是原来在索引 13 处的 List 的结束链接现在指向索引 14,而 14 处有 List 的结束。所以你看,通过这种方式,我们可以将任何索引的任何描述符推送到队列中。值得注意的是,你可以把描述符推到队列的头部,也可以推到队列的尾部,但是描述符总是从头部弹出--或者说,在任何情况下,头部指针的描述符都是我们弹出的。

3.4 地址与索引的相互转换

所以我们知道,队列管理器并不存储描述符地址。它存储的是这些描述符的索引。当你推送一个描述符时,队列管理器将采取你在寄存器中提供的地址的权利。
它将减去该区域的基址,除以该区域的描述符大小,然后加上该区域的第一个索引,这就是它用于描述符的索引。它可以这样做,因为当我们对内存区域进行编程时࿰

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值