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