加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • on chip clock的由来
    • 基本OCC结构
    • Systemverilog code of the OCC
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

浅谈 dft 之 OCC(on chip clock)

09/27 12:31
20万
阅读需 7 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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

相关推荐

电子产业图谱

前华为海思工程师;与非网2022年度影响力创作者;IC技术圈成员。

微信公众号