JTAG控制電路的應(yīng)用與研究
所有邏輯器件的廠商生產(chǎn)的器件都支持JTAG加載電路,它是一種通用的加載電路.幾乎所有的邏輯工程師或硬件開(kāi)發(fā)工程師都曾被這種簡(jiǎn)單的JTAG控制電路困惑過(guò).本人通過(guò)多次的現(xiàn)場(chǎng)應(yīng)用,把JTAG電路的應(yīng)用技巧總結(jié)如下.(以ALTERA,并且FPGA支持CPU+JTAG編程模式為例).
典型的JTAG控制電路
很多設(shè)計(jì)者在應(yīng)用此電路的時(shí)候,往往達(dá)不到理想的效果.該電路使用方法不正確,可能導(dǎo)致如下結(jié)果:
問(wèn)題一:電路無(wú)法正常加載.
問(wèn)題二:電路可以正常加載,編程軟件顯示加載過(guò)程正常,但加載后內(nèi)部邏輯被復(fù)位.(多出現(xiàn)在CPLD+FLASH方式和CPU+FLASH方式)
問(wèn)題三:CONF_DONE信號(hào)不能夠正常變高.
工程師在使用此電路的時(shí)候,不要忽略nCONFIG,MSEL[3..0]和DCLK等特殊管腳的作用,更不要忽略上拉和下拉電路的作用.
nCONFIG,MSEL[3..0],DCLK等特殊管腳的作用.
1.nCONFIG信號(hào)是FPGA的另一種加載模式PS(PassiveSerial)的握手信號(hào),該信號(hào)低電平有效.因?yàn)镻S模式的時(shí)鐘可以由設(shè)計(jì)者靈活控制,并且時(shí)序簡(jiǎn)單.PS模式常用于CPU加載或CPLD+FLASH等方式的加載,以方便CPU或CPLD模擬PS的時(shí)序.其典型電路為:
CPU加載或CPLD+FLASH加載方式
PS模式時(shí)序圖
FPGA既采用CPU加載又采用JTAG的加載模式.這是一種典型的應(yīng)用,CPU加載可以避免使用昂貴的配置芯片,在產(chǎn)品量產(chǎn)時(shí)使用.JTAG加載模式一般用于量產(chǎn)之前的調(diào)試.在調(diào)試的過(guò)程中,如果不對(duì)nCONFIG信號(hào)進(jìn)行正確的處理,可能導(dǎo)致”問(wèn)題二”.從PS模式的時(shí)序圖上可以清楚的看到,nCONFIG信號(hào)是低電平有效,PS的控制電路檢測(cè)該信號(hào)的下降沿.如果采用CPU+JTAG模式編程FPGA,因在調(diào)試時(shí)只會(huì)用到JTAG模式,那么此時(shí)的nCONFIG必須保證為高電平.也就是PS模式無(wú)效.
2.MSEL[3..0]是ModeSelect管腳.因?yàn)镕PGA支持不同的加載模式.在用到特殊模式編程FPGA時(shí),必須把MSEL[3..0]設(shè)置為對(duì)應(yīng)的狀態(tài).
從下面的注釋可以看到,JTAG模式對(duì)MSEL[3..0]無(wú)任何要求,可以接’1’,’0’,NC等.由于電路支持CPU加載模式.MSEL[3..0]以PS模式的要求為準(zhǔn).
3.DCLK屬于AS(ActiveSerial)模式的時(shí)鐘管腳.AS模式是專用配置芯片和FPGA的連接電路.如果電路只支持CPU+JTAG方式,那么DCLK應(yīng)為一個(gè)確定的電平,可以為高/低電平,但不能夠接NC.
上拉和下拉電路的作用
Altera公司不斷優(yōu)化JTAG模式中的上拉和下拉電路,這是隨著FPGA內(nèi)部的JTAG控制的發(fā)展而發(fā)展的.這些電阻有不可低估的作用,不但需要設(shè)計(jì)者在PCB上一個(gè)不漏,而且需要靈活應(yīng)用.
上拉/下拉電阻的三大作用:
1.保證電路的初始值.比如TCK信號(hào)采用下拉電阻.為什么采用下拉電阻,而不采用上拉電阻呢?因?yàn)橄吕娮枋筎CK信號(hào)的初始值為0,由于是時(shí)鐘信號(hào),可以保證時(shí)鐘信號(hào)在初值后第一個(gè)邊沿為上升沿,而JTAG控制電阻正是以TCK的上升沿向FPGA內(nèi)部寫配置數(shù)據(jù)的.
2.這里的上/下拉電阻僅僅屬于推薦值,并非確定值,目的是保證信號(hào)質(zhì)量.以上拉電阻為例,如果上拉電阻為10K以上,由于管腳對(duì)地有一個(gè)等效電容,由于T=RC,C由器件的工藝決定,電阻越大,充放電時(shí)間越長(zhǎng),信號(hào)的上升沿就越緩慢,斜率就越小.上升時(shí)間如果超過(guò)JTAG控制電路的要求,向FPGA內(nèi)部寫數(shù)據(jù)就可能出錯(cuò).那么,如果上拉電阻越小呢?會(huì)不會(huì)上升時(shí)間變小呢?是的.電阻變小,上升時(shí)間變小,斜率變大,但是卻帶來(lái)了另一個(gè)嚴(yán)峻的問(wèn)題,如果電阻小到一定程度,信號(hào)將在上升沿出現(xiàn)上沖現(xiàn)象,情形嚴(yán)重時(shí)會(huì)出現(xiàn)信號(hào)的振鈴.如果電阻太小,產(chǎn)生的倒灌電流超過(guò)器件IO的容限,JTAG控制電路會(huì)燒壞.
那么,這個(gè)電阻究竟多大才滿足一般PCB的要求呢?一般情況使用4.7K.
3.保證信號(hào)的驅(qū)動(dòng)能力.前面提到,電阻越小,信號(hào)的斜率越小,同時(shí)信號(hào)的驅(qū)動(dòng)能力越強(qiáng).電阻越大,信號(hào)斜率越大,同時(shí)信號(hào)的驅(qū)動(dòng)能力越弱.這一點(diǎn)在JTAG菊花鏈電路中有及其重要的重要.
JTAG菊花鏈電路
如有多個(gè)FPGA在同一板卡中,在板卡集成度較高的情況下會(huì)采用該電路.一般情況,菊花鏈不超過(guò)3三級(jí),也就是不超過(guò)三個(gè)FPGA時(shí),可以采用上述電路.由于JTAG控制電路的信號(hào)的吸電流較大,加上PCB走線的功率損耗,可以通過(guò)調(diào)節(jié)上/下拉電阻的方式來(lái)調(diào)節(jié)信號(hào)的驅(qū)動(dòng)強(qiáng)度.
如果菊花鏈超過(guò)三級(jí),也就是超過(guò)三個(gè)FPGA.則推薦使用Buffer增強(qiáng)JTAG各個(gè)信號(hào)的驅(qū)動(dòng)強(qiáng)度