隨著集成電路技術的發(fā)展,FPGA和DSP以及ARM以其體積小、速度快、功耗低、設計靈活、利于系統(tǒng)集成、擴展升級等優(yōu)點,被廣泛地應用于高速數字信號傳輸及數據處理,以DSP+FPGA+ARM的架構組成滿足實時性要求的高速數字處理系統(tǒng)已成為一種趨勢,本文主要研究FPGA在高速多路數據傳輸中的應用。
系統(tǒng)結構
在DSP多路串行數據同時向ARM發(fā)送的系統(tǒng)中,因為數據通道有并行要求,應用FPGA硬件并行的特點,由FPGA并行接收多路數據,經過緩沖后再發(fā)送至ARM進行數據的高級處理的方案,系統(tǒng)結構圖如圖1所示。
圖1 系統(tǒng)結構圖
FPGA處理模塊實現
DSP的串口傳輸方式為同步串口,每組DSP串口有4個端口,分別為:clk , frame. , data_a,data_b[3]。數據端口有兩個,本例中只使能data_a,以下統(tǒng)一稱為data。
DSP同步串口傳輸時序如圖2所示,當frame為1時,串行數據有效,當frame為0時,一幀數據傳輸結束。本例中DSP傳輸的一幀數據為32bit。
圖2 DSP同步串口傳輸時序圖
FPGA內部采用異步FIFO解決DSP時鐘頻率和FPGA時鐘頻率不匹配的問題,寫時鐘由DSP輸出的同步時鐘信號提供,時鐘頻率為60MHz;讀時鐘由FPGA的鎖相環(huán)PLL時鐘提供,PLL輸出時鐘頻率為100MHz。
接收模塊
由于DSP的8個同步串口同時寫入,FPGA數據接收模塊一共有8個,每個模塊接收到的數據都存放在一個特定的FIFO中,將其稱之為R_FIFO。
DSP輸出信號為frame,clk, data,FPGA以DSP同步串口的輸出時鐘clk作為采集數據的時鐘。系統(tǒng)上電結束后,FPGA等待ARM發(fā)送接收允許指令,接收允許后,FPGA就可以開始接收數據。
當frame信號為高,FPGA即開始接收從DSP發(fā)送的串行數據,在每個dsp_clk的上升沿讀取一個bit的數據,之后將數據轉入移位寄存器中。FPGA引入一個模塊,時刻監(jiān)測frame的下降沿,當frame下降時,即表示一個字的數據發(fā)送完畢,移位寄存器的數據放入R_FIFO的數據輸入口,將R_FIFO的寫使能置高,向R_FIFO發(fā)出寫入請求,寫入此時的數據至R_FIFO中,依次循環(huán)。當R_FIFO中的數據個數不為0時,即向FPGA的發(fā)送模塊發(fā)送請求。
發(fā)送模塊
接收模塊接收到DSP同步串口數據后,即通過reg與answer信號與FPGA數據發(fā)送模塊之間進行數據傳輸,如圖3所示。
圖3 FPGA接收及發(fā)送模塊
當接收模塊有請求時,發(fā)送模塊即將接收模塊采集到的數據寫入發(fā)送模塊的緩存FIFO中,將其稱之為S_FIFO。每輪從R_FIFO中傳輸的8個數據均依次存入S_FIFO中。
因為DSP的8個同步串口均同時工作,可以認為當有一個輸入模塊的數據接收完畢時, 8個端口的數據均應該接收完畢,保險起見,可以延時若干時鐘周期后開始接收數據。從端口0至端口7為一輪,若此時有端口沒有數據,即可認為此端口暫無數據輸出,用數據0替代,發(fā)送模塊繼續(xù)接收下一個端口的數據。用狀態(tài)機來實現此功能,如圖4所示。
圖4 S_FIFO寫操作的狀態(tài)機圖
來源:馬雅歷0次