摘 要: 簡單介紹了XC9500系列CPLD器件及其系統(tǒng)內(nèi)編程(ISP)性能,接著講述了XC9500系列CPLD器件遙控編程的實現(xiàn)方法,并重點介紹了在遙控編程系統(tǒng)中應用微控制器(Intel 8031)實現(xiàn)嵌入式ISP的軟硬件設計。
關鍵詞: CPLD 遙控編程 ISP 微控制器
1 XC9500系列CPLD器件及其ISP性能
XC9500系列CPLD器件是由多個功能塊(FB)和IO塊(IOB)組成,可用開關矩陣FastCONNECT完全互連的子系統(tǒng),IOB提供輸入和輸出的緩沖,每個FB提供具有36個輸入和18個輸出的可編程邏輯容量。FastCONNECT開關矩陣連接所有的FB的輸出和FB的輸入,對于每個FB,12至18個(取決于封裝的引腳數(shù))輸出和有關的輸出使能信號直接驅(qū)動IOB。
所有XC9500系列CPLD器件都是系統(tǒng)內(nèi)編程的,最小達一萬次編程/擦除次數(shù),支持擴充的IEEE 1149.1邊界掃描標準,XC9500的結構特性著重滿足系統(tǒng)內(nèi)編程的要求,增強的引腳鎖定能力可以避免重做昂貴的印制板,擴充的JTAG指令集允許編程模式和系統(tǒng)內(nèi)診斷的各種控制。由于JTAG在其權限內(nèi)把ISP的性能擴充到1149.1的測試標準中,XC9500系列CPLD器件可以通過JTAG接口實現(xiàn)ISP性能。XC9500系列的系統(tǒng)內(nèi)編程性能,不僅為現(xiàn)場編程和調(diào)試提供了方便,允許用戶編程和再編程已經(jīng)安裝在系統(tǒng)印制板上的XC9500系列器件來改進樣機、更新制造流程;而且正是由于系統(tǒng)內(nèi)編程性能使得搖控編程成為可能。下面對XC9500系列CPLD器件搖控編程的實現(xiàn)方法做一介紹。
2 XC9500系列CPLD器件遙控編程的實現(xiàn)方法
對CPLD器件的編程,傳統(tǒng)的方法都是現(xiàn)場工程師通過PC機來實現(xiàn)的,PC機上必須有EZTag或者JTAG編程器軟件,并且PC機必須通過Xchecker或JTAG電纜和目標板相連,然后將JEDEC編程數(shù)據(jù)下載到目標板的CPLD器件中去。這種傳統(tǒng)的編程方法要求工程師必須親臨現(xiàn)場,這就帶來一個問題,那就是當產(chǎn)品銷售以后,如果要對它升級(主要是指升級CPLD器件的功能)就十分麻煩。本文所要介紹的遙控編程不同于傳統(tǒng)的編程方法,它不需要工程師親臨現(xiàn)場,只需在系統(tǒng)設計時將編程控制電路加入到嵌入式系統(tǒng)中去即可實現(xiàn)。
遙控編程的方框圖如圖1所示。要實現(xiàn)遙控編程,關鍵在于通信和嵌入式下載技術。通信部分包括通信接口和通信信道,它完成遠程數(shù)據(jù)傳輸,即將本地PC機生成的CPLD器件編程數(shù)據(jù)傳輸?shù)竭h程的目標系統(tǒng)的嵌入式下載模塊(即圖中所示的“微控制器及嵌入式編程控制”部分);嵌入式下載技術是指用微控制器通過JTAG接口實現(xiàn)對XC9500系列CPLD器件編程。通信可采用現(xiàn)有的各種通信技術,例如通過電話線用調(diào)制解調(diào)器實現(xiàn)通信以及通過電纜、激光和無線電等實現(xiàn)通信,在本文對通信的實現(xiàn)不做過多的介紹,下面只以簡單的紅外收發(fā)器為例加以說明,重點介紹微控制器及嵌入式編程控制的軟硬件實現(xiàn)。
3 微控制器及嵌入式編程控制的實現(xiàn)
3.1 硬件設計
微控制器及嵌入式編程控制硬件電路如圖2所示,由微控制器Intel 8031、時鐘、地址鎖存器74LS373、程序存儲器27512、數(shù)據(jù)存儲器RAM(包括XSVF格式數(shù)據(jù)存儲器)、XC95108及數(shù)據(jù)輸入接口等幾部分組成。圖中8031不僅可用來對CPLD進行編程控制,而且還可實現(xiàn)其它控制和處理,因為設計中使用了一片XSVF(Xilinx Serial Vector Format)格式數(shù)據(jù)存儲器,在XC95108的控制下可以在后臺實現(xiàn)數(shù)據(jù)通信,并將XSVF格式數(shù)據(jù)存儲到XSVM RAM中,當數(shù)據(jù)接收完畢時再中斷微控制器,在微控制器的中斷服務子程序中通過JTAG接口實現(xiàn)對目標CPLD器件編程。從圖中可見,除了XC95108、數(shù)據(jù)輸入和XSVF RAM部分外,其它部分和常見的8031應用系統(tǒng)一樣,這里不再贅述,下面主要講述數(shù)據(jù)輸入和XC95108的內(nèi)部功能。
數(shù)據(jù)輸入由紅外收發(fā)器實現(xiàn)(如可用Siemens公司的IRM3105),它所接收到的數(shù)據(jù)是由PC機生成的按RS232格式打包的XSVF格式編程數(shù)據(jù)文件,收發(fā)器通過UART(Universal Asynchronous Receiver Transmitter)接口和XC95108相連。
XC95108包含URAT接收器、時序控制狀態(tài)機及總線控制器等。URAT接收器對接收到的數(shù)據(jù)進行校驗,并且去掉起始位和結束位,如果接收正確則通知時序控制狀態(tài)機數(shù)據(jù)接收就緒,如果接收不正確則給出錯誤指示。
時序控制狀態(tài)機是遙控編程的核心,包括四種狀態(tài),即HIGH、LOW、DOWNLOAD和ISP。XSVF文件的第一、二個字節(jié)為傳輸?shù)淖止?jié)總數(shù),在狀態(tài)HIGH和LOW時字節(jié)總數(shù)的高低字節(jié)被保存到一個變量中,當在DOWNLOAD狀態(tài)時,每當往XSVF RAM寫入一個字節(jié),該變量的值減1,同時XSVF RAM的地址增1。一旦全部XSVF文件都寫入XSVF RAM中,狀態(tài)機便進入ISP狀態(tài),此時中斷微控制器,微控制器響應中斷并進入中斷服務子程序。中斷服務子程序根據(jù)XSVF RAM中的信息通過JTAG對XC9500 CPLD器件進行編程。
總線控制器根據(jù)時序控制狀態(tài)機控制XSVF格式數(shù)據(jù)存儲器的數(shù)據(jù)總線的切換,當在DOWNLOAD狀態(tài)時,總線控制權交由XC95108;當在ISP狀態(tài)時,總線控制權交由8031;當在HIGH和LOW狀態(tài)時,總線為高阻狀態(tài)。
3.2 XSVF文件的生成
上面提到過遠程端接收到的數(shù)據(jù)為XSVF文件,XSVF文件是由本地PC機生成的,它是如何生成的呢?首先將設計數(shù)據(jù)輸入,開發(fā)系統(tǒng)進行設計轉(zhuǎn)換生成JEDEC器件編程文件;然后,由Xilinx公司提供的軟件EZTagTM自動讀取JEDEC文件并轉(zhuǎn)換成SVF文件,SVF格式是專門用來描述IEEE 1149.1(JTAG)總線操作的格式,SVF文件中不僅包含CPLD的編程數(shù)據(jù),也包含有編程命令,但由于SVF格式為ASCII碼,因要求較大內(nèi)存,不適合嵌入式應用;最后,由軟件svf2xsvf將SVF格式轉(zhuǎn)換成XSVF格式,XSVF格式為壓縮的二進制格式,占用存儲空間小,因而更適合嵌入式應用。
3.3 嵌入式ISP編程流程
XC9500通過四線測試存取端口TAP(Test Access Port)和TAP控制器來執(zhí)行系統(tǒng)內(nèi)編程和IEEE 1149.1邊界掃描測試(JTAG)。TAP包括TCK、TMS、TDI和TDO四個引腳,TAP控制器是16狀態(tài)的狀態(tài)機,控制邊界掃描電路按照TMS運行,執(zhí)行由IEEE規(guī)定的狀態(tài)圖(詳細內(nèi)容參見參考文獻1,下面所提到的狀態(tài),如Shift-IR、Shift-DR等包含在16個狀態(tài)之中)。微控制器根據(jù)XSVF文件提供的指令和數(shù)據(jù)激勵TAP端口,在TAP控制器的控制下實現(xiàn)XC9500 CPLD的ISP編程。流程圖如圖3所示。
XSVF格式的編程文件包含編程指令和數(shù)據(jù),編程指令主要有三條,即XRUNTEST、XSIR和XSDR。微控制器讀取指令后進行解釋,并根據(jù)指令執(zhí)行相應的操作。
XRUNTEST指令指定在執(zhí)行下一條XSIR和XSDR指令之前在Run-Test/Idle狀態(tài)停留的時間,指令之后緊接的4個字節(jié)為時間數(shù)值(毫秒數(shù));當微控制器讀取的指令為XSIR時,便為TMS和TCK提供激勵直至進入Shift-IR狀態(tài),然后讀取指定的數(shù)據(jù)長度值和數(shù)據(jù),并將數(shù)據(jù)送到TDI口;微控制器讀取XSDR指令時,首先讀取將要在Shift-DR狀態(tài)輸出的數(shù)據(jù),再觸發(fā)TMS和TCK直接進入Shift-DR狀態(tài),并保持TMS為低,停留在Shift-DR狀態(tài),將XSVF文件數(shù)據(jù)輸出到TDI口,并存儲從TD0口接收到的數(shù)據(jù),在所有數(shù)據(jù)都輸出到TDI口之后,TMS變高進入Exit-1-DR狀態(tài),然后將從TD0輸入的值和TD0預期值相比較,如果不匹配則轉(zhuǎn)出錯處理,如匹配則重新進入Run-Test/Idle狀態(tài)。微控制器循環(huán)地從XSVF RAM中讀取指令和數(shù)據(jù)并執(zhí)行,直到編程結束。
參考文獻
1 孟憲元.可編程ASIC集成數(shù)字系統(tǒng).北京:電子工業(yè)出版社,1998
2 Xilinx公司.The Programmable Logic Data Book,1999