一種基于ARM和FPGA的環(huán)形緩沖區(qū)接口設(shè)計(jì)
摘要:目前,基于ARM和FPGA架構(gòu)的嵌入式系統(tǒng)在通信設(shè)備中得到廣泛的應(yīng)用。文章提出了一種基于ARM和FPGA的環(huán)形緩沖區(qū)接口設(shè)計(jì)方案,從而實(shí)現(xiàn)了ARM和FPGA之間的數(shù)據(jù)緩沖和速率匹配。實(shí)際測(cè)試表明該方案能夠有效地對(duì)數(shù)據(jù)速率進(jìn)行匹配,且具有良好的可擴(kuò)展性。
關(guān)鍵詞:ARM;現(xiàn)場(chǎng)可編程門陣列;環(huán)形緩沖區(qū)
0 引言
隨著嵌入式系統(tǒng)、軟件無線電和無線通信的發(fā)展,基于嵌入式系統(tǒng)和軟件無線電的實(shí)現(xiàn)架構(gòu)廣泛應(yīng)用到無線通信設(shè)備中。其中,采用ARM+FPGA的軟件無線電體系結(jié)構(gòu)來實(shí)現(xiàn)的通信設(shè)備是最近十分流行的一種方案。該方案充分利用ARM CPU靈活便捷的優(yōu)勢(shì),用來處理用戶輸入、系統(tǒng)控制、網(wǎng)絡(luò)協(xié)議功能,而利用FPGA卓越的實(shí)時(shí)信號(hào)處理優(yōu)點(diǎn),對(duì)無線通信的物理層信號(hào)進(jìn)行無線收發(fā)處理。在這種體系結(jié)構(gòu)中,ARM和FPGA的數(shù)據(jù)通信信號(hào)接口設(shè)計(jì)是其中十分關(guān)鍵的一個(gè)環(huán)節(jié)。由于無線設(shè)備的數(shù)據(jù)收發(fā)往往具有一定的突發(fā)性,在高速數(shù)據(jù)收發(fā)情況下,需要設(shè)計(jì)一種合理的緩沖區(qū)進(jìn)行數(shù)據(jù)傳輸速率的匹配和緩沖。另外,對(duì)于ARM CPU來說,由于CPU往往需要同時(shí)并行處理多種任務(wù),如何盡可能地保證數(shù)據(jù)的實(shí)時(shí)接收,也是設(shè)計(jì)中的一個(gè)關(guān)鍵。本文提出了一種基于ARM和FPGA的環(huán)形緩沖區(qū)設(shè)計(jì)結(jié)構(gòu),能可靠有效地處理好兩者之間數(shù)據(jù)傳輸速率匹配和緩沖,且具有很好的擴(kuò)展性。
1 緩沖區(qū)接口硬件設(shè)計(jì)
本方法設(shè)計(jì)的硬件接口如圖1所示。FPGA作為一個(gè)存儲(chǔ)器外設(shè)與ARM連接,采用的是標(biāo)準(zhǔn)的總線接口,由nGCS片選線、雙向數(shù)據(jù)線DATA、地址線ADDR、以及讀寫控制線nOE和nWE等信號(hào)線組成。另外,EINT是中斷信號(hào)線,F(xiàn)PGA發(fā)起中斷向ARM請(qǐng)求處理。
2 緩沖區(qū)接口軟件設(shè)計(jì)
為了設(shè)計(jì)ARM和FPGA的緩沖區(qū)接口,首先要利用圖1中的信號(hào)線實(shí)現(xiàn)ARM對(duì)FPGA的基本讀寫操作,這需要雙方遵循擬定的接口時(shí)序相互配合進(jìn)行,這可以通過參考相應(yīng)的ARM內(nèi)核CPU用戶手冊(cè),在FPGA端編寫相應(yīng)的接口代碼來配合ARM CPU2端的讀寫時(shí)序?qū)崿F(xiàn)。
下面重點(diǎn)介紹環(huán)形緩沖區(qū)接口的軟件實(shí)現(xiàn)。
2.1 緩沖區(qū)空間設(shè)計(jì)
如上所述,F(xiàn)PGA是作為ARM的一個(gè)存儲(chǔ)器外設(shè)來設(shè)計(jì)的。在本方案中,F(xiàn)PGA存儲(chǔ)器空間包括兩個(gè)部分:寄存器空間和數(shù)據(jù)緩沖區(qū)空間。
寄存器空間用于設(shè)置各種讀寫的參數(shù),包括緩沖區(qū)讀寫指針、緩沖區(qū)忙閑狀態(tài)等;而緩沖區(qū)用于大量數(shù)據(jù)的臨時(shí)存儲(chǔ),按作用分為發(fā)送緩沖區(qū)和接收緩沖區(qū)。設(shè)計(jì)中對(duì)所有空間都采用統(tǒng)一編址方式實(shí)現(xiàn),利用ARM與FPGA之間相連的接口地址線(ADDR)的最高兩位來區(qū)分,例如,00表示寄存器空間,01表示發(fā)送緩沖區(qū)空間、10表示接收緩沖區(qū)空間,11為保留。
在本文的環(huán)形緩沖區(qū)結(jié)構(gòu)設(shè)計(jì)中,發(fā)送(接收)緩沖區(qū)又分為若干大小相同的子緩沖空間,這些子緩沖空間共享同一個(gè)地址空間,由FPGA內(nèi)部的緩沖區(qū)忙閑指示寄存器和子緩沖空間的控制指針來引導(dǎo)ARM對(duì)子緩沖區(qū)的讀寫。子緩沖空間的控制指針循環(huán)依次變化,數(shù)據(jù)幀也循環(huán)依次寫入指針指向的子緩沖空間或被讀走,這樣就構(gòu)成了環(huán)形緩沖區(qū)。
以實(shí)際項(xiàng)目的設(shè)計(jì)為例,發(fā)送(接收)緩沖區(qū)分別由16個(gè)子緩沖空間組成,每個(gè)子緩沖空間的大小為256雙字節(jié),這16個(gè)子緩沖空間共享一個(gè)地址空間。設(shè)計(jì)中的接口地址線一共為10位,數(shù)據(jù)線是16位。每個(gè)數(shù)據(jù)幀的最大長(zhǎng)度也設(shè)置為256雙字節(jié),以便一個(gè)緩沖區(qū)能夠裝滿一個(gè)幀,簡(jiǎn)化緩沖區(qū)管理。以發(fā)送緩沖區(qū)為例,其結(jié)構(gòu)設(shè)計(jì)如圖2所示。
盡管設(shè)置了16個(gè)子緩沖空間來應(yīng)對(duì)可能的突發(fā)數(shù)據(jù)流,為了防止ARM將所有的子緩沖區(qū)寫溢出,在FPGA內(nèi)部設(shè)置了緩沖區(qū)忙閑寄存器指示,當(dāng)所有的子緩沖空間都寫滿后,緩沖區(qū)忙閑指示寄存器設(shè)置為忙。
fpga相關(guān)文章:fpga是什么
評(píng)論