張立強(qiáng),宋 玲,劉寶娟
(中國(guó)電子科技集團(tuán)公司第四十七研究所,沈陽(yáng)110032)
利用并口下載電纜實(shí)現(xiàn)JTAG下載,把并口的有效端口和JTAG端口連接起來(lái),實(shí)現(xiàn)了數(shù)據(jù)寫入、數(shù)據(jù)讀出、控制器的信號(hào)輸入、時(shí)鐘的傳輸。在狀態(tài)機(jī)的正確狀態(tài)下進(jìn)行指令匹配和數(shù)據(jù)傳輸。并在保證數(shù)據(jù)下載正確的前提下,達(dá)到下載速度的最優(yōu)化。
計(jì)算機(jī)的標(biāo)準(zhǔn)并行端口是25針的母接頭端口。這25只管腳并不是都被用到。這些管腳分別用于數(shù)據(jù)的傳輸、檢查打印機(jī)的狀態(tài)及控制打印機(jī)。數(shù)據(jù)端口保存了寫入數(shù)據(jù)和輸出端口的一個(gè)字節(jié)信息。每位數(shù)據(jù)都是并行傳送的,它通常是以字節(jié)(8位)為單位進(jìn)行數(shù)據(jù)傳輸。并口的Pin2(TCK)、Pin3(TDI)、Pin8(TMS)分別對(duì)應(yīng)數(shù)據(jù)寄存器的第0位、第1位、第6位。并口的Pin11(TDO)對(duì)應(yīng)狀態(tài)寄存器的第7位。Pin18到Pin25是引腳GND。
TAP控制器是一個(gè)有限狀態(tài)機(jī),一共有16個(gè)狀態(tài)。測(cè)試訪問(wèn)狀態(tài)機(jī)的目的是選擇指令寄存器和數(shù)據(jù)寄存器,使其連接到TDI和TDO之間。
邏輯測(cè)試單元有一個(gè)指令寄存器和三個(gè)數(shù)據(jù)寄存器,三個(gè)數(shù)據(jù)寄存器為:旁路寄存器(BYPASS),識(shí)別碼寄存器(IDCODE),邊界掃描寄存器(BOUND)。指令決定使用哪個(gè)寄存器。指令寄存器為4位,指令由TDI引腳串行輸入。如圖1所示。
1位旁路寄存器(BYPASS)為TDI-TDO提供了一個(gè)最短的串行通路。在板級(jí)測(cè)試期間,可以通過(guò)這條通路繞開不需測(cè)試的設(shè)備。這可以提高測(cè)試速度。32位識(shí)別寄存器(IDCODE)提供了設(shè)備的制造商、版本號(hào)等信息。邊界掃描寄存器(BOUND)保持引腳的狀態(tài)或引腳需要的數(shù)據(jù)。邊界掃描寄存器為一個(gè)串行的移位寄存器,每個(gè)單元分配給芯片的相應(yīng)引腳。
圖1 測(cè)試單元的結(jié)構(gòu)
在這些指令中時(shí)鐘的上升沿對(duì)TDI和TMS進(jìn)行采樣。所有的輸出TDO都是在下降沿產(chǎn)生的。
JTAG并口編程的實(shí)質(zhì)就是首先將EXTEST指令串行移入可編程芯片上JTAG器件的指令寄存器,然后控制JTAG器件的TCK和TMS引腳使其進(jìn)入SHIFT-DR狀態(tài),再將數(shù)據(jù)串行移入到JTAG器件的邊界掃描寄存器,最后控制JTAG器件的TCK和TMS引腳使其進(jìn)入U(xiǎn)PDATE-DR狀態(tài),將位流寫入FPGA。指令裝載完成后,只要不更改指令,就不需要再進(jìn)行指令移位了,此時(shí)只需要進(jìn)行數(shù)據(jù)移位,所以數(shù)據(jù)移位是編程的主要操作。狀態(tài)轉(zhuǎn)換如圖2所示。
圖2 TAP控制器的16種狀態(tài)切換圖
首先對(duì)狀態(tài)機(jī)復(fù)位,使JTAG單元從任何的未知狀態(tài)回到TEST-LOGIC-RESET狀態(tài),讓TMS至少保持連續(xù)6個(gè)周期的高電平后,回到TESTLOGIC-RESET狀態(tài)。程序代碼片段如下:
for(n=0;n<6;n++)
send_bit(0,1);//連續(xù)6個(gè)周期的高電平
TMS加一個(gè)周期的低電平,轉(zhuǎn)到RUN-TEST/IDLE狀態(tài)。TMS加兩個(gè)周期的高電平轉(zhuǎn)到 SELECT-IR狀態(tài)。加兩個(gè)周期的低電平后轉(zhuǎn)到SHIFT-IR狀態(tài)。程序代碼片段如下:
send_bit(0,1);
send_bit(0,1);
send_bit(0,0);
send_bit(0,0);//轉(zhuǎn)到SHIFT-IR狀態(tài)
開始加載CFG_IN指令,指令碼是0101,加載一個(gè)周期的高電平轉(zhuǎn)到EXIT1-IR。程序代碼片段如下:
send_bit(1,0);
send_bit(0,0);
send_bit(1,0);
send_bit(0,0);
send_bit(0,1);//加載CFG_IN指令
TMS加載兩個(gè)周期的高電平轉(zhuǎn)到SELECT-DR狀態(tài),再加載兩個(gè)周期的低電平后轉(zhuǎn)到SHIFTDR。程序代碼片段如下:
send_bit(0,1);
send_bit(0,1);
send_bit(0,0);
send_bit(0,0);//轉(zhuǎn)到SHIFT-DR狀態(tài)
開始寫配置寄存器選項(xiàng) COR,寫入指令后SHUTDOWN置1。寫START指令到CMD指令寄存器。寫清CRC指令寄存器。然后加載三個(gè)周期的高電平轉(zhuǎn)到SELECT-IR,再加載兩個(gè)周期的低電平轉(zhuǎn)到SHIFT-IR狀態(tài)。程序代碼片段如下:
send_bit(0,1);
send_bit(0,1);
send_bit(0,1);
send_bit(0,0);
send_bit(0,0);//轉(zhuǎn)到 SHIFT-IR 狀態(tài)
加載 JSTART指令到指令寄存器,指令碼是0011,加載一個(gè)周期的高電平轉(zhuǎn)到EXIT1-IR狀態(tài)。程序代碼片段如下:
send_bit(0,0);
send_bit(0,0);
send_bit(1,0);
send_bit(1,0);
send_bit(0,1);//加載JSTART指令
加載兩個(gè)周期的高電平,再加載兩個(gè)周期的低電平轉(zhuǎn)到SHIFT-DR狀態(tài)。程序代碼片段如下:send_bit(0,1);
send_bit(0,1);
send_bit(0,0);
send_bit(0,0);//轉(zhuǎn)到SHIFT-DR狀態(tài)
加載17個(gè)時(shí)鐘周期關(guān)閉時(shí)序。程序代碼片段如下:
for(n=0;n<17;n++)
send_bit(0,n==16);
加載三個(gè)周期的高電平和兩個(gè)周期的底電平轉(zhuǎn)到SHIFT-IR狀態(tài),加載CFG_IN指令。在SHIFTDR狀態(tài)寫AGHIGH指令到CMD寄存器中,產(chǎn)生GHIGH_B信號(hào)。寫COR使得SHUTDOWN狀態(tài)是0。寫完指令后,加載三個(gè)周期的高電平和兩個(gè)周期的低電平,狀態(tài)轉(zhuǎn)到 SHIFT-IR狀態(tài)。加載JSTART指令后轉(zhuǎn)到SHIFT-DR狀態(tài)。加載17個(gè)時(shí)鐘周期關(guān)閉時(shí)序轉(zhuǎn)到SHIFT-IR狀態(tài),加載CFG_IN指令。在SHIFT-DR狀態(tài)寫AGHIGH指令到CMD寄存器中,產(chǎn)生GHIGH_B信號(hào)。寫COR使得SHUTDOWN狀態(tài)是1。寫完指令后,加載三個(gè)周期的高電平和兩個(gè)周期的低電平,轉(zhuǎn)到SHIFT-IR狀態(tài)。加載JSTART指令。轉(zhuǎn)到SHIFT-DR狀態(tài),加載17個(gè)時(shí)鐘周期關(guān)閉時(shí)序。轉(zhuǎn)到SHIFT-IR狀態(tài),加載CFG_IN指令。轉(zhuǎn)到SHIFT-DR狀態(tài),加載二進(jìn)制位流文件,進(jìn)行編程下載工作。位流全部移進(jìn)后,轉(zhuǎn)到SHIFT-IR狀態(tài),加載JSTART指令。加載兩個(gè)周期的高電平和兩個(gè)周期的低電平后轉(zhuǎn)到SHIFT-DR狀態(tài)。加載17個(gè)周期的低電平后,再加載兩個(gè)周期的高電平和一個(gè)周期的低電平,狀態(tài)機(jī)轉(zhuǎn)到RUN-TEST/IDLE狀態(tài)。程序代碼片段如下:
send_bit(0,1);
send_bit(0,1);
send_bit(0,0);
JTAG編程下載完成。
JTAG下載程序在多款可編程芯片上進(jìn)行了測(cè)試,位流能成功進(jìn)行下載,電路的功能經(jīng)驗(yàn)證完全正確。
JTAG并口編程很好的實(shí)現(xiàn)了位流文件到FPGA的下載,并對(duì)下載成功與否做出了明確的判斷。通過(guò)指令回讀出狀態(tài)寄存器的狀態(tài),用于對(duì)比下載前后FPGA的狀態(tài)變化。
[1][美]Dhananjay.V.Gadre.并行端口編程[M].北京:中國(guó)電力出版社,2000.
[2]何希順,張躍,何榮森.嵌入系統(tǒng)中的JTAG接口編程技術(shù)[J].電子技術(shù)應(yīng)用,2001,27(12):9-12.