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.
Queue Management、Queue Proxy Regions和Queue Peek Region几个寄存器的主要区别是什么?
我看到手册上介绍的
Queue N Register A和Queue N Register B功能好像都是一样的,请高手指点,谢谢
Queue Proxy Region的目的是为连续写regC, regD的提供了一种原子性的保证。一个核如果通过 Queue proxy Region的寄存器先写了regC,在这个核再写regD之前,另一个核的写regC和D的操作是不能生效的。这样如果保证了多核之间入队(需要把包长度一起入队,也就是要连续写C,D)之间的互斥。需要注意的是如果用户只需要入队一个包,而不需要把包的size保存下来, 只要写D就可以了,这时候就不需要使用Queue Proxy Region,直接使用Queue Management 就可以了。
Queue Peek Region的关键在regD,你可以发现regD的定义跟Queue Management定义不同,可以通过regD设置队列中包数量检测功能,以及检测的门限。这个功能是配合accumulator的自动pop功能。QMSS检测到队列中包数大于配置的门限,就会把status bit设置成1,accumulator检测到这个bit后,就会启动自动的pop功能。具体参考accumulator部分的介绍。
感谢你的回答,现在明白了。还有个问题请教。
就是发送队列和接收队列是怎么对应的?我看手册说是通过设置flowID,不是很明白怎么设置的。
我的问题不知道你清楚了没?
我的意思是:比如,发送队列为COREMSG_HOST_TX_Q =800,接收队列COREMSG_HOST_RX_Q = 662,怎么知道通过COREMSG_HOST_TX_Q push的描述符进入到了队列COREMSG_HOST_RX_Q 里,谢谢回答
你看以参考sprugr9d中Host Packet Descriptor Packet Definition中的PD word1,其中23-16位的Source Tag-Lo中指定了接收侧使用的Rx flow的Index,在这个Rx flow中再指定对应的接收队列。