作者:蘇耀峰,王德剛,魏急波
1 引言
軟件無(wú)線電(SDR)技術(shù)近年來(lái)發(fā)展迅速,在無(wú)線通信中的數(shù)字接收機(jī)領(lǐng)域應(yīng)用尤為廣泛。FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)以其高集成度、高可靠性和靈活性,在軟件無(wú)線電平臺(tái)的設(shè)計(jì)中發(fā)揮著重要的核心作用。同時(shí),SDR中的數(shù)據(jù)接口設(shè)計(jì)也是關(guān)鍵的環(huán)節(jié)。以太網(wǎng)是目前最通用的數(shù)據(jù)接口之一,但是中低端FPGA通常不具備以太網(wǎng)接口,這為FPGA在SDR中的應(yīng)用造成了不便。如果為FPGA配置以太網(wǎng)接口,與外部網(wǎng)絡(luò)實(shí)現(xiàn)通信,將有利于SDR平臺(tái)的功能延伸,方便數(shù)據(jù)傳輸和與現(xiàn)有系統(tǒng)接口。
DM9000A是Davicom公司生產(chǎn)的一款功能強(qiáng)大的以太網(wǎng)控制器,支持10/100 M以太網(wǎng)速率,可與嵌入式微處理器(MPU)、單片機(jī)等以多種方式(如ISA總線等)接口,具有體積小、功耗低、配置靈活、使用簡(jiǎn)單等特點(diǎn)。但在傳統(tǒng)應(yīng)用中,很少有將DM9000A和FPGA直接結(jié)合應(yīng)用的實(shí)例,為解決FPGA的以太網(wǎng)接口問(wèn)題,通常的解決方案是采用單片機(jī)或者M(jìn)PU在FPGA和以太網(wǎng)控制器之間進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),但弊端是成本提高和功耗增加。
本文在自行設(shè)計(jì)開(kāi)發(fā)的OQPSK全數(shù)字接收機(jī)中,為實(shí)現(xiàn)高速解調(diào)數(shù)據(jù)的實(shí)時(shí)遠(yuǎn)程傳輸處理及接收機(jī)參數(shù)的遠(yuǎn)程配置,提出了采用FPGA直接控制DM9000A進(jìn)行以太網(wǎng)數(shù)據(jù)收發(fā)的設(shè)計(jì)思路。采用Xilinx系列XC2V1000 FPGA和DM9000A,實(shí)現(xiàn)低成本、低功耗和高速率的SDR平臺(tái)的網(wǎng)絡(luò)傳輸功能,其最高傳輸速率可達(dá)100 Mb/s。
2 DM9000A工作原理
2.1 主要特性和總體結(jié)構(gòu)
DM9000A的主要特性如下:
支持8/16位數(shù)據(jù)總線;
適用于10Base-T和100Base-T;
10/100 M自適應(yīng),適應(yīng)不同的網(wǎng)絡(luò)速率要求;
內(nèi)置16 KB的SRAM,用于收發(fā)緩沖,降低對(duì)主處理器的速度要求;
與IEEE 802.3u兼容,支持IEEE802.3x全雙工,可同時(shí)收發(fā);
具有睡眠模式,可降低功耗;
采用48引腳LQFP封裝,縮小PCB面積。
DM9000A功能結(jié)構(gòu)框圖如圖1所示,DM9000A實(shí)現(xiàn)以太網(wǎng)媒體介質(zhì)訪問(wèn)層(MAC)和物理層(PHY)的功能,包括MAC數(shù)據(jù)幀的組裝/拆分與收發(fā)、地址識(shí)別、CRC編碼/校驗(yàn)、MLT-3編碼器、接收噪聲抑制、輸出脈沖成形、超時(shí)重傳、鏈路完整性測(cè)試、信號(hào)極性檢測(cè)與糾正等。
2.2 工作原理
DM9000A可與微處理器以8 bit或16 bit的總線方式連接,并可根據(jù)需要以單工或全雙工等模式運(yùn)行。在系統(tǒng)上電時(shí),處理器通過(guò)總線配置DM9000A內(nèi)部網(wǎng)絡(luò)控制寄存器(NCR)、中斷寄存器(ISR)等,完成DM9000A的初始化。隨后,DM9000A進(jìn)入數(shù)據(jù)收發(fā)等待狀態(tài)。
當(dāng)處理器要向以太網(wǎng)發(fā)送數(shù)據(jù)幀時(shí),先將數(shù)據(jù)打包成UDP或IP數(shù)據(jù)包,并通過(guò)8 bit或16 bit總線逐字節(jié)發(fā)送到DM9000A的數(shù)據(jù)發(fā)送緩存中,然后將數(shù)據(jù)長(zhǎng)度等信息填充到DM9000A的相應(yīng)寄存器內(nèi),隨后發(fā)送使能命令。DM9000A將緩存的數(shù)據(jù)和數(shù)據(jù)幀信息進(jìn)行MAC組幀,并發(fā)送出去。
當(dāng)DM9000A接收到外部網(wǎng)絡(luò)送來(lái)的以太網(wǎng)數(shù)據(jù)時(shí),首先檢測(cè)數(shù)據(jù)幀的合法性,如果幀頭標(biāo)志有誤或存在CRC校驗(yàn)錯(cuò)誤,則將該幀數(shù)據(jù)丟棄。否則將數(shù)據(jù)幀緩存到內(nèi)部RAM,并通過(guò)中斷標(biāo)志位通知處理器,處理器收到中斷后對(duì)DM9000A接收RAM的數(shù)據(jù)進(jìn)行處理。
DM9000A自動(dòng)檢測(cè)網(wǎng)絡(luò)連接情況,根據(jù)網(wǎng)速設(shè)置內(nèi)部的數(shù)據(jù)收發(fā)速率為10 Mb/s或100 Mb/s。同時(shí),DM9000A還能根據(jù)RJ45接口連接方式改變數(shù)據(jù)收發(fā)引腳的方向,因此無(wú)論外部網(wǎng)線是采用對(duì)等還是交叉方式,系統(tǒng)均能正常通信。
3 SDR接收機(jī)網(wǎng)絡(luò)接口設(shè)計(jì)
在SDR接收機(jī)中,中頻模擬信號(hào)經(jīng)過(guò)A/D轉(zhuǎn)換、數(shù)字下變頻、抽取濾波等解調(diào)處理后,形成連續(xù)的解調(diào)數(shù)據(jù)流,其速率為10 Mb/s。在FPGA內(nèi)部,解調(diào)輸出的數(shù)據(jù)流和以太網(wǎng)接口部分通過(guò)FIFO進(jìn)行緩沖,當(dāng)解調(diào)數(shù)據(jù)達(dá)到規(guī)定的數(shù)據(jù)幀長(zhǎng)度時(shí),F(xiàn)PGA啟動(dòng)以太網(wǎng)發(fā)送程序,將解調(diào)數(shù)據(jù)發(fā)送到DM9000A,完成數(shù)據(jù)發(fā)送過(guò)程。在接收方向,網(wǎng)絡(luò)工作站把控制指令按照一定的幀格式組幀發(fā)送到以太網(wǎng),DM9000A接收到發(fā)給自身的以太網(wǎng)幀并通知FPGA啟動(dòng)以太網(wǎng)接收程序。FPGA將相應(yīng)的數(shù)據(jù)從DM9000A的接收FIFO讀至FPGA內(nèi)部RAM中,利用數(shù)據(jù)中的控制命令配置接收機(jī)參數(shù),完成網(wǎng)絡(luò)對(duì)SDR接收機(jī)的遠(yuǎn)程控制。
3.1 與FPGA的數(shù)據(jù)接口和控制接口
DM9000A的外部總線符合ISA標(biāo)準(zhǔn)。可通過(guò)ISA總線直接與FPGA無(wú)縫連接。其硬件連接原理如圖2所示。
DM9000A內(nèi)部集成了PHY功能,因此與以太網(wǎng)接口可以無(wú)縫連接。如圖3所示。
3.2 DM9000A的FPGA控制
3.2.1 初始化模塊
DM9000A正常工作需要在上電后對(duì)內(nèi)部寄存器進(jìn)行初始化。該過(guò)程是通過(guò)FPGA對(duì)DM9000A外部控制總線和數(shù)據(jù)總線的讀寫(xiě)操作完成的。具體流程如下:
1) 激活PHY
設(shè)置GPR(REG_1F) CEPI00 bit[0]=0;
由于復(fù)位后,DM9000A恢復(fù)默認(rèn)的休眠狀態(tài)以降低功耗,因此需要首先喚醒PHY。
2) 進(jìn)行兩次軟復(fù)位,步驟如下:
設(shè)置NCR(REG_00)bit[2:0]=011;至少保持20μs;
清除NCR(REG_00)bit[2:0]=000;
設(shè)置NCR(REQ_00)bit[2:0]=011;至少保持20μs;
清除NCR(REG_00)bit[2:0]=000;
3) 配置NCR寄存器
設(shè)置NCR(REG_00)bit[2:1]=00;配置為正常模式。
通過(guò)改變?cè)摷拇嫫骺梢赃x擇設(shè)置內(nèi)部或者外部PHY、全雙工或者半雙工模式、使能喚醒事件等網(wǎng)絡(luò)操作。
4) 清除發(fā)送狀態(tài)
設(shè)置NSR(REG_01)bit[5]=1 bit[3]=l bit[2]=l;
5) 設(shè)置IMR寄存器(REG_FF)PAR bit[7]=l;啟用RX/TX FIFO SRAM讀/寫(xiě)地址指針自動(dòng)返回功能。
6) 通過(guò)IMR寄存器(REG_FF)PRM bit[0]/PTM bit[1],對(duì)RX/TX中斷使能。如果需要在一個(gè)數(shù)據(jù)幀發(fā)送完后產(chǎn)生一個(gè)中斷,應(yīng)將PTM bit[1]置為1,如果需要在接收到一幀新數(shù)據(jù)時(shí)產(chǎn)生一個(gè)中斷,應(yīng)將PRM bit[1]置為1;
7) 設(shè)置RCR寄存器,使能數(shù)據(jù)接收功能。
以上步驟完成后.可以通過(guò)LED指示燈觀測(cè)DM9000A是否已成功完成初始化。
3.2.2 數(shù)據(jù)發(fā)送模塊
DM9000A的發(fā)送緩沖區(qū)可同時(shí)存儲(chǔ)兩幀數(shù)據(jù),按照先后順序命名為幀I和幀II,DM9000A上電初始化后,發(fā)送緩存區(qū)的起始地址是00H,當(dāng)前數(shù)據(jù)幀編號(hào)為幀I。兩幀數(shù)據(jù)的狀態(tài)控制字分別記錄在DM9000A的狀態(tài)寄存器03H和04H中。發(fā)送過(guò)程如下:
首先,F(xiàn)PGA利用寫(xiě)操作寄存器MWCMD(REG_F8)向DM9000A的發(fā)送緩存區(qū)中寫(xiě)入發(fā)送數(shù)據(jù)幀,寫(xiě)數(shù)據(jù)幀時(shí)需要先寫(xiě)入6字節(jié)的目的MAC地址,再寫(xiě)入6字節(jié)的源MAC地址,最后寫(xiě)入發(fā)送數(shù)據(jù)。
隨后,F(xiàn)PGA利用寫(xiě)操作寄存器MWCMD(REG_F8)將數(shù)據(jù)幀長(zhǎng)度寫(xiě)入寄存器FCH和FDH,數(shù)據(jù)長(zhǎng)度為16位,將高8位寫(xiě)入寄存器FCH,低8位寫(xiě)入寄存器FDH。
最后,F(xiàn)PGA將發(fā)送控制寄存器TCR(REG_02)的bit[1]置為高電平,向DM9000A發(fā)出發(fā)送數(shù)據(jù)指令。DM9000A自動(dòng)進(jìn)行一些處理才將數(shù)據(jù)發(fā)送至以太網(wǎng),包括:插入報(bào)頭和幀起始分隔符;插入來(lái)自上層協(xié)議的數(shù)據(jù),如果數(shù)據(jù)量小于64字節(jié),則自動(dòng)補(bǔ)齊64字節(jié);根據(jù)目標(biāo)地址、源地址、長(zhǎng)度/類(lèi)型和數(shù)據(jù)產(chǎn)生CRC校驗(yàn)序列,并插入校驗(yàn)序列位。這些處理都無(wú)需FPGA干預(yù)。處理完畢后,DM9000A即開(kāi)始發(fā)送幀I。在幀I發(fā)送的同時(shí),幀II的數(shù)據(jù)即可寫(xiě)入發(fā)送緩存區(qū)。在幀I發(fā)送完后,將幀II的數(shù)據(jù)長(zhǎng)度寫(xiě)入寄存器FCH和FDH,最后將發(fā)送控制寄存器NSR(REG_01)的bit[1]置為高電平,即可開(kāi)始幀II的發(fā)送。依此類(lèi)推,下面發(fā)送的幀將會(huì)繼續(xù)編號(hào)為幀I,幀II,幀I,幀II……按照同樣的方式發(fā)送。
如果FPGA將中斷屏蔽寄存器IMR(REG_FF)的bit[1]置為高電平,那么發(fā)送完畢后,DM9000A將會(huì)產(chǎn)生一個(gè)指示發(fā)送完成的中斷信號(hào)。在發(fā)送過(guò)程中,F(xiàn)PGA可以查詢(xún)寄存器標(biāo)志位寄存器NSR(REG_01)中的TX1END bit[2]或者TX2END bit[3]得到數(shù)據(jù)幀的發(fā)送狀態(tài)。
發(fā)送流程如圖4所示。寄存器ISR中的PTS標(biāo)志位是發(fā)送中斷標(biāo)志位,當(dāng)一幀數(shù)據(jù)發(fā)送完畢,PTS=0,F(xiàn)PGA檢測(cè)到該標(biāo)志后,應(yīng)清除標(biāo)志位以便發(fā)送新的數(shù)據(jù)幀。這里需要注意的是,向FC、FD所寫(xiě)的幀長(zhǎng)度應(yīng)該是包含目的MAC地址段、源MAC地址段和有效數(shù)據(jù)的總長(zhǎng)度。
3.2.3 接收模塊
DM9000A中的接收緩存區(qū)是一個(gè)環(huán)形結(jié)構(gòu),初始化后的起始地址為0C00H,每幀數(shù)據(jù)都有4字節(jié)長(zhǎng)的首部,然后是有效數(shù)據(jù)和CRC校驗(yàn)序列。首部4字節(jié)依次是01H、狀態(tài)、長(zhǎng)度低字節(jié)和長(zhǎng)度高字節(jié),幀結(jié)構(gòu)如圖5所示。
首部4字節(jié)含義如下:
第一個(gè)字節(jié)用于檢測(cè)接收緩存區(qū)中是否有數(shù)據(jù)。如果這個(gè)字節(jié)是01 H,表明接收到了數(shù)據(jù);如果為00H,則說(shuō)明沒(méi)有數(shù)據(jù)。但是如果第一個(gè)字節(jié)既不是01H,也不是00H,DM9000A就必須作一次軟復(fù)位來(lái)從這種異常狀態(tài)中恢復(fù)。
第二個(gè)字節(jié)存儲(chǔ)以太網(wǎng)幀狀態(tài),由此可判斷所接收幀是否正確。
第三和第四字節(jié)存儲(chǔ)以太網(wǎng)幀長(zhǎng)度。后續(xù)的字節(jié)就是有效數(shù)據(jù)。
接收過(guò)程如下:
查看中斷狀態(tài)寄存器。如果接收到新數(shù)據(jù),寄存器ISR的PRS位將被置為0;
如果檢測(cè)到PRS=0,清除PRS,F(xiàn)PGA開(kāi)始讀取接收緩存區(qū)數(shù)據(jù)。如果第一個(gè)字節(jié)是01H,則說(shuō)明有數(shù)據(jù);如果是00H,則說(shuō)明無(wú)數(shù)據(jù),需要進(jìn)行復(fù)位;
根據(jù)獲取的長(zhǎng)度信息,判斷是否讀完一幀。如果讀完,接著讀下一幀,直到遇到首字節(jié)是00H的幀,說(shuō)明接收數(shù)據(jù)已讀完。FPGA可以重新查看中斷狀態(tài)寄存器,等待新的有效數(shù)據(jù)幀。接收流程如圖6所示。
4 結(jié)束語(yǔ)
本文對(duì)以太網(wǎng)控制器DM9000A的原理和功能進(jìn)行介紹,并結(jié)合自行開(kāi)發(fā)的SDR接收機(jī)平臺(tái)。基于FPGA設(shè)計(jì)實(shí)現(xiàn)了100 M以太網(wǎng)接口。其設(shè)計(jì)思路新穎,硬件連接簡(jiǎn)單。整體系統(tǒng)具有功耗低、體積小、運(yùn)行穩(wěn)定可靠等優(yōu)點(diǎn)。SDR平臺(tái)的開(kāi)發(fā)融入網(wǎng)絡(luò)設(shè)計(jì)理念,在應(yīng)用中有廣泛的前景,大大拓寬了SDR的功能。擴(kuò)展了SDR的應(yīng)用領(lǐng)域。
責(zé)任編輯:gt
-
FPGA
+關(guān)注
關(guān)注
1645文章
22040瀏覽量
618196 -
微處理器
+關(guān)注
關(guān)注
11文章
2383瀏覽量
84153 -
無(wú)線電
+關(guān)注
關(guān)注
61文章
2173瀏覽量
117977
發(fā)布評(píng)論請(qǐng)先 登錄
DM9000A,DM9000C網(wǎng)絡(luò)接口電路圖
FPGA控制DM9000A進(jìn)行以太網(wǎng)數(shù)據(jù)收發(fā)的Verilog實(shí)現(xiàn)
DM9000A嵌入
采用DM9000A實(shí)現(xiàn)DSP以太網(wǎng)接口設(shè)計(jì)
如何利用ARM11驅(qū)動(dòng)DM9000A實(shí)現(xiàn)以太網(wǎng)通信?
怎么用XC2V1000型FPGA實(shí)現(xiàn)FIR抽取濾波器的設(shè)計(jì)
dm9000/dm9000a linux驅(qū)動(dòng)程序 (Ethe
伺服控制系統(tǒng)的DM9000A以太網(wǎng)接口設(shè)計(jì)
DM9000A原理及其與基帶信號(hào)處理平臺(tái)的結(jié)合應(yīng)用
全數(shù)字跟蹤接收機(jī)的設(shè)計(jì)與實(shí)現(xiàn)

評(píng)論