本發(fā)明屬于數(shù)據(jù)傳輸,尤其涉及一種基于srio的單通道多數(shù)據(jù)源傳輸系統(tǒng)及方法。
背景技術(shù):
1、現(xiàn)有的數(shù)據(jù)處理系統(tǒng),常使用嵌入式平臺進(jìn)行開發(fā),dsp+fpga制成pcb,dsp進(jìn)行總數(shù)據(jù)報文的處理和流程控制,fpga進(jìn)行硬件接口拓展,dsp與fpga內(nèi)部通信核心使用srio(serial?rapid?ip)和emif(external?memory?interface)外部存儲器,srio是一種高速串行的通信接口協(xié)議,其拓?fù)浣Y(jié)構(gòu)簡單且靈活多變,串行方式硬件總線少,是一種面向嵌入式的高可靠、高性能、基于包交換的高速互聯(lián)技術(shù)。emif是dsp芯片與fpga之間常用的一種并行通信連接方式,性能優(yōu)良,具有很大的方便性和靈活性。
2、在現(xiàn)有數(shù)據(jù)傳輸系統(tǒng)中,常見采用emif進(jìn)行串口、spi等時間長度不確定的接口數(shù)據(jù)傳輸,srio進(jìn)行大批量連續(xù)數(shù)據(jù)傳輸方式,這種方式存在emif速率低,時效性差的問題;或者采用srio使用小于等于256字節(jié)的流模式數(shù)據(jù)包進(jìn)行傳輸?shù)姆绞剑@種方式導(dǎo)致srio帶寬利用低,影響數(shù)據(jù)整體傳輸效率。
技術(shù)實現(xiàn)思路
1、本發(fā)明旨在解決上述使用不同接口不同格式的數(shù)據(jù)傳輸,統(tǒng)一使用srio進(jìn)行快速高效的數(shù)據(jù)傳輸問題;加入片循環(huán)輪詢的方式,解決短包快速連續(xù)大量存儲的問題,同步縮短了傳輸過程中的延時等待;提供一種基于srio的單通道多數(shù)據(jù)源傳輸系統(tǒng)及方法。
2、第一方面,本發(fā)明提供一種基于srio的單通道多數(shù)據(jù)源傳輸系統(tǒng),包括fpga子系統(tǒng)和dsp子系統(tǒng);
3、所述fpga子系統(tǒng)包括接口通道模塊、fpga預(yù)處理模塊、srio發(fā)送模塊、emif狀態(tài)模塊、srio復(fù)位模塊和srio接收模塊;
4、所述接口通道模塊用于外部連接多個接口的硬件;所述fpga預(yù)處理模塊用于對來自外部接口的數(shù)據(jù)進(jìn)行預(yù)處理;所述srio發(fā)送模塊用于數(shù)據(jù)包和門鈴包發(fā)送;所述emif狀態(tài)模塊用于當(dāng)前接口通道的最新狀態(tài)結(jié)果存儲;所述srio復(fù)位模塊用于在srio鏈路鏈接初始化或者異常時進(jìn)行復(fù)位;所述srio接收模塊用于接收srio數(shù)據(jù)包;
5、所述dsp子系統(tǒng)包括dsp接收模塊、dsp門鈴模塊、dsp發(fā)送驅(qū)動層、dsp發(fā)送接口層、dsp發(fā)送應(yīng)用層和emif設(shè)置模塊;
6、所述dsp接收模塊用于接收并將數(shù)據(jù)寫入dsp的內(nèi)存;所述dsp門鈴模塊用于識別門鈴中斷的中斷源;所述dsp發(fā)送應(yīng)用層用于處理各個接口需要發(fā)送的數(shù)據(jù);所述dsp發(fā)送接口層根據(jù)數(shù)據(jù)量分時分批分包啟動所述dsp發(fā)送驅(qū)動層將srio包發(fā)送出去;所述emif設(shè)置模塊具有存儲性能,用于做srio協(xié)議約定,進(jìn)行每個通道的srio的片循環(huán)地址、片循環(huán)大小、片循環(huán)次數(shù)、門鈴中斷的數(shù)據(jù)長度、門鈴中斷的數(shù)據(jù)包個數(shù)的設(shè)置。
7、進(jìn)一步,本發(fā)明所述基于srio的單通道多數(shù)據(jù)源傳輸系統(tǒng),所述接口通道模塊依據(jù)各接口的采樣時鐘將數(shù)據(jù)接收進(jìn)來或者發(fā)送出去;接收接口最多64個,發(fā)送接口最多2×32個,接口帶寬之和小于等于srio帶寬。
8、進(jìn)一步,本發(fā)明所述基于srio的單通道多數(shù)據(jù)源傳輸系統(tǒng),所述fpga預(yù)處理模塊進(jìn)行數(shù)據(jù)預(yù)處理時,按照emif設(shè)置模塊的srio協(xié)議和內(nèi)部的片循環(huán)進(jìn)行打包數(shù)據(jù);所述打包數(shù)據(jù)包括加包頭、分包、加門鈴包;打包完成之后的數(shù)據(jù)包傳遞到srio發(fā)送模塊。
9、進(jìn)一步,本發(fā)明所述基于srio的單通道多數(shù)據(jù)源傳輸系統(tǒng),所述srio復(fù)位模塊復(fù)位時將fpga內(nèi)部關(guān)于srio的計數(shù)、fifo、狀態(tài)字進(jìn)行清除重置;fpga子系統(tǒng)實時檢測srio的鏈路鏈接狀態(tài),在鏈路link或port異常時通過emif狀態(tài)模塊通知dsp子系統(tǒng),進(jìn)行復(fù)位重連。
10、進(jìn)一步,本發(fā)明所述基于srio的單通道多數(shù)據(jù)源傳輸系統(tǒng),所述dsp門鈴模塊識別門鈴中斷的中斷源,使用doorbell中斷來通知dsp子系統(tǒng);dsp子系統(tǒng)進(jìn)入門鈴中斷后,先根據(jù)doorbell門鈴中斷查找是哪一個接口通道的中斷,之后通過emif狀態(tài)模塊識別片循環(huán)輪詢的地址區(qū)和每片地址區(qū)的有效字節(jié)長度。
11、進(jìn)一步,本發(fā)明所述基于srio的單通道多數(shù)據(jù)源傳輸系統(tǒng),所述fpga預(yù)處理模塊對數(shù)據(jù)打包完成之后,srio發(fā)送模塊發(fā)送門鈴包之前,fpga子系統(tǒng)將當(dāng)前接口通道的最新狀態(tài)結(jié)果更新并通過emif狀態(tài)模塊存儲,方便dsp進(jìn)行門鈴中斷以后進(jìn)行狀態(tài)結(jié)果查詢,識別片循環(huán)輪詢結(jié)果,完整的將數(shù)據(jù)存取出來。
12、第二方面,本發(fā)明提供一種根據(jù)前述第一方面所述基于srio的單通道多數(shù)據(jù)源傳輸系統(tǒng)的傳輸方法,包括數(shù)據(jù)上行過程和數(shù)據(jù)下行過程;
13、所述數(shù)據(jù)上行過程包括:fpga子系統(tǒng)從外部多個接口的硬件接收數(shù)據(jù),通過fpga預(yù)處理模塊進(jìn)行數(shù)據(jù)預(yù)處理,對每個接口通道的數(shù)據(jù),按照預(yù)設(shè)的門鈴中斷協(xié)議與片循環(huán)協(xié)議處理打包后通過srio發(fā)送模塊將數(shù)據(jù)包和門鈴包發(fā)送至dsp子系統(tǒng),將前級的多路數(shù)據(jù)通過一個srio通道發(fā)送到dsp,由dsp的ddr3進(jìn)行數(shù)據(jù)緩存;直接緩存到dsp的內(nèi)存上,不需要使用fpga多余緩存,fpga只用實時處理封包主動上傳;srio發(fā)送模塊的速度遠(yuǎn)大于前級的預(yù)處理模塊的打包速度;當(dāng)只有一個通道需發(fā)送的時,直接將此通道數(shù)據(jù)發(fā)送出去;當(dāng)存在兩路或者兩路以上的數(shù)據(jù)需發(fā)送的時,按照通道號依次將數(shù)據(jù)包發(fā)送出去;
14、dsp的srio底層在接收到數(shù)據(jù)后,啟動dma進(jìn)行數(shù)據(jù)搬移,按照srio包頭協(xié)議的地址和長度,一包一包的將數(shù)據(jù)存放到dsp相應(yīng)的內(nèi)存區(qū);在接收到門鈴中斷以后,先驗證當(dāng)前的中斷源識別通道,之后查詢通道的emif狀態(tài)模塊,查詢當(dāng)前通道的此次中斷片循環(huán)的首地址與上次片循環(huán)的首地址,短包補(bǔ)數(shù)的接口會同時識別每片地址的有效數(shù)據(jù)字節(jié)數(shù),之后將兩次中斷之間的有效數(shù)據(jù)提取出來,后續(xù)進(jìn)行應(yīng)用層處理;
15、所述數(shù)據(jù)下行過程包括:dsp子系統(tǒng)發(fā)送數(shù)據(jù)時進(jìn)行分時分批發(fā)送;按照約定的接口通道協(xié)議封包;fpga子系統(tǒng)識別封包中的包頭地址信息,判斷是哪一個接口通道的數(shù)據(jù),將數(shù)據(jù)提取出來,按照包接收到的順序,直接放到對應(yīng)的接口fifo進(jìn)行對外發(fā)送即可。
16、因為srio的傳輸速度遠(yuǎn)大于外部接口速度,所以只需要約定數(shù)據(jù)傳輸?shù)膮f(xié)議,不需要進(jìn)行優(yōu)先級的處理。數(shù)據(jù)下行的時序由dsp進(jìn)行主動控制。只需考慮數(shù)據(jù)發(fā)送不要過快,導(dǎo)致超過fpga的fifo緩存數(shù)量,從而丟失數(shù)據(jù)即可。同時因為fpga是并行的,所以不需對fpga發(fā)送門鈴中斷,不用考慮fpga進(jìn)行實時響應(yīng)的問題。同時沒有門鈴的約束,所以dsp發(fā)送給fpga的數(shù)據(jù)通道數(shù)遠(yuǎn)大于64,可以達(dá)到2×16個通道數(shù)據(jù)。
17、進(jìn)一步,本發(fā)明所述基于srio的單通道多數(shù)據(jù)源傳輸方法,所述門鈴中斷協(xié)議約定每個通道的中斷數(shù)據(jù)量;fpga發(fā)送的一個通道數(shù)據(jù)量達(dá)到一包、兩包、或者多包,需要發(fā)送一次門鈴中斷通知dsp(多少包數(shù)dsp按照硬件接口特性設(shè)置給fpga),一次門鈴內(nèi)的包頭地址協(xié)議按照此次的片循環(huán)首地址進(jìn)行累計,下一次門鈴需要新的片循環(huán)首地址進(jìn)行累計。
18、進(jìn)一步,本發(fā)明所述基于srio的單通道多數(shù)據(jù)源傳輸方法,所述片循環(huán)協(xié)議約定一個通道連續(xù)存儲多少次門鈴中斷和單次門鈴中斷數(shù)據(jù)長度;發(fā)送一次門鈴以后,新的數(shù)據(jù)需要按照片循環(huán)協(xié)議偏移包頭首地址,保證數(shù)據(jù)區(qū)連續(xù)且能夠按照門鈴的長度進(jìn)行連續(xù)排列;同時在dsp關(guān)閉中斷再次打開以后,dsp通過emif狀態(tài)模塊查詢fpga片循環(huán)的狀態(tài)寄存器值,檢測兩次中斷的間隔區(qū),能夠完整識別ddr3中的緩存數(shù)據(jù);門鈴中斷協(xié)議與片循環(huán)協(xié)議由dsp與fpga之間的emif通信進(jìn)行更改約束。方便dsp在主動關(guān)閉中斷以后,對中間的數(shù)據(jù)仍然可以讀取到。
19、進(jìn)一步,本發(fā)明所述基于srio的單通道多數(shù)據(jù)源傳輸方法,根據(jù)片循環(huán)協(xié)議輪詢處理短包數(shù)據(jù)時,對于不連續(xù)的短包類型的數(shù)據(jù),fpga需進(jìn)行數(shù)據(jù)斷包處理;將斷包按照時間進(jìn)行判斷;對于長度不一致的數(shù)據(jù)采用補(bǔ)數(shù)或分包或加門鈴中斷的方式進(jìn)行處理;對于連續(xù)的數(shù)據(jù)等待滿足256字節(jié)封裝成swrite包即可。所述補(bǔ)數(shù)的方式為:在數(shù)據(jù)單包<=?256字節(jié)時,補(bǔ)充固定數(shù)據(jù)0x80補(bǔ)齊到256字節(jié),具體的字節(jié)數(shù)通過emif的狀態(tài)寄存器進(jìn)行更新;所述分包的方式為:在單包數(shù)據(jù)>256字節(jié)時,按照256字節(jié)分包,如果最后的包不夠256,仍然補(bǔ)數(shù)到256字節(jié);所述加門鈴的方式為:門鈴按照硬件接口的需求設(shè)置,對于短包數(shù)據(jù)接口,按照一包設(shè)置門鈴中斷,在分包或者補(bǔ)數(shù)以后,短包接口需加一個門鈴中斷;每個接口的門鈴中斷分開設(shè)置;對于大批量連續(xù)的數(shù)據(jù)接口,多包數(shù)據(jù)以后發(fā)送一個門鈴;比如串口設(shè)置單包數(shù)據(jù)一次門鈴,所以需在單包數(shù)據(jù)后面加一個門鈴包;對于大批量或者連續(xù)的數(shù)據(jù),可以多包一個門鈴,比如視頻,一張圖片一個門鈴中斷。
20、本發(fā)明所述基于srio的單通道多數(shù)據(jù)源傳輸系統(tǒng)及方法,通過srio發(fā)送模塊,將前級多個通道的fpga數(shù)據(jù)預(yù)處理模塊封裝好的srio包,進(jìn)行排序發(fā)送出去即可。srio進(jìn)行無應(yīng)答傳輸,相對于現(xiàn)有技術(shù)中對于短包數(shù)據(jù)的處理,大大提高了傳輸效率和實時性;加入片循環(huán)操作,對比之前單緩存或者乒乓操作,增加了存儲空間,前級傳輸無需等待后級的處理反饋時間,直接進(jìn)行大批量連續(xù)存儲,這種連續(xù)存儲解決了等待的延時問題。