深入解析MSC8102PFC:多核DSP硬件架构与VoIP网关设计精髓
1. 项目概述与核心价值
在嵌入式通信处理领域,尤其是高密度语音处理(VoIP)网关或媒体服务器这类对实时性和并行计算能力要求苛刻的应用中,硬件架构的设计直接决定了系统的性能天花板和长期稳定性。飞思卡尔(Freescale,现为NXP的一部分)推出的MSC8102 Packet Telephony Farm Card(MSC8102PFC)就是这样一款经典的、面向电信级应用的开发板。它不是一块简单的单板计算机,而是一个高度集成的“处理农场”,其核心思想是通过一个强大的聚合处理器(MSC8101)来管理和调度一个由五颗StarCore DSP(MSC8102)组成的阵列,专门用于处理并发的语音数据流。
我当年接触这块板卡时,正是VoIP技术从实验室走向大规模商用的关键时期。客户需要在一块标准尺寸的PMC(PCI Mezzanine Card)卡上,实现上百路甚至数百路G.711/G.729语音编解码、回声消除、DTMF检测等任务。MSC8102PFC的硬件架构完美回应了这一需求:MSC8101负责协议终结、数据包调度和系统控制,而五颗MSC8102 DSP则作为纯粹的计算单元,通过高速的DSI(Device-Specific Interface)接口接收数据,处理后再通过TDM接口送回。这种异构、分布式的设计,将控制面与数据面分离,是当时构建高性能、可扩展通信设备的主流思路。
理解这块板卡的硬件架构,不仅仅是看懂一张原理图或数据手册。其真正的技术价值在于,它揭示了在一个紧凑的嵌入式系统中,如何实现多核DSP的高效协同、如何设计低延迟高带宽的内存与总线子系统,以及如何将复杂的电信总线(如CT Bus)与通用处理器、DSP无缝对接。无论是对于从事传统电信设备开发的工程师,还是对学习多核嵌入式系统设计的学生和爱好者,深入剖析MSC8102PFC都像打开了一本经典的硬件设计教科书。接下来,我将结合手册内容和实际调试经验,为你层层拆解这个系统的硬件奥秘。
2. 硬件架构整体设计与思路拆解
MSC8102PFC的设计目标非常明确:在标准的PTMC(PCI Telecom Mezzanine Card)卡形态下,提供一个强大的、可编程的语音数据包处理平台。整个架构可以清晰地划分为三个层次:控制与聚合层、并行计算层和网络与电信接口层。这种分层设计是保证系统高效、可靠运行的关键。
2.1 核心设计思想:控制与计算的分离
这是整个架构的基石。MSC8101作为“大脑”或“聚合器”(Aggregator),它是一颗基于PowerPC核心的通信处理器,运行着Linux操作系统。它的职责是宏观的“控制面”工作:通过其FCC(Fast Communications Controller)接口,从PMC背板接收来自网络的ATM或以太网数据包(承载着语音数据),进行协议解析,并将净载荷(即语音数据)提取出来。同时,它还要负责管理整个DSP阵列的生命周期,包括上电引导、任务分发、状态监控和中断处理。
而五颗MSC8102 DSP则构成了纯粹的“数据面”或“计算农场”。每颗MSC8102都拥有强大的StarCore DSP内核和本地内存,专门负责计算密集型的语音信号处理算法,如编解码、滤波、增益控制等。它们不直接面对复杂的网络协议,只接收来自MSC8101的“纯净”媒体数据块,处理完毕后再交还回去。这种职责分离使得MSC8101可以专注于I/O和调度,而MSC8102可以全力进行数值运算,互不干扰,极大提升了系统整体效率。
2.2 关键互联总线:系统总线与DSI接口
MSC8101和MSC8102阵列之间如何通信,是架构设计的核心挑战。MSC8101通过其60x兼容的系统总线与外部存储器(Flash、SDRAM)以及一个FPGA相连。这个FPGA在此扮演了至关重要的“桥梁”角色。MSC8102则通过其专用的DSI接口与外部通信。
这里的设计精妙之处在于:MSC8101的系统总线并不是直接连接到MSC8102的DSI上。在异步DSI模式下,MSC8101的内存控制器(UPM, User-Programmable Machine)产生类似SRAM访问的时序,通过FPGA(此时工作在透明模式)直接控制MSC8102的DSI。而在同步DSI模式下,FPGA的作用更加关键,它需要实现一个类SSRAM的同步接口,将MSC8101的系统总线事务转换为MSC8102 DSI能识别的同步突发传输。这种通过FPGA进行接口适配的设计,提供了极大的灵活性,允许后期通过更新FPGA逻辑来优化时序或增加新功能。
2.3 内存子系统设计:分层与专有
内存设计体现了对数据流和性能的深思熟虑。MSC8101拥有自己独立的8MB SDRAM和4MB Boot Flash。这片SDRAM主要用于协议处理时的数据缓冲、操作系统运行以及作为DSP数据的中转缓存。虽然手册提到这片SDRAM对于“正常的聚合功能”并非必需,但它为处理突发流量和复杂的数据结构提供了宝贵的弹性空间。
更为重要的是,每颗MSC8102 DSP都配备了专属的16MB SDRAM。这是典型的“紧耦合内存”设计。语音处理算法(如回声消除的滤波器状态)需要频繁、快速地访问大量数据,将这些数据存放在DSP芯片外部、但通过专用总线连接的本地SDRAM中,既能满足容量需求,又能保证访问延迟和带宽的确定性。五片SDRAM独立寻址,避免了多核争用同一内存资源带来的性能瓶颈和仲裁开销,是实现真正并行处理的关键。
2.4 电信接口集成:TDM与CT Bus
作为语音处理卡,与传统的电路交换网络(PSTN)对接是刚需。MSC8102PFC通过其TDM(时分复用)接口实现了这一点。每颗MSC8102提供4个双向TDM链路,五颗DSP总共提供了20个TDM收发流。这些TDM流被巧妙地映射到PTMC定义的CT Bus(H.100标准)的特定数据线上。CT Bus是一种在电信板卡间传输多路TDM数据的标准背板总线,支持大量时隙。通过这种映射,板卡上的DSP可以直接处理从CT Bus来的PCM语音时隙,或将处理后的语音数据发送回CT Bus,实现了与外部E1/T1接口卡、模拟用户线卡的无缝对接。
注意:在配置TDM路由时,需要仔细对照手册中的映射表(如Table 27)。例如,DSP1的TDM0发送数据(TDM0TDAT)可能映射到CT_D0,而接收数据(TDM0RDAT)映射到CT_D1。这种映射关系是在硬件布线时确定的,软件驱动必须据此正确配置DSP的TDM控制器和时隙分配,否则数据流将无法正确建立。
3. 核心组件深度解析与配置要点
3.1 MSC8101聚合处理器:系统枢纽
MSC8101是整个板卡的指挥中心。它基于PowerPC 603e核心,并集成了强大的CPM(Communications Processor Module),使其特别擅长处理通信协议。
3.1.1 系统总线与内存控制器配置
MSC8101的内存控制器(UPM/GPCM/SDRAM)是其与外部世界交互的核心。对于板载的8MB SDRAM(Micron MT48LC2M32B2),手册给出了详细的寄存器配置示例。关键在于理解页式交错(Page-Based Interleaving)的配置。
- 为什么用页式交错?这是一种提高SDRAM访问效率的技术。通过将连续的内存地址映射到不同SDRAM Bank的不同行(Row),当顺序访问内存时,可以在一个Bank预充电(Precharge)的同时访问另一个Bank的活动行,从而隐藏预充电延迟,提高突发传输效率。
- 如何配置?这涉及到OR(Option Register)和BR(Base Register)以及PSDMR(SDRAM Mode Register)的协同设置。例如,
ORx[ROWST] = 1001表示行地址从系统地址总线的A9开始。PSDMR[SDAM] = 010表示将内部地址A[9–19]复用到外部SDRAM地址线A[19–29]上。这些设置必须与物理SDRAM芯片的行/列地址位数完全匹配。 - 初始化序列是死命令:任何SDRAM上电后都必须执行严格的JEDEC初始化序列(预充电所有Bank -> 执行8次或以上自动刷新 -> 设置模式寄存器)。手册中给出的通过写PSDMR[OP]位并访问特定地址来触发这些命令的方法,是软件驱动必须严格遵循的步骤。跳过或顺序错误都会导致SDRAM无法正常工作。
3.1.2 DSI接口模式选择:同步 vs. 异步
DSI接口是连接MSC8101和DSP阵列的数据高速公路,其工作模式直接影响传输性能和系统复杂度。
- 异步模式(Asynchronous):这是类似SRAM的接口,无需与MSC8102内部时钟同步。它由MSC8101的UPM(用户可编程状态机)产生读/写、片选、字节使能等时序信号。优点是设计相对简单,FPGA只需做透明传递。缺点是速度较低,通常只支持单次访问(Non-burst),带宽受限。在MSC8102PFC上,这是出厂默认模式。
- 同步模式(Synchronous):这是一种高速、时钟同步的类SSRAM接口。它支持突发传输(Burst),一次可以传输256位数据(8个32位或4个64位访问)。这能极大提升聚合器与DSP阵列之间的数据吞吐量。但此模式必须依赖FPGA来实现复杂的同步逻辑和时钟域转换。手册提到,如需使用同步模式,需要联系飞思卡尔获取特定的FPGA固件。
- 广播写入(Broadcast):这是一个非常实用的功能。MSC8101可以通过一个独立的广播片选信号(如CS4),将相同的数据同时写入所有五颗MSC8102的相同地址。这在初始化DSP阵列的公共配置参数或下发全局命令时,可以节省大量时间和总线带宽。
3.1.3 引导(Boot)配置策略
板卡的上电引导方式通过DIP开关(SW2, SW3)进行设置,这决定了系统从哪里获取初始代码以及以何种频率运行。
- 从Flash引导(Boot From Flash):这是独立运行模式。MSC8101从片外4MB Flash(映射在CS0)读取启动代码和配置字(HRCW),然后初始化自身并引导DSP阵列。开关设置决定了核心/CPM/总线频率(如275/138/69 MHz)。
- 通过DSI引导(Boot Through DSI):这种模式下,MSC8101自身从Flash启动,但MSC8102 DSP阵列的配置字(HRCW)是通过DSI接口由MSC8101下发的。这要求先将正确的引导代码和DSP镜像写入Flash。开关
SW2.1 (CNFGS)需要设置为OFF,使MSC8102保持在复位状态,直到收到HRCW。 - 通过HDI16引导:MSC8101的16位主机接口(HDI16)也可以作为引导源,这允许外部主机处理器(如背板上的主CPU)直接配置和引导MSC8101,提供了更大的系统集成灵活性。
实操心得:在实验室调试时,最稳妥的方式是先从Flash引导开始,确保MSC8101自身能正常启动,并能通过串口输出信息。然后再尝试通过DSI引导DSP。务必根据手册中的表格(如Table 3, Table 4)精确设置每一个DIP开关。我曾因为SW3.4(Boot选择位)设错,导致MSC8101反复尝试从无效的HDI16启动,浪费了大量时间。
3.2 MSC8102 DSP阵列:计算引擎详解
五颗MSC8102 DSP是板卡的算力核心。每颗DSP都拥有独立的本地SDRAM和通往聚合器的DSI接口。
3.2.1 DSP本地SDRAM配置
每颗MSC8102配属的16MB SDRAM(MT48LC4M32B2)是其高效运行的保障。其配置原理与MSC8101的SDRAM类似,但参数因芯片容量和地址映射不同而有所差异。
- 容量与地址映射:16MB(1M x 32bit x 4 Banks)需要24根地址线(A[0:23])。在页式交错配置下,
ORx[ROWST] = 1000表示行地址从A8开始,ORx[NUMR]= 011表示有12根行地址线(A[8:19])。列地址则为A[22:29](8根)。Bank选择信号由A[16:17]提供(PSDMR[BSMA] = 011)。 - 性能调优提示:手册中给出的PSDMR设置(如
PSDMR = 0xC26737A3)被标记为“保守的”,可以在后续配置和更高总线频率下进行优化。例如,ACTTORW(激活到读/写延迟)和RFRC(刷新恢复周期)等时序参数,在确保稳定的前提下,可以尝试收紧以提高性能。但调整这些参数需要结合SDRAM芯片的数据手册和实际信号完整性测试,属于高级优化范畴。
3.2.2 DSI接口的从设备视角
对于MSC8102而言,其DSI接口是一个从设备接口。外部主机(通过FPGA)通过片选(HCS)、地址(HA)、数据(HD)和控制信号来访问其内部存储空间和寄存器。每个MSC8102都有一个硬连线的4位CHIP_ID(见表17),主机通过地址线的高位来区分要访问哪个DSP。这种设计使得主机可以用统一的地址空间来管理所有DSP,简化了软件模型。
3.2.3 TDM接口与CT Bus路由
这是板卡与外部电信网络物理连接的关键。每颗MSC8102的4个TDM接口(TDATx, RDATx)分别对应发送和接收数据流,并与TCLKx(时钟)、TSYNx(帧同步)配对。
- 路由复杂性:手册中的图10和表27清晰地展示了五颗DSP的20个TDM数据流是如何交叉连接到CT Bus的20条数据线(CT_D0~CT_D19)上的。这种交叉连接并非随意,而是为了在背板布线时平衡负载和减少串扰。例如,DSP1的TDM0和TDM1可能被分配到不同的CT Bus数据线对上。
- 时钟与同步:所有DSP的TDM时钟和帧同步信号都来自于CT Bus的公共时钟
CT_C8_A_B和帧同步CT_FRAME_A_B。这保证了所有DSP处理的话路在时隙上是严格对齐的,这是电信系统能正常工作的基础。 - 软件配置关键:驱动开发时,必须根据这个固定的硬件路由表,在每颗DSP的TDM控制器中正确设置其发送和接收数据线所对应的CT Bus数据线编号。配置错误会导致“张冠李戴”,即DSP1发送的数据被送到了DSP5对应的物理线路上。
3.3 可编程逻辑(FPGA)的角色
虽然手册没有给出FPGA的具体逻辑代码,但其作用贯穿始终:
- DSI接口适配器:在同步DSI模式下,实现MSC8101系统总线到MSC8102 DSI的协议转换。
- 中断路由交换机:将五颗MSC8102的中断输出(
INT_OUT)和通用IO(GPIO30)灵活地路由到MSC8101的7个中断输入线(A_IRQ[1-7])上。图8展示了标准的路由方式,但FPGA的可编程性允许根据软件需求重新分配中断源。 - 接口转换:例如,将MSC8101的FCC2 MII接口转换为RMII接口,以连接到PTMC Type III的RMII端口。
4. 板卡启动与调试实操全流程
理解了架构之后,如何让这块板卡“跑起来”是下一个挑战。以下流程基于手册“Getting Started”章节,并融合了实际操作的细节。
4.1 硬件准备与连接
- 静电防护(ESD):这是第一条,也是最重要的一条。板卡上有大量静态敏感器件,必须佩戴防静电手环,并在防静电工作台上操作。任何疏忽都可能造成不可逆的损坏。
- 板卡安装:将MSC8102PFC子卡正确插入Packet Telephony Development Kit (PDK) 基板的对应插槽。确保连接器对齐,用力均匀下压直至锁紧。
- 电源与JTAG连接:确保PDK基板电源(JP1)已连接。使用并行命令转换器(Parallel Command Converter)连接MSC8102PFC上的JTAG接口(P3)。这个JTAG链包含了板上所有21个核心(1个MSC8101 + 5个MSC8102 * 每个MSC8102有4个DSP内核?此处应为5颗MSC8102,每颗1个StarCore内核,共5个DSP内核,加上MSC8101的PPC内核,总计6个可调试核心。手册中“JTAG of 21 cores”可能指更细粒度的内部扫描链,但通常我们将其视为一个包含所有主要处理器的JTAG链)。在CodeWarrior工具中,需要选择对应的JTAG配置文件(如
PFCjtag21.cfg)。
4.2 DIP开关配置详解
这是启动成功与否的关键一步。我们需要根据引导需求配置SW2和SW3。
场景一:从Flash独立启动(最常用)
- 目的:让MSC8101和MSC8102都从板载Flash中的代码启动。
- 关键开关:
SW3.4:ON。设置Boot=0,禁用主机端口,从外部存储器(Flash)启动。SW3.1~SW3.3: 组合设置MODCK引脚,决定输入时钟和倍频,从而设定核心/CPM/总线频率。例如,OFF, OFF, ON 对应MODCK=6, CLKIN=34.5 MHz, 最终频率为Core/CPM/Bus = 138/69/34.5 MHz。SW3.8:ON。设置RSTCONF=0,使MSC8101作为复位配置主设备。SW2.8:ON,JP1短接1-2。这使能了完整的JTAG链(21 cores),便于后续用CodeWarrior调试所有处理器。
- 上电现象:上电后,MSC8101从Flash读取配置和代码,初始化自身和SDRAM,然后通过DSI接口配置并启动MSC8102阵列。大约4秒后(用于FPGA编程),所有DSP的状态LED应被点亮,表明启动成功。
场景二:MSC8102通过DSI由MSC8101引导
- 目的:MSC8101从Flash启动,但MSC8102的配置字(HRCW)由MSC8101通过DSI动态下发。这常用于灵活的配置管理。
- 关键开关:
SW2.1:OFF。设置CNFGS=1,使MSC8102等待通过DSI接收HRCW。SW2.4:ON。设置DSI64=0,DSI为32位模式。SW2.5:ON。设置DSISYNC=0,DSI工作在异步模式。SW3.6和SW3.7: 用于选择MSC8102的引导序列。
- 流程:MSC8101启动后,运行其Flash中的程序,该程序会通过DSI接口向每颗MSC8102写入其特定的HRCW,然后释放其复位,引导它们运行。
4.3 软件工具链与初步调试
- 启动CodeWarrior:飞思卡尔的CodeWarrior Development Studio是针对其处理器的一体化开发环境。确保其中的“Command Converter”服务正在运行,这是与JTAG调试器通信的桥梁。
- 连接与识别:在CodeWarrior中建立与板卡的JTAG连接。如果DIP开关和硬件连接正确,调试器应该能扫描到JTAG链上的所有设备(MSC8101和5个MSC8102)。
- 内存查看与验证:连接成功后,首先尝试读取MSC8101内存控制器相关寄存器的值(如OR2, BR2, PSDMR),验证其是否已按照硬件配置正确初始化。然后,可以尝试读取Flash起始地址的内容,看是否是有效的启动代码。
- DSP核心控制:在CodeWarrior的调试视图中,你应该能看到6个可调试的核心(1个PPC, 5个SC)。可以分别对它们进行暂停、运行、单步执行等操作。尝试向某颗MSC8102的本地SDRAM写入一个测试模式(如0xAA55AA55),然后再读回,验证其内存控制器和SDRAM是否工作正常。
5. 常见硬件问题排查与实战技巧
即使按照手册操作,在实际开发中仍会遇到各种问题。以下是一些典型的排查思路和经验。
5.1 板卡无法启动,所有LED不亮或异常
- 检查清单:
- 电源:用万用表测量板卡关键电源测试点(如各芯片的VCC核心电压、I/O电压、SDRAM电压)是否在正常范围内。特别是给FPGA和MSC810x供电的电压。
- 时钟:使用示波器测量MSC8101和MSC8102的时钟输入引脚(CLKIN),确保时钟信号存在、频率正确、幅值干净。
- 复位:检查MSC8101和MSC8102的复位信号(HRESET, SRESET)是否已在上电后正确释放(变为高电平)。如果一直被拉低,检查复位电路和配置开关(如
RSTCONF)。 - DIP开关:再次确认!这是最容易出错的地方。用放大镜仔细核对每一个开关的位置是否与目标启动模式完全一致。开关接触不良也可能导致问题。
- JTAG链:如果JTAG都无法连接,检查JTAG连接器是否接反、线缆是否完好,以及CodeWarrior中选择的JTAG配置文件是否正确。
5.2 DSP SDRAM访问失败或数据错误
- 症状:能启动,但运行到需要大量使用DSP本地SDRAM的代码时崩溃,或数据校验出错。
- 排查步骤:
- 寄存器配置:首先,在调试器中仔细核对MSC8102的SDRAM控制器寄存器(BR2, OR2, PSDMR)的值,是否与手册中针对MT48LC4M32B2芯片的推荐值一致。特别注意
SDAM,BSMA,SDA10这些地址映射相关的位。 - 初始化序列:确认你的启动代码或BSP(板级支持包)完整执行了SDRAM的JEDEC初始化序列(预充电 -> 8次刷新 -> 设置模式寄存器)。缺少任何一步都会导致SDRAM行为异常。
- 时序参数:如果是在提高了总线频率后出现的问题,很可能是时序参数(
RFRC,PRETOACT,ACTTORW,CL)不满足要求。需要根据新的时钟频率和SDRAM芯片的时序参数(tRC, tRCD, tRP, CL)重新计算并设置这些寄存器。 - 信号完整性:对于高速SDRAM接口,信号完整性问题(过冲、振铃、串扰)会导致偶发性的数据错误。可以用示波器查看SDRAM的时钟、地址、数据线信号质量。确保终端电阻匹配,走线长度控制符合设计要求。
- 寄存器配置:首先,在调试器中仔细核对MSC8102的SDRAM控制器寄存器(BR2, OR2, PSDMR)的值,是否与手册中针对MT48LC4M32B2芯片的推荐值一致。特别注意
5.3 DSI通信异常
- 症状:MSC8101无法读写MSC8102的内部存储器或寄存器,或读写数据不正确。
- 排查思路:
- 模式匹配:确认MSC8101和MSC8102两端的DSI配置模式一致(同为32位/64位, 同步/异步)。如果使用异步模式,检查MSC8101的UPM时序配置是否满足MSC8102 DSI的建立/保持时间要求。
- 片选与地址:确认MSC8101访问的地址高位(用于选择不同的MSC8102)与目标DSP的硬连线
CHIP_ID匹配。使用逻辑分析仪或示波器捕获DSI总线上的HCS(片选)、HA(地址)、HRW(读/写)和HD(数据)信号,分析访问时序和地址数据是否正确。 - FPGA固件:如果使用同步DSI模式,必须确保FPGA已加载了正确的、支持同步模式的固件。默认板卡可能加载的是异步模式的透明固件。
- 广播功能测试:尝试使用广播片选(如CS4)进行写入,然后分别读取每个DSP的对应地址,看数据是否一致。这有助于判断是某个特定DSP的接口问题,还是全局的DSI总线问题。
5.4 TDM链路无数据或数据错乱
- 症状:CT Bus上有时钟和帧同步,但某路TDM收不到数据,或收到的全是杂音/错误数据。
- 排查要点:
- 路由表核对:这是首要任务。确保软件中为每个DSP的每个TDM接口配置的发送/接收数据线(CT_Dx),与手册Table 27中的硬件路由完全一致。一个常见的错误是弄混了发送和接收线的映射。
- 时钟与同步极性:检查MSC8102 TDM控制器的时钟和帧同步极性、相位设置,是否与CT Bus上提供的
CT_C8_A_B和CT_FRAME_A_B信号匹配。用示波器同时测量CT Bus的帧同步和某一路TDM数据线,看数据是否在正确的时隙内变化。 - 时隙分配:在TDM控制器中,需要为每个收发方向指定哪些时隙(Time Slot)是有效的。确保分配的时隙范围与背板上其他板卡(如E1/T1接口卡)的期望一致。例如,一个E1链路有32个时隙(0-31),你的DSP需要正确配置处理其中承载语音的时隙(如1-15, 17-31)。
5.5 中断无法正常触发
- 症状:MSC8102产生了中断(例如处理完一帧数据),但MSC8101没有收到或响应。
- 调试方法:
- FPGA路由确认:根据图8,标准配置下,DSP1的
INT_OUT连接到MSC8101的A_IRQ1。确认你的软件设计是否符合这个硬件路由。如果需要更改,可能需要重新编写FPGA逻辑。 - 信号测量:在MSC8102触发中断的条件满足时,使用示波器测量其
INT_OUT引脚是否有从低到高的跳变。同时测量MSC8101对应的A_IRQx输入引脚,看信号是否传递过来。 - 软件配置:在MSC8101端,需要配置相应中断输入引脚的功能(可能复用为GPIO),并正确配置中断控制器(如设置边沿触发、使能中断、清除中断标志位)。在MSC8102端,需要正确配置其中断控制器,将内部事件(如TDM缓冲区满)映射到
INT_OUT引脚上。
- FPGA路由确认:根据图8,标准配置下,DSP1的
回顾整个MSC8102PFC的硬件架构,它代表了那个时代嵌入式通信处理设计的巅峰思路:通过异构多核、专用总线、分层存储和灵活的接口适配,在有限的板卡空间内实现了极高的语音信道密度和处理性能。虽然今天看来,其处理器主频和内存容量已不突出,但其中蕴含的系统架构思想、硬件协同设计方法和精细的调试手段,对于当今从事多核SoC、异构计算、高速接口设计的工程师而言,依然具有极高的参考价值。每一次对这类经典设计的剖析,都是一次对工程本质的回归和思考。
