芯片,怎么连?(上)
发布时间:2025-08-11 09:42 浏览量:1
我们生活在信息时代,但如果信息无法到达其预期目的地,那么它就毫无用处。而信息从这里到达那里的方式就是通过互连。
从广义上讲,互连有两个层次。在一个宏大的规模上,我们有连接各大洲并为有访问权限的人带来互联网的网络。这种互连依赖于路由器和交换机等系统,而这些系统又依赖于半导体。这些芯片也有它们自己的内部互连,包括通过极细的铜线实现的片上互连,以及通过引线框架或基板或中介层实现的封装内互连。
本文介绍的是第二种互连。文章展示了不同的互连结构,例如片上线路、通孔、总线和网络,以及它们的构建方式。在本章节中,我们先了解一下什么是片上互联。
互联的组成元素
一个典型的硅芯片最多可以包含五种不同的互连元素:
线:线是最常见的互连形式,用于在芯片上短距离或长距离传输信号。它们由金属或多种金属组合而成。布线的灵活性取决于制造工艺的先进程度。多个层可以承载线路,并由介电材料隔开。先进制程节点可拥有多达15层线路。
通孔(Vias):通孔连接一个金属层上的线路到另一个层上的线路,同样由金属或金属组合制成。
局部互连(Local interconnect):这是一种特殊的互连层,通常由掺杂多晶硅制成。它连接晶体管正上方的端子,位于金属层以下。不同的代工厂实现方式可能不同,具体细节通常不会公开。
接触孔(Contacts):这是位于有源硅正上方介电层中的开口,金属通过它们连接晶体管。它们位于最底层金属之下,并可通过常规金属线或局部互连进行连接。
硅通孔(TSV):这些通孔从晶圆正面某一金属层穿透至背面,而不是从一个金属层到相邻金属层。当芯片正面朝上封装时,TSV 是将连接延伸到晶圆背面的关键方式。
焊盘(Bond pads):这些是暴露于外部的金属焊盘,用于连接键合线或焊球/凸点。
焊球或凸点(Balls or bumps):这是利用表面贴装技术(SMT)而非线焊的芯片安装方式。焊球通常由焊锡制成,而非铜或铝。
图1:芯片内部基本互连元素。线路负责信号在芯片上的传输;通孔在各层线路之间传递信号;局部互连将位于前端制程(FEoL)中的有源器件上方的晶体管引脚连接起来;接触孔实现金属层与晶体管等有源器件之间的连接;这些金属层属于后端制程(BEoL);硅通孔(TSV)将信号从晶圆正面穿过硅体传导至背面。
芯片制造过程通常被分为两个阶段。在硅片上制造晶体管的步骤被称为前端工艺(FEoL);随后构建互连层的步骤被称为后端工艺(BEoL)。
金属线
芯片上的大部分互连结构由金属线组成。在通孔的帮助下,通常可以实现多层金属互连。下层金属层通常用于最窄最短的连接;而上层金属层用于较长的连接,以及电源和接地的分布,这些层的线宽和厚度都更大。
线宽和线厚必须平衡,以便在保证足够连接空间的同时控制电流密度在合理范围内。如果电流过大而线路又过窄,会影响线路的长期可靠性。
在早期工艺中,每一层金属层都可进行二维(2D)布线,即线路可以有拐角,并沿东西或南北方向布线。大多数情况下(特别是数字电路)都使用“曼哈顿布线”,即线路只沿东西或南北方向布置,不会以倾斜角度布线。模拟或光子芯片可能存在例外情况。
在更先进节点的光刻技术中,打印拐角变得具有挑战性,因为要打印的特征尺寸比用于曝光它们的光的波长小得多。因此,后来的节点强制采用一维布线。任何给定层上的所有线路都必须沿东西向或南北向布线,不能有拐角。交替的层可以相互正交运行,从而允许相同的布线,但以不同的方式分解。然而,一维布线可能需要更多的通孔,而通孔的电阻可能比金属线更高。因此,确定理想的布线也需要尽量减少“拐角”的数量,这些“拐角”现在是跳到另一层。
图2:一维(1D)与二维(2D)布线对比。早期工艺节点中,金属线可在任一层上沿东西或南北方向布线,如图所示。但这种布线图样在先进制程中难以印制,因此一维布线限制每一层只允许一个方向的布线。图中展示的是相同线路的2D与1D版本:路径相同,但在1D中,拐角由通孔代替,而通孔的电阻通常高于金属线。因此,如果能单独优化,1D布线可能优于传统2D布线方式。
通孔将一层中的金属线连接到其上方或下方层中的金属线。理论上它们可以跳过层,但实际上它们不能。通孔的尺寸必须平衡,以确保良好的良率、良好的性能和高效的空间利用。
过大的通孔会阻止线路运行得尽可能近。过小的通孔可能难以清晰地生产,并且可能电阻过大,这取决于流经它的电流。理想的通孔尺寸由制造芯片的代工厂决定,工艺设计工具包 (PDK) 中的设计规则将指定尺寸和放置目标。
局部互连
晶体管端子之间在非常局部层面的短互连可以通过局部互连来实现。与其他互连不同,这种互连倾向于是掺杂的多晶硅。它已由各种代工厂实施,但细节作为竞争优势被更严格地保密。
接触点
接触点是 FEOL(前端工艺)期间构建的结构与 BEOL(后端工艺)期间构建的互连基础设施连接的点。它们类似于通孔,只是它们不接触较低的金属层。相反,它们接触暴露的晶体管(以及其他)端子。接触点往往比通孔小,但同样,尺寸和位置会影响加工良率和性能。与通孔尺寸一样,关于接触点构造的规则也包含在 PDK(工艺设计工具包)中。
图3:通孔尺寸。过小的通孔将更难打印,可能损害良率,并且电阻会更大,可能损害性能。过大的通孔会占用不必要的空间,迫使其他线路离得更远。通孔的确切最佳尺寸将由正在使用的制造工艺决定,并构成管理芯片布局的设计规则的一部分。
被连接的硅区域必须经过重掺杂,才能形成所谓的“欧姆接触”——即单纯作为导体的连接。如果未掺杂,这种连接将形成肖特基二极管。
图4:简化的MOS晶体管图,展示了接触孔如何连接源极和漏极区域。
硅通孔(TSV)
接触孔和通孔将晶体管等器件产生的信号引导至芯片顶层,以连接芯片外部。而当多个芯片堆叠在一起但仍需连接到外部时,TSV 就变得不可或缺。
两个芯片可以正面相对地键合,这种方式允许信号在芯片间从正面传递(如传统方式)。但要将该堆叠结构连接至外部,还需从最底部芯片的背面引出信号。
TSV 在原理上类似普通通孔,但后者连接金属层,而前者连接芯片外部。此外,它们的制造工艺也存在显著差异。类似结构也可用于中介层(interposer),此时称为TIV;若中介层为玻璃,则称为TGV。
图5:TSV实例。如果两个芯片正面贴合,芯片间连接距离非常短。但为了连接封装基板或PCB,仍需通过TSV将信号引导至其中一个芯片的背面以实现安装。
背面供电(Backside Power Delivery)
大量生产的芯片通常将所有金属层设置在硅片上方,这意味着电源和接地需与信号线路共享布线空间。因此,业界正在探索“背面供电”方案,在晶圆背面增加几层金属层,用于电源与接地布线。
这也就意味着,电源与接地仍需通过 TSV 与靠近晶圆顶部的器件连接。
该技术尚未实现大规模量产,但正在逐步接近,将集成至2nm以下制程节点,并于未来一年内实现产品落地。
金属线与通孔的构建
金属线经历了两个主要阶段——铝与铜。最初使用铝是因为其导电性尚可且加工简单。但在制程缩小至约220nm或180nm时,铜更强的导电性变得更具吸引力,推动了重大工艺变革。至130nm节点,代工厂已全面转向铜互连。
铝
铝可通过广泛应用于其他材料的沉积/刻蚀工艺进行加工。其加工流程包括:将铝溅射至晶圆上(通常覆盖一层介电材料),随后进行图形曝光与显影,再刻蚀掉多余金属。
图6:铝线的制作。该过程采用简单的沉积/刻蚀工艺:先在晶圆上覆盖铝与光刻胶,通过掩模曝光所需图形,显影后刻蚀金属,去除光刻胶残留,最终形成所需的线路。
铜
铜的导电性优于铝,但它存在两个主要缺点:第一,铜在适用于硅加工的尺寸下难以刻蚀,使得传统的沉积/刻蚀工艺在成本上不划算;第二,铜会向硅中扩散,造成“污染”。因此,晶圆厂管理者曾竭力将铜拒之门外,以避免任何可能导致生产线停工的污染风险。
因此,若铜要成为主要互连材料,就必须开发新的加工方式。最终产生了如今广泛应用的“双镶嵌工艺”(dual-damascene)。该术语“Damascene”源自大马士革,用于描述将一种金属嵌入另一金属中的工艺。在此工艺中,首先在材料中刻蚀出沟槽,再将金属填入,随后对表面进行抛光和打磨。
这为半导体中铜的引入提供了灵感。由于介电材料比铜更易于刻蚀,因此先在介电层中形成沟槽,再在整个晶圆上沉积金属。接着通过化学机械抛光(CMP)去除多余材料(overburden),形成平整表面。“双”指的是在此过程中,通孔和线路可以同时填充。
在此之前,通孔通常需单独填充钨,然后再进行铝线加工。
双镶嵌工艺解决了通孔和线同时填充的问题,但并未根治铜扩散的“毒害”问题。为此,需在介电层之上先沉积一层阻挡层,防止铜向晶圆扩散。常用的阻挡材料是氮化钽(TaN),虽然其导电性不如铜,但只需极薄一层,因此增加的电阻可以忽略。
虽然阻挡层有效防扩散,但并不利于铜附着,因此还需再沉积一层“衬层”(liner)作为种子层以帮助铜粘附,常见材料是金属钽。衬层完成后,即可将铜沉积到晶圆上。阻挡层和衬层通常采用溅射工艺沉积,而大体积铜则通过电镀添加。
上述描述和图示为简化版本。不同代工厂或不同制程节点的具体工艺细节各不相同。
图7:简化的双镶嵌工艺图。通孔首先进行图形化和刻蚀。
随后对线路图案进行曝光和刻蚀。此图简化假设用于通孔的光刻胶也可用于线路刻蚀,否则还需增加一次光刻胶去除与重涂的步骤。
接下来,先沉积一层薄阻挡层,然后加一层衬层作为铜的附着基础。再进行铜电镀,使铜的高度超过所需线路高度以确保填充充分。最后,CMP 去除多余材料,留下填充完整的线路和通孔结构。
其他金属的应用
在芯片中,过去主要使用铝,而现在主要使用铜。但还有其他金属也在扮演重要角色。此外,科研人员正致力于寻找铜的下一代替代材料。
钨长期用于制作接触孔、通孔(铜使用前)及栅电极。钨、钛、钽等被归类为难熔金属(refractory metals,意为“顽固”),具有极高的熔点和硬度,能很好地抵抗热和电迁移(确实“顽固”)。钨导电性良好,且可通过化学气相沉积(CVD)简便地沉积,常用六氟化钨作为前驱体。
镍也常用于制造可靠连接,可以单独使用或与其他金属合金化。镍具有良好的耐腐蚀性、耐用性和导电性。铟和镉等其他金属也有应用,主要与其他元素组合,用于制造特殊器件如太阳能电池和激光器,它们通常不用于作为导体。
研究仍在持续寻找新一代导电金属。随着金属线变得越来越细,在铜线中电子的平均自由程缩短,导致电阻增加。在这类超细线路中,钴的导电性最终优于铜,尽管在宽线路中铜的导电性更强。
钴已经在一些先进制程节点中被使用,但它是一种昂贵的材料,开采和加工过程存在可持续性问题,因此人们倾向于寻找钴的替代品。
钌和钼也正在被评估用于互连,但尚未进入量产阶段,距离成为主流应用还有数年时间。
介电材料
尽管本文关注的是互连结构,介电材料本身不导电,但它们对金属线的行为有重要影响。介电材料的主要作用是保持金属线彼此隔离。最常用、最方便的介电材料是二氧化硅(SiO₂),它来源丰富,易于形成,性能也足够好。
但无论是水平方向还是垂直方向,如果两条金属线距离太近,它们之间的电场可能穿透氧化层,影响邻近线,产生所谓的“串扰”(crosstalk)现象。这种机制与电容器的工作原理类似,不过在这里,氧化层的任务是将线路隔开,而不是让它们表现得像电容板。
介电材料的隔离效果取决于其介电常数(κ,kappa),这是行业中衡量其性能的关键参数。在其他学科中,这种特性被称为“介电常数”或“介电率”(permittivity),可分为绝对或相对,一般用ε而非κ表示。由于SiO₂使用广泛,它被作为寻找其他介电材料的基准,其相对介电常数为3.9。
在需要隔离距离较近的线路时,通常希望降低电容效应,因此开发了比SiO₂更低K值的低介电常数材料(low-K dielectric),以支持更密集的高速信号布线。这些低K材料中,有的通过掺杂SiO₂实现,有的则引入孔隙结构(或两者兼有)。其中,空气间隙被视为理想介电体,其K值约为1.0,接近真空。制造多孔介电材料就是为了引入空气,但这种空气分布在整个材料的微孔中。当前的研究正在探索如何更有效地将大尺寸的空气间隙用于介电结构。显然的问题是:空气没有机械支撑结构,单纯用空气替代SiO₂ 不具可行性,因此这是一个仍在积极研究的方向。
图8:串扰示意图。两条平行线路中,一条信号变化剧烈的线可视为“干扰者”,另一条为“受害者”。干扰线的电场会影响到邻近线路,若串扰过强,会严重干扰受害线路的信号。图示中“受害者”处于空闲状态,但在真实系统中,串扰是双向的;即这条“受害线”也可能成为“干扰线”,导致双方互为干扰。因此,串扰既可出现在同层相邻线路(水平),也可发生在相邻层线路(垂直)之间。
图9:空气间隙作为介电体。空气接近理想介电体,但缺乏机械支撑。图可理解为水平或垂直方向,但图中强调的是垂直结构的问题:仅靠少量介电材料支撑两层金属,虽能提升隔离性能,但结构易塌陷。
在另一个典型案例中,我们需要更高的电容行为:MOS晶体管的栅极。它本质上就是一个电容器,其行为对晶体管性能有重大影响。在一定范围内,随着工艺演进,栅氧化层会越来越薄,但薄到一定程度时,电子会通过“隧穿效应”泄漏出去。于是,业界转向使用一种高介电常数材料——氧化铪(HfO₂),它能在不变薄的前提下,表现出类似于超薄SiO₂的电容效果。
图10:高K栅氧化层。HfO₂ 的介电常数高于 SiO₂,因此即便厚度较大,也能产生与较薄的 SiO₂ 相同的电容效应。其优势是厚HfO₂不会发生电子泄漏,而薄SiO₂会。
TSV(硅通孔)的构建
TSV使用的材料与普通通孔相似,但尺寸、形状和制造工艺都不同。TSV同样用于连接金属层,但它连接的目标是芯片的背面层。TSV与其他通孔的主要区别在于尺寸,尤其是深度,TSV的深度可达200微米,而其他通孔多为纳米级。
必须先钻出深孔,再填充金属。孔深与孔宽的比值称为纵横比(aspect ratio),这个比值越大,制造难度也越高。目前,50:1 是可实现的最大纵横比,也就是说孔的深度是其宽度的50倍。
通孔的形状也很关键。它们的边通常不是垂直的,而是略微倾斜的,孔底比孔顶更窄。这样有助于金属沉积过程中均匀覆盖整个孔洞,避免产生空隙。高纵横比结构对这一点尤为重要。
深孔钻刻通过深反应离子刻蚀(DRIE)完成,利用离子束轰击晶圆以去除硅。理想情况下孔应一直刻蚀到晶圆背面,但这在实践中不现实:太深意味着纵横比过大,难以控制,耗时也长。
实际操作中,会先刻出一个非常深的盲孔(blind via),即孔并不贯穿晶圆。前端制程完成后,将正面暂时键合至一块载体晶圆,再对背面进行磨削,直到TSV结构暴露出来。
TSV与普通通孔的另一个区别是:在金属屏障层、衬层及填充金属之前,通常要先在孔内沉积一层SiO₂阻挡层,方法为等离子增强化学气相沉积(PECVD)。其作用是防止电子在TSV之间通过硅材料发生泄漏。普通通孔本身就位于介电层中,因此不需要额外的SiO₂屏障。
虽然图11展示了一种TSV制造流程,但它只是简化版,只代表众多工艺路径中的一种。不同晶圆厂在屏障材料、衬层材料和具体步骤上可能有所不同,随着工艺进步,这些流程也可能会不断更新优化。
图11:TSV制程图解。通孔刻蚀方式与普通通孔相似,但由于深度更大,需采用DRIE技术。此外,还需在金属沉积前加一层SiO₂阻挡层。该通孔内会填入金属(包含阻挡层和衬层),随后将晶圆正面与载体晶圆键合,使得可以对晶圆背面进行磨削,暴露TSV结构。最后形成焊盘,便于与其他晶圆或封装基板连接。
由于TSV必须比普通通孔更粗,以维持可控的纵横比,因此它们在芯片中占据了相当多的硅面积。此外,制造过程中的应力和热效应可能影响电路性能,因此需在TSV周围设置“禁止区域(keep-out region)”,进一步占用空间。尽管存在上述限制,TSV仍能提供远多于标准I/O的连接数,是高带宽内存(HBM)等技术的关键。
图12:TSV顶视图。为避免制造或工作过程中的应力影响晶体管性能,TSV周围必须设置禁止区域。
电源轨与热管
大多数互连结构传输的是信号,但电源与接地线也与这些信号线共处在同一层中。位于顶部的更厚金属层主要用于电源和接地分布,以承载更高的电流并提供稳定性。为了电源稳定性,通常需要去耦电容器来过滤噪声。最初,这些电容是布置在芯片外部的,比如PCB上。随着频率升高,电容器逐步从PCB靠近芯片,进入封装内部,甚至布置到芯片上。外部电容仍在使用,但设计人员也在芯片内部添加小型电容,以应对芯片内部更高的频率需求。
实现芯片内电容的方法有很多,例如利用金属堆叠中相邻电源层与地层之间的电容。介电层本意是降低跨层电容效应(通常使用低K材料),但完全消除并不现实,而且它反而可用于去耦。这种结构称为金属-氧化物-金属电容(MOM)。如果使用其他绝缘体材料,则可形成金属-绝缘体-金属(MIM)电容。
有些TSV并不传输电流,被称为“热管”(thermal pipes),用于将芯片内部的热量传导至封装基板或PCB。它们是纯热连接结构,不传输信号、电源或接地,通常用于高功耗处理器。
互连系统
通过接触孔、通孔和金属线的组合,可在芯片不同区域之间建立连接。这类单独线路曾很常见,尤其适用于只需一根线的控制信号等功能。但大多数通信涉及多位信息,如地址与数据。
一条线通常只能传输一位数据(除非使用特殊技术),因此需要多根相关线路。在当今的大规模片上系统(SoC)中,即使是单比特控制信号的集合也会变得臃肿难管理。为简化这些连接,需要更高层次的抽象机制。
最早的一种抽象形式是“总线”(bus),它是多条线路的集合,每条线路负责传输一位数据,但功能相同。随着芯片规模继续增长,片上网络(NoC)已被证实非常实用。NoC 是在总线基础上更高层级的抽象。
图13:互连系统示意图。多根线路组成总线,多个总线又可构成片上网络(NoC)。
芯片内的总线和网络在概念上与芯片外的类似结构相似,但做了专门优化以适应片内通信需求。例如,信号从起点到终点在单根线路上的传输时间被称为“延迟”。如果路径中包含触发器,则信号传输可能需要多个时钟周期,此时的延迟称为“时延”(latency)。如果抽象结构替代了单根线路,那么其时延应尽可能接近原始线路的延迟。任何偏离理想延迟的情况都会削弱芯片性能。
总线
从理论上讲,总线是相关信号线的集合。早期总线可能是1字节(8位)宽,而现在的总线宽度可以超过1000根线路。
线路通常从源头连接到目标,总线也一样。但若为每一组源和目的地都单独配置一条总线,会非常低效且占用大量资源。因此,许多常见的总线(如计算机系统总线)采用“多点分布”(multi-drop)结构,允许一条总线连接多个源和多个目的地。
典型的计算机系统包含内存总线、外设总线和系统总线。随着技术发展,这些总线已被整合进SoC系统内,而不是如以往那样连接多个芯片或电路板。架构也在演进,原本分离的地址线和数据线现在可能整合为内存总线,通过分时复用共享同一组线路。
当大多数总线运行在芯片之外时,网络(如以太网)与总线之间的定义常常模糊不清。早期对总线的定义要求其不仅能传输数据,还必须能为接收端供电。总线定义的这一方面已不再使用。
信号编码方式
最简单的总线采用非归零编码(NRZ)传输数据。这是最直观的编码方式:高电压表示1(逻辑高),低电压表示0(逻辑低)。NRZ的名称源于与另一种方式“归零编码(RZ)”的对比。RZ中,例如逻辑1由信号上升表示,随后信号回落为低电平。RZ信号在芯片上并不常见。
图14:信号编码格式。NRZ在整个时钟周期内保持一个电平,RZ(对比展示)发出一个脉冲后返回零。SDR每周期传输一个值,DDR每周期传输两个值。此图未标注建立时间和保持时间。
脉冲幅度调制(NRZ)格式每条总线线路承载一位数据,并且很容易在目的地输入端检测到。可以在一条线路上放置多个位的数据,其中放置在线路上的每个值都是一个可以承载多个位的符号。PAM4 就是这样一种格式,每个符号放置两位。不太常见的 PAM8 每个符号可以承载三位。尽管这些更高级的格式如今经常使用,但它们主要用于芯片之间或电路板之间传输信号。它们的复杂性和增加的延迟使它们在片上应用中不太受欢迎。
一种更简单的信号方式是通过改进编码来实现数据速率翻倍。这种方式的总线以与时钟频率相同的速率传输数据,每次时钟跳变(边缘)触发数据状态改变。这种方式称为单数据率(SDR)。而“双数据率”(DDR)则在时钟的上升沿和下降沿都进行数据传输,因此速率为时钟频率的两倍。DDR方式主要用于DDR内存的接口通信。
带宽
总线批量传输数据,这就需要一个度量单位来描述其传输速率——带宽。最简单的情况下,一条线路的带宽等于其时钟频率。每个时钟上升沿(或下降沿)传输一位。对于实际总线来说,通常宽度为8位或更多,也就是说每个时钟周期每条线传输一位。因此,一个时钟频率为1 MHz、宽度为8位的总线,其带宽为8 Mbps。
不过总线带宽通常以“每秒字节数”表示,因此上述带宽也可写作1 MBps。DDR编码方式使得每个时钟周期传输两位数据,因此带宽翻倍。每次数据传输被称为一个“事务”(transaction,常缩写为T,如MT/s)。
如今内存时钟已进入GHz级,但仍以MHz表示(如1000 MHz)。内存带宽的计算容易混淆,因为它涉及时钟频率、总线宽度和信号编码方式。由于内存芯片的性能通常以“每秒多少位”而非“每秒多少字节”来表述,因此容易造成混淆。带宽的通用计算公式如下:
其中,总线宽度以位为单位;格式因子(Format)为SDR时为1,DDR时为2。
所以,一个64位DDR内存总线,时钟为1000 MHz:
令人惊讶的是,不同厂商对内存带宽的定义并不一致,有时甚至在数据手册中会把事务数和带宽混淆。
并行与串行
现在的总线可以是并行也可以是串行。并行总线使用多根线路,而串行总线线路较少,但每根线的传输速率更高。芯片外的总线可能采用差分信号(双端),但芯片内的总线通常是单端的。
如果源与目的端时钟一致,并行总线比串行总线更简单。最大挑战在于“线间偏移(skew)”,即不同线路的延迟差异。布线必须保证每根线的延迟一致。偏移在所难免,但如果超过允许范围,会导致部分位无法在目标时钟下正确接收。
当源端与目的端的时钟不同步时,通常需要将时钟与数据一同传输,以确保目标端能稳定接收数据。这种方法称为“时钟前传”或“源同步(source synchronous)”。接收端先用源时钟采样数据,然后必须进行“时钟域跨越”,以使接收到的数据能够转移到目标时钟域下继续处理。另一种方法是源端“借用”目标时钟来驱动数据发送,这种方式与时钟前传相反,被称为“目标同步(destination synchronous)”。
并行总线可以采用多点连接(multi-drop),让多个源与多个目的端共享同一条总线。为了避免多个源同时访问总线,需引入“总线控制器(bus controller)”进行仲裁,一次只允许一个源发送数据。仲裁机制可以是简单的“轮询法(round-robin)”,也可以非常复杂,比如引入服务质量(QoS)机制,为某些源优先分配访问权。
当总线偏移问题变得严重时,可以采用串行总线作为替代方案。串行总线将时钟嵌入数据编码中,使接收端能够从数据中恢复出时钟。但这需要更复杂的电路,也会带来额外的延迟。串行总线通常为点对点连接(point-to-point),而非多点。芯片内部一般不使用串行总线,它们多用于如PCIe等芯片间通信协议。[因此,我们将不讨论它们超出这个简短的描述。]
图15:不同类型的总线。色块表示不同的时钟域。前三种为并行总线:第一种源与目的时钟相同,后两种源与目的时钟不同,分别展示源同步和目的同步方式。第四种为串行总线,仅支持点对点连接。虽然图中仅第一个展示了多点连接,但所有并行总线都可配置为多点,只要加上总线仲裁器。
总线负载与桥接
多点连接总线很方便,因为一条总线可以连接多种来源和目的地,实现通信。缺点是总线线路可能较长,带来更大的电容负载,从而降低性能。每个源或目的地也会形成额外负载,进一步拖慢总线速度。
解决方案之一是将总线分段,并通过桥接器连接各段。在这种情况下,桥就像信号中继器。
每段总线更短、负载更少,因而速度更快。如果通信目标位于另一段上,消息必须通过桥传递,增加一定延迟。因此,频繁通信的模块最好位于同一段上。
图16:总线桥。图上部表示一条总线上连接多个负载,会导致性能下降。图下部通过桥将总线分段,虽然跨桥通信会增加延迟,但每段总线更短,性能更好。
片上并行总线示例
目前最常见的片上总线是 Arm 提出的 AMBA(高级微控制器总线架构)。尽管 AMBA 并非经权威标准机构正式认证的标准,但 Arm 免费开放并主导其维护,因此被广泛采用。
随着应用场景的发展,AMBA架构也演化出多个变种,包括:
ASB:系统总线(system bus)
APB:外设总线(peripheral bus)
AHB:高性能总线(high-performance bus)
AXI:可扩展接口总线(extensible interface)
ATB:用于 Arm CoreSight 调试的跟踪总线(trace bus)
ACE:用于 AMBA 4 中对 AXI 添加一致性扩展
CHI:在 AMBA 5 中替代 ACE 的一致性接口
另一类广为人知的总线是由 JEDEC 标准化的 DRAM 总线。它们涵盖了多种 DDR 标准和高带宽内存(HBM)。这些总线不运行在芯片内部,但任何与内存接口的芯片都必须支持。
其他一些总线如 IBM 的 CoreConnect 和开放架构的 WishBone 虽未达到 AMBA 的普及程度,但同样是免费可用的。
共享总线 vs 点对点连接
大多数总线采用共享结构,多个信号源可驱动总线,所有接收端都能看到信号(即便不响应)。由于多个电路可能同时驱动一条线,因此驱动器需采用特殊的 I/O 电路。
典型电路有两种有效状态:高电平和低电平。具体电压值取决于所采用的逻辑风格。“低有效逻辑”中,逻辑1(真)表示为低电压;而“高有效逻辑”则表示为高电压。
两个有效输出绝不能直接连接,否则不同电平可能会形成大电流路径,造成电路冲突。因此,总线输出必须为“三态(tristate)”或“有线或(wired-OR)”结构。三态输出具有三种状态:高电平(上拉导通)、低电平(下拉导通)、高阻抗(上下拉皆关闭)。
图17:有线或与三态总线。左上展示了两个标准输出连接到总线时可能出现的冲突,可能导致大电流。右上是典型有线或结构;下方展示了两种三态总线的实现方式,均带有使能信号(EN)。
对于性能要求不高的总线,也可只使用下拉电阻作为输出(适用于低有效逻辑)。上拉部分仅由电阻(或充当电阻的晶体管)实现。多个输出可同时导通,因为都是下拉结构,不会冲突。如果都未导通,则由上拉电阻将总线拉高。
由于一个或多个输出在为低电平(在低有效逻辑中代表逻辑1)时会将总线拉低,这种连接方式类似“或门”(OR门)的效果——不是通过典型的逻辑门电路实现,而是通过将总线连接至电阻器而得名“有线或”(wired-OR)。
由于总线具有电容性,电阻器在将总线拉高时速度较慢。如果对性能要求更高,应使用三态输出(tristate),其响应更快。
内存总线是SoC中常见的关键组件。但在复杂芯片中,多个功能模块可能同时请求访问内存。如果内存通过共享总线访问,那么事务处理时间将包括仲裁时间、等待总线空闲的时间,以及总线上众多负载带来的延迟。
当需要尽可能快地访问内存时,可将SRAM模块通过点对点连接方式直接连接到处理器。这种称为“紧耦合存储器(TCM)”的设计现已被广泛应用于许多SoC中。
图18:紧耦合存储器。普通SRAM通过共享总线被CPU和GPU访问,但这种共享结构可能导致性能下降。如果为CPU单独配置一个通过专用端口连接的SRAM模块,则可实现更高访问速度。
TCM常用于存储代码,确保指令能以确定的时序被取出,提高响应确定性。这类应用多为深度嵌入式系统,区别于大多数运行在DRAM(通过缓存系统)上的软件。
片上网络(NoC)
现代SoC体积庞大、结构复杂,标准总线往往变得庞大笨重,效率低下。多个临时性总线结构易造成布局混乱、管理困难。现代大型SoC普遍采用一种全新互连方式——片上网络(NoC)。
这种技术在高层次上模仿了我们熟悉的网络结构(如互联网),相当于在芯片内部“建网”。不过由于其运行在芯片内部,用于取代传统的点对点连接,因此必须对其进行专门适配与优化。它们必须针对芯片内的环境进行适配。就像芯片外的网络一样,片上网络将原本直接的事务打包成数据包,并寻找路径将其送达目标。较大的事务可能需要分多个数据包传输。
NoC 仍然通过总线连接各网络节点,这些总线的位宽可以达到1024位。这些位可以用于一个高速流,也可以划分为多个子通道以同时传输多个数据包。后者方式更便于寻找可用路由。
一般来说,片上网络有多种拓扑结构,但许多NoC采用网格结构,如图19所示。这提供了将数据包路由到目的地的多种方法。但是其他的拓扑结构,比如环,也是可能的。
图19:NoC数据包传送方式。单播(unicast)发送到一个节点,广播(broadcast)发送给所有节点,多播(multi-cast)发送给若干选定节点。
多目标寻址
最简单的情况下,数据包从源发送到一个目标。但如果只能这样,一些操作效率会很低。例如在 AI 任务中,需将大量权重数据移动至多个计算引擎,如果逐个发送,会大大拖慢处理速度。
为了解决这个问题,NoC 的寻址机制中通常包含多种发送方式。单播(unicast)指数据包只发给一个目标;相对的,广播(broadcast)则将数据包发送给所有目标。单播和广播的寻址方式都相对简单,只需一个目标地址(或表示“全部”的标识符)即可。有些NoC可以设定广播范围,仅限某些区域内有效。
介于单播与广播之间的是多播(multi-cast),它也是发送给多个目标,但具有选择性。这要求地址编码机制能有效支持多个目标地址。每种网络结构在实现上可能略有不同。
路由与交换方法
由于 NoC 是网络结构,信息必须沿路径从源到达目的地。具体细节取决于设计决策,以下内容基于简单直接的网格拓扑结构展开说明。并非所有 NoC 都采用该架构,但相关原则适用于其他拓扑结构。
在网格网络中,每个交叉点或“中心”可视为一个交叉开关(crossbar)。例如,数据从西边到达后,可以向北、东、南三个方向传输。数据需经过多个跳点(hops)才能到达目标,其所需时间取决于所选择的路径。每穿越一个hub都会带来延迟,因此最快的路径是经过跳数(hops)最少的路径。hub可视为连接输入总线与输出总线的桥,但它与传统桥不同之处在于,它能根据目标灵活选择不同的路径进行切换。
图20:网格拓扑中的节点。在此结构中,从左(西)进入的数据可被切换至其他三个方向。
hub 可用至少三种方式来将接收的数据转发到下一段。与芯片外网络不同,片上网络中连接的模块位置是固定的,因此可简化寻址;(但叫醒休眠模块是另一个问题)。路由可在数据包生成时确定,每个hub随后根据该路由表将数据包向目的地逐跳推进。
最常见于芯片外网络,也可用于 NoC 的一种方式是“存储-转发(store-and-forward)”。该方法中,一个hub会先完整接收整个数据包并存储下来,然后再发送至下一跳。优点包括:
每个hub可以在转发之前对数据包进行差错检测。
当网络拥堵时,hub可选择最佳时机发送数据包,从而平衡网络流量。
图21:交换方式。对于“存储-转发”,接收、决策路径、转发三个阶段是串行执行的(数据包可能还会在排队中等待而产生额外延迟)。
但它的最大缺点是延迟。必须等待整个数据包被完全接收后,再等待决策时间以及由于流量产生的任何可能的延迟(相比芯片外网络,在 NoC 中这种情况不太常见),然后再将整个包发送出去。以一个 1024 位的数据包为例,这意味着需要 1024 个比特周期来存储,加上内部管理的延迟,然后再用 1024 个比特周期将其发送出去(其中“比特周期”指每个位所需的实际时钟周期数)。每一跳都会重复这种延迟。
另一个缺点是在存储和转发步骤之间保存数据包所需的内存缓冲区的大小。该大小是数据包大小和可能通过该集线器移动的数据包数量的函数。
另一种选择是“直通转发(cut-through switching)”。虽然芯片外网络也可使用,但它在 NoC 中更常见,因为它可显著降低延迟。该方法中,当hub检测到数据包到达时,就立即决定下一跳位置,并在数据包完全接收前就开始转发。此方法的延迟仅包括下一跳决策时间和接收/发送时间,而不像“存储-转发”那样需要先接收再发送。因为在数据包的开头部分刚到达时就已经做出下一跳决策,因此相较于“存储转发”,延迟至少减少了 1024 个比特周期(以上一例为准)。在片上网络中,下一跳通常不必等待访问网络的权限,因此也进一步降低了延迟。
但降低延迟的代价是:节点无法像“存储转发”那样进行完整的数据包错误检测或其他管理操作,因为它们从未拥有整个数据包。虽然仍可计算校验和,但当校验完成时,数据包大多已经被发送出去了,无法撤回。因此,错误检测等任务必须留给接收端完成。由于 NoC 的结构更稳定(不会像芯片外网络那样频繁增减节点),所以等错误被发现时已经到达目的地的风险较低(但不是没有)。
cut-through 的一种变体叫做“虫洞交换(wormhole switching)”。尽管 cut-through 和 wormhole 通常被称为“路由”,但更准确地说它们属于“交换”方式,因为它们影响的是每个节点的工作机制,而不是数据包的最终路径。在 wormhole 技术中,数据包会被进一步分割为“flit(流控制单元)”。前几个 flit 包含包头信息,节点利用这些信息为整个包中的所有 flit 设置交换路径。所有后续的 flit 都可以沿用该路径前进。这些 flit 在中途可能会被存储,也可能不会,但因为它们比完整包小得多,存储带来的延迟影响也就显著减小。
这种技术下,一个数据包在传输过程中会呈“拉长”的状态:前面的 flit 已经到达下一个节点,而后面的 flit 仍在前一个节点。数据包仿佛像“虫子”一样穿越网络,因此得名“虫洞交换”。
阻塞型与非阻塞型交换器
网络交换器通常需要管理多个输入连接,并将它们切换到对应的下一跳。全交叉开关(full crossbar switch)可以将任意输入端口连接到任意输出端口,从而构建出“非阻塞交换器”。另一种设计虽然节省资源,但内部部分线路可能会被多个数据包共享。如果出现这种共享情况,当某个数据包正在使用这部分资源时,其他数据包就无法使用,必须等待。换句话说,一个数据包的发送会“阻塞”其他数据包的传输。
图 22:阻塞型与非阻塞型拓扑结构对比。左图所示,当 A 正在驱动 W 时,B 就无法驱动 X,因为 A 已占用了通往 X 的多路复用器资源。而右图中的非阻塞结构具有更完善的互连能力,使 A、B 或其他输入都可以独立访问任何输出端,互不干扰。
非阻塞型交换器需要比阻塞型更多的电路资源,因此系统会根据应用需求来判断某个数据包的“优先级”或“重要程度”。如果该数据包必须在某个时间点内保证送达,那么要么使用非阻塞交换器,要么它必须具备抢占能力,也就是说,当路径上存在低优先级的数据包时,高优先级的数据包必须能够优先通行。
由于片上网络(NoC)的结构相较于片外网络更加静态,且通信流量模式更具可预测性,源端与目的端之间的通信关系通常较为清晰,因此网络可以根据实际流量需求灵活选择使用阻塞型或非阻塞型交换结构。
Flooding
一种更简单但效率较低的路由替代方案叫做“泛洪(flooding)”。泛洪的方式不是精准地将数据包发送到某个特定目标节点,而是从源节点出发,向其所有直接连接的节点广播数据包。这些节点随后又将数据包发送给它们直接连接的节点,以此类推,直到数据包可能遍历整个网络中的所有节点。一旦目标节点接收到数据包,它可以选择是否通知网络。如果发送了通知,网络中的其余节点就可以停止继续转发这个数据包。
如果目标节点未发送任何“终止转发”的消息,系统就必须依赖某种机制,例如生存时间(TTL)标志位,该标志会随着每次转发而递减,最终减到零,触发转发停止。在这种情形下,即便目标节点已经收到数据包,其它冗余副本仍可能在网络中继续传播,直到某个终止条件(如 TTL 为零)触发转发停止。如果起始 TTL 值设得过小,数据包可能在尚未到达目标节点之前就因 TTL 耗尽而停止转发。
未受控的简单泛洪存在一个明显低效之处:数据包可能会向所有方向传播,甚至形成环路。如果没有 TTL 机制来终止传播,环路将可能导致死锁。受控泛洪机制可以有效避免环路的产生。在具有明确方向性的网络中,选择性泛洪(selective flooding)只允许数据包沿着“前向路径”传播,从而避免了无意义的反向发送,并防止了环路出现。
在下一篇文章中,我们会介绍一下片间互联。
*免责声明:本文由作者原创。文章内容系作者个人观点,半导体行业观察转载仅为了传达一种不同的观点,不代表半导体行业观察对该观点赞同或支持,如果有任何异议,欢迎联系半导体行业观察。
- 上一篇:把监督约束化作奋进之力
- 下一篇:突发公告!董事会成员集体辞职!