MPC860SAR ATM控制器架构解析与实战配置指南

📅 2026/6/19 8:02:27
MPC860SAR ATM控制器架构解析与实战配置指南
1. MPC860SAR ATM控制器核心架构解析MPC860SAR这颗芯片我当年在通信设备公司做ATM接入网卡时用得非常多。它本质上是在经典的MPC860 PowerQUICC通信处理器内核基础上集成了一个硬件ATM SAR引擎。这个设计非常巧妙把原本需要CPU软处理、极其消耗资源的ATM信元分段重组SAR工作下放给了通信处理器模块CPM里的专用微码和硬件逻辑让主频不高的PowerPC核心能腾出手来处理更高层的协议栈。它的核心价值在于用一个单芯片就实现了从T1/E1、ADSL物理层到ATM层的完整处理。你不再需要外挂一个独立的ATM SAR芯片比如当时常见的IDT或PMC-Sierra的器件这直接降低了板卡面积、功耗和BOM成本。对于设计ATM用户端设备CPE、边缘路由器线卡或者早期的宽带接入汇聚设备来说是性价比很高的方案。芯片内部ATM功能主要占用的是SCC4和IDMA1的资源。这意味着如果你启用了UTOPIA接口SCC4这个串行通信控制器和IDMA1这个DMA通道就不能作他用了。同样ATM信元速率控制器APC依赖Timer 4所以一旦启用ATMTimer 4也无法用于通用定时。这是硬件资源上的取舍在项目规划初期就必须明确。1.1 两种工作模式UTOPIA与串行模式的本质区别MPC860SAR提供了两种与物理层对接的方式这是理解其设计的关键。UTOPIA模式是标准的ATM论坛接口8位数据总线工作在最高25MHz时钟下提供信元级的握手Cell-Level Handshake。在这种模式下芯片作为ATM层主设备通过UTOPIA总线直接与PHY芯片如ADSL收发器或SONET/SDH成帧器交换完整的53字节信元。PHY负责生成和校验信头差错控制HECMPC860SAR收发的是去掉HEC后的52字节信头4字节载荷48字节或扩展信元。它的吞吐量最高官方数据在50MHz系统时钟下聚合收发速率可达60Mbps适合需要高带宽的背板或上行链路接口。串行模式则更为灵活你可以使用任何一个SCC串行通信控制器来对接物理层。这时MPC860SAR不仅处理AAL5/AAL0的SAR还内置了传输汇聚TC子层功能。这意味着它要亲自干很多脏活累活进行HEC的生成/校验、信元定界基于HEC的搜索与同步、载荷的加扰/解扰使用X^431多项式以及空闲/未分配信元的插入与剥离。这种模式通常用于直接连接E1/T1或ADSL线路接口单元LIU因为TC层处理正是这些TDM链路承载ATM信元所必需的。当然性能会有所下降同样50MHz时钟下聚合速率约为20Mbps。选择哪种模式取决于你的物理层芯片。如果PHY芯片自带完整的UTOPIA接口比如很多ADSL芯片就用UTOPIA模式省事且性能高。如果你的物理层是简单的串行比特流比如某些成帧器输出或者你想用芯片自带的SCC直接驱动变压器接E1线那就用串行模式。1.2 核心数据通路缓冲描述符与连接表机制这是MPC860SAR高效管理的精髓也是编程模型中最需要理解的部分。它没有采用为每个虚通道VC分配固定内存的笨办法而是借鉴了PowerQUICC系列经典的缓冲描述符环BD Ring机制并进行了多通道扩展。缓冲描述符BD你可以把它理解为一个“数据包搬运工的工作单”。每个发送或接收通道都有自己的BD链表存在于外部内存如SDRAM中。一个BD主要包含两个信息1一个指向实际数据缓冲区的指针2控制与状态位如数据长度、帧首尾标志、中断使能等。对于AAL5一个协议数据单元CPCS-PDU可能跨越多个缓冲区和多个BD对于AAL0一个BD就对应一个完整的信元不含HEC。连接表TCT/RCT这是每个虚通道的“控制中心”位于双端口RAMDPR或外部内存中。每个通道都有两个连接表发送连接表TCT和接收连接表RCT。TCT/RCT里存放了该通道的当前状态如是否正在处理一个帧、当前工作指针指向BD链表中的哪个BD、指向缓冲区内的哪个位置、通道特定参数如ATM信头值、APC速率控制参数以及临时计算数据如CRC32中间值。这种设计使得芯片能为多达32个内部通道或通过扩展模式支持6.5万个外部通道同时维护独立的SAR状态实现真正的硬件并行处理。当收到一个信元硬件会根据VPI/VCI查表找到对应的通道号进而定位到该通道的RCT。RCT会指示将信元载荷放到哪个接收缓冲区的哪个位置并更新CRC等状态。发送过程类似APC调度到某个通道后硬件根据其TCT找到待发送的数据封装成信元送出。实操心得内存对齐与性能BD中指向数据缓冲区的指针必须16字节对齐即地址低4位为0这是为了匹配32位PowerPC架构的缓存行Cache Line和DMA突发传输Burst Transfer的要求。不对齐会导致性能急剧下降甚至数据错误。在分配内存池时务必使用memalign()或类似函数。此外接收缓冲区的长度由参数RAM中的SMRBLR定义必须是48字节的整数倍因为每个ATM信元载荷就是48字节。2. UTOPIA接口深度配置与多PHY管理UTOPIA接口是芯片与外部PHY芯片通信的桥梁其配置正确与否直接关系到链路的稳定性。2.1 单PHY模式下的信号与初始化在单PHY模式下关键信号如下UTPB[7:0]8位双向数据总线位于Port D。SOC (Start of Cell)信元开始信号输入/输出位于PD3。在接收时PHY用它指示信元边界在发送时MPC860SAR用它指示信元开始。RxCAV (Receive Cell Available)接收信元可用输入位于PC15复用DREQ0。PHY拉高此信号表示其FIFO中有一个完整信元待读取。TxCAV (Transmit Cell Available)发送信元可用输入位于PB15。PHY拉高此信号表示其可以接收一个新的信元。RxENB (Receive Enable)接收使能输出位于PD11。MPC860SAR拉高此信号开始从UTOPIA总线读取信元数据。TxENB (Transmit Enable)发送使能输出位于PD10。MPC860SAR拉高此信号开始向UTOPIA总线写入信元数据。UTPCLKUTOPIA时钟输出位于PD9。由MPC860SAR产生频率必须≤25MHz通过系统时钟控制寄存器SCCR的DFUTP和DFAUTP字段分频得到。初始化序列必须严格遵循以下步骤否则可能导致CPM锁死先软后硬在使能UTOPIA硬件接口之前必须完成所有ATM参数和数据结构的配置如参数RAM、连接表、BD等。屏蔽接收设置参数RAM中SRFCR[DIS] 1暂时屏蔽RxCAV信号。配置Port D设置PDPAR寄存器将PD相关引脚功能切换到UTOPIA模式PDPAR[ATM]和PDPAR[UT]置1。特别注意此时由于引脚复用变化可能会在RxCAV引脚上产生一个毛刺信号这正是步骤2屏蔽的原因。配置Port C配置PCPAR、PCDIR和PCSO使能PC15作为RxCAV输入。配置Port B配置PBPAR和PBDIR使能PB15作为TxCAV输入。解除屏蔽清除SRFCR[DIS] 0使能UTOPIA接口。步骤3到步骤6之间必须间隔至少20个系统时钟周期以确保信号稳定。2.2 多PHYMPHY模式的实现与陷阱MPC860SAR支持最多连接4个PHY设备这对于需要多个物理端口如多个ADSL链路汇聚到一个ATM交换结构的场景非常有用。多PHY模式通过两个额外的信号实现PHREQ[1:0]PHY请求总线输入位于PB[17:16]。当某个PHY有信元要发送时它不仅在RxCAV上发出请求还会在PHREQ总线上输出自己的PHY编号0-3。PHSEL[1:0]PHY选择总线输出位于PB[21:20]。在响应接收或发起发送时MPC860SAR通过此总线告知所有PHY当前正在与哪个PHY通信。多PHY模式下的关键逻辑变化地址映射扩展在查表Look-up Table或地址压缩Address Compression模式下通道号Channel Number的低2位被用来表示PHY编号。这意味着每个PHY有自己独立的地址映射空间。例如在内部查表模式下每个PHY最多只能使用8个通道因为总共32个内部通道4个PHY平分。独立的APC表每个PHY拥有自己独立的APC参数表用于独立的信元速率控制。它们在内存中是连续存放的APCPTR指向PHY0的表头PHY1的表头在APCPTR32以此类推。发送仲裁这是一个极易出错的点。在多PHY模式下TxCAV信号的含义变了。它不再是某个PHY“我可以接收”而是所有PHY都准备好接收的“与”信号。也就是说只有当4个PHY的发送FIFO都有空间时外部逻辑才需要将TxCAV置高。MPC860SAR内部APC调度器决定下一个信元发给哪个PHY后会先在PHSEL总线上输出PHY编号然后再拉高TxENB进行发送。接收优先级当多个PHY同时通过PHREQ和RxCAV发出接收请求时MPC860SAR内部有固定优先级通常是PHY0最高。外部逻辑也可以增加优先级仲裁器。多PHY配置步骤除了配置单PHY所需的Port B、C、D还需将PB[21:20]配置为输出PBDIR[21:20]1PB[17:16]配置为输入PBDIR[17:16]0并将它们的PBPAR相应位清零设置为通用I/O模式。在参数RAM中设置SRSTATE[MPY]1和STSTATE[MPY]1启用多PHY模式。在参数RAM的APCST寄存器中设置NMPHY字段指明连接的PHY数量1-4。为每个PHY配置独立的地址映射表和APC参数表。避坑指南多PHY模式下的“僵尸PHY”问题在多PHY系统中如果某一个PHY设备故障持续无法准备好接收信元即始终无法使能TxCAV会导致整个发送队列停滞因为TxCAV是所有PHY的“与”信号。必须在硬件或软件层面增加监控机制。例如外部逻辑可以监控每个PHY的本地“就绪”信号如果某个PHY超时未就绪则通过逻辑“与门”将其排除在总的TxCAV生成逻辑之外。同时软件需要检测到这一情况并通过“停止发送中止”命令将发生给该故障PHY的通道全部停用防止APC调度器不断尝试向一个“黑洞”发送信元。3. AAL5与AAL0的SAR硬件实现细节3.1 AAL5的完整处理流程AAL5用于数据传输如IP over ATMRFC 2684。MPC860SAR的硬件SAR极大地减轻了CPU负担。发送端分段CPU准备一个CPCS-PDU通常是一个IP包放入一个或多个内存缓冲区并设置好该通道的发送BD链表。在最后一个BD中设置LLast位并在CPCS-UUCPI字段填入用户信息和填充指示。CPU通过TRANSMIT_ACTIVATE_CHANNEL命令激活该通道。APC会根据该通道的APCP信元间隔参数将其通道号插入APC调度表。当APC调度到该通道且PHY准备好TxCAV有效时发送引擎开始工作。硬件自动完成以下操作从BD指向的缓冲区中每次读取48字节载荷。实时计算整个CPCS-PDU的CRC32。从该通道的TCT中取出预配置的ATM信头CHEAD字段为每个信元加上。对于最后一个信元硬件会 a. 自动添加填充Padding使载荷为48字节的整数倍。 b. 将计算好的CRC32、数据长度TTMLEN、以及BD中的CPCS-UUCPI字段组成8字节的CPCS-PDU尾部放入信元载荷的末尾。 c. 将信元信头中的PTI字段的比特1PTI[1]置1标识此为帧的最后一个信元。发送完成后更新TCT中的缓冲区指针和长度如果BD的IInterrupt位被设置则产生TXB中断通知CPU。接收端重组接收引擎根据信元头的VPI/VCI通过查表找到对应的通道和RCT。硬件自动完成以下操作将48字节载荷写入当前接收缓冲区。实时计算CRC32。检查信元头中的CLP信元丢失优先级和EFCI显式前向拥塞指示位记录在RCT中。如果信元PTI[1]为1最后一个信元则 a. 从载荷中提取CPCS-PDU尾部CRC32、长度、CPCS-UU/CPI。 b. 将计算出的CRC32与收到的CRC32比较结果记录在BD的CR位。 c. 将接收到的数据总长度RTMLEN与尾部中的长度字段比较结果记录在BD的LN位。 d. 移除尾部中的填充字节。 e. 将CPCS-UU/CPI字段写入BD。 f. 关闭当前BD清除E位如果I位置位则产生RXF中断。如果发生CRC错误、长度不匹配或帧中止硬件会设置BD中相应的错误位并产生中断。3.2 AAL0的“直通”模式AAL0也叫“空AAL”或“原始信元”模式用于传输OAM操作、管理和维护信元或任何不需要AAL5复杂处理的信元流。在这种模式下SAR硬件不做分段重组只做简单的存储转发。发送CPU直接在缓冲区中组装好完整的52字节4字节信头 48字节载荷信元。硬件只是原样将52字节数据通过UTOPIA接口发出在串行模式下会额外生成并插入HEC。如果BD中CR10位被设置硬件还会为载荷计算CRC10用于OAM信元并附加在载荷后。接收硬件将收到的52字节信元不含HEC直接存入缓冲区。如果使能了CRC10校验则会进行计算和验证结果反映在BD的CR位。AAL0缓冲区的长度固定为64字节但只使用前52字节。后12字节保留未用可用于软件存储一些额外信息。注意事项AAL5缓冲区管理的特殊要求首尾缓冲区AAL5帧的第一个和最后一个缓冲区其数据长度BD中的Data Length可以小于48字节但必须大于0。中间的所有缓冲区数据长度必须大于等于48字节。连续BD如果一个AAL5帧被分割在多个缓冲区中这些缓冲区对应的BD必须在BD链表中连续排列。硬件按照BD链表顺序处理如果中间有未就绪发送或未空接收的BD会导致帧处理错误。长度溢出AAL5 CPCS-PDU长度字段是16位最大65535字节。如果软件错误地组成了一个超过此长度的帧硬件在接收端检测到CRC错误因为长度字段会回绕并在BD的Data Length字段中记录(实际长度) MODULO 0xFFFF。这是排查异常长帧问题的一个重要线索。4. ATM信元速率控制APC原理与调优ATM Pace Controller是MPC860SAR实现服务质量QoS的关键。它不是一个简单的FIFO而是一个基于时间槽的加权轮询调度器能够为每个虚通道VC提供精确的信元速率控制支持CBR恒定比特率、UBR未指定比特率并能通过软件动态调整速率来支持ABR可用比特率。4.1 APC算法核心调度表与时间槽APC的核心是一个位于双端口RAM中的调度表APC Table。这个表是一个半字16位数组每个条目可以存放一个通道号0-65534或一个空标记0xFFFF。表的长度APCT_END - APCT_BASE由用户定义它直接决定了系统能支持的最低通道速率。APC定时器Timer 4产生周期性的“滴答”tick这个周期称为一个时间槽Slot Time。每个时间槽内APC可以调度发送多个信元数量由参数NCITSNumber of Cells In Time Slot定义。NCITS可以是一个带小数的值例如2.5表示平均每个槽发送2.5个信元实际表现为2个、3个、2个、3个……交替。扫描指针APCT_PTR每个APC滴答这个指针在调度表中前进一个条目。服务指针APCT_SPTR跟随在扫描指针后面负责处理因上个时间槽“拥堵”而滞留的通道。工作流程用户通过命令激活一个发送通道其通道号会被插入到当前APCT_PTR指向的调度表条目中。如果该条目已有一个通道则通过TCT中的APCL字段形成一个链表。每当Timer 4触发APCT_PTR前进一格。APC检查APCT_PTR新指向的条目。将该条目链表上的通道号最多NCITS个取出按顺序写入发送队列Transmit Queue。对于每个被取出的通道APC根据其TCT中的APCP信元间隔参数计算其下一次应被调度的时间新位置 (当前APCT_PTR值 APCP) MOD 表长度。然后将该通道号重新插入到调度表的新位置。发送器从发送队列头部读取通道号并为每个通道发送一个信元。4.2 关键参数计算与配置示例假设我们要设计一个基于E1链路2.048 Mbps的ATM接口需要支持3个CBR通道VC1语音通道64 Kbps (CBR)VC2视频会议384 Kbps (CBR)VC3数据备份1 Mbps (CBR)步骤1确定系统参数系统时钟CLKOUT假设为50 MHz。PHY速率PE1的ATM有效速率约为1.92 Mbps扣除物理层开销。信元大小53字节 * 8比特 424比特。信元速率Cell RateP / 424 ≈ 4528 cell/s。步骤2选择NCITS和调度表大小M我们希望调度粒度细一些以减少信元时延变化CDV设NCITS 1即每个时间槽只调度一个信元。 那么时间槽周期 1 / 信元速率 ≈ 220.8 us。 Timer 4的计数值TMR4 时间槽周期 * CLKOUT 220.8us * 50e6 ≈ 11040。 我们需要支持的最低速率通道是VC164Kbps其信元速率 64000 / 424 ≈ 151 cell/s。 根据公式min_rate P / ((M - 1) * NCITS)可得M P / (min_rate * NCITS) 1。M 4528 / 151 1 ≈ 30 1 31。因此APC调度表长度至少需要31个条目。我们取322的幂次便于计算。步骤3计算各通道的APCP值APCP整数部分 APCPF/65536小数部分 P / (NCITS * desired_rate)VC1 (64Kbps): APCP 4528 / (1 * 151) ≈ 30.0。可配置为 APCP30, APCPF0。VC2 (384Kbps): 信元速率 384000/424 ≈ 906 cell/s。APCP 4528 / 906 ≈ 5.0。可配置为 APCP5, APCPF0。VC3 (1Mbps): 信元速率 1000000/424 ≈ 2358 cell/s。APCP 4528 / 2358 ≈ 1.92。可配置为 APCP1, APCPF0.92*65536≈60293。步骤4配置双优先级APC支持两个优先级表通过APCST[PL2]使能。高优先级表用于CBR和rt-VBR业务低优先级表用于UBR和nrt-VBR业务。APC会先服务高优先级表中的通道如果该时间槽未满即已调度通道数 NCITS则再从低优先级表中取通道补足。这实现了简单的优先级调度。4.3 发送队列与防溢出机制发送队列是一个循环缓冲区深度至少应为NCITS 2。TQAPTR由APC写入TQTPTR由发送器读取。如果APC写得太快导致TQAPTR即将追上TQTPTR队列满APC会暂停调度APCT_SPTR停滞直到发送器腾出空间。这保证了不会因队列溢出而丢失信元但可能导致通道的实际发送速率暂时低于配置速率并可能触发APCOAPC Overrun中断告警。调优经验平衡性能与延迟NCITS的选择增大NCITS可以减少Timer 4的中断频率降低CPM的调度开销提升整体吞吐量。但副作用是同一个时间槽内被调度的多个信元其发送顺序是不确定的由链表顺序决定这会增加信元时延变化CDV。对于语音等对抖动敏感的业务建议设置NCITS1。调度表初始化在激活任何通道前务必用0xFFFF填满整个APC调度表表示空槽。通道激活时机为了避免多个通道被集中插入到调度表的同一个位置导致瞬时拥塞最好在系统初始化时以随机或交错的时间间隔依次发出TRANSMIT_ACTIVATE_CHANNEL命令。动态速率调整ABR业务可以通过软件实时修改TCT中的APCP和APCPF值来动态调整通道速率。这是实现ABR流量控制的核心。修改是立即生效的下次该通道被调度时就会按照新速率重新计算其下一次调度位置。5. 地址映射与虚通道管理MPC860SAR支持三种地址映射方式用于将接收到的ATM信元头VPI/VCI快速映射到内部的通道号。5.1 内部查表法Internal Look-up Table这是最简单的方式但只支持最多32个通道。在双端口RAM中维护两个表匹配表Address Matching Table存放最多32个32位的VPI/VCI值可配合HMASK进行掩码过滤。指针表Pointing Table与匹配表一一对应存放16位的连接表偏移地址即通道号。工作流程收到信元头后与匹配表中的条目从后往前从AMEND到AMBASE逐一比较。找到匹配项后使用对应位置的指针表条目作为通道号。未匹配的信元被送往通道0全局原始信元队列。优点速度快所有操作在片内DPR完成。缺点容量有限且每次增删通道都需要移动表内数据操作需小心。5.2 地址压缩法Address Compression支持大量通道最多65535个通过两级查表节省内存。它特别适用于VPI/VCI空间中有大量连续或规律地址的场景。第一级表FLT对信元头中的GFC、VPI和PTI字段共12位进行掩码FLMASK生成一个索引Pointer1在FLT中找到对应的条目。该条目包含一个对VCI字段的二级掩码SLMASK和一个二级表基址偏移SLTOFFSET。第二级表SLT用SLMASK对VCI字段进行掩码生成第二个索引Pointer2。结合SLBASE和SLTOFFSET在SLT中找到最终的通道号。优点非常灵活可以高效映射稀疏或连续的VPI/VCI空间。缺点配置复杂需要仔细设计FLMASK和SLMASK。如果掩码位不连续会导致未定义行为。5.3 内容可寻址存储器法CAM支持大量通道且适合VPI/VCI随机分布的场景。需要外接一个CAM芯片。 工作流程收到信元头后MPC860SAR通过DMA将掩码后的信元头写入CAMADD地址对CAM进行写操作紧接着再从CAMADD地址进行一次读操作。CAM芯片需要在读操作期间在数据总线D[0]上输出匹配成功信号低有效并在D[16-31]上输出匹配的通道号。优点查找速度极快一次DMA读写且与VPI/VCI分布无关。缺点需要外部硬件CAM芯片增加成本和板面积。5.4 扩展通道模式当通道数超过32时必须使用地址压缩法或CAM法并启用扩展通道模式设置SRFCR[EXT]1。在此模式下通道号0-31其连接表TCT/RCT仍位于片内双端口RAM访问速度快。通道号32及以上其连接表位于外部内存由ECTBASE指向。每次访问这些通道的连接表都需要通过DMA因此性能会随外部通道比例增加而下降。在软件设计时应将活跃的、对性能要求高的通道分配在0-31号。排查技巧信元误映射或丢失如果发现某些VPI/VCI的信元没有被正确路由到预期的通道或者被送到了原始信元队列通道0请按以下步骤排查检查HMASK/FLMASK确认掩码设置正确没有意外屏蔽掉需要匹配的位。例如如果你希望匹配特定的VPI/VCI但HMASK中对应的位被清零那么永远无法匹配。检查查表内容通过调试器读取内存中的匹配表、指针表或CAM内容确认写入的VPI/VCI值和通道号是正确的。检查CUMB位在地址压缩模式下如果设置了FLMASK[CUMB]硬件会检查所有被掩码屏蔽的位是否为零。如果不为零信元会被送到原始信元队列。确保你发送的信元中这些未使用的位确实是零。检查OAM筛查如果FLMASK中最高位的PTI比特指示OAM信元被屏蔽设为0而收到的信元恰好是OAM信元PTI最高位为1该信元会被自动送往原始信元队列。这是正常行为目的是将OAM信元与用户数据流分离处理。6. 实战问题排查与性能优化6.1 常见异常中断处理MPC860SAR通过异常队列Exception Queue和事件寄存器IDSR1/SCCE报告错误。关键中断位中断位 (事件寄存器)含义可能原因与处理SYNC(IDSR1/SCCE)UTOPIA SOC或串行信元定界丢失。UTOPIA检查PHY芯片时钟与SOC信号是否稳定。串行模式检查线路质量、时钟同步或ALPHA/DELTA参数是否合适通常为7和6。需要重新初始化接收器。IQOV中断队列溢出。主机CPU处理中断的速度跟不上中断产生的速度。检查中断服务程序ISR是否过于耗时或考虑合并中断调整INT_CNT。GUN(SCCE)全局发送FIFO下溢。发送数据供给不足。检查APC调度是否过激进总速率超过PHY能力或发送BD链表是否已耗尽没有就绪的BD。这是一个致命错误需要重启发送通道。GOV(SCCE)全局接收FIFO上溢。接收数据处理不及时。检查接收BD链表是否已满没有空的BD或主机读取数据是否太慢。这是一个致命错误需要重启接收通道。APCO(异常队列)APC过载。所有激活通道的1/APCP之和大于NCITS即理论调度需求超过了发送队列的吞吐能力。需要降低某些通道的速率或增加NCITS但会增加CDV。BSY(异常队列)接收忙。接收信元时对应通道的BD链表已无空缓冲区。信元被丢弃。需要检查该通道的接收BD链表管理确保及时提供空BD。UN(异常队列)发送下溢。某个通道被调度发送时其当前BD的数据长度不足以构成一个完整信元对于AAL5非首尾BD需≥48字节。发送一个空闲信元代替。检查发送数据准备逻辑。6.2 性能优化要点内存布局将频繁访问的数据结构放在高速内存中。双端口RAMDPR速度最快应存放内部通道的连接表TCT/RCT、APC参数表、发送队列和中断队列。BD链表和数据缓冲区可以放在外部SDRAM但尽量保证它们位于缓存友好的区域。BD链表长度不宜过短。对于高速通道建议每个通道的发送/接收BD链表至少有4-8个BD形成一个缓冲池避免因软件处理不及时导致BSY或UN中断。中断合并通过设置INT_ICNT可以让CP在累积一定数量的异常事件后才触发一次主机中断设置GINT位减少中断上下文切换的开销。对于高吞吐场景可以将此值设置为4或8。使用连续模式CM位对于需要极低延迟的流式数据如语音可以在BD中设置CMContinuous Mode位。这样当CP处理完当前BD后不会自动将其标记为“空/完成”而是立即循环使用。这省去了软件重新设置BD的时间但要求软件必须在下一次硬件覆盖数据前将数据取走或准备好。DMA与缓存一致性PowerPC核心有数据缓存。当CPM通过DMA直接读写内存如BD、数据缓冲区时必须确保缓存一致性。在BD或数据缓冲区被双方CPU和CPM共享的内存区域应设置为缓存无效或写回模式。通常的做法是在驱动中在访问这些区域前执行缓存失效dcbi或写回dcbf指令。6.3 调试手段利用时间戳TSTAMPRCT中的TSTAMP字段会在收到一个AAL5帧的第一个信元时记录下CP定时器的值。软件可以定期读取此值如果发现某个通道的TSTAMP很久没有更新而INF位仍为1则可能发生了帧中止或死锁。监控发送队列通过读取TQTPTR和TQAPTR可以判断发送队列的拥堵情况。如果两者差值持续很大说明APC调度过快或PHY发送过慢。原始信元队列通道0将所有不匹配的信元包括OAM信元、信元头错误信元等导向通道0。通过监控通道0的接收BD可以捕获到许多非预期的信元这对于调试地址映射错误或网络问题非常有帮助。最后MPC860SAR的文档虽然详尽但有些细节和陷阱只有在实际调试中才会遇到。例如在混合使用UTOPIA和串行模式时APC的配置APCST[NSER, CSER]必须正确形成闭环否则定时器中断可能无法正确遍历所有激活的ATM端口。再比如在修改一个正在活跃传输的通道的APC速率参数APCP时最好先将其停用TRANSMIT_DEACTIVATE_CHANNEL修改参数等待一个完整的APC表扫描周期后再重新激活以避免速率计算出现瞬时错误。这些经验都是在一次次板卡调试和深夜抓取逻辑分析仪波形中积累下来的。