崔炳喆
(1.中國空空導(dǎo)彈研究院 河南 洛陽 471009;2.航空制導(dǎo)武器航空科技重點(diǎn)實(shí)驗(yàn)室 河南 洛陽 471009)
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)[1]。
將程序代碼加載到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)TS101的程序在線重加載和固化。
鏈路口(Link Port)是TS101的一種高速互聯(lián)接口,它的通信是通過一個(gè)8位的數(shù)據(jù)總線和3個(gè)控制信號進(jìn)行的,有4組LINK管腳[2]。其中LxCLKIN和LxCLKOUT是時(shí)鐘/應(yīng)答輸入和輸出管腳;LxDAT[7:0]-數(shù)據(jù)輸入輸出總線;LxDIR是LINK的方向指示信號。Link Port的最簡單的連接方式(如圖1所示)用了 LxCLKIN,LxCLKOUT,和 LxDAT。 每個(gè) ADSPTS101 DSP的LxCLKOUT與其它的LxCLKIN相連,兩片TigerSHARC101 DSP芯片之間用LxDAT數(shù)據(jù)總線相連。

圖1 最小的Link Port配置-無緩沖Fig.1 Minimum configuration of Link Port-without buffer
Link Port的最小傳輸單位是8個(gè)時(shí)鐘周期,數(shù)據(jù)總量為4倍字長(16字節(jié),在時(shí)鐘的雙沿觸發(fā))。傳輸被發(fā)送端初始化,只有當(dāng)接收端設(shè)置LxCLKOUT(對于發(fā)送端為LxCLKIN)為高電平,發(fā)送才能被初始化為一次傳輸。LxCLKOUT為高電平意味著接收端為接收模式并且接收緩沖器為空。
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)行一定的格式變化,并在起始位置附加上加載核文件生成的[3]。

圖2 TS101的程序設(shè)計(jì)流程Fig.2 Program design process of TS101
加載程序的外部設(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的鏈路口加載。
采用FPGA實(shí)現(xiàn)基于USB總線的TS101的Link Port加載結(jié)構(gòu)框圖如圖 3所示。

圖3 FPGA實(shí)現(xiàn)基于USB總線的TS101的Link Port加載結(jié)構(gòu)框圖Fig.3 Diagram for Link Port loading of TS101 based on USB
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ā)送功能。基于FPGA的TS101的Link Port發(fā)送模塊結(jié)構(gòu)框圖如圖4所示。

圖4 基于FPGA的TS101的Link Port發(fā)送模塊結(jié)構(gòu)框圖Fig.4 Diagram for sending module of Link Port based on FPGA
圖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ā)送出去[5]。
圖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)。
USB接口模塊采用FPGA控制USB協(xié)議解析芯片來實(shí)現(xiàn)。其實(shí)現(xiàn)框圖如圖 5所示[6]。

圖5 基于FPGA的USB接口設(shè)計(jì)Fig.5 Diagram for USB interface based on FPGA
本方案中,USB2.0協(xié)議解析芯片選用CYPRESS公司的CY7C68013A,它將一個(gè)USB外設(shè)所需的所有功能集成在一塊芯片上[8]。芯片提供了3種傳輸數(shù)據(jù)的方式,文中選擇從FIFO (Slave FIFO)模式[7]。在 Slave FIFO 模式下,8051微控制器不在數(shù)據(jù)的傳輸通路上,只負(fù)責(zé)設(shè)備的初始化和相應(yīng)主機(jī)的控制傳輸請求,高速大批量的數(shù)據(jù)傳輸通過外部的主控者通過Slave FIFO接口直接將數(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)測。
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所示。

表1 幀頭含義Tab.1 Header meaning
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ù)緩沖FIFO。
在實(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ù)的長度,并啟動一個(gè)計(jì)數(shù)器,當(dāng)計(jì)到該長度時(shí),讓FIFO讀使能失效,則只有l(wèi)dr文件的有效數(shù)據(jù)被加載到TS101中。
首先通過上位機(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é)果。
文中提出的基于USB的TS101鏈路口加載方法成功應(yīng)用于某雷達(dá)信號處理平臺的程序加載,其功能驗(yàn)證是通過使用本方法加載各種DSP應(yīng)用程序并進(jìn)行功能測試來完成的。使用該方案能穩(wěn)定可靠的實(shí)現(xiàn)TS101程序的重加載,并且能對與之相連的FLASH芯片AT29LV040A進(jìn)行成功燒寫。
[1]Analog Devices, Inc.,ADSP-TS101 TigerSHARC Processor Programming Reference (Revision 1.1, February 2005)[M].USA:Analog Devices, Inc.,2005.
[2]劉書明,蘇濤,羅軍輝.TigerSHARCDSP應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:電子工業(yè)出版社,2004.
[3]劉書明.ADI DSP應(yīng)用技術(shù)集錦[M].北京:電子工業(yè)出版社,2009.
[4]Lerner B.ADSP-TS101STigerSHARCProcessor Boot Loader Kernels Operation[M].USA:Analog Devices, Inc.,2003.
[5]蘇濤,蔡建隆,何學(xué)輝.DSP接口電路設(shè)計(jì)與編程[M].西安:西安電子科技大學(xué)出版社,2003.
[6]張弘.USB接口設(shè)計(jì)[M].西安:西安電子科技大學(xué)出版社,2002.
[7]Cypress Semiconductor Corporation.CY7C68013A EZ-USB FX2LP USB Microcontroller DataSheet[M].USA:Cypress Semiconductor Corporation,2006.
[8]美國邁舍爾公司.USB系統(tǒng)體系[M].2版.孟文,譯.北京:中國電力出版社,2003.
[9]Cypress Semiconductor Corporation.EZ-USB FX2 Manual Technical Reference [M].USA:Cypress Semiconductor Corporation,2002.
[10]錢峰.EZ-USB FX2單片機(jī)原理、編程及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2004.