SVF 規范
SVF: Serial Vector Format
介紹
本文檔描述 SVF 串行向量格式文件的語法。
SVF 文件設計來鼓勵對串行向量在產品生命周期中的重用,從設計階段的引入到服務階段的部署。
SVF 文件以 ASCII 進行描述,由一系列 SVF 語句組成。單行最大支持的字符數為 256,一個 SVF 語句可以擴展寫作多行。每一個語句由命令以及相關的參數組成。每一個 SVF 語句在分號結束。SVF 對大小寫不敏感。注釋可以在 ! 后面或 // 后面插入到文件中。
在一個語句中的掃描數據是以十六進制數字進行表示的,並總是在一對圓括號中。掃描數據不能超過語句指定的數據長度。數據的最高位的 0 在字串較長時可以省略。掃描數據的比特順序遵循最低位作為 TDI 以及 SMASK 的第一位,也是掃描數據的 TDO 與 MASK 數據的第一位。比特順序遵循 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列位置到一個邏輯PINRUNTEST:強制IEEE 1149.1總線在一個狀態上運行指定的時鍾或指定的時長SDR:掃描數據寄存器,執行IEEE 1149.1規定的數據寄存器掃描SIR:掃描指令寄存器,執行IEEE 1149.1規定的指令寄存器掃描STATE:強制IEEE 1149.1總線到一個穩定的狀態TDR:報尾數據寄存器,指定報尾模式,在后續的DR掃描操作中添加這樣的尾部數據TIR:報尾指令寄存器,指定報尾模式,在后續的IR掃描操作中添加這樣的尾部數據TRST:測試復位,控制可選的測試復位引腳
SVF 命令細節
每一個命令及其相關的參數會在本文檔的后面進行介紹。參數以 [] 包圍的是可選的,否則參數是強制性的。在本文檔中,掃描操作是由 SIR 或 SDR 命令以及與其相關的頭部或尾部命令組成的。一些操作命令參數,比如 MASK、SMASK 以及 TDI 黏在這些指令的后面。MASK、SMASK 以及 TDI 被 SIR、SDR、HIR、HDR、TIR 以及 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-9。1、1E0、1E+0、1E-0、1.0、1.0E0、1.0E+0 以及 1.0E-0 都是合法數字。
ENDDR ENDIR
語法:
ENDDR stable_state;
ENDIR stable_state;
目的:
建立 IEEE 1149.1 的掃描操作的結束狀態
參數:
stable_state:IEEE 1149.1穩定狀態,在標准掃描操作執行完畢之后強制進入的狀態。有效的狀態為IRPAUSE、DRPAUSE、RESET以及IDLE
一般信息:
這兩個命令分別指定 DR、IR 掃描操作結束后要進入的狀態。一旦指定這兩個命令指定的數據保持有效直到被另外的 ENDDR、ENDIR 指令覆寫。在啟動時候 ENDDR 與 ENDIR 都被指定為 IDLE
例子:
ENDIR IDLE;
ENDDR DRPAUSE;
FREQUENCY
語法:
FREQUENCY [cycles Hz];
目的:
指定后續操作 (如 SDR、SIR、狀態改變 STATE、以及測試操作 RUNTEST) 的最大時鍾頻率。新的頻率報紙有效,直到下一個 FREQUENCY 命令將其覆寫
參數:
cycles:[可選] 以Hz表示的大於0的實數來表示最大的TCK頻率
一般信息:
cycles 以實數指定。
如果 cycle 指定,可能會在 RUNTEST 命令處報錯。如果 RUNTEST 即給了 run_count 有給了 max_time,max_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 開發的原始語句就能夠重用到新的情況。在這個例子中,一個頭部模式將會定義為 u4、u5,尾部模式將會定義為 u2 與 u1。
可選參數可以以任何順序指定,每一個操作參數僅可以指定一次。TDI、TDO、MASK 或 SMASK 不能長於 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驅動為邏輯1L驅動為邏輯0Z驅動為高阻態U檢測到邏輯1D檢測到邏輯0X檢測到未知態
注意: 對於雙向通道
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 方向。PIOMAP 在 SVF 文件使用 PIO 語句時必須使用。如果使用了 PIO,那么 PIOMAP 必須放在 SVF 文件的 SIR、SDR、STATE、RUNTEST 或 PIO 語句的前面。
參數:
direction_1(n):指定邏輯名的IO方向。方向可能是IN、OUT或INOUT。一個帶有方向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_count 或 min_time 至少要指定其中一個。如果同時指定了兩個參數,那么兩個條件在 RUNTEST 命令結束之前都需要滿足。如果 max_time 超限,RUNTEST 在 run_count 計數到達之前提前結束。
參數:
run_state:[可選] 在RUNTEST命令執行期間,強制進入的狀態。有效的運行狀態為IRPAUSE、DRPAUSE、RESET與IDLE。如果測試總線已經處於該運行態,那么無需進行狀態變換。一旦指定了一個run_state,后續的RUNTEST命令將會默認進入到這個默認狀態。初始化默認狀態是IDLErun_count:[可選] 總線維持在運行狀態的時鍾周期數,表示為一個32位的無符號整型數run_clk:[可選] 指定使用的時鍾,可以是測試時鍾TCK或系統時鍾System Clock。系統時鍾參考UUT上的時鍾。系統時鍾是獨立的[min_time SEC]:[可選] 以秒計數,在結束前最小計數值[MAXIMUM max_time SEC]:[可選] 以秒計數的最大計數值[ENDSTATE end_state]:[可選] 在執行結束之后,強制進入的狀態,有效的結束狀態為IRPAUSE、DRPAUSE、RESET以及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中指定的參數,SDR、SIR中的參數分別記憶,不要搞混,長度改變或初次使用時,必須指定[TDO (tdo)]:[可選] 希望從目標中掃描出來的值,以十六進制表示。如果未指定參數,那么不需要進行比較。如果沒有TDO參數存在MASK不需要使用[MASK (mask)]:[可選] 在進行TDO比較時使用的掩碼,十六進制表示。若參數未指定,使用上一個掩碼值,SDR、SIR的掩碼值分別記憶[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中描述的最終穩定狀態。有效狀態為RESET、IDLE、DRSELECT、DRCAPTURE、DRSHIFT、DRPAUSE、DREXIT1、DREXIT2、DRUPDATE、IRSELECT、IRCAPTURE、IRSHIFT、IRPAUSE、IREXIT1、IREXIT2、以及IRUPDATEstable_state:強制進入的最終穩定狀態,有效的穩定狀態為IRPAUSE、DRPAUSE、RESET以及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;
