隨著集成電路技術(shù)的發(fā)展,FPGA和DSP以及ARM以其體積小、速度快、功耗低、設(shè)計靈活、利于系統(tǒng)集成、擴展升級等優(yōu)點,被廣泛地應(yīng)用于高速數(shù)字信號傳輸及數(shù)據(jù)處理,以DSP+FPGA+ARM的架構(gòu)組成滿足實時性要求的高速數(shù)字處理系統(tǒng)已成為一種趨勢,本文主要研究FPGA在高速多路數(shù)據(jù)傳輸中的應(yīng)用。 系統(tǒng)結(jié)構(gòu) 在DSP多路串行數(shù)據(jù)同時向ARM發(fā)送的系統(tǒng)中,因為數(shù)據(jù)通道有并行要求,應(yīng)用FPGA硬件并行的特點,由FPGA并行接收多路數(shù)據(jù),經(jīng)過緩沖后再發(fā)送至ARM進行數(shù)據(jù)的高級處理的方案,系統(tǒng)結(jié)構(gòu)圖如圖1所示。
FPGA處理模塊實現(xiàn) DSP的串口傳輸方式為同步串口,每組DSP串口有4個端口,分別為:clk , frame. , data_a,data_b[3]。數(shù)據(jù)端口有兩個,本例中只使能data_a,以下統(tǒng)一稱為data。 DSP同步串口傳輸時序如圖2所示,當(dāng)frame為1時,串行數(shù)據(jù)有效,當(dāng)frame為0時,一幀數(shù)據(jù)傳輸結(jié)束。本例中DSP傳輸?shù)囊粠瑪?shù)據(jù)為32bit。
FPGA內(nèi)部采用異步FIFO解決DSP時鐘頻率和FPGA時鐘頻率不匹配的問題,寫時鐘由DSP輸出的同步時鐘信號提供,時鐘頻率為60MHz;讀時鐘由FPGA的鎖相環(huán)PLL時鐘提供,PLL輸出時鐘頻率為100MHz。 接收模塊 由于DSP的8個同步串口同時寫入,F(xiàn)PGA數(shù)據(jù)接收模塊一共有8個,每個模塊接收到的數(shù)據(jù)都存放在一個特定的FIFO中,將其稱之為R_FIFO。 DSP輸出信號為frame,clk, data,F(xiàn)PGA以DSP同步串口的輸出時鐘clk作為采集數(shù)據(jù)的時鐘。系統(tǒng)上電結(jié)束后,F(xiàn)PGA等待ARM發(fā)送接收允許指令,接收允許后,F(xiàn)PGA就可以開始接收數(shù)據(jù)。 當(dāng)frame信號為高,F(xiàn)PGA即開始接收從DSP發(fā)送的串行數(shù)據(jù),在每個dsp_clk的上升沿讀取一個bit的數(shù)據(jù),之后將數(shù)據(jù)轉(zhuǎn)入移位寄存器中。FPGA引入一個模塊,時刻監(jiān)測frame的下降沿,當(dāng)frame下降時,即表示一個字的數(shù)據(jù)發(fā)送完畢,移位寄存器的數(shù)據(jù)放入R_FIFO的數(shù)據(jù)輸入口,將R_FIFO的寫使能置高,向R_FIFO發(fā)出寫入請求,寫入此時的數(shù)據(jù)至R_FIFO中,依次循環(huán)。當(dāng)R_FIFO中的數(shù)據(jù)個數(shù)不為0時,即向FPGA的發(fā)送模塊發(fā)送請求。 發(fā)送模塊 接收模塊接收到DSP同步串口數(shù)據(jù)后,即通過reg與answer信號與FPGA數(shù)據(jù)發(fā)送模塊之間進行數(shù)據(jù)傳輸,如圖3所示。
因為DSP的8個同步串口均同時工作,可以認(rèn)為當(dāng)有一個輸入模塊的數(shù)據(jù)接收完畢時,8個端口的數(shù)據(jù)均應(yīng)該接收完畢,保險起見,可以延時若干時鐘周期后開始接收數(shù)據(jù)。從端口0至端口7為一輪,若此時有端口沒有數(shù)據(jù),即可認(rèn)為此端口暫無數(shù)據(jù)輸出,用數(shù)據(jù)0替代,發(fā)送模塊繼續(xù)接收下一個端口的數(shù)據(jù)。用狀態(tài)機來實現(xiàn)此功能,如圖4所示。
發(fā)送模塊完成FPGA向ARM的數(shù)據(jù)傳輸,當(dāng)FPGA發(fā)送模塊S_FIFO中的數(shù)據(jù)達到一定數(shù)量時,F(xiàn)PGA即向ARM發(fā)出發(fā)送數(shù)據(jù)請求,ARM即開始對FPGA進行數(shù)據(jù)的讀取。 FPGA中的S_FIFO同樣也是異步FIFO。寫時鐘由鎖相環(huán)提供100MHz;讀時鐘由ARM的讀取使能信號OE取反得到,讀使能由ARM的片選信號NGCS取反得到。ARM讀取數(shù)據(jù)會產(chǎn)生NGCS與OE低電平信號,無操作時置高。每次讀取數(shù)據(jù)時NGCS與OE先后置低,取反接至S_FIFO讀端口分別為NGCS_N與OE_N。對S_FIFO讀取時,每當(dāng)讀時鐘OE_N為上升沿,讀使能NGCS_N必為1,完成一次讀取操作。 這樣實現(xiàn)了ARM與FPGA之間的跨時鐘域數(shù)據(jù)傳輸。FPGA發(fā)送數(shù)據(jù)采取乒乓操作, ARM可以源源不斷的將S_FIFO中的數(shù)據(jù)讀取出來。FPGA和ARM的數(shù)據(jù)傳輸原理圖如圖5所示。
為驗證各控制信號的時序邏輯,做如下仿真:FPGA接收及緩存數(shù)據(jù)。仿真的時序如圖6所示。data_temp0~data_temp7為接收模塊的移位寄存器,在frame的下降沿時將數(shù)據(jù)寫入各自的R_FIFO中;R_FIFO中的數(shù)據(jù)依次通過寄存器data_m寫入S_FIFO中。8次寫入后,一輪緩存即結(jié)束,等待下次請求。
信號抗干擾處理 在FPGA和ARM之間的通訊中利用差分信號傳輸用于消除信號的干擾。差分對是指兩條線路總是傳送相反的邏輯電平,差分對信號對外界干擾源產(chǎn)生的噪聲不敏感,例如電路板的干擾噪聲等。 如圖7所示[5],IN引腳連接一個信號源,可以看到,對a噪聲毛刺不敏感,但是對于b噪聲毛刺,卻有可能使其誤認(rèn)為一個脈沖,而這個可能引起FPGA內(nèi)部的一些不期望的行為,如讀出一個錯誤的值。
差分對中的兩個信號總是傳送互補的邏輯值,所以當(dāng)上圖中的IN_P為邏輯1時,IN_N則為邏輯0,反之亦然。并且布線時,差分對的兩條線路布線得非常的近,因此噪聲對他們的影響都是相同的。接收端只對兩個信號的差異感興趣,若兩個信號相同,則對此不敏感。 結(jié)語 利用DSP的實時數(shù)據(jù)處理能力與FPGA優(yōu)越的硬線邏輯設(shè)計相結(jié)合,保證了多通道數(shù)據(jù)采集系統(tǒng)的實時性和精度要求,實現(xiàn)高速數(shù)據(jù)傳輸,同時簡化系統(tǒng)硬件設(shè)計,縮小系統(tǒng)體積,具有極高的性價比。系統(tǒng)的數(shù)字部分硬件采用Verilog硬件描述語言實現(xiàn),便于修改和升級,可根據(jù)實際測試應(yīng)用需求作靈活的改進。本數(shù)據(jù)采集傳輸模塊已成功實現(xiàn),并取得了良好的應(yīng)用效果。 |