在芯片设计领域,可测试性设计(DFT)是确保芯片量产质量和可靠性的关键环节。其中,片上时钟控制器(OCC)作为DFT架构中的核心模块,负责在测试模式下生成精确的时钟信号。本文将深入解析一种支持双频输出的OCC电路结构设计,这种结构特别适用于需要多频率测试场景的复杂芯片。
传统OCC设计通常只能输出单一频率的测试时钟,但在实际应用中,我们经常遇到需要支持多种工作频率的模块(如PCIE接口的GEN1/GEN2/GEN3模式)。本文介绍的双频OCC结构能够同时输出125MHz和250MHz两种频率的时钟信号,完美解决了多频率测试场景的需求。
在PCIE模块测试中,我们面临三种工作模式:
这些模式之间存在数据交互(快采慢、慢采快和同频采),因此测试场景必须能够模拟所有可能的频率组合。传统单频OCC无法满足这种复杂需求,而双频OCC则能完美解决这个问题。
双频OCC的核心设计思路是:
这种结构确保了在测试模式下,时钟信号的相位关系与功能模式完全一致,从而保证测试的有效性。
时钟门控是OCC设计中的第一个关键模块,其核心代码如下:
verilog复制wire clk_in_1x_gate;
wire clk_in_2x_gate;
CKLNQD10BWP16P90CPD DNT_CLKLAT_1 (.CP(clk_in_1x), .E(1'b0), .TE(ATPG_EN), .Q(clk_in_1x_gate));
CKLNQD10BWP16P90CPD DNT_CLKLAT_2 (.CP(clk_in_2x), .E(1'b0), .TE(ATPG_EN), .Q(clk_in_2x_gate));
设计要点:
注意:频率比必须是2的整数次幂(1:2, 1:4等),这是保证多时钟域相位对齐的关键条件。如果频率比不满足这个关系,会导致launch/capture时序无法对齐,严重影响测试覆盖率。
SCAN_EN信号的同步处理是确保测试稳定性的关键,电路实现如下:
verilog复制wire SCAN_EN_BUF;
wire SCAN_EN_DLY;
wire SCAN_EN_SYNC_1, SCAN_EN_SYNC_2, SCAN_EN_SYNC_3;
wire SCAN_EN_SYNC;
BUFFD0BWP16P90CPD DNT_QDELAY_BUF (.I(SCAN_EN), .Z(SCAN_EN_BUF));
DFCNQD0BWP16P90CPD DNT_QDELAY_0 (.D(SCAN_EN_BUF), .CP(ate_clk), .CDN(reset_x), .Q(SCAN_EN_DLY));
DFCNQD0BWP16P90CPD DNT_QSYNC_1 (.D(SCAN_EN_DLY), .CP(clk_in_1x_gate), .CDN(reset_x), .Q(SCAN_EN_SYNC_1));
DFCNQD0BWP16P90CPD DNT_QSYNC_2 (.D(SCAN_EN_SYNC_1), .CP(clk_in_1x_gate), .CDN(reset_x), .Q(SCAN_EN_SYNC_2));
DFCNQD0BWP16P90CPD DNT_QSYNC_3 (.D(SCAN_EN_SYNC_2), .CP(clk_in_1x_gate), .CDN(reset_x), .Q(SCAN_EN_SYNC_3));
DFCNQD0BWP16P90CPD DNT_QSYNC_4 (.D(SCAN_EN_SYNC_3), .CP(clk_in_2x_gate), .CDN(reset_x), .Q(SCAN_EN_SYNC));
同步策略解析:
实测波形显示,这种同步方案能确保高频pulse使能信号的相位关系严格符合预期。
脉冲生成电路负责产生精确的测试时钟序列:
verilog复制wire ATPG_SCAN_CLK;
CKAN2D1BWP16P90CPD DNT_ATPG_SCAN_CLK (.A1(SCAN_EN), .A2(test_clk), .Z(ATPG_SCAN_CLK));
SDFQD0BWP16P90CPD DNT_CLOCK_BIT_0_1X (.SI(clock_bit_si), .D(LAUNCH_EN_1X), .SE(SCAN_EN), .CP(ATPG_SCAN_CLK), .Q(LAUNCH_EN_1X));
SDFQD0BWP16P90CPD DNT_CLOCK_BIT_1_1X (.SI(LAUNCH_EN_1X), .D(CAPTURE_EN_1X), .SE(SCAN_EN), .CP(ATPG_SCAN_CLK), .Q(CAPTURE_EN_1X));
SDFQD0BWP16P90CPD DNT_CLOCK_BIT_0_2X (.SI(CAPTURE_EN_1X), .D(LAUNCH_EN_2X), .SE(SCAN_EN), .CP(ATPG_SCAN_CLK), .Q(LAUNCH_EN_2X));
SDFQD0BWP16P90CPD DNT_CLOCK_BIT_1_2X (.SI(LAUNCH_EN_2X), .D(CAPTURE_EN_2X_1), .SE(SCAN_EN), .CP(ATPG_SCAN_CLK), .Q(CAPTURE_EN_2X_1));
SDFQD0BWP16P90CPD DNT_CLOCK_BIT_2_2X (.SI(CAPTURE_EN_2X_1), .D(CAPTURE_EN_2X_2), .SE(SCAN_EN), .CP(ATPG_SCAN_CLK), .Q(CAPTURE_EN_2X_2));
设计特点:
在多频OCC设计中,最大的挑战是确保不同频率时钟的相位关系。我们的解决方案是:
测试模式下的功耗控制同样重要,我们采取了以下措施:
为确保测试有效性,我们重点关注:
在某款PCIE 3.0控制器芯片中,我们应用这种双频OCC结构实现了:
具体实现中,我们将OCC模块提前例化在RTL代码中,采用以下流程:
这种流程相比传统的two-pass flow具有更优的时序收敛性和更短的开发周期。
现象:高频时钟输出存在不可接受的抖动
解决方案:
现象:SCAN_EN同步后出现亚稳态
解决方案:
现象:从normal模式切换到test模式时出现时钟毛刺
解决方案:
为确保双频OCC的可靠性,必须进行全面的验证:
特别要注意的是,在仿真中需要构建精确的behavioral模型,模拟实际芯片中的时钟分布网络特性,否则可能导致仿真结果与实测不符。
根据多个项目实践经验,总结以下优化技巧:
在28nm工艺节点的一个实际案例中,通过手动优化OCC布局,我们将最高工作频率从400MHz提升到了550MHz,同时功耗降低了15%。
这种双频OCC结构还可应用于:
例如,在某款支持LPDDR4和LPDDR5的存储器控制器中,我们扩展了OCC设计,使其能够同时支持1600MHz和3200MHz的测试时钟,大大提高了测试效率。
随着芯片复杂度提升,OCC设计也面临新挑战:
在实际项目中,我们已经开始探索基于数字PLL的OCC设计,能够动态调整输出时钟频率和相位,满足更复杂的测试需求。这种设计在5nm工艺节点的一个AI加速器芯片中取得了良好效果,测试覆盖率提升了8%。