XC9500系列CPLD遙控編程的實現
數據輸入由紅外收發器實現(如可用Siemens公司的IRM3105),它所接收到的數據是由PC機生成的按RS232格式打包的XSVF格式編程數據文件,收發器通過UART(Universal Asynchronous Receiver Transmitter) 接口和XC95108相連。
XC95108包含URAT接收器、時序控制狀態機及總線控制器等。URAT接收器對接收到的數據進行校驗,并且去掉起始位和結束位,如果接收正確則通知時序控制狀態機數據接收就緒,如果接收不正確則給出錯誤指示。
時序控制狀態機是遙控編程的核心,包括四種狀態,即HIGH、LOW、DOWNLOAD和ISP。XSVF文件的第一、二個字節為傳輸的字節總數,在狀態HIGH和LOW時字節總數的高低字節被保存到一個變量中,當在DOWNLOAD狀態時,每當往XSVF RAM寫入一個字節,該變量的值減1,同時XSVF RAM的地址增1。一旦全部XSVF文件都寫入XSVF RAM中,狀態機便進入ISP狀態,此時中斷微控制器,微控制器響應中斷并進入中斷服務子程序。中斷服務子程序根據XSVF RAM中的信息通過JTAG對XC9500 CPLD器件進行編程。
總線控制器根據時序控制狀態機控制XSVF格式數據存儲器的數據總線的切換,當在DOWNLOAD狀態時,總線控制權交由XC95108;當在ISP狀態時,總線控制權交由8031;當在HIGH和LOW狀態時,總線為高阻狀態。
3.2 XSVF文件的生成
上面提到過遠程端接收到的數據為XSVF文件,XSVF文件是由本地PC機生成的,它是如何生成的呢?首先將設計數據輸入,開發系統進行設計轉換生成JEDEC器件編程文件;然后,由Xilinx公司提供的軟件EZTagTM自動讀取JEDEC文件并轉換成SVF文件,SVF格式是專門用來描述IEEE 1149.1(JTAG)總線操作的格式,SVF文件中不僅包含CPLD的編程數據,也包含有編程命令,但由于SVF格式為ASXII碼,因要求較大內存,不適合嵌入式應用;最后,由軟件svf2xsvf將SVF格式轉換成XSVF格式,XSVF格式為壓縮的二進制格式,占用存儲空間小,因而更適合嵌入式應用。
3.3 嵌入式ISP編程流程
XC9500通過四線測試存取端口TAP(Yest Access Port 和TAP控制器來執行系統內編程和IEEE 1149.1邊界掃描測試(JTAG)。TAP包括TCK、TMS、TDI和TDO四個引腳,TAP控制器是16狀態的狀態機,控制邊界掃描電路按照TMS運行,執行由IEEE規定的狀態圖(詳細內容參見參考文獻1,下面所提到的狀態,如Shift-1R、Shift-DR等包含在16個狀態之中)。微控制器根據XSVF文件提供的指令和數據激勵TAP端口,在TAP控制器的控制下實現XC9500 CPLD的ISP編程。流程圖如圖3所示。

XSVF格式的編程文件包含編程指令和數據,編程指令主要有三條,即XRUNTEST、XSIR和XSDR。微控制器讀取指令后進行解釋,并根據指令執行相應的操作。
XRUNTEST指令指定在執行下一條XSIR和XSDR指令之前在Run-Test/ldle狀態停留的時間,指令之后緊接的4個字節為時間數值(毫秒數);當微控制器讀取的指令為XSIR時,便為TMS和TCK提供激勵直至進入Shift-IR狀態,然后讀取指定的數據長度值和數據,并將數據送到TDI口;微控制器讀取XSDR指令時,首先讀取將要在Shift-IR狀態輸出的數據,再觸發TMS和TCK直接進入Shift-IR狀態,并保持TMS為低,停留在Shift-IR狀態,將XSVF文件數據輸出到TDI口,并存儲從TDO口接收到的數據,在所有數據都輸出到TDI口之后,TMS變高進入Exit-1-DR狀態,然后將從TD0輸入的值和TDO預期值相比較,如果不匹配則轉出錯處理,如匹配則重新進入Run-Test/ldle狀態。微控制器循環地從XSVF RAM中讀取指令和數據并執行,直到編程結束。
評論