一種使用USB對ADSP_TS101S進行鏈路口加載的方案
ADSP_TS101S(以下簡稱TS101)是美國ADI公司推出的TigerSHARC系列數(shù)字信號處理器中一款高性能的靜態(tài)超標(biāo)量處理器,它專為大規(guī)模信號處理任務(wù)和通信應(yīng)用進行了結(jié)構(gòu)上的優(yōu)化,廣泛應(yīng)用于雷達等高速實時信號處理系統(tǒng)。
將程序代碼加載到DSP內(nèi)部程序空間時,通常采用開發(fā)器的JTAG接口將執(zhí)行文件加載到DSP內(nèi)存里進行調(diào)試;在硬件仿真完成后,又通過JTAG接口將生成的ldr文件燒寫到與TS101相連的FLASH里固化。然而在很多情況下,使用開發(fā)器加載或固化程序很不方便,甚至無法實現(xiàn),因此需要開發(fā)一種脫離開發(fā)器的TS101加載方式?;谶@種需求,設(shè)計實現(xiàn)了基于USB總線的TS101鏈路口加載,只需一根USB線纜,即可實現(xiàn)TS1 01的程序在線重加載和固化。
1 Link Port協(xié)議
鏈路口(Link Port)是TS101的一種高速互聯(lián)接口,它的通信是通過一個8位的數(shù)據(jù)總線和3個控制信號進行的,有4組LINK管腳。其中LxC LKIN和LxCLOUT是時鐘/應(yīng)答輸入和輸出管腳;LxDAT[7:0]-數(shù)據(jù)輸入輸出總線;LxDIR是LINK的方向指示信號。Link Port的最簡單的連接方式(如圖1所示)用了LxCLKIN,LxCLKOUT,和LxDAT。每個ADSP-TS101 DSP的LxCLKOUT與其它的LxCLKIN相連,兩片TigerSHARC101 DSP芯片之間用LxDAT數(shù)據(jù)總線相連。
Link Port的最小傳輸單位是8個時鐘周期,數(shù)據(jù)總量為4倍字長(16字節(jié),在時鐘的雙沿觸發(fā))。傳輸被發(fā)送端初始化,只有當(dāng)接收端設(shè)置LxCLKOUT(對于發(fā)送端為LxCLKIN)為高電平,發(fā)送才能被初始化為一次傳輸。LxCLKOUT為高電平意味著接收端為接收模式并且接收緩沖器為空。
2 TS101的軟件設(shè)計流程及加載引導(dǎo)方式
TS101的軟件設(shè)計流程如圖2所示。其中,鏈接描述文件(.LDF)定義了整個系統(tǒng)的存儲器配置和程序中數(shù)據(jù)及代碼的具體存放位置。加載核文件(.DXE)是指加載引導(dǎo)核程序,其大小為32 bit,放在加載文件的起始部分,其功能是用來實現(xiàn)TS101的正確引導(dǎo)。ADI公司在其DSP集成開發(fā)環(huán)境Visual DSP++安裝目錄的ldr子目錄下提供了標(biāo)準加載核文件及相應(yīng)的源程序(.ASM)和鏈接描述文件。一般可直接使用提供的標(biāo)準加載核文件或?qū)ζ湎鄳?yīng)的源程序進行簡單修改,重新編譯鏈接生成所需的加載核文件。加載文件是由引導(dǎo)加載器(elfloader)將可執(zhí)行文件進行一定的格式變化,并在起始位置附加上加載核文件生成的。
加載程序的外部設(shè)備可以直接向鏈路口緩沖寫入數(shù)據(jù),只要寫入速率不超過DSP的主時鐘頻率即可。此處的外部設(shè)備采用計算機的USB總線。鑒于FPGA在數(shù)字電路系統(tǒng)設(shè)計中具有可靠性高、設(shè)計靈活、易于開發(fā)等優(yōu)點,本文采用FPGA進行Link Port與USB的接口設(shè)計,使USB的輸出滿足Link Port的協(xié)議,以實現(xiàn)DSP的鏈路口加載。
3 USB總線及其與Link Port的接口
采用FPGA實現(xiàn)基于USB總線的TS101的Link Port加載結(jié)構(gòu)框圖如圖3所示。
3.1 Link Port發(fā)送模塊
ADI公司網(wǎng)站上有推薦的實現(xiàn)TS101的Link Port收發(fā)協(xié)議的VHDL代碼,但是比較復(fù)雜,鑒于本文只需要使用Link Port的發(fā)送功能,且無需緩沖,故根據(jù)圖1所示的最小Link Port配置編寫代碼,實現(xiàn)Link Port發(fā)送功能?;贔PGA的TS101的Link Port發(fā)送模塊結(jié)構(gòu)框圖如圖4所示。
圖4 中的FIFO負責(zé)對輸出數(shù)據(jù)進行緩沖,當(dāng)輸入數(shù)據(jù)的速率高于Link Port時鐘的頻率時,Link Port的數(shù)據(jù)可以先存在FIFO數(shù)據(jù)中,當(dāng)存入一定數(shù)量以后,再以Link Port的時鐘把數(shù)據(jù)讀出。當(dāng)輸入數(shù)據(jù)的速率低于Link Port的時鐘數(shù)率的時候,Link Port的數(shù)據(jù)同樣可以先存在FIFO中,當(dāng)存入整數(shù)倍的4字數(shù)據(jù)量后,再以Link Port的時鐘的數(shù)率發(fā)送出去。
圖4中的控制模塊是Link Port發(fā)送模塊的關(guān)鍵模塊,主要負責(zé)產(chǎn)生讀FIFO的讀使能信號和Link Port的發(fā)送時鐘根據(jù)Link Port發(fā)送的時序特點,使用狀態(tài)機來實現(xiàn)數(shù)據(jù)流的控制。當(dāng)Link Port沒有工作時,保持等待狀態(tài)。需要傳輸數(shù)據(jù)時,首先檢查LxCLKIN是否為高電平,若是,則說明接收端為接收模式并且接收緩沖器為空,可以初始化一次發(fā)送,否則要等待。開始傳輸數(shù)據(jù)時,數(shù)據(jù)首先被寫入FIFO中,當(dāng)判斷到FIFO的輸出信號EMPTY為高時,將處于默認高電平的LxCLKOUT信號拉低,在經(jīng)過6個時鐘周期的低電平后(在此期間檢測LxCLKIN是否一直為高電平),LxCLKOUT拉高形成第一個LINK時鐘上升沿,這個時候應(yīng)該在數(shù)據(jù)線上產(chǎn)生FIFO內(nèi)的第一個輸出數(shù)據(jù)。LxCLKOUT下一周期拉低,第2個數(shù)據(jù)輸出,這樣經(jīng)過16個時鐘周期以后表示一次4字傳輸完畢。然后檢測FIFO中剩余的數(shù)據(jù)FIFO_RDATA_COUNT,若大于4則繼續(xù)上面的傳輸操作,否則,說明FIFO中只剩最后一個4字,這次傳輸LxCLKOUT的最后一個時鐘上升沿產(chǎn)生以后,不再變低,一直保持高電平。然后,把本模塊中的所有臨時寄存器和FIFO復(fù)位。在產(chǎn)生完足夠長度脈沖長度的清零信號后狀態(tài)機重新進入等待狀態(tài)。
3.2 USB接口模塊
USB接口模塊采用FPGA控制USB協(xié)議解析芯片來實現(xiàn)。其實現(xiàn)框圖如圖5所示。
本方案中,USB2.0協(xié)議解析芯片選用CYPRESS公司的CY7C68013A,它將一個USB外設(shè)所需的所有功能集成在一塊芯片上。芯片提供了3種傳輸數(shù)據(jù)的方式,文中選擇從FIFO(SlaveFIFO)模式。在SlaveFIFO模式下,8051微控制器不在數(shù)據(jù)的傳輸通路上,只負責(zé)設(shè)備的初始化和相應(yīng)主機的控制傳輸請求,高速大批量的數(shù)據(jù)傳輸通過外部的主控者通過SlaveFIFO接口直接將數(shù)據(jù)填充到FX2LP的端點中(或者從里面讀出),然后由硬件控制將數(shù)據(jù)傳輸給主機。
Slave FIFO的讀寫方式有兩種:同步讀寫以IFCLK為時鐘,IFCLK可以外部輸入,也可以使用內(nèi)部的30 MHz或者48 MHz時鐘;異步讀寫時IFCLK信號無效,只需要提供讀寫信號即可進行數(shù)據(jù)讀寫。本文選擇同步讀寫。
FPGA采用Xilinx公司的XC3S1000。FPGA在其內(nèi)部建立2個雙口RAM,來緩存收發(fā)數(shù)據(jù);并與協(xié)議解析芯片的各控制信號相連,實現(xiàn)對其的讀寫控制。文中僅使用這個芯片的接收邏輯實現(xiàn)加載文件的USB總線傳輸,發(fā)送邏輯只用來做輔助調(diào)試和狀態(tài)監(jiān)測。
3.3 LINK口發(fā)送模塊與USB接口模塊之間的接口
USB接口除用于加載TS101外,還可用于TS101正常工作時與PC機的數(shù)據(jù)傳輸,故對于不同意義的下行信息,需要根據(jù)其功能做不同處理。
上位機向FX2LP發(fā)送數(shù)據(jù)時,是通過將需要發(fā)送的數(shù)據(jù)打包(每包的大小由固件程序決定),每隔固定一段時間向下發(fā)送一包實現(xiàn)的。在這里,每包數(shù)據(jù)包含512個字節(jié),其中前8個字節(jié)用來當(dāng)幀頭,后504個為需要下傳的數(shù)據(jù)??赏ㄟ^幀頭的不同來區(qū)分下行信息的不同意義。其具體含義如表1所示。
FPGA輪詢每包數(shù)據(jù)的幀頭,如果是TS101與PC機交互數(shù)據(jù),則送到雙口RAM中;如果是TS101加載數(shù)據(jù),則送到LINK口發(fā)送模塊中;如果是/BMS拉高(低)指令,則通過相應(yīng)的管腳拉高(低)/BMS;如果是復(fù)位TS101指令,則通知復(fù)位邏輯對TS101進行復(fù)位,同時復(fù)位數(shù)據(jù)緩沖FIF O。
在實現(xiàn)基于USB總線的TS101的LINK加載時,上位機將DSP加載文件(.ldr文件)打包后,通過USB線纜向FX2LP發(fā)送。.ldr文件的大小不一定為504字節(jié)的整倍數(shù),因此最后一包數(shù)最后可能有很多0。必須把這些0去掉,否則可能在加載TS101時導(dǎo)致其死機。為解決該問題,在幀頭定義中,用幀頭2來區(qū)分是否為最后一包數(shù),如果不是最后一包數(shù),上位機打包時,幀頭2賦為01F8(即504),如果是最后一包數(shù),則把將有效數(shù)據(jù)長度賦給幀頭2。FPGA不斷將TS101加載數(shù)據(jù)送到LINK口發(fā)送模塊中,當(dāng)發(fā)現(xiàn)是最后一包數(shù)據(jù)時,讀取有效數(shù)據(jù)的長度,并啟動一個計數(shù)器,當(dāng)計到該長度時,讓FIFO讀使能失效,則只有l(wèi)dr文件的有效數(shù)據(jù)被加載到TS101中。
4 TS101程序在線重加載和固化的實現(xiàn)
首先通過上位機發(fā)送/BMS拉高指令,讓FPGA將TS101的/BMS管腳拉高,然后發(fā)送復(fù)位TS101指令,復(fù)位TS101和FIFO;之后,發(fā)送/BMS拉低指令,讓FPGA將TS101的/BMS管腳拉低,最后,將ldr文件打包為TS101加載數(shù)據(jù)包并向下發(fā)送。發(fā)送完畢后,TS101即可運行該程序。
若要實現(xiàn)TS101程序的固化,則可將要燒寫的程序生成為ASCII格式的ldr文件,轉(zhuǎn)化為.dat格式,通過include指令編譯到EPROM(FLASH)的燒寫程序中,生成為Link加載ldr文件,通過USB總線進行加載。燒寫完成后,可通過閃燈或通過USB總線上傳狀態(tài)信息來指示燒寫結(jié)果。
5 結(jié)束語
文中提出的基于USB的TS101鏈路口加載方法成功應(yīng)用于某雷達信號處理平臺的程序加載,其功能驗證是通過使用本方法加載各種DSP應(yīng)用程序并進行功能測試來完成的。使用該方案能穩(wěn)定可靠的實現(xiàn)TS101程序的重加載,并且能對與之相連的FLASH芯片AT29LV040A進行成功燒寫。
評論