XC9500系列CPLD遙控編程的實(shí)現(xiàn)
數(shù)據(jù)輸入由紅外收發(fā)器實(shí)現(xiàn)(如可用Siemens公司的IRM3105),它所接收到的數(shù)據(jù)是由PC機(jī)生成的按RS232格式打包的XSVF格式編程數(shù)據(jù)文件,收發(fā)器通過UART(Universal Asynchronous Receiver Transmitter) 接口和XC95108相連。
XC95108包含URAT接收器、時序控制狀態(tài)機(jī)及總線控制器等。URAT接收器對接收到的數(shù)據(jù)進(jìn)行校驗(yàn),并且去掉起始位和結(jié)束位,如果接收正確則通知時序控制狀態(tài)機(jī)數(shù)據(jù)接收就緒,如果接收不正確則給出錯誤指示。
時序控制狀態(tài)機(jī)是遙控編程的核心,包括四種狀態(tài),即HIGH、LOW、DOWNLOAD和ISP。XSVF文件的第一、二個字節(jié)為傳輸?shù)淖止?jié)總數(shù),在狀態(tài)HIGH和LOW時字節(jié)總數(shù)的高低字節(jié)被保存到一個變量中,當(dāng)在DOWNLOAD狀態(tài)時,每當(dāng)往XSVF RAM寫入一個字節(jié),該變量的值減1,同時XSVF RAM的地址增1。一旦全部XSVF文件都寫入XSVF RAM中,狀態(tài)機(jī)便進(jìn)入ISP狀態(tài),此時中斷微控制器,微控制器響應(yīng)中斷并進(jìn)入中斷服務(wù)子程序。中斷服務(wù)子程序根據(jù)XSVF RAM中的信息通過JTAG對XC9500 CPLD器件進(jìn)行編程。
總線控制器根據(jù)時序控制狀態(tài)機(jī)控制XSVF格式數(shù)據(jù)存儲器的數(shù)據(jù)總線的切換,當(dāng)在DOWNLOAD狀態(tài)時,總線控制權(quán)交由XC95108;當(dāng)在ISP狀態(tài)時,總線控制權(quán)交由8031;當(dāng)在HIGH和LOW狀態(tài)時,總線為高阻狀態(tài)。
3.2 XSVF文件的生成
上面提到過遠(yuǎn)程端接收到的數(shù)據(jù)為XSVF文件,XSVF文件是由本地PC機(jī)生成的,它是如何生成的呢?首先將設(shè)計數(shù)據(jù)輸入,開發(fā)系統(tǒng)進(jìn)行設(shè)計轉(zhuǎn)換生成JEDEC器件編程文件;然后,由Xilinx公司提供的軟件EZTagTM自動讀取JEDEC文件并轉(zhuǎn)換成SVF文件,SVF格式是專門用來描述IEEE 1149.1(JTAG)總線操作的格式,SVF文件中不僅包含CPLD的編程數(shù)據(jù),也包含有編程命令,但由于SVF格式為ASXII碼,因要求較大內(nèi)存,不適合嵌入式應(yīng)用;最后,由軟件svf2xsvf將SVF格式轉(zhuǎn)換成XSVF格式,XSVF格式為壓縮的二進(jìn)制格式,占用存儲空間小,因而更適合嵌入式應(yīng)用。
3.3 嵌入式ISP編程流程
XC9500通過四線測試存取端口TAP(Yest Access Port 和TAP控制器來執(zhí)行系統(tǒng)內(nèi)編程和IEEE 1149.1邊界掃描測試(JTAG)。TAP包括TCK、TMS、TDI和TDO四個引腳,TAP控制器是16狀態(tài)的狀態(tài)機(jī),控制邊界掃描電路按照TMS運(yùn)行,執(zhí)行由IEEE規(guī)定的狀態(tài)圖(詳細(xì)內(nèi)容參見參考文獻(xiàn)1,下面所提到的狀態(tài),如Shift-1R、Shift-DR等包含在16個狀態(tài)之中)。微控制器根據(jù)XSVF文件提供的指令和數(shù)據(jù)激勵TAP端口,在TAP控制器的控制下實(shí)現(xiàn)XC9500 CPLD的ISP編程。流程圖如圖3所示。
XSVF格式的編程文件包含編程指令和數(shù)據(jù),編程指令主要有三條,即XRUNTEST、XSIR和XSDR。微控制器讀取指令后進(jìn)行解釋,并根據(jù)指令執(zhí)行相應(yīng)的操作。
XRUNTEST指令指定在執(zhí)行下一條XSIR和XSDR指令之前在Run-Test/ldle狀態(tài)停留的時間,指令之后緊接的4個字節(jié)為時間數(shù)值(毫秒數(shù));當(dāng)微控制器讀取的指令為XSIR時,便為TMS和TCK提供激勵直至進(jìn)入Shift-IR狀態(tài),然后讀取指定的數(shù)據(jù)長度值和數(shù)據(jù),并將數(shù)據(jù)送到TDI口;微控制器讀取XSDR指令時,首先讀取將要在Shift-IR狀態(tài)輸出的數(shù)據(jù),再觸發(fā)TMS和TCK直接進(jìn)入Shift-IR狀態(tài),并保持TMS為低,停留在Shift-IR狀態(tài),將XSVF文件數(shù)據(jù)輸出到TDI口,并存儲從TDO口接收到的數(shù)據(jù),在所有數(shù)據(jù)都輸出到TDI口之后,TMS變高進(jìn)入Exit-1-DR狀態(tài),然后將從TD0輸入的值和TDO預(yù)期值相比較,如果不匹配則轉(zhuǎn)出錯處理,如匹配則重新進(jìn)入Run-Test/ldle狀態(tài)。微控制器循環(huán)地從XSVF RAM中讀取指令和數(shù)據(jù)并執(zhí)行,直到編程結(jié)束。
評論