cavium CN71XX芯片 MIX interface for RGMII总结
OCTONIICN61xxMIX接口逻辑提供两个10/100/1000以太网MAC-PHY接口,支持两个RGMIIMAC。RGMII链路完全符合HPRGMII1.3规范。
在cn61xx内部,MIX接口逻辑很简单,并且与其他OCTEON组件的交互最少。特别是,CN61XXMIX接口逻辑不与加速包输入(参见第9章)、包输出(参见第10章)或空闲池(参见第8章)逻辑交互。 与CN61XX UART接口类似,Mix接口提供了一个健壮的通信路径,对控制连接非常有用,尽管传输速率比UART快得多。这个 接口的简单性最大限度地减少了失败的可能性。
两个MIX块,每个块包含独立的输入和输出ring接口硬件和相关dma逻辑。
一个AGL块,它有两个端口。每个端口包含管理外部MIX接口的802.3 10/100/1000 MAC逻辑,以及输入和输出ring的输入和输出FIFO。
MIX输出ring:
MIX输出ring是一个硬件/软件接口,将包传递到相应的MIX接口。输出ring是L2/DRAM中自然对齐的8字节条目的数组。软件写 这些条目和硬件读取条目。输出ring控件由以下组件组成:
基址(MIX 0/1_ORING 1[OBASE])-包含ring中第一个条目的L2/DRAM地址。地址必须自然地对齐到8个字节。MIX 0/1_ORING 1必须仅用软件编写 在启动或遵循MIX/AGL重置序列期间。
ring大小(MIX 0/1_ORING 1[OSIZE])-以8字节字表示输出ring的大小。该ring可高达100万个条目(即高达8MB)。MIX 0/1_ORING 1必须仅在启动期间或遵循MIX/AGL重置序列时由软件编写。
ring门铃计数 --门铃响铃计数(MIX0/1_ORING2[ODBELL])在软件在输出ring中插入一个新条目后,它“将输出ring的门铃振铃。”这是CSR写入。当硬件接收到门铃响时,它就增加铃声的门铃计数。每个门铃都可以把任何数字加到门铃上,在每个门铃上计数。在敲响门铃之前,软件必须事先插入相应数量的有效Oring条目。一个mix0/1_oring2[odbell]read表示当前门铃计数。硬件在门铃处理输出包时使门铃减少一段时间。
ring尾指针(MIX0/1_ORing2[OTLPtr])—尾部指针选择MIX硬件下次将会处理的ring条目。在处理输出包时,硬件将尾指针增加一段时间。尾指针是只读的软件。注意,硬件尾指针增量是ring大小的模。
ring中断计数器 (MIX0/1_ORCNT[ORCNT]) –ring形中断计数器计数已发送的数据包数。每当计数器超过相应的中断阈值(MIX 0/1_ORHWM[ORHWM])时,中断位(MIX 0/1_ISR[ORTHRESH])就是一个中断位。在软件可以回收相应的输入ring入口和相应的缓冲区后,硬件增加了ring中断计数器。
每当门铃计数非零,且MIX硬件不忙于从L2/DRAM读取数据包,且出站1KBFIFO未满时,MIX硬件将忙于读取数据包。
最终,MIX 硬件从 L2/DRAM 读取整个数据包,并将数据包插入到出站 FIFO 中。 到那时,它就变得无所事事了。
在处理出站数据包期间,硬件会减少门铃计数(MIX 0/1_ORING 2[ODBELL]),并增加尾指针(MIX 0/1_ORING 2[OTLPTR])。硬件还增加输出ring中断计数器 (MIX 0/1_OR CNT [OR CNT ]) 以指示此数据包输出已完成。输出ring计数器的增量表明软件可以回收输出ring条目中的一个(以及相应的缓冲区)。
当软件发出门铃写入时,输出门铃挂起,直到相应的MIX 0/1_ORCNT[ORCNT]被硬件增加为止。软件必须确保正在等待的门铃响的次数永远不会超过:MIX0/1_ORING1[OSIZE] – 8
中断计数可能导致中断发生。MIX 0/1_ISR[ORTHRESH]是任何时候MIX 0/1_ORCNT[ORCNT]>MIX 0/1_ORHWM[ORHWM]。MIX0/1_ORHWM[ORHWM]可被视为基于包计数的中断阈值。软件可写入MIX0/1_ORCNT[ORCNT]来减少它,从而有效地确认数据包的接收。这将清除中断。 有关进一步中断细节,请参阅下文第23 . 6 节。
输出ring中的每个条目都是一个自然对齐的64位字,格式如下:
保留-未使用。一定是零
LEN-数据包的长度(以字节为单位)。Len必须不能为零。请注意,CN61 XXMIX 接口上的实际包字节可能大于此字节计数,这取决于前导/ SFD 、 CRC32 和 可填充的添加。
T(时间戳) - 如果设置了 T ,MIX 将捕获 MIO_PTP _ CLOC K _ HI 64 位值到 MIX 0/1_TSTAMP [ TSTAMP] ,然后在发送数据包后增加 MIX 0/1_TSCT L[ TS CNT] 。MIX/AGL在IEEE标准1588要求的时间捕获此时间戳。
L2/DRAM字节指针-指向数据包的第一个字节的指针。可以是任何字节对齐。该数据包必须是连续的L2/DRAM从这个地址开始。包数据名义上从L2/DRAM以大端格式读取.。这可以通过MIX0/1_CTL[LenDore]切换到小端。
MIX 输入ring
MIX输入ring是用于接收经由MIX接口到达L2/DRAM缓冲器的包的硬件/软件接口。输入ring是L2/DRAM中自然对齐的8字节条目的数组。软件和硬件都读写条目。输入ring控制由以下部件组成:
基址(MIX 0/1_IRING 1[IBASE])-包含ring中第一个条目的L2/DRAM地址。地址必须自然地对齐到8个字节。MIX 0/1_IRING 1必须仅在启动期间或遵循MIX/AGL重置序列时由软件编写。
ring大小(MIX 0/1_IRING 1[ISIZE])-以8字节字表示输入ring的大小。该ring可以高达一百万条目的(即多达8MB)。MIX0/1_IRing1必须仅在启动期间或在MIX/AGL复位序列之后通过软件写入。
铃声门铃计数(Mix0/1_iring2[idbell])--软件在输入ring中插入一个新条目后,它“按下输入ring的门铃”。这是一个CSR写到MIX 0/1_IRING 2[IDBELL]。当硬件接收到门铃响时,它增加了铃声的门铃计数。每个门铃响都可以把任何数字加到门铃计数上。软件绝不能使门铃数超过铃声的大小,而且必须事先将相应数量的iring条目存放在铃声中。Mix0/1_IRing2[idbell]的读数表示当前门铃计数。考虑到包大小和缓冲器大小,软件应优选地保持门铃计数足够大,以便能够成功地接收至少一个包。在完成相应的输入包处理之前,硬件将门铃缩减为数据包在某一时间使用的ring条目数。
ring形尾指针(MIX 0/1_IRING 2[ITLPTR])-尾指针选择硬件下一次将要处理的ring条目。硬件在完成对相应的输入包的处理之前,将尾指针增加一个数据包所使用的ring条目数。软件只读尾指针。请注意,硬件尾指针添加的是模块化的ring大小。
ring形中断计数器(MIX0/1_IRCNT[IRCNT])-ring中断计数器计数已收到的数据包数。每当计数器超过相应的中断阈值(MIX 0/1_IRHWM[IRHWM])时,中断位(MIX 0/1_ISR[IRTHRESH])就是一个中断位。在软件安全地读取相应的输入包并回收相应的输入ring条目之后,硬件在某个时候增加ring中断计数器。
当AGL硬件接收到入站数据包时,它首先缓冲它。最终,AGL将该数据包视为指定给CN61XX的合法数据包,并在2/4KB1入站FIFO中缓冲它。此时,Mix使用由软件提供的下一个指针,当输入ring的门铃计数为非零时,该指针由输入ring的尾部提供。通常,在数据包到达之前,软件应该为硬件提供大量的缓冲区,所以当数据包到达时,输入门铃计数通常应该是非零的。
然后,MIX硬件将入站包写入缓冲器,直到输入包耗尽为止。
一旦 MIX 硬件将数据包数据写入其最后一个缓冲区,它将更新相应的输入ring条目的完成状态。注意,硬件不会更新数据包的最后一个缓冲区的ring条目的完成状态,直到所有先前的数据包字节写入操作和所有先前的完成状态写入操作都完成为止。
在MIX硬件完成处理相应接收包之前的某一点,根据为该数据包消耗的iring条目的数量,MIX减少门铃(MIX 0/1_IRING 2[IDBELL])和尾指针(MIX 0/1_IRING 2[ITLPTR])值。MIX还将数据包的输入ring中断计数器(MIX0/1_IRCNT[IRCNT])递增1。MIX硬件保证完成代码写入在递增MIX0/1_IRCNT[IRCNT]之前完成,因此,软件可以在看到MIX 0/1_IRCNT[IRCNT]增量后,安全地检查输入数据包的输入ring和数据包数据,并且还可以安全地回收相应的输入ring条目。
RX FIFO共有4KB。如果使用两个端口,则每个端口有2kb。如果使用单个端口,则它拥有所有4KB。
当软件发出门铃写入时,输入ring门铃被挂起,直到相应的MIX 0/1_IRCNT[IRCNT]硬件增量指示可用的ring形条目。软件必须确保挂起的门铃响的次数永远不会超过MIX0/1_IRING1[ISIZE] – 8
MIX 0/1_IRCNT[IRCNT]增量会导致中断。MIX 0/1_ISR[IRTHRESH]是MIX 0/1_IRCNT[IRCNT]>MIX 0/1 IRHWM[IRHWM]的一种。MIX 0/1_IRHWM[IRHWM]可视为基于数据包计数的中断阈值. 软件可写入MIX0/1_IRCNT[IRCNT],从而有效地确认数据包的接收。这将清除中断。更多中断详细信息,请参阅第23.6节。
输入ring中的每个条目都是一个自然对齐的64位字,格式如下:
保留-未使用。一定是零
Len-缓冲区的长度(以字节为单位)。在按门铃之前,必须用相应缓冲区的长度的软件编写,以指示缓冲区的可用性(软件提供的缓冲区大小必须为≥64字节。)。由硬件编写到完成Len上的缓冲区完成。除了Code=分部情况外,硬件总是将Len更新为相应缓冲区中存在的数据包数据的字节数。
硬件从不将任何字节写入L2/DRAM指针和软件提供的初始缓冲区长度所指示的边界之外。但是,请注意,硬件可以写入到通过指针和完成的Len所指示的边界之外;完成Len之后的字节是不可预测的。
注意,硬件可以任意减少缓冲区多达16个字节:在Code=MORE情况下,硬件产生的Len可比软件提供的Len小16个字节。
对于硬件来说,当Len=0为多缓冲包发出信号时,编写Len=0是合法的(即,在任何情况下,Code=MORE除外)。在这种情况下,Len的值为零表示所有数据包字节都存在于先前的缓冲区中(所有缓冲区都必须用Code=More标记)。
代码-缓冲区的完成代码。在按门铃以指示缓冲器可用性之前,必须通过软件将其写入零(例如Swinit)。由硬件(非零值)写入在数据包到达后指示缓冲区的内容。
硬件-书写完成代码:
0x1 PARTIAL.部分接收到包,但是内部缓冲不足以存储包。指示相应缓冲区中不存在(该数据包的其余部分),没有另一个缓冲区,并且该数据包被截断。当前缓冲区的 Len字段和内容是不可预测的。
。。。。。。
L2/DRAM字节指针-指向缓冲区的第一个字节的指针。可以是任何字节对齐。缓冲区在L2/DRAM中必须是连续的,从这个地址开始。除了Code = MORE的情况外,整个数据包将从这个地址开始写入缓冲区。必须在按门铃之前,用指向相应缓冲区的指针用软件编写,以指示缓冲区的可用性。硬件从不修改此指针,并且总是开始在指针指示的精确字节上写入数据包数据。分组数据名义上以大端格式写入L2/DRAM.这可以通过MIX0/1_CTL[LenDore]切换到小端。
入站数据包可能大于单个缓冲区,也可能是“大容量”。当硬件用来自数据包的数据填充缓冲区时,它可以用Code=More标记它,以表明 数据包使用另一个缓冲区。
MAC流控制
以下小节讨论了AGL如何处理接收和传输路径的流控制。图23-4所示的透视图基于CN61xx视图
1、RX逻辑需要断言背压
2、RX逻辑表示对tx逻辑的背压。
3、TX逻辑断言流控制
4、远程RX逻辑接收流控制
5、远程RX逻辑向远程TX逻辑发送信号
6、远程TX逻辑停止传输
MIX RX 流控制
AGL/MIX在表23-1中指定的条件下控制来自发送设备的数据包的流。
表23-1 传输设备的流控制
**-------------------------**--------------------------------------------------------------------------------------
condition description
**-------------------------**--------------------------------------------------------------------------------------------
接收FIFO的流控制 ** 该接收FIFO可以控制流当它填入时。AGL有一个带有专用的控制的专用的接收FIFO。图 ** 23 -5显示了每个可编程参数的相对FIFO深度.当FIFO在0/1数据上积累 ** AGL_GMX_RX_BP_时,AGL开始对端口进行流控制。 一旦FIFO降到 **AGL_GMX_RX_BP_OFF 0/1数据以下,流量控制就会被删除。
**----------------------------**---------------------------------------------------------------------------------------
无损流控制 当MIX0/1_IRing2[idbell]<mix0/1_mix_IRHWM[IBPLWM]时,MIX断言背压。当 DRAM缓冲器变得较低时,这对于无损流控制是必要的,因为AGL入站FIFO不是足够大。
**-----------------------------**-----------------------------------------------------------------------------------------
软件流控制 软件可以使用AGL_GMX_TX_OVR_BP[en/1/BP<0/1>]强制或忽略所需的流控制状态。 如果AGL_GMX_TX_OVR_BP[en<0/1>]=1,则流控制状态为GMX_TX_OVR_BP [BP<0/1>]。
**------------------------------**---------------------------------------------------------------------------------------
在半双工模式下,当流控制为端口活动时,agl通过发送阻塞包强制冲突。
在全双工模式下,AGL可以生成已配置的暂停数据包.以下所有部分都是可配置的
SMAC (AGL_GMX_SMAC0/1)
DMAC (AGL_GMX_TX_PAUSE_PKT_DMAC)
TYPE (AGL_GMX_TX_PAUSE_PKT_TYPE)
PAUSE TIME (AGL_GMX_TX0/1_PAUSE_PKT_TIME)
send frequency (AGL_GMX_TX0/1_PAUSE_PKT_INTERVAL)
MIX TX 流控制
AGL支持半双工和全双工运行模式的流控制.当接收接口处于全双工模式时,agl可以接收附件31A和附件3中定义的暂停控制数据包。 基于AGL_GMX_RX0/1_FRM_CTL[CTL_BCK/CTL_DRP]寄存器的802.3规范1B。常见的操作方式有:
**************************************************************************************************************************************
CTL_BCK = 1,
CTL_DRP = 1 AGL丢弃暂停数据包,检查数据包,并将发送延迟计数器设置为数据包中的时间参数。 然后CN61XX延迟新数据包的传输,直到计时器过期。
**************************************************************************************************************************************
CTL_BCK = 0,
CTL_DRP = 0 AGL处理暂停数据包像普通数据包一样,因此软件会看到这些数据包。软件可任选地实 现反压方式。软件还可以通过向AGL_GMX_TX0/1_SOFT_PAUSE[TIME]写入来设置/重置 延迟计数器 。类似于暂停帧,如果流条件超出时间间隔,则软件必须定期写入
AGL_Gmx_TX0/1_soft_pause[time]。
******************************************************************************************************************************
CTL_BCK = 0,
CTL_DRP = 1 所有暂停帧都会被丢弃,并被硬件和软件完全忽略。
***************************************************************************************************************************
CTL_BCK = 1,
CTL_DRP = 0 AGL向软件发送暂停数据包,并将发送延迟计数器设置为数据包中的时间参数。AGL然 后延迟新的出站包的发送,直到定时器期满为止。由于软件可以看到所有暂停帧,它可以 任选实现反压方式。
*********************************************************************************************************************************
请注意,如果接收到错误(例如启用FCS检查(AGL_GMX_RX0/1_FRM_CHK[FCSERR]=1)),则不设置发送延迟计数器,且暂停数据包未通过FCS/CRCCH eck)。
CTL_BCK和CTL_DRP都应在半双工模式下设置为0(暂停数据包不应以半双工模式存在)。
Mac 接收前同步信号(preamble)处理
AGL可以被配置为检查或忽略标记了基于AGL_GMX_RX0/1_FRM_CTL[PRE_CHK]的每个帧开始的前导码/SFD数据。这对于系统配置使用多个cn61XX或其他选择在rgmi上直接通信且不需要物理设备的设备可能很有用。这对于非PHY连接是有用的。如果存在前同步码数据,则可以根据AGL_GMX_RX0/1_FRM_CTL[PRE_STRP]将其剥离或转发为该数据包的一部分。
接收包帧校验序列(FCS)的处理
MAC接收包丢弃
前同步信号错误
如果启用了前导检查(AGL_GMX_RX 0/1_FRM_CTL[PRECT_CHK]=1),并且数据包没有发送有效的后面跟着SFD的前导码,则丢包。(在这种情况下,根据802.3标准,有效的前导被定义为跟着sfd字节的数据字节。)
接收-FIFO 包丢弃
暂停包丢弃
DMAC过滤器
接收冲突
当在半双工模式(AGL_GMX_PRT 0/1_CFG[双工]=0)工作时,接收方丢弃任何不满足时隙时间的数据包。请注意,延迟碰撞通常不会被丢弃,因为 他们满足时隙。由于上述任何其他原因,延迟碰撞可以被丢弃。
接收-包检查
接收链路状态
MAC 包传输
传输FIFO为1KB。当FIFO具有整个数据包或FIFO长度超过已编程字节数(AGL_GMX_TX0/1_Thresh)时,AGL将开始数据包传输。阈值 d足够大以避免内流,小到足以避免过度延迟。此寄存器的推荐值是寄存器的重置值,它将在最广泛的配置中工作。在半双工模式下,如果数据包遇到冲突,则会自动重试AGL_GMX_TX_COL_尝试次数。如果数据包仍然冲突,则AGL丢弃数据包,设置AGL_GMX_TX_INT_REG[XSCOL<0/1>/XSDEF<0/1>],如果设置了AGL_GMX_TX_INT_EN[XSCOL<0/1>/XSDEF<0/1>],则会发生中断。
MAC 传输-数据包选项
MAC冲突处理
爆发(Bursts)
CN61XX支持在1000 mb/s模式的半双工链路上的数据包爆发。RGMII传输继续发送数据包(如果数据包可以发送),直到达到爆发限制(AGL_GMX_PRT 0/1_CFG[Burst]),IFG循环充满载体延伸。
连接性
AGL支持丰富的统计数据收集,如表23-5所述,以支持RX RMON和TX RMON。有关统计数据的完整列表,请参阅23.10节中的CSR说明
preamble/sfd:前导码(Preamble)和帧开始字符(SFD)用于实现传输信号的同步。以太网(10Mbit/s和100Mbit/s)在空闲时不发送信号。这样,为了让所有网卡和接口准备开始接收帧,在帧中要增加这样的信息“注意!你要开始接收帧了”,前导码和帧开始字符就是完成这个任务。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)