本申请要求申请日为2015年2月17日,美国临时申请号为62/117,091和申请日为2015年3月10日,美国临时申请号为62/130,807的美国临时申请案的优先权,上述临时申请案的内容一并并入本申请。
【具体实施方式】
在说明书及权利要求书当中使用了某些词汇来指称特定的组件。所属领域中的技术人员应可理解,制造商可能会用不同的名词来称呼同样的组件。本说明书及权利要求书并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的基准。在通篇说明书及权利要求书当中所提及的「包含」是开放式的用语,故应解释成「包含但不限定于」。另外,「耦接」一词在此包含任何直接及间接的电气连接手段。因此,若文中描述第一装置耦接于第二装置,则代表第一装置可直接电气连接于第二装置,或透过其它装置或连接手段间接地电气连接至第二装置。
图1是依据本发明实施例的组装在同一个封装中的多个裸芯片的示意图。单一封装100具有组装于其中的第一裸芯片(标示为“裸芯片0”)102及第二裸芯片(标示为“裸芯片1”)104。第一裸芯片102具有时钟源112(图中标记为PLL)、输入电路114,以及输出电路116。第二裸芯片104具有时钟源122(图中标记为PLL)、输入电路124,以及输出电路126。输出电路116用于传输发送数据至第二裸芯片104,而输入电路124用于自第一裸芯片102接收发送数据。此外,输出电路126用于传输发送数据至第一裸芯片102,而输入电路114用于自第二裸芯片104接收发送数据。
举例来说,时钟源112和122中的每一个可使用锁相环(phase-locked loop,简写为PLL)实现。因此,时钟源112依据参考时钟CLKREF产生第一时钟CLK0,时钟源122依据相同的参考时钟CLKREF产生第二时钟CLK1。如图1所示,第一裸芯片102的输入电路114依据第一时钟CLK0和第二时钟CLK1运行。类似地,第二裸芯片104的输入电路124也依据第一时钟CLK0和第二时钟CLK1运行。
在时钟源112和122相同的情况下,第一时钟CLK0和第二时钟CLK1应该有相同的频率和相同的相位。然而,由于工艺变化、工作条件改变及/或电源噪音,在第一时钟CLK0和第二时钟CLK1之间存在累积的时间间隔误差,如图2所示。图2是第一时钟CLK0和第二时钟CLK1之间存在累积的时间间隔误差的示意图。对于所给予的相同的时钟周期数P,第一时钟CLK具有时间间隔T0,而第二时钟CLK1具有不同的时间间隔T1。累积的时间间隔误差|T0-T1|是连续的P个时钟周期的累积的相位差Ts(k),其中k=0,1,…,P-1。由于在输入电路114和124分别使用的第一时钟CLK0和第二时钟CLK1之间存在累积的时钟相位漂移,第一裸芯片102和第二裸芯片104可能遭遇数据传输损耗。
为解决由累积的时钟相位漂移导致的数据传输损耗问题,本发明提出了在输入电路中使用异步先入先出缓冲器。图3是依据本发明的另一实施例的多个裸芯片组装在同一封装中的示意图。单一封装300具有多个裸芯片,包含至少组装于其中的第一裸芯片(标示为“裸芯片0”)302及第二裸芯片(标示为“裸芯片1”)304。在本实施例中,单一封装300是晶圆级封装,例如集成扇出(integrated fan-out,简写为InFO)封装或芯片晶圆基板(chip on wafer onsubstrate,简写为CoWoS)封装,且第一裸芯片302与第二裸芯片304相同。举例来说,第一裸芯片302与第二裸芯片304组装于晶圆级封装中以执行网络交换功能。然而,其仅用于说明,并非为本发明的限制。任何使用本说明书提出的技术以避免数据传输损耗的晶圆级封装的裸芯片,均落入本发明的专利保护范围。
晶圆级封装是一种封装半导体裸芯片的技术,其与晶圆切割成单一半导体裸芯片,然后加以封装的传统封装方式不同。上述所指的晶圆级封装是基于晶圆级制程来制造。亦即多个半导体裸芯片(如同质裸芯片或异质裸芯片)封装于同一晶圆级封装中,而在各半导体裸芯片间布线的连接路径/传输总线/通信信道…等是以晶圆级制程来制造。因此,连接路径、传输总线、或通信信道可由金属层进行实施,如重布线层金属层(Re-Distribution Layer,简写为RDL)(一种芯片上的金属层,可在不同位置使用集成电路上的输出/输入引脚),而非传统封装中的焊线。
晶圆级封装可以是整合扇出型(integrated fan-out,InFO)封装,或是芯片置于基板上晶圆型(chip on wafer on substrate,CoWoS,package)封装。接下来的晶圆级封装是以InFO封装来举例,但不能被用来当成限缩。使用于所提概念的晶圆级封装可以是InFO封装或CoWoS封装,而InFO封装与CoWoS封装是可以互换的。
第一裸芯片302具有时钟源312(图中标记为PLL)、输入电路314、输出电路316,以及子系统318。第二裸芯片304具有时钟源322(图中标记为PLL)、输入电路324、输出电路326,以及子系统328。输出电路316用于传输发送数据(由子系统318产生)至第二裸芯片304,而输入电路324用于自第一裸芯片302接收发送数据(由子系统318产生)。此外,输出电路326用于传输发送数据(由子系统328产生)至第一裸芯片302,而输入电路314用于自第二裸芯片304接收发送数据(由子系统328产生)。
举例来说,但并非本发明的限制,时钟源312和322中的每一个可使用PLL实现。因此,时钟源312依据参考时钟CLKREF(例如,25MHz时钟)产生第一时钟CLK0,时钟源322依据相同的参考时钟CLKREF产生第二时钟CLK1。尽管第一裸芯片302和第二裸芯片304是相同裸芯片,从而具有相同电路设计,由于某些因素,包含工艺变化、工作条件改变、电源噪音等,在第一时钟CLK0和第二时钟CLK1之间可能存在累积的时钟相位漂移。为避免由累积的时钟相位漂移导致的数据传输损耗,第一裸芯片302的输入电路314被配置为具有异步FIFO缓冲器(用“异步FIFO”表示)315。由于第一裸芯片302和第二裸芯片304是相同裸芯片,第二裸芯片304的输入电路324也具有异步FIFO缓冲器(用“异步FIFO”表示)325。
如图3所示,第一裸芯片302的输入电路314依据第一时钟CLK0和第二时钟CLK1运行。类似地,第二裸芯片304的输入电路324也依据第一时钟CLK0和第二时钟CLK1运行。关于输入电路314,其依据第二裸芯片304产生的第二时钟CLK1将发送数据(传输自输出电路326)缓冲在异步FIFO缓冲器315中,并依据第一裸芯片302产生的第一时钟CLK0将异步FIFO缓冲器315中缓冲的发送数据输出至子系统318。关于输入电路324,其依据第一裸芯片302产生的第一时钟CLK0将发送数据(传输自输出电路316)缓冲在异步FIFO缓冲器325中,并依据第二裸芯片304产生的第二时钟CLK1将异步FIFO缓冲器325中缓冲的发送数据输出至子系统328。
在本实施例中,异步FIFO缓冲器315/325的FIFO深度取决于最大累积的时间间隔误差(例如,如图2所示的|T0-T1|)。举例来说,若时钟相位漂移很大,异步FIFO缓冲器315/325配置有大的FIFO深度。又例如,若时钟相位漂移很小,异步FIFO缓冲器315/325配置有小的FIFO深度。凭借对于异步FIFO缓冲器315的FIFO深度的适当选择,累积的时间间隔误差可被异步FIFO缓冲器315隐藏,从而输入电路314依据基于本地源时钟(即,第一时钟CLK0)执行的数据采样可以有稳定的输出至子系统318。类似地,凭借对于异步FIFO缓冲器325的FIFO深度的适当选择,累积的时间间隔误差可被异步FIFO缓冲器325隐藏,从而输入电路324依据基于本地源时钟(即,第一时钟CLK1)执行的数据采样可以有稳定的输出至子系统328。
如上所述,异步FIFO缓冲器315/325的FIFO深度取决于最大累积的时间间隔误差。在最糟的情况下,异步FIFO缓冲器315/325的FIFO深度可能很大,从而导致较高的生产成本。本发明更提出使用流量控制机制(flow controlscheme)来管理异步FIFO缓冲器315/325的输入数据流,从而减轻异步FIFO缓冲器315/325的缓冲器大小需求。流量控制机制的细节描述如下。
图4是依据本发明实施例的主动地流量控制机制的示意图。子系统402是位于发射端的裸芯片的数据源,异步FIFO缓冲器(用“异步FIFO”表示)404则是在位于接收端的不同裸芯片中。举例来说,子系统402是图3所示的子系统318,而异步FIFO缓冲器404是图3所示的异步FIFO缓冲器325。又例如,子系统402是图3所示的子系统328,而异步FIFO缓冲器404是图3所示的异步FIFO缓冲器315。子系统402和异步FIFO缓冲器404之间的数据传输由接口有效信号(interface valid signal)Valid控制。举例来说,具有1T活跃周期的接口有效信号Valid允许在子系统402和异步FIFO缓冲器404之间有一次数据传输,其中T是子系统402所用的源时钟的周期。
如图4所示,子系统402具有控制器403,主动地使能子系统402的等待状态,而不管异步FIFO缓冲器404的使用状态。当子系统402进入等待状态时,接口有效信号Valid被无效(deasserted)(不可用),子系统402和异步FIFO缓冲器404之间的数据传输停止。在一个范例性设计中,子系统402采用的流量控制机制确保最大连续活动接口有效时间不超出预设阈值(例如,2000T),从而子系统402具有有限的有效时间。举例来说,控制器403每2000T周期内增加1T等待状态,从而保证接口有效信号Valid的每一连续活跃周期不超出2000T周期。
图5是依据本发明实施例的被动的流量控制机制的示意图。子系统502是位于发射端的裸芯片的数据源,异步FIFO缓冲器(用“异步FIFO”表示)504则是在位于接收端的不同裸芯片中。举例来说,子系统502是图3所示的子系统318,而异步FIFO缓冲器504是图3所示的异步FIFO缓冲器325。又例如,子系统502是图3所示的子系统328,而异步FIFO缓冲器504是图3所示的异步FIFO缓冲器315。子系统502和异步FIFO缓冲器504之间的数据传输由接口有效信号Valid控制。举例来说,具有1T活跃周期的接口有效信号Valid允许在子系统502和异步FIFO缓冲器504之间的一次数据传输。
如图5所示,异步FIFO缓冲器504具有控制器503,响应异步FIFO缓冲器504的使用状态产生暂停事件至子系统502。从而,子系统502在接收到产生自异步FIFO缓冲器504的暂停事件时,被动地无效接口有效信号Valid。在本实施例中,当探测到异步FIFO缓冲器504中已经使用的存储空间的大小达到预设阈值时,异步FIFO缓冲器504采用的流量控制机制产生一次暂停事件。举例来说,当异步FIFO缓冲器504几乎满时,控制器503产生一次暂停事件至子系统502,以指示子系统502无效接口有效信号Valid 1T周期,其中T是子系统502使用的源时钟的周期。具体来说,当接口有效信号Valid被无效(不可用)特定周期(例如,1T周期)时,子系统502和异步FIFO缓冲器504之间的数据传输在该特定周期(例如,1T周期)停止。
图6是依据本发明实施例组装在同一封装中的两个裸芯片之间的数据传输涉及的信号的示意图。在本范例中,假定晶圆级封装是具有两个裸芯片组装于其中的InFO封装,发射端子系统subsys_xxx_yyy_TX需要经由发射端输出电路IFO_xxx_yyy_TX和接收端输入电路IFO_xxx_yyy_RX传输发送数据至接收端子系统subsys_xxx_yyy_RX,且接收端输入电路IFO_xxx_yyy_RX具有异步FIFO缓冲器(表示为异步FIFO)实施于其中。
信号xxx_ifo_yyy_valid是用于在发射端输出电路IFO_xxx_yyy_TX和接收端输入电路IFO_xxx_yyy_RX(具体来说,异步FIFO缓冲器)之间使能/禁能数据传输的接口有效信号。举例来说,信号xxx_ifo_yyy_valid被设置为1T周期,用于一次数据传输。信号xxx_ifo_yyy_data是承载发送数据的接口数据信号,其中发送数据产生自发射端子系统subsys_xxx_yyy_TX,伴随着可用的信号xxx_ifo_yyy_valid,信号xxx_ifo_yyy_data具有有效数据传输。信号ifo_xxx_yyy_stall是用于承载暂停事件的接口暂停信号,其中所述暂停事件由接收端输入电路IFO_xxx_yyy_RX采用的被动流量控制机制触发。举例来说,信号ifo_xxx_yyy_stall具有低到高的转变,指示发射端子系统subsys_xxx_yyy_TX在特定周期(例如,1000T周期)内无效信号xxx_ifo_yyy_valid。
图7是图6所示的接收端输入电路IFO_xxx_yyy_RX采用的被动流量控制机制的操作的时序图。时钟源产生具有周期T的时钟sys_ck。接收端输入电路IFO_xxx_yyy_RX在时间点T1设置信号ifo_xxx_yyy_stall。在时间点T1收到信号ifo_xxx_yyy_stall低到高的转变之后,接收端子系统subsys_xxx_yyy_TX在时间点T2无效信号xxx_ifo_yyy_valid并随后在时间点T3设置信号xxx_ifo_yyy_valid,其中T3-T2=1T。请注意T1和T2之间的间隔被约束在特定的时间段内(例如,1000T周期)。此外,发射端子系统subsys_xxx_yyy_TX在时间点T4无效信号ifo_xxx_yyy_stall以表明一个流量控制命令完成。请注意,当发射端子系统subsys_xxx_yyy_TX采用主动地流量控制机制时,发射端子系统subsys_xxx_yyy_TX无视信号ifo_xxx_yyy_stall。
信号ifo_xxx_yyy_valid是接口有效信号,用于使能/禁能接收端输入电路IFO_xxx_yyy_RX(具体来说,异步FIFO缓冲器)和接收端子系统subsys_xxx_yyy_RX之间的数据传输。举例来说,信号ifo_xxx_yyy_valid被设置1T周期,用于一次数据传输。信号ifo_xxx_yyy_data是承载发送数据的接口数据信号,其中发送数据读取自接收端输入电路IFO_xxx_yyy_RX(具体来说,异步FIFO缓冲器),其中伴随可用的信号ifo_xxx_yyy_valid,信号ifo_xxx_yyy_data具有有效数据传输。信号ifo_xxx_yyy_error是用于指示数据传输误差的接口误差信号。举例来说,信号ifo_xxx_yyy_error被设置1T周期,用于一次伴随误差的数据传输。当流量控制机制由于某些因素不能正常工作时,在接收端输入电路IFO_xxx_yyy_RX的异步FIFO缓冲器是满的的情况下,发射端子系统subsys_xxx_yyy_TX可保持产生和输出发送数据。接收端输入电路IFO_xxx_yyy_RX设置信号ifo_xxx_yyy_error以表明数据传输错误的发生。
异步FIFO缓冲器的实施用于解决由累积的时钟相位漂移导致的数据传输损耗问题。请注意,发射端的信号xxx_ifo_yyy_valid的可用的接口有效周期的数目被保证是与接收端信号ifo_xxx_yyy_valid的可用的接口有效周期的数目相同。此外,接收端输入电路IFO_xxx_yyy_RX可插入或删除不可用的接口有效周期用于时序同步。图8是依据本发明实施例的不同数据传输情景的时序图。在第一种情况下,发射端的时钟源产生的时钟sys_ck与接收端的时钟源产生的时钟sys_ck’相同,接收端输入电路IFO_xxx_yyy_RX产生的信号ifo_xxx_yyy_valid与发射端子系统subsys_xxx_yyy_TX产生的信号xxx_ifo_yyy_valid相同。
在第二种情况下,发射端的时钟源产生的时钟sys_ck比接收端的时钟源产生的时钟sys_ck’快,接收端输入电路IFO_xxx_yyy_RX产生的信号ifo_xxx_yyy_valid不同于发射端子系统subsys_xxx_yyy_TX产生的信号xxx_ifo_yyy_valid,其中由于接收端时钟较慢,信号xxx_ifo_yyy_valid中的不可用的接口有效周期在信号ifo_xxx_yyy_valid中不存在。在第三种情况下,发射端的时钟源产生的时钟sys_ck比接收端的时钟源产生的时钟sys_ck’慢,接收端输入电路IFO_xxx_yyy_RX产生的信号ifo_xxx_yyy_valid不同于发射端子系统subsys_xxx_yyy_TX产生的信号xxx_ifo_yyy_valid,其中由于接收端的时钟较快,一个额外的不可用的接口有效周期被插入到在信号ifo_xxx_yyy_valid中。
图9是依据本发明实施例的晶圆级封装(例如,InFO封装)采用的第一时钟方案的示意图。如图9所示,相同的裸芯片902和904收到参考时钟CLKREF(例如,25MHz时钟),且随后参考时钟CLKREF被提供至相同裸芯片902和904各自的时钟源(例如,PLL)906(图中标记为系统PLL)和908(图中标记为系统PLL)。由于裸芯片902所需的源时钟(例如,2GHz/1GHz时钟)由裸芯片902中的时钟源906产生,而裸芯片904所需的源时钟(例如,2GHz/1GHz时钟)由裸芯片904中不同的时钟源908产生,可以使用异步FIFO缓冲器及/或相关流量控制机制来避免数据传输损耗问题(由裸芯片902和904的时钟之间累积的时钟相位漂移导致)。
然而,若裸芯片902和904所需的源时钟由相同的时钟源产生,累积的时钟相位漂移可被避免或缓解。从而,异步FIFO缓冲器及/或相关流量控制机制可被省略以降低产品成本。图10是依据本发明实施例的晶圆级封装(例如,InFO封装)采用的第二时钟方案的示意图。如图10所示,相同裸芯片1002和1004中仅有一个收到参考时钟CLKREF,且随后参考时钟CLKREF被提供至相同裸芯片1002和1004的时钟源(例如,PLL)1006(图中标记为PLL)和1008(图中标记为PLL)之一。时钟源1006用于产生被相同裸芯片1002和1004共享的时钟CLK。举例来说,参考时钟CLKREF具有25MHz的时钟速率,而时钟CLK具有1GHz或800MHz的时钟速率,在组装于同一晶圆级封装的相同裸芯片1002和1004之间通过接口传输。关于裸芯片1004的时钟源1008,其并非用于产生相同裸芯片1002和1004中的任何一个使用的时钟。举例来说,时钟源1008可被视为裸芯片1004的虚设元件(dummy component)。
本说明书揭露了本发明的范例以及较佳实施例,但应当理解,本发明并不限于所揭露的实施例。相反,所述公开的实施例的上述描述可使得本领域的技术人员能够实现或者使用本发明。对于本领域技术人员来说,这些实施例的各种修改是显而易见的,并且这里定义的总体原理也可以在不脱离本发明的范围和主旨的基础上应用于其他实施例。因此,本发明并不限于这里示出的实施例,而是与符合这里公开的原理和新颖特征的最广范围相一致。