1 引言
通過(guò)DSP 處理的數(shù)據(jù)往往要傳輸給PC 機(jī)進(jìn)行存儲(chǔ)和再處理,那么就必須解決DSP 與 PC 機(jī)之間的高速通信問(wèn)題。本設(shè)計(jì)方案以德州儀器(TI)的C5000 系列DSP 芯片TMS320VC5416為微處理器,利用Cypress公司提供的USB2.0接口芯片CY7C68001 實(shí)現(xiàn)了USB2.0 從機(jī)接口設(shè)計(jì),從而使PC機(jī)與DSP 通過(guò)USB2.0 接口實(shí)現(xiàn)高速雙向地傳輸數(shù)據(jù)。
2 TMS320VC5416 與CY7C68001 EZUSBSX2硬件接口設(shè)計(jì)
系統(tǒng)方案采用PC機(jī)作為上位機(jī),負(fù)責(zé)USB總線上檢測(cè)到設(shè)備接入并進(jìn)行枚舉、識(shí)別的過(guò)程,并且可以通過(guò)在PC機(jī)上運(yùn)行應(yīng)用程序來(lái)控制數(shù)據(jù)的傳輸。USB芯片作為USB設(shè)備端,連接DSP與上位機(jī)的數(shù)據(jù)交換。DSP用于實(shí)現(xiàn)USB協(xié)議,通過(guò)DSP編程實(shí)現(xiàn)DSP數(shù)據(jù)通過(guò)USB接口與PC機(jī)通信,且USB芯片的描述符寫(xiě)入及各種命令狀態(tài)的處理均通過(guò)DSP編程實(shí)現(xiàn)。
TMS320VC5416 是TI 的一款16bit 定點(diǎn)高性能DSP,由于VC5416的功耗低、性能高,其分開(kāi)的指令和數(shù)據(jù)空間使該芯片具有高度的并行操作能力,在單周期內(nèi)允許指令和數(shù)據(jù)同時(shí)存取,再加上高度優(yōu)化的指令集,使得該芯片具有很高的運(yùn)算速度,同時(shí)該芯片本身具有豐富的片內(nèi)存儲(chǔ)器資源以及多種片上外設(shè),因此在工程界得到了廣泛的應(yīng)用。
Cypress 公司的CY7C68001 EZ-USB SX2 是一款高性能、使用方便的USB2.0 接口芯片,滿足USB2.0 協(xié)議,可工作在高速(480Mbps)或全速(12Mbps)模式下,提供一個(gè)控制端點(diǎn)用于處理USB設(shè)備的請(qǐng)求以及四個(gè)可配置端點(diǎn)用于傳輸控制和數(shù)據(jù)信號(hào),這四個(gè)端點(diǎn)共享一個(gè)4KB的FIFO空間,具備標(biāo)準(zhǔn)的8位或16位外部主機(jī)接口,可無(wú)縫連接多種標(biāo)準(zhǔn)微處理器,比方說(shuō)DSP、ASIC和FPGA等,并可根據(jù)需求設(shè)置為同步或異步接口,片內(nèi)集成鎖相環(huán)(PLL),該芯片廣泛應(yīng)用于DSL調(diào)制解調(diào)器、MP3、讀卡器、數(shù)碼照機(jī)、掃描儀、打印機(jī)等設(shè)備。
系統(tǒng)的硬件接口設(shè)計(jì)如圖1、圖2所示,兩者通過(guò)數(shù)據(jù)、地址總線以及讀、寫(xiě)信號(hào)線等進(jìn)行通信,CY7C68001的片選信號(hào)連接至TMS320VC5416 的I/O空間片選信號(hào)上,CY7C68001 的FIFO擴(kuò)展在VC5416 的I/O 空間上。

?

?
電源部分采用一片1117 將5V 轉(zhuǎn)為3.3V供給CY7C68001EZ-USB SX2,模擬地與數(shù)字地之間采用磁珠連接,復(fù)位部分采用RC電路設(shè)計(jì),且芯片資料上介紹有典型值100KΩ和0.1μF。
3 接口操作原理
CY7C68001 有兩個(gè)外部接口:
(1) 命令接口:用來(lái)訪問(wèn)CY7C68001 寄存器、Endpoint 0緩沖器,以及描述表。
(2) FIFO數(shù)據(jù)接口:用來(lái)訪問(wèn)4個(gè)1K字節(jié)的FIFO中的數(shù)據(jù)。
這兩個(gè)外部接口均可以通過(guò)同步或異步的方式進(jìn)行訪問(wèn)。
本設(shè)計(jì)采用異步的方式進(jìn)行訪問(wèn)。根據(jù)圖3 的地址分配,利用TMS320VC5416 的三根高位地址線(A11、A12、A13)連接CY7C68001 的FIFOAD0/1/2,用以選擇FIFO2、FIFO4、FIFO6、FIFO8以及命令接口,其地址表如圖3所示。CY7C68001的地址線FIFOADR[2:0]為100B 時(shí),選中CY7C68001 的命令口(Command)。通過(guò)CY7C68001的命令口,可以訪問(wèn)37個(gè)寄存器、Endpoint 0緩沖器(64個(gè)字節(jié)FIFO)和描述表(500個(gè)字節(jié)FIFO)等,對(duì)這些寄存器進(jìn)行讀寫(xiě)方式采用二次尋址方式,即首先通過(guò)命令口將要尋址的寄存器的子地址和操作類型(讀或?qū)?寫(xiě)入,然后再通過(guò)命令口將數(shù)據(jù)讀出或?qū)懭胂鄳?yīng)的寄存器。

?
寫(xiě)入命令口的內(nèi)容稱為命令字,命令字包含要尋址的寄存器的子地址,或要寫(xiě)入寄存器的數(shù)據(jù)的高4位或低4位。讀命令口必須要跟在給命令口寫(xiě)讀命令字之后,讀出的為相應(yīng)寄存器的8位數(shù)據(jù)。所以,寄存器的寫(xiě)操作由3 個(gè)步驟組成:

?
4 USB 接口的軟件設(shè)計(jì)
USB接口的軟件設(shè)計(jì)由兩部分組成:一是在PC機(jī)Windows中運(yùn)行USB 2.0 Utility 工具,是一個(gè)Windows 圖形用戶界面軟件,提供CY7C68001 與Windows 操作系統(tǒng)的接口程序,使得CY7C68001的開(kāi)發(fā)變得簡(jiǎn)單。二是在在DSP中運(yùn)行嵌入式應(yīng)用程序代碼,提供硬件的驅(qū)動(dòng),用來(lái)管理CY7C68001進(jìn)行不同方式的數(shù)據(jù)處理,從而實(shí)現(xiàn)USB2.0 傳輸協(xié)議。
4.1 USB 接口的軟件設(shè)計(jì)流程
USB接口的軟件設(shè)計(jì),DSP端代碼大致包括DSP芯片初始化(vc5416_init 函數(shù))、USB芯片初始化(sx2_init 函數(shù))、USB芯片配置程序( s x 2 _ s e t u p 函數(shù)) 以及USB 芯片數(shù)據(jù)讀寫(xiě)程序(sx2_processdata 函數(shù)),程序流程如圖4 所示。
DSP芯片初始化(vc5416_init函數(shù))主要負(fù)責(zé)設(shè)置VC5416的工作頻率,配置SWCR以及SWWSR寄存器,另外本應(yīng)用系統(tǒng)采用一個(gè)GPIO引腳作為68001的復(fù)位信號(hào),所以還需要對(duì)其進(jìn)行相關(guān)設(shè)置。

?
USB芯片初始化(sx2_init函數(shù))主要負(fù)責(zé)清除Buffer緩沖區(qū)以及使能VC5416 的外部中斷INT1,待初始化結(jié)束后發(fā)出READY中斷,此時(shí)DSP將描述符寫(xiě)入68001,進(jìn)行枚舉過(guò)程,待枚舉通過(guò)后發(fā)出ENUMOK中斷,枚舉方式可以采用外部EEPROM通過(guò)I2C總線上電后從外部導(dǎo)入描述符,也可采用通過(guò)運(yùn)行DSP程序從DSP導(dǎo)入到68001,本應(yīng)用系統(tǒng)采用第二種枚舉方式。
USB芯片配置程序(sx2_setup函數(shù))是在命令通道(0節(jié)點(diǎn))收到無(wú)法自動(dòng)處理的上位機(jī)請(qǐng)求,68001向VC5416發(fā)出SETUP中斷后執(zhí)行的程序,此時(shí)VC5416 通過(guò)對(duì)SETUP寄存器連續(xù)執(zhí)行八次讀操作流程即可得到8字節(jié)請(qǐng)求,系統(tǒng)可以響應(yīng)該請(qǐng)求或STALL該請(qǐng)求。
USB 芯片數(shù)據(jù)讀寫(xiě)程序(sx2_processdata 函數(shù))即PC 機(jī)與USB從設(shè)備端遵照USB傳輸協(xié)議進(jìn)行數(shù)據(jù)通信。
CY7C68001的地址FIFOAD[2:0]為100時(shí),選中CY7C68001的命令接口。對(duì)于命令接口的讀寫(xiě)要分兩步進(jìn)行,即在READY有效時(shí),先通過(guò)命令接口寫(xiě)入要尋址寄存器的子地址和操作類型(讀或?qū)?,之后,在READY再次有效時(shí)分兩次讀寫(xiě)命令接口,即可讀寫(xiě)一個(gè)字節(jié)的數(shù)據(jù)。
4.2 中斷服務(wù)程序設(shè)計(jì)要點(diǎn)
DSP使用一個(gè)外部中斷引腳(INT1)與CY7C68001的INT腳相連,USB總線上產(chǎn)生一系列的活動(dòng),均會(huì)觸發(fā)相應(yīng)的中斷,一旦中斷產(chǎn)生,DSP 會(huì)從CY7C68001 的Command 口中讀取相應(yīng)的值,來(lái)判斷產(chǎn)生的是何種中斷。
CY7C68001 EZ-USB SX2 包括六個(gè)中斷源:SETUP(收到來(lái)自于USB 上位機(jī)(PC)發(fā)送過(guò)來(lái)的Set-up 包時(shí)產(chǎn)生的中斷)、EP0BUF(端點(diǎn)0 緩存可用時(shí)產(chǎn)生的中斷)、FLAGS(OUT 端點(diǎn)FIFO的狀態(tài)從空變?yōu)榉强諘r(shí)產(chǎn)生的中斷)、ENUMOK(SX2枚舉完成后產(chǎn)生的中斷)、BUSACTIVITY(SX2檢測(cè)到總線活動(dòng)時(shí)產(chǎn)生的中斷)以及READY(SX2上電并且復(fù)位完畢后產(chǎn)生的中斷),每一個(gè)中斷源都可以通過(guò)置位或清除INTENABLE寄存器中相應(yīng)位來(lái)使能或禁止。
CY7C68001芯片采用中斷緩沖機(jī)制,每次只會(huì)有一個(gè)中斷源,其他中斷源只有在上一個(gè)中斷被讀走后才會(huì)發(fā)出新的中斷請(qǐng)求。
因此,當(dāng)一個(gè)中斷產(chǎn)生時(shí),INT引腳為低電平狀態(tài),同時(shí)中斷狀態(tài)位會(huì)置入命令接口,在進(jìn)入中斷程序后應(yīng)先對(duì)中斷源進(jìn)行判斷,首先判斷是否是讀寄存器所產(chǎn)生的中斷,如果是則將數(shù)據(jù)準(zhǔn)備好標(biāo)志位置1然后返回,否則外部PC通過(guò)選通SLRD/SLOE信號(hào)從命令接口中讀取中斷狀態(tài)位來(lái)判斷產(chǎn)生的是何種中斷,然后根據(jù)中斷源進(jìn)行相應(yīng)操作,DSP讀取中斷狀態(tài)位后自動(dòng)清除中斷標(biāo)志位。
5 結(jié)束語(yǔ)
通過(guò)硬件平臺(tái)的搭建和軟件程序的實(shí)現(xiàn),驗(yàn)證了該接口電路可以滿足高速信號(hào)處理的數(shù)據(jù)傳輸要求,并具有速度快和可靠性高等優(yōu)點(diǎn)。
二、FIFO實(shí)現(xiàn)高速模數(shù)轉(zhuǎn)換器與DSP的接口
在數(shù)字信號(hào)處理系統(tǒng)中,大多數(shù)高速模數(shù)轉(zhuǎn)換器都不能直接與DSP相連接。FIFO恰好架起了DSP與ADC之間的一座橋梁,因?yàn)樗芫彺娲罅康臄?shù)據(jù)塊。同時(shí)由于DSP訪問(wèn)外部存儲(chǔ)器器件必須通過(guò)外部存儲(chǔ)器接口External Memory Interface, EMIF, 而C6000系列DSP的EMIF具有很強(qiáng)的接口能力。它不僅具有很高的數(shù)據(jù)吞吐率(最高1200MB/s),而且可以與目前幾乎所有類型的存儲(chǔ)器直接接口。本文介紹了用FIFO 在DSPs和模擬前端(AFEs)之間進(jìn)行數(shù)據(jù)緩存的實(shí)現(xiàn)方法。
?
1 AD9042高速模數(shù)轉(zhuǎn)換器
AD9042是一款低功率12bit的41MSPS模數(shù)轉(zhuǎn)換器。它的快速、高分辨率特點(diǎn)使其非常適合于視頻、多媒體、圖像處理、高速數(shù)據(jù)采集和通信等很多應(yīng)用領(lǐng)域。圖1為AD9042的采樣時(shí)序圖。由該圖可以看出:AD9042不能與TMS320C6205直接相連。
因?yàn)锳DC總是在進(jìn)行數(shù)據(jù)輸出,因此輸出無(wú)高阻狀態(tài),而如果模數(shù)轉(zhuǎn)換器直接與DSP總線相連接,DSP就不能使用其它外圍設(shè)備了,而且DSP必須在每個(gè)轉(zhuǎn)換時(shí)鐘周期讀一次采樣數(shù)據(jù),這樣,即使使用DMA通道傳輸也是不可能實(shí)現(xiàn)的,因?yàn)槠渌鈬O(shè)備也要使用總線。
雖然采樣鎖存可以解決數(shù)據(jù)總是輸出的問(wèn)題,但是,如果模數(shù)轉(zhuǎn)換器運(yùn)行在41MSPS,那么,DSP每24ns就要讀一次新采樣。這將占去DSP中的大部分I/O帶寬,此時(shí)如果DSP處于busy態(tài),那么在24ns內(nèi)就不能讀取下一次采樣,這樣將使數(shù)據(jù)丟失。
一個(gè)比較好的解決辦法是使用FIFO作為輸入緩沖,由ADC把采樣轉(zhuǎn)換的值同步寫(xiě)進(jìn)FIFO。每寫(xiě)入一塊數(shù)據(jù)便向DSP發(fā)出一信號(hào),以提醒DSP從FIFO中讀取數(shù)據(jù)塊。這樣比單次讀的效率要快很多。

?
2 CY7C4265-10AC同步FIFO
CY7C4265是高速低功耗CMOS時(shí)鐘FIFO存儲(chǔ)器。它是一款同步FIFO,意思是它的讀寫(xiě)端口使用同步接口,每一個(gè)端口的時(shí)鐘都是互相獨(dú)立的,這些時(shí)鐘可以同步,也可以異步。這使得FIFO的讀寫(xiě)口能以不同的速度運(yùn)行。傳統(tǒng)的FIFO在進(jìn)行數(shù)據(jù)傳輸時(shí)通常要求額外的控制邏輯,而新一代CY7C4265則可實(shí)現(xiàn)FIFO與DSP之間的無(wú)縫連接。3 FIFO與EMIF的連接
C6000系列DSP的EMIF具有很強(qiáng)的接口能力,它可以連接不同類型的存儲(chǔ)器,如異步SRAM?SDRAM、SBSRAM等。
3 EMIF與FIFO的接口
CY7C4265 FIFOs提供有與DSP的無(wú)縫連接,這樣的無(wú)縫連接要求FIFO作為一個(gè)輸出緩沖器。而當(dāng)FIFO作為輸入緩沖器時(shí),F(xiàn)IFO是EMIF的唯一異步設(shè)備。本設(shè)計(jì)恰好讓FIFO作為輸入緩沖器,且就此一個(gè)異步設(shè)備,因而避免了復(fù)雜的接口邏輯。

?
圖2是EMIF與FIFO接口的具體硬件實(shí)現(xiàn),F(xiàn)I-FO的半滿標(biāo)志HF作為DSP的輸入信號(hào)。HF用于告訴DSP此時(shí)FIFO中的有效數(shù)據(jù)是可以讀取的(而且容量是FIFO總大小的一半),以便DSP產(chǎn)生一個(gè)中斷來(lái)讀取FIFO中的數(shù)據(jù)塊。
3.1 DSP讀FIFO時(shí)序
在這個(gè)高速微弱信號(hào)數(shù)據(jù)采集卡的設(shè)計(jì)中,C6205的時(shí)鐘頻率為200MHz,且沒(méi)有使用其它外部控制邏輯。圖2中,EMIF異步接口提供的控制信號(hào)可以通過(guò)不同的組合(并非都需要)實(shí)現(xiàn)與不同類型器件的無(wú)縫接口。EMIF的CExCTL寄存器負(fù)責(zé)設(shè)置異步讀/寫(xiě)操作的接口時(shí)序,以滿足對(duì)不同速度異步器件的存取要求。
C6000異步接口時(shí)序具有很強(qiáng)的可編程性,每個(gè)讀/寫(xiě)周期由三個(gè)階段構(gòu)成:建立時(shí)間(Setup)、觸發(fā)時(shí)間(Strobe)、保持時(shí)間(Hold)。其中建立時(shí)間是從存儲(chǔ)器訪問(wèn)周期開(kāi)始(片選?地址有效)到讀/寫(xiě)選通有效之前的時(shí)間;觸發(fā)時(shí)間是讀/寫(xiě)選通信號(hào)從有效到無(wú)效之間的時(shí)間;保持時(shí)間則是從讀/寫(xiě)無(wú)效到訪問(wèn)周期結(jié)束之間時(shí)間。
DSP的ARE信號(hào)作為FIFO的讀時(shí)鐘,F(xiàn)IFO在ARE的上升沿在總線上輸出數(shù)據(jù),DSP和FIFO的獨(dú)立時(shí)序參數(shù)值。
根據(jù)DSP的異步讀時(shí)序,為了完成C6205的建立時(shí)間,第一個(gè)數(shù)據(jù)的讀取必須滿足下式:
Setup+Strobe ≥td?CK-AOEV?max+tOEmax+tSU?EDV-CK?min
根據(jù)上式,在最差情況下,建立和觸發(fā)時(shí)間必須大于15ns(4ns+7ns+4ns)。當(dāng)DSP的時(shí)鐘頻率為200MHz時(shí),一個(gè)時(shí)鐘周期應(yīng)該是5ns。此時(shí)如果Setup和Strobe的值都取1,則Setup+strobe為10ns,故不能滿足時(shí)序要求,因此Setup和Strobe這兩個(gè)可編程參數(shù)若一個(gè)取1,另外一個(gè)必須大于等于2。而實(shí)際上,Setup和Strobe可以都取1,其原因是C6205不論是連續(xù)存取還是單次存取操作,在存取第一個(gè)數(shù)時(shí),EMIF會(huì)自動(dòng)將最小建立時(shí)間設(shè)置為2。
而對(duì)于以后數(shù)據(jù)的讀取,OE總是有效?,F(xiàn)在主要考慮的是FIFO的訪問(wèn)時(shí)間應(yīng)滿足下式:
Hold+Setup+Strobe ≥tAmax+tSU?EDV-CK?min
也就是說(shuō),一個(gè)完整的數(shù)據(jù)訪問(wèn)時(shí)間必須大于12ns(8ns+4ns),即Hold+Setup+Strobe ≥3;要完成C6205的保持時(shí)間,必須滿足下面兩個(gè)公式:
td?CK-AREV?min+tAmin ≥ th?CK-EDV?min
Hold ≥th?CK-EDV?min-td?CK-AREV?min-tOHZmin
當(dāng)上邊的式子滿足條件時(shí),-0.2+2>0.8。為了得到最小的Hold時(shí)間,此時(shí)Hold可以為0ns,也就是說(shuō),Hold可以被編程為0。
最后要滿足的條件是時(shí)鐘的高低時(shí)間。因?yàn)镕IFO的時(shí)鐘信號(hào)直接由ARE產(chǎn)生,因此ARE信號(hào)保持低電平的時(shí)間必須大于FIFO的時(shí)鐘周期。即:
Strobe ≥tCLKL min
Hold+Setup ≥tCLKH min
Setup+Strobe+Hold ≥tCLK min

?
由以上七個(gè)式子可知,在200MHz的鐘頻率下,CExCTL寄存器中Setup/Strobe/Hold的值可以作如下設(shè)置:
Setup=1,Strobe=1,Hold=1;
此時(shí),DSP讀取FIFO中數(shù)據(jù)的速度為66.7MHz。
4 結(jié)論
FIFO在ADC高速模數(shù)轉(zhuǎn)換器與DSP的通訊過(guò)程中起到了很好的數(shù)據(jù)緩沖作用,其標(biāo)志位可被用來(lái)控制FIFO中數(shù)據(jù)的讀取。如果選用內(nèi)部時(shí)鐘頻率為133MHz的SN74V2×5-7系列FIFO,DSP讀取數(shù)據(jù)的速度可以達(dá)到100MHz。
三、PCI總線接口與DSP的HPI接口
1 HPI接口功能及特點(diǎn)
主機(jī)接口HPI(Host Pott Interface)是C54x DSP系列定點(diǎn)芯片內(nèi)部具有的一種并行接口部件,主要用于與其他總線或CPU之間進(jìn)行通信,其接口框圖如圖l所示。主機(jī)是HPI口的主控者,HPI口作為一個(gè)外設(shè)與主機(jī)連接,使主機(jī)的訪問(wèn)操作很方便。主機(jī)通過(guò)以下單元與HPI口通信:專用地址和數(shù)據(jù)寄存器、HPI控制寄存器以及外部數(shù)據(jù)和接口控制信號(hào)。HPI有兩種工作方式:共用尋址方式(SAM)和僅主機(jī)尋址方式(HOM)。在SAM方式下,豐機(jī)和C54x都能尋址HPI存儲(chǔ)器;在HOM方式下,僅能讓主機(jī)尋址HPI存儲(chǔ)器,C54x則處于復(fù)位狀態(tài),或者處在所有內(nèi)部和外部時(shí)鐘都停止工作的IDLE2空閑狀態(tài)(最低功耗狀態(tài))。

?
VC5402是TI公司推出的一款性價(jià)比極高的16位定點(diǎn)處理器。它是C54x系列中應(yīng)用比較廣泛的一種芯片,有著豐富的接口資源,是一種集數(shù)據(jù)處理和通信功能于一體的高速微處理器。VC5402 HPI口是一個(gè)增強(qiáng)的8位主機(jī)接口,它通過(guò)HPI控制寄存器HPIC、地址寄存器HPIA和數(shù)據(jù)鎖存器HPID來(lái)實(shí)現(xiàn)與主機(jī)之間的通信。主機(jī)通過(guò)外部引腳HCNTLO和HCNTL1選中不同的寄存器,則當(dāng)前發(fā)送8位數(shù)據(jù)就到該寄存器??刂萍拇嫫鱄PIC既可以被主機(jī)直接訪問(wèn),又可以被DSP片上CPU訪問(wèn)。在使用上,由于主機(jī)接口總是傳輸8位字節(jié),而HPIC是一個(gè)16位寄存器,所以主機(jī)向HPIC寫(xiě)數(shù)據(jù)時(shí),需要發(fā)送2個(gè)相同的8位數(shù)據(jù)。地址寄存器HPIA,只能被主機(jī)直接訪問(wèn)。主機(jī)將HPIA寄存器視為一個(gè)地址指針,借助于HPIA主機(jī)可以訪問(wèn)VC5402全部的片上存儲(chǔ)器。另外HPIA具有自動(dòng)增長(zhǎng)的功能,在自動(dòng)增尋址模式下,一次數(shù)據(jù)讀會(huì)使HPIA在數(shù)據(jù)讀操作后增加1,而一個(gè)數(shù)據(jù)寫(xiě)操作會(huì)使HPIA操作前預(yù)先增加l。這樣如果使能了該功能,則只須設(shè)定一次HPIA即可實(shí)現(xiàn)連續(xù)數(shù)據(jù)塊的寫(xiě)入和讀出。數(shù)據(jù)寄存器HPLD,只能被主機(jī)訪問(wèn)。如果當(dāng)前進(jìn)行的是讀操作,則HPID中存放的是要從HPI存儲(chǔ)器中讀出的數(shù)據(jù);如果當(dāng)前進(jìn)行的是寫(xiě)操作,則存放的是將要寫(xiě)到HPI存儲(chǔ)器的數(shù)據(jù)。
2 VC5402的HPI口與PCl2040的接口設(shè)計(jì)
2.1 PCI總線及其實(shí)現(xiàn)方法
PCI局部總線是32或64位數(shù)據(jù)總線,32位PCI總線在讀寫(xiě)傳送中支持132Mb/s的峰值傳送速率,64位PCI傳送支持264Mb/s峰值傳送速率。對(duì)于64位66MHz的PCI總線,傳送速率可達(dá)528Mb/s。PCI總線協(xié)議規(guī)范復(fù)雜而龐大,因此需要借助總線接口來(lái)實(shí)現(xiàn)。實(shí)現(xiàn)PCI總線協(xié)議一般有兩種方法:一是用FPGA設(shè)計(jì)實(shí)現(xiàn),但PCI協(xié)議比較復(fù)雜,因此難度較大;二是采用PCI總線控制芯片,如AMCC公司的S5933和PLX公司的PCI9052等通用的PCI接口芯片。TI公司專門(mén)推出了針對(duì)PCI總線和DSP接口的芯片PCI2040,它不但實(shí)現(xiàn)了PCI總線控制的功能,而且提供了和DSP芯片的無(wú)縫接口,因而大大降低了系統(tǒng)設(shè)計(jì)的復(fù)雜度,縮短了開(kāi)發(fā)時(shí)間。
2.2 P012040與DSP接口設(shè)計(jì)
PCI2040足TI公司設(shè)計(jì)的專門(mén)用來(lái)實(shí)現(xiàn)C5000/C6000系列DSP和PCI總線進(jìn)行接口的專用芯片,可以通過(guò)8位或16位HPI接口與C54x/C6xDSP實(shí)現(xiàn)無(wú)縫連接。PCI2040通過(guò)HPI接口與VC5402連接。PCI2040的HPI口為8/16位數(shù)據(jù)傳輸接口(8位還是16位,依據(jù)所掛接的DSP的類型)。主機(jī)作為傳輸?shù)闹髟O(shè)備,從機(jī)DSP不能發(fā)起傳輸。主設(shè)備PCI2040可以讀/寫(xiě)DSP內(nèi)存,DSP HPl口可以訪問(wèn)DSP所有的片上資源,PCI2040和VC5402之問(wèn)的通信主要靠DSP的HPIA、HPIC、HPID三個(gè)寄存器完成。VC5402的HPI與PCI2040口的連接如圖2所示。

?
PCI2040的數(shù)據(jù)總線HAD0~HAD7與VC5402 HPI口的數(shù)據(jù)總線HD0~HD7相連,用于主機(jī)和DSP傳輸數(shù)據(jù)。PCI2040芯片的HPI口的HCNTLl和HCNTL0引腳分別與DSP的HCNTLl和HCNTL0引腳相連,以實(shí)現(xiàn)其對(duì)HPI寄存器的訪問(wèn)。具體HPI寄存器的選擇和訪問(wèn)模式的確定由DSP的HCNTLl和HCNTL0引腳的狀態(tài)決定,表1給出了VC5402 HPI寄存器訪問(wèn)控制的情況。PCI2040帶有獨(dú)立的讀/寫(xiě)選通信號(hào)HDS和HR/W,可以將PCI2040的HDS、HR/W引腳與VC5402的HDSl、HR/W引腳相連,實(shí)現(xiàn)主機(jī)對(duì)VC5402 HPI接口的讀/寫(xiě)控制。當(dāng)主機(jī)驅(qū)動(dòng)HR/W為高時(shí),讀HPI;為低時(shí),則寫(xiě)HPI。DSP HPI口的HPIEA、HDS2、HAS引腳通過(guò)10kΩ電阻拉高。

?
需要注意的是,VC5402的HPI接幾是8位的,而DSP內(nèi)部和PCI總線上的數(shù)據(jù)格式都是大于8位的,所以主機(jī)與DSP之間數(shù)據(jù)傳輸必須包含2個(gè)連續(xù)的字節(jié)。專用的HBIL引腳信號(hào)確定傳輸?shù)氖堑谝粋€(gè)字節(jié)還是第二個(gè)字節(jié);HPI控制寄存器HPIC的BOB位決定第一個(gè)或第二個(gè)字節(jié)放置在16位字的高8位。
3 電路設(shè)計(jì)時(shí)應(yīng)注意的問(wèn)題
?、賄C5402電源采用3.3V和1.8V電源供電。其中:I/O采用3.3V;核電壓采用1.8V供電;系統(tǒng)從PCI插槽取5V電壓經(jīng)
電壓轉(zhuǎn)換后,供DSP和其他芯片使用。
②VC5402的有些引腳必須接4.7kΩ的上拉電阻,沒(méi)有用到的中斷引腳也要接相同的上拉電阻。
③電源輸入端跨接一個(gè)10~100μF的電解電容器,為每個(gè)集成屯路芯片配置一個(gè)0.01μF的陶瓷電容器。
結(jié)語(yǔ)
實(shí)踐證明,利用PCI2040芯片實(shí)現(xiàn)C54x/C6x DSP的PCI總線可以大大減少相應(yīng)的外圍器件,增強(qiáng)系統(tǒng)的可靠性,同時(shí)降低系統(tǒng)開(kāi)發(fā)的難度,縮短開(kāi)發(fā)周期。
四、TMS320C32的存儲(chǔ)器接口設(shè)計(jì)
1 TMS320C32的外部存儲(chǔ)器接口的特點(diǎn)
TMS320C32是一個(gè)32位微處理器,它可以通過(guò)24位地址總線、32位數(shù)據(jù)總線和選通信號(hào)對(duì)外部存儲(chǔ)器進(jìn)行訪問(wèn)。其外部存儲(chǔ)器接口結(jié)構(gòu)如下圖l所示。
?
圖1,TMS320C32的外部存儲(chǔ)器接口圖
在圖1中,引腳(引腳,又叫管腳,英文叫Pin。就是從集成電路(芯片)內(nèi)部電路引出與外圍電路的接線,所有的引腳就構(gòu)成了這塊芯片的接口)PRGW是用來(lái)配置外部程序存儲(chǔ)器的寬度的。當(dāng)PRGW引腳為低電平時(shí)程序存儲(chǔ)器寬度為16位;當(dāng)PRGW引腳為高電平時(shí)程序存儲(chǔ)器寬度為32位。STRBO和STRBl各為一組訪問(wèn)外部存儲(chǔ)器的選通信號(hào),各有4個(gè)信號(hào)引腳(STRBx_B3/A_1、STRBx_B2/A_2、STRBx_Bl和STRBx_B0)。從圖l中我們可以看出,選通信號(hào)STRB0和STRBl能從8/16/32位存儲(chǔ)器中訪問(wèn)8/16/32位數(shù)據(jù),或從16/32位存儲(chǔ)器中執(zhí)行32位程序;IOSTRB是外設(shè)I/O的選通信號(hào)引腳,它只能從32位寬度的存儲(chǔ)器中訪問(wèn)32位的數(shù)據(jù)和程序。
可以通過(guò)對(duì)STRBx和IOSTRB的設(shè)置,從8/16/32位的存儲(chǔ)器中訪問(wèn)8/16/32位數(shù)據(jù)或程序。也就是說(shuō),可以從任何一個(gè)外部存儲(chǔ)器中訪問(wèn)任何一種類型的數(shù)據(jù)。這就說(shuō)明可以通過(guò)設(shè)置IOSTRB、STRB0和STRB1的選通信號(hào)來(lái)尋址整個(gè)外部存儲(chǔ)器空間。例如,一個(gè)32位外部存儲(chǔ)器可以被設(shè)定為只存放一個(gè)32位的雙字,但是也可以被分為具有2個(gè)連續(xù)地址的16位字或者4個(gè)連續(xù)地址的8位字節(jié)。反之,一個(gè)32位雙字可以放在一個(gè)32位外部存儲(chǔ)器中,也可以放在2個(gè)16位或4個(gè)8位寬度的外部存儲(chǔ)器中。
TMS320C32內(nèi)部總共提供了64 MB的存儲(chǔ)器映射空間。其中,STRB0所對(duì)應(yīng)的存儲(chǔ)映像區(qū)間是不連續(xù)的兩段區(qū)問(wèn),一段是03FH~7FFFFFH(共31.999 MB),另一段是880000H~8FFFFFH(共2 MB);STRBl所對(duì)應(yīng)的存儲(chǔ)映像區(qū)間是900000H~FFFFFFH(共28 MB);IOSTRB所對(duì)應(yīng)的存儲(chǔ)映像區(qū)間是810000H~82FFFFH(共512KB)。當(dāng)外部總線訪問(wèn)這些空間時(shí),相應(yīng)的選通信號(hào)就使能。
負(fù)責(zé)控制信號(hào)的輸入和輸出叫做使能,是一個(gè)動(dòng)詞,英文‘Enable’。使能通俗點(diǎn)說(shuō)就是一個(gè)“允許”信號(hào),進(jìn)給使能也就是允許進(jìn)給的信號(hào),也就是說(shuō)當(dāng)進(jìn)給使能信號(hào)有效的時(shí)候電機(jī)才能轉(zhuǎn)動(dòng)。一般的數(shù)控系統(tǒng)會(huì)將電機(jī)的進(jìn)給使能信號(hào)跟急停開(kāi)關(guān)和行程限位開(kāi)關(guān)串聯(lián)起來(lái),當(dāng)按下急停開(kāi)關(guān)或者電機(jī)運(yùn)轉(zhuǎn)超出行程后,進(jìn)給使能信號(hào)被斷開(kāi),電機(jī)不能繼續(xù)轉(zhuǎn)動(dòng),從而保護(hù)機(jī)床在安全的行程內(nèi)運(yùn)行。
2 TMS320C32的3種存儲(chǔ)器設(shè)計(jì)方案
2.1 8位存儲(chǔ)器寬度
設(shè)計(jì)為8位的存儲(chǔ)器,其硬件接線方案如圖2所示。STRBx_B3/Al_1和STRBx_B2/A_2引腳作為地址引腳,STRBx_B0引腳作為片選引腳,而STRBx_B1則不用。

?
圖2,8位存儲(chǔ)器的硬件接線圖

?
圖3,16位存儲(chǔ)器的硬件接線圖
設(shè)計(jì)為16位的存儲(chǔ)器,其硬件接線方案如圖3所示。STRBx_B3/A_1引腳作為地址引腳,STRBx_B0和STRBx_B1引腳作為片選引腳,而STRBx_B2/A_2則不用。
2.3 32位存儲(chǔ)器寬度
設(shè)計(jì)為32位的存儲(chǔ)器,其硬件接線方案如下圖4所示。STRBx所有的引腳都設(shè)置成片選引腳。

?
圖4,32位存儲(chǔ)器的硬件接線圖
3 存儲(chǔ)器映射外部總線控制寄存器
綜上所述,TMS320C32可以從8/16/32位存儲(chǔ)器中訪問(wèn)8/16/32位數(shù)據(jù),或者從16/32位存儲(chǔ)器中執(zhí)行32位的程序。但是如果內(nèi)外部數(shù)據(jù)的位數(shù)不一致時(shí)該如何處理呢?C32的外部總線控制寄存器可以根據(jù)相應(yīng)控制位的值,自動(dòng)對(duì)存儲(chǔ)器接口的寬度進(jìn)行相應(yīng)的調(diào)整。下面則對(duì)總線控制寄存器作出一個(gè)詳細(xì)的介紹。
STRBo、STRBl以及IOSTRB控制寄存器在存儲(chǔ)器映射空間的物理地址分別是808064H、808068H和808060H,并且都是32位的,各位的定義如圖5、圖6和圖7所示。

?
圖5,STRBo控制寄存器

?
圖6,STRBl控制寄存器

?
圖7,IOSTRB控制寄存器
從圖5和圖6中我們可以看到,STRBx控制寄存器的第18、19位是用來(lái)控制存儲(chǔ)器的寬度的,而第16、17位是用來(lái)控制數(shù)據(jù)寬度的,具體定義如表1所列。
4 存儲(chǔ)器接口實(shí)例
圖8給出了一個(gè)實(shí)際TMS320C32存儲(chǔ)囂接口的電路圖。16位存儲(chǔ)器由2片128 K8位的SRAM構(gòu)成,32位存儲(chǔ)器由4片128 K8位的SRAM構(gòu)成,STRB0的4組選通信號(hào)接16位外部存儲(chǔ)器,STRBl的4組選通信號(hào)接32位外部存儲(chǔ)器。為說(shuō)明數(shù)據(jù)在存儲(chǔ)器及處理器中的存放格式,本文設(shè)計(jì)了兩種存儲(chǔ)器接口電路:一是在16位存儲(chǔ)器中存放32位數(shù)據(jù);二是在32位存儲(chǔ)器中存放32位數(shù)據(jù)。

?
圖8,TMS320C32存儲(chǔ)囂接口的電路圖
在16位存儲(chǔ)器中存放32位數(shù)據(jù)時(shí),STRB0_B3/A1作為地址引腳與外部存儲(chǔ)器的AO相接,STRB0_B0和STRB0_B1作為片選信號(hào),STRBx_B2/A_2不用。由于數(shù)據(jù)寬度大于存儲(chǔ)器寬度,所以在外部存儲(chǔ)器偶地址中存放32位數(shù)據(jù)的低16位,奇地址中存放32位數(shù)據(jù)的高16位,外部存儲(chǔ)器的地址為OH~lFFFFH,對(duì)應(yīng)的在C32存儲(chǔ)映射中的地址為OH~0FFFFH。當(dāng)一條指令向邏輯地址OH中裝入一個(gè)32位數(shù)據(jù)時(shí),存儲(chǔ)器接口必須向外部16位存儲(chǔ)器執(zhí)行兩個(gè)指令周期。這兩個(gè)指令周期訪問(wèn)2個(gè)連續(xù)的外部存儲(chǔ)器地址OH和1H,從而完成對(duì)32位數(shù)據(jù)的操作。
當(dāng)在外部32位存儲(chǔ)器中存放32位數(shù)據(jù)時(shí),STRBl的4個(gè)引腳都設(shè)置為片選引腳。這時(shí)數(shù)據(jù)寬度與外部存儲(chǔ)器寬度一致,由于是STRBl使能,所以128 K32位的外部存儲(chǔ)空間與C32存儲(chǔ)器映射的900000H~91FFFFH相對(duì)應(yīng)。
當(dāng)接口電路設(shè)計(jì)為16位時(shí),其物理地址等于邏輯地址右移l位,即DSP的地址線A00接在SRAM的A1上;當(dāng)接口電路設(shè)計(jì)為32位時(shí),其物理地址等于邏輯地址,即DSP的地址線A00接在SRAM的A0上。
5 小結(jié)
由于C32可以非常靈活地調(diào)整其存儲(chǔ)器接口寬度,使得存儲(chǔ)器接口電路的設(shè)計(jì)更加的靈活,因此非常適用于電機(jī)或電力系統(tǒng)等實(shí)時(shí)系統(tǒng)的數(shù)據(jù)采集與處理。
評(píng)論