SVF 規范


SVF 規范

原文鏈接
我的博客

SVF: Serial Vector Format

介紹

本文檔描述 SVF 串行向量格式文件的語法。

SVF 文件設計來鼓勵對串行向量在產品生命周期中的重用,從設計階段的引入到服務階段的部署。

SVF 文件以 ASCII 進行描述,由一系列 SVF 語句組成。單行最大支持的字符數為 256,一個 SVF 語句可以擴展寫作多行。每一個語句由命令以及相關的參數組成。每一個 SVF 語句在分號結束。SVF 對大小寫不敏感。注釋可以在 ! 后面或 // 后面插入到文件中。

在一個語句中的掃描數據是以十六進制數字進行表示的,並總是在一對圓括號中。掃描數據不能超過語句指定的數據長度。數據的最高位的 0 在字串較長時可以省略。掃描數據的比特順序遵循最低位作為 TDI 以及 SMASK 的第一位,也是掃描數據的 TDOMASK 數據的第一位。比特順序遵循 IEEE 1149.1 標准。

一個 SVF 文件的例子:

!Begin Test Program
TRST OFF;                                 !Disable Test Reset line
ENDIR IDLE;                               !End IR scans in IDLE
ENDDR IDLE;                               !End DR scans in IDLE
HIR  8  TDI (00);                         !8-bit IR header
HDR 16  TDI (FFFF) TDO (FFFF) MASK (FFFF);!16-bit DR header
TIR 16  TDI (0000);                       !16-bit IR trailer
TDR  8  TDI (12);                         !16-bit DR trailer
SIR  8  TDI (41);                         !8-bit IR scan
SDR 32  TDI (ABCD1234) TDO (11112222);    !32-bit DR scan
STATE   DRPAUSE;                          !Go to stable state DRPAUSE
RUNTEST 100 TCK ENDSTATE IRPAUSE;         !RUNBIST for 100 TCKs
!End Test Program

支持下面的 SVF 命令集:

  • ENDDR: 指定 DR 掃描操作之后的默認狀態
  • ENDIR: 指定 IR 掃描操作之后的默認狀態
  • FREQUENCY: 指定最高的時鍾頻率
  • HDR: 報頭數據寄存器,指定報頭模式,在后續的 DR 掃描操作中添加這樣的頭部數據
  • HKR: 報頭指令寄存器,指定報頭模式,在后續的 IR 掃描操作中添加這樣的頭部數據
  • PIO: 並行輸入/輸出,指定一個並行測試模式
  • PIOMAP: 並行輸入/輸出映射,映射 PIO 列位置到一個邏輯 PIN
  • RUNTEST: 強制 IEEE 1149.1 總線在一個狀態上運行指定的時鍾或指定的時長
  • SDR: 掃描數據寄存器,執行 IEEE 1149.1 規定的數據寄存器掃描
  • SIR: 掃描指令寄存器,執行 IEEE 1149.1 規定的指令寄存器掃描
  • STATE: 強制 IEEE 1149.1 總線到一個穩定的狀態
  • TDR: 報尾數據寄存器,指定報尾模式,在后續的 DR 掃描操作中添加這樣的尾部數據
  • TIR: 報尾指令寄存器,指定報尾模式,在后續的 IR 掃描操作中添加這樣的尾部數據
  • TRST: 測試復位,控制可選的測試復位引腳

SVF 命令細節

每一個命令及其相關的參數會在本文檔的后面進行介紹。參數以 [] 包圍的是可選的,否則參數是強制性的。在本文檔中,掃描操作是由 SIRSDR 命令以及與其相關的頭部或尾部命令組成的。一些操作命令參數,比如 MASKSMASK 以及 TDI 黏在這些指令的后面。MASKSMASK 以及 TDISIRSDRHIRHDRTIR 以及 TDR “記憶”。一些 SVF 命令會涉及到 IEEE 1149.1 TAP 狀態。下面的表格列出了這樣的 SVF 狀態:

IEEE 1149.1 TAP 狀態名 SVF TAP 狀態名
`Test-Logic-Reset RESET
Run-Test/Idle IDLE
Select-DR-Scan DRSELECT
Capture-DR DRCAPTURE
Shift-DR DRSHIFT
Exit1-DR DREXIT1
Pause-DR DRPAUSE
Exit2-DR DREXIT2
Update-DR DRUPDATE
Select-IR-Scan IRSELECT
Capture-IR IRCAPTURE
Shift-IR IRSHIFT
Exit1-IR IREXIT1
Pause-IR IRPAUSE
Exit2-IR IREXIT2
Update-IR IRUPDATE

SVF 中的實數使用如下的語法進行表示:
數字 [. 數字] [E [+|-] 數字]
數字為十進制的 0-911E01E+01E-01.01.0E01.0E+0 以及 1.0E-0 都是合法數字。

ENDDR ENDIR

語法:

ENDDR stable_state;
ENDIR stable_state;

目的:
建立 IEEE 1149.1 的掃描操作的結束狀態

參數:

  • stable_state: IEEE 1149.1 穩定狀態,在標准掃描操作執行完畢之后強制進入的狀態。有效的狀態為 IRPAUSEDRPAUSERESET 以及 IDLE

一般信息:
這兩個命令分別指定 DRIR 掃描操作結束后要進入的狀態。一旦指定這兩個命令指定的數據保持有效直到被另外的 ENDDRENDIR 指令覆寫。在啟動時候 ENDDRENDIR 都被指定為 IDLE

例子:

ENDIR IDLE;
ENDDR DRPAUSE;

FREQUENCY

語法:

FREQUENCY [cycles Hz];

目的:
指定后續操作 (如 SDRSIR、狀態改變 STATE、以及測試操作 RUNTEST) 的最大時鍾頻率。新的頻率報紙有效,直到下一個 FREQUENCY 命令將其覆寫

參數:

  • cycles: [可選] 以 Hz 表示的大於 0 的實數來表示最大的 TCK 頻率

一般信息:
cycles 以實數指定。
如果 cycle 指定,可能會在 RUNTEST 命令處報錯。如果 RUNTEST 即給了 run_count 有給了 max_timemax_time 可能不能滿足給定的最大頻率

例子:

SIR 8 TDI(F3) TDO(01) MASK(03);   ! Set up BIST, full speed
FREQUENCY 90E3 HZ;                ! Decrease to 90 kHz
RUNTEST 100000 TCK;               ! Execute BIST
FREQUENCY 1E5 HZ;                 ! Increase to 100 kHz

RUNTEST 300000 TCK 1 SEC          ! Error! 300000 TCK at 100 kHz is
   MAXIMUM 2 SEC;                 !    3 SEC, but MAXIMUM is 2 SEC
FREQUENCY;                        ! Return to full speed

HDR HIR (Header Data Register, Header Instruction Register)

語法:

HDR length [TDI (tdi)] [TDO (tdo)] [MASK (mask)] [SMASK (smask)];
HIR length [TDI (tdi)] [TDO (tdo)] [MASK (mask)] [SMASK (smask)];

目的:
指定一個默認的頭部模式,在每次掃描操作前,移位進入。這個命令旨在允許對某個 IEEE 1149.1 實現的掃描語句,能夠在另一個 IEEE 1149.1 設備上適配。它指定一組先導數據對掃描語句進行填充

參數:

  • length: 一個 32 比特無符號十進制整數,指定要掃描的比特位數,設置 0 移除頭部
  • [TDI (tdi)]: [可選] 要掃描進入目標的十六進制值。如果沒有這個參數,TDI 值將會是上一個 HDR/HIR 語句的參數,顯然第一個出現的命令,或長度改變時,必須給定參數
  • [TDO (tdo)]: [可選] 掃描出來的值要與這個參數進行對比,以十六進制數表示,如果沒有這個參數,則無需進行比較
  • [MASK (mask)]: [可選] 在對 TDO 進行比較時的掩碼,若這個參數在初始時或修改長度后沒有出現,那么所有的比特位都要進行比較,如果沒有 TDO 則不需要給出本參數
  • [SMASK (SMASK)]: [可選] 指定發送的 TDI 的掩碼,同上

一般信息:
下面的例子中,假設 SVF 文件是對 ASIC 開發的,ASIC 之后放到了一個板卡上作為 u3 器件,如下圖所示:

如果報頭、報尾語句定義恰當,只需要做一個很小的調整,對 ASIC 開發的原始語句就能夠重用到新的情況。在這個例子中,一個頭部模式將會定義為 u4u5,尾部模式將會定義為 u2u1

可選參數可以以任何順序指定,每一個操作參數僅可以指定一次。TDITDOMASKSMASK 不能長於 length 指定的長度。

例子:

HDR 32 TDI(00000010) TDO(81818181) MASK(FFFFFFFF) SMASK(0);
HIR 16 TDI(ABCD);
...
HDR 0; ! Removes the previous DR scan header.

PIO (Parallel Input/Output)

語法:

PIO (vector_string);

目的:
指定一個並行測試向量。一個 PIOMAP 語句必須在之前定義,在 PIO 語句中定義的向量字符的數量必須與前面的 PIOMAP 語句定義的邏輯名的數量相同。

參數:

  • vector_string: 一個或多個向量字符的列向集合。每一個字符為一個特殊的測試向量的 PIN 指定方向與狀態。定義為如下字符:

    • H 驅動為邏輯 1
    • L 驅動為邏輯 0
    • Z 驅動為高阻態
    • U 檢測到邏輯 1
    • D 檢測到邏輯 0
    • X 檢測到未知態

    注意: 對於雙向通道 Z 表示無驅動無檢測

例子:

PIO (HLUDXZHHLL);

PIOMAP (Parallel Input/Output Map)

語法:

PIOMAP (direction_1 logical_name_1 ... [direction_n logical_name_n]);
PIOMAP (column_1 logical_name_1 ... [column_n logical_name_n]);

目的:
定義在 PIO 語句中的邏輯列的名稱與 IO 方向。PIOMAPSVF 文件使用 PIO 語句時必須使用。如果使用了 PIO,那么 PIOMAP 必須放在 SVF 文件的 SIRSDRSTATERUNTESTPIO 語句的前面。

參數:

  • direction_1(n): 指定邏輯名的 IO 方向。方向可能是 INOUTINOUT。一個帶有方向 IN 的列是 UUT 的輸入,在 PIO 語句中的列可能使用 drive 字符。一個 OUT 列是從 UUT 的輸出,可能使用 detect 字符。一個 INOUT 列是一個雙向信號,可能使用任何向量字符
  • logical_name_1(n): 一個字符串,指示與列相關的 PIN 的邏輯名。相同的字符串在 PIOMAP 中不能使用超過一次
  • column1(n): 指定 PIO 語句的列號碼。在 PIO 語句中的第一個字符是第一列,第二個字符為第二列,以此類推。列號是十進制的。一個指定的列號不能使用超過一次。現在使用中不推薦這樣用了

例子:

!PIOMAP must be placed before PIO statement
PIOMAP (IN STROBE
        IN ALE
        OUT DISABLE
        OUT ENABLE
        OUT CLEAR
        IN SET);

PIO(HLUDXZ);

!Vector is:
!  STROBE   <- H
!  ALE      <- L
!  DISABLE  <- U
!  ENABLE   <- D
!  CLEAR    <- X
!  SET      <- Z

RUNTEST

語法:

RUNTEST [run_state] run_count run_clk [min_time SEC [MAXIMUM max_time SEC]] [ENDSTATE end_state];

RUNTEST [run_state] min_time SEC [MAXIMUM max_time SEC] [ENDSTATE end_state];

目的:
強制目標 IEEE 1149.1 總線運行到指定的狀態一些時鍾周期 (可以是測試時鍾或是系統時鍾),指定一個時間長度,或同時指定兩者,之后移動目標總線到特定的狀態。這可以被用來控制目標中的 RUNBIST 操作。

RUNTEST 第一種形式為執行指定的測試運行狀態指定的時鍾周期。可選的是一個最小以及最大的以秒為單位的時間延遲。第二種形式為執行指定的測試運行狀態指定的最小或最大的秒為單位的時長。因為 RUNTEST 是一個生成向量的命令,因此即便 run_conut 未指定,TCK 依然在跳動。

run_countmin_time 至少要指定其中一個。如果同時指定了兩個參數,那么兩個條件在 RUNTEST 命令結束之前都需要滿足。如果 max_time 超限,RUNTESTrun_count 計數到達之前提前結束。

參數:

  • run_state: [可選] 在 RUNTEST 命令執行期間,強制進入的狀態。有效的運行狀態為 IRPAUSEDRPAUSERESETIDLE。如果測試總線已經處於該運行態,那么無需進行狀態變換。一旦指定了一個 run_state,后續的 RUNTEST 命令將會默認進入到這個默認狀態。初始化默認狀態是 IDLE
  • run_count: [可選] 總線維持在運行狀態的時鍾周期數,表示為一個 32 位的無符號整型數
  • run_clk: [可選] 指定使用的時鍾,可以是測試時鍾 TCK 或系統時鍾 System Clock。系統時鍾參考 UUT 上的時鍾。系統時鍾是獨立的
  • [min_time SEC]: [可選] 以秒計數,在結束前最小計數值
  • [MAXIMUM max_time SEC]: [可選] 以秒計數的最大計數值
  • [ENDSTATE end_state]: [可選] 在執行結束之后,強制進入的狀態,有效的結束狀態為 IRPAUSEDRPAUSERESET 以及 IDLE。如果測試總線已經是結束狀態,那么在結束后無狀態變化,如果沒有指定結束狀態,那么結束之后進入默認狀態,默認的默認狀態為 IDLE

例子:

! Run in Run-Test/Idle for 1000 TCKs, then go to Pause-DR.
RUNTEST 1000 TCK ENDSTATE DRPAUSE;
! Go back to Run-Test/Idle for 20 SCKs, then go to Pause-DR.
RUNTEST 20 SCK;
! Run in Run-Test/Idle for 1000000 TCKs or at least one second, then go to Pause-DR
RUNTEST 1000000 TCK 1SEC;
! Run in Run-Test/Idle for at least one millisecond and at most 50 milliseconds, then remain in Run-Test/Idle.
RUNTEST 10.0E-3 SEC MAXIMUM 50.0E-3 SEC ENDSTATE IDLE;
! Run in Pause-DR for at least 50 ms, then go to Run-Test/Idle
RUNTEST DRPAUSE 20E-3 SEC ENDSTATE IDLE;
! Run in Pause-DR for at least one second, then go to Run-Test/Idle
RUNTEST 1 SEC;
! Run in Run-Test/Idle for at least 10 ms, then remain in Run-Test/Idle
RUNTEST IDLE 1E-2 SEC;

SDR SIR (Scan Data Register, Scan Instruction Register)

語法:

SDR length [TDI (tdi)] [TDO (tdo)] [MASK (mask)] [SMASK (smask)];
SIR length [TDI (tdi)] [TDO (tdo)] [MASK (mask)] [SMASK (smask)];

目的:
指定目標掃描寄存器的掃描模式。

參數:

  • length: 一個 32 比特無符號十進制整型數,制定要掃描的數位長度
  • [TDI (tdi)]: [可選] 希望掃描進入目標寄存器的值,以十六進制表示。如果未指定參數,會使用上一個 SDR/SIR 中指定的參數,SDRSIR 中的參數分別記憶,不要搞混,長度改變或初次使用時,必須指定
  • [TDO (tdo)]: [可選] 希望從目標中掃描出來的值,以十六進制表示。如果未指定參數,那么不需要進行比較。如果沒有 TDO 參數存在 MASK 不需要使用
  • [MASK (mask)]: [可選] 在進行 TDO 比較時使用的掩碼,十六進制表示。若參數未指定,使用上一個掩碼值,SDRSIR 的掩碼值分別記憶
  • [SMASK (smask)]: [可選] 指定不關心的 TDI 數據,十六進制表示同上

例子:

SDR 24 TDI (000010) TDO (818181) MASK (FFFFFF) SMASK (0);
SIR 16 TDI (ABCD);

STATE

語法:

STATE [pathstate_1 [pathstate_2 ... [pathstate_n]]] stable_state;

目的:
強制總線進入到一個穩定狀態。

參數:

  • pathstate_1(n): 顯式地給出一個或多個可選的 IEEE 1149.1 狀態,以打倒在 TAP 中描述的最終穩定狀態。有效狀態為 RESETIDLEDRSELECTDRCAPTUREDRSHIFTDRPAUSEDREXIT1DREXIT2DRUPDATEIRSELECTIRCAPTUREIRSHIFTIRPAUSEIREXIT1IREXIT2、以及 IRUPDATE
  • stable_state: 強制進入的最終穩定狀態,有效的穩定狀態為 IRPAUSEDRPAUSERESET 以及 IDLE

例子:

! Force bus to DRPAUSE from current state it is in
STATE DRPAUSE;

! Dictate explicit path bus will take moving from DRPAUSE to IRPAUSE
STATE DREXIT2 DRUPDATE DRSELECT IRSELECT IRCAPTURE IREXIT1 IRPAUSE;
當前狀態 新狀態 狀態路徑
RESET RESET RESET
RESET IDLE RESET-IDLE
RESET DRPAUSE RESET-IDLE-DRSELECT-DRCAPTURE-DREXIT1-DRPAUSE
RESET IRPAUSE RESET-IDLE-DRSELECT-IRSELECT-IRCAPTURE-IREXIT1-IRPAUSE
IDLE RESET IDLE-DRSELECT-IRSELECT-RESET
IDLE IDLE IDLE
IDLE DRPAUSE IDLE-DRSELECT-DRCAPTURE-DREXIT1-DRPAUSE
IDLE IRPAUSE IDLE-DRSELECT-IRSELECT-IRCAPTURE-IREXIT1-IRPAUSE
DRPAUSE RESET DRPAUSE-DREXIT2-DRUPDATE-DRSELECT-IRSELECT-RESET
DRPAUSE IDLE DRPAUSE-DREXIT2-DRUPDATE-IDLE
DRPAUSE DRPAUSE DRPAUSE-DREXIT2-DRUPDATE-DRSELECT-DRCAPTURE-DREXIT1-DRPAUSE
DRPAUSE IRPAUSE DRPAUSE-DREXIT2-DRUPDATE-DRSELECT-IRSELECT-IRCAPTURE-IREXIT1-IRPAUSE
IRPAUSE RESET IRPAUSE-IREXIT2-IRUPDATE-DRSELECT-IRSELECT-RESET
IRPAUSE IDLE IRPAUSE-IREXIT2-IRUPDATE-IDLE
IRPAUSE DRPAUSE IRPAUSE-IREXIT2-IRUPDATE-DRSELECT-DRCAPTURE-DREXIT1-DRPAUSE
IRPAUSE IRPAUSE IRPAUSE-IREXIT2-IRUPDATE-DRSELECT-IRSELECT-IRCAPTURE-IREXIT1-IRPAUSE

TDR TIR (Trailer Data Register, Trailer Instruction Register)

語法:

TDR length [TDI (tdi)] [TDO (tdo)] [MASK (mask)] [SMASK (smask)]
TIR length [TDI (tdi)] [TDO (tdo)] [MASK (mask)] [SMASK (smask)]

目的:

參數:

例子:

TDR  32 TDI(00000010) TDO(81818181) MASK(FFFFFFFF) SMASK(0);
TIR  16 TDI(ABCD);
TDR  0; ! Removes the previous DR scan trailer.

TRST (Test Reset)

語法:

TRST trst_mode;

目的:
操作 TRST 信號操作。

參數:

  • trst_mode: 指定 TRST 激活、關閉、高阻態以及是否存在,有效的 trst_mode 為:
    • ON 激活 (邏輯 0)
    • OFF 關閉 (邏輯 1)
    • Z 高阻態
    • ABSENT 不存在

例子:

TRST ON;
TRST OFF;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM