浅谈 dft 之 OCC(on chip clock)

  • thumbup1
  • 09/27 12:31

on chip clock的由来

在工艺节点在130nm以下的时候,很多情形下的物理缺陷都是由于延时来引起的。因此在对这种类型的chip做dft的时候,需要建立一个新的故障模型,业内称之为延时故障模型(time delay model)。解决的方法就是at-speed test,所谓的at-speed test就是让芯片工作在自己高倍时钟频率上,这个频率往往是要高过ATE的时钟的。这样对扫描模型的建立就提出了新的要求。

大家工作中接触的一般的dft时钟是不是频率不高。

片上时钟控制器 (On-chip Clock Controllers ,OCC) ,也称为扫描时钟控制器 (Scan Clock Controllers,SCC)。OCC 是插入 SOC 的逻辑,用于在 ATE(自动测试设备)上进行回片测试期间控制时钟。由于 at-speed test在capture mode下需要两个时钟脉冲,其频率续等于func mode下的最高时钟频率,因此在没有 OCC 的情况下,我们需要通过 I/O  pad提供这些at-speed clock脉冲。但是这些I/O  pad它们在可以支持的最大频率方面存在限制;另一方面,OCC 使用内部 PLL clock来生成时钟脉冲进行测试。在 stuck-at test期间,OCC 确保在capture阶段仅生成一个时钟脉冲。同样,在at-speed test期间,OCC 确保在capture阶段生成两个时钟脉冲,其频率等于功能时钟的频率。

因此,在scan做的比较好的design中所有的test clock都通过 OCC 进行通路控制, OCC 控制scan mode下的时钟操作(在stuck-at test和at-speed test中)并绕过func mode下的功能时钟。

基本OCC结构

本文我们将讨论一个非常基本的 OCC 设计,其唯一目的是演示它是如何工作的。与此处讨论的 OCC 相比,行业标准 OCC 更先进,更能抵御时钟毛刺。

图1  基本片上时钟控制器结构示意图(具有 n 位移位寄存器

电路处于func mode(Test Mode = 0)时,OCC 会传播功能时钟(参见图 1)。但在shift阶段(Shift Enable = 1),scan clock在 OCC 的输出端propagate。在capture阶段(Shift Enable = 0),移位寄存器开始shift“1”并启用Clock Gate,以根据test type来允许单脉冲或双脉冲。OCC 在stuck-at test(At-speed Mode = 0)中生成一个时钟脉冲,在at-speed test(At-speed Mode = 1)中生成两个时钟脉冲。

此 OCC(具有 5 位移位寄存器)在at-speed test的行为如图 2 所示。两个捕获脉冲出现在功能时钟的 5 个正沿之后(因为我们使用的是 5 位移位寄存器) .

注意:一旦 Shift Enable 置为低电平,n 位移位寄存器根据功能时钟的上升沿数量决定延迟,之后功能时钟在 OCC 的输出端propagate。

图 2  图 1 中所示 OCC 结构的仿真波形(具有 5 位移位寄存器)

Systemverilog code of the OCC

module occ
#(
parameter SHIFT_REG_BITS = 5
)
(
input logic test_mode,
input logic atspeed_mode,
input logic shift_en,
input logic scan_clk,
input logic func_clk,
output logic occ_out_clk
)
logic cg_en;
logic cg_out_clk;
logic sync_flop;
logic [SHIFT_REG_BITS-1:0]shift_reg;

always @(func_clk or cg_en) begin
if (cg_en == 1)
cg_out_clk = func_clk;
else
cg_out_clk = 0;
end

always_ff @(posedge scan_clk) begin
sync_flop <= ~shift_en;
end

always_ff @(posedge func_clk) begin
shift_reg <= shift_reg << 1;
shift_reg[0] <= sync_flop;
end

assign occ_out_clk = test_mode ? (shift_en ? scan_clk : cg_out_clk) : func_clk;

assign cg_en = atspeed_mode ? (~shift_reg[SHIFT_REG_BITS-1] & shift_reg[SHIFT_REG_BITS-3]) : (~shift_reg[SHIFT_REG_BITS-1] & shift_reg[SHIFT_REG_BITS-2]);

endmodule

END

人工客服
(售后/吐槽/合作/交友)

相关资讯

  1. 1.
  2. 2.
  3. 3.
  4. 4.
  5. 5.
  6. 6.
  7. 7.
  8. 8.
  9. 9.
  10. 10.
  11. 11.
  12. 12.
  13. 13.
  14. 14.
  15. 15.
  16. 16.
  17. 17.
  18. 18.
  19. 19.
  20. 20.
查看全部20条内容