• 正文
    • on chip clock的由來
    • 基本OCC結構
    • Systemverilog code of the OCC
  • 相關推薦
申請入駐 產業(yè)圖譜

淺談 dft 之 OCC(on chip clock)

2024/09/27
15.2萬
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

on chip clock的由來

在工藝節(jié)點在130nm以下的時候,很多情形下的物理缺陷都是由于延時來引起的。因此在對這種類型的chip做dft的時候,需要建立一個新的故障模型,業(yè)內稱之為延時故障模型(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下需要兩個時鐘脈沖,其頻率續(xù)等于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 相比,行業(yè)標準 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,以根據(jù)test type來允許單脈沖或雙脈沖。OCC 在stuck-at test(At-speed Mode = 0)中生成一個時鐘脈沖,在at-speed test(At-speed Mode?= 1)中生成兩個時鐘脈沖。

此 OCC(具有 5 位移位寄存器)在at-speed test的行為如圖 2 所示。兩個捕獲脈沖出現(xiàn)在功能時鐘的 5 個正沿之后(因為我們使用的是 5 位移位寄存器) .

注意:一旦 Shift Enable 置為低電平,n 位移位寄存器根據(jù)功能時鐘的上升沿數(shù)量決定延遲,之后功能時鐘在 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

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

前華為海思工程師;與非網(wǎng)2022年度影響力創(chuàng)作者;IC技術圈成員。

微信公眾號