本發(fā)明屬于實(shí)現(xiàn)多DSP之間通信的領(lǐng)域,特別是涉及一種基于FPGA和HPI的DSP間的通信裝置及通信方法。
背景技術(shù):
數(shù)字信號(hào)處理器DSP自誕生以來,發(fā)展極其迅速,其應(yīng)用已經(jīng)涉及航天航空、工業(yè)控制、電力系統(tǒng)等各個(gè)領(lǐng)域。雖然DSP的功能日益強(qiáng)大,但很多場(chǎng)合仍需要多個(gè)DSP協(xié)同工作來實(shí)現(xiàn)應(yīng)有的功能,尤其對(duì)于實(shí)時(shí)性要求較高的場(chǎng)合,多DSP之間如何實(shí)現(xiàn)高效和穩(wěn)定的通信就顯得尤為重要。
目前比較廣泛的多個(gè)DSP間的通信方式,是串行工作方式中的串口通信和雙口RAM通信,這兩種方法一般都會(huì)占用DSP較多的時(shí)間資源,傳輸速度較慢,實(shí)時(shí)性較差,影響DSP的效率。
HPI(host port interface)接口,是TI的TMS320C6000系列DSP配置的并行接口。而HPI接口可以讓外部的主機(jī)直接訪問DSP內(nèi)存映射的部分內(nèi)存,而無需DSP干預(yù)。本發(fā)明就是利用這一特點(diǎn),通過操作多個(gè)DSP的HPI接口來實(shí)現(xiàn)多個(gè)DSP之間的通信。
技術(shù)實(shí)現(xiàn)要素:
為了解決目前多個(gè)DSP間的串口通信和雙口RAM通信會(huì)占用DSP較多的時(shí)間資源、傳輸速度較慢、實(shí)時(shí)性較差、影響DSP的效率等技術(shù)問題,本發(fā)明采用現(xiàn)場(chǎng)可編程邏輯門陣列FPGA作為主機(jī),多個(gè)DSP作為從機(jī),通過FPGA操作多個(gè)DSP的HPI接口,對(duì)需要通信的多個(gè)DSP的HPI接口進(jìn)行讀寫操作,來實(shí)現(xiàn)多DSP之間的通信。
基于FPGA處理速度快、并行處理的特性,使用FPGA來完成數(shù)據(jù)交換的中轉(zhuǎn)功能。中轉(zhuǎn)過程用時(shí)較少,基本等同于任意兩個(gè)DSP或多個(gè)DSP之間的直接通信。本發(fā)明可用于TMS320C6000全系列DSP的HPI接口之間的通信,具有很強(qiáng)的通用性。
本發(fā)明為解決上述技術(shù)問題,所采取的技術(shù)方案是:
基于FPGA和HPI的DSP間的通信裝置,包括:作為主機(jī)的一個(gè)FPGA,作為從機(jī)的、帶有HPI接口的至少兩個(gè)DSP,在FPGA中分區(qū)存儲(chǔ)每個(gè)DSP所對(duì)應(yīng)的HPI讀寫操作控制模塊、數(shù)據(jù)緩存區(qū)讀寫模塊、緩存區(qū)數(shù)據(jù)交互模塊。
HPI讀寫操作控制模塊,實(shí)現(xiàn)FPGA對(duì)HPI接口的讀寫操作,采用的是先讀后寫的操作方式,讀采用的定時(shí)讀,即每隔一定的時(shí)間,F(xiàn)PGA對(duì)需要通信的DSP的HPI接口進(jìn)行讀操作,以獲取各DSP需要發(fā)送給其他DSP的數(shù)據(jù);而對(duì)于寫操作,則要等待FPGA將某DSP所需要寫入的數(shù)據(jù)全部準(zhǔn)備好后,才能將數(shù)據(jù)通過HPI接口寫入DSP。
HPI讀寫操作控制模塊包括兩部分:一是HPI數(shù)據(jù)讀寫時(shí)序部分,負(fù)責(zé)構(gòu)建對(duì)DSP進(jìn)行數(shù)據(jù)讀寫時(shí)所需要的控制邏輯,讀操作和寫操作分別置于相互獨(dú)立的程序模塊內(nèi)、觸發(fā)的條件互斥,否則會(huì)產(chǎn)生HPI接口訪問錯(cuò)誤;二是HPI接口控制信號(hào)輸出部分,負(fù)責(zé)向HPI數(shù)據(jù)讀寫時(shí)序部分輸出所需要的HPI控制信號(hào),讀操作采用定時(shí)讀以獲取各DSP需要發(fā)送給其他DSP的數(shù)據(jù),以HPI接口定時(shí)讀標(biāo)志到達(dá)為控制條件,而寫操作則要等待FPGA將待寫入數(shù)據(jù)的DSP所需要寫入的數(shù)據(jù)全部準(zhǔn)備好并將寫緩存完成標(biāo)志置起后才執(zhí)行。
數(shù)據(jù)緩存區(qū)讀寫模塊,包含至少2個(gè)數(shù)據(jù)緩存區(qū),一個(gè)是讀緩存區(qū),用于存儲(chǔ)通過HPI接口讀出的所應(yīng)對(duì)的DSP內(nèi)部RAM數(shù)據(jù);另一個(gè)是寫緩存區(qū),用于存儲(chǔ)需要寫給所對(duì)應(yīng)的DSP的有效數(shù)據(jù);此模塊還對(duì)定時(shí)器進(jìn)行定時(shí)設(shè)置以產(chǎn)生相應(yīng)的HPI接口定時(shí)讀標(biāo)志。
緩存區(qū)數(shù)據(jù)交互模塊,負(fù)責(zé)將除待寫入數(shù)據(jù)的DSP以外的其他DSP的讀緩存區(qū)的數(shù)據(jù)進(jìn)行匯總和處理,并按照一定的格式存儲(chǔ)在該待寫入數(shù)據(jù)的DSP對(duì)應(yīng)的寫緩存區(qū)內(nèi),完成后將該DSP的寫緩存區(qū)的寫緩存完成標(biāo)志置起。如果某個(gè)數(shù)字信號(hào)處理器DSPn需要其他DSP的數(shù)據(jù),由于FPGA從各DSP讀取的數(shù)據(jù)長度不一定相同,故所需時(shí)間也有所差異,F(xiàn)PGA要等待所有讀緩存區(qū)讀取動(dòng)作全部完成后,才能進(jìn)行緩存區(qū)數(shù)據(jù)的匯總和處理,處理完成后按照一定的格式存儲(chǔ)在DSPn對(duì)應(yīng)的HPI接口的寫緩存區(qū)內(nèi),存儲(chǔ)完成后,將DSPn寫緩存區(qū)的寫緩存完成標(biāo)志置起。
FPGA通過控制線實(shí)現(xiàn)對(duì)HPI接口的控制、通過數(shù)據(jù)線實(shí)現(xiàn)與HPI接口間的數(shù)據(jù)交互。
基于FPGA和HPI的DSP間的通信裝置的通信方法,包括以下步驟:
步驟1、在FPGA中為需要通信的DSP分別構(gòu)建其各自的HPI讀寫操作控制模塊、數(shù)據(jù)緩存區(qū)讀寫模塊、緩存區(qū)數(shù)據(jù)交互模塊,所述數(shù)據(jù)緩存區(qū)讀寫模塊包含一個(gè)讀緩存區(qū)和一個(gè)寫緩存區(qū);
步驟2、各DSP的HPI讀寫操作控制模塊并行分別讀取各自的內(nèi)存數(shù)據(jù)并放置該DSP所對(duì)應(yīng)的讀緩存區(qū)內(nèi);
步驟2-1、等待HPI接口定時(shí)讀標(biāo)志是否到達(dá),若否,則繼續(xù)等待,若是,則初始化該DSP的HPIC寄存器、HPIA寄存器,并轉(zhuǎn)步驟2-2;
步驟2-2、FPGA利用HPI讀寫操作控制模塊通過HPI接口讀取該DSP的內(nèi)存數(shù)據(jù),并放置在該DSP所對(duì)應(yīng)的讀緩存區(qū)內(nèi);
步驟2-3、判斷讀取該DSP的內(nèi)存數(shù)據(jù)是否完成,若否,轉(zhuǎn)步驟2-2,若是,則在該DSP的讀緩存區(qū)置起讀完成標(biāo)志;
步驟3、待所有需要通信的DSP的讀完成標(biāo)志置起后,F(xiàn)PGA利用緩存區(qū)數(shù)據(jù)交互模塊將除待寫入數(shù)據(jù)的DSP以外的其他所有DSP對(duì)應(yīng)的讀緩存區(qū)的數(shù)據(jù)進(jìn)行匯總和處理,并放置在該待寫入數(shù)據(jù)的DSP的寫緩存區(qū)內(nèi);
步驟4、判斷各DSP的讀緩存區(qū)的數(shù)據(jù)匯總和處理是否完成,如果否,則轉(zhuǎn)步驟3,如果是,則在待寫入數(shù)據(jù)的DSP的寫緩存區(qū)中置起寫緩存完成標(biāo)志并轉(zhuǎn)步驟5;
步驟5、初始化待寫入數(shù)據(jù)的DSP的HPIC寄存器、HPIA寄存器;
步驟6、FPGA利用HPI讀寫操作控制模塊通過HPI接口將寫緩存區(qū)的數(shù)據(jù)寫入待寫入數(shù)據(jù)的DSP的內(nèi)存;
步驟7、判斷寫緩存區(qū)的數(shù)據(jù)寫入待寫入數(shù)據(jù)的DSP的內(nèi)存是否完成,若否,則轉(zhuǎn)步驟6,若是則本次通信完成。
本發(fā)明相對(duì)于以前的DSP通信方式,有以下優(yōu)點(diǎn):
(1)速度塊,實(shí)時(shí)性高,速度主要受限于所選擇DSP的HPI接口最高工作頻率以及所選擇FPGA的最高工作頻率,速度可達(dá)100MB/s以上。
(2)基本不消耗DSP的資源,因HPI接口可以讓外部的主機(jī)直接訪問DSP內(nèi)存映射的部分內(nèi)存,而無需DSP干預(yù),因此基本不占用DSP的負(fù)載,大大提高了DSP的運(yùn)行效率。
(3)可同時(shí)實(shí)現(xiàn)任意兩個(gè)或多個(gè)DSP之間的通信,可擴(kuò)展性較強(qiáng),其擴(kuò)展的數(shù)量主要取決于所選用FPGA的IO引腳的數(shù)量和開辟數(shù)據(jù)緩存區(qū)所需要的RAM資源。
附圖說明
圖1是本發(fā)明的裝置結(jié)構(gòu)示意圖
圖2是本發(fā)明的通信方法邏輯框圖
具體實(shí)施方式
下面結(jié)合附圖,具體說明基于FPGA的DSP間HPI通信裝置及其通信方法。
如圖1所示,基于FPGA和HPI的DSP間的通信裝置,包括:作為主機(jī)的一個(gè)FPGA,作為從機(jī)的、帶有HPI接口的至少兩個(gè)DSP,在FPGA中分區(qū)存儲(chǔ)每個(gè)DSP所對(duì)應(yīng)的HPI讀寫操作控制模塊、數(shù)據(jù)緩存區(qū)讀寫模塊、緩存區(qū)數(shù)據(jù)交互模塊;
HPI讀寫操作控制模塊,實(shí)現(xiàn)FPGA對(duì)HPI接口的讀寫操作,采用的是先讀后寫的操作方式,讀采用的定時(shí)讀,即每隔一定的時(shí)間,F(xiàn)PGA對(duì)需要通信的DSP的HPI接口進(jìn)行讀操作,以獲取各DSP需要發(fā)送給其他DSP的數(shù)據(jù);而對(duì)于寫操作,則要等待FPGA將某DSP所需要寫入的數(shù)據(jù)全部準(zhǔn)備好后,才能將數(shù)據(jù)通過HPI接口寫入DSP。
HPI讀寫操作控制模塊包括兩部分:一是HPI數(shù)據(jù)讀寫時(shí)序部分,負(fù)責(zé)構(gòu)建對(duì)DSP進(jìn)行數(shù)據(jù)讀寫時(shí)所需要的控制邏輯,讀操作和寫操作分別置于相互獨(dú)立的程序模塊內(nèi)、觸發(fā)的條件互斥,否則會(huì)產(chǎn)生HPI接口訪問錯(cuò)誤;二是HPI接口控制信號(hào)輸出部分,負(fù)責(zé)向HPI數(shù)據(jù)讀寫時(shí)序部分輸出所需要的HPI控制信號(hào),讀操作采用定時(shí)讀以獲取各DSP需要發(fā)送給其他DSP的數(shù)據(jù),以HPI接口定時(shí)讀標(biāo)志到達(dá)為控制條件,而寫操作則要等待FPGA將待寫入數(shù)據(jù)的DSP所需要寫入的數(shù)據(jù)全部準(zhǔn)備好并將寫緩存完成標(biāo)志置起后才執(zhí)行。
數(shù)據(jù)緩存區(qū)讀寫模塊,包含至少2個(gè)數(shù)據(jù)緩存區(qū),一個(gè)是讀緩存區(qū),用于存儲(chǔ)通過HPI接口讀出的所對(duì)應(yīng)的DSP內(nèi)部RAM數(shù)據(jù);另一個(gè)是寫緩存區(qū),用于存儲(chǔ)需要寫給所對(duì)應(yīng)的DSP的有效數(shù)據(jù);此模塊還對(duì)定時(shí)器進(jìn)行定時(shí)設(shè)置以產(chǎn)生相應(yīng)的HPI接口定時(shí)讀標(biāo)志。
緩存區(qū)數(shù)據(jù)交互模塊,負(fù)責(zé)將除待寫入數(shù)據(jù)的DSP以外的其他DSP的讀緩存區(qū)的數(shù)據(jù)進(jìn)行匯總和處理,并按照一定的格式存儲(chǔ)在該待寫入數(shù)據(jù)的DSP對(duì)應(yīng)的寫緩存區(qū)內(nèi),完成后將該DSP的寫緩存區(qū)的寫緩存完成標(biāo)志置起。如果某個(gè)數(shù)字信號(hào)處理器DSPn需要其他DSP的數(shù)據(jù),由于FPGA從各DSP讀取的數(shù)據(jù)長度不一定相同,故所需時(shí)間也有所差異,F(xiàn)PGA要等待所有讀緩存區(qū)讀取動(dòng)作全部完成后,才能進(jìn)行緩存區(qū)數(shù)據(jù)的匯總和處理,處理完成后按照一定的格式存儲(chǔ)在DSPn對(duì)應(yīng)的HPI接口的寫緩存區(qū)內(nèi),存儲(chǔ)完成后,將DSPn寫緩存區(qū)的寫緩存完成標(biāo)志置起。
圖1中有關(guān)HPI接口的說明:
(1)HD[0:15]:HPI數(shù)據(jù)交互總線,16位;
(2)RD/WR:HPI讀寫控制線。RD/WR=0時(shí),寫;RD/WR=1時(shí),讀;
(3)HCNTL:主機(jī)用來控制選擇訪問哪個(gè)寄存器的地址信號(hào)。當(dāng)HCNTL=00時(shí)訪問HPIC;當(dāng)HCNTL=01時(shí)訪問HPIA;當(dāng)HCNTL=10時(shí),讀寫HPID,且每讀寫一次HPIA自動(dòng)增加1(主要用該模式);當(dāng)HCNTL=11時(shí),讀寫HPID,且每讀寫一次HPIA不受影響;
(4)HAS:地址選通信號(hào)。此信號(hào)用于主機(jī)的數(shù)據(jù)線和地址線復(fù)用的情況。不用時(shí)該信號(hào)接高(沒有使用);
(5)HHWIL:字節(jié)識(shí)別信號(hào),用于識(shí)別主機(jī)傳送過來的是第一個(gè)字節(jié)(或者叫半字)還是第二個(gè)字節(jié)。當(dāng)HHWIL=0時(shí)為第一個(gè)字節(jié),當(dāng)HHWIL=1時(shí)是第二個(gè)字節(jié);
(6)HCS:片選信號(hào)。使能輸入端,在每次尋址期間為低電平,其他時(shí)候也可以保留在低電平;
(7)/HDS,直接連接高電平,沒有單獨(dú)進(jìn)行控制;
(8)/HRDY DSP的HPI接口狀態(tài),若為低,則可以被訪問,若為高,則要等待。主機(jī)操作HPI前,都要先等待此狀態(tài)為低,才能夠進(jìn)行;
(9)/HINT,輸出中斷給主機(jī),可不使用。
基于FPGA和HPI的DSP間的通信裝置的通信方法,下面以把DSP2至DSPn的數(shù)據(jù)寫入DSP1為例具體說明,如圖2所示,包括以下步驟:
步驟1、在FPGA中為需要通信的DSP1至DSPn分別構(gòu)建其各自的HPI讀寫操作控制模塊、數(shù)據(jù)緩存區(qū)讀寫模塊、緩存區(qū)數(shù)據(jù)交互模塊,所述數(shù)據(jù)緩存區(qū)讀寫模塊包含一個(gè)讀緩存區(qū)和一個(gè)寫緩存區(qū);
步驟2、DSP1至DSPn的HPI讀寫操作控制模塊并行分別讀取各自的內(nèi)存數(shù)據(jù)并放置該DSP所對(duì)應(yīng)的讀緩存區(qū)內(nèi);
步驟2-1、等待HPI接口定時(shí)讀標(biāo)志(Read_Start=1)是否到達(dá),若否,則繼續(xù)等待,若是,則初始化該DSP的HPIC寄存器、HPIA寄存器,并轉(zhuǎn)步驟2-2;
步驟2-2、FPGA利用HPI讀寫操作控制模塊通過HPI接口讀取該DSP的內(nèi)存數(shù)據(jù),并放置在該DSP所對(duì)應(yīng)的讀緩存區(qū)內(nèi);
步驟2-3、判斷讀取該DSP的內(nèi)存數(shù)據(jù)是否完成,若否,轉(zhuǎn)步驟2-2,若是,則在該DSP的讀緩存區(qū)置起讀完成(Read_Dsp(1-n)_OK=1)標(biāo)志;
步驟3、待DSP1至DSPn的讀完成標(biāo)志(Read_Dsp(1-n)_OK=1)置起后,F(xiàn)PGA利用緩存區(qū)數(shù)據(jù)交互模塊將DSP2至DSPn對(duì)應(yīng)的讀緩存區(qū)的數(shù)據(jù)進(jìn)行匯總和處理,并放置在DSP1的寫緩存區(qū)內(nèi);
步驟4、判斷DSP2至DSPn的讀緩存區(qū)的數(shù)據(jù)匯總和處理是否完成,如果否,則轉(zhuǎn)步驟3,如果是,則在DSP1的寫緩存區(qū)中置起寫緩存完成(Write_EN=1)標(biāo)志并轉(zhuǎn)步驟5;
步驟5、初始化DSP1的HPIC寄存器、HPIA寄存器;
步驟6、FPGA利用HPI讀寫操作控制模塊通過HPI接口將寫緩存區(qū)的數(shù)據(jù)寫入DSP1的內(nèi)存;
步驟7、判斷寫緩存區(qū)的數(shù)據(jù)寫入DSP1的內(nèi)存是否完成,若否,則轉(zhuǎn)步驟6,若是則本次通信完成。