## 1.1 背景介紹
? ? ? ? ?
* ?JTAG框架
1. 基本目標:實現芯片間互聯線的測試
2. 擴展功能:實現芯片內各種IP的調試
* 通過TDR(數據寄存器)操縱和觀測IP
* 通過指令集激活某一個IP的TDR
* JTAG缺點
1. 1. 片上IP數量導致JTAG指令集的增加
2. 片上IP數量導致指令解碼器變得非常復雜
3. 廣播架構不利于PR
4. 測試模式在芯片設計階段固定下來,缺乏靈活性
5. JTAG標準并未定義TDR如何操縱IP,而是使用document描述指導施加激勵與獲取結果的過程
## 1.2 IJATG架構

* IJTAG完全兼容JTAG網絡
* 描述TDR到TAP之間的網絡結構
* 串行TDR鏈路,通過SIB靈活配置
* 規范了TDR和IP之間的交互語言
* 即插即用
### 1.2.1 IJTAG標準
* IEEE 1687 Standard
* 2005年起草,2014年頒布,眾多IC/EDA公司參與
* 包含三個部分:
* 靈活的串行TDR鏈路,用以測試片上IP
* IJTAG網絡連接語言:ICL(Instrument Connectivity Language),描述整個IJTAG網絡結構
* IJATG程序描述語言:PDL(Propcedural Description Language),描述TDR與IP之間的交互
# 2 SIB的結構
## 2.1 SIB概念

1. SIB:Segment-insertion-Bit
2. SIB是單比特的TDR
3. SIB有開和關兩種狀態
4. 插入SIB來實現任意層次化結構
5. 利用SIB可以實現對IJTAG網絡的靈活配置
## 2.2 SIB的結構
### 2.2.1 總體結構

* ?ShiftEn打開,TDI經過兩個選擇器經過Shift寄存器,最終到達TDO,數據不進入下一級SIB;
* ShiftEn打開,UpdateEn打開,TDI輸入后經過Shift寄存器、Update寄存器,最終Select影響輸入部分的Select信號(我理解兩個select信號為同個端口),Select打開后,數據可進入下一級SIB。路徑為:TDI→ToTDI→FromTDO→經過Shift寄存器→TDO;
### 2.2.2 RESET:關閉到下一級SIB網絡入口

* ?除了上述說到的關閉打開Update寄存器外,還可以使用Reset信號對Update寄存器進行復位;
* 復位信號打開后,TDI輸入的數據只能經過當前SIB,無法進入下一級SIB網絡;
### 2.2.3 Close:關閉到下一級SIB網絡的入口

* ?TDI輸入0,Select為0,移位數據進入Shift寄存器,使得Shift寄存器輸出為0,然后打開UpdateEn信號,使得Update寄存器輸出為0,然后關閉UpdateEn信號,如此使得Update寄存器一直保持0,測試時下一級SIB網絡使用不會打開;
* 目的:讓該SIB的下一級SIB網絡在測試時始終不接入測試;
### 2.2.4 Open:打開到下一級SIB網絡的入口

* 經過TDI移入1,使得Shift寄存器輸出為1,打開UpdateEn信號,使得Update寄存器輸出Select信號為1,Select為1后,第一個MUX選擇器選擇上方通路;
* 數據路徑:TDI輸入數據→ToTDI(下一級SIB網絡)→FromTDO(接收下一級SIB出來的數據)→經過兩個MUX和Shift寄存器→TDO輸出;
# 3 SIB的網絡
## 3.1 SIB多級網絡結構(plug-and-play)

* ?通過TDR與SIB的組合,對芯片進行整體測試;
* 上圖中,可以看做Level0(2個TDR+SIB),Level1(1個TDR);
* Level0中的兩個TDR連接的instrumentA、B一定會被測試到,在shift數據時就需要移入instrumentA、B的測試向量位寬,SIB可以控制后面的TDR與instrumentsC是否需要被測試;
## 3.2 配置SIB的網絡結構

* ?串聯兩個SIB;
* 每個SIB后面分別掛一組TDR和instrument;
* TDR1長度為10;
* TDR2長度為5;
* 如何通過TDI掃描數據來配置該網絡?
* 激活TDR1
* 激活TDR2
### 3.2.1 系統初始化
RESET狀態:

* ?移入2bit數據,將SIB1與SIB2狀態均置為0;

* ?步驟一:
* 移入2bit數據,將SIB1置為1,SIB2置為0;(紅色箭頭)
* 打開Ijtag\_update;
* 激活打開TDR1網絡;(黃色箭頭)
* 步驟二:
* 移入12bits數據,因為IP1長度10,再加上SIB1、2的兩個bit;
* 保持SIB1打開;
* 保持SIB2關閉;
* 操縱TDR1(10bits);
* 步驟三:
* 移入12bit數據,將SIB1置為0,將SIB2置為1;
* 打開Ijtag\_update;
* 關閉TDR1網絡,打開TDR2網絡;

* ?步驟四:
* 移入7bit數據;
* 保持SIB1關閉,保持SIB2打開,操縱TDR2(5bits);
# 4 ICL語法
## 4.1 基本概念

* ?ICL:Instrument Connection Language;
* ICL描述IJTAG網絡的連接關系;
* ICL是可讀文件;
## 4.2 描述Instrument

* ?Instrument表示該器件的例化名;
* DataInPort DI、DataOutPort DO、ClockPort CLK:描述該模塊的對外接口;
* Alias enable表示部分端口的作用,{}內我理解表示有效取值范圍;
* Enum用于解釋,二進制對應的工作模式;
## 4.3 描述TDR
* ?描述TDR的對外接口;
* ScanOutPort SO{Source SR\[0\]}表示SR的第0bit連接至SO;
* ScanRegister SR\[7:0\] {ScanInSource SI}表示SR的位寬10bit,掃描輸入的源頭是SI;
## 4.4 描述SIB


* ?ScanOutPort? ? so{Source sib;},so的數據源頭是sib;
* ScanOutPort? ? ?tsi;{Source si},對下一級輸出端口tsi,源頭是si;
* ScanInterface? ? Client {},當前SIB對上一級的接口;
* ScanInterface? ? ?Host {},當前SIB對下一級的接口;
* ScanRegister sib {},設置sib的輸入源,captrue的源頭信號,reset的源頭信號;
* ScanMux設置sib的Q端口控制MUX的信號輸出到sib,Q端為1‘b0,si信號送入sib,Q端為1‘b1,fso信號送入sib;(這部分邏輯較混亂,正確性待考證)
## 4.5 描述chip

# 5 PDL語法
## 5.1 基本概念

* PDL:Procedural Description Language
* PDL描述如何配置和操作片上IP/instrument(如何激勵與觀測IP)
* EDA工具可以將IP的PDL按照層次結構retargeting到更上一級IJTAG網絡指導chip層;
* retargeting:將IP的接口通過PDL逐層的向上MAP到chip的端口上,完成測試;
## 5.2 PDL命令
* iWrite:向對象中寫入數據
* iRead:從對象中讀取數據
* iApply:執行PDL命令
* iNote:添加注釋
* iProc:定義PDL的procedure
* iCall:調用定義好的proc
* iMerge:并行執行多個proc
* iRunLoop:執行指定數目的時鐘周期