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